tango-app-ui-store-builder 1.2.15 → 1.2.16
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/manage-store-plano/verification-feedback/zone-editable-fixture/zone-editable-fixture.component.mjs +33 -7
- package/esm2022/lib/components/plano-tools/delete-floor/delete-floor.component.mjs +3 -3
- package/esm2022/lib/components/plano-tools/delete-task/delete-task.component.mjs +10 -4
- package/esm2022/lib/components/plano-tools/swap-template/swap-template.component.mjs +3 -1
- package/esm2022/lib/components/popups/publish-plano-modal/publish-plano-modal.component.mjs +1 -1
- package/esm2022/lib/components/store-plano/store-plano.component.mjs +31 -6
- package/esm2022/lib/services/store-builder.service.mjs +1 -1
- package/esm2022/lib/tango-store-plano.module.mjs +5 -2
- package/fesm2022/tango-app-ui-store-builder.mjs +78 -16
- package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
- package/lib/components/manage-store-plano/verification-feedback/zone-editable-fixture/zone-editable-fixture.component.d.ts +6 -0
- package/lib/components/plano-tools/delete-task/delete-task.component.d.ts +2 -0
- package/lib/components/store-plano/store-plano.component.d.ts +1 -0
- package/lib/services/store-builder.service.d.ts +4 -1
- package/lib/tango-store-plano.module.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Component, Input, ViewChild, } from "@angular/core";
|
|
2
2
|
import { SHELF_COLORS } from "../../../../data/fixture-template.data";
|
|
3
3
|
import { Subject, takeUntil } from "rxjs";
|
|
4
|
-
import { rgbToHex } from "../../../../functions/plano.function";
|
|
5
4
|
import { firstValueFrom } from "rxjs";
|
|
6
5
|
import * as i0 from "@angular/core";
|
|
7
6
|
import * as i1 from "../../../../services/store-builder.service";
|
|
@@ -42,6 +41,10 @@ export class ZoneEditableFixtureComponent {
|
|
|
42
41
|
clientId;
|
|
43
42
|
imgCDN;
|
|
44
43
|
shelfColors = SHELF_COLORS;
|
|
44
|
+
// Zone-verification diff palette: red when store response brands differ from
|
|
45
|
+
// the current plano for that zone; neutral grey when they match.
|
|
46
|
+
ZONE_DIFF_COLOR = { bg: "#FEE4E2", border: "#F04438" };
|
|
47
|
+
ZONE_MATCH_COLOR = { bg: "#F2F4F7", border: "#EAECF0" };
|
|
45
48
|
sectionByZones = [];
|
|
46
49
|
// vmList: VmLibraryList[] = [];
|
|
47
50
|
isPageLoading = true;
|
|
@@ -257,6 +260,30 @@ export class ZoneEditableFixtureComponent {
|
|
|
257
260
|
this.brandsByZone = { ...this.brandsByZone, [zone]: [] };
|
|
258
261
|
this.applyBrandsToFixture();
|
|
259
262
|
}
|
|
263
|
+
getZoneBrandsFromConfig(config, zone) {
|
|
264
|
+
const shelf = (config ?? []).find((s) => s?.zone === zone);
|
|
265
|
+
return Array.isArray(shelf?.productBrandName) ? shelf.productBrandName : [];
|
|
266
|
+
}
|
|
267
|
+
zoneBrandKey(brands) {
|
|
268
|
+
return [...(brands ?? [])]
|
|
269
|
+
.filter((b) => typeof b === "string")
|
|
270
|
+
.map((b) => b.trim())
|
|
271
|
+
.filter(Boolean)
|
|
272
|
+
.sort()
|
|
273
|
+
.join("|");
|
|
274
|
+
}
|
|
275
|
+
isZoneBrandsDifferent(zone) {
|
|
276
|
+
if (!zone)
|
|
277
|
+
return false;
|
|
278
|
+
const responseBrands = this.getZoneBrandsFromConfig(this.fixture?.shelfConfig, zone);
|
|
279
|
+
const planoBrands = this.getZoneBrandsFromConfig(this.planoFixture?.shelfConfig, zone);
|
|
280
|
+
return this.zoneBrandKey(responseBrands) !== this.zoneBrandKey(planoBrands);
|
|
281
|
+
}
|
|
282
|
+
zoneColor(zone) {
|
|
283
|
+
return this.isZoneBrandsDifferent(zone)
|
|
284
|
+
? this.ZONE_DIFF_COLOR
|
|
285
|
+
: this.ZONE_MATCH_COLOR;
|
|
286
|
+
}
|
|
260
287
|
snapshotBrandsByZone() {
|
|
261
288
|
const result = {};
|
|
262
289
|
(this.fixture?.shelfConfig ?? []).forEach((shelf) => {
|
|
@@ -500,13 +527,14 @@ export class ZoneEditableFixtureComponent {
|
|
|
500
527
|
allSectionShelves.push(...shelfIds);
|
|
501
528
|
const secDivs = shelves.filter((item) => shelfIds?.includes(item?.id ?? ""));
|
|
502
529
|
if (this.showColors) {
|
|
530
|
+
const color = this.zoneColor(se.zone);
|
|
503
531
|
secDivs.forEach((d) => {
|
|
504
532
|
if (!d)
|
|
505
533
|
return;
|
|
506
|
-
d.style.backgroundColor =
|
|
534
|
+
d.style.backgroundColor = color.bg;
|
|
507
535
|
const cap = d.querySelector(".capacity");
|
|
508
536
|
if (cap) {
|
|
509
|
-
cap.style.border = `1px solid ${
|
|
537
|
+
cap.style.border = `1px solid ${color.border}`;
|
|
510
538
|
}
|
|
511
539
|
});
|
|
512
540
|
}
|
|
@@ -531,9 +559,7 @@ export class ZoneEditableFixtureComponent {
|
|
|
531
559
|
const currentSectionWidth = sz.section.shelfDivs[0]?.offsetWidth ?? 345;
|
|
532
560
|
const bc = bodies.querySelector(`#brand-category${i}`);
|
|
533
561
|
if (bc) {
|
|
534
|
-
const
|
|
535
|
-
const color = this.shelfColors.find((c) => c.bg === secBg) ??
|
|
536
|
-
this.shelfColors[i];
|
|
562
|
+
const color = this.zoneColor(sz.zone);
|
|
537
563
|
if (this.showColors) {
|
|
538
564
|
bc.style.borderColor = color.border;
|
|
539
565
|
bc.style.backgroundColor = "#fff";
|
|
@@ -721,4 +747,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
721
747
|
type: ViewChild,
|
|
722
748
|
args: ["fixtureRoot", { static: false }]
|
|
723
749
|
}] } });
|
|
724
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9uZS1lZGl0YWJsZS1maXh0dXJlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL21hbmFnZS1zdG9yZS1wbGFuby92ZXJpZmljYXRpb24tZmVlZGJhY2svem9uZS1lZGl0YWJsZS1maXh0dXJlL3pvbmUtZWRpdGFibGUtZml4dHVyZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9tYW5hZ2Utc3RvcmUtcGxhbm8vdmVyaWZpY2F0aW9uLWZlZWRiYWNrL3pvbmUtZWRpdGFibGUtZml4dHVyZS96b25lLWVkaXRhYmxlLWZpeHR1cmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFFVCxLQUFLLEVBS0wsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU0xQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7O0FBT3RDLE1BQU0sT0FBTyw0QkFBNEI7SUF3SDdCO0lBQ0E7SUFDQTtJQXZIRCxPQUFPLENBQU07SUFDYixZQUFZLENBQU07SUFFM0IseUNBQXlDO0lBRWhDLFVBQVUsR0FBWSxJQUFJLENBQUM7SUFDM0IsT0FBTyxHQUFZLElBQUksQ0FBQztJQUN4QixPQUFPLEdBQVksSUFBSSxDQUFDO0lBQ3hCLHNCQUFzQixHQUFZLEtBQUssQ0FBQztJQUN4QyxRQUFR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QUFXLEVBQUUsQ0FBQztZQUNyRCxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRTVDLE9BQU87Z0JBQ0wsR0FBRyxDQUFDO2dCQUNKLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUU7Z0JBQzFCLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsSUFBSSxFQUFFO2dCQUNsRCxlQUFlLEVBQUUsUUFBUSxFQUFFLGVBQWUsSUFBSSxFQUFFO2FBQ2pELENBQUM7UUFDSixDQUFDLENBQUMsSUFBSSxFQUFFLENBQ1QsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7d0dBajBCVSw0QkFBNEI7NEZBQTVCLDRCQUE0QixzWUM1QnpDLDB3YUF1T0M7OzRGRDNNWSw0QkFBNEI7a0JBTHhDLFNBQVM7K0JBQ0UsdUJBQXVCO3lKQU94QixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFJRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBc0JOLFdBQVc7c0JBRFYsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdDaGVja2VkLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFNIRUxGX0NPTE9SUyB9IGZyb20gXCIuLi8uLi8uLi8uLi9kYXRhL2ZpeHR1cmUtdGVtcGxhdGUuZGF0YVwiO1xyXG5pbXBvcnQgeyBTdG9yZUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NlcnZpY2VzL3N0b3JlLWJ1aWxkZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLWdsb2JhbFwiO1xyXG5pbXBvcnQge1xyXG4gIFNlY3Rpb25Db25maWcsXHJcbiAgU2hlbGZDb25maWcsXHJcbn0gZnJvbSBcIi4uLy4uLy4uLy4uL2ludGVyZmFjZXMvZml4dHVyZS10ZW1wbGF0ZS5pbnRlcmZhY2VcIjtcclxuaW1wb3J0IHsgcmdiVG9IZXggfSBmcm9tIFwiLi4vLi4vLi4vLi4vZnVuY3Rpb25zL3BsYW5vLmZ1bmN0aW9uXCI7XHJcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcInpvbmUtZWRpdGFibGUtZml4dHVyZVwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vem9uZS1lZGl0YWJsZS1maXh0dXJlLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi96b25lLWVkaXRhYmxlLWZpeHR1cmUuY29tcG9uZW50LnNjc3NcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIFpvbmVFZGl0YWJsZUZpeHR1cmVDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3lcclxue1xyXG4gIEBJbnB1dCgpIGZpeHR1cmU6IGFueTtcclxuICBASW5wdXQoKSBwbGFub0ZpeHR1cmU6IGFueTtcclxuXHJcbiAgLy8gQElucHV0KCkgdm1MaXN0OiBWbUxpYnJhcnlMaXN0W10gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgc2hvd0NvbG9yczogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd1ZNczogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0JDczogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd0hlYWRlckZvb3RlckFsd2F5czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGVkaXRhYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgaGVhZGVyT3B0aW9uczogeyBsYWJlbDogc3RyaW5nIH1bXSA9IFtdO1xyXG4gIGJyYW5kT3B0aW9uczogeyBicmFuZE5hbWU6IHN0cmluZyB9W10gPSBbXTtcclxuICBhbGxQaWRzT3B0aW9uczogeyBicmFuZE5hbWU6IHN0cmluZyB9W10gPSBbXTtcclxuXHJcbiAgc2VsZWN0ZWRIZWFkZXI6IHsgbGFiZWw6IHN0cmluZyB9W10gPSBbXTtcclxuICBicmFuZHNCeVpvbmU6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xyXG4gIG90aGVyc01vZGVCeVpvbmU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XHJcbiAgdGVtcGxhdGVHcm91cE5hbWU6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIHRlbXBsYXRlR3JvdXBPcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHRlbXBsYXRlR3JvdXBTdWdnZXN0aW9uczogc3RyaW5nW10gPSBbXTtcclxuICBzaG93VGVtcGxhdGVHcm91cFN1Z2dlc3Rpb25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSB0ZW1wbGF0ZUdyb3VwTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgYWxsUGlkc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgb3JpZ2luYWxIZWFkZXJMYWJlbDogc3RyaW5nID0gXCJcIjtcclxuICBwcml2YXRlIG9yaWdpbmFsQnJhbmRzQnlab25lOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcclxuICBwcml2YXRlIG9yaWdpbmFsVGVtcGxhdGVHcm91cE5hbWU6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJmaXh0dXJlUm9vdFwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBmaXh0dXJlUm9vdCE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG5cclxuICBjbGllbnRJZDogc3RyaW5nO1xyXG5cclxuICBpbWdDRE46IHN0cmluZztcclxuICBzaGVsZkNvbG9ycyA9IFNIRUxGX0NPTE9SUztcclxuXHJcbiAgc2VjdGlvbkJ5Wm9uZXM6IHtcclxuICAgIHpvbmU6IHN0cmluZztcclxuICAgIHNlY3Rpb246IHtcclxuICAgICAgYnJhbmRzOiBzdHJpbmdbXTtcclxuICAgICAgY2F0ZWdvcmllczogc3RyaW5nW107XHJcbiAgICAgIHNoZWx2ZXM6IHN0cmluZ1tdO1xyXG4gICAgICBzaGVsZkRpdnM6IChIVE1MRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQpW107XHJcbiAgICB9O1xyXG4gIH1bXSA9IFtdO1xyXG5cclxuICAvLyB2bUxpc3Q6IFZtTGlicmFyeUxpc3RbXSA9IFtdO1xyXG4gIGlzUGFnZUxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBwcml2YXRlIGlzVk1Jbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgaXNCQ0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGdldCBpc1ZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLnRlbXBsYXRlR3JvdXBOYW1lPy50cmltKCkpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBoZWFkZXJMYWJlbCA9IHRoaXMuZml4dHVyZT8uaGVhZGVyPy5sYWJlbD8udHJpbSgpO1xyXG4gICAgaWYgKCFoZWFkZXJMYWJlbCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IHpvbmVzID0gdGhpcy51bmlxdWVab25lcygpO1xyXG4gICAgZm9yIChjb25zdCB6b25lIG9mIHpvbmVzKSB7XHJcbiAgICAgIGlmICghdGhpcy5icmFuZHNCeVpvbmVbem9uZV0/Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBnZXQgdmFsaWRhdGlvbk1lc3NhZ2UoKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy50ZW1wbGF0ZUdyb3VwTmFtZT8udHJpbSgpKSB7XHJcbiAgICAgIHJldHVybiBcIkVudGVyIGEgVGVtcGxhdGUgR3JvdXAgTmFtZSBiZWZvcmUgYWNjZXB0aW5nLlwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGhlYWRlckxhYmVsID0gdGhpcy5maXh0dXJlPy5oZWFkZXI/LmxhYmVsPy50cmltKCk7XHJcbiAgICBpZiAoIWhlYWRlckxhYmVsKSByZXR1cm4gXCJQaWNrIGEgaGVhZGVyIGJlZm9yZSBhY2NlcHRpbmcuXCI7XHJcblxyXG4gICAgY29uc3QgZW1wdHlab25lczogc3RyaW5nW10gPSBbXTtcclxuICAgIGZvciAoY29uc3Qgem9uZSBvZiB0aGlzLnVuaXF1ZVpvbmVzKCkpIHtcclxuICAgICAgaWYgKCF0aGlzLmJyYW5kc0J5Wm9uZVt6b25lXT8ubGVuZ3RoKSBlbXB0eVpvbmVzLnB1c2goem9uZSk7XHJcbiAgICB9XHJcbiAgICBpZiAoZW1wdHlab25lcy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGBQaWNrIGF0IGxlYXN0IG9uZSBicmFuZCBmb3I6ICR7ZW1wdHlab25lcy5qb2luKFwiLCBcIil9YDtcclxuICAgIH1cclxuICAgIHJldHVybiBcIlwiO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1bmlxdWVab25lcygpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCB6b25lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG4gICAgKHRoaXMuZml4dHVyZT8uc2hlbGZDb25maWcgPz8gW10pLmZvckVhY2goKHNoZWxmOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHNoZWxmPy56b25lKSB6b25lcy5hZGQoc2hlbGYuem9uZSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBBcnJheS5mcm9tKHpvbmVzKTtcclxuICB9XHJcblxyXG4gIGdldCBpc0RpcnR5KCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCh0aGlzLmZpeHR1cmU/LmhlYWRlcj8ubGFiZWwgPz8gXCJcIikgIT09IHRoaXMub3JpZ2luYWxIZWFkZXJMYWJlbCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICgodGhpcy50ZW1wbGF0ZUdyb3VwTmFtZSA/PyBcIlwiKSAhPT0gdGhpcy5vcmlnaW5hbFRlbXBsYXRlR3JvdXBOYW1lKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgem9uZUtleXMgPSBuZXcgU2V0KFtcclxuICAgICAgLi4uT2JqZWN0LmtleXModGhpcy5icmFuZHNCeVpvbmUpLFxyXG4gICAgICAuLi5PYmplY3Qua2V5cyh0aGlzLm9yaWdpbmFsQnJhbmRzQnlab25lKSxcclxuICAgIF0pO1xyXG4gICAgZm9yIChjb25zdCB6b25lIG9mIHpvbmVLZXlzKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBbLi4uKHRoaXMuYnJhbmRzQnlab25lW3pvbmVdID8/IFtdKV0uc29ydCgpO1xyXG4gICAgICBjb25zdCBvcmlnaW5hbCA9IFsuLi4odGhpcy5vcmlnaW5hbEJyYW5kc0J5Wm9uZVt6b25lXSA/PyBbXSldLnNvcnQoKTtcclxuICAgICAgaWYgKGN1cnJlbnQubGVuZ3RoICE9PSBvcmlnaW5hbC5sZW5ndGgpIHJldHVybiB0cnVlO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoY3VycmVudFtpXSAhPT0gb3JpZ2luYWxbaV0pIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYXBpU2VydmljZTogU3RvcmVCdWlsZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmdzLmVudmlyb25tZW50XHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoZW52KSA9PiAodGhpcy5pbWdDRE4gPSBlbnYucGxhbm9ncmFtQ0ROKSk7XHJcblxyXG4gICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZShhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhPy5jbGllbnQpIHtcclxuICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSBkYXRhPy5jbGllbnQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBoZWFkZXJEYXRhID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSBhcyBzdHJpbmcsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGhlYWRlckRhdGE/LmNsaWVudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzW1wiZml4dHVyZVwiXT8uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIHRoaXMuc2FuaXRpemVWbUNvbmZpZygpO1xyXG4gICAgICBhd2FpdCB0aGlzLmluaXRJbmxpbmVFZGl0U3RhdGUoKTtcclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXBwbHlTaGVsZkNvbG9ycygpO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlVm1Qb3NpdGlvbkFuZFNpemUoKTtcclxuICAgICAgfSwgNDAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgaW5pdElubGluZUVkaXRTdGF0ZSgpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRMYWJlbDogc3RyaW5nID0gdGhpcy5maXh0dXJlPy5oZWFkZXI/LmxhYmVsID8/IFwiXCI7XHJcbiAgICB0aGlzLm9yaWdpbmFsSGVhZGVyTGFiZWwgPSBjdXJyZW50TGFiZWw7XHJcbiAgICB0aGlzLnNlbGVjdGVkSGVhZGVyID0gY3VycmVudExhYmVsID8gW3sgbGFiZWw6IGN1cnJlbnRMYWJlbCB9XSA6IFtdO1xyXG5cclxuICAgIHRoaXMub3JpZ2luYWxUZW1wbGF0ZUdyb3VwTmFtZSA9IHRoaXMucGxhbm9GaXh0dXJlPy50ZW1wbGF0ZUdyb3VwTmFtZSA/PyBcIlwiO1xyXG4gICAgdGhpcy50ZW1wbGF0ZUdyb3VwTmFtZSA9IHRoaXMub3JpZ2luYWxUZW1wbGF0ZUdyb3VwTmFtZTtcclxuICAgIGlmICh0aGlzLmZpeHR1cmUpIHtcclxuICAgICAgdGhpcy5maXh0dXJlLnRlbXBsYXRlR3JvdXBOYW1lID0gdGhpcy50ZW1wbGF0ZUdyb3VwTmFtZTtcclxuICAgIH1cclxuICAgIHRoaXMuc2hvd1RlbXBsYXRlR3JvdXBTdWdnZXN0aW9ucyA9IGZhbHNlO1xyXG4gICAgdGhpcy5yZWZyZXNoVGVtcGxhdGVHcm91cFN1Z2dlc3Rpb25zKCk7XHJcblxyXG4gICAgdGhpcy5vcmlnaW5hbEJyYW5kc0J5Wm9uZSA9IHRoaXMuc25hcHNob3RCcmFuZHNCeVpvbmUoKTtcclxuICAgIHRoaXMuYnJhbmRzQnlab25lID0gc3RydWN0dXJlZENsb25lKHRoaXMub3JpZ2luYWxCcmFuZHNCeVpvbmUpO1xyXG4gICAgdGhpcy5vdGhlcnNNb2RlQnlab25lID0ge307XHJcblxyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICB0aGlzLmxvYWRIZWFkZXJzKCksXHJcbiAgICAgIHRoaXMubG9hZFRlbXBsYXRlR3JvdXBPcHRpb25zKCksXHJcbiAgICBdKTtcclxuICAgIHRoaXMucmVmcmVzaFRlbXBsYXRlR3JvdXBTdWdnZXN0aW9ucygpO1xyXG4gICAgYXdhaXQgdGhpcy5sb2FkQnJhbmRzRm9ySGVhZGVyKGN1cnJlbnRMYWJlbCk7XHJcbiAgICBhd2FpdCB0aGlzLmRldGVjdE90aGVyc1NvdXJjZWRab25lcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2FkVGVtcGxhdGVHcm91cE9wdGlvbnMoKSB7XHJcbiAgICBpZiAodGhpcy50ZW1wbGF0ZUdyb3VwTG9hZGVkKSByZXR1cm47XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXN1bHQ6IGFueSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS5nZXRUZW1wbGF0ZUdyb3VwTGlzdCgpLFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBsaXN0OiBzdHJpbmdbXSA9IEFycmF5LmlzQXJyYXkocmVzdWx0Py5kYXRhKSA/IHJlc3VsdC5kYXRhIDogW107XHJcbiAgICAgIHRoaXMudGVtcGxhdGVHcm91cE9wdGlvbnMgPSBsaXN0LmZpbHRlcigodikgPT4gdHlwZW9mIHYgPT09IFwic3RyaW5nXCIpO1xyXG4gICAgICB0aGlzLnRlbXBsYXRlR3JvdXBMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coYEBAIH4gbG9hZFRlbXBsYXRlR3JvdXBPcHRpb25zIFtFUlJdOmAsIGVycm9yKTtcclxuICAgICAgdGhpcy50ZW1wbGF0ZUdyb3VwT3B0aW9ucyA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25UZW1wbGF0ZUdyb3VwTmFtZUNoYW5nZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRlbXBsYXRlR3JvdXBOYW1lID0gdmFsdWUgPz8gXCJcIjtcclxuICAgIGlmICh0aGlzLmZpeHR1cmUpIHtcclxuICAgICAgdGhpcy5maXh0dXJlLnRlbXBsYXRlR3JvdXBOYW1lID0gdGhpcy50ZW1wbGF0ZUdyb3VwTmFtZTtcclxuICAgIH1cclxuICAgIHRoaXMucmVmcmVzaFRlbXBsYXRlR3JvdXBTdWdnZXN0aW9ucygpO1xyXG4gICAgdGhpcy5zaG93VGVtcGxhdGVHcm91cFN1Z2dlc3Rpb25zID0gdGhpcy50ZW1wbGF0ZUdyb3VwU3VnZ2VzdGlvbnMubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIG9uVGVtcGxhdGVHcm91cEZvY3VzKCkge1xyXG4gICAgdGhpcy5yZWZyZXNoVGVtcGxhdGVHcm91cFN1Z2dlc3Rpb25zKCk7XHJcbiAgICB0aGlzLnNob3dUZW1wbGF0ZUdyb3VwU3VnZ2VzdGlvbnMgPSB0aGlzLnRlbXBsYXRlR3JvdXBTdWdnZXN0aW9ucy5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgb25UZW1wbGF0ZUdyb3VwQmx1cigpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMuc2hvd1RlbXBsYXRlR3JvdXBTdWdnZXN0aW9ucyA9IGZhbHNlKSwgMTUwKTtcclxuICB9XHJcblxyXG4gIG9uUGlja1RlbXBsYXRlR3JvdXBTdWdnZXN0aW9uKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGVtcGxhdGVHcm91cE5hbWUgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLmZpeHR1cmUpIHtcclxuICAgICAgdGhpcy5maXh0dXJlLnRlbXBsYXRlR3JvdXBOYW1lID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNob3dUZW1wbGF0ZUdyb3VwU3VnZ2VzdGlvbnMgPSBmYWxzZTtcclxuICAgIHRoaXMucmVmcmVzaFRlbXBsYXRlR3JvdXBTdWdnZXN0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoVGVtcGxhdGVHcm91cFN1Z2dlc3Rpb25zKCkge1xyXG4gICAgY29uc3QgcXVlcnkgPSAodGhpcy50ZW1wbGF0ZUdyb3VwTmFtZSA/PyBcIlwiKS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgIGlmICghdGhpcy50ZW1wbGF0ZUdyb3VwT3B0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy50ZW1wbGF0ZUdyb3VwU3VnZ2VzdGlvbnMgPSBbXTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCFxdWVyeSkge1xyXG4gICAgICB0aGlzLnRlbXBsYXRlR3JvdXBTdWdnZXN0aW9ucyA9IFsuLi50aGlzLnRlbXBsYXRlR3JvdXBPcHRpb25zXTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy50ZW1wbGF0ZUdyb3VwU3VnZ2VzdGlvbnMgPSB0aGlzLnRlbXBsYXRlR3JvdXBPcHRpb25zLmZpbHRlcigob3B0KSA9PlxyXG4gICAgICBvcHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSksXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBkZXRlY3RPdGhlcnNTb3VyY2VkWm9uZXMoKSB7XHJcbiAgICBpZiAoIXRoaXMuYnJhbmRPcHRpb25zLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgY29uc3Qga25vd25CcmFuZHMgPSBuZXcgU2V0KHRoaXMuYnJhbmRPcHRpb25zLm1hcCgoYikgPT4gYi5icmFuZE5hbWUpKTtcclxuXHJcbiAgICBjb25zdCB6b25lc1dpdGhGb3JlaWduQnJhbmRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBbem9uZSwgYnJhbmRzXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmJyYW5kc0J5Wm9uZSkpIHtcclxuICAgICAgaWYgKGJyYW5kcy5zb21lKChiKSA9PiAha25vd25CcmFuZHMuaGFzKGIpKSkge1xyXG4gICAgICAgIHpvbmVzV2l0aEZvcmVpZ25CcmFuZHMucHVzaCh6b25lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghem9uZXNXaXRoRm9yZWlnbkJyYW5kcy5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUFsbFBpZHNMb2FkZWQoKTtcclxuICAgIHpvbmVzV2l0aEZvcmVpZ25CcmFuZHMuZm9yRWFjaChcclxuICAgICAgKHpvbmUpID0+ICh0aGlzLm90aGVyc01vZGVCeVpvbmVbem9uZV0gPSB0cnVlKSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGVuc3VyZUFsbFBpZHNMb2FkZWQoKSB7XHJcbiAgICBpZiAodGhpcy5hbGxQaWRzTG9hZGVkKSByZXR1cm47XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXN1bHQ6IGFueSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS5nZXRQSURMaXN0KFwib3RoZXJzXCIpLFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBsaXN0OiBzdHJpbmdbXSA9IHJlc3VsdD8uZGF0YSA/PyBbXTtcclxuICAgICAgdGhpcy5hbGxQaWRzT3B0aW9ucyA9IGxpc3QubWFwKChicmFuZE5hbWUpID0+ICh7IGJyYW5kTmFtZSB9KSk7XHJcbiAgICAgIHRoaXMuYWxsUGlkc0xvYWRlZCA9IHRydWU7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmxvZyhgQEAgfiBlbnN1cmVBbGxQaWRzTG9hZGVkIFtFUlJdOmAsIGVycm9yKTtcclxuICAgICAgdGhpcy5hbGxQaWRzT3B0aW9ucyA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYnJhbmRPcHRpb25zRm9yWm9uZSh6b25lOiBzdHJpbmcpOiB7IGJyYW5kTmFtZTogc3RyaW5nIH1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5vdGhlcnNNb2RlQnlab25lW3pvbmVdID8gdGhpcy5hbGxQaWRzT3B0aW9ucyA6IHRoaXMuYnJhbmRPcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgaXNUb2dnbGVBdmFpbGFibGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnNlbGVjdGVkSGVhZGVyPy5bMF0/LmxhYmVsO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25Ub2dnbGVPdGhlcnMoem9uZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBuZXh0QWN0aXZlID0gIXRoaXMub3RoZXJzTW9kZUJ5Wm9uZVt6b25lXTtcclxuICAgIHRoaXMub3RoZXJzTW9kZUJ5Wm9uZSA9IHsgLi4udGhpcy5vdGhlcnNNb2RlQnlab25lLCBbem9uZV06IG5leHRBY3RpdmUgfTtcclxuXHJcbiAgICBpZiAobmV4dEFjdGl2ZSkge1xyXG4gICAgICBhd2FpdCB0aGlzLmVuc3VyZUFsbFBpZHNMb2FkZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJyYW5kc0J5Wm9uZSA9IHsgLi4udGhpcy5icmFuZHNCeVpvbmUsIFt6b25lXTogW10gfTtcclxuICAgIHRoaXMuYXBwbHlCcmFuZHNUb0ZpeHR1cmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc25hcHNob3RCcmFuZHNCeVpvbmUoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XHJcbiAgICAodGhpcy5maXh0dXJlPy5zaGVsZkNvbmZpZyA/PyBbXSkuZm9yRWFjaCgoc2hlbGY6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB6b25lID0gc2hlbGY/LnpvbmU7XHJcbiAgICAgIGlmICghem9uZSB8fCByZXN1bHRbem9uZV0pIHJldHVybjtcclxuICAgICAgcmVzdWx0W3pvbmVdID0gQXJyYXkuaXNBcnJheShzaGVsZj8ucHJvZHVjdEJyYW5kTmFtZSlcclxuICAgICAgICA/IFsuLi5zaGVsZi5wcm9kdWN0QnJhbmROYW1lXVxyXG4gICAgICAgIDogW107XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGxvYWRIZWFkZXJzKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UuZ2V0SGVhZGVyc0xpc3QoKSxcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgbGlzdDogc3RyaW5nW10gPSByZXN1bHQ/LmRhdGEgPz8gW107XHJcbiAgICAgIHRoaXMuaGVhZGVyT3B0aW9ucyA9IGxpc3QubWFwKChsYWJlbCkgPT4gKHsgbGFiZWwgfSkpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coYEBAIH4gbG9hZEhlYWRlcnMgW0VSUl06YCwgZXJyb3IpO1xyXG4gICAgICB0aGlzLmhlYWRlck9wdGlvbnMgPSBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgbG9hZEJyYW5kc0ZvckhlYWRlcihoZWFkZXI6IHN0cmluZykge1xyXG4gICAgaWYgKCFoZWFkZXIpIHtcclxuICAgICAgdGhpcy5icmFuZE9wdGlvbnMgPSBbXTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UuZ2V0UElETGlzdChoZWFkZXIpLFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBsaXN0OiBzdHJpbmdbXSA9IHJlc3VsdD8uZGF0YSA/PyBbXTtcclxuICAgICAgdGhpcy5icmFuZE9wdGlvbnMgPSBsaXN0Lm1hcCgoYnJhbmROYW1lKSA9PiAoeyBicmFuZE5hbWUgfSkpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coYEBAIH4gbG9hZEJyYW5kc0ZvckhlYWRlciBbRVJSXTpgLCBlcnJvcik7XHJcbiAgICAgIHRoaXMuYnJhbmRPcHRpb25zID0gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkhlYWRlckNoYW5nZShzZWxlY3RlZDogeyBsYWJlbDogc3RyaW5nIH0gfCBudWxsKSB7XHJcbiAgICBjb25zdCBuZXdMYWJlbCA9IHNlbGVjdGVkPy5sYWJlbCA/PyBcIlwiO1xyXG4gICAgaWYgKCF0aGlzLmZpeHR1cmUpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmZpeHR1cmUuaGVhZGVyID0geyAuLi4odGhpcy5maXh0dXJlLmhlYWRlciA/PyB7fSksIGxhYmVsOiBuZXdMYWJlbCB9O1xyXG4gICAgdGhpcy5zZWxlY3RlZEhlYWRlciA9IG5ld0xhYmVsID8gW3sgbGFiZWw6IG5ld0xhYmVsIH1dIDogW107XHJcblxyXG4gICAgYXdhaXQgdGhpcy5sb2FkQnJhbmRzRm9ySGVhZGVyKG5ld0xhYmVsKTtcclxuXHJcbiAgICBjb25zdCBhbGxvd2VkID0gbmV3IFNldCh0aGlzLmJyYW5kT3B0aW9ucy5tYXAoKGIpID0+IGIuYnJhbmROYW1lKSk7XHJcbiAgICBjb25zdCBuZXh0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcclxuICAgIE9iamVjdC5rZXlzKHRoaXMuYnJhbmRzQnlab25lKS5mb3JFYWNoKCh6b25lKSA9PiB7XHJcbiAgICAgIG5leHRbem9uZV0gPSAodGhpcy5icmFuZHNCeVpvbmVbem9uZV0gPz8gW10pLmZpbHRlcigoYikgPT5cclxuICAgICAgICBhbGxvd2VkLmhhcyhiKSxcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5icmFuZHNCeVpvbmUgPSBuZXh0O1xyXG4gICAgdGhpcy5vdGhlcnNNb2RlQnlab25lID0ge307XHJcbiAgICB0aGlzLmFwcGx5QnJhbmRzVG9GaXh0dXJlKCk7XHJcbiAgfVxyXG5cclxuICBvblpvbmVCcmFuZHNDaGFuZ2Uoem9uZTogc3RyaW5nLCBicmFuZHM6IHN0cmluZ1tdKSB7XHJcbiAgICB0aGlzLmJyYW5kc0J5Wm9uZSA9IHsgLi4udGhpcy5icmFuZHNCeVpvbmUsIFt6b25lXTogYnJhbmRzID8/IFtdIH07XHJcbiAgICB0aGlzLmFwcGx5QnJhbmRzVG9GaXh0dXJlKCk7XHJcbiAgfVxyXG5cclxuICByZXNldFRvT3JpZ2luYWwoKSB7XHJcbiAgICBpZiAoIXRoaXMuZml4dHVyZSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuZml4dHVyZS5oZWFkZXIgPSB7XHJcbiAgICAgIC4uLih0aGlzLmZpeHR1cmUuaGVhZGVyID8/IHt9KSxcclxuICAgICAgbGFiZWw6IHRoaXMub3JpZ2luYWxIZWFkZXJMYWJlbCxcclxuICAgIH07XHJcbiAgICB0aGlzLnNlbGVjdGVkSGVhZGVyID0gdGhpcy5vcmlnaW5hbEhlYWRlckxhYmVsXHJcbiAgICAgID8gW3sgbGFiZWw6IHRoaXMub3JpZ2luYWxIZWFkZXJMYWJlbCB9XVxyXG4gICAgICA6IFtdO1xyXG5cclxuICAgIHRoaXMudGVtcGxhdGVHcm91cE5hbWUgPSB0aGlzLm9yaWdpbmFsVGVtcGxhdGVHcm91cE5hbWU7XHJcbiAgICB0aGlzLmZpeHR1cmUudGVtcGxhdGVHcm91cE5hbWUgPSB0aGlzLnRlbXBsYXRlR3JvdXBOYW1lO1xyXG5cclxuICAgIHRoaXMuYnJhbmRzQnlab25lID0gc3RydWN0dXJlZENsb25lKHRoaXMub3JpZ2luYWxCcmFuZHNCeVpvbmUpO1xyXG4gICAgdGhpcy5vdGhlcnNNb2RlQnlab25lID0ge307XHJcbiAgICB0aGlzLmFwcGx5QnJhbmRzVG9GaXh0dXJlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5QnJhbmRzVG9GaXh0dXJlKCkge1xyXG4gICAgKHRoaXMuZml4dHVyZT8uc2hlbGZDb25maWcgPz8gW10pLmZvckVhY2goKHNoZWxmOiBhbnkpID0+IHtcclxuICAgICAgY29uc3Qgem9uZSA9IHNoZWxmPy56b25lO1xyXG4gICAgICBpZiAoIXpvbmUpIHJldHVybjtcclxuICAgICAgc2hlbGYucHJvZHVjdEJyYW5kTmFtZSA9IFsuLi4odGhpcy5icmFuZHNCeVpvbmVbem9uZV0gPz8gW10pXTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzYW5pdGl6ZVZtQ29uZmlnKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2hlbGZDb3VudCA9IHRoaXMuZml4dHVyZT8uc2hlbGZDb25maWc/Lmxlbmd0aCA/PyAxO1xyXG5cclxuICAgIHRoaXMuZml4dHVyZT8udm1Db25maWc/LmZvckVhY2goKHZtOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCF2bT8uc3RhcnRZUG9zaXRpb24gJiYgIXZtPy5lbmRZUG9zaXRpb24pIHtcclxuICAgICAgICBpZiAodm0/Lnhab25lID09PSBcInN0cmV0Y2hcIiAmJiB2bT8ueVpvbmUgPT09IFwic3RyZXRjaFwiKSB7XHJcbiAgICAgICAgICB2bS5zdGFydFlQb3NpdGlvbiA9IHNoZWxmQ291bnQ7XHJcbiAgICAgICAgICB2bS5lbmRZUG9zaXRpb24gPSBzaGVsZkNvdW50O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2bS5zdGFydFlQb3NpdGlvbiA9IDE7XHJcbiAgICAgICAgICB2bS5lbmRZUG9zaXRpb24gPSBzaGVsZkNvdW50O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNCQ0luaXRpYWxpemVkKSB7XHJcbiAgICAgIHRoaXMuaXNCQ0luaXRpYWxpemVkID0gdGhpcy5hcHBseVNoZWxmQ29sb3JzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuaXNWTUluaXRpYWxpemVkKSB7XHJcbiAgICAgIHRoaXMuaXNWTUluaXRpYWxpemVkID0gdGhpcy5oYW5kbGVWbVBvc2l0aW9uQW5kU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0U2VsZWN0ZWRWTSh2bTogYW55KSB7XHJcbiAgLy8gICBpZiAodm0/LnZtSWQpIHtcclxuICAvLyAgICAgcmV0dXJuIHRoaXMudm1MaXN0LmZpbmQoKHYpID0+IHYuaWQgPT09IHZtLnZtSWQpO1xyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgcmV0dXJuIHRoaXMudm1MaXN0LmZpbmQoXHJcbiAgLy8gICAgICAgKHYpID0+IHYubmFtZSA9PT0gdm0udm1OYW1lICYmIHYudHlwZSA9PT0gdm0udm1UeXBlXHJcbiAgLy8gICAgICk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICBwcml2YXRlIGdldCBib2R5RWwoKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuZml4dHVyZVJvb3Q/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoXCIjYm9keS1ibG9jay1zdW1cIikgPz8gbnVsbFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVZtUG9zaXRpb25BbmRTaXplKCkge1xyXG4gICAgaWYgKCF0aGlzLnNob3dWTXMpIHJldHVybiB0cnVlO1xyXG5cclxuICAgIGNvbnN0IHZpZXdQb3J0ID0gdGhpcy5ib2R5RWw7XHJcbiAgICBpZiAoIXZpZXdQb3J0KSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgYm9keVdpZHRoID0gdmlld1BvcnQub2Zmc2V0V2lkdGg7XHJcblxyXG4gICAgdGhpcy5maXh0dXJlPy52bUNvbmZpZz8uZm9yRWFjaCgoZTogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgbGV0IHN0YXJ0U2hlbGYgPSBlPy5zdGFydFlQb3NpdGlvbjtcclxuICAgICAgbGV0IGVuZFNoZWxmID0gZT8uZW5kWVBvc2l0aW9uO1xyXG5cclxuICAgICAgY29uc3Qgdm0gPSB2aWV3UG9ydC5xdWVyeVNlbGVjdG9yKGAjdm0ke2l9YCkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGlmICghdm0pIHJldHVybjtcclxuXHJcbiAgICAgIGxldCB4ID0gMDtcclxuICAgICAgbGV0IHkgPSAwO1xyXG5cclxuICAgICAgbGV0IHlTdGFydCA9IDA7XHJcbiAgICAgIGZvciAobGV0IGsgPSAxOyBrIDwgc3RhcnRTaGVsZjsgaysrKSB7XHJcbiAgICAgICAgY29uc3QgcyA9IGdldFNoZWxmRGl2KGspO1xyXG4gICAgICAgIGlmICghcykgcmV0dXJuO1xyXG5cclxuICAgICAgICB5U3RhcnQgKz0gcy5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBwbGFjZW1lbnRIZWlnaHQgPSAwO1xyXG4gICAgICBsZXQgcGxhY2VtZW50V2lkdGggPSBib2R5V2lkdGg7XHJcblxyXG4gICAgICBmb3IgKGxldCBrID0gc3RhcnRTaGVsZjsgayA8PSBlbmRTaGVsZjsgaysrKSB7XHJcbiAgICAgICAgY29uc3QgcyA9IGdldFNoZWxmRGl2KGspO1xyXG4gICAgICAgIGlmICghcykgcmV0dXJuO1xyXG4gICAgICAgIHBsYWNlbWVudEhlaWdodCArPSBzLm9mZnNldEhlaWdodDtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGRlZmF1bHRXID0gcGxhY2VtZW50V2lkdGggLyAzO1xyXG4gICAgICBsZXQgZGVmYXVsdEggPSBwbGFjZW1lbnRIZWlnaHQgLyAzO1xyXG5cclxuICAgICAgbGV0IHdpZHRoID0gZGVmYXVsdFc7XHJcbiAgICAgIGxldCBoZWlnaHQgPSBkZWZhdWx0SDtcclxuXHJcbiAgICAgIHN3aXRjaCAoZT8ueFpvbmUpIHtcclxuICAgICAgICBjYXNlIFwibGVmdFwiOlxyXG4gICAgICAgICAgeCA9IDA7XHJcbiAgICAgICAgICB3aWR0aCA9IGRlZmF1bHRXO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInJpZ2h0XCI6XHJcbiAgICAgICAgICB3aWR0aCA9IGRlZmF1bHRXO1xyXG4gICAgICAgICAgeCA9IGJvZHlXaWR0aCAtIHdpZHRoO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgd2lkdGggPSBkZWZhdWx0VztcclxuICAgICAgICAgIHggPSAoYm9keVdpZHRoIC0gd2lkdGgpIC8gMjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzdHJldGNoXCI6XHJcbiAgICAgICAgICB3aWR0aCA9IGJvZHlXaWR0aDtcclxuICAgICAgICAgIHggPSAwO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN3aXRjaCAoZT8ueVpvbmUpIHtcclxuICAgICAgICBjYXNlIFwidG9wXCI6XHJcbiAgICAgICAgICBoZWlnaHQgPSBwbGFjZW1lbnRIZWlnaHQgPCBkZWZhdWx0SCA/IHBsYWNlbWVudEhlaWdodCAtIDIwIDogZGVmYXVsdEg7XHJcbiAgICAgICAgICB5ID0geVN0YXJ0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgaGVpZ2h0ID0gcGxhY2VtZW50SGVpZ2h0IDwgZGVmYXVsdEggPyBwbGFjZW1lbnRIZWlnaHQgLSAyMCA6IGRlZmF1bHRIO1xyXG4gICAgICAgICAgeSA9IChwbGFjZW1lbnRIZWlnaHQgLSBoZWlnaHQpIC8gMiArIHlTdGFydDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICAgIGhlaWdodCA9IHBsYWNlbWVudEhlaWdodCA8IGRlZmF1bHRIID8gcGxhY2VtZW50SGVpZ2h0IC0gMjAgOiBkZWZhdWx0SDtcclxuICAgICAgICAgIHkgPSBwbGFjZW1lbnRIZWlnaHQgLSBoZWlnaHQgKyB5U3RhcnQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic3RyZXRjaFwiOlxyXG4gICAgICAgICAgaGVpZ2h0ID0gcGxhY2VtZW50SGVpZ2h0O1xyXG4gICAgICAgICAgeSA9IHlTdGFydDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2bS5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcclxuICAgICAgdm0uc3R5bGUuaGVpZ2h0ID0gYCAke2hlaWdodH1weGA7XHJcbiAgICAgIHZtLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHt4fXB4LCAke3l9cHgpYDtcclxuXHJcbiAgICAgIGZ1bmN0aW9uIGdldFNoZWxmRGl2KGs6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiAodmlld1BvcnQ/LnF1ZXJ5U2VsZWN0b3IoYCNzaGVsZiR7a31gKSB8fFxyXG4gICAgICAgICAgdmlld1BvcnQ/LnF1ZXJ5U2VsZWN0b3IoYCN0cmF5JHtrfWApIHx8XHJcbiAgICAgICAgICB2aWV3UG9ydD8ucXVlcnlTZWxlY3RvcihgI3Ztb25seSR7a31gKSkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBhcHBseVNoZWxmQ29sb3JzKCkge1xyXG4gICAgY29uc3QgYm9kaWVzID0gdGhpcy5ib2R5RWw7XHJcbiAgICBpZiAoIWJvZGllcykgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IGJvZHlDaGlsZHJlbiA9IEFycmF5LmZyb20oYm9kaWVzPy5jaGlsZHJlbiA/PyBbXSkgYXMgSFRNTEVsZW1lbnRbXTtcclxuXHJcbiAgICBjb25zdCBzaGVsZkRpdnMgPSBib2R5Q2hpbGRyZW5cclxuICAgICAgLm1hcCgoZGl2KSA9PiBkaXYgYXMgSFRNTEVsZW1lbnQpXHJcbiAgICAgIC5maWx0ZXIoKGQpID0+IGQ/LmlkLmluY2x1ZGVzKFwic3VtU2hlbGZDb250YWluZXJcIikpO1xyXG5cclxuICAgIGlmICghc2hlbGZEaXZzKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgYWRqdXN0ID0gMDtcclxuICAgIHN3aXRjaCAodGhpcy5maXh0dXJlPy5wcm9kdWN0UmVzb2x1dGlvbkxldmVsKSB7XHJcbiAgICAgIGNhc2UgXCJMMVwiOiAvL2ZpeHR1cmVcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsZXQgeSA9IDA7XHJcbiAgICAgICAgICBzaGVsZkRpdnMuZm9yRWFjaCgoZCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dDb2xvcnMpIHtcclxuICAgICAgICAgICAgICBkLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbMF0uYmc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNhcCA9IGQucXVlcnlTZWxlY3RvcihcIi5jYXBhY2l0eVwiKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgY29uc3Qgc1kgPVxyXG4gICAgICAgICAgICAgIHkgKyAoZC5vZmZzZXRIZWlnaHQgLSBjYXAub2Zmc2V0SGVpZ2h0KSAvIDIgLSBjYXAub2Zmc2V0VG9wO1xyXG4gICAgICAgICAgICBjYXAuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHtzWX1weClgO1xyXG4gICAgICAgICAgICBjYXAuc3R5bGUuYm9yZGVyID0gYDFweCBzb2xpZCAke3RoaXMuc2hlbGZDb2xvcnNbMF0uYm9yZGVyfWA7XHJcbiAgICAgICAgICAgIHkgKz0gZC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFwiTDNcIjogLy9zZWN0aW9uXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29uc3Qgc2hlbHZlcyA9IHNoZWxmRGl2c1xyXG4gICAgICAgICAgICAubWFwKChkaXYpID0+XHJcbiAgICAgICAgICAgICAgZGl2Lmxhc3RFbGVtZW50Q2hpbGQ/LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJkaXZcIlxyXG4gICAgICAgICAgICAgICAgPyAoZGl2Lmxhc3RFbGVtZW50Q2hpbGQgYXMgSFRNTEVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdFNlcXVlbnRpYWxTZWN0aW9uKHNoZWx2ZXMpO1xyXG4gICAgICAgICAgY29uc3Qgc2VjdGlvbkFycmF5ID0gdGhpcy5ncm91cFNoZWx2ZXNCeVpvbmUoXHJcbiAgICAgICAgICAgIHRoaXMuZml4dHVyZT8uc2hlbGZDb25maWcgPz8gW10sXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgYWxsU2VjdGlvblNoZWx2ZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgICAgICAgc2VjdGlvbkFycmF5LmZvckVhY2goKHNlLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNoZWxmSWRzID1cclxuICAgICAgICAgICAgICBzZS5zaGVsdmVzPy5tYXAoKHNoKSA9PiBzaC5yZXBsYWNlKC9cXHMvZywgXCJcIikudG9Mb3dlckNhc2UoKSkgPz9cclxuICAgICAgICAgICAgICBbXTtcclxuICAgICAgICAgICAgYWxsU2VjdGlvblNoZWx2ZXMucHVzaCguLi5zaGVsZklkcyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY0RpdnMgPSBzaGVsdmVzLmZpbHRlcigoaXRlbSkgPT5cclxuICAgICAgICAgICAgICBzaGVsZklkcz8uaW5jbHVkZXMoaXRlbT8uaWQgPz8gXCJcIiksXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG93Q29sb3JzKSB7XHJcbiAgICAgICAgICAgICAgc2VjRGl2cy5mb3JFYWNoKChkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWQpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5zaGVsZkNvbG9yc1tpXS5iZztcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNhcCA9IGQucXVlcnlTZWxlY3RvcihcIi5jYXBhY2l0eVwiKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgICAgIGlmIChjYXApIHtcclxuICAgICAgICAgICAgICAgICAgY2FwLnN0eWxlLmJvcmRlciA9IGAxcHggc29saWQgJHt0aGlzLnNoZWxmQ29sb3JzW2ldLmJvcmRlcn1gO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBsZXQgeSA9IDA7XHJcbiAgICAgICAgICBzaGVsZkRpdnMuZm9yRWFjaCgoZCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjYXAgPSBkLnF1ZXJ5U2VsZWN0b3IoXCIuY2FwYWNpdHlcIikgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmIChjYXApIHtcclxuICAgICAgICAgICAgICBjb25zdCBzWSA9XHJcbiAgICAgICAgICAgICAgICB5ICsgKGQub2Zmc2V0SGVpZ2h0IC0gY2FwLm9mZnNldEhlaWdodCkgLyAyIC0gY2FwLm9mZnNldFRvcDtcclxuICAgICAgICAgICAgICBjYXAuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHtzWX1weClgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHkgKz0gZC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpZiAoIXRoaXMuc2hvd0JDcykgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgICAgY29uc3QgdW5hc3NpZ25lZFNoZWx2ZXMgPSBzaGVsZkRpdnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoaXRlbSkgPT4gIWFsbFNlY3Rpb25TaGVsdmVzLmluY2x1ZGVzKGl0ZW0uaWQpLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHVuYXNzaWduZWRTaGVsdmVzLmZvckVhY2goKGQpID0+IChkLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IFwid2hpdGVcIikpO1xyXG5cclxuICAgICAgICAgIGxldCBzZWN0aW9uR3JvdXBIZWlnaHQgPSAwO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvbkJ5Wm9uZXMuZm9yRWFjaCgoc3osIGkpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U2VjdGlvbkhlaWdodCA9IHN6LnNlY3Rpb24uc2hlbGZEaXZzLnJlZHVjZShcclxuICAgICAgICAgICAgICAgIChoLCBkKSA9PiBoICsgKGQ/Lm9mZnNldEhlaWdodCA/PyAwKSxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U2VjdGlvbldpZHRoID1cclxuICAgICAgICAgICAgICAgIHN6LnNlY3Rpb24uc2hlbGZEaXZzWzBdPy5vZmZzZXRXaWR0aCA/PyAzNDU7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGJjID0gYm9kaWVzLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxyXG4gICAgICAgICAgICAgICAgYCNicmFuZC1jYXRlZ29yeSR7aX1gLFxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChiYykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VjQmcgPSByZ2JUb0hleChcclxuICAgICAgICAgICAgICAgICAgc3ouc2VjdGlvbi5zaGVsZkRpdnNbMF0/LnN0eWxlLmJhY2tncm91bmRDb2xvcixcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb2xvciA9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hlbGZDb2xvcnMuZmluZCgoYykgPT4gYy5iZyA9PT0gc2VjQmcpID8/XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hlbGZDb2xvcnNbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0NvbG9ycykge1xyXG4gICAgICAgICAgICAgICAgICBiYy5zdHlsZS5ib3JkZXJDb2xvciA9IGNvbG9yLmJvcmRlcjtcclxuICAgICAgICAgICAgICAgICAgYmMuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gXCIjZmZmXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgYmNYID0gKGN1cnJlbnRTZWN0aW9uV2lkdGggLSBiYy5vZmZzZXRXaWR0aCkgLyAyO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYmNZID1cclxuICAgICAgICAgICAgICAgICAgKGN1cnJlbnRTZWN0aW9uSGVpZ2h0IC0gYmMub2Zmc2V0SGVpZ2h0KSAvIDIgK1xyXG4gICAgICAgICAgICAgICAgICBzZWN0aW9uR3JvdXBIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBiYy5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7YmNYICsgYWRqdXN0fXB4LCAke2JjWX1weClgO1xyXG5cclxuICAgICAgICAgICAgICAgIHNlY3Rpb25Hcm91cEhlaWdodCArPSBjdXJyZW50U2VjdGlvbkhlaWdodDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgXCJMMlwiOiAvL3NoZWxmXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGV0IHkgPSAwO1xyXG5cclxuICAgICAgICAgIHNoZWxmRGl2cy5mb3JFYWNoKChkaXYsIGkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2FwID0gZGl2LnF1ZXJ5U2VsZWN0b3IoXCIuY2FwYWNpdHlcIikgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmICghY2FwKSB7XHJcbiAgICAgICAgICAgICAgeSArPSBkaXYub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzWSA9XHJcbiAgICAgICAgICAgICAgeSArIChkaXYub2Zmc2V0SGVpZ2h0IC0gY2FwLm9mZnNldEhlaWdodCkgLyAyIC0gY2FwLm9mZnNldFRvcDtcclxuICAgICAgICAgICAgY2FwLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7c1l9cHgpYDtcclxuICAgICAgICAgICAgY2FwLnN0eWxlLmJvcmRlciA9IGAxcHggc29saWQgJHt0aGlzLnNoZWxmQ29sb3JzW2ldLmJvcmRlcn1gO1xyXG4gICAgICAgICAgICB5ICs9IGRpdi5vZmZzZXRIZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG93Q29sb3JzKSB7XHJcbiAgICAgICAgICAgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbaV0uYmc7XHJcbiAgICAgICAgICAgICAgZGl2LnN0eWxlLmJvcmRlciA9IGAxLjRweCBzb2xpZCAke3RoaXMuc2hlbGZDb2xvcnNbaV0uYm9yZGVyfWA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5zaG93QkNzKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb25zdCBiYyA9IGRpdi5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihgI2JyYW5kLWNhdGVnb3J5JHtpfWApO1xyXG4gICAgICAgICAgICBpZiAoIWJjKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb25zdCBiY1ggPSAoZGl2Lm9mZnNldFdpZHRoIC0gYmMub2Zmc2V0V2lkdGgpIC8gMjtcclxuICAgICAgICAgICAgY29uc3QgYmNZID0gKGRpdi5vZmZzZXRIZWlnaHQgLSBiYy5vZmZzZXRIZWlnaHQpIC8gMjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dDb2xvcnMpIHtcclxuICAgICAgICAgICAgICBiYy5zdHlsZS5ib3JkZXJDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbaV0uYm9yZGVyO1xyXG4gICAgICAgICAgICAgIGJjLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbaV0udGV4dEJnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJjLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHtiY1ggKyBhZGp1c3R9cHgsICR7YmNZfXB4KWA7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJMNFwiOiAvL3Nwb3RcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsZXQgeSA9IDA7XHJcbiAgICAgICAgICBzaGVsZkRpdnMuZm9yRWFjaCgoZCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dDb2xvcnMpIHtcclxuICAgICAgICAgICAgICBkLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbMF0uYmc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNhcCA9IGQucXVlcnlTZWxlY3RvcihcIi5jYXBhY2l0eVwiKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgY29uc3Qgc1kgPVxyXG4gICAgICAgICAgICAgIHkgKyAoZC5vZmZzZXRIZWlnaHQgLSBjYXAub2Zmc2V0SGVpZ2h0KSAvIDIgLSBjYXAub2Zmc2V0VG9wO1xyXG4gICAgICAgICAgICBjYXAuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHtzWX1weClgO1xyXG4gICAgICAgICAgICBjYXAuc3R5bGUuYm9yZGVyID0gYDFweCBzb2xpZCAke3RoaXMuc2hlbGZDb2xvcnNbMF0uYm9yZGVyfWA7XHJcbiAgICAgICAgICAgIHkgKz0gZC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgbGV0IHkgPSAwO1xyXG4gICAgICAgIHNoZWxmRGl2cy5mb3JFYWNoKChkKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5zaG93Q29sb3JzKSB7XHJcbiAgICAgICAgICAgIGQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5zaGVsZkNvbG9yc1swXS5iZztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBjYXAgPSBkLnF1ZXJ5U2VsZWN0b3IoXCIuY2FwYWNpdHlcIikgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICBjb25zdCBzWSA9XHJcbiAgICAgICAgICAgIHkgKyAoZC5vZmZzZXRIZWlnaHQgLSBjYXAub2Zmc2V0SGVpZ2h0KSAvIDIgLSBjYXAub2Zmc2V0VG9wO1xyXG4gICAgICAgICAgY2FwLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7c1l9cHgpYDtcclxuICAgICAgICAgIGNhcC5zdHlsZS5ib3JkZXIgPSBgMXB4IHNvbGlkICR7dGhpcy5zaGVsZkNvbG9yc1swXS5ib3JkZXJ9YDtcclxuICAgICAgICAgIHkgKz0gZC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RTZXF1ZW50aWFsU2VjdGlvbihzaGVsZkRpdnM6IChIVE1MRWxlbWVudCB8IG51bGwpW10pIHtcclxuICAgIGNvbnN0IG5ld1NlY3Rpb25CeVpvbmVzID0gW107XHJcblxyXG4gICAgbGV0IHBab25lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgIGZvciAoY29uc3QgcyBvZiB0aGlzLmZpeHR1cmU/LnNoZWxmQ29uZmlnID8/IFtdKSB7XHJcbiAgICAgIGNvbnN0IHpvbmUgPSBzLnpvbmUgfHwgXCJcIjtcclxuICAgICAgY29uc3Qgc2hlbGZJZCA9IGAke3Muc2hlbGZUeXBlfSR7cy5zaGVsZk51bWJlcn1gO1xyXG4gICAgICBjb25zdCBzaGVsZkRpdiA9IHNoZWxmRGl2cy5maW5kKChkKSA9PiBkPy5pZCA9PT0gc2hlbGZJZCk7XHJcblxyXG4gICAgICBpZiAoem9uZSA9PT0gXCJcIikgY29udGludWU7XHJcbiAgICAgIGlmICh6b25lICE9PSBwWm9uZSkge1xyXG4gICAgICAgIG5ld1NlY3Rpb25CeVpvbmVzLnB1c2goe1xyXG4gICAgICAgICAgem9uZSxcclxuICAgICAgICAgIHNlY3Rpb246IHtcclxuICAgICAgICAgICAgYnJhbmRzOiBzLnByb2R1Y3RCcmFuZE5hbWUgPz8gW10sXHJcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IHMucHJvZHVjdENhdGVnb3J5ID8/IFtdLFxyXG4gICAgICAgICAgICBzaGVsdmVzOiBbc2hlbGZJZF0sXHJcbiAgICAgICAgICAgIHNoZWxmRGl2czogW3NoZWxmRGl2XSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcFpvbmUgPSB6b25lO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb24gPSBuZXdTZWN0aW9uQnlab25lc1tuZXdTZWN0aW9uQnlab25lcy5sZW5ndGggLSAxXS5zZWN0aW9uO1xyXG4gICAgICAgIHNlY3Rpb24uc2hlbHZlcy5wdXNoKHNoZWxmSWQpO1xyXG4gICAgICAgIHNlY3Rpb24uc2hlbGZEaXZzLnB1c2goc2hlbGZEaXYpO1xyXG5cclxuICAgICAgICBpZiAoIXNlY3Rpb24uYnJhbmRzLmxlbmd0aCkgc2VjdGlvbi5icmFuZHMgPSBzPy5wcm9kdWN0QnJhbmROYW1lID8/IFtdO1xyXG4gICAgICAgIGlmICghc2VjdGlvbi5jYXRlZ29yaWVzLmxlbmd0aClcclxuICAgICAgICAgIHNlY3Rpb24uY2F0ZWdvcmllcyA9IHM/LnByb2R1Y3RDYXRlZ29yeSA/PyBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VjdGlvbkJ5Wm9uZXMgPSBbLi4ubmV3U2VjdGlvbkJ5Wm9uZXNdO1xyXG5cclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZ3JvdXBTaGVsdmVzQnlab25lKGlucHV0OiBTaGVsZkNvbmZpZ1tdKTogU2VjdGlvbkNvbmZpZ1tdIHtcclxuICAgIGNvbnN0IHpvbmVNYXA6IHsgW3pvbmU6IHN0cmluZ106IFNlY3Rpb25Db25maWcgfSA9IHt9O1xyXG5cclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpbnB1dCkge1xyXG4gICAgICBjb25zdCB6b25lID0gaXRlbT8uem9uZSA/PyBcIlwiO1xyXG4gICAgICBjb25zdCBzaGVsZkxhYmVsID0gYCR7aXRlbS5zaGVsZlR5cGV9ICR7aXRlbS5zaGVsZk51bWJlcn1gO1xyXG5cclxuICAgICAgaWYgKCF6b25lTWFwW3pvbmVdKSB7XHJcbiAgICAgICAgem9uZU1hcFt6b25lXSA9IHtcclxuICAgICAgICAgIHNoZWx2ZXM6IFtdLFxyXG4gICAgICAgICAgcHJvZHVjdEJyYW5kTmFtZTpcclxuICAgICAgICAgICAgdGhpcy5maXh0dXJlPy5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwyXCJcclxuICAgICAgICAgICAgICA/IGl0ZW0ucHJvZHVjdEJyYW5kTmFtZVxyXG4gICAgICAgICAgICAgIDogW10sXHJcbiAgICAgICAgICBwcm9kdWN0Q2F0ZWdvcnk6XHJcbiAgICAgICAgICAgIHRoaXMuZml4dHVyZT8ucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMlwiXHJcbiAgICAgICAgICAgICAgPyBpdGVtLnByb2R1Y3RDYXRlZ29yeVxyXG4gICAgICAgICAgICAgIDogW10sXHJcbiAgICAgICAgICB6b25lOiB6b25lLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHpvbmVNYXBbem9uZV0/LnNoZWx2ZXM/LnB1c2goc2hlbGZMYWJlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoem9uZU1hcCk7XHJcbiAgfVxyXG5cclxuICBhcHBseVNlY3Rpb25Db25maWdUb1NoZWx2ZXMoc2VjdGlvbnM6IFNlY3Rpb25Db25maWdbXSk6IFNoZWxmQ29uZmlnW10ge1xyXG4gICAgY29uc3Qgc2VjdGlvbk1hcCA9IG5ldyBNYXA8XHJcbiAgICAgIHN0cmluZyxcclxuICAgICAgUGljazxTZWN0aW9uQ29uZmlnLCBcInpvbmVcIiB8IFwicHJvZHVjdEJyYW5kTmFtZVwiIHwgXCJwcm9kdWN0Q2F0ZWdvcnlcIj5cclxuICAgID4oKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcclxuICAgICAgZm9yIChjb25zdCBzaGVsZkxhYmVsIG9mIHNlY3Rpb24uc2hlbHZlcyEpIHtcclxuICAgICAgICBzZWN0aW9uTWFwLnNldChzaGVsZkxhYmVsLCB7XHJcbiAgICAgICAgICB6b25lOiBzZWN0aW9uLnpvbmUsXHJcbiAgICAgICAgICBwcm9kdWN0QnJhbmROYW1lOiBzZWN0aW9uLnByb2R1Y3RCcmFuZE5hbWUsXHJcbiAgICAgICAgICBwcm9kdWN0Q2F0ZWdvcnk6IHNlY3Rpb24ucHJvZHVjdENhdGVnb3J5LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQXBwbHkgb3ZlcnJpZGVzIHRvIG1hdGNoaW5nIHNoZWx2ZXNcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuZml4dHVyZT8uc2hlbGZDb25maWc/Lm1hcCgoczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc2hlbGZMYWJlbCA9IGAke3Muc2hlbGZUeXBlfSAke3Muc2hlbGZOdW1iZXJ9YDtcclxuICAgICAgICBjb25zdCBvdmVycmlkZSA9IHNlY3Rpb25NYXAuZ2V0KHNoZWxmTGFiZWwpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4ucyxcclxuICAgICAgICAgIHpvbmU6IG92ZXJyaWRlPy56b25lIHx8IFwiXCIsXHJcbiAgICAgICAgICBwcm9kdWN0QnJhbmROYW1lOiBvdmVycmlkZT8ucHJvZHVjdEJyYW5kTmFtZSA/PyBbXSxcclxuICAgICAgICAgIHByb2R1Y3RDYXRlZ29yeTogb3ZlcnJpZGU/LnByb2R1Y3RDYXRlZ29yeSA/PyBbXSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KSA/PyBbXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIkBpZihpc1BhZ2VMb2FkaW5nKXtcclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG59QGVsc2Uge1xyXG5cclxuICAgIDxzZWN0aW9uICNmaXh0dXJlUm9vdCBpZD1cImZpeHR1cmUtdmlld1wiPlxyXG4gICAgICAgIDxkaXYgaWQ9XCJ2bS1wcm9kdWN0cy1zdW1cIiBjbGFzcz1cIndhbGwtdmlld3BvcnRcIj5cclxuICAgICAgICAgICAgPCEtLSBUZW1wbGF0ZSBncm91cCBuYW1lIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGVtcGxhdGUtZ3JvdXAtZWRpdG9yXCIgW2NsYXNzLnJlYWRvbmx5XT1cIiFlZGl0YWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInpvbmVUZW1wbGF0ZUdyb3VwTmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+VGVtcGxhdGUgR3JvdXAgTmFtZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGVtcGxhdGUtZ3JvdXAtYXV0b2NvbXBsZXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiem9uZVRlbXBsYXRlR3JvdXBOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInRlbXBsYXRlR3JvdXBOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25UZW1wbGF0ZUdyb3VwTmFtZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uVGVtcGxhdGVHcm91cEZvY3VzKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvblRlbXBsYXRlR3JvdXBCbHVyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWVkaXRhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUZW1wbGF0ZSBHcm91cCBOYW1lXCIgLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwic3VnZ2VzdGlvbnMtcGFuZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImVkaXRhYmxlICYmIHNob3dUZW1wbGF0ZUdyb3VwU3VnZ2VzdGlvbnMgJiYgdGVtcGxhdGVHcm91cFN1Z2dlc3Rpb25zLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiB0ZW1wbGF0ZUdyb3VwU3VnZ2VzdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdWdnZXN0aW9uLWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvblBpY2tUZW1wbGF0ZUdyb3VwU3VnZ2VzdGlvbihvcHRpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24gfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJlZGl0YWJsZSAmJiAhdGVtcGxhdGVHcm91cE5hbWU/LnRyaW0oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlIEdyb3VwIE5hbWUgaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gSGVhZGVyIGJsb2NrIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWJsb2NrIHpvbmUtaGVhZGVyLWVkaXRvclwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIihmaXh0dXJlPy5oZWFkZXI/LmlzRW5hYmxlZCAmJiBmaXh0dXJlPy5maXh0dXJlVHlwZSA9PT0gJ3dhbGwnKSB8fCBzaG93SGVhZGVyRm9vdGVyQWx3YXlzXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInpvbmUtaGVhZGVyLXNlbGVjdFwiIFtjbGFzcy5yZWFkb25seV09XCIhZWRpdGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGliLXNlbGVjdC1wbGFub1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiaGVhZGVyT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpZEZpZWxkXT1cIidsYWJlbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoRmllbGRdPVwiJ2xhYmVsJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZFZhbHVlc109XCJzZWxlY3RlZEhlYWRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhZWRpdGFibGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29tcGFjdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidIZWFkZXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uSGVhZGVyQ2hhbmdlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpYi1zZWxlY3QtcGxhbm8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEJvZHkgYmxvY2sgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgaWQ9XCJib2R5LWJsb2NrLXN1bVwiIGNsYXNzPVwiYm9keS1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tW1ZNIEJMT0NLXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJmaXh0dXJlPy52bUNvbmZpZz8ubGVuZ3RoICYmIHNob3dWTXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB2bSBvZiBmaXh0dXJlPy52bUNvbmZpZzsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCIndm0nICsgaVwiIGNsYXNzPVwidm0tYmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cInZtPy52bUltYWdlVXJsOyBlbHNlIHBsYWNlaG9sZGVyXCIgW3NyY109XCJpbWdDRE4gKyB2bT8udm1JbWFnZVVybFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlZtIEltYWdlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsYWNlaG9sZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidm0tcGxhY2Vob2xkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz57eyB2bT8udm1OYW1lIH19PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVtGSVhUVVJFIExFVkVMIC0gQlJBTkQgQ0FURUdPUlldLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiZml4dHVyZS1sZXZlbFwiICpuZ0lmPVwiZml4dHVyZT8ucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gJ0wxJyAmJiBzaG93QkNzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImJyYW5kLWNhdGVnb3J5XCIgY2xhc3M9XCJicmFuZC1jYXRlZ29yeVwiICpuZ0lmPVwiZml4dHVyZT8ucHJvZHVjdEJyYW5kTmFtZT8ubGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiYnJhbmRDYXRlZ29yeVRvb2x0aXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJicmFuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYiBvZiBmaXh0dXJlPy5wcm9kdWN0QnJhbmROYW1lOyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGRyYWZ0IG1lLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2F0ZWdvcnlcIiAqbmdJZj1cImZpeHR1cmU/LnByb2R1Y3RDYXRlZ29yeT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGZpeHR1cmU/LnByb2R1Y3RDYXRlZ29yeTsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYnJhbmRDYXRlZ29yeVRvb2x0aXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5CcmFuZHM6IDwvYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGZpeHR1cmU/LnByb2R1Y3RCcmFuZE5hbWU7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImZpeHR1cmU/LnByb2R1Y3RDYXRlZ29yeT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+Q2F0ZWdvcmllczogPC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGMgb2YgZml4dHVyZT8ucHJvZHVjdENhdGVnb3J5OyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVtTRUNUSU9OIExFVkVMIC0gQlJBTkQgQ0FURUdPUlldLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwic2VjdGlvbi1sZXZlbFwiICpuZ0lmPVwiZml4dHVyZT8ucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gJ0wzJyAmJiBzaG93QkNzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBzZWN0aW9uQnlab25lczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIidicmFuZC1jYXRlZ29yeScgKyAkaW5kZXhcIiBjbGFzcz1cImJyYW5kLWNhdGVnb3J5IHpvbmUtYnJhbmQtZWRpdG9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiem9uZS1icmFuZC1zZWxlY3RcIiBbY2xhc3MucmVhZG9ubHldPVwiIWVkaXRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG11bHRpc2VsZWN0LWNoaXAtZHJvcGRvd25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImJyYW5kT3B0aW9uc0ZvclpvbmUoaXRlbS56b25lKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZEZpZWxkXT1cIidicmFuZE5hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVGaWVsZF09XCInYnJhbmROYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wYWN0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4U2VsZWN0aW9uXT1cIjNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBicmFuZHMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2V4dHJhQWN0aW9uTGFiZWxdPVwiaXNUb2dnbGVBdmFpbGFibGUoKSA/IChvdGhlcnNNb2RlQnlab25lW2l0ZW0uem9uZV0gPyAnSGlkZSBvdGhlcnMnIDogJ1Nob3cgb3RoZXJzJykgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtleHRyYUFjdGlvbkFjdGl2ZV09XCIhIW90aGVyc01vZGVCeVpvbmVbaXRlbS56b25lXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHRyYUFjdGlvbkNsaWNrKT1cIm9uVG9nZ2xlT3RoZXJzKGl0ZW0uem9uZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJicmFuZHNCeVpvbmVbaXRlbS56b25lXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uWm9uZUJyYW5kc0NoYW5nZShpdGVtLnpvbmUsICRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L211bHRpc2VsZWN0LWNoaXAtZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiJ3N1bVNoZWxmQ29udGFpbmVyJyArIGlcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaXh0dXJlPy5zaGVsZkNvbmZpZzsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1bU0hFTEYgTEVWRUwgLSBCUkFORCBDQVRFR09SWV0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJzaGVsZi1sZXZlbFwiICpuZ0lmPVwiZml4dHVyZT8ucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gJ0wyJyAmJiBzaG93QkNzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIidicmFuZC1jYXRlZ29yeScgKyBpXCIgY2xhc3M9XCJicmFuZC1jYXRlZ29yeVwiICpuZ0lmPVwiaXRlbS5wcm9kdWN0QnJhbmROYW1lPy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiYnJhbmRDYXRlZ29yeVRvb2x0aXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnJhbmRcIiAqbmdJZj1cIml0ZW0ucHJvZHVjdEJyYW5kTmFtZT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYiBvZiBpdGVtLnByb2R1Y3RCcmFuZE5hbWU7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBiIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0ucHJvZHVjdENhdGVnb3J5Py5sZW5ndGhcIiBjbGFzcz1cInNlcGFyYXRvclwiPiAtIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2F0ZWdvcnlcIiAqbmdJZj1cIml0ZW0ucHJvZHVjdENhdGVnb3J5Py5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBiIG9mIGl0ZW0ucHJvZHVjdENhdGVnb3J5OyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNicmFuZENhdGVnb3J5VG9vbHRpcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkJyYW5kczogPC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGl0ZW0ucHJvZHVjdEJyYW5kTmFtZTsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJpdGVtLnByb2R1Y3RDYXRlZ29yeT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkNhdGVnb3JpZXM6IDwvYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYyBvZiBpdGVtLnByb2R1Y3RDYXRlZ29yeTsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIEBpZihpdGVtLnNoZWxmVHlwZSA9PT0ndHJheScpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCJpdGVtLnNoZWxmVHlwZSEgKyAoaSArIDEpXCIgY2xhc3M9XCJibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBbXS5jb25zdHJ1Y3RvcihpdGVtLnRyYXlSb3dzKVwiIGNsYXNzPVwidHJheSBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBbXS5jb25zdHJ1Y3RvcihpdGVtLnByb2R1Y3RQZXJTaGVsZilcIiBjbGFzcz1cInByb2R1Y3RcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcGFjaXR5XCI+e3tpdGVtLnByb2R1Y3RQZXJTaGVsZiAqIGl0ZW0udHJheVJvd3N9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICB9QGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCJpdGVtLnNoZWxmVHlwZSArIChpICsgMSlcIiBjbGFzcz1cImJsb2NrIHNoZWxmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy52bW9ubHktcGxhY2Vob2xkZXJdPVwiaXRlbS5zaGVsZlR5cGUgPT09J3Ztb25seSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgW10uY29uc3RydWN0b3IoaXRlbS5wcm9kdWN0UGVyU2hlbGYpXCIgY2xhc3M9XCJwcm9kdWN0XCI+PC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGl0ZW0uc2hlbGZUeXBlID09PSdzaGVsZicpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXBhY2l0eVwiPnt7aXRlbS5wcm9kdWN0UGVyU2hlbGZ9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEZvb3RlciBibG9jayAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1ibG9ja1wiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIihmaXh0dXJlPy5mb290ZXI/LmlzRW5hYmxlZCAmJiBmaXh0dXJlPy5maXh0dXJlVHlwZSA9PT0gJ3dhbGwnKSB8fCAoc2hvd0hlYWRlckZvb3RlckFsd2F5cyAmJiBmaXh0dXJlPy5mb290ZXI/LmxhYmVsKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1mb290ZXIgbGVmdC1ib3hcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItZm9vdGVyIHJpZ2h0LWJveFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHA+e3sgZml4dHVyZT8uZm9vdGVyPy5sYWJlbCB9fTwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L3NlY3Rpb24+XHJcbn0iXX0=
|
|
750
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiem9uZS1lZGl0YWJsZS1maXh0dXJlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL21hbmFnZS1zdG9yZS1wbGFuby92ZXJpZmljYXRpb24tZmVlZGJhY2svem9uZS1lZGl0YWJsZS1maXh0dXJlL3pvbmUtZWRpdGFibGUtZml4dHVyZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9tYW5hZ2Utc3RvcmUtcGxhbm8vdmVyaWZpY2F0aW9uLWZlZWRiYWNrL3pvbmUtZWRpdGFibGUtZml4dHVyZS96b25lLWVkaXRhYmxlLWZpeHR1cmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFFVCxLQUFLLEVBS0wsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU0xQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7QUFPdEMsTUFBTSxPQUFPLDRCQUE0QjtJQTZIN0I7SUFDQTtJQUNBO0lBNUhELE9BQU8sQ0FBTTtJQUNiLFlBQVksQ0FBTTtJQUUzQix5Q0FBeUM7SUFFaEMsVUFBVSxHQUFZLElBQUksQ0FBQztJQUMzQixPQUFPLEdBQVksSUFBSSxDQUFDO0lBQ3hCLE9BQU8sR0FBWSxJQUFJLENBQUM7SUFDeEIsc0JBQXNCLEdBQVksS0FBSyxDQUFDO0lBQ3hDLFFBQVEsR0FBWSxJQUFJLENBQUM7SUFFbEMsYUFBYSxHQUF3QixFQUFFLENBQUM7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QUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUN4QyxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFNUMsT0FBTztnQkFDTCxHQUFHLENBQUM7Z0JBQ0osSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtnQkFDMUIsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixJQUFJLEVBQUU7Z0JBQ2xELGVBQWUsRUFBRSxRQUFRLEVBQUUsZUFBZSxJQUFJLEVBQUU7YUFDakQsQ0FBQztRQUNKLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FDVCxDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzt3R0FuMkJVLDRCQUE0Qjs0RkFBNUIsNEJBQTRCLHNZQzNCekMsMHdhQXVPQzs7NEZENU1ZLDRCQUE0QjtrQkFMeEMsU0FBUzsrQkFDRSx1QkFBdUI7eUpBT3hCLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUlHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFzQk4sV0FBVztzQkFEVixTQUFTO3VCQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0NoZWNrZWQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU0hFTEZfQ09MT1JTIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2RhdGEvZml4dHVyZS10ZW1wbGF0ZS5kYXRhXCI7XHJcbmltcG9ydCB7IFN0b3JlQnVpbGRlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZXMvc3RvcmUtYnVpbGRlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcbmltcG9ydCB7XHJcbiAgU2VjdGlvbkNvbmZpZyxcclxuICBTaGVsZkNvbmZpZyxcclxufSBmcm9tIFwiLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9maXh0dXJlLXRlbXBsYXRlLmludGVyZmFjZVwiO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJ6b25lLWVkaXRhYmxlLWZpeHR1cmVcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3pvbmUtZWRpdGFibGUtZml4dHVyZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vem9uZS1lZGl0YWJsZS1maXh0dXJlLmNvbXBvbmVudC5zY3NzXCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBab25lRWRpdGFibGVGaXh0dXJlQ29tcG9uZW50XHJcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25EZXN0cm95XHJcbntcclxuICBASW5wdXQoKSBmaXh0dXJlOiBhbnk7XHJcbiAgQElucHV0KCkgcGxhbm9GaXh0dXJlOiBhbnk7XHJcblxyXG4gIC8vIEBJbnB1dCgpIHZtTGlzdDogVm1MaWJyYXJ5TGlzdFtdID0gW107XHJcblxyXG4gIEBJbnB1dCgpIHNob3dDb2xvcnM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dWTXM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dCQ3M6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dIZWFkZXJGb290ZXJBbHdheXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBlZGl0YWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIGhlYWRlck9wdGlvbnM6IHsgbGFiZWw6IHN0cmluZyB9W10gPSBbXTtcclxuICBicmFuZE9wdGlvbnM6IHsgYnJhbmROYW1lOiBzdHJpbmcgfVtdID0gW107XHJcbiAgYWxsUGlkc09wdGlvbnM6IHsgYnJhbmROYW1lOiBzdHJpbmcgfVtdID0gW107XHJcblxyXG4gIHNlbGVjdGVkSGVhZGVyOiB7IGxhYmVsOiBzdHJpbmcgfVtdID0gW107XHJcbiAgYnJhbmRzQnlab25lOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcclxuICBvdGhlcnNNb2RlQnlab25lOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xyXG4gIHRlbXBsYXRlR3JvdXBOYW1lOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICB0ZW1wbGF0ZUdyb3VwT3B0aW9uczogc3RyaW5nW10gPSBbXTtcclxuICB0ZW1wbGF0ZUdyb3VwU3VnZ2VzdGlvbnM6IHN0cmluZ1tdID0gW107XHJcbiAgc2hvd1RlbXBsYXRlR3JvdXBTdWdnZXN0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgdGVtcGxhdGVHcm91cExvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIGFsbFBpZHNMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIG9yaWdpbmFsSGVhZGVyTGFiZWw6IHN0cmluZyA9IFwiXCI7XHJcbiAgcHJpdmF0ZSBvcmlnaW5hbEJyYW5kc0J5Wm9uZTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XHJcbiAgcHJpdmF0ZSBvcmlnaW5hbFRlbXBsYXRlR3JvdXBOYW1lOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICBAVmlld0NoaWxkKFwiZml4dHVyZVJvb3RcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgZml4dHVyZVJvb3QhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuXHJcbiAgY2xpZW50SWQ6IHN0cmluZztcclxuXHJcbiAgaW1nQ0ROOiBzdHJpbmc7XHJcbiAgc2hlbGZDb2xvcnMgPSBTSEVMRl9DT0xPUlM7XHJcblxyXG4gIC8vIFpvbmUtdmVyaWZpY2F0aW9uIGRpZmYgcGFsZXR0ZTogcmVkIHdoZW4gc3RvcmUgcmVzcG9uc2UgYnJhbmRzIGRpZmZlciBmcm9tXHJcbiAgLy8gdGhlIGN1cnJlbnQgcGxhbm8gZm9yIHRoYXQgem9uZTsgbmV1dHJhbCBncmV5IHdoZW4gdGhleSBtYXRjaC5cclxuICBwcml2YXRlIHJlYWRvbmx5IFpPTkVfRElGRl9DT0xPUiA9IHsgYmc6IFwiI0ZFRTRFMlwiLCBib3JkZXI6IFwiI0YwNDQzOFwiIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBaT05FX01BVENIX0NPTE9SID0geyBiZzogXCIjRjJGNEY3XCIsIGJvcmRlcjogXCIjRUFFQ0YwXCIgfTtcclxuXHJcbiAgc2VjdGlvbkJ5Wm9uZXM6IHtcclxuICAgIHpvbmU6IHN0cmluZztcclxuICAgIHNlY3Rpb246IHtcclxuICAgICAgYnJhbmRzOiBzdHJpbmdbXTtcclxuICAgICAgY2F0ZWdvcmllczogc3RyaW5nW107XHJcbiAgICAgIHNoZWx2ZXM6IHN0cmluZ1tdO1xyXG4gICAgICBzaGVsZkRpdnM6IChIVE1MRWxlbWVudCB8IG51bGwgfCB1bmRlZmluZWQpW107XHJcbiAgICB9O1xyXG4gIH1bXSA9IFtdO1xyXG5cclxuICAvLyB2bUxpc3Q6IFZtTGlicmFyeUxpc3RbXSA9IFtdO1xyXG4gIGlzUGFnZUxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBwcml2YXRlIGlzVk1Jbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgaXNCQ0luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGdldCBpc1ZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLnRlbXBsYXRlR3JvdXBOYW1lPy50cmltKCkpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBoZWFkZXJMYWJlbCA9IHRoaXMuZml4dHVyZT8uaGVhZGVyPy5sYWJlbD8udHJpbSgpO1xyXG4gICAgaWYgKCFoZWFkZXJMYWJlbCkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IHpvbmVzID0gdGhpcy51bmlxdWVab25lcygpO1xyXG4gICAgZm9yIChjb25zdCB6b25lIG9mIHpvbmVzKSB7XHJcbiAgICAgIGlmICghdGhpcy5icmFuZHNCeVpvbmVbem9uZV0/Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBnZXQgdmFsaWRhdGlvbk1lc3NhZ2UoKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy50ZW1wbGF0ZUdyb3VwTmFtZT8udHJpbSgpKSB7XHJcbiAgICAgIHJldHVybiBcIkVudGVyIGEgVGVtcGxhdGUgR3JvdXAgTmFtZSBiZWZvcmUgYWNjZXB0aW5nLlwiO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGhlYWRlckxhYmVsID0gdGhpcy5maXh0dXJlPy5oZWFkZXI/LmxhYmVsPy50cmltKCk7XHJcbiAgICBpZiAoIWhlYWRlckxhYmVsKSByZXR1cm4gXCJQaWNrIGEgaGVhZGVyIGJlZm9yZSBhY2NlcHRpbmcuXCI7XHJcblxyXG4gICAgY29uc3QgZW1wdHlab25lczogc3RyaW5nW10gPSBbXTtcclxuICAgIGZvciAoY29uc3Qgem9uZSBvZiB0aGlzLnVuaXF1ZVpvbmVzKCkpIHtcclxuICAgICAgaWYgKCF0aGlzLmJyYW5kc0J5Wm9uZVt6b25lXT8ubGVuZ3RoKSBlbXB0eVpvbmVzLnB1c2goem9uZSk7XHJcbiAgICB9XHJcbiAgICBpZiAoZW1wdHlab25lcy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGBQaWNrIGF0IGxlYXN0IG9uZSBicmFuZCBmb3I6ICR7ZW1wdHlab25lcy5qb2luKFwiLCBcIil9YDtcclxuICAgIH1cclxuICAgIHJldHVybiBcIlwiO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1bmlxdWVab25lcygpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCB6b25lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG4gICAgKHRoaXMuZml4dHVyZT8uc2hlbGZDb25maWcgPz8gW10pLmZvckVhY2goKHNoZWxmOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHNoZWxmPy56b25lKSB6b25lcy5hZGQoc2hlbGYuem9uZSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBBcnJheS5mcm9tKHpvbmVzKTtcclxuICB9XHJcblxyXG4gIGdldCBpc0RpcnR5KCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCh0aGlzLmZpeHR1cmU/LmhlYWRlcj8ubGFiZWwgPz8gXCJcIikgIT09IHRoaXMub3JpZ2luYWxIZWFkZXJMYWJlbCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICgodGhpcy50ZW1wbGF0ZUdyb3VwTmFtZSA/PyBcIlwiKSAhPT0gdGhpcy5vcmlnaW5hbFRlbXBsYXRlR3JvdXBOYW1lKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgem9uZUtleXMgPSBuZXcgU2V0KFtcclxuICAgICAgLi4uT2JqZWN0LmtleXModGhpcy5icmFuZHNCeVpvbmUpLFxyXG4gICAgICAuLi5PYmplY3Qua2V5cyh0aGlzLm9yaWdpbmFsQnJhbmRzQnlab25lKSxcclxuICAgIF0pO1xyXG4gICAgZm9yIChjb25zdCB6b25lIG9mIHpvbmVLZXlzKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBbLi4uKHRoaXMuYnJhbmRzQnlab25lW3pvbmVdID8/IFtdKV0uc29ydCgpO1xyXG4gICAgICBjb25zdCBvcmlnaW5hbCA9IFsuLi4odGhpcy5vcmlnaW5hbEJyYW5kc0J5Wm9uZVt6b25lXSA/PyBbXSldLnNvcnQoKTtcclxuICAgICAgaWYgKGN1cnJlbnQubGVuZ3RoICE9PSBvcmlnaW5hbC5sZW5ndGgpIHJldHVybiB0cnVlO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoY3VycmVudFtpXSAhPT0gb3JpZ2luYWxbaV0pIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYXBpU2VydmljZTogU3RvcmVCdWlsZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmdzLmVudmlyb25tZW50XHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoZW52KSA9PiAodGhpcy5pbWdDRE4gPSBlbnYucGxhbm9ncmFtQ0ROKSk7XHJcblxyXG4gICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZShhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhPy5jbGllbnQpIHtcclxuICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSBkYXRhPy5jbGllbnQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBoZWFkZXJEYXRhID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSBhcyBzdHJpbmcsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGhlYWRlckRhdGE/LmNsaWVudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzW1wiZml4dHVyZVwiXT8uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIHRoaXMuc2FuaXRpemVWbUNvbmZpZygpO1xyXG4gICAgICBhd2FpdCB0aGlzLmluaXRJbmxpbmVFZGl0U3RhdGUoKTtcclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXBwbHlTaGVsZkNvbG9ycygpO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlVm1Qb3NpdGlvbkFuZFNpemUoKTtcclxuICAgICAgfSwgNDAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgaW5pdElubGluZUVkaXRTdGF0ZSgpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRMYWJlbDogc3RyaW5nID0gdGhpcy5maXh0dXJlPy5oZWFkZXI/LmxhYmVsID8/IFwiXCI7XHJcbiAgICB0aGlzLm9yaWdpbmFsSGVhZGVyTGFiZWwgPSBjdXJyZW50TGFiZWw7XHJcbiAgICB0aGlzLnNlbGVjdGVkSGVhZGVyID0gY3VycmVudExhYmVsID8gW3sgbGFiZWw6IGN1cnJlbnRMYWJlbCB9XSA6IFtdO1xyXG5cclxuICAgIHRoaXMub3JpZ2luYWxUZW1wbGF0ZUdyb3VwTmFtZSA9IHRoaXMucGxhbm9GaXh0dXJlPy50ZW1wbGF0ZUdyb3VwTmFtZSA/PyBcIlwiO1xyXG4gICAgdGhpcy50ZW1wbGF0ZUdyb3VwTmFtZSA9IHRoaXMub3JpZ2luYWxUZW1wbGF0ZUdyb3VwTmFtZTtcclxuICAgIGlmICh0aGlzLmZpeHR1cmUpIHtcclxuICAgICAgdGhpcy5maXh0dXJlLnRlbXBsYXRlR3JvdXBOYW1lID0gdGhpcy50ZW1wbGF0ZUdyb3VwTmFtZTtcclxuICAgIH1cclxuICAgIHRoaXMuc2hvd1RlbXBsYXRlR3JvdXBTdWdnZXN0aW9ucyA9IGZhbHNlO1xyXG4gICAgdGhpcy5yZWZyZXNoVGVtcGxhdGVHcm91cFN1Z2dlc3Rpb25zKCk7XHJcblxyXG4gICAgdGhpcy5vcmlnaW5hbEJyYW5kc0J5Wm9uZSA9IHRoaXMuc25hcHNob3RCcmFuZHNCeVpvbmUoKTtcclxuICAgIHRoaXMuYnJhbmRzQnlab25lID0gc3RydWN0dXJlZENsb25lKHRoaXMub3JpZ2luYWxCcmFuZHNCeVpvbmUpO1xyXG4gICAgdGhpcy5vdGhlcnNNb2RlQnlab25lID0ge307XHJcblxyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICB0aGlzLmxvYWRIZWFkZXJzKCksXHJcbiAgICAgIHRoaXMubG9hZFRlbXBsYXRlR3JvdXBPcHRpb25zKCksXHJcbiAgICBdKTtcclxuICAgIHRoaXMucmVmcmVzaFRlbXBsYXRlR3JvdXBTdWdnZXN0aW9ucygpO1xyXG4gICAgYXdhaXQgdGhpcy5sb2FkQnJhbmRzRm9ySGVhZGVyKGN1cnJlbnRMYWJlbCk7XHJcbiAgICBhd2FpdCB0aGlzLmRldGVjdE90aGVyc1NvdXJjZWRab25lcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2FkVGVtcGxhdGVHcm91cE9wdGlvbnMoKSB7XHJcbiAgICBpZiAodGhpcy50ZW1wbGF0ZUdyb3VwTG9hZGVkKSByZXR1cm47XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXN1bHQ6IGFueSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS5nZXRUZW1wbGF0ZUdyb3VwTGlzdCgpLFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBsaXN0OiBzdHJpbmdbXSA9IEFycmF5LmlzQXJyYXkocmVzdWx0Py5kYXRhKSA/IHJlc3VsdC5kYXRhIDogW107XHJcbiAgICAgIHRoaXMudGVtcGxhdGVHcm91cE9wdGlvbnMgPSBsaXN0LmZpbHRlcigodikgPT4gdHlwZW9mIHYgPT09IFwic3RyaW5nXCIpO1xyXG4gICAgICB0aGlzLnRlbXBsYXRlR3JvdXBMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coYEBAIH4gbG9hZFRlbXBsYXRlR3JvdXBPcHRpb25zIFtFUlJdOmAsIGVycm9yKTtcclxuICAgICAgdGhpcy50ZW1wbGF0ZUdyb3VwT3B0aW9ucyA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25UZW1wbGF0ZUdyb3VwTmFtZUNoYW5nZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRlbXBsYXRlR3JvdXBOYW1lID0gdmFsdWUgPz8gXCJcIjtcclxuICAgIGlmICh0aGlzLmZpeHR1cmUpIHtcclxuICAgICAgdGhpcy5maXh0dXJlLnRlbXBsYXRlR3JvdXBOYW1lID0gdGhpcy50ZW1wbGF0ZUdyb3VwTmFtZTtcclxuICAgIH1cclxuICAgIHRoaXMucmVmcmVzaFRlbXBsYXRlR3JvdXBTdWdnZXN0aW9ucygpO1xyXG4gICAgdGhpcy5zaG93VGVtcGxhdGVHcm91cFN1Z2dlc3Rpb25zID0gdGhpcy50ZW1wbGF0ZUdyb3VwU3VnZ2VzdGlvbnMubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIG9uVGVtcGxhdGVHcm91cEZvY3VzKCkge1xyXG4gICAgdGhpcy5yZWZyZXNoVGVtcGxhdGVHcm91cFN1Z2dlc3Rpb25zKCk7XHJcbiAgICB0aGlzLnNob3dUZW1wbGF0ZUdyb3VwU3VnZ2VzdGlvbnMgPSB0aGlzLnRlbXBsYXRlR3JvdXBTdWdnZXN0aW9ucy5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgb25UZW1wbGF0ZUdyb3VwQmx1cigpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMuc2hvd1RlbXBsYXRlR3JvdXBTdWdnZXN0aW9ucyA9IGZhbHNlKSwgMTUwKTtcclxuICB9XHJcblxyXG4gIG9uUGlja1RlbXBsYXRlR3JvdXBTdWdnZXN0aW9uKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGVtcGxhdGVHcm91cE5hbWUgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLmZpeHR1cmUpIHtcclxuICAgICAgdGhpcy5maXh0dXJlLnRlbXBsYXRlR3JvdXBOYW1lID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNob3dUZW1wbGF0ZUdyb3VwU3VnZ2VzdGlvbnMgPSBmYWxzZTtcclxuICAgIHRoaXMucmVmcmVzaFRlbXBsYXRlR3JvdXBTdWdnZXN0aW9ucygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoVGVtcGxhdGVHcm91cFN1Z2dlc3Rpb25zKCkge1xyXG4gICAgY29uc3QgcXVlcnkgPSAodGhpcy50ZW1wbGF0ZUdyb3VwTmFtZSA/PyBcIlwiKS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgIGlmICghdGhpcy50ZW1wbGF0ZUdyb3VwT3B0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy50ZW1wbGF0ZUdyb3VwU3VnZ2VzdGlvbnMgPSBbXTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCFxdWVyeSkge1xyXG4gICAgICB0aGlzLnRlbXBsYXRlR3JvdXBTdWdnZXN0aW9ucyA9IFsuLi50aGlzLnRlbXBsYXRlR3JvdXBPcHRpb25zXTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy50ZW1wbGF0ZUdyb3VwU3VnZ2VzdGlvbnMgPSB0aGlzLnRlbXBsYXRlR3JvdXBPcHRpb25zLmZpbHRlcigob3B0KSA9PlxyXG4gICAgICBvcHQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSksXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBkZXRlY3RPdGhlcnNTb3VyY2VkWm9uZXMoKSB7XHJcbiAgICBpZiAoIXRoaXMuYnJhbmRPcHRpb25zLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgY29uc3Qga25vd25CcmFuZHMgPSBuZXcgU2V0KHRoaXMuYnJhbmRPcHRpb25zLm1hcCgoYikgPT4gYi5icmFuZE5hbWUpKTtcclxuXHJcbiAgICBjb25zdCB6b25lc1dpdGhGb3JlaWduQnJhbmRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBbem9uZSwgYnJhbmRzXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmJyYW5kc0J5Wm9uZSkpIHtcclxuICAgICAgaWYgKGJyYW5kcy5zb21lKChiKSA9PiAha25vd25CcmFuZHMuaGFzKGIpKSkge1xyXG4gICAgICAgIHpvbmVzV2l0aEZvcmVpZ25CcmFuZHMucHVzaCh6b25lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghem9uZXNXaXRoRm9yZWlnbkJyYW5kcy5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICBhd2FpdCB0aGlzLmVuc3VyZUFsbFBpZHNMb2FkZWQoKTtcclxuICAgIHpvbmVzV2l0aEZvcmVpZ25CcmFuZHMuZm9yRWFjaChcclxuICAgICAgKHpvbmUpID0+ICh0aGlzLm90aGVyc01vZGVCeVpvbmVbem9uZV0gPSB0cnVlKSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGVuc3VyZUFsbFBpZHNMb2FkZWQoKSB7XHJcbiAgICBpZiAodGhpcy5hbGxQaWRzTG9hZGVkKSByZXR1cm47XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXN1bHQ6IGFueSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS5nZXRQSURMaXN0KFwib3RoZXJzXCIpLFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBsaXN0OiBzdHJpbmdbXSA9IHJlc3VsdD8uZGF0YSA/PyBbXTtcclxuICAgICAgdGhpcy5hbGxQaWRzT3B0aW9ucyA9IGxpc3QubWFwKChicmFuZE5hbWUpID0+ICh7IGJyYW5kTmFtZSB9KSk7XHJcbiAgICAgIHRoaXMuYWxsUGlkc0xvYWRlZCA9IHRydWU7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmxvZyhgQEAgfiBlbnN1cmVBbGxQaWRzTG9hZGVkIFtFUlJdOmAsIGVycm9yKTtcclxuICAgICAgdGhpcy5hbGxQaWRzT3B0aW9ucyA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYnJhbmRPcHRpb25zRm9yWm9uZSh6b25lOiBzdHJpbmcpOiB7IGJyYW5kTmFtZTogc3RyaW5nIH1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5vdGhlcnNNb2RlQnlab25lW3pvbmVdID8gdGhpcy5hbGxQaWRzT3B0aW9ucyA6IHRoaXMuYnJhbmRPcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgaXNUb2dnbGVBdmFpbGFibGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnNlbGVjdGVkSGVhZGVyPy5bMF0/LmxhYmVsO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25Ub2dnbGVPdGhlcnMoem9uZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBuZXh0QWN0aXZlID0gIXRoaXMub3RoZXJzTW9kZUJ5Wm9uZVt6b25lXTtcclxuICAgIHRoaXMub3RoZXJzTW9kZUJ5Wm9uZSA9IHsgLi4udGhpcy5vdGhlcnNNb2RlQnlab25lLCBbem9uZV06IG5leHRBY3RpdmUgfTtcclxuXHJcbiAgICBpZiAobmV4dEFjdGl2ZSkge1xyXG4gICAgICBhd2FpdCB0aGlzLmVuc3VyZUFsbFBpZHNMb2FkZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJyYW5kc0J5Wm9uZSA9IHsgLi4udGhpcy5icmFuZHNCeVpvbmUsIFt6b25lXTogW10gfTtcclxuICAgIHRoaXMuYXBwbHlCcmFuZHNUb0ZpeHR1cmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Wm9uZUJyYW5kc0Zyb21Db25maWcoY29uZmlnOiBhbnlbXSwgem9uZTogc3RyaW5nKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3Qgc2hlbGYgPSAoY29uZmlnID8/IFtdKS5maW5kKChzOiBhbnkpID0+IHM/LnpvbmUgPT09IHpvbmUpO1xyXG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc2hlbGY/LnByb2R1Y3RCcmFuZE5hbWUpID8gc2hlbGYucHJvZHVjdEJyYW5kTmFtZSA6IFtdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB6b25lQnJhbmRLZXkoYnJhbmRzOiBzdHJpbmdbXSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gWy4uLihicmFuZHMgPz8gW10pXVxyXG4gICAgICAuZmlsdGVyKChiKSA9PiB0eXBlb2YgYiA9PT0gXCJzdHJpbmdcIilcclxuICAgICAgLm1hcCgoYikgPT4gYi50cmltKCkpXHJcbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcclxuICAgICAgLnNvcnQoKVxyXG4gICAgICAuam9pbihcInxcIik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzWm9uZUJyYW5kc0RpZmZlcmVudCh6b25lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcclxuICAgIGlmICghem9uZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgY29uc3QgcmVzcG9uc2VCcmFuZHMgPSB0aGlzLmdldFpvbmVCcmFuZHNGcm9tQ29uZmlnKFxyXG4gICAgICB0aGlzLmZpeHR1cmU/LnNoZWxmQ29uZmlnLFxyXG4gICAgICB6b25lLFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHBsYW5vQnJhbmRzID0gdGhpcy5nZXRab25lQnJhbmRzRnJvbUNvbmZpZyhcclxuICAgICAgdGhpcy5wbGFub0ZpeHR1cmU/LnNoZWxmQ29uZmlnLFxyXG4gICAgICB6b25lLFxyXG4gICAgKTtcclxuICAgIHJldHVybiB0aGlzLnpvbmVCcmFuZEtleShyZXNwb25zZUJyYW5kcykgIT09IHRoaXMuem9uZUJyYW5kS2V5KHBsYW5vQnJhbmRzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgem9uZUNvbG9yKHpvbmU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHsgYmc6IHN0cmluZzsgYm9yZGVyOiBzdHJpbmcgfSB7XHJcbiAgICByZXR1cm4gdGhpcy5pc1pvbmVCcmFuZHNEaWZmZXJlbnQoem9uZSlcclxuICAgICAgPyB0aGlzLlpPTkVfRElGRl9DT0xPUlxyXG4gICAgICA6IHRoaXMuWk9ORV9NQVRDSF9DT0xPUjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc25hcHNob3RCcmFuZHNCeVpvbmUoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+IHtcclxuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XHJcbiAgICAodGhpcy5maXh0dXJlPy5zaGVsZkNvbmZpZyA/PyBbXSkuZm9yRWFjaCgoc2hlbGY6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB6b25lID0gc2hlbGY/LnpvbmU7XHJcbiAgICAgIGlmICghem9uZSB8fCByZXN1bHRbem9uZV0pIHJldHVybjtcclxuICAgICAgcmVzdWx0W3pvbmVdID0gQXJyYXkuaXNBcnJheShzaGVsZj8ucHJvZHVjdEJyYW5kTmFtZSlcclxuICAgICAgICA/IFsuLi5zaGVsZi5wcm9kdWN0QnJhbmROYW1lXVxyXG4gICAgICAgIDogW107XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGxvYWRIZWFkZXJzKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UuZ2V0SGVhZGVyc0xpc3QoKSxcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgbGlzdDogc3RyaW5nW10gPSByZXN1bHQ/LmRhdGEgPz8gW107XHJcbiAgICAgIHRoaXMuaGVhZGVyT3B0aW9ucyA9IGxpc3QubWFwKChsYWJlbCkgPT4gKHsgbGFiZWwgfSkpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coYEBAIH4gbG9hZEhlYWRlcnMgW0VSUl06YCwgZXJyb3IpO1xyXG4gICAgICB0aGlzLmhlYWRlck9wdGlvbnMgPSBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgbG9hZEJyYW5kc0ZvckhlYWRlcihoZWFkZXI6IHN0cmluZykge1xyXG4gICAgaWYgKCFoZWFkZXIpIHtcclxuICAgICAgdGhpcy5icmFuZE9wdGlvbnMgPSBbXTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UuZ2V0UElETGlzdChoZWFkZXIpLFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBsaXN0OiBzdHJpbmdbXSA9IHJlc3VsdD8uZGF0YSA/PyBbXTtcclxuICAgICAgdGhpcy5icmFuZE9wdGlvbnMgPSBsaXN0Lm1hcCgoYnJhbmROYW1lKSA9PiAoeyBicmFuZE5hbWUgfSkpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coYEBAIH4gbG9hZEJyYW5kc0ZvckhlYWRlciBbRVJSXTpgLCBlcnJvcik7XHJcbiAgICAgIHRoaXMuYnJhbmRPcHRpb25zID0gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkhlYWRlckNoYW5nZShzZWxlY3RlZDogeyBsYWJlbDogc3RyaW5nIH0gfCBudWxsKSB7XHJcbiAgICBjb25zdCBuZXdMYWJlbCA9IHNlbGVjdGVkPy5sYWJlbCA/PyBcIlwiO1xyXG4gICAgaWYgKCF0aGlzLmZpeHR1cmUpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmZpeHR1cmUuaGVhZGVyID0geyAuLi4odGhpcy5maXh0dXJlLmhlYWRlciA/PyB7fSksIGxhYmVsOiBuZXdMYWJlbCB9O1xyXG4gICAgdGhpcy5zZWxlY3RlZEhlYWRlciA9IG5ld0xhYmVsID8gW3sgbGFiZWw6IG5ld0xhYmVsIH1dIDogW107XHJcblxyXG4gICAgYXdhaXQgdGhpcy5sb2FkQnJhbmRzRm9ySGVhZGVyKG5ld0xhYmVsKTtcclxuXHJcbiAgICBjb25zdCBhbGxvd2VkID0gbmV3IFNldCh0aGlzLmJyYW5kT3B0aW9ucy5tYXAoKGIpID0+IGIuYnJhbmROYW1lKSk7XHJcbiAgICBjb25zdCBuZXh0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcclxuICAgIE9iamVjdC5rZXlzKHRoaXMuYnJhbmRzQnlab25lKS5mb3JFYWNoKCh6b25lKSA9PiB7XHJcbiAgICAgIG5leHRbem9uZV0gPSAodGhpcy5icmFuZHNCeVpvbmVbem9uZV0gPz8gW10pLmZpbHRlcigoYikgPT5cclxuICAgICAgICBhbGxvd2VkLmhhcyhiKSxcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5icmFuZHNCeVpvbmUgPSBuZXh0O1xyXG4gICAgdGhpcy5vdGhlcnNNb2RlQnlab25lID0ge307XHJcbiAgICB0aGlzLmFwcGx5QnJhbmRzVG9GaXh0dXJlKCk7XHJcbiAgfVxyXG5cclxuICBvblpvbmVCcmFuZHNDaGFuZ2Uoem9uZTogc3RyaW5nLCBicmFuZHM6IHN0cmluZ1tdKSB7XHJcbiAgICB0aGlzLmJyYW5kc0J5Wm9uZSA9IHsgLi4udGhpcy5icmFuZHNCeVpvbmUsIFt6b25lXTogYnJhbmRzID8/IFtdIH07XHJcbiAgICB0aGlzLmFwcGx5QnJhbmRzVG9GaXh0dXJlKCk7XHJcbiAgfVxyXG5cclxuICByZXNldFRvT3JpZ2luYWwoKSB7XHJcbiAgICBpZiAoIXRoaXMuZml4dHVyZSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuZml4dHVyZS5oZWFkZXIgPSB7XHJcbiAgICAgIC4uLih0aGlzLmZpeHR1cmUuaGVhZGVyID8/IHt9KSxcclxuICAgICAgbGFiZWw6IHRoaXMub3JpZ2luYWxIZWFkZXJMYWJlbCxcclxuICAgIH07XHJcbiAgICB0aGlzLnNlbGVjdGVkSGVhZGVyID0gdGhpcy5vcmlnaW5hbEhlYWRlckxhYmVsXHJcbiAgICAgID8gW3sgbGFiZWw6IHRoaXMub3JpZ2luYWxIZWFkZXJMYWJlbCB9XVxyXG4gICAgICA6IFtdO1xyXG5cclxuICAgIHRoaXMudGVtcGxhdGVHcm91cE5hbWUgPSB0aGlzLm9yaWdpbmFsVGVtcGxhdGVHcm91cE5hbWU7XHJcbiAgICB0aGlzLmZpeHR1cmUudGVtcGxhdGVHcm91cE5hbWUgPSB0aGlzLnRlbXBsYXRlR3JvdXBOYW1lO1xyXG5cclxuICAgIHRoaXMuYnJhbmRzQnlab25lID0gc3RydWN0dXJlZENsb25lKHRoaXMub3JpZ2luYWxCcmFuZHNCeVpvbmUpO1xyXG4gICAgdGhpcy5vdGhlcnNNb2RlQnlab25lID0ge307XHJcbiAgICB0aGlzLmFwcGx5QnJhbmRzVG9GaXh0dXJlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5QnJhbmRzVG9GaXh0dXJlKCkge1xyXG4gICAgKHRoaXMuZml4dHVyZT8uc2hlbGZDb25maWcgPz8gW10pLmZvckVhY2goKHNoZWxmOiBhbnkpID0+IHtcclxuICAgICAgY29uc3Qgem9uZSA9IHNoZWxmPy56b25lO1xyXG4gICAgICBpZiAoIXpvbmUpIHJldHVybjtcclxuICAgICAgc2hlbGYucHJvZHVjdEJyYW5kTmFtZSA9IFsuLi4odGhpcy5icmFuZHNCeVpvbmVbem9uZV0gPz8gW10pXTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzYW5pdGl6ZVZtQ29uZmlnKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2hlbGZDb3VudCA9IHRoaXMuZml4dHVyZT8uc2hlbGZDb25maWc/Lmxlbmd0aCA/PyAxO1xyXG5cclxuICAgIHRoaXMuZml4dHVyZT8udm1Db25maWc/LmZvckVhY2goKHZtOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCF2bT8uc3RhcnRZUG9zaXRpb24gJiYgIXZtPy5lbmRZUG9zaXRpb24pIHtcclxuICAgICAgICBpZiAodm0/Lnhab25lID09PSBcInN0cmV0Y2hcIiAmJiB2bT8ueVpvbmUgPT09IFwic3RyZXRjaFwiKSB7XHJcbiAgICAgICAgICB2bS5zdGFydFlQb3NpdGlvbiA9IHNoZWxmQ291bnQ7XHJcbiAgICAgICAgICB2bS5lbmRZUG9zaXRpb24gPSBzaGVsZkNvdW50O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2bS5zdGFydFlQb3NpdGlvbiA9IDE7XHJcbiAgICAgICAgICB2bS5lbmRZUG9zaXRpb24gPSBzaGVsZkNvdW50O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNCQ0luaXRpYWxpemVkKSB7XHJcbiAgICAgIHRoaXMuaXNCQ0luaXRpYWxpemVkID0gdGhpcy5hcHBseVNoZWxmQ29sb3JzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuaXNWTUluaXRpYWxpemVkKSB7XHJcbiAgICAgIHRoaXMuaXNWTUluaXRpYWxpemVkID0gdGhpcy5oYW5kbGVWbVBvc2l0aW9uQW5kU2l6ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0U2VsZWN0ZWRWTSh2bTogYW55KSB7XHJcbiAgLy8gICBpZiAodm0/LnZtSWQpIHtcclxuICAvLyAgICAgcmV0dXJuIHRoaXMudm1MaXN0LmZpbmQoKHYpID0+IHYuaWQgPT09IHZtLnZtSWQpO1xyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgcmV0dXJuIHRoaXMudm1MaXN0LmZpbmQoXHJcbiAgLy8gICAgICAgKHYpID0+IHYubmFtZSA9PT0gdm0udm1OYW1lICYmIHYudHlwZSA9PT0gdm0udm1UeXBlXHJcbiAgLy8gICAgICk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICBwcml2YXRlIGdldCBib2R5RWwoKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuZml4dHVyZVJvb3Q/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoXCIjYm9keS1ibG9jay1zdW1cIikgPz8gbnVsbFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVZtUG9zaXRpb25BbmRTaXplKCkge1xyXG4gICAgaWYgKCF0aGlzLnNob3dWTXMpIHJldHVybiB0cnVlO1xyXG5cclxuICAgIGNvbnN0IHZpZXdQb3J0ID0gdGhpcy5ib2R5RWw7XHJcbiAgICBpZiAoIXZpZXdQb3J0KSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgYm9keVdpZHRoID0gdmlld1BvcnQub2Zmc2V0V2lkdGg7XHJcblxyXG4gICAgdGhpcy5maXh0dXJlPy52bUNvbmZpZz8uZm9yRWFjaCgoZTogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgbGV0IHN0YXJ0U2hlbGYgPSBlPy5zdGFydFlQb3NpdGlvbjtcclxuICAgICAgbGV0IGVuZFNoZWxmID0gZT8uZW5kWVBvc2l0aW9uO1xyXG5cclxuICAgICAgY29uc3Qgdm0gPSB2aWV3UG9ydC5xdWVyeVNlbGVjdG9yKGAjdm0ke2l9YCkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGlmICghdm0pIHJldHVybjtcclxuXHJcbiAgICAgIGxldCB4ID0gMDtcclxuICAgICAgbGV0IHkgPSAwO1xyXG5cclxuICAgICAgbGV0IHlTdGFydCA9IDA7XHJcbiAgICAgIGZvciAobGV0IGsgPSAxOyBrIDwgc3RhcnRTaGVsZjsgaysrKSB7XHJcbiAgICAgICAgY29uc3QgcyA9IGdldFNoZWxmRGl2KGspO1xyXG4gICAgICAgIGlmICghcykgcmV0dXJuO1xyXG5cclxuICAgICAgICB5U3RhcnQgKz0gcy5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBwbGFjZW1lbnRIZWlnaHQgPSAwO1xyXG4gICAgICBsZXQgcGxhY2VtZW50V2lkdGggPSBib2R5V2lkdGg7XHJcblxyXG4gICAgICBmb3IgKGxldCBrID0gc3RhcnRTaGVsZjsgayA8PSBlbmRTaGVsZjsgaysrKSB7XHJcbiAgICAgICAgY29uc3QgcyA9IGdldFNoZWxmRGl2KGspO1xyXG4gICAgICAgIGlmICghcykgcmV0dXJuO1xyXG4gICAgICAgIHBsYWNlbWVudEhlaWdodCArPSBzLm9mZnNldEhlaWdodDtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGRlZmF1bHRXID0gcGxhY2VtZW50V2lkdGggLyAzO1xyXG4gICAgICBsZXQgZGVmYXVsdEggPSBwbGFjZW1lbnRIZWlnaHQgLyAzO1xyXG5cclxuICAgICAgbGV0IHdpZHRoID0gZGVmYXVsdFc7XHJcbiAgICAgIGxldCBoZWlnaHQgPSBkZWZhdWx0SDtcclxuXHJcbiAgICAgIHN3aXRjaCAoZT8ueFpvbmUpIHtcclxuICAgICAgICBjYXNlIFwibGVmdFwiOlxyXG4gICAgICAgICAgeCA9IDA7XHJcbiAgICAgICAgICB3aWR0aCA9IGRlZmF1bHRXO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcInJpZ2h0XCI6XHJcbiAgICAgICAgICB3aWR0aCA9IGRlZmF1bHRXO1xyXG4gICAgICAgICAgeCA9IGJvZHlXaWR0aCAtIHdpZHRoO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgd2lkdGggPSBkZWZhdWx0VztcclxuICAgICAgICAgIHggPSAoYm9keVdpZHRoIC0gd2lkdGgpIC8gMjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJzdHJldGNoXCI6XHJcbiAgICAgICAgICB3aWR0aCA9IGJvZHlXaWR0aDtcclxuICAgICAgICAgIHggPSAwO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN3aXRjaCAoZT8ueVpvbmUpIHtcclxuICAgICAgICBjYXNlIFwidG9wXCI6XHJcbiAgICAgICAgICBoZWlnaHQgPSBwbGFjZW1lbnRIZWlnaHQgPCBkZWZhdWx0SCA/IHBsYWNlbWVudEhlaWdodCAtIDIwIDogZGVmYXVsdEg7XHJcbiAgICAgICAgICB5ID0geVN0YXJ0O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgaGVpZ2h0ID0gcGxhY2VtZW50SGVpZ2h0IDwgZGVmYXVsdEggPyBwbGFjZW1lbnRIZWlnaHQgLSAyMCA6IGRlZmF1bHRIO1xyXG4gICAgICAgICAgeSA9IChwbGFjZW1lbnRIZWlnaHQgLSBoZWlnaHQpIC8gMiArIHlTdGFydDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICAgIGhlaWdodCA9IHBsYWNlbWVudEhlaWdodCA8IGRlZmF1bHRIID8gcGxhY2VtZW50SGVpZ2h0IC0gMjAgOiBkZWZhdWx0SDtcclxuICAgICAgICAgIHkgPSBwbGFjZW1lbnRIZWlnaHQgLSBoZWlnaHQgKyB5U3RhcnQ7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwic3RyZXRjaFwiOlxyXG4gICAgICAgICAgaGVpZ2h0ID0gcGxhY2VtZW50SGVpZ2h0O1xyXG4gICAgICAgICAgeSA9IHlTdGFydDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB2bS5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcclxuICAgICAgdm0uc3R5bGUuaGVpZ2h0ID0gYCAke2hlaWdodH1weGA7XHJcbiAgICAgIHZtLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHt4fXB4LCAke3l9cHgpYDtcclxuXHJcbiAgICAgIGZ1bmN0aW9uIGdldFNoZWxmRGl2KGs6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiAodmlld1BvcnQ/LnF1ZXJ5U2VsZWN0b3IoYCNzaGVsZiR7a31gKSB8fFxyXG4gICAgICAgICAgdmlld1BvcnQ/LnF1ZXJ5U2VsZWN0b3IoYCN0cmF5JHtrfWApIHx8XHJcbiAgICAgICAgICB2aWV3UG9ydD8ucXVlcnlTZWxlY3RvcihgI3Ztb25seSR7a31gKSkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBhcHBseVNoZWxmQ29sb3JzKCkge1xyXG4gICAgY29uc3QgYm9kaWVzID0gdGhpcy5ib2R5RWw7XHJcbiAgICBpZiAoIWJvZGllcykgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IGJvZHlDaGlsZHJlbiA9IEFycmF5LmZyb20oYm9kaWVzPy5jaGlsZHJlbiA/PyBbXSkgYXMgSFRNTEVsZW1lbnRbXTtcclxuXHJcbiAgICBjb25zdCBzaGVsZkRpdnMgPSBib2R5Q2hpbGRyZW5cclxuICAgICAgLm1hcCgoZGl2KSA9PiBkaXYgYXMgSFRNTEVsZW1lbnQpXHJcbiAgICAgIC5maWx0ZXIoKGQpID0+IGQ/LmlkLmluY2x1ZGVzKFwic3VtU2hlbGZDb250YWluZXJcIikpO1xyXG5cclxuICAgIGlmICghc2hlbGZEaXZzKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgYWRqdXN0ID0gMDtcclxuICAgIHN3aXRjaCAodGhpcy5maXh0dXJlPy5wcm9kdWN0UmVzb2x1dGlvbkxldmVsKSB7XHJcbiAgICAgIGNhc2UgXCJMMVwiOiAvL2ZpeHR1cmVcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsZXQgeSA9IDA7XHJcbiAgICAgICAgICBzaGVsZkRpdnMuZm9yRWFjaCgoZCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dDb2xvcnMpIHtcclxuICAgICAgICAgICAgICBkLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbMF0uYmc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNhcCA9IGQucXVlcnlTZWxlY3RvcihcIi5jYXBhY2l0eVwiKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgY29uc3Qgc1kgPVxyXG4gICAgICAgICAgICAgIHkgKyAoZC5vZmZzZXRIZWlnaHQgLSBjYXAub2Zmc2V0SGVpZ2h0KSAvIDIgLSBjYXAub2Zmc2V0VG9wO1xyXG4gICAgICAgICAgICBjYXAuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHtzWX1weClgO1xyXG4gICAgICAgICAgICBjYXAuc3R5bGUuYm9yZGVyID0gYDFweCBzb2xpZCAke3RoaXMuc2hlbGZDb2xvcnNbMF0uYm9yZGVyfWA7XHJcbiAgICAgICAgICAgIHkgKz0gZC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFwiTDNcIjogLy9zZWN0aW9uXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29uc3Qgc2hlbHZlcyA9IHNoZWxmRGl2c1xyXG4gICAgICAgICAgICAubWFwKChkaXYpID0+XHJcbiAgICAgICAgICAgICAgZGl2Lmxhc3RFbGVtZW50Q2hpbGQ/LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJkaXZcIlxyXG4gICAgICAgICAgICAgICAgPyAoZGl2Lmxhc3RFbGVtZW50Q2hpbGQgYXMgSFRNTEVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdFNlcXVlbnRpYWxTZWN0aW9uKHNoZWx2ZXMpO1xyXG4gICAgICAgICAgY29uc3Qgc2VjdGlvbkFycmF5ID0gdGhpcy5ncm91cFNoZWx2ZXNCeVpvbmUoXHJcbiAgICAgICAgICAgIHRoaXMuZml4dHVyZT8uc2hlbGZDb25maWcgPz8gW10sXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgYWxsU2VjdGlvblNoZWx2ZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgICAgICAgc2VjdGlvbkFycmF5LmZvckVhY2goKHNlLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNoZWxmSWRzID1cclxuICAgICAgICAgICAgICBzZS5zaGVsdmVzPy5tYXAoKHNoKSA9PiBzaC5yZXBsYWNlKC9cXHMvZywgXCJcIikudG9Mb3dlckNhc2UoKSkgPz9cclxuICAgICAgICAgICAgICBbXTtcclxuICAgICAgICAgICAgYWxsU2VjdGlvblNoZWx2ZXMucHVzaCguLi5zaGVsZklkcyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlY0RpdnMgPSBzaGVsdmVzLmZpbHRlcigoaXRlbSkgPT5cclxuICAgICAgICAgICAgICBzaGVsZklkcz8uaW5jbHVkZXMoaXRlbT8uaWQgPz8gXCJcIiksXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG93Q29sb3JzKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgY29sb3IgPSB0aGlzLnpvbmVDb2xvcihzZS56b25lKTtcclxuICAgICAgICAgICAgICBzZWNEaXZzLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghZCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvci5iZztcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNhcCA9IGQucXVlcnlTZWxlY3RvcihcIi5jYXBhY2l0eVwiKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgICAgIGlmIChjYXApIHtcclxuICAgICAgICAgICAgICAgICAgY2FwLnN0eWxlLmJvcmRlciA9IGAxcHggc29saWQgJHtjb2xvci5ib3JkZXJ9YDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgbGV0IHkgPSAwO1xyXG4gICAgICAgICAgc2hlbGZEaXZzLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2FwID0gZC5xdWVyeVNlbGVjdG9yKFwiLmNhcGFjaXR5XCIpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAoY2FwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc1kgPVxyXG4gICAgICAgICAgICAgICAgeSArIChkLm9mZnNldEhlaWdodCAtIGNhcC5vZmZzZXRIZWlnaHQpIC8gMiAtIGNhcC5vZmZzZXRUb3A7XHJcbiAgICAgICAgICAgICAgY2FwLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7c1l9cHgpYDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB5ICs9IGQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgaWYgKCF0aGlzLnNob3dCQ3MpIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHVuYXNzaWduZWRTaGVsdmVzID0gc2hlbGZEaXZzLmZpbHRlcihcclxuICAgICAgICAgICAgKGl0ZW0pID0+ICFhbGxTZWN0aW9uU2hlbHZlcy5pbmNsdWRlcyhpdGVtLmlkKSxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB1bmFzc2lnbmVkU2hlbHZlcy5mb3JFYWNoKChkKSA9PiAoZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcIndoaXRlXCIpKTtcclxuXHJcbiAgICAgICAgICBsZXQgc2VjdGlvbkdyb3VwSGVpZ2h0ID0gMDtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlY3Rpb25CeVpvbmVzLmZvckVhY2goKHN6LCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudFNlY3Rpb25IZWlnaHQgPSBzei5zZWN0aW9uLnNoZWxmRGl2cy5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAoaCwgZCkgPT4gaCArIChkPy5vZmZzZXRIZWlnaHQgPz8gMCksXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudFNlY3Rpb25XaWR0aCA9XHJcbiAgICAgICAgICAgICAgICBzei5zZWN0aW9uLnNoZWxmRGl2c1swXT8ub2Zmc2V0V2lkdGggPz8gMzQ1O1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBiYyA9IGJvZGllcy5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihcclxuICAgICAgICAgICAgICAgIGAjYnJhbmQtY2F0ZWdvcnkke2l9YCxcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoYmMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gdGhpcy56b25lQ29sb3Ioc3ouem9uZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0NvbG9ycykge1xyXG4gICAgICAgICAgICAgICAgICBiYy5zdHlsZS5ib3JkZXJDb2xvciA9IGNvbG9yLmJvcmRlcjtcclxuICAgICAgICAgICAgICAgICAgYmMuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gXCIjZmZmXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgYmNYID0gKGN1cnJlbnRTZWN0aW9uV2lkdGggLSBiYy5vZmZzZXRXaWR0aCkgLyAyO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYmNZID1cclxuICAgICAgICAgICAgICAgICAgKGN1cnJlbnRTZWN0aW9uSGVpZ2h0IC0gYmMub2Zmc2V0SGVpZ2h0KSAvIDIgK1xyXG4gICAgICAgICAgICAgICAgICBzZWN0aW9uR3JvdXBIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBiYy5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlKCR7YmNYICsgYWRqdXN0fXB4LCAke2JjWX1weClgO1xyXG5cclxuICAgICAgICAgICAgICAgIHNlY3Rpb25Hcm91cEhlaWdodCArPSBjdXJyZW50U2VjdGlvbkhlaWdodDtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgXCJMMlwiOiAvL3NoZWxmXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGV0IHkgPSAwO1xyXG5cclxuICAgICAgICAgIHNoZWxmRGl2cy5mb3JFYWNoKChkaXYsIGkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2FwID0gZGl2LnF1ZXJ5U2VsZWN0b3IoXCIuY2FwYWNpdHlcIikgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmICghY2FwKSB7XHJcbiAgICAgICAgICAgICAgeSArPSBkaXYub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzWSA9XHJcbiAgICAgICAgICAgICAgeSArIChkaXYub2Zmc2V0SGVpZ2h0IC0gY2FwLm9mZnNldEhlaWdodCkgLyAyIC0gY2FwLm9mZnNldFRvcDtcclxuICAgICAgICAgICAgY2FwLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7c1l9cHgpYDtcclxuICAgICAgICAgICAgY2FwLnN0eWxlLmJvcmRlciA9IGAxcHggc29saWQgJHt0aGlzLnNoZWxmQ29sb3JzW2ldLmJvcmRlcn1gO1xyXG4gICAgICAgICAgICB5ICs9IGRpdi5vZmZzZXRIZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG93Q29sb3JzKSB7XHJcbiAgICAgICAgICAgICAgZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbaV0uYmc7XHJcbiAgICAgICAgICAgICAgZGl2LnN0eWxlLmJvcmRlciA9IGAxLjRweCBzb2xpZCAke3RoaXMuc2hlbGZDb2xvcnNbaV0uYm9yZGVyfWA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5zaG93QkNzKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb25zdCBiYyA9IGRpdi5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihgI2JyYW5kLWNhdGVnb3J5JHtpfWApO1xyXG4gICAgICAgICAgICBpZiAoIWJjKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb25zdCBiY1ggPSAoZGl2Lm9mZnNldFdpZHRoIC0gYmMub2Zmc2V0V2lkdGgpIC8gMjtcclxuICAgICAgICAgICAgY29uc3QgYmNZID0gKGRpdi5vZmZzZXRIZWlnaHQgLSBiYy5vZmZzZXRIZWlnaHQpIC8gMjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dDb2xvcnMpIHtcclxuICAgICAgICAgICAgICBiYy5zdHlsZS5ib3JkZXJDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbaV0uYm9yZGVyO1xyXG4gICAgICAgICAgICAgIGJjLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbaV0udGV4dEJnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJjLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHtiY1ggKyBhZGp1c3R9cHgsICR7YmNZfXB4KWA7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJMNFwiOiAvL3Nwb3RcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsZXQgeSA9IDA7XHJcbiAgICAgICAgICBzaGVsZkRpdnMuZm9yRWFjaCgoZCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dDb2xvcnMpIHtcclxuICAgICAgICAgICAgICBkLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2hlbGZDb2xvcnNbMF0uYmc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNhcCA9IGQucXVlcnlTZWxlY3RvcihcIi5jYXBhY2l0eVwiKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgY29uc3Qgc1kgPVxyXG4gICAgICAgICAgICAgIHkgKyAoZC5vZmZzZXRIZWlnaHQgLSBjYXAub2Zmc2V0SGVpZ2h0KSAvIDIgLSBjYXAub2Zmc2V0VG9wO1xyXG4gICAgICAgICAgICBjYXAuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHtzWX1weClgO1xyXG4gICAgICAgICAgICBjYXAuc3R5bGUuYm9yZGVyID0gYDFweCBzb2xpZCAke3RoaXMuc2hlbGZDb2xvcnNbMF0uYm9yZGVyfWA7XHJcbiAgICAgICAgICAgIHkgKz0gZC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgbGV0IHkgPSAwO1xyXG4gICAgICAgIHNoZWxmRGl2cy5mb3JFYWNoKChkKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5zaG93Q29sb3JzKSB7XHJcbiAgICAgICAgICAgIGQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5zaGVsZkNvbG9yc1swXS5iZztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBjYXAgPSBkLnF1ZXJ5U2VsZWN0b3IoXCIuY2FwYWNpdHlcIikgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICBjb25zdCBzWSA9XHJcbiAgICAgICAgICAgIHkgKyAoZC5vZmZzZXRIZWlnaHQgLSBjYXAub2Zmc2V0SGVpZ2h0KSAvIDIgLSBjYXAub2Zmc2V0VG9wO1xyXG4gICAgICAgICAgY2FwLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7c1l9cHgpYDtcclxuICAgICAgICAgIGNhcC5zdHlsZS5ib3JkZXIgPSBgMXB4IHNvbGlkICR7dGhpcy5zaGVsZkNvbG9yc1swXS5ib3JkZXJ9YDtcclxuICAgICAgICAgIHkgKz0gZC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RTZXF1ZW50aWFsU2VjdGlvbihzaGVsZkRpdnM6IChIVE1MRWxlbWVudCB8IG51bGwpW10pIHtcclxuICAgIGNvbnN0IG5ld1NlY3Rpb25CeVpvbmVzID0gW107XHJcblxyXG4gICAgbGV0IHBab25lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgIGZvciAoY29uc3QgcyBvZiB0aGlzLmZpeHR1cmU/LnNoZWxmQ29uZmlnID8/IFtdKSB7XHJcbiAgICAgIGNvbnN0IHpvbmUgPSBzLnpvbmUgfHwgXCJcIjtcclxuICAgICAgY29uc3Qgc2hlbGZJZCA9IGAke3Muc2hlbGZUeXBlfSR7cy5zaGVsZk51bWJlcn1gO1xyXG4gICAgICBjb25zdCBzaGVsZkRpdiA9IHNoZWxmRGl2cy5maW5kKChkKSA9PiBkPy5pZCA9PT0gc2hlbGZJZCk7XHJcblxyXG4gICAgICBpZiAoem9uZSA9PT0gXCJcIikgY29udGludWU7XHJcbiAgICAgIGlmICh6b25lICE9PSBwWm9uZSkge1xyXG4gICAgICAgIG5ld1NlY3Rpb25CeVpvbmVzLnB1c2goe1xyXG4gICAgICAgICAgem9uZSxcclxuICAgICAgICAgIHNlY3Rpb246IHtcclxuICAgICAgICAgICAgYnJhbmRzOiBzLnByb2R1Y3RCcmFuZE5hbWUgPz8gW10sXHJcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IHMucHJvZHVjdENhdGVnb3J5ID8/IFtdLFxyXG4gICAgICAgICAgICBzaGVsdmVzOiBbc2hlbGZJZF0sXHJcbiAgICAgICAgICAgIHNoZWxmRGl2czogW3NoZWxmRGl2XSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcFpvbmUgPSB6b25lO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb24gPSBuZXdTZWN0aW9uQnlab25lc1tuZXdTZWN0aW9uQnlab25lcy5sZW5ndGggLSAxXS5zZWN0aW9uO1xyXG4gICAgICAgIHNlY3Rpb24uc2hlbHZlcy5wdXNoKHNoZWxmSWQpO1xyXG4gICAgICAgIHNlY3Rpb24uc2hlbGZEaXZzLnB1c2goc2hlbGZEaXYpO1xyXG5cclxuICAgICAgICBpZiAoIXNlY3Rpb24uYnJhbmRzLmxlbmd0aCkgc2VjdGlvbi5icmFuZHMgPSBzPy5wcm9kdWN0QnJhbmROYW1lID8/IFtdO1xyXG4gICAgICAgIGlmICghc2VjdGlvbi5jYXRlZ29yaWVzLmxlbmd0aClcclxuICAgICAgICAgIHNlY3Rpb24uY2F0ZWdvcmllcyA9IHM/LnByb2R1Y3RDYXRlZ29yeSA/PyBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VjdGlvbkJ5Wm9uZXMgPSBbLi4ubmV3U2VjdGlvbkJ5Wm9uZXNdO1xyXG5cclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZ3JvdXBTaGVsdmVzQnlab25lKGlucHV0OiBTaGVsZkNvbmZpZ1tdKTogU2VjdGlvbkNvbmZpZ1tdIHtcclxuICAgIGNvbnN0IHpvbmVNYXA6IHsgW3pvbmU6IHN0cmluZ106IFNlY3Rpb25Db25maWcgfSA9IHt9O1xyXG5cclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpbnB1dCkge1xyXG4gICAgICBjb25zdCB6b25lID0gaXRlbT8uem9uZSA/PyBcIlwiO1xyXG4gICAgICBjb25zdCBzaGVsZkxhYmVsID0gYCR7aXRlbS5zaGVsZlR5cGV9ICR7aXRlbS5zaGVsZk51bWJlcn1gO1xyXG5cclxuICAgICAgaWYgKCF6b25lTWFwW3pvbmVdKSB7XHJcbiAgICAgICAgem9uZU1hcFt6b25lXSA9IHtcclxuICAgICAgICAgIHNoZWx2ZXM6IFtdLFxyXG4gICAgICAgICAgcHJvZHVjdEJyYW5kTmFtZTpcclxuICAgICAgICAgICAgdGhpcy5maXh0dXJlPy5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwyXCJcclxuICAgICAgICAgICAgICA/IGl0ZW0ucHJvZHVjdEJyYW5kTmFtZVxyXG4gICAgICAgICAgICAgIDogW10sXHJcbiAgICAgICAgICBwcm9kdWN0Q2F0ZWdvcnk6XHJcbiAgICAgICAgICAgIHRoaXMuZml4dHVyZT8ucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMlwiXHJcbiAgICAgICAgICAgICAgPyBpdGVtLnByb2R1Y3RDYXRlZ29yeVxyXG4gICAgICAgICAgICAgIDogW10sXHJcbiAgICAgICAgICB6b25lOiB6b25lLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHpvbmVNYXBbem9uZV0/LnNoZWx2ZXM/LnB1c2goc2hlbGZMYWJlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoem9uZU1hcCk7XHJcbiAgfVxyXG5cclxuICBhcHBseVNlY3Rpb25Db25maWdUb1NoZWx2ZXMoc2VjdGlvbnM6IFNlY3Rpb25Db25maWdbXSk6IFNoZWxmQ29uZmlnW10ge1xyXG4gICAgY29uc3Qgc2VjdGlvbk1hcCA9IG5ldyBNYXA8XHJcbiAgICAgIHN0cmluZyxcclxuICAgICAgUGljazxTZWN0aW9uQ29uZmlnLCBcInpvbmVcIiB8IFwicHJvZHVjdEJyYW5kTmFtZVwiIHwgXCJwcm9kdWN0Q2F0ZWdvcnlcIj5cclxuICAgID4oKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcclxuICAgICAgZm9yIChjb25zdCBzaGVsZkxhYmVsIG9mIHNlY3Rpb24uc2hlbHZlcyEpIHtcclxuICAgICAgICBzZWN0aW9uTWFwLnNldChzaGVsZkxhYmVsLCB7XHJcbiAgICAgICAgICB6b25lOiBzZWN0aW9uLnpvbmUsXHJcbiAgICAgICAgICBwcm9kdWN0QnJhbmROYW1lOiBzZWN0aW9uLnByb2R1Y3RCcmFuZE5hbWUsXHJcbiAgICAgICAgICBwcm9kdWN0Q2F0ZWdvcnk6IHNlY3Rpb24ucHJvZHVjdENhdGVnb3J5LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQXBwbHkgb3ZlcnJpZGVzIHRvIG1hdGNoaW5nIHNoZWx2ZXNcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuZml4dHVyZT8uc2hlbGZDb25maWc/Lm1hcCgoczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3Qgc2hlbGZMYWJlbCA9IGAke3Muc2hlbGZUeXBlfSAke3Muc2hlbGZOdW1iZXJ9YDtcclxuICAgICAgICBjb25zdCBvdmVycmlkZSA9IHNlY3Rpb25NYXAuZ2V0KHNoZWxmTGFiZWwpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4ucyxcclxuICAgICAgICAgIHpvbmU6IG92ZXJyaWRlPy56b25lIHx8IFwiXCIsXHJcbiAgICAgICAgICBwcm9kdWN0QnJhbmROYW1lOiBvdmVycmlkZT8ucHJvZHVjdEJyYW5kTmFtZSA/PyBbXSxcclxuICAgICAgICAgIHByb2R1Y3RDYXRlZ29yeTogb3ZlcnJpZGU/LnByb2R1Y3RDYXRlZ29yeSA/PyBbXSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KSA/PyBbXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIkBpZihpc1BhZ2VMb2FkaW5nKXtcclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG59QGVsc2Uge1xyXG5cclxuICAgIDxzZWN0aW9uICNmaXh0dXJlUm9vdCBpZD1cImZpeHR1cmUtdmlld1wiPlxyXG4gICAgICAgIDxkaXYgaWQ9XCJ2bS1wcm9kdWN0cy1zdW1cIiBjbGFzcz1cIndhbGwtdmlld3BvcnRcIj5cclxuICAgICAgICAgICAgPCEtLSBUZW1wbGF0ZSBncm91cCBuYW1lIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGVtcGxhdGUtZ3JvdXAtZWRpdG9yXCIgW2NsYXNzLnJlYWRvbmx5XT1cIiFlZGl0YWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInpvbmVUZW1wbGF0ZUdyb3VwTmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+VGVtcGxhdGUgR3JvdXAgTmFtZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGVtcGxhdGUtZ3JvdXAtYXV0b2NvbXBsZXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiem9uZVRlbXBsYXRlR3JvdXBOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInRlbXBsYXRlR3JvdXBOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25UZW1wbGF0ZUdyb3VwTmFtZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uVGVtcGxhdGVHcm91cEZvY3VzKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvblRlbXBsYXRlR3JvdXBCbHVyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWVkaXRhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJUZW1wbGF0ZSBHcm91cCBOYW1lXCIgLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwic3VnZ2VzdGlvbnMtcGFuZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImVkaXRhYmxlICYmIHNob3dUZW1wbGF0ZUdyb3VwU3VnZ2VzdGlvbnMgJiYgdGVtcGxhdGVHcm91cFN1Z2dlc3Rpb25zLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiB0ZW1wbGF0ZUdyb3VwU3VnZ2VzdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdWdnZXN0aW9uLWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvblBpY2tUZW1wbGF0ZUdyb3VwU3VnZ2VzdGlvbihvcHRpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24gfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJlZGl0YWJsZSAmJiAhdGVtcGxhdGVHcm91cE5hbWU/LnRyaW0oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlIEdyb3VwIE5hbWUgaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gSGVhZGVyIGJsb2NrIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWJsb2NrIHpvbmUtaGVhZGVyLWVkaXRvclwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIihmaXh0dXJlPy5oZWFkZXI/LmlzRW5hYmxlZCAmJiBmaXh0dXJlPy5maXh0dXJlVHlwZSA9PT0gJ3dhbGwnKSB8fCBzaG93SGVhZGVyRm9vdGVyQWx3YXlzXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInpvbmUtaGVhZGVyLXNlbGVjdFwiIFtjbGFzcy5yZWFkb25seV09XCIhZWRpdGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGliLXNlbGVjdC1wbGFub1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiaGVhZGVyT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpZEZpZWxkXT1cIidsYWJlbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoRmllbGRdPVwiJ2xhYmVsJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZFZhbHVlc109XCJzZWxlY3RlZEhlYWRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhZWRpdGFibGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29tcGFjdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidIZWFkZXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uSGVhZGVyQ2hhbmdlKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpYi1zZWxlY3QtcGxhbm8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEJvZHkgYmxvY2sgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgaWQ9XCJib2R5LWJsb2NrLXN1bVwiIGNsYXNzPVwiYm9keS1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tW1ZNIEJMT0NLXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJmaXh0dXJlPy52bUNvbmZpZz8ubGVuZ3RoICYmIHNob3dWTXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB2bSBvZiBmaXh0dXJlPy52bUNvbmZpZzsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCIndm0nICsgaVwiIGNsYXNzPVwidm0tYmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cInZtPy52bUltYWdlVXJsOyBlbHNlIHBsYWNlaG9sZGVyXCIgW3NyY109XCJpbWdDRE4gKyB2bT8udm1JbWFnZVVybFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlZtIEltYWdlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsYWNlaG9sZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidm0tcGxhY2Vob2xkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz57eyB2bT8udm1OYW1lIH19PC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVtGSVhUVVJFIExFVkVMIC0gQlJBTkQgQ0FURUdPUlldLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiZml4dHVyZS1sZXZlbFwiICpuZ0lmPVwiZml4dHVyZT8ucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gJ0wxJyAmJiBzaG93QkNzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImJyYW5kLWNhdGVnb3J5XCIgY2xhc3M9XCJicmFuZC1jYXRlZ29yeVwiICpuZ0lmPVwiZml4dHVyZT8ucHJvZHVjdEJyYW5kTmFtZT8ubGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiYnJhbmRDYXRlZ29yeVRvb2x0aXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJicmFuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYiBvZiBmaXh0dXJlPy5wcm9kdWN0QnJhbmROYW1lOyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGRyYWZ0IG1lLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2F0ZWdvcnlcIiAqbmdJZj1cImZpeHR1cmU/LnByb2R1Y3RDYXRlZ29yeT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGZpeHR1cmU/LnByb2R1Y3RDYXRlZ29yeTsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYnJhbmRDYXRlZ29yeVRvb2x0aXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5CcmFuZHM6IDwvYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGZpeHR1cmU/LnByb2R1Y3RCcmFuZE5hbWU7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImZpeHR1cmU/LnByb2R1Y3RDYXRlZ29yeT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+Q2F0ZWdvcmllczogPC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGMgb2YgZml4dHVyZT8ucHJvZHVjdENhdGVnb3J5OyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVtTRUNUSU9OIExFVkVMIC0gQlJBTkQgQ0FURUdPUlldLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwic2VjdGlvbi1sZXZlbFwiICpuZ0lmPVwiZml4dHVyZT8ucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gJ0wzJyAmJiBzaG93QkNzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBzZWN0aW9uQnlab25lczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIidicmFuZC1jYXRlZ29yeScgKyAkaW5kZXhcIiBjbGFzcz1cImJyYW5kLWNhdGVnb3J5IHpvbmUtYnJhbmQtZWRpdG9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiem9uZS1icmFuZC1zZWxlY3RcIiBbY2xhc3MucmVhZG9ubHldPVwiIWVkaXRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG11bHRpc2VsZWN0LWNoaXAtZHJvcGRvd25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImJyYW5kT3B0aW9uc0ZvclpvbmUoaXRlbS56b25lKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZEZpZWxkXT1cIidicmFuZE5hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVGaWVsZF09XCInYnJhbmROYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wYWN0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4U2VsZWN0aW9uXT1cIjNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBicmFuZHMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2V4dHJhQWN0aW9uTGFiZWxdPVwiaXNUb2dnbGVBdmFpbGFibGUoKSA/IChvdGhlcnNNb2RlQnlab25lW2l0ZW0uem9uZV0gPyAnSGlkZSBvdGhlcnMnIDogJ1Nob3cgb3RoZXJzJykgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtleHRyYUFjdGlvbkFjdGl2ZV09XCIhIW90aGVyc01vZGVCeVpvbmVbaXRlbS56b25lXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHRyYUFjdGlvbkNsaWNrKT1cIm9uVG9nZ2xlT3RoZXJzKGl0ZW0uem9uZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJicmFuZHNCeVpvbmVbaXRlbS56b25lXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uWm9uZUJyYW5kc0NoYW5nZShpdGVtLnpvbmUsICRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L211bHRpc2VsZWN0LWNoaXAtZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiJ3N1bVNoZWxmQ29udGFpbmVyJyArIGlcIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaXh0dXJlPy5zaGVsZkNvbmZpZzsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1bU0hFTEYgTEVWRUwgLSBCUkFORCBDQVRFR09SWV0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJzaGVsZi1sZXZlbFwiICpuZ0lmPVwiZml4dHVyZT8ucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gJ0wyJyAmJiBzaG93QkNzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cIidicmFuZC1jYXRlZ29yeScgKyBpXCIgY2xhc3M9XCJicmFuZC1jYXRlZ29yeVwiICpuZ0lmPVwiaXRlbS5wcm9kdWN0QnJhbmROYW1lPy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiYnJhbmRDYXRlZ29yeVRvb2x0aXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnJhbmRcIiAqbmdJZj1cIml0ZW0ucHJvZHVjdEJyYW5kTmFtZT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYiBvZiBpdGVtLnByb2R1Y3RCcmFuZE5hbWU7IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBiIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFwiPiwgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0ucHJvZHVjdENhdGVnb3J5Py5sZW5ndGhcIiBjbGFzcz1cInNlcGFyYXRvclwiPiAtIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2F0ZWdvcnlcIiAqbmdJZj1cIml0ZW0ucHJvZHVjdENhdGVnb3J5Py5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBiIG9mIGl0ZW0ucHJvZHVjdENhdGVnb3J5OyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNicmFuZENhdGVnb3J5VG9vbHRpcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkJyYW5kczogPC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGl0ZW0ucHJvZHVjdEJyYW5kTmFtZTsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJpdGVtLnByb2R1Y3RDYXRlZ29yeT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkNhdGVnb3JpZXM6IDwvYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYyBvZiBpdGVtLnByb2R1Y3RDYXRlZ29yeTsgbGV0IGxhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxhc3RcIj4sIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIEBpZihpdGVtLnNoZWxmVHlwZSA9PT0ndHJheScpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCJpdGVtLnNoZWxmVHlwZSEgKyAoaSArIDEpXCIgY2xhc3M9XCJibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBbXS5jb25zdHJ1Y3RvcihpdGVtLnRyYXlSb3dzKVwiIGNsYXNzPVwidHJheSBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBbXS5jb25zdHJ1Y3RvcihpdGVtLnByb2R1Y3RQZXJTaGVsZilcIiBjbGFzcz1cInByb2R1Y3RcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcGFjaXR5XCI+e3tpdGVtLnByb2R1Y3RQZXJTaGVsZiAqIGl0ZW0udHJheVJvd3N9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICB9QGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCJpdGVtLnNoZWxmVHlwZSArIChpICsgMSlcIiBjbGFzcz1cImJsb2NrIHNoZWxmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy52bW9ubHktcGxhY2Vob2xkZXJdPVwiaXRlbS5zaGVsZlR5cGUgPT09J3Ztb25seSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgW10uY29uc3RydWN0b3IoaXRlbS5wcm9kdWN0UGVyU2hlbGYpXCIgY2xhc3M9XCJwcm9kdWN0XCI+PC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGl0ZW0uc2hlbGZUeXBlID09PSdzaGVsZicpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXBhY2l0eVwiPnt7aXRlbS5wcm9kdWN0UGVyU2hlbGZ9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEZvb3RlciBibG9jayAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3Rlci1ibG9ja1wiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIihmaXh0dXJlPy5mb290ZXI/LmlzRW5hYmxlZCAmJiBmaXh0dXJlPy5maXh0dXJlVHlwZSA9PT0gJ3dhbGwnKSB8fCAoc2hvd0hlYWRlckZvb3RlckFsd2F5cyAmJiBmaXh0dXJlPy5mb290ZXI/LmxhYmVsKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1Yi1mb290ZXIgbGVmdC1ib3hcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItZm9vdGVyIHJpZ2h0LWJveFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHA+e3sgZml4dHVyZT8uZm9vdGVyPy5sYWJlbCB9fTwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L3NlY3Rpb24+XHJcbn0iXX0=
|