@sunbird-cb/cbp-ai 0.1.119 → 0.1.120
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/esm2022/lib/components/gap-analysis-recommended-course/gap-analysis-recommended-course.component.mjs +56 -22
- package/esm2022/lib/components/generate-course-recommendation/generate-course-recommendation.component.mjs +43 -2
- package/esm2022/lib/components/role-mapping-generation/role-mapping-generation.component.mjs +41 -35
- package/fesm2022/sunbird-cb-cbp-ai.mjs +135 -54
- package/fesm2022/sunbird-cb-cbp-ai.mjs.map +1 -1
- package/lib/components/gap-analysis-recommended-course/gap-analysis-recommended-course.component.d.ts +2 -0
- package/lib/components/gap-analysis-recommended-course/gap-analysis-recommended-course.component.d.ts.map +1 -1
- package/lib/components/generate-course-recommendation/generate-course-recommendation.component.d.ts +1 -0
- package/lib/components/generate-course-recommendation/generate-course-recommendation.component.d.ts.map +1 -1
- package/lib/components/role-mapping-generation/role-mapping-generation.component.d.ts +1 -1
- package/lib/components/role-mapping-generation/role-mapping-generation.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/sunbird-cb-cbp-ai-0.1.120.tgz +0 -0
- package/sunbird-cb-cbp-ai-0.1.119.tgz +0 -0
|
@@ -140,6 +140,16 @@ export class GapAnalysisRecommendedCourseComponent {
|
|
|
140
140
|
'competencySubtheme'
|
|
141
141
|
]);
|
|
142
142
|
}
|
|
143
|
+
getProficiencyLevel(competency) {
|
|
144
|
+
return this.getValue(competency, [
|
|
145
|
+
'proficiency_level',
|
|
146
|
+
'proficiencyLevel',
|
|
147
|
+
'requiredProficiency',
|
|
148
|
+
'required_proficiency',
|
|
149
|
+
'currentProficiency',
|
|
150
|
+
'current_proficiency'
|
|
151
|
+
]);
|
|
152
|
+
}
|
|
143
153
|
/**
|
|
144
154
|
* IMPORTANT:
|
|
145
155
|
* course_level is the authoritative STO level of a course.
|
|
@@ -233,53 +243,76 @@ export class GapAnalysisRecommendedCourseComponent {
|
|
|
233
243
|
const requiredArea = this.normalize(this.getCompetencyArea(requiredCompetency));
|
|
234
244
|
const requiredTheme = this.normalize(this.getCompetencyTheme(requiredCompetency));
|
|
235
245
|
const requiredSubtheme = this.normalize(this.getCompetencySubtheme(requiredCompetency));
|
|
246
|
+
const requiredProficiencyLevel = this.normalize(this.getProficiencyLevel(requiredCompetency));
|
|
236
247
|
if (!requiredTheme || !requiredSubtheme) {
|
|
237
248
|
return;
|
|
238
249
|
}
|
|
250
|
+
const courseProficiencyLevel = this.normalize(this.getProficiencyLevel(courseCompetency));
|
|
239
251
|
/*
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
* the matching keys.
|
|
244
|
-
*/
|
|
252
|
+
* Match:
|
|
253
|
+
* Area + Theme + Subtheme + Proficiency Level
|
|
254
|
+
*/
|
|
245
255
|
const areaMatches = !courseArea ||
|
|
246
256
|
!requiredArea ||
|
|
247
257
|
courseArea === requiredArea;
|
|
248
258
|
const themeMatches = courseTheme === requiredTheme;
|
|
249
259
|
const subthemeMatches = courseSubtheme === requiredSubtheme;
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
260
|
+
const proficiencyLevelMatches = courseProficiencyLevel === requiredProficiencyLevel;
|
|
261
|
+
/*
|
|
262
|
+
* All 4 parameters must match.
|
|
263
|
+
*
|
|
264
|
+
* If all 4 match:
|
|
265
|
+
* NOT part of gap
|
|
266
|
+
*
|
|
267
|
+
* If any one does not match:
|
|
268
|
+
* PART of gap
|
|
269
|
+
*/
|
|
270
|
+
const allFourMatch = areaMatches &&
|
|
271
|
+
themeMatches &&
|
|
272
|
+
subthemeMatches &&
|
|
273
|
+
proficiencyLevelMatches;
|
|
253
274
|
const requiredLevel = this.getRequiredLevel(requiredCompetency);
|
|
254
275
|
const currentLevel = this.getCurrentLevel(requiredCompetency);
|
|
255
276
|
const requiredRank = this.getLevelRank(requiredLevel);
|
|
256
277
|
const courseRank = this.getLevelRank(courseLevel);
|
|
257
278
|
let status;
|
|
258
279
|
let reason;
|
|
259
|
-
if (
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
else if (courseRank >= requiredRank) {
|
|
280
|
+
if (allFourMatch) {
|
|
281
|
+
/*
|
|
282
|
+
* All four competency attributes match.
|
|
283
|
+
* Therefore this competency is NOT part of the gap.
|
|
284
|
+
*/
|
|
265
285
|
status = 'FULL';
|
|
266
286
|
reason =
|
|
267
|
-
|
|
268
|
-
}
|
|
269
|
-
else if (courseRank === requiredRank - 1) {
|
|
270
|
-
status = 'PARTIAL';
|
|
271
|
-
reason =
|
|
272
|
-
`Course covers the ${courseLevel} level, which is one level below the required ${requiredLevel} level.`;
|
|
287
|
+
'Competency Area, Theme, Subtheme and Proficiency Level all match. This competency is not part of the gap.';
|
|
273
288
|
}
|
|
274
289
|
else {
|
|
290
|
+
/*
|
|
291
|
+
* At least one of the four attributes does not match.
|
|
292
|
+
* Therefore this competency is part of the gap.
|
|
293
|
+
*/
|
|
294
|
+
const mismatches = [];
|
|
295
|
+
if (!areaMatches) {
|
|
296
|
+
mismatches.push('Competency Area');
|
|
297
|
+
}
|
|
298
|
+
if (!themeMatches) {
|
|
299
|
+
mismatches.push('Theme');
|
|
300
|
+
}
|
|
301
|
+
if (!subthemeMatches) {
|
|
302
|
+
mismatches.push('Subtheme');
|
|
303
|
+
}
|
|
304
|
+
if (!proficiencyLevelMatches) {
|
|
305
|
+
mismatches.push('Proficiency Level');
|
|
306
|
+
}
|
|
275
307
|
status = 'NO_MATCH';
|
|
276
308
|
reason =
|
|
277
|
-
|
|
309
|
+
`${mismatches.join(', ')} ${mismatches.length === 1 ? 'does' : 'do'} not match. This competency is part of the gap.`;
|
|
278
310
|
}
|
|
279
311
|
results.push({
|
|
280
312
|
area: this.getCompetencyArea(requiredCompetency),
|
|
281
313
|
theme: this.getCompetencyTheme(requiredCompetency),
|
|
282
314
|
subtheme: this.getCompetencySubtheme(requiredCompetency),
|
|
315
|
+
proficiencyLevel: this.getProficiencyLevel(requiredCompetency),
|
|
283
316
|
currentLevel,
|
|
284
317
|
requiredLevel,
|
|
285
318
|
courseLevel,
|
|
@@ -297,6 +330,7 @@ export class GapAnalysisRecommendedCourseComponent {
|
|
|
297
330
|
this.normalize(result.area),
|
|
298
331
|
this.normalize(result.theme),
|
|
299
332
|
this.normalize(result.subtheme),
|
|
333
|
+
this.normalize(result.proficiencyLevel),
|
|
300
334
|
this.normalize(result.requiredLevel),
|
|
301
335
|
this.normalize(result.courseLevel)
|
|
302
336
|
].join('|');
|
|
@@ -409,4 +443,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
409
443
|
}], ctorParameters: function () { return [{ type: i1.SharedService }, { type: i2.MatDialog }, { type: i3.MatSnackBar }]; }, propDecorators: { planData: [{
|
|
410
444
|
type: Input
|
|
411
445
|
}] } });
|
|
412
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FwLWFuYWx5c2lzLXJlY29tbWVuZGVkLWNvdXJzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvY2JwLWFpL3NyYy9saWIvY29tcG9uZW50cy9nYXAtYW5hbHlzaXMtcmVjb21tZW5kZWQtY291cnNlL2dhcC1hbmFseXNpcy1yZWNvbW1lbmRlZC1jb3Vyc2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvZ2FwLWFuYWx5c2lzLXJlY29tbWVuZGVkLWNvdXJzZS9nYXAtYW5hbHlzaXMtcmVjb21tZW5kZWQtY291cnNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUF1QnpELE1BQU0sT0FBTyxxQ0FBcUM7SUF1QmhELFlBQ1UsYUFBNEIsRUFDNUIsTUFBaUIsRUFDakIsUUFBcUI7UUFGckIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBdEIvQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLDBCQUFxQixHQUFHLEVBQUUsQ0FBQztRQUczQixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLG1CQUFjLEdBQVUsRUFBRSxDQUFDO1FBQzNCLHdCQUFtQixHQUFVLEVBQUUsQ0FBQztRQUVoQyxzQkFBaUIsR0FBRztZQUNsQixLQUFLLEVBQUUsQ0FBQztZQUNSLGNBQWMsRUFBRSxDQUFDO1lBQ2pCLElBQUksRUFBRSxDQUFDO1NBQ1IsQ0FBQztRQUVGLHlCQUFvQixHQUErQixFQUFFLENBQUM7UUFFdEQsc0RBQXNEO1FBQ3RELHFCQUFnQixHQUE2QyxFQUFFLENBQUM7SUFNN0QsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDO1FBRXRELElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDbEUsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLHFCQUFxQixHQUFHLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUUzQyxNQUFNLFVBQVUsR0FBVSxFQUFFLENBQUM7Z0JBRTdCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsRUFBRTtvQkFDeEMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO3dCQUN6Qyw4REFBOEQ7d0JBQzlELDREQUE0RDt3QkFDNUQsMkJBQTJCO3dCQUMzQixJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsU0FBUyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTs0QkFDckMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDdkI7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7Z0JBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUM7Z0JBRWpDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDZixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hCLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxJQUFJLHFDQUFxQyxFQUM3RCxHQUFHLEVBQ0g7b0JBQ0UsUUFBUSxFQUFFLElBQUk7b0JBQ2QsVUFBVSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7aUJBQy9CLENBQ0YsQ0FBQztZQUNKLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLElBQUksQ0FBQyxpQkFBaUIsR0FBRztZQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNO1lBQ2pDLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxNQUFNO1lBQ3BFLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLE1BQU07U0FDNUQsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhO1FBQ1gsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFFekMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFFcEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzFELElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNaLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUVyQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRTtvQkFDcEMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO3dCQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDbkMsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7Z0JBRUQsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2dCQUU5QixPQUFPLENBQUMsR0FBRyxDQUNULDJDQUEyQyxFQUMzQyxJQUFJLENBQUMsY0FBYyxDQUNwQixDQUFDO1lBQ0osQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUM1QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUN2QixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gscUJBQXFCLENBQUMsTUFBVztRQUMvQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxFQUFFO1lBQ3ZDLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQztTQUM1QjtRQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLEVBQUU7WUFDMUMsT0FBTyxNQUFNLENBQUMsZUFBZSxDQUFDO1NBQy9CO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQVU7UUFDbEIsT0FBTyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQzthQUN2QixJQUFJLEVBQUU7YUFDTixXQUFXLEVBQUU7YUFDYixPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVEsQ0FBQyxNQUFXLEVBQUUsSUFBYztRQUNsQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ3RCLElBQ0UsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVM7Z0JBQ3pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJO2dCQUNwQixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUNqQztnQkFDQSxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNwQjtTQUNGO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsaUJBQWlCLENBQUMsVUFBZTtRQUMvQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFO1lBQy9CLG9CQUFvQjtZQUNwQixNQUFNO1lBQ04saUJBQWlCO1lBQ2pCLGdCQUFnQjtTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsVUFBZTtRQUNoQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFO1lBQy9CLHFCQUFxQjtZQUNyQixPQUFPO1lBQ1Asa0JBQWtCO1lBQ2xCLGlCQUFpQjtTQUNsQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQscUJBQXFCLENBQUMsVUFBZTtRQUNuQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFO1lBQy9CLHdCQUF3QjtZQUN4QixVQUFVO1lBQ1YscUJBQXFCO1lBQ3JCLG9CQUFvQjtTQUNyQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsY0FBYyxDQUFDLE1BQVcsRUFBRSxVQUFnQjtRQUMxQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7T0FFRztJQUNILHVCQUF1QjtRQUNyQixNQUFNLGVBQWUsR0FBRztZQUN0QixJQUFJLENBQUMsUUFBUSxFQUFFLFlBQVk7WUFDM0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVO1lBQ3pCLElBQUksQ0FBQyxRQUFRLEVBQUUsZUFBZTtZQUM5QixJQUFJLENBQUMsUUFBUSxFQUFFLGlCQUFpQjtZQUNoQyxJQUFJLENBQUMsUUFBUSxFQUFFLGVBQWU7WUFDOUIsSUFBSSxDQUFDLFdBQVcsRUFBRSxZQUFZO1lBQzlCLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVTtZQUM1QixJQUFJLENBQUMsV0FBVyxFQUFFLGlCQUFpQjtTQUNwQyxDQUFDO1FBRUYsS0FBSyxNQUFNLE1BQU0sSUFBSSxlQUFlLEVBQUU7WUFDcEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7Z0JBQzFDLE9BQU8sTUFBTSxDQUFDO2FBQ2Y7U0FDRjtRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQWU7UUFDOUIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRTtZQUMvQixxQkFBcUI7WUFDckIsc0JBQXNCO1lBQ3RCLGVBQWU7WUFDZixnQkFBZ0I7WUFDaEIsa0JBQWtCO1lBQ2xCLG1CQUFtQjtZQUNuQixPQUFPO1lBQ1AsVUFBVTtZQUNWLFdBQVc7U0FDWixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZSxDQUFDLFVBQWU7UUFDN0IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRTtZQUMvQixvQkFBb0I7WUFDcEIscUJBQXFCO1lBQ3JCLGNBQWM7WUFDZCxlQUFlO1lBQ2YseUJBQXlCO1lBQ3pCLDJCQUEyQjtTQUM1QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWSxDQUFDLEtBQVU7UUFDckIsUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzdCLEtBQUssYUFBYTtnQkFDaEIsT0FBTyxDQUFDLENBQUM7WUFDWCxLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxDQUFDLENBQUM7WUFDWCxLQUFLLFdBQVc7Z0JBQ2QsT0FBTyxDQUFDLENBQUM7WUFDWDtnQkFDRSxPQUFPLENBQUMsQ0FBQztTQUNaO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsbUJBQW1CLENBQUMsTUFBVztRQUM3QixNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBRTVELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUU7WUFDaEMsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlELE1BQU0sT0FBTyxHQUF3QixFQUFFLENBQUM7UUFFeEMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsZ0JBQXFCLEVBQUUsRUFBRTtZQUNuRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsQ0FDekMsQ0FBQztZQUNGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQ2hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUMxQyxDQUFDO1lBQ0YsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FDbkMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGdCQUFnQixDQUFDLENBQzdDLENBQUM7WUFFRixJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNuQyxPQUFPO2FBQ1I7WUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBRWxFLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLGtCQUF1QixFQUFFLEVBQUU7Z0JBQ3ZELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUMzQyxDQUFDO2dCQUNGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQ2xDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUM1QyxDQUFDO2dCQUNGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FDckMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGtCQUFrQixDQUFDLENBQy9DLENBQUM7Z0JBRUYsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLGdCQUFnQixFQUFFO29CQUN2QyxPQUFPO2lCQUNSO2dCQUVEOzs7OzttQkFLRztnQkFDSCxNQUFNLFdBQVcsR0FDZixDQUFDLFVBQVU7b0JBQ1gsQ0FBQyxZQUFZO29CQUNiLFVBQVUsS0FBSyxZQUFZLENBQUM7Z0JBRTlCLE1BQU0sWUFBWSxHQUFHLFdBQVcsS0FBSyxhQUFhLENBQUM7Z0JBQ25ELE1BQU0sZUFBZSxHQUFHLGNBQWMsS0FBSyxnQkFBZ0IsQ0FBQztnQkFFNUQsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLGVBQWUsRUFBRTtvQkFDckQsT0FBTztpQkFDUjtnQkFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDaEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUU5RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUN0RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUVsRCxJQUFJLE1BQWlCLENBQUM7Z0JBQ3RCLElBQUksTUFBYyxDQUFDO2dCQUVuQixJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNsRSxNQUFNLEdBQUcsVUFBVSxDQUFDO29CQUNwQixNQUFNO3dCQUNKLCtGQUErRixDQUFDO2lCQUNuRztxQkFBTSxJQUFJLFVBQVUsSUFBSSxZQUFZLEVBQUU7b0JBQ3JDLE1BQU0sR0FBRyxNQUFNLENBQUM7b0JBQ2hCLE1BQU07d0JBQ0oscUJBQXFCLFdBQVcsK0NBQStDLGFBQWEsNkJBQTZCLENBQUM7aUJBQzdIO3FCQUFNLElBQUksVUFBVSxLQUFLLFlBQVksR0FBRyxDQUFDLEVBQUU7b0JBQzFDLE1BQU0sR0FBRyxTQUFTLENBQUM7b0JBQ25CLE1BQU07d0JBQ0oscUJBQXFCLFdBQVcsaURBQWlELGFBQWEsU0FBUyxDQUFDO2lCQUMzRztxQkFBTTtvQkFDTCxNQUFNLEdBQUcsVUFBVSxDQUFDO29CQUNwQixNQUFNO3dCQUNKLHFCQUFxQixXQUFXLHVDQUF1QyxhQUFhLFNBQVMsQ0FBQztpQkFDakc7Z0JBRUQsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDWCxJQUFJLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDO29CQUNoRCxLQUFLLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDO29CQUNsRCxRQUFRLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGtCQUFrQixDQUFDO29CQUN4RCxZQUFZO29CQUNaLGFBQWE7b0JBQ2IsV0FBVztvQkFDWCxNQUFNO29CQUNOLE1BQU07aUJBQ1AsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCx5QkFBeUIsQ0FDdkIsT0FBNEI7UUFFNUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQTZCLENBQUM7UUFFcEQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN2QixNQUFNLEdBQUcsR0FBRztnQkFDVixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO2dCQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQzthQUNuQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVaLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNwQixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQzthQUN6QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUUzQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUM1QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQWE7UUFDL0IsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBYTtRQUMxQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7YUFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBYTtRQUM3QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7YUFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQWE7UUFDeEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDO2FBQ25DLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFhO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FDekMsTUFBTSxDQUFDLEVBQUUsQ0FDUCxNQUFNLENBQUMsTUFBTSxLQUFLLE1BQU07WUFDeEIsTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQzlCLENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBYTtRQUM5QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEQsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsRUFBRTtZQUNwRCxPQUFPLE1BQU0sQ0FBQztTQUNmO1FBRUQsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsRUFBRTtZQUN2RCxPQUFPLFNBQVMsQ0FBQztTQUNsQjtRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxLQUFhO1FBQ25DLFFBQVEsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3RDLEtBQUssTUFBTTtnQkFDVCxPQUFPLGdCQUFnQixDQUFDO1lBQzFCLEtBQUssU0FBUztnQkFDWixPQUFPLG1CQUFtQixDQUFDO1lBQzdCO2dCQUNFLE9BQU8sY0FBYyxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUFDLElBQVksRUFBRSxLQUFhO1FBQy9DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFMUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDakQsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV4RCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTtZQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLG9DQUFvQyxLQUFLLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMxRSxPQUFPLEVBQUUsQ0FBQztTQUNYO1FBRUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU1QyxPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUNwQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNwQyxPQUFPLEtBQUssQ0FBQzthQUNkO1lBRUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FDbkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUMxQixDQUFDO1lBRUYsSUFDRSxjQUFjLEtBQUssYUFBYTtnQkFDaEMsY0FBYyxLQUFLLFlBQVksRUFDL0I7Z0JBQ0EsT0FBTyxDQUNMLGNBQWMsS0FBSyxZQUFZO29CQUMvQixjQUFjLEtBQUssYUFBYSxDQUNqQyxDQUFDO2FBQ0g7WUFFRCxPQUFPLGNBQWMsS0FBSyxjQUFjLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsSUFBWSxFQUFFLEtBQWE7UUFDbEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3RCxNQUFNLEdBQUcsR0FBRyxHQUFHLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUUvQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNsQyxPQUFPLFlBQVksQ0FBQztTQUNyQjtRQUVELE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQVksRUFBRSxLQUFhO1FBQzVDLE1BQU0sR0FBRyxHQUFHLEdBQUcsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUM7WUFDNUIsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFZLEVBQUUsS0FBYTtRQUNwQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUMvQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUM7SUFDakQsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFZLEVBQUUsS0FBYTtRQUN4QyxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBWSxFQUFFLEtBQWE7UUFDM0MsTUFBTSxVQUFVLEdBQ2QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFakQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQzsrR0FuZ0JVLHFDQUFxQzttR0FBckMscUNBQXFDLDZHQ3ZCbEQsbXFhQTBQTTs7NEZEbk9PLHFDQUFxQztrQkFMakQsU0FBUzsrQkFDRSxxQ0FBcUM7c0pBTXRDLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbW9kdWxlcy9zaGFyZWQvc2VydmljZXMvc2hhcmVkLnNlcnZpY2UnO1xuXG50eXBlIEdhcFN0YXR1cyA9ICdGVUxMJyB8ICdQQVJUSUFMJyB8ICdOT19NQVRDSCc7XG5cbmludGVyZmFjZSBHYXBBbmFseXNpc1Jlc3VsdCB7XG4gIGFyZWE6IHN0cmluZztcbiAgdGhlbWU6IHN0cmluZztcbiAgc3VidGhlbWU6IHN0cmluZztcbiAgY3VycmVudExldmVsOiBzdHJpbmc7XG4gIHJlcXVpcmVkTGV2ZWw6IHN0cmluZztcbiAgY291cnNlTGV2ZWw6IHN0cmluZztcbiAgc3RhdHVzOiBHYXBTdGF0dXM7XG4gIHJlYXNvbjogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZ2FwLWFuYWx5c2lzLXJlY29tbWVuZGVkLWNvdXJzZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9nYXAtYW5hbHlzaXMtcmVjb21tZW5kZWQtY291cnNlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ2FwLWFuYWx5c2lzLXJlY29tbWVuZGVkLWNvdXJzZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEdhcEFuYWx5c2lzUmVjb21tZW5kZWRDb3Vyc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIHBsYW5EYXRhOiBhbnk7XG5cbiAgbG9hZGluZyA9IGZhbHNlO1xuICByZWNvbW1lbmRlZF9jb3Vyc2VfaWQgPSAnJztcbiAgY2JwUGxhbkRhdGE6IGFueTtcblxuICBzZWFyY2hUZXh0ID0gJyc7XG4gIGZpbHRlcmRDb3Vyc2VzOiBhbnlbXSA9IFtdO1xuICBzZWxlY3RGaWx0ZXJDb3Vyc2VzOiBhbnlbXSA9IFtdO1xuXG4gIGNvbXBldGVuY2llc0NvdW50ID0ge1xuICAgIHRvdGFsOiAwLFxuICAgIHB1YmxpY19jb3Vyc2VzOiAwLFxuICAgIGlnb3Q6IDBcbiAgfTtcblxuICBleHBhbmRlZENvbXBldGVuY2llczogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcblxuICAvLyBHYXAgcmVzdWx0cyBmb3IgZWFjaCBjb3Vyc2UsIGtleWVkIGJ5IGNvdXJzZSBpbmRleC5cbiAgY291cnNlR2FwUmVzdWx0czogeyBbaW5kZXg6IG51bWJlcl06IEdhcEFuYWx5c2lzUmVzdWx0W10gfSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSxcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuY2JwUGxhbkRhdGEgPSB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqO1xuXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldFJlY29tbWVuZGVkQ291cnNlKHRoaXMucGxhbkRhdGEuaWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgIHRoaXMucmVjb21tZW5kZWRfY291cnNlX2lkID0gcmVzPy5pZCB8fCAnJztcblxuICAgICAgICBjb25zdCBhbGxDb3Vyc2VzOiBhbnlbXSA9IFtdO1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcz8uZmlsdGVyZWRfY291cnNlcykpIHtcbiAgICAgICAgICByZXMuZmlsdGVyZWRfY291cnNlcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vIFJlbGV2YW5jeSByZW1haW5zIHRoZSBpbml0aWFsIGNvdXJzZSByZWNvbW1lbmRhdGlvbiBmaWx0ZXIuXG4gICAgICAgICAgICAvLyBHYXAgYW5hbHlzaXMgaXMgcGVyZm9ybWVkIHNlcGFyYXRlbHkgdXNpbmcgQXJlYSArIFRoZW1lICtcbiAgICAgICAgICAgIC8vIFN1YnRoZW1lICsgY291cnNlX2xldmVsLlxuICAgICAgICAgICAgaWYgKE51bWJlcihpdGVtPy5yZWxldmFuY3kgfHwgMCkgPiA3NSkge1xuICAgICAgICAgICAgICBhbGxDb3Vyc2VzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzID0gYWxsQ291cnNlcztcblxuICAgICAgICB0aGlzLnVwZGF0ZUNvbXBldGVuY3lDb3VudHMoKTtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVBbGxDb3Vyc2VHYXBzKCk7XG4gICAgICAgIHRoaXMuZ2V0VXNlckNvdXJzZSgpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcbiAgICAgICAgICBlcnJvcj8uZXJyb3I/LmRldGFpbCB8fCAnVW5hYmxlIHRvIGxvYWQgcmVjb21tZW5kZWQgY291cnNlcy4nLFxuICAgICAgICAgICdYJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkdXJhdGlvbjogMzAwMCxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUNvbXBldGVuY3lDb3VudHMoKTogdm9pZCB7XG4gICAgdGhpcy5jb21wZXRlbmNpZXNDb3VudCA9IHtcbiAgICAgIHRvdGFsOiB0aGlzLmZpbHRlcmRDb3Vyc2VzLmxlbmd0aCxcbiAgICAgIHB1YmxpY19jb3Vyc2VzOiB0aGlzLmZpbHRlcmRDb3Vyc2VzLmZpbHRlcihjID0+IGM/LmlzX3B1YmxpYykubGVuZ3RoLFxuICAgICAgaWdvdDogdGhpcy5maWx0ZXJkQ291cnNlcy5maWx0ZXIoYyA9PiAhYz8uaXNfcHVibGljKS5sZW5ndGhcbiAgICB9O1xuICB9XG5cbiAgZ2V0VXNlckNvdXJzZSgpOiB2b2lkIHtcbiAgICBjb25zdCByb2xlX21hcHBpbmdfaWQgPSB0aGlzLnBsYW5EYXRhLmlkO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRVc2VyQ291cnNlKHJvbGVfbWFwcGluZ19pZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzKSAmJiByZXMubGVuZ3RoKSB7XG4gICAgICAgICAgcmVzLmZvckVhY2goKGNvdXJzZTogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzLnB1c2goY291cnNlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlQ29tcGV0ZW5jeUNvdW50cygpO1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZUFsbENvdXJzZUdhcHMoKTtcblxuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAnZmlsdGVyZENvdXJzZXMgYWZ0ZXIgYWRkaW5nIHVzZXIgY291cnNlczonLFxuICAgICAgICAgIHRoaXMuZmlsdGVyZENvdXJzZXNcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdlcnJvcicsIGVycm9yKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBjb21wZXRlbmNpZXMgZnJvbSBlaXRoZXIgY29tcGV0ZW5jaWVzIG9yIGNvbXBldGVuY2llc192Ni5cbiAgICovXG4gIGdldENvdXJzZUNvbXBldGVuY2llcyhjb3Vyc2U6IGFueSk6IGFueVtdIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb3Vyc2U/LmNvbXBldGVuY2llcykpIHtcbiAgICAgIHJldHVybiBjb3Vyc2UuY29tcGV0ZW5jaWVzO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvdXJzZT8uY29tcGV0ZW5jaWVzX3Y2KSkge1xuICAgICAgcmV0dXJuIGNvdXJzZS5jb21wZXRlbmNpZXNfdjY7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgbm9ybWFsaXplKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUgPz8gJycpXG4gICAgICAudHJpbSgpXG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLnJlcGxhY2UoL1xccysvZywgJyAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBmaXJzdCBhdmFpbGFibGUgdmFsdWUgZnJvbSB0aGUgc3VwcGxpZWQga2V5cy5cbiAgICovXG4gIGdldFZhbHVlKG9iamVjdDogYW55LCBrZXlzOiBzdHJpbmdbXSk6IGFueSB7XG4gICAgaWYgKCFvYmplY3QpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIG9iamVjdFtrZXldICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgb2JqZWN0W2tleV0gIT09IG51bGwgJiZcbiAgICAgICAgU3RyaW5nKG9iamVjdFtrZXldKS50cmltKCkgIT09ICcnXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdFtrZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGdldENvbXBldGVuY3lBcmVhKGNvbXBldGVuY3k6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoY29tcGV0ZW5jeSwgW1xuICAgICAgJ2NvbXBldGVuY3lBcmVhTmFtZScsXG4gICAgICAnYXJlYScsXG4gICAgICAnY29tcGV0ZW5jeV9hcmVhJyxcbiAgICAgICdjb21wZXRlbmN5QXJlYSdcbiAgICBdKTtcbiAgfVxuXG4gIGdldENvbXBldGVuY3lUaGVtZShjb21wZXRlbmN5OiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlKGNvbXBldGVuY3ksIFtcbiAgICAgICdjb21wZXRlbmN5VGhlbWVOYW1lJyxcbiAgICAgICd0aGVtZScsXG4gICAgICAnY29tcGV0ZW5jeV90aGVtZScsXG4gICAgICAnY29tcGV0ZW5jeVRoZW1lJ1xuICAgIF0pO1xuICB9XG5cbiAgZ2V0Q29tcGV0ZW5jeVN1YnRoZW1lKGNvbXBldGVuY3k6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoY29tcGV0ZW5jeSwgW1xuICAgICAgJ2NvbXBldGVuY3lTdWJ0aGVtZU5hbWUnLFxuICAgICAgJ3N1YnRoZW1lJyxcbiAgICAgICdjb21wZXRlbmN5X3N1YnRoZW1lJyxcbiAgICAgICdjb21wZXRlbmN5U3VidGhlbWUnXG4gICAgXSk7XG4gIH1cblxuICAvKipcbiAgICogSU1QT1JUQU5UOlxuICAgKiBjb3Vyc2VfbGV2ZWwgaXMgdGhlIGF1dGhvcml0YXRpdmUgU1RPIGxldmVsIG9mIGEgY291cnNlLlxuICAgKi9cbiAgZ2V0Q291cnNlTGV2ZWwoY291cnNlOiBhbnksIGNvbXBldGVuY3k/OiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlKGNvdXJzZSwgWydjb3Vyc2VfbGV2ZWwnXSkgfHxcbiAgICAgIHRoaXMuZ2V0VmFsdWUoY29tcGV0ZW5jeSwgWydjb3Vyc2VfbGV2ZWwnXSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgcm9sZSBjb21wZXRlbmN5IGRhdGEgZnJvbSBwbGFuRGF0YSAvIGNicFBsYW5EYXRhLlxuICAgKi9cbiAgZ2V0UmVxdWlyZWRDb21wZXRlbmNpZXMoKTogYW55W10ge1xuICAgIGNvbnN0IHBvc3NpYmxlU291cmNlcyA9IFtcbiAgICAgIHRoaXMucGxhbkRhdGE/LmNvbXBldGVuY2llcyxcbiAgICAgIHRoaXMucGxhbkRhdGE/LmNvbXBldGVuY3ksXG4gICAgICB0aGlzLnBsYW5EYXRhPy5jb21wZXRlbmN5X2RhdGEsXG4gICAgICB0aGlzLnBsYW5EYXRhPy5yb2xlX2NvbXBldGVuY2llcyxcbiAgICAgIHRoaXMucGxhbkRhdGE/LmNvbXBldGVuY2llc192NixcbiAgICAgIHRoaXMuY2JwUGxhbkRhdGE/LmNvbXBldGVuY2llcyxcbiAgICAgIHRoaXMuY2JwUGxhbkRhdGE/LmNvbXBldGVuY3ksXG4gICAgICB0aGlzLmNicFBsYW5EYXRhPy5yb2xlX2NvbXBldGVuY2llc1xuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBwb3NzaWJsZVNvdXJjZXMpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHNvdXJjZSkgJiYgc291cmNlLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGdldFJlcXVpcmVkTGV2ZWwoY29tcGV0ZW5jeTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZShjb21wZXRlbmN5LCBbXG4gICAgICAncmVxdWlyZWRQcm9maWNpZW5jeScsXG4gICAgICAncmVxdWlyZWRfcHJvZmljaWVuY3knLFxuICAgICAgJ3JlcXVpcmVkTGV2ZWwnLFxuICAgICAgJ3JlcXVpcmVkX2xldmVsJyxcbiAgICAgICdwcm9maWNpZW5jeUxldmVsJyxcbiAgICAgICdwcm9maWNpZW5jeV9sZXZlbCcsXG4gICAgICAnbGV2ZWwnLFxuICAgICAgJ3N0b0xldmVsJyxcbiAgICAgICdzdG9fbGV2ZWwnXG4gICAgXSk7XG4gIH1cblxuICBnZXRDdXJyZW50TGV2ZWwoY29tcGV0ZW5jeTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZShjb21wZXRlbmN5LCBbXG4gICAgICAnY3VycmVudFByb2ZpY2llbmN5JyxcbiAgICAgICdjdXJyZW50X3Byb2ZpY2llbmN5JyxcbiAgICAgICdjdXJyZW50TGV2ZWwnLFxuICAgICAgJ2N1cnJlbnRfbGV2ZWwnLFxuICAgICAgJ2N1cnJlbnRQcm9maWNpZW5jeUxldmVsJyxcbiAgICAgICdjdXJyZW50X3Byb2ZpY2llbmN5X2xldmVsJ1xuICAgIF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNUTyBoaWVyYXJjaHk6XG4gICAqIE9wZXJhdGlvbmFsIDwgVGFjdGljYWwgPCBTdHJhdGVnaWNcbiAgICovXG4gIGdldExldmVsUmFuayhsZXZlbDogYW55KTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKHRoaXMubm9ybWFsaXplKGxldmVsKSkge1xuICAgICAgY2FzZSAnb3BlcmF0aW9uYWwnOlxuICAgICAgICByZXR1cm4gMTtcbiAgICAgIGNhc2UgJ3RhY3RpY2FsJzpcbiAgICAgICAgcmV0dXJuIDI7XG4gICAgICBjYXNlICdzdHJhdGVnaWMnOlxuICAgICAgICByZXR1cm4gMztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYXRjaCBjb3Vyc2UgY29tcGV0ZW5jeSB0byByb2xlIGNvbXBldGVuY3kgdXNpbmc6XG4gICAqIEFyZWEgLT4gVGhlbWUgLT4gU3VidGhlbWVcbiAgICpcbiAgICogVGhlbiBjb21wYXJlIHRoZSBjb3Vyc2UncyBjb3Vyc2VfbGV2ZWwgd2l0aCB0aGUgcmVxdWlyZWQgbGV2ZWwuXG4gICAqL1xuICBjYWxjdWxhdGVDb3Vyc2VHYXBzKGNvdXJzZTogYW55KTogR2FwQW5hbHlzaXNSZXN1bHRbXSB7XG4gICAgY29uc3QgcmVxdWlyZWRDb21wZXRlbmNpZXMgPSB0aGlzLmdldFJlcXVpcmVkQ29tcGV0ZW5jaWVzKCk7XG5cbiAgICBpZiAoIXJlcXVpcmVkQ29tcGV0ZW5jaWVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGNvdXJzZUNvbXBldGVuY2llcyA9IHRoaXMuZ2V0Q291cnNlQ29tcGV0ZW5jaWVzKGNvdXJzZSk7XG4gICAgY29uc3QgcmVzdWx0czogR2FwQW5hbHlzaXNSZXN1bHRbXSA9IFtdO1xuXG4gICAgY291cnNlQ29tcGV0ZW5jaWVzLmZvckVhY2goKGNvdXJzZUNvbXBldGVuY3k6IGFueSkgPT4ge1xuICAgICAgY29uc3QgY291cnNlQXJlYSA9IHRoaXMubm9ybWFsaXplKFxuICAgICAgICB0aGlzLmdldENvbXBldGVuY3lBcmVhKGNvdXJzZUNvbXBldGVuY3kpXG4gICAgICApO1xuICAgICAgY29uc3QgY291cnNlVGhlbWUgPSB0aGlzLm5vcm1hbGl6ZShcbiAgICAgICAgdGhpcy5nZXRDb21wZXRlbmN5VGhlbWUoY291cnNlQ29tcGV0ZW5jeSlcbiAgICAgICk7XG4gICAgICBjb25zdCBjb3Vyc2VTdWJ0aGVtZSA9IHRoaXMubm9ybWFsaXplKFxuICAgICAgICB0aGlzLmdldENvbXBldGVuY3lTdWJ0aGVtZShjb3Vyc2VDb21wZXRlbmN5KVxuICAgICAgKTtcblxuICAgICAgaWYgKCFjb3Vyc2VUaGVtZSB8fCAhY291cnNlU3VidGhlbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb3Vyc2VMZXZlbCA9IHRoaXMuZ2V0Q291cnNlTGV2ZWwoY291cnNlLCBjb3Vyc2VDb21wZXRlbmN5KTtcblxuICAgICAgcmVxdWlyZWRDb21wZXRlbmNpZXMuZm9yRWFjaCgocmVxdWlyZWRDb21wZXRlbmN5OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgcmVxdWlyZWRBcmVhID0gdGhpcy5ub3JtYWxpemUoXG4gICAgICAgICAgdGhpcy5nZXRDb21wZXRlbmN5QXJlYShyZXF1aXJlZENvbXBldGVuY3kpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVkVGhlbWUgPSB0aGlzLm5vcm1hbGl6ZShcbiAgICAgICAgICB0aGlzLmdldENvbXBldGVuY3lUaGVtZShyZXF1aXJlZENvbXBldGVuY3kpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVkU3VidGhlbWUgPSB0aGlzLm5vcm1hbGl6ZShcbiAgICAgICAgICB0aGlzLmdldENvbXBldGVuY3lTdWJ0aGVtZShyZXF1aXJlZENvbXBldGVuY3kpXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFyZXF1aXJlZFRoZW1lIHx8ICFyZXF1aXJlZFN1YnRoZW1lKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLypcbiAgICAgICAgICogQXJlYTpcbiAgICAgICAgICogSWYgYm90aCBjb3Vyc2UgYW5kIHJvbGUgY29udGFpbiBBcmVhLCB0aGV5IG11c3QgbWF0Y2guXG4gICAgICAgICAqIElmIEFyZWEgaXMgYWJzZW50IG9uIGVpdGhlciBzaWRlLCBUaGVtZSArIFN1YnRoZW1lIHJlbWFpblxuICAgICAgICAgKiB0aGUgbWF0Y2hpbmcga2V5cy5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGFyZWFNYXRjaGVzID1cbiAgICAgICAgICAhY291cnNlQXJlYSB8fFxuICAgICAgICAgICFyZXF1aXJlZEFyZWEgfHxcbiAgICAgICAgICBjb3Vyc2VBcmVhID09PSByZXF1aXJlZEFyZWE7XG5cbiAgICAgICAgY29uc3QgdGhlbWVNYXRjaGVzID0gY291cnNlVGhlbWUgPT09IHJlcXVpcmVkVGhlbWU7XG4gICAgICAgIGNvbnN0IHN1YnRoZW1lTWF0Y2hlcyA9IGNvdXJzZVN1YnRoZW1lID09PSByZXF1aXJlZFN1YnRoZW1lO1xuXG4gICAgICAgIGlmICghYXJlYU1hdGNoZXMgfHwgIXRoZW1lTWF0Y2hlcyB8fCAhc3VidGhlbWVNYXRjaGVzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVxdWlyZWRMZXZlbCA9IHRoaXMuZ2V0UmVxdWlyZWRMZXZlbChyZXF1aXJlZENvbXBldGVuY3kpO1xuICAgICAgICBjb25zdCBjdXJyZW50TGV2ZWwgPSB0aGlzLmdldEN1cnJlbnRMZXZlbChyZXF1aXJlZENvbXBldGVuY3kpO1xuXG4gICAgICAgIGNvbnN0IHJlcXVpcmVkUmFuayA9IHRoaXMuZ2V0TGV2ZWxSYW5rKHJlcXVpcmVkTGV2ZWwpO1xuICAgICAgICBjb25zdCBjb3Vyc2VSYW5rID0gdGhpcy5nZXRMZXZlbFJhbmsoY291cnNlTGV2ZWwpO1xuXG4gICAgICAgIGxldCBzdGF0dXM6IEdhcFN0YXR1cztcbiAgICAgICAgbGV0IHJlYXNvbjogc3RyaW5nO1xuXG4gICAgICAgIGlmICghY291cnNlTGV2ZWwgfHwgIXJlcXVpcmVkTGV2ZWwgfHwgIXJlcXVpcmVkUmFuayB8fCAhY291cnNlUmFuaykge1xuICAgICAgICAgIHN0YXR1cyA9ICdOT19NQVRDSCc7XG4gICAgICAgICAgcmVhc29uID1cbiAgICAgICAgICAgICdBcmVhLCBUaGVtZSBhbmQgU3VidGhlbWUgbWF0Y2gsIGJ1dCB0aGUgcmVxdWlyZWQgbGV2ZWwgb3IgY291cnNlX2xldmVsIGlzIG1pc3Npbmcgb3IgaW52YWxpZC4nO1xuICAgICAgICB9IGVsc2UgaWYgKGNvdXJzZVJhbmsgPj0gcmVxdWlyZWRSYW5rKSB7XG4gICAgICAgICAgc3RhdHVzID0gJ0ZVTEwnO1xuICAgICAgICAgIHJlYXNvbiA9XG4gICAgICAgICAgICBgQ291cnNlIGNvdmVycyB0aGUgJHtjb3Vyc2VMZXZlbH0gbGV2ZWwsIHdoaWNoIG1lZXRzIG9yIGV4Y2VlZHMgdGhlIHJlcXVpcmVkICR7cmVxdWlyZWRMZXZlbH0gbGV2ZWwgZm9yIHRoaXMgY29tcGV0ZW5jeS5gO1xuICAgICAgICB9IGVsc2UgaWYgKGNvdXJzZVJhbmsgPT09IHJlcXVpcmVkUmFuayAtIDEpIHtcbiAgICAgICAgICBzdGF0dXMgPSAnUEFSVElBTCc7XG4gICAgICAgICAgcmVhc29uID1cbiAgICAgICAgICAgIGBDb3Vyc2UgY292ZXJzIHRoZSAke2NvdXJzZUxldmVsfSBsZXZlbCwgd2hpY2ggaXMgb25lIGxldmVsIGJlbG93IHRoZSByZXF1aXJlZCAke3JlcXVpcmVkTGV2ZWx9IGxldmVsLmA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdHVzID0gJ05PX01BVENIJztcbiAgICAgICAgICByZWFzb24gPVxuICAgICAgICAgICAgYENvdXJzZSBjb3ZlcnMgdGhlICR7Y291cnNlTGV2ZWx9IGxldmVsLCB3aGljaCBpcyBiZWxvdyB0aGUgcmVxdWlyZWQgJHtyZXF1aXJlZExldmVsfSBsZXZlbC5gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICBhcmVhOiB0aGlzLmdldENvbXBldGVuY3lBcmVhKHJlcXVpcmVkQ29tcGV0ZW5jeSksXG4gICAgICAgICAgdGhlbWU6IHRoaXMuZ2V0Q29tcGV0ZW5jeVRoZW1lKHJlcXVpcmVkQ29tcGV0ZW5jeSksXG4gICAgICAgICAgc3VidGhlbWU6IHRoaXMuZ2V0Q29tcGV0ZW5jeVN1YnRoZW1lKHJlcXVpcmVkQ29tcGV0ZW5jeSksXG4gICAgICAgICAgY3VycmVudExldmVsLFxuICAgICAgICAgIHJlcXVpcmVkTGV2ZWwsXG4gICAgICAgICAgY291cnNlTGV2ZWwsXG4gICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgIHJlYXNvblxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMucmVtb3ZlRHVwbGljYXRlR2FwUmVzdWx0cyhyZXN1bHRzKTtcbiAgfVxuXG4gIHJlbW92ZUR1cGxpY2F0ZUdhcFJlc3VsdHMoXG4gICAgcmVzdWx0czogR2FwQW5hbHlzaXNSZXN1bHRbXVxuICApOiBHYXBBbmFseXNpc1Jlc3VsdFtdIHtcbiAgICBjb25zdCB1bmlxdWUgPSBuZXcgTWFwPHN0cmluZywgR2FwQW5hbHlzaXNSZXN1bHQ+KCk7XG5cbiAgICByZXN1bHRzLmZvckVhY2gocmVzdWx0ID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IFtcbiAgICAgICAgdGhpcy5ub3JtYWxpemUocmVzdWx0LmFyZWEpLFxuICAgICAgICB0aGlzLm5vcm1hbGl6ZShyZXN1bHQudGhlbWUpLFxuICAgICAgICB0aGlzLm5vcm1hbGl6ZShyZXN1bHQuc3VidGhlbWUpLFxuICAgICAgICB0aGlzLm5vcm1hbGl6ZShyZXN1bHQucmVxdWlyZWRMZXZlbCksXG4gICAgICAgIHRoaXMubm9ybWFsaXplKHJlc3VsdC5jb3Vyc2VMZXZlbClcbiAgICAgIF0uam9pbignfCcpO1xuXG4gICAgICBpZiAoIXVuaXF1ZS5oYXMoa2V5KSkge1xuICAgICAgICB1bmlxdWUuc2V0KGtleSwgcmVzdWx0KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBBcnJheS5mcm9tKHVuaXF1ZS52YWx1ZXMoKSk7XG4gIH1cblxuICBjYWxjdWxhdGVBbGxDb3Vyc2VHYXBzKCk6IHZvaWQge1xuICAgIHRoaXMuY291cnNlR2FwUmVzdWx0cyA9IHt9O1xuXG4gICAgdGhpcy5maWx0ZXJkQ291cnNlcy5mb3JFYWNoKChjb3Vyc2UsIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLmNvdXJzZUdhcFJlc3VsdHNbaW5kZXhdID0gdGhpcy5jYWxjdWxhdGVDb3Vyc2VHYXBzKGNvdXJzZSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDb3Vyc2VHYXBSZXN1bHRzKGluZGV4OiBudW1iZXIpOiBHYXBBbmFseXNpc1Jlc3VsdFtdIHtcbiAgICByZXR1cm4gdGhpcy5jb3Vyc2VHYXBSZXN1bHRzW2luZGV4XSB8fCBbXTtcbiAgfVxuXG4gIGdldEZ1bGxNYXRjaGVzKGluZGV4OiBudW1iZXIpOiBHYXBBbmFseXNpc1Jlc3VsdFtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb3Vyc2VHYXBSZXN1bHRzKGluZGV4KVxuICAgICAgLmZpbHRlcihyZXN1bHQgPT4gcmVzdWx0LnN0YXR1cyA9PT0gJ0ZVTEwnKTtcbiAgfVxuXG4gIGdldFBhcnRpYWxNYXRjaGVzKGluZGV4OiBudW1iZXIpOiBHYXBBbmFseXNpc1Jlc3VsdFtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb3Vyc2VHYXBSZXN1bHRzKGluZGV4KVxuICAgICAgLmZpbHRlcihyZXN1bHQgPT4gcmVzdWx0LnN0YXR1cyA9PT0gJ1BBUlRJQUwnKTtcbiAgfVxuXG4gIGdldE5vTWF0Y2hlcyhpbmRleDogbnVtYmVyKTogR2FwQW5hbHlzaXNSZXN1bHRbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q291cnNlR2FwUmVzdWx0cyhpbmRleClcbiAgICAgIC5maWx0ZXIocmVzdWx0ID0+IHJlc3VsdC5zdGF0dXMgPT09ICdOT19NQVRDSCcpO1xuICB9XG5cbiAgaGFzR2FwTWF0Y2goaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldENvdXJzZUdhcFJlc3VsdHMoaW5kZXgpLnNvbWUoXG4gICAgICByZXN1bHQgPT5cbiAgICAgICAgcmVzdWx0LnN0YXR1cyA9PT0gJ0ZVTEwnIHx8XG4gICAgICAgIHJlc3VsdC5zdGF0dXMgPT09ICdQQVJUSUFMJ1xuICAgICk7XG4gIH1cblxuICBnZXRDb3Vyc2VHYXBTdGF0dXMoaW5kZXg6IG51bWJlcik6IEdhcFN0YXR1cyB7XG4gICAgY29uc3QgcmVzdWx0cyA9IHRoaXMuZ2V0Q291cnNlR2FwUmVzdWx0cyhpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0cy5zb21lKHJlc3VsdCA9PiByZXN1bHQuc3RhdHVzID09PSAnRlVMTCcpKSB7XG4gICAgICByZXR1cm4gJ0ZVTEwnO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHRzLnNvbWUocmVzdWx0ID0+IHJlc3VsdC5zdGF0dXMgPT09ICdQQVJUSUFMJykpIHtcbiAgICAgIHJldHVybiAnUEFSVElBTCc7XG4gICAgfVxuXG4gICAgcmV0dXJuICdOT19NQVRDSCc7XG4gIH1cblxuICBnZXRDb3Vyc2VHYXBTdGF0dXNMYWJlbChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHRoaXMuZ2V0Q291cnNlR2FwU3RhdHVzKGluZGV4KSkge1xuICAgICAgY2FzZSAnRlVMTCc6XG4gICAgICAgIHJldHVybiAnRnVsbCBHYXAgTWF0Y2gnO1xuICAgICAgY2FzZSAnUEFSVElBTCc6XG4gICAgICAgIHJldHVybiAnUGFydGlhbCBHYXAgTWF0Y2gnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdObyBHYXAgTWF0Y2gnO1xuICAgIH1cbiAgfVxuXG4gIGdldENvbXBldGVuY2llc0J5VHlwZSh0eXBlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBhbnlbXSB7XG4gICAgY29uc3QgY291cnNlID0gdGhpcy5maWx0ZXJkQ291cnNlc1tpbmRleF07XG5cbiAgICBpZiAoIWNvdXJzZSkge1xuICAgICAgY29uc29sZS5sb2coYE5vIGNvdXJzZSBmb3VuZCBhdCBpbmRleCAke2luZGV4fWApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBldGVuY2llcyA9IHRoaXMuZ2V0Q291cnNlQ29tcGV0ZW5jaWVzKGNvdXJzZSk7XG5cbiAgICBpZiAoIWNvbXBldGVuY2llcy5sZW5ndGgpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBObyBjb21wZXRlbmNpZXMgZm91bmQgZm9yIGNvdXJzZSAke2luZGV4fSBhbmQgdHlwZSAke3R5cGV9YCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLm5vcm1hbGl6ZSh0eXBlKTtcblxuICAgIHJldHVybiBjb21wZXRlbmNpZXMuZmlsdGVyKChjOiBhbnkpID0+IHtcbiAgICAgIGlmICghYyB8fCAhdGhpcy5nZXRDb21wZXRlbmN5QXJlYShjKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbXBldGVuY3lBcmVhID0gdGhpcy5ub3JtYWxpemUoXG4gICAgICAgIHRoaXMuZ2V0Q29tcGV0ZW5jeUFyZWEoYylcbiAgICAgICk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgbm9ybWFsaXplZFR5cGUgPT09ICdiZWhhdmlvdXJhbCcgfHxcbiAgICAgICAgbm9ybWFsaXplZFR5cGUgPT09ICdiZWhhdmlvcmFsJ1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgY29tcGV0ZW5jeUFyZWEgPT09ICdiZWhhdmlvcmFsJyB8fFxuICAgICAgICAgIGNvbXBldGVuY3lBcmVhID09PSAnYmVoYXZpb3VyYWwnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21wZXRlbmN5QXJlYSA9PT0gbm9ybWFsaXplZFR5cGU7XG4gICAgfSk7XG4gIH1cblxuICBnZXREaXNwbGF5ZWRDb21wZXRlbmNpZXModHlwZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogYW55W10ge1xuICAgIGNvbnN0IGNvbXBldGVuY2llcyA9IHRoaXMuZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKHR5cGUsIGluZGV4KTtcbiAgICBjb25zdCBrZXkgPSBgJHtpbmRleH0tJHt0eXBlfWA7XG5cbiAgICBpZiAodGhpcy5leHBhbmRlZENvbXBldGVuY2llc1trZXldKSB7XG4gICAgICByZXR1cm4gY29tcGV0ZW5jaWVzO1xuICAgIH1cblxuICAgIHJldHVybiBjb21wZXRlbmNpZXMuc2xpY2UoMCwgMik7XG4gIH1cblxuICB0b2dnbGVDb21wZXRlbmNpZXModHlwZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gYCR7aW5kZXh9LSR7dHlwZX1gO1xuICAgIHRoaXMuZXhwYW5kZWRDb21wZXRlbmNpZXNba2V5XSA9XG4gICAgICAhdGhpcy5leHBhbmRlZENvbXBldGVuY2llc1trZXldO1xuICB9XG5cbiAgaXNFeHBhbmRlZCh0eXBlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBrZXkgPSBgJHtpbmRleH0tJHt0eXBlfWA7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kZWRDb21wZXRlbmNpZXNba2V5XSB8fCBmYWxzZTtcbiAgfVxuXG4gIGhhc01vcmVUaGFuVHdvKHR5cGU6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldENvbXBldGVuY2llc0J5VHlwZSh0eXBlLCBpbmRleCkubGVuZ3RoID4gMjtcbiAgfVxuXG4gIGdldFJlbWFpbmluZ0NvdW50KHR5cGU6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgdG90YWxDb3VudCA9XG4gICAgICB0aGlzLmdldENvbXBldGVuY2llc0J5VHlwZSh0eXBlLCBpbmRleCkubGVuZ3RoO1xuXG4gICAgcmV0dXJuIE1hdGgubWF4KHRvdGFsQ291bnQgLSAyLCAwKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNlY3Rpb24tY29udGFpbmVyIG10LTJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm91dHNpZGUtbGF5ZXItdG90YWxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnNpZGUtbGF5ZXJcIj5cbiAgICAgICAgICAgICAgICBUb3RhbCBDb3Vyc2VzXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPlxuICAgICAgICAgICAgICAgIHt7Y29tcGV0ZW5jaWVzQ291bnQ/LnRvdGFsfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm91dHNpZGUtbGF5ZXItdG90YWxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnNpZGUtbGF5ZXJcIj5cbiAgICAgICAgICAgICAgICBpR09UIFBsYXRmb3JtIENvdXJzZXNcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+XG4gICAgICAgICAgICAgICAge3tjb21wZXRlbmNpZXNDb3VudD8uaWdvdH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvdXRzaWRlLWxheWVyLXRvdGFsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5zaWRlLWxheWVyXCI+XG4gICAgICAgICAgICAgICAgUHVibGljIENvdXJzZXNcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+XG4gICAgICAgICAgICAgICAge3tjb21wZXRlbmNpZXNDb3VudD8ucHVibGljX2NvdXJzZXN9fVxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibXktNFwiPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtbGlzdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtbGlzdC1pdGVtXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZENvdXJzZXM7bGV0IGk9aW5kZXhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tlZC1jb3Vyc2UtY29udGFpbmVyXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1waWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtcGlsbC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48aW1nIHNyYz1cImFzc2V0cy9pY29ucy9jb3Vyc2Uuc3ZnXCI+PC9zcGFuPiZuYnNwOzxzcGFuPkNvdXJzZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QUkgUmVjb21tZW5kZWQ8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtPy5yYXRpb25hbGUgJiYgIWl0ZW0/LmlzX3B1YmxpY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1ncmVlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtZ3JlZW4tdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZyBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5BSSBSZWNvbW1lbmRlZCAtIGlHT1QgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIiAqbmdJZj1cIml0ZW0/LnBsYXRmb3JtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZyBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtocmVmXT1cIml0ZW0/LnB1YmxpY19saW5rXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PHNwYW4+UGxhdGZvcm0gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbT8ucGxhdGZvcm19fTwvc3Bhbj48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIiAqbmdJZj1cIml0ZW0/Lm9yZ2FuaXNhdGlvbj8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Qcm92aWRlciAtIHt7aXRlbT8ub3JnYW5pc2F0aW9uWzBdfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtPy5yYXRpb25hbGUgJiYgaXRlbT8uaXNfcHVibGljXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLXB1YmxpY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtcHVibGljLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QUkgUmVjb21tZW5kZWQgLSBQdWJsaWMgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIiAqbmdJZj1cIml0ZW0/LnBsYXRmb3JtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZyBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtocmVmXT1cIml0ZW0/LnB1YmxpY19saW5rXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PHNwYW4+UGxhdGZvcm0gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbT8ucGxhdGZvcm19fTwvc3Bhbj48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIiAqbmdJZj1cIml0ZW0/Lm9yZ2FuaXNhdGlvbj8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Qcm92aWRlciAtIHt7aXRlbT8ub3JnYW5pc2F0aW9uWzBdfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXRlbT8ucmF0aW9uYWxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLWdyYXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLWdyYXktdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZyBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5NYW51YWxseSBTdWdnZXN0ZWQgLSBpR09UIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZSBtdC0yXCIgKm5nSWY9XCJpdGVtPy5wbGF0Zm9ybVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBbaHJlZl09XCJpdGVtPy5wdWJsaWNfbGlua1wiIHRhcmdldD1cIl9ibGFua1wiPjxzcGFuPlBsYXRmb3JtIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0/LnBsYXRmb3JtfX08L3NwYW4+PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZSBtdC0yXCIgKm5nSWY9XCJpdGVtPy5vcmdhbmlzYXRpb24/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+UHJvdmlkZXIgLSB7e2l0ZW0/Lm9yZ2FuaXNhdGlvblswXX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtdGl0bGUgbXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0/LmNvdXJzZVwiPnt7aXRlbT8uY291cnNlfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtPy5uYW1lXCI+e3tpdGVtPy5uYW1lfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1kZXNjIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3tpdGVtPy5yYXRpb25hbGV9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiICpuZ0lmPVwiZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdCZWhhdmlvdXJhbCcsaSk/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdWItaGVhZGluZ1wiPkJlaGF2aW9yYWwgQ29tcGV0ZW5jaWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImNvbXBldGVuY3ktbGlzdCBtdC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJiZWhhdmlvdXJhbC1waWxsXCIgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0RGlzcGxheWVkQ29tcGV0ZW5jaWVzKCdCZWhhdmlvdXJhbCcsaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGV4dFwiPiB7eyBjb21wLmNvbXBldGVuY3lUaGVtZU5hbWUgfX0gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wLmNvbXBldGVuY3lTdWJUaGVtZU5hbWUgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImhhc01vcmVUaGFuVHdvKCdCZWhhdmlvdXJhbCcsaSlcIiBjbGFzcz1cInNob3ctbW9yZS1jb21wZXRlbmN5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzaG93LW1vcmUtbGluayBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJ0b2dnbGVDb21wZXRlbmNpZXMoJ0JlaGF2aW91cmFsJyxpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpc0V4cGFuZGVkKCdCZWhhdmlvdXJhbCcsaSkgPyAnU2hvdyBMZXNzJyA6ICcrJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFJlbWFpbmluZ0NvdW50KCdCZWhhdmlvdXJhbCcsaSkgKyAnIE1vcmUnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiICpuZ0lmPVwiZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdGdW5jdGlvbmFsJyxpKT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LXN1Yi1oZWFkaW5nXCI+RnVuY3Rpb25hbCBDb21wZXRlbmNpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiY29tcGV0ZW5jeS1saXN0IG10LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImZ1bmN0aW9uYWwtcGlsbFwiICpuZ0Zvcj1cImxldCBjb21wIG9mIGdldERpc3BsYXllZENvbXBldGVuY2llcygnRnVuY3Rpb25hbCcsaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGV4dFwiPiB7eyBjb21wLmNvbXBldGVuY3lUaGVtZU5hbWUgfX0gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wLmNvbXBldGVuY3lTdWJUaGVtZU5hbWUgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImhhc01vcmVUaGFuVHdvKCdGdW5jdGlvbmFsJyxpKVwiIGNsYXNzPVwic2hvdy1tb3JlLWNvbXBldGVuY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNob3ctbW9yZS1saW5rIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInRvZ2dsZUNvbXBldGVuY2llcygnRnVuY3Rpb25hbCcsaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXNFeHBhbmRlZCgnRnVuY3Rpb25hbCcsaSkgPyAnU2hvdyBMZXNzJyA6ICcrJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFJlbWFpbmluZ0NvdW50KCdGdW5jdGlvbmFsJyxpKSArICcgTW9yZScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nSWY9XCJnZXRDb21wZXRlbmNpZXNCeVR5cGUoJ0RvbWFpbicsaSk/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdWItaGVhZGluZ1wiPkRvbWFpbiBDb21wZXRlbmNpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiY29tcGV0ZW5jeS1saXN0IG10LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImRvbWFpbi1waWxsXCIgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0RGlzcGxheWVkQ29tcGV0ZW5jaWVzKCdEb21haW4nLGkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wZXRlbmN5LXRleHRcIj4ge3sgY29tcC5jb21wZXRlbmN5VGhlbWVOYW1lIH19IC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcC5jb21wZXRlbmN5U3ViVGhlbWVOYW1lIH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJoYXNNb3JlVGhhblR3bygnRG9tYWluJyxpKVwiIGNsYXNzPVwic2hvdy1tb3JlLWNvbXBldGVuY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNob3ctbW9yZS1saW5rIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInRvZ2dsZUNvbXBldGVuY2llcygnRG9tYWluJyxpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpc0V4cGFuZGVkKCdEb21haW4nLGkpID8gJ1Nob3cgTGVzcycgOiAnKycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSZW1haW5pbmdDb3VudCgnRG9tYWluJyxpKSArICcgTW9yZScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxldmFuY3ktY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsZXZhbmN5XCI+UmVsZXZhbmN5PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGFzaFwiPi08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJjZW50YWdlXCIgKm5nSWY9XCJpdGVtPy5yZWxldmFuY3lcIj57e2l0ZW0/LnJlbGV2YW5jeX19JTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcmNlbnRhZ2VcIiAqbmdJZj1cIiFpdGVtPy5yZWxldmFuY3lcIj5OL0E8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY2llcy1tYXRjaGVkLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmNpZXMtbWF0Y2hlZFwiPkNvbXBldGVuY2llcyBNYXRjaGVkPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhc2hcIj4tPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcmNlbnRhZ2VcIj44MCU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvdXJzZS1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1waWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtcGlsbC10ZXh0XCI+Q291cnNlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QUkgUmVjb21tZW5kZWQ8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5NYXRlcm5hbCwgSW5mYW50IEFuZCBZb3VuZyBDaGlsZCBOdXRyaXRpb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1kZXNjXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+VGhpcyBDb3Vyc2UgZGlyZWN0bHkgYWRkcmVzc2VzIGEgcHJpbWFyeSByZXNwb25zaWJpbGl0eSBvZiBBbmdhbndhbmRpIENhcmUgdGFrZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBwcm92aWRlIGFuZCBlZHVjYXRlIG9uIG51dHJpdGlvbiBmb3IgbW90aGVyIGFuZCB5b3VuZyBjaGlsZHJlbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGV2YW5jeS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsZXZhbmN5XCI+UmVsZXZhbmN5PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhc2hcIj4tPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcmNlbnRhZ2VcIj45MCU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmNpZXMtbWF0Y2hlZC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jaWVzLW1hdGNoZWRcIj5Db21wZXRlbmNpZXMgTWF0Y2hlZDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXNoXCI+LTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJjZW50YWdlXCI+ODAlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
|
|
446
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FwLWFuYWx5c2lzLXJlY29tbWVuZGVkLWNvdXJzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvY2JwLWFpL3NyYy9saWIvY29tcG9uZW50cy9nYXAtYW5hbHlzaXMtcmVjb21tZW5kZWQtY291cnNlL2dhcC1hbmFseXNpcy1yZWNvbW1lbmRlZC1jb3Vyc2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvZ2FwLWFuYWx5c2lzLXJlY29tbWVuZGVkLWNvdXJzZS9nYXAtYW5hbHlzaXMtcmVjb21tZW5kZWQtY291cnNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUF3QnpELE1BQU0sT0FBTyxxQ0FBcUM7SUF1QmhELFlBQ1UsYUFBNEIsRUFDNUIsTUFBaUIsRUFDakIsUUFBcUI7UUFGckIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNqQixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBdEIvQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLDBCQUFxQixHQUFHLEVBQUUsQ0FBQztRQUczQixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLG1CQUFjLEdBQVUsRUFBRSxDQUFDO1FBQzNCLHdCQUFtQixHQUFVLEVBQUUsQ0FBQztRQUVoQyxzQkFBaUIsR0FBRztZQUNsQixLQUFLLEVBQUUsQ0FBQztZQUNSLGNBQWMsRUFBRSxDQUFDO1lBQ2pCLElBQUksRUFBRSxDQUFDO1NBQ1IsQ0FBQztRQUVGLHlCQUFvQixHQUErQixFQUFFLENBQUM7UUFFdEQsc0RBQXNEO1FBQ3RELHFCQUFnQixHQUE2QyxFQUFF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QUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQztZQUM1QixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQVksRUFBRSxLQUFhO1FBQ3BDLE1BQU0sR0FBRyxHQUFHLEdBQUcsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUNqRCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQVksRUFBRSxLQUFhO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsS0FBYTtRQUMzQyxNQUFNLFVBQVUsR0FDZCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUVqRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDOytHQWhrQlUscUNBQXFDO21HQUFyQyxxQ0FBcUMsNkdDeEJsRCxtcWFBMFBNOzs0RkRsT08scUNBQXFDO2tCQUxqRCxTQUFTOytCQUNFLHFDQUFxQztzSkFNdEMsUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCB7IFNoYXJlZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9tb2R1bGVzL3NoYXJlZC9zZXJ2aWNlcy9zaGFyZWQuc2VydmljZSc7XG5cbnR5cGUgR2FwU3RhdHVzID0gJ0ZVTEwnIHwgJ1BBUlRJQUwnIHwgJ05PX01BVENIJztcblxuaW50ZXJmYWNlIEdhcEFuYWx5c2lzUmVzdWx0IHtcbiAgYXJlYTogc3RyaW5nO1xuICB0aGVtZTogc3RyaW5nO1xuICBzdWJ0aGVtZTogc3RyaW5nO1xuICBwcm9maWNpZW5jeUxldmVsOiBzdHJpbmc7XG4gIGN1cnJlbnRMZXZlbDogc3RyaW5nO1xuICByZXF1aXJlZExldmVsOiBzdHJpbmc7XG4gIGNvdXJzZUxldmVsOiBzdHJpbmc7XG4gIHN0YXR1czogR2FwU3RhdHVzO1xuICByZWFzb246IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWdhcC1hbmFseXNpcy1yZWNvbW1lbmRlZC1jb3Vyc2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2FwLWFuYWx5c2lzLXJlY29tbWVuZGVkLWNvdXJzZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dhcC1hbmFseXNpcy1yZWNvbW1lbmRlZC1jb3Vyc2UuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBHYXBBbmFseXNpc1JlY29tbWVuZGVkQ291cnNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoKSBwbGFuRGF0YTogYW55O1xuXG4gIGxvYWRpbmcgPSBmYWxzZTtcbiAgcmVjb21tZW5kZWRfY291cnNlX2lkID0gJyc7XG4gIGNicFBsYW5EYXRhOiBhbnk7XG5cbiAgc2VhcmNoVGV4dCA9ICcnO1xuICBmaWx0ZXJkQ291cnNlczogYW55W10gPSBbXTtcbiAgc2VsZWN0RmlsdGVyQ291cnNlczogYW55W10gPSBbXTtcblxuICBjb21wZXRlbmNpZXNDb3VudCA9IHtcbiAgICB0b3RhbDogMCxcbiAgICBwdWJsaWNfY291cnNlczogMCxcbiAgICBpZ290OiAwXG4gIH07XG5cbiAgZXhwYW5kZWRDb21wZXRlbmNpZXM6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG5cbiAgLy8gR2FwIHJlc3VsdHMgZm9yIGVhY2ggY291cnNlLCBrZXllZCBieSBjb3Vyc2UgaW5kZXguXG4gIGNvdXJzZUdhcFJlc3VsdHM6IHsgW2luZGV4OiBudW1iZXJdOiBHYXBBbmFseXNpc1Jlc3VsdFtdIH0gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNoYXJlZFNlcnZpY2U6IFNoYXJlZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhclxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmNicFBsYW5EYXRhID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iajtcblxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5nZXRSZWNvbW1lbmRlZENvdXJzZSh0aGlzLnBsYW5EYXRhLmlkKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICB0aGlzLnJlY29tbWVuZGVkX2NvdXJzZV9pZCA9IHJlcz8uaWQgfHwgJyc7XG5cbiAgICAgICAgY29uc3QgYWxsQ291cnNlczogYW55W10gPSBbXTtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXM/LmZpbHRlcmVkX2NvdXJzZXMpKSB7XG4gICAgICAgICAgcmVzLmZpbHRlcmVkX2NvdXJzZXMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyBSZWxldmFuY3kgcmVtYWlucyB0aGUgaW5pdGlhbCBjb3Vyc2UgcmVjb21tZW5kYXRpb24gZmlsdGVyLlxuICAgICAgICAgICAgLy8gR2FwIGFuYWx5c2lzIGlzIHBlcmZvcm1lZCBzZXBhcmF0ZWx5IHVzaW5nIEFyZWEgKyBUaGVtZSArXG4gICAgICAgICAgICAvLyBTdWJ0aGVtZSArIGNvdXJzZV9sZXZlbC5cbiAgICAgICAgICAgIGlmIChOdW1iZXIoaXRlbT8ucmVsZXZhbmN5IHx8IDApID4gNzUpIHtcbiAgICAgICAgICAgICAgYWxsQ291cnNlcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maWx0ZXJkQ291cnNlcyA9IGFsbENvdXJzZXM7XG5cbiAgICAgICAgdGhpcy51cGRhdGVDb21wZXRlbmN5Q291bnRzKCk7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlQWxsQ291cnNlR2FwcygpO1xuICAgICAgICB0aGlzLmdldFVzZXJDb3Vyc2UoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXG4gICAgICAgICAgZXJyb3I/LmVycm9yPy5kZXRhaWwgfHwgJ1VuYWJsZSB0byBsb2FkIHJlY29tbWVuZGVkIGNvdXJzZXMuJyxcbiAgICAgICAgICAnWCcsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVDb21wZXRlbmN5Q291bnRzKCk6IHZvaWQge1xuICAgIHRoaXMuY29tcGV0ZW5jaWVzQ291bnQgPSB7XG4gICAgICB0b3RhbDogdGhpcy5maWx0ZXJkQ291cnNlcy5sZW5ndGgsXG4gICAgICBwdWJsaWNfY291cnNlczogdGhpcy5maWx0ZXJkQ291cnNlcy5maWx0ZXIoYyA9PiBjPy5pc19wdWJsaWMpLmxlbmd0aCxcbiAgICAgIGlnb3Q6IHRoaXMuZmlsdGVyZENvdXJzZXMuZmlsdGVyKGMgPT4gIWM/LmlzX3B1YmxpYykubGVuZ3RoXG4gICAgfTtcbiAgfVxuXG4gIGdldFVzZXJDb3Vyc2UoKTogdm9pZCB7XG4gICAgY29uc3Qgcm9sZV9tYXBwaW5nX2lkID0gdGhpcy5wbGFuRGF0YS5pZDtcblxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0VXNlckNvdXJzZShyb2xlX21hcHBpbmdfaWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcykgJiYgcmVzLmxlbmd0aCkge1xuICAgICAgICAgIHJlcy5mb3JFYWNoKChjb3Vyc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJkQ291cnNlcy5wdXNoKGNvdXJzZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZUNvbXBldGVuY3lDb3VudHMoKTtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVBbGxDb3Vyc2VHYXBzKCk7XG5cbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgJ2ZpbHRlcmRDb3Vyc2VzIGFmdGVyIGFkZGluZyB1c2VyIGNvdXJzZXM6JyxcbiAgICAgICAgICB0aGlzLmZpbHRlcmRDb3Vyc2VzXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnZXJyb3InLCBlcnJvcik7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgY29tcGV0ZW5jaWVzIGZyb20gZWl0aGVyIGNvbXBldGVuY2llcyBvciBjb21wZXRlbmNpZXNfdjYuXG4gICAqL1xuICBnZXRDb3Vyc2VDb21wZXRlbmNpZXMoY291cnNlOiBhbnkpOiBhbnlbXSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY291cnNlPy5jb21wZXRlbmNpZXMpKSB7XG4gICAgICByZXR1cm4gY291cnNlLmNvbXBldGVuY2llcztcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb3Vyc2U/LmNvbXBldGVuY2llc192NikpIHtcbiAgICAgIHJldHVybiBjb3Vyc2UuY29tcGV0ZW5jaWVzX3Y2O1xuICAgIH1cblxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIG5vcm1hbGl6ZSh2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlID8/ICcnKVxuICAgICAgLnRyaW0oKVxuICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgIC5yZXBsYWNlKC9cXHMrL2csICcgJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZmlyc3QgYXZhaWxhYmxlIHZhbHVlIGZyb20gdGhlIHN1cHBsaWVkIGtleXMuXG4gICAqL1xuICBnZXRWYWx1ZShvYmplY3Q6IGFueSwga2V5czogc3RyaW5nW10pOiBhbnkge1xuICAgIGlmICghb2JqZWN0KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgaWYgKFxuICAgICAgICBvYmplY3Rba2V5XSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIG9iamVjdFtrZXldICE9PSBudWxsICYmXG4gICAgICAgIFN0cmluZyhvYmplY3Rba2V5XSkudHJpbSgpICE9PSAnJ1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBvYmplY3Rba2V5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBnZXRDb21wZXRlbmN5QXJlYShjb21wZXRlbmN5OiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlKGNvbXBldGVuY3ksIFtcbiAgICAgICdjb21wZXRlbmN5QXJlYU5hbWUnLFxuICAgICAgJ2FyZWEnLFxuICAgICAgJ2NvbXBldGVuY3lfYXJlYScsXG4gICAgICAnY29tcGV0ZW5jeUFyZWEnXG4gICAgXSk7XG4gIH1cblxuICBnZXRDb21wZXRlbmN5VGhlbWUoY29tcGV0ZW5jeTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZShjb21wZXRlbmN5LCBbXG4gICAgICAnY29tcGV0ZW5jeVRoZW1lTmFtZScsXG4gICAgICAndGhlbWUnLFxuICAgICAgJ2NvbXBldGVuY3lfdGhlbWUnLFxuICAgICAgJ2NvbXBldGVuY3lUaGVtZSdcbiAgICBdKTtcbiAgfVxuXG4gIGdldENvbXBldGVuY3lTdWJ0aGVtZShjb21wZXRlbmN5OiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlKGNvbXBldGVuY3ksIFtcbiAgICAgICdjb21wZXRlbmN5U3VidGhlbWVOYW1lJyxcbiAgICAgICdzdWJ0aGVtZScsXG4gICAgICAnY29tcGV0ZW5jeV9zdWJ0aGVtZScsXG4gICAgICAnY29tcGV0ZW5jeVN1YnRoZW1lJ1xuICAgIF0pO1xuICB9XG5cbiAgZ2V0UHJvZmljaWVuY3lMZXZlbChjb21wZXRlbmN5OiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlKGNvbXBldGVuY3ksIFtcbiAgICAgICdwcm9maWNpZW5jeV9sZXZlbCcsXG4gICAgICAncHJvZmljaWVuY3lMZXZlbCcsXG4gICAgICAncmVxdWlyZWRQcm9maWNpZW5jeScsXG4gICAgICAncmVxdWlyZWRfcHJvZmljaWVuY3knLFxuICAgICAgJ2N1cnJlbnRQcm9maWNpZW5jeScsXG4gICAgICAnY3VycmVudF9wcm9maWNpZW5jeSdcbiAgICBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJTVBPUlRBTlQ6XG4gICAqIGNvdXJzZV9sZXZlbCBpcyB0aGUgYXV0aG9yaXRhdGl2ZSBTVE8gbGV2ZWwgb2YgYSBjb3Vyc2UuXG4gICAqL1xuICBnZXRDb3Vyc2VMZXZlbChjb3Vyc2U6IGFueSwgY29tcGV0ZW5jeT86IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoY291cnNlLCBbJ2NvdXJzZV9sZXZlbCddKSB8fFxuICAgICAgdGhpcy5nZXRWYWx1ZShjb21wZXRlbmN5LCBbJ2NvdXJzZV9sZXZlbCddKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyByb2xlIGNvbXBldGVuY3kgZGF0YSBmcm9tIHBsYW5EYXRhIC8gY2JwUGxhbkRhdGEuXG4gICAqL1xuICBnZXRSZXF1aXJlZENvbXBldGVuY2llcygpOiBhbnlbXSB7XG4gICAgY29uc3QgcG9zc2libGVTb3VyY2VzID0gW1xuICAgICAgdGhpcy5wbGFuRGF0YT8uY29tcGV0ZW5jaWVzLFxuICAgICAgdGhpcy5wbGFuRGF0YT8uY29tcGV0ZW5jeSxcbiAgICAgIHRoaXMucGxhbkRhdGE/LmNvbXBldGVuY3lfZGF0YSxcbiAgICAgIHRoaXMucGxhbkRhdGE/LnJvbGVfY29tcGV0ZW5jaWVzLFxuICAgICAgdGhpcy5wbGFuRGF0YT8uY29tcGV0ZW5jaWVzX3Y2LFxuICAgICAgdGhpcy5jYnBQbGFuRGF0YT8uY29tcGV0ZW5jaWVzLFxuICAgICAgdGhpcy5jYnBQbGFuRGF0YT8uY29tcGV0ZW5jeSxcbiAgICAgIHRoaXMuY2JwUGxhbkRhdGE/LnJvbGVfY29tcGV0ZW5jaWVzXG4gICAgXTtcblxuICAgIGZvciAoY29uc3Qgc291cmNlIG9mIHBvc3NpYmxlU291cmNlcykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlKSAmJiBzb3VyY2UubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0UmVxdWlyZWRMZXZlbChjb21wZXRlbmN5OiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlKGNvbXBldGVuY3ksIFtcbiAgICAgICdyZXF1aXJlZFByb2ZpY2llbmN5JyxcbiAgICAgICdyZXF1aXJlZF9wcm9maWNpZW5jeScsXG4gICAgICAncmVxdWlyZWRMZXZlbCcsXG4gICAgICAncmVxdWlyZWRfbGV2ZWwnLFxuICAgICAgJ3Byb2ZpY2llbmN5TGV2ZWwnLFxuICAgICAgJ3Byb2ZpY2llbmN5X2xldmVsJyxcbiAgICAgICdsZXZlbCcsXG4gICAgICAnc3RvTGV2ZWwnLFxuICAgICAgJ3N0b19sZXZlbCdcbiAgICBdKTtcbiAgfVxuXG4gIGdldEN1cnJlbnRMZXZlbChjb21wZXRlbmN5OiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFZhbHVlKGNvbXBldGVuY3ksIFtcbiAgICAgICdjdXJyZW50UHJvZmljaWVuY3knLFxuICAgICAgJ2N1cnJlbnRfcHJvZmljaWVuY3knLFxuICAgICAgJ2N1cnJlbnRMZXZlbCcsXG4gICAgICAnY3VycmVudF9sZXZlbCcsXG4gICAgICAnY3VycmVudFByb2ZpY2llbmN5TGV2ZWwnLFxuICAgICAgJ2N1cnJlbnRfcHJvZmljaWVuY3lfbGV2ZWwnXG4gICAgXSk7XG4gIH1cblxuICAvKipcbiAgICogU1RPIGhpZXJhcmNoeTpcbiAgICogT3BlcmF0aW9uYWwgPCBUYWN0aWNhbCA8IFN0cmF0ZWdpY1xuICAgKi9cbiAgZ2V0TGV2ZWxSYW5rKGxldmVsOiBhbnkpOiBudW1iZXIge1xuICAgIHN3aXRjaCAodGhpcy5ub3JtYWxpemUobGV2ZWwpKSB7XG4gICAgICBjYXNlICdvcGVyYXRpb25hbCc6XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgY2FzZSAndGFjdGljYWwnOlxuICAgICAgICByZXR1cm4gMjtcbiAgICAgIGNhc2UgJ3N0cmF0ZWdpYyc6XG4gICAgICAgIHJldHVybiAzO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1hdGNoIGNvdXJzZSBjb21wZXRlbmN5IHRvIHJvbGUgY29tcGV0ZW5jeSB1c2luZzpcbiAgICogQXJlYSAtPiBUaGVtZSAtPiBTdWJ0aGVtZVxuICAgKlxuICAgKiBUaGVuIGNvbXBhcmUgdGhlIGNvdXJzZSdzIGNvdXJzZV9sZXZlbCB3aXRoIHRoZSByZXF1aXJlZCBsZXZlbC5cbiAgICovXG4gIGNhbGN1bGF0ZUNvdXJzZUdhcHMoY291cnNlOiBhbnkpOiBHYXBBbmFseXNpc1Jlc3VsdFtdIHtcbiAgICBjb25zdCByZXF1aXJlZENvbXBldGVuY2llcyA9IHRoaXMuZ2V0UmVxdWlyZWRDb21wZXRlbmNpZXMoKTtcblxuICAgIGlmICghcmVxdWlyZWRDb21wZXRlbmNpZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgY291cnNlQ29tcGV0ZW5jaWVzID0gdGhpcy5nZXRDb3Vyc2VDb21wZXRlbmNpZXMoY291cnNlKTtcbiAgICBjb25zdCByZXN1bHRzOiBHYXBBbmFseXNpc1Jlc3VsdFtdID0gW107XG5cbiAgICBjb3Vyc2VDb21wZXRlbmNpZXMuZm9yRWFjaCgoY291cnNlQ29tcGV0ZW5jeTogYW55KSA9PiB7XG4gICAgICBjb25zdCBjb3Vyc2VBcmVhID0gdGhpcy5ub3JtYWxpemUoXG4gICAgICAgIHRoaXMuZ2V0Q29tcGV0ZW5jeUFyZWEoY291cnNlQ29tcGV0ZW5jeSlcbiAgICAgICk7XG4gICAgICBjb25zdCBjb3Vyc2VUaGVtZSA9IHRoaXMubm9ybWFsaXplKFxuICAgICAgICB0aGlzLmdldENvbXBldGVuY3lUaGVtZShjb3Vyc2VDb21wZXRlbmN5KVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNvdXJzZVN1YnRoZW1lID0gdGhpcy5ub3JtYWxpemUoXG4gICAgICAgIHRoaXMuZ2V0Q29tcGV0ZW5jeVN1YnRoZW1lKGNvdXJzZUNvbXBldGVuY3kpXG4gICAgICApO1xuXG4gICAgICBpZiAoIWNvdXJzZVRoZW1lIHx8ICFjb3Vyc2VTdWJ0aGVtZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvdXJzZUxldmVsID0gdGhpcy5nZXRDb3Vyc2VMZXZlbChjb3Vyc2UsIGNvdXJzZUNvbXBldGVuY3kpO1xuXG4gICAgICByZXF1aXJlZENvbXBldGVuY2llcy5mb3JFYWNoKChyZXF1aXJlZENvbXBldGVuY3k6IGFueSkgPT4ge1xuICAgICAgY29uc3QgcmVxdWlyZWRBcmVhID0gdGhpcy5ub3JtYWxpemUoXG4gICAgICAgIHRoaXMuZ2V0Q29tcGV0ZW5jeUFyZWEocmVxdWlyZWRDb21wZXRlbmN5KVxuICAgICAgKTtcblxuICAgICAgY29uc3QgcmVxdWlyZWRUaGVtZSA9IHRoaXMubm9ybWFsaXplKFxuICAgICAgICB0aGlzLmdldENvbXBldGVuY3lUaGVtZShyZXF1aXJlZENvbXBldGVuY3kpXG4gICAgICApO1xuXG4gICAgICBjb25zdCByZXF1aXJlZFN1YnRoZW1lID0gdGhpcy5ub3JtYWxpemUoXG4gICAgICAgIHRoaXMuZ2V0Q29tcGV0ZW5jeVN1YnRoZW1lKHJlcXVpcmVkQ29tcGV0ZW5jeSlcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHJlcXVpcmVkUHJvZmljaWVuY3lMZXZlbCA9IHRoaXMubm9ybWFsaXplKFxuICAgICAgICB0aGlzLmdldFByb2ZpY2llbmN5TGV2ZWwocmVxdWlyZWRDb21wZXRlbmN5KVxuICAgICAgKTtcblxuICAgICAgaWYgKCFyZXF1aXJlZFRoZW1lIHx8ICFyZXF1aXJlZFN1YnRoZW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY291cnNlUHJvZmljaWVuY3lMZXZlbCA9IHRoaXMubm9ybWFsaXplKFxuICAgICAgICB0aGlzLmdldFByb2ZpY2llbmN5TGV2ZWwoY291cnNlQ29tcGV0ZW5jeSlcbiAgICAgICk7XG5cbiAgICAgIC8qXG4gICAgICAqIE1hdGNoOlxuICAgICAgKiBBcmVhICsgVGhlbWUgKyBTdWJ0aGVtZSArIFByb2ZpY2llbmN5IExldmVsXG4gICAgICAqL1xuXG4gICAgICBjb25zdCBhcmVhTWF0Y2hlcyA9XG4gICAgICAgICFjb3Vyc2VBcmVhIHx8XG4gICAgICAgICFyZXF1aXJlZEFyZWEgfHxcbiAgICAgICAgY291cnNlQXJlYSA9PT0gcmVxdWlyZWRBcmVhO1xuXG4gICAgICBjb25zdCB0aGVtZU1hdGNoZXMgPVxuICAgICAgICBjb3Vyc2VUaGVtZSA9PT0gcmVxdWlyZWRUaGVtZTtcblxuICAgICAgY29uc3Qgc3VidGhlbWVNYXRjaGVzID1cbiAgICAgICAgY291cnNlU3VidGhlbWUgPT09IHJlcXVpcmVkU3VidGhlbWU7XG5cbiAgICAgIGNvbnN0IHByb2ZpY2llbmN5TGV2ZWxNYXRjaGVzID1cbiAgICAgICAgY291cnNlUHJvZmljaWVuY3lMZXZlbCA9PT0gcmVxdWlyZWRQcm9maWNpZW5jeUxldmVsO1xuXG4gICAgICAvKlxuICAgICAgKiBBbGwgNCBwYXJhbWV0ZXJzIG11c3QgbWF0Y2guXG4gICAgICAqXG4gICAgICAqIElmIGFsbCA0IG1hdGNoOlxuICAgICAgKiAgICAgTk9UIHBhcnQgb2YgZ2FwXG4gICAgICAqXG4gICAgICAqIElmIGFueSBvbmUgZG9lcyBub3QgbWF0Y2g6XG4gICAgICAqICAgICBQQVJUIG9mIGdhcFxuICAgICAgKi9cbiAgICAgIGNvbnN0IGFsbEZvdXJNYXRjaCA9XG4gICAgICAgIGFyZWFNYXRjaGVzICYmXG4gICAgICAgIHRoZW1lTWF0Y2hlcyAmJlxuICAgICAgICBzdWJ0aGVtZU1hdGNoZXMgJiZcbiAgICAgICAgcHJvZmljaWVuY3lMZXZlbE1hdGNoZXM7XG5cbiAgICAgIGNvbnN0IHJlcXVpcmVkTGV2ZWwgPSB0aGlzLmdldFJlcXVpcmVkTGV2ZWwocmVxdWlyZWRDb21wZXRlbmN5KTtcbiAgICAgIGNvbnN0IGN1cnJlbnRMZXZlbCA9IHRoaXMuZ2V0Q3VycmVudExldmVsKHJlcXVpcmVkQ29tcGV0ZW5jeSk7XG5cbiAgICAgIGNvbnN0IHJlcXVpcmVkUmFuayA9IHRoaXMuZ2V0TGV2ZWxSYW5rKHJlcXVpcmVkTGV2ZWwpO1xuICAgICAgY29uc3QgY291cnNlUmFuayA9IHRoaXMuZ2V0TGV2ZWxSYW5rKGNvdXJzZUxldmVsKTtcblxuICAgICAgbGV0IHN0YXR1czogR2FwU3RhdHVzO1xuICAgICAgbGV0IHJlYXNvbjogc3RyaW5nO1xuXG4gICAgICBpZiAoYWxsRm91ck1hdGNoKSB7XG4gICAgICAgIC8qXG4gICAgICAgICogQWxsIGZvdXIgY29tcGV0ZW5jeSBhdHRyaWJ1dGVzIG1hdGNoLlxuICAgICAgICAqIFRoZXJlZm9yZSB0aGlzIGNvbXBldGVuY3kgaXMgTk9UIHBhcnQgb2YgdGhlIGdhcC5cbiAgICAgICAgKi9cbiAgICAgICAgc3RhdHVzID0gJ0ZVTEwnO1xuXG4gICAgICAgIHJlYXNvbiA9XG4gICAgICAgICAgJ0NvbXBldGVuY3kgQXJlYSwgVGhlbWUsIFN1YnRoZW1lIGFuZCBQcm9maWNpZW5jeSBMZXZlbCBhbGwgbWF0Y2guIFRoaXMgY29tcGV0ZW5jeSBpcyBub3QgcGFydCBvZiB0aGUgZ2FwLic7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qXG4gICAgICAgICogQXQgbGVhc3Qgb25lIG9mIHRoZSBmb3VyIGF0dHJpYnV0ZXMgZG9lcyBub3QgbWF0Y2guXG4gICAgICAgICogVGhlcmVmb3JlIHRoaXMgY29tcGV0ZW5jeSBpcyBwYXJ0IG9mIHRoZSBnYXAuXG4gICAgICAgICovXG5cbiAgICAgICAgY29uc3QgbWlzbWF0Y2hlczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICBpZiAoIWFyZWFNYXRjaGVzKSB7XG4gICAgICAgICAgbWlzbWF0Y2hlcy5wdXNoKCdDb21wZXRlbmN5IEFyZWEnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhlbWVNYXRjaGVzKSB7XG4gICAgICAgICAgbWlzbWF0Y2hlcy5wdXNoKCdUaGVtZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzdWJ0aGVtZU1hdGNoZXMpIHtcbiAgICAgICAgICBtaXNtYXRjaGVzLnB1c2goJ1N1YnRoZW1lJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXByb2ZpY2llbmN5TGV2ZWxNYXRjaGVzKSB7XG4gICAgICAgICAgbWlzbWF0Y2hlcy5wdXNoKCdQcm9maWNpZW5jeSBMZXZlbCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdHVzID0gJ05PX01BVENIJztcblxuICAgICAgICByZWFzb24gPVxuICAgICAgICAgIGAke21pc21hdGNoZXMuam9pbignLCAnKX0gJHttaXNtYXRjaGVzLmxlbmd0aCA9PT0gMSA/ICdkb2VzJyA6ICdkbyd9IG5vdCBtYXRjaC4gVGhpcyBjb21wZXRlbmN5IGlzIHBhcnQgb2YgdGhlIGdhcC5gO1xuICAgICAgfVxuXG4gICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICBhcmVhOiB0aGlzLmdldENvbXBldGVuY3lBcmVhKHJlcXVpcmVkQ29tcGV0ZW5jeSksXG4gICAgICAgIHRoZW1lOiB0aGlzLmdldENvbXBldGVuY3lUaGVtZShyZXF1aXJlZENvbXBldGVuY3kpLFxuICAgICAgICBzdWJ0aGVtZTogdGhpcy5nZXRDb21wZXRlbmN5U3VidGhlbWUocmVxdWlyZWRDb21wZXRlbmN5KSxcbiAgICAgICAgcHJvZmljaWVuY3lMZXZlbDogdGhpcy5nZXRQcm9maWNpZW5jeUxldmVsKHJlcXVpcmVkQ29tcGV0ZW5jeSksXG4gICAgICAgIGN1cnJlbnRMZXZlbCxcbiAgICAgICAgcmVxdWlyZWRMZXZlbCxcbiAgICAgICAgY291cnNlTGV2ZWwsXG4gICAgICAgIHN0YXR1cyxcbiAgICAgICAgcmVhc29uXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLnJlbW92ZUR1cGxpY2F0ZUdhcFJlc3VsdHMocmVzdWx0cyk7XG4gIH1cblxuICByZW1vdmVEdXBsaWNhdGVHYXBSZXN1bHRzKFxuICAgIHJlc3VsdHM6IEdhcEFuYWx5c2lzUmVzdWx0W11cbiAgKTogR2FwQW5hbHlzaXNSZXN1bHRbXSB7XG4gICAgY29uc3QgdW5pcXVlID0gbmV3IE1hcDxzdHJpbmcsIEdhcEFuYWx5c2lzUmVzdWx0PigpO1xuXG4gICAgcmVzdWx0cy5mb3JFYWNoKHJlc3VsdCA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBbXG4gICAgICAgIHRoaXMubm9ybWFsaXplKHJlc3VsdC5hcmVhKSxcbiAgICAgICAgdGhpcy5ub3JtYWxpemUocmVzdWx0LnRoZW1lKSxcbiAgICAgICAgdGhpcy5ub3JtYWxpemUocmVzdWx0LnN1YnRoZW1lKSxcbiAgICAgICAgdGhpcy5ub3JtYWxpemUocmVzdWx0LnByb2ZpY2llbmN5TGV2ZWwpLFxuICAgICAgICB0aGlzLm5vcm1hbGl6ZShyZXN1bHQucmVxdWlyZWRMZXZlbCksXG4gICAgICAgIHRoaXMubm9ybWFsaXplKHJlc3VsdC5jb3Vyc2VMZXZlbClcbiAgICAgIF0uam9pbignfCcpO1xuXG4gICAgICBpZiAoIXVuaXF1ZS5oYXMoa2V5KSkge1xuICAgICAgICB1bmlxdWUuc2V0KGtleSwgcmVzdWx0KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBBcnJheS5mcm9tKHVuaXF1ZS52YWx1ZXMoKSk7XG4gIH1cblxuICBjYWxjdWxhdGVBbGxDb3Vyc2VHYXBzKCk6IHZvaWQge1xuICAgIHRoaXMuY291cnNlR2FwUmVzdWx0cyA9IHt9O1xuXG4gICAgdGhpcy5maWx0ZXJkQ291cnNlcy5mb3JFYWNoKChjb3Vyc2UsIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLmNvdXJzZUdhcFJlc3VsdHNbaW5kZXhdID0gdGhpcy5jYWxjdWxhdGVDb3Vyc2VHYXBzKGNvdXJzZSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDb3Vyc2VHYXBSZXN1bHRzKGluZGV4OiBudW1iZXIpOiBHYXBBbmFseXNpc1Jlc3VsdFtdIHtcbiAgICByZXR1cm4gdGhpcy5jb3Vyc2VHYXBSZXN1bHRzW2luZGV4XSB8fCBbXTtcbiAgfVxuXG4gIGdldEZ1bGxNYXRjaGVzKGluZGV4OiBudW1iZXIpOiBHYXBBbmFseXNpc1Jlc3VsdFtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb3Vyc2VHYXBSZXN1bHRzKGluZGV4KVxuICAgICAgLmZpbHRlcihyZXN1bHQgPT4gcmVzdWx0LnN0YXR1cyA9PT0gJ0ZVTEwnKTtcbiAgfVxuXG4gIGdldFBhcnRpYWxNYXRjaGVzKGluZGV4OiBudW1iZXIpOiBHYXBBbmFseXNpc1Jlc3VsdFtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb3Vyc2VHYXBSZXN1bHRzKGluZGV4KVxuICAgICAgLmZpbHRlcihyZXN1bHQgPT4gcmVzdWx0LnN0YXR1cyA9PT0gJ1BBUlRJQUwnKTtcbiAgfVxuXG4gIGdldE5vTWF0Y2hlcyhpbmRleDogbnVtYmVyKTogR2FwQW5hbHlzaXNSZXN1bHRbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q291cnNlR2FwUmVzdWx0cyhpbmRleClcbiAgICAgIC5maWx0ZXIocmVzdWx0ID0+IHJlc3VsdC5zdGF0dXMgPT09ICdOT19NQVRDSCcpO1xuICB9XG5cbiAgaGFzR2FwTWF0Y2goaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldENvdXJzZUdhcFJlc3VsdHMoaW5kZXgpLnNvbWUoXG4gICAgICByZXN1bHQgPT5cbiAgICAgICAgcmVzdWx0LnN0YXR1cyA9PT0gJ0ZVTEwnIHx8XG4gICAgICAgIHJlc3VsdC5zdGF0dXMgPT09ICdQQVJUSUFMJ1xuICAgICk7XG4gIH1cblxuICBnZXRDb3Vyc2VHYXBTdGF0dXMoaW5kZXg6IG51bWJlcik6IEdhcFN0YXR1cyB7XG4gICAgY29uc3QgcmVzdWx0cyA9IHRoaXMuZ2V0Q291cnNlR2FwUmVzdWx0cyhpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0cy5zb21lKHJlc3VsdCA9PiByZXN1bHQuc3RhdHVzID09PSAnRlVMTCcpKSB7XG4gICAgICByZXR1cm4gJ0ZVTEwnO1xuICAgIH1cblxuICAgIGlmIChyZXN1bHRzLnNvbWUocmVzdWx0ID0+IHJlc3VsdC5zdGF0dXMgPT09ICdQQVJUSUFMJykpIHtcbiAgICAgIHJldHVybiAnUEFSVElBTCc7XG4gICAgfVxuXG4gICAgcmV0dXJuICdOT19NQVRDSCc7XG4gIH1cblxuICBnZXRDb3Vyc2VHYXBTdGF0dXNMYWJlbChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHRoaXMuZ2V0Q291cnNlR2FwU3RhdHVzKGluZGV4KSkge1xuICAgICAgY2FzZSAnRlVMTCc6XG4gICAgICAgIHJldHVybiAnRnVsbCBHYXAgTWF0Y2gnO1xuICAgICAgY2FzZSAnUEFSVElBTCc6XG4gICAgICAgIHJldHVybiAnUGFydGlhbCBHYXAgTWF0Y2gnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdObyBHYXAgTWF0Y2gnO1xuICAgIH1cbiAgfVxuXG4gIGdldENvbXBldGVuY2llc0J5VHlwZSh0eXBlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBhbnlbXSB7XG4gICAgY29uc3QgY291cnNlID0gdGhpcy5maWx0ZXJkQ291cnNlc1tpbmRleF07XG5cbiAgICBpZiAoIWNvdXJzZSkge1xuICAgICAgY29uc29sZS5sb2coYE5vIGNvdXJzZSBmb3VuZCBhdCBpbmRleCAke2luZGV4fWApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBldGVuY2llcyA9IHRoaXMuZ2V0Q291cnNlQ29tcGV0ZW5jaWVzKGNvdXJzZSk7XG5cbiAgICBpZiAoIWNvbXBldGVuY2llcy5sZW5ndGgpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBObyBjb21wZXRlbmNpZXMgZm91bmQgZm9yIGNvdXJzZSAke2luZGV4fSBhbmQgdHlwZSAke3R5cGV9YCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0aGlzLm5vcm1hbGl6ZSh0eXBlKTtcblxuICAgIHJldHVybiBjb21wZXRlbmNpZXMuZmlsdGVyKChjOiBhbnkpID0+IHtcbiAgICAgIGlmICghYyB8fCAhdGhpcy5nZXRDb21wZXRlbmN5QXJlYShjKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbXBldGVuY3lBcmVhID0gdGhpcy5ub3JtYWxpemUoXG4gICAgICAgIHRoaXMuZ2V0Q29tcGV0ZW5jeUFyZWEoYylcbiAgICAgICk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgbm9ybWFsaXplZFR5cGUgPT09ICdiZWhhdmlvdXJhbCcgfHxcbiAgICAgICAgbm9ybWFsaXplZFR5cGUgPT09ICdiZWhhdmlvcmFsJ1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgY29tcGV0ZW5jeUFyZWEgPT09ICdiZWhhdmlvcmFsJyB8fFxuICAgICAgICAgIGNvbXBldGVuY3lBcmVhID09PSAnYmVoYXZpb3VyYWwnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21wZXRlbmN5QXJlYSA9PT0gbm9ybWFsaXplZFR5cGU7XG4gICAgfSk7XG4gIH1cblxuICBnZXREaXNwbGF5ZWRDb21wZXRlbmNpZXModHlwZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogYW55W10ge1xuICAgIGNvbnN0IGNvbXBldGVuY2llcyA9IHRoaXMuZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKHR5cGUsIGluZGV4KTtcbiAgICBjb25zdCBrZXkgPSBgJHtpbmRleH0tJHt0eXBlfWA7XG5cbiAgICBpZiAodGhpcy5leHBhbmRlZENvbXBldGVuY2llc1trZXldKSB7XG4gICAgICByZXR1cm4gY29tcGV0ZW5jaWVzO1xuICAgIH1cblxuICAgIHJldHVybiBjb21wZXRlbmNpZXMuc2xpY2UoMCwgMik7XG4gIH1cblxuICB0b2dnbGVDb21wZXRlbmNpZXModHlwZTogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gYCR7aW5kZXh9LSR7dHlwZX1gO1xuICAgIHRoaXMuZXhwYW5kZWRDb21wZXRlbmNpZXNba2V5XSA9XG4gICAgICAhdGhpcy5leHBhbmRlZENvbXBldGVuY2llc1trZXldO1xuICB9XG5cbiAgaXNFeHBhbmRlZCh0eXBlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBrZXkgPSBgJHtpbmRleH0tJHt0eXBlfWA7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kZWRDb21wZXRlbmNpZXNba2V5XSB8fCBmYWxzZTtcbiAgfVxuXG4gIGhhc01vcmVUaGFuVHdvKHR5cGU6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldENvbXBldGVuY2llc0J5VHlwZSh0eXBlLCBpbmRleCkubGVuZ3RoID4gMjtcbiAgfVxuXG4gIGdldFJlbWFpbmluZ0NvdW50KHR5cGU6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgdG90YWxDb3VudCA9XG4gICAgICB0aGlzLmdldENvbXBldGVuY2llc0J5VHlwZSh0eXBlLCBpbmRleCkubGVuZ3RoO1xuXG4gICAgcmV0dXJuIE1hdGgubWF4KHRvdGFsQ291bnQgLSAyLCAwKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNlY3Rpb24tY29udGFpbmVyIG10LTJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm91dHNpZGUtbGF5ZXItdG90YWxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnNpZGUtbGF5ZXJcIj5cbiAgICAgICAgICAgICAgICBUb3RhbCBDb3Vyc2VzXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPlxuICAgICAgICAgICAgICAgIHt7Y29tcGV0ZW5jaWVzQ291bnQ/LnRvdGFsfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm91dHNpZGUtbGF5ZXItdG90YWxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnNpZGUtbGF5ZXJcIj5cbiAgICAgICAgICAgICAgICBpR09UIFBsYXRmb3JtIENvdXJzZXNcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+XG4gICAgICAgICAgICAgICAge3tjb21wZXRlbmNpZXNDb3VudD8uaWdvdH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvdXRzaWRlLWxheWVyLXRvdGFsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5zaWRlLWxheWVyXCI+XG4gICAgICAgICAgICAgICAgUHVibGljIENvdXJzZXNcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+XG4gICAgICAgICAgICAgICAge3tjb21wZXRlbmNpZXNDb3VudD8ucHVibGljX2NvdXJzZXN9fVxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibXktNFwiPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtbGlzdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtbGlzdC1pdGVtXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZENvdXJzZXM7bGV0IGk9aW5kZXhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291cnNlLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tlZC1jb3Vyc2UtY29udGFpbmVyXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1waWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtcGlsbC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48aW1nIHNyYz1cImFzc2V0cy9pY29ucy9jb3Vyc2Uuc3ZnXCI+PC9zcGFuPiZuYnNwOzxzcGFuPkNvdXJzZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QUkgUmVjb21tZW5kZWQ8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtPy5yYXRpb25hbGUgJiYgIWl0ZW0/LmlzX3B1YmxpY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1ncmVlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtZ3JlZW4tdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZyBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5BSSBSZWNvbW1lbmRlZCAtIGlHT1QgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIiAqbmdJZj1cIml0ZW0/LnBsYXRmb3JtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZyBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtocmVmXT1cIml0ZW0/LnB1YmxpY19saW5rXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PHNwYW4+UGxhdGZvcm0gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbT8ucGxhdGZvcm19fTwvc3Bhbj48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIiAqbmdJZj1cIml0ZW0/Lm9yZ2FuaXNhdGlvbj8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Qcm92aWRlciAtIHt7aXRlbT8ub3JnYW5pc2F0aW9uWzBdfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtPy5yYXRpb25hbGUgJiYgaXRlbT8uaXNfcHVibGljXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLXB1YmxpY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtcHVibGljLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QUkgUmVjb21tZW5kZWQgLSBQdWJsaWMgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIiAqbmdJZj1cIml0ZW0/LnBsYXRmb3JtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZyBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIFtocmVmXT1cIml0ZW0/LnB1YmxpY19saW5rXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PHNwYW4+UGxhdGZvcm0gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbT8ucGxhdGZvcm19fTwvc3Bhbj48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlIG10LTJcIiAqbmdJZj1cIml0ZW0/Lm9yZ2FuaXNhdGlvbj8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbC1vcmFuZ2UtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Qcm92aWRlciAtIHt7aXRlbT8ub3JnYW5pc2F0aW9uWzBdfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXRlbT8ucmF0aW9uYWxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLWdyYXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLWdyYXktdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFpLWxvYWRlci1pY29uXCI+PGltZyBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5NYW51YWxseSBTdWdnZXN0ZWQgLSBpR09UIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZSBtdC0yXCIgKm5nSWY9XCJpdGVtPy5wbGF0Zm9ybVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2FpLWxvYWRlci5naWZcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBbaHJlZl09XCJpdGVtPy5wdWJsaWNfbGlua1wiIHRhcmdldD1cIl9ibGFua1wiPjxzcGFuPlBsYXRmb3JtIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0/LnBsYXRmb3JtfX08L3NwYW4+PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLW9yYW5nZSBtdC0yXCIgKm5nSWY9XCJpdGVtPy5vcmdhbmlzYXRpb24/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS1yZWNvbW1lbmVkLXBpbGwtb3JhbmdlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhaS1sb2FkZXItaWNvblwiPjxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvYWktbG9hZGVyLmdpZlwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+UHJvdmlkZXIgLSB7e2l0ZW0/Lm9yZ2FuaXNhdGlvblswXX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtdGl0bGUgbXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0/LmNvdXJzZVwiPnt7aXRlbT8uY291cnNlfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtPy5uYW1lXCI+e3tpdGVtPy5uYW1lfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1kZXNjIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3tpdGVtPy5yYXRpb25hbGV9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiICpuZ0lmPVwiZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdCZWhhdmlvdXJhbCcsaSk/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdWItaGVhZGluZ1wiPkJlaGF2aW9yYWwgQ29tcGV0ZW5jaWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImNvbXBldGVuY3ktbGlzdCBtdC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJiZWhhdmlvdXJhbC1waWxsXCIgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0RGlzcGxheWVkQ29tcGV0ZW5jaWVzKCdCZWhhdmlvdXJhbCcsaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGV4dFwiPiB7eyBjb21wLmNvbXBldGVuY3lUaGVtZU5hbWUgfX0gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wLmNvbXBldGVuY3lTdWJUaGVtZU5hbWUgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImhhc01vcmVUaGFuVHdvKCdCZWhhdmlvdXJhbCcsaSlcIiBjbGFzcz1cInNob3ctbW9yZS1jb21wZXRlbmN5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzaG93LW1vcmUtbGluayBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJ0b2dnbGVDb21wZXRlbmNpZXMoJ0JlaGF2aW91cmFsJyxpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpc0V4cGFuZGVkKCdCZWhhdmlvdXJhbCcsaSkgPyAnU2hvdyBMZXNzJyA6ICcrJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFJlbWFpbmluZ0NvdW50KCdCZWhhdmlvdXJhbCcsaSkgKyAnIE1vcmUnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMlwiICpuZ0lmPVwiZ2V0Q29tcGV0ZW5jaWVzQnlUeXBlKCdGdW5jdGlvbmFsJyxpKT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmN5LXN1Yi1oZWFkaW5nXCI+RnVuY3Rpb25hbCBDb21wZXRlbmNpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiY29tcGV0ZW5jeS1saXN0IG10LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImZ1bmN0aW9uYWwtcGlsbFwiICpuZ0Zvcj1cImxldCBjb21wIG9mIGdldERpc3BsYXllZENvbXBldGVuY2llcygnRnVuY3Rpb25hbCcsaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbXBldGVuY3ktdGV4dFwiPiB7eyBjb21wLmNvbXBldGVuY3lUaGVtZU5hbWUgfX0gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wLmNvbXBldGVuY3lTdWJUaGVtZU5hbWUgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImhhc01vcmVUaGFuVHdvKCdGdW5jdGlvbmFsJyxpKVwiIGNsYXNzPVwic2hvdy1tb3JlLWNvbXBldGVuY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNob3ctbW9yZS1saW5rIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInRvZ2dsZUNvbXBldGVuY2llcygnRnVuY3Rpb25hbCcsaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXNFeHBhbmRlZCgnRnVuY3Rpb25hbCcsaSkgPyAnU2hvdyBMZXNzJyA6ICcrJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFJlbWFpbmluZ0NvdW50KCdGdW5jdGlvbmFsJyxpKSArICcgTW9yZScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nSWY9XCJnZXRDb21wZXRlbmNpZXNCeVR5cGUoJ0RvbWFpbicsaSk/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jeS1zdWItaGVhZGluZ1wiPkRvbWFpbiBDb21wZXRlbmNpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiY29tcGV0ZW5jeS1saXN0IG10LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImRvbWFpbi1waWxsXCIgKm5nRm9yPVwibGV0IGNvbXAgb2YgZ2V0RGlzcGxheWVkQ29tcGV0ZW5jaWVzKCdEb21haW4nLGkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb21wZXRlbmN5LXRleHRcIj4ge3sgY29tcC5jb21wZXRlbmN5VGhlbWVOYW1lIH19IC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcC5jb21wZXRlbmN5U3ViVGhlbWVOYW1lIH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJoYXNNb3JlVGhhblR3bygnRG9tYWluJyxpKVwiIGNsYXNzPVwic2hvdy1tb3JlLWNvbXBldGVuY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNob3ctbW9yZS1saW5rIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInRvZ2dsZUNvbXBldGVuY2llcygnRG9tYWluJyxpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpc0V4cGFuZGVkKCdEb21haW4nLGkpID8gJ1Nob3cgTGVzcycgOiAnKycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSZW1haW5pbmdDb3VudCgnRG9tYWluJyxpKSArICcgTW9yZScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxldmFuY3ktY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsZXZhbmN5XCI+UmVsZXZhbmN5PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGFzaFwiPi08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJjZW50YWdlXCIgKm5nSWY9XCJpdGVtPy5yZWxldmFuY3lcIj57e2l0ZW0/LnJlbGV2YW5jeX19JTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcmNlbnRhZ2VcIiAqbmdJZj1cIiFpdGVtPy5yZWxldmFuY3lcIj5OL0E8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBldGVuY2llcy1tYXRjaGVkLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmNpZXMtbWF0Y2hlZFwiPkNvbXBldGVuY2llcyBNYXRjaGVkPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhc2hcIj4tPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcmNlbnRhZ2VcIj44MCU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvdXJzZS1saXN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1waWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtcGlsbC10ZXh0XCI+Q291cnNlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXJlY29tbWVuZWQtcGlsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktcmVjb21tZW5lZC1waWxsLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWktbG9hZGVyLWljb25cIj48aW1nIHNyYz1cImFzc2V0cy9pY29ucy9haS1sb2FkZXIuZ2lmXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+QUkgUmVjb21tZW5kZWQ8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3Vyc2UtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5NYXRlcm5hbCwgSW5mYW50IEFuZCBZb3VuZyBDaGlsZCBOdXRyaXRpb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdXJzZS1kZXNjXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+VGhpcyBDb3Vyc2UgZGlyZWN0bHkgYWRkcmVzc2VzIGEgcHJpbWFyeSByZXNwb25zaWJpbGl0eSBvZiBBbmdhbndhbmRpIENhcmUgdGFrZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBpc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBwcm92aWRlIGFuZCBlZHVjYXRlIG9uIG51dHJpdGlvbiBmb3IgbW90aGVyIGFuZCB5b3VuZyBjaGlsZHJlbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGV2YW5jeS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsZXZhbmN5XCI+UmVsZXZhbmN5PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhc2hcIj4tPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcmNlbnRhZ2VcIj45MCU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb21wZXRlbmNpZXMtbWF0Y2hlZC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGV0ZW5jaWVzLW1hdGNoZWRcIj5Db21wZXRlbmNpZXMgTWF0Y2hlZDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXNoXCI+LTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJjZW50YWdlXCI+ODAlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
|