vcomply-workflow-engine 3.4.32 → 3.4.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/log-an-issue/log-an-issue.component.mjs +9 -24
- package/esm2020/lib/workflow-policy/workflow-policy.component.mjs +6 -6
- package/esm2020/lib/workflow-services/log-issue.service.mjs +140 -39
- package/fesm2015/vcomply-workflow-engine.mjs +180 -92
- package/fesm2015/vcomply-workflow-engine.mjs.map +1 -1
- package/fesm2020/vcomply-workflow-engine.mjs +152 -66
- package/fesm2020/vcomply-workflow-engine.mjs.map +1 -1
- package/lib/log-an-issue/log-an-issue.component.d.ts +3 -1
- package/lib/workflow-services/log-issue.service.d.ts +1 -0
- package/package.json +1 -1
|
@@ -11,7 +11,9 @@ export class LogIssueService {
|
|
|
11
11
|
this.authService = authService;
|
|
12
12
|
this.convertFrom12To24Format = (time12) => {
|
|
13
13
|
if (time12) {
|
|
14
|
-
const [sHours, minutes, period] = time12
|
|
14
|
+
const [sHours, minutes, period] = time12
|
|
15
|
+
.match(/([0-9]{1,2}):([0-9]{2}) (am|pm|AM|PM)/)
|
|
16
|
+
.slice(1);
|
|
15
17
|
const PM = period === 'PM';
|
|
16
18
|
const hours = (+sHours % 12) + (PM ? 12 : 0);
|
|
17
19
|
return `${('0' + hours).slice(-2)}:${minutes}:00`;
|
|
@@ -45,15 +47,23 @@ export class LogIssueService {
|
|
|
45
47
|
}
|
|
46
48
|
getResponsibilityCenterList() {
|
|
47
49
|
const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
|
|
48
|
-
return this.http
|
|
50
|
+
return this.http
|
|
51
|
+
.get(this.env.complianceGet + 'responsibilityCenterTree', {
|
|
52
|
+
headers,
|
|
53
|
+
})
|
|
54
|
+
.pipe(retry(2));
|
|
49
55
|
}
|
|
50
56
|
createIssue(payload) {
|
|
51
57
|
const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
|
|
52
|
-
return this.http
|
|
58
|
+
return this.http
|
|
59
|
+
.post(this.env.assurance + 'Issue', payload, { headers })
|
|
60
|
+
.pipe(retry(2));
|
|
53
61
|
}
|
|
54
62
|
updateIssue(payload, issueId) {
|
|
55
63
|
const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
|
|
56
|
-
return this.http
|
|
64
|
+
return this.http
|
|
65
|
+
.put(this.env.assurance + 'Issue/' + issueId, payload, { headers })
|
|
66
|
+
.pipe(retry(2));
|
|
57
67
|
}
|
|
58
68
|
getControlRisk(auditPlanId, type) {
|
|
59
69
|
// Get Linked Audit Plan Responsibilities by Audit_Plan_Id
|
|
@@ -63,22 +73,28 @@ export class LogIssueService {
|
|
|
63
73
|
// Method: GET
|
|
64
74
|
const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
|
|
65
75
|
if (type === 'RESPONSIBILITY') {
|
|
66
|
-
return this.http
|
|
76
|
+
return this.http
|
|
77
|
+
.get(this.env.responsibilitiesGet +
|
|
78
|
+
'manage_audit_plan_responsibilities&id=' +
|
|
79
|
+
auditPlanId, { headers })
|
|
80
|
+
.pipe(map((items) => {
|
|
67
81
|
return items.map((item) => ({
|
|
68
82
|
itemId: item?.report_id,
|
|
69
83
|
itemControlId: item?.control_id,
|
|
70
84
|
itemControlName: item?.report_name,
|
|
71
|
-
itemType: 'RESPONSIBILITY'
|
|
85
|
+
itemType: 'RESPONSIBILITY',
|
|
72
86
|
}));
|
|
73
87
|
}));
|
|
74
88
|
}
|
|
75
89
|
else if (type === 'RISK') {
|
|
76
|
-
return this.http
|
|
90
|
+
return this.http
|
|
91
|
+
.get(this.env.risk + 'risk/manage_audit_plan_risk&id=' + auditPlanId, { headers })
|
|
92
|
+
.pipe(map((items) => {
|
|
77
93
|
return items.map((item) => ({
|
|
78
94
|
itemId: item?.risk_id,
|
|
79
95
|
itemControlId: item?.risk_control_id,
|
|
80
96
|
itemControlName: item?.title,
|
|
81
|
-
itemType: 'RISK'
|
|
97
|
+
itemType: 'RISK',
|
|
82
98
|
}));
|
|
83
99
|
}));
|
|
84
100
|
}
|
|
@@ -100,38 +116,73 @@ export class LogIssueService {
|
|
|
100
116
|
if (!issueData.issueDueDate) {
|
|
101
117
|
errors.push('issueDueDate');
|
|
102
118
|
}
|
|
103
|
-
if (issueData.issueRecommendation
|
|
119
|
+
if (issueData.issueRecommendation
|
|
120
|
+
.replace(/ /g, '')
|
|
121
|
+
.replace(/\<br\s*[\/]?>/gi, '')
|
|
122
|
+
.trim().length === 0) {
|
|
104
123
|
errors.push('issueRecommendation');
|
|
105
124
|
}
|
|
106
125
|
return errors;
|
|
107
126
|
}
|
|
108
127
|
generatePayload(issueData, optionFieldsStatus) {
|
|
109
128
|
const selectedDate = new Date(issueData.issueDueDate);
|
|
110
|
-
const dateSplit = [
|
|
129
|
+
const dateSplit = [
|
|
130
|
+
selectedDate.getFullYear(),
|
|
131
|
+
selectedDate.getMonth() + 1,
|
|
132
|
+
selectedDate.getDate(),
|
|
133
|
+
];
|
|
111
134
|
const time = this.convertFrom12To24Format(issueData.issueDueTime).split(':');
|
|
112
135
|
const date = new Date(dateSplit[0], dateSplit[1] - 1, dateSplit[2], time[0], time[1], 0);
|
|
113
136
|
const createIssue = {
|
|
114
137
|
issue_description_attachments: issueData?.issueDescriptionAttachements,
|
|
115
|
-
associated_risk: optionFieldsStatus.ASSOCIATED_RISKS
|
|
138
|
+
associated_risk: optionFieldsStatus.ASSOCIATED_RISKS
|
|
139
|
+
? issueData.issueAssociatedRisk
|
|
140
|
+
: '',
|
|
116
141
|
issue_name: issueData.issueName,
|
|
117
142
|
report_id: '0',
|
|
118
143
|
issue_description: issueData.issueDescription,
|
|
119
|
-
issue_type: optionFieldsStatus.ISSUE_TYPE
|
|
120
|
-
|
|
144
|
+
issue_type: optionFieldsStatus.ISSUE_TYPE
|
|
145
|
+
? this.arrayToId(issueData.issueType, 'issue_id').toString()
|
|
146
|
+
: '',
|
|
147
|
+
exception_type: optionFieldsStatus.EXCEPTION_TYPE
|
|
148
|
+
? issueData.exceptionType.toString()
|
|
149
|
+
: '',
|
|
121
150
|
risk_class: issueData.issueRiskRating.toString() ?? '',
|
|
122
|
-
priority: optionFieldsStatus.PRIORITY
|
|
151
|
+
priority: optionFieldsStatus.PRIORITY
|
|
152
|
+
? issueData.issuePriority.toString()
|
|
153
|
+
: '',
|
|
123
154
|
issue_category_id: this.arrayToId(issueData.issueCategory, 'category_id') ?? 0,
|
|
124
155
|
recommendation: issueData.issueRecommendation,
|
|
125
156
|
entrusted_to: this.arrayToId(issueData.entrustTo, 'employee_id') ?? 0,
|
|
126
|
-
issue_date: dateSplit[0] +
|
|
157
|
+
issue_date: dateSplit[0] +
|
|
158
|
+
'-' +
|
|
159
|
+
dateSplit[1] +
|
|
160
|
+
'-' +
|
|
161
|
+
dateSplit[2] +
|
|
162
|
+
' ' +
|
|
163
|
+
this.convertFrom12To24Format(issueData.issueDueTime),
|
|
127
164
|
failed_time: this.convertFrom12To24Format(issueData.issueDueTime),
|
|
128
|
-
issue_due_date: dateSplit[0] +
|
|
165
|
+
issue_due_date: dateSplit[0] +
|
|
166
|
+
'-' +
|
|
167
|
+
dateSplit[1] +
|
|
168
|
+
'-' +
|
|
169
|
+
dateSplit[2] +
|
|
170
|
+
' ' +
|
|
171
|
+
this.convertFrom12To24Format(issueData.issueDueTime),
|
|
129
172
|
grc_area: '',
|
|
130
|
-
cc_employee_email: optionFieldsStatus.OVERSIGHT
|
|
131
|
-
|
|
173
|
+
cc_employee_email: optionFieldsStatus.OVERSIGHT
|
|
174
|
+
? this.arrayToIDsDtring(issueData.issueCCUsers, 'employee_email')
|
|
175
|
+
: '',
|
|
176
|
+
failure_cc_employee_email: optionFieldsStatus.OVERSIGHT
|
|
177
|
+
? this.arrayToIDsDtring(issueData.failureCCUsers, 'employee_email')
|
|
178
|
+
: '',
|
|
132
179
|
custom_tag_value: '',
|
|
133
180
|
issue_resolve_timestamp: (date.getTime() / 1000).toString(),
|
|
134
|
-
evidence_upload_flag: optionFieldsStatus.EVIDENCE
|
|
181
|
+
evidence_upload_flag: optionFieldsStatus.EVIDENCE
|
|
182
|
+
? issueData.evidenceRequired
|
|
183
|
+
? '1'
|
|
184
|
+
: '0'
|
|
185
|
+
: '0',
|
|
135
186
|
};
|
|
136
187
|
if (issueData.issueRC.length) {
|
|
137
188
|
createIssue.rc_id = this.arrayToId(issueData.issueRC, 'rc_id') ?? 0;
|
|
@@ -140,39 +191,81 @@ export class LogIssueService {
|
|
|
140
191
|
}
|
|
141
192
|
payloadBuilder(issueData, optionFieldsStatus) {
|
|
142
193
|
const selectedDate = new Date(issueData.issueDueDate);
|
|
143
|
-
const dateSplit = [
|
|
194
|
+
const dateSplit = [
|
|
195
|
+
selectedDate.getFullYear(),
|
|
196
|
+
selectedDate.getMonth() + 1,
|
|
197
|
+
selectedDate.getDate(),
|
|
198
|
+
];
|
|
144
199
|
const payload = {
|
|
145
200
|
description: [],
|
|
146
201
|
associated_risk: [],
|
|
147
|
-
recommendation: []
|
|
202
|
+
recommendation: [],
|
|
148
203
|
};
|
|
149
204
|
payload.title = issueData.issueName ?? '';
|
|
150
|
-
payload.rc_id = issueData.issueRC.length
|
|
151
|
-
|
|
205
|
+
payload.rc_id = issueData.issueRC.length
|
|
206
|
+
? this.getArrayId(issueData.issueRC, 'rc_id')
|
|
207
|
+
: [];
|
|
208
|
+
payload.category_id = issueData.issueCategory.length
|
|
209
|
+
? this.arrayToId(issueData.issueCategory, 'category_id')
|
|
210
|
+
: null;
|
|
152
211
|
payload.description[0] = {
|
|
153
212
|
text: issueData.issueDescription ?? '',
|
|
154
|
-
attachments: issueData?.issueDescriptionAttachements.length
|
|
213
|
+
attachments: issueData?.issueDescriptionAttachements.length
|
|
214
|
+
? issueData?.issueDescriptionAttachements
|
|
215
|
+
: [],
|
|
155
216
|
};
|
|
156
|
-
payload.exception_type = optionFieldsStatus.EXCEPTION_TYPE
|
|
217
|
+
payload.exception_type = optionFieldsStatus.EXCEPTION_TYPE
|
|
218
|
+
? Number(issueData.exceptionType)
|
|
219
|
+
: null;
|
|
157
220
|
payload.risk_class = issueData.issueRiskRating ?? null;
|
|
158
|
-
payload.priority = optionFieldsStatus.PRIORITY
|
|
159
|
-
|
|
221
|
+
payload.priority = optionFieldsStatus.PRIORITY
|
|
222
|
+
? Number(issueData.issuePriority)
|
|
223
|
+
: null;
|
|
224
|
+
payload.assignee_id = issueData.entrustTo
|
|
225
|
+
? this.arrayToId(issueData.entrustTo, 'my_member_id')
|
|
226
|
+
: null;
|
|
160
227
|
payload.associated_risk[0] = {
|
|
161
|
-
text: optionFieldsStatus.ASSOCIATED_RISKS
|
|
162
|
-
|
|
228
|
+
text: optionFieldsStatus.ASSOCIATED_RISKS
|
|
229
|
+
? issueData.issueAssociatedRisk
|
|
230
|
+
: '',
|
|
231
|
+
attachments: [],
|
|
163
232
|
};
|
|
164
233
|
payload.recommendation[0] = {
|
|
165
234
|
text: issueData.issueRecommendation ?? '',
|
|
166
|
-
attachments: issueData?.recommendedActionsAttachments.length
|
|
235
|
+
attachments: issueData?.recommendedActionsAttachments.length
|
|
236
|
+
? issueData?.recommendedActionsAttachments
|
|
237
|
+
: [],
|
|
238
|
+
};
|
|
239
|
+
payload.evidence = {
|
|
240
|
+
evidence_flag: optionFieldsStatus.EVIDENCE
|
|
241
|
+
? issueData.evidenceRequired
|
|
242
|
+
? 1
|
|
243
|
+
: 0
|
|
244
|
+
: 0,
|
|
167
245
|
};
|
|
168
|
-
payload.evidence = { evidence_flag: optionFieldsStatus.EVIDENCE ? (issueData.evidenceRequired ? 1 : 0) : 0 };
|
|
169
246
|
payload.frequency_details = {
|
|
170
247
|
frequency_time: this.convertFrom12To24Format(issueData.issueDueTime) ?? '',
|
|
171
|
-
frequency_date: dateSplit[0] +
|
|
248
|
+
frequency_date: dateSplit[0] +
|
|
249
|
+
'-' +
|
|
250
|
+
(dateSplit[1] < 10 ? '0' + dateSplit[1] : dateSplit[1]) +
|
|
251
|
+
'-' +
|
|
252
|
+
(dateSplit[2] < 10 ? '0' + dateSplit[2] : dateSplit[2]),
|
|
172
253
|
};
|
|
173
254
|
payload.overseer = {
|
|
174
|
-
cc_email: optionFieldsStatus.OVERSIGHT
|
|
175
|
-
|
|
255
|
+
cc_email: optionFieldsStatus.OVERSIGHT
|
|
256
|
+
? issueData.issueCCUsers.length
|
|
257
|
+
? issueData.issueCCUsers.map((x) => {
|
|
258
|
+
return { member_id: x.my_member_id ?? 0, alert_enable: 1 };
|
|
259
|
+
})
|
|
260
|
+
: []
|
|
261
|
+
: [],
|
|
262
|
+
failure_cc_email: optionFieldsStatus.OVERSIGHT
|
|
263
|
+
? issueData.failureCCUsers.length
|
|
264
|
+
? issueData.failureCCUsers.map((x) => {
|
|
265
|
+
return { member_id: x.my_member_id ?? 0, alert_enable: 1 };
|
|
266
|
+
})
|
|
267
|
+
: []
|
|
268
|
+
: [],
|
|
176
269
|
};
|
|
177
270
|
payload.custom_tags = issueData?.issueCustomTag;
|
|
178
271
|
payload.issueType = issueData?.issueType;
|
|
@@ -186,12 +279,18 @@ export class LogIssueService {
|
|
|
186
279
|
return array[0][key];
|
|
187
280
|
}
|
|
188
281
|
}
|
|
282
|
+
getArrayId(array, key) {
|
|
283
|
+
return array.map((ele) => ele[key]);
|
|
284
|
+
}
|
|
189
285
|
convertFrom24To12Format(time) {
|
|
190
286
|
const hhmm = time.split(':');
|
|
191
287
|
time = `${hhmm[0]}:${hhmm[1]}`;
|
|
192
288
|
// Check correct time format and split into components
|
|
193
|
-
time = time
|
|
194
|
-
|
|
289
|
+
time = time
|
|
290
|
+
.toString()
|
|
291
|
+
.match(/^([01]\d|2[0-3])(:)([0-5]\d)(:[0-5]\d)?$/) || [time];
|
|
292
|
+
if (time.length > 1) {
|
|
293
|
+
// If time format correct
|
|
195
294
|
time = time.slice(1); // Remove full string match value
|
|
196
295
|
time[5] = +time[0] < 12 ? ' AM' : ' PM'; // Set AM/PM
|
|
197
296
|
time[0] = +time[0] % 12 || 12; // Adjust hours
|
|
@@ -219,7 +318,9 @@ export class LogIssueService {
|
|
|
219
318
|
}
|
|
220
319
|
getIssueDetails(issueId) {
|
|
221
320
|
const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
|
|
222
|
-
return this.http
|
|
321
|
+
return this.http
|
|
322
|
+
.get(this.env.assurance + 'Issue/Edit/' + issueId, { headers })
|
|
323
|
+
.pipe(retry(3));
|
|
223
324
|
}
|
|
224
325
|
}
|
|
225
326
|
LogIssueService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: LogIssueService, deps: [{ token: i1.HttpClient }, { token: i2.AuthService }, { token: i3.Configurations, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -227,9 +328,9 @@ LogIssueService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", vers
|
|
|
227
328
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: LogIssueService, decorators: [{
|
|
228
329
|
type: Injectable,
|
|
229
330
|
args: [{
|
|
230
|
-
providedIn: 'root'
|
|
331
|
+
providedIn: 'root',
|
|
231
332
|
}]
|
|
232
333
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.AuthService }, { type: i3.Configurations, decorators: [{
|
|
233
334
|
type: Optional
|
|
234
335
|
}] }]; } });
|
|
235
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLWlzc3VlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi93b3JrZmxvdy1zZXJ2aWNlcy9sb2ctaXNzdWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFRNUMsTUFBTSxPQUFPLGVBQWU7SUFFMUIsWUFBb0IsSUFBZ0IsRUFBVSxXQUF3QixFQUFjLE1BQXVCO1FBQXZGLFNBQUksR0FBSixJQUFJLENBQVk7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQW1NdkUsNEJBQXVCLEdBQUcsQ0FBQyxNQUFXLEVBQUUsRUFBRTtZQUN6QyxJQUFHLE1BQU0sRUFBQztnQkFDUixNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqRyxNQUFNLEVBQUUsR0FBRyxNQUFNLEtBQUssSUFBSSxDQUFDO2dCQUMzQixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUU3QyxPQUFPLEdBQUcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxLQUFLLENBQUM7YUFDbkQ7aUJBQUk7Z0JBQ0gsT0FBTyxVQUFV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Q0YsV0FBVyxDQUFDLE9BQVksRUFBRSxJQUFTO1FBQ2xDLElBQUk7UUFDSiwwQkFBMEI7UUFDMUIsdUJBQXVCO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixHQUFHLFFBQVEsR0FBSSxtQkFBbUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBRUQsZUFBZSxDQUFDLE9BQWU7UUFDN0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO1FBQ3pGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUMsYUFBYSxHQUFDLE9BQU8sRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFGLENBQUM7OzRHQTNQVSxlQUFlO2dIQUFmLGVBQWUsY0FGZCxNQUFNOzJGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFHMEUsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBtYXAsIHJldHJ5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9ucyB9IGZyb20gJy4uL2NvbmZpZ3VyYXRpb25zJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XHJcblxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9nSXNzdWVTZXJ2aWNlIHtcclxuICBlbnYgITogYW55O1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsIEBPcHRpb25hbCgpIGNvbmZpZz86IENvbmZpZ3VyYXRpb25zKSB7XHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIHRoaXMuZW52ID0gY29uZmlnLmVudkNvbmZpZztcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0SXNzdWVUeXBlcygpe1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgndG9rZW4nLCB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgIC5nZXQ8YW55W10+KHRoaXMuZW52Lm9yZ2FuaXphdGlvbkdldCArICdpc3N1ZVR5cGVMaXN0Jywge2hlYWRlcnN9KVxyXG4gICAgLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3JnUGVvcGxlKCl7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCd0b2tlbicsIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgLmdldDxhbnlbXT4odGhpcy5lbnYub3JnYW5pemF0aW9uR2V0ICsgJ3Blb3BsZScsIHtoZWFkZXJzfSlcclxuICAgIC5waXBlKHJldHJ5KDIpKTtcclxuICB9XHJcblxyXG4gIGdldElzc3VlQ2F0ZWdvcmllcygpe1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgndG9rZW4nLCB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgIC5nZXQ8YW55W10+KHRoaXMuZW52LmFzc3VyYW5jZSArICdJc3N1ZS9DYXRlZ29yeS9DYXRMaXN0P2NhdGVnb3JpZXM9dHJ1ZScsIHtoZWFkZXJzfSlcclxuICAgIC5waXBlKHJldHJ5KDIpKTtcclxuICAgIC8vaHR0cHM6Ly9kZXZhcGkudi1jb21wbHkuY29tL0Fzc3VyYW5jZS9Jc3N1ZS9DYXRlZ29yeS9DYXRMaXN0LzE/aXNCdXNpbmVzc0N5Y2xlPXRydWUmY2F0ZWdvcmllcz10cnVlXHJcbiAgfVxyXG4gIGdldFJlc3BvbnNpYmlsaXR5Q2VudGVyTGlzdCgpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoJ3Rva2VuJywgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnlbXT4odGhpcy5lbnYuY29tcGxpYW5jZUdldCArICdyZXNwb25zaWJpbGl0eUNlbnRlclRyZWUnLCB7IGhlYWRlcnMgfSkucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG4gIGNyZWF0ZUlzc3VlKHBheWxvYWQ6IGFueSl7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCd0b2tlbicsIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuZW52LmFzc3VyYW5jZSsnSXNzdWUnLCBwYXlsb2FkLCB7aGVhZGVyc30pLnBpcGUoXHJcbiAgICByZXRyeSgyKVxyXG4gICAgKTtcclxuICB9XHJcbiAgdXBkYXRlSXNzdWUocGF5bG9hZDogYW55LGlzc3VlSWQ6IHN0cmluZyl7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KCd0b2tlbicsIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5lbnYuYXNzdXJhbmNlKydJc3N1ZS8nK2lzc3VlSWQsIHBheWxvYWQsIHtoZWFkZXJzfSkucGlwZShcclxuICAgIHJldHJ5KDIpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udHJvbFJpc2soYXVkaXRQbGFuSWQ6c3RyaW5nLCB0eXBlOnN0cmluZyl7XHJcbi8vICAgICBHZXQgTGlua2VkIEF1ZGl0IFBsYW4gUmVzcG9uc2liaWxpdGllcyBieSBBdWRpdF9QbGFuX0lkXHJcbi8vIFVSTDogaHR0cHM6Ly9kZXZhcGkudi1jb21wbHkuY29tL3Jlc3BvbnNpYmlsaXRpZXMvP21vZGU9bWFuYWdlX2F1ZGl0X3BsYW5fcmVzcG9uc2liaWxpdGllcyZpZD02MTBiMzI5MTQ0YzgxYTAwMDljYmI1OTggTWV0aG9kOiBHRVRcclxuXHJcblxyXG5cclxuLy8gR2V0IExpbmtlZCBBdWRpdCBQbGFuIFJpc2sgYnkgQXVkaXRfUGxhbl9JZFxyXG4vLyBVUkw6IGh0dHBzOi8vZGV2YXBpLnYtY29tcGx5LmNvbS9yaXNrLz9tb2RlPXJpc2svbWFuYWdlX2F1ZGl0X3BsYW5fcmlzayZpZD02MTBiMzI5MTQ0YzgxYTAwMDljYmI1OThcclxuLy8gTWV0aG9kOiBHRVRcclxuY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgndG9rZW4nLCB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpKTtcclxuICBpZih0eXBlID09PSAnUkVTUE9OU0lCSUxJVFknKXtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueVtdPih0aGlzLmVudi5yZXNwb25zaWJpbGl0aWVzR2V0KydtYW5hZ2VfYXVkaXRfcGxhbl9yZXNwb25zaWJpbGl0aWVzJmlkPScrYXVkaXRQbGFuSWQse2hlYWRlcnN9KS5waXBlKFxyXG4gICAgICBtYXAoKGl0ZW1zOmFueSkgPT57XHJcbiAgICAgICAgICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbTphbnkpPT4oe1xyXG4gICAgICAgICAgICAgaXRlbUlkOiBpdGVtPy5yZXBvcnRfaWQsXHJcbiAgICAgICAgICAgICBpdGVtQ29udHJvbElkIDppdGVtPy5jb250cm9sX2lkLFxyXG4gICAgICAgICAgICAgaXRlbUNvbnRyb2xOYW1lIDogaXRlbT8ucmVwb3J0X25hbWUsXHJcbiAgICAgICAgICAgICBpdGVtVHlwZSA6ICdSRVNQT05TSUJJTElUWSdcclxuICAgICAgICAgICB9KVxyXG4gICAgICAgICAgIClcclxuICAgICAgfVxyXG4gICAgICApXHJcbiAgICApXHJcbiAgfWVsc2UgaWYodHlwZSA9PT0gJ1JJU0snKXtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueVtdPih0aGlzLmVudi5yaXNrKydyaXNrL21hbmFnZV9hdWRpdF9wbGFuX3Jpc2smaWQ9JythdWRpdFBsYW5JZCx7aGVhZGVyc30pLnBpcGUoXHJcbiAgICAgIG1hcCgoaXRlbXM6YW55KSA9PntcclxuICAgICAgICAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtOmFueSk9Pih7XHJcbiAgICAgICAgICAgICBpdGVtSWQ6IGl0ZW0/LnJpc2tfaWQsXHJcbiAgICAgICAgICAgICBpdGVtQ29udHJvbElkIDppdGVtPy5yaXNrX2NvbnRyb2xfaWQsXHJcbiAgICAgICAgICAgICBpdGVtQ29udHJvbE5hbWUgOiBpdGVtPy50aXRsZSxcclxuICAgICAgICAgICAgIGl0ZW1UeXBlIDogJ1JJU0snXHJcbiAgICAgICAgICAgfSlcclxuICAgICAgICAgICApXHJcbiAgICAgIH1cclxuICAgICAgKVxyXG4gICAgKVxyXG4gIH1lbHNle1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuICB2YWxpZGF0ZShpc3N1ZURhdGE6IGFueSwgb3BlbmVkRnJvbTogYW55LGlzUkNNYW5kYXRvcnk6YW55KXtcclxuICAgIGNvbnN0IGVycm9ycyA9IFtdO1xyXG4gICAgaWYgKCFpc3N1ZURhdGEuaXNzdWVOYW1lICB8fCBpc3N1ZURhdGEuaXNzdWVOYW1lLnRyaW0oKS5sZW5ndGggPT09IDAgKXtcclxuICAgICAgZXJyb3JzLnB1c2goJ2lzc3VlTmFtZScpO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzc3VlRGF0YS5pc3N1ZVJDLmxlbmd0aCA9PT0gMCAmJiBpc1JDTWFuZGF0b3J5KXtcclxuICAgICAgZXJyb3JzLnB1c2goJ2lzc3VlUkMnKTtcclxuICAgIH1cclxuICAgIGlmIChpc3N1ZURhdGEuZW50cnVzdFRvLmxlbmd0aCA9PT0gMCApe1xyXG4gICAgICBlcnJvcnMucHVzaCgnZW50cnVzdFRvJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzc3VlRGF0YS5pc3N1ZUR1ZURhdGUpe1xyXG4gICAgICBlcnJvcnMucHVzaCgnaXNzdWVEdWVEYXRlJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNzdWVEYXRhLmlzc3VlUmVjb21tZW5kYXRpb24ucmVwbGFjZSgvJm5ic3A7L2csICcnKS5yZXBsYWNlKC9cXDxiclxccypbXFwvXT8+L2dpLCAnJykudHJpbSgpLmxlbmd0aCA9PT0gMCApe1xyXG4gICAgICBlcnJvcnMucHVzaCgnaXNzdWVSZWNvbW1lbmRhdGlvbicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVycm9ycztcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlUGF5bG9hZChpc3N1ZURhdGE6IGFueSwgb3B0aW9uRmllbGRzU3RhdHVzOiBhbnkpe1xyXG4gICAgY29uc3Qgc2VsZWN0ZWREYXRlID0gbmV3IERhdGUoaXNzdWVEYXRhLmlzc3VlRHVlRGF0ZSk7XHJcbiAgICBjb25zdCBkYXRlU3BsaXQgPSBbc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCksIHNlbGVjdGVkRGF0ZS5nZXRNb250aCgpICsgMSwgc2VsZWN0ZWREYXRlLmdldERhdGUoKV07XHJcbiAgICBjb25zdCB0aW1lOiBhbnkgPSB0aGlzLmNvbnZlcnRGcm9tMTJUbzI0Rm9ybWF0KGlzc3VlRGF0YS5pc3N1ZUR1ZVRpbWUpLnNwbGl0KCc6Jyk7XHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoZGF0ZVNwbGl0WzBdLCBkYXRlU3BsaXRbMV0gLSAxLGRhdGVTcGxpdFsyXSwgdGltZVswXSwgdGltZVsxXSwgMCk7XHJcblxyXG4gICAgY29uc3QgY3JlYXRlSXNzdWU6IGFueSA9IHtcclxuICAgICAgaXNzdWVfZGVzY3JpcHRpb25fYXR0YWNobWVudHM6IGlzc3VlRGF0YT8uaXNzdWVEZXNjcmlwdGlvbkF0dGFjaGVtZW50cyxcclxuICAgICAgYXNzb2NpYXRlZF9yaXNrOiBvcHRpb25GaWVsZHNTdGF0dXMuQVNTT0NJQVRFRF9SSVNLUyA/IGlzc3VlRGF0YS5pc3N1ZUFzc29jaWF0ZWRSaXNrOicnLFxyXG4gICAgICBpc3N1ZV9uYW1lOiBpc3N1ZURhdGEuaXNzdWVOYW1lLFxyXG4gICAgICByZXBvcnRfaWQ6ICcwJyxcclxuICAgICAgaXNzdWVfZGVzY3JpcHRpb246IGlzc3VlRGF0YS5pc3N1ZURlc2NyaXB0aW9uLFxyXG4gICAgICBpc3N1ZV90eXBlOiBvcHRpb25GaWVsZHNTdGF0dXMuSVNTVUVfVFlQRSA/IHRoaXMuYXJyYXlUb0lkKGlzc3VlRGF0YS5pc3N1ZVR5cGUsICdpc3N1ZV9pZCcpLnRvU3RyaW5nKCkgOiAnJyxcclxuICAgICAgZXhjZXB0aW9uX3R5cGU6IG9wdGlvbkZpZWxkc1N0YXR1cy5FWENFUFRJT05fVFlQRSA/IGlzc3VlRGF0YS5leGNlcHRpb25UeXBlLnRvU3RyaW5nKCkgOiAnJyxcclxuICAgICAgcmlza19jbGFzczogaXNzdWVEYXRhLmlzc3VlUmlza1JhdGluZy50b1N0cmluZygpID8/ICcnLFxyXG4gICAgICBwcmlvcml0eTogb3B0aW9uRmllbGRzU3RhdHVzLlBSSU9SSVRZID8gIGlzc3VlRGF0YS5pc3N1ZVByaW9yaXR5LnRvU3RyaW5nKCkgOiAnJyxcclxuICAgICAgaXNzdWVfY2F0ZWdvcnlfaWQ6IHRoaXMuYXJyYXlUb0lkKGlzc3VlRGF0YS5pc3N1ZUNhdGVnb3J5LCAnY2F0ZWdvcnlfaWQnKSA/PyAwLFxyXG4gICAgICByZWNvbW1lbmRhdGlvbjogaXNzdWVEYXRhLmlzc3VlUmVjb21tZW5kYXRpb24sXHJcbiAgICAgIGVudHJ1c3RlZF90bzogdGhpcy5hcnJheVRvSWQoaXNzdWVEYXRhLmVudHJ1c3RUbywgJ2VtcGxveWVlX2lkJykgPz8gMCxcclxuICAgICAgaXNzdWVfZGF0ZTogZGF0ZVNwbGl0WzBdICsgJy0nICsgZGF0ZVNwbGl0WzFdICsgJy0nICsgZGF0ZVNwbGl0WzJdICsgJyAnICsgdGhpcy5jb252ZXJ0RnJvbTEyVG8yNEZvcm1hdChpc3N1ZURhdGEuaXNzdWVEdWVUaW1lKSxcclxuICAgICAgZmFpbGVkX3RpbWU6IHRoaXMuY29udmVydEZyb20xMlRvMjRGb3JtYXQoaXNzdWVEYXRhLmlzc3VlRHVlVGltZSksXHJcbiAgICAgIGlzc3VlX2R1ZV9kYXRlOiBkYXRlU3BsaXRbMF0gKyAnLScgKyBkYXRlU3BsaXRbMV0gKyAnLScgKyBkYXRlU3BsaXRbMl0gKyAnICcgKyB0aGlzLmNvbnZlcnRGcm9tMTJUbzI0Rm9ybWF0KGlzc3VlRGF0YS5pc3N1ZUR1ZVRpbWUpLFxyXG4gICAgICBncmNfYXJlYTogJycsXHJcbiAgICAgIGNjX2VtcGxveWVlX2VtYWlsOiBvcHRpb25GaWVsZHNTdGF0dXMuT1ZFUlNJR0hUID8gdGhpcy5hcnJheVRvSURzRHRyaW5nKGlzc3VlRGF0YS5pc3N1ZUNDVXNlcnMsICdlbXBsb3llZV9lbWFpbCcpIDogJycsXHJcbiAgICAgIGZhaWx1cmVfY2NfZW1wbG95ZWVfZW1haWw6IG9wdGlvbkZpZWxkc1N0YXR1cy5PVkVSU0lHSFQgPyB0aGlzLmFycmF5VG9JRHNEdHJpbmcoaXNzdWVEYXRhLmZhaWx1cmVDQ1VzZXJzLCAnZW1wbG95ZWVfZW1haWwnKSA6ICcnLFxyXG4gICAgICBjdXN0b21fdGFnX3ZhbHVlOiAnJyxcclxuICAgICAgaXNzdWVfcmVzb2x2ZV90aW1lc3RhbXA6IChkYXRlLmdldFRpbWUoKSAvIDEwMDApLnRvU3RyaW5nKCksXHJcbiAgICAgIGV2aWRlbmNlX3VwbG9hZF9mbGFnOiBvcHRpb25GaWVsZHNTdGF0dXMuRVZJREVOQ0UgPyAoaXNzdWVEYXRhLmV2aWRlbmNlUmVxdWlyZWQgPyAnMScgOiAnMCcgKSAgOiAnMCcsXHJcbiAgICB9O1xyXG4gICAgaWYgKGlzc3VlRGF0YS5pc3N1ZVJDLmxlbmd0aCl7XHJcbiAgICAgIGNyZWF0ZUlzc3VlLnJjX2lkID0gdGhpcy5hcnJheVRvSWQoaXNzdWVEYXRhLmlzc3VlUkMsICdyY19pZCcpID8/IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNyZWF0ZUlzc3VlO1xyXG4gIH1cclxuXHJcblxyXG4gIHBheWxvYWRCdWlsZGVyKGlzc3VlRGF0YTphbnksb3B0aW9uRmllbGRzU3RhdHVzOmFueSl7XHJcbiAgIGNvbnN0IHNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKGlzc3VlRGF0YS5pc3N1ZUR1ZURhdGUpO1xyXG4gICBjb25zdCBkYXRlU3BsaXQgPSBbc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCksIHNlbGVjdGVkRGF0ZS5nZXRNb250aCgpICsgMSwgc2VsZWN0ZWREYXRlLmdldERhdGUoKV07XHJcbiAgIGNvbnN0IHBheWxvYWQgIDphbnkgPSB7XHJcbiAgICAgZGVzY3JpcHRpb24gOiBbXSxcclxuICAgICBhc3NvY2lhdGVkX3Jpc2sgOiBbXSxcclxuICAgICByZWNvbW1lbmRhdGlvbjpbXVxyXG4gICB9O1xyXG4gICBwYXlsb2FkLnRpdGxlID0gaXNzdWVEYXRhLmlzc3VlTmFtZT8/Jyc7XHJcbiAgIHBheWxvYWQucmNfaWQgPSBpc3N1ZURhdGEuaXNzdWVSQy5sZW5ndGggPyB0aGlzLmFycmF5VG9JZChpc3N1ZURhdGEuaXNzdWVSQywgJ3JjX2lkJykgOiBudWxsO1xyXG4gICBwYXlsb2FkLmNhdGVnb3J5X2lkID0gaXNzdWVEYXRhLmlzc3VlQ2F0ZWdvcnkubGVuZ3RoID8gdGhpcy5hcnJheVRvSWQoaXNzdWVEYXRhLmlzc3VlQ2F0ZWdvcnksICdjYXRlZ29yeV9pZCcpIDogbnVsbDtcclxuICAgcGF5bG9hZC5kZXNjcmlwdGlvblswXSA9IHtcclxuICAgICB0ZXh0Omlzc3VlRGF0YS5pc3N1ZURlc2NyaXB0aW9uID8/ICcnLFxyXG4gICAgIGF0dGFjaG1lbnRzOmlzc3VlRGF0YT8uaXNzdWVEZXNjcmlwdGlvbkF0dGFjaGVtZW50cy5sZW5ndGggPyBpc3N1ZURhdGE/Lmlzc3VlRGVzY3JpcHRpb25BdHRhY2hlbWVudHM6W11cclxuICAgfVxyXG4gICBwYXlsb2FkLmV4Y2VwdGlvbl90eXBlID0gb3B0aW9uRmllbGRzU3RhdHVzLkVYQ0VQVElPTl9UWVBFID8gTnVtYmVyKGlzc3VlRGF0YS5leGNlcHRpb25UeXBlKSA6IG51bGw7XHJcbiAgIHBheWxvYWQucmlza19jbGFzcyA9IGlzc3VlRGF0YS5pc3N1ZVJpc2tSYXRpbmcgPz8gbnVsbDtcclxuICAgcGF5bG9hZC5wcmlvcml0eSA9IG9wdGlvbkZpZWxkc1N0YXR1cy5QUklPUklUWSA/ICBOdW1iZXIoaXNzdWVEYXRhLmlzc3VlUHJpb3JpdHkpIDogbnVsbDtcclxuICAgcGF5bG9hZC5hc3NpZ25lZV9pZCA9IGlzc3VlRGF0YS5lbnRydXN0VG8gPyB0aGlzLmFycmF5VG9JZChpc3N1ZURhdGEuZW50cnVzdFRvLCAnbXlfbWVtYmVyX2lkJykgOiBudWxsO1xyXG4gICBwYXlsb2FkLmFzc29jaWF0ZWRfcmlza1swXT17XHJcbiAgICAgdGV4dDogb3B0aW9uRmllbGRzU3RhdHVzLkFTU09DSUFURURfUklTS1MgPyBpc3N1ZURhdGEuaXNzdWVBc3NvY2lhdGVkUmlzazonJyxcclxuICAgICBhdHRhY2htZW50czpbXVxyXG4gICB9XHJcbiAgIHBheWxvYWQucmVjb21tZW5kYXRpb25bMF0gPXtcclxuICAgIHRleHQ6IGlzc3VlRGF0YS5pc3N1ZVJlY29tbWVuZGF0aW9uPz8nJyxcclxuICAgIGF0dGFjaG1lbnRzOmlzc3VlRGF0YT8ucmVjb21tZW5kZWRBY3Rpb25zQXR0YWNobWVudHMubGVuZ3RoID8gaXNzdWVEYXRhPy5yZWNvbW1lbmRlZEFjdGlvbnNBdHRhY2htZW50czpbXVxyXG4gICB9XHJcbiAgIHBheWxvYWQuZXZpZGVuY2UgPSB7ZXZpZGVuY2VfZmxhZzogb3B0aW9uRmllbGRzU3RhdHVzLkVWSURFTkNFID8gKGlzc3VlRGF0YS5ldmlkZW5jZVJlcXVpcmVkID8gMSA6IDAgKSAgOiAwIH1cclxuICAgcGF5bG9hZC5mcmVxdWVuY3lfZGV0YWlscyA9IHtcclxuICAgIGZyZXF1ZW5jeV90aW1lOiB0aGlzLmNvbnZlcnRGcm9tMTJUbzI0Rm9ybWF0KGlzc3VlRGF0YS5pc3N1ZUR1ZVRpbWUpPz8nJyxcclxuICAgIGZyZXF1ZW5jeV9kYXRlOiAgZGF0ZVNwbGl0WzBdICsgJy0nICsgKGRhdGVTcGxpdFsxXSA8IDEwID8gJzAnICsgZGF0ZVNwbGl0WzFdOiBkYXRlU3BsaXRbMV0pICsgJy0nICsgKGRhdGVTcGxpdFsyXTwxMD8gJzAnICsgZGF0ZVNwbGl0WzJdOmRhdGVTcGxpdFsyXSlcclxuICAgfVxyXG4gICBwYXlsb2FkLm92ZXJzZWVyID0ge1xyXG4gICAgY2NfZW1haWw6IG9wdGlvbkZpZWxkc1N0YXR1cy5PVkVSU0lHSFQgPyhpc3N1ZURhdGEuaXNzdWVDQ1VzZXJzLmxlbmd0aD8gaXNzdWVEYXRhLmlzc3VlQ0NVc2Vycy5tYXAoKHg6YW55KSA9PiB7cmV0dXJuIHsgbWVtYmVyX2lkOiB4Lm15X21lbWJlcl9pZCA/PyAwICwgYWxlcnRfZW5hYmxlOiAxfX0pOltdKSA6W10sXHJcbiAgICBmYWlsdXJlX2NjX2VtYWlsOm9wdGlvbkZpZWxkc1N0YXR1cy5PVkVSU0lHSFQgPyhpc3N1ZURhdGEuZmFpbHVyZUNDVXNlcnMubGVuZ3RoPyBpc3N1ZURhdGEuZmFpbHVyZUNDVXNlcnMubWFwKCh4OmFueSkgPT4ge3JldHVybiB7IG1lbWJlcl9pZDogeC5teV9tZW1iZXJfaWQ/PyAwICwgYWxlcnRfZW5hYmxlOiAxfX0pOltdKSA6W11cclxuICAgfVxyXG4gICBwYXlsb2FkLmN1c3RvbV90YWdzID0gaXNzdWVEYXRhPy5pc3N1ZUN1c3RvbVRhZztcclxuICAgcGF5bG9hZC5pc3N1ZVR5cGUgPSBpc3N1ZURhdGE/Lmlzc3VlVHlwZTtcclxuICAgcmV0dXJuIHBheWxvYWQ7XHJcbiAgfVxyXG5cclxuICBhcnJheVRvSWQoYXJyYXk6IGFueSwga2V5OiBhbnkpe1xyXG4gaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCl7cmV0dXJuICcnOyB9XHJcbiBlbHNlIHtcclxuICAgcmV0dXJuIGFycmF5WzBdW2tleV07XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIGNvbnZlcnRGcm9tMTJUbzI0Rm9ybWF0ID0gKHRpbWUxMjogYW55KSA9PiB7XHJcbiAgaWYodGltZTEyKXtcclxuICAgIGNvbnN0IFtzSG91cnMsIG1pbnV0ZXMsIHBlcmlvZF0gPSB0aW1lMTIubWF0Y2goLyhbMC05XXsxLDJ9KTooWzAtOV17Mn0pIChhbXxwbXxBTXxQTSkvKS5zbGljZSgxKTtcclxuICAgIGNvbnN0IFBNID0gcGVyaW9kID09PSAnUE0nO1xyXG4gICAgY29uc3QgaG91cnMgPSAoK3NIb3VycyAlIDEyKSArIChQTSA/IDEyIDogMCk7XHJcblxyXG4gICAgcmV0dXJuIGAkeygnMCcgKyBob3Vycykuc2xpY2UoLTIpfToke21pbnV0ZXN9OjAwYDtcclxuICB9ZWxzZXtcclxuICAgIHJldHVybiAnMjM6NTk6MDAnO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcblxyXG5jb252ZXJ0RnJvbTI0VG8xMkZvcm1hdCAodGltZTphbnkpIHtcclxuICBjb25zdCBoaG1tID0gdGltZS5zcGxpdCgnOicpO1xyXG4gIHRpbWUgPSBgJHtoaG1tWzBdfToke2hobW1bMV19YDtcclxuICAvLyBDaGVjayBjb3JyZWN0IHRpbWUgZm9ybWF0IGFuZCBzcGxpdCBpbnRvIGNvbXBvbmVudHNcclxuICB0aW1lID0gdGltZS50b1N0cmluZygpLm1hdGNoICgvXihbMDFdXFxkfDJbMC0zXSkoOikoWzAtNV1cXGQpKDpbMC01XVxcZCk/JC8pIHx8IFt0aW1lXTtcclxuXHJcbiAgaWYgKHRpbWUubGVuZ3RoID4gMSkgeyAvLyBJZiB0aW1lIGZvcm1hdCBjb3JyZWN0XHJcbiAgICB0aW1lID0gdGltZS5zbGljZSAoMSk7ICAvLyBSZW1vdmUgZnVsbCBzdHJpbmcgbWF0Y2ggdmFsdWVcclxuICAgIHRpbWVbNV0gPSArdGltZVswXSA8IDEyID8gJyBBTScgOiAnIFBNJzsgLy8gU2V0IEFNL1BNXHJcbiAgICB0aW1lWzBdID0gK3RpbWVbMF0gJSAxMiB8fCAxMjsgLy8gQWRqdXN0IGhvdXJzXHJcbiAgfVxyXG4gIHJldHVybiB0aW1lLmpvaW4gKCcnKTsgLy8gcmV0dXJuIGFkanVzdGVkIHRpbWUgb3Igb3JpZ2luYWwgc3RyaW5nXHJcbn1cclxuXHJcbmFycmF5VG9JRHNEdHJpbmcoYXJyYXk6IGFueSwgaWRlbnRpZmllcktleTogYW55KXtcclxuIGNvbnN0IGxpc3QgPSBhcnJheS5tYXAoKGVsOiBhbnkpID0+IHtcclxuICAgIHJldHVybiBlbFtpZGVudGlmaWVyS2V5XTsgfVxyXG4gICAgKTtcclxuIHJldHVybiBsaXN0LmpvaW4oKTtcclxufVxyXG5cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFVwbG9hZHMgdGhlIGdpdmVuIGZpbGUgdG8gc2VydmVyXHJcbiAgICogQHBhcmFtIHBheWxvYWQgcGF5bG9hZCBGaWxlIGRhdGEgdG8gYmUgdXBsb2FkZWRcclxuICAgKiBAcGFyYW0gcGF0aCBwYXRoIFBhdGggb2YgZmlsZSB0byBiZSB1cGxvYWRlZFxyXG4gICAqIEByZXR1cm5zIHJlc3BvbnNlIGFmdGVyIHVwbG9hZGluZyBhIGZpbGVcclxuICAgKi9cclxuICAgdXBsb2FkRmlsZXMocGF5bG9hZDogYW55LCBwYXRoOiBhbnkpIHtcclxuICAgIC8vIHtcclxuICAgIC8vICAgcmVwb3J0UHJvZ3Jlc3M6IHRydWUsXHJcbiAgICAvLyAgIG9ic2VydmU6ICdldmVudHMnfVxyXG4gICAgY29uc3QgT1JHX1BBVEggPSBgby8ke3BhdGh9YDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLmVudi5maWxlVXBsb2FkRW5kUG9pbnQgKyBPUkdfUEFUSCAgKyAnJm5nc3ctYnlwYXNzPXRydWUnLCBwYXlsb2FkKTtcclxuICB9XHJcblxyXG4gIGdldElzc3VlRGV0YWlscyhpc3N1ZUlkOiBzdHJpbmcpe1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldCgndG9rZW4nLCB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuZW52LmFzc3VyYW5jZSsnSXNzdWUvRWRpdC8nK2lzc3VlSWQse2hlYWRlcnN9KS5waXBlKHJldHJ5KDMpKTtcclxuICB9XHJcbn1cclxuIl19
|
|
336
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLWlzc3VlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi93b3JrZmxvdy1zZXJ2aWNlcy9sb2ctaXNzdWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFPNUMsTUFBTSxPQUFPLGVBQWU7SUFFMUIsWUFDVSxJQUFnQixFQUNoQixXQUF3QixFQUNwQixNQUF1QjtRQUYzQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBbVVsQyw0QkFBdUIsR0FBRyxDQUFDLE1BQVcsRUFBRSxFQUFFO1lBQ3hDLElBQUksTUFBTSxFQUFFO2dCQUNWLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFHLE1BQU07cUJBQ3JDLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQztxQkFDOUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNaLE1BQU0sRUFBRSxHQUFHLE1BQU0sS0FBSyxJQUFJLENBQUM7Z0JBQzNCLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRTdDLE9BQU8sR0FBRyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEtBQUssQ0FBQzthQUNuRDtpQkFBTTtnQkFDTCxPQUFP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LENBQUMsS0FBVSxFQUFFLGFBQWtCO1FBQzdDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRTtZQUNqQyxPQUFPLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFdBQVcsQ0FBQyxPQUFZLEVBQUUsSUFBUztRQUNqQyxJQUFJO1FBQ0osMEJBQTBCO1FBQzFCLHVCQUF1QjtRQUN2QixNQUFNLFFBQVEsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzdCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ25CLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEdBQUcsUUFBUSxHQUFHLG1CQUFtQixFQUM1RCxPQUFPLENBQ1IsQ0FBQztJQUNKLENBQUM7SUFFRCxlQUFlLENBQUMsT0FBZTtRQUM3QixNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FDbkMsT0FBTyxFQUNQLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLEVBQUUsQ0FDekMsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsYUFBYSxHQUFHLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDO2FBQzlELElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixDQUFDOzs0R0F0WVUsZUFBZTtnSEFBZixlQUFlLGNBRmQsTUFBTTsyRkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBTUksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBtYXAsIHJldHJ5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9ucyB9IGZyb20gJy4uL2NvbmZpZ3VyYXRpb25zJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9nSXNzdWVTZXJ2aWNlIHtcclxuICBlbnYhOiBhbnk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIEBPcHRpb25hbCgpIGNvbmZpZz86IENvbmZpZ3VyYXRpb25zXHJcbiAgKSB7XHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIHRoaXMuZW52ID0gY29uZmlnLmVudkNvbmZpZztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldElzc3VlVHlwZXMoKSB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxyXG4gICAgICAndG9rZW4nLFxyXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0PGFueVtdPih0aGlzLmVudi5vcmdhbml6YXRpb25HZXQgKyAnaXNzdWVUeXBlTGlzdCcsIHsgaGVhZGVycyB9KVxyXG4gICAgICAucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG5cclxuICBnZXRPcmdQZW9wbGUoKSB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxyXG4gICAgICAndG9rZW4nLFxyXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0PGFueVtdPih0aGlzLmVudi5vcmdhbml6YXRpb25HZXQgKyAncGVvcGxlJywgeyBoZWFkZXJzIH0pXHJcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcclxuICB9XHJcblxyXG4gIGdldElzc3VlQ2F0ZWdvcmllcygpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXHJcbiAgICAgICd0b2tlbicsXHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcclxuICAgICk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5nZXQ8YW55W10+KFxyXG4gICAgICAgIHRoaXMuZW52LmFzc3VyYW5jZSArICdJc3N1ZS9DYXRlZ29yeS9DYXRMaXN0P2NhdGVnb3JpZXM9dHJ1ZScsXHJcbiAgICAgICAgeyBoZWFkZXJzIH1cclxuICAgICAgKVxyXG4gICAgICAucGlwZShyZXRyeSgyKSk7XHJcbiAgICAvL2h0dHBzOi8vZGV2YXBpLnYtY29tcGx5LmNvbS9Bc3N1cmFuY2UvSXNzdWUvQ2F0ZWdvcnkvQ2F0TGlzdC8xP2lzQnVzaW5lc3NDeWNsZT10cnVlJmNhdGVnb3JpZXM9dHJ1ZVxyXG4gIH1cclxuICBnZXRSZXNwb25zaWJpbGl0eUNlbnRlckxpc3QoKSB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxyXG4gICAgICAndG9rZW4nLFxyXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0PGFueVtdPih0aGlzLmVudi5jb21wbGlhbmNlR2V0ICsgJ3Jlc3BvbnNpYmlsaXR5Q2VudGVyVHJlZScsIHtcclxuICAgICAgICBoZWFkZXJzLFxyXG4gICAgICB9KVxyXG4gICAgICAucGlwZShyZXRyeSgyKSk7XHJcbiAgfVxyXG4gIGNyZWF0ZUlzc3VlKHBheWxvYWQ6IGFueSkge1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcclxuICAgICAgJ3Rva2VuJyxcclxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxyXG4gICAgKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLnBvc3QodGhpcy5lbnYuYXNzdXJhbmNlICsgJ0lzc3VlJywgcGF5bG9hZCwgeyBoZWFkZXJzIH0pXHJcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcclxuICB9XHJcbiAgdXBkYXRlSXNzdWUocGF5bG9hZDogYW55LCBpc3N1ZUlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXHJcbiAgICAgICd0b2tlbicsXHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcclxuICAgICk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5wdXQodGhpcy5lbnYuYXNzdXJhbmNlICsgJ0lzc3VlLycgKyBpc3N1ZUlkLCBwYXlsb2FkLCB7IGhlYWRlcnMgfSlcclxuICAgICAgLnBpcGUocmV0cnkoMikpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udHJvbFJpc2soYXVkaXRQbGFuSWQ6IHN0cmluZywgdHlwZTogc3RyaW5nKSB7XHJcbiAgICAvLyAgICAgR2V0IExpbmtlZCBBdWRpdCBQbGFuIFJlc3BvbnNpYmlsaXRpZXMgYnkgQXVkaXRfUGxhbl9JZFxyXG4gICAgLy8gVVJMOiBodHRwczovL2RldmFwaS52LWNvbXBseS5jb20vcmVzcG9uc2liaWxpdGllcy8/bW9kZT1tYW5hZ2VfYXVkaXRfcGxhbl9yZXNwb25zaWJpbGl0aWVzJmlkPTYxMGIzMjkxNDRjODFhMDAwOWNiYjU5OCBNZXRob2Q6IEdFVFxyXG5cclxuICAgIC8vIEdldCBMaW5rZWQgQXVkaXQgUGxhbiBSaXNrIGJ5IEF1ZGl0X1BsYW5fSWRcclxuICAgIC8vIFVSTDogaHR0cHM6Ly9kZXZhcGkudi1jb21wbHkuY29tL3Jpc2svP21vZGU9cmlzay9tYW5hZ2VfYXVkaXRfcGxhbl9yaXNrJmlkPTYxMGIzMjkxNDRjODFhMDAwOWNiYjU5OFxyXG4gICAgLy8gTWV0aG9kOiBHRVRcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXHJcbiAgICAgICd0b2tlbicsXHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcclxuICAgICk7XHJcbiAgICBpZiAodHlwZSA9PT0gJ1JFU1BPTlNJQklMSVRZJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgICAgLmdldDxhbnlbXT4oXHJcbiAgICAgICAgICB0aGlzLmVudi5yZXNwb25zaWJpbGl0aWVzR2V0ICtcclxuICAgICAgICAgICAgJ21hbmFnZV9hdWRpdF9wbGFuX3Jlc3BvbnNpYmlsaXRpZXMmaWQ9JyArXHJcbiAgICAgICAgICAgIGF1ZGl0UGxhbklkLFxyXG4gICAgICAgICAgeyBoZWFkZXJzIH1cclxuICAgICAgICApXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBtYXAoKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbTogYW55KSA9PiAoe1xyXG4gICAgICAgICAgICAgIGl0ZW1JZDogaXRlbT8ucmVwb3J0X2lkLFxyXG4gICAgICAgICAgICAgIGl0ZW1Db250cm9sSWQ6IGl0ZW0/LmNvbnRyb2xfaWQsXHJcbiAgICAgICAgICAgICAgaXRlbUNvbnRyb2xOYW1lOiBpdGVtPy5yZXBvcnRfbmFtZSxcclxuICAgICAgICAgICAgICBpdGVtVHlwZTogJ1JFU1BPTlNJQklMSVRZJyxcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnUklTSycpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAgIC5nZXQ8YW55W10+KFxyXG4gICAgICAgICAgdGhpcy5lbnYucmlzayArICdyaXNrL21hbmFnZV9hdWRpdF9wbGFuX3Jpc2smaWQ9JyArIGF1ZGl0UGxhbklkLFxyXG4gICAgICAgICAgeyBoZWFkZXJzIH1cclxuICAgICAgICApXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBtYXAoKGl0ZW1zOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbTogYW55KSA9PiAoe1xyXG4gICAgICAgICAgICAgIGl0ZW1JZDogaXRlbT8ucmlza19pZCxcclxuICAgICAgICAgICAgICBpdGVtQ29udHJvbElkOiBpdGVtPy5yaXNrX2NvbnRyb2xfaWQsXHJcbiAgICAgICAgICAgICAgaXRlbUNvbnRyb2xOYW1lOiBpdGVtPy50aXRsZSxcclxuICAgICAgICAgICAgICBpdGVtVHlwZTogJ1JJU0snLFxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhbGlkYXRlKGlzc3VlRGF0YTogYW55LCBvcGVuZWRGcm9tOiBhbnksIGlzUkNNYW5kYXRvcnk6IGFueSkge1xyXG4gICAgY29uc3QgZXJyb3JzID0gW107XHJcbiAgICBpZiAoIWlzc3VlRGF0YS5pc3N1ZU5hbWUgfHwgaXNzdWVEYXRhLmlzc3VlTmFtZS50cmltKCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGVycm9ycy5wdXNoKCdpc3N1ZU5hbWUnKTtcclxuICAgIH1cclxuICAgIGlmIChpc3N1ZURhdGEuaXNzdWVSQy5sZW5ndGggPT09IDAgJiYgaXNSQ01hbmRhdG9yeSkge1xyXG4gICAgICBlcnJvcnMucHVzaCgnaXNzdWVSQycpO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzc3VlRGF0YS5lbnRydXN0VG8ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGVycm9ycy5wdXNoKCdlbnRydXN0VG8nKTtcclxuICAgIH1cclxuICAgIGlmICghaXNzdWVEYXRhLmlzc3VlRHVlRGF0ZSkge1xyXG4gICAgICBlcnJvcnMucHVzaCgnaXNzdWVEdWVEYXRlJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIGlzc3VlRGF0YS5pc3N1ZVJlY29tbWVuZGF0aW9uXHJcbiAgICAgICAgLnJlcGxhY2UoLyZuYnNwOy9nLCAnJylcclxuICAgICAgICAucmVwbGFjZSgvXFw8YnJcXHMqW1xcL10/Pi9naSwgJycpXHJcbiAgICAgICAgLnRyaW0oKS5sZW5ndGggPT09IDBcclxuICAgICkge1xyXG4gICAgICBlcnJvcnMucHVzaCgnaXNzdWVSZWNvbW1lbmRhdGlvbicpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVycm9ycztcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlUGF5bG9hZChpc3N1ZURhdGE6IGFueSwgb3B0aW9uRmllbGRzU3RhdHVzOiBhbnkpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKGlzc3VlRGF0YS5pc3N1ZUR1ZURhdGUpO1xyXG4gICAgY29uc3QgZGF0ZVNwbGl0ID0gW1xyXG4gICAgICBzZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKSxcclxuICAgICAgc2VsZWN0ZWREYXRlLmdldE1vbnRoKCkgKyAxLFxyXG4gICAgICBzZWxlY3RlZERhdGUuZ2V0RGF0ZSgpLFxyXG4gICAgXTtcclxuICAgIGNvbnN0IHRpbWU6IGFueSA9IHRoaXMuY29udmVydEZyb20xMlRvMjRGb3JtYXQoXHJcbiAgICAgIGlzc3VlRGF0YS5pc3N1ZUR1ZVRpbWVcclxuICAgICkuc3BsaXQoJzonKTtcclxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShcclxuICAgICAgZGF0ZVNwbGl0WzBdLFxyXG4gICAgICBkYXRlU3BsaXRbMV0gLSAxLFxyXG4gICAgICBkYXRlU3BsaXRbMl0sXHJcbiAgICAgIHRpbWVbMF0sXHJcbiAgICAgIHRpbWVbMV0sXHJcbiAgICAgIDBcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgY3JlYXRlSXNzdWU6IGFueSA9IHtcclxuICAgICAgaXNzdWVfZGVzY3JpcHRpb25fYXR0YWNobWVudHM6IGlzc3VlRGF0YT8uaXNzdWVEZXNjcmlwdGlvbkF0dGFjaGVtZW50cyxcclxuICAgICAgYXNzb2NpYXRlZF9yaXNrOiBvcHRpb25GaWVsZHNTdGF0dXMuQVNTT0NJQVRFRF9SSVNLU1xyXG4gICAgICAgID8gaXNzdWVEYXRhLmlzc3VlQXNzb2NpYXRlZFJpc2tcclxuICAgICAgICA6ICcnLFxyXG4gICAgICBpc3N1ZV9uYW1lOiBpc3N1ZURhdGEuaXNzdWVOYW1lLFxyXG4gICAgICByZXBvcnRfaWQ6ICcwJyxcclxuICAgICAgaXNzdWVfZGVzY3JpcHRpb246IGlzc3VlRGF0YS5pc3N1ZURlc2NyaXB0aW9uLFxyXG4gICAgICBpc3N1ZV90eXBlOiBvcHRpb25GaWVsZHNTdGF0dXMuSVNTVUVfVFlQRVxyXG4gICAgICAgID8gdGhpcy5hcnJheVRvSWQoaXNzdWVEYXRhLmlzc3VlVHlwZSwgJ2lzc3VlX2lkJykudG9TdHJpbmcoKVxyXG4gICAgICAgIDogJycsXHJcbiAgICAgIGV4Y2VwdGlvbl90eXBlOiBvcHRpb25GaWVsZHNTdGF0dXMuRVhDRVBUSU9OX1RZUEVcclxuICAgICAgICA/IGlzc3VlRGF0YS5leGNlcHRpb25UeXBlLnRvU3RyaW5nKClcclxuICAgICAgICA6ICcnLFxyXG4gICAgICByaXNrX2NsYXNzOiBpc3N1ZURhdGEuaXNzdWVSaXNrUmF0aW5nLnRvU3RyaW5nKCkgPz8gJycsXHJcbiAgICAgIHByaW9yaXR5OiBvcHRpb25GaWVsZHNTdGF0dXMuUFJJT1JJVFlcclxuICAgICAgICA/IGlzc3VlRGF0YS5pc3N1ZVByaW9yaXR5LnRvU3RyaW5nKClcclxuICAgICAgICA6ICcnLFxyXG4gICAgICBpc3N1ZV9jYXRlZ29yeV9pZDpcclxuICAgICAgICB0aGlzLmFycmF5VG9JZChpc3N1ZURhdGEuaXNzdWVDYXRlZ29yeSwgJ2NhdGVnb3J5X2lkJykgPz8gMCxcclxuICAgICAgcmVjb21tZW5kYXRpb246IGlzc3VlRGF0YS5pc3N1ZVJlY29tbWVuZGF0aW9uLFxyXG4gICAgICBlbnRydXN0ZWRfdG86IHRoaXMuYXJyYXlUb0lkKGlzc3VlRGF0YS5lbnRydXN0VG8sICdlbXBsb3llZV9pZCcpID8/IDAsXHJcbiAgICAgIGlzc3VlX2RhdGU6XHJcbiAgICAgICAgZGF0ZVNwbGl0WzBdICtcclxuICAgICAgICAnLScgK1xyXG4gICAgICAgIGRhdGVTcGxpdFsxXSArXHJcbiAgICAgICAgJy0nICtcclxuICAgICAgICBkYXRlU3BsaXRbMl0gK1xyXG4gICAgICAgICcgJyArXHJcbiAgICAgICAgdGhpcy5jb252ZXJ0RnJvbTEyVG8yNEZvcm1hdChpc3N1ZURhdGEuaXNzdWVEdWVUaW1lKSxcclxuICAgICAgZmFpbGVkX3RpbWU6IHRoaXMuY29udmVydEZyb20xMlRvMjRGb3JtYXQoaXNzdWVEYXRhLmlzc3VlRHVlVGltZSksXHJcbiAgICAgIGlzc3VlX2R1ZV9kYXRlOlxyXG4gICAgICAgIGRhdGVTcGxpdFswXSArXHJcbiAgICAgICAgJy0nICtcclxuICAgICAgICBkYXRlU3BsaXRbMV0gK1xyXG4gICAgICAgICctJyArXHJcbiAgICAgICAgZGF0ZVNwbGl0WzJdICtcclxuICAgICAgICAnICcgK1xyXG4gICAgICAgIHRoaXMuY29udmVydEZyb20xMlRvMjRGb3JtYXQoaXNzdWVEYXRhLmlzc3VlRHVlVGltZSksXHJcbiAgICAgIGdyY19hcmVhOiAnJyxcclxuICAgICAgY2NfZW1wbG95ZWVfZW1haWw6IG9wdGlvbkZpZWxkc1N0YXR1cy5PVkVSU0lHSFRcclxuICAgICAgICA/IHRoaXMuYXJyYXlUb0lEc0R0cmluZyhpc3N1ZURhdGEuaXNzdWVDQ1VzZXJzLCAnZW1wbG95ZWVfZW1haWwnKVxyXG4gICAgICAgIDogJycsXHJcbiAgICAgIGZhaWx1cmVfY2NfZW1wbG95ZWVfZW1haWw6IG9wdGlvbkZpZWxkc1N0YXR1cy5PVkVSU0lHSFRcclxuICAgICAgICA/IHRoaXMuYXJyYXlUb0lEc0R0cmluZyhpc3N1ZURhdGEuZmFpbHVyZUNDVXNlcnMsICdlbXBsb3llZV9lbWFpbCcpXHJcbiAgICAgICAgOiAnJyxcclxuICAgICAgY3VzdG9tX3RhZ192YWx1ZTogJycsXHJcbiAgICAgIGlzc3VlX3Jlc29sdmVfdGltZXN0YW1wOiAoZGF0ZS5nZXRUaW1lKCkgLyAxMDAwKS50b1N0cmluZygpLFxyXG4gICAgICBldmlkZW5jZV91cGxvYWRfZmxhZzogb3B0aW9uRmllbGRzU3RhdHVzLkVWSURFTkNFXHJcbiAgICAgICAgPyBpc3N1ZURhdGEuZXZpZGVuY2VSZXF1aXJlZFxyXG4gICAgICAgICAgPyAnMSdcclxuICAgICAgICAgIDogJzAnXHJcbiAgICAgICAgOiAnMCcsXHJcbiAgICB9O1xyXG4gICAgaWYgKGlzc3VlRGF0YS5pc3N1ZVJDLmxlbmd0aCkge1xyXG4gICAgICBjcmVhdGVJc3N1ZS5yY19pZCA9IHRoaXMuYXJyYXlUb0lkKGlzc3VlRGF0YS5pc3N1ZVJDLCAncmNfaWQnKSA/PyAwO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjcmVhdGVJc3N1ZTtcclxuICB9XHJcblxyXG4gIHBheWxvYWRCdWlsZGVyKGlzc3VlRGF0YTogYW55LCBvcHRpb25GaWVsZHNTdGF0dXM6IGFueSkge1xyXG4gICAgY29uc3Qgc2VsZWN0ZWREYXRlID0gbmV3IERhdGUoaXNzdWVEYXRhLmlzc3VlRHVlRGF0ZSk7XHJcbiAgICBjb25zdCBkYXRlU3BsaXQgPSBbXHJcbiAgICAgIHNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpLFxyXG4gICAgICBzZWxlY3RlZERhdGUuZ2V0TW9udGgoKSArIDEsXHJcbiAgICAgIHNlbGVjdGVkRGF0ZS5nZXREYXRlKCksXHJcbiAgICBdO1xyXG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICBkZXNjcmlwdGlvbjogW10sXHJcbiAgICAgIGFzc29jaWF0ZWRfcmlzazogW10sXHJcbiAgICAgIHJlY29tbWVuZGF0aW9uOiBbXSxcclxuICAgIH07XHJcbiAgICBwYXlsb2FkLnRpdGxlID0gaXNzdWVEYXRhLmlzc3VlTmFtZSA/PyAnJztcclxuICAgIHBheWxvYWQucmNfaWQgPSBpc3N1ZURhdGEuaXNzdWVSQy5sZW5ndGhcclxuICAgICAgPyB0aGlzLmdldEFycmF5SWQoaXNzdWVEYXRhLmlzc3VlUkMsICdyY19pZCcpXHJcbiAgICAgIDogW107XHJcbiAgICBwYXlsb2FkLmNhdGVnb3J5X2lkID0gaXNzdWVEYXRhLmlzc3VlQ2F0ZWdvcnkubGVuZ3RoXHJcbiAgICAgID8gdGhpcy5hcnJheVRvSWQoaXNzdWVEYXRhLmlzc3VlQ2F0ZWdvcnksICdjYXRlZ29yeV9pZCcpXHJcbiAgICAgIDogbnVsbDtcclxuICAgIHBheWxvYWQuZGVzY3JpcHRpb25bMF0gPSB7XHJcbiAgICAgIHRleHQ6IGlzc3VlRGF0YS5pc3N1ZURlc2NyaXB0aW9uID8/ICcnLFxyXG4gICAgICBhdHRhY2htZW50czogaXNzdWVEYXRhPy5pc3N1ZURlc2NyaXB0aW9uQXR0YWNoZW1lbnRzLmxlbmd0aFxyXG4gICAgICAgID8gaXNzdWVEYXRhPy5pc3N1ZURlc2NyaXB0aW9uQXR0YWNoZW1lbnRzXHJcbiAgICAgICAgOiBbXSxcclxuICAgIH07XHJcbiAgICBwYXlsb2FkLmV4Y2VwdGlvbl90eXBlID0gb3B0aW9uRmllbGRzU3RhdHVzLkVYQ0VQVElPTl9UWVBFXHJcbiAgICAgID8gTnVtYmVyKGlzc3VlRGF0YS5leGNlcHRpb25UeXBlKVxyXG4gICAgICA6IG51bGw7XHJcbiAgICBwYXlsb2FkLnJpc2tfY2xhc3MgPSBpc3N1ZURhdGEuaXNzdWVSaXNrUmF0aW5nID8/IG51bGw7XHJcbiAgICBwYXlsb2FkLnByaW9yaXR5ID0gb3B0aW9uRmllbGRzU3RhdHVzLlBSSU9SSVRZXHJcbiAgICAgID8gTnVtYmVyKGlzc3VlRGF0YS5pc3N1ZVByaW9yaXR5KVxyXG4gICAgICA6IG51bGw7XHJcbiAgICBwYXlsb2FkLmFzc2lnbmVlX2lkID0gaXNzdWVEYXRhLmVudHJ1c3RUb1xyXG4gICAgICA/IHRoaXMuYXJyYXlUb0lkKGlzc3VlRGF0YS5lbnRydXN0VG8sICdteV9tZW1iZXJfaWQnKVxyXG4gICAgICA6IG51bGw7XHJcbiAgICBwYXlsb2FkLmFzc29jaWF0ZWRfcmlza1swXSA9IHtcclxuICAgICAgdGV4dDogb3B0aW9uRmllbGRzU3RhdHVzLkFTU09DSUFURURfUklTS1NcclxuICAgICAgICA/IGlzc3VlRGF0YS5pc3N1ZUFzc29jaWF0ZWRSaXNrXHJcbiAgICAgICAgOiAnJyxcclxuICAgICAgYXR0YWNobWVudHM6IFtdLFxyXG4gICAgfTtcclxuICAgIHBheWxvYWQucmVjb21tZW5kYXRpb25bMF0gPSB7XHJcbiAgICAgIHRleHQ6IGlzc3VlRGF0YS5pc3N1ZVJlY29tbWVuZGF0aW9uID8/ICcnLFxyXG4gICAgICBhdHRhY2htZW50czogaXNzdWVEYXRhPy5yZWNvbW1lbmRlZEFjdGlvbnNBdHRhY2htZW50cy5sZW5ndGhcclxuICAgICAgICA/IGlzc3VlRGF0YT8ucmVjb21tZW5kZWRBY3Rpb25zQXR0YWNobWVudHNcclxuICAgICAgICA6IFtdLFxyXG4gICAgfTtcclxuICAgIHBheWxvYWQuZXZpZGVuY2UgPSB7XHJcbiAgICAgIGV2aWRlbmNlX2ZsYWc6IG9wdGlvbkZpZWxkc1N0YXR1cy5FVklERU5DRVxyXG4gICAgICAgID8gaXNzdWVEYXRhLmV2aWRlbmNlUmVxdWlyZWRcclxuICAgICAgICAgID8gMVxyXG4gICAgICAgICAgOiAwXHJcbiAgICAgICAgOiAwLFxyXG4gICAgfTtcclxuICAgIHBheWxvYWQuZnJlcXVlbmN5X2RldGFpbHMgPSB7XHJcbiAgICAgIGZyZXF1ZW5jeV90aW1lOlxyXG4gICAgICAgIHRoaXMuY29udmVydEZyb20xMlRvMjRGb3JtYXQoaXNzdWVEYXRhLmlzc3VlRHVlVGltZSkgPz8gJycsXHJcbiAgICAgIGZyZXF1ZW5jeV9kYXRlOlxyXG4gICAgICAgIGRhdGVTcGxpdFswXSArXHJcbiAgICAgICAgJy0nICtcclxuICAgICAgICAoZGF0ZVNwbGl0WzFdIDwgMTAgPyAnMCcgKyBkYXRlU3BsaXRbMV0gOiBkYXRlU3BsaXRbMV0pICtcclxuICAgICAgICAnLScgK1xyXG4gICAgICAgIChkYXRlU3BsaXRbMl0gPCAxMCA/ICcwJyArIGRhdGVTcGxpdFsyXSA6IGRhdGVTcGxpdFsyXSksXHJcbiAgICB9O1xyXG4gICAgcGF5bG9hZC5vdmVyc2VlciA9IHtcclxuICAgICAgY2NfZW1haWw6IG9wdGlvbkZpZWxkc1N0YXR1cy5PVkVSU0lHSFRcclxuICAgICAgICA/IGlzc3VlRGF0YS5pc3N1ZUNDVXNlcnMubGVuZ3RoXHJcbiAgICAgICAgICA/IGlzc3VlRGF0YS5pc3N1ZUNDVXNlcnMubWFwKCh4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4geyBtZW1iZXJfaWQ6IHgubXlfbWVtYmVyX2lkID8/IDAsIGFsZXJ0X2VuYWJsZTogMSB9O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgOiBbXVxyXG4gICAgICAgIDogW10sXHJcbiAgICAgIGZhaWx1cmVfY2NfZW1haWw6IG9wdGlvbkZpZWxkc1N0YXR1cy5PVkVSU0lHSFRcclxuICAgICAgICA/IGlzc3VlRGF0YS5mYWlsdXJlQ0NVc2Vycy5sZW5ndGhcclxuICAgICAgICAgID8gaXNzdWVEYXRhLmZhaWx1cmVDQ1VzZXJzLm1hcCgoeDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHsgbWVtYmVyX2lkOiB4Lm15X21lbWJlcl9pZCA/PyAwLCBhbGVydF9lbmFibGU6IDEgfTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIDogW11cclxuICAgICAgICA6IFtdLFxyXG4gICAgfTtcclxuICAgIHBheWxvYWQuY3VzdG9tX3RhZ3MgPSBpc3N1ZURhdGE/Lmlzc3VlQ3VzdG9tVGFnO1xyXG4gICAgcGF5bG9hZC5pc3N1ZVR5cGUgPSBpc3N1ZURhdGE/Lmlzc3VlVHlwZTtcclxuICAgIHJldHVybiBwYXlsb2FkO1xyXG4gIH1cclxuXHJcbiAgYXJyYXlUb0lkKGFycmF5OiBhbnksIGtleTogYW55KSB7XHJcbiAgICBpZiAoYXJyYXkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBhcnJheVswXVtrZXldO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0QXJyYXlJZChhcnJheTogYW55LCBrZXk6IGFueSkge1xyXG4gICAgcmV0dXJuIGFycmF5Lm1hcCgoZWxlOiBhbnkpID0+IGVsZVtrZXldKTtcclxuICB9XHJcblxyXG4gIGNvbnZlcnRGcm9tMTJUbzI0Rm9ybWF0ID0gKHRpbWUxMjogYW55KSA9PiB7XHJcbiAgICBpZiAodGltZTEyKSB7XHJcbiAgICAgIGNvbnN0IFtzSG91cnMsIG1pbnV0ZXMsIHBlcmlvZF0gPSB0aW1lMTJcclxuICAgICAgICAubWF0Y2goLyhbMC05XXsxLDJ9KTooWzAtOV17Mn0pIChhbXxwbXxBTXxQTSkvKVxyXG4gICAgICAgIC5zbGljZSgxKTtcclxuICAgICAgY29uc3QgUE0gPSBwZXJpb2QgPT09ICdQTSc7XHJcbiAgICAgIGNvbnN0IGhvdXJzID0gKCtzSG91cnMgJSAxMikgKyAoUE0gPyAxMiA6IDApO1xyXG5cclxuICAgICAgcmV0dXJuIGAkeygnMCcgKyBob3Vycykuc2xpY2UoLTIpfToke21pbnV0ZXN9OjAwYDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnMjM6NTk6MDAnO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnZlcnRGcm9tMjRUbzEyRm9ybWF0KHRpbWU6IGFueSkge1xyXG4gICAgY29uc3QgaGhtbSA9IHRpbWUuc3BsaXQoJzonKTtcclxuICAgIHRpbWUgPSBgJHtoaG1tWzBdfToke2hobW1bMV19YDtcclxuICAgIC8vIENoZWNrIGNvcnJlY3QgdGltZSBmb3JtYXQgYW5kIHNwbGl0IGludG8gY29tcG9uZW50c1xyXG4gICAgdGltZSA9IHRpbWVcclxuICAgICAgLnRvU3RyaW5nKClcclxuICAgICAgLm1hdGNoKC9eKFswMV1cXGR8MlswLTNdKSg6KShbMC01XVxcZCkoOlswLTVdXFxkKT8kLykgfHwgW3RpbWVdO1xyXG5cclxuICAgIGlmICh0aW1lLmxlbmd0aCA+IDEpIHtcclxuICAgICAgLy8gSWYgdGltZSBmb3JtYXQgY29ycmVjdFxyXG4gICAgICB0aW1lID0gdGltZS5zbGljZSgxKTsgLy8gUmVtb3ZlIGZ1bGwgc3RyaW5nIG1hdGNoIHZhbHVlXHJcbiAgICAgIHRpbWVbNV0gPSArdGltZVswXSA8IDEyID8gJyBBTScgOiAnIFBNJzsgLy8gU2V0IEFNL1BNXHJcbiAgICAgIHRpbWVbMF0gPSArdGltZVswXSAlIDEyIHx8IDEyOyAvLyBBZGp1c3QgaG91cnNcclxuICAgIH1cclxuICAgIHJldHVybiB0aW1lLmpvaW4oJycpOyAvLyByZXR1cm4gYWRqdXN0ZWQgdGltZSBvciBvcmlnaW5hbCBzdHJpbmdcclxuICB9XHJcblxyXG4gIGFycmF5VG9JRHNEdHJpbmcoYXJyYXk6IGFueSwgaWRlbnRpZmllcktleTogYW55KSB7XHJcbiAgICBjb25zdCBsaXN0ID0gYXJyYXkubWFwKChlbDogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiBlbFtpZGVudGlmaWVyS2V5XTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGxpc3Quam9pbigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBsb2FkcyB0aGUgZ2l2ZW4gZmlsZSB0byBzZXJ2ZXJcclxuICAgKiBAcGFyYW0gcGF5bG9hZCBwYXlsb2FkIEZpbGUgZGF0YSB0byBiZSB1cGxvYWRlZFxyXG4gICAqIEBwYXJhbSBwYXRoIHBhdGggUGF0aCBvZiBmaWxlIHRvIGJlIHVwbG9hZGVkXHJcbiAgICogQHJldHVybnMgcmVzcG9uc2UgYWZ0ZXIgdXBsb2FkaW5nIGEgZmlsZVxyXG4gICAqL1xyXG4gIHVwbG9hZEZpbGVzKHBheWxvYWQ6IGFueSwgcGF0aDogYW55KSB7XHJcbiAgICAvLyB7XHJcbiAgICAvLyAgIHJlcG9ydFByb2dyZXNzOiB0cnVlLFxyXG4gICAgLy8gICBvYnNlcnZlOiAnZXZlbnRzJ31cclxuICAgIGNvbnN0IE9SR19QQVRIID0gYG8vJHtwYXRofWA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXHJcbiAgICAgIHRoaXMuZW52LmZpbGVVcGxvYWRFbmRQb2ludCArIE9SR19QQVRIICsgJyZuZ3N3LWJ5cGFzcz10cnVlJyxcclxuICAgICAgcGF5bG9hZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldElzc3VlRGV0YWlscyhpc3N1ZUlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXHJcbiAgICAgICd0b2tlbicsXHJcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcclxuICAgICk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5nZXQodGhpcy5lbnYuYXNzdXJhbmNlICsgJ0lzc3VlL0VkaXQvJyArIGlzc3VlSWQsIHsgaGVhZGVycyB9KVxyXG4gICAgICAucGlwZShyZXRyeSgzKSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|