tango-app-ui-store-builder 1.2.17 → 1.2.18
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/access-denied/access-denied.component.mjs +31 -0
- package/esm2022/lib/components/collection-update-ai/collection-update-ai.component.mjs +3 -3
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/prepare-template/prepare-template.component.mjs +3 -3
- package/esm2022/lib/components/collection-update-ai/find-replace-layout/review-replace/review-replace.component.mjs +3 -3
- package/esm2022/lib/components/fixture-template/template-assign-stores/preview-modal/preview-modal.component.mjs +3 -3
- package/esm2022/lib/components/fixture-template/template-assign-stores/template-assign-stores.component.mjs +3 -3
- package/esm2022/lib/components/fixture-template-table/find-and-replace/find-and-replace.component.mjs +3 -3
- package/esm2022/lib/components/fixture-template-table/fixture-template-table.component.mjs +25 -3
- package/esm2022/lib/components/fixture-template-tree/fixture-template-tree.component.mjs +3 -3
- package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +3 -3
- package/esm2022/lib/components/manage-store-plano/plano-rollout/plano-rollout.component.mjs +3 -3
- package/esm2022/lib/components/manage-store-plano/verification-feedback/verification-feedback.component.mjs +9 -3
- package/esm2022/lib/components/manage-store-plano/zone-verification-feedback/zone-verification-feedback.component.mjs +9 -3
- package/esm2022/lib/components/onboard-store-plano/onboard-store-plano.component.mjs +133 -21
- package/esm2022/lib/components/plano-configurations/plano-configurations.component.mjs +8 -3
- package/esm2022/lib/components/plano-library/fixture-library/fixture-library.component.mjs +28 -5
- package/esm2022/lib/components/plano-tools/cad-render/cad-render.component.mjs +3 -3
- package/esm2022/lib/components/plano-tools/delete-floor/delete-floor.component.mjs +3 -3
- package/esm2022/lib/components/plano-tools/layout-touchup/layout-touchup.component.mjs +3 -3
- package/esm2022/lib/components/plano-tools/plano-migrate/plano-migrate.component.mjs +3 -3
- package/esm2022/lib/components/plano-tools/tool-page-header/tool-page-header.component.mjs +3 -3
- package/esm2022/lib/components/plano-tools/tools-parent/tools-parent.component.mjs +3 -3
- package/esm2022/lib/components/planogram/merch-compliance/merch-compliance.component.mjs +3 -3
- package/esm2022/lib/components/planogram/merch-compliance/product-locator/product-locator.component.mjs +3 -3
- package/esm2022/lib/components/planogram/plano-overview/plano-comparison/plano-comparison.component.mjs +3 -3
- package/esm2022/lib/components/planogram/plano-overview/plano-overview.component.mjs +3 -3
- package/esm2022/lib/components/popups/publish-plano-modal/publish-plano-modal.component.mjs +1 -1
- package/esm2022/lib/components/store-plano/store-plano-tree-view/store-plano-tree-view.component.mjs +3 -3
- package/esm2022/lib/components/store-plano/store-plano.component.mjs +3 -3
- package/esm2022/lib/functions/feature-access.guard.mjs +20 -0
- package/esm2022/lib/functions/plano.function.mjs +22 -1
- package/esm2022/lib/services/store-builder.service.mjs +15 -3
- package/esm2022/lib/tango-store-builder-routing.module.mjs +11 -1
- package/esm2022/lib/tango-store-builder.module.mjs +5 -2
- package/fesm2022/tango-app-ui-store-builder.mjs +318 -61
- package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
- package/lib/components/access-denied/access-denied.component.d.ts +18 -0
- package/lib/components/fixture-template-table/fixture-template-table.component.d.ts +6 -0
- package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +2 -2
- package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +5 -5
- package/lib/components/manage-store-plano/verification-feedback/verification-feedback.component.d.ts +1 -0
- package/lib/components/manage-store-plano/zone-verification-feedback/zone-verification-feedback.component.d.ts +1 -0
- package/lib/components/onboard-store-plano/onboard-store-plano.component.d.ts +8 -0
- package/lib/components/plano-library/fixture-library/fixture-library.component.d.ts +5 -1
- package/lib/functions/feature-access.guard.d.ts +9 -0
- package/lib/functions/plano.function.d.ts +9 -0
- package/lib/services/store-builder.service.d.ts +6 -0
- package/lib/tango-store-builder.module.d.ts +38 -37
- package/package.json +1 -1
|
@@ -9,7 +9,7 @@ import { Subject, takeUntil } from 'rxjs';
|
|
|
9
9
|
import * as fabric from "fabric";
|
|
10
10
|
import { StoreFixtureComponent } from '../../components/store-fixture/store-fixture.component';
|
|
11
11
|
import { BatchConfirmationModalComponent } from './batch-confirmation-modal/batch-confirmation-modal.component';
|
|
12
|
-
import { getFixtureCanvasLabel } from '../../../../functions/plano.function';
|
|
12
|
+
import { getFixtureCanvasLabel, getFixtureProductCapacity } from '../../../../functions/plano.function';
|
|
13
13
|
import * as i0 from "@angular/core";
|
|
14
14
|
import * as i1 from "../../../../services/store-builder.service";
|
|
15
15
|
import * as i2 from "../../services/data.service";
|
|
@@ -2586,7 +2586,7 @@ export class PrepareTemplateComponent {
|
|
|
2586
2586
|
stroke: "transparent",
|
|
2587
2587
|
fill: "transparent",
|
|
2588
2588
|
});
|
|
2589
|
-
const bottomTextContent = new fabric.Textbox(`Shelves - ${fixtureData.shelfConfig?.length} . Products - ${fixtureData.
|
|
2589
|
+
const bottomTextContent = new fabric.Textbox(`Shelves - ${fixtureData.shelfConfig?.length} . Products - ${getFixtureProductCapacity(fixtureData.shelfConfig)} . VM - ${fixtureData.vmConfig?.length}`, {
|
|
2590
2590
|
left: bottomX + bottomWidth / 2,
|
|
2591
2591
|
top: bottomY + bottomHeight / 2,
|
|
2592
2592
|
fontSize: 5,
|
|
@@ -2848,4 +2848,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
2848
2848
|
type: ViewChild,
|
|
2849
2849
|
args: ['previewCanvasContainer']
|
|
2850
2850
|
}] } });
|
|
2851
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGFyZS10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9jb2xsZWN0aW9uLXVwZGF0ZS1haS9maW5kLXJlcGxhY2UtbGF5b3V0L3ByZXBhcmUtdGVtcGxhdGUvcHJlcGFyZS10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9jb2xsZWN0aW9uLXVwZGF0ZS1haS9maW5kLXJlcGxhY2UtbGF5b3V0L3ByZXBhcmUtdGVtcGxhdGUvcHJlcGFyZS10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFvQyxTQUFTLEVBQWlDLE1BQU0sZUFBZSxDQUFDO0FBQ3RILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTlELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxvQkFBb0IsRUFBZSxNQUFNLHNEQUFzRCxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUk3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztB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RSxxQkFBcUIsQ0FBQyxhQUc1SSxDQUFDLGFBQWEsQ0FBQztxVUFnQ0UsZ0JBQWdCO3NCQUEzQyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ1cseUJBQXlCO3NCQUE3RCxTQUFTO3VCQUFDLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgVGl0bGVDYXNlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFJvdXRlciwgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBSZWFjdGl2ZVNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3JlYWN0aXZlLXNlbGVjdC9yZWFjdGl2ZS1zZWxlY3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3RvcmVTZWxlY3RDb21wb25lbnQsIFN0b3JlT3B0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zdG9yZS1zZWxlY3Qvc3RvcmUtc2VsZWN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFN0b3JlRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3N0b3JlLWRyb3Bkb3duL3N0b3JlLWRyb3Bkb3duLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdG9yZUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvc3RvcmUtYnVpbGRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29sbGVjdGlvblVwZGF0ZUFpRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdG9yZSwgRmluZFJlcGxhY2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvZmluZC1yZXBsYWNlLm1vZGVsJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCAqIGFzIGZhYnJpYyBmcm9tIFwiZmFicmljXCI7XHJcbmltcG9ydCB7IFN0b3JlRml4dHVyZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc3RvcmUtZml4dHVyZS9zdG9yZS1maXh0dXJlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFZtTGlicmFyeUxpc3QgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcmZhY2VzL3ZtLWxpYnJhcnkuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQmF0Y2hDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCB9IGZyb20gJy4vYmF0Y2gtY29uZmlybWF0aW9uLW1vZGFsL2JhdGNoLWNvbmZpcm1hdGlvbi1tb2RhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBnZXRGaXh0dXJlQ2FudmFzTGFiZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9mdW5jdGlvbnMvcGxhbm8uZnVuY3Rpb24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItcHJlcGFyZS10ZW1wbGF0ZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVTZWxlY3RDb21wb25lbnQsIFN0b3JlU2VsZWN0Q29tcG9uZW50LCBTdG9yZURyb3Bkb3duQ29tcG9uZW50LCBTdG9yZUZpeHR1cmVDb21wb25lbnRdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wcmVwYXJlLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vcHJlcGFyZS10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcycsXHJcbiAgcHJvdmlkZXJzOiBbVGl0bGVDYXNlUGlwZV1cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBQcmVwYXJlVGVtcGxhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgc2VhcmNoTW9kZXMgPSBbXHJcbiAgICB7IHZhbHVlOiAnc3RvcmUnLCBsYWJlbDogJ1N0b3JlcycgfSxcclxuICAgIHsgdmFsdWU6ICdjbHVzdGVyJywgbGFiZWw6ICdDbHVzdGVycycgfSxcclxuICBdO1xyXG4gIHNlbGVjdGVkTW9kZSA9IG5ldyBGb3JtQ29udHJvbCgnc3RvcmUnKTtcclxuICB0YXJnZXQgPSBuZXcgRm9ybUNvbnRyb2woJ2JvdGgnKTtcclxuICBmaW5kUHJvbXB0ID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuICByZXBsYWNlUHJvbXB0ID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuICAvLyBsaWItcmVhY3RpdmUtc2VsZWN0IGJpbmRzIHZpYSBDb250cm9sVmFsdWVBY2Nlc3NvciBhbmQgZW1pdHMgdGhlIHNlbGVjdGVkIElELCBub3QgdGhlIGZ1bGwgb2JqZWN0LlxyXG4gIC8vIEtlZXAgdGhlIEZvcm1Db250cm9sIHR5cGVkIGFzIGEgc3RyaW5nICh0aGUgX2lkKSBhbmQgbG9vayB1cCB0aGUgZnVsbCByZWNvcmQgdmlhIGdldFJlcGxhY2VCcmFuZFNlbGVjdGlvbigpIC8gZ2V0UmVwbGFjZVZtU2VsZWN0aW9uKCkuXHJcbiAgcmVwbGFjZUJyYW5kID0gbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwpO1xyXG4gIHJlcGxhY2VWbSA9IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsKTtcclxuICBcclxuICBzdG9yZU9wdGlvbnM6IFN0b3JlT3B0aW9uW10gPSBbXTtcclxuICBjbHVzdGVyRGF0YTogYW55W10gPSBbXTtcclxuICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2F2aW5nRHJhZnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBiYXRjaFByb2Nlc3Npbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBcclxuICBzZWxlY3RlZFN0b3JlczogU3RvcmVPcHRpb25bXSA9IFtdO1xyXG4gIGZpbmRSZXBsYWNlRGF0YTogRmluZFJlcGxhY2UgfCBudWxsID0gbnVsbDtcclxuICBzZWxlY3RlZFN0b3JlRm9yUHJldmlldzogYW55ID0gbnVsbDtcclxuICBzdG9yZUxpc3RGb3JEcm9wZG93bjogYW55W10gPSBbXTtcclxuICBzdG9yZURyb3Bkb3duSXRlbXM6IGFueVtdID0gW107XHJcbiAgc2VsZWN0ZWRTdG9yZVZhbHVlczogYW55W10gPSBbXTtcclxuXHJcbiAgLy8gQ2FudmFzIHByb3BlcnRpZXNcclxuICBAVmlld0NoaWxkKCdwcmV2aWV3Q2FudmFzJykgcHJldmlld0NhbnZhc1JlZiE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoJ3ByZXZpZXdDYW52YXNDb250YWluZXInKSBwcmV2aWV3Q2FudmFzQ29udGFpbmVyUmVmITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcbiAgcHJldmlld0NhbnZhcyE6IGZhYnJpYy5DYW52YXM7XHJcbiAgcGxhbm9EYXRhOiBhbnk7XHJcbiAgZmxvb3JEYXRhOiBhbnk7XHJcbiAgd2FsbFRoaWNrbmVzcyA9IDMwO1xyXG4gIHZlcnRpY2FsTWFyZ2luID0gKDEuMjUgLyAxMDApICogdGhpcy50b1BpeGVscygxNTI0LCBcIm1tXCIpO1xyXG4gIGNkblVybDogc3RyaW5nID0gJyc7XHJcbiAgYWN0aXZlSGlnaGxpZ2h0OiBmYWJyaWMuUmVjdCB8IG51bGwgPSBudWxsO1xyXG4gIGNhbmNlbEhpZ2hsaWdodEJsaW5rID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRGaXh0dXJlOiBhbnk7XHJcbiAgc2VsZWN0ZWRGaXh0dXJlRGF0YTogYW55ID0gbnVsbDtcclxuICBvcmlnaW5hbEZpeHR1cmVEYXRhOiBhbnkgPSBudWxsO1xyXG4gIHByaXZhdGUgb3JpZ2luYWxGaXh0dXJlc01hcDogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcclxuICBpc1JpZ2h0UGFuZWxDb2xsYXBzZWQgPSBmYWxzZTtcclxuICBjYW52YXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgZmluZExvYWRpbmcgPSBmYWxzZTtcclxuICByZXBsYWNlTG9hZGluZyA9IGZhbHNlO1xyXG4gIGZpbmRFeGVjdXRlZCA9IGZhbHNlO1xyXG4gIHJlcGxhY2VFeGVjdXRlZCA9IGZhbHNlO1xyXG4gIGlzRmluZFByb21wdEZyb21BcGkgPSBmYWxzZTtcclxuICBhbGxGaXh0dXJlSW5zdGFuY2VzOiBhbnlbXSA9IFtdO1xyXG4gIHZtTGlzdDogVm1MaWJyYXJ5TGlzdFtdID0gW107XHJcbiAgYnJhbmRMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIHJlcGxhY2VWbUxpc3Q6IGFueVtdID0gW107XHJcbiAgY2xpZW50SWQ6IHN0cmluZyA9ICcnO1xyXG4gIGhpZGVNZXRhZGF0YTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIHByZXZpb3VzU2VhcmNoTW9kZTogJ3N0b3JlJyB8ICdjbHVzdGVyJyB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgaXNJbml0aWFsTG9hZCA9IHRydWU7XHJcbiAgcHJpdmF0ZSBoYXNSZXN0b3JlZERhdGEgPSBmYWxzZTtcclxuICBwcml2YXRlIGlzVXBkYXRpbmdGcm9tU2VydmljZSA9IGZhbHNlO1xyXG4gIHByaXZhdGUgaXNMb2FkaW5nUGxhbm9ncmFtID0gZmFsc2U7XHJcblxyXG4gIGdldCBoYXNTdG9yZXMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISEodGhpcy5maW5kUmVwbGFjZURhdGE/LnN0b3JlcyAmJiB0aGlzLmZpbmRSZXBsYWNlRGF0YS5zdG9yZXMubGVuZ3RoID4gMCk7XHJcbiAgfVxyXG5cclxuICBnZXRTdG9yZUNvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5maW5kUmVwbGFjZURhdGE/LnN0b3JlQ291bnQgfHwgdGhpcy5maW5kUmVwbGFjZURhdGE/LnN0b3Jlcz8ubGVuZ3RoIHx8IDA7XHJcbiAgfVxyXG5cclxuICBnZXRDdXJyZW50Rml4dHVyZURhdGEoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgfHwgdGhpcy5vcmlnaW5hbEZpeHR1cmVEYXRhO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rml4dHVyZUxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5nZXRDdXJyZW50Rml4dHVyZURhdGEoKTtcclxuICAgIHJldHVybiBmaXh0dXJlPy5oZWFkZXI/LmxhYmVsIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rml4dHVyZUNhdGVnb3J5KCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5nZXRDdXJyZW50Rml4dHVyZURhdGEoKTtcclxuICAgIHJldHVybiBmaXh0dXJlPy5maXh0dXJlQ2F0ZWdvcnkgfHwgJyc7XHJcbiAgfVxyXG5cclxuICBnZXRGaXh0dXJlV2lkdGgoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmdldEN1cnJlbnRGaXh0dXJlRGF0YSgpO1xyXG4gICAgaWYgKCFmaXh0dXJlPy5maXh0dXJlV2lkdGgpIHJldHVybiAnJztcclxuICAgIGNvbnN0IHdpZHRoID0gZml4dHVyZS5maXh0dXJlV2lkdGgudmFsdWU7XHJcbiAgICBjb25zdCB1bml0ID0gZml4dHVyZS5maXh0dXJlV2lkdGgudW5pdCB8fCAnbW0nO1xyXG4gICAgbGV0IGRpbWVuc2lvblN0ciA9IGAke3dpZHRofSR7dW5pdH1gO1xyXG4gICAgLy8gQ29udmVydCB0byBmZWV0IGlmIG5lZWRlZCAoMTIwMG1tID0gNGZ0KVxyXG4gICAgaWYgKHVuaXQgPT09ICdtbScgJiYgd2lkdGggPT09IDEyMDApIHtcclxuICAgICAgZGltZW5zaW9uU3RyID0gYCR7d2lkdGh9JHt1bml0fS80ZnRgO1xyXG4gICAgfSBlbHNlIGlmICh1bml0ID09PSAnbW0nICYmIHdpZHRoID4gMCkge1xyXG4gICAgICBjb25zdCBmZWV0ID0gTWF0aC5yb3VuZCh3aWR0aCAvIDMwMCk7XHJcbiAgICAgIGlmIChmZWV0ID4gMCkge1xyXG4gICAgICAgIGRpbWVuc2lvblN0ciA9IGAke3dpZHRofSR7dW5pdH0vJHtmZWV0fWZ0YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRpbWVuc2lvblN0cjtcclxuICB9XHJcblxyXG4gIGdldFNoZWxmQ291bnQoKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmdldEN1cnJlbnRGaXh0dXJlRGF0YSgpO1xyXG4gICAgcmV0dXJuIGZpeHR1cmU/LnNoZWxmQ29uZmlnPy5sZW5ndGggfHwgMDtcclxuICB9XHJcblxyXG4gIGdldEZpeHR1cmVDYXBhY2l0eSgpOiBudW1iZXIge1xyXG4gICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZ2V0Q3VycmVudEZpeHR1cmVEYXRhKCk7XHJcbiAgICByZXR1cm4gZml4dHVyZT8uZml4dHVyZUNhcGFjaXR5IHx8IDA7XHJcbiAgfVxyXG5cclxuICBnZXRPcmlnaW5hbEZpeHR1cmVGb3JEaXNwbGF5KCk6IGFueSB7XHJcbiAgICAvLyBJZiBvcmlnaW5hbEZpeHR1cmVEYXRhIGV4aXN0cywgdXNlIGl0XHJcbiAgICBpZiAodGhpcy5vcmlnaW5hbEZpeHR1cmVEYXRhKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsRml4dHVyZURhdGE7XHJcbiAgICB9XHJcbiAgICAvLyBJZiBub3QsIHRyeSB0byBnZXQgZnJvbSBtYXAgdXNpbmcgc2VsZWN0ZWRGaXh0dXJlRGF0YSBJRFxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YT8uX2lkKSB7XHJcbiAgICAgIGNvbnN0IHN0b3JlZE9yaWdpbmFsID0gdGhpcy5vcmlnaW5hbEZpeHR1cmVzTWFwLmdldCh0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEuX2lkKTtcclxuICAgICAgaWYgKHN0b3JlZE9yaWdpbmFsKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0b3JlZE9yaWdpbmFsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBGYWxsYmFjayB0byBzZWxlY3RlZEZpeHR1cmVEYXRhIChmb3IgZmluZC1vbmx5IGNhc2UpXHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhO1xyXG4gIH1cclxuXHJcbiAgc2hvdWxkU2hvd0JlZm9yZUFmdGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgLy8gU2hvdyBCZWZvcmUvQWZ0ZXIgb25seSB3aGVuIHNlbGVjdGVkRml4dHVyZURhdGEgZXhpc3RzIEFORCBpdCBoYXMgZmluZCBkYXRhXHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBDaGVjayBpZiB0aGlzIGZpeHR1cmUgaGFzIGZpbmQgZGF0YSAoZmluZFJlc3BvbnNlRGF0YSBleGlzdHMgZm9yIHRoaXMgc3BlY2lmaWMgZml4dHVyZSlcclxuICAgIGlmICh0aGlzLmZpbmRSZXBsYWNlRGF0YT8uc3RvcmVzICYmIHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcpIHtcclxuICAgICAgY29uc3Qgc3RvcmUgPSB0aGlzLmZpbmRSZXBsYWNlRGF0YS5zdG9yZXMuZmluZChcclxuICAgICAgICAoczogU3RvcmUpID0+IHMuc3RvcmVOYW1lID09PSB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3LnN0b3JlTmFtZVxyXG4gICAgICApO1xyXG4gICAgICAvLyBTaG93IEJlZm9yZS9BZnRlciBpZiBmaW5kUmVzcG9uc2VEYXRhIGV4aXN0cyBhbmQgbWF0Y2hlcyB0aGUgY3VycmVudCBmaXh0dXJlXHJcbiAgICAgIGlmIChzdG9yZT8uZmluZFJlc3BvbnNlRGF0YSAmJiBzdG9yZS5maW5kUmVzcG9uc2VEYXRhID09PSB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEuX2lkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIEFsc28gY2hlY2sgaWYgZmluZEV4ZWN1dGVkIGZsYWcgaXMgc2V0IEFORCB3ZSBoYXZlIG9yaWdpbmFsRml4dHVyZURhdGEgb3IgaXQncyBpbiB0aGUgbWFwXHJcbiAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugd2hlbiBmaW5kIHdhcyBqdXN0IGV4ZWN1dGVkXHJcbiAgICBpZiAodGhpcy5maW5kRXhlY3V0ZWQpIHtcclxuICAgICAgY29uc3QgZml4dHVyZUlkID0gdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhLl9pZDtcclxuICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBvcmlnaW5hbCBmaXh0dXJlIHN0b3JlZCAoZWl0aGVyIGluIG9yaWdpbmFsRml4dHVyZURhdGEgb3IgbWFwKVxyXG4gICAgICBpZiAodGhpcy5vcmlnaW5hbEZpeHR1cmVEYXRhIHx8IHRoaXMub3JpZ2luYWxGaXh0dXJlc01hcC5oYXMoZml4dHVyZUlkKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBpc0FmdGVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAvLyBFbmFibGUgQWZ0ZXIgb25seSB3aGVuIHJlcGxhY2VSZXNwb25zZURhdGEgZXhpc3RzIGZvciB0aGUgY3VycmVudCBmaXh0dXJlXHJcbiAgICAvLyBBZnRlciBjbGlja2luZyBcIlJ1blwiIG9uIGZpbmQsIHRoZSBmaXh0dXJlIHNob3VsZCBiZSBkaXNhYmxlZCB1bnRpbCByZXBsYWNlIHJlc3BvbnNlIGlzIGF2YWlsYWJsZVxyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEpIHtcclxuICAgICAgcmV0dXJuIHRydWU7IC8vIERpc2FibGUgaWYgbm8gZml4dHVyZSBkYXRhXHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIENoZWNrIGlmIHJlcGxhY2VSZXNwb25zZURhdGEgZXhpc3RzIGZvciBjdXJyZW50IHN0b3JlXHJcbiAgICAvLyByZXBsYWNlUmVzcG9uc2VEYXRhIGlzIGFuIG9iamVjdCB3aXRoIHZtQ29uZmlnIGFuZC9vciBzaGVsZkNvbmZpZyB3aGVuIHJlcGxhY2UgaXMgZXhlY3V0ZWRcclxuICAgIGlmICh0aGlzLmZpbmRSZXBsYWNlRGF0YT8uc3RvcmVzICYmIHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcpIHtcclxuICAgICAgY29uc3Qgc3RvcmUgPSB0aGlzLmZpbmRSZXBsYWNlRGF0YS5zdG9yZXMuZmluZChcclxuICAgICAgICAoczogU3RvcmUpID0+IHMuc3RvcmVOYW1lID09PSB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3LnN0b3JlTmFtZVxyXG4gICAgICApO1xyXG4gICAgICBcclxuICAgICAgLy8gQ2hlY2sgaWYgcmVwbGFjZVJlc3BvbnNlRGF0YSBleGlzdHMgYW5kIGlzIGFuIG9iamVjdCAoaGFzIHZtQ29uZmlnIG9yIHNoZWxmQ29uZmlnKVxyXG4gICAgICBpZiAoc3RvcmU/LnJlcGxhY2VSZXNwb25zZURhdGEgJiYgdHlwZW9mIHN0b3JlLnJlcGxhY2VSZXNwb25zZURhdGEgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgLy8gVmVyaWZ5IGl0IGhhcyBhdCBsZWFzdCBvbmUgY29uZmlnIHByb3BlcnR5ICh2bUNvbmZpZyBvciBzaGVsZkNvbmZpZylcclxuICAgICAgICBpZiAoc3RvcmUucmVwbGFjZVJlc3BvbnNlRGF0YS52bUNvbmZpZyB8fCBzdG9yZS5yZXBsYWNlUmVzcG9uc2VEYXRhLnNoZWxmQ29uZmlnKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFJlcGxhY2UgcmVzcG9uc2UgYXZhaWxhYmxlLCBlbmFibGUgQWZ0ZXJcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gQWxzbyBjaGVjayByZXBsYWNlRXhlY3V0ZWQgZmxhZyBhcyBhIGZhbGxiYWNrIChmb3IgaW1tZWRpYXRlIHVwZGF0ZXMgYWZ0ZXIgcmVwbGFjZSlcclxuICAgIGlmICh0aGlzLnJlcGxhY2VFeGVjdXRlZCAmJiB0aGlzLm9yaWdpbmFsRml4dHVyZURhdGEpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlOyAvLyBSZXBsYWNlIHdhcyBqdXN0IGV4ZWN1dGVkLCBlbmFibGUgQWZ0ZXJcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gRGVmYXVsdDogZGlzYWJsZSBBZnRlciBpZiBubyByZXBsYWNlIHJlc3BvbnNlIGlzIGF2YWlsYWJsZVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc3RvcmVCdWlsZGVyU2VydmljZTogU3RvcmVCdWlsZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IENvbGxlY3Rpb25VcGRhdGVBaURhdGFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0aXRsZUNhc2U6IFRpdGxlQ2FzZVBpcGUsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsXHJcbiAgKSB7fVxyXG5cclxuXHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gR2V0IGNsaWVudCBJRCBhbmQgQ0ROIFVSTFxyXG4gICAgdGhpcy5ncy5lbnZpcm9ubWVudFxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGVudikgPT4ge1xyXG4gICAgICAgIHRoaXMuY2RuVXJsID0gZW52LnBsYW5vZ3JhbUNETiB8fCAnJztcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoZGF0YT8uY2xpZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gZGF0YS5jbGllbnQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGhlYWRlckRhdGEgPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpIGFzIHN0cmluZ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChoZWFkZXJEYXRhPy5jbGllbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGhlYWRlckRhdGEuY2xpZW50O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jbGllbnRJZCkge1xyXG4gICAgICAgICAgdGhpcy5sb2FkUmVwbGFjZUxpYnJhcmllcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8gU3Vic2NyaWJlIHRvIGRhdGEgc2VydmljZSB0byByZXN0b3JlIHNhdmVkIGRhdGFcclxuICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0RmluZFJlcGxhY2VEYXRhKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgLy8gUHJldmVudCBpbmZpbml0ZSBsb29wcyBieSBza2lwcGluZyB1cGRhdGVzIHdoZW4gd2UncmUgdXBkYXRpbmcgZnJvbSBmb3JtIGNoYW5nZXNcclxuICAgICAgICBpZiAodGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5maW5kUmVwbGFjZURhdGEgPSBkYXRhO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChkYXRhICYmICF0aGlzLmhhc1Jlc3RvcmVkRGF0YSkge1xyXG4gICAgICAgICAgLy8gUmVzdG9yZSBhbGwgZm9ybSB2YWx1ZXMgb24gZmlyc3QgZGF0YSBsb2FkXHJcbiAgICAgICAgICAvLyBEb24ndCBjYWxsIHVwZGF0ZVN0b3JlRHJvcGRvd25JdGVtcyBoZXJlIGFzIHJlc3RvcmVGb3JtVmFsdWVzIHdpbGwgaGFuZGxlIGl0XHJcbiAgICAgICAgICB0aGlzLnJlc3RvcmVGb3JtVmFsdWVzKGRhdGEpO1xyXG4gICAgICAgICAgdGhpcy5oYXNSZXN0b3JlZERhdGEgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSAmJiB0aGlzLmhhc1Jlc3RvcmVkRGF0YSkge1xyXG5cclxuICAgICAgICAgIC8vIFVwZGF0ZSBzdG9yZSBkcm9wZG93biBpdGVtcyB3aGVuIHN0b3JlcyBjaGFuZ2UgKGFmdGVyIGluaXRpYWwgcmVzdG9yZSlcclxuICAgICAgICAgIHRoaXMudXBkYXRlU3RvcmVEcm9wZG93bkl0ZW1zKCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIElmIGRhdGEgYWxyZWFkeSByZXN0b3JlZCwgb25seSBoYW5kbGUgc2VhcmNoTW9kZSBjaGFuZ2VzXHJcbiAgICAgICAgICBpZiAoZGF0YS5zZWFyY2hNb2RlICYmIGRhdGEuc2VhcmNoTW9kZSAhPT0gdGhpcy5wcmV2aW91c1NlYXJjaE1vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1vZGUuc2V0VmFsdWUoZGF0YS5zZWFyY2hNb2RlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNTZWFyY2hNb2RlID0gZGF0YS5zZWFyY2hNb2RlO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRTdG9yZXNPckNsdXN0ZXJzKGRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgY3VycmVudGx5IHByZXZpZXdlZCBzdG9yZSBpcyBzdGlsbCBpbiB0aGUgbGlzdFxyXG4gICAgICAgICAgaWYgKGRhdGEuc3RvcmVzICYmIGRhdGEuc3RvcmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgaXNDdXJyZW50U3RvcmVTdGlsbEluTGlzdCA9IHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcgJiYgXHJcbiAgICAgICAgICAgICAgZGF0YS5zdG9yZXMuc29tZSgoc3RvcmU6IFN0b3JlKSA9PiBcclxuICAgICAgICAgICAgICAgIChzdG9yZS5zdG9yZUlkIHx8IHN0b3JlLnN0b3JlTmFtZSkgPT09IHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcuc3RvcmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgc3RvcmUuc3RvcmVOYW1lID09PSB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3LnN0b3JlTmFtZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBJZiBjdXJyZW50IHN0b3JlIHdhcyByZW1vdmVkIG9yIG5vIHN0b3JlIGlzIHNlbGVjdGVkLCBzd2l0Y2ggdG8gZmlyc3Qgc3RvcmVcclxuICAgICAgICAgICAgaWYgKCFpc0N1cnJlbnRTdG9yZVN0aWxsSW5MaXN0KSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbmV3U3RvcmUgPSB0aGlzLnN0b3JlRHJvcGRvd25JdGVtc1swXTtcclxuICAgICAgICAgICAgICBpZiAobmV3U3RvcmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcgPSBuZXdTdG9yZTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRTdG9yZVZhbHVlcygpO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvLyBSZXN0b3JlIGZpbmRSZXNwb25zZURhdGEgYW5kIHJlcGxhY2VSZXNwb25zZURhdGEgZm9yIHRoZSBzZWxlY3RlZCBzdG9yZSBpZiBhdmFpbGFibGVcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZVN0b3JlUmVzcG9uc2VEYXRhKG5ld1N0b3JlLnN0b3JlTmFtZSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vIExvYWQgcGxhbm9ncmFtIGZvciB0aGUgc2VsZWN0ZWQgc3RvcmVcclxuICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplQ2FudmFzKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRQbGFub2dyYW1Gb3JTdG9yZShuZXdTdG9yZS5zdG9yZU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCA1MCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEuc3RvcmVzICYmIGRhdGEuc3RvcmVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAvLyBJZiBhbGwgc3RvcmVzIGFyZSByZW1vdmVkLCBjbGVhciB0aGUgcHJldmlld1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3ID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFN0b3JlVmFsdWVzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICghZGF0YSAmJiB0aGlzLmlzSW5pdGlhbExvYWQpIHtcclxuICAgICAgICAgIC8vIExvYWQgaW5pdGlhbCBkYXRhIGlmIG5vIHNhdmVkIGRhdGFcclxuICAgICAgICAgIHRoaXMubG9hZFN0b3Jlc09yQ2x1c3RlcnMoKTtcclxuICAgICAgICAgIHRoaXMuaXNJbml0aWFsTG9hZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8gU3Vic2NyaWJlIHRvIHNhdmUgZHJhZnQgbG9hZGluZyBzdGF0ZVxyXG4gICAgdGhpcy5kYXRhU2VydmljZS5nZXRMb2FkaW5nU3RhdGUoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGlzTG9hZGluZykgPT4ge1xyXG4gICAgICAgIHRoaXMuc2F2aW5nRHJhZnQgPSBpc0xvYWRpbmc7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIFdhdGNoIGZvciBtb2RlIGNoYW5nZXNcclxuICAgIHRoaXMuc2VsZWN0ZWRNb2RlLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKG5ld01vZGUpID0+IHtcclxuICAgICAgICBpZiAobmV3TW9kZSAhPT0gdGhpcy5wcmV2aW91c1NlYXJjaE1vZGUgJiYgIXRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlKSB7XHJcbiAgICAgICAgICB0aGlzLmlzVXBkYXRpbmdGcm9tU2VydmljZSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnByZXZpb3VzU2VhcmNoTW9kZSA9IG5ld01vZGUgYXMgJ3N0b3JlJyB8ICdjbHVzdGVyJztcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gR2V0IGN1cnJlbnQgZGF0YSB0byBwcmVzZXJ2ZSBzZWxlY3RlZENsdXN0ZXJzIGlmIHN3aXRjaGluZyB0byBjbHVzdGVyIG1vZGVcclxuICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRhID0gdGhpcy5kYXRhU2VydmljZS5nZXRDdXJyZW50RGF0YSgpO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvLyBVcGRhdGUgZGF0YSBzZXJ2aWNlIHdpdGggbmV3IHNlYXJjaE1vZGVcclxuICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UudXBkYXRlRGF0YSh7IFxyXG4gICAgICAgICAgICBzZWFyY2hNb2RlOiBuZXdNb2RlIGFzICdzdG9yZScgfCAnY2x1c3RlcicsXHJcbiAgICAgICAgICAgIHN0b3JlczogW10sIC8vIENsZWFyIHN0b3JlcyB3aGVuIG1vZGUgY2hhbmdlc1xyXG4gICAgICAgICAgICBzZWxlY3RlZENsdXN0ZXJzOiBuZXdNb2RlID09PSAnc3RvcmUnID8gdW5kZWZpbmVkIDogY3VycmVudERhdGE/LnNlbGVjdGVkQ2x1c3RlcnNcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICB0aGlzLmxvYWRTdG9yZXNPckNsdXN0ZXJzKCk7XHJcbiAgICAgICAgICAvLyBDbGVhciBzZWxlY3RlZCBzdG9yZXMgd2hlbiBtb2RlIGNoYW5nZXMgbWFudWFsbHlcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZXMgPSBbXTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gQ2xlYXIgcHJldmlldyB3aGVuIG1vZGUgY2hhbmdlc1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldyA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkU3RvcmVWYWx1ZXMoKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZURhdGEgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5vcmlnaW5hbEZpeHR1cmVzTWFwLmNsZWFyKCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIFJlc2V0IGZsYWdzXHJcbiAgICAgICAgICB0aGlzLmZpbmRFeGVjdXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5yZXBsYWNlRXhlY3V0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlID0gZmFsc2U7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIFdhdGNoIGZvciB0YXJnZXQgY2hhbmdlcyAtIGRlYm91bmNlIHRvIHByZXZlbnQgZXhjZXNzaXZlIHVwZGF0ZXNcclxuICAgIHRoaXMudGFyZ2V0LnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgaWYgKHZhbHVlICYmICF0aGlzLmlzVXBkYXRpbmdGcm9tU2VydmljZSkge1xyXG4gICAgICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5kYXRhU2VydmljZS51cGRhdGVEYXRhKHsgdGFyZ2V0OiB2YWx1ZSBhcyAnbWVyY2gnIHwgJ3ZtJyB8ICdib3RoJyB9KTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzVXBkYXRpbmdGcm9tU2VydmljZSA9IGZhbHNlO1xyXG4gICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyBXYXRjaCBmb3IgZmluZCBwcm9tcHQgY2hhbmdlcyAtIGRlYm91bmNlIHRvIHByZXZlbnQgZXhjZXNzaXZlIHVwZGF0ZXNcclxuICAgIHRoaXMuZmluZFByb21wdC52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIC8vIFJlc2V0IGZpbmRFeGVjdXRlZCBmbGFnIHdoZW4gdXNlciBlZGl0cyB0aGUgZmluZCBwcm9tcHRcclxuICAgICAgICBpZiAodGhpcy5maW5kRXhlY3V0ZWQpIHtcclxuICAgICAgICAgIHRoaXMuZmluZEV4ZWN1dGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIFJlc2V0IGlzRmluZFByb21wdEZyb21BcGkgZmxhZyB3aGVuIHVzZXIgZWRpdHMgdGhlIGZpbmQgcHJvbXB0XHJcbiAgICAgICAgaWYgKHRoaXMuaXNGaW5kUHJvbXB0RnJvbUFwaSkge1xyXG4gICAgICAgICAgdGhpcy5pc0ZpbmRQcm9tcHRGcm9tQXBpID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICghdGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UpIHtcclxuICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UudXBkYXRlRGF0YSh7IGZpbmRQcm9tcHQ6IHZhbHVlIHx8ICcnIH0pO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlID0gZmFsc2U7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIFdhdGNoIGZvciByZXBsYWNlIHByb21wdCBjaGFuZ2VzIC0gZGVib3VuY2UgdG8gcHJldmVudCBleGNlc3NpdmUgdXBkYXRlc1xyXG4gICAgdGhpcy5yZXBsYWNlUHJvbXB0LnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgLy8gUmVzZXQgcmVwbGFjZUV4ZWN1dGVkIGZsYWcgd2hlbiB1c2VyIGVkaXRzIHRoZSByZXBsYWNlIHByb21wdFxyXG4gICAgICAgIGlmICh0aGlzLnJlcGxhY2VFeGVjdXRlZCkge1xyXG4gICAgICAgICAgdGhpcy5yZXBsYWNlRXhlY3V0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UpIHtcclxuICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UudXBkYXRlRGF0YSh7IHJlcGxhY2VQcm9tcHQ6IHZhbHVlIHx8ICcnIH0pO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlID0gZmFsc2U7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIFdhdGNoIGZvciByZXBsYWNlQnJhbmQgY2hhbmdlcyAoZm9ybSBjb250cm9sIGhvbGRzIHRoZSBicmFuZCBfaWQpXHJcbiAgICB0aGlzLnJlcGxhY2VCcmFuZC52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChpZCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnJlcGxhY2VFeGVjdXRlZCkge1xyXG4gICAgICAgICAgdGhpcy5yZXBsYWNlRXhlY3V0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzVXBkYXRpbmdGcm9tU2VydmljZSkge1xyXG4gICAgICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5kYXRhU2VydmljZS51cGRhdGVEYXRhKHsgcmVwbGFjZUJyYW5kOiB0aGlzLmdldFJlcGxhY2VCcmFuZFNlbGVjdGlvbigpIH0pO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlID0gZmFsc2U7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIFdhdGNoIGZvciByZXBsYWNlVm0gY2hhbmdlcyAoZm9ybSBjb250cm9sIGhvbGRzIHRoZSB2bSBfaWQpXHJcbiAgICB0aGlzLnJlcGxhY2VWbS52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChpZCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnJlcGxhY2VFeGVjdXRlZCkge1xyXG4gICAgICAgICAgdGhpcy5yZXBsYWNlRXhlY3V0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzVXBkYXRpbmdGcm9tU2VydmljZSkge1xyXG4gICAgICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5kYXRhU2VydmljZS51cGRhdGVEYXRhKHsgcmVwbGFjZVZtOiB0aGlzLmdldFJlcGxhY2VWbVNlbGVjdGlvbigpIH0pO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlID0gZmFsc2U7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVwbGFjZUJyYW5kU2VsZWN0aW9uKCk6IHsgX2lkOiBzdHJpbmc7IGJyYW5kTmFtZTogc3RyaW5nIH0gfCBudWxsIHtcclxuICAgIGNvbnN0IGlkID0gdGhpcy5yZXBsYWNlQnJhbmQudmFsdWU7XHJcbiAgICBpZiAoIWlkKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGZvdW5kID0gdGhpcy5icmFuZExpc3QuZmluZCgoYjogYW55KSA9PiBiLl9pZCA9PT0gaWQpO1xyXG4gICAgcmV0dXJuIGZvdW5kID8geyBfaWQ6IGZvdW5kLl9pZCwgYnJhbmROYW1lOiBmb3VuZC5icmFuZE5hbWUgfSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXRSZXBsYWNlVm1TZWxlY3Rpb24oKTogeyBfaWQ6IHN0cmluZzsgdm1OYW1lOiBzdHJpbmc7IHZtVHlwZT86IHN0cmluZzsgdm1CcmFuZD86IHN0cmluZyB9IHwgbnVsbCB7XHJcbiAgICBjb25zdCBpZCA9IHRoaXMucmVwbGFjZVZtLnZhbHVlO1xyXG4gICAgaWYgKCFpZCkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCBmb3VuZCA9IHRoaXMucmVwbGFjZVZtTGlzdC5maW5kKCh2OiBhbnkpID0+IHYuX2lkID09PSBpZCk7XHJcbiAgICByZXR1cm4gZm91bmRcclxuICAgICAgPyB7IF9pZDogZm91bmQuX2lkLCB2bU5hbWU6IGZvdW5kLnZtTmFtZSwgdm1UeXBlOiBmb3VuZC52bVR5cGUsIHZtQnJhbmQ6IGZvdW5kLnZtQnJhbmQgfVxyXG4gICAgICA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRSZXBsYWNlTGlicmFyaWVzKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmNsaWVudElkKSByZXR1cm47XHJcblxyXG4gICAgaWYgKCF0aGlzLmJyYW5kTGlzdC5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmdldFJlcGxhY2VCcmFuZExpc3QodGhpcy5jbGllbnRJZClcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcz8uY29kZSA9PT0gMjAwICYmIEFycmF5LmlzQXJyYXkocmVzPy5kYXRhKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYnJhbmRMaXN0ID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgICAgLy8gU3luYyB0aGUgZGF0YSBzZXJ2aWNlIHdpdGggdGhlIHJlc29sdmVkIG9iamVjdCBub3cgdGhhdCB0aGUgbGlzdCBpcyBhdmFpbGFibGVcclxuICAgICAgICAgICAgICBpZiAodGhpcy5yZXBsYWNlQnJhbmQudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UudXBkYXRlRGF0YSh7IHJlcGxhY2VCcmFuZDogdGhpcy5nZXRSZXBsYWNlQnJhbmRTZWxlY3Rpb24oKSB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4gY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBicmFuZCBsaXN0OicsIGVycilcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMucmVwbGFjZVZtTGlzdC5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmdldFJlcGxhY2VWbUxpc3QodGhpcy5jbGllbnRJZClcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcz8uY29kZSA9PT0gMjAwICYmIEFycmF5LmlzQXJyYXkocmVzPy5kYXRhKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVwbGFjZVZtTGlzdCA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnJlcGxhY2VWbS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS51cGRhdGVEYXRhKHsgcmVwbGFjZVZtOiB0aGlzLmdldFJlcGxhY2VWbVNlbGVjdGlvbigpIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHJlcGxhY2Ugdm0gbGlzdDonLCBlcnIpXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZWVkc1JlcGxhY2VCcmFuZCgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHQgPSB0aGlzLnRhcmdldC52YWx1ZTtcclxuICAgIHJldHVybiB0ID09PSAnbWVyY2gnIHx8IHQgPT09ICdib3RoJztcclxuICB9XHJcblxyXG4gIG5lZWRzUmVwbGFjZVZtKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdCA9IHRoaXMudGFyZ2V0LnZhbHVlO1xyXG4gICAgcmV0dXJuIHQgPT09ICd2bScgfHwgdCA9PT0gJ2JvdGgnO1xyXG4gIH1cclxuXHJcbiAgaGFzUmVwbGFjZVNlbGVjdGlvbigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLm5lZWRzUmVwbGFjZUJyYW5kKCkgJiYgIXRoaXMucmVwbGFjZUJyYW5kLnZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm5lZWRzUmVwbGFjZVZtKCkgJiYgIXRoaXMucmVwbGFjZVZtLnZhbHVlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLm5lZWRzUmVwbGFjZUJyYW5kKCkgfHwgdGhpcy5uZWVkc1JlcGxhY2VWbSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXN0b3JlRm9ybVZhbHVlcyhkYXRhOiBGaW5kUmVwbGFjZSk6IHZvaWQge1xyXG4gICAgLy8gUmVzdG9yZSBzZWFyY2hNb2RlXHJcbiAgICBpZiAoZGF0YS5zZWFyY2hNb2RlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRNb2RlLnNldFZhbHVlKGRhdGEuc2VhcmNoTW9kZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB0aGlzLnByZXZpb3VzU2VhcmNoTW9kZSA9IGRhdGEuc2VhcmNoTW9kZTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gUmVzdG9yZSB0YXJnZXRcclxuICAgIGlmIChkYXRhLnRhcmdldCkge1xyXG4gICAgICB0aGlzLnRhcmdldC5zZXRWYWx1ZShkYXRhLnRhcmdldCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBSZXN0b3JlIGZpbmRQcm9tcHRcclxuICAgIGlmIChkYXRhLmZpbmRQcm9tcHQpIHtcclxuICAgICAgdGhpcy5maW5kUHJvbXB0LnNldFZhbHVlKGRhdGEuZmluZFByb21wdCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB0aGlzLmlzRmluZFByb21wdEZyb21BcGkgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBSZXN0b3JlIHJlcGxhY2VQcm9tcHRcclxuICAgIGlmIChkYXRhLnJlcGxhY2VQcm9tcHQpIHtcclxuICAgICAgdGhpcy5yZXBsYWNlUHJvbXB0LnNldFZhbHVlKGRhdGEucmVwbGFjZVByb21wdCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlc3RvcmUgcmVwbGFjZUJyYW5kIC8gcmVwbGFjZVZtIOKAlCBmb3JtIGNvbnRyb2xzIGhvbGQgdGhlIF9pZCBvbmx5XHJcbiAgICBpZiAoZGF0YS5yZXBsYWNlQnJhbmQ/Ll9pZCkge1xyXG4gICAgICB0aGlzLnJlcGxhY2VCcmFuZC5zZXRWYWx1ZShkYXRhLnJlcGxhY2VCcmFuZC5faWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH1cclxuICAgIGlmIChkYXRhLnJlcGxhY2VWbT8uX2lkKSB7XHJcbiAgICAgIHRoaXMucmVwbGFjZVZtLnNldFZhbHVlKGRhdGEucmVwbGFjZVZtLl9pZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBMb2FkIHN0b3Jlcy9jbHVzdGVycyBhbmQgcmVzdG9yZSBzZWxlY3Rpb25zXHJcbiAgICBpZiAoZGF0YS5zZWFyY2hNb2RlKSB7XHJcbiAgICAgIHRoaXMubG9hZFN0b3Jlc09yQ2x1c3RlcnMoZGF0YSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmxvYWRTdG9yZXNPckNsdXN0ZXJzKCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIFNldCBpbml0aWFsIHNlbGVjdGVkIHN0b3JlIGZvciBwcmV2aWV3XHJcbiAgICBpZiAoZGF0YS5zdG9yZXMgJiYgZGF0YS5zdG9yZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyBTa2lwIHBsYW5vZ3JhbSBsb2FkIGhlcmUgYXMgd2UnbGwgbG9hZCBpdCBleHBsaWNpdGx5IGJlbG93XHJcbiAgICAgIHRoaXMudXBkYXRlU3RvcmVEcm9wZG93bkl0ZW1zKHRydWUpO1xyXG4gICAgICBpZiAodGhpcy5zdG9yZURyb3Bkb3duSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcgPSB0aGlzLnN0b3JlRHJvcGRvd25JdGVtc1swXTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkU3RvcmVWYWx1ZXMoKTtcclxuICAgICAgICAvLyBMb2FkIHBsYW5vZ3JhbSBhZnRlciB2aWV3IGlzIGluaXRpYWxpemVkXHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZUNhbnZhcygpICYmIHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkUGxhbm9ncmFtRm9yU3RvcmUodGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldy5zdG9yZU5hbWUpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gUmV0cnkgaWYgY2FudmFzIG5vdCByZWFkeVxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplQ2FudmFzKCkgJiYgdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkUGxhbm9ncmFtRm9yU3RvcmUodGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldy5zdG9yZU5hbWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgMjAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCAxMDApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMuaXNJbml0aWFsTG9hZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTdG9yZURyb3Bkb3duSXRlbXMoc2tpcFBsYW5vZ3JhbUxvYWQ6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmZpbmRSZXBsYWNlRGF0YT8uc3RvcmVzKSB7XHJcbiAgICAgIHRoaXMuc3RvcmVEcm9wZG93bkl0ZW1zID0gW107XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZVZhbHVlcyA9IFtdO1xyXG4gICAgICAvLyBJZiBubyBzdG9yZXMsIGNsZWFyIHByZXZpZXdcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3ID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGNvbnN0IG5ld0l0ZW1zID0gdGhpcy5maW5kUmVwbGFjZURhdGEuc3RvcmVzLm1hcCgoc3RvcmU6IFN0b3JlKSA9PiAoe1xyXG4gICAgICBzdG9yZUlkOiBzdG9yZS5zdG9yZUlkIHx8IHN0b3JlLnN0b3JlTmFtZSxcclxuICAgICAgc3RvcmVOYW1lOiBzdG9yZS5zdG9yZU5hbWUsXHJcbiAgICAgIF9pZDogc3RvcmUuc3RvcmVJZCB8fCBzdG9yZS5zdG9yZU5hbWVcclxuICAgIH0pKTtcclxuICAgIFxyXG4gICAgLy8gQ2hlY2sgaWYgY3VycmVudGx5IHByZXZpZXdlZCBzdG9yZSBpcyBzdGlsbCBpbiB0aGUgbGlzdFxyXG4gICAgY29uc3QgaXNDdXJyZW50U3RvcmVTdGlsbEluTGlzdCA9IHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcgJiYgXHJcbiAgICAgIG5ld0l0ZW1zLnNvbWUoKGl0ZW06IGFueSkgPT4gXHJcbiAgICAgICAgaXRlbS5zdG9yZUlkID09PSB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3LnN0b3JlSWQgfHxcclxuICAgICAgICBpdGVtLnN0b3JlTmFtZSA9PT0gdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldy5zdG9yZU5hbWVcclxuICAgICAgKTtcclxuICAgIFxyXG4gICAgLy8gT25seSB1cGRhdGUgaWYgaXRlbXMgYWN0dWFsbHkgY2hhbmdlZFxyXG4gICAgY29uc3QgaXRlbXNDaGFuZ2VkID0gSlNPTi5zdHJpbmdpZnkobmV3SXRlbXMpICE9PSBKU09OLnN0cmluZ2lmeSh0aGlzLnN0b3JlRHJvcGRvd25JdGVtcyk7XHJcbiAgICBpZiAoaXRlbXNDaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuc3RvcmVEcm9wZG93bkl0ZW1zID0gbmV3SXRlbXM7XHJcbiAgICAgIFxyXG4gICAgICAvLyBJZiBjdXJyZW50IHN0b3JlIHdhcyByZW1vdmVkLCBzd2l0Y2ggdG8gZmlyc3Qgc3RvcmUgaW4gdGhlIGxpc3RcclxuICAgICAgaWYgKCFpc0N1cnJlbnRTdG9yZVN0aWxsSW5MaXN0ICYmIG5ld0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBmaXJzdFN0b3JlID0gbmV3SXRlbXNbMF07XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldyA9IGZpcnN0U3RvcmU7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFN0b3JlVmFsdWVzKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gUmVzdG9yZSBmaW5kUmVzcG9uc2VEYXRhIGFuZCByZXBsYWNlUmVzcG9uc2VEYXRhIGZvciB0aGUgc2VsZWN0ZWQgc3RvcmUgaWYgYXZhaWxhYmxlXHJcbiAgICAgICAgdGhpcy5yZXN0b3JlU3RvcmVSZXNwb25zZURhdGEoZmlyc3RTdG9yZS5zdG9yZU5hbWUpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIExvYWQgcGxhbm9ncmFtIGZvciB0aGUgbmV3IHN0b3JlICh1bmxlc3Mgc2tpcHBlZCBkdXJpbmcgaW5pdGlhbCByZXN0b3JlKVxyXG4gICAgICAgIGlmICghc2tpcFBsYW5vZ3JhbUxvYWQpIHtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplQ2FudmFzKCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRQbGFub2dyYW1Gb3JTdG9yZShmaXJzdFN0b3JlLnN0b3JlTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sIDUwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFN0b3JlVmFsdWVzKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0ZWRTdG9yZVZhbHVlcygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZVZhbHVlcyA9IFt0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3XTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZVZhbHVlcyA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgLy8gQ2FudmFzIHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2hlbiBzdG9yZSBpcyBzZWxlY3RlZCBhbmQgY2FudmFzIGVsZW1lbnQgaXMgYXZhaWxhYmxlXHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplQ2FudmFzKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMucHJldmlld0NhbnZhcykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gQWxyZWFkeSBpbml0aWFsaXplZFxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAodGhpcy5wcmV2aWV3Q2FudmFzUmVmPy5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5wcmV2aWV3Q2FudmFzID0gbmV3IGZhYnJpYy5DYW52YXModGhpcy5wcmV2aWV3Q2FudmFzUmVmLm5hdGl2ZUVsZW1lbnQsIHtcclxuICAgICAgICAgIHNlbGVjdGlvbkZ1bGx5Q29udGFpbmVkOiB0cnVlLFxyXG4gICAgICAgICAgcGVyUGl4ZWxUYXJnZXRGaW5kOiB0cnVlLFxyXG4gICAgICAgICAgdGFyZ2V0RmluZFRvbGVyYW5jZTogNSxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNldHVwWm9vbUhhbmRsZXJzKHRoaXMucHJldmlld0NhbnZhcyk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW5pdGlhbGl6aW5nIGNhbnZhczonLCBlcnJvcik7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvblN0b3JlU2VsZWN0ZWRGb3JQcmV2aWV3KHN0b3JlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChzdG9yZSAmJiAoIXRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcgfHwgdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldy5zdG9yZUlkICE9PSBzdG9yZS5zdG9yZUlkKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3ID0gc3RvcmU7XHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRTdG9yZVZhbHVlcygpO1xyXG4gICAgICBcclxuICAgICAgLy8gQ2xlYXIgc2VsZWN0ZWQgZml4dHVyZSB3aGVuIHN3aXRjaGluZyBzdG9yZXNcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSBudWxsO1xyXG4gICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZURhdGEgPSBudWxsO1xyXG4gICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZXNNYXAuY2xlYXIoKTsgLy8gQ2xlYXIgdGhlIG1hcCB3aGVuIHN3aXRjaGluZyBzdG9yZXNcclxuICAgICAgXHJcbiAgICAgIC8vIFJlc3RvcmUgZmluZFJlc3BvbnNlRGF0YSBhbmQgcmVwbGFjZVJlc3BvbnNlRGF0YSBmb3IgdGhlIHNlbGVjdGVkIHN0b3JlIGlmIGF2YWlsYWJsZVxyXG4gICAgICB0aGlzLnJlc3RvcmVTdG9yZVJlc3BvbnNlRGF0YShzdG9yZS5zdG9yZU5hbWUpO1xyXG4gICAgICBcclxuICAgICAgLy8gRm9yY2UgY2hhbmdlIGRldGVjdGlvbiB0byBlbnN1cmUgY2FudmFzIGVsZW1lbnQgaXMgaW4gRE9NXHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgXHJcbiAgICAgIC8vIEluaXRpYWxpemUgY2FudmFzIGlmIG5vdCBhbHJlYWR5IGRvbmUsIHRoZW4gbG9hZCBwbGFub2dyYW1cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZUNhbnZhcygpKSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRQbGFub2dyYW1Gb3JTdG9yZShzdG9yZS5zdG9yZU5hbWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBSZXRyeSBhZnRlciBhIHNob3J0IGRlbGF5IGlmIGNhbnZhcyBlbGVtZW50IG5vdCByZWFkeVxyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVDYW52YXMoKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZFBsYW5vZ3JhbUZvclN0b3JlKHN0b3JlLnN0b3JlTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCA1MCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBSZXN0b3JlIGZpbmRSZXNwb25zZURhdGEgYW5kIHJlcGxhY2VSZXNwb25zZURhdGEgZm9yIGEgc3BlY2lmaWMgc3RvcmVcclxuICBwcml2YXRlIHJlc3RvcmVTdG9yZVJlc3BvbnNlRGF0YShzdG9yZU5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmZpbmRSZXBsYWNlRGF0YT8uc3RvcmVzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdG9yZSA9IHRoaXMuZmluZFJlcGxhY2VEYXRhLnN0b3Jlcy5maW5kKFxyXG4gICAgICAoczogU3RvcmUpID0+IHMuc3RvcmVOYW1lID09PSBzdG9yZU5hbWVcclxuICAgICk7XHJcblxyXG4gICAgaWYgKCFzdG9yZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZmluZFJlc3BvbnNlRGF0YSBpcyBhIHN0cmluZyAoZml4dHVyZSBfaWQpXHJcbiAgICAvLyByZXBsYWNlUmVzcG9uc2VEYXRhIGlzIGFuIG9iamVjdCB3aXRoIHZtQ29uZmlnIGFuZC9vciBzaGVsZkNvbmZpZ1xyXG4gICAgY29uc3QgZml4dHVyZUlkID0gc3RvcmUuZmluZFJlc3BvbnNlRGF0YTtcclxuICAgIGlmICghZml4dHVyZUlkKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSB7IGZpeHR1cmVJZCwgZml4dHVyZVR5cGU6IHVuZGVmaW5lZCB9O1xyXG4gICAgLy8gV2UnbGwgcmUtaHlkcmF0ZSBzZWxlY3RlZEZpeHR1cmVEYXRhIGZyb20gdGhlIGxvYWRlZCBwbGFub2dyYW0gKGZsb29yRGF0YSkgYWZ0ZXIgbG9hZC5cclxuICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IG51bGw7XHJcbiAgfVxyXG5cclxuICAvLyBBcHBseSBzdG9yZWQgZmluZFJlc3BvbnNlRGF0YSBhbmQgcmVwbGFjZVJlc3BvbnNlRGF0YSB0byBmbG9vciBkYXRhXHJcbiAgcHJpdmF0ZSBhcHBseVN0b3JlZFJlc3BvbnNlRGF0YSgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maW5kUmVwbGFjZURhdGE/LnN0b3JlcyB8fCAhdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldyB8fCAhdGhpcy5mbG9vckRhdGEpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN0b3JlID0gdGhpcy5maW5kUmVwbGFjZURhdGEuc3RvcmVzLmZpbmQoXHJcbiAgICAgIChzOiBTdG9yZSkgPT4gcy5zdG9yZU5hbWUgPT09IHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcuc3RvcmVOYW1lXHJcbiAgICApO1xyXG5cclxuICAgIGlmICghc3RvcmUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZpbmRSZXNwb25zZURhdGEgaXMgYSBzdHJpbmcgKGZpeHR1cmUgX2lkKSAtIHVzZSBpdCB0byBmaW5kIHRoZSBmaXh0dXJlXHJcbiAgICBjb25zdCBmaXh0dXJlSWQgPSBzdG9yZS5maW5kUmVzcG9uc2VEYXRhO1xyXG4gICAgaWYgKCFmaXh0dXJlSWQpIHJldHVybjtcclxuXHJcbiAgICAvLyBGaW5kIHRoZSBmaXh0dXJlIGluIGZsb29yRGF0YVxyXG4gICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZ2V0Rml4dHVyZUJ5SWRGcm9tRmxvb3IoZml4dHVyZUlkKTtcclxuICAgIGlmICghZml4dHVyZSkgcmV0dXJuO1xyXG5cclxuICAgIC8vIEFwcGx5IHJlcGxhY2VSZXNwb25zZURhdGEgY29uZmlncyBpZiBhdmFpbGFibGUgKG1lcmdlIHdpdGggZXhpc3RpbmcgZml4dHVyZSlcclxuICAgIGlmIChzdG9yZS5yZXBsYWNlUmVzcG9uc2VEYXRhKSB7XHJcbiAgICAgIC8vIFN0b3JlIHRoZSBvcmlnaW5hbCBmaXh0dXJlIChiZWZvcmUgcmVwbGFjZSkgZm9yIGJlZm9yZS9hZnRlciBjb21wYXJpc29uXHJcbiAgICAgIC8vIE9ubHkgc3RvcmUgaWYgbm90IGFscmVhZHkgaW4gbWFwIChwcmVzZXJ2ZSBpbml0aWFsIHBsYW5vZ3JhbSBmaXh0dXJlKVxyXG4gICAgICBpZiAoIXRoaXMub3JpZ2luYWxGaXh0dXJlc01hcC5oYXMoZml4dHVyZUlkKSkge1xyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRml4dHVyZSA9IHN0cnVjdHVyZWRDbG9uZShmaXh0dXJlKTtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZXNNYXAuc2V0KGZpeHR1cmVJZCwgb3JpZ2luYWxGaXh0dXJlKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBSZXN0b3JlIG9yaWdpbmFsRml4dHVyZURhdGEgZnJvbSBtYXAgdG8gZW5zdXJlIGl0J3MgYWx3YXlzIHRoZSBpbml0aWFsIHBsYW5vZ3JhbSBmaXh0dXJlXHJcbiAgICAgIGNvbnN0IHN0b3JlZE9yaWdpbmFsID0gdGhpcy5vcmlnaW5hbEZpeHR1cmVzTWFwLmdldChmaXh0dXJlSWQpO1xyXG4gICAgICBpZiAoc3RvcmVkT3JpZ2luYWwpIHtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZURhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUoc3RvcmVkT3JpZ2luYWwpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCB1cGRhdGVkRml4dHVyZTogYW55ID0geyAuLi5maXh0dXJlIH07XHJcbiAgICAgIFxyXG4gICAgICAvLyBNZXJnZSB2bUNvbmZpZyBpZiBwcmVzZW50IGluIHJlcGxhY2VSZXNwb25zZURhdGFcclxuICAgICAgaWYgKHN0b3JlLnJlcGxhY2VSZXNwb25zZURhdGEudm1Db25maWcpIHtcclxuICAgICAgICB1cGRhdGVkRml4dHVyZS52bUNvbmZpZyA9IHN0b3JlLnJlcGxhY2VSZXNwb25zZURhdGEudm1Db25maWc7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIC8vIE1lcmdlIHNoZWxmQ29uZmlnIGlmIHByZXNlbnQgaW4gcmVwbGFjZVJlc3BvbnNlRGF0YVxyXG4gICAgICBpZiAoc3RvcmUucmVwbGFjZVJlc3BvbnNlRGF0YS5zaGVsZkNvbmZpZykge1xyXG4gICAgICAgIHVwZGF0ZWRGaXh0dXJlLnNoZWxmQ29uZmlnID0gc3RvcmUucmVwbGFjZVJlc3BvbnNlRGF0YS5zaGVsZkNvbmZpZztcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gVXBkYXRlIHRoZSBmaXh0dXJlIGluIGZsb29yRGF0YVxyXG4gICAgICB0aGlzLnVwZGF0ZUFpUmVzcG9uc2VGaXh0dXJlKHVwZGF0ZWRGaXh0dXJlKTtcclxuICAgICAgXHJcbiAgICAgIC8vIFNldCBzZWxlY3RlZCBmaXh0dXJlIGRhdGEgKGFmdGVyIHJlcGxhY2UpXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlID0ge1xyXG4gICAgICAgIGZpeHR1cmVJZDogdXBkYXRlZEZpeHR1cmUuX2lkLFxyXG4gICAgICAgIGZpeHR1cmVUeXBlOiB1cGRhdGVkRml4dHVyZS5maXh0dXJlVHlwZSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gdXBkYXRlZEZpeHR1cmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBObyByZXBsYWNlUmVzcG9uc2VEYXRhLCBjbGVhciBvcmlnaW5hbCBmaXh0dXJlIGFuZCBqdXN0IHNldCB0aGUgc2VsZWN0ZWQgZml4dHVyZSBmcm9tIGZpbmRSZXNwb25zZURhdGFcclxuICAgICAgdGhpcy5vcmlnaW5hbEZpeHR1cmVEYXRhID0gbnVsbDtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSB7XHJcbiAgICAgICAgZml4dHVyZUlkOiBmaXh0dXJlLl9pZCxcclxuICAgICAgICBmaXh0dXJlVHlwZTogZml4dHVyZS5maXh0dXJlVHlwZSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gZml4dHVyZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Rml4dHVyZUJ5SWRGcm9tRmxvb3IoZml4dHVyZUlkOiBzdHJpbmcpOiBhbnkgfCBudWxsIHtcclxuICAgIGlmICghZml4dHVyZUlkIHx8ICF0aGlzLmZsb29yRGF0YSkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24gfHwgW10pIHtcclxuICAgICAgaWYgKGVsZW1lbnQ/LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiBBcnJheS5pc0FycmF5KGVsZW1lbnQuZml4dHVyZXMpKSB7XHJcbiAgICAgICAgY29uc3QgaGl0ID0gZWxlbWVudC5maXh0dXJlcy5maW5kKChmeDogYW55KSA9PiBmeD8uX2lkID09PSBmaXh0dXJlSWQpO1xyXG4gICAgICAgIGlmIChoaXQpIHJldHVybiBoaXQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGNvbnN0IGZ4IG9mIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUgfHwgW10pIHtcclxuICAgICAgaWYgKGZ4Py5faWQgPT09IGZpeHR1cmVJZCkgcmV0dXJuIGZ4O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbG9hZFBsYW5vZ3JhbUZvclN0b3JlKHN0b3JlTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXN0b3JlTmFtZSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0Nhbm5vdCBsb2FkIHBsYW5vZ3JhbTogc3RvcmVOYW1lIG5vdCBhdmFpbGFibGUnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBQcmV2ZW50IGR1cGxpY2F0ZSBjb25jdXJyZW50IGNhbGxzXHJcbiAgICBpZiAodGhpcy5pc0xvYWRpbmdQbGFub2dyYW0pIHtcclxuICAgICAgY29uc29sZS5sb2coJ1BsYW5vZ3JhbSBsb2FkIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHNraXBwaW5nIGR1cGxpY2F0ZSBjYWxsJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKCF0aGlzLnByZXZpZXdDYW52YXMpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdDYW52YXMgbm90IGluaXRpYWxpemVkLCBhdHRlbXB0aW5nIHRvIGluaXRpYWxpemUuLi4nKTtcclxuICAgICAgaWYgKCF0aGlzLmluaXRpYWxpemVDYW52YXMoKSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBpbml0aWFsaXplIGNhbnZhcycpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0aGlzLmlzTG9hZGluZ1BsYW5vZ3JhbSA9IHRydWU7XHJcbiAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gR2V0IHBsYW5vSWQgZnJvbSBzdG9yZSBuYW1lXHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBhbnkgPSBhd2FpdCB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2UuZ2V0UGxhbm9JZCh7IHN0b3JlczogW3N0b3JlTmFtZS50b1VwcGVyQ2FzZSgpXSB9KS50b1Byb21pc2UoKTtcclxuICAgICAgXHJcbiAgICAgIGlmIChyZXNwb25zZT8uY29kZSA9PT0gMjAwICYmIHJlc3BvbnNlPy5kYXRhPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgcGxhbm9JZCA9IHJlc3BvbnNlLmRhdGFbMF0uX2lkO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0U3RvcmVGaXh0dXJlcyhwbGFub0lkKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oJ05vIHBsYW5vZ3JhbSBmb3VuZCBmb3Igc3RvcmU6Jywgc3RvcmVOYW1lKTtcclxuICAgICAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZ1BsYW5vZ3JhbSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBwbGFub2dyYW06JywgZXJyb3IpO1xyXG4gICAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc0xvYWRpbmdQbGFub2dyYW0gPSBmYWxzZTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZFN0b3Jlc09yQ2x1c3RlcnMoc2F2ZWREYXRhPzogRmluZFJlcGxhY2UpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlYXJjaE1vZGUgPSB0aGlzLnNlbGVjdGVkTW9kZS52YWx1ZSBhcyAnc3RvcmUnIHwgJ2NsdXN0ZXInO1xyXG4gICAgaWYgKCFzZWFyY2hNb2RlKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS5nZXRTdG9yZU9yQ2x1c3Rlckxpc3QoeyBzZWFyY2hNb2RlIH0pXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlPy5jb2RlID09PSAyMDAgJiYgcmVzcG9uc2U/LmRhdGEgJiYgQXJyYXkuaXNBcnJheShyZXNwb25zZS5kYXRhKSkge1xyXG4gICAgICAgICAgICBpZiAoc2VhcmNoTW9kZSA9PT0gJ3N0b3JlJykge1xyXG4gICAgICAgICAgICAgIC8vIEZvciBzdG9yZSBtb2RlLCB1c2UgZGF0YSBkaXJlY3RseVxyXG4gICAgICAgICAgICAgIHRoaXMuc3RvcmVPcHRpb25zID0gcmVzcG9uc2UuZGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gKHtcclxuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IGl0ZW0ubGFiZWxcclxuICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jbHVzdGVyRGF0YSA9IFtdOyAvLyBDbGVhciBjbHVzdGVyIGRhdGFcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAvLyBSZXN0b3JlIHNhdmVkIHNlbGVjdGlvbnMgZm9yIHN0b3JlIG1vZGVcclxuICAgICAgICAgICAgICBpZiAoc2F2ZWREYXRhPy5zdG9yZXMgJiYgc2F2ZWREYXRhLnN0b3Jlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmVTdG9yZVNlbGVjdGlvbnMoc2F2ZWREYXRhLnN0b3Jlcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIEZvciBjbHVzdGVyIG1vZGUsIHNob3cgY2x1c3RlcnMgaW4gdGhlIGRyb3Bkb3duXHJcbiAgICAgICAgICAgICAgLy8gU3RvcmUgZnVsbCBjbHVzdGVyIGRhdGEgZm9yIGxhdGVyIHVzZVxyXG4gICAgICAgICAgICAgIHRoaXMuY2x1c3RlckRhdGEgPSByZXNwb25zZS5kYXRhO1xyXG4gICAgICAgICAgICAgIHRoaXMuc3RvcmVPcHRpb25zID0gcmVzcG9uc2UuZGF0YS5tYXAoKGNsdXN0ZXI6IGFueSkgPT4gKHtcclxuICAgICAgICAgICAgICAgIGlkOiBjbHVzdGVyLmlkLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IGNsdXN0ZXIubGFiZWxcclxuICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgLy8gUmVzdG9yZSBzYXZlZCBzZWxlY3Rpb25zIGZvciBjbHVzdGVyIG1vZGVcclxuICAgICAgICAgICAgICBpZiAoc2F2ZWREYXRhPy5zdG9yZXMgJiYgc2F2ZWREYXRhLnN0b3Jlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmVDbHVzdGVyU2VsZWN0aW9ucyhzYXZlZERhdGEuc3RvcmVzKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmVPcHRpb25zID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuY2x1c3RlckRhdGEgPSBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBzdG9yZXMvY2x1c3RlcnM6JywgZXJyb3IpO1xyXG4gICAgICAgICAgdGhpcy5zdG9yZU9wdGlvbnMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVzdG9yZVN0b3JlU2VsZWN0aW9ucyhzYXZlZFN0b3JlczogU3RvcmVbXSk6IHZvaWQge1xyXG4gICAgLy8gTWF0Y2ggc2F2ZWQgc3RvcmVzIGJ5IHN0b3JlTmFtZVxyXG4gICAgY29uc3Qgc2F2ZWRTdG9yZU5hbWVzID0gbmV3IFNldChzYXZlZFN0b3Jlcy5tYXAocyA9PiBzLnN0b3JlTmFtZSkpO1xyXG4gICAgdGhpcy5zZWxlY3RlZFN0b3JlcyA9IHRoaXMuc3RvcmVPcHRpb25zLmZpbHRlcihvcHRpb24gPT4gXHJcbiAgICAgIHNhdmVkU3RvcmVOYW1lcy5oYXMob3B0aW9uLmxhYmVsKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJlc3RvcmVDbHVzdGVyU2VsZWN0aW9ucyhfc2F2ZWRTdG9yZXM6IFN0b3JlW10pOiB2b2lkIHtcclxuICAgIC8vIFJlc3RvcmUgY2x1c3RlciBzZWxlY3Rpb24gT05MWSBmcm9tIHNlbGVjdGVkQ2x1c3RlcnMgKG5vIGRlcml2YXRpb24gZnJvbSBzdG9yZXMpXHJcbiAgICBjb25zdCBzYXZlZENsdXN0ZXJzID0gdGhpcy5maW5kUmVwbGFjZURhdGE/LnNlbGVjdGVkQ2x1c3RlcnMgfHwgW107XHJcbiAgICBpZiAoIXNhdmVkQ2x1c3RlcnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZXMgPSBbXTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNhdmVkQ2x1c3RlcklkcyA9IG5ldyBTZXQoc2F2ZWRDbHVzdGVycy5tYXAoYyA9PiBjLmlkKSk7XHJcbiAgICBjb25zdCBzZWxlY3RlZENsdXN0ZXJzOiBTdG9yZU9wdGlvbltdID0gW107XHJcblxyXG4gICAgdGhpcy5jbHVzdGVyRGF0YS5mb3JFYWNoKChjbHVzdGVyOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHNhdmVkQ2x1c3Rlcklkcy5oYXMoY2x1c3Rlci5pZCkpIHtcclxuICAgICAgICBzZWxlY3RlZENsdXN0ZXJzLnB1c2goe1xyXG4gICAgICAgICAgaWQ6IGNsdXN0ZXIuaWQsXHJcbiAgICAgICAgICBsYWJlbDogY2x1c3Rlci5sYWJlbFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkU3RvcmVzID0gc2VsZWN0ZWRDbHVzdGVycztcclxuICB9XHJcblxyXG4gIG9uU3RvcmVzU2VsZWN0ZWQoc3RvcmVzOiBTdG9yZU9wdGlvbltdKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkU3RvcmVzID0gc3RvcmVzO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25SZXZpZXdBbmRSZXBsYWNlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLmZpbmRSZXBsYWNlRGF0YT8uX2lkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGZpbmQgcmVwbGFjZSBJRCBhdmFpbGFibGUnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNob3cgY29uZmlybWF0aW9uIG1vZGFsXHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQmF0Y2hDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgc2l6ZTogJ21kJyxcclxuICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICB3aW5kb3dDbGFzczogJ2JhdGNoLWNvbmZpcm1hdGlvbi1tb2RhbCdcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFBhc3Mgc3RvcmUgY291bnQgdG8gbW9kYWxcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnN0b3JlQ291bnQgPSB0aGlzLmdldFN0b3JlQ291bnQoKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2RhbFJlZi5yZXN1bHQ7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAvLyBVc2VyIGNvbmZpcm1lZCwgcHJvY2VlZCB3aXRoIGJhdGNoIHByb2Nlc3NcclxuICAgICAgICB0aGlzLnByb2NlZWRXaXRoQmF0Y2hQcm9jZXNzKCk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIC8vIFVzZXIgZGlzbWlzc2VkIHRoZSBtb2RhbFxyXG4gICAgICBjb25zb2xlLmxvZygnQmF0Y2ggY29uZmlybWF0aW9uIG1vZGFsIGRpc21pc3NlZCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwcm9jZWVkV2l0aEJhdGNoUHJvY2VzcygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maW5kUmVwbGFjZURhdGE/Ll9pZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdObyBmaW5kIHJlcGxhY2UgSUQgYXZhaWxhYmxlJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5iYXRjaFByb2Nlc3NpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgZmluZFJlcGxhY2VJZCA9IHRoaXMuZmluZFJlcGxhY2VEYXRhLl9pZDtcclxuICAgIFxyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmJhdGNoRmluZFJlcGxhY2UoeyBmaW5kUmVwbGFjZUlkIH0pXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5iYXRjaFByb2Nlc3NpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChyZXNwb25zZT8uY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIC8vIFJlZmV0Y2ggZmluZCByZXBsYWNlIGRhdGEgdG8gdXBkYXRlIFVJXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UubG9hZEFuZFNldEZpbmRSZXBsYWNlRGF0YUJ5SWQoZmluZFJlcGxhY2VJZCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gc3RhcnQgYmF0Y2ggZmluZCByZXBsYWNlOicsIHJlc3BvbnNlPy5tZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5iYXRjaFByb2Nlc3NpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN0YXJ0aW5nIGJhdGNoIGZpbmQgcmVwbGFjZTonLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQXBwbHkoKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWFyY2hNb2RlID0gdGhpcy5zZWxlY3RlZE1vZGUudmFsdWUgYXMgJ3N0b3JlJyB8ICdjbHVzdGVyJztcclxuICAgIGxldCBzdG9yZXM6IFN0b3JlW10gPSBbXTtcclxuICAgIGxldCBzZWxlY3RlZENsdXN0ZXJzOiBBcnJheTx7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfT4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgICBcclxuICAgIGlmIChzZWFyY2hNb2RlID09PSAnc3RvcmUnKSB7XHJcbiAgICAgIC8vIEZvciBzdG9yZSBtb2RlLCBjb252ZXJ0IHNlbGVjdGVkIHN0b3JlcyBkaXJlY3RseVxyXG4gICAgICBzdG9yZXMgPSB0aGlzLnNlbGVjdGVkU3RvcmVzLm1hcCgoc3RvcmVPcHRpb246IFN0b3JlT3B0aW9uKSA9PiAoe1xyXG4gICAgICAgIHN0b3JlTmFtZTogc3RvcmVPcHRpb24ubGFiZWwsXHJcbiAgICAgIH0pKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEZvciBjbHVzdGVyIG1vZGUsIHNhdmUgc2VsZWN0ZWQgY2x1c3RlcnMgYW5kIGV4dHJhY3QgYWxsIHN0b3JlcyBmcm9tIHNlbGVjdGVkIGNsdXN0ZXJzXHJcbiAgICAgIHNlbGVjdGVkQ2x1c3RlcnMgPSB0aGlzLnNlbGVjdGVkU3RvcmVzLm1hcCgoc3RvcmVPcHRpb246IFN0b3JlT3B0aW9uKSA9PiAoe1xyXG4gICAgICAgIGlkOiBzdG9yZU9wdGlvbi5pZCxcclxuICAgICAgICBsYWJlbDogc3RvcmVPcHRpb24ubGFiZWxcclxuICAgICAgfSkpO1xyXG4gICAgICBcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRDbHVzdGVySWRzID0gbmV3IFNldCh0aGlzLnNlbGVjdGVkU3RvcmVzLm1hcChzID0+IHMuaWQpKTtcclxuICAgICAgc3RvcmVzID0gW107XHJcbiAgICAgIFxyXG4gICAgICAvLyBGaW5kIHNlbGVjdGVkIGNsdXN0ZXJzIGFuZCBleHRyYWN0IHRoZWlyIHN0b3Jlc1xyXG4gICAgICB0aGlzLmNsdXN0ZXJEYXRhLmZvckVhY2goKGNsdXN0ZXI6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChzZWxlY3RlZENsdXN0ZXJJZHMuaGFzKGNsdXN0ZXIuaWQpICYmIGNsdXN0ZXIuc3RvcmVzICYmIEFycmF5LmlzQXJyYXkoY2x1c3Rlci5zdG9yZXMpKSB7XHJcbiAgICAgICAgICBjbHVzdGVyLnN0b3Jlcy5mb3JFYWNoKChzdG9yZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHN0b3Jlcy5wdXNoKHtcclxuICAgICAgICAgICAgICBzdG9yZU5hbWU6IHN0b3JlLmxhYmVsICxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSBkYXRhIHNlcnZpY2Ugd2l0aCBhbGwgY3VycmVudCB2YWx1ZXNcclxuICAgIGNvbnN0IHVwZGF0ZURhdGE6IGFueSA9IHtcclxuICAgICAgc2VhcmNoTW9kZTogc2VhcmNoTW9kZSxcclxuICAgICAgc3RvcmVzOiBzdG9yZXMsXHJcbiAgICAgIHN0b3JlQ291bnQ6IHN0b3Jlcy5sZW5ndGgsXHJcbiAgICAgIHRhcmdldDogdGhpcy50YXJnZXQudmFsdWUgYXMgJ21lcmNoJyB8ICd2bScgfCAnYm90aCcsXHJcbiAgICAgIGZpbmRQcm9tcHQ6IHRoaXMuZmluZFByb21wdC52YWx1ZSB8fCAnJyxcclxuICAgICAgcmVwbGFjZVByb21wdDogdGhpcy5yZXBsYWNlUHJvbXB0LnZhbHVlIHx8ICcnLFxyXG4gICAgICByZXBsYWNlQnJhbmQ6IHRoaXMuZ2V0UmVwbGFjZUJyYW5kU2VsZWN0aW9uKCksXHJcbiAgICAgIHJlcGxhY2VWbTogdGhpcy5nZXRSZXBsYWNlVm1TZWxlY3Rpb24oKVxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBBZGQgc2VsZWN0ZWRDbHVzdGVycyBvbmx5IHdoZW4gc2VhcmNoTW9kZSBpcyBjbHVzdGVyXHJcbiAgICBpZiAoc2VhcmNoTW9kZSA9PT0gJ2NsdXN0ZXInICYmIHNlbGVjdGVkQ2x1c3RlcnMpIHtcclxuICAgICAgdXBkYXRlRGF0YS5zZWxlY3RlZENsdXN0ZXJzID0gc2VsZWN0ZWRDbHVzdGVycztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLnVwZGF0ZURhdGEodXBkYXRlRGF0YSk7XHJcblxyXG4gICAgLy8gVHJpZ2dlciBzYXZlIGFzIGRyYWZ0XHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLnRyaWdnZXJTYXZlRHJhZnQoKTtcclxuICB9XHJcblxyXG4gIC8vIENhbnZhcyBzZXR1cCBtZXRob2RzXHJcbiAgc2V0dXBab29tSGFuZGxlcnMoY2FudmFzOiBmYWJyaWMuQ2FudmFzKTogdm9pZCB7XHJcbiAgICAvLyBEaXNhYmxlIG9iamVjdCBzZWxlY3Rpb24gZ2xvYmFsbHlcclxuICAgIGNhbnZhcy5zZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgIFxyXG4gICAgY2FudmFzLm9uKFwibW91c2U6d2hlZWxcIiwgKG9wdDogZmFicmljLlRFdmVudDxXaGVlbEV2ZW50PikgPT4ge1xyXG4gICAgICBjb25zdCBlID0gb3B0LmU7XHJcbiAgICAgIGlmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSB7XHJcbiAgICAgICAgY29uc3QgZGVsdGEgPSBlLmRlbHRhWTtcclxuICAgICAgICBsZXQgem9vbSA9IGNhbnZhcy5nZXRab29tKCk7XHJcbiAgICAgICAgem9vbSAqPSAwLjk5NSAqKiBkZWx0YTtcclxuICAgICAgICB6b29tID0gTWF0aC5tYXgoMC4wNSwgTWF0aC5taW4oem9vbSwgNSkpO1xyXG4gICAgICAgIGNhbnZhcy56b29tVG9Qb2ludCh7IHg6IGUub2Zmc2V0WCwgeTogZS5vZmZzZXRZIH0gYXMgZmFicmljLlBvaW50LCB6b29tKTtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgIGxldCBsYXN0UG9zWCA9IDA7XHJcbiAgICBsZXQgbGFzdFBvc1kgPSAwO1xyXG5cclxuICAgIGNhbnZhcy5vbihcIm1vdXNlOmRvd25cIiwgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgIC8vIEhhbmRsZSBmaXh0dXJlIGNsaWNrcyAtIHVzZSBmaW5kVGFyZ2V0IHRvIGdldCB0aGUgYWN0dWFsIGdyb3VwXHJcbiAgICAgIGlmIChvcHQudGFyZ2V0KSB7XHJcbiAgICAgICAgY29uc3Qgb2JqID0gb3B0LnRhcmdldCBhcyBhbnk7XHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhIGZpeHR1cmUgZ3JvdXAgb3IgbmVzdGVkIHdpdGhpbiBvbmVcclxuICAgICAgICBsZXQgZml4dHVyZUdyb3VwID0gb2JqO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIFRyYXZlcnNlIHVwIHRvIGZpbmQgdGhlIGZpeHR1cmUgZ3JvdXBcclxuICAgICAgICBsZXQgYXR0ZW1wdHMgPSAwO1xyXG4gICAgICAgIHdoaWxlIChmaXh0dXJlR3JvdXAgJiYgIShmaXh0dXJlR3JvdXAgYXMgYW55KS5maXh0dXJlSWQgJiYgIShmaXh0dXJlR3JvdXAgYXMgYW55KS5vYmpUeXBlICYmIGF0dGVtcHRzIDwgMTApIHtcclxuICAgICAgICAgIGlmICgoZml4dHVyZUdyb3VwIGFzIGFueSkucGFyZW50KSB7XHJcbiAgICAgICAgICAgIGZpeHR1cmVHcm91cCA9IChmaXh0dXJlR3JvdXAgYXMgYW55KS5wYXJlbnQ7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKChmaXh0dXJlR3JvdXAgYXMgYW55KS5ncm91cCkge1xyXG4gICAgICAgICAgICBmaXh0dXJlR3JvdXAgPSAoZml4dHVyZUdyb3VwIGFzIGFueSkuZ3JvdXA7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGF0dGVtcHRzKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIENoZWNrIGlmIHdlIGZvdW5kIGEgZml4dHVyZSBncm91cFxyXG4gICAgICAgIGlmICgoZml4dHVyZUdyb3VwIGFzIGFueSkub2JqVHlwZSA9PT0gXCJmaXh0dXJlXCIgfHwgKGZpeHR1cmVHcm91cCBhcyBhbnkpLmZpeHR1cmVJZCkge1xyXG4gICAgICAgICAgdGhpcy5vbkZpeHR1cmVDbGljayhmaXh0dXJlR3JvdXApO1xyXG4gICAgICAgICAgY2FudmFzLnNldEFjdGl2ZU9iamVjdChmaXh0dXJlR3JvdXApO1xyXG4gICAgICAgICAgY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gRm9yIG90aGVyIGVsZW1lbnRzLCBqdXN0IGhpZ2hsaWdodFxyXG4gICAgICAgIGNhbnZhcy5zZXRBY3RpdmVPYmplY3Qob3B0LnRhcmdldCk7XHJcbiAgICAgICAgY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIGlmICghb3B0LnRhcmdldCkge1xyXG4gICAgICAgIGlzRHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgICAgIGNhbnZhcy5zZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBlID0gb3B0LmU7XHJcbiAgICAgICAgbGFzdFBvc1ggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgbGFzdFBvc1kgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNhbnZhcy5vbihcIm1vdXNlOm1vdmVcIiwgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpc0RyYWdnaW5nICYmIGNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybSAmJiAhb3B0LnRhcmdldCkge1xyXG4gICAgICAgIGNvbnN0IGUgPSBvcHQuZTtcclxuICAgICAgICBjb25zdCB2cHQgPSBjYW52YXMudmlld3BvcnRUcmFuc2Zvcm07XHJcbiAgICAgICAgdnB0WzRdICs9IGUuY2xpZW50WCAtIGxhc3RQb3NYO1xyXG4gICAgICAgIHZwdFs1XSArPSBlLmNsaWVudFkgLSBsYXN0UG9zWTtcclxuICAgICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICAgIGxhc3RQb3NYID0gZS5jbGllbnRYO1xyXG4gICAgICAgIGxhc3RQb3NZID0gZS5jbGllbnRZO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjYW52YXMub24oXCJtb3VzZTp1cFwiLCAoKSA9PiB7XHJcbiAgICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgICAgY2FudmFzLnNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUHJldmVudCBhbGwgb2JqZWN0IG1vdmVtZW50ICh3YWxscywgZW50cmFuY2VzLCBmaXh0dXJlcywgb3RoZXIgZWxlbWVudHMpXHJcbiAgICBjYW52YXMub24oXCJvYmplY3Q6bW92aW5nXCIsIChlOiBhbnkpID0+IHtcclxuICAgICAgY29uc3Qgb2JqID0gZS50YXJnZXQ7XHJcbiAgICAgIGlmIChvYmogJiYgKG9iaiBhcyBhbnkpLm9ialR5cGUpIHtcclxuICAgICAgICBlLmUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLmUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgLy8gUmVzZXQgcG9zaXRpb25cclxuICAgICAgICBvYmouc2V0Q29vcmRzKCk7XHJcbiAgICAgICAgY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUHJldmVudCBhbGwgb2JqZWN0IG1vZGlmaWNhdGlvbnMgKHNjYWxpbmcsIHJvdGF0aW5nLCBldGMuKVxyXG4gICAgY2FudmFzLm9uKFwib2JqZWN0Om1vZGlmaWVkXCIsIChlOiBhbnkpID0+IHtcclxuICAgICAgY29uc3Qgb2JqID0gZS50YXJnZXQ7XHJcbiAgICAgIGlmIChvYmogJiYgKG9iaiBhcyBhbnkpLm9ialR5cGUpIHtcclxuICAgICAgICAvLyBSZXNldCBhbnkgY2hhbmdlc1xyXG4gICAgICAgIG9iai5zZXRDb29yZHMoKTtcclxuICAgICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBQcmV2ZW50IG9iamVjdCBzY2FsaW5nXHJcbiAgICBjYW52YXMub24oXCJvYmplY3Q6c2NhbGluZ1wiLCAoZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IG9iaiA9IGUudGFyZ2V0O1xyXG4gICAgICBpZiAob2JqICYmIChvYmogYXMgYW55KS5vYmpUeXBlKSB7XHJcbiAgICAgICAgZS5lLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5lLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIG9iai5zZXRDb29yZHMoKTtcclxuICAgICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBQcmV2ZW50IG9iamVjdCByb3RhdGluZ1xyXG4gICAgY2FudmFzLm9uKFwib2JqZWN0OnJvdGF0aW5nXCIsIChlOiBhbnkpID0+IHtcclxuICAgICAgY29uc3Qgb2JqID0gZS50YXJnZXQ7XHJcbiAgICAgIGlmIChvYmogJiYgKG9iaiBhcyBhbnkpLm9ialR5cGUpIHtcclxuICAgICAgICBlLmUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLmUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgb2JqLnNldENvb3JkcygpO1xyXG4gICAgICAgIGNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0U3RvcmVGaXh0dXJlcyhzdG9yZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5wcmV2aWV3Q2FudmFzKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignQ2FudmFzIG5vdCBpbml0aWFsaXplZCcpO1xyXG4gICAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jYW52YXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS5nZXRTdG9yZUZpeHR1cmVzKHsgaWQ6IFtzdG9yZUlkXSB9KVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IGFzeW5jIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFyZXM/LmRhdGE/LlswXT8uZmxvb3JzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5jYW52YXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nUGxhbm9ncmFtID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMucGxhbm9EYXRhID0gc3RydWN0dXJlZENsb25lKHJlcy5kYXRhWzBdKTtcclxuICAgICAgICAgIHRoaXMuZmxvb3JEYXRhID0gc3RydWN0dXJlZENsb25lKHJlcy5kYXRhWzBdLmZsb29yc1swXSk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIEFwcGx5IHN0b3JlZCBmaW5kUmVzcG9uc2VEYXRhIGFuZCByZXBsYWNlUmVzcG9uc2VEYXRhIGlmIGF2YWlsYWJsZSBmb3IgdGhpcyBzdG9yZVxyXG4gICAgICAgICAgLy8gVGhpcyB1cGRhdGVzIHRoZSBmbG9vckRhdGEgd2l0aCB0aGUgc3RvcmVkIGZpeHR1cmUgY2hhbmdlcyBhbmQgc2V0cyBzZWxlY3RlZEZpeHR1cmVEYXRhXHJcbiAgICAgICAgICB0aGlzLmFwcGx5U3RvcmVkUmVzcG9uc2VEYXRhKCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIE9wZW4gcGFuZWwgaWYgd2UgaGF2ZSBzZWxlY3RlZCBmaXh0dXJlIGRhdGFcclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gQ29sbGVjdCBhbGwgZml4dHVyZXMgZm9yIHByZXZpZXdcclxuICAgICAgICAgIHRoaXMuY29sbGVjdEFsbEZpeHR1cmVzKCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIEVuc3VyZSBjYW52YXMgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHJlbmRlcmluZ1xyXG4gICAgICAgICAgaWYgKCF0aGlzLnByZXZpZXdDYW52YXMpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQ2FudmFzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGlmICh0aGlzLnByZXZpZXdDYW52YXMpIHtcclxuICAgICAgICAgICAgLy8gUmVuZGVyIHRoZSBwbGFub2dyYW0gd2l0aCB0aGUgdXBkYXRlZCBmbG9vckRhdGEgKHdoaWNoIGluY2x1ZGVzIHN0b3JlZCByZXNwb25zZSBkYXRhKVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlckZsb29yKHRoaXMucHJldmlld0NhbnZhcyk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZ1BsYW5vZ3JhbSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgICAgICAgICAvLyBSZS1jZW50ZXIgYW5kIGhpZ2hsaWdodCB0aGUgc2VsZWN0ZWQgZml4dHVyZSBpZiBzdG9yZWQgcmVzcG9uc2UgZGF0YSBleGlzdHNcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMucHJldmlld0NhbnZhc0NvbnRhaW5lclJlZj8ubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemVDYW52YXModGhpcy5wcmV2aWV3Q2FudmFzLCB0aGlzLnByZXZpZXdDYW52YXNDb250YWluZXJSZWYpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maXRDYW52YXNUb0xheW91dEFuaW1hdGVkKHRoaXMucHJldmlld0NhbnZhcyk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vIEhpZ2hsaWdodCB0aGUgZml4dHVyZSBpZiB3ZSBoYXZlIHN0b3JlZCByZXNwb25zZSBkYXRhXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZpeHR1cmU/LmZpeHR1cmVJZCkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25GaXh0dXJlID0gdGhpcy5wcmV2aWV3Q2FudmFzLmdldE9iamVjdHMoKS5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqLm9ialR5cGUgPT09IFwiZml4dHVyZVwiICYmIG9iai5maXh0dXJlSWQgPT09IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVJZFxyXG4gICAgICAgICAgICAgICAgICApIGFzIGZhYnJpYy5Hcm91cCB8IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbkZpeHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodEZpeHR1cmUodGhpcy5wcmV2aWV3Q2FudmFzLCBhY3Rpb25GaXh0dXJlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgLy8gQXV0b21hdGljYWxseSB0cmlnZ2VyIGZpbmQgYW5kIHJlcGxhY2UgaWYgcHJvbXB0cyBhcmUgYXZhaWxhYmxlIGFuZCBzdG9yZSBkb2Vzbid0IGhhdmUgcmVzdWx0c1xyXG4gICAgICAgICAgICAgIHRoaXMuYXV0b0ZpbmRBbmRSZXBsYWNlSWZOZWVkZWQoKTtcclxuICAgICAgICAgICAgfSwgMzAwKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZ1BsYW5vZ3JhbSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nUGxhbm9ncmFtID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBwbGFubzonLCBlcnIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVzaXplQ2FudmFzKGNhbnZhczogZmFicmljLkNhbnZhcywgY29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pik6IHZvaWQge1xyXG4gICAgY29uc3QgY29udGFpbmVyRWwgPSBjb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuICAgIGNhbnZhcy5zZXREaW1lbnNpb25zKHtcclxuICAgICAgd2lkdGg6IGNvbnRhaW5lckVsLmNsaWVudFdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IGNvbnRhaW5lckVsLmNsaWVudEhlaWdodCxcclxuICAgIH0pO1xyXG4gICAgY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZml0Q2FudmFzVG9MYXlvdXRBbmltYXRlZChjYW52YXM6IGZhYnJpYy5DYW52YXMpIHtcclxuICAgIGlmICghY2FudmFzKSByZXR1cm47XHJcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLmdldEZ1bGxMYXlvdXRCb3VuZHMoY2FudmFzKTtcclxuICAgIGlmICghYm91bmRzLndpZHRoIHx8ICFib3VuZHMuaGVpZ2h0KSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgY2FudmFzVyA9IGNhbnZhcy5nZXRXaWR0aCgpO1xyXG4gICAgY29uc3QgY2FudmFzSCA9IGNhbnZhcy5nZXRIZWlnaHQoKTtcclxuICAgIGNvbnN0IHNjYWxlWCA9IGNhbnZhc1cgLyBib3VuZHMud2lkdGg7XHJcbiAgICBjb25zdCBzY2FsZVkgPSBjYW52YXNIIC8gYm91bmRzLmhlaWdodDtcclxuICAgIGNvbnN0IHRhcmdldFpvb20gPSBNYXRoLm1pbihzY2FsZVgsIHNjYWxlWSkgKiAwLjk7XHJcblxyXG4gICAgY29uc3QgdGFyZ2V0VnB0ID0gWy4uLihjYW52YXMudmlld3BvcnRUcmFuc2Zvcm0gfHwgWzEsIDAsIDAsIDEsIDAsIDBdKV0gYXMgZmFicmljLlRNYXQyRDtcclxuICAgIHRhcmdldFZwdFswXSA9IHRhcmdldFpvb207XHJcbiAgICB0YXJnZXRWcHRbM10gPSB0YXJnZXRab29tO1xyXG4gICAgdGFyZ2V0VnB0WzRdID0gY2FudmFzVyAvIDIgLSAoYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggLyAyKSAqIHRhcmdldFpvb207XHJcbiAgICB0YXJnZXRWcHRbNV0gPSBjYW52YXNIIC8gMiAtIChib3VuZHMudG9wICsgYm91bmRzLmhlaWdodCAvIDIpICogdGFyZ2V0Wm9vbTtcclxuXHJcbiAgICBjb25zdCBzdGFydFZwdCA9IFsuLi5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm0hXSBhcyBmYWJyaWMuVE1hdDJEO1xyXG5cclxuICAgIGZhYnJpYy51dGlsLmFuaW1hdGUoe1xyXG4gICAgICBzdGFydFZhbHVlOiAwLFxyXG4gICAgICBlbmRWYWx1ZTogMSxcclxuICAgICAgZHVyYXRpb246IDEwMCxcclxuICAgICAgZWFzaW5nOiBmYWJyaWMudXRpbC5lYXNlLmVhc2VPdXRDdWJpYyxcclxuICAgICAgb25DaGFuZ2U6ICh2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdnB0ID0gY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtITtcclxuICAgICAgICB2cHRbMF0gPSBzdGFydFZwdFswXSArICh0YXJnZXRWcHRbMF0gLSBzdGFydFZwdFswXSkgKiB2YWx1ZTtcclxuICAgICAgICB2cHRbM10gPSBzdGFydFZwdFszXSArICh0YXJnZXRWcHRbM10gLSBzdGFydFZwdFszXSkgKiB2YWx1ZTtcclxuICAgICAgICB2cHRbNF0gPSBzdGFydFZwdFs0XSArICh0YXJnZXRWcHRbNF0gLSBzdGFydFZwdFs0XSkgKiB2YWx1ZTtcclxuICAgICAgICB2cHRbNV0gPSBzdGFydFZwdFs1XSArICh0YXJnZXRWcHRbNV0gLSBzdGFydFZwdFs1XSkgKiB2YWx1ZTtcclxuICAgICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZ1bGxMYXlvdXRCb3VuZHMoY2FudmFzOiBmYWJyaWMuQ2FudmFzKSB7XHJcbiAgICBjb25zdCBvYmplY3RzID0gY2FudmFzLmdldE9iamVjdHMoKTtcclxuICAgIGlmICghb2JqZWN0cy5sZW5ndGgpIHJldHVybiB7IGxlZnQ6IDAsIHRvcDogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xyXG5cclxuICAgIGxldCBtaW5YID0gSW5maW5pdHksIG1pblkgPSBJbmZpbml0eSwgbWF4WCA9IC1JbmZpbml0eSwgbWF4WSA9IC1JbmZpbml0eTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IG9iaiBvZiBvYmplY3RzKSB7XHJcbiAgICAgIGNvbnN0IHJlY3QgPSBvYmouZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCByZWN0LmxlZnQpO1xyXG4gICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgcmVjdC50b3ApO1xyXG4gICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCk7XHJcbiAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCByZWN0LnRvcCArIHJlY3QuaGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geyBsZWZ0OiBtaW5YLCB0b3A6IG1pblksIHdpZHRoOiBtYXhYIC0gbWluWCwgaGVpZ2h0OiBtYXhZIC0gbWluWSB9O1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVuZGVyRmxvb3IoY2FudmFzOiBmYWJyaWMuQ2FudmFzKSB7XHJcbiAgICBhd2FpdCB0aGlzLmRyYXdJbml0aWFsQ29udGVudChjYW52YXMpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd0luaXRpYWxDb250ZW50KGNhbnZhczogZmFicmljLkNhbnZhcyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY2FudmFzLmNsZWFyKCk7XHJcbiAgICBhd2FpdCB0aGlzLmRyYXdMYXlvdXRFbGVtZW50cyhjYW52YXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gQXV0b21hdGljYWxseSB0cmlnZ2VyIGZpbmQgYW5kIHJlcGxhY2UgaWYgcHJvbXB0cyBhcmUgYXZhaWxhYmxlIGFuZCBzdG9yZSBkb2Vzbid0IGhhdmUgcmVzdWx0c1xyXG4gIHByaXZhdGUgYXV0b0ZpbmRBbmRSZXBsYWNlSWZOZWVkZWQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcgfHwgIXRoaXMuZmluZFJlcGxhY2VEYXRhKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBpZiBwcm9tcHRzIGFyZSBhdmFpbGFibGVcclxuICAgIGNvbnN0IGhhc0ZpbmRQcm9tcHQgPSB0aGlzLmZpbmRSZXBsYWNlRGF0YS5maW5kUHJvbXB0ICYmIHRoaXMuZmluZFJlcGxhY2VEYXRhLmZpbmRQcm9tcHQudHJpbSgpLmxlbmd0aCA+IDA7XHJcblxyXG4gICAgLy8gUmVxdWlyZSBhdCBsZWFzdCBmaW5kIHByb21wdCB0byBhdXRvLWFwcGx5XHJcbiAgICBpZiAoIWhhc0ZpbmRQcm9tcHQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGlmIGN1cnJlbnQgc3RvcmUgYWxyZWFkeSBoYXMgZmluZFJlc3BvbnNlRGF0YSBhbmQgcmVwbGFjZVJlc3BvbnNlRGF0YVxyXG4gICAgY29uc3Qgc3RvcmUgPSB0aGlzLmZpbmRSZXBsYWNlRGF0YS5zdG9yZXM/LmZpbmQoXHJcbiAgICAgIChzOiBTdG9yZSkgPT4gcy5zdG9yZU5hbWUgPT09IHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcuc3RvcmVOYW1lXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFdoZW4gc3dpdGNoaW5nIHN0b3Jlcywgd2Ugd2FudCB0byByZS1hcHBseSBmaW5kIGV2ZW4gaWYgdGhlIHN0b3JlIGFscmVhZHkgaGFzIGZpbmRSZXNwb25zZURhdGFcclxuICAgIC8vIFRoaXMgYWxsb3dzIGF1dG8tYXBwbHkgd2hlbiBvbmx5IGZpbmQgcHJvbXB0IGV4aXN0cyBhbmQgdXNlciBjaGFuZ2VzIHN0b3Jlc1xyXG4gICAgLy8gT25seSBza2lwIGlmIGJvdGggZmluZFJlc3BvbnNlRGF0YSBhbmQgcmVwbGFjZVJlc3BvbnNlRGF0YSBleGlzdCAoYWxyZWFkeSBmdWxseSBwcm9jZXNzZWQpXHJcbiAgICBpZiAoc3RvcmU/LmZpbmRSZXNwb25zZURhdGEgJiYgc3RvcmU/LnJlcGxhY2VSZXNwb25zZURhdGEpIHtcclxuICAgICAgLy8gU3RvcmUgYWxyZWFkeSBoYXMgYm90aCBmaW5kIGFuZCByZXBsYWNlIHJlc3VsdHMsIHNraXAgdG8gcHJlc2VydmUgdGhlIHN0YXRlXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTZXQgdGhlIHByb21wdHMgaW4gdGhlIGZvcm0gY29udHJvbHMgaWYgbm90IGFscmVhZHkgc2V0XHJcbiAgICBpZiAoIXRoaXMuZmluZFByb21wdC52YWx1ZSAmJiB0aGlzLmZpbmRSZXBsYWNlRGF0YS5maW5kUHJvbXB0KSB7XHJcbiAgICAgIHRoaXMuZmluZFByb21wdC5zZXRWYWx1ZSh0aGlzLmZpbmRSZXBsYWNlRGF0YS5maW5kUHJvbXB0LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIHRoaXMuaXNGaW5kUHJvbXB0RnJvbUFwaSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMucmVwbGFjZUJyYW5kLnZhbHVlICYmIHRoaXMuZmluZFJlcGxhY2VEYXRhLnJlcGxhY2VCcmFuZD8uX2lkKSB7XHJcbiAgICAgIHRoaXMucmVwbGFjZUJyYW5kLnNldFZhbHVlKHRoaXMuZmluZFJlcGxhY2VEYXRhLnJlcGxhY2VCcmFuZC5faWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5yZXBsYWNlVm0udmFsdWUgJiYgdGhpcy5maW5kUmVwbGFjZURhdGEucmVwbGFjZVZtPy5faWQpIHtcclxuICAgICAgdGhpcy5yZXBsYWNlVm0uc2V0VmFsdWUodGhpcy5maW5kUmVwbGFjZURhdGEucmVwbGFjZVZtLl9pZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEF1dG9tYXRpY2FsbHkgdHJpZ2dlciBmaW5kIGZpcnN0LCB0aGVuIHJlcGxhY2UgYWZ0ZXIgZmluZCBjb21wbGV0ZXMgKGlmIGEgdmFsaWQgcmVwbGFjZSBzZWxlY3Rpb24gZXhpc3RzKVxyXG4gICAgdGhpcy5hdXRvRmluZCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gQXV0byBmaW5kIC0gd2lsbCB0cmlnZ2VyIHJlcGxhY2UgYWZ0ZXIgY29tcGxldGlvblxyXG4gIHByaXZhdGUgYXV0b0ZpbmQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZmluZFByb21wdC52YWx1ZSB8fCAhdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maW5kTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgc2VsZWN0aW9uQ3JpdGVyaWE6IHRoaXMuZmluZFByb21wdC52YWx1ZSxcclxuICAgICAgc3RvcmVzOiBbdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldy5zdG9yZU5hbWVdLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2UuZmluZEZpeHR1cmUocGF5bG9hZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuZmluZExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgaWYgKHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlc3BvbnNlIGluZGljYXRlcyBcIk5PVCBGT1VORFwiXHJcbiAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzID09PSAnc3VjY2VzcycgJiYgcmVzLm1lc3NhZ2UgPT09ICdOT1QgRk9VTkQnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0V2FybmluZ1RvYXN0KCdObyBtYXRjaGluZyBmaXh0dXJlIGZvdW5kIGZvciB0aGUgZ2l2ZW4gcHJvbXB0Jyk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiByZXMuZGF0YSBleGlzdHMgYmVmb3JlIHByb2Nlc3NpbmdcclxuICAgICAgICAgICAgaWYgKCFyZXMuZGF0YSkge1xyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFdhcm5pbmdUb2FzdCgnTm8gbWF0Y2hpbmcgZml4dHVyZSBmb3VuZCBmb3IgdGhlIGdpdmVuIHByb21wdCcpO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVBaVJlc3BvbnNlRml4dHVyZShyZXMuZGF0YSk7XHJcbiAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBmb3VuZCBmaXh0dXJlIGZvciBwb3RlbnRpYWwgcmVwbGFjZSBvcGVyYXRpb25cclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSB7XHJcbiAgICAgICAgICAgICAgZml4dHVyZUlkOiByZXMuZGF0YS5faWQsXHJcbiAgICAgICAgICAgICAgZml4dHVyZVR5cGU6IHJlcy5kYXRhLmZpeHR1cmVUeXBlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSByZXMuZGF0YTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIFNhdmUgZmluZFJlc3BvbnNlRGF0YSB0byB0aGUgc3BlY2lmaWMgc3RvcmVcclxuICAgICAgICAgICAgdGhpcy5zYXZlRmluZFJlc3BvbnNlRGF0YShyZXMuZGF0YSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGZsb29yIGFuZCB3YWl0IGZvciBpdCB0byBjb21wbGV0ZVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckZsb29yKHRoaXMucHJldmlld0NhbnZhcykudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgY2FudmFzIHRvIGZ1bGx5IHJlbmRlciBiZWZvcmUgaGlnaGxpZ2h0aW5nXHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25GaXh0dXJlID0gdGhpcy5wcmV2aWV3Q2FudmFzLmdldE9iamVjdHMoKS5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+IG9iai5vYmpUeXBlID09PSBcImZpeHR1cmVcIiAmJiBvYmouZml4dHVyZUlkID09PSByZXMuZGF0YS5faWRcclxuICAgICAgICAgICAgICAgICkgYXMgZmFicmljLkdyb3VwIHwgdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbkZpeHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRGaXh0dXJlKHRoaXMucHJldmlld0NhbnZhcywgYWN0aW9uRml4dHVyZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vIEFmdGVyIGZpbmQgY29tcGxldGVzLCBhdXRvbWF0aWNhbGx5IHRyaWdnZXIgcmVwbGFjZSBvbmx5IGlmIGEgdmFsaWQgcmVwbGFjZSBzZWxlY3Rpb24gZXhpc3RzXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNSZXBsYWNlU2VsZWN0aW9uKCkpIHtcclxuICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvUmVwbGFjZSgpO1xyXG4gICAgICAgICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0sIDMwMCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZmluZExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gQXV0byByZXBsYWNlIC0gY2FsbGVkIGFmdGVyIGF1dG8gZmluZCBjb21wbGV0ZXNcclxuICBwcml2YXRlIGF1dG9SZXBsYWNlKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmhhc1JlcGxhY2VTZWxlY3Rpb24oKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gR2V0IHRoZSBmb3VuZCBmaXh0dXJlIElEIGZyb20gdGhlIHN0b3JlJ3MgZmluZFJlc3BvbnNlRGF0YSAobm90IHRoZSBjbGlja2VkIGZpeHR1cmUpXHJcbiAgICBjb25zdCBmb3VuZEZpeHR1cmVJZCA9IHRoaXMuZ2V0Q3VycmVudFN0b3JlRmluZFJlc3BvbnNlRGF0YSgpO1xyXG4gICAgaWYgKCFmb3VuZEZpeHR1cmVJZCkge1xyXG4gICAgICAvLyBGYWxsYmFjayB0byBzZWxlY3RlZCBmaXh0dXJlIGlmIG5vIGZpbmRSZXNwb25zZURhdGEgZXhpc3RzXHJcbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZEZpeHR1cmU/LmZpeHR1cmVJZCAmJiAhdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhPy5faWQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBVc2UgdGhlIGZvdW5kIGZpeHR1cmUgSUQgKGZyb20gZmluZFJlc3BvbnNlRGF0YSkgaW5zdGVhZCBvZiB0aGUgY2xpY2tlZCBmaXh0dXJlXHJcbiAgICBjb25zdCBmaXh0dXJlSWQgPSBmb3VuZEZpeHR1cmVJZCB8fCB0aGlzLnNlbGVjdGVkRml4dHVyZT8uZml4dHVyZUlkIHx8IHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YT8uX2lkO1xyXG5cclxuICAgIC8vIEdldCB0aGUgb3JpZ2luYWwgZml4dHVyZSBkYXRhIGZyb20gdGhlIGZvdW5kIGZpeHR1cmUgKG5vdCB0aGUgY2xpY2tlZCBvbmUpXHJcbiAgICBjb25zdCBmb3VuZEZpeHR1cmUgPSB0aGlzLmdldEZpeHR1cmVCeUlkRnJvbUZsb29yKGZpeHR1cmVJZCk7XHJcbiAgICBjb25zdCBvcmlnaW5hbEZpeHR1cmUgPSBmb3VuZEZpeHR1cmUgPyBzdHJ1Y3R1cmVkQ2xvbmUoZm91bmRGaXh0dXJlKSA6IG51bGw7XHJcblxyXG4gICAgdGhpcy5yZXBsYWNlTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICBmaXh0dXJlSWQ6IGZpeHR1cmVJZCxcclxuICAgICAgdXBkYXRlVHlwZTogdGhpcy50YXJnZXQudmFsdWUsXHJcbiAgICAgIHJlcGxhY2VCcmFuZDogdGhpcy5uZWVkc1JlcGxhY2VCcmFuZCgpID8gdGhpcy5nZXRSZXBsYWNlQnJhbmRTZWxlY3Rpb24oKSA6IG51bGwsXHJcbiAgICAgIHJlcGxhY2VWbTogdGhpcy5uZWVkc1JlcGxhY2VWbSgpID8gdGhpcy5nZXRSZXBsYWNlVm1TZWxlY3Rpb24oKSA6IG51bGwsXHJcbiAgICAgIHVwZGF0aW9uQ3JpdGVyaWE6IHRoaXMucmVwbGFjZVByb21wdC52YWx1ZSB8fCAnJyxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLnJlcGxhY2VGaXh0dXJlKHBheWxvYWQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlcGxhY2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIGlmIChyZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIC8vIE1hcmsgcmVwbGFjZSBhcyBleGVjdXRlZCB0byBkaXNhYmxlIHRoZSBidXR0b25cclxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlRXhlY3V0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgLy8gU3RvcmUgb3JpZ2luYWwgZml4dHVyZSBmb3IgYmVmb3JlL2FmdGVyIGNvbXBhcmlzb25cclxuICAgICAgICAgICAgLy8gT25seSBzdG9yZSBpZiBub3QgYWxyZWFkeSBpbiBtYXAgKHByZXNlcnZlIGluaXRpYWwgcGxhbm9ncmFtIGZpeHR1cmUpXHJcbiAgICAgICAgICAgIGlmIChvcmlnaW5hbEZpeHR1cmUgJiYgIXRoaXMub3JpZ2luYWxGaXh0dXJlc01hcC5oYXMoZml4dHVyZUlkKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxGaXh0dXJlc01hcC5zZXQoZml4dHVyZUlkLCBvcmlnaW5hbEZpeHR1cmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIFJlc3RvcmUgb3JpZ2luYWxGaXh0dXJlRGF0YSBmcm9tIG1hcCB0byBlbnN1cmUgaXQncyBhbHdheXMgdGhlIGluaXRpYWwgcGxhbm9ncmFtIGZpeHR1cmVcclxuICAgICAgICAgICAgY29uc3Qgc3RvcmVkT3JpZ2luYWwgPSB0aGlzLm9yaWdpbmFsRml4dHVyZXNNYXAuZ2V0KGZpeHR1cmVJZCk7XHJcbiAgICAgICAgICAgIGlmIChzdG9yZWRPcmlnaW5hbCkge1xyXG4gICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxGaXh0dXJlRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShzdG9yZWRPcmlnaW5hbCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQWlSZXNwb25zZUZpeHR1cmUocmVzLmRhdGEpO1xyXG5cclxuICAgICAgICAgICAgLy8gU2F2ZSByZXBsYWNlUmVzcG9uc2VEYXRhIHRvIHRoZSBzcGVjaWZpYyBzdG9yZVxyXG4gICAgICAgICAgICB0aGlzLnNhdmVSZXBsYWNlUmVzcG9uc2VEYXRhKHJlcy5kYXRhKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBzZWxlY3RlZCBmaXh0dXJlIGRhdGEgdG8gdGhlIGZvdW5kIGZpeHR1cmUgKGFmdGVyIHJlcGxhY2UpXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlID0ge1xyXG4gICAgICAgICAgICAgIGZpeHR1cmVJZDogcmVzLmRhdGEuX2lkLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVUeXBlOiByZXMuZGF0YS5maXh0dXJlVHlwZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gcmVzLmRhdGE7XHJcblxyXG4gICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGZsb29yIGFuZCB3YWl0IGZvciBpdCB0byBjb21wbGV0ZVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckZsb29yKHRoaXMucHJldmlld0NhbnZhcykudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgY2FudmFzIHRvIGZ1bGx5IHJlbmRlciBiZWZvcmUgaGlnaGxpZ2h0aW5nXHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBIaWdobGlnaHQgdGhlIGZvdW5kIGZpeHR1cmUgKG5vdCB0aGUgY2xpY2tlZCBvbmUpXHJcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25GaXh0dXJlID0gdGhpcy5wcmV2aWV3Q2FudmFzLmdldE9iamVjdHMoKS5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+IG9iai5vYmpUeXBlID09PSBcImZpeHR1cmVcIiAmJiBvYmouZml4dHVyZUlkID09PSByZXMuZGF0YS5faWRcclxuICAgICAgICAgICAgICAgICkgYXMgZmFicmljLkdyb3VwIHwgdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbkZpeHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRGaXh0dXJlKHRoaXMucHJldmlld0NhbnZhcywgYWN0aW9uRml4dHVyZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSwgMzAwKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXBsYWNlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jYW52YXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBGaW5kIGFuZCBSZXBsYWNlIGJ1dHRvbiBoYW5kbGVyc1xyXG4gIG9uRmluZCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maW5kUHJvbXB0LnZhbHVlIHx8ICF0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbmRMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBzZWxlY3Rpb25Dcml0ZXJpYTogdGhpcy5maW5kUHJvbXB0LnZhbHVlLFxyXG4gICAgICBzdG9yZXM6IFt0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3LnN0b3JlTmFtZV0sXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS5maW5kRml4dHVyZShwYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5maW5kTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jYW52YXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICBpZiAocmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVzcG9uc2UgaW5kaWNhdGVzIFwiTk9UIEZPVU5EXCJcclxuICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09ICdzdWNjZXNzJyAmJiByZXMubWVzc2FnZSA9PT0gJ05PVCBGT1VORCcpIHtcclxuICAgICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRXYXJuaW5nVG9hc3QoJ05vIG1hdGNoaW5nIGZpeHR1cmUgZm91bmQgZm9yIHRoZSBnaXZlbiBwcm9tcHQnKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHJlcy5kYXRhIGV4aXN0cyBiZWZvcmUgcHJvY2Vzc2luZ1xyXG4gICAgICAgICAgICBpZiAoIXJlcy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0V2FybmluZ1RvYXN0KCdObyBtYXRjaGluZyBmaXh0dXJlIGZvdW5kIGZvciB0aGUgZ2l2ZW4gcHJvbXB0Jyk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFpUmVzcG9uc2VGaXh0dXJlKHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgLy8gU3RvcmUgdGhlIGZvdW5kIGZpeHR1cmUgZm9yIHBvdGVudGlhbCByZXBsYWNlIG9wZXJhdGlvblxyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlSWQgPSByZXMuZGF0YS5faWQ7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlID0ge1xyXG4gICAgICAgICAgICAgIGZpeHR1cmVJZDogZml4dHVyZUlkLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVUeXBlOiByZXMuZGF0YS5maXh0dXJlVHlwZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBTdG9yZSB0aGUgb3JpZ2luYWwgZml4dHVyZSBmcm9tIGZsb29yRGF0YSBiZWZvcmUgYW55IG1vZGlmaWNhdGlvbnNcclxuICAgICAgICAgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gc2hvdyBCZWZvcmUvQWZ0ZXIgZXZlbiB3aGVuIG9ubHkgZmluZCBkYXRhIGV4aXN0c1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMub3JpZ2luYWxGaXh0dXJlc01hcC5oYXMoZml4dHVyZUlkKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZvdW5kRml4dHVyZSA9IHRoaXMuZ2V0Rml4dHVyZUJ5SWRGcm9tRmxvb3IoZml4dHVyZUlkKTtcclxuICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbEZpeHR1cmUgPSBmb3VuZEZpeHR1cmUgPyBzdHJ1Y3R1cmVkQ2xvbmUoZm91bmRGaXh0dXJlKSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgLy8gSWYgZm91bmQsIHN0b3JlIGl0IGluIHRoZSBtYXBcclxuICAgICAgICAgICAgICBpZiAob3JpZ2luYWxGaXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZXNNYXAuc2V0KGZpeHR1cmVJZCwgb3JpZ2luYWxGaXh0dXJlKTtcclxuICAgICAgICAgICAgICAgIC8vIFNldCBvcmlnaW5hbEZpeHR1cmVEYXRhIGZvciBkaXNwbGF5XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZURhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUob3JpZ2luYWxGaXh0dXJlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy8gSWYgYWxyZWFkeSBpbiBtYXAsIHJlc3RvcmUgaXRcclxuICAgICAgICAgICAgICBjb25zdCBzdG9yZWRPcmlnaW5hbCA9IHRoaXMub3JpZ2luYWxGaXh0dXJlc01hcC5nZXQoZml4dHVyZUlkKTtcclxuICAgICAgICAgICAgICBpZiAoc3RvcmVkT3JpZ2luYWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxGaXh0dXJlRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShzdG9yZWRPcmlnaW5hbCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBNYXJrIGZpbmQgYXMgZXhlY3V0ZWQgdG8gZGlzYWJsZSB0aGUgYnV0dG9uXHJcbiAgICAgICAgICAgIHRoaXMuZmluZEV4ZWN1dGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIFNhdmUgZmluZFJlc3BvbnNlRGF0YSB0byB0aGUgc3BlY2lmaWMgc3RvcmVcclxuICAgICAgICAgICAgdGhpcy5zYXZlRmluZFJlc3BvbnNlRGF0YShyZXMuZGF0YSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBSZW5kZXIgdGhlIGZsb29yIGFuZCB3YWl0IGZvciBpdCB0byBjb21wbGV0ZVxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckZsb29yKHRoaXMucHJldmlld0NhbnZhcykudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgY2FudmFzIHRvIGZ1bGx5IHJlbmRlciBiZWZvcmUgaGlnaGxpZ2h0aW5nXHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25GaXh0dXJlID0gdGhpcy5wcmV2aWV3Q2FudmFzLmdldE9iamVjdHMoKS5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAob2JqOiBhbnkpID0+IG9iai5vYmpUeXBlID09PSBcImZpeHR1cmVcIiAmJiBvYmouZml4dHVyZUlkID09PSByZXMuZGF0YS5faWRcclxuICAgICAgICAgICAgICAgICkgYXMgZmFicmljLkdyb3VwIHwgdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbkZpeHR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRGaXh0dXJlKHRoaXMucHJldmlld0NhbnZhcywgYWN0aW9uRml4dHVyZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSwgMzAwKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5maW5kTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jYW52YXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25SZXBsYWNlKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmhhc1JlcGxhY2VTZWxlY3Rpb24oKSkge1xyXG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRXYXJuaW5nVG9hc3QoXHJcbiAgICAgICAgdGhpcy5uZWVkc1JlcGxhY2VCcmFuZCgpICYmIHRoaXMubmVlZHNSZXBsYWNlVm0oKVxyXG4gICAgICAgICAgPyAnUGxlYXNlIHNlbGVjdCBhIGJyYW5kIGFuZCBhIFZNIHRvIHJlcGxhY2Ugd2l0aCdcclxuICAgICAgICAgIDogdGhpcy5uZWVkc1JlcGxhY2VCcmFuZCgpXHJcbiAgICAgICAgICAgID8gJ1BsZWFzZSBzZWxlY3QgYSBicmFuZCB0byByZXBsYWNlIHdpdGgnXHJcbiAgICAgICAgICAgIDogJ1BsZWFzZSBzZWxlY3QgYSBWTSB0byByZXBsYWNlIHdpdGgnXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBHZXQgdGhlIGZvdW5kIGZpeHR1cmUgSUQgZnJvbSB0aGUgc3RvcmUncyBmaW5kUmVzcG9uc2VEYXRhIChub3QgdGhlIGNsaWNrZWQgZml4dHVyZSlcclxuICAgIGNvbnN0IGZvdW5kRml4dHVyZUlkID0gdGhpcy5nZXRDdXJyZW50U3RvcmVGaW5kUmVzcG9uc2VEYXRhKCk7XHJcbiAgICBpZiAoIWZvdW5kRml4dHVyZUlkKSB7XHJcbiAgICAgIC8vIEZhbGxiYWNrIHRvIHNlbGVjdGVkIGZpeHR1cmUgaWYgbm8gZmluZFJlc3BvbnNlRGF0YSBleGlzdHNcclxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRml4dHVyZT8uZml4dHVyZUlkICYmICF0aGlzLnNlbGVjdGVkRml4dHVyZURhdGE/Ll9pZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFVzZSB0aGUgZm91bmQgZml4dHVyZSBJRCAoZnJvbSBmaW5kUmVzcG9uc2VEYXRhKSBpbnN0ZWFkIG9mIHRoZSBjbGlja2VkIGZpeHR1cmVcclxuICAgIGNvbnN0IGZpeHR1cmVJZCA9IGZvdW5kRml4dHVyZUlkIHx8IHRoaXMuc2VsZWN0ZWRGaXh0dXJlPy5maXh0dXJlSWQgfHwgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhPy5faWQ7XHJcblxyXG4gICAgLy8gR2V0IHRoZSBvcmlnaW5hbCBmaXh0dXJlIGRhdGEgZnJvbSB0aGUgZm91bmQgZml4dHVyZSAobm90IHRoZSBjbGlja2VkIG9uZSlcclxuICAgIGNvbnN0IGZvdW5kRml4dHVyZSA9IHRoaXMuZ2V0Rml4dHVyZUJ5SWRGcm9tRmxvb3IoZml4dHVyZUlkKTtcclxuICAgIGNvbnN0IG9yaWdpbmFsRml4dHVyZSA9IGZvdW5kRml4dHVyZSA/IHN0cnVjdHVyZWRDbG9uZShmb3VuZEZpeHR1cmUpIDogbnVsbDtcclxuXHJcbiAgICB0aGlzLnJlcGxhY2VMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XHJcbiAgICAgIGZpeHR1cmVJZDogZml4dHVyZUlkLFxyXG4gICAgICB1cGRhdGVUeXBlOiB0aGlzLnRhcmdldC52YWx1ZSxcclxuICAgICAgcmVwbGFjZUJyYW5kOiB0aGlzLm5lZWRzUmVwbGFjZUJyYW5kKCkgPyB0aGlzLmdldFJlcGxhY2VCcmFuZFNlbGVjdGlvbigpIDogbnVsbCxcclxuICAgICAgcmVwbGFjZVZtOiB0aGlzLm5lZWRzUmVwbGFjZVZtKCkgPyB0aGlzLmdldFJlcGxhY2VWbVNlbGVjdGlvbigpIDogbnVsbCxcclxuICAgICAgdXBkYXRpb25Dcml0ZXJpYTogdGhpcy5yZXBsYWNlUHJvbXB0LnZhbHVlIHx8ICcnLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2UucmVwbGFjZUZpeHR1cmUocGF5bG9hZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVwbGFjZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgaWYgKHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgLy8gTWFyayByZXBsYWNlIGFzIGV4ZWN1dGVkIHRvIGRpc2FibGUgdGhlIGJ1dHRvblxyXG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VFeGVjdXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBTdG9yZSBvcmlnaW5hbCBmaXh0dXJlIGZvciBiZWZvcmUvYWZ0ZXIgY29tcGFyaXNvblxyXG4gICAgICAgICAgICAvLyBPbmx5IHN0b3JlIGlmIG5vdCBhbHJlYWR5IGluIG1hcCAocHJlc2VydmUgaW5pdGlhbCBwbGFub2dyYW0gZml4dHVyZSlcclxuICAgICAgICAgICAgaWYgKG9yaWdpbmFsRml4dHVyZSAmJiAhdGhpcy5vcmlnaW5hbEZpeHR1cmVzTWFwLmhhcyhmaXh0dXJlSWQpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbEZpeHR1cmVzTWFwLnNldChmaXh0dXJlSWQsIG9yaWdpbmFsRml4dHVyZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gUmVzdG9yZSBvcmlnaW5hbEZpeHR1cmVEYXRhIGZyb20gbWFwIHRvIGVuc3VyZSBpdCdzIGFsd2F5cyB0aGUgaW5pdGlhbCBwbGFub2dyYW0gZml4dHVyZVxyXG4gICAgICAgICAgICBjb25zdCBzdG9yZWRPcmlnaW5hbCA9IHRoaXMub3JpZ2luYWxGaXh0dXJlc01hcC5nZXQoZml4dHVyZUlkKTtcclxuICAgICAgICAgICAgaWYgKHN0b3JlZE9yaWdpbmFsKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbEZpeHR1cmVEYXRhID0gc3RydWN0dXJlZENsb25lKHN0b3JlZE9yaWdpbmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVBaVJlc3BvbnNlRml4dHVyZShyZXMuZGF0YSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBTYXZlIHJlcGxhY2VSZXNwb25zZURhdGEgdG8gdGhlIHNwZWNpZmljIHN0b3JlXHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZVJlcGxhY2VSZXNwb25zZURhdGEocmVzLmRhdGEpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gVXBkYXRlIHNlbGVjdGVkIGZpeHR1cmUgZGF0YSB0byB0aGUgZm91bmQgZml4dHVyZSAoYWZ0ZXIgcmVwbGFjZSlcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSB7XHJcbiAgICAgICAgICAgICAgZml4dHVyZUlkOiByZXMuZGF0YS5faWQsXHJcbiAgICAgICAgICAgICAgZml4dHVyZVR5cGU6IHJlcy5kYXRhLmZpeHR1cmVUeXBlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSByZXMuZGF0YTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIFJlbmRlciB0aGUgZmxvb3IgYW5kIHdhaXQgZm9yIGl0IHRvIGNvbXBsZXRlXHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRmxvb3IodGhpcy5wcmV2aWV3Q2FudmFzKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAvLyBXYWl0IGZvciBjYW52YXMgdG8gZnVsbHkgcmVuZGVyIGJlZm9yZSBoaWdobGlnaHRpbmdcclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIEhpZ2hsaWdodCB0aGUgZm91bmQgZml4dHVyZSAobm90IHRoZSBjbGlja2VkIG9uZSlcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbkZpeHR1cmUgPSB0aGlzLnByZXZpZXdDYW52YXMuZ2V0T2JqZWN0cygpLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqLm9ialR5cGUgPT09IFwiZml4dHVyZVwiICYmIG9iai5maXh0dXJlSWQgPT09IHJlcy5kYXRhLl9pZFxyXG4gICAgICAgICAgICAgICAgKSBhcyBmYWJyaWMuR3JvdXAgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uRml4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodEZpeHR1cmUodGhpcy5wcmV2aWV3Q2FudmFzLCBhY3Rpb25GaXh0dXJlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9LCAzMDApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlcGxhY2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gZ2V0IGZpbmRSZXNwb25zZURhdGEgZm9yIGN1cnJlbnQgc3RvcmVcclxuICBnZXRDdXJyZW50U3RvcmVGaW5kUmVzcG9uc2VEYXRhKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLmZpbmRSZXBsYWNlRGF0YT8uc3RvcmVzIHx8ICF0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3KSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc3RvcmUgPSB0aGlzLmZpbmRSZXBsYWNlRGF0YS5zdG9yZXMuZmluZChcclxuICAgICAgKHM6IFN0b3JlKSA9PiBzLnN0b3JlTmFtZSA9PT0gdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldy5zdG9yZU5hbWVcclxuICAgICk7XHJcbiAgICByZXR1cm4gc3RvcmU/LmZpbmRSZXNwb25zZURhdGEgfHwgbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIFNhdmUgZmluZFJlc3BvbnNlRGF0YSB0byBzcGVjaWZpYyBzdG9yZSBhbmQgdHJpZ2dlciBzYXZlIGFzIGRyYWZ0XHJcbiAgcHJpdmF0ZSBzYXZlRmluZFJlc3BvbnNlRGF0YShyZXNwb25zZURhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmZpbmRSZXBsYWNlRGF0YSB8fCAhdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdXBkYXRlZFN0b3JlcyA9ICh0aGlzLmZpbmRSZXBsYWNlRGF0YS5zdG9yZXMgfHwgW10pLm1hcCgoc3RvcmU6IFN0b3JlKSA9PiB7XHJcbiAgICAgIGlmIChzdG9yZS5zdG9yZU5hbWUgPT09IHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcuc3RvcmVOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLnN0b3JlLFxyXG4gICAgICAgICAgZmluZFJlc3BvbnNlRGF0YTogcmVzcG9uc2VEYXRhPy5faWRcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBzdG9yZTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFVwZGF0ZSBsb2NhbCBmaW5kUmVwbGFjZURhdGEgaW1tZWRpYXRlbHlcclxuICAgIHRoaXMuZmluZFJlcGxhY2VEYXRhID0ge1xyXG4gICAgICAuLi50aGlzLmZpbmRSZXBsYWNlRGF0YSxcclxuICAgICAgc3RvcmVzOiB1cGRhdGVkU3RvcmVzXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgZGF0YSBzZXJ2aWNlXHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLnVwZGF0ZURhdGEoe1xyXG4gICAgICBzdG9yZXM6IHVwZGF0ZWRTdG9yZXNcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFRyaWdnZXIgc2F2ZSBhcyBkcmFmdFxyXG4gICAgdGhpcy5kYXRhU2VydmljZS50cmlnZ2VyU2F2ZURyYWZ0KCk7XHJcbiAgfVxyXG5cclxuICAvLyBTYXZlIHJlcGxhY2VSZXNwb25zZURhdGEgdG8gc3BlY2lmaWMgc3RvcmUgYW5kIHRyaWdnZXIgc2F2ZSBhcyBkcmFmdFxyXG4gIC8vIE9ubHkgc2F2ZXMgdm1Db25maWcgYW5kL29yIHNoZWxmQ29uZmlnIGJhc2VkIG9uIHRhcmdldFxyXG4gIHByaXZhdGUgc2F2ZVJlcGxhY2VSZXNwb25zZURhdGEocmVzcG9uc2VEYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maW5kUmVwbGFjZURhdGEgfHwgIXRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMudGFyZ2V0LnZhbHVlIGFzICdtZXJjaCcgfCAndm0nIHwgJ2JvdGgnO1xyXG4gICAgY29uc3QgcmVwbGFjZURhdGE6IHsgdm1Db25maWc/OiBhbnlbXTsgc2hlbGZDb25maWc/OiBhbnlbXSB9ID0ge307XHJcblxyXG4gICAgLy8gRXh0cmFjdCBvbmx5IHRoZSByZWxldmFudCBjb25maWdzIGJhc2VkIG9uIHRhcmdldFxyXG4gICAgaWYgKHRhcmdldCA9PT0gJ3ZtJyB8fCB0YXJnZXQgPT09ICdib3RoJykge1xyXG4gICAgICBpZiAocmVzcG9uc2VEYXRhPy52bUNvbmZpZykge1xyXG4gICAgICAgIHJlcGxhY2VEYXRhLnZtQ29uZmlnID0gcmVzcG9uc2VEYXRhLnZtQ29uZmlnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmICh0YXJnZXQgPT09ICdtZXJjaCcgfHwgdGFyZ2V0ID09PSAnYm90aCcpIHtcclxuICAgICAgaWYgKHJlc3BvbnNlRGF0YT8uc2hlbGZDb25maWcpIHtcclxuICAgICAgICByZXBsYWNlRGF0YS5zaGVsZkNvbmZpZyA9IHJlc3BvbnNlRGF0YS5zaGVsZkNvbmZpZztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHVwZGF0ZWRTdG9yZXMgPSAodGhpcy5maW5kUmVwbGFjZURhdGEuc3RvcmVzIHx8IFtdKS5tYXAoKHN0b3JlOiBTdG9yZSkgPT4ge1xyXG4gICAgICBpZiAoc3RvcmUuc3RvcmVOYW1lID09PSB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3LnN0b3JlTmFtZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5zdG9yZSxcclxuICAgICAgICAgIHJlcGxhY2VSZXNwb25zZURhdGE6IHJlcGxhY2VEYXRhXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gc3RvcmU7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBVcGRhdGUgbG9jYWwgZmluZFJlcGxhY2VEYXRhIGltbWVkaWF0ZWx5XHJcbiAgICB0aGlzLmZpbmRSZXBsYWNlRGF0YSA9IHtcclxuICAgICAgLi4udGhpcy5maW5kUmVwbGFjZURhdGEsXHJcbiAgICAgIHN0b3JlczogdXBkYXRlZFN0b3Jlc1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBVcGRhdGUgdGhlIGRhdGEgc2VydmljZVxyXG4gICAgdGhpcy5kYXRhU2VydmljZS51cGRhdGVEYXRhKHtcclxuICAgICAgc3RvcmVzOiB1cGRhdGVkU3RvcmVzXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBUcmlnZ2VyIHNhdmUgYXMgZHJhZnRcclxuICAgIHRoaXMuZGF0YVNlcnZpY2UudHJpZ2dlclNhdmVEcmFmdCgpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQWlSZXNwb25zZUZpeHR1cmUoZml4dHVyZTogYW55KSB7XHJcbiAgICBsZXQgbWF0Y2hGb3VuZCA9IGZhbHNlO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uW2ldO1xyXG4gICAgICBpZiAoZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ3dhbGwnICYmIEFycmF5LmlzQXJyYXkoZWxlbWVudC5maXh0dXJlcykpIHtcclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVsZW1lbnQuZml4dHVyZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIGNvbnN0IGZ4ID0gZWxlbWVudC5maXh0dXJlc1tqXTtcclxuICAgICAgICAgIGlmIChmeC5faWQgPT09IGZpeHR1cmUuX2lkKSB7XHJcbiAgICAgICAgICAgIC8vIFByZXNlcnZlIGV4aXN0aW5nIHZtQ29uZmlnIGlmIHRoZSBuZXcgZml4dHVyZSBkb2Vzbid0IGhhdmUgaXRcclxuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdWbUNvbmZpZyA9IGZ4LnZtQ29uZmlnIHx8IFtdO1xyXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkRml4dHVyZSA9IHsgXHJcbiAgICAgICAgICAgICAgLi4uZml4dHVyZSxcclxuICAgICAgICAgICAgICAvLyBQcmVzZXJ2ZSB2bUNvbmZpZyBmcm9tIGV4aXN0aW5nIGZpeHR1cmUgaWYgbmV3IGZpeHR1cmUgZG9lc24ndCBoYXZlIGl0XHJcbiAgICAgICAgICAgICAgdm1Db25maWc6IGZpeHR1cmUudm1Db25maWcgfHwgZXhpc3RpbmdWbUNvbmZpZ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uW2ldLmZpeHR1cmVzW2pdID0gdXBkYXRlZEZpeHR1cmU7XHJcbiAgICAgICAgICAgIG1hdGNoRm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZSA9IHVwZGF0ZWRGaXh0dXJlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobWF0Y2hGb3VuZCkgcmV0dXJuO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5mbG9vckRhdGE/LmNlbnRlckZpeHR1cmUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZnggPSB0aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZVtpXTtcclxuICAgICAgaWYgKGZ4Ll9pZCA9PT0gZml4dHVyZS5faWQpIHtcclxuICAgICAgICAvLyBQcmVzZXJ2ZSBleGlzdGluZyB2bUNvbmZpZyBpZiB0aGUgbmV3IGZpeHR1cmUgZG9lc24ndCBoYXZlIGl0XHJcbiAgICAgICAgY29uc3QgZXhpc3RpbmdWbUNvbmZpZyA9IGZ4LnZtQ29uZmlnIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRGaXh0dXJlID0geyBcclxuICAgICAgICAgIC4uLmZpeHR1cmUsXHJcbiAgICAgICAgICAvLyBQcmVzZXJ2ZSB2bUNvbmZpZyBmcm9tIGV4aXN0aW5nIGZpeHR1cmUgaWYgbmV3IGZpeHR1cmUgZG9lc24ndCBoYXZlIGl0XHJcbiAgICAgICAgICB2bUNvbmZpZzogZml4dHVyZS52bUNvbmZpZyB8fCBleGlzdGluZ1ZtQ29uZmlnXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlW2ldID0gdXBkYXRlZEZpeHR1cmU7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSB1cGRhdGVkRml4dHVyZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGlnaGxpZ2h0Rml4dHVyZShjYW52YXM6IGZhYnJpYy5DYW52YXMsIGdyb3VwOiBhbnksIGJsaW5rOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIHRoaXMucmVtb3ZlSGlnaGxpZ2h0KGNhbnZhcyk7XHJcbiAgICB0aGlzLmNhbmNlbEhpZ2hsaWdodEJsaW5rID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgY2VudGVyID0gZ3JvdXAuZ2V0Q2VudGVyUG9pbnQoKTtcclxuICAgIGNvbnN0IHJlYWxXaWR0aCA9IGdyb3VwLndpZHRoISAqIGdyb3VwLnNjYWxlWCE7XHJcbiAgICBjb25zdCByZWFsSGVpZ2h0ID0gZ3JvdXAuaGVpZ2h0ISAqIGdyb3VwLnNjYWxlWSE7XHJcblxyXG4gICAgY29uc3QgcmVjdCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IGNlbnRlci54LFxyXG4gICAgICB0b3A6IGNlbnRlci55LFxyXG4gICAgICB3aWR0aDogcmVhbFdpZHRoICsgOCxcclxuICAgICAgaGVpZ2h0OiByZWFsSGVpZ2h0ICsgOCxcclxuICAgICAgcng6IDUsXHJcbiAgICAgIHJ5OiA1LFxyXG4gICAgICBzdHJva2U6IFwiIzAwYWFmZlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMyxcclxuICAgICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIGFuZ2xlOiBncm91cC5hbmdsZSB8fCAwLFxyXG4gICAgICBvcGFjaXR5OiBibGluayA/IDAgOiAxLFxyXG4gICAgfSk7XHJcblxyXG4gICAgKHJlY3QgYXMgYW55KS5kYXRhID0geyB0eXBlOiBcImZpeHR1cmUtaGlnaGxpZ2h0XCIgfTtcclxuICAgIGNhbnZhcy5hZGQocmVjdCk7XHJcbiAgICBjYW52YXMubW92ZU9iamVjdFRvKHJlY3QsIGNhbnZhcy5nZXRPYmplY3RzKCkubGVuZ3RoIC0gMSk7XHJcbiAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgdGhpcy5hY3RpdmVIaWdobGlnaHQgPSByZWN0O1xyXG5cclxuICAgIGlmICghYmxpbmspIHJldHVybjtcclxuXHJcbiAgICBsZXQgY3ljbGVzID0gMDtcclxuICAgIGNvbnN0IGJsaW5rT25jZSA9ICgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuY2FuY2VsSGlnaGxpZ2h0QmxpbmspIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUhpZ2hsaWdodChjYW52YXMpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICByZWN0LmFuaW1hdGUoeyBvcGFjaXR5OiAxIH0sIHtcclxuICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgIG9uQ2hhbmdlOiAoKSA9PiBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpLFxyXG4gICAgICAgIG9uQ29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLmNhbmNlbEhpZ2hsaWdodEJsaW5rKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlSGlnaGxpZ2h0KGNhbnZhcyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlY3QuYW5pbWF0ZSh7IG9wYWNpdHk6IDAgfSwge1xyXG4gICAgICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgICAgICBvbkNoYW5nZTogKCkgPT4gY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKSxcclxuICAgICAgICAgICAgb25Db21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmNhbmNlbEhpZ2hsaWdodEJsaW5rKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUhpZ2hsaWdodChjYW52YXMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjeWNsZXMrKztcclxuICAgICAgICAgICAgICBpZiAoY3ljbGVzIDwgMjApIHtcclxuICAgICAgICAgICAgICAgIGJsaW5rT25jZSgpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2FuY2VsSGlnaGxpZ2h0QmxpbmspIHtcclxuICAgICAgICAgICAgICAgICAgcmVjdC5zZXQoeyBvcGFjaXR5OiAxIH0pO1xyXG4gICAgICAgICAgICAgICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIGJsaW5rT25jZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlSGlnaGxpZ2h0KGNhbnZhczogZmFicmljLkNhbnZhcykge1xyXG4gICAgdGhpcy5jYW5jZWxIaWdobGlnaHRCbGluayA9IHRydWU7XHJcbiAgICBjYW52YXMuZ2V0T2JqZWN0cygpLmZvckVhY2goKG9iaikgPT4ge1xyXG4gICAgICBpZiAoKG9iaiBhcyBhbnkpLmRhdGE/LnR5cGUgPT09IFwiZml4dHVyZS1oaWdobGlnaHRcIikge1xyXG4gICAgICAgIGNhbnZhcy5yZW1vdmUob2JqKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmFjdGl2ZUhpZ2hsaWdodCA9IG51bGw7XHJcbiAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gUGxhbm9ncmFtIHJlbmRlcmluZyBtZXRob2RzIChzaW1wbGlmaWVkIHZlcnNpb25zIGZyb20gY29sbGVjdGlvbi11cGRhdGUtYWkpXHJcbiAgdG9QaXhlbHModmFsdWU6IG51bWJlciwgdW5pdDogc3RyaW5nLCBkcGkgPSAyLjgpIHtcclxuICAgIGxldCBwaXhlbHM6IG51bWJlcjtcclxuICAgIGlmICh1bml0ID09PSBcIm1tXCIpIHtcclxuICAgICAgcGl4ZWxzID0gKHZhbHVlIC8gMjUuNCkgKiBkcGk7XHJcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09IFwiZnRcIikge1xyXG4gICAgICBwaXhlbHMgPSB2YWx1ZSAqIDEyICogZHBpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgdW5pdC4gVXNlICdtbScgb3IgJ2Z0Jy5cIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gTnVtYmVyKHBpeGVscy50b0ZpeGVkKDQpKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRyYXdMYXlvdXRFbGVtZW50cyhjYW52YXM6IGZhYnJpYy5DYW52YXMpIHtcclxuICAgIGlmICghdGhpcy5mbG9vckRhdGEpIHJldHVybjtcclxuICAgIFxyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24ubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uW2luZGV4XTtcclxuICAgICAgbGV0IHdhbGw7XHJcblxyXG4gICAgICBlbGVtZW50LnJlbGF0aXZlUG9zaXRpb24gPz89IHsgeDogMCwgeTogMCwgdW5pdDogXCJmdFwiIH07XHJcbiAgICAgIGNvbnN0IHggPSB0aGlzLnRvUGl4ZWxzKGVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi54LCBlbGVtZW50LnVuaXQpO1xyXG4gICAgICBjb25zdCB5ID0gdGhpcy50b1BpeGVscyhlbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueSwgZWxlbWVudC51bml0KTtcclxuXHJcbiAgICAgIGlmIChlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMud2FsbFRoaWNrbmVzcztcclxuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoZWxlbWVudC5kaXN0YW5jZSwgZWxlbWVudC51bml0KTtcclxuICAgICAgICB3YWxsID0gYXdhaXQgdGhpcy5kcmF3V2FsbChjYW52YXMsIHgsIHksIGhlaWdodCwgd2lkdGgsIGVsZW1lbnQpO1xyXG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwiZW50cmFuY2VcIikge1xyXG4gICAgICAgIHRoaXMuZHJhd0VudHJhbmNlKGNhbnZhcywgeCwgeSwgODAsIDc1LCA0MCwgZWxlbWVudCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgIGNvbnN0IGZpeHR1cmVHcm91cHM6IGZhYnJpYy5Hcm91cFtdID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBlbGVtZW50Py5maXh0dXJlcz8ubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIGNvbnN0IGZpeHR1cmUgPSBlbGVtZW50LmZpeHR1cmVzW2pdO1xyXG4gICAgICAgICAgY29uc3QgZnggPSB0aGlzLnRvUGl4ZWxzKGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi54LCBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdCk7XHJcbiAgICAgICAgICBjb25zdCBmeSA9IHRoaXMudG9QaXhlbHMoZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnksIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi51bml0KTtcclxuICAgICAgICAgIGNvbnN0IGZoID0gdGhpcy50b1BpeGVscyhmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0KTtcclxuICAgICAgICAgIGNvbnN0IGZ3ID0gdGhpcy50b1BpeGVscyhmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSwgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudW5pdCk7XHJcbiAgICAgICAgICBjb25zdCBmaXh0dXJlT2JqID0gYXdhaXQgdGhpcy5kcmF3Rml4dHVyZShjYW52YXMsIGZ4LCBmeSwgZmgsIGZ3LCBmaXh0dXJlKTtcclxuICAgICAgICAgIGZpeHR1cmVHcm91cHMucHVzaChmaXh0dXJlT2JqIGFzIGZhYnJpYy5Hcm91cCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZWxlbWVudC5pc0xvY2tlZCAmJiB3YWxsKSB7XHJcbiAgICAgICAgICBjYW52YXMucmVtb3ZlKHdhbGwpO1xyXG4gICAgICAgICAgZml4dHVyZUdyb3Vwcy5mb3JFYWNoKChmKSA9PiBjYW52YXMucmVtb3ZlKGYpKTtcclxuICAgICAgICAgIGNvbnN0IGNvbWJpbmVkR3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFt3YWxsLCAuLi5maXh0dXJlR3JvdXBzXSwge1xyXG4gICAgICAgICAgICBoYXNDb250cm9sczogZmFsc2UsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBsb2NrTW92ZW1lbnRYOiB0cnVlLFxyXG4gICAgICAgICAgICBsb2NrTW92ZW1lbnRZOiB0cnVlLFxyXG4gICAgICAgICAgICBsb2NrUm90YXRpb246IHRydWUsXHJcbiAgICAgICAgICAgIGxvY2tTY2FsaW5nWDogdHJ1ZSxcclxuICAgICAgICAgICAgbG9ja1NjYWxpbmdZOiB0cnVlLFxyXG4gICAgICAgICAgICBzdWJUYXJnZXRDaGVjazogdHJ1ZSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgY29tYmluZWRHcm91cC5zZXQoeyBpc0xvY2tlZDogdHJ1ZSB9KTtcclxuICAgICAgICAgIGNhbnZhcy5hZGQoY29tYmluZWRHcm91cCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVsZW1lbnQ/Lm90aGVyRWxlbWVudHM/Lmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICBjb25zdCBvdGhlckVsZW1lbnQgPSBlbGVtZW50Lm90aGVyRWxlbWVudHNbal07XHJcbiAgICAgICAgICBjb25zdCBveCA9IHRoaXMudG9QaXhlbHMob3RoZXJFbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueCwgXCJmdFwiKTtcclxuICAgICAgICAgIGNvbnN0IG95ID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi55LCBcImZ0XCIpO1xyXG4gICAgICAgICAgY29uc3Qgb2EgPSBvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi5hbmdsZTtcclxuICAgICAgICAgIGNvbnN0IG9oID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSwgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdCk7XHJcbiAgICAgICAgICBjb25zdCBvdyA9IHRoaXMudG9QaXhlbHMob3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSwgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC51bml0KTtcclxuICAgICAgICAgIHRoaXMuZHJhd090aGVyRWxlbWVudHNXaXRoTGFiZWwoY2FudmFzLCBveCwgb3ksIG9hLCBvdywgb2gsIG90aGVyRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZT8ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVbaV07XHJcbiAgICAgIGNvbnN0IHggPSB0aGlzLnRvUGl4ZWxzKGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi54LCBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdCk7XHJcbiAgICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi55LCBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdCk7XHJcbiAgICAgIGNvbnN0IGggPSB0aGlzLnRvUGl4ZWxzKGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSwgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQpO1xyXG4gICAgICBjb25zdCB3ID0gdGhpcy50b1BpeGVscyhmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSwgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudW5pdCk7XHJcbiAgICAgIGF3YWl0IHRoaXMuZHJhd0ZpeHR1cmUoY2FudmFzLCB4LCB5LCBoLCB3LCBmaXh0dXJlKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuZmxvb3JEYXRhPy5vdGhlckVsZW1lbnRzPy5sZW5ndGg7IGorKykge1xyXG4gICAgICBjb25zdCBvdGhlckVsZW1lbnQgPSB0aGlzLmZsb29yRGF0YS5vdGhlckVsZW1lbnRzW2pdO1xyXG4gICAgICBjb25zdCB4ID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi54LCBcImZ0XCIpO1xyXG4gICAgICBjb25zdCB5ID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi55LCBcImZ0XCIpO1xyXG4gICAgICBjb25zdCBhID0gb3RoZXJFbGVtZW50LnJlbGF0aXZlUG9zaXRpb24uYW5nbGU7XHJcbiAgICAgIGNvbnN0IGggPSB0aGlzLnRvUGl4ZWxzKG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLCBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0KTtcclxuICAgICAgY29uc3QgdyA9IHRoaXMudG9QaXhlbHMob3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSwgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC51bml0KTtcclxuICAgICAgdGhpcy5kcmF3T3RoZXJFbGVtZW50c1dpdGhMYWJlbChjYW52YXMsIHgsIHksIGEsIHcsIGgsIG90aGVyRWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkcmF3V2FsbChcclxuICAgIGNhbnZhczogZmFicmljLkNhbnZhcyxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIGhlaWdodDogbnVtYmVyLFxyXG4gICAgd2lkdGg6IG51bWJlcixcclxuICAgIGVsZW1lbnREYXRhOiBhbnlcclxuICApIHtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDU7XHJcbiAgICBjb25zdCBmaWxsQ29sb3IgPSBcIiNGNkZDRkZcIjtcclxuICAgIGNvbnN0IHN0cm9rZUNvbG9yID0gXCIjRDBENUREXCI7XHJcbiAgICBjb25zdCBsYWJlbENvbG9yID0gXCIjMDA5QkYzXCI7XHJcbiAgICBsZXQgdGV4dCA9IGAke3RoaXMudGl0bGVDYXNlLnRyYW5zZm9ybShlbGVtZW50RGF0YS5lbGVtZW50VHlwZSl9ICR7ZWxlbWVudERhdGEuZWxlbWVudE51bWJlclxyXG4gICAgICB9YDtcclxuXHJcbiAgICBjb25zdCB3YWxsID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogMCxcclxuICAgICAgdG9wOiAwLFxyXG4gICAgICB3aWR0aCxcclxuICAgICAgaGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBmaWxsOiBmaWxsQ29sb3IsXHJcbiAgICAgIHN0cm9rZTogc3Ryb2tlQ29sb3IsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgc3Ryb2tlVW5pZm9ybTogdHJ1ZSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGNlbnRlclggPSB3aWR0aCAvIDI7XHJcbiAgICBjb25zdCBjZW50ZXJZID0gaGVpZ2h0IC8gMjtcclxuICAgIGNvbnN0IGlzVmVydGljYWwgPSBoZWlnaHQgPiB3aWR0aDtcclxuXHJcbiAgICBjb25zdCBsYWJlbCA9IG5ldyBmYWJyaWMuRmFicmljVGV4dCh0ZXh0LCB7XHJcbiAgICAgIGxlZnQ6IGNlbnRlclgsXHJcbiAgICAgIHRvcDogY2VudGVyWSxcclxuICAgICAgZm9udFNpemU6IDEwLFxyXG4gICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIGFuZ2xlOiBpc1ZlcnRpY2FsID8gLTkwIDogMCxcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBhcnJvd0hlYWQgPSA1O1xyXG4gICAgY29uc3QgZWxlbWVudHM6IGZhYnJpYy5PYmplY3RbXSA9IFt3YWxsLCBsYWJlbF07XHJcblxyXG4gICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgY29uc3QgdGV4dFdpZHRoID0gbGFiZWwud2lkdGggfHwgMDtcclxuICAgICAgY29uc3QgdG9wQXJyb3dZID0gNTtcclxuICAgICAgY29uc3QgdG9wQXJyb3dFbmRZID0gY2VudGVyWSAtIHRleHRXaWR0aCAvIDIgLSA1O1xyXG5cclxuICAgICAgaWYgKHRvcEFycm93RW5kWSA+IHRvcEFycm93WSArIGFycm93SGVhZCkge1xyXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXHJcbiAgICAgICAgICBuZXcgZmFicmljLkxpbmUoW2NlbnRlclgsIHRvcEFycm93WSwgY2VudGVyWCwgdG9wQXJyb3dFbmRZXSwge1xyXG4gICAgICAgICAgICBzdHJva2U6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UcmlhbmdsZSh7XHJcbiAgICAgICAgICAgIGxlZnQ6IGNlbnRlclgsXHJcbiAgICAgICAgICAgIHRvcDogdG9wQXJyb3dZLFxyXG4gICAgICAgICAgICB3aWR0aDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgYW5nbGU6IDAsXHJcbiAgICAgICAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiYm90dG9tXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBib3R0b21BcnJvd1N0YXJ0WSA9IGNlbnRlclkgKyB0ZXh0V2lkdGggLyAyICsgNTtcclxuICAgICAgY29uc3QgYm90dG9tQXJyb3dFbmRZID0gaGVpZ2h0IC0gNTtcclxuXHJcbiAgICAgIGlmIChib3R0b21BcnJvd0VuZFkgPiBib3R0b21BcnJvd1N0YXJ0WSArIGFycm93SGVhZCkge1xyXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXHJcbiAgICAgICAgICBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgIFtjZW50ZXJYLCBib3R0b21BcnJvd1N0YXJ0WSwgY2VudGVyWCwgYm90dG9tQXJyb3dFbmRZXSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG5ldyBmYWJyaWMuVHJpYW5nbGUoe1xyXG4gICAgICAgICAgICBsZWZ0OiBjZW50ZXJYLFxyXG4gICAgICAgICAgICB0b3A6IGJvdHRvbUFycm93RW5kWSxcclxuICAgICAgICAgICAgd2lkdGg6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGFuZ2xlOiAxODAsXHJcbiAgICAgICAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwidG9wXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB0ZXh0V2lkdGggPSBsYWJlbC53aWR0aCB8fCAwO1xyXG4gICAgICBjb25zdCBsZWZ0QXJyb3dTdGFydFggPSA1O1xyXG4gICAgICBjb25zdCBsZWZ0QXJyb3dFbmRYID0gY2VudGVyWCAtIHRleHRXaWR0aCAvIDIgLSA1O1xyXG5cclxuICAgICAgaWYgKGxlZnRBcnJvd0VuZFggPiBsZWZ0QXJyb3dTdGFydFggKyBhcnJvd0hlYWQpIHtcclxuICAgICAgICBlbGVtZW50cy5wdXNoKFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5MaW5lKFtsZWZ0QXJyb3dTdGFydFgsIGNlbnRlclksIGxlZnRBcnJvd0VuZFgsIGNlbnRlclldLCB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBuZXcgZmFicmljLlRyaWFuZ2xlKHtcclxuICAgICAgICAgICAgbGVmdDogbGVmdEFycm93U3RhcnRYLFxyXG4gICAgICAgICAgICB0b3A6IGNlbnRlclksXHJcbiAgICAgICAgICAgIHdpZHRoOiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGhlaWdodDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBhbmdsZTogLTkwLFxyXG4gICAgICAgICAgICBmaWxsOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcmlnaHRBcnJvd1N0YXJ0WCA9IGNlbnRlclggKyB0ZXh0V2lkdGggLyAyICsgNTtcclxuICAgICAgY29uc3QgcmlnaHRBcnJvd0VuZFggPSB3aWR0aCAtIDU7XHJcblxyXG4gICAgICBpZiAocmlnaHRBcnJvd0VuZFggPiByaWdodEFycm93U3RhcnRYICsgYXJyb3dIZWFkKSB7XHJcbiAgICAgICAgZWxlbWVudHMucHVzaChcclxuICAgICAgICAgIG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgW3JpZ2h0QXJyb3dTdGFydFgsIGNlbnRlclksIHJpZ2h0QXJyb3dFbmRYLCBjZW50ZXJZXSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG5ldyBmYWJyaWMuVHJpYW5nbGUoe1xyXG4gICAgICAgICAgICBsZWZ0OiByaWdodEFycm93RW5kWCxcclxuICAgICAgICAgICAgdG9wOiBjZW50ZXJZLFxyXG4gICAgICAgICAgICB3aWR0aDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgYW5nbGU6IDkwLFxyXG4gICAgICAgICAgICBmaWxsOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBjb25zdCBncm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoZWxlbWVudHMsIHtcclxuICAgICAgbGVmdDogeCxcclxuICAgICAgdG9wOiB5LFxyXG4gICAgICBoYXNDb250cm9sczogZmFsc2UsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBsb2NrU2NhbGluZ1g6IHRydWUsXHJcbiAgICAgIGxvY2tTY2FsaW5nWTogdHJ1ZSxcclxuICAgICAgbG9ja1JvdGF0aW9uOiB0cnVlLFxyXG4gICAgICBsb2NrTW92ZW1lbnRYOiB0cnVlLFxyXG4gICAgICBsb2NrTW92ZW1lbnRZOiB0cnVlLFxyXG4gICAgICBldmVudGVkOiB0cnVlLFxyXG4gICAgICBob3ZlckN1cnNvcjogXCJkZWZhdWx0XCIsXHJcbiAgICAgIGFuZ2xlOiBlbGVtZW50RGF0YS5hbmdsZSxcclxuICAgICAgc3ViVGFyZ2V0Q2hlY2s6IHRydWUsXHJcbiAgICB9KSBhcyBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgIG9ialR5cGU6IHN0cmluZztcclxuICAgICAgZGF0YTogYW55O1xyXG4gICAgfTtcclxuXHJcbiAgICBncm91cC5vYmpUeXBlID0gZWxlbWVudERhdGEuZWxlbWVudFR5cGU7XHJcbiAgICBncm91cC5kYXRhID0gZWxlbWVudERhdGE7XHJcblxyXG5cclxuICAgIGNhbnZhcy5hZGQoZ3JvdXApO1xyXG5cclxuICAgIC8vIElmIG5ld2x5IGFkZGVkLCBmb2N1cyBpdCBvbmNlXHJcbiAgICBpZiAoKGVsZW1lbnREYXRhIGFzIGFueSk/Lm5ld0FkZGVkKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY2FudmFzLnNldEFjdGl2ZU9iamVjdChncm91cCk7XHJcbiAgICAgICAgY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgfSBjYXRjaCB7IH1cclxuICAgICAgZGVsZXRlIChlbGVtZW50RGF0YSBhcyBhbnkpLm5ld0FkZGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBncm91cDtcclxuICB9XHJcblxyXG4gIGRyYXdFbnRyYW5jZShcclxuICAgIGNhbnZhczogZmFicmljLkNhbnZhcyxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIHdpZHRoOiBudW1iZXIsXHJcbiAgICBoZWlnaHQ6IG51bWJlcixcclxuICAgIGFycm93V2lkdGg6IG51bWJlcixcclxuICAgIGVsZW1lbnREYXRhOiBhbnlcclxuICApIHtcclxuICAgIGNvbnN0IGJvZHlXaWR0aCA9IHdpZHRoIC0gYXJyb3dXaWR0aDtcclxuXHJcbiAgICBjb25zdCBwYXRoRGF0YSA9IFtcclxuICAgICAgYE0gMCAwYCxcclxuICAgICAgYEwgJHtib2R5V2lkdGh9IDBgLFxyXG4gICAgICBgTCAke2JvZHlXaWR0aH0gJHstaGVpZ2h0IC8gMn1gLFxyXG4gICAgICBgTCAke3dpZHRofSAke2hlaWdodCAvIDJ9YCxcclxuICAgICAgYEwgJHtib2R5V2lkdGh9ICR7aGVpZ2h0ICsgaGVpZ2h0IC8gMn1gLFxyXG4gICAgICBgTCAke2JvZHlXaWR0aH0gJHtoZWlnaHR9YCxcclxuICAgICAgYEwgMCAke2hlaWdodH1gLFxyXG4gICAgICBgWmAsXHJcbiAgICBdLmpvaW4oXCIgXCIpO1xyXG5cclxuICAgIGNvbnN0IGFycm93ID0gbmV3IGZhYnJpYy5QYXRoKHBhdGhEYXRhLCB7XHJcbiAgICAgIGZpbGw6IFwiIzAzQTlGNFwiLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gaGVpZ2h0IC0gNjtcclxuICAgIGNvbnN0IHRleHQgPSBuZXcgZmFicmljLlRleHQoXCJFbnRyYW5jZVwiLCB7XHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiQXJpYWxcIixcclxuICAgICAgZm9udFdlaWdodDogXCJib2xkXCIsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgYW5nbGU6IC05MCxcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgbGVmdDogMTUsXHJcbiAgICAgIHRvcDogaGVpZ2h0IC8gMixcclxuICAgICAgZm9udFNpemU6IDIwLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0ZXh0Qm91bmRzID0gdGV4dC5nZXRCb3VuZGluZ1JlY3QoKTtcclxuICAgIGlmICh0ZXh0Qm91bmRzLmhlaWdodCA+IG1heFRleHRIZWlnaHQpIHtcclxuICAgICAgY29uc3Qgc2NhbGUgPSBtYXhUZXh0SGVpZ2h0IC8gdGV4dEJvdW5kcy5oZWlnaHQ7XHJcbiAgICAgIHRleHQuc2V0KFwiZm9udFNpemVcIiwgdGV4dC5mb250U2l6ZSEgKiBzY2FsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFthcnJvdywgdGV4dF0sIHtcclxuICAgICAgbGVmdDogeCxcclxuICAgICAgdG9wOiB5LFxyXG4gICAgICBoYXNDb250cm9sczogZmFsc2UsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBsb2NrU2NhbGluZ1g6IHRydWUsXHJcbiAgICAgIGxvY2tTY2FsaW5nWTogdHJ1ZSxcclxuICAgICAgbG9ja1NjYWxpbmdGbGlwOiB0cnVlLFxyXG4gICAgICBsb2NrUm90YXRpb246IHRydWUsXHJcbiAgICAgIGxvY2tNb3ZlbWVudFg6IHRydWUsXHJcbiAgICAgIGxvY2tNb3ZlbWVudFk6IHRydWUsXHJcbiAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgIGhvdmVyQ3Vyc29yOiBcImRlZmF1bHRcIixcclxuICAgICAgYW5nbGU6IGVsZW1lbnREYXRhLmFuZ2xlLFxyXG4gICAgfSkgYXMgZmFicmljLkdyb3VwICYge1xyXG4gICAgICBvYmpUeXBlOiBzdHJpbmc7XHJcbiAgICAgIGRhdGE6IGFueTtcclxuICAgIH07XHJcblxyXG4gICAgZ3JvdXAub2JqVHlwZSA9IGVsZW1lbnREYXRhLmVsZW1lbnRUeXBlO1xyXG4gICAgZ3JvdXAuZGF0YSA9IGVsZW1lbnREYXRhO1xyXG5cclxuICAgIGNhbnZhcy5hZGQoZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd0ZpeHR1cmUoXHJcbiAgICBjYW52YXM6IGZhYnJpYy5DYW52YXMsXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBoZWlnaHQ6IG51bWJlcixcclxuICAgIHdpZHRoOiBudW1iZXIsXHJcbiAgICBmaXh0dXJlRGF0YTogYW55XHJcbiAgKSB7XHJcbiAgICAvLyBNYXRjaCBmaXh0dXJlIHBhbGV0dGUvbG9naWMgdXNlZCBpbiBgL21hbmFnZS9wbGFub2dyYW0vbWFuYWdlLXJvbGxvdXRgIChgcGxhbm8tcm9sbG91dC5jb21wb25lbnQudHNgKVxyXG5cclxuXHJcbiAgICBsZXQgcHJpbWFyeVN0cm9rZSA9IFwiI2E1YTZhOFwiO1xyXG4gICAgbGV0IHByaW1hcnlGaWxsID0gXCIjZjNmNGY4XCI7XHJcbiAgICBsZXQgaGVhZGVyQ29sb3IgPSBcIiMxMDE4MjhcIjtcclxuICAgIGxldCB2bUZpbGwgPSBcIiNhNWE2YThcIjtcclxuICAgIGxldCBmb290ZXJGaWxsID0gXCIjZjNmNGY4XCI7XHJcblxyXG4gICAgaWYgKGZpeHR1cmVEYXRhPy5jb21wbGV0ZSA9PT0gdHJ1ZSAmJiAhZml4dHVyZURhdGE/LmFwcHJvdmFsU3RhdHVzKSB7XHJcbiAgICAgIHByaW1hcnlTdHJva2UgPSBcIiM2Q0U5QTZcIjtcclxuICAgICAgcHJpbWFyeUZpbGwgPSBcIiM2Q0U5QTZcIjtcclxuICAgICAgZm9vdGVyRmlsbCA9IFwiIzZDRTlBNlwiO1xyXG4gICAgICB2bUZpbGwgPSBcIiM2OTM4RUZcIjtcclxuICAgICAgaGVhZGVyQ29sb3IgPSBcIiMxMDE4MjhcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZml4dHVyZURhdGE/Lmlzc3VlID09PSB0cnVlKSB7XHJcbiAgICAgIHByaW1hcnlTdHJva2UgPSBcIiNEOTJEMjBcIjtcclxuICAgICAgcHJpbWFyeUZpbGwgPSBcIiNEOTJEMjBcIjtcclxuICAgICAgaGVhZGVyQ29sb3IgPSBcIiNGRkZcIjtcclxuICAgICAgZm9vdGVyRmlsbCA9IFwiI0ZFRTRFMlwiO1xyXG4gICAgICB2bUZpbGwgPSBcIiM2OTM4RUZcIjtcclxuICAgIH1cclxuICAgIGlmIChmaXh0dXJlRGF0YS5maXh0dXJlTmFtZSA9PT0gXCJzcGFjZVwiKSByZXR1cm47XHJcbiAgICBjb25zdCByYWRpdXMgPSA1O1xyXG4gICAgY29uc3QgbWFpbkNvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IHgsXHJcbiAgICAgIHRvcDogeSxcclxuICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBwcmltYXJ5U3Ryb2tlLFxyXG4gICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgdG9wV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCB0b3BIZWlnaHQgPSAoMTUgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgdG9wWCA9IHggKyAod2lkdGggLSB0b3BXaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgdG9wWSA9IHkgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG5cclxuICAgIGNvbnN0IHRvcENvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IHRvcFgsXHJcbiAgICAgIHRvcDogdG9wWSxcclxuICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IHRvcEhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBwcmltYXJ5U3Ryb2tlLFxyXG4gICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgaW5uZXJCb3hIZWlnaHQgPSB0b3BIZWlnaHQgLyAyO1xyXG4gICAgY29uc3QgaW5uZXJUb3BCb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7dG9wWCArIHJhZGl1c30gJHt0b3BZfSBcclxuICAgICAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRoIC0gcmFkaXVzfSAke3RvcFl9IFxyXG4gICAgICAgICAgICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWX0gJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWSArIHJhZGl1c30gXHJcbiAgICAgICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgICAgIEwgJHt0b3BYfSAke3RvcFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICAgICAgTCAke3RvcFh9ICR7dG9wWSArIHJhZGl1c30gXHJcbiAgICAgICAgICAgICAgUSAke3RvcFh9ICR7dG9wWX0gJHt0b3BYICsgcmFkaXVzfSAke3RvcFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgc3Ryb2tlOiBwcmltYXJ5U3Ryb2tlLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgIGZpbGw6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCB0b3BUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICBgRml4dHVyZSAke2ZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlclxyXG4gICAgICAgID8gZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyICtcclxuICAgICAgICAoZml4dHVyZURhdGE/LmZpeHR1cmVOdW1iZXJcclxuICAgICAgICAgID8gXCIgLSBGWC1cIiArIGZpeHR1cmVEYXRhLmZpeHR1cmVOdW1iZXJcclxuICAgICAgICAgIDogXCJcIilcclxuICAgICAgICA6IFwibmV3XCJcclxuICAgICAgfWAsXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiB0b3BYICsgdG9wV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogdG9wWSArIGlubmVyQm94SGVpZ2h0IC8gMixcclxuICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICBmaWxsOiBcIiMxMDE4MjhcIixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogaW5uZXJCb3hIZWlnaHQsXHJcbiAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHNlY29uZEJveFkgPSB0b3BZICsgaW5uZXJCb3hIZWlnaHQ7XHJcblxyXG4gICAgY29uc3QgaW5uZXJCb3R0b21Cb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7dG9wWH0gJHtzZWNvbmRCb3hZfSBcclxuICAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WX0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAtIHJhZGl1c30gXHJcbiAgICAgICAgICBRICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gJHt0b3BYICsgdG9wV2lkdGggLSByYWRpdXNcclxuICAgICAgfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHJhZGl1c30gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgUSAke3RvcFh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSAke3RvcFh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC0gcmFkaXVzXHJcbiAgICAgIH0gXHJcbiAgICAgICAgICBMICR7dG9wWH0gJHtzZWNvbmRCb3hZfSBaYCxcclxuICAgICAge1xyXG4gICAgICAgIGZpbGw6IFwiIzM0NDA1NFwiLFxyXG4gICAgICAgIHN0cm9rZTogcHJpbWFyeVN0cm9rZSxcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgZm9udFNpemUgPSA1O1xyXG4gICAgbGV0IGJvdHRvbVRleHQ7XHJcblxyXG4gICAgY29uc3QgdGV4dENvbnRlbnQgPSBnZXRGaXh0dXJlQ2FudmFzTGFiZWwoZml4dHVyZURhdGEpO1xyXG5cclxuICAgIGNvbnN0IGNyZWF0ZUJvdHRvbVRleHQgPSAoZnM6IGFueSkgPT5cclxuICAgICAgbmV3IGZhYnJpYy5UZXh0Ym94KHRleHRDb250ZW50LCB7XHJcbiAgICAgICAgbGVmdDogdG9wWCArIHRvcFdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IHNlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgIGZpbGw6IFwiI0ZGRkZGRlwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICBkbyB7XHJcbiAgICAgIGJvdHRvbVRleHQgPSBjcmVhdGVCb3R0b21UZXh0KGZvbnRTaXplKTtcclxuICAgICAgZm9udFNpemUgLT0gMC41O1xyXG4gICAgfSB3aGlsZSAoYm90dG9tVGV4dC5oZWlnaHQgPiBpbm5lckJveEhlaWdodCAmJiBmb250U2l6ZSA+IDIpO1xyXG5cclxuICAgIGNvbnN0IG1pZFdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgY29uc3QgbWlkSGVpZ2h0ID0gKDc3IC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IG1pZFggPSB4ICsgKHdpZHRoIC0gbWlkV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IG1pZFkgPSB0b3BZICsgdG9wSGVpZ2h0ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuXHJcbiAgICBjb25zdCBtaWRDb250YWluZXIgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICB0b3A6IG1pZFksXHJcbiAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgaGVpZ2h0OiBtaWRIZWlnaHQsXHJcbiAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgIHN0cm9rZTogcHJpbWFyeVN0cm9rZSxcclxuICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHNoZWxmQ291bnQgPSBmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZz8ubGVuZ3RoO1xyXG4gICAgY29uc3QgYm94SGVpZ2h0ID0gbWlkSGVpZ2h0IC8gKHNoZWxmQ291bnQgKyAyKTtcclxuICAgIGNvbnN0IGZpcnN0Qm94WSA9IG1pZFk7XHJcblxyXG4gICAgY29uc3QgZmlyc3RCb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7bWlkWCArIHJhZGl1c30gJHtmaXJzdEJveFl9IFxyXG4gICAgICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGggLSByYWRpdXN9ICR7Zmlyc3RCb3hZfSBcclxuICAgICAgICAgICAgICBRICR7bWlkWCArIG1pZFdpZHRofSAke2ZpcnN0Qm94WX0gJHttaWRYICsgbWlkV2lkdGh9ICR7Zmlyc3RCb3hZICsgcmFkaXVzXHJcbiAgICAgIH0gXHJcbiAgICAgICAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aH0gJHtmaXJzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgICAgICAgIEwgJHttaWRYfSAke2ZpcnN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgICAgTCAke21pZFh9ICR7Zmlyc3RCb3hZICsgcmFkaXVzfSBcclxuICAgICAgICAgICAgICBRICR7bWlkWH0gJHtmaXJzdEJveFl9ICR7bWlkWCArIHJhZGl1c30gJHtmaXJzdEJveFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbDogcHJpbWFyeUZpbGwsXHJcbiAgICAgICAgc3Ryb2tlOiBwcmltYXJ5U3Ryb2tlLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGZpcnN0Qm94VGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveChcclxuICAgICAgYCR7Zml4dHVyZURhdGE/LmhlYWRlcj8ubGFiZWwgPyBmaXh0dXJlRGF0YS5oZWFkZXIubGFiZWwgOiBcIlwifWAsXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogZmlyc3RCb3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICBmb250U2l6ZTogNyxcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICBmaWxsOiBoZWFkZXJDb2xvcixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogYm94SGVpZ2h0LFxyXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBzaGVsdmVzOiBmYWJyaWMuT2JqZWN0W10gPSBbXTtcclxuICAgIGNvbnN0IHNoZWxmSGVpZ2h0ID0gbWlkSGVpZ2h0IC0gMiAqIGJveEhlaWdodDtcclxuXHJcbiAgICBpZiAoZml4dHVyZURhdGEucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMVwiKSB7XHJcbiAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQ7XHJcblxyXG4gICAgICBjb25zdCBzaGVsZiA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogc2hlbGZIZWlnaHQsXHJcbiAgICAgICAgLy8gc3Ryb2tlOiAnIzUxQzFGRicsXHJcbiAgICAgICAgc3Ryb2tlOiBwcmltYXJ5U3Ryb2tlLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCB0ZXh0ID0gZml4dHVyZURhdGE/LnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIgKyBcIikgfHwgXCJcIjtcclxuXHJcbiAgICAgIC8vIFdyYXAgdGV4dCB3aXRoaW4gZml4dHVyZSB3aWR0aCBhbmQgc2hyaW5rIHRvIGZpdCB2ZXJ0aWNhbCBzcGFjZVxyXG4gICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBtaWRXaWR0aCAqIDAuOTtcclxuICAgICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IHNoZWxmSGVpZ2h0ICogMC44O1xyXG4gICAgICBsZXQgZm9udFNpemVMMSA9IDY7XHJcblxyXG4gICAgICBjb25zdCBjcmVhdGVXcmFwcGVkVGV4dGJveCA9IChmczogbnVtYmVyKSA9PlxyXG4gICAgICAgIG5ldyBmYWJyaWMuVGV4dGJveCh0ZXh0LCB7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgdG9wOiBib3hZICsgc2hlbGZIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICB3aWR0aDogbWF4VGV4dFdpZHRoLFxyXG4gICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGxldCB3cmFwcGVkVGV4dCA9IGNyZWF0ZVdyYXBwZWRUZXh0Ym94KGZvbnRTaXplTDEpO1xyXG4gICAgICB3aGlsZSAod3JhcHBlZFRleHQuaGVpZ2h0ID4gbWF4VGV4dEhlaWdodCAmJiBmb250U2l6ZUwxID4gMikge1xyXG4gICAgICAgIGZvbnRTaXplTDEgLT0gMC41O1xyXG4gICAgICAgIHdyYXBwZWRUZXh0ID0gY3JlYXRlV3JhcHBlZFRleHRib3goZm9udFNpemVMMSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSAyO1xyXG4gICAgICBjb25zdCBiYWNrZ3JvdW5kID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogYm94WSArIHNoZWxmSGVpZ2h0IC8gMixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IE1hdGgubWluKG1heFRleHRXaWR0aCwgd3JhcHBlZFRleHQud2lkdGghKSArIHBhZGRpbmcsXHJcbiAgICAgICAgaGVpZ2h0OiB3cmFwcGVkVGV4dC5nZXRTY2FsZWRIZWlnaHQoKSArIDIsXHJcbiAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICByeDogMSxcclxuICAgICAgICByeTogMSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBzaGVsdmVzLnB1c2goc2hlbGYsIGJhY2tncm91bmQsIHdyYXBwZWRUZXh0KTtcclxuICAgIH0gZWxzZSBpZiAoZml4dHVyZURhdGEucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMlwiKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2hlbGZDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgYm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChpICsgMSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNoZWxmID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICAgIHN0cm9rZTogcHJpbWFyeVN0cm9rZSxcclxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzaGVsdmVzLnB1c2goc2hlbGYpO1xyXG5cclxuICAgICAgICBpZiAoZml4dHVyZURhdGEuc2hlbGZDb25maWc/LltpXS5zaGVsZlR5cGUgPT09IFwidHJheVwiKSB7XHJcbiAgICAgICAgICBjb25zdCB0cmF5Um93cyA9IGZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnPy5baV0udHJheVJvd3MgfHwgMTtcclxuICAgICAgICAgIGNvbnN0IHJvd1NwYWNpbmcgPSBib3hIZWlnaHQgLyB0cmF5Um93cztcclxuXHJcbiAgICAgICAgICBmb3IgKGxldCByID0gMTsgciA8IHRyYXlSb3dzOyByKyspIHtcclxuICAgICAgICAgICAgY29uc3QgbGluZVkgPSBib3hZICsgciAqIHJvd1NwYWNpbmc7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0cmF5TGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICBbbWlkWCwgbGluZVksIG1pZFggKyBtaWRXaWR0aCwgbGluZVldLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjOTk5XCIsXHJcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBzaGVsdmVzLnB1c2godHJheUxpbmUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdGV4dCA9XHJcbiAgICAgICAgICBmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZz8uW2ldLnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIgKyBcIikgfHwgXCJcIjtcclxuXHJcbiAgICAgICAgLy8gTDI6IFNpbmdsZS1saW5lIGVsbGlwc2lzIGFnYWluc3QgZnVsbCBzaGVsZiB3aWR0aFxyXG4gICAgICAgIGNvbnN0IGhvcml6b250YWxQYWRkaW5nID0gNjtcclxuICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBNYXRoLm1heCgwLCBtaWRXaWR0aCAtIGhvcml6b250YWxQYWRkaW5nKTtcclxuICAgICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gYm94SGVpZ2h0ICogMC44O1xyXG4gICAgICAgIGNvbnN0IGJhc2VGb250U2l6ZSA9IDU7XHJcblxyXG4gICAgICAgIGNvbnN0IG1lYXN1cmUgPSAodDogc3RyaW5nKSA9PlxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UZXh0KHQsIHtcclxuICAgICAgICAgICAgZm9udFNpemU6IGJhc2VGb250U2l6ZSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCBkaXNwbGF5VGV4dCA9IHRleHQ7XHJcbiAgICAgICAgbGV0IG1lYXN1cmVkID0gbWVhc3VyZShkaXNwbGF5VGV4dCk7XHJcblxyXG4gICAgICAgIGlmICgobWVhc3VyZWQud2lkdGggPz8gMCkgPiBtYXhUZXh0V2lkdGgpIHtcclxuICAgICAgICAgIGNvbnN0IGVsbGlwc2lzID0gXCIuLi5cIjtcclxuICAgICAgICAgIGxldCBsZWZ0SWR4ID0gMDtcclxuICAgICAgICAgIGxldCByaWdodElkeCA9IHRleHQubGVuZ3RoO1xyXG5cclxuICAgICAgICAgIHdoaWxlIChsZWZ0SWR4IDwgcmlnaHRJZHgpIHtcclxuICAgICAgICAgICAgY29uc3QgbWlkSWR4ID0gTWF0aC5mbG9vcigobGVmdElkeCArIHJpZ2h0SWR4KSAvIDIpO1xyXG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB0ZXh0LnNsaWNlKDAsIG1pZElkeCkgKyBlbGxpcHNpcztcclxuICAgICAgICAgICAgbWVhc3VyZWQgPSBtZWFzdXJlKGNhbmRpZGF0ZSk7XHJcbiAgICAgICAgICAgIGlmICgobWVhc3VyZWQud2lkdGggPz8gMCkgPiBtYXhUZXh0V2lkdGgpIHtcclxuICAgICAgICAgICAgICByaWdodElkeCA9IG1pZElkeDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBsZWZ0SWR4ID0gbWlkSWR4ICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZGlzcGxheVRleHQgPSB0ZXh0LnNsaWNlKDAsIE1hdGgubWF4KDAsIGxlZnRJZHggLSAxKSkgKyBlbGxpcHNpcztcclxuICAgICAgICAgIG1lYXN1cmVkID0gbWVhc3VyZShkaXNwbGF5VGV4dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBiYWNrZ3JvdW5kID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICB0b3A6IGJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IE1hdGgubWluKG1heFRleHRIZWlnaHQsIG1lYXN1cmVkLmhlaWdodCA/PyAxMCkgKyAyLFxyXG4gICAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICByeDogMSxcclxuICAgICAgICAgIHJ5OiAxLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBmaW5hbFRleHQgPSBuZXcgZmFicmljLlRleHQoZGlzcGxheVRleHQsIHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICB0b3A6IGJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBmb250U2l6ZTogYmFzZUZvbnRTaXplLFxyXG4gICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2hlbHZlcy5wdXNoKGJhY2tncm91bmQsIGZpbmFsVGV4dCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoZml4dHVyZURhdGEucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMM1wiKSB7XHJcbiAgICAgIGNvbnN0IHNlcXVlbnRpYWxHcm91cHM6IHsgem9uZTogc3RyaW5nOyBzaGVsdmVzOiBhbnlbXSB9W10gPSBbXTtcclxuXHJcbiAgICAgIGxldCBwcmV2aW91c1pvbmU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBzaGVsZiBvZiBmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZykge1xyXG4gICAgICAgIGNvbnN0IHpvbmUgPSBzaGVsZi56b25lIHx8IFwiVW5rbm93blwiO1xyXG4gICAgICAgIGlmICh6b25lICE9PSBwcmV2aW91c1pvbmUpIHtcclxuICAgICAgICAgIHNlcXVlbnRpYWxHcm91cHMucHVzaCh7IHpvbmUsIHNoZWx2ZXM6IFtzaGVsZl0gfSk7XHJcbiAgICAgICAgICBwcmV2aW91c1pvbmUgPSB6b25lO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzZXF1ZW50aWFsR3JvdXBzW3NlcXVlbnRpYWxHcm91cHMubGVuZ3RoIC0gMV0uc2hlbHZlcy5wdXNoKHNoZWxmKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBjdXJyZW50U2hlbGZJbmRleCA9IDA7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIHNlcXVlbnRpYWxHcm91cHMpIHtcclxuICAgICAgICBjb25zdCB7IHpvbmUsIHNoZWx2ZXM6IHNoZWx2ZXNJbkdyb3VwIH0gPSBncm91cDtcclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBTdGFydEluZGV4ID0gY3VycmVudFNoZWxmSW5kZXg7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBMZW5ndGggPSBzaGVsdmVzSW5Hcm91cC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwVG9wWSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChncm91cFN0YXJ0SW5kZXggKyAxKTtcclxuICAgICAgICBjb25zdCBncm91cEJvdHRvbVkgPSBncm91cFRvcFkgKyBib3hIZWlnaHQgKiBncm91cExlbmd0aDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzaGVsdmVzSW5Hcm91cC5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgY29uc3Qgc2hlbGZEYXRhID0gc2hlbHZlc0luR3JvdXBbal07XHJcbiAgICAgICAgICBjb25zdCBib3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKGN1cnJlbnRTaGVsZkluZGV4ICsgMSk7XHJcblxyXG4gICAgICAgICAgY29uc3Qgc2hlbGZSZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICAgICAgdG9wOiBib3hZLFxyXG4gICAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogYm94SGVpZ2h0LFxyXG4gICAgICAgICAgICBzdHJva2U6IHByaW1hcnlTdHJva2UsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2goc2hlbGZSZWN0KTtcclxuXHJcbiAgICAgICAgICBpZiAoc2hlbGZEYXRhLnNoZWxmVHlwZSA9PT0gXCJ0cmF5XCIpIHtcclxuICAgICAgICAgICAgY29uc3QgdHJheVJvd3MgPSBzaGVsZkRhdGEudHJheVJvd3MgfHwgMDtcclxuICAgICAgICAgICAgY29uc3QgcHJvZHVjdFBlclNoZWxmID0gc2hlbGZEYXRhLnByb2R1Y3RQZXJTaGVsZiB8fCAwO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgcm93U3BhY2luZyA9IGJveEhlaWdodCAvIHRyYXlSb3dzO1xyXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5TcGFjaW5nID0gbWlkV2lkdGggLyBwcm9kdWN0UGVyU2hlbGY7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCByID0gMTsgciA8IHRyYXlSb3dzOyByKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBsaW5lWSA9IGJveFkgKyByICogcm93U3BhY2luZztcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgdHJheUxpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgICBbbWlkWCwgbGluZVksIG1pZFggKyBtaWRXaWR0aCwgbGluZVldLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBzdHJva2U6IFwiIzk5OVwiLFxyXG4gICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHRyYXlMaW5lKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgYyA9IDE7IGMgPCBwcm9kdWN0UGVyU2hlbGY7IGMrKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGxpbmVYID0gbWlkWCArIGMgKiBjb2x1bW5TcGFjaW5nO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbExpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgICBbbGluZVgsIGJveFksIGxpbmVYLCBib3hZICsgYm94SGVpZ2h0XSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh2ZXJ0aWNhbExpbmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY3VycmVudFNoZWxmSW5kZXgrKztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwQm90dG9tTGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgIFttaWRYLCBncm91cEJvdHRvbVksIG1pZFggKyBtaWRXaWR0aCwgZ3JvdXBCb3R0b21ZXSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgc3Ryb2tlOiBwcmltYXJ5U3Ryb2tlLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHNoZWx2ZXMucHVzaChncm91cEJvdHRvbUxpbmUpO1xyXG5cclxuICAgICAgICBpZiAoZml4dHVyZURhdGEuZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgICBjb25zdCBsYWJlbFBhZGRpbmcgPSAyO1xyXG4gICAgICAgICAgY29uc3QgbGFiZWxUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KHpvbmUsIHtcclxuICAgICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC0gbGFiZWxQYWRkaW5nLFxyXG4gICAgICAgICAgICB0b3A6IGdyb3VwQm90dG9tWSxcclxuICAgICAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICAgICAgZmlsbDogXCIjNzA3MDcwXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwicmlnaHRcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJib3R0b21cIixcclxuICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgICAgdGV4dEFsaWduOiBcInJpZ2h0XCIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2gobGFiZWxUZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyWCA9IG1pZFggKyBtaWRXaWR0aCAvIDI7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJZID0gZ3JvdXBUb3BZICsgKGdyb3VwQm90dG9tWSAtIGdyb3VwVG9wWSkgLyAyO1xyXG5cclxuICAgICAgICBjb25zdCBzZWN0aW9uQnJhbmRzID0gbmV3IFNldCgpO1xyXG5cclxuICAgICAgICBzaGVsdmVzSW5Hcm91cD8uZm9yRWFjaCgoc2hlbGYpID0+IHtcclxuICAgICAgICAgIHNoZWxmLnByb2R1Y3RCcmFuZE5hbWU/LmZvckVhY2goKGJyYW5kOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgc2VjdGlvbkJyYW5kcy5hZGQoYnJhbmQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChbLi4uc2VjdGlvbkJyYW5kc10ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gWy4uLnNlY3Rpb25CcmFuZHNdLmpvaW4oXCIgKyBcIik7XHJcbiAgICAgICAgICBjb25zdCBwYWRkaW5nID0gMjtcclxuICAgICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgY29uc3QgcmVjdFdpZHRoID0gbWlkV2lkdGggKiAwLjk7XHJcbiAgICAgICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gMjA7XHJcblxyXG4gICAgICAgICAgbGV0IGZvbnRTaXplID0gNjtcclxuICAgICAgICAgIGxldCB3cmFwcGVkVGV4dDtcclxuXHJcbiAgICAgICAgICBjb25zdCBjcmVhdGVUZXh0Ym94ID0gKGZzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBmYWJyaWMuVGV4dGJveCh0ZXh0LCB7XHJcbiAgICAgICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjQwMFwiLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiBtYXhUZXh0V2lkdGgsXHJcbiAgICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBmaWxsOiBcIiMxMDE4MjhcIixcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICBsZWZ0OiBncm91cENlbnRlclgsXHJcbiAgICAgICAgICAgICAgdG9wOiBncm91cENlbnRlclksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIHdyYXBwZWRUZXh0ID0gY3JlYXRlVGV4dGJveChmb250U2l6ZSk7XHJcbiAgICAgICAgICAgIGZvbnRTaXplIC09IDAuNTtcclxuICAgICAgICAgIH0gd2hpbGUgKHdyYXBwZWRUZXh0LmhlaWdodCA+IG1heFRleHRIZWlnaHQgJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICAgICAgICBjb25zdCByZWN0SGVpZ2h0ID0gd3JhcHBlZFRleHQuZ2V0U2NhbGVkSGVpZ2h0KCkgKyBwYWRkaW5nO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyVGV4dCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgIGxlZnQ6IGdyb3VwQ2VudGVyWCxcclxuICAgICAgICAgICAgdG9wOiBncm91cENlbnRlclksXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiByZWN0V2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogcmVjdEhlaWdodCxcclxuICAgICAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByeDogMSxcclxuICAgICAgICAgICAgcnk6IDEsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2goZ3JvdXBDZW50ZXJUZXh0LCB3cmFwcGVkVGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpeHR1cmVEYXRhPy52bUNvbmZpZz8ubGVuZ3RoKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZml4dHVyZURhdGEudm1Db25maWcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCB2bSA9IGZpeHR1cmVEYXRhLnZtQ29uZmlnW2ldO1xyXG5cclxuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdm0uc3RhcnRZUG9zaXRpb24gLSAxO1xyXG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdm0uZW5kWVBvc2l0aW9uIC0gMTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2hlbGZUb3BZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKHN0YXJ0SW5kZXggKyAxKTtcclxuICAgICAgICBjb25zdCBzaGVsZkhlaWdodFNwYW4gPSBib3hIZWlnaHQgKiAoZW5kSW5kZXggLSBzdGFydEluZGV4ICsgMSk7XHJcblxyXG4gICAgICAgIGxldCB2bUhlaWdodFB4OiBudW1iZXIgPSBzaGVsZkhlaWdodFNwYW47XHJcbiAgICAgICAgbGV0IHk6IG51bWJlciA9IHNoZWxmVG9wWTtcclxuXHJcbiAgICAgICAgaWYgKHZtLnlab25lICYmIHZtLnlab25lICE9PSBcInN0cmV0Y2hcIikge1xyXG4gICAgICAgICAgdm1IZWlnaHRQeCA9IHNoZWxmSGVpZ2h0U3BhbiAvIDM7XHJcblxyXG4gICAgICAgICAgc3dpdGNoICh2bS55Wm9uZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwidG9wXCI6XHJcbiAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFkgKyB2bUhlaWdodFB4O1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiYm90dG9tXCI6XHJcbiAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWSArIDIgKiB2bUhlaWdodFB4O1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgeCA9IG1pZFg7XHJcbiAgICAgICAgbGV0IHdpZHRoID0gbWlkV2lkdGg7XHJcblxyXG4gICAgICAgIGlmICghdm0ueFpvbmUgfHwgdm0ueFpvbmUgPT09IFwic3RyZXRjaFwiKSB7XHJcbiAgICAgICAgICB3aWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgeCA9IG1pZFg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHNlY3Rpb25XaWR0aCA9IG1pZFdpZHRoIC8gMztcclxuICAgICAgICAgIHN3aXRjaCAodm0ueFpvbmUpIHtcclxuICAgICAgICAgICAgY2FzZSBcImxlZnRcIjpcclxuICAgICAgICAgICAgICB3aWR0aCA9IHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICB4ID0gbWlkWDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgICAgIHdpZHRoID0gc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgIHggPSBtaWRYICsgc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwicmlnaHRcIjpcclxuICAgICAgICAgICAgICB3aWR0aCA9IHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICB4ID0gbWlkWCArIDIgKiBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgd2lkdGggPSBtaWRXaWR0aDtcclxuICAgICAgICAgICAgICB4ID0gbWlkWDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2bS52bUltYWdlVXJsKSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB2bUltYWdlOiBhbnkgPSBhd2FpdCBmYWJyaWMuRmFicmljSW1hZ2UuZnJvbVVSTChcclxuICAgICAgICAgICAgICBgJHt0aGlzLmNkblVybH0ke3ZtLnZtSW1hZ2VVcmx9P3Y9JHtEYXRlLm5vdygpfWAsXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IFwiYW5vbnltb3VzXCIsXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgdm1JbWFnZS5zZXQoe1xyXG4gICAgICAgICAgICAgIGxlZnQ6IHggKyB3aWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgdG9wOiB5ICsgdm1IZWlnaHRQeCAvIDIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIHNjYWxlWDogd2lkdGggLyB2bUltYWdlLndpZHRoISxcclxuICAgICAgICAgICAgICBzY2FsZVk6IHZtSGVpZ2h0UHggLyB2bUltYWdlLmhlaWdodCEsXHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHZtSW1hZ2UpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGxvYWRpbmcgaW1hZ2UgZm9yIFZNOiAke3ZtLnZtSW1hZ2VVcmx9YCwgZXJyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgdm1Cb3ggPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICBsZWZ0OiB4LFxyXG4gICAgICAgICAgICB0b3A6IHksXHJcbiAgICAgICAgICAgIHdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IHZtSGVpZ2h0UHgsXHJcbiAgICAgICAgICAgIGZpbGw6IHZtRmlsbCxcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgbGV0IGZvbnRTaXplID0gNTtcclxuICAgICAgICAgIGxldCB2bVRleHQ7XHJcblxyXG4gICAgICAgICAgY29uc3QgY3JlYXRlVm1UZXh0ID0gKGZzOiBudW1iZXIpID0+XHJcbiAgICAgICAgICAgIG5ldyBmYWJyaWMuVGV4dGJveCh2bS52bU5hbWUgfHwgXCJcIiwge1xyXG4gICAgICAgICAgICAgIGxlZnQ6IHggKyB3aWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgdG9wOiB5ICsgdm1IZWlnaHRQeCAvIDIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZvbnRTaXplOiBmcyxcclxuICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICB2bVRleHQgPSBjcmVhdGVWbVRleHQoZm9udFNpemUpO1xyXG4gICAgICAgICAgICBmb250U2l6ZSAtPSAwLjU7XHJcbiAgICAgICAgICB9IHdoaWxlICh2bVRleHQuaGVpZ2h0ID4gdm1IZWlnaHRQeCAmJiBmb250U2l6ZSA+IDIpO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaCh2bUJveCwgdm1UZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsYXN0Qm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChzaGVsZkNvdW50ICsgMSk7XHJcbiAgICBjb25zdCBsYXN0Qm94ID0gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICBgTSAke21pZFh9ICR7bGFzdEJveFl9IFxyXG4gICAgICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFl9IFxyXG4gICAgICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFkgKyBib3hIZWlnaHQgLSByYWRpdXN9IFxyXG4gICAgICAgICAgICAgIFEgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9ICR7bWlkWCArIG1pZFdpZHRoIC0gcmFkaXVzXHJcbiAgICAgIH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgICAgTCAke21pZFggKyByYWRpdXN9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgICAgICAgIFEgJHttaWRYfSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSAke21pZFh9ICR7bGFzdEJveFkgKyBib3hIZWlnaHQgLSByYWRpdXNcclxuICAgICAgfSBcclxuICAgICAgICAgICAgICBMICR7bWlkWH0gJHtsYXN0Qm94WX0gWmAsXHJcbiAgICAgIHtcclxuICAgICAgICBmaWxsOiBmb290ZXJGaWxsLFxyXG4gICAgICAgIHN0cm9rZTogcHJpbWFyeVN0cm9rZSxcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBsYXN0Qm94VGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveChcclxuICAgICAgYCR7Zml4dHVyZURhdGE/LmZvb3Rlcj8ubGFiZWwgPyBmaXh0dXJlRGF0YS5mb290ZXIubGFiZWwgOiBcIlwifWAsXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogbGFzdEJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgIGZpbGw6IFwiIzEwMTgyOFwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgIGhlaWd0aDogYm94SGVpZ2h0LFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGJvdHRvbVdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgY29uc3QgYm90dG9tSGVpZ2h0ID0gKDMgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgYm90dG9tWCA9IHggKyAod2lkdGggLSBib3R0b21XaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgYm90dG9tWSA9IG1pZFkgKyBtaWRIZWlnaHQgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG5cclxuICAgIGNvbnN0IGJvdHRvbUNvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IGJvdHRvbVgsXHJcbiAgICAgIHRvcDogYm90dG9tWSxcclxuICAgICAgd2lkdGg6IGJvdHRvbVdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IGJvdHRvbUhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBcInRyYW5zcGFyZW50XCIsXHJcbiAgICAgIGZpbGw6IFwidHJhbnNwYXJlbnRcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGJvdHRvbVRleHRDb250ZW50ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICBgU2hlbHZlcyAtICR7Zml4dHVyZURhdGEuc2hlbGZDb25maWc/Lmxlbmd0aH0gLiBQcm9kdWN0cyAtICAke2ZpeHR1cmVEYXRhLmZpeHR1cmVDYXBhY2l0eX0gLiBWTSAtICR7Zml4dHVyZURhdGEudm1Db25maWc/Lmxlbmd0aH1gLFxyXG4gICAgICB7XHJcbiAgICAgICAgbGVmdDogYm90dG9tWCArIGJvdHRvbVdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IGJvdHRvbVkgKyBib3R0b21IZWlnaHQgLyAyLFxyXG4gICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IGJvdHRvbVdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogYm90dG9tSGVpZ2h0LFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuXHJcbiAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFxyXG4gICAgICBbXHJcbiAgICAgICAgbWFpbkNvbnRhaW5lcixcclxuICAgICAgICB0b3BDb250YWluZXIsXHJcbiAgICAgICAgaW5uZXJUb3BCb3gsXHJcbiAgICAgICAgdG9wVGV4dCxcclxuICAgICAgICBpbm5lckJvdHRvbUJveCxcclxuICAgICAgICBib3R0b21UZXh0LFxyXG4gICAgICAgIG1pZENvbnRhaW5lcixcclxuICAgICAgICBmaXJzdEJveCxcclxuICAgICAgICBmaXJzdEJveFRleHQsXHJcbiAgICAgICAgLi4uc2hlbHZlcyxcclxuICAgICAgICBsYXN0Qm94LFxyXG4gICAgICAgIGxhc3RCb3hUZXh0LFxyXG4gICAgICAgIGJvdHRvbUNvbnRhaW5lcixcclxuICAgICAgICBib3R0b21UZXh0Q29udGVudCxcclxuICAgICAgXSxcclxuICAgICAge1xyXG4gICAgICAgIGxlZnQ6IHgsXHJcbiAgICAgICAgdG9wOiB5LFxyXG4gICAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgaG92ZXJDdXJzb3I6IFwiZGVmYXVsdFwiLFxyXG4gICAgICAgIGxvY2tTY2FsaW5nWDogdHJ1ZSxcclxuICAgICAgICBsb2NrU2NhbGluZ1k6IHRydWUsXHJcbiAgICAgICAgbG9ja01vdmVtZW50WDogdHJ1ZSxcclxuICAgICAgICBsb2NrTW92ZW1lbnRZOiB0cnVlLFxyXG4gICAgICAgIGxvY2tSb3RhdGlvbjogdHJ1ZSxcclxuICAgICAgICBoYXNDb250cm9sczogZmFsc2UsXHJcbiAgICAgICAgc3ViVGFyZ2V0Q2hlY2s6IHRydWUsXHJcbiAgICAgICAgYW5nbGU6IGZpeHR1cmVEYXRhLnJlbGF0aXZlUG9zaXRpb24/LmFuZ2xlID8/IDAsXHJcbiAgICAgIH1cclxuICAgICkgYXMgZmFicmljLkdyb3VwICYge1xyXG4gICAgICB3YWxsSW5kZXg6IG51bWJlcjtcclxuICAgICAgZml4dHVyZUluZGV4OiBudW1iZXI7XHJcbiAgICAgIGZpeHR1cmVJZDogc3RyaW5nO1xyXG4gICAgICBmaXh0dXJlVHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCI7XHJcbiAgICAgIGlzc3VlOiBib29sZWFuO1xyXG4gICAgICBpc3N1ZURhdGE6IGFueTtcclxuICAgICAgdGFza1R5cGU6IHN0cmluZztcclxuICAgICAgdm1Db25maWc6IFtdO1xyXG4gICAgICBvYmpUeXBlOiBzdHJpbmc7XHJcbiAgICB9O1xyXG5cclxuXHJcblxyXG4gICAgZml4dHVyZUdyb3VwLmZpeHR1cmVUeXBlID0gZml4dHVyZURhdGEuZml4dHVyZVR5cGU7XHJcbiAgICBmaXh0dXJlR3JvdXAud2FsbEluZGV4ID0gZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnROdW1iZXI7XHJcbiAgICBmaXh0dXJlR3JvdXAuZml4dHVyZUluZGV4ID0gZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyO1xyXG4gICAgZml4dHVyZUdyb3VwLmZpeHR1cmVJZCA9IGZpeHR1cmVEYXRhLl9pZDtcclxuICAgIGZpeHR1cmVHcm91cC5pc3N1ZSA9IGZpeHR1cmVEYXRhLmlzc3VlO1xyXG4gICAgZml4dHVyZUdyb3VwLmlzc3VlRGF0YSA9IGZpeHR1cmVEYXRhLmlzc3VlRGF0YTtcclxuICAgIGZpeHR1cmVHcm91cC50YXNrVHlwZSA9IGZpeHR1cmVEYXRhLnRhc2tUeXBlO1xyXG4gICAgZml4dHVyZUdyb3VwLnZtQ29uZmlnID0gZml4dHVyZURhdGEudm1Db25maWc7XHJcbiAgICBmaXh0dXJlR3JvdXAub2JqVHlwZSA9IFwiZml4dHVyZVwiO1xyXG5cclxuICAgIC8vIEFkZCBjbGljayBoYW5kbGVyIGRpcmVjdGx5IG9uIHRoZSBmaXh0dXJlIGdyb3VwXHJcbiAgICBmaXh0dXJlR3JvdXAub24oXCJtb3VzZWRvd25cIiwgKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgLy8gVXNlIHRoZSBmaXh0dXJlIGdyb3VwIGl0c2VsZiAod2hpY2ggaGFzIGFsbCB0aGUgZml4dHVyZSBwcm9wZXJ0aWVzKVxyXG4gICAgICAvLyBUaGUgZXZlbnQudGFyZ2V0IG1pZ2h0IGJlIGEgY2hpbGQgZWxlbWVudCwgc28gd2UgdXNlIGZpeHR1cmVHcm91cCBkaXJlY3RseVxyXG4gICAgICBpZiAoZml4dHVyZUdyb3VwICYmIChmaXh0dXJlR3JvdXAgYXMgYW55KS5maXh0dXJlSWQpIHtcclxuICAgICAgICB0aGlzLm9uRml4dHVyZUNsaWNrKGZpeHR1cmVHcm91cCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNhbnZhcy5hZGQoZml4dHVyZUdyb3VwKTtcclxuXHJcbiAgICAvLyBJZiBuZXdseSBhZGRlZCwgZm9jdXMgaXQgb25jZVxyXG4gICAgaWYgKChmaXh0dXJlRGF0YSBhcyBhbnkpPy5uZXdBZGRlZCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNhbnZhcy5zZXRBY3RpdmVPYmplY3QoZml4dHVyZUdyb3VwKTtcclxuICAgICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9IGNhdGNoIHsgfVxyXG4gICAgICBkZWxldGUgKGZpeHR1cmVEYXRhIGFzIGFueSkubmV3QWRkZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpeHR1cmVHcm91cDtcclxuICB9XHJcblxyXG4gIGRyYXdPdGhlckVsZW1lbnRzV2l0aExhYmVsKFxyXG4gICAgY2FudmFzOiBmYWJyaWMuQ2FudmFzLFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgYTogbnVtYmVyLFxyXG4gICAgd2lkdGg6IG51bWJlcixcclxuICAgIGhlaWdodDogbnVtYmVyLFxyXG4gICAgZWxlbWVudDogYW55XHJcbiAgKTogZmFicmljLkdyb3VwIHtcclxuICAgIGNvbnN0IHJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICB3aWR0aCxcclxuICAgICAgaGVpZ2h0LFxyXG4gICAgICByeDogMixcclxuICAgICAgcnk6IDIsXHJcbiAgICAgIGZpbGw6IFwiI0RBRjFGRlwiLFxyXG4gICAgICBzdHJva2U6IFwiIzZCQ0FGRlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHRleHQgPSBuZXcgZmFicmljLlRleHRib3goZWxlbWVudC5maXh0dXJlTmFtZSwge1xyXG4gICAgICB3aWR0aDogd2lkdGggLSA4LFxyXG4gICAgICBmb250U2l6ZTogMTQsXHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgZmlsbDogXCIjMTAxODI4XCIsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgZWRpdGFibGU6IGZhbHNlLFxyXG4gICAgICBzcGxpdEJ5R3JhcGhlbWU6IHRydWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0ZXh0Qm91bmRzID0gdGV4dC5nZXRCb3VuZGluZ1JlY3QoKTtcclxuXHJcbiAgICBpZiAodGV4dEJvdW5kcy5oZWlnaHQgPiBoZWlnaHQgLSA4KSB7XHJcbiAgICAgIGNvbnN0IHNjYWxlID0gKGhlaWdodCAtIDgpIC8gdGV4dEJvdW5kcy5oZWlnaHQ7XHJcbiAgICAgIHRleHQuc2V0KFwiZm9udFNpemVcIiwgdGV4dC5mb250U2l6ZSEgKiBzY2FsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFtyZWN0LCB0ZXh0XSwge1xyXG4gICAgICBsZWZ0OiB4LFxyXG4gICAgICB0b3A6IHksXHJcbiAgICAgIGFuZ2xlOiBhLFxyXG4gICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICBoYXNDb250cm9sczogZmFsc2UsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBsb2NrU2NhbGluZ1g6IHRydWUsXHJcbiAgICAgIGxvY2tTY2FsaW5nWTogdHJ1ZSxcclxuICAgICAgbG9ja1JvdGF0aW9uOiB0cnVlLFxyXG4gICAgICBsb2NrTW92ZW1lbnRYOiB0cnVlLFxyXG4gICAgICBsb2NrTW92ZW1lbnRZOiB0cnVlLFxyXG4gICAgICBldmVudGVkOiB0cnVlLFxyXG4gICAgICBob3ZlckN1cnNvcjogXCJkZWZhdWx0XCIsXHJcbiAgICB9KSBhcyBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgIG9ialR5cGU6IHN0cmluZztcclxuICAgICAgZGF0YTogYW55O1xyXG4gICAgfTtcclxuXHJcbiAgICBncm91cC5vYmpUeXBlID0gXCJvdGhlcnNcIjtcclxuICAgIGdyb3VwLmRhdGEgPSBlbGVtZW50O1xyXG5cclxuICAgIGNhbnZhcy5hZGQoZ3JvdXApO1xyXG5cclxuICAgIGlmICgoZWxlbWVudCBhcyBhbnkpPy5uZXdBZGRlZCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNhbnZhcy5zZXRBY3RpdmVPYmplY3QoZ3JvdXApO1xyXG4gICAgICAgIGNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgIH0gY2F0Y2ggeyB9XHJcbiAgICAgIGRlbGV0ZSAoZWxlbWVudCBhcyBhbnkpLm5ld0FkZGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBncm91cDtcclxuICB9XHJcblxyXG4gIGNvbGxlY3RBbGxGaXh0dXJlcygpOiB2b2lkIHtcclxuICAgIHRoaXMuYWxsRml4dHVyZUluc3RhbmNlcyA9IFtdO1xyXG4gICAgXHJcbiAgICAvLyBDb2xsZWN0IHdhbGwgZml4dHVyZXNcclxuICAgIGlmICh0aGlzLmZsb29yRGF0YT8ubGF5b3V0UG9seWdvbikge1xyXG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbikge1xyXG4gICAgICAgIGlmIChlbGVtZW50LmZpeHR1cmVzICYmIEFycmF5LmlzQXJyYXkoZWxlbWVudC5maXh0dXJlcykpIHtcclxuICAgICAgICAgIHRoaXMuYWxsRml4dHVyZUluc3RhbmNlcy5wdXNoKC4uLmVsZW1lbnQuZml4dHVyZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBDb2xsZWN0IGZsb29yIGZpeHR1cmVzXHJcbiAgICBpZiAodGhpcy5mbG9vckRhdGE/LmNlbnRlckZpeHR1cmUgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlKSkge1xyXG4gICAgICB0aGlzLmFsbEZpeHR1cmVJbnN0YW5jZXMucHVzaCguLi50aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRml4dHVyZUNsaWNrKHRhcmdldDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoIXRhcmdldCB8fCAhdGhpcy5mbG9vckRhdGEpIHJldHVybjtcclxuICAgIFxyXG4gICAgY29uc3QgZml4dHVyZUlkID0gKHRhcmdldCBhcyBhbnkpLmZpeHR1cmVJZDtcclxuICAgIGNvbnN0IGZpeHR1cmVUeXBlID0gKHRhcmdldCBhcyBhbnkpLmZpeHR1cmVUeXBlO1xyXG4gICAgXHJcbiAgICBpZiAoIWZpeHR1cmVJZCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0ZpeHR1cmUgY2xpY2s6IE5vIGZpeHR1cmVJZCBmb3VuZCBvbiB0YXJnZXQnLCB0YXJnZXQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIEZpbmQgdGhlIGZpeHR1cmUgZGF0YVxyXG4gICAgbGV0IGZpeHR1cmVEYXRhOiBhbnkgPSBudWxsO1xyXG4gICAgXHJcbiAgICBpZiAoZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgIGNvbnN0IHdhbGxJbmRleCA9ICh0YXJnZXQgYXMgYW55KS53YWxsSW5kZXg7XHJcbiAgICAgIFxyXG4gICAgICBpZiAodGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbiAmJiB3YWxsSW5kZXggIT09IHVuZGVmaW5lZCAmJiB3YWxsSW5kZXggIT09IG51bGwpIHtcclxuICAgICAgICAvLyBGaW5kIHdhbGwgYnkgZWxlbWVudE51bWJlciAod2FsbEluZGV4IGlzIHRoZSBlbGVtZW50TnVtYmVyKVxyXG4gICAgICAgIGNvbnN0IHdhbGwgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgICAgICAodzogYW55KSA9PiB3LmVsZW1lbnROdW1iZXIgPT09IHdhbGxJbmRleFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHdhbGwgJiYgd2FsbC5maXh0dXJlcykge1xyXG4gICAgICAgICAgLy8gQWx3YXlzIHVzZSBmaXh0dXJlSWQgdG8gZmluZCB0aGUgZml4dHVyZSAobW9yZSByZWxpYWJsZSB0aGFuIGluZGV4LWJhc2VkIGxvb2t1cClcclxuICAgICAgICAgIGZpeHR1cmVEYXRhID0gd2FsbC5maXh0dXJlcy5maW5kKChmOiBhbnkpID0+IGYuX2lkID09PSBmaXh0dXJlSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChmaXh0dXJlVHlwZSA9PT0gXCJmbG9vclwiKSB7XHJcbiAgICAgIGZpeHR1cmVEYXRhID0gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZT8uZmluZCgoZjogYW55KSA9PiBmLl9pZCA9PT0gZml4dHVyZUlkKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKCFmaXh0dXJlRGF0YSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0ZpeHR1cmUgY2xpY2s6IEZpeHR1cmUgZGF0YSBub3QgZm91bmQnLCB7IFxyXG4gICAgICAgIGZpeHR1cmVJZCwgXHJcbiAgICAgICAgZml4dHVyZVR5cGUsIFxyXG4gICAgICAgIHdhbGxJbmRleDogKHRhcmdldCBhcyBhbnkpLndhbGxJbmRleCwgXHJcbiAgICAgICAgZml4dHVyZUluZGV4OiAodGFyZ2V0IGFzIGFueSkuZml4dHVyZUluZGV4LFxyXG4gICAgICAgIGZsb29yRGF0YTogdGhpcy5mbG9vckRhdGEgXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIEVuc3VyZSB2bUNvbmZpZyBpcyBhbHdheXMgYW4gYXJyYXkgKGV2ZW4gaWYgZW1wdHkpIHRvIGF2b2lkIGRpc3BsYXkgaXNzdWVzXHJcbiAgICAvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdm1Db25maWcgbWlnaHQgYmUgbnVsbCwgdW5kZWZpbmVkLCBvciBub3QgYW4gYXJyYXlcclxuICAgIGlmICghQXJyYXkuaXNBcnJheShmaXh0dXJlRGF0YS52bUNvbmZpZykpIHtcclxuICAgICAgZml4dHVyZURhdGEudm1Db25maWcgPSBbXTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gQ3JlYXRlIGEgZGVlcCBjbG9uZSB0byBlbnN1cmUgY2hhbmdlIGRldGVjdGlvbiB3b3Jrc1xyXG4gICAgY29uc3QgY2xvbmVkRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShmaXh0dXJlRGF0YSk7XHJcbiAgICBcclxuICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlID0ge1xyXG4gICAgICBmaXh0dXJlSWQ6IGZpeHR1cmVJZCxcclxuICAgICAgZml4dHVyZVR5cGU6IGZpeHR1cmVUeXBlLFxyXG4gICAgICB3YWxsSW5kZXg6ICh0YXJnZXQgYXMgYW55KS53YWxsSW5kZXgsXHJcbiAgICAgIGZpeHR1cmVJbmRleDogKHRhcmdldCBhcyBhbnkpLmZpeHR1cmVJbmRleCxcclxuICAgIH07XHJcbiAgICBcclxuICAgIC8vIENoZWNrIGlmIHRoaXMgZml4dHVyZSBoYXMgcmVwbGFjZVJlc3BvbnNlRGF0YSAoZm9yIGJlZm9yZS9hZnRlciBjb21wYXJpc29uKVxyXG4gICAgY29uc3Qgc3RvcmUgPSB0aGlzLmZpbmRSZXBsYWNlRGF0YT8uc3RvcmVzPy5maW5kKFxyXG4gICAgICAoczogU3RvcmUpID0+IHMuc3RvcmVOYW1lID09PSB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3Py5zdG9yZU5hbWVcclxuICAgICk7XHJcbiAgICBcclxuICAgIC8vIElmIHRoaXMgZml4dHVyZSBtYXRjaGVzIHRoZSBmaW5kUmVzcG9uc2VEYXRhIGFuZCBoYXMgcmVwbGFjZVJlc3BvbnNlRGF0YSxcclxuICAgIC8vIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGZpeHR1cmUgZGF0YSBmb3IgYmVmb3JlL2FmdGVyIGNvbXBhcmlzb25cclxuICAgIGlmIChzdG9yZT8uZmluZFJlc3BvbnNlRGF0YSA9PT0gZml4dHVyZUlkICYmIHN0b3JlPy5yZXBsYWNlUmVzcG9uc2VEYXRhKSB7XHJcbiAgICAgIC8vIFJlc3RvcmUgb3JpZ2luYWxGaXh0dXJlRGF0YSBmcm9tIHRoZSBtYXAgKHBlcnNpc3RzIGV2ZW4gd2hlbiBjbGlja2luZyBvdGhlciBmaXh0dXJlcylcclxuICAgICAgY29uc3Qgc3RvcmVkT3JpZ2luYWwgPSB0aGlzLm9yaWdpbmFsRml4dHVyZXNNYXAuZ2V0KGZpeHR1cmVJZCk7XHJcbiAgICAgIGlmIChzdG9yZWRPcmlnaW5hbCkge1xyXG4gICAgICAgIHRoaXMub3JpZ2luYWxGaXh0dXJlRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShzdG9yZWRPcmlnaW5hbCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gSWYgbm90IGluIG1hcCAoc2hvdWxkbid0IGhhcHBlbiBpZiBhcHBseVN0b3JlZFJlc3BvbnNlRGF0YSByYW4pLCBcclxuICAgICAgICAvLyB1c2UgY3VycmVudCBmaXh0dXJlIGFzIGZhbGxiYWNrXHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbEZpeHR1cmVEYXRhID0gc3RydWN0dXJlZENsb25lKGNsb25lZERhdGEpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBObyByZXBsYWNlIGRhdGEgZm9yIHRoaXMgZml4dHVyZSwgY2xlYXIgb3JpZ2luYWxcclxuICAgICAgdGhpcy5vcmlnaW5hbEZpeHR1cmVEYXRhID0gbnVsbDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gRm9yY2UgY2hhbmdlIGRldGVjdGlvbiBieSBjcmVhdGluZyBhIG5ldyBvYmplY3QgcmVmZXJlbmNlXHJcbiAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSBudWxsO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gY2xvbmVkRGF0YTtcclxuICAgICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICBcclxuICAgICAgLy8gUmUtY2VudGVyIHBsYW5vZ3JhbSB3aGVuIHBhbmVsIG9wZW5zIChzaW1pbGFyIHRvIG1hbmFnZS1wbGFub2dyYW0pXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnByZXZpZXdDYW52YXMgJiYgdGhpcy5wcmV2aWV3Q2FudmFzQ29udGFpbmVyUmVmPy5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICB0aGlzLnJlc2l6ZUNhbnZhcyh0aGlzLnByZXZpZXdDYW52YXMsIHRoaXMucHJldmlld0NhbnZhc0NvbnRhaW5lclJlZik7XHJcbiAgICAgICAgICB0aGlzLmZpdENhbnZhc1RvTGF5b3V0QW5pbWF0ZWQodGhpcy5wcmV2aWV3Q2FudmFzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDQwMCk7XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZVJpZ2h0UGFuZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZCA9ICF0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZDtcclxuICAgIFxyXG4gICAgLy8gUmVzaXplIGNhbnZhcyB3aGVuIHBhbmVsIGlzIHRvZ2dsZWRcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5wcmV2aWV3Q2FudmFzICYmIHRoaXMucHJldmlld0NhbnZhc0NvbnRhaW5lclJlZj8ubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgIHRoaXMucmVzaXplQ2FudmFzKHRoaXMucHJldmlld0NhbnZhcywgdGhpcy5wcmV2aWV3Q2FudmFzQ29udGFpbmVyUmVmKTtcclxuICAgICAgICB0aGlzLmZpdENhbnZhc1RvTGF5b3V0QW5pbWF0ZWQodGhpcy5wcmV2aWV3Q2FudmFzKTtcclxuICAgICAgfVxyXG4gICAgfSwgNDAwKTtcclxuICB9XHJcblxyXG4gIG9uSGlkZU1ldGFkYXRhVG9nZ2xlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5wcmV2aWV3Q2FudmFzKSB7XHJcbiAgICAgIHRoaXMucHJldmlld0NhbnZhcy5kaXNwb3NlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cIm1haW4tY2FyZFwiPlxyXG4gICAgPGZvcm0+XHJcbiAgICAgICAgPCEtLSBTZWN0aW9uIDE6IEFkZCBTdG9yZXMgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tcm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLW51bWJlclwiPjE8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPkFkZCBzdG9yZXM8L2gyPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0b3JlLWlucHV0LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdG9yZS1kcm9wZG93blwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkRmllbGRdPVwiJ3ZhbHVlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwic2VhcmNoTW9kZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInNlbGVjdGVkTW9kZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IFxyXG4gICAgICAgICAgICAgICAgICAgIDxsaWItc3RvcmUtc2VsZWN0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJzdG9yZU9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5pdGlhbFNlbGVjdGVkXT1cInNlbGVjdGVkU3RvcmVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkQ2hhbmdlKT1cIm9uU3RvcmVzU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGliLXN0b3JlLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWFwcGx5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkFwcGx5KClcIiBbZGlzYWJsZWRdPVwibG9hZGluZyB8fCBmaW5kTG9hZGluZyB8fCByZXBsYWNlTG9hZGluZyB8fCBzYXZpbmdEcmFmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBzYXZpbmdEcmFmdCA/ICdTYXZpbmcuLi4nIDogJ0FwcGx5JyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIFxyXG4gICAgICAgIDwhLS0gU2VjdGlvbiAyOiBDaG9vc2UgVGFyZ2V0IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXJvd1wiICpuZ0lmPVwiaGFzU3RvcmVzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLW51bWJlclwiPjI8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPkNob29zZSB0YXJnZXQ8L2gyPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhcmdldC1idXR0b25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGFyZ2V0LWJ0blwiIFtjbGFzcy5hY3RpdmVdPVwidGFyZ2V0LnZhbHVlID09PSAnYm90aCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ0YXJnZXRcIiB2YWx1ZT1cImJvdGhcIiBbZm9ybUNvbnRyb2xdPVwidGFyZ2V0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJvdGhcclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRhcmdldC1idG5cIiBbY2xhc3MuYWN0aXZlXT1cInRhcmdldC52YWx1ZSA9PT0gJ21lcmNoJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInRhcmdldFwiIHZhbHVlPVwibWVyY2hcIiBbZm9ybUNvbnRyb2xdPVwidGFyZ2V0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE1lcmNoYW5kaXNlXHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0YXJnZXQtYnRuXCIgW2NsYXNzLmFjdGl2ZV09XCJ0YXJnZXQudmFsdWUgPT09ICd2bSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ0YXJnZXRcIiB2YWx1ZT1cInZtXCIgW2Zvcm1Db250cm9sXT1cInRhcmdldFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBWaXN1YWwgTWVyY2hhbmRpc2VcclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlcGxhY2Utc2VsZWN0aW9uLXN0YWNrXCIgKm5nSWY9XCJuZWVkc1JlcGxhY2VCcmFuZCgpIHx8IG5lZWRzUmVwbGFjZVZtKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibmVlZHNSZXBsYWNlQnJhbmQoKVwiIGNsYXNzPVwicmVwbGFjZS1zZWxlY3Rpb24tcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVwbGFjZS1zZWxlY3Rpb24tdGFnXCI+TWVyY2hhbmRpc2UgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZXBsYWNlLXNlbGVjdGlvbi1kcm9wZG93blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRGaWVsZF09XCInX2lkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZUZpZWxkXT1cIidicmFuZE5hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hGaWVsZF09XCInYnJhbmROYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJicmFuZExpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJyZXBsYWNlQnJhbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJuZWVkc1JlcGxhY2VWbSgpXCIgY2xhc3M9XCJyZXBsYWNlLXNlbGVjdGlvbi1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXBsYWNlLXNlbGVjdGlvbi10YWdcIj5WaXN1YWwgTWVyY2hhbmRpc2UgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZXBsYWNlLXNlbGVjdGlvbi1kcm9wZG93blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRGaWVsZF09XCInX2lkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZUZpZWxkXT1cIid2bU5hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hGaWVsZF09XCIndm1OYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3ViVGV4dEZpZWxkXT1cIid2bVR5cGUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cInJlcGxhY2VWbUxpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJyZXBsYWNlVm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIFxyXG4gICAgICAgIDwhLS0gU2VjdGlvbiAzOiBGaW5kIGFuZCBSZXBsYWNlIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXJvd1wiICpuZ0lmPVwiaGFzU3RvcmVzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLW51bWJlclwiPjM8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPlByb3ZpZGUgYW4gaW5zdHJ1Y3Rpb24gdG8gZmluZCBhbmQgcmVwbGFjZSBpbiB0aGUgc2VsZWN0ZWQgc3RvcmU8L2gyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICA8IS0tIEZpbmQgYW5kIFJlcGxhY2UgSW5wdXRzIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaW5kLXJlcGxhY2Utd3JhcHBlclwiICpuZ0lmPVwiaGFzU3RvcmVzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaW5kLXJlcGxhY2UtYm94XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmaW5kLXJlcGxhY2UtbGFiZWxcIj5UYXJnZXQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbmQtcmVwbGFjZS1pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJJbnN0cnVjdCB3aGF0IHRvIGZpbmQgaXQgaW4gdGhlIHNlbGVjdGVkIHN0b3JlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZpbmRQcm9tcHRcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1idG4tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1maW5kXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkZpbmQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmluZExvYWRpbmcgfHwgcmVwbGFjZUxvYWRpbmcgfHwgIXNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3IHx8IChmaW5kUHJvbXB0LnZhbHVlICYmIGZpbmRFeGVjdXRlZCkgfHwgaXNGaW5kUHJvbXB0RnJvbUFwaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZmluZExvYWRpbmcgPyAnUHJvY2Vzc2luZy4uLicgOiAnUnVuJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcnJvdy1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjdcIiBoZWlnaHQ9XCIxNVwiIHZpZXdCb3g9XCIwIDAgMjcgMTVcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjYuNzA3MSA4LjA3MTA3QzI3LjA5NzYgNy42ODA1NCAyNy4wOTc2IDcuMDQ3MzggMjYuNzA3MSA2LjY1Njg1TDIwLjM0MzEgMC4yOTI4OTNDMTkuOTUyNiAtMC4wOTc2MzEgMTkuMzE5NSAtMC4wOTc2MzEgMTguOTI4OSAwLjI5Mjg5M0MxOC41Mzg0IDAuNjgzNDE4IDE4LjUzODQgMS4zMTY1OCAxOC45Mjg5IDEuNzA3MTFMMjQuNTg1OCA3LjM2Mzk2TDE4LjkyODkgMTMuMDIwOEMxOC41Mzg0IDEzLjQxMTMgMTguNTM4NCAxNC4wNDQ1IDE4LjkyODkgMTQuNDM1QzE5LjMxOTUgMTQuODI1NiAxOS45NTI2IDE0LjgyNTYgMjAuMzQzMSAxNC40MzVMMjYuNzA3MSA4LjA3MTA3Wk0wIDcuMzYzOTZWOC4zNjM5NkgyNlY3LjM2Mzk2VjYuMzYzOTZIMFY3LjM2Mzk2WlwiIGZpbGw9XCIjOThBMkIzXCIvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbmQtcmVwbGFjZS1ib3hcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZpbmQtcmVwbGFjZS1sYWJlbFwiPkNoYW5nZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmluZC1yZXBsYWNlLWlucHV0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSB3aGF0IHdvdWxkIHlvdSBsaWtlIHRvIHJlcGxhY2UgaW4gdGhlIHNlbGVjdGVkIGZpeHR1cmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicmVwbGFjZVByb21wdFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWJ0bi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tcmVwbGFjZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJlcGxhY2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWZpbmRQcm9tcHQudmFsdWUgfHwgIWhhc1JlcGxhY2VTZWxlY3Rpb24oKSB8fCBmaW5kTG9hZGluZyB8fCByZXBsYWNlTG9hZGluZyB8fCAhZ2V0Q3VycmVudFN0b3JlRmluZFJlc3BvbnNlRGF0YSgpIHx8IHJlcGxhY2VFeGVjdXRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcmVwbGFjZUxvYWRpbmcgPyAnUHJvY2Vzc2luZy4uLicgOiAnVXBkYXRlJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICA8IS0tIFByZXZpZXcgU2VjdGlvbiAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJldmlldy13cmFwcGVyXCIgW25nU3R5bGVdPVwieydkaXNwbGF5JzogaGFzU3RvcmVzID8gJ2Jsb2NrJyA6ICdub25lJ31cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBnLTAgcHJldmlldy1sYXlvdXRcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gTGVmdCBDb2x1bW46IENhbnZhcyAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIiBbbmdDbGFzc109XCJ7IFxyXG4gICAgICAgICAgICAgICAgICAgICdjb2wtNic6ICFpc1JpZ2h0UGFuZWxDb2xsYXBzZWQgJiYgc2VsZWN0ZWRGaXh0dXJlRGF0YSAmJiBzaG91bGRTaG93QmVmb3JlQWZ0ZXIoKSxcclxuICAgICAgICAgICAgICAgICAgICAnY29sLTknOiAhaXNSaWdodFBhbmVsQ29sbGFwc2VkICYmIHNlbGVjdGVkRml4dHVyZURhdGEgJiYgIXNob3VsZFNob3dCZWZvcmVBZnRlcigpLCBcclxuICAgICAgICAgICAgICAgICAgICAnY29sLTEyJzogaXNSaWdodFBhbmVsQ29sbGFwc2VkIHx8ICFzZWxlY3RlZEZpeHR1cmVEYXRhIFxyXG4gICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtc3RhcnQgZ2FwLTMgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFN0b3JlIERyb3Bkb3duIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLXN0b3JlLWRyb3Bkb3duIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNTdG9yZXMgJiYgc3RvcmVEcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cInN0b3JlRHJvcGRvd25JdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRGaWVsZF09XCInc3RvcmVJZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaEZpZWxkXT1cIidzdG9yZU5hbWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZXNdPVwic2VsZWN0ZWRTdG9yZVZhbHVlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwib25TdG9yZVNlbGVjdGVkRm9yUHJldmlldygkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLXN0b3JlLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDb250ZW50IEFyZWEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBQcmV2aWV3IFRpdGxlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJmdy1zZW1pYm9sZCBtYi0xXCIgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7IGNvbG9yOiAjMWQyOTM5O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZXZpZXcgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJnZXRTdG9yZUNvdW50KCkgPiAwXCIgc3R5bGU9XCJmb250LXdlaWdodDogNDAwOyBjb2xvcjogIzY2NzA4NTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHt7IGdldFN0b3JlQ291bnQoKSB9fSB7eyBnZXRTdG9yZUNvdW50KCkgPT09IDEgPyAnU3RvcmUnIDogJ1N0b3JlcycgfX0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIERlc2NyaXB0aW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wXCIgc3R5bGU9XCJmb250LXNpemU6IDE0cHg7IGNvbG9yOiAjNDc1NDY3O1wiPkNoZWNrIGlmIHRoZSBwcm9tcHQgZml0IGludG8gdGhlIGV4cGVjdGVkIHJlc3VsdHMgaW4gb3JkZXIgdG8gcHJvY2VlZCB0byByZXZpZXcgYW5kIGFwcHJvdmU8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIENhbnZhcyBDb250YWluZXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbnZhcy1jb250YWluZXJcIiAjcHJldmlld0NhbnZhc0NvbnRhaW5lciBbbmdTdHlsZV09XCJ7J2Rpc3BsYXknOiBzZWxlY3RlZFN0b3JlRm9yUHJldmlldyA/ICdibG9jaycgOiAnbm9uZSd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYW52YXMtbG9hZGluZ1wiICpuZ0lmPVwiY2FudmFzTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHRleHQtcHJpbWFyeVwiIHJvbGU9XCJzdGF0dXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPkxvYWRpbmcuLi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjYW52YXMgI3ByZXZpZXdDYW52YXM+PC9jYW52YXM+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFJpZ2h0IENvbHVtbjogRml4dHVyZSBQcmV2aWV3IC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpeHR1cmUtcHJldmlldy1wYW5lbFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdGVkRml4dHVyZURhdGEgJiYgIWlzUmlnaHRQYW5lbENvbGxhcHNlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2NvbC02Jzogc2hvdWxkU2hvd0JlZm9yZUFmdGVyKCksICdjb2wtMyc6ICFzaG91bGRTaG93QmVmb3JlQWZ0ZXIoKSB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aF09XCJzaG91bGRTaG93QmVmb3JlQWZ0ZXIoKSA/ICc2ODBweCcgOiAnMzQwcHgnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInMtY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFBhbmVsIEhlYWRlciAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpeHR1cmUtcHJldmlldy1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwicHJvZHVjdC1pbWFnZS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiUHJvZHVjdFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJvZHVjdC1pbWFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYW1lXCI+e3sgZ2V0Rml4dHVyZUxhYmVsKCkgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwZWNzLWNvbnRhaW5lclwiICpuZ0lmPVwiZ2V0Rml4dHVyZUNhdGVnb3J5KCkgfHwgZ2V0Rml4dHVyZVdpZHRoKCkgfHwgZ2V0U2hlbGZDb3VudCgpID4gMCB8fCBnZXRGaXh0dXJlQ2FwYWNpdHkoKSA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3BlYy10ZXh0XCIgKm5nSWY9XCJnZXRGaXh0dXJlQ2F0ZWdvcnkoKVwiPnt7IGdldEZpeHR1cmVDYXRlZ29yeSgpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRvdFwiICpuZ0lmPVwiZ2V0Rml4dHVyZUNhdGVnb3J5KCkgJiYgKGdldEZpeHR1cmVXaWR0aCgpIHx8IGdldFNoZWxmQ291bnQoKSA+IDAgfHwgZ2V0Rml4dHVyZUNhcGFjaXR5KCkgPiAwKVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcGVjLXRleHRcIiAqbmdJZj1cImdldEZpeHR1cmVXaWR0aCgpXCI+e3sgZ2V0Rml4dHVyZVdpZHRoKCkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG90XCIgKm5nSWY9XCJnZXRGaXh0dXJlV2lkdGgoKSAmJiAoZ2V0U2hlbGZDb3VudCgpID4gMCB8fCBnZXRGaXh0dXJlQ2FwYWNpdHkoKSA+IDApXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNwZWMtdGV4dFwiICpuZ0lmPVwiZ2V0U2hlbGZDb3VudCgpID4gMFwiPnt7IGdldFNoZWxmQ291bnQoKSB9fSB7eyBnZXRTaGVsZkNvdW50KCkgPT09IDEgPyAnU2hlbGYnIDogJ1NoZWx2ZXMnIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRvdFwiICpuZ0lmPVwiZ2V0U2hlbGZDb3VudCgpID4gMCAmJiBnZXRGaXh0dXJlQ2FwYWNpdHkoKSA+IDBcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3BlYy10ZXh0XCIgKm5nSWY9XCJnZXRGaXh0dXJlQ2FwYWNpdHkoKSA+IDBcIj57eyBnZXRGaXh0dXJlQ2FwYWNpdHkoKSB9fSBDYXBhY2l0eTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIGlkPVwiaGlkZU1ldGFkYXRhXCIgWyhuZ01vZGVsKV09XCJoaWRlTWV0YWRhdGFcIiBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIiAoY2hhbmdlKT1cIm9uSGlkZU1ldGFkYXRhVG9nZ2xlKClcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgbXMtMlwiIGZvcj1cImhpZGVNZXRhZGF0YVwiIHN0eWxlPVwiY29sb3I6IGJsYWNrOyB3aGl0ZS1zcGFjZTogbm93cmFwO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGlkZSBtZXRhZGF0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGaXh0dXJlIENvbXBvbmVudCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpeHR1cmUtcHJldmlldy1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNob3cgQmVmb3JlL0FmdGVyIHdoZW4gZmluZCBkYXRhIGV4aXN0cyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG91bGRTaG93QmVmb3JlQWZ0ZXIoKVwiIGNsYXNzPVwiYmVmb3JlLWFmdGVyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiZWZvcmUtc2VjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNiBjbGFzcz1cInNlY3Rpb24tbGFiZWwgbWItMFwiPkJlZm9yZTwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZml4dHVyZS13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXN0b3JlLWZpeHR1cmUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpeHR1cmVdPVwiZ2V0T3JpZ2luYWxGaXh0dXJlRm9yRGlzcGxheSgpXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dDb2xvcnNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dWTXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dCQ3NdPVwiIWhpZGVNZXRhZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItc3RvcmUtZml4dHVyZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFmdGVyLXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJzZWN0aW9uLWxhYmVsIG1iLTBcIj5BZnRlcjwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZml4dHVyZS13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXN0b3JlLWZpeHR1cmUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpeHR1cmVdPVwic2VsZWN0ZWRGaXh0dXJlRGF0YVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Q29sb3JzXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Vk1zXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93QkNzXT1cIiFoaWRlTWV0YWRhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cImlzQWZ0ZXJEaXNhYmxlZCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1zdG9yZS1maXh0dXJlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNob3cgc2luZ2xlIGZpeHR1cmUgd2hlbiBubyBmaW5kIGRhdGEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXNob3VsZFNob3dCZWZvcmVBZnRlcigpICYmIHNlbGVjdGVkRml4dHVyZURhdGFcIiBjbGFzcz1cInNpbmdsZS1maXh0dXJlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaXh0dXJlLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1zdG9yZS1maXh0dXJlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpeHR1cmVdPVwic2VsZWN0ZWRGaXh0dXJlRGF0YVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dDb2xvcnNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1ZNc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93QkNzXT1cIiFoaWRlTWV0YWRhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItc3RvcmUtZml4dHVyZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gQ29sbGFwc2UgQnV0dG9uIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhcHNlLWhhbmRsZXIgcmlnaHRcIiBcclxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZEZpeHR1cmVEYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVJpZ2h0UGFuZWwoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJpc1JpZ2h0UGFuZWxDb2xsYXBzZWRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4yNzMwOCAxMi42MzZMNC42MzY3MiA4Ljk5OTY0TDguMjczMDggNS4zNjMyOE0xMy4zNjQgMTIuNjM2TDkuNzI3NjMgOC45OTk2NEwxMy4zNjQgNS4zNjMyOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS40NTQ1NVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIiFpc1JpZ2h0UGFuZWxDb2xsYXBzZWRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOS43MjY5MiA1LjM2Mzk5TDEzLjM2MzMgOS4wMDAzNkw5LjcyNjkyIDEyLjYzNjdNNC42MzYwMSA1LjM2Mzk5TDguMjcyMzcgOS4wMDAzNkw0LjYzNjAxIDEyLjYzNjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNDU0NTVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gTm8gUHJldmlldyBTZWN0aW9uIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJuby1wcmV2aWV3XCIgKm5nSWY9XCJoYXNTdG9yZXMgJiYgIXNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3XCI+XHJcbiAgICAgICAgICAgIDxkaXYgPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjMxNVwiIGhlaWdodD1cIjE1NVwiIHZpZXdCb3g9XCIwIDAgMzE1IDE1NVwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAzLjgxIDQ3LjAxOTVDODkuNTQ2MyA0Ny4wMTk3IDc3Ljk4MzQgNTguNTgyNCA3Ny45ODM0IDcyLjg0NTdDNzcuOTgzNCA3OC43NjE3IDczLjk4MDMgODUuNTA1OSA2OC4wNjQzIDg1LjUwNTlINDUuMjU4OEMzMC45OTUzIDg1LjUwNTkgMTkuNDMxNiA5Ny4wNjg2IDE5LjQzMTYgMTExLjMzMkMxOS40MzE2IDEyNS41OTYgMzAuOTk1MyAxMzcuMTU4IDQ1LjI1ODggMTM3LjE1OEgxODMuMzU3QzIwMC4yNDggMTM3LjE1OCAyMTYuMzIgMTIzLjk5MiAyMzMuMjEgMTIzLjk5MkgyOTkuMjQ1QzMwNCAxMjMuOTkyIDMwNy44NTQgMTIwLjEzNyAzMDcuODU0IDExNS4zODNDMzA3Ljg1MyAxMTAuNjI5IDMwMy45OTkgMTA2Ljc3NCAyOTkuMjQ1IDEwNi43NzRIMjExLjYyNUMyMDkuOTggMTA2Ljc3NCAyMDguNTg4IDEwNS41NTMgMjA4LjEyIDEwMy45NzZDMjA3LjM4MSAxMDEuNDg2IDIwOS4wODIgOTguNjcxOSAyMTEuNjc5IDk4LjY3MTlIMjQxLjkwOUMyNTYuMTcyIDk4LjY3MTcgMjY3LjczNSA4Ny4xMDkgMjY3LjczNSA3Mi44NDU3QzI2Ny43MzUgNTguNTgyNCAyNTYuMTcyIDQ3LjAxOTggMjQxLjkwOSA0Ny4wMTk1SDEwMy44MVpcIiBmaWxsPVwiI0VBRUNGMFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjI0MC42OTRcIiBoZWlnaHQ9XCIxNi45OTU2XCIgcng9XCI4LjQ5NzhcIiB0cmFuc2Zvcm09XCJtYXRyaXgoLTEgMCAwIDEgMjQ2LjYwMyA0OC44NTc0KVwiIGZpbGw9XCIjRUFFQ0YwXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI1LjQyMTQ3XCIgY3k9XCI1LjQyMTQ3XCIgcj1cIjUuNDIxNDdcIiB0cmFuc2Zvcm09XCJtYXRyaXgoLTEgMCAwIDEgNTYuMjk3OSAxMTMuMjgxKVwiIGZpbGw9XCIjNkJDQUZGXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIzLjI1Mjg4XCIgY3k9XCIzLjI1Mjg4XCIgcj1cIjMuMjUyODhcIiB0cmFuc2Zvcm09XCJtYXRyaXgoLTEgMCAwIDEgMjQ0Ljk2NSA2OC44MjYyKVwiIGZpbGw9XCIjMDBBM0ZGXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIzLjI1Mjg4XCIgY3k9XCIzLjI1Mjg4XCIgcj1cIjMuMjUyODhcIiB0cmFuc2Zvcm09XCJtYXRyaXgoLTEgMCAwIDEgMjE1LjY4OSAxMy41MjczKVwiIGZpbGw9XCIjMDBBM0ZGXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIyLjE2ODU5XCIgY3k9XCIyLjE2ODU5XCIgcj1cIjIuMTY4NTlcIiB0cmFuc2Zvcm09XCJtYXRyaXgoLTEgMCAwIDEgMTA0LjAwNiAxMzguMjIxKVwiIGZpbGw9XCIjMDBBM0ZGXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCI2OC41MDFcIiB5PVwiNDQuMTUyM1wiIHdpZHRoPVwiMTY2Ljk5OVwiIGhlaWdodD1cIjk3LjkzNzFcIiByeD1cIjE1LjEwMTVcIiBmaWxsPVwiIzZCQ0FGRlwiIHN0cm9rZT1cIiMwMEEzRkZcIiBzdHJva2Utd2lkdGg9XCIzXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXNrIGlkPVwicGF0aC04LWluc2lkZS0xXzkzNl8xNTAzODNcIiBmaWxsPVwid2hpdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkzLjExNzIgMTlDOTQuMDYyNSAxOSA5NC45ODkyIDE5LjA4MjggOTUuODg4NyAxOS4yNDIyVjExNi43ODRDOTQuOTg5MiAxMTYuNjI1IDk0LjA2MjUgMTE2LjU0MiA5My4xMTcyIDExNi41NDJIODIuNzc0NEM3NC4wNjQyIDExNi41NDIgNjcuMDAzMSAxMjMuNjAzIDY3LjAwMjkgMTMyLjMxM1YzNC43NzE1QzY3LjAwMjkgMjYuMDYxMiA3NC4wNjQxIDE5IDgyLjc3NDQgMTlIOTMuMTE3MlpcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXNrPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOTMuMTE3MiAxOUM5NC4wNjI1IDE5IDk0Ljk4OTIgMTkuMDgyOCA5NS44ODg3IDE5LjI0MjJWMTE2Ljc4NEM5NC45ODkyIDExNi42MjUgOTQuMDYyNSAxMTYuNTQyIDkzLjExNzIgMTE2LjU0Mkg4Mi43NzQ0Qzc0LjA2NDIgMTE2LjU0MiA2Ny4wMDMxIDEyMy42MDMgNjcuMDAyOSAxMzIuMzEzVjM0Ljc3MTVDNjcuMDAyOSAyNi4wNjEyIDc0LjA2NDEgMTkgODIuNzc0NCAxOUg5My4xMTcyWlwiIGZpbGw9XCIjNkJDQUZGXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOTMuMTE3MiAxOUw5My4xMTczIDE2SDkzLjExNzJWMTlaTTk1Ljg4ODcgMTkuMjQyMkg5OC44ODg3VjE2LjcyNzFMOTYuNDEyMiAxNi4yODgyTDk1Ljg4ODcgMTkuMjQyMlpNOTUuODg4NyAxMTYuNzg0TDk1LjM2NTEgMTE5LjczOEw5OC44ODg3IDEyMC4zNjNWMTE2Ljc4NEg5NS44ODg3Wk05My4xMTcyIDExNi41NDJMOTMuMTE3MyAxMTMuNTQySDkzLjExNzJWMTE2LjU0MlpNNjcuMDAyOSAxMzIuMzEzSDY0LjAwMjlMNzAuMDAyOSAxMzIuMzE0TDY3LjAwMjkgMTMyLjMxM1pNOTMuMTE3MiAxOUw5My4xMTcxIDIyQzkzLjg4NzIgMjIgOTQuNjM4NyAyMi4wNjc0IDk1LjM2NTEgMjIuMTk2MUw5NS44ODg3IDE5LjI0MjJMOTYuNDEyMiAxNi4yODgyQzk1LjMzOTYgMTYuMDk4MSA5NC4yMzc3IDE2IDkzLjExNzMgMTZMOTMuMTE3MiAxOVpNOTUuODg4NyAxOS4yNDIySDkyLjg4ODdWMTE2Ljc4NEg5NS44ODg3SDk4Ljg4ODdWMTkuMjQyMkg5NS44ODg3Wk05NS44ODg3IDExNi43ODRMOTYuNDEyMiAxMTMuODNDOTUuMzM5NiAxMTMuNjQgOTQuMjM3NyAxMTMuNTQyIDkzLjExNzMgMTEzLjU0Mkw5My4xMTcyIDExNi41NDJMOTMuMTE3MSAxMTkuNTQyQzkzLjg4NzIgMTE5LjU0MiA5NC42Mzg3IDExOS42MDkgOTUuMzY1MSAxMTkuNzM4TDk1Ljg4ODcgMTE2Ljc4NFpNOTMuMTE3MiAxMTYuNTQyVjExMy41NDJIODIuNzc0NFYxMTYuNTQyVjExOS41NDJIOTMuMTE3MlYxMTYuNTQyWk04Mi43NzQ0IDExNi41NDJWMTEzLjU0MkM3Mi40MDczIDExMy41NDIgNjQuMDAzMiAxMjEuOTQ3IDY0LjAwMjkgMTMyLjMxM0w2Ny4wMDI5IDEzMi4zMTNMNzAuMDAyOSAxMzIuMzE0QzcwLjAwMzEgMTI1LjI2IDc1LjcyMTIgMTE5LjU0MiA4Mi43NzQ0IDExOS41NDJWMTE2LjU0MlpNNjcuMDAyOSAxMzIuMzEzSDcwLjAwMjlWMzQuNzcxNUg2Ny4wMDI5SDY0LjAwMjlWMTMyLjMxM0g2Ny4wMDI5Wk02Ny4wMDI5IDM0Ljc3MTVINzAuMDAyOUM3MC4wMDI5IDI3LjcxOCA3NS43MjEgMjIgODIuNzc0NCAyMlYxOVYxNkM3Mi40MDcyIDE2IDY0LjAwMjkgMjQuNDA0MyA2NC4wMDI5IDM0Ljc3MTVINjcuMDAyOVpNODIuNzc0NCAxOVYyMkg5My4xMTcyVjE5VjE2SDgyLjc3NDRWMTlaXCIgZmlsbD1cIiMwMEEzRkZcIiBtYXNrPVwidXJsKCNwYXRoLTgtaW5zaWRlLTFfOTM2XzE1MDM4MylcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpbmUgeDE9XCI3Ni45NjE5XCIgeTE9XCI0Mi42NTIzXCIgeDI9XCI3Ni45NjE5XCIgeTI9XCI4NC40ODgxXCIgc3Ryb2tlPVwiIzk5REFGRlwiIHN0cm9rZS13aWR0aD1cIjMuOTg0MzZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIyMTguMjA2XCIgY3k9XCI3MC4xNzU1XCIgcj1cIjMuMjk2NjNcIiBmaWxsPVwid2hpdGVcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjExMS43ODdcIiBjeT1cIjU1LjE2N1wiIHI9XCIyLjUyNjM3XCIgZmlsbD1cIiM5OURBRkZcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjk5LjM4NDVcIiBjeT1cIjEyNC45ODZcIiByPVwiMy40NDUwNVwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEzNS41MjkgMzMuNDcxN0MxNTEuMjg1IDI0LjM3NDkgMTcxLjQzMiAyOS43NzMyIDE4MC41MjkgNDUuNTI5M0MxODguNTYgNTkuNDM5OCAxODUuMjkxIDc2Ljc3MDcgMTczLjU3MyA4Ni45MDA0TDE5My40NTcgMTIxLjMzOUMxOTQuOTMyIDEyMy44OTQgMTk0LjA1NiAxMjcuMTYxIDE5MS41MDEgMTI4LjYzNkMxODguOTQ2IDEzMC4xMTEgMTg1LjY3OSAxMjkuMjM2IDE4NC4yMDQgMTI2LjY4MUwxNjQuNDY2IDkyLjQ5MzJDMTQ5LjQ0NyA5OC42NTUyIDEzMS44MTQgOTIuOTIgMTIzLjQ3MiA3OC40NzE3QzExNC4zNzUgNjIuNzE1NiAxMTkuNzczIDQyLjU2ODUgMTM1LjUyOSAzMy40NzE3Wk0xNzIuNjk4IDUwLjA1MThDMTY2LjA5OSAzOC42MjA5IDE1MS40ODIgMzQuNzA0MSAxNDAuMDUxIDQxLjMwMzdDMTI4LjYyIDQ3LjkwMzUgMTI0LjcwMyA2Mi41MjA0IDEzMS4zMDMgNzMuOTUxMkMxMzcuOTAyIDg1LjM4MTcgMTUyLjUxOSA4OS4yOTc3IDE2My45NSA4Mi42OTgyQzE3NS4zODEgNzYuMDk4NyAxNzkuMjk3IDYxLjQ4MjYgMTcyLjY5OCA1MC4wNTE4WlwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTUzLjAwMVwiIGN5PVwiNTcuMDAxN1wiIHI9XCIyMy44OTk0XCIgdHJhbnNmb3JtPVwicm90YXRlKC0zMCAxNTMuMDAxIDU3LjAwMTcpXCIgZmlsbD1cIiM5OURBRkZcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hc2sgaWQ9XCJwYXRoLTE2LWluc2lkZS0yXzkzNl8xNTAzODNcIiBmaWxsPVwid2hpdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE1My4zODQgNDAuOTk1N0MxNTMuNDM1IDM5LjcwMDEgMTUyLjQyMyAzOC41OTI3IDE1MS4xMzEgMzguNzA5NUMxNDguODU4IDM4LjkxNTEgMTQ2LjYzNiAzOS41NDkxIDE0NC41ODYgNDAuNTg1NEMxNDEuODM1IDQxLjk3NiAxMzkuNDg0IDQ0LjA0NSAxMzcuNzU1IDQ2LjU5N0MxMzYuMDI2IDQ5LjE0OSAxMzQuOTc3IDUyLjA5OTYgMTM0LjcwNiA1NS4xNzAxQzEzNC41MDQgNTcuNDU4MyAxMzQuNzM5IDU5Ljc1NjggMTM1LjM5MSA2MS45NDQ3QzEzNS43NjIgNjMuMTg3MiAxMzcuMTY2IDYzLjcxNjkgMTM4LjM1IDYzLjE4OTFDMTM5LjUzNCA2Mi42NjEyIDE0MC4wNDQgNjEuMjc0NiAxMzkuNzMgNjAuMDE2NUMxMzkuMzcgNTguNTczNSAxMzkuMjUxIDU3LjA3NTMgMTM5LjM4MyA1NS41ODNDMTM5LjU4NCA1My4zMDc4IDE0MC4zNjEgNTEuMTIxNCAxNDEuNjQyIDQ5LjIzMDRDMTQyLjkyNCA0Ny4zMzk0IDE0NC42NjYgNDUuODA2MyAxNDYuNzA0IDQ0Ljc3NThDMTQ4LjA0MSA0NC4xIDE0OS40NzcgNDMuNjU1MSAxNTAuOTUgNDMuNDU0MkMxNTIuMjM1IDQzLjI3OTIgMTUzLjMzMyA0Mi4yOTEzIDE1My4zODQgNDAuOTk1N1pcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXNrPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTUzLjM4NCA0MC45OTU3QzE1My40MzUgMzkuNzAwMSAxNTIuNDIzIDM4LjU5MjcgMTUxLjEzMSAzOC43MDk1QzE0OC44NTggMzguOTE1MSAxNDYuNjM2IDM5LjU0OTEgMTQ0LjU4NiA0MC41ODU0QzE0MS44MzUgNDEuOTc2IDEzOS40ODQgNDQuMDQ1IDEzNy43NTUgNDYuNTk3QzEzNi4wMjYgNDkuMTQ5IDEzNC45NzcgNTIuMDk5NiAxMzQuNzA2IDU1LjE3MDFDMTM0LjUwNCA1Ny40NTgzIDEzNC43MzkgNTkuNzU2OCAxMzUuMzkxIDYxLjk0NDdDMTM1Ljc2MiA2My4xODcyIDEzNy4xNjYgNjMuNzE2OSAxMzguMzUgNjMuMTg5MUMxMzkuNTM0IDYyLjY2MTIgMTQwLjA0NCA2MS4yNzQ2IDEzOS43MyA2MC4wMTY1QzEzOS4zNyA1OC41NzM1IDEzOS4yNTEgNTcuMDc1MyAxMzkuMzgzIDU1LjU4M0MxMzkuNTg0IDUzLjMwNzggMTQwLjM2MSA1MS4xMjE0IDE0MS42NDIgNDkuMjMwNEMxNDIuOTI0IDQ3LjMzOTQgMTQ0LjY2NiA0NS44MDYzIDE0Ni43MDQgNDQuNzc1OEMxNDguMDQxIDQ0LjEgMTQ5LjQ3NyA0My42NTUxIDE1MC45NSA0My40NTQyQzE1Mi4yMzUgNDMuMjc5MiAxNTMuMzMzIDQyLjI5MTMgMTUzLjM4NCA0MC45OTU3WlwiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiNlwiIG1hc2s9XCJ1cmwoI3BhdGgtMTYtaW5zaWRlLTJfOTM2XzE1MDM4MylcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMzYuNTI5IDI4LjQ3MTdDMTUyLjI4NSAxOS4zNzQ5IDE3Mi40MzIgMjQuNzczMiAxODEuNTI5IDQwLjUyOTNDMTg5LjU2IDU0LjQzOTggMTg2LjI5MSA3MS43NzA3IDE3NC41NzMgODEuOTAwNEwxOTQuNDU3IDExNi4zMzlDMTk1LjkzMiAxMTguODk0IDE5NS4wNTYgMTIyLjE2MSAxOTIuNTAxIDEyMy42MzZDMTg5Ljk0NiAxMjUuMTExIDE4Ni42NzkgMTI0LjIzNiAxODUuMjA0IDEyMS42ODFMMTY1LjQ2NiA4Ny40OTMyQzE1MC40NDcgOTMuNjU1MiAxMzIuODE0IDg3LjkyIDEyNC40NzIgNzMuNDcxN0MxMTUuMzc1IDU3LjcxNTYgMTIwLjc3MyAzNy41Njg1IDEzNi41MjkgMjguNDcxN1pNMTczLjY5OCA0NS4wNTE4QzE2Ny4wOTkgMzMuNjIwOSAxNTIuNDgyIDI5LjcwNDEgMTQxLjA1MSAzNi4zMDM3QzEyOS42MiA0Mi45MDM1IDEyNS43MDMgNTcuNTIwNCAxMzIuMzAzIDY4Ljk1MTJDMTM4LjkwMiA4MC4zODE3IDE1My41MTkgODQuMjk3NyAxNjQuOTUgNzcuNjk4MkMxNzYuMzgxIDcxLjA5ODcgMTgwLjI5NyA1Ni40ODI2IDE3My42OTggNDUuMDUxOFpcIiBmaWxsPVwiIzAwQTNGRlwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGgzPk5vIHByZXZpZXcgeWV0PC9oMz5cclxuICAgICAgICAgICAgPHA+QWRkIGEgZmluZCBhbmQgcmVwbGFjZW1lbnQgdG8gcHJldmlldy48L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gQWN0aW9uIEJ1dHRvbiBTZWN0aW9uIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnV0dG9uLXNlY3Rpb25cIiAqbmdJZj1cImhhc1N0b3Jlc1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWFwcGx5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvblJldmlld0FuZFJlcGxhY2UoKVwiIFtkaXNhYmxlZF09XCJsb2FkaW5nIHx8IGZpbmRMb2FkaW5nIHx8IHJlcGxhY2VMb2FkaW5nIHx8IGJhdGNoUHJvY2Vzc2luZyB8fCAhZmluZFByb21wdC52YWx1ZSB8fCAhaGFzUmVwbGFjZVNlbGVjdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBiYXRjaFByb2Nlc3NpbmcgPyAnUHJvY2Vzc2luZy4uLicgOiAnUmV2aWV3IEFuZCBSZXBsYWNlJyB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
2851
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcGFyZS10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9jb2xsZWN0aW9uLXVwZGF0ZS1haS9maW5kLXJlcGxhY2UtbGF5b3V0L3ByZXBhcmUtdGVtcGxhdGUvcHJlcGFyZS10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9jb2xsZWN0aW9uLXVwZGF0ZS1haS9maW5kLXJlcGxhY2UtbGF5b3V0L3ByZXBhcmUtdGVtcGxhdGUvcHJlcGFyZS10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFvQyxTQUFTLEVBQWlDLE1BQU0sZUFBZSxDQUFDO0FBQ3RILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTlELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxvQkFBb0IsRUFBZSxNQUFNLHNEQUFzRCxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUk3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztB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QixFQUFFLG9CQUFvQixFQUFFLHNCQUFzQixFQUFFLHFCQUFxQixDQUFDLGFBRzVJLENBQUMsYUFBYSxDQUFDO3FVQWdDRSxnQkFBZ0I7c0JBQTNDLFNBQVM7dUJBQUMsZUFBZTtnQkFDVyx5QkFBeUI7c0JBQTdELFNBQVM7dUJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBUaXRsZUNhc2VQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFJlYWN0aXZlU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vcmVhY3RpdmUtc2VsZWN0L3JlYWN0aXZlLXNlbGVjdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTdG9yZVNlbGVjdENvbXBvbmVudCwgU3RvcmVPcHRpb24gfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3N0b3JlLXNlbGVjdC9zdG9yZS1zZWxlY3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3RvcmVEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc3RvcmUtZHJvcGRvd24vc3RvcmUtZHJvcGRvd24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN0b3JlQnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb2xsZWN0aW9uVXBkYXRlQWlEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IFN0b3JlLCBGaW5kUmVwbGFjZSB9IGZyb20gJy4uLy4uL21vZGVscy9maW5kLXJlcGxhY2UubW9kZWwnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0ICogYXMgZmFicmljIGZyb20gXCJmYWJyaWNcIjtcclxuaW1wb3J0IHsgU3RvcmVGaXh0dXJlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zdG9yZS1maXh0dXJlL3N0b3JlLWZpeHR1cmUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVm1MaWJyYXJ5TGlzdCB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvdm0tbGlicmFyeS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktZ2xvYmFsJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLXNoYXJlZCc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBCYXRjaENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9iYXRjaC1jb25maXJtYXRpb24tbW9kYWwvYmF0Y2gtY29uZmlybWF0aW9uLW1vZGFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IGdldEZpeHR1cmVDYW52YXNMYWJlbCwgZ2V0Rml4dHVyZVByb2R1Y3RDYXBhY2l0eSB9IGZyb20gJy4uLy4uLy4uLy4uL2Z1bmN0aW9ucy9wbGFuby5mdW5jdGlvbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1wcmVwYXJlLXRlbXBsYXRlJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZVNlbGVjdENvbXBvbmVudCwgU3RvcmVTZWxlY3RDb21wb25lbnQsIFN0b3JlRHJvcGRvd25Db21wb25lbnQsIFN0b3JlRml4dHVyZUNvbXBvbmVudF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3ByZXBhcmUtdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9wcmVwYXJlLXRlbXBsYXRlLmNvbXBvbmVudC5zY3NzJyxcclxuICBwcm92aWRlcnM6IFtUaXRsZUNhc2VQaXBlXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFByZXBhcmVUZW1wbGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuICBzZWFyY2hNb2RlcyA9IFtcclxuICAgIHsgdmFsdWU6ICdzdG9yZScsIGxhYmVsOiAnU3RvcmVzJyB9LFxyXG4gICAgeyB2YWx1ZTogJ2NsdXN0ZXInLCBsYWJlbDogJ0NsdXN0ZXJzJyB9LFxyXG4gIF07XHJcbiAgc2VsZWN0ZWRNb2RlID0gbmV3IEZvcm1Db250cm9sKCdzdG9yZScpO1xyXG4gIHRhcmdldCA9IG5ldyBGb3JtQ29udHJvbCgnYm90aCcpO1xyXG4gIGZpbmRQcm9tcHQgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xyXG4gIHJlcGxhY2VQcm9tcHQgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xyXG4gIC8vIGxpYi1yZWFjdGl2ZS1zZWxlY3QgYmluZHMgdmlhIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGFuZCBlbWl0cyB0aGUgc2VsZWN0ZWQgSUQsIG5vdCB0aGUgZnVsbCBvYmplY3QuXHJcbiAgLy8gS2VlcCB0aGUgRm9ybUNvbnRyb2wgdHlwZWQgYXMgYSBzdHJpbmcgKHRoZSBfaWQpIGFuZCBsb29rIHVwIHRoZSBmdWxsIHJlY29yZCB2aWEgZ2V0UmVwbGFjZUJyYW5kU2VsZWN0aW9uKCkgLyBnZXRSZXBsYWNlVm1TZWxlY3Rpb24oKS5cclxuICByZXBsYWNlQnJhbmQgPSBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCk7XHJcbiAgcmVwbGFjZVZtID0gbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwpO1xyXG4gIFxyXG4gIHN0b3JlT3B0aW9uczogU3RvcmVPcHRpb25bXSA9IFtdO1xyXG4gIGNsdXN0ZXJEYXRhOiBhbnlbXSA9IFtdO1xyXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzYXZpbmdEcmFmdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGJhdGNoUHJvY2Vzc2luZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIFxyXG4gIHNlbGVjdGVkU3RvcmVzOiBTdG9yZU9wdGlvbltdID0gW107XHJcbiAgZmluZFJlcGxhY2VEYXRhOiBGaW5kUmVwbGFjZSB8IG51bGwgPSBudWxsO1xyXG4gIHNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3OiBhbnkgPSBudWxsO1xyXG4gIHN0b3JlTGlzdEZvckRyb3Bkb3duOiBhbnlbXSA9IFtdO1xyXG4gIHN0b3JlRHJvcGRvd25JdGVtczogYW55W10gPSBbXTtcclxuICBzZWxlY3RlZFN0b3JlVmFsdWVzOiBhbnlbXSA9IFtdO1xyXG5cclxuICAvLyBDYW52YXMgcHJvcGVydGllc1xyXG4gIEBWaWV3Q2hpbGQoJ3ByZXZpZXdDYW52YXMnKSBwcmV2aWV3Q2FudmFzUmVmITogRWxlbWVudFJlZjxIVE1MQ2FudmFzRWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZCgncHJldmlld0NhbnZhc0NvbnRhaW5lcicpIHByZXZpZXdDYW52YXNDb250YWluZXJSZWYhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuICBwcmV2aWV3Q2FudmFzITogZmFicmljLkNhbnZhcztcclxuICBwbGFub0RhdGE6IGFueTtcclxuICBmbG9vckRhdGE6IGFueTtcclxuICB3YWxsVGhpY2tuZXNzID0gMzA7XHJcbiAgdmVydGljYWxNYXJnaW4gPSAoMS4yNSAvIDEwMCkgKiB0aGlzLnRvUGl4ZWxzKDE1MjQsIFwibW1cIik7XHJcbiAgY2RuVXJsOiBzdHJpbmcgPSAnJztcclxuICBhY3RpdmVIaWdobGlnaHQ6IGZhYnJpYy5SZWN0IHwgbnVsbCA9IG51bGw7XHJcbiAgY2FuY2VsSGlnaGxpZ2h0QmxpbmsgPSBmYWxzZTtcclxuICBzZWxlY3RlZEZpeHR1cmU6IGFueTtcclxuICBzZWxlY3RlZEZpeHR1cmVEYXRhOiBhbnkgPSBudWxsO1xyXG4gIG9yaWdpbmFsRml4dHVyZURhdGE6IGFueSA9IG51bGw7XHJcbiAgcHJpdmF0ZSBvcmlnaW5hbEZpeHR1cmVzTWFwOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcCgpO1xyXG4gIGlzUmlnaHRQYW5lbENvbGxhcHNlZCA9IGZhbHNlO1xyXG4gIGNhbnZhc0xvYWRpbmcgPSBmYWxzZTtcclxuICBmaW5kTG9hZGluZyA9IGZhbHNlO1xyXG4gIHJlcGxhY2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgZmluZEV4ZWN1dGVkID0gZmFsc2U7XHJcbiAgcmVwbGFjZUV4ZWN1dGVkID0gZmFsc2U7XHJcbiAgaXNGaW5kUHJvbXB0RnJvbUFwaSA9IGZhbHNlO1xyXG4gIGFsbEZpeHR1cmVJbnN0YW5jZXM6IGFueVtdID0gW107XHJcbiAgdm1MaXN0OiBWbUxpYnJhcnlMaXN0W10gPSBbXTtcclxuICBicmFuZExpc3Q6IGFueVtdID0gW107XHJcbiAgcmVwbGFjZVZtTGlzdDogYW55W10gPSBbXTtcclxuICBjbGllbnRJZDogc3RyaW5nID0gJyc7XHJcbiAgaGlkZU1ldGFkYXRhOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgcHJldmlvdXNTZWFyY2hNb2RlOiAnc3RvcmUnIHwgJ2NsdXN0ZXInIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBpc0luaXRpYWxMb2FkID0gdHJ1ZTtcclxuICBwcml2YXRlIGhhc1Jlc3RvcmVkRGF0YSA9IGZhbHNlO1xyXG4gIHByaXZhdGUgaXNVcGRhdGluZ0Zyb21TZXJ2aWNlID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBpc0xvYWRpbmdQbGFub2dyYW0gPSBmYWxzZTtcclxuXHJcbiAgZ2V0IGhhc1N0b3JlcygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhISh0aGlzLmZpbmRSZXBsYWNlRGF0YT8uc3RvcmVzICYmIHRoaXMuZmluZFJlcGxhY2VEYXRhLnN0b3Jlcy5sZW5ndGggPiAwKTtcclxuICB9XHJcblxyXG4gIGdldFN0b3JlQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmZpbmRSZXBsYWNlRGF0YT8uc3RvcmVDb3VudCB8fCB0aGlzLmZpbmRSZXBsYWNlRGF0YT8uc3RvcmVzPy5sZW5ndGggfHwgMDtcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnRGaXh0dXJlRGF0YSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSB8fCB0aGlzLm9yaWdpbmFsRml4dHVyZURhdGE7XHJcbiAgfVxyXG5cclxuICBnZXRGaXh0dXJlTGFiZWwoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmdldEN1cnJlbnRGaXh0dXJlRGF0YSgpO1xyXG4gICAgcmV0dXJuIGZpeHR1cmU/LmhlYWRlcj8ubGFiZWwgfHwgJyc7XHJcbiAgfVxyXG5cclxuICBnZXRGaXh0dXJlQ2F0ZWdvcnkoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmdldEN1cnJlbnRGaXh0dXJlRGF0YSgpO1xyXG4gICAgcmV0dXJuIGZpeHR1cmU/LmZpeHR1cmVDYXRlZ29yeSB8fCAnJztcclxuICB9XHJcblxyXG4gIGdldEZpeHR1cmVXaWR0aCgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZ2V0Q3VycmVudEZpeHR1cmVEYXRhKCk7XHJcbiAgICBpZiAoIWZpeHR1cmU/LmZpeHR1cmVXaWR0aCkgcmV0dXJuICcnO1xyXG4gICAgY29uc3Qgd2lkdGggPSBmaXh0dXJlLmZpeHR1cmVXaWR0aC52YWx1ZTtcclxuICAgIGNvbnN0IHVuaXQgPSBmaXh0dXJlLmZpeHR1cmVXaWR0aC51bml0IHx8ICdtbSc7XHJcbiAgICBsZXQgZGltZW5zaW9uU3RyID0gYCR7d2lkdGh9JHt1bml0fWA7XHJcbiAgICAvLyBDb252ZXJ0IHRvIGZlZXQgaWYgbmVlZGVkICgxMjAwbW0gPSA0ZnQpXHJcbiAgICBpZiAodW5pdCA9PT0gJ21tJyAmJiB3aWR0aCA9PT0gMTIwMCkge1xyXG4gICAgICBkaW1lbnNpb25TdHIgPSBgJHt3aWR0aH0ke3VuaXR9LzRmdGA7XHJcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09ICdtbScgJiYgd2lkdGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGZlZXQgPSBNYXRoLnJvdW5kKHdpZHRoIC8gMzAwKTtcclxuICAgICAgaWYgKGZlZXQgPiAwKSB7XHJcbiAgICAgICAgZGltZW5zaW9uU3RyID0gYCR7d2lkdGh9JHt1bml0fS8ke2ZlZXR9ZnRgO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGltZW5zaW9uU3RyO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2hlbGZDb3VudCgpOiBudW1iZXIge1xyXG4gICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZ2V0Q3VycmVudEZpeHR1cmVEYXRhKCk7XHJcbiAgICByZXR1cm4gZml4dHVyZT8uc2hlbGZDb25maWc/Lmxlbmd0aCB8fCAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rml4dHVyZUNhcGFjaXR5KCk6IG51bWJlciB7XHJcbiAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5nZXRDdXJyZW50Rml4dHVyZURhdGEoKTtcclxuICAgIHJldHVybiBmaXh0dXJlPy5maXh0dXJlQ2FwYWNpdHkgfHwgMDtcclxuICB9XHJcblxyXG4gIGdldE9yaWdpbmFsRml4dHVyZUZvckRpc3BsYXkoKTogYW55IHtcclxuICAgIC8vIElmIG9yaWdpbmFsRml4dHVyZURhdGEgZXhpc3RzLCB1c2UgaXRcclxuICAgIGlmICh0aGlzLm9yaWdpbmFsRml4dHVyZURhdGEpIHtcclxuICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxGaXh0dXJlRGF0YTtcclxuICAgIH1cclxuICAgIC8vIElmIG5vdCwgdHJ5IHRvIGdldCBmcm9tIG1hcCB1c2luZyBzZWxlY3RlZEZpeHR1cmVEYXRhIElEXHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhPy5faWQpIHtcclxuICAgICAgY29uc3Qgc3RvcmVkT3JpZ2luYWwgPSB0aGlzLm9yaWdpbmFsRml4dHVyZXNNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YS5faWQpO1xyXG4gICAgICBpZiAoc3RvcmVkT3JpZ2luYWwpIHtcclxuICAgICAgICByZXR1cm4gc3RvcmVkT3JpZ2luYWw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIEZhbGxiYWNrIHRvIHNlbGVjdGVkRml4dHVyZURhdGEgKGZvciBmaW5kLW9ubHkgY2FzZSlcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGE7XHJcbiAgfVxyXG5cclxuICBzaG91bGRTaG93QmVmb3JlQWZ0ZXIoKTogYm9vbGVhbiB7XHJcbiAgICAvLyBTaG93IEJlZm9yZS9BZnRlciBvbmx5IHdoZW4gc2VsZWN0ZWRGaXh0dXJlRGF0YSBleGlzdHMgQU5EIGl0IGhhcyBmaW5kIGRhdGFcclxuICAgIGlmICghdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIHRoaXMgZml4dHVyZSBoYXMgZmluZCBkYXRhIChmaW5kUmVzcG9uc2VEYXRhIGV4aXN0cyBmb3IgdGhpcyBzcGVjaWZpYyBmaXh0dXJlKVxyXG4gICAgaWYgKHRoaXMuZmluZFJlcGxhY2VEYXRhPy5zdG9yZXMgJiYgdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldykge1xyXG4gICAgICBjb25zdCBzdG9yZSA9IHRoaXMuZmluZFJlcGxhY2VEYXRhLnN0b3Jlcy5maW5kKFxyXG4gICAgICAgIChzOiBTdG9yZSkgPT4gcy5zdG9yZU5hbWUgPT09IHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcuc3RvcmVOYW1lXHJcbiAgICAgICk7XHJcbiAgICAgIC8vIFNob3cgQmVmb3JlL0FmdGVyIGlmIGZpbmRSZXNwb25zZURhdGEgZXhpc3RzIGFuZCBtYXRjaGVzIHRoZSBjdXJyZW50IGZpeHR1cmVcclxuICAgICAgaWYgKHN0b3JlPy5maW5kUmVzcG9uc2VEYXRhICYmIHN0b3JlLmZpbmRSZXNwb25zZURhdGEgPT09IHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YS5faWQpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gQWxzbyBjaGVjayBpZiBmaW5kRXhlY3V0ZWQgZmxhZyBpcyBzZXQgQU5EIHdlIGhhdmUgb3JpZ2luYWxGaXh0dXJlRGF0YSBvciBpdCdzIGluIHRoZSBtYXBcclxuICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSB3aGVuIGZpbmQgd2FzIGp1c3QgZXhlY3V0ZWRcclxuICAgIGlmICh0aGlzLmZpbmRFeGVjdXRlZCkge1xyXG4gICAgICBjb25zdCBmaXh0dXJlSWQgPSB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEuX2lkO1xyXG4gICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIG9yaWdpbmFsIGZpeHR1cmUgc3RvcmVkIChlaXRoZXIgaW4gb3JpZ2luYWxGaXh0dXJlRGF0YSBvciBtYXApXHJcbiAgICAgIGlmICh0aGlzLm9yaWdpbmFsRml4dHVyZURhdGEgfHwgdGhpcy5vcmlnaW5hbEZpeHR1cmVzTWFwLmhhcyhmaXh0dXJlSWQpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGlzQWZ0ZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIC8vIEVuYWJsZSBBZnRlciBvbmx5IHdoZW4gcmVwbGFjZVJlc3BvbnNlRGF0YSBleGlzdHMgZm9yIHRoZSBjdXJyZW50IGZpeHR1cmVcclxuICAgIC8vIEFmdGVyIGNsaWNraW5nIFwiUnVuXCIgb24gZmluZCwgdGhlIGZpeHR1cmUgc2hvdWxkIGJlIGRpc2FibGVkIHVudGlsIHJlcGxhY2UgcmVzcG9uc2UgaXMgYXZhaWxhYmxlXHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gRGlzYWJsZSBpZiBubyBmaXh0dXJlIGRhdGFcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gQ2hlY2sgaWYgcmVwbGFjZVJlc3BvbnNlRGF0YSBleGlzdHMgZm9yIGN1cnJlbnQgc3RvcmVcclxuICAgIC8vIHJlcGxhY2VSZXNwb25zZURhdGEgaXMgYW4gb2JqZWN0IHdpdGggdm1Db25maWcgYW5kL29yIHNoZWxmQ29uZmlnIHdoZW4gcmVwbGFjZSBpcyBleGVjdXRlZFxyXG4gICAgaWYgKHRoaXMuZmluZFJlcGxhY2VEYXRhPy5zdG9yZXMgJiYgdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldykge1xyXG4gICAgICBjb25zdCBzdG9yZSA9IHRoaXMuZmluZFJlcGxhY2VEYXRhLnN0b3Jlcy5maW5kKFxyXG4gICAgICAgIChzOiBTdG9yZSkgPT4gcy5zdG9yZU5hbWUgPT09IHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcuc3RvcmVOYW1lXHJcbiAgICAgICk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBDaGVjayBpZiByZXBsYWNlUmVzcG9uc2VEYXRhIGV4aXN0cyBhbmQgaXMgYW4gb2JqZWN0IChoYXMgdm1Db25maWcgb3Igc2hlbGZDb25maWcpXHJcbiAgICAgIGlmIChzdG9yZT8ucmVwbGFjZVJlc3BvbnNlRGF0YSAmJiB0eXBlb2Ygc3RvcmUucmVwbGFjZVJlc3BvbnNlRGF0YSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAvLyBWZXJpZnkgaXQgaGFzIGF0IGxlYXN0IG9uZSBjb25maWcgcHJvcGVydHkgKHZtQ29uZmlnIG9yIHNoZWxmQ29uZmlnKVxyXG4gICAgICAgIGlmIChzdG9yZS5yZXBsYWNlUmVzcG9uc2VEYXRhLnZtQ29uZmlnIHx8IHN0b3JlLnJlcGxhY2VSZXNwb25zZURhdGEuc2hlbGZDb25maWcpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gUmVwbGFjZSByZXNwb25zZSBhdmFpbGFibGUsIGVuYWJsZSBBZnRlclxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBBbHNvIGNoZWNrIHJlcGxhY2VFeGVjdXRlZCBmbGFnIGFzIGEgZmFsbGJhY2sgKGZvciBpbW1lZGlhdGUgdXBkYXRlcyBhZnRlciByZXBsYWNlKVxyXG4gICAgaWYgKHRoaXMucmVwbGFjZUV4ZWN1dGVkICYmIHRoaXMub3JpZ2luYWxGaXh0dXJlRGF0YSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7IC8vIFJlcGxhY2Ugd2FzIGp1c3QgZXhlY3V0ZWQsIGVuYWJsZSBBZnRlclxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBEZWZhdWx0OiBkaXNhYmxlIEFmdGVyIGlmIG5vIHJlcGxhY2UgcmVzcG9uc2UgaXMgYXZhaWxhYmxlXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzdG9yZUJ1aWxkZXJTZXJ2aWNlOiBTdG9yZUJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogQ29sbGVjdGlvblVwZGF0ZUFpRGF0YVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRpdGxlQ2FzZTogVGl0bGVDYXNlUGlwZSxcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWxcclxuICApIHt9XHJcblxyXG5cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvLyBHZXQgY2xpZW50IElEIGFuZCBDRE4gVVJMXHJcbiAgICB0aGlzLmdzLmVudmlyb25tZW50XHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoZW52KSA9PiB7XHJcbiAgICAgICAgdGhpcy5jZG5VcmwgPSBlbnYucGxhbm9ncmFtQ0ROIHx8ICcnO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhPy5jbGllbnQpIHtcclxuICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSBkYXRhLmNsaWVudDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgaGVhZGVyRGF0YSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgYXMgc3RyaW5nXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKGhlYWRlckRhdGE/LmNsaWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmNsaWVudElkID0gaGVhZGVyRGF0YS5jbGllbnQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNsaWVudElkKSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRSZXBsYWNlTGlicmFyaWVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyBTdWJzY3JpYmUgdG8gZGF0YSBzZXJ2aWNlIHRvIHJlc3RvcmUgc2F2ZWQgZGF0YVxyXG4gICAgdGhpcy5kYXRhU2VydmljZS5nZXRGaW5kUmVwbGFjZURhdGEoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3BzIGJ5IHNraXBwaW5nIHVwZGF0ZXMgd2hlbiB3ZSdyZSB1cGRhdGluZyBmcm9tIGZvcm0gY2hhbmdlc1xyXG4gICAgICAgIGlmICh0aGlzLmlzVXBkYXRpbmdGcm9tU2VydmljZSkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmZpbmRSZXBsYWNlRGF0YSA9IGRhdGE7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGRhdGEgJiYgIXRoaXMuaGFzUmVzdG9yZWREYXRhKSB7XHJcbiAgICAgICAgICAvLyBSZXN0b3JlIGFsbCBmb3JtIHZhbHVlcyBvbiBmaXJzdCBkYXRhIGxvYWRcclxuICAgICAgICAgIC8vIERvbid0IGNhbGwgdXBkYXRlU3RvcmVEcm9wZG93bkl0ZW1zIGhlcmUgYXMgcmVzdG9yZUZvcm1WYWx1ZXMgd2lsbCBoYW5kbGUgaXRcclxuICAgICAgICAgIHRoaXMucmVzdG9yZUZvcm1WYWx1ZXMoZGF0YSk7XHJcbiAgICAgICAgICB0aGlzLmhhc1Jlc3RvcmVkRGF0YSA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhICYmIHRoaXMuaGFzUmVzdG9yZWREYXRhKSB7XHJcblxyXG4gICAgICAgICAgLy8gVXBkYXRlIHN0b3JlIGRyb3Bkb3duIGl0ZW1zIHdoZW4gc3RvcmVzIGNoYW5nZSAoYWZ0ZXIgaW5pdGlhbCByZXN0b3JlKVxyXG4gICAgICAgICAgdGhpcy51cGRhdGVTdG9yZURyb3Bkb3duSXRlbXMoKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gSWYgZGF0YSBhbHJlYWR5IHJlc3RvcmVkLCBvbmx5IGhhbmRsZSBzZWFyY2hNb2RlIGNoYW5nZXNcclxuICAgICAgICAgIGlmIChkYXRhLnNlYXJjaE1vZGUgJiYgZGF0YS5zZWFyY2hNb2RlICE9PSB0aGlzLnByZXZpb3VzU2VhcmNoTW9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9kZS5zZXRWYWx1ZShkYXRhLnNlYXJjaE1vZGUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgdGhpcy5wcmV2aW91c1NlYXJjaE1vZGUgPSBkYXRhLnNlYXJjaE1vZGU7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZFN0b3Jlc09yQ2x1c3RlcnMoZGF0YSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBDaGVjayBpZiBjdXJyZW50bHkgcHJldmlld2VkIHN0b3JlIGlzIHN0aWxsIGluIHRoZSBsaXN0XHJcbiAgICAgICAgICBpZiAoZGF0YS5zdG9yZXMgJiYgZGF0YS5zdG9yZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBpc0N1cnJlbnRTdG9yZVN0aWxsSW5MaXN0ID0gdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldyAmJiBcclxuICAgICAgICAgICAgICBkYXRhLnN0b3Jlcy5zb21lKChzdG9yZTogU3RvcmUpID0+IFxyXG4gICAgICAgICAgICAgICAgKHN0b3JlLnN0b3JlSWQgfHwgc3RvcmUuc3RvcmVOYW1lKSA9PT0gdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldy5zdG9yZUlkIHx8XHJcbiAgICAgICAgICAgICAgICBzdG9yZS5zdG9yZU5hbWUgPT09IHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcuc3RvcmVOYW1lXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIElmIGN1cnJlbnQgc3RvcmUgd2FzIHJlbW92ZWQgb3Igbm8gc3RvcmUgaXMgc2VsZWN0ZWQsIHN3aXRjaCB0byBmaXJzdCBzdG9yZVxyXG4gICAgICAgICAgICBpZiAoIWlzQ3VycmVudFN0b3JlU3RpbGxJbkxpc3QpIHtcclxuICAgICAgICAgICAgICBjb25zdCBuZXdTdG9yZSA9IHRoaXMuc3RvcmVEcm9wZG93bkl0ZW1zWzBdO1xyXG4gICAgICAgICAgICAgIGlmIChuZXdTdG9yZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldyA9IG5ld1N0b3JlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFN0b3JlVmFsdWVzKCk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vIFJlc3RvcmUgZmluZFJlc3BvbnNlRGF0YSBhbmQgcmVwbGFjZVJlc3BvbnNlRGF0YSBmb3IgdGhlIHNlbGVjdGVkIHN0b3JlIGlmIGF2YWlsYWJsZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXN0b3JlU3RvcmVSZXNwb25zZURhdGEobmV3U3RvcmUuc3RvcmVOYW1lKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy8gTG9hZCBwbGFub2dyYW0gZm9yIHRoZSBzZWxlY3RlZCBzdG9yZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVDYW52YXMoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFBsYW5vZ3JhbUZvclN0b3JlKG5ld1N0b3JlLnN0b3JlTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sIDUwKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5zdG9yZXMgJiYgZGF0YS5zdG9yZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIElmIGFsbCBzdG9yZXMgYXJlIHJlbW92ZWQsIGNsZWFyIHRoZSBwcmV2aWV3XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkU3RvcmVWYWx1ZXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKCFkYXRhICYmIHRoaXMuaXNJbml0aWFsTG9hZCkge1xyXG4gICAgICAgICAgLy8gTG9hZCBpbml0aWFsIGRhdGEgaWYgbm8gc2F2ZWQgZGF0YVxyXG4gICAgICAgICAgdGhpcy5sb2FkU3RvcmVzT3JDbHVzdGVycygpO1xyXG4gICAgICAgICAgdGhpcy5pc0luaXRpYWxMb2FkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyBTdWJzY3JpYmUgdG8gc2F2ZSBkcmFmdCBsb2FkaW5nIHN0YXRlXHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldExvYWRpbmdTdGF0ZSgpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoaXNMb2FkaW5nKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zYXZpbmdEcmFmdCA9IGlzTG9hZGluZztcclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8gV2F0Y2ggZm9yIG1vZGUgY2hhbmdlc1xyXG4gICAgdGhpcy5zZWxlY3RlZE1vZGUudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgobmV3TW9kZSkgPT4ge1xyXG4gICAgICAgIGlmIChuZXdNb2RlICE9PSB0aGlzLnByZXZpb3VzU2VhcmNoTW9kZSAmJiAhdGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UpIHtcclxuICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMucHJldmlvdXNTZWFyY2hNb2RlID0gbmV3TW9kZSBhcyAnc3RvcmUnIHwgJ2NsdXN0ZXInO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvLyBHZXQgY3VycmVudCBkYXRhIHRvIHByZXNlcnZlIHNlbGVjdGVkQ2x1c3RlcnMgaWYgc3dpdGNoaW5nIHRvIGNsdXN0ZXIgbW9kZVxyXG4gICAgICAgICAgY29uc3QgY3VycmVudERhdGEgPSB0aGlzLmRhdGFTZXJ2aWNlLmdldEN1cnJlbnREYXRhKCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIFVwZGF0ZSBkYXRhIHNlcnZpY2Ugd2l0aCBuZXcgc2VhcmNoTW9kZVxyXG4gICAgICAgICAgdGhpcy5kYXRhU2VydmljZS51cGRhdGVEYXRhKHsgXHJcbiAgICAgICAgICAgIHNlYXJjaE1vZGU6IG5ld01vZGUgYXMgJ3N0b3JlJyB8ICdjbHVzdGVyJyxcclxuICAgICAgICAgICAgc3RvcmVzOiBbXSwgLy8gQ2xlYXIgc3RvcmVzIHdoZW4gbW9kZSBjaGFuZ2VzXHJcbiAgICAgICAgICAgIHNlbGVjdGVkQ2x1c3RlcnM6IG5ld01vZGUgPT09ICdzdG9yZScgPyB1bmRlZmluZWQgOiBjdXJyZW50RGF0YT8uc2VsZWN0ZWRDbHVzdGVyc1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHRoaXMubG9hZFN0b3Jlc09yQ2x1c3RlcnMoKTtcclxuICAgICAgICAgIC8vIENsZWFyIHNlbGVjdGVkIHN0b3JlcyB3aGVuIG1vZGUgY2hhbmdlcyBtYW51YWxseVxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFN0b3JlcyA9IFtdO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvLyBDbGVhciBwcmV2aWV3IHdoZW4gbW9kZSBjaGFuZ2VzXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3ID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRTdG9yZVZhbHVlcygpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMub3JpZ2luYWxGaXh0dXJlRGF0YSA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZXNNYXAuY2xlYXIoKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gUmVzZXQgZmxhZ3NcclxuICAgICAgICAgIHRoaXMuZmluZEV4ZWN1dGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnJlcGxhY2VFeGVjdXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UgPSBmYWxzZTtcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8gV2F0Y2ggZm9yIHRhcmdldCBjaGFuZ2VzIC0gZGVib3VuY2UgdG8gcHJldmVudCBleGNlc3NpdmUgdXBkYXRlc1xyXG4gICAgdGhpcy50YXJnZXQudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICBpZiAodmFsdWUgJiYgIXRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlKSB7XHJcbiAgICAgICAgICB0aGlzLmlzVXBkYXRpbmdGcm9tU2VydmljZSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLnVwZGF0ZURhdGEoeyB0YXJnZXQ6IHZhbHVlIGFzICdtZXJjaCcgfCAndm0nIHwgJ2JvdGgnIH0pO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlID0gZmFsc2U7XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIFdhdGNoIGZvciBmaW5kIHByb21wdCBjaGFuZ2VzIC0gZGVib3VuY2UgdG8gcHJldmVudCBleGNlc3NpdmUgdXBkYXRlc1xyXG4gICAgdGhpcy5maW5kUHJvbXB0LnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgLy8gUmVzZXQgZmluZEV4ZWN1dGVkIGZsYWcgd2hlbiB1c2VyIGVkaXRzIHRoZSBmaW5kIHByb21wdFxyXG4gICAgICAgIGlmICh0aGlzLmZpbmRFeGVjdXRlZCkge1xyXG4gICAgICAgICAgdGhpcy5maW5kRXhlY3V0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gUmVzZXQgaXNGaW5kUHJvbXB0RnJvbUFwaSBmbGFnIHdoZW4gdXNlciBlZGl0cyB0aGUgZmluZCBwcm9tcHRcclxuICAgICAgICBpZiAodGhpcy5pc0ZpbmRQcm9tcHRGcm9tQXBpKSB7XHJcbiAgICAgICAgICB0aGlzLmlzRmluZFByb21wdEZyb21BcGkgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzVXBkYXRpbmdGcm9tU2VydmljZSkge1xyXG4gICAgICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5kYXRhU2VydmljZS51cGRhdGVEYXRhKHsgZmluZFByb21wdDogdmFsdWUgfHwgJycgfSk7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UgPSBmYWxzZTtcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8gV2F0Y2ggZm9yIHJlcGxhY2UgcHJvbXB0IGNoYW5nZXMgLSBkZWJvdW5jZSB0byBwcmV2ZW50IGV4Y2Vzc2l2ZSB1cGRhdGVzXHJcbiAgICB0aGlzLnJlcGxhY2VQcm9tcHQudmFsdWVDaGFuZ2VzXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICAvLyBSZXNldCByZXBsYWNlRXhlY3V0ZWQgZmxhZyB3aGVuIHVzZXIgZWRpdHMgdGhlIHJlcGxhY2UgcHJvbXB0XHJcbiAgICAgICAgaWYgKHRoaXMucmVwbGFjZUV4ZWN1dGVkKSB7XHJcbiAgICAgICAgICB0aGlzLnJlcGxhY2VFeGVjdXRlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmlzVXBkYXRpbmdGcm9tU2VydmljZSkge1xyXG4gICAgICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5kYXRhU2VydmljZS51cGRhdGVEYXRhKHsgcmVwbGFjZVByb21wdDogdmFsdWUgfHwgJycgfSk7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UgPSBmYWxzZTtcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8gV2F0Y2ggZm9yIHJlcGxhY2VCcmFuZCBjaGFuZ2VzIChmb3JtIGNvbnRyb2wgaG9sZHMgdGhlIGJyYW5kIF9pZClcclxuICAgIHRoaXMucmVwbGFjZUJyYW5kLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGlkKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVwbGFjZUV4ZWN1dGVkKSB7XHJcbiAgICAgICAgICB0aGlzLnJlcGxhY2VFeGVjdXRlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlKSB7XHJcbiAgICAgICAgICB0aGlzLmlzVXBkYXRpbmdGcm9tU2VydmljZSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLnVwZGF0ZURhdGEoeyByZXBsYWNlQnJhbmQ6IHRoaXMuZ2V0UmVwbGFjZUJyYW5kU2VsZWN0aW9uKCkgfSk7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UgPSBmYWxzZTtcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8gV2F0Y2ggZm9yIHJlcGxhY2VWbSBjaGFuZ2VzIChmb3JtIGNvbnRyb2wgaG9sZHMgdGhlIHZtIF9pZClcclxuICAgIHRoaXMucmVwbGFjZVZtLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGlkKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVwbGFjZUV4ZWN1dGVkKSB7XHJcbiAgICAgICAgICB0aGlzLnJlcGxhY2VFeGVjdXRlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuaXNVcGRhdGluZ0Zyb21TZXJ2aWNlKSB7XHJcbiAgICAgICAgICB0aGlzLmlzVXBkYXRpbmdGcm9tU2VydmljZSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLnVwZGF0ZURhdGEoeyByZXBsYWNlVm06IHRoaXMuZ2V0UmVwbGFjZVZtU2VsZWN0aW9uKCkgfSk7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbVNlcnZpY2UgPSBmYWxzZTtcclxuICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRSZXBsYWNlQnJhbmRTZWxlY3Rpb24oKTogeyBfaWQ6IHN0cmluZzsgYnJhbmROYW1lOiBzdHJpbmcgfSB8IG51bGwge1xyXG4gICAgY29uc3QgaWQgPSB0aGlzLnJlcGxhY2VCcmFuZC52YWx1ZTtcclxuICAgIGlmICghaWQpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgZm91bmQgPSB0aGlzLmJyYW5kTGlzdC5maW5kKChiOiBhbnkpID0+IGIuX2lkID09PSBpZCk7XHJcbiAgICByZXR1cm4gZm91bmQgPyB7IF9pZDogZm91bmQuX2lkLCBicmFuZE5hbWU6IGZvdW5kLmJyYW5kTmFtZSB9IDogbnVsbDtcclxuICB9XHJcblxyXG4gIGdldFJlcGxhY2VWbVNlbGVjdGlvbigpOiB7IF9pZDogc3RyaW5nOyB2bU5hbWU6IHN0cmluZzsgdm1UeXBlPzogc3RyaW5nOyB2bUJyYW5kPzogc3RyaW5nIH0gfCBudWxsIHtcclxuICAgIGNvbnN0IGlkID0gdGhpcy5yZXBsYWNlVm0udmFsdWU7XHJcbiAgICBpZiAoIWlkKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGZvdW5kID0gdGhpcy5yZXBsYWNlVm1MaXN0LmZpbmQoKHY6IGFueSkgPT4gdi5faWQgPT09IGlkKTtcclxuICAgIHJldHVybiBmb3VuZFxyXG4gICAgICA/IHsgX2lkOiBmb3VuZC5faWQsIHZtTmFtZTogZm91bmQudm1OYW1lLCB2bVR5cGU6IGZvdW5kLnZtVHlwZSwgdm1CcmFuZDogZm91bmQudm1CcmFuZCB9XHJcbiAgICAgIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZFJlcGxhY2VMaWJyYXJpZXMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY2xpZW50SWQpIHJldHVybjtcclxuXHJcbiAgICBpZiAoIXRoaXMuYnJhbmRMaXN0Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2UuZ2V0UmVwbGFjZUJyYW5kTGlzdCh0aGlzLmNsaWVudElkKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzPy5jb2RlID09PSAyMDAgJiYgQXJyYXkuaXNBcnJheShyZXM/LmRhdGEpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5icmFuZExpc3QgPSByZXMuZGF0YTtcclxuICAgICAgICAgICAgICAvLyBTeW5jIHRoZSBkYXRhIHNlcnZpY2Ugd2l0aCB0aGUgcmVzb2x2ZWQgb2JqZWN0IG5vdyB0aGF0IHRoZSBsaXN0IGlzIGF2YWlsYWJsZVxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnJlcGxhY2VCcmFuZC52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS51cGRhdGVEYXRhKHsgcmVwbGFjZUJyYW5kOiB0aGlzLmdldFJlcGxhY2VCcmFuZFNlbGVjdGlvbigpIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGJyYW5kIGxpc3Q6JywgZXJyKVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5yZXBsYWNlVm1MaXN0Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2UuZ2V0UmVwbGFjZVZtTGlzdCh0aGlzLmNsaWVudElkKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzPy5jb2RlID09PSAyMDAgJiYgQXJyYXkuaXNBcnJheShyZXM/LmRhdGEpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXBsYWNlVm1MaXN0ID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMucmVwbGFjZVZtLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLnVwZGF0ZURhdGEoeyByZXBsYWNlVm06IHRoaXMuZ2V0UmVwbGFjZVZtU2VsZWN0aW9uKCkgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnIpID0+IGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgcmVwbGFjZSB2bSBsaXN0OicsIGVycilcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5lZWRzUmVwbGFjZUJyYW5kKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgdCA9IHRoaXMudGFyZ2V0LnZhbHVlO1xyXG4gICAgcmV0dXJuIHQgPT09ICdtZXJjaCcgfHwgdCA9PT0gJ2JvdGgnO1xyXG4gIH1cclxuXHJcbiAgbmVlZHNSZXBsYWNlVm0oKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB0ID0gdGhpcy50YXJnZXQudmFsdWU7XHJcbiAgICByZXR1cm4gdCA9PT0gJ3ZtJyB8fCB0ID09PSAnYm90aCc7XHJcbiAgfVxyXG5cclxuICBoYXNSZXBsYWNlU2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMubmVlZHNSZXBsYWNlQnJhbmQoKSAmJiAhdGhpcy5yZXBsYWNlQnJhbmQudmFsdWUpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubmVlZHNSZXBsYWNlVm0oKSAmJiAhdGhpcy5yZXBsYWNlVm0udmFsdWUpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMubmVlZHNSZXBsYWNlQnJhbmQoKSB8fCB0aGlzLm5lZWRzUmVwbGFjZVZtKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc3RvcmVGb3JtVmFsdWVzKGRhdGE6IEZpbmRSZXBsYWNlKTogdm9pZCB7XHJcbiAgICAvLyBSZXN0b3JlIHNlYXJjaE1vZGVcclxuICAgIGlmIChkYXRhLnNlYXJjaE1vZGUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZE1vZGUuc2V0VmFsdWUoZGF0YS5zZWFyY2hNb2RlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIHRoaXMucHJldmlvdXNTZWFyY2hNb2RlID0gZGF0YS5zZWFyY2hNb2RlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBSZXN0b3JlIHRhcmdldFxyXG4gICAgaWYgKGRhdGEudGFyZ2V0KSB7XHJcbiAgICAgIHRoaXMudGFyZ2V0LnNldFZhbHVlKGRhdGEudGFyZ2V0LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIFJlc3RvcmUgZmluZFByb21wdFxyXG4gICAgaWYgKGRhdGEuZmluZFByb21wdCkge1xyXG4gICAgICB0aGlzLmZpbmRQcm9tcHQuc2V0VmFsdWUoZGF0YS5maW5kUHJvbXB0LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIHRoaXMuaXNGaW5kUHJvbXB0RnJvbUFwaSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIFJlc3RvcmUgcmVwbGFjZVByb21wdFxyXG4gICAgaWYgKGRhdGEucmVwbGFjZVByb21wdCkge1xyXG4gICAgICB0aGlzLnJlcGxhY2VQcm9tcHQuc2V0VmFsdWUoZGF0YS5yZXBsYWNlUHJvbXB0LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVzdG9yZSByZXBsYWNlQnJhbmQgLyByZXBsYWNlVm0g4oCUIGZvcm0gY29udHJvbHMgaG9sZCB0aGUgX2lkIG9ubHlcclxuICAgIGlmIChkYXRhLnJlcGxhY2VCcmFuZD8uX2lkKSB7XHJcbiAgICAgIHRoaXMucmVwbGFjZUJyYW5kLnNldFZhbHVlKGRhdGEucmVwbGFjZUJyYW5kLl9pZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKGRhdGEucmVwbGFjZVZtPy5faWQpIHtcclxuICAgICAgdGhpcy5yZXBsYWNlVm0uc2V0VmFsdWUoZGF0YS5yZXBsYWNlVm0uX2lkLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIExvYWQgc3RvcmVzL2NsdXN0ZXJzIGFuZCByZXN0b3JlIHNlbGVjdGlvbnNcclxuICAgIGlmIChkYXRhLnNlYXJjaE1vZGUpIHtcclxuICAgICAgdGhpcy5sb2FkU3RvcmVzT3JDbHVzdGVycyhkYXRhKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubG9hZFN0b3Jlc09yQ2x1c3RlcnMoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gU2V0IGluaXRpYWwgc2VsZWN0ZWQgc3RvcmUgZm9yIHByZXZpZXdcclxuICAgIGlmIChkYXRhLnN0b3JlcyAmJiBkYXRhLnN0b3Jlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIC8vIFNraXAgcGxhbm9ncmFtIGxvYWQgaGVyZSBhcyB3ZSdsbCBsb2FkIGl0IGV4cGxpY2l0bHkgYmVsb3dcclxuICAgICAgdGhpcy51cGRhdGVTdG9yZURyb3Bkb3duSXRlbXModHJ1ZSk7XHJcbiAgICAgIGlmICh0aGlzLnN0b3JlRHJvcGRvd25JdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldyA9IHRoaXMuc3RvcmVEcm9wZG93bkl0ZW1zWzBdO1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRTdG9yZVZhbHVlcygpO1xyXG4gICAgICAgIC8vIExvYWQgcGxhbm9ncmFtIGFmdGVyIHZpZXcgaXMgaW5pdGlhbGl6ZWRcclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplQ2FudmFzKCkgJiYgdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldykge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRQbGFub2dyYW1Gb3JTdG9yZSh0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3LnN0b3JlTmFtZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBSZXRyeSBpZiBjYW52YXMgbm90IHJlYWR5XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVDYW52YXMoKSAmJiB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRQbGFub2dyYW1Gb3JTdG9yZSh0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3LnN0b3JlTmFtZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAyMDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIDEwMCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5pc0luaXRpYWxMb2FkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVN0b3JlRHJvcGRvd25JdGVtcyhza2lwUGxhbm9ncmFtTG9hZDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZmluZFJlcGxhY2VEYXRhPy5zdG9yZXMpIHtcclxuICAgICAgdGhpcy5zdG9yZURyb3Bkb3duSXRlbXMgPSBbXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFN0b3JlVmFsdWVzID0gW107XHJcbiAgICAgIC8vIElmIG5vIHN0b3JlcywgY2xlYXIgcHJldmlld1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldykge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIFxyXG4gICAgY29uc3QgbmV3SXRlbXMgPSB0aGlzLmZpbmRSZXBsYWNlRGF0YS5zdG9yZXMubWFwKChzdG9yZTogU3RvcmUpID0+ICh7XHJcbiAgICAgIHN0b3JlSWQ6IHN0b3JlLnN0b3JlSWQgfHwgc3RvcmUuc3RvcmVOYW1lLFxyXG4gICAgICBzdG9yZU5hbWU6IHN0b3JlLnN0b3JlTmFtZSxcclxuICAgICAgX2lkOiBzdG9yZS5zdG9yZUlkIHx8IHN0b3JlLnN0b3JlTmFtZVxyXG4gICAgfSkpO1xyXG4gICAgXHJcbiAgICAvLyBDaGVjayBpZiBjdXJyZW50bHkgcHJldmlld2VkIHN0b3JlIGlzIHN0aWxsIGluIHRoZSBsaXN0XHJcbiAgICBjb25zdCBpc0N1cnJlbnRTdG9yZVN0aWxsSW5MaXN0ID0gdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldyAmJiBcclxuICAgICAgbmV3SXRlbXMuc29tZSgoaXRlbTogYW55KSA9PiBcclxuICAgICAgICBpdGVtLnN0b3JlSWQgPT09IHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcuc3RvcmVJZCB8fFxyXG4gICAgICAgIGl0ZW0uc3RvcmVOYW1lID09PSB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3LnN0b3JlTmFtZVxyXG4gICAgICApO1xyXG4gICAgXHJcbiAgICAvLyBPbmx5IHVwZGF0ZSBpZiBpdGVtcyBhY3R1YWxseSBjaGFuZ2VkXHJcbiAgICBjb25zdCBpdGVtc0NoYW5nZWQgPSBKU09OLnN0cmluZ2lmeShuZXdJdGVtcykgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMuc3RvcmVEcm9wZG93bkl0ZW1zKTtcclxuICAgIGlmIChpdGVtc0NoYW5nZWQpIHtcclxuICAgICAgdGhpcy5zdG9yZURyb3Bkb3duSXRlbXMgPSBuZXdJdGVtcztcclxuICAgICAgXHJcbiAgICAgIC8vIElmIGN1cnJlbnQgc3RvcmUgd2FzIHJlbW92ZWQsIHN3aXRjaCB0byBmaXJzdCBzdG9yZSBpbiB0aGUgbGlzdFxyXG4gICAgICBpZiAoIWlzQ3VycmVudFN0b3JlU3RpbGxJbkxpc3QgJiYgbmV3SXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IGZpcnN0U3RvcmUgPSBuZXdJdGVtc1swXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3ID0gZmlyc3RTdG9yZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkU3RvcmVWYWx1ZXMoKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBSZXN0b3JlIGZpbmRSZXNwb25zZURhdGEgYW5kIHJlcGxhY2VSZXNwb25zZURhdGEgZm9yIHRoZSBzZWxlY3RlZCBzdG9yZSBpZiBhdmFpbGFibGVcclxuICAgICAgICB0aGlzLnJlc3RvcmVTdG9yZVJlc3BvbnNlRGF0YShmaXJzdFN0b3JlLnN0b3JlTmFtZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gTG9hZCBwbGFub2dyYW0gZm9yIHRoZSBuZXcgc3RvcmUgKHVubGVzcyBza2lwcGVkIGR1cmluZyBpbml0aWFsIHJlc3RvcmUpXHJcbiAgICAgICAgaWYgKCFza2lwUGxhbm9ncmFtTG9hZCkge1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVDYW52YXMoKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZFBsYW5vZ3JhbUZvclN0b3JlKGZpcnN0U3RvcmUuc3RvcmVOYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSwgNTApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkU3RvcmVWYWx1ZXMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTZWxlY3RlZFN0b3JlVmFsdWVzKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFN0b3JlVmFsdWVzID0gW3RoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXddO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFN0b3JlVmFsdWVzID0gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAvLyBDYW52YXMgd2lsbCBiZSBpbml0aWFsaXplZCB3aGVuIHN0b3JlIGlzIHNlbGVjdGVkIGFuZCBjYW52YXMgZWxlbWVudCBpcyBhdmFpbGFibGVcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVDYW52YXMoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5wcmV2aWV3Q2FudmFzKSB7XHJcbiAgICAgIHJldHVybiB0cnVlOyAvLyBBbHJlYWR5IGluaXRpYWxpemVkXHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmICh0aGlzLnByZXZpZXdDYW52YXNSZWY/Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLnByZXZpZXdDYW52YXMgPSBuZXcgZmFicmljLkNhbnZhcyh0aGlzLnByZXZpZXdDYW52YXNSZWYubmF0aXZlRWxlbWVudCwge1xyXG4gICAgICAgICAgc2VsZWN0aW9uRnVsbHlDb250YWluZWQ6IHRydWUsXHJcbiAgICAgICAgICBwZXJQaXhlbFRhcmdldEZpbmQ6IHRydWUsXHJcbiAgICAgICAgICB0YXJnZXRGaW5kVG9sZXJhbmNlOiA1LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc2V0dXBab29tSGFuZGxlcnModGhpcy5wcmV2aWV3Q2FudmFzKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbml0aWFsaXppbmcgY2FudmFzOicsIGVycm9yKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uU3RvcmVTZWxlY3RlZEZvclByZXZpZXcoc3RvcmU6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHN0b3JlICYmICghdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldyB8fCB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3LnN0b3JlSWQgIT09IHN0b3JlLnN0b3JlSWQpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcgPSBzdG9yZTtcclxuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFN0b3JlVmFsdWVzKCk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBDbGVhciBzZWxlY3RlZCBmaXh0dXJlIHdoZW4gc3dpdGNoaW5nIHN0b3Jlc1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IG51bGw7XHJcbiAgICAgIHRoaXMub3JpZ2luYWxGaXh0dXJlRGF0YSA9IG51bGw7XHJcbiAgICAgIHRoaXMub3JpZ2luYWxGaXh0dXJlc01hcC5jbGVhcigpOyAvLyBDbGVhciB0aGUgbWFwIHdoZW4gc3dpdGNoaW5nIHN0b3Jlc1xyXG4gICAgICBcclxuICAgICAgLy8gUmVzdG9yZSBmaW5kUmVzcG9uc2VEYXRhIGFuZCByZXBsYWNlUmVzcG9uc2VEYXRhIGZvciB0aGUgc2VsZWN0ZWQgc3RvcmUgaWYgYXZhaWxhYmxlXHJcbiAgICAgIHRoaXMucmVzdG9yZVN0b3JlUmVzcG9uc2VEYXRhKHN0b3JlLnN0b3JlTmFtZSk7XHJcbiAgICAgIFxyXG4gICAgICAvLyBGb3JjZSBjaGFuZ2UgZGV0ZWN0aW9uIHRvIGVuc3VyZSBjYW52YXMgZWxlbWVudCBpcyBpbiBET01cclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICBcclxuICAgICAgLy8gSW5pdGlhbGl6ZSBjYW52YXMgaWYgbm90IGFscmVhZHkgZG9uZSwgdGhlbiBsb2FkIHBsYW5vZ3JhbVxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplQ2FudmFzKCkpIHtcclxuICAgICAgICAgIHRoaXMubG9hZFBsYW5vZ3JhbUZvclN0b3JlKHN0b3JlLnN0b3JlTmFtZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIFJldHJ5IGFmdGVyIGEgc2hvcnQgZGVsYXkgaWYgY2FudmFzIGVsZW1lbnQgbm90IHJlYWR5XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZUNhbnZhcygpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkUGxhbm9ncmFtRm9yU3RvcmUoc3RvcmUuc3RvcmVOYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDUwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFJlc3RvcmUgZmluZFJlc3BvbnNlRGF0YSBhbmQgcmVwbGFjZVJlc3BvbnNlRGF0YSBmb3IgYSBzcGVjaWZpYyBzdG9yZVxyXG4gIHByaXZhdGUgcmVzdG9yZVN0b3JlUmVzcG9uc2VEYXRhKHN0b3JlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZmluZFJlcGxhY2VEYXRhPy5zdG9yZXMpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN0b3JlID0gdGhpcy5maW5kUmVwbGFjZURhdGEuc3RvcmVzLmZpbmQoXHJcbiAgICAgIChzOiBTdG9yZSkgPT4gcy5zdG9yZU5hbWUgPT09IHN0b3JlTmFtZVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoIXN0b3JlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmaW5kUmVzcG9uc2VEYXRhIGlzIGEgc3RyaW5nIChmaXh0dXJlIF9pZClcclxuICAgIC8vIHJlcGxhY2VSZXNwb25zZURhdGEgaXMgYW4gb2JqZWN0IHdpdGggdm1Db25maWcgYW5kL29yIHNoZWxmQ29uZmlnXHJcbiAgICBjb25zdCBmaXh0dXJlSWQgPSBzdG9yZS5maW5kUmVzcG9uc2VEYXRhO1xyXG4gICAgaWYgKCFmaXh0dXJlSWQpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkRml4dHVyZSA9IHsgZml4dHVyZUlkLCBmaXh0dXJlVHlwZTogdW5kZWZpbmVkIH07XHJcbiAgICAvLyBXZSdsbCByZS1oeWRyYXRlIHNlbGVjdGVkRml4dHVyZURhdGEgZnJvbSB0aGUgbG9hZGVkIHBsYW5vZ3JhbSAoZmxvb3JEYXRhKSBhZnRlciBsb2FkLlxyXG4gICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIEFwcGx5IHN0b3JlZCBmaW5kUmVzcG9uc2VEYXRhIGFuZCByZXBsYWNlUmVzcG9uc2VEYXRhIHRvIGZsb29yIGRhdGFcclxuICBwcml2YXRlIGFwcGx5U3RvcmVkUmVzcG9uc2VEYXRhKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmZpbmRSZXBsYWNlRGF0YT8uc3RvcmVzIHx8ICF0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3IHx8ICF0aGlzLmZsb29yRGF0YSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RvcmUgPSB0aGlzLmZpbmRSZXBsYWNlRGF0YS5zdG9yZXMuZmluZChcclxuICAgICAgKHM6IFN0b3JlKSA9PiBzLnN0b3JlTmFtZSA9PT0gdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldy5zdG9yZU5hbWVcclxuICAgICk7XHJcblxyXG4gICAgaWYgKCFzdG9yZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZmluZFJlc3BvbnNlRGF0YSBpcyBhIHN0cmluZyAoZml4dHVyZSBfaWQpIC0gdXNlIGl0IHRvIGZpbmQgdGhlIGZpeHR1cmVcclxuICAgIGNvbnN0IGZpeHR1cmVJZCA9IHN0b3JlLmZpbmRSZXNwb25zZURhdGE7XHJcbiAgICBpZiAoIWZpeHR1cmVJZCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIEZpbmQgdGhlIGZpeHR1cmUgaW4gZmxvb3JEYXRhXHJcbiAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5nZXRGaXh0dXJlQnlJZEZyb21GbG9vcihmaXh0dXJlSWQpO1xyXG4gICAgaWYgKCFmaXh0dXJlKSByZXR1cm47XHJcblxyXG4gICAgLy8gQXBwbHkgcmVwbGFjZVJlc3BvbnNlRGF0YSBjb25maWdzIGlmIGF2YWlsYWJsZSAobWVyZ2Ugd2l0aCBleGlzdGluZyBmaXh0dXJlKVxyXG4gICAgaWYgKHN0b3JlLnJlcGxhY2VSZXNwb25zZURhdGEpIHtcclxuICAgICAgLy8gU3RvcmUgdGhlIG9yaWdpbmFsIGZpeHR1cmUgKGJlZm9yZSByZXBsYWNlKSBmb3IgYmVmb3JlL2FmdGVyIGNvbXBhcmlzb25cclxuICAgICAgLy8gT25seSBzdG9yZSBpZiBub3QgYWxyZWFkeSBpbiBtYXAgKHByZXNlcnZlIGluaXRpYWwgcGxhbm9ncmFtIGZpeHR1cmUpXHJcbiAgICAgIGlmICghdGhpcy5vcmlnaW5hbEZpeHR1cmVzTWFwLmhhcyhmaXh0dXJlSWQpKSB7XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxGaXh0dXJlID0gc3RydWN0dXJlZENsb25lKGZpeHR1cmUpO1xyXG4gICAgICAgIHRoaXMub3JpZ2luYWxGaXh0dXJlc01hcC5zZXQoZml4dHVyZUlkLCBvcmlnaW5hbEZpeHR1cmUpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFJlc3RvcmUgb3JpZ2luYWxGaXh0dXJlRGF0YSBmcm9tIG1hcCB0byBlbnN1cmUgaXQncyBhbHdheXMgdGhlIGluaXRpYWwgcGxhbm9ncmFtIGZpeHR1cmVcclxuICAgICAgY29uc3Qgc3RvcmVkT3JpZ2luYWwgPSB0aGlzLm9yaWdpbmFsRml4dHVyZXNNYXAuZ2V0KGZpeHR1cmVJZCk7XHJcbiAgICAgIGlmIChzdG9yZWRPcmlnaW5hbCkge1xyXG4gICAgICAgIHRoaXMub3JpZ2luYWxGaXh0dXJlRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShzdG9yZWRPcmlnaW5hbCk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIGNvbnN0IHVwZGF0ZWRGaXh0dXJlOiBhbnkgPSB7IC4uLmZpeHR1cmUgfTtcclxuICAgICAgXHJcbiAgICAgIC8vIE1lcmdlIHZtQ29uZmlnIGlmIHByZXNlbnQgaW4gcmVwbGFjZVJlc3BvbnNlRGF0YVxyXG4gICAgICBpZiAoc3RvcmUucmVwbGFjZVJlc3BvbnNlRGF0YS52bUNvbmZpZykge1xyXG4gICAgICAgIHVwZGF0ZWRGaXh0dXJlLnZtQ29uZmlnID0gc3RvcmUucmVwbGFjZVJlc3BvbnNlRGF0YS52bUNvbmZpZztcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgLy8gTWVyZ2Ugc2hlbGZDb25maWcgaWYgcHJlc2VudCBpbiByZXBsYWNlUmVzcG9uc2VEYXRhXHJcbiAgICAgIGlmIChzdG9yZS5yZXBsYWNlUmVzcG9uc2VEYXRhLnNoZWxmQ29uZmlnKSB7XHJcbiAgICAgICAgdXBkYXRlZEZpeHR1cmUuc2hlbGZDb25maWcgPSBzdG9yZS5yZXBsYWNlUmVzcG9uc2VEYXRhLnNoZWxmQ29uZmlnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBVcGRhdGUgdGhlIGZpeHR1cmUgaW4gZmxvb3JEYXRhXHJcbiAgICAgIHRoaXMudXBkYXRlQWlSZXNwb25zZUZpeHR1cmUodXBkYXRlZEZpeHR1cmUpO1xyXG4gICAgICBcclxuICAgICAgLy8gU2V0IHNlbGVjdGVkIGZpeHR1cmUgZGF0YSAoYWZ0ZXIgcmVwbGFjZSlcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSB7XHJcbiAgICAgICAgZml4dHVyZUlkOiB1cGRhdGVkRml4dHVyZS5faWQsXHJcbiAgICAgICAgZml4dHVyZVR5cGU6IHVwZGF0ZWRGaXh0dXJlLmZpeHR1cmVUeXBlLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSB1cGRhdGVkRml4dHVyZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIE5vIHJlcGxhY2VSZXNwb25zZURhdGEsIGNsZWFyIG9yaWdpbmFsIGZpeHR1cmUgYW5kIGp1c3Qgc2V0IHRoZSBzZWxlY3RlZCBmaXh0dXJlIGZyb20gZmluZFJlc3BvbnNlRGF0YVxyXG4gICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZURhdGEgPSBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZSA9IHtcclxuICAgICAgICBmaXh0dXJlSWQ6IGZpeHR1cmUuX2lkLFxyXG4gICAgICAgIGZpeHR1cmVUeXBlOiBmaXh0dXJlLmZpeHR1cmVUeXBlLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSBmaXh0dXJlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGaXh0dXJlQnlJZEZyb21GbG9vcihmaXh0dXJlSWQ6IHN0cmluZyk6IGFueSB8IG51bGwge1xyXG4gICAgaWYgKCFmaXh0dXJlSWQgfHwgIXRoaXMuZmxvb3JEYXRhKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbiB8fCBbXSkge1xyXG4gICAgICBpZiAoZWxlbWVudD8uZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIEFycmF5LmlzQXJyYXkoZWxlbWVudC5maXh0dXJlcykpIHtcclxuICAgICAgICBjb25zdCBoaXQgPSBlbGVtZW50LmZpeHR1cmVzLmZpbmQoKGZ4OiBhbnkpID0+IGZ4Py5faWQgPT09IGZpeHR1cmVJZCk7XHJcbiAgICAgICAgaWYgKGhpdCkgcmV0dXJuIGhpdDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3QgZnggb2YgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZSB8fCBbXSkge1xyXG4gICAgICBpZiAoZng/Ll9pZCA9PT0gZml4dHVyZUlkKSByZXR1cm4gZng7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBhc3luYyBsb2FkUGxhbm9ncmFtRm9yU3RvcmUoc3RvcmVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghc3RvcmVOYW1lKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybignQ2Fubm90IGxvYWQgcGxhbm9ncmFtOiBzdG9yZU5hbWUgbm90IGF2YWlsYWJsZScpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIFByZXZlbnQgZHVwbGljYXRlIGNvbmN1cnJlbnQgY2FsbHNcclxuICAgIGlmICh0aGlzLmlzTG9hZGluZ1BsYW5vZ3JhbSkge1xyXG4gICAgICBjb25zb2xlLmxvZygnUGxhbm9ncmFtIGxvYWQgYWxyZWFkeSBpbiBwcm9ncmVzcywgc2tpcHBpbmcgZHVwbGljYXRlIGNhbGwnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAoIXRoaXMucHJldmlld0NhbnZhcykge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ0NhbnZhcyBub3QgaW5pdGlhbGl6ZWQsIGF0dGVtcHRpbmcgdG8gaW5pdGlhbGl6ZS4uLicpO1xyXG4gICAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZUNhbnZhcygpKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGluaXRpYWxpemUgY2FudmFzJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMuaXNMb2FkaW5nUGxhbm9ncmFtID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IHRydWU7XHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBHZXQgcGxhbm9JZCBmcm9tIHN0b3JlIG5hbWVcclxuICAgICAgY29uc3QgcmVzcG9uc2U6IGFueSA9IGF3YWl0IHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS5nZXRQbGFub0lkKHsgc3RvcmVzOiBbc3RvcmVOYW1lLnRvVXBwZXJDYXNlKCldIH0pLnRvUHJvbWlzZSgpO1xyXG4gICAgICBcclxuICAgICAgaWYgKHJlc3BvbnNlPy5jb2RlID09PSAyMDAgJiYgcmVzcG9uc2U/LmRhdGE/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBwbGFub0lkID0gcmVzcG9uc2UuZGF0YVswXS5faWQ7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5nZXRTdG9yZUZpeHR1cmVzKHBsYW5vSWQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUud2FybignTm8gcGxhbm9ncmFtIGZvdW5kIGZvciBzdG9yZTonLCBzdG9yZU5hbWUpO1xyXG4gICAgICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nUGxhbm9ncmFtID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHBsYW5vZ3JhbTonLCBlcnJvcik7XHJcbiAgICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzTG9hZGluZ1BsYW5vZ3JhbSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkU3RvcmVzT3JDbHVzdGVycyhzYXZlZERhdGE/OiBGaW5kUmVwbGFjZSk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2VhcmNoTW9kZSA9IHRoaXMuc2VsZWN0ZWRNb2RlLnZhbHVlIGFzICdzdG9yZScgfCAnY2x1c3Rlcic7XHJcbiAgICBpZiAoIXNlYXJjaE1vZGUpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmdldFN0b3JlT3JDbHVzdGVyTGlzdCh7IHNlYXJjaE1vZGUgfSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2U/LmNvZGUgPT09IDIwMCAmJiByZXNwb25zZT8uZGF0YSAmJiBBcnJheS5pc0FycmF5KHJlc3BvbnNlLmRhdGEpKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWFyY2hNb2RlID09PSAnc3RvcmUnKSB7XHJcbiAgICAgICAgICAgICAgLy8gRm9yIHN0b3JlIG1vZGUsIHVzZSBkYXRhIGRpcmVjdGx5XHJcbiAgICAgICAgICAgICAgdGhpcy5zdG9yZU9wdGlvbnMgPSByZXNwb25zZS5kYXRhLm1hcCgoaXRlbTogYW55KSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogaXRlbS5sYWJlbFxyXG4gICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICB0aGlzLmNsdXN0ZXJEYXRhID0gW107IC8vIENsZWFyIGNsdXN0ZXIgZGF0YVxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIC8vIFJlc3RvcmUgc2F2ZWQgc2VsZWN0aW9ucyBmb3Igc3RvcmUgbW9kZVxyXG4gICAgICAgICAgICAgIGlmIChzYXZlZERhdGE/LnN0b3JlcyAmJiBzYXZlZERhdGEuc3RvcmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZVN0b3JlU2VsZWN0aW9ucyhzYXZlZERhdGEuc3RvcmVzKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy8gRm9yIGNsdXN0ZXIgbW9kZSwgc2hvdyBjbHVzdGVycyBpbiB0aGUgZHJvcGRvd25cclxuICAgICAgICAgICAgICAvLyBTdG9yZSBmdWxsIGNsdXN0ZXIgZGF0YSBmb3IgbGF0ZXIgdXNlXHJcbiAgICAgICAgICAgICAgdGhpcy5jbHVzdGVyRGF0YSA9IHJlc3BvbnNlLmRhdGE7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdG9yZU9wdGlvbnMgPSByZXNwb25zZS5kYXRhLm1hcCgoY2x1c3RlcjogYW55KSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgaWQ6IGNsdXN0ZXIuaWQsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogY2x1c3Rlci5sYWJlbFxyXG4gICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAvLyBSZXN0b3JlIHNhdmVkIHNlbGVjdGlvbnMgZm9yIGNsdXN0ZXIgbW9kZVxyXG4gICAgICAgICAgICAgIGlmIChzYXZlZERhdGE/LnN0b3JlcyAmJiBzYXZlZERhdGEuc3RvcmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZUNsdXN0ZXJTZWxlY3Rpb25zKHNhdmVkRGF0YS5zdG9yZXMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZU9wdGlvbnMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5jbHVzdGVyRGF0YSA9IFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHN0b3Jlcy9jbHVzdGVyczonLCBlcnJvcik7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlT3B0aW9ucyA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICByZXN0b3JlU3RvcmVTZWxlY3Rpb25zKHNhdmVkU3RvcmVzOiBTdG9yZVtdKTogdm9pZCB7XHJcbiAgICAvLyBNYXRjaCBzYXZlZCBzdG9yZXMgYnkgc3RvcmVOYW1lXHJcbiAgICBjb25zdCBzYXZlZFN0b3JlTmFtZXMgPSBuZXcgU2V0KHNhdmVkU3RvcmVzLm1hcChzID0+IHMuc3RvcmVOYW1lKSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkU3RvcmVzID0gdGhpcy5zdG9yZU9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiBcclxuICAgICAgc2F2ZWRTdG9yZU5hbWVzLmhhcyhvcHRpb24ubGFiZWwpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcmVzdG9yZUNsdXN0ZXJTZWxlY3Rpb25zKF9zYXZlZFN0b3JlczogU3RvcmVbXSk6IHZvaWQge1xyXG4gICAgLy8gUmVzdG9yZSBjbHVzdGVyIHNlbGVjdGlvbiBPTkxZIGZyb20gc2VsZWN0ZWRDbHVzdGVycyAobm8gZGVyaXZhdGlvbiBmcm9tIHN0b3JlcylcclxuICAgIGNvbnN0IHNhdmVkQ2x1c3RlcnMgPSB0aGlzLmZpbmRSZXBsYWNlRGF0YT8uc2VsZWN0ZWRDbHVzdGVycyB8fCBbXTtcclxuICAgIGlmICghc2F2ZWRDbHVzdGVycy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFN0b3JlcyA9IFtdO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2F2ZWRDbHVzdGVySWRzID0gbmV3IFNldChzYXZlZENsdXN0ZXJzLm1hcChjID0+IGMuaWQpKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkQ2x1c3RlcnM6IFN0b3JlT3B0aW9uW10gPSBbXTtcclxuXHJcbiAgICB0aGlzLmNsdXN0ZXJEYXRhLmZvckVhY2goKGNsdXN0ZXI6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoc2F2ZWRDbHVzdGVySWRzLmhhcyhjbHVzdGVyLmlkKSkge1xyXG4gICAgICAgIHNlbGVjdGVkQ2x1c3RlcnMucHVzaCh7XHJcbiAgICAgICAgICBpZDogY2x1c3Rlci5pZCxcclxuICAgICAgICAgIGxhYmVsOiBjbHVzdGVyLmxhYmVsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRTdG9yZXMgPSBzZWxlY3RlZENsdXN0ZXJzO1xyXG4gIH1cclxuXHJcbiAgb25TdG9yZXNTZWxlY3RlZChzdG9yZXM6IFN0b3JlT3B0aW9uW10pIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRTdG9yZXMgPSBzdG9yZXM7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvblJldmlld0FuZFJlcGxhY2UoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuZmluZFJlcGxhY2VEYXRhPy5faWQpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignTm8gZmluZCByZXBsYWNlIElEIGF2YWlsYWJsZScpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2hvdyBjb25maXJtYXRpb24gbW9kYWxcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihCYXRjaENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50LCB7XHJcbiAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICBzaXplOiAnbWQnLFxyXG4gICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXHJcbiAgICAgIHdpbmRvd0NsYXNzOiAnYmF0Y2gtY29uZmlybWF0aW9uLW1vZGFsJ1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUGFzcyBzdG9yZSBjb3VudCB0byBtb2RhbFxyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2Uuc3RvcmVDb3VudCA9IHRoaXMuZ2V0U3RvcmVDb3VudCgpO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vZGFsUmVmLnJlc3VsdDtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIC8vIFVzZXIgY29uZmlybWVkLCBwcm9jZWVkIHdpdGggYmF0Y2ggcHJvY2Vzc1xyXG4gICAgICAgIHRoaXMucHJvY2VlZFdpdGhCYXRjaFByb2Nlc3MoKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgLy8gVXNlciBkaXNtaXNzZWQgdGhlIG1vZGFsXHJcbiAgICAgIGNvbnNvbGUubG9nKCdCYXRjaCBjb25maXJtYXRpb24gbW9kYWwgZGlzbWlzc2VkJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByb2NlZWRXaXRoQmF0Y2hQcm9jZXNzKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmZpbmRSZXBsYWNlRGF0YT8uX2lkKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGZpbmQgcmVwbGFjZSBJRCBhdmFpbGFibGUnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmJhdGNoUHJvY2Vzc2luZyA9IHRydWU7XHJcbiAgICBjb25zdCBmaW5kUmVwbGFjZUlkID0gdGhpcy5maW5kUmVwbGFjZURhdGEuX2lkO1xyXG4gICAgXHJcbiAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2UuYmF0Y2hGaW5kUmVwbGFjZSh7IGZpbmRSZXBsYWNlSWQgfSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmJhdGNoUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlPy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgLy8gUmVmZXRjaCBmaW5kIHJlcGxhY2UgZGF0YSB0byB1cGRhdGUgVUlcclxuICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5sb2FkQW5kU2V0RmluZFJlcGxhY2VEYXRhQnlJZChmaW5kUmVwbGFjZUlkKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBiYXRjaCBmaW5kIHJlcGxhY2U6JywgcmVzcG9uc2U/Lm1lc3NhZ2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmJhdGNoUHJvY2Vzc2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3RhcnRpbmcgYmF0Y2ggZmluZCByZXBsYWNlOicsIGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25BcHBseSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlYXJjaE1vZGUgPSB0aGlzLnNlbGVjdGVkTW9kZS52YWx1ZSBhcyAnc3RvcmUnIHwgJ2NsdXN0ZXInO1xyXG4gICAgbGV0IHN0b3JlczogU3RvcmVbXSA9IFtdO1xyXG4gICAgbGV0IHNlbGVjdGVkQ2x1c3RlcnM6IEFycmF5PHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9PiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICAgIFxyXG4gICAgaWYgKHNlYXJjaE1vZGUgPT09ICdzdG9yZScpIHtcclxuICAgICAgLy8gRm9yIHN0b3JlIG1vZGUsIGNvbnZlcnQgc2VsZWN0ZWQgc3RvcmVzIGRpcmVjdGx5XHJcbiAgICAgIHN0b3JlcyA9IHRoaXMuc2VsZWN0ZWRTdG9yZXMubWFwKChzdG9yZU9wdGlvbjogU3RvcmVPcHRpb24pID0+ICh7XHJcbiAgICAgICAgc3RvcmVOYW1lOiBzdG9yZU9wdGlvbi5sYWJlbCxcclxuICAgICAgfSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gRm9yIGNsdXN0ZXIgbW9kZSwgc2F2ZSBzZWxlY3RlZCBjbHVzdGVycyBhbmQgZXh0cmFjdCBhbGwgc3RvcmVzIGZyb20gc2VsZWN0ZWQgY2x1c3RlcnNcclxuICAgICAgc2VsZWN0ZWRDbHVzdGVycyA9IHRoaXMuc2VsZWN0ZWRTdG9yZXMubWFwKChzdG9yZU9wdGlvbjogU3RvcmVPcHRpb24pID0+ICh7XHJcbiAgICAgICAgaWQ6IHN0b3JlT3B0aW9uLmlkLFxyXG4gICAgICAgIGxhYmVsOiBzdG9yZU9wdGlvbi5sYWJlbFxyXG4gICAgICB9KSk7XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBzZWxlY3RlZENsdXN0ZXJJZHMgPSBuZXcgU2V0KHRoaXMuc2VsZWN0ZWRTdG9yZXMubWFwKHMgPT4gcy5pZCkpO1xyXG4gICAgICBzdG9yZXMgPSBbXTtcclxuICAgICAgXHJcbiAgICAgIC8vIEZpbmQgc2VsZWN0ZWQgY2x1c3RlcnMgYW5kIGV4dHJhY3QgdGhlaXIgc3RvcmVzXHJcbiAgICAgIHRoaXMuY2x1c3RlckRhdGEuZm9yRWFjaCgoY2x1c3RlcjogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkQ2x1c3Rlcklkcy5oYXMoY2x1c3Rlci5pZCkgJiYgY2x1c3Rlci5zdG9yZXMgJiYgQXJyYXkuaXNBcnJheShjbHVzdGVyLnN0b3JlcykpIHtcclxuICAgICAgICAgIGNsdXN0ZXIuc3RvcmVzLmZvckVhY2goKHN0b3JlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgc3RvcmVzLnB1c2goe1xyXG4gICAgICAgICAgICAgIHN0b3JlTmFtZTogc3RvcmUubGFiZWwgLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRlIGRhdGEgc2VydmljZSB3aXRoIGFsbCBjdXJyZW50IHZhbHVlc1xyXG4gICAgY29uc3QgdXBkYXRlRGF0YTogYW55ID0ge1xyXG4gICAgICBzZWFyY2hNb2RlOiBzZWFyY2hNb2RlLFxyXG4gICAgICBzdG9yZXM6IHN0b3JlcyxcclxuICAgICAgc3RvcmVDb3VudDogc3RvcmVzLmxlbmd0aCxcclxuICAgICAgdGFyZ2V0OiB0aGlzLnRhcmdldC52YWx1ZSBhcyAnbWVyY2gnIHwgJ3ZtJyB8ICdib3RoJyxcclxuICAgICAgZmluZFByb21wdDogdGhpcy5maW5kUHJvbXB0LnZhbHVlIHx8ICcnLFxyXG4gICAgICByZXBsYWNlUHJvbXB0OiB0aGlzLnJlcGxhY2VQcm9tcHQudmFsdWUgfHwgJycsXHJcbiAgICAgIHJlcGxhY2VCcmFuZDogdGhpcy5nZXRSZXBsYWNlQnJhbmRTZWxlY3Rpb24oKSxcclxuICAgICAgcmVwbGFjZVZtOiB0aGlzLmdldFJlcGxhY2VWbVNlbGVjdGlvbigpXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEFkZCBzZWxlY3RlZENsdXN0ZXJzIG9ubHkgd2hlbiBzZWFyY2hNb2RlIGlzIGNsdXN0ZXJcclxuICAgIGlmIChzZWFyY2hNb2RlID09PSAnY2x1c3RlcicgJiYgc2VsZWN0ZWRDbHVzdGVycykge1xyXG4gICAgICB1cGRhdGVEYXRhLnNlbGVjdGVkQ2x1c3RlcnMgPSBzZWxlY3RlZENsdXN0ZXJzO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGF0YVNlcnZpY2UudXBkYXRlRGF0YSh1cGRhdGVEYXRhKTtcclxuXHJcbiAgICAvLyBUcmlnZ2VyIHNhdmUgYXMgZHJhZnRcclxuICAgIHRoaXMuZGF0YVNlcnZpY2UudHJpZ2dlclNhdmVEcmFmdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2FudmFzIHNldHVwIG1ldGhvZHNcclxuICBzZXR1cFpvb21IYW5kbGVycyhjYW52YXM6IGZhYnJpYy5DYW52YXMpOiB2b2lkIHtcclxuICAgIC8vIERpc2FibGUgb2JqZWN0IHNlbGVjdGlvbiBnbG9iYWxseVxyXG4gICAgY2FudmFzLnNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICBjYW52YXMub24oXCJtb3VzZTp3aGVlbFwiLCAob3B0OiBmYWJyaWMuVEV2ZW50PFdoZWVsRXZlbnQ+KSA9PiB7XHJcbiAgICAgIGNvbnN0IGUgPSBvcHQuZTtcclxuICAgICAgaWYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkpIHtcclxuICAgICAgICBjb25zdCBkZWx0YSA9IGUuZGVsdGFZO1xyXG4gICAgICAgIGxldCB6b29tID0gY2FudmFzLmdldFpvb20oKTtcclxuICAgICAgICB6b29tICo9IDAuOTk1ICoqIGRlbHRhO1xyXG4gICAgICAgIHpvb20gPSBNYXRoLm1heCgwLjA1LCBNYXRoLm1pbih6b29tLCA1KSk7XHJcbiAgICAgICAgY2FudmFzLnpvb21Ub1BvaW50KHsgeDogZS5vZmZzZXRYLCB5OiBlLm9mZnNldFkgfSBhcyBmYWJyaWMuUG9pbnQsIHpvb20pO1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgbGV0IGxhc3RQb3NYID0gMDtcclxuICAgIGxldCBsYXN0UG9zWSA9IDA7XHJcblxyXG4gICAgY2FudmFzLm9uKFwibW91c2U6ZG93blwiLCAob3B0OiBhbnkpID0+IHtcclxuICAgICAgLy8gSGFuZGxlIGZpeHR1cmUgY2xpY2tzIC0gdXNlIGZpbmRUYXJnZXQgdG8gZ2V0IHRoZSBhY3R1YWwgZ3JvdXBcclxuICAgICAgaWYgKG9wdC50YXJnZXQpIHtcclxuICAgICAgICBjb25zdCBvYmogPSBvcHQudGFyZ2V0IGFzIGFueTtcclxuICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGEgZml4dHVyZSBncm91cCBvciBuZXN0ZWQgd2l0aGluIG9uZVxyXG4gICAgICAgIGxldCBmaXh0dXJlR3JvdXAgPSBvYmo7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gVHJhdmVyc2UgdXAgdG8gZmluZCB0aGUgZml4dHVyZSBncm91cFxyXG4gICAgICAgIGxldCBhdHRlbXB0cyA9IDA7XHJcbiAgICAgICAgd2hpbGUgKGZpeHR1cmVHcm91cCAmJiAhKGZpeHR1cmVHcm91cCBhcyBhbnkpLmZpeHR1cmVJZCAmJiAhKGZpeHR1cmVHcm91cCBhcyBhbnkpLm9ialR5cGUgJiYgYXR0ZW1wdHMgPCAxMCkge1xyXG4gICAgICAgICAgaWYgKChmaXh0dXJlR3JvdXAgYXMgYW55KS5wYXJlbnQpIHtcclxuICAgICAgICAgICAgZml4dHVyZUdyb3VwID0gKGZpeHR1cmVHcm91cCBhcyBhbnkpLnBhcmVudDtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoKGZpeHR1cmVHcm91cCBhcyBhbnkpLmdyb3VwKSB7XHJcbiAgICAgICAgICAgIGZpeHR1cmVHcm91cCA9IChmaXh0dXJlR3JvdXAgYXMgYW55KS5ncm91cDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYXR0ZW1wdHMrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgZm91bmQgYSBmaXh0dXJlIGdyb3VwXHJcbiAgICAgICAgaWYgKChmaXh0dXJlR3JvdXAgYXMgYW55KS5vYmpUeXBlID09PSBcImZpeHR1cmVcIiB8fCAoZml4dHVyZUdyb3VwIGFzIGFueSkuZml4dHVyZUlkKSB7XHJcbiAgICAgICAgICB0aGlzLm9uRml4dHVyZUNsaWNrKGZpeHR1cmVHcm91cCk7XHJcbiAgICAgICAgICBjYW52YXMuc2V0QWN0aXZlT2JqZWN0KGZpeHR1cmVHcm91cCk7XHJcbiAgICAgICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvLyBGb3Igb3RoZXIgZWxlbWVudHMsIGp1c3QgaGlnaGxpZ2h0XHJcbiAgICAgICAgY2FudmFzLnNldEFjdGl2ZU9iamVjdChvcHQudGFyZ2V0KTtcclxuICAgICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgaWYgKCFvcHQudGFyZ2V0KSB7XHJcbiAgICAgICAgaXNEcmFnZ2luZyA9IHRydWU7XHJcbiAgICAgICAgY2FudmFzLnNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGUgPSBvcHQuZTtcclxuICAgICAgICBsYXN0UG9zWCA9IGUuY2xpZW50WDtcclxuICAgICAgICBsYXN0UG9zWSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY2FudmFzLm9uKFwibW91c2U6bW92ZVwiLCAob3B0OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGlzRHJhZ2dpbmcgJiYgY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtICYmICFvcHQudGFyZ2V0KSB7XHJcbiAgICAgICAgY29uc3QgZSA9IG9wdC5lO1xyXG4gICAgICAgIGNvbnN0IHZwdCA9IGNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybTtcclxuICAgICAgICB2cHRbNF0gKz0gZS5jbGllbnRYIC0gbGFzdFBvc1g7XHJcbiAgICAgICAgdnB0WzVdICs9IGUuY2xpZW50WSAtIGxhc3RQb3NZO1xyXG4gICAgICAgIGNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgICAgbGFzdFBvc1ggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgbGFzdFBvc1kgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNhbnZhcy5vbihcIm1vdXNlOnVwXCIsICgpID0+IHtcclxuICAgICAgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICBjYW52YXMuc2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBQcmV2ZW50IGFsbCBvYmplY3QgbW92ZW1lbnQgKHdhbGxzLCBlbnRyYW5jZXMsIGZpeHR1cmVzLCBvdGhlciBlbGVtZW50cylcclxuICAgIGNhbnZhcy5vbihcIm9iamVjdDptb3ZpbmdcIiwgKGU6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBvYmogPSBlLnRhcmdldDtcclxuICAgICAgaWYgKG9iaiAmJiAob2JqIGFzIGFueSkub2JqVHlwZSkge1xyXG4gICAgICAgIGUuZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAvLyBSZXNldCBwb3NpdGlvblxyXG4gICAgICAgIG9iai5zZXRDb29yZHMoKTtcclxuICAgICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBQcmV2ZW50IGFsbCBvYmplY3QgbW9kaWZpY2F0aW9ucyAoc2NhbGluZywgcm90YXRpbmcsIGV0Yy4pXHJcbiAgICBjYW52YXMub24oXCJvYmplY3Q6bW9kaWZpZWRcIiwgKGU6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBvYmogPSBlLnRhcmdldDtcclxuICAgICAgaWYgKG9iaiAmJiAob2JqIGFzIGFueSkub2JqVHlwZSkge1xyXG4gICAgICAgIC8vIFJlc2V0IGFueSBjaGFuZ2VzXHJcbiAgICAgICAgb2JqLnNldENvb3JkcygpO1xyXG4gICAgICAgIGNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFByZXZlbnQgb2JqZWN0IHNjYWxpbmdcclxuICAgIGNhbnZhcy5vbihcIm9iamVjdDpzY2FsaW5nXCIsIChlOiBhbnkpID0+IHtcclxuICAgICAgY29uc3Qgb2JqID0gZS50YXJnZXQ7XHJcbiAgICAgIGlmIChvYmogJiYgKG9iaiBhcyBhbnkpLm9ialR5cGUpIHtcclxuICAgICAgICBlLmUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLmUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgb2JqLnNldENvb3JkcygpO1xyXG4gICAgICAgIGNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFByZXZlbnQgb2JqZWN0IHJvdGF0aW5nXHJcbiAgICBjYW52YXMub24oXCJvYmplY3Q6cm90YXRpbmdcIiwgKGU6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBvYmogPSBlLnRhcmdldDtcclxuICAgICAgaWYgKG9iaiAmJiAob2JqIGFzIGFueSkub2JqVHlwZSkge1xyXG4gICAgICAgIGUuZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBvYmouc2V0Q29vcmRzKCk7XHJcbiAgICAgICAgY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRTdG9yZUZpeHR1cmVzKHN0b3JlSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLnByZXZpZXdDYW52YXMpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdDYW52YXMgbm90IGluaXRpYWxpemVkJyk7XHJcbiAgICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmdldFN0b3JlRml4dHVyZXMoeyBpZDogW3N0b3JlSWRdIH0pXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogYXN5bmMgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXJlcz8uZGF0YT8uWzBdPy5mbG9vcnM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdQbGFub2dyYW0gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5wbGFub0RhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUocmVzLmRhdGFbMF0pO1xyXG4gICAgICAgICAgdGhpcy5mbG9vckRhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUocmVzLmRhdGFbMF0uZmxvb3JzWzBdKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gQXBwbHkgc3RvcmVkIGZpbmRSZXNwb25zZURhdGEgYW5kIHJlcGxhY2VSZXNwb25zZURhdGEgaWYgYXZhaWxhYmxlIGZvciB0aGlzIHN0b3JlXHJcbiAgICAgICAgICAvLyBUaGlzIHVwZGF0ZXMgdGhlIGZsb29yRGF0YSB3aXRoIHRoZSBzdG9yZWQgZml4dHVyZSBjaGFuZ2VzIGFuZCBzZXRzIHNlbGVjdGVkRml4dHVyZURhdGFcclxuICAgICAgICAgIHRoaXMuYXBwbHlTdG9yZWRSZXNwb25zZURhdGEoKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gT3BlbiBwYW5lbCBpZiB3ZSBoYXZlIHNlbGVjdGVkIGZpeHR1cmUgZGF0YVxyXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvLyBDb2xsZWN0IGFsbCBmaXh0dXJlcyBmb3IgcHJldmlld1xyXG4gICAgICAgICAgdGhpcy5jb2xsZWN0QWxsRml4dHVyZXMoKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gRW5zdXJlIGNhbnZhcyBpcyBpbml0aWFsaXplZCBiZWZvcmUgcmVuZGVyaW5nXHJcbiAgICAgICAgICBpZiAoIXRoaXMucHJldmlld0NhbnZhcykge1xyXG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVDYW52YXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgaWYgKHRoaXMucHJldmlld0NhbnZhcykge1xyXG4gICAgICAgICAgICAvLyBSZW5kZXIgdGhlIHBsYW5vZ3JhbSB3aXRoIHRoZSB1cGRhdGVkIGZsb29yRGF0YSAod2hpY2ggaW5jbHVkZXMgc3RvcmVkIHJlc3BvbnNlIGRhdGEpXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVuZGVyRmxvb3IodGhpcy5wcmV2aWV3Q2FudmFzKTtcclxuICAgICAgICAgICAgdGhpcy5jYW52YXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nUGxhbm9ncmFtID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJlLWNlbnRlciBhbmQgaGlnaGxpZ2h0IHRoZSBzZWxlY3RlZCBmaXh0dXJlIGlmIHN0b3JlZCByZXNwb25zZSBkYXRhIGV4aXN0c1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5wcmV2aWV3Q2FudmFzQ29udGFpbmVyUmVmPy5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZUNhbnZhcyh0aGlzLnByZXZpZXdDYW52YXMsIHRoaXMucHJldmlld0NhbnZhc0NvbnRhaW5lclJlZik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpdENhbnZhc1RvTGF5b3V0QW5pbWF0ZWQodGhpcy5wcmV2aWV3Q2FudmFzKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy8gSGlnaGxpZ2h0IHRoZSBmaXh0dXJlIGlmIHdlIGhhdmUgc3RvcmVkIHJlc3BvbnNlIGRhdGFcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRml4dHVyZT8uZml4dHVyZUlkKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbkZpeHR1cmUgPSB0aGlzLnByZXZpZXdDYW52YXMuZ2V0T2JqZWN0cygpLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgKG9iajogYW55KSA9PiBvYmoub2JqVHlwZSA9PT0gXCJmaXh0dXJlXCIgJiYgb2JqLmZpeHR1cmVJZCA9PT0gdGhpcy5zZWxlY3RlZEZpeHR1cmUuZml4dHVyZUlkXHJcbiAgICAgICAgICAgICAgICAgICkgYXMgZmFicmljLkdyb3VwIHwgdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uRml4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0Rml4dHVyZSh0aGlzLnByZXZpZXdDYW52YXMsIGFjdGlvbkZpeHR1cmUsIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAvLyBBdXRvbWF0aWNhbGx5IHRyaWdnZXIgZmluZCBhbmQgcmVwbGFjZSBpZiBwcm9tcHRzIGFyZSBhdmFpbGFibGUgYW5kIHN0b3JlIGRvZXNuJ3QgaGF2ZSByZXN1bHRzXHJcbiAgICAgICAgICAgICAgdGhpcy5hdXRvRmluZEFuZFJlcGxhY2VJZk5lZWRlZCgpO1xyXG4gICAgICAgICAgICB9LCAzMDApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jYW52YXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nUGxhbm9ncmFtID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdQbGFub2dyYW0gPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHBsYW5vOicsIGVycik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICByZXNpemVDYW52YXMoY2FudmFzOiBmYWJyaWMuQ2FudmFzLCBjb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+KTogdm9pZCB7XHJcbiAgICBjb25zdCBjb250YWluZXJFbCA9IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xyXG4gICAgY2FudmFzLnNldERpbWVuc2lvbnMoe1xyXG4gICAgICB3aWR0aDogY29udGFpbmVyRWwuY2xpZW50V2lkdGgsXHJcbiAgICAgIGhlaWdodDogY29udGFpbmVyRWwuY2xpZW50SGVpZ2h0LFxyXG4gICAgfSk7XHJcbiAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaXRDYW52YXNUb0xheW91dEFuaW1hdGVkKGNhbnZhczogZmFicmljLkNhbnZhcykge1xyXG4gICAgaWYgKCFjYW52YXMpIHJldHVybjtcclxuICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuZ2V0RnVsbExheW91dEJvdW5kcyhjYW52YXMpO1xyXG4gICAgaWYgKCFib3VuZHMud2lkdGggfHwgIWJvdW5kcy5oZWlnaHQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBjYW52YXNXID0gY2FudmFzLmdldFdpZHRoKCk7XHJcbiAgICBjb25zdCBjYW52YXNIID0gY2FudmFzLmdldEhlaWdodCgpO1xyXG4gICAgY29uc3Qgc2NhbGVYID0gY2FudmFzVyAvIGJvdW5kcy53aWR0aDtcclxuICAgIGNvbnN0IHNjYWxlWSA9IGNhbnZhc0ggLyBib3VuZHMuaGVpZ2h0O1xyXG4gICAgY29uc3QgdGFyZ2V0Wm9vbSA9IE1hdGgubWluKHNjYWxlWCwgc2NhbGVZKSAqIDAuOTtcclxuXHJcbiAgICBjb25zdCB0YXJnZXRWcHQgPSBbLi4uKGNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybSB8fCBbMSwgMCwgMCwgMSwgMCwgMF0pXSBhcyBmYWJyaWMuVE1hdDJEO1xyXG4gICAgdGFyZ2V0VnB0WzBdID0gdGFyZ2V0Wm9vbTtcclxuICAgIHRhcmdldFZwdFszXSA9IHRhcmdldFpvb207XHJcbiAgICB0YXJnZXRWcHRbNF0gPSBjYW52YXNXIC8gMiAtIChib3VuZHMubGVmdCArIGJvdW5kcy53aWR0aCAvIDIpICogdGFyZ2V0Wm9vbTtcclxuICAgIHRhcmdldFZwdFs1XSA9IGNhbnZhc0ggLyAyIC0gKGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0IC8gMikgKiB0YXJnZXRab29tO1xyXG5cclxuICAgIGNvbnN0IHN0YXJ0VnB0ID0gWy4uLmNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybSFdIGFzIGZhYnJpYy5UTWF0MkQ7XHJcblxyXG4gICAgZmFicmljLnV0aWwuYW5pbWF0ZSh7XHJcbiAgICAgIHN0YXJ0VmFsdWU6IDAsXHJcbiAgICAgIGVuZFZhbHVlOiAxLFxyXG4gICAgICBkdXJhdGlvbjogMTAwLFxyXG4gICAgICBlYXNpbmc6IGZhYnJpYy51dGlsLmVhc2UuZWFzZU91dEN1YmljLFxyXG4gICAgICBvbkNoYW5nZTogKHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgICAgICBjb25zdCB2cHQgPSBjYW52YXMudmlld3BvcnRUcmFuc2Zvcm0hO1xyXG4gICAgICAgIHZwdFswXSA9IHN0YXJ0VnB0WzBdICsgKHRhcmdldFZwdFswXSAtIHN0YXJ0VnB0WzBdKSAqIHZhbHVlO1xyXG4gICAgICAgIHZwdFszXSA9IHN0YXJ0VnB0WzNdICsgKHRhcmdldFZwdFszXSAtIHN0YXJ0VnB0WzNdKSAqIHZhbHVlO1xyXG4gICAgICAgIHZwdFs0XSA9IHN0YXJ0VnB0WzRdICsgKHRhcmdldFZwdFs0XSAtIHN0YXJ0VnB0WzRdKSAqIHZhbHVlO1xyXG4gICAgICAgIHZwdFs1XSA9IHN0YXJ0VnB0WzVdICsgKHRhcmdldFZwdFs1XSAtIHN0YXJ0VnB0WzVdKSAqIHZhbHVlO1xyXG4gICAgICAgIGNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RnVsbExheW91dEJvdW5kcyhjYW52YXM6IGZhYnJpYy5DYW52YXMpIHtcclxuICAgIGNvbnN0IG9iamVjdHMgPSBjYW52YXMuZ2V0T2JqZWN0cygpO1xyXG4gICAgaWYgKCFvYmplY3RzLmxlbmd0aCkgcmV0dXJuIHsgbGVmdDogMCwgdG9wOiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XHJcblxyXG4gICAgbGV0IG1pblggPSBJbmZpbml0eSwgbWluWSA9IEluZmluaXR5LCBtYXhYID0gLUluZmluaXR5LCBtYXhZID0gLUluZmluaXR5O1xyXG5cclxuICAgIGZvciAoY29uc3Qgb2JqIG9mIG9iamVjdHMpIHtcclxuICAgICAgY29uc3QgcmVjdCA9IG9iai5nZXRCb3VuZGluZ1JlY3QoKTtcclxuICAgICAgbWluWCA9IE1hdGgubWluKG1pblgsIHJlY3QubGVmdCk7XHJcbiAgICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCByZWN0LnRvcCk7XHJcbiAgICAgIG1heFggPSBNYXRoLm1heChtYXhYLCByZWN0LmxlZnQgKyByZWN0LndpZHRoKTtcclxuICAgICAgbWF4WSA9IE1hdGgubWF4KG1heFksIHJlY3QudG9wICsgcmVjdC5oZWlnaHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7IGxlZnQ6IG1pblgsIHRvcDogbWluWSwgd2lkdGg6IG1heFggLSBtaW5YLCBoZWlnaHQ6IG1heFkgLSBtaW5ZIH07XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW5kZXJGbG9vcihjYW52YXM6IGZhYnJpYy5DYW52YXMpIHtcclxuICAgIGF3YWl0IHRoaXMuZHJhd0luaXRpYWxDb250ZW50KGNhbnZhcyk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkcmF3SW5pdGlhbENvbnRlbnQoY2FudmFzOiBmYWJyaWMuQ2FudmFzKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjYW52YXMuY2xlYXIoKTtcclxuICAgIGF3YWl0IHRoaXMuZHJhd0xheW91dEVsZW1lbnRzKGNhbnZhcyk7XHJcbiAgfVxyXG5cclxuICAvLyBBdXRvbWF0aWNhbGx5IHRyaWdnZXIgZmluZCBhbmQgcmVwbGFjZSBpZiBwcm9tcHRzIGFyZSBhdmFpbGFibGUgYW5kIHN0b3JlIGRvZXNuJ3QgaGF2ZSByZXN1bHRzXHJcbiAgcHJpdmF0ZSBhdXRvRmluZEFuZFJlcGxhY2VJZk5lZWRlZCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldyB8fCAhdGhpcy5maW5kUmVwbGFjZURhdGEpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGlmIHByb21wdHMgYXJlIGF2YWlsYWJsZVxyXG4gICAgY29uc3QgaGFzRmluZFByb21wdCA9IHRoaXMuZmluZFJlcGxhY2VEYXRhLmZpbmRQcm9tcHQgJiYgdGhpcy5maW5kUmVwbGFjZURhdGEuZmluZFByb21wdC50cmltKCkubGVuZ3RoID4gMDtcclxuXHJcbiAgICAvLyBSZXF1aXJlIGF0IGxlYXN0IGZpbmQgcHJvbXB0IHRvIGF1dG8tYXBwbHlcclxuICAgIGlmICghaGFzRmluZFByb21wdCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgY3VycmVudCBzdG9yZSBhbHJlYWR5IGhhcyBmaW5kUmVzcG9uc2VEYXRhIGFuZCByZXBsYWNlUmVzcG9uc2VEYXRhXHJcbiAgICBjb25zdCBzdG9yZSA9IHRoaXMuZmluZFJlcGxhY2VEYXRhLnN0b3Jlcz8uZmluZChcclxuICAgICAgKHM6IFN0b3JlKSA9PiBzLnN0b3JlTmFtZSA9PT0gdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldy5zdG9yZU5hbWVcclxuICAgICk7XHJcblxyXG4gICAgLy8gV2hlbiBzd2l0Y2hpbmcgc3RvcmVzLCB3ZSB3YW50IHRvIHJlLWFwcGx5IGZpbmQgZXZlbiBpZiB0aGUgc3RvcmUgYWxyZWFkeSBoYXMgZmluZFJlc3BvbnNlRGF0YVxyXG4gICAgLy8gVGhpcyBhbGxvd3MgYXV0by1hcHBseSB3aGVuIG9ubHkgZmluZCBwcm9tcHQgZXhpc3RzIGFuZCB1c2VyIGNoYW5nZXMgc3RvcmVzXHJcbiAgICAvLyBPbmx5IHNraXAgaWYgYm90aCBmaW5kUmVzcG9uc2VEYXRhIGFuZCByZXBsYWNlUmVzcG9uc2VEYXRhIGV4aXN0IChhbHJlYWR5IGZ1bGx5IHByb2Nlc3NlZClcclxuICAgIGlmIChzdG9yZT8uZmluZFJlc3BvbnNlRGF0YSAmJiBzdG9yZT8ucmVwbGFjZVJlc3BvbnNlRGF0YSkge1xyXG4gICAgICAvLyBTdG9yZSBhbHJlYWR5IGhhcyBib3RoIGZpbmQgYW5kIHJlcGxhY2UgcmVzdWx0cywgc2tpcCB0byBwcmVzZXJ2ZSB0aGUgc3RhdGVcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNldCB0aGUgcHJvbXB0cyBpbiB0aGUgZm9ybSBjb250cm9scyBpZiBub3QgYWxyZWFkeSBzZXRcclxuICAgIGlmICghdGhpcy5maW5kUHJvbXB0LnZhbHVlICYmIHRoaXMuZmluZFJlcGxhY2VEYXRhLmZpbmRQcm9tcHQpIHtcclxuICAgICAgdGhpcy5maW5kUHJvbXB0LnNldFZhbHVlKHRoaXMuZmluZFJlcGxhY2VEYXRhLmZpbmRQcm9tcHQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgdGhpcy5pc0ZpbmRQcm9tcHRGcm9tQXBpID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5yZXBsYWNlQnJhbmQudmFsdWUgJiYgdGhpcy5maW5kUmVwbGFjZURhdGEucmVwbGFjZUJyYW5kPy5faWQpIHtcclxuICAgICAgdGhpcy5yZXBsYWNlQnJhbmQuc2V0VmFsdWUodGhpcy5maW5kUmVwbGFjZURhdGEucmVwbGFjZUJyYW5kLl9pZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnJlcGxhY2VWbS52YWx1ZSAmJiB0aGlzLmZpbmRSZXBsYWNlRGF0YS5yZXBsYWNlVm0/Ll9pZCkge1xyXG4gICAgICB0aGlzLnJlcGxhY2VWbS5zZXRWYWx1ZSh0aGlzLmZpbmRSZXBsYWNlRGF0YS5yZXBsYWNlVm0uX2lkLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQXV0b21hdGljYWxseSB0cmlnZ2VyIGZpbmQgZmlyc3QsIHRoZW4gcmVwbGFjZSBhZnRlciBmaW5kIGNvbXBsZXRlcyAoaWYgYSB2YWxpZCByZXBsYWNlIHNlbGVjdGlvbiBleGlzdHMpXHJcbiAgICB0aGlzLmF1dG9GaW5kKCk7XHJcbiAgfVxyXG5cclxuICAvLyBBdXRvIGZpbmQgLSB3aWxsIHRyaWdnZXIgcmVwbGFjZSBhZnRlciBjb21wbGV0aW9uXHJcbiAgcHJpdmF0ZSBhdXRvRmluZCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maW5kUHJvbXB0LnZhbHVlIHx8ICF0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbmRMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBzZWxlY3Rpb25Dcml0ZXJpYTogdGhpcy5maW5kUHJvbXB0LnZhbHVlLFxyXG4gICAgICBzdG9yZXM6IFt0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3LnN0b3JlTmFtZV0sXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS5maW5kRml4dHVyZShwYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5maW5kTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jYW52YXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICBpZiAocmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVzcG9uc2UgaW5kaWNhdGVzIFwiTk9UIEZPVU5EXCJcclxuICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09ICdzdWNjZXNzJyAmJiByZXMubWVzc2FnZSA9PT0gJ05PVCBGT1VORCcpIHtcclxuICAgICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRXYXJuaW5nVG9hc3QoJ05vIG1hdGNoaW5nIGZpeHR1cmUgZm91bmQgZm9yIHRoZSBnaXZlbiBwcm9tcHQnKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHJlcy5kYXRhIGV4aXN0cyBiZWZvcmUgcHJvY2Vzc2luZ1xyXG4gICAgICAgICAgICBpZiAoIXJlcy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0V2FybmluZ1RvYXN0KCdObyBtYXRjaGluZyBmaXh0dXJlIGZvdW5kIGZvciB0aGUgZ2l2ZW4gcHJvbXB0Jyk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFpUmVzcG9uc2VGaXh0dXJlKHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgLy8gU3RvcmUgdGhlIGZvdW5kIGZpeHR1cmUgZm9yIHBvdGVudGlhbCByZXBsYWNlIG9wZXJhdGlvblxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZSA9IHtcclxuICAgICAgICAgICAgICBmaXh0dXJlSWQ6IHJlcy5kYXRhLl9pZCxcclxuICAgICAgICAgICAgICBmaXh0dXJlVHlwZTogcmVzLmRhdGEuZml4dHVyZVR5cGUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gU2F2ZSBmaW5kUmVzcG9uc2VEYXRhIHRvIHRoZSBzcGVjaWZpYyBzdG9yZVxyXG4gICAgICAgICAgICB0aGlzLnNhdmVGaW5kUmVzcG9uc2VEYXRhKHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIFJlbmRlciB0aGUgZmxvb3IgYW5kIHdhaXQgZm9yIGl0IHRvIGNvbXBsZXRlXHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRmxvb3IodGhpcy5wcmV2aWV3Q2FudmFzKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAvLyBXYWl0IGZvciBjYW52YXMgdG8gZnVsbHkgcmVuZGVyIGJlZm9yZSBoaWdobGlnaHRpbmdcclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbkZpeHR1cmUgPSB0aGlzLnByZXZpZXdDYW52YXMuZ2V0T2JqZWN0cygpLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqLm9ialR5cGUgPT09IFwiZml4dHVyZVwiICYmIG9iai5maXh0dXJlSWQgPT09IHJlcy5kYXRhLl9pZFxyXG4gICAgICAgICAgICAgICAgKSBhcyBmYWJyaWMuR3JvdXAgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uRml4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodEZpeHR1cmUodGhpcy5wcmV2aWV3Q2FudmFzLCBhY3Rpb25GaXh0dXJlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy8gQWZ0ZXIgZmluZCBjb21wbGV0ZXMsIGF1dG9tYXRpY2FsbHkgdHJpZ2dlciByZXBsYWNlIG9ubHkgaWYgYSB2YWxpZCByZXBsYWNlIHNlbGVjdGlvbiBleGlzdHNcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc1JlcGxhY2VTZWxlY3Rpb24oKSkge1xyXG4gICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9SZXBsYWNlKCk7XHJcbiAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSwgMzAwKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5maW5kTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jYW52YXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBBdXRvIHJlcGxhY2UgLSBjYWxsZWQgYWZ0ZXIgYXV0byBmaW5kIGNvbXBsZXRlc1xyXG4gIHByaXZhdGUgYXV0b1JlcGxhY2UoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaGFzUmVwbGFjZVNlbGVjdGlvbigpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBHZXQgdGhlIGZvdW5kIGZpeHR1cmUgSUQgZnJvbSB0aGUgc3RvcmUncyBmaW5kUmVzcG9uc2VEYXRhIChub3QgdGhlIGNsaWNrZWQgZml4dHVyZSlcclxuICAgIGNvbnN0IGZvdW5kRml4dHVyZUlkID0gdGhpcy5nZXRDdXJyZW50U3RvcmVGaW5kUmVzcG9uc2VEYXRhKCk7XHJcbiAgICBpZiAoIWZvdW5kRml4dHVyZUlkKSB7XHJcbiAgICAgIC8vIEZhbGxiYWNrIHRvIHNlbGVjdGVkIGZpeHR1cmUgaWYgbm8gZmluZFJlc3BvbnNlRGF0YSBleGlzdHNcclxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRml4dHVyZT8uZml4dHVyZUlkICYmICF0aGlzLnNlbGVjdGVkRml4dHVyZURhdGE/Ll9pZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFVzZSB0aGUgZm91bmQgZml4dHVyZSBJRCAoZnJvbSBmaW5kUmVzcG9uc2VEYXRhKSBpbnN0ZWFkIG9mIHRoZSBjbGlja2VkIGZpeHR1cmVcclxuICAgIGNvbnN0IGZpeHR1cmVJZCA9IGZvdW5kRml4dHVyZUlkIHx8IHRoaXMuc2VsZWN0ZWRGaXh0dXJlPy5maXh0dXJlSWQgfHwgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhPy5faWQ7XHJcblxyXG4gICAgLy8gR2V0IHRoZSBvcmlnaW5hbCBmaXh0dXJlIGRhdGEgZnJvbSB0aGUgZm91bmQgZml4dHVyZSAobm90IHRoZSBjbGlja2VkIG9uZSlcclxuICAgIGNvbnN0IGZvdW5kRml4dHVyZSA9IHRoaXMuZ2V0Rml4dHVyZUJ5SWRGcm9tRmxvb3IoZml4dHVyZUlkKTtcclxuICAgIGNvbnN0IG9yaWdpbmFsRml4dHVyZSA9IGZvdW5kRml4dHVyZSA/IHN0cnVjdHVyZWRDbG9uZShmb3VuZEZpeHR1cmUpIDogbnVsbDtcclxuXHJcbiAgICB0aGlzLnJlcGxhY2VMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XHJcbiAgICAgIGZpeHR1cmVJZDogZml4dHVyZUlkLFxyXG4gICAgICB1cGRhdGVUeXBlOiB0aGlzLnRhcmdldC52YWx1ZSxcclxuICAgICAgcmVwbGFjZUJyYW5kOiB0aGlzLm5lZWRzUmVwbGFjZUJyYW5kKCkgPyB0aGlzLmdldFJlcGxhY2VCcmFuZFNlbGVjdGlvbigpIDogbnVsbCxcclxuICAgICAgcmVwbGFjZVZtOiB0aGlzLm5lZWRzUmVwbGFjZVZtKCkgPyB0aGlzLmdldFJlcGxhY2VWbVNlbGVjdGlvbigpIDogbnVsbCxcclxuICAgICAgdXBkYXRpb25Dcml0ZXJpYTogdGhpcy5yZXBsYWNlUHJvbXB0LnZhbHVlIHx8ICcnLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2UucmVwbGFjZUZpeHR1cmUocGF5bG9hZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVwbGFjZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgaWYgKHJlcy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgLy8gTWFyayByZXBsYWNlIGFzIGV4ZWN1dGVkIHRvIGRpc2FibGUgdGhlIGJ1dHRvblxyXG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VFeGVjdXRlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAvLyBTdG9yZSBvcmlnaW5hbCBmaXh0dXJlIGZvciBiZWZvcmUvYWZ0ZXIgY29tcGFyaXNvblxyXG4gICAgICAgICAgICAvLyBPbmx5IHN0b3JlIGlmIG5vdCBhbHJlYWR5IGluIG1hcCAocHJlc2VydmUgaW5pdGlhbCBwbGFub2dyYW0gZml4dHVyZSlcclxuICAgICAgICAgICAgaWYgKG9yaWdpbmFsRml4dHVyZSAmJiAhdGhpcy5vcmlnaW5hbEZpeHR1cmVzTWFwLmhhcyhmaXh0dXJlSWQpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbEZpeHR1cmVzTWFwLnNldChmaXh0dXJlSWQsIG9yaWdpbmFsRml4dHVyZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gUmVzdG9yZSBvcmlnaW5hbEZpeHR1cmVEYXRhIGZyb20gbWFwIHRvIGVuc3VyZSBpdCdzIGFsd2F5cyB0aGUgaW5pdGlhbCBwbGFub2dyYW0gZml4dHVyZVxyXG4gICAgICAgICAgICBjb25zdCBzdG9yZWRPcmlnaW5hbCA9IHRoaXMub3JpZ2luYWxGaXh0dXJlc01hcC5nZXQoZml4dHVyZUlkKTtcclxuICAgICAgICAgICAgaWYgKHN0b3JlZE9yaWdpbmFsKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbEZpeHR1cmVEYXRhID0gc3RydWN0dXJlZENsb25lKHN0b3JlZE9yaWdpbmFsKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVBaVJlc3BvbnNlRml4dHVyZShyZXMuZGF0YSk7XHJcblxyXG4gICAgICAgICAgICAvLyBTYXZlIHJlcGxhY2VSZXNwb25zZURhdGEgdG8gdGhlIHNwZWNpZmljIHN0b3JlXHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZVJlcGxhY2VSZXNwb25zZURhdGEocmVzLmRhdGEpO1xyXG5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIHNlbGVjdGVkIGZpeHR1cmUgZGF0YSB0byB0aGUgZm91bmQgZml4dHVyZSAoYWZ0ZXIgcmVwbGFjZSlcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSB7XHJcbiAgICAgICAgICAgICAgZml4dHVyZUlkOiByZXMuZGF0YS5faWQsXHJcbiAgICAgICAgICAgICAgZml4dHVyZVR5cGU6IHJlcy5kYXRhLmZpeHR1cmVUeXBlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSByZXMuZGF0YTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJlbmRlciB0aGUgZmxvb3IgYW5kIHdhaXQgZm9yIGl0IHRvIGNvbXBsZXRlXHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRmxvb3IodGhpcy5wcmV2aWV3Q2FudmFzKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAvLyBXYWl0IGZvciBjYW52YXMgdG8gZnVsbHkgcmVuZGVyIGJlZm9yZSBoaWdobGlnaHRpbmdcclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIEhpZ2hsaWdodCB0aGUgZm91bmQgZml4dHVyZSAobm90IHRoZSBjbGlja2VkIG9uZSlcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbkZpeHR1cmUgPSB0aGlzLnByZXZpZXdDYW52YXMuZ2V0T2JqZWN0cygpLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqLm9ialR5cGUgPT09IFwiZml4dHVyZVwiICYmIG9iai5maXh0dXJlSWQgPT09IHJlcy5kYXRhLl9pZFxyXG4gICAgICAgICAgICAgICAgKSBhcyBmYWJyaWMuR3JvdXAgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uRml4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodEZpeHR1cmUodGhpcy5wcmV2aWV3Q2FudmFzLCBhY3Rpb25GaXh0dXJlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9LCAzMDApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlcGxhY2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIEZpbmQgYW5kIFJlcGxhY2UgYnV0dG9uIGhhbmRsZXJzXHJcbiAgb25GaW5kKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmZpbmRQcm9tcHQudmFsdWUgfHwgIXRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmluZExvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5jYW52YXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIHNlbGVjdGlvbkNyaXRlcmlhOiB0aGlzLmZpbmRQcm9tcHQudmFsdWUsXHJcbiAgICAgIHN0b3JlczogW3RoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcuc3RvcmVOYW1lXSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmZpbmRGaXh0dXJlKHBheWxvYWQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZpbmRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIGlmIChyZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSByZXNwb25zZSBpbmRpY2F0ZXMgXCJOT1QgRk9VTkRcIlxyXG4gICAgICAgICAgICBpZiAocmVzLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnICYmIHJlcy5tZXNzYWdlID09PSAnTk9UIEZPVU5EJykge1xyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFdhcm5pbmdUb2FzdCgnTm8gbWF0Y2hpbmcgZml4dHVyZSBmb3VuZCBmb3IgdGhlIGdpdmVuIHByb21wdCcpO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgcmVzLmRhdGEgZXhpc3RzIGJlZm9yZSBwcm9jZXNzaW5nXHJcbiAgICAgICAgICAgIGlmICghcmVzLmRhdGEpIHtcclxuICAgICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRXYXJuaW5nVG9hc3QoJ05vIG1hdGNoaW5nIGZpeHR1cmUgZm91bmQgZm9yIHRoZSBnaXZlbiBwcm9tcHQnKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQWlSZXNwb25zZUZpeHR1cmUocmVzLmRhdGEpO1xyXG4gICAgICAgICAgICAvLyBTdG9yZSB0aGUgZm91bmQgZml4dHVyZSBmb3IgcG90ZW50aWFsIHJlcGxhY2Ugb3BlcmF0aW9uXHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVJZCA9IHJlcy5kYXRhLl9pZDtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSB7XHJcbiAgICAgICAgICAgICAgZml4dHVyZUlkOiBmaXh0dXJlSWQsXHJcbiAgICAgICAgICAgICAgZml4dHVyZVR5cGU6IHJlcy5kYXRhLmZpeHR1cmVUeXBlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSByZXMuZGF0YTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBvcmlnaW5hbCBmaXh0dXJlIGZyb20gZmxvb3JEYXRhIGJlZm9yZSBhbnkgbW9kaWZpY2F0aW9uc1xyXG4gICAgICAgICAgICAvLyBUaGlzIGFsbG93cyB1cyB0byBzaG93IEJlZm9yZS9BZnRlciBldmVuIHdoZW4gb25seSBmaW5kIGRhdGEgZXhpc3RzXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5vcmlnaW5hbEZpeHR1cmVzTWFwLmhhcyhmaXh0dXJlSWQpKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZm91bmRGaXh0dXJlID0gdGhpcy5nZXRGaXh0dXJlQnlJZEZyb21GbG9vcihmaXh0dXJlSWQpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRml4dHVyZSA9IGZvdW5kRml4dHVyZSA/IHN0cnVjdHVyZWRDbG9uZShmb3VuZEZpeHR1cmUpIDogbnVsbDtcclxuICAgICAgICAgICAgICAvLyBJZiBmb3VuZCwgc3RvcmUgaXQgaW4gdGhlIG1hcFxyXG4gICAgICAgICAgICAgIGlmIChvcmlnaW5hbEZpeHR1cmUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxGaXh0dXJlc01hcC5zZXQoZml4dHVyZUlkLCBvcmlnaW5hbEZpeHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgLy8gU2V0IG9yaWdpbmFsRml4dHVyZURhdGEgZm9yIGRpc3BsYXlcclxuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxGaXh0dXJlRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShvcmlnaW5hbEZpeHR1cmUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAvLyBJZiBhbHJlYWR5IGluIG1hcCwgcmVzdG9yZSBpdFxyXG4gICAgICAgICAgICAgIGNvbnN0IHN0b3JlZE9yaWdpbmFsID0gdGhpcy5vcmlnaW5hbEZpeHR1cmVzTWFwLmdldChmaXh0dXJlSWQpO1xyXG4gICAgICAgICAgICAgIGlmIChzdG9yZWRPcmlnaW5hbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbEZpeHR1cmVEYXRhID0gc3RydWN0dXJlZENsb25lKHN0b3JlZE9yaWdpbmFsKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIE1hcmsgZmluZCBhcyBleGVjdXRlZCB0byBkaXNhYmxlIHRoZSBidXR0b25cclxuICAgICAgICAgICAgdGhpcy5maW5kRXhlY3V0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gU2F2ZSBmaW5kUmVzcG9uc2VEYXRhIHRvIHRoZSBzcGVjaWZpYyBzdG9yZVxyXG4gICAgICAgICAgICB0aGlzLnNhdmVGaW5kUmVzcG9uc2VEYXRhKHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIFJlbmRlciB0aGUgZmxvb3IgYW5kIHdhaXQgZm9yIGl0IHRvIGNvbXBsZXRlXHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRmxvb3IodGhpcy5wcmV2aWV3Q2FudmFzKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAvLyBXYWl0IGZvciBjYW52YXMgdG8gZnVsbHkgcmVuZGVyIGJlZm9yZSBoaWdobGlnaHRpbmdcclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbkZpeHR1cmUgPSB0aGlzLnByZXZpZXdDYW52YXMuZ2V0T2JqZWN0cygpLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgIChvYmo6IGFueSkgPT4gb2JqLm9ialR5cGUgPT09IFwiZml4dHVyZVwiICYmIG9iai5maXh0dXJlSWQgPT09IHJlcy5kYXRhLl9pZFxyXG4gICAgICAgICAgICAgICAgKSBhcyBmYWJyaWMuR3JvdXAgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uRml4dHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodEZpeHR1cmUodGhpcy5wcmV2aWV3Q2FudmFzLCBhY3Rpb25GaXh0dXJlLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9LCAzMDApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZpbmRMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNhbnZhc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBvblJlcGxhY2UoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaGFzUmVwbGFjZVNlbGVjdGlvbigpKSB7XHJcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFdhcm5pbmdUb2FzdChcclxuICAgICAgICB0aGlzLm5lZWRzUmVwbGFjZUJyYW5kKCkgJiYgdGhpcy5uZWVkc1JlcGxhY2VWbSgpXHJcbiAgICAgICAgICA/ICdQbGVhc2Ugc2VsZWN0IGEgYnJhbmQgYW5kIGEgVk0gdG8gcmVwbGFjZSB3aXRoJ1xyXG4gICAgICAgICAgOiB0aGlzLm5lZWRzUmVwbGFjZUJyYW5kKClcclxuICAgICAgICAgICAgPyAnUGxlYXNlIHNlbGVjdCBhIGJyYW5kIHRvIHJlcGxhY2Ugd2l0aCdcclxuICAgICAgICAgICAgOiAnUGxlYXNlIHNlbGVjdCBhIFZNIHRvIHJlcGxhY2Ugd2l0aCdcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEdldCB0aGUgZm91bmQgZml4dHVyZSBJRCBmcm9tIHRoZSBzdG9yZSdzIGZpbmRSZXNwb25zZURhdGEgKG5vdCB0aGUgY2xpY2tlZCBmaXh0dXJlKVxyXG4gICAgY29uc3QgZm91bmRGaXh0dXJlSWQgPSB0aGlzLmdldEN1cnJlbnRTdG9yZUZpbmRSZXNwb25zZURhdGEoKTtcclxuICAgIGlmICghZm91bmRGaXh0dXJlSWQpIHtcclxuICAgICAgLy8gRmFsbGJhY2sgdG8gc2VsZWN0ZWQgZml4dHVyZSBpZiBubyBmaW5kUmVzcG9uc2VEYXRhIGV4aXN0c1xyXG4gICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGaXh0dXJlPy5maXh0dXJlSWQgJiYgIXRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YT8uX2lkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXNlIHRoZSBmb3VuZCBmaXh0dXJlIElEIChmcm9tIGZpbmRSZXNwb25zZURhdGEpIGluc3RlYWQgb2YgdGhlIGNsaWNrZWQgZml4dHVyZVxyXG4gICAgY29uc3QgZml4dHVyZUlkID0gZm91bmRGaXh0dXJlSWQgfHwgdGhpcy5zZWxlY3RlZEZpeHR1cmU/LmZpeHR1cmVJZCB8fCB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGE/Ll9pZDtcclxuXHJcbiAgICAvLyBHZXQgdGhlIG9yaWdpbmFsIGZpeHR1cmUgZGF0YSBmcm9tIHRoZSBmb3VuZCBmaXh0dXJlIChub3QgdGhlIGNsaWNrZWQgb25lKVxyXG4gICAgY29uc3QgZm91bmRGaXh0dXJlID0gdGhpcy5nZXRGaXh0dXJlQnlJZEZyb21GbG9vcihmaXh0dXJlSWQpO1xyXG4gICAgY29uc3Qgb3JpZ2luYWxGaXh0dXJlID0gZm91bmRGaXh0dXJlID8gc3RydWN0dXJlZENsb25lKGZvdW5kRml4dHVyZSkgOiBudWxsO1xyXG5cclxuICAgIHRoaXMucmVwbGFjZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5jYW52YXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcclxuICAgICAgZml4dHVyZUlkOiBmaXh0dXJlSWQsXHJcbiAgICAgIHVwZGF0ZVR5cGU6IHRoaXMudGFyZ2V0LnZhbHVlLFxyXG4gICAgICByZXBsYWNlQnJhbmQ6IHRoaXMubmVlZHNSZXBsYWNlQnJhbmQoKSA/IHRoaXMuZ2V0UmVwbGFjZUJyYW5kU2VsZWN0aW9uKCkgOiBudWxsLFxyXG4gICAgICByZXBsYWNlVm06IHRoaXMubmVlZHNSZXBsYWNlVm0oKSA/IHRoaXMuZ2V0UmVwbGFjZVZtU2VsZWN0aW9uKCkgOiBudWxsLFxyXG4gICAgICB1cGRhdGlvbkNyaXRlcmlhOiB0aGlzLnJlcGxhY2VQcm9tcHQudmFsdWUgfHwgJycsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS5yZXBsYWNlRml4dHVyZShwYXlsb2FkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXBsYWNlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jYW52YXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICBpZiAocmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAvLyBNYXJrIHJlcGxhY2UgYXMgZXhlY3V0ZWQgdG8gZGlzYWJsZSB0aGUgYnV0dG9uXHJcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUV4ZWN1dGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIFN0b3JlIG9yaWdpbmFsIGZpeHR1cmUgZm9yIGJlZm9yZS9hZnRlciBjb21wYXJpc29uXHJcbiAgICAgICAgICAgIC8vIE9ubHkgc3RvcmUgaWYgbm90IGFscmVhZHkgaW4gbWFwIChwcmVzZXJ2ZSBpbml0aWFsIHBsYW5vZ3JhbSBmaXh0dXJlKVxyXG4gICAgICAgICAgICBpZiAob3JpZ2luYWxGaXh0dXJlICYmICF0aGlzLm9yaWdpbmFsRml4dHVyZXNNYXAuaGFzKGZpeHR1cmVJZCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZXNNYXAuc2V0KGZpeHR1cmVJZCwgb3JpZ2luYWxGaXh0dXJlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBSZXN0b3JlIG9yaWdpbmFsRml4dHVyZURhdGEgZnJvbSBtYXAgdG8gZW5zdXJlIGl0J3MgYWx3YXlzIHRoZSBpbml0aWFsIHBsYW5vZ3JhbSBmaXh0dXJlXHJcbiAgICAgICAgICAgIGNvbnN0IHN0b3JlZE9yaWdpbmFsID0gdGhpcy5vcmlnaW5hbEZpeHR1cmVzTWFwLmdldChmaXh0dXJlSWQpO1xyXG4gICAgICAgICAgICBpZiAoc3RvcmVkT3JpZ2luYWwpIHtcclxuICAgICAgICAgICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZURhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUoc3RvcmVkT3JpZ2luYWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFpUmVzcG9uc2VGaXh0dXJlKHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIFNhdmUgcmVwbGFjZVJlc3BvbnNlRGF0YSB0byB0aGUgc3BlY2lmaWMgc3RvcmVcclxuICAgICAgICAgICAgdGhpcy5zYXZlUmVwbGFjZVJlc3BvbnNlRGF0YShyZXMuZGF0YSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBVcGRhdGUgc2VsZWN0ZWQgZml4dHVyZSBkYXRhIHRvIHRoZSBmb3VuZCBmaXh0dXJlIChhZnRlciByZXBsYWNlKVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZSA9IHtcclxuICAgICAgICAgICAgICBmaXh0dXJlSWQ6IHJlcy5kYXRhLl9pZCxcclxuICAgICAgICAgICAgICBmaXh0dXJlVHlwZTogcmVzLmRhdGEuZml4dHVyZVR5cGUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gUmVuZGVyIHRoZSBmbG9vciBhbmQgd2FpdCBmb3IgaXQgdG8gY29tcGxldGVcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJGbG9vcih0aGlzLnByZXZpZXdDYW52YXMpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgIC8vIFdhaXQgZm9yIGNhbnZhcyB0byBmdWxseSByZW5kZXIgYmVmb3JlIGhpZ2hsaWdodGluZ1xyXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gSGlnaGxpZ2h0IHRoZSBmb3VuZCBmaXh0dXJlIChub3QgdGhlIGNsaWNrZWQgb25lKVxyXG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uRml4dHVyZSA9IHRoaXMucHJldmlld0NhbnZhcy5nZXRPYmplY3RzKCkuZmluZChcclxuICAgICAgICAgICAgICAgICAgKG9iajogYW55KSA9PiBvYmoub2JqVHlwZSA9PT0gXCJmaXh0dXJlXCIgJiYgb2JqLmZpeHR1cmVJZCA9PT0gcmVzLmRhdGEuX2lkXHJcbiAgICAgICAgICAgICAgICApIGFzIGZhYnJpYy5Hcm91cCB8IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIGlmIChhY3Rpb25GaXh0dXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0Rml4dHVyZSh0aGlzLnByZXZpZXdDYW52YXMsIGFjdGlvbkZpeHR1cmUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0sIDMwMCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVwbGFjZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2FudmFzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gSGVscGVyIG1ldGhvZCB0byBnZXQgZmluZFJlc3BvbnNlRGF0YSBmb3IgY3VycmVudCBzdG9yZVxyXG4gIGdldEN1cnJlbnRTdG9yZUZpbmRSZXNwb25zZURhdGEoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBpZiAoIXRoaXMuZmluZFJlcGxhY2VEYXRhPy5zdG9yZXMgfHwgIXRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBzdG9yZSA9IHRoaXMuZmluZFJlcGxhY2VEYXRhLnN0b3Jlcy5maW5kKFxyXG4gICAgICAoczogU3RvcmUpID0+IHMuc3RvcmVOYW1lID09PSB0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3LnN0b3JlTmFtZVxyXG4gICAgKTtcclxuICAgIHJldHVybiBzdG9yZT8uZmluZFJlc3BvbnNlRGF0YSB8fCBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8gU2F2ZSBmaW5kUmVzcG9uc2VEYXRhIHRvIHNwZWNpZmljIHN0b3JlIGFuZCB0cmlnZ2VyIHNhdmUgYXMgZHJhZnRcclxuICBwcml2YXRlIHNhdmVGaW5kUmVzcG9uc2VEYXRhKHJlc3BvbnNlRGF0YTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZmluZFJlcGxhY2VEYXRhIHx8ICF0aGlzLnNlbGVjdGVkU3RvcmVGb3JQcmV2aWV3KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB1cGRhdGVkU3RvcmVzID0gKHRoaXMuZmluZFJlcGxhY2VEYXRhLnN0b3JlcyB8fCBbXSkubWFwKChzdG9yZTogU3RvcmUpID0+IHtcclxuICAgICAgaWYgKHN0b3JlLnN0b3JlTmFtZSA9PT0gdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldy5zdG9yZU5hbWUpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4uc3RvcmUsXHJcbiAgICAgICAgICBmaW5kUmVzcG9uc2VEYXRhOiByZXNwb25zZURhdGE/Ll9pZFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHN0b3JlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gVXBkYXRlIGxvY2FsIGZpbmRSZXBsYWNlRGF0YSBpbW1lZGlhdGVseVxyXG4gICAgdGhpcy5maW5kUmVwbGFjZURhdGEgPSB7XHJcbiAgICAgIC4uLnRoaXMuZmluZFJlcGxhY2VEYXRhLFxyXG4gICAgICBzdG9yZXM6IHVwZGF0ZWRTdG9yZXNcclxuICAgIH07XHJcblxyXG4gICAgLy8gVXBkYXRlIHRoZSBkYXRhIHNlcnZpY2VcclxuICAgIHRoaXMuZGF0YVNlcnZpY2UudXBkYXRlRGF0YSh7XHJcbiAgICAgIHN0b3JlczogdXBkYXRlZFN0b3Jlc1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gVHJpZ2dlciBzYXZlIGFzIGRyYWZ0XHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLnRyaWdnZXJTYXZlRHJhZnQoKTtcclxuICB9XHJcblxyXG4gIC8vIFNhdmUgcmVwbGFjZVJlc3BvbnNlRGF0YSB0byBzcGVjaWZpYyBzdG9yZSBhbmQgdHJpZ2dlciBzYXZlIGFzIGRyYWZ0XHJcbiAgLy8gT25seSBzYXZlcyB2bUNvbmZpZyBhbmQvb3Igc2hlbGZDb25maWcgYmFzZWQgb24gdGFyZ2V0XHJcbiAgcHJpdmF0ZSBzYXZlUmVwbGFjZVJlc3BvbnNlRGF0YShyZXNwb25zZURhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmZpbmRSZXBsYWNlRGF0YSB8fCAhdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdGFyZ2V0ID0gdGhpcy50YXJnZXQudmFsdWUgYXMgJ21lcmNoJyB8ICd2bScgfCAnYm90aCc7XHJcbiAgICBjb25zdCByZXBsYWNlRGF0YTogeyB2bUNvbmZpZz86IGFueVtdOyBzaGVsZkNvbmZpZz86IGFueVtdIH0gPSB7fTtcclxuXHJcbiAgICAvLyBFeHRyYWN0IG9ubHkgdGhlIHJlbGV2YW50IGNvbmZpZ3MgYmFzZWQgb24gdGFyZ2V0XHJcbiAgICBpZiAodGFyZ2V0ID09PSAndm0nIHx8IHRhcmdldCA9PT0gJ2JvdGgnKSB7XHJcbiAgICAgIGlmIChyZXNwb25zZURhdGE/LnZtQ29uZmlnKSB7XHJcbiAgICAgICAgcmVwbGFjZURhdGEudm1Db25maWcgPSByZXNwb25zZURhdGEudm1Db25maWc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKHRhcmdldCA9PT0gJ21lcmNoJyB8fCB0YXJnZXQgPT09ICdib3RoJykge1xyXG4gICAgICBpZiAocmVzcG9uc2VEYXRhPy5zaGVsZkNvbmZpZykge1xyXG4gICAgICAgIHJlcGxhY2VEYXRhLnNoZWxmQ29uZmlnID0gcmVzcG9uc2VEYXRhLnNoZWxmQ29uZmlnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdXBkYXRlZFN0b3JlcyA9ICh0aGlzLmZpbmRSZXBsYWNlRGF0YS5zdG9yZXMgfHwgW10pLm1hcCgoc3RvcmU6IFN0b3JlKSA9PiB7XHJcbiAgICAgIGlmIChzdG9yZS5zdG9yZU5hbWUgPT09IHRoaXMuc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcuc3RvcmVOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLnN0b3JlLFxyXG4gICAgICAgICAgcmVwbGFjZVJlc3BvbnNlRGF0YTogcmVwbGFjZURhdGFcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBzdG9yZTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFVwZGF0ZSBsb2NhbCBmaW5kUmVwbGFjZURhdGEgaW1tZWRpYXRlbHlcclxuICAgIHRoaXMuZmluZFJlcGxhY2VEYXRhID0ge1xyXG4gICAgICAuLi50aGlzLmZpbmRSZXBsYWNlRGF0YSxcclxuICAgICAgc3RvcmVzOiB1cGRhdGVkU3RvcmVzXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgZGF0YSBzZXJ2aWNlXHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLnVwZGF0ZURhdGEoe1xyXG4gICAgICBzdG9yZXM6IHVwZGF0ZWRTdG9yZXNcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFRyaWdnZXIgc2F2ZSBhcyBkcmFmdFxyXG4gICAgdGhpcy5kYXRhU2VydmljZS50cmlnZ2VyU2F2ZURyYWZ0KCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVBaVJlc3BvbnNlRml4dHVyZShmaXh0dXJlOiBhbnkpIHtcclxuICAgIGxldCBtYXRjaEZvdW5kID0gZmFsc2U7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb25baV07XHJcbiAgICAgIGlmIChlbGVtZW50LmVsZW1lbnRUeXBlID09PSAnd2FsbCcgJiYgQXJyYXkuaXNBcnJheShlbGVtZW50LmZpeHR1cmVzKSkge1xyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZWxlbWVudC5maXh0dXJlcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgY29uc3QgZnggPSBlbGVtZW50LmZpeHR1cmVzW2pdO1xyXG4gICAgICAgICAgaWYgKGZ4Ll9pZCA9PT0gZml4dHVyZS5faWQpIHtcclxuICAgICAgICAgICAgLy8gUHJlc2VydmUgZXhpc3Rpbmcgdm1Db25maWcgaWYgdGhlIG5ldyBmaXh0dXJlIGRvZXNuJ3QgaGF2ZSBpdFxyXG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ1ZtQ29uZmlnID0gZngudm1Db25maWcgfHwgW107XHJcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRGaXh0dXJlID0geyBcclxuICAgICAgICAgICAgICAuLi5maXh0dXJlLFxyXG4gICAgICAgICAgICAgIC8vIFByZXNlcnZlIHZtQ29uZmlnIGZyb20gZXhpc3RpbmcgZml4dHVyZSBpZiBuZXcgZml4dHVyZSBkb2Vzbid0IGhhdmUgaXRcclxuICAgICAgICAgICAgICB2bUNvbmZpZzogZml4dHVyZS52bUNvbmZpZyB8fCBleGlzdGluZ1ZtQ29uZmlnXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb25baV0uZml4dHVyZXNbal0gPSB1cGRhdGVkRml4dHVyZTtcclxuICAgICAgICAgICAgbWF0Y2hGb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlID0gdXBkYXRlZEZpeHR1cmU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChtYXRjaEZvdW5kKSByZXR1cm47XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBmeCA9IHRoaXMuZmxvb3JEYXRhPy5jZW50ZXJGaXh0dXJlW2ldO1xyXG4gICAgICBpZiAoZnguX2lkID09PSBmaXh0dXJlLl9pZCkge1xyXG4gICAgICAgIC8vIFByZXNlcnZlIGV4aXN0aW5nIHZtQ29uZmlnIGlmIHRoZSBuZXcgZml4dHVyZSBkb2Vzbid0IGhhdmUgaXRcclxuICAgICAgICBjb25zdCBleGlzdGluZ1ZtQ29uZmlnID0gZngudm1Db25maWcgfHwgW107XHJcbiAgICAgICAgY29uc3QgdXBkYXRlZEZpeHR1cmUgPSB7IFxyXG4gICAgICAgICAgLi4uZml4dHVyZSxcclxuICAgICAgICAgIC8vIFByZXNlcnZlIHZtQ29uZmlnIGZyb20gZXhpc3RpbmcgZml4dHVyZSBpZiBuZXcgZml4dHVyZSBkb2Vzbid0IGhhdmUgaXRcclxuICAgICAgICAgIHZtQ29uZmlnOiBmaXh0dXJlLnZtQ29uZmlnIHx8IGV4aXN0aW5nVm1Db25maWdcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVbaV0gPSB1cGRhdGVkRml4dHVyZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZSA9IHVwZGF0ZWRGaXh0dXJlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoaWdobGlnaHRGaXh0dXJlKGNhbnZhczogZmFicmljLkNhbnZhcywgZ3JvdXA6IGFueSwgYmxpbms6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgdGhpcy5yZW1vdmVIaWdobGlnaHQoY2FudmFzKTtcclxuICAgIHRoaXMuY2FuY2VsSGlnaGxpZ2h0QmxpbmsgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBjZW50ZXIgPSBncm91cC5nZXRDZW50ZXJQb2ludCgpO1xyXG4gICAgY29uc3QgcmVhbFdpZHRoID0gZ3JvdXAud2lkdGghICogZ3JvdXAuc2NhbGVYITtcclxuICAgIGNvbnN0IHJlYWxIZWlnaHQgPSBncm91cC5oZWlnaHQhICogZ3JvdXAuc2NhbGVZITtcclxuXHJcbiAgICBjb25zdCByZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogY2VudGVyLngsXHJcbiAgICAgIHRvcDogY2VudGVyLnksXHJcbiAgICAgIHdpZHRoOiByZWFsV2lkdGggKyA4LFxyXG4gICAgICBoZWlnaHQ6IHJlYWxIZWlnaHQgKyA4LFxyXG4gICAgICByeDogNSxcclxuICAgICAgcnk6IDUsXHJcbiAgICAgIHN0cm9rZTogXCIjMDBhYWZmXCIsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAzLFxyXG4gICAgICBmaWxsOiBcInRyYW5zcGFyZW50XCIsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgYW5nbGU6IGdyb3VwLmFuZ2xlIHx8IDAsXHJcbiAgICAgIG9wYWNpdHk6IGJsaW5rID8gMCA6IDEsXHJcbiAgICB9KTtcclxuXHJcbiAgICAocmVjdCBhcyBhbnkpLmRhdGEgPSB7IHR5cGU6IFwiZml4dHVyZS1oaWdobGlnaHRcIiB9O1xyXG4gICAgY2FudmFzLmFkZChyZWN0KTtcclxuICAgIGNhbnZhcy5tb3ZlT2JqZWN0VG8ocmVjdCwgY2FudmFzLmdldE9iamVjdHMoKS5sZW5ndGggLSAxKTtcclxuICAgIGNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICB0aGlzLmFjdGl2ZUhpZ2hsaWdodCA9IHJlY3Q7XHJcblxyXG4gICAgaWYgKCFibGluaykgcmV0dXJuO1xyXG5cclxuICAgIGxldCBjeWNsZXMgPSAwO1xyXG4gICAgY29uc3QgYmxpbmtPbmNlID0gKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5jYW5jZWxIaWdobGlnaHRCbGluaykge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlSGlnaGxpZ2h0KGNhbnZhcyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHJlY3QuYW5pbWF0ZSh7IG9wYWNpdHk6IDEgfSwge1xyXG4gICAgICAgIGR1cmF0aW9uOiAyMDAsXHJcbiAgICAgICAgb25DaGFuZ2U6ICgpID0+IGNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCksXHJcbiAgICAgICAgb25Db21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuY2FuY2VsSGlnaGxpZ2h0QmxpbmspIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVIaWdobGlnaHQoY2FudmFzKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVjdC5hbmltYXRlKHsgb3BhY2l0eTogMCB9LCB7XHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXHJcbiAgICAgICAgICAgIG9uQ2hhbmdlOiAoKSA9PiBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpLFxyXG4gICAgICAgICAgICBvbkNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuY2FuY2VsSGlnaGxpZ2h0QmxpbmspIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSGlnaGxpZ2h0KGNhbnZhcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGN5Y2xlcysrO1xyXG4gICAgICAgICAgICAgIGlmIChjeWNsZXMgPCAyMCkge1xyXG4gICAgICAgICAgICAgICAgYmxpbmtPbmNlKCk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jYW5jZWxIaWdobGlnaHRCbGluaykge1xyXG4gICAgICAgICAgICAgICAgICByZWN0LnNldCh7IG9wYWNpdHk6IDEgfSk7XHJcbiAgICAgICAgICAgICAgICAgIGNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgYmxpbmtPbmNlKCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVIaWdobGlnaHQoY2FudmFzOiBmYWJyaWMuQ2FudmFzKSB7XHJcbiAgICB0aGlzLmNhbmNlbEhpZ2hsaWdodEJsaW5rID0gdHJ1ZTtcclxuICAgIGNhbnZhcy5nZXRPYmplY3RzKCkuZm9yRWFjaCgob2JqKSA9PiB7XHJcbiAgICAgIGlmICgob2JqIGFzIGFueSkuZGF0YT8udHlwZSA9PT0gXCJmaXh0dXJlLWhpZ2hsaWdodFwiKSB7XHJcbiAgICAgICAgY2FudmFzLnJlbW92ZShvYmopO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuYWN0aXZlSGlnaGxpZ2h0ID0gbnVsbDtcclxuICAgIGNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgfVxyXG5cclxuICAvLyBQbGFub2dyYW0gcmVuZGVyaW5nIG1ldGhvZHMgKHNpbXBsaWZpZWQgdmVyc2lvbnMgZnJvbSBjb2xsZWN0aW9uLXVwZGF0ZS1haSlcclxuICB0b1BpeGVscyh2YWx1ZTogbnVtYmVyLCB1bml0OiBzdHJpbmcsIGRwaSA9IDIuOCkge1xyXG4gICAgbGV0IHBpeGVsczogbnVtYmVyO1xyXG4gICAgaWYgKHVuaXQgPT09IFwibW1cIikge1xyXG4gICAgICBwaXhlbHMgPSAodmFsdWUgLyAyNS40KSAqIGRwaTtcclxuICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gXCJmdFwiKSB7XHJcbiAgICAgIHBpeGVscyA9IHZhbHVlICogMTIgKiBkcGk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCB1bml0LiBVc2UgJ21tJyBvciAnZnQnLlwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiBOdW1iZXIocGl4ZWxzLnRvRml4ZWQoNCkpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd0xheW91dEVsZW1lbnRzKGNhbnZhczogZmFicmljLkNhbnZhcykge1xyXG4gICAgaWYgKCF0aGlzLmZsb29yRGF0YSkgcmV0dXJuO1xyXG4gICAgXHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb25baW5kZXhdO1xyXG4gICAgICBsZXQgd2FsbDtcclxuXHJcbiAgICAgIGVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbiA/Pz0geyB4OiAwLCB5OiAwLCB1bml0OiBcImZ0XCIgfTtcclxuICAgICAgY29uc3QgeCA9IHRoaXMudG9QaXhlbHMoZWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLngsIGVsZW1lbnQudW5pdCk7XHJcbiAgICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKGVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi55LCBlbGVtZW50LnVuaXQpO1xyXG5cclxuICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy53YWxsVGhpY2tuZXNzO1xyXG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy50b1BpeGVscyhlbGVtZW50LmRpc3RhbmNlLCBlbGVtZW50LnVuaXQpO1xyXG4gICAgICAgIHdhbGwgPSBhd2FpdCB0aGlzLmRyYXdXYWxsKGNhbnZhcywgeCwgeSwgaGVpZ2h0LCB3aWR0aCwgZWxlbWVudCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJlbnRyYW5jZVwiKSB7XHJcbiAgICAgICAgdGhpcy5kcmF3RW50cmFuY2UoY2FudmFzLCB4LCB5LCA4MCwgNzUsIDQwLCBlbGVtZW50KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgY29uc3QgZml4dHVyZUdyb3VwczogZmFicmljLkdyb3VwW10gPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVsZW1lbnQ/LmZpeHR1cmVzPy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgY29uc3QgZml4dHVyZSA9IGVsZW1lbnQuZml4dHVyZXNbal07XHJcbiAgICAgICAgICBjb25zdCBmeCA9IHRoaXMudG9QaXhlbHMoZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLngsIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi51bml0KTtcclxuICAgICAgICAgIGNvbnN0IGZ5ID0gdGhpcy50b1BpeGVscyhmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueSwgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnVuaXQpO1xyXG4gICAgICAgICAgY29uc3QgZmggPSB0aGlzLnRvUGl4ZWxzKGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSwgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQpO1xyXG4gICAgICAgICAgY29uc3QgZncgPSB0aGlzLnRvUGl4ZWxzKGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0KTtcclxuICAgICAgICAgIGNvbnN0IGZpeHR1cmVPYmogPSBhd2FpdCB0aGlzLmRyYXdGaXh0dXJlKGNhbnZhcywgZngsIGZ5LCBmaCwgZncsIGZpeHR1cmUpO1xyXG4gICAgICAgICAgZml4dHVyZUdyb3Vwcy5wdXNoKGZpeHR1cmVPYmogYXMgZmFicmljLkdyb3VwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbGVtZW50LmlzTG9ja2VkICYmIHdhbGwpIHtcclxuICAgICAgICAgIGNhbnZhcy5yZW1vdmUod2FsbCk7XHJcbiAgICAgICAgICBmaXh0dXJlR3JvdXBzLmZvckVhY2goKGYpID0+IGNhbnZhcy5yZW1vdmUoZikpO1xyXG4gICAgICAgICAgY29uc3QgY29tYmluZWRHcm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoW3dhbGwsIC4uLmZpeHR1cmVHcm91cHNdLCB7XHJcbiAgICAgICAgICAgIGhhc0NvbnRyb2xzOiBmYWxzZSxcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGxvY2tNb3ZlbWVudFg6IHRydWUsXHJcbiAgICAgICAgICAgIGxvY2tNb3ZlbWVudFk6IHRydWUsXHJcbiAgICAgICAgICAgIGxvY2tSb3RhdGlvbjogdHJ1ZSxcclxuICAgICAgICAgICAgbG9ja1NjYWxpbmdYOiB0cnVlLFxyXG4gICAgICAgICAgICBsb2NrU2NhbGluZ1k6IHRydWUsXHJcbiAgICAgICAgICAgIHN1YlRhcmdldENoZWNrOiB0cnVlLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBjb21iaW5lZEdyb3VwLnNldCh7IGlzTG9ja2VkOiB0cnVlIH0pO1xyXG4gICAgICAgICAgY2FudmFzLmFkZChjb21iaW5lZEdyb3VwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZWxlbWVudD8ub3RoZXJFbGVtZW50cz8ubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIGNvbnN0IG90aGVyRWxlbWVudCA9IGVsZW1lbnQub3RoZXJFbGVtZW50c1tqXTtcclxuICAgICAgICAgIGNvbnN0IG94ID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi54LCBcImZ0XCIpO1xyXG4gICAgICAgICAgY29uc3Qgb3kgPSB0aGlzLnRvUGl4ZWxzKG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLnksIFwiZnRcIik7XHJcbiAgICAgICAgICBjb25zdCBvYSA9IG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlO1xyXG4gICAgICAgICAgY29uc3Qgb2ggPSB0aGlzLnRvUGl4ZWxzKG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLCBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0KTtcclxuICAgICAgICAgIGNvbnN0IG93ID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLCBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQpO1xyXG4gICAgICAgICAgdGhpcy5kcmF3T3RoZXJFbGVtZW50c1dpdGhMYWJlbChjYW52YXMsIG94LCBveSwgb2EsIG93LCBvaCwgb3RoZXJFbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZmxvb3JEYXRhPy5jZW50ZXJGaXh0dXJlPy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZVtpXTtcclxuICAgICAgY29uc3QgeCA9IHRoaXMudG9QaXhlbHMoZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLngsIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi51bml0KTtcclxuICAgICAgY29uc3QgeSA9IHRoaXMudG9QaXhlbHMoZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnksIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi51bml0KTtcclxuICAgICAgY29uc3QgaCA9IHRoaXMudG9QaXhlbHMoZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdCk7XHJcbiAgICAgIGNvbnN0IHcgPSB0aGlzLnRvUGl4ZWxzKGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0KTtcclxuICAgICAgYXdhaXQgdGhpcy5kcmF3Rml4dHVyZShjYW52YXMsIHgsIHksIGgsIHcsIGZpeHR1cmUpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5mbG9vckRhdGE/Lm90aGVyRWxlbWVudHM/Lmxlbmd0aDsgaisrKSB7XHJcbiAgICAgIGNvbnN0IG90aGVyRWxlbWVudCA9IHRoaXMuZmxvb3JEYXRhLm90aGVyRWxlbWVudHNbal07XHJcbiAgICAgIGNvbnN0IHggPSB0aGlzLnRvUGl4ZWxzKG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLngsIFwiZnRcIik7XHJcbiAgICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLnksIFwiZnRcIik7XHJcbiAgICAgIGNvbnN0IGEgPSBvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi5hbmdsZTtcclxuICAgICAgY29uc3QgaCA9IHRoaXMudG9QaXhlbHMob3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsIG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQpO1xyXG4gICAgICBjb25zdCB3ID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLCBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQpO1xyXG4gICAgICB0aGlzLmRyYXdPdGhlckVsZW1lbnRzV2l0aExhYmVsKGNhbnZhcywgeCwgeSwgYSwgdywgaCwgb3RoZXJFbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRyYXdXYWxsKFxyXG4gICAgY2FudmFzOiBmYWJyaWMuQ2FudmFzLFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgaGVpZ2h0OiBudW1iZXIsXHJcbiAgICB3aWR0aDogbnVtYmVyLFxyXG4gICAgZWxlbWVudERhdGE6IGFueVxyXG4gICkge1xyXG4gICAgY29uc3QgcmFkaXVzID0gNTtcclxuICAgIGNvbnN0IGZpbGxDb2xvciA9IFwiI0Y2RkNGRlwiO1xyXG4gICAgY29uc3Qgc3Ryb2tlQ29sb3IgPSBcIiNEMEQ1RERcIjtcclxuICAgIGNvbnN0IGxhYmVsQ29sb3IgPSBcIiMwMDlCRjNcIjtcclxuICAgIGxldCB0ZXh0ID0gYCR7dGhpcy50aXRsZUNhc2UudHJhbnNmb3JtKGVsZW1lbnREYXRhLmVsZW1lbnRUeXBlKX0gJHtlbGVtZW50RGF0YS5lbGVtZW50TnVtYmVyXHJcbiAgICAgIH1gO1xyXG5cclxuICAgIGNvbnN0IHdhbGwgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiAwLFxyXG4gICAgICB0b3A6IDAsXHJcbiAgICAgIHdpZHRoLFxyXG4gICAgICBoZWlnaHQsXHJcbiAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgIGZpbGw6IGZpbGxDb2xvcixcclxuICAgICAgc3Ryb2tlOiBzdHJva2VDb2xvcixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBzdHJva2VVbmlmb3JtOiB0cnVlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgY2VudGVyWCA9IHdpZHRoIC8gMjtcclxuICAgIGNvbnN0IGNlbnRlclkgPSBoZWlnaHQgLyAyO1xyXG4gICAgY29uc3QgaXNWZXJ0aWNhbCA9IGhlaWdodCA+IHdpZHRoO1xyXG5cclxuICAgIGNvbnN0IGxhYmVsID0gbmV3IGZhYnJpYy5GYWJyaWNUZXh0KHRleHQsIHtcclxuICAgICAgbGVmdDogY2VudGVyWCxcclxuICAgICAgdG9wOiBjZW50ZXJZLFxyXG4gICAgICBmb250U2l6ZTogMTAsXHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgZmlsbDogbGFiZWxDb2xvcixcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgYW5nbGU6IGlzVmVydGljYWwgPyAtOTAgOiAwLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGFycm93SGVhZCA9IDU7XHJcbiAgICBjb25zdCBlbGVtZW50czogZmFicmljLk9iamVjdFtdID0gW3dhbGwsIGxhYmVsXTtcclxuXHJcbiAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICBjb25zdCB0ZXh0V2lkdGggPSBsYWJlbC53aWR0aCB8fCAwO1xyXG4gICAgICBjb25zdCB0b3BBcnJvd1kgPSA1O1xyXG4gICAgICBjb25zdCB0b3BBcnJvd0VuZFkgPSBjZW50ZXJZIC0gdGV4dFdpZHRoIC8gMiAtIDU7XHJcblxyXG4gICAgICBpZiAodG9wQXJyb3dFbmRZID4gdG9wQXJyb3dZICsgYXJyb3dIZWFkKSB7XHJcbiAgICAgICAgZWxlbWVudHMucHVzaChcclxuICAgICAgICAgIG5ldyBmYWJyaWMuTGluZShbY2VudGVyWCwgdG9wQXJyb3dZLCBjZW50ZXJYLCB0b3BBcnJvd0VuZFldLCB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBuZXcgZmFicmljLlRyaWFuZ2xlKHtcclxuICAgICAgICAgICAgbGVmdDogY2VudGVyWCxcclxuICAgICAgICAgICAgdG9wOiB0b3BBcnJvd1ksXHJcbiAgICAgICAgICAgIHdpZHRoOiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGhlaWdodDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBhbmdsZTogMCxcclxuICAgICAgICAgICAgZmlsbDogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJib3R0b21cIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGJvdHRvbUFycm93U3RhcnRZID0gY2VudGVyWSArIHRleHRXaWR0aCAvIDIgKyA1O1xyXG4gICAgICBjb25zdCBib3R0b21BcnJvd0VuZFkgPSBoZWlnaHQgLSA1O1xyXG5cclxuICAgICAgaWYgKGJvdHRvbUFycm93RW5kWSA+IGJvdHRvbUFycm93U3RhcnRZICsgYXJyb3dIZWFkKSB7XHJcbiAgICAgICAgZWxlbWVudHMucHVzaChcclxuICAgICAgICAgIG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgW2NlbnRlclgsIGJvdHRvbUFycm93U3RhcnRZLCBjZW50ZXJYLCBib3R0b21BcnJvd0VuZFldLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgc3Ryb2tlOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UcmlhbmdsZSh7XHJcbiAgICAgICAgICAgIGxlZnQ6IGNlbnRlclgsXHJcbiAgICAgICAgICAgIHRvcDogYm90dG9tQXJyb3dFbmRZLFxyXG4gICAgICAgICAgICB3aWR0aDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgYW5nbGU6IDE4MCxcclxuICAgICAgICAgICAgZmlsbDogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJ0b3BcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHRleHRXaWR0aCA9IGxhYmVsLndpZHRoIHx8IDA7XHJcbiAgICAgIGNvbnN0IGxlZnRBcnJvd1N0YXJ0WCA9IDU7XHJcbiAgICAgIGNvbnN0IGxlZnRBcnJvd0VuZFggPSBjZW50ZXJYIC0gdGV4dFdpZHRoIC8gMiAtIDU7XHJcblxyXG4gICAgICBpZiAobGVmdEFycm93RW5kWCA+IGxlZnRBcnJvd1N0YXJ0WCArIGFycm93SGVhZCkge1xyXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXHJcbiAgICAgICAgICBuZXcgZmFicmljLkxpbmUoW2xlZnRBcnJvd1N0YXJ0WCwgY2VudGVyWSwgbGVmdEFycm93RW5kWCwgY2VudGVyWV0sIHtcclxuICAgICAgICAgICAgc3Ryb2tlOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIG5ldyBmYWJyaWMuVHJpYW5nbGUoe1xyXG4gICAgICAgICAgICBsZWZ0OiBsZWZ0QXJyb3dTdGFydFgsXHJcbiAgICAgICAgICAgIHRvcDogY2VudGVyWSxcclxuICAgICAgICAgICAgd2lkdGg6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGFuZ2xlOiAtOTAsXHJcbiAgICAgICAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCByaWdodEFycm93U3RhcnRYID0gY2VudGVyWCArIHRleHRXaWR0aCAvIDIgKyA1O1xyXG4gICAgICBjb25zdCByaWdodEFycm93RW5kWCA9IHdpZHRoIC0gNTtcclxuXHJcbiAgICAgIGlmIChyaWdodEFycm93RW5kWCA+IHJpZ2h0QXJyb3dTdGFydFggKyBhcnJvd0hlYWQpIHtcclxuICAgICAgICBlbGVtZW50cy5wdXNoKFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICBbcmlnaHRBcnJvd1N0YXJ0WCwgY2VudGVyWSwgcmlnaHRBcnJvd0VuZFgsIGNlbnRlclldLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgc3Ryb2tlOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UcmlhbmdsZSh7XHJcbiAgICAgICAgICAgIGxlZnQ6IHJpZ2h0QXJyb3dFbmRYLFxyXG4gICAgICAgICAgICB0b3A6IGNlbnRlclksXHJcbiAgICAgICAgICAgIHdpZHRoOiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGhlaWdodDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBhbmdsZTogOTAsXHJcbiAgICAgICAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGNvbnN0IGdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChlbGVtZW50cywge1xyXG4gICAgICBsZWZ0OiB4LFxyXG4gICAgICB0b3A6IHksXHJcbiAgICAgIGhhc0NvbnRyb2xzOiBmYWxzZSxcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGxvY2tTY2FsaW5nWDogdHJ1ZSxcclxuICAgICAgbG9ja1NjYWxpbmdZOiB0cnVlLFxyXG4gICAgICBsb2NrUm90YXRpb246IHRydWUsXHJcbiAgICAgIGxvY2tNb3ZlbWVudFg6IHRydWUsXHJcbiAgICAgIGxvY2tNb3ZlbWVudFk6IHRydWUsXHJcbiAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgIGhvdmVyQ3Vyc29yOiBcImRlZmF1bHRcIixcclxuICAgICAgYW5nbGU6IGVsZW1lbnREYXRhLmFuZ2xlLFxyXG4gICAgICBzdWJUYXJnZXRDaGVjazogdHJ1ZSxcclxuICAgIH0pIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgb2JqVHlwZTogc3RyaW5nO1xyXG4gICAgICBkYXRhOiBhbnk7XHJcbiAgICB9O1xyXG5cclxuICAgIGdyb3VwLm9ialR5cGUgPSBlbGVtZW50RGF0YS5lbGVtZW50VHlwZTtcclxuICAgIGdyb3VwLmRhdGEgPSBlbGVtZW50RGF0YTtcclxuXHJcblxyXG4gICAgY2FudmFzLmFkZChncm91cCk7XHJcblxyXG4gICAgLy8gSWYgbmV3bHkgYWRkZWQsIGZvY3VzIGl0IG9uY2VcclxuICAgIGlmICgoZWxlbWVudERhdGEgYXMgYW55KT8ubmV3QWRkZWQpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjYW52YXMuc2V0QWN0aXZlT2JqZWN0KGdyb3VwKTtcclxuICAgICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9IGNhdGNoIHsgfVxyXG4gICAgICBkZWxldGUgKGVsZW1lbnREYXRhIGFzIGFueSkubmV3QWRkZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGdyb3VwO1xyXG4gIH1cclxuXHJcbiAgZHJhd0VudHJhbmNlKFxyXG4gICAgY2FudmFzOiBmYWJyaWMuQ2FudmFzLFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgd2lkdGg6IG51bWJlcixcclxuICAgIGhlaWdodDogbnVtYmVyLFxyXG4gICAgYXJyb3dXaWR0aDogbnVtYmVyLFxyXG4gICAgZWxlbWVudERhdGE6IGFueVxyXG4gICkge1xyXG4gICAgY29uc3QgYm9keVdpZHRoID0gd2lkdGggLSBhcnJvd1dpZHRoO1xyXG5cclxuICAgIGNvbnN0IHBhdGhEYXRhID0gW1xyXG4gICAgICBgTSAwIDBgLFxyXG4gICAgICBgTCAke2JvZHlXaWR0aH0gMGAsXHJcbiAgICAgIGBMICR7Ym9keVdpZHRofSAkey1oZWlnaHQgLyAyfWAsXHJcbiAgICAgIGBMICR7d2lkdGh9ICR7aGVpZ2h0IC8gMn1gLFxyXG4gICAgICBgTCAke2JvZHlXaWR0aH0gJHtoZWlnaHQgKyBoZWlnaHQgLyAyfWAsXHJcbiAgICAgIGBMICR7Ym9keVdpZHRofSAke2hlaWdodH1gLFxyXG4gICAgICBgTCAwICR7aGVpZ2h0fWAsXHJcbiAgICAgIGBaYCxcclxuICAgIF0uam9pbihcIiBcIik7XHJcblxyXG4gICAgY29uc3QgYXJyb3cgPSBuZXcgZmFicmljLlBhdGgocGF0aERhdGEsIHtcclxuICAgICAgZmlsbDogXCIjMDNBOUY0XCIsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IG1heFRleHRIZWlnaHQgPSBoZWlnaHQgLSA2O1xyXG4gICAgY29uc3QgdGV4dCA9IG5ldyBmYWJyaWMuVGV4dChcIkVudHJhbmNlXCIsIHtcclxuICAgICAgZm9udEZhbWlseTogXCJBcmlhbFwiLFxyXG4gICAgICBmb250V2VpZ2h0OiBcImJvbGRcIixcclxuICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICBhbmdsZTogLTkwLFxyXG4gICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICBsZWZ0OiAxNSxcclxuICAgICAgdG9wOiBoZWlnaHQgLyAyLFxyXG4gICAgICBmb250U2l6ZTogMjAsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHRleHRCb3VuZHMgPSB0ZXh0LmdldEJvdW5kaW5nUmVjdCgpO1xyXG4gICAgaWYgKHRleHRCb3VuZHMuaGVpZ2h0ID4gbWF4VGV4dEhlaWdodCkge1xyXG4gICAgICBjb25zdCBzY2FsZSA9IG1heFRleHRIZWlnaHQgLyB0ZXh0Qm91bmRzLmhlaWdodDtcclxuICAgICAgdGV4dC5zZXQoXCJmb250U2l6ZVwiLCB0ZXh0LmZvbnRTaXplISAqIHNjYWxlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBncm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoW2Fycm93LCB0ZXh0XSwge1xyXG4gICAgICBsZWZ0OiB4LFxyXG4gICAgICB0b3A6IHksXHJcbiAgICAgIGhhc0NvbnRyb2xzOiBmYWxzZSxcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGxvY2tTY2FsaW5nWDogdHJ1ZSxcclxuICAgICAgbG9ja1NjYWxpbmdZOiB0cnVlLFxyXG4gICAgICBsb2NrU2NhbGluZ0ZsaXA6IHRydWUsXHJcbiAgICAgIGxvY2tSb3RhdGlvbjogdHJ1ZSxcclxuICAgICAgbG9ja01vdmVtZW50WDogdHJ1ZSxcclxuICAgICAgbG9ja01vdmVtZW50WTogdHJ1ZSxcclxuICAgICAgZXZlbnRlZDogdHJ1ZSxcclxuICAgICAgaG92ZXJDdXJzb3I6IFwiZGVmYXVsdFwiLFxyXG4gICAgICBhbmdsZTogZWxlbWVudERhdGEuYW5nbGUsXHJcbiAgICB9KSBhcyBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgIG9ialR5cGU6IHN0cmluZztcclxuICAgICAgZGF0YTogYW55O1xyXG4gICAgfTtcclxuXHJcbiAgICBncm91cC5vYmpUeXBlID0gZWxlbWVudERhdGEuZWxlbWVudFR5cGU7XHJcbiAgICBncm91cC5kYXRhID0gZWxlbWVudERhdGE7XHJcblxyXG4gICAgY2FudmFzLmFkZChncm91cCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkcmF3Rml4dHVyZShcclxuICAgIGNhbnZhczogZmFicmljLkNhbnZhcyxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIGhlaWdodDogbnVtYmVyLFxyXG4gICAgd2lkdGg6IG51bWJlcixcclxuICAgIGZpeHR1cmVEYXRhOiBhbnlcclxuICApIHtcclxuICAgIC8vIE1hdGNoIGZpeHR1cmUgcGFsZXR0ZS9sb2dpYyB1c2VkIGluIGAvbWFuYWdlL3BsYW5vZ3JhbS9tYW5hZ2Utcm9sbG91dGAgKGBwbGFuby1yb2xsb3V0LmNvbXBvbmVudC50c2ApXHJcblxyXG5cclxuICAgIGxldCBwcmltYXJ5U3Ryb2tlID0gXCIjYTVhNmE4XCI7XHJcbiAgICBsZXQgcHJpbWFyeUZpbGwgPSBcIiNmM2Y0ZjhcIjtcclxuICAgIGxldCBoZWFkZXJDb2xvciA9IFwiIzEwMTgyOFwiO1xyXG4gICAgbGV0IHZtRmlsbCA9IFwiI2E1YTZhOFwiO1xyXG4gICAgbGV0IGZvb3RlckZpbGwgPSBcIiNmM2Y0ZjhcIjtcclxuXHJcbiAgICBpZiAoZml4dHVyZURhdGE/LmNvbXBsZXRlID09PSB0cnVlICYmICFmaXh0dXJlRGF0YT8uYXBwcm92YWxTdGF0dXMpIHtcclxuICAgICAgcHJpbWFyeVN0cm9rZSA9IFwiIzZDRTlBNlwiO1xyXG4gICAgICBwcmltYXJ5RmlsbCA9IFwiIzZDRTlBNlwiO1xyXG4gICAgICBmb290ZXJGaWxsID0gXCIjNkNFOUE2XCI7XHJcbiAgICAgIHZtRmlsbCA9IFwiIzY5MzhFRlwiO1xyXG4gICAgICBoZWFkZXJDb2xvciA9IFwiIzEwMTgyOFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmaXh0dXJlRGF0YT8uaXNzdWUgPT09IHRydWUpIHtcclxuICAgICAgcHJpbWFyeVN0cm9rZSA9IFwiI0Q5MkQyMFwiO1xyXG4gICAgICBwcmltYXJ5RmlsbCA9IFwiI0Q5MkQyMFwiO1xyXG4gICAgICBoZWFkZXJDb2xvciA9IFwiI0ZGRlwiO1xyXG4gICAgICBmb290ZXJGaWxsID0gXCIjRkVFNEUyXCI7XHJcbiAgICAgIHZtRmlsbCA9IFwiIzY5MzhFRlwiO1xyXG4gICAgfVxyXG4gICAgaWYgKGZpeHR1cmVEYXRhLmZpeHR1cmVOYW1lID09PSBcInNwYWNlXCIpIHJldHVybjtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDU7XHJcbiAgICBjb25zdCBtYWluQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogeCxcclxuICAgICAgdG9wOiB5LFxyXG4gICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBzdHJva2U6IHByaW1hcnlTdHJva2UsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0b3BXaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgIGNvbnN0IHRvcEhlaWdodCA9ICgxNSAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCB0b3BYID0geCArICh3aWR0aCAtIHRvcFdpZHRoKSAvIDI7XHJcbiAgICBjb25zdCB0b3BZID0geSArIHRoaXMudmVydGljYWxNYXJnaW47XHJcblxyXG4gICAgY29uc3QgdG9wQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogdG9wWCxcclxuICAgICAgdG9wOiB0b3BZLFxyXG4gICAgICB3aWR0aDogdG9wV2lkdGgsXHJcbiAgICAgIGhlaWdodDogdG9wSGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBzdHJva2U6IHByaW1hcnlTdHJva2UsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBpbm5lckJveEhlaWdodCA9IHRvcEhlaWdodCAvIDI7XHJcbiAgICBjb25zdCBpbm5lclRvcEJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgYE0gJHt0b3BYICsgcmFkaXVzfSAke3RvcFl9IFxyXG4gICAgICAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGggLSByYWRpdXN9ICR7dG9wWX0gXHJcbiAgICAgICAgICAgICAgUSAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZfSAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZICsgcmFkaXVzfSBcclxuICAgICAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3RvcFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICAgICAgTCAke3RvcFh9ICR7dG9wWSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgICAgICBMICR7dG9wWH0gJHt0b3BZICsgcmFkaXVzfSBcclxuICAgICAgICAgICAgICBRICR7dG9wWH0gJHt0b3BZfSAke3RvcFggKyByYWRpdXN9ICR7dG9wWX0gWmAsXHJcbiAgICAgIHtcclxuICAgICAgICBzdHJva2U6IHByaW1hcnlTdHJva2UsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHRvcFRleHQgPSBuZXcgZmFicmljLlRleHRib3goXHJcbiAgICAgIGBGaXh0dXJlICR7Zml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyXHJcbiAgICAgICAgPyBmaXh0dXJlRGF0YS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgK1xyXG4gICAgICAgIChmaXh0dXJlRGF0YT8uZml4dHVyZU51bWJlclxyXG4gICAgICAgICAgPyBcIiAtIEZYLVwiICsgZml4dHVyZURhdGEuZml4dHVyZU51bWJlclxyXG4gICAgICAgICAgOiBcIlwiKVxyXG4gICAgICAgIDogXCJuZXdcIlxyXG4gICAgICB9YCxcclxuICAgICAge1xyXG4gICAgICAgIGxlZnQ6IHRvcFggKyB0b3BXaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiB0b3BZICsgaW5uZXJCb3hIZWlnaHQgLyAyLFxyXG4gICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgIGZpbGw6IFwiIzEwMTgyOFwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogdG9wV2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBpbm5lckJveEhlaWdodCxcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgc2Vjb25kQm94WSA9IHRvcFkgKyBpbm5lckJveEhlaWdodDtcclxuXHJcbiAgICBjb25zdCBpbm5lckJvdHRvbUJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgYE0gJHt0b3BYfSAke3NlY29uZEJveFl9IFxyXG4gICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZfSBcclxuICAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC0gcmFkaXVzfSBcclxuICAgICAgICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSAke3RvcFggKyB0b3BXaWR0aCAtIHJhZGl1c1xyXG4gICAgICB9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgIEwgJHt0b3BYICsgcmFkaXVzfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICBRICR7dG9wWH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9ICR7dG9wWH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLSByYWRpdXNcclxuICAgICAgfSBcclxuICAgICAgICAgIEwgJHt0b3BYfSAke3NlY29uZEJveFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbDogXCIjMzQ0MDU0XCIsXHJcbiAgICAgICAgc3Ryb2tlOiBwcmltYXJ5U3Ryb2tlLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGxldCBmb250U2l6ZSA9IDU7XHJcbiAgICBsZXQgYm90dG9tVGV4dDtcclxuXHJcbiAgICBjb25zdCB0ZXh0Q29udGVudCA9IGdldEZpeHR1cmVDYW52YXNMYWJlbChmaXh0dXJlRGF0YSk7XHJcblxyXG4gICAgY29uc3QgY3JlYXRlQm90dG9tVGV4dCA9IChmczogYW55KSA9PlxyXG4gICAgICBuZXcgZmFicmljLlRleHRib3godGV4dENvbnRlbnQsIHtcclxuICAgICAgICBsZWZ0OiB0b3BYICsgdG9wV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogc2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC8gMixcclxuICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgZmlsbDogXCIjRkZGRkZGXCIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogdG9wV2lkdGgsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIGRvIHtcclxuICAgICAgYm90dG9tVGV4dCA9IGNyZWF0ZUJvdHRvbVRleHQoZm9udFNpemUpO1xyXG4gICAgICBmb250U2l6ZSAtPSAwLjU7XHJcbiAgICB9IHdoaWxlIChib3R0b21UZXh0LmhlaWdodCA+IGlubmVyQm94SGVpZ2h0ICYmIGZvbnRTaXplID4gMik7XHJcblxyXG4gICAgY29uc3QgbWlkV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCBtaWRIZWlnaHQgPSAoNzcgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgbWlkWCA9IHggKyAod2lkdGggLSBtaWRXaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgbWlkWSA9IHRvcFkgKyB0b3BIZWlnaHQgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG5cclxuICAgIGNvbnN0IG1pZENvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgIHRvcDogbWlkWSxcclxuICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IG1pZEhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBwcmltYXJ5U3Ryb2tlLFxyXG4gICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc2hlbGZDb3VudCA9IGZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnPy5sZW5ndGg7XHJcbiAgICBjb25zdCBib3hIZWlnaHQgPSBtaWRIZWlnaHQgLyAoc2hlbGZDb3VudCArIDIpO1xyXG4gICAgY29uc3QgZmlyc3RCb3hZID0gbWlkWTtcclxuXHJcbiAgICBjb25zdCBmaXJzdEJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgYE0gJHttaWRYICsgcmFkaXVzfSAke2ZpcnN0Qm94WX0gXHJcbiAgICAgICAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aCAtIHJhZGl1c30gJHtmaXJzdEJveFl9IFxyXG4gICAgICAgICAgICAgIFEgJHttaWRYICsgbWlkV2lkdGh9ICR7Zmlyc3RCb3hZfSAke21pZFggKyBtaWRXaWR0aH0gJHtmaXJzdEJveFkgKyByYWRpdXNcclxuICAgICAgfSBcclxuICAgICAgICAgICAgICBMICR7bWlkWCArIG1pZFdpZHRofSAke2ZpcnN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgICAgTCAke21pZFh9ICR7Zmlyc3RCb3hZICsgYm94SGVpZ2h0fSBcclxuICAgICAgICAgICAgICBMICR7bWlkWH0gJHtmaXJzdEJveFkgKyByYWRpdXN9IFxyXG4gICAgICAgICAgICAgIFEgJHttaWRYfSAke2ZpcnN0Qm94WX0gJHttaWRYICsgcmFkaXVzfSAke2ZpcnN0Qm94WX0gWmAsXHJcbiAgICAgIHtcclxuICAgICAgICBmaWxsOiBwcmltYXJ5RmlsbCxcclxuICAgICAgICBzdHJva2U6IHByaW1hcnlTdHJva2UsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgZmlyc3RCb3hUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICBgJHtmaXh0dXJlRGF0YT8uaGVhZGVyPy5sYWJlbCA/IGZpeHR1cmVEYXRhLmhlYWRlci5sYWJlbCA6IFwiXCJ9YCxcclxuICAgICAge1xyXG4gICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiBmaXJzdEJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgIGZvbnRTaXplOiA3LFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgIGZpbGw6IGhlYWRlckNvbG9yLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHNoZWx2ZXM6IGZhYnJpYy5PYmplY3RbXSA9IFtdO1xyXG4gICAgY29uc3Qgc2hlbGZIZWlnaHQgPSBtaWRIZWlnaHQgLSAyICogYm94SGVpZ2h0O1xyXG5cclxuICAgIGlmIChmaXh0dXJlRGF0YS5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwxXCIpIHtcclxuICAgICAgY29uc3QgYm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodDtcclxuXHJcbiAgICAgIGNvbnN0IHNoZWxmID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgIHRvcDogYm94WSxcclxuICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBzaGVsZkhlaWdodCxcclxuICAgICAgICAvLyBzdHJva2U6ICcjNTFDMUZGJyxcclxuICAgICAgICBzdHJva2U6IHByaW1hcnlTdHJva2UsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IHRleHQgPSBmaXh0dXJlRGF0YT8ucHJvZHVjdEJyYW5kTmFtZT8uam9pbihcIiArIFwiKSB8fCBcIlwiO1xyXG5cclxuICAgICAgLy8gV3JhcCB0ZXh0IHdpdGhpbiBmaXh0dXJlIHdpZHRoIGFuZCBzaHJpbmsgdG8gZml0IHZlcnRpY2FsIHNwYWNlXHJcbiAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IG1pZFdpZHRoICogMC45O1xyXG4gICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gc2hlbGZIZWlnaHQgKiAwLjg7XHJcbiAgICAgIGxldCBmb250U2l6ZUwxID0gNjtcclxuXHJcbiAgICAgIGNvbnN0IGNyZWF0ZVdyYXBwZWRUZXh0Ym94ID0gKGZzOiBudW1iZXIpID0+XHJcbiAgICAgICAgbmV3IGZhYnJpYy5UZXh0Ym94KHRleHQsIHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICB0b3A6IGJveFkgKyBzaGVsZkhlaWdodCAvIDIsXHJcbiAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgIHdpZHRoOiBtYXhUZXh0V2lkdGgsXHJcbiAgICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgZmlsbDogXCIjMzMzXCIsXHJcbiAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgbGV0IHdyYXBwZWRUZXh0ID0gY3JlYXRlV3JhcHBlZFRleHRib3goZm9udFNpemVMMSk7XHJcbiAgICAgIHdoaWxlICh3cmFwcGVkVGV4dC5oZWlnaHQgPiBtYXhUZXh0SGVpZ2h0ICYmIGZvbnRTaXplTDEgPiAyKSB7XHJcbiAgICAgICAgZm9udFNpemVMMSAtPSAwLjU7XHJcbiAgICAgICAgd3JhcHBlZFRleHQgPSBjcmVhdGVXcmFwcGVkVGV4dGJveChmb250U2l6ZUwxKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcGFkZGluZyA9IDI7XHJcbiAgICAgIGNvbnN0IGJhY2tncm91bmQgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiBib3hZICsgc2hlbGZIZWlnaHQgLyAyLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogTWF0aC5taW4obWF4VGV4dFdpZHRoLCB3cmFwcGVkVGV4dC53aWR0aCEpICsgcGFkZGluZyxcclxuICAgICAgICBoZWlnaHQ6IHdyYXBwZWRUZXh0LmdldFNjYWxlZEhlaWdodCgpICsgMixcclxuICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgIHJ4OiAxLFxyXG4gICAgICAgIHJ5OiAxLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHNoZWx2ZXMucHVzaChzaGVsZiwgYmFja2dyb3VuZCwgd3JhcHBlZFRleHQpO1xyXG4gICAgfSBlbHNlIGlmIChmaXh0dXJlRGF0YS5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwyXCIpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaGVsZkNvdW50OyBpKyspIHtcclxuICAgICAgICBjb25zdCBib3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKGkgKyAxKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2hlbGYgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICAgIHRvcDogYm94WSxcclxuICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgIGhlaWdodDogYm94SGVpZ2h0LFxyXG4gICAgICAgICAgc3Ryb2tlOiBwcmltYXJ5U3Ryb2tlLFxyXG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNoZWx2ZXMucHVzaChzaGVsZik7XHJcblxyXG4gICAgICAgIGlmIChmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZz8uW2ldLnNoZWxmVHlwZSA9PT0gXCJ0cmF5XCIpIHtcclxuICAgICAgICAgIGNvbnN0IHRyYXlSb3dzID0gZml4dHVyZURhdGEuc2hlbGZDb25maWc/LltpXS50cmF5Um93cyB8fCAxO1xyXG4gICAgICAgICAgY29uc3Qgcm93U3BhY2luZyA9IGJveEhlaWdodCAvIHRyYXlSb3dzO1xyXG5cclxuICAgICAgICAgIGZvciAobGV0IHIgPSAxOyByIDwgdHJheVJvd3M7IHIrKykge1xyXG4gICAgICAgICAgICBjb25zdCBsaW5lWSA9IGJveFkgKyByICogcm93U3BhY2luZztcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHRyYXlMaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICAgIFttaWRYLCBsaW5lWSwgbWlkWCArIG1pZFdpZHRoLCBsaW5lWV0sXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjIsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh0cmF5TGluZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0ZXh0ID1cclxuICAgICAgICAgIGZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnPy5baV0ucHJvZHVjdEJyYW5kTmFtZT8uam9pbihcIiArIFwiKSB8fCBcIlwiO1xyXG5cclxuICAgICAgICAvLyBMMjogU2luZ2xlLWxpbmUgZWxsaXBzaXMgYWdhaW5zdCBmdWxsIHNoZWxmIHdpZHRoXHJcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbFBhZGRpbmcgPSA2O1xyXG4gICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IE1hdGgubWF4KDAsIG1pZFdpZHRoIC0gaG9yaXpvbnRhbFBhZGRpbmcpO1xyXG4gICAgICAgIGNvbnN0IG1heFRleHRIZWlnaHQgPSBib3hIZWlnaHQgKiAwLjg7XHJcbiAgICAgICAgY29uc3QgYmFzZUZvbnRTaXplID0gNTtcclxuXHJcbiAgICAgICAgY29uc3QgbWVhc3VyZSA9ICh0OiBzdHJpbmcpID0+XHJcbiAgICAgICAgICBuZXcgZmFicmljLlRleHQodCwge1xyXG4gICAgICAgICAgICBmb250U2l6ZTogYmFzZUZvbnRTaXplLFxyXG4gICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbGV0IGRpc3BsYXlUZXh0ID0gdGV4dDtcclxuICAgICAgICBsZXQgbWVhc3VyZWQgPSBtZWFzdXJlKGRpc3BsYXlUZXh0KTtcclxuXHJcbiAgICAgICAgaWYgKChtZWFzdXJlZC53aWR0aCA/PyAwKSA+IG1heFRleHRXaWR0aCkge1xyXG4gICAgICAgICAgY29uc3QgZWxsaXBzaXMgPSBcIi4uLlwiO1xyXG4gICAgICAgICAgbGV0IGxlZnRJZHggPSAwO1xyXG4gICAgICAgICAgbGV0IHJpZ2h0SWR4ID0gdGV4dC5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgd2hpbGUgKGxlZnRJZHggPCByaWdodElkeCkge1xyXG4gICAgICAgICAgICBjb25zdCBtaWRJZHggPSBNYXRoLmZsb29yKChsZWZ0SWR4ICsgcmlnaHRJZHgpIC8gMik7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHRleHQuc2xpY2UoMCwgbWlkSWR4KSArIGVsbGlwc2lzO1xyXG4gICAgICAgICAgICBtZWFzdXJlZCA9IG1lYXN1cmUoY2FuZGlkYXRlKTtcclxuICAgICAgICAgICAgaWYgKChtZWFzdXJlZC53aWR0aCA/PyAwKSA+IG1heFRleHRXaWR0aCkge1xyXG4gICAgICAgICAgICAgIHJpZ2h0SWR4ID0gbWlkSWR4O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGxlZnRJZHggPSBtaWRJZHggKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBkaXNwbGF5VGV4dCA9IHRleHQuc2xpY2UoMCwgTWF0aC5tYXgoMCwgbGVmdElkeCAtIDEpKSArIGVsbGlwc2lzO1xyXG4gICAgICAgICAgbWVhc3VyZWQgPSBtZWFzdXJlKGRpc3BsYXlUZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGJhY2tncm91bmQgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgIHRvcDogYm94WSArIGJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgIGhlaWdodDogTWF0aC5taW4obWF4VGV4dEhlaWdodCwgbWVhc3VyZWQuaGVpZ2h0ID8/IDEwKSArIDIsXHJcbiAgICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgIHJ4OiAxLFxyXG4gICAgICAgICAgcnk6IDEsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbmFsVGV4dCA9IG5ldyBmYWJyaWMuVGV4dChkaXNwbGF5VGV4dCwge1xyXG4gICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgIHRvcDogYm94WSArIGJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgIGZvbnRTaXplOiBiYXNlRm9udFNpemUsXHJcbiAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgZmlsbDogXCIjMzMzXCIsXHJcbiAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzaGVsdmVzLnB1c2goYmFja2dyb3VuZCwgZmluYWxUZXh0KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChmaXh0dXJlRGF0YS5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwzXCIpIHtcclxuICAgICAgY29uc3Qgc2VxdWVudGlhbEdyb3VwczogeyB6b25lOiBzdHJpbmc7IHNoZWx2ZXM6IGFueVtdIH1bXSA9IFtdO1xyXG5cclxuICAgICAgbGV0IHByZXZpb3VzWm9uZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IHNoZWxmIG9mIGZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnKSB7XHJcbiAgICAgICAgY29uc3Qgem9uZSA9IHNoZWxmLnpvbmUgfHwgXCJVbmtub3duXCI7XHJcbiAgICAgICAgaWYgKHpvbmUgIT09IHByZXZpb3VzWm9uZSkge1xyXG4gICAgICAgICAgc2VxdWVudGlhbEdyb3Vwcy5wdXNoKHsgem9uZSwgc2hlbHZlczogW3NoZWxmXSB9KTtcclxuICAgICAgICAgIHByZXZpb3VzWm9uZSA9IHpvbmU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNlcXVlbnRpYWxHcm91cHNbc2VxdWVudGlhbEdyb3Vwcy5sZW5ndGggLSAxXS5zaGVsdmVzLnB1c2goc2hlbGYpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGN1cnJlbnRTaGVsZkluZGV4ID0gMDtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2Ygc2VxdWVudGlhbEdyb3Vwcykge1xyXG4gICAgICAgIGNvbnN0IHsgem9uZSwgc2hlbHZlczogc2hlbHZlc0luR3JvdXAgfSA9IGdyb3VwO1xyXG5cclxuICAgICAgICBjb25zdCBncm91cFN0YXJ0SW5kZXggPSBjdXJyZW50U2hlbGZJbmRleDtcclxuICAgICAgICBjb25zdCBncm91cExlbmd0aCA9IHNoZWx2ZXNJbkdyb3VwLmxlbmd0aDtcclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBUb3BZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKGdyb3VwU3RhcnRJbmRleCArIDEpO1xyXG4gICAgICAgIGNvbnN0IGdyb3VwQm90dG9tWSA9IGdyb3VwVG9wWSArIGJveEhlaWdodCAqIGdyb3VwTGVuZ3RoO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNoZWx2ZXNJbkdyb3VwLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICBjb25zdCBzaGVsZkRhdGEgPSBzaGVsdmVzSW5Hcm91cFtqXTtcclxuICAgICAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoY3VycmVudFNoZWxmSW5kZXggKyAxKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBzaGVsZlJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgICAgIHN0cm9rZTogcHJpbWFyeVN0cm9rZSxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaChzaGVsZlJlY3QpO1xyXG5cclxuICAgICAgICAgIGlmIChzaGVsZkRhdGEuc2hlbGZUeXBlID09PSBcInRyYXlcIikge1xyXG4gICAgICAgICAgICBjb25zdCB0cmF5Um93cyA9IHNoZWxmRGF0YS50cmF5Um93cyB8fCAwO1xyXG4gICAgICAgICAgICBjb25zdCBwcm9kdWN0UGVyU2hlbGYgPSBzaGVsZkRhdGEucHJvZHVjdFBlclNoZWxmIHx8IDA7XHJcblxyXG4gICAgICAgICAgICBjb25zdCByb3dTcGFjaW5nID0gYm94SGVpZ2h0IC8gdHJheVJvd3M7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtblNwYWNpbmcgPSBtaWRXaWR0aCAvIHByb2R1Y3RQZXJTaGVsZjtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IHIgPSAxOyByIDwgdHJheVJvd3M7IHIrKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGxpbmVZID0gYm94WSArIHIgKiByb3dTcGFjaW5nO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCB0cmF5TGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICAgIFttaWRYLCBsaW5lWSwgbWlkWCArIG1pZFdpZHRoLCBsaW5lWV0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjOTk5XCIsXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjIsXHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICBzaGVsdmVzLnB1c2godHJheUxpbmUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBjID0gMTsgYyA8IHByb2R1Y3RQZXJTaGVsZjsgYysrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbGluZVggPSBtaWRYICsgYyAqIGNvbHVtblNwYWNpbmc7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsTGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICAgIFtsaW5lWCwgYm94WSwgbGluZVgsIGJveFkgKyBib3hIZWlnaHRdLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBzdHJva2U6IFwiIzk5OVwiLFxyXG4gICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHZlcnRpY2FsTGluZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjdXJyZW50U2hlbGZJbmRleCsrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBCb3R0b21MaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgW21pZFgsIGdyb3VwQm90dG9tWSwgbWlkWCArIG1pZFdpZHRoLCBncm91cEJvdHRvbVldLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBzdHJva2U6IHByaW1hcnlTdHJva2UsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgc2hlbHZlcy5wdXNoKGdyb3VwQm90dG9tTGluZSk7XHJcblxyXG4gICAgICAgIGlmIChmaXh0dXJlRGF0YS5maXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICAgIGNvbnN0IGxhYmVsUGFkZGluZyA9IDI7XHJcbiAgICAgICAgICBjb25zdCBsYWJlbFRleHQgPSBuZXcgZmFicmljLlRleHRib3goem9uZSwge1xyXG4gICAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLSBsYWJlbFBhZGRpbmcsXHJcbiAgICAgICAgICAgIHRvcDogZ3JvdXBCb3R0b21ZLFxyXG4gICAgICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgICBmaWxsOiBcIiM3MDcwNzBcIixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJyaWdodFwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImJvdHRvbVwiLFxyXG4gICAgICAgICAgICB3aWR0aDogbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgICB0ZXh0QWxpZ246IFwicmlnaHRcIixcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaChsYWJlbFRleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJYID0gbWlkWCArIG1pZFdpZHRoIC8gMjtcclxuICAgICAgICBjb25zdCBncm91cENlbnRlclkgPSBncm91cFRvcFkgKyAoZ3JvdXBCb3R0b21ZIC0gZ3JvdXBUb3BZKSAvIDI7XHJcblxyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25CcmFuZHMgPSBuZXcgU2V0KCk7XHJcblxyXG4gICAgICAgIHNoZWx2ZXNJbkdyb3VwPy5mb3JFYWNoKChzaGVsZikgPT4ge1xyXG4gICAgICAgICAgc2hlbGYucHJvZHVjdEJyYW5kTmFtZT8uZm9yRWFjaCgoYnJhbmQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBzZWN0aW9uQnJhbmRzLmFkZChicmFuZCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKFsuLi5zZWN0aW9uQnJhbmRzXS5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IHRleHQgPSBbLi4uc2VjdGlvbkJyYW5kc10uam9pbihcIiArIFwiKTtcclxuICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSAyO1xyXG4gICAgICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gbWlkV2lkdGg7XHJcbiAgICAgICAgICBjb25zdCByZWN0V2lkdGggPSBtaWRXaWR0aCAqIDAuOTtcclxuICAgICAgICAgIGNvbnN0IG1heFRleHRIZWlnaHQgPSAyMDtcclxuXHJcbiAgICAgICAgICBsZXQgZm9udFNpemUgPSA2O1xyXG4gICAgICAgICAgbGV0IHdyYXBwZWRUZXh0O1xyXG5cclxuICAgICAgICAgIGNvbnN0IGNyZWF0ZVRleHRib3ggPSAoZnM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IGZhYnJpYy5UZXh0Ym94KHRleHQsIHtcclxuICAgICAgICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNDAwXCIsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IG1heFRleHRXaWR0aCxcclxuICAgICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZpbGw6IFwiIzEwMTgyOFwiLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGxlZnQ6IGdyb3VwQ2VudGVyWCxcclxuICAgICAgICAgICAgICB0b3A6IGdyb3VwQ2VudGVyWSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgd3JhcHBlZFRleHQgPSBjcmVhdGVUZXh0Ym94KGZvbnRTaXplKTtcclxuICAgICAgICAgICAgZm9udFNpemUgLT0gMC41O1xyXG4gICAgICAgICAgfSB3aGlsZSAod3JhcHBlZFRleHQuaGVpZ2h0ID4gbWF4VGV4dEhlaWdodCAmJiBmb250U2l6ZSA+IDIpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHJlY3RIZWlnaHQgPSB3cmFwcGVkVGV4dC5nZXRTY2FsZWRIZWlnaHQoKSArIHBhZGRpbmc7XHJcblxyXG4gICAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJUZXh0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgbGVmdDogZ3JvdXBDZW50ZXJYLFxyXG4gICAgICAgICAgICB0b3A6IGdyb3VwQ2VudGVyWSxcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgd2lkdGg6IHJlY3RXaWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiByZWN0SGVpZ2h0LFxyXG4gICAgICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJ4OiAxLFxyXG4gICAgICAgICAgICByeTogMSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaChncm91cENlbnRlclRleHQsIHdyYXBwZWRUZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZml4dHVyZURhdGE/LnZtQ29uZmlnPy5sZW5ndGgpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaXh0dXJlRGF0YS52bUNvbmZpZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHZtID0gZml4dHVyZURhdGEudm1Db25maWdbaV07XHJcblxyXG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB2bS5zdGFydFlQb3NpdGlvbiAtIDE7XHJcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSB2bS5lbmRZUG9zaXRpb24gLSAxO1xyXG5cclxuICAgICAgICBjb25zdCBzaGVsZlRvcFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoc3RhcnRJbmRleCArIDEpO1xyXG4gICAgICAgIGNvbnN0IHNoZWxmSGVpZ2h0U3BhbiA9IGJveEhlaWdodCAqIChlbmRJbmRleCAtIHN0YXJ0SW5kZXggKyAxKTtcclxuXHJcbiAgICAgICAgbGV0IHZtSGVpZ2h0UHg6IG51bWJlciA9IHNoZWxmSGVpZ2h0U3BhbjtcclxuICAgICAgICBsZXQgeTogbnVtYmVyID0gc2hlbGZUb3BZO1xyXG5cclxuICAgICAgICBpZiAodm0ueVpvbmUgJiYgdm0ueVpvbmUgIT09IFwic3RyZXRjaFwiKSB7XHJcbiAgICAgICAgICB2bUhlaWdodFB4ID0gc2hlbGZIZWlnaHRTcGFuIC8gMztcclxuXHJcbiAgICAgICAgICBzd2l0Y2ggKHZtLnlab25lKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ0b3BcIjpcclxuICAgICAgICAgICAgICB5ID0gc2hlbGZUb3BZO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwibWlkZGxlXCI6XHJcbiAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWSArIHZtSGVpZ2h0UHg7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICAgICAgICB5ID0gc2hlbGZUb3BZICsgMiAqIHZtSGVpZ2h0UHg7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB4ID0gbWlkWDtcclxuICAgICAgICBsZXQgd2lkdGggPSBtaWRXaWR0aDtcclxuXHJcbiAgICAgICAgaWYgKCF2bS54Wm9uZSB8fCB2bS54Wm9uZSA9PT0gXCJzdHJldGNoXCIpIHtcclxuICAgICAgICAgIHdpZHRoID0gbWlkV2lkdGg7XHJcbiAgICAgICAgICB4ID0gbWlkWDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgc2VjdGlvbldpZHRoID0gbWlkV2lkdGggLyAzO1xyXG4gICAgICAgICAgc3dpdGNoICh2bS54Wm9uZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwibGVmdFwiOlxyXG4gICAgICAgICAgICAgIHdpZHRoID0gc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgIHggPSBtaWRYO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwibWlkZGxlXCI6XHJcbiAgICAgICAgICAgICAgd2lkdGggPSBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgeCA9IG1pZFggKyBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJyaWdodFwiOlxyXG4gICAgICAgICAgICAgIHdpZHRoID0gc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgIHggPSBtaWRYICsgMiAqIHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICB3aWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgICAgIHggPSBtaWRYO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZtLnZtSW1hZ2VVcmwpIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZtSW1hZ2U6IGFueSA9IGF3YWl0IGZhYnJpYy5GYWJyaWNJbWFnZS5mcm9tVVJMKFxyXG4gICAgICAgICAgICAgIGAke3RoaXMuY2RuVXJsfSR7dm0udm1JbWFnZVVybH0/dj0ke0RhdGUubm93KCl9YCxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogXCJhbm9ueW1vdXNcIixcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICB2bUltYWdlLnNldCh7XHJcbiAgICAgICAgICAgICAgbGVmdDogeCArIHdpZHRoIC8gMixcclxuICAgICAgICAgICAgICB0b3A6IHkgKyB2bUhlaWdodFB4IC8gMixcclxuICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgc2NhbGVYOiB3aWR0aCAvIHZtSW1hZ2Uud2lkdGghLFxyXG4gICAgICAgICAgICAgIHNjYWxlWTogdm1IZWlnaHRQeCAvIHZtSW1hZ2UuaGVpZ2h0ISxcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBzaGVsdmVzLnB1c2godm1JbWFnZSk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgbG9hZGluZyBpbWFnZSBmb3IgVk06ICR7dm0udm1JbWFnZVVybH1gLCBlcnIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCB2bUJveCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgIGxlZnQ6IHgsXHJcbiAgICAgICAgICAgIHRvcDogeSxcclxuICAgICAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogdm1IZWlnaHRQeCxcclxuICAgICAgICAgICAgZmlsbDogdm1GaWxsLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBsZXQgZm9udFNpemUgPSA1O1xyXG4gICAgICAgICAgbGV0IHZtVGV4dDtcclxuXHJcbiAgICAgICAgICBjb25zdCBjcmVhdGVWbVRleHQgPSAoZnM6IG51bWJlcikgPT5cclxuICAgICAgICAgICAgbmV3IGZhYnJpYy5UZXh0Ym94KHZtLnZtTmFtZSB8fCBcIlwiLCB7XHJcbiAgICAgICAgICAgICAgbGVmdDogeCArIHdpZHRoIC8gMixcclxuICAgICAgICAgICAgICB0b3A6IHkgKyB2bUhlaWdodFB4IC8gMixcclxuICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIHZtVGV4dCA9IGNyZWF0ZVZtVGV4dChmb250U2l6ZSk7XHJcbiAgICAgICAgICAgIGZvbnRTaXplIC09IDAuNTtcclxuICAgICAgICAgIH0gd2hpbGUgKHZtVGV4dC5oZWlnaHQgPiB2bUhlaWdodFB4ICYmIGZvbnRTaXplID4gMik7XHJcblxyXG4gICAgICAgICAgc2hlbHZlcy5wdXNoKHZtQm94LCB2bVRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxhc3RCb3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKHNoZWxmQ291bnQgKyAxKTtcclxuICAgIGNvbnN0IGxhc3RCb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7bWlkWH0gJHtsYXN0Qm94WX0gXHJcbiAgICAgICAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WX0gXHJcbiAgICAgICAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WSArIGJveEhlaWdodCAtIHJhZGl1c30gXHJcbiAgICAgICAgICAgICAgUSAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gJHttaWRYICsgbWlkV2lkdGggLSByYWRpdXNcclxuICAgICAgfSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSBcclxuICAgICAgICAgICAgICBMICR7bWlkWCArIHJhZGl1c30gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgICAgUSAke21pZFh9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9ICR7bWlkWH0gJHtsYXN0Qm94WSArIGJveEhlaWdodCAtIHJhZGl1c1xyXG4gICAgICB9IFxyXG4gICAgICAgICAgICAgIEwgJHttaWRYfSAke2xhc3RCb3hZfSBaYCxcclxuICAgICAge1xyXG4gICAgICAgIGZpbGw6IGZvb3RlckZpbGwsXHJcbiAgICAgICAgc3Ryb2tlOiBwcmltYXJ5U3Ryb2tlLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGxhc3RCb3hUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICBgJHtmaXh0dXJlRGF0YT8uZm9vdGVyPy5sYWJlbCA/IGZpeHR1cmVEYXRhLmZvb3Rlci5sYWJlbCA6IFwiXCJ9YCxcclxuICAgICAge1xyXG4gICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiBsYXN0Qm94WSArIGJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiNjAwXCIsXHJcbiAgICAgICAgZmlsbDogXCIjMTAxODI4XCIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgaGVpZ3RoOiBib3hIZWlnaHQsXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgYm90dG9tV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCBib3R0b21IZWlnaHQgPSAoMyAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBib3R0b21YID0geCArICh3aWR0aCAtIGJvdHRvbVdpZHRoKSAvIDI7XHJcbiAgICBjb25zdCBib3R0b21ZID0gbWlkWSArIG1pZEhlaWdodCArIHRoaXMudmVydGljYWxNYXJnaW47XHJcblxyXG4gICAgY29uc3QgYm90dG9tQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogYm90dG9tWCxcclxuICAgICAgdG9wOiBib3R0b21ZLFxyXG4gICAgICB3aWR0aDogYm90dG9tV2lkdGgsXHJcbiAgICAgIGhlaWdodDogYm90dG9tSGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBzdHJva2U6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYm90dG9tVGV4dENvbnRlbnQgPSBuZXcgZmFicmljLlRleHRib3goXHJcbiAgICAgIGBTaGVsdmVzIC0gJHtmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZz8ubGVuZ3RofSAuIFByb2R1Y3RzIC0gICR7Z2V0Rml4dHVyZVByb2R1Y3RDYXBhY2l0eShmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZyl9IC4gVk0gLSAke2ZpeHR1cmVEYXRhLnZtQ29uZmlnPy5sZW5ndGh9YCxcclxuICAgICAge1xyXG4gICAgICAgIGxlZnQ6IGJvdHRvbVggKyBib3R0b21XaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiBib3R0b21ZICsgYm90dG9tSGVpZ2h0IC8gMixcclxuICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiBib3R0b21XaWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGJvdHRvbUhlaWdodCxcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcblxyXG4gICAgY29uc3QgZml4dHVyZUdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChcclxuICAgICAgW1xyXG4gICAgICAgIG1haW5Db250YWluZXIsXHJcbiAgICAgICAgdG9wQ29udGFpbmVyLFxyXG4gICAgICAgIGlubmVyVG9wQm94LFxyXG4gICAgICAgIHRvcFRleHQsXHJcbiAgICAgICAgaW5uZXJCb3R0b21Cb3gsXHJcbiAgICAgICAgYm90dG9tVGV4dCxcclxuICAgICAgICBtaWRDb250YWluZXIsXHJcbiAgICAgICAgZmlyc3RCb3gsXHJcbiAgICAgICAgZmlyc3RCb3hUZXh0LFxyXG4gICAgICAgIC4uLnNoZWx2ZXMsXHJcbiAgICAgICAgbGFzdEJveCxcclxuICAgICAgICBsYXN0Qm94VGV4dCxcclxuICAgICAgICBib3R0b21Db250YWluZXIsXHJcbiAgICAgICAgYm90dG9tVGV4dENvbnRlbnQsXHJcbiAgICAgIF0sXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiB4LFxyXG4gICAgICAgIHRvcDogeSxcclxuICAgICAgICBldmVudGVkOiB0cnVlLFxyXG4gICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgIGhvdmVyQ3Vyc29yOiBcImRlZmF1bHRcIixcclxuICAgICAgICBsb2NrU2NhbGluZ1g6IHRydWUsXHJcbiAgICAgICAgbG9ja1NjYWxpbmdZOiB0cnVlLFxyXG4gICAgICAgIGxvY2tNb3ZlbWVudFg6IHRydWUsXHJcbiAgICAgICAgbG9ja01vdmVtZW50WTogdHJ1ZSxcclxuICAgICAgICBsb2NrUm90YXRpb246IHRydWUsXHJcbiAgICAgICAgaGFzQ29udHJvbHM6IGZhbHNlLFxyXG4gICAgICAgIHN1YlRhcmdldENoZWNrOiB0cnVlLFxyXG4gICAgICAgIGFuZ2xlOiBmaXh0dXJlRGF0YS5yZWxhdGl2ZVBvc2l0aW9uPy5hbmdsZSA/PyAwLFxyXG4gICAgICB9XHJcbiAgICApIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgd2FsbEluZGV4OiBudW1iZXI7XHJcbiAgICAgIGZpeHR1cmVJbmRleDogbnVtYmVyO1xyXG4gICAgICBmaXh0dXJlSWQ6IHN0cmluZztcclxuICAgICAgZml4dHVyZVR5cGU6IFwid2FsbFwiIHwgXCJmbG9vclwiO1xyXG4gICAgICBpc3N1ZTogYm9vbGVhbjtcclxuICAgICAgaXNzdWVEYXRhOiBhbnk7XHJcbiAgICAgIHRhc2tUeXBlOiBzdHJpbmc7XHJcbiAgICAgIHZtQ29uZmlnOiBbXTtcclxuICAgICAgb2JqVHlwZTogc3RyaW5nO1xyXG4gICAgfTtcclxuXHJcblxyXG5cclxuICAgIGZpeHR1cmVHcm91cC5maXh0dXJlVHlwZSA9IGZpeHR1cmVEYXRhLmZpeHR1cmVUeXBlO1xyXG4gICAgZml4dHVyZUdyb3VwLndhbGxJbmRleCA9IGZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyO1xyXG4gICAgZml4dHVyZUdyb3VwLmZpeHR1cmVJbmRleCA9IGZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcjtcclxuICAgIGZpeHR1cmVHcm91cC5maXh0dXJlSWQgPSBmaXh0dXJlRGF0YS5faWQ7XHJcbiAgICBmaXh0dXJlR3JvdXAuaXNzdWUgPSBmaXh0dXJlRGF0YS5pc3N1ZTtcclxuICAgIGZpeHR1cmVHcm91cC5pc3N1ZURhdGEgPSBmaXh0dXJlRGF0YS5pc3N1ZURhdGE7XHJcbiAgICBmaXh0dXJlR3JvdXAudGFza1R5cGUgPSBmaXh0dXJlRGF0YS50YXNrVHlwZTtcclxuICAgIGZpeHR1cmVHcm91cC52bUNvbmZpZyA9IGZpeHR1cmVEYXRhLnZtQ29uZmlnO1xyXG4gICAgZml4dHVyZUdyb3VwLm9ialR5cGUgPSBcImZpeHR1cmVcIjtcclxuXHJcbiAgICAvLyBBZGQgY2xpY2sgaGFuZGxlciBkaXJlY3RseSBvbiB0aGUgZml4dHVyZSBncm91cFxyXG4gICAgZml4dHVyZUdyb3VwLm9uKFwibW91c2Vkb3duXCIsIChldmVudDogYW55KSA9PiB7XHJcbiAgICAgIC8vIFVzZSB0aGUgZml4dHVyZSBncm91cCBpdHNlbGYgKHdoaWNoIGhhcyBhbGwgdGhlIGZpeHR1cmUgcHJvcGVydGllcylcclxuICAgICAgLy8gVGhlIGV2ZW50LnRhcmdldCBtaWdodCBiZSBhIGNoaWxkIGVsZW1lbnQsIHNvIHdlIHVzZSBmaXh0dXJlR3JvdXAgZGlyZWN0bHlcclxuICAgICAgaWYgKGZpeHR1cmVHcm91cCAmJiAoZml4dHVyZUdyb3VwIGFzIGFueSkuZml4dHVyZUlkKSB7XHJcbiAgICAgICAgdGhpcy5vbkZpeHR1cmVDbGljayhmaXh0dXJlR3JvdXApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjYW52YXMuYWRkKGZpeHR1cmVHcm91cCk7XHJcblxyXG4gICAgLy8gSWYgbmV3bHkgYWRkZWQsIGZvY3VzIGl0IG9uY2VcclxuICAgIGlmICgoZml4dHVyZURhdGEgYXMgYW55KT8ubmV3QWRkZWQpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjYW52YXMuc2V0QWN0aXZlT2JqZWN0KGZpeHR1cmVHcm91cCk7XHJcbiAgICAgICAgY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgfSBjYXRjaCB7IH1cclxuICAgICAgZGVsZXRlIChmaXh0dXJlRGF0YSBhcyBhbnkpLm5ld0FkZGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaXh0dXJlR3JvdXA7XHJcbiAgfVxyXG5cclxuICBkcmF3T3RoZXJFbGVtZW50c1dpdGhMYWJlbChcclxuICAgIGNhbnZhczogZmFicmljLkNhbnZhcyxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIGE6IG51bWJlcixcclxuICAgIHdpZHRoOiBudW1iZXIsXHJcbiAgICBoZWlnaHQ6IG51bWJlcixcclxuICAgIGVsZW1lbnQ6IGFueVxyXG4gICk6IGZhYnJpYy5Hcm91cCB7XHJcbiAgICBjb25zdCByZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgd2lkdGgsXHJcbiAgICAgIGhlaWdodCxcclxuICAgICAgcng6IDIsXHJcbiAgICAgIHJ5OiAyLFxyXG4gICAgICBmaWxsOiBcIiNEQUYxRkZcIixcclxuICAgICAgc3Ryb2tlOiBcIiM2QkNBRkZcIixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0ZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KGVsZW1lbnQuZml4dHVyZU5hbWUsIHtcclxuICAgICAgd2lkdGg6IHdpZHRoIC0gOCxcclxuICAgICAgZm9udFNpemU6IDE0LFxyXG4gICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgIGZpbGw6IFwiIzEwMTgyOFwiLFxyXG4gICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgIGVkaXRhYmxlOiBmYWxzZSxcclxuICAgICAgc3BsaXRCeUdyYXBoZW1lOiB0cnVlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgdGV4dEJvdW5kcyA9IHRleHQuZ2V0Qm91bmRpbmdSZWN0KCk7XHJcblxyXG4gICAgaWYgKHRleHRCb3VuZHMuaGVpZ2h0ID4gaGVpZ2h0IC0gOCkge1xyXG4gICAgICBjb25zdCBzY2FsZSA9IChoZWlnaHQgLSA4KSAvIHRleHRCb3VuZHMuaGVpZ2h0O1xyXG4gICAgICB0ZXh0LnNldChcImZvbnRTaXplXCIsIHRleHQuZm9udFNpemUhICogc2NhbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChbcmVjdCwgdGV4dF0sIHtcclxuICAgICAgbGVmdDogeCxcclxuICAgICAgdG9wOiB5LFxyXG4gICAgICBhbmdsZTogYSxcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgaGFzQ29udHJvbHM6IGZhbHNlLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgbG9ja1NjYWxpbmdYOiB0cnVlLFxyXG4gICAgICBsb2NrU2NhbGluZ1k6IHRydWUsXHJcbiAgICAgIGxvY2tSb3RhdGlvbjogdHJ1ZSxcclxuICAgICAgbG9ja01vdmVtZW50WDogdHJ1ZSxcclxuICAgICAgbG9ja01vdmVtZW50WTogdHJ1ZSxcclxuICAgICAgZXZlbnRlZDogdHJ1ZSxcclxuICAgICAgaG92ZXJDdXJzb3I6IFwiZGVmYXVsdFwiLFxyXG4gICAgfSkgYXMgZmFicmljLkdyb3VwICYge1xyXG4gICAgICBvYmpUeXBlOiBzdHJpbmc7XHJcbiAgICAgIGRhdGE6IGFueTtcclxuICAgIH07XHJcblxyXG4gICAgZ3JvdXAub2JqVHlwZSA9IFwib3RoZXJzXCI7XHJcbiAgICBncm91cC5kYXRhID0gZWxlbWVudDtcclxuXHJcbiAgICBjYW52YXMuYWRkKGdyb3VwKTtcclxuXHJcbiAgICBpZiAoKGVsZW1lbnQgYXMgYW55KT8ubmV3QWRkZWQpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjYW52YXMuc2V0QWN0aXZlT2JqZWN0KGdyb3VwKTtcclxuICAgICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9IGNhdGNoIHsgfVxyXG4gICAgICBkZWxldGUgKGVsZW1lbnQgYXMgYW55KS5uZXdBZGRlZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZ3JvdXA7XHJcbiAgfVxyXG5cclxuICBjb2xsZWN0QWxsRml4dHVyZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFsbEZpeHR1cmVJbnN0YW5jZXMgPSBbXTtcclxuICAgIFxyXG4gICAgLy8gQ29sbGVjdCB3YWxsIGZpeHR1cmVzXHJcbiAgICBpZiAodGhpcy5mbG9vckRhdGE/LmxheW91dFBvbHlnb24pIHtcclxuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24pIHtcclxuICAgICAgICBpZiAoZWxlbWVudC5maXh0dXJlcyAmJiBBcnJheS5pc0FycmF5KGVsZW1lbnQuZml4dHVyZXMpKSB7XHJcbiAgICAgICAgICB0aGlzLmFsbEZpeHR1cmVJbnN0YW5jZXMucHVzaCguLi5lbGVtZW50LmZpeHR1cmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gQ29sbGVjdCBmbG9vciBmaXh0dXJlc1xyXG4gICAgaWYgKHRoaXMuZmxvb3JEYXRhPy5jZW50ZXJGaXh0dXJlICYmIEFycmF5LmlzQXJyYXkodGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZSkpIHtcclxuICAgICAgdGhpcy5hbGxGaXh0dXJlSW5zdGFuY2VzLnB1c2goLi4udGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkZpeHR1cmVDbGljayh0YXJnZXQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCF0YXJnZXQgfHwgIXRoaXMuZmxvb3JEYXRhKSByZXR1cm47XHJcbiAgICBcclxuICAgIGNvbnN0IGZpeHR1cmVJZCA9ICh0YXJnZXQgYXMgYW55KS5maXh0dXJlSWQ7XHJcbiAgICBjb25zdCBmaXh0dXJlVHlwZSA9ICh0YXJnZXQgYXMgYW55KS5maXh0dXJlVHlwZTtcclxuICAgIFxyXG4gICAgaWYgKCFmaXh0dXJlSWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdGaXh0dXJlIGNsaWNrOiBObyBmaXh0dXJlSWQgZm91bmQgb24gdGFyZ2V0JywgdGFyZ2V0KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBGaW5kIHRoZSBmaXh0dXJlIGRhdGFcclxuICAgIGxldCBmaXh0dXJlRGF0YTogYW55ID0gbnVsbDtcclxuICAgIFxyXG4gICAgaWYgKGZpeHR1cmVUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICBjb25zdCB3YWxsSW5kZXggPSAodGFyZ2V0IGFzIGFueSkud2FsbEluZGV4O1xyXG4gICAgICBcclxuICAgICAgaWYgKHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24gJiYgd2FsbEluZGV4ICE9PSB1bmRlZmluZWQgJiYgd2FsbEluZGV4ICE9PSBudWxsKSB7XHJcbiAgICAgICAgLy8gRmluZCB3YWxsIGJ5IGVsZW1lbnROdW1iZXIgKHdhbGxJbmRleCBpcyB0aGUgZWxlbWVudE51bWJlcilcclxuICAgICAgICBjb25zdCB3YWxsID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAgICAgKHc6IGFueSkgPT4gdy5lbGVtZW50TnVtYmVyID09PSB3YWxsSW5kZXhcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh3YWxsICYmIHdhbGwuZml4dHVyZXMpIHtcclxuICAgICAgICAgIC8vIEFsd2F5cyB1c2UgZml4dHVyZUlkIHRvIGZpbmQgdGhlIGZpeHR1cmUgKG1vcmUgcmVsaWFibGUgdGhhbiBpbmRleC1iYXNlZCBsb29rdXApXHJcbiAgICAgICAgICBmaXh0dXJlRGF0YSA9IHdhbGwuZml4dHVyZXMuZmluZCgoZjogYW55KSA9PiBmLl9pZCA9PT0gZml4dHVyZUlkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoZml4dHVyZVR5cGUgPT09IFwiZmxvb3JcIikge1xyXG4gICAgICBmaXh0dXJlRGF0YSA9IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmU/LmZpbmQoKGY6IGFueSkgPT4gZi5faWQgPT09IGZpeHR1cmVJZCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmICghZml4dHVyZURhdGEpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdGaXh0dXJlIGNsaWNrOiBGaXh0dXJlIGRhdGEgbm90IGZvdW5kJywgeyBcclxuICAgICAgICBmaXh0dXJlSWQsIFxyXG4gICAgICAgIGZpeHR1cmVUeXBlLCBcclxuICAgICAgICB3YWxsSW5kZXg6ICh0YXJnZXQgYXMgYW55KS53YWxsSW5kZXgsIFxyXG4gICAgICAgIGZpeHR1cmVJbmRleDogKHRhcmdldCBhcyBhbnkpLmZpeHR1cmVJbmRleCxcclxuICAgICAgICBmbG9vckRhdGE6IHRoaXMuZmxvb3JEYXRhIFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyBFbnN1cmUgdm1Db25maWcgaXMgYWx3YXlzIGFuIGFycmF5IChldmVuIGlmIGVtcHR5KSB0byBhdm9pZCBkaXNwbGF5IGlzc3Vlc1xyXG4gICAgLy8gSGFuZGxlIGNhc2VzIHdoZXJlIHZtQ29uZmlnIG1pZ2h0IGJlIG51bGwsIHVuZGVmaW5lZCwgb3Igbm90IGFuIGFycmF5XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZml4dHVyZURhdGEudm1Db25maWcpKSB7XHJcbiAgICAgIGZpeHR1cmVEYXRhLnZtQ29uZmlnID0gW107XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIENyZWF0ZSBhIGRlZXAgY2xvbmUgdG8gZW5zdXJlIGNoYW5nZSBkZXRlY3Rpb24gd29ya3NcclxuICAgIGNvbnN0IGNsb25lZERhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUoZml4dHVyZURhdGEpO1xyXG4gICAgXHJcbiAgICB0aGlzLnNlbGVjdGVkRml4dHVyZSA9IHtcclxuICAgICAgZml4dHVyZUlkOiBmaXh0dXJlSWQsXHJcbiAgICAgIGZpeHR1cmVUeXBlOiBmaXh0dXJlVHlwZSxcclxuICAgICAgd2FsbEluZGV4OiAodGFyZ2V0IGFzIGFueSkud2FsbEluZGV4LFxyXG4gICAgICBmaXh0dXJlSW5kZXg6ICh0YXJnZXQgYXMgYW55KS5maXh0dXJlSW5kZXgsXHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICAvLyBDaGVjayBpZiB0aGlzIGZpeHR1cmUgaGFzIHJlcGxhY2VSZXNwb25zZURhdGEgKGZvciBiZWZvcmUvYWZ0ZXIgY29tcGFyaXNvbilcclxuICAgIGNvbnN0IHN0b3JlID0gdGhpcy5maW5kUmVwbGFjZURhdGE/LnN0b3Jlcz8uZmluZChcclxuICAgICAgKHM6IFN0b3JlKSA9PiBzLnN0b3JlTmFtZSA9PT0gdGhpcy5zZWxlY3RlZFN0b3JlRm9yUHJldmlldz8uc3RvcmVOYW1lXHJcbiAgICApO1xyXG4gICAgXHJcbiAgICAvLyBJZiB0aGlzIGZpeHR1cmUgbWF0Y2hlcyB0aGUgZmluZFJlc3BvbnNlRGF0YSBhbmQgaGFzIHJlcGxhY2VSZXNwb25zZURhdGEsXHJcbiAgICAvLyByZXN0b3JlIHRoZSBvcmlnaW5hbCBmaXh0dXJlIGRhdGEgZm9yIGJlZm9yZS9hZnRlciBjb21wYXJpc29uXHJcbiAgICBpZiAoc3RvcmU/LmZpbmRSZXNwb25zZURhdGEgPT09IGZpeHR1cmVJZCAmJiBzdG9yZT8ucmVwbGFjZVJlc3BvbnNlRGF0YSkge1xyXG4gICAgICAvLyBSZXN0b3JlIG9yaWdpbmFsRml4dHVyZURhdGEgZnJvbSB0aGUgbWFwIChwZXJzaXN0cyBldmVuIHdoZW4gY2xpY2tpbmcgb3RoZXIgZml4dHVyZXMpXHJcbiAgICAgIGNvbnN0IHN0b3JlZE9yaWdpbmFsID0gdGhpcy5vcmlnaW5hbEZpeHR1cmVzTWFwLmdldChmaXh0dXJlSWQpO1xyXG4gICAgICBpZiAoc3RvcmVkT3JpZ2luYWwpIHtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsRml4dHVyZURhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUoc3RvcmVkT3JpZ2luYWwpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIElmIG5vdCBpbiBtYXAgKHNob3VsZG4ndCBoYXBwZW4gaWYgYXBwbHlTdG9yZWRSZXNwb25zZURhdGEgcmFuKSwgXHJcbiAgICAgICAgLy8gdXNlIGN1cnJlbnQgZml4dHVyZSBhcyBmYWxsYmFja1xyXG4gICAgICAgIHRoaXMub3JpZ2luYWxGaXh0dXJlRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShjbG9uZWREYXRhKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gTm8gcmVwbGFjZSBkYXRhIGZvciB0aGlzIGZpeHR1cmUsIGNsZWFyIG9yaWdpbmFsXHJcbiAgICAgIHRoaXMub3JpZ2luYWxGaXh0dXJlRGF0YSA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vIEZvcmNlIGNoYW5nZSBkZXRlY3Rpb24gYnkgY3JlYXRpbmcgYSBuZXcgb2JqZWN0IHJlZmVyZW5jZVxyXG4gICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gbnVsbDtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgIFxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IGNsb25lZERhdGE7XHJcbiAgICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgXHJcbiAgICAgIC8vIFJlLWNlbnRlciBwbGFub2dyYW0gd2hlbiBwYW5lbCBvcGVucyAoc2ltaWxhciB0byBtYW5hZ2UtcGxhbm9ncmFtKVxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5wcmV2aWV3Q2FudmFzICYmIHRoaXMucHJldmlld0NhbnZhc0NvbnRhaW5lclJlZj8ubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgdGhpcy5yZXNpemVDYW52YXModGhpcy5wcmV2aWV3Q2FudmFzLCB0aGlzLnByZXZpZXdDYW52YXNDb250YWluZXJSZWYpO1xyXG4gICAgICAgICAgdGhpcy5maXRDYW52YXNUb0xheW91dEFuaW1hdGVkKHRoaXMucHJldmlld0NhbnZhcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCA0MDApO1xyXG4gICAgfSwgMCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVSaWdodFBhbmVsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQgPSAhdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQ7XHJcbiAgICBcclxuICAgIC8vIFJlc2l6ZSBjYW52YXMgd2hlbiBwYW5lbCBpcyB0b2dnbGVkXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMucHJldmlld0NhbnZhcyAmJiB0aGlzLnByZXZpZXdDYW52YXNDb250YWluZXJSZWY/Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICB0aGlzLnJlc2l6ZUNhbnZhcyh0aGlzLnByZXZpZXdDYW52YXMsIHRoaXMucHJldmlld0NhbnZhc0NvbnRhaW5lclJlZik7XHJcbiAgICAgICAgdGhpcy5maXRDYW52YXNUb0xheW91dEFuaW1hdGVkKHRoaXMucHJldmlld0NhbnZhcyk7XHJcbiAgICAgIH1cclxuICAgIH0sIDQwMCk7XHJcbiAgfVxyXG5cclxuICBvbkhpZGVNZXRhZGF0YVRvZ2dsZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucHJldmlld0NhbnZhcykge1xyXG4gICAgICB0aGlzLnByZXZpZXdDYW52YXMuZGlzcG9zZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJtYWluLWNhcmRcIj5cclxuICAgIDxmb3JtPlxyXG4gICAgICAgIDwhLS0gU2VjdGlvbiAxOiBBZGQgU3RvcmVzIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1udW1iZXJcIj4xPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5BZGQgc3RvcmVzPC9oMj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdG9yZS1pbnB1dC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RvcmUtZHJvcGRvd25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZEZpZWxkXT1cIid2YWx1ZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVGaWVsZF09XCInbGFiZWwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cInNlYXJjaE1vZGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJzZWxlY3RlZE1vZGVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiBcclxuICAgICAgICAgICAgICAgICAgICA8bGliLXN0b3JlLXNlbGVjdCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwic3RvcmVPcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2luaXRpYWxTZWxlY3RlZF09XCJzZWxlY3RlZFN0b3Jlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZENoYW5nZSk9XCJvblN0b3Jlc1NlbGVjdGVkKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpYi1zdG9yZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1hcHBseVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25BcHBseSgpXCIgW2Rpc2FibGVkXT1cImxvYWRpbmcgfHwgZmluZExvYWRpbmcgfHwgcmVwbGFjZUxvYWRpbmcgfHwgc2F2aW5nRHJhZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgc2F2aW5nRHJhZnQgPyAnU2F2aW5nLi4uJyA6ICdBcHBseScgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICA8IS0tIFNlY3Rpb24gMjogQ2hvb3NlIFRhcmdldCAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1yb3dcIiAqbmdJZj1cImhhc1N0b3Jlc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1udW1iZXJcIj4yPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5DaG9vc2UgdGFyZ2V0PC9oMj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YXJnZXQtYnV0dG9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRhcmdldC1idG5cIiBbY2xhc3MuYWN0aXZlXT1cInRhcmdldC52YWx1ZSA9PT0gJ2JvdGgnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwidGFyZ2V0XCIgdmFsdWU9XCJib3RoXCIgW2Zvcm1Db250cm9sXT1cInRhcmdldFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBCb3RoXHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0YXJnZXQtYnRuXCIgW2NsYXNzLmFjdGl2ZV09XCJ0YXJnZXQudmFsdWUgPT09ICdtZXJjaCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ0YXJnZXRcIiB2YWx1ZT1cIm1lcmNoXCIgW2Zvcm1Db250cm9sXT1cInRhcmdldFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBNZXJjaGFuZGlzZVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGFyZ2V0LWJ0blwiIFtjbGFzcy5hY3RpdmVdPVwidGFyZ2V0LnZhbHVlID09PSAndm0nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwidGFyZ2V0XCIgdmFsdWU9XCJ2bVwiIFtmb3JtQ29udHJvbF09XCJ0YXJnZXRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgVmlzdWFsIE1lcmNoYW5kaXNlXHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXBsYWNlLXNlbGVjdGlvbi1zdGFja1wiICpuZ0lmPVwibmVlZHNSZXBsYWNlQnJhbmQoKSB8fCBuZWVkc1JlcGxhY2VWbSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm5lZWRzUmVwbGFjZUJyYW5kKClcIiBjbGFzcz1cInJlcGxhY2Utc2VsZWN0aW9uLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlcGxhY2Utc2VsZWN0aW9uLXRhZ1wiPk1lcmNoYW5kaXNlIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicmVwbGFjZS1zZWxlY3Rpb24tZHJvcGRvd25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkRmllbGRdPVwiJ19pZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVGaWVsZF09XCInYnJhbmROYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoRmllbGRdPVwiJ2JyYW5kTmFtZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiYnJhbmRMaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicmVwbGFjZUJyYW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibmVlZHNSZXBsYWNlVm0oKVwiIGNsYXNzPVwicmVwbGFjZS1zZWxlY3Rpb24tcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVwbGFjZS1zZWxlY3Rpb24tdGFnXCI+VmlzdWFsIE1lcmNoYW5kaXNlIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicmVwbGFjZS1zZWxlY3Rpb24tZHJvcGRvd25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkRmllbGRdPVwiJ19pZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVGaWVsZF09XCIndm1OYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoRmllbGRdPVwiJ3ZtTmFtZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N1YlRleHRGaWVsZF09XCIndm1UeXBlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJyZXBsYWNlVm1MaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwicmVwbGFjZVZtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICBcclxuICAgICAgICA8IS0tIFNlY3Rpb24gMzogRmluZCBhbmQgUmVwbGFjZSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1yb3dcIiAqbmdJZj1cImhhc1N0b3Jlc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1udW1iZXJcIj4zPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5Qcm92aWRlIGFuIGluc3RydWN0aW9uIHRvIGZpbmQgYW5kIHJlcGxhY2UgaW4gdGhlIHNlbGVjdGVkIHN0b3JlPC9oMj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPCEtLSBGaW5kIGFuZCBSZXBsYWNlIElucHV0cyAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmluZC1yZXBsYWNlLXdyYXBwZXJcIiAqbmdJZj1cImhhc1N0b3Jlc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmluZC1yZXBsYWNlLWJveFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmluZC1yZXBsYWNlLWxhYmVsXCI+VGFyZ2V0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaW5kLXJlcGxhY2UtaW5wdXRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiSW5zdHJ1Y3Qgd2hhdCB0byBmaW5kIGl0IGluIHRoZSBzZWxlY3RlZCBzdG9yZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmaW5kUHJvbXB0XCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYnRuLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tZmluZFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25GaW5kKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZpbmRMb2FkaW5nIHx8IHJlcGxhY2VMb2FkaW5nIHx8ICFzZWxlY3RlZFN0b3JlRm9yUHJldmlldyB8fCAoZmluZFByb21wdC52YWx1ZSAmJiBmaW5kRXhlY3V0ZWQpIHx8IGlzRmluZFByb21wdEZyb21BcGlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZpbmRMb2FkaW5nID8gJ1Byb2Nlc3NpbmcuLi4nIDogJ1J1bicgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJyb3ctaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjI3XCIgaGVpZ2h0PVwiMTVcIiB2aWV3Qm94PVwiMCAwIDI3IDE1XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTI2LjcwNzEgOC4wNzEwN0MyNy4wOTc2IDcuNjgwNTQgMjcuMDk3NiA3LjA0NzM4IDI2LjcwNzEgNi42NTY4NUwyMC4zNDMxIDAuMjkyODkzQzE5Ljk1MjYgLTAuMDk3NjMxIDE5LjMxOTUgLTAuMDk3NjMxIDE4LjkyODkgMC4yOTI4OTNDMTguNTM4NCAwLjY4MzQxOCAxOC41Mzg0IDEuMzE2NTggMTguOTI4OSAxLjcwNzExTDI0LjU4NTggNy4zNjM5NkwxOC45Mjg5IDEzLjAyMDhDMTguNTM4NCAxMy40MTEzIDE4LjUzODQgMTQuMDQ0NSAxOC45Mjg5IDE0LjQzNUMxOS4zMTk1IDE0LjgyNTYgMTkuOTUyNiAxNC44MjU2IDIwLjM0MzEgMTQuNDM1TDI2LjcwNzEgOC4wNzEwN1pNMCA3LjM2Mzk2VjguMzYzOTZIMjZWNy4zNjM5NlY2LjM2Mzk2SDBWNy4zNjM5NlpcIiBmaWxsPVwiIzk4QTJCM1wiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaW5kLXJlcGxhY2UtYm94XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmaW5kLXJlcGxhY2UtbGFiZWxcIj5DaGFuZ2U8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbmQtcmVwbGFjZS1pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgd2hhdCB3b3VsZCB5b3UgbGlrZSB0byByZXBsYWNlIGluIHRoZSBzZWxlY3RlZCBmaXh0dXJlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInJlcGxhY2VQcm9tcHRcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1idG4tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLXJlcGxhY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25SZXBsYWNlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFmaW5kUHJvbXB0LnZhbHVlIHx8ICFoYXNSZXBsYWNlU2VsZWN0aW9uKCkgfHwgZmluZExvYWRpbmcgfHwgcmVwbGFjZUxvYWRpbmcgfHwgIWdldEN1cnJlbnRTdG9yZUZpbmRSZXNwb25zZURhdGEoKSB8fCByZXBsYWNlRXhlY3V0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJlcGxhY2VMb2FkaW5nID8gJ1Byb2Nlc3NpbmcuLi4nIDogJ1VwZGF0ZScgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPCEtLSBQcmV2aWV3IFNlY3Rpb24gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInByZXZpZXctd3JhcHBlclwiIFtuZ1N0eWxlXT1cInsnZGlzcGxheSc6IGhhc1N0b3JlcyA/ICdibG9jaycgOiAnbm9uZSd9XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0wIHByZXZpZXctbGF5b3V0XCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIExlZnQgQ29sdW1uOiBDYW52YXMgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgW25nQ2xhc3NdPVwieyBcclxuICAgICAgICAgICAgICAgICAgICAnY29sLTYnOiAhaXNSaWdodFBhbmVsQ29sbGFwc2VkICYmIHNlbGVjdGVkRml4dHVyZURhdGEgJiYgc2hvdWxkU2hvd0JlZm9yZUFmdGVyKCksXHJcbiAgICAgICAgICAgICAgICAgICAgJ2NvbC05JzogIWlzUmlnaHRQYW5lbENvbGxhcHNlZCAmJiBzZWxlY3RlZEZpeHR1cmVEYXRhICYmICFzaG91bGRTaG93QmVmb3JlQWZ0ZXIoKSwgXHJcbiAgICAgICAgICAgICAgICAgICAgJ2NvbC0xMic6IGlzUmlnaHRQYW5lbENvbGxhcHNlZCB8fCAhc2VsZWN0ZWRGaXh0dXJlRGF0YSBcclxuICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLXN0YXJ0IGdhcC0zIG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTdG9yZSBEcm9wZG93biAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1zdG9yZS1kcm9wZG93biBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGFzU3RvcmVzICYmIHN0b3JlRHJvcGRvd25JdGVtcy5sZW5ndGggPiAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJzdG9yZURyb3Bkb3duSXRlbXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkRmllbGRdPVwiJ3N0b3JlSWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hGaWVsZF09XCInc3RvcmVOYW1lJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbXVsdGldPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkVmFsdWVzXT1cInNlbGVjdGVkU3RvcmVWYWx1ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cIm9uU3RvcmVTZWxlY3RlZEZvclByZXZpZXcoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1zdG9yZS1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ29udGVudCBBcmVhIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUHJldmlldyBUaXRsZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZnctc2VtaWJvbGQgbWItMVwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4OyBjb2xvcjogIzFkMjkzOTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmV2aWV3IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ2V0U3RvcmVDb3VudCgpID4gMFwiIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDQwMDsgY29sb3I6ICM2NjcwODU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh7eyBnZXRTdG9yZUNvdW50KCkgfX0ge3sgZ2V0U3RvcmVDb3VudCgpID09PSAxID8gJ1N0b3JlJyA6ICdTdG9yZXMnIH19KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEZXNjcmlwdGlvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMFwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4OyBjb2xvcjogIzQ3NTQ2NztcIj5DaGVjayBpZiB0aGUgcHJvbXB0IGZpdCBpbnRvIHRoZSBleHBlY3RlZCByZXN1bHRzIGluIG9yZGVyIHRvIHByb2NlZWQgdG8gcmV2aWV3IGFuZCBhcHByb3ZlPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBDYW52YXMgQ29udGFpbmVyIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYW52YXMtY29udGFpbmVyXCIgI3ByZXZpZXdDYW52YXNDb250YWluZXIgW25nU3R5bGVdPVwieydkaXNwbGF5Jzogc2VsZWN0ZWRTdG9yZUZvclByZXZpZXcgPyAnYmxvY2snIDogJ25vbmUnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FudmFzLWxvYWRpbmdcIiAqbmdJZj1cImNhbnZhc0xvYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlciB0ZXh0LXByaW1hcnlcIiByb2xlPVwic3RhdHVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj5Mb2FkaW5nLi4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2FudmFzICNwcmV2aWV3Q2FudmFzPjwvY2FudmFzPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBSaWdodCBDb2x1bW46IEZpeHR1cmUgUHJldmlldyAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaXh0dXJlLXByZXZpZXctcGFuZWxcIiBcclxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZEZpeHR1cmVEYXRhICYmICFpc1JpZ2h0UGFuZWxDb2xsYXBzZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdjb2wtNic6IHNob3VsZFNob3dCZWZvcmVBZnRlcigpLCAnY29sLTMnOiAhc2hvdWxkU2hvd0JlZm9yZUFmdGVyKCkgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGhdPVwic2hvdWxkU2hvd0JlZm9yZUFmdGVyKCkgPyAnNjgwcHgnIDogJzM0MHB4J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBQYW5lbCBIZWFkZXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaXh0dXJlLXByZXZpZXctaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInByb2R1Y3QtaW1hZ2UtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlByb2R1Y3RcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByb2R1Y3QtaW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZVwiPnt7IGdldEZpeHR1cmVMYWJlbCgpIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGVjcy1jb250YWluZXJcIiAqbmdJZj1cImdldEZpeHR1cmVDYXRlZ29yeSgpIHx8IGdldEZpeHR1cmVXaWR0aCgpIHx8IGdldFNoZWxmQ291bnQoKSA+IDAgfHwgZ2V0Rml4dHVyZUNhcGFjaXR5KCkgPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNwZWMtdGV4dFwiICpuZ0lmPVwiZ2V0Rml4dHVyZUNhdGVnb3J5KClcIj57eyBnZXRGaXh0dXJlQ2F0ZWdvcnkoKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb3RcIiAqbmdJZj1cImdldEZpeHR1cmVDYXRlZ29yeSgpICYmIChnZXRGaXh0dXJlV2lkdGgoKSB8fCBnZXRTaGVsZkNvdW50KCkgPiAwIHx8IGdldEZpeHR1cmVDYXBhY2l0eSgpID4gMClcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3BlYy10ZXh0XCIgKm5nSWY9XCJnZXRGaXh0dXJlV2lkdGgoKVwiPnt7IGdldEZpeHR1cmVXaWR0aCgpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRvdFwiICpuZ0lmPVwiZ2V0Rml4dHVyZVdpZHRoKCkgJiYgKGdldFNoZWxmQ291bnQoKSA+IDAgfHwgZ2V0Rml4dHVyZUNhcGFjaXR5KCkgPiAwKVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcGVjLXRleHRcIiAqbmdJZj1cImdldFNoZWxmQ291bnQoKSA+IDBcIj57eyBnZXRTaGVsZkNvdW50KCkgfX0ge3sgZ2V0U2hlbGZDb3VudCgpID09PSAxID8gJ1NoZWxmJyA6ICdTaGVsdmVzJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb3RcIiAqbmdJZj1cImdldFNoZWxmQ291bnQoKSA+IDAgJiYgZ2V0Rml4dHVyZUNhcGFjaXR5KCkgPiAwXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNwZWMtdGV4dFwiICpuZ0lmPVwiZ2V0Rml4dHVyZUNhcGFjaXR5KCkgPiAwXCI+e3sgZ2V0Rml4dHVyZUNhcGFjaXR5KCkgfX0gQ2FwYWNpdHk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiBpZD1cImhpZGVNZXRhZGF0YVwiIFsobmdNb2RlbCldPVwiaGlkZU1ldGFkYXRhXCIgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCIgKGNoYW5nZSk9XCJvbkhpZGVNZXRhZGF0YVRvZ2dsZSgpXCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIG1zLTJcIiBmb3I9XCJoaWRlTWV0YWRhdGFcIiBzdHlsZT1cImNvbG9yOiBibGFjazsgd2hpdGUtc3BhY2U6IG5vd3JhcDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhpZGUgbWV0YWRhdGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRml4dHVyZSBDb21wb25lbnQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaXh0dXJlLXByZXZpZXctY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTaG93IEJlZm9yZS9BZnRlciB3aGVuIGZpbmQgZGF0YSBleGlzdHMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvdWxkU2hvd0JlZm9yZUFmdGVyKClcIiBjbGFzcz1cImJlZm9yZS1hZnRlci1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmVmb3JlLXNlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJzZWN0aW9uLWxhYmVsIG1iLTBcIj5CZWZvcmU8L2g2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpeHR1cmUtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1zdG9yZS1maXh0dXJlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaXh0dXJlXT1cImdldE9yaWdpbmFsRml4dHVyZUZvckRpc3BsYXkoKVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Q29sb3JzXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Vk1zXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93QkNzXT1cIiFoaWRlTWV0YWRhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLXN0b3JlLWZpeHR1cmU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZnRlci1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg2IGNsYXNzPVwic2VjdGlvbi1sYWJlbCBtYi0wXCI+QWZ0ZXI8L2g2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpeHR1cmUtd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1zdG9yZS1maXh0dXJlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaXh0dXJlXT1cInNlbGVjdGVkRml4dHVyZURhdGFcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0NvbG9yc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1ZNc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0JDc109XCIhaGlkZU1ldGFkYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJpc0FmdGVyRGlzYWJsZWQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItc3RvcmUtZml4dHVyZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTaG93IHNpbmdsZSBmaXh0dXJlIHdoZW4gbm8gZmluZCBkYXRhIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFzaG91bGRTaG93QmVmb3JlQWZ0ZXIoKSAmJiBzZWxlY3RlZEZpeHR1cmVEYXRhXCIgY2xhc3M9XCJzaW5nbGUtZml4dHVyZS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZml4dHVyZS13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItc3RvcmUtZml4dHVyZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaXh0dXJlXT1cInNlbGVjdGVkRml4dHVyZURhdGFcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Q29sb3JzXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dWTXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0JDc109XCIhaGlkZU1ldGFkYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLXN0b3JlLWZpeHR1cmU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIENvbGxhcHNlIEJ1dHRvbiAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYXBzZS1oYW5kbGVyIHJpZ2h0XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRGaXh0dXJlRGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVSaWdodFBhbmVsKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiaXNSaWdodFBhbmVsQ29sbGFwc2VkXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguMjczMDggMTIuNjM2TDQuNjM2NzIgOC45OTk2NEw4LjI3MzA4IDUuMzYzMjhNMTMuMzY0IDEyLjYzNkw5LjcyNzYzIDguOTk5NjRMMTMuMzY0IDUuMzYzMjhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNDU0NTVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCIhaXNSaWdodFBhbmVsQ29sbGFwc2VkXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkuNzI2OTIgNS4zNjM5OUwxMy4zNjMzIDkuMDAwMzZMOS43MjY5MiAxMi42MzY3TTQuNjM2MDEgNS4zNjM5OUw4LjI3MjM3IDkuMDAwMzZMNC42MzYwMSAxMi42MzY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIxLjQ1NDU1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIE5vIFByZXZpZXcgU2VjdGlvbiAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibm8tcHJldmlld1wiICpuZ0lmPVwiaGFzU3RvcmVzICYmICFzZWxlY3RlZFN0b3JlRm9yUHJldmlld1wiPlxyXG4gICAgICAgICAgICA8ZGl2ID5cclxuICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIzMTVcIiBoZWlnaHQ9XCIxNTVcIiB2aWV3Qm94PVwiMCAwIDMxNSAxNTVcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwMy44MSA0Ny4wMTk1Qzg5LjU0NjMgNDcuMDE5NyA3Ny45ODM0IDU4LjU4MjQgNzcuOTgzNCA3Mi44NDU3Qzc3Ljk4MzQgNzguNzYxNyA3My45ODAzIDg1LjUwNTkgNjguMDY0MyA4NS41MDU5SDQ1LjI1ODhDMzAuOTk1MyA4NS41MDU5IDE5LjQzMTYgOTcuMDY4NiAxOS40MzE2IDExMS4zMzJDMTkuNDMxNiAxMjUuNTk2IDMwLjk5NTMgMTM3LjE1OCA0NS4yNTg4IDEzNy4xNThIMTgzLjM1N0MyMDAuMjQ4IDEzNy4xNTggMjE2LjMyIDEyMy45OTIgMjMzLjIxIDEyMy45OTJIMjk5LjI0NUMzMDQgMTIzLjk5MiAzMDcuODU0IDEyMC4xMzcgMzA3Ljg1NCAxMTUuMzgzQzMwNy44NTMgMTEwLjYyOSAzMDMuOTk5IDEwNi43NzQgMjk5LjI0NSAxMDYuNzc0SDIxMS42MjVDMjA5Ljk4IDEwNi43NzQgMjA4LjU4OCAxMDUuNTUzIDIwOC4xMiAxMDMuOTc2QzIwNy4zODEgMTAxLjQ4NiAyMDkuMDgyIDk4LjY3MTkgMjExLjY3OSA5OC42NzE5SDI0MS45MDlDMjU2LjE3MiA5OC42NzE3IDI2Ny43MzUgODcuMTA5IDI2Ny43MzUgNzIuODQ1N0MyNjcuNzM1IDU4LjU4MjQgMjU2LjE3MiA0Ny4wMTk4IDI0MS45MDkgNDcuMDE5NUgxMDMuODFaXCIgZmlsbD1cIiNFQUVDRjBcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyNDAuNjk0XCIgaGVpZ2h0PVwiMTYuOTk1NlwiIHJ4PVwiOC40OTc4XCIgdHJhbnNmb3JtPVwibWF0cml4KC0xIDAgMCAxIDI0Ni42MDMgNDguODU3NClcIiBmaWxsPVwiI0VBRUNGMFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiNS40MjE0N1wiIGN5PVwiNS40MjE0N1wiIHI9XCI1LjQyMTQ3XCIgdHJhbnNmb3JtPVwibWF0cml4KC0xIDAgMCAxIDU2LjI5NzkgMTEzLjI4MSlcIiBmaWxsPVwiIzZCQ0FGRlwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMy4yNTI4OFwiIGN5PVwiMy4yNTI4OFwiIHI9XCIzLjI1Mjg4XCIgdHJhbnNmb3JtPVwibWF0cml4KC0xIDAgMCAxIDI0NC45NjUgNjguODI2MilcIiBmaWxsPVwiIzAwQTNGRlwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMy4yNTI4OFwiIGN5PVwiMy4yNTI4OFwiIHI9XCIzLjI1Mjg4XCIgdHJhbnNmb3JtPVwibWF0cml4KC0xIDAgMCAxIDIxNS42ODkgMTMuNTI3MylcIiBmaWxsPVwiIzAwQTNGRlwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMi4xNjg1OVwiIGN5PVwiMi4xNjg1OVwiIHI9XCIyLjE2ODU5XCIgdHJhbnNmb3JtPVwibWF0cml4KC0xIDAgMCAxIDEwNC4wMDYgMTM4LjIyMSlcIiBmaWxsPVwiIzAwQTNGRlwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNjguNTAxXCIgeT1cIjQ0LjE1MjNcIiB3aWR0aD1cIjE2Ni45OTlcIiBoZWlnaHQ9XCI5Ny45MzcxXCIgcng9XCIxNS4xMDE1XCIgZmlsbD1cIiM2QkNBRkZcIiBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiM1wiLz5cclxuICAgICAgICAgICAgICAgICAgICA8bWFzayBpZD1cInBhdGgtOC1pbnNpZGUtMV85MzZfMTUwMzgzXCIgZmlsbD1cIndoaXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05My4xMTcyIDE5Qzk0LjA2MjUgMTkgOTQuOTg5MiAxOS4wODI4IDk1Ljg4ODcgMTkuMjQyMlYxMTYuNzg0Qzk0Ljk4OTIgMTE2LjYyNSA5NC4wNjI1IDExNi41NDIgOTMuMTE3MiAxMTYuNTQySDgyLjc3NDRDNzQuMDY0MiAxMTYuNTQyIDY3LjAwMzEgMTIzLjYwMyA2Ny4wMDI5IDEzMi4zMTNWMzQuNzcxNUM2Ny4wMDI5IDI2LjA2MTIgNzQuMDY0MSAxOSA4Mi43NzQ0IDE5SDkzLjExNzJaXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWFzaz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkzLjExNzIgMTlDOTQuMDYyNSAxOSA5NC45ODkyIDE5LjA4MjggOTUuODg4NyAxOS4yNDIyVjExNi43ODRDOTQuOTg5MiAxMTYuNjI1IDk0LjA2MjUgMTE2LjU0MiA5My4xMTcyIDExNi41NDJIODIuNzc0NEM3NC4wNjQyIDExNi41NDIgNjcuMDAzMSAxMjMuNjAzIDY3LjAwMjkgMTMyLjMxM1YzNC43NzE1QzY3LjAwMjkgMjYuMDYxMiA3NC4wNjQxIDE5IDgyLjc3NDQgMTlIOTMuMTE3MlpcIiBmaWxsPVwiIzZCQ0FGRlwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkzLjExNzIgMTlMOTMuMTE3MyAxNkg5My4xMTcyVjE5Wk05NS44ODg3IDE5LjI0MjJIOTguODg4N1YxNi43MjcxTDk2LjQxMjIgMTYuMjg4Mkw5NS44ODg3IDE5LjI0MjJaTTk1Ljg4ODcgMTE2Ljc4NEw5NS4zNjUxIDExOS43MzhMOTguODg4NyAxMjAuMzYzVjExNi43ODRIOTUuODg4N1pNOTMuMTE3MiAxMTYuNTQyTDkzLjExNzMgMTEzLjU0Mkg5My4xMTcyVjExNi41NDJaTTY3LjAwMjkgMTMyLjMxM0g2NC4wMDI5TDcwLjAwMjkgMTMyLjMxNEw2Ny4wMDI5IDEzMi4zMTNaTTkzLjExNzIgMTlMOTMuMTE3MSAyMkM5My44ODcyIDIyIDk0LjYzODcgMjIuMDY3NCA5NS4zNjUxIDIyLjE5NjFMOTUuODg4NyAxOS4yNDIyTDk2LjQxMjIgMTYuMjg4MkM5NS4zMzk2IDE2LjA5ODEgOTQuMjM3NyAxNiA5My4xMTczIDE2TDkzLjExNzIgMTlaTTk1Ljg4ODcgMTkuMjQyMkg5Mi44ODg3VjExNi43ODRIOTUuODg4N0g5OC44ODg3VjE5LjI0MjJIOTUuODg4N1pNOTUuODg4NyAxMTYuNzg0TDk2LjQxMjIgMTEzLjgzQzk1LjMzOTYgMTEzLjY0IDk0LjIzNzcgMTEzLjU0MiA5My4xMTczIDExMy41NDJMOTMuMTE3MiAxMTYuNTQyTDkzLjExNzEgMTE5LjU0MkM5My44ODcyIDExOS41NDIgOTQuNjM4NyAxMTkuNjA5IDk1LjM2NTEgMTE5LjczOEw5NS44ODg3IDExNi43ODRaTTkzLjExNzIgMTE2LjU0MlYxMTMuNTQySDgyLjc3NDRWMTE2LjU0MlYxMTkuNTQySDkzLjExNzJWMTE2LjU0MlpNODIuNzc0NCAxMTYuNTQyVjExMy41NDJDNzIuNDA3MyAxMTMuNTQyIDY0LjAwMzIgMTIxLjk0NyA2NC4wMDI5IDEzMi4zMTNMNjcuMDAyOSAxMzIuMzEzTDcwLjAwMjkgMTMyLjMxNEM3MC4wMDMxIDEyNS4yNiA3NS43MjEyIDExOS41NDIgODIuNzc0NCAxMTkuNTQyVjExNi41NDJaTTY3LjAwMjkgMTMyLjMxM0g3MC4wMDI5VjM0Ljc3MTVINjcuMDAyOUg2NC4wMDI5VjEzMi4zMTNINjcuMDAyOVpNNjcuMDAyOSAzNC43NzE1SDcwLjAwMjlDNzAuMDAyOSAyNy43MTggNzUuNzIxIDIyIDgyLjc3NDQgMjJWMTlWMTZDNzIuNDA3MiAxNiA2NC4wMDI5IDI0LjQwNDMgNjQuMDAyOSAzNC43NzE1SDY3LjAwMjlaTTgyLjc3NDQgMTlWMjJIOTMuMTE3MlYxOVYxNkg4Mi43NzQ0VjE5WlwiIGZpbGw9XCIjMDBBM0ZGXCIgbWFzaz1cInVybCgjcGF0aC04LWluc2lkZS0xXzkzNl8xNTAzODMpXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaW5lIHgxPVwiNzYuOTYxOVwiIHkxPVwiNDIuNjUyM1wiIHgyPVwiNzYuOTYxOVwiIHkyPVwiODQuNDg4MVwiIHN0cm9rZT1cIiM5OURBRkZcIiBzdHJva2Utd2lkdGg9XCIzLjk4NDM2XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMjE4LjIwNlwiIGN5PVwiNzAuMTc1NVwiIHI9XCIzLjI5NjYzXCIgZmlsbD1cIndoaXRlXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMTEuNzg3XCIgY3k9XCI1NS4xNjdcIiByPVwiMi41MjYzN1wiIGZpbGw9XCIjOTlEQUZGXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI5OS4zODQ1XCIgY3k9XCIxMjQuOTg2XCIgcj1cIjMuNDQ1MDVcIiBmaWxsPVwid2hpdGVcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMzUuNTI5IDMzLjQ3MTdDMTUxLjI4NSAyNC4zNzQ5IDE3MS40MzIgMjkuNzczMiAxODAuNTI5IDQ1LjUyOTNDMTg4LjU2IDU5LjQzOTggMTg1LjI5MSA3Ni43NzA3IDE3My41NzMgODYuOTAwNEwxOTMuNDU3IDEyMS4zMzlDMTk0LjkzMiAxMjMuODk0IDE5NC4wNTYgMTI3LjE2MSAxOTEuNTAxIDEyOC42MzZDMTg4Ljk0NiAxMzAuMTExIDE4NS42NzkgMTI5LjIzNiAxODQuMjA0IDEyNi42ODFMMTY0LjQ2NiA5Mi40OTMyQzE0OS40NDcgOTguNjU1MiAxMzEuODE0IDkyLjkyIDEyMy40NzIgNzguNDcxN0MxMTQuMzc1IDYyLjcxNTYgMTE5Ljc3MyA0Mi41Njg1IDEzNS41MjkgMzMuNDcxN1pNMTcyLjY5OCA1MC4wNTE4QzE2Ni4wOTkgMzguNjIwOSAxNTEuNDgyIDM0LjcwNDEgMTQwLjA1MSA0MS4zMDM3QzEyOC42MiA0Ny45MDM1IDEyNC43MDMgNjIuNTIwNCAxMzEuMzAzIDczLjk1MTJDMTM3LjkwMiA4NS4zODE3IDE1Mi41MTkgODkuMjk3NyAxNjMuOTUgODIuNjk4MkMxNzUuMzgxIDc2LjA5ODcgMTc5LjI5NyA2MS40ODI2IDE3Mi42OTggNTAuMDUxOFpcIiBmaWxsPVwid2hpdGVcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjE1My4wMDFcIiBjeT1cIjU3LjAwMTdcIiByPVwiMjMuODk5NFwiIHRyYW5zZm9ybT1cInJvdGF0ZSgtMzAgMTUzLjAwMSA1Ny4wMDE3KVwiIGZpbGw9XCIjOTlEQUZGXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXNrIGlkPVwicGF0aC0xNi1pbnNpZGUtMl85MzZfMTUwMzgzXCIgZmlsbD1cIndoaXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNTMuMzg0IDQwLjk5NTdDMTUzLjQzNSAzOS43MDAxIDE1Mi40MjMgMzguNTkyNyAxNTEuMTMxIDM4LjcwOTVDMTQ4Ljg1OCAzOC45MTUxIDE0Ni42MzYgMzkuNTQ5MSAxNDQuNTg2IDQwLjU4NTRDMTQxLjgzNSA0MS45NzYgMTM5LjQ4NCA0NC4wNDUgMTM3Ljc1NSA0Ni41OTdDMTM2LjAyNiA0OS4xNDkgMTM0Ljk3NyA1Mi4wOTk2IDEzNC43MDYgNTUuMTcwMUMxMzQuNTA0IDU3LjQ1ODMgMTM0LjczOSA1OS43NTY4IDEzNS4zOTEgNjEuOTQ0N0MxMzUuNzYyIDYzLjE4NzIgMTM3LjE2NiA2My43MTY5IDEzOC4zNSA2My4xODkxQzEzOS41MzQgNjIuNjYxMiAxNDAuMDQ0IDYxLjI3NDYgMTM5LjczIDYwLjAxNjVDMTM5LjM3IDU4LjU3MzUgMTM5LjI1MSA1Ny4wNzUzIDEzOS4zODMgNTUuNTgzQzEzOS41ODQgNTMuMzA3OCAxNDAuMzYxIDUxLjEyMTQgMTQxLjY0MiA0OS4yMzA0QzE0Mi45MjQgNDcuMzM5NCAxNDQuNjY2IDQ1LjgwNjMgMTQ2LjcwNCA0NC43NzU4QzE0OC4wNDEgNDQuMSAxNDkuNDc3IDQzLjY1NTEgMTUwLjk1IDQzLjQ1NDJDMTUyLjIzNSA0My4yNzkyIDE1My4zMzMgNDIuMjkxMyAxNTMuMzg0IDQwLjk5NTdaXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWFzaz5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE1My4zODQgNDAuOTk1N0MxNTMuNDM1IDM5LjcwMDEgMTUyLjQyMyAzOC41OTI3IDE1MS4xMzEgMzguNzA5NUMxNDguODU4IDM4LjkxNTEgMTQ2LjYzNiAzOS41NDkxIDE0NC41ODYgNDAuNTg1NEMxNDEuODM1IDQxLjk3NiAxMzkuNDg0IDQ0LjA0NSAxMzcuNzU1IDQ2LjU5N0MxMzYuMDI2IDQ5LjE0OSAxMzQuOTc3IDUyLjA5OTYgMTM0LjcwNiA1NS4xNzAxQzEzNC41MDQgNTcuNDU4MyAxMzQuNzM5IDU5Ljc1NjggMTM1LjM5MSA2MS45NDQ3QzEzNS43NjIgNjMuMTg3MiAxMzcuMTY2IDYzLjcxNjkgMTM4LjM1IDYzLjE4OTFDMTM5LjUzNCA2Mi42NjEyIDE0MC4wNDQgNjEuMjc0NiAxMzkuNzMgNjAuMDE2NUMxMzkuMzcgNTguNTczNSAxMzkuMjUxIDU3LjA3NTMgMTM5LjM4MyA1NS41ODNDMTM5LjU4NCA1My4zMDc4IDE0MC4zNjEgNTEuMTIxNCAxNDEuNjQyIDQ5LjIzMDRDMTQyLjkyNCA0Ny4zMzk0IDE0NC42NjYgNDUuODA2MyAxNDYuNzA0IDQ0Ljc3NThDMTQ4LjA0MSA0NC4xIDE0OS40NzcgNDMuNjU1MSAxNTAuOTUgNDMuNDU0MkMxNTIuMjM1IDQzLjI3OTIgMTUzLjMzMyA0Mi4yOTEzIDE1My4zODQgNDAuOTk1N1pcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjZcIiBtYXNrPVwidXJsKCNwYXRoLTE2LWluc2lkZS0yXzkzNl8xNTAzODMpXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTM2LjUyOSAyOC40NzE3QzE1Mi4yODUgMTkuMzc0OSAxNzIuNDMyIDI0Ljc3MzIgMTgxLjUyOSA0MC41MjkzQzE4OS41NiA1NC40Mzk4IDE4Ni4yOTEgNzEuNzcwNyAxNzQuNTczIDgxLjkwMDRMMTk0LjQ1NyAxMTYuMzM5QzE5NS45MzIgMTE4Ljg5NCAxOTUuMDU2IDEyMi4xNjEgMTkyLjUwMSAxMjMuNjM2QzE4OS45NDYgMTI1LjExMSAxODYuNjc5IDEyNC4yMzYgMTg1LjIwNCAxMjEuNjgxTDE2NS40NjYgODcuNDkzMkMxNTAuNDQ3IDkzLjY1NTIgMTMyLjgxNCA4Ny45MiAxMjQuNDcyIDczLjQ3MTdDMTE1LjM3NSA1Ny43MTU2IDEyMC43NzMgMzcuNTY4NSAxMzYuNTI5IDI4LjQ3MTdaTTE3My42OTggNDUuMDUxOEMxNjcuMDk5IDMzLjYyMDkgMTUyLjQ4MiAyOS43MDQxIDE0MS4wNTEgMzYuMzAzN0MxMjkuNjIgNDIuOTAzNSAxMjUuNzAzIDU3LjUyMDQgMTMyLjMwMyA2OC45NTEyQzEzOC45MDIgODAuMzgxNyAxNTMuNTE5IDg0LjI5NzcgMTY0Ljk1IDc3LjY5ODJDMTc2LjM4MSA3MS4wOTg3IDE4MC4yOTcgNTYuNDgyNiAxNzMuNjk4IDQ1LjA1MThaXCIgZmlsbD1cIiMwMEEzRkZcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxoMz5ObyBwcmV2aWV3IHlldDwvaDM+XHJcbiAgICAgICAgICAgIDxwPkFkZCBhIGZpbmQgYW5kIHJlcGxhY2VtZW50IHRvIHByZXZpZXcuPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIEFjdGlvbiBCdXR0b24gU2VjdGlvbiAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWJ1dHRvbi1zZWN0aW9uXCIgKm5nSWY9XCJoYXNTdG9yZXNcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1hcHBseVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25SZXZpZXdBbmRSZXBsYWNlKClcIiBbZGlzYWJsZWRdPVwibG9hZGluZyB8fCBmaW5kTG9hZGluZyB8fCByZXBsYWNlTG9hZGluZyB8fCBiYXRjaFByb2Nlc3NpbmcgfHwgIWZpbmRQcm9tcHQudmFsdWUgfHwgIWhhc1JlcGxhY2VTZWxlY3Rpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAge3sgYmF0Y2hQcm9jZXNzaW5nID8gJ1Byb2Nlc3NpbmcuLi4nIDogJ1JldmlldyBBbmQgUmVwbGFjZScgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Zvcm0+XHJcbjwvZGl2PlxyXG4iXX0=
|