@wavemaker/app-ng-runtime 12.0.0-next.45191 → 12.0.0-next.45196
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.
- app-ng-runtime/build-task/bundles/index.umd.js +7 -7
- app-ng-runtime/build-task/esm2022/containers/accordion/accordion-pane/accordion-pane.build.mjs +2 -2
- app-ng-runtime/build-task/esm2022/containers/accordion/accordion.build.mjs +3 -3
- app-ng-runtime/build-task/esm2022/containers/wizard/wizard.build.mjs +2 -2
- app-ng-runtime/build-task/esm2022/data/form/form-field/form-field.build.mjs +3 -3
- app-ng-runtime/build-task/esm2022/input/chips/chips.build.mjs +2 -2
- app-ng-runtime/build-task/esm2022/input/file-upload/file-upload.build.mjs +2 -2
- app-ng-runtime/build-task/fesm2022/index.mjs +7 -7
- app-ng-runtime/build-task/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/base/bundles/index.umd.js +0 -5
- app-ng-runtime/components/base/esm2022/widgets/common/base/base.component.mjs +1 -6
- app-ng-runtime/components/base/fesm2022/index.mjs +0 -5
- app-ng-runtime/components/base/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/basic/default/audio/audio.component.d.ts +2 -0
- app-ng-runtime/components/basic/default/bundles/index.umd.js +18 -7
- app-ng-runtime/components/basic/default/esm2022/audio/audio.component.mjs +13 -5
- app-ng-runtime/components/basic/default/esm2022/video/video.component.mjs +7 -4
- app-ng-runtime/components/basic/default/fesm2022/index.mjs +18 -7
- app-ng-runtime/components/basic/default/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/basic/default/video/video.component.d.ts +1 -0
- app-ng-runtime/components/basic/progress/bundles/index.umd.js +7 -3
- app-ng-runtime/components/basic/progress/esm2022/progress-bar/progress-bar.component.mjs +8 -4
- app-ng-runtime/components/basic/progress/fesm2022/index.mjs +7 -3
- app-ng-runtime/components/basic/progress/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/basic/progress/progress-bar/progress-bar.component.d.ts +1 -0
- app-ng-runtime/components/basic/search/bundles/index.umd.js +7 -2
- app-ng-runtime/components/basic/search/esm2022/search.component.mjs +8 -3
- app-ng-runtime/components/basic/search/fesm2022/index.mjs +7 -2
- app-ng-runtime/components/basic/search/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/basic/search/search.component.d.ts +3 -2
- app-ng-runtime/components/chart/bundles/index.umd.js +2 -1
- app-ng-runtime/components/chart/esm2022/chart.utils.mjs +3 -2
- app-ng-runtime/components/chart/fesm2022/index.mjs +2 -1
- app-ng-runtime/components/chart/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +1 -0
- app-ng-runtime/components/containers/accordion/bundles/index.umd.js +15 -9
- app-ng-runtime/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +13 -10
- app-ng-runtime/components/containers/accordion/esm2022/accordion.directive.mjs +4 -1
- app-ng-runtime/components/containers/accordion/fesm2022/index.mjs +15 -9
- app-ng-runtime/components/containers/accordion/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/containers/wizard/bundles/index.umd.js +6 -6
- app-ng-runtime/components/containers/wizard/esm2022/wizard.component.mjs +7 -7
- app-ng-runtime/components/containers/wizard/fesm2022/index.mjs +6 -6
- app-ng-runtime/components/containers/wizard/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/data/list/bundles/index.umd.js +20 -12
- app-ng-runtime/components/data/list/esm2022/list-item.directive.mjs +10 -1
- app-ng-runtime/components/data/list/esm2022/list.component.mjs +13 -13
- app-ng-runtime/components/data/list/fesm2022/index.mjs +21 -13
- app-ng-runtime/components/data/list/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/chips/bundles/index.umd.js +24 -7
- app-ng-runtime/components/input/chips/esm2022/chips.component.mjs +25 -8
- app-ng-runtime/components/input/chips/fesm2022/index.mjs +24 -7
- app-ng-runtime/components/input/chips/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/default/bundles/index.umd.js +21 -5
- app-ng-runtime/components/input/default/esm2022/base-form.component.mjs +3 -3
- app-ng-runtime/components/input/default/esm2022/text/locale/number-locale.mjs +20 -4
- app-ng-runtime/components/input/default/fesm2022/index.mjs +21 -5
- app-ng-runtime/components/input/default/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/epoch/base-date-time.component.d.ts +3 -1
- app-ng-runtime/components/input/epoch/bundles/index.umd.js +22 -14
- app-ng-runtime/components/input/epoch/esm2022/base-date-time.component.mjs +13 -6
- app-ng-runtime/components/input/epoch/esm2022/date/date.component.mjs +4 -4
- app-ng-runtime/components/input/epoch/esm2022/date/date.props.mjs +2 -1
- app-ng-runtime/components/input/epoch/esm2022/date-time/date-time.component.mjs +4 -4
- app-ng-runtime/components/input/epoch/fesm2022/index.mjs +19 -11
- app-ng-runtime/components/input/epoch/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/file-upload/bundles/index.umd.js +80 -64
- app-ng-runtime/components/input/file-upload/esm2022/file-upload.component.mjs +80 -65
- app-ng-runtime/components/input/file-upload/esm2022/file-upload.props.mjs +3 -2
- app-ng-runtime/components/input/file-upload/fesm2022/index.mjs +81 -65
- app-ng-runtime/components/input/file-upload/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/file-upload/file-upload.component.d.ts +7 -2
- app-ng-runtime/components/input/rating/bundles/index.umd.js +2 -2
- app-ng-runtime/components/input/rating/esm2022/rating.component.mjs +3 -3
- app-ng-runtime/components/input/rating/fesm2022/index.mjs +2 -2
- app-ng-runtime/components/input/rating/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/navigation/breadcrumb/bundles/index.umd.js +6 -6
- app-ng-runtime/components/navigation/breadcrumb/esm2022/breadcrumb.component.mjs +7 -7
- app-ng-runtime/components/navigation/breadcrumb/fesm2022/index.mjs +6 -6
- app-ng-runtime/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/page/left-panel/bundles/index.umd.js +10 -3
- app-ng-runtime/components/page/left-panel/esm2022/left-panel.directive.mjs +11 -4
- app-ng-runtime/components/page/left-panel/fesm2022/index.mjs +10 -3
- app-ng-runtime/components/page/left-panel/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/page/left-panel/left-panel.directive.d.ts +2 -2
- app-ng-runtime/components/page/right-panel/bundles/index.umd.js +2 -2
- app-ng-runtime/components/page/right-panel/esm2022/right-panel.directive.mjs +3 -3
- app-ng-runtime/components/page/right-panel/fesm2022/index.mjs +2 -2
- app-ng-runtime/components/page/right-panel/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/page/right-panel/right-panel.directive.d.ts +1 -1
- app-ng-runtime/package.json +1 -1
- app-ng-runtime/scripts/datatable/datatable.js +9 -5
- app-ng-runtime/variables/bundles/index.umd.js +34 -16
- app-ng-runtime/variables/esm2022/manager/variable/web-socket-variable.manager.mjs +35 -17
- app-ng-runtime/variables/fesm2022/index.mjs +34 -16
- app-ng-runtime/variables/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/variables/manager/variable/web-socket-variable.manager.d.ts +0 -4
@@ -811,7 +811,12 @@ export class SearchComponent extends DatasetAwareFormComponent {
|
|
811
811
|
super.ngAfterViewInit();
|
812
812
|
styler(this.nativeElement, this);
|
813
813
|
this.containerTarget = getContainerTargetClass(this.nativeElement);
|
814
|
-
|
814
|
+
}
|
815
|
+
ngAfterViewChecked() {
|
816
|
+
const searchInputEl = $('.app-search-input');
|
817
|
+
if (searchInputEl) {
|
818
|
+
searchInputEl.removeAttr('aria-expanded');
|
819
|
+
}
|
815
820
|
}
|
816
821
|
eventData($event, item) {
|
817
822
|
if ($event) {
|
@@ -928,5 +933,5 @@ export class SearchComponent extends DatasetAwareFormComponent {
|
|
928
933
|
type: ViewChildren,
|
929
934
|
args: ['liElements']
|
930
935
|
}] }); })();
|
931
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SearchComponent, { className: "SearchComponent", filePath: "search.component.ts", lineNumber:
|
932
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9iYXNpYy9zZWFyY2gvc3JjL3NlYXJjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvYmFzaWMvc2VhcmNoL3NyYy9zZWFyY2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBRVIsUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxhQUFhLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRCxPQUFPLEVBQThCLGtCQUFrQixFQUFpQixNQUFNLHlCQUF5QixDQUFDO0FBRXhHLE9BQU8sRUFBQyxRQUFRLEVBQUUsdUJBQXVCLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUM1RyxPQUFPLEVBQ0gsU0FBUyxFQUNULG1CQUFtQixFQUVuQixrQkFBa0IsRUFDbEIsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUN0QixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLE1BQU0sRUFDTixpQkFBaUIsRUFDcEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUUvRCxPQUFPLEVBQUMs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QUF0QkEsQUFaQSxpSEFBd0csb0dBWUMsc0VBc0JqRCxzR0F1QzNCOzs7WUF2Q2QsZUFBb0I7WUFBQSxBQUFwQix1Q0FBb0IsZ0NBQW1COzs7aUZEOEJ6QyxlQUFlO2NBVDNCLFNBQVM7MkJBQ0ksWUFBWSxhQUVYO29CQUNQLFNBQVMsa0JBQWtCLGlCQUFpQixFQUFFLElBQUksQ0FBQztvQkFDbkQsU0FBUyxrQkFBa0IsYUFBYSxFQUFFLElBQUksQ0FBQztvQkFDL0Msa0JBQWtCLGlCQUFpQjtpQkFDdEM7O3NCQStFSSxTQUFTO3VCQUFDLGdCQUFnQjs7c0JBQzFCLFNBQVM7dUJBQUMsY0FBYzs7c0JBQ3hCLE1BQU07dUJBQUMsa0JBQWtCOztzQkFBRyxRQUFRO3FCQTVDVixTQUFTO2tCQUF2QyxTQUFTO21CQUFDLGtCQUFrQjtZQUNMLFNBQVM7a0JBQWhDLFNBQVM7bUJBQUMsV0FBVztZQUNNLFVBQVU7a0JBQXJDLFlBQVk7bUJBQUMsWUFBWTs7a0ZBckNqQixlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEF0dHJpYnV0ZSxcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge2Zyb20sIE9ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZmlsdGVyLCBtZXJnZU1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1R5cGVhaGVhZENvbnRhaW5lckNvbXBvbmVudCwgVHlwZWFoZWFkRGlyZWN0aXZlLCBUeXBlYWhlYWRNYXRjaH0gZnJvbSAnbmd4LWJvb3RzdHJhcC90eXBlYWhlYWQnO1xuXG5pbXBvcnQge2FkZENsYXNzLCBhZGp1c3RDb250YWluZXJQb3NpdGlvbiwgQXBwLCBEYXRhU291cmNlLCBpc0RlZmluZWQsIGlzTW9iaWxlLCB0b0Jvb2xlYW59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7XG4gICAgQUxMRklFTERTLFxuICAgIGNvbnZlcnREYXRhVG9PYmplY3QsXG4gICAgRGF0YVNldEl0ZW0sXG4gICAgZXh0cmFjdERhdGFBc0FycmF5LFxuICAgIGdldENvbnRhaW5lclRhcmdldENsYXNzLFxuICAgIGdldFVuaXFPYmpzQnlEYXRhRmllbGQsXG4gICAgcHJvdmlkZUFzLFxuICAgIHByb3ZpZGVBc1dpZGdldFJlZixcbiAgICBzdHlsZXIsXG4gICAgdHJhbnNmb3JtRm9ybURhdGFcbn0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQge0RhdGFzZXRBd2FyZUZvcm1Db21wb25lbnR9IGZyb20gJ0B3bS9jb21wb25lbnRzL2lucHV0JztcblxuaW1wb3J0IHtyZWdpc3RlclByb3BzfSBmcm9tICcuL3NlYXJjaC5wcm9wcyc7XG5pbXBvcnQge0RhdGFQcm92aWRlciwgSURhdGFQcm92aWRlciwgSURhdGFQcm92aWRlckNvbmZpZ30gZnJvbSAnLi9kYXRhLXByb3ZpZGVyL2RhdGEtcHJvdmlkZXInO1xuaW1wb3J0IHtcbiAgICBkZWJvdW5jZSxcbiAgICBmaW5kLFxuICAgIGdldCxcbiAgICBpbmNsdWRlcyxcbiAgICBpc0FycmF5LFxuICAgIGlzRW1wdHksXG4gICAgaXNFcXVhbCxcbiAgICBpc09iamVjdCxcbiAgICBpc1VuZGVmaW5lZCxcbiAgICBtYXAsXG4gICAgc3BsaXQsXG4gICAgdG9TdHJpbmcsXG4gICAgdHJpbVxufSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmNvbnN0IFdJREdFVF9DT05GSUcgPSB7IHdpZGdldFR5cGU6ICd3bS1zZWFyY2gnLCBob3N0Q2xhc3M6ICdpbnB1dC1ncm91cCcgfTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdbd21TZWFyY2hdJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzKFNlYXJjaENvbXBvbmVudCwgTkdfVkFMVUVfQUNDRVNTT1IsIHRydWUpLFxuICAgICAgICBwcm92aWRlQXMoU2VhcmNoQ29tcG9uZW50LCBOR19WQUxJREFUT1JTLCB0cnVlKSxcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKFNlYXJjaENvbXBvbmVudClcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaENvbXBvbmVudCBleHRlbmRzIERhdGFzZXRBd2FyZUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICAgIHN0YXRpYyBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlclByb3BzKCk7XG4gICAgcHVibGljIGNhc2VzZW5zaXRpdmU6IGJvb2xlYW47XG4gICAgcHVibGljIHNlYXJjaGtleTogc3RyaW5nO1xuICAgIHB1YmxpYyBxdWVyeU1vZGVsOiBBcnJheTxEYXRhU2V0SXRlbT4gfCBzdHJpbmc7XG4gICAgcHVibGljIHF1ZXJ5ID0gJyc7XG4gICAgcHVibGljIGxpbWl0OiBhbnk7XG4gICAgcHVibGljIHNob3dzZWFyY2hpY29uOiBib29sZWFuO1xuICAgIHB1YmxpYyBtaW5jaGFyczogbnVtYmVyO1xuICAgIHB1YmxpYyB0eXBlOiBzdHJpbmc7XG4gICAgcHVibGljIG5hdnNlYXJjaGJhcjogYW55O1xuICAgIHB1YmxpYyBkZWJvdW5jZXRpbWU6IG51bWJlcjtcbiAgICBwdWJsaWMgaGludDogc3RyaW5nO1xuICAgIHB1YmxpYyBhcmlhbGFiZWw6IHN0cmluZztcblxuICAgIHByaXZhdGUgYXBwOiBBcHA7XG4gICAgcHJpdmF0ZSB0eXBlYWhlYWREYXRhU291cmNlOiBPYnNlcnZhYmxlPGFueT47XG4gICAgcHJpdmF0ZSBwYWdlc2l6ZTogYW55O1xuICAgIHByaXZhdGUgcGFnZSA9IDE7XG4gICAgcHVibGljIF9sb2FkaW5nSXRlbXM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBkYXRhUHJvdmlkZXI6IElEYXRhUHJvdmlkZXI7XG4gICAgcHJpdmF0ZSByZXN1bHQ6IEFycmF5PGFueT47IC8vIGNvbnRhaW5zIHRoZSBzZWFyY2ggcmVzdWx0IGkuZS4gbWF0Y2hlc1xuICAgIHByaXZhdGUgZm9ybWF0dGVkRGF0YXNldDogYW55O1xuICAgIHByaXZhdGUgaXNmb3JtZmllbGQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSAkdHlwZWFoZWFkRXZlbnQ6IEV2ZW50O1xuXG4gICAgcHVibGljIHRhYmluZGV4OiBudW1iZXI7XG4gICAgcHVibGljIHN0YXJ0SW5kZXg6IG51bWJlcjtcbiAgICBwdWJsaWMgYmluZGRpc3BsYXlsYWJlbDogc3RyaW5nO1xuICAgIHB1YmxpYyB0eXBlYWhlYWRDb250YWluZXI6IFR5cGVhaGVhZENvbnRhaW5lckNvbXBvbmVudDtcbiAgICBwdWJsaWMgY29udGFpbmVyVGFyZ2V0OiBzdHJpbmc7XG4gICAgcHVibGljIGNsZWFyc2VhcmNoaWNvbmNsYXNzOiBzdHJpbmc7XG4gICAgcHVibGljIGJhY2tzZWFyY2hpY29uY2xhc3M6IHN0cmluZztcbiAgICBwdWJsaWMgc2VhcmNoaWNvbmNsYXNzOiBzdHJpbmc7XG5cbiAgICBAVmlld0NoaWxkKFR5cGVhaGVhZERpcmVjdGl2ZSkgdHlwZWFoZWFkOiBUeXBlYWhlYWREaXJlY3RpdmU7XG4gICAgQFZpZXdDaGlsZCgndWxFbGVtZW50JykgdWxFbGVtZW50OiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGRyZW4oJ2xpRWxlbWVudHMnKSBsaUVsZW1lbnRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgICBwcml2YXRlIGFsbG93b25seXNlbGVjdDogYm9vbGVhbjtcbiAgICBwcml2YXRlIGNsYXNzOiBzdHJpbmc7XG5cbiAgICBwcml2YXRlIGxhc3RTZWxlY3RlZEluZGV4OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBkYXRhb3B0aW9uczogYW55O1xuICAgIHB1YmxpYyBkcm9wZG93bkVsOiBhbnk7XG4gICAgcHJpdmF0ZSBfbGFzdFF1ZXJ5OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfbGFzdFJlc3VsdDogYW55O1xuICAgIHByaXZhdGUgX2lzT3BlbjogYm9vbGVhbjsgLy8gc2V0IHRvIHRydWUgd2hlbiBkcm9wZG93biBpcyBvcGVuXG4gICAgcHJpdmF0ZSBzaG93Q2xvc2VidG46IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVEdjogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9kYXRhc291cmNlOiBhbnk7XG4gICAgcHJpdmF0ZSBpc1Njcm9sbGVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgcGFyZW50RWw6IGFueTtcbiAgICBwcml2YXRlIHBvc2l0aW9uOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBlbEluZGV4OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBsaXN0ZW5RdWVyeTogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9kb21VcGRhdGVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgc2VhcmNob246IHN0cmluZztcbiAgICBwcml2YXRlIHNob3djbGVhcjogYm9vbGVhbjtcbiAgICBwdWJsaWMgbWF0Y2htb2RlOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBjbGVhckRhdGE6IGJvb2xlYW47XG5cblxuICAgIC8vIGdldHRlciBzZXR0ZXIgaXMgYWRkZWQgdG8gcGFzcyB0aGUgZGF0YXNvdXJjZSB0byBzZWFyY2hjb21wb25lbnQuXG4gICAgZ2V0IGRhdGFzb3VyY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhc291cmNlO1xuICAgIH1cblxuICAgIHNldCBkYXRhc291cmNlKG52KSB7XG4gICAgICAgIHRoaXMuX2RhdGFzb3VyY2UgPSBudjtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YXZhbHVlIHx8IHRoaXMudG9CZVByb2Nlc3NlZERhdGF2YWx1ZTtcbiAgICAgICAgdGhpcy51cGRhdGVCeURhdGF2YWx1ZShkYXRhKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qOiBJbmplY3RvcixcbiAgICAgICAgYXBwOiBBcHAsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2RhdGF2YWx1ZS5iaW5kJykgcHVibGljIGJpbmRkYXRhdmFsdWUsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2RhdGFzZXQuYmluZCcpIHB1YmxpYyBiaW5kZGF0YXNldCxcbiAgICAgICAgQEluamVjdCgnRVhQTElDSVRfQ09OVEVYVCcpIEBPcHRpb25hbCgpIGV4cGxpY2l0Q29udGV4dDogYW55XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRywgZXhwbGljaXRDb250ZXh0KTtcbiAgICAgICAgLy8gdGhpcyBmbGFnIHdpbGwgbm90IGFsbG93IHRoZSBlbXB0eSBkYXRhZmllbGQgdmFsdWVzLlxuICAgICAgICB0aGlzLmFsbG93ZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hcHAgPSBhcHA7XG4gICAgICAgIGFkZENsYXNzKHRoaXMubmF0aXZlRWxlbWVudCwgJ2FwcC1zZWFyY2gnLCB0cnVlKTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogTGlzdGVucyBmb3IgdGhlIGNoYW5nZSBpbiB0aGUgbmdNb2RlbCBvbiBldmVyeSBzZWFyY2ggYW5kIHJldHJpZXZlcyB0aGUgZGF0YSBhcyBvYnNlcnZhYmxlLlxuICAgICAgICAgKiBUaGlzIG9ic2VydmFibGUgZGF0YSBpcyBwYXNzZWQgdG8gdGhlIHR5cGVhaGVhZC5cbiAgICAgICAgICogQHR5cGUge09ic2VydmFibGU8YW55Pn1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudHlwZWFoZWFkRGF0YVNvdXJjZSA9IE9ic2VydmFibGVcbiAgICAgICAgICAgIC5jcmVhdGUoKG9ic2VydmVyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBSdW5zIG9uIGV2ZXJ5IHNlYXJjaFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpc3RlblF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRRdWVyeUludm9rZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh0aGlzLnF1ZXJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gb24ga2V5ZG93biwgd2hpbGUgc2Nyb2xsaW5nIHRoZSBkcm9wZG93biBpdGVtcywgd2hlbiBsYXN0IGl0ZW0gaXMgcmVhY2hlZCBuZXh0IGNhbGwgaXMgdHJpZ2dlcmVkXG4gICAgICAgICAgICAgICAgLy8gdW5sZXNzIHRoZSBjYWxsIGlzIHJlc29sdmVkLCB3ZSBhcmUgYWJsZSB0byBzY3JvbGwgbmV4dCB0byBmaXJzdCBpdGVtIGFuZCBzb29uXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBzaG93cyBmbGlja2VyaW5nIGZyb20gZmlyc3QgaXRlbSB0byBuZXh0IG5ldyBpdGVtcyBhcHBlbmRlZC5cbiAgICAgICAgICAgICAgICAvLyBCeSBzZXR0aW5nIGNvbnRhaW5lciB0byB1bmRlZmluZWQsIGtleSBldmVudHMgY2hhbmdlcyB3aWxsIGJlIHN0b3BwZWQgd2hpbGUgbG9hZGluZyBpdGVtc1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxhc3RTZWxlY3RlZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkLl9jb250YWluZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLm1pbmNoYXJzID09PSAwIHx8ICh0aGlzLnF1ZXJ5ICYmIHRoaXMucXVlcnkubGVuZ3RoID49IHRoaXMubWluY2hhcnMpKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgodG9rZW46IHN0cmluZykgPT4gdGhpcy5nZXREYXRhU291cmNlQXNPYnNlcnZhYmxlKHRva2VuKSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXIgPSBuZXcgRGF0YVByb3ZpZGVyKCk7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdoZW4gZGVmYXVsdCBkYXRhdmFsdWUgaXMgbm90IGZvdW5kIHdpdGhpbiB0aGUgZGF0YXNldCwgYSBmaWx0ZXIgY2FsbCBpcyBtYWRlIHRvIGdldCB0aGUgcmVjb3JkIHVzaW5nIGZldGNoRGVmYXVsdE1vZGVsLlxuICAgICAgICAgKiBhZnRlciBnZXR0aW5nIHRoZSByZXNwb25zZSwgc2V0IHRoZSBxdWVyeU1vZGVsIGFuZCBxdWVyeS5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGRhdGF2YWx1ZVN1YnNjcmlwdGlvbiA9IHRoaXMuZGF0YXZhbHVlJC5zdWJzY3JpYmUoKHZhbDogQXJyYXk8c3RyaW5nPiB8IHN0cmluZykgPT4ge1xuXG4gICAgICAgICAgICBjb25zdCBxdWVyeSA9IChpc0FycmF5KHZhbCkgPyB2YWxbMF0gOiB2YWwpIGFzIHN0cmluZztcblxuICAgICAgICAgICAgaWYgKHF1ZXJ5ID09PSBudWxsIHx8IHF1ZXJ5ID09PSAnJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vZGVsQnlWYWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgIC8vIHJlc2V0IHRoZSBxdWVyeS5cbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy5xdWVyeU1vZGVsID0gJyc7XG4gICAgICAgICAgICAgICAgLy8gb24gY2xlYXIgb3IgcmVzZXQgZmlsdGVyLCBlbXB0eSB0aGUgbGFzdFJlc3VsdHMgdG8gZmV0Y2ggbmV3IHJlY29yZHMuXG4gICAgICAgICAgICAgICAgdGhpcy5fbGFzdFJlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fdW5zdWJzY3JpYmVEdikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RlZmF1bHRRdWVyeUludm9rZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBpZiBwcmV2IGRhdGF2YWx1ZSBpcyBub3QgZXF1YWwgdG8gY3VycmVudCBkYXRhdmFsdWUgdGhlbiBjbGVhciB0aGUgbW9kZWxCeUtleSBhbmQgcXVlcnlNb2RlbFxuICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QodmFsKSAmJiAodGhpcyBhcyBhbnkpLnByZXZEYXRhdmFsdWUgIT09IHZhbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb2RlbEJ5S2V5ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy5xdWVyeU1vZGVsID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBkYXRhZmllbGQgaXMgQUxMRklMRURTIGRvIG5vdCBmZXRjaCB0aGUgcmVjb3Jkc1xuICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgcXVlcnkgbW9kZWwgd2l0aCB0aGUgdmFsdWVzIHdlIGhhdmVcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUJ5RGF0YXZhbHVlKHZhbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHR1cm4gb24gc2hvd0Nsb3NlQnRuIHdoZW4gYSBkZWZhdWx0IHZhbHVlIGlzIGdpdmVuXG4gICAgICAgICAgICB0aGlzLnNob3dDbG9zZWJ0biA9ICh0aGlzLnF1ZXJ5ICE9PSAnJyk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCgpID0+IGRhdGF2YWx1ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcblxuICAgICAgICBjb25zdCBkYXRhc2V0U3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhc2V0JC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgLy8gc2V0IHRoZSBuZXh0IGl0ZW0gaW5kZXguXG4gICAgICAgICAgICB0aGlzLnN0YXJ0SW5kZXggPSB0aGlzLmRhdGFzZXRJdGVtcy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLl9sYXN0UmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gdGhpcy5kYXRhdmFsdWUgfHwgdGhpcy50b0JlUHJvY2Vzc2VkRGF0YXZhbHVlO1xuICAgICAgICAgICAgLy8gaW52b2tpbmcgdXBkYXRlQnlEYXRhc2V0IG9ubHkgd2hlbiBkYXRhdmFsdWUgaXMgcHJlc2VudCwgYXMgZW50ZXJlZCB2YWx1ZSBpLmUuIHF1ZXJ5IGlzIHNldHRpbmcgYmFjayB0byAnJ1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZChkZWZhdWx0VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVCeURhdGFzZXQoZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gZGF0YXNldFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcbiAgICB9XG5cbiAgICAvLyBvbiBjbGVhciwgdHJpZ2dlciBzZWFyY2ggd2l0aCBwYWdlIHNpemUgMVxuICAgIHByaXZhdGUgY2xlYXJTZWFyY2goJGV2ZW50LCBsb2FkT25DbGVhcikge1xuICAgICAgICB0aGlzLnF1ZXJ5ID0gJyc7XG4gICAgICAgIHRoaXMub25JbnB1dENoYW5nZSgkZXZlbnQpO1xuICAgICAgICB0aGlzLmRhdGFQcm92aWRlci5pc0xhc3RQYWdlID0gZmFsc2U7XG4gICAgICAgIHRoaXMubGlzdGVuUXVlcnkgPSBmYWxzZTtcbiAgICAgICAgaWYgKGxvYWRPbkNsZWFyKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RlblF1ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlRHYgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vcmVEYXRhKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjbGVhcnNlYXJjaCcpO1xuICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgLy8gd2hlbiBzZWFyY2ggaW5wdXQgaXMgY2xlYXJlZCwgZm9jdXMgb24gdGhlIGlucHV0IGZpZWxkXG4gICAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnLmFwcC1zZWFyY2gtaW5wdXQnKS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZnVuY3Rpb24gdG8gIGNsZWFyIHRoZSBpbnB1dCB2YWx1ZVxuICAgIHB1YmxpYyBjbGVhclRleHQoKSB7XG4gICAgICAgIHRoaXMucXVlcnkgPSAnJztcbiAgICAgICAgdGhpcy5zaG93Q2xvc2VidG4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBDbG9zZSB0aGUgZnVsbCBzY3JlZW4gbW9kZSBpbiBtb2JpbGUgdmlldyBvZiBhdXRvIGNvbXBsZXRlXG4gICAgcHJpdmF0ZSBjbG9zZVNlYXJjaCgpIHtcbiAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGFnZSA9IDE7XG4gICAgICAgIC8vIGFmdGVyIGNsb3NpbmcgdGhlIHNlYXJjaCwgaW5zZXJ0IHRoZSBlbGVtZW50IGF0IGl0cyBwcmV2aW91cyBwb3NpdGlvbiAoZWxJbmRleClcbiAgICAgICAgdGhpcy5pbnNlcnRBdEluZGV4KHRoaXMuZWxJbmRleCk7XG4gICAgICAgIHRoaXMuZWxJbmRleCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5wYXJlbnRFbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygnZnVsbC1zY3JlZW4nKTtcbiAgICAgICAgaWYgKHRoaXMuX2RvbVVwZGF0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2RvbVVwZGF0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxpc3RlblF1ZXJ5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlRHYgPSB0cnVlO1xuICAgICAgICB0aGlzLnR5cGVhaGVhZC5oaWRlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJNb2JpbGVBdXRvQ29tcGxldGUoKSB7XG4gICAgICAgIC8vIEdldCB0aGUgcGFyZW50IGVsZW1lbnQgb2YgdGhlIHNlYXJjaCBlbGVtZW50IHdoaWNoIGNhbiBiZSBuZXh0IG9yIHByZXYgZWxlbWVudCwgaWYgYm90aCBhcmUgZW1wdHkgdGhlbiBnZXQgdGhlIHBhcmVudCBvZiBlbGVtZW50LlxuICAgICAgICBpZiAoIWlzRGVmaW5lZCh0aGlzLmVsSW5kZXgpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudEVsID0gdGhpcy4kZWxlbWVudC5wYXJlbnQoKTtcbiAgICAgICAgICAgIHRoaXMuZWxJbmRleCA9IHRoaXMucGFyZW50RWwuY2hpbGRyZW4oKS5pbmRleCh0aGlzLiRlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2Z1bGwtc2NyZWVuJykpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgZmxhZyBpcyBzZXQgdG8gbm90aWZ5IHRoYXQgdGhlIHR5cGVhaGVhZC1jb250YWluZXIgZG9tIGhhcyBjaGFuZ2VkIGl0cyBwb3NpdGlvblxuICAgICAgICAgICAgdGhpcy5fZG9tVXBkYXRlZCA9IHRydWU7XG4gICAgICAgICAgICAvLyBBZGQgZnVsbCBzY3JlZW4gY2xhc3Mgb24gZm9jdXMgb2YgdGhlIGlucHV0IGVsZW1lbnQuXG4gICAgICAgICAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKCdmdWxsLXNjcmVlbicpO1xuXG4gICAgICAgICAgICAvLyBBZGQgcG9zaXRpb24gdG8gc2V0IHRoZSBoZWlnaHQgdG8gYXV0b1xuICAgICAgICAgICAgaWYgKHRoaXMucG9zaXRpb24gPT09ICdpbmxpbmUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5hZGRDbGFzcyh0aGlzLnBvc2l0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBmb2N1cyBpcyBsb3N0IHdoZW4gZWxlbWVudCBpcyBjaGFuZ2VkIHRvIGZ1bGwtc2NyZWVuLCBrZXlkb3duIHRvIHNlbGVjdCBuZXh0IGl0ZW1zIHdpbGwgbm90IHdvcmtcbiAgICAgICAgLy8gSGVuY2UgZXhwbGljaXRseSBmb2N1c2luZyB0aGUgaW5wdXRcbiAgICAgICAgaWYgKHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2Z1bGwtc2NyZWVuJykpIHtcbiAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuZmluZCgnLmFwcC1zZWFyY2gtaW5wdXQnKS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREYXRhU291cmNlQXNPYnNlcnZhYmxlKHF1ZXJ5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICAvLyBzaG93IGRyb3Bkb3duIG9ubHkgd2hlbiB0aGVyZSBpcyBjaGFuZ2UgaW4gcXVlcnkuIFRoaXMgc2hvdWxkIG5vdCBhcHBseSB3aGVuIGRhdGFvcHRpb25zIHdpdGggZmlsdGVyRmllbGRzIGFyZSB1cGRhdGVkLlxuICAgICAgICAvLyB3aGVuIGxhc3RSZXN1bHQgaXMgbm90IGF2YWlsYWJsZSBpLmUuIHN0aWxsIHRoZSBmaXJzdCBjYWxsIGlzIHBlbmRpbmcgYW5kIHNlY29uZCBxdWVyeSBpcyBpbnZva2VkIHRoZW4gZG8gbm90IHJldHVybi5cbiAgICAgICAgaWYgKHRoaXMuX2xhc3RRdWVyeSA9PT0gcXVlcnkgJiYgIWdldCh0aGlzLmRhdGFvcHRpb25zLCAnZmlsdGVyRmllbGRzJykgJiYgaXNEZWZpbmVkKHRoaXMuX2xhc3RSZXN1bHQpKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBvZih0aGlzLl9sYXN0UmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qXG4gICAgICAgICAgICAgV01TLTE5MTc3OiBPbiBmb2N1cyBvZiBpbnB1dCBmaWVsZCBmb3IgYXV0b2NvbXBsZXRlIHR5cGUsIGRvIG5vdCB0cmlnZ2VyIGFwaSBjYWxsIHdoZW5cbiAgICAgICAgICAgICAgICAgYSkgc2VhcmNoa2V5IGFuZCBkaXNwbGF5ZXhwcmVzc2lvbiBhcmUgZGlmZmVyZW50XG4gICAgICAgICAgICAgICAgIGIpIGJpbmRkaXNwbGF5bGFiZWwgY29udGFpbnMgbXVsdGlwbGUgdmFsdWVzXG4gICAgICAgICAgICAgICAgIGMpIGJpbmRkaXNwbGF5bGFiZWwgY29udGFpbnMgc2luZ2xlIHZhbHVlIHdoaWNoIGRvZXMgbm90IG1hdGNoIHdpdGggc2VhcmNoa2V5XG4gICAgICAgICovXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdhdXRvY29tcGxldGUnICYmIHRoaXMuc2VhcmNoa2V5ICYmIHRoaXMucXVlcnkgJiYgdGhpcy5kYXRhdmFsdWUpIHtcbiAgICAgICAgICAgIGxldCBiaW5kRGlzcGxheUxhYmVsQXJyYXkgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaEtleUFycmF5ID0gc3BsaXQodGhpcy5zZWFyY2hrZXksICcsJyk7XG4gICAgICAgICAgICBsZXQgZGlzcGxheWxhYmVsO1xuICAgICAgICAgICAgaWYgKHRoaXMuYmluZGRpc3BsYXlsYWJlbCkge1xuICAgICAgICAgICAgICAgIGJpbmREaXNwbGF5TGFiZWxBcnJheSA9IHNwbGl0KHRoaXMuYmluZGRpc3BsYXlsYWJlbCwgJysnKTtcbiAgICAgICAgICAgICAgICBpZiAoYmluZERpc3BsYXlMYWJlbEFycmF5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWluY2x1ZGVzKGJpbmREaXNwbGF5TGFiZWxBcnJheVswXSwgJ3wnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVnZXggPSAvXFxbKC4qPylcXF0vO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheWxhYmVsID0gcmVnZXguZXhlYyhiaW5kRGlzcGxheUxhYmVsQXJyYXlbMF0pWzFdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheWxhYmVsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgoYmluZERpc3BsYXlMYWJlbEFycmF5Lmxlbmd0aCA+IDEgfHwgKGRpc3BsYXlsYWJlbCAmJiAhaW5jbHVkZXMoc2VhcmNoS2V5QXJyYXksIGRpc3BsYXlsYWJlbCkpXG4gICAgICAgICAgICAgICAgfHwgKHRoaXMuZGlzcGxheWV4cHJlc3Npb24gJiYgIWluY2x1ZGVzKHNlYXJjaEtleUFycmF5LCB0aGlzLmRpc3BsYXlleHByZXNzaW9uKSkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9sYXN0UXVlcnkgPSB0aGlzLnF1ZXJ5O1xuICAgICAgICByZXR1cm4gZnJvbSh0aGlzLmdldERhdGFTb3VyY2UocXVlcnkpKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaGFuZGxlRXZlbnQobm9kZTogSFRNTEVsZW1lbnQsIGV2ZW50TmFtZTogc3RyaW5nLCBldmVudENhbGxiYWNrOiBGdW5jdGlvbiwgbG9jYWxzOiBhbnkpIHtcbiAgICAgICAgaWYgKCFpbmNsdWRlcyhbJ2JsdXInLCAnZm9jdXMnLCAnc2VsZWN0JywgJ3N1Ym1pdCcsICdjaGFuZ2UnXSwgZXZlbnROYW1lKSkge1xuICAgICAgICAgICAgc3VwZXIuaGFuZGxlRXZlbnQobm9kZSwgZXZlbnROYW1lLCBldmVudENhbGxiYWNrLCBsb2NhbHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gaGlnaGxpZ2h0IHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBkcm9wZG93biBtYXRjaGluZyB0aGUgcXVlcnkuXG4gICAgcHJpdmF0ZSBoaWdobGlnaHQobWF0Y2g6IFR5cGVhaGVhZE1hdGNoLCBxdWVyeTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLnR5cGVhaGVhZENvbnRhaW5lcikge1xuICAgICAgICAgICAgLy8gaGlnaGxpZ2h0IG9mIGNoYXJzIHdpbGwgd29yayBvbmx5IHdoZW4gbGFiZWwgYXJlIHN0cmluZ3MuXG4gICAgICAgICAgICAobWF0Y2ggYXMgYW55KS52YWx1ZSA9IG1hdGNoLml0ZW0ubGFiZWwudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnR5cGVhaGVhZENvbnRhaW5lci5oaWdobGlnaHQobWF0Y2gsIHF1ZXJ5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGluc2VydHMgdGhlIGVsZW1lbnQgYXQgdGhlIGluZGV4IHBvc2l0aW9uXG4gICAgcHJpdmF0ZSBpbnNlcnRBdEluZGV4KGkpIHtcbiAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50RWwucHJlcGVuZCh0aGlzLiRlbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0ICRlbEF0SW5kZXggPSB0aGlzLnBhcmVudEVsLmNoaWxkcmVuKCkuZXEoaSk7XG4gICAgICAgICAgICBpZiAoJGVsQXRJbmRleC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLnBhcmVudEVsLmNoaWxkcmVuKCkuZXEoaSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50Lmluc2VydEFmdGVyKHRoaXMucGFyZW50RWwuY2hpbGRyZW4oKS5lcShpIC0gMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHdpZGdldCBpcyBvZiB0eXBlIGF1dG9jb21wbGV0ZSBpbiBtb2JpbGUgdmlldy8gYXBwXG4gICAgcHVibGljIGlzTW9iaWxlQXV0b0NvbXBsZXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnYXV0b2NvbXBsZXRlJyAmJiBpc01vYmlsZSgpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSBxdWVyeSBpcyBlbnRlcmVkIGluIHRoZSBpbnB1dCBhbmQgdGhlIHZpZXcgaXMgbm90IG1vYmlsZVxuICAgIHB1YmxpYyBpc1F1ZXJ5RW50ZXJlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd2NsZWFyICYmIHRoaXMuc2hvd0Nsb3NlYnRuO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZE1vcmVEYXRhKGluY3JlbWVudFBhZ2U/OiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFQcm92aWRlci5pc0xhc3RQYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gSW5jcmVhc2UgdGhlIHBhZ2UgbnVtYmVyIGFuZCB0cmlnZ2VyIGZvcmNlIHF1ZXJ5IHVwZGF0ZVxuICAgICAgICB0aGlzLnBhZ2UgPSBpbmNyZW1lbnRQYWdlID8gdGhpcy5wYWdlICsgMSA6IHRoaXMucGFnZTtcblxuICAgICAgICB0aGlzLmlzU2Nyb2xsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSB0cnVlO1xuXG4gICAgICAgIC8vIHdoZW4gaW52b2tpbmcgbmV3IHNldCBvZiByZXN1bHRzLCByZXNldCB0aGUgbGFzdFF1ZXJ5LlxuICAgICAgICBpZiAoaW5jcmVtZW50UGFnZSkge1xuICAgICAgICAgICAgdGhpcy5fbGFzdFF1ZXJ5ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdHJpZ2dlciB0aGUgdHlwZWFoZWFkIGNoYW5nZSBtYW51YWxseSB0byBmZXRjaCB0aGUgbmV4dCBzZXQgb2YgcmVzdWx0cy5cbiAgICAgICAgdGhpcy50eXBlYWhlYWQub25JbnB1dCh7XG4gICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdHJpbSh0aGlzLnF1ZXJ5KSB8fCAnMCcgLy8gZHVtbXkgZGF0YSB0byBub3RpZnkgdGhlIG9ic2VydmFibGVzXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIG9uIGZvY3Vzb3V0LCBzdWJzY3JpYmUgdG8gdGhlIGRhdGF2YWx1ZSBjaGFuZ2VzIGFnYWluXG4gICAgcHJpdmF0ZSBvbkZvY3VzT3V0KCkge1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUR2ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAvLyByZXNldCB0aGUgcGFnZSB2YWx1ZSBvbiBmb2N1c291dC5cbiAgICAgICAgdGhpcy5wYWdlID0gMTtcbiAgICAgICAgLy8gaWYgZG9tVXBkYXRlZCBpcyB0cnVlIHRoZW4gZG8gbm90IGhpZGUgdGhlIGRyb3Bkb3duIGluIHRoZSBmdWxsc2NyZWVuXG4gICAgICAgIGlmICghdGhpcy5fZG9tVXBkYXRlZCAmJiB0aGlzLl9pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuUXVlcnkgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pc09wZW4gPSBmYWxzZTtcbiAgICAgICAgLy8gb24gb3V0c2lkZSBjbGljaywgdHlwZWFoZWFkIGlzIGhpZGRlbi4gVG8gYXZvaWQgdGhpcywgd2hlbiBmdWxsc2NyZWVuIGlzIHNldCwgb3ZlcnJpZGRpbmcgaXNGb2N1c2VkIGZsYWcgb24gdGhlIHR5cGVhaGVhZCBjb250YWluZXJcbiAgICAgICAgaWYgKHRoaXMuX2RvbVVwZGF0ZWQgJiYgdGhpcy50eXBlYWhlYWQgJiYgKHRoaXMudHlwZWFoZWFkIGFzIGFueSkuX2NvbnRhaW5lcikge1xuICAgICAgICAgICAgKHRoaXMudHlwZWFoZWFkIGFzIGFueSkuX2NvbnRhaW5lci5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbklucHV0Q2hhbmdlKCRldmVudCkge1xuICAgICAgICAvLyByZXNldCBhbGwgdGhlIHByZXZpb3VzIHBhZ2UgZGV0YWlscyBpbiBvcmRlciB0byBmZXRjaCBuZXcgc2V0IG9mIHJlc3VsdC5cbiAgICAgICAgdGhpcy5yZXN1bHQgPSBbXTtcbiAgICAgICAgdGhpcy5wYWdlID0gMTtcbiAgICAgICAgdGhpcy5saXN0ZW5RdWVyeSA9IHRoaXMuaXNVcGRhdGVPbktleVByZXNzKCk7XG4gICAgICAgIHRoaXMuX21vZGVsQnlWYWx1ZSA9IHVuZGVmaW5lZDtcblxuICAgICAgICAvLyB3aGVuIGlucHV0IGlzIGNsZWFyZWQsIHJlc2V0IHRoZSBkYXRhdmFsdWVcbiAgICAgICAgaWYgKHRoaXMucXVlcnkgPT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSAnJztcbiAgICAgICAgICAgIHRoaXMuX21vZGVsQnlWYWx1ZSA9ICcnO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQcmV2RGF0YXZhbHVlKHRoaXMuX2xhc3RRdWVyeSk7XG4gICAgICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuX21vZGVsQnlWYWx1ZSwge30sIHRydWUpO1xuXG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NsZWFyJywgeyAkZXZlbnQgfSk7XG5cbiAgICAgICAgICAgIC8vIHRyaWdnZXIgb25TdWJtaXQgb25seSB3aGVuIHRoZSBzZWFyY2ggaW5wdXQgaXMgY2xlYXJlZCBvZmYgYW5kIGRvIG5vdCB0cmlnZ2VyIHdoZW4gdGFiIGlzIHByZXNzZWQuXG4gICAgICAgICAgICBpZiAoJGV2ZW50ICYmICRldmVudC53aGljaCAhPT0gOSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc3VibWl0JywgeyAkZXZlbnQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpbnZva2luZyBjaGFuZ2UgZXZlbnQgb24gZXZlcnkgaW5wdXQgdmFsdWUgY2hhbmdlLlxuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgJGV2ZW50OiAkZXZlbnQsXG4gICAgICAgICAgICAgICAgbmV3VmFsOiB0aGlzLl9tb2RlbEJ5VmFsdWUgfHwgdGhpcy5xdWVyeSxcbiAgICAgICAgICAgICAgICBvbGRWYWw6ICh0aGlzIGFzIGFueSkucHJldkRhdGF2YWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaG93Q2xvc2VidG4gPSAodGhpcy5xdWVyeSAhPT0gJycpO1xuICAgIH1cblxuICAgIC8vIFRyaWdnZXJlZCBmb3IgZW50ZXIgZXZlbnRcbiAgICBwcml2YXRlIGhhbmRsZUVudGVyRXZlbnQoJGV2ZW50KSB7XG4gICAgICAgIC8vIHN1Ym1pdCBldmVudCB0cmlnZ2VyZWQgd2hlbiB0aGVyZSBpcyBubyBzZWFyY2ggcmVzdWx0c1xuICAgICAgICBpZiAoIWdldCh0aGlzLnR5cGVhaGVhZCwgJ21hdGNoZXMubGVuZ3RoJykpIHtcbiAgICAgICAgICAgIHRoaXMub25TZWFyY2hTZWxlY3QoJGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBUcmlnZ2VycmVkIHdoZW4gdHlwZWFoZWFkIG9wdGlvbiBpcyBzZWxlY3RlZC5cbiAgICBwcml2YXRlIG9uU2VhcmNoU2VsZWN0KCRldmVudDogRXZlbnQpIHtcbiAgICAgICAgbGV0IGl0ZW07XG4gICAgICAgIC8vIFdNUy0yMjUzMzogQmVmb3JlIGFkZGluZyBhY3RpdmUgdHlwZWFoZWFkIGVsLCBjaGVjayBpZiB0aGUgZW50ZXJlZCBxdWVyeSBtYXRjaGVzIHdpdGggdGhlIGFjdGl2ZSBlbCBvciBub3RcbiAgICAgICAgY29uc3QgaXNRdWVyeU1hdGNoID0gdGhpcy50eXBlYWhlYWRDb250YWluZXI/LmFjdGl2ZT8udmFsdWUgPT09IHRoaXMucXVlcnk7XG5cbiAgICAgICAgaWYgKHRoaXMudHlwZWFoZWFkQ29udGFpbmVyICYmIHRoaXMudHlwZWFoZWFkQ29udGFpbmVyLmFjdGl2ZSAmJiBpc1F1ZXJ5TWF0Y2gpIHtcbiAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnR5cGVhaGVhZENvbnRhaW5lci5hY3RpdmUuaXRlbTtcbiAgICAgICAgfVxuICAgICAgICAkZXZlbnQgPSB0aGlzLmV2ZW50RGF0YSgkZXZlbnQsIGl0ZW0gfHwge30pO1xuXG4gICAgICAgIC8vIHNlYXJjaE9uIGlzIHNldCBhcyBvbkJ0bkNsaWNrLCB0aGVuIGludm9rZSB0aGUgc2VhcmNoIGFwaSBjYWxsIG1hbnVhbGx5LlxuICAgICAgICBpZiAoIXRoaXMuaXNVcGRhdGVPbktleVByZXNzKCkpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuUXVlcnkgPSB0cnVlO1xuICAgICAgICAgICAgLy8gdHJpZ2dlciB0aGUgdHlwZWFoZWFkIGNoYW5nZSBtYW51YWxseSB0byBmZXRjaCB0aGUgbmV4dCBzZXQgb2YgcmVzdWx0cy5cbiAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkLm9uSW5wdXQoe1xuICAgICAgICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5xdWVyeSAvLyBkdW1teSBkYXRhIHRvIG5vdGlmeSB0aGUgb2JzZXJ2YWJsZXNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyB3aGVuIG1hdGNoZXMgYXJlIGF2YWlsYWJsZS5cbiAgICAgICAgaWYgKHRoaXMudHlwZWFoZWFkQ29udGFpbmVyICYmIHRoaXMubGlFbGVtZW50cy5sZW5ndGggJiYgaXNRdWVyeU1hdGNoKSB7XG4gICAgICAgICAgICB0aGlzLnR5cGVhaGVhZENvbnRhaW5lci5zZWxlY3RBY3RpdmVNYXRjaCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5xdWVyeU1vZGVsID0gdGhpcy5xdWVyeTtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc3VibWl0JywgeyAkZXZlbnQgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGludm9rZU9uQmVmb3JlU2VydmljZUNhbGwoaW5wdXREYXRhKSB7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3Jlc2VydmljZWNhbGwnLCB7IGlucHV0RGF0YSB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRHJvcGRvd25PcGVuKCkge1xuICAgICAgICBpZiAodGhpcy5jbGVhckRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkLmhpZGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzZXR0aW5nIHRoZSB1bEVsZW1lbnRzLCBsaUVsZW1lbnQgb24gdHlwZWFoZWFkQ29udGFpbmVyLlxuICAgICAgICAvLyBhcyB3ZSBhcmUgdXNpbmcgY3VzdG9tT3B0aW9uIHRlbXBsYXRlLCBsaUVsZW1lbnRzIGFyZSBub3QgYXZhaWxhYmxlIG9uIHR5cGVhaGVhZENvbnRhaW5lciBzbyBhcHBlbmQgdGhlbSBleHBsaWNpdGx5LlxuICAgICAgICBjb25zdCBmbiA9IGRlYm91bmNlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2lzT3BlbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnR5cGVhaGVhZENvbnRhaW5lciA9IHRoaXMudHlwZWFoZWFkLl9jb250YWluZXIgfHwgKHRoaXMudHlwZWFoZWFkIGFzIGFueSkuX3R5cGVhaGVhZC5pbnN0YW5jZTtcbiAgICAgICAgICAgICh0aGlzLnR5cGVhaGVhZENvbnRhaW5lciBhcyBhbnkpLmxpRWxlbWVudHMgPSB0aGlzLmxpRWxlbWVudHM7XG4gICAgICAgICAgICAodGhpcy50eXBlYWhlYWRDb250YWluZXIgYXMgYW55KS51bEVsZW1lbnQgPSB0aGlzLnVsRWxlbWVudDtcbiAgICAgICAgICAgIGFkanVzdENvbnRhaW5lclBvc2l0aW9uKCQoJ3R5cGVhaGVhZC1jb250YWluZXInKSwgdGhpcy5uYXRpdmVFbGVtZW50LCAodGhpcy50eXBlYWhlYWQgYXMgYW55KS5fdHlwZWFoZWFkLCAkKCd0eXBlYWhlYWQtY29udGFpbmVyIC5kcm9wZG93bi1tZW51JykpO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZuKCk7XG5cbiAgICAgICAgLy8gb3BlbiBmdWxsLXNjcmVlbiBzZWFyY2ggdmlld1xuICAgICAgICBpZiAodGhpcy5pc01vYmlsZUF1dG9Db21wbGV0ZSgpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2Z1bGwtc2NyZWVuJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlck1vYmlsZUF1dG9Db21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZHJvcGRvd25FbCA9IHRoaXMuZHJvcGRvd25FbC5jbG9zZXN0KCd0eXBlYWhlYWQtY29udGFpbmVyJyk7XG5cbiAgICAgICAgICAgIGRyb3Bkb3duRWwuaW5zZXJ0QWZ0ZXIodGhpcy4kZWxlbWVudC5maW5kKCdpbnB1dCcpLmZpcnN0KCkpO1xuICAgICAgICAgICAgY29uc3Qgc2NyZWVuSGVpZ2h0ID0gdGhpcy4kZWxlbWVudC5jbG9zZXN0KCcuYXBwLWNvbnRlbnQnKS5oZWlnaHQoKTtcbiAgICAgICAgICAgIGRyb3Bkb3duRWwuY3NzKHsgcG9zaXRpb246ICdyZWxhdGl2ZScsIHRvcDogMCwgaGVpZ2h0OiBzY3JlZW5IZWlnaHQgKyAncHgnIH0pO1xuICAgICAgICAgICAgdGhpcy5zaG93Q2xvc2VidG4gPSB0aGlzLnF1ZXJ5ICYmIHRoaXMucXVlcnkgIT09ICcnO1xuXG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UpICYmICF0aGlzLmRhdGFQcm92aWRlci5pc0xhc3RQYWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyU2VhcmNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdE5leHQoKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSB0aGlzLnR5cGVhaGVhZENvbnRhaW5lci5tYXRjaGVzO1xuXG4gICAgICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbWF0Y2hlcy5pbmRleE9mKHRoaXMudHlwZWFoZWFkQ29udGFpbmVyLmFjdGl2ZSk7XG5cbiAgICAgICAgLy8gb24ga2V5ZG93biwgaWYgc2Nyb2xsIGlzIGF0IHRoZSBib3R0b20gYW5kIG5leHQgcGFnZSByZWNvcmRzIGFyZSBhdmFpbGFibGUsIGZldGNoIG5leHQgcGFnZSBpdGVtcy5cbiAgICAgICAgaWYgKCF0aGlzLl9sb2FkaW5nSXRlbXMgJiYgIXRoaXMuZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UgJiYgaW5kZXggKyAxID4gbWF0Y2hlcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAvLyBpbmRleCBpcyBzYXZlZCBpbiBvcmRlciB0byBzZWxlY3QgdGhlIGxhc3RTZWxlY3RlZCBpdGVtIGluIHRoZSBkcm9wZG93biBhZnRlciBmZXRjaGluZyBuZXh0IHBhZ2UgaXRlbXMuXG4gICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICB0aGlzLmxvYWRNb3JlRGF0YSh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TGFzdEFjdGl2ZU1hdGNoQXNTZWxlY3RlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMubGFzdFNlbGVjdGVkSW5kZXgpIHtcbiAgICAgICAgICAgICh0aGlzLnR5cGVhaGVhZENvbnRhaW5lciBhcyBhbnkpLl9hY3RpdmUgPSB0aGlzLnR5cGVhaGVhZENvbnRhaW5lci5tYXRjaGVzW3RoaXMubGFzdFNlbGVjdGVkSW5kZXhdO1xuICAgICAgICAgICAgdGhpcy50eXBlYWhlYWRDb250YWluZXIubmV4dEFjdGl2ZU1hdGNoKCk7XG4gICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZEluZGV4ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cmlnZ2VyU2VhcmNoKCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSB8fCAhdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZnVsbC1zY3JlZW4nKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHR5cGVBaGVhZERyb3BEb3duID0gdGhpcy5kcm9wZG93bkVsO1xuICAgICAgICBjb25zdCAkbGFzdEl0ZW0gPSB0eXBlQWhlYWREcm9wRG93bi5maW5kKCdsaScpLmxhc3QoKTtcblxuICAgICAgICAvLyBDaGVjayBpZiBsYXN0IGl0ZW0gaXMgbm90IGJlbG93IHRoZSBmdWxsIHNjcmVlblxuICAgICAgICBpZiAoJGxhc3RJdGVtLmxlbmd0aCAmJiB0eXBlQWhlYWREcm9wRG93bi5sZW5ndGggJiYgKHR5cGVBaGVhZERyb3BEb3duLmhlaWdodCgpICsgdHlwZUFoZWFkRHJvcERvd24ucG9zaXRpb24oKS50b3AgPiAkbGFzdEl0ZW0uaGVpZ2h0KCkgKyAkbGFzdEl0ZW0ucG9zaXRpb24oKS50b3ApKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRNb3JlRGF0YSh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNVcGRhdGVPbktleVByZXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hvbiA9PT0gJ3R5cGluZyc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWJvdW5jZURlZmF1bHRRdWVyeShkYXRhKSB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRRdWVyeUludm9rZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmdldERhdGFTb3VyY2UoZGF0YSwgdHJ1ZSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0UXVlcnkgPSB0aGlzLnF1ZXJ5ID0gdGhpcy5xdWVyeU1vZGVsWzBdLmxhYmVsIHx8ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuX21vZGVsQnlWYWx1ZSA9IHRoaXMucXVlcnlNb2RlbFswXS52YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb2RlbEJ5S2V5ID0gdGhpcy5xdWVyeU1vZGVsWzBdLmtleTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dDbG9zZWJ0biA9ICh0aGlzLnF1ZXJ5ICE9PSAnJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vZGVsQnlWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY2xlYXJEYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdldCgodGhpcy50eXBlYWhlYWQgYXMgYW55KSwgJ190eXBlYWhlYWQuaXNTaG93bicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQnlEYXRhdmFsdWUoZGF0YSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUJ5RGF0YXNldChkYXRhKTtcbiAgICAgICAgdGhpcy51cGRhdGVCeURhdGFTb3VyY2UoZGF0YSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVCeURhdGFTb3VyY2UoZGF0YSkge1xuICAgICAgICAvLyB2YWx1ZSBpcyBwcmVzZW50IGJ1dCB0aGUgY29ycmVzcG9uZGluZyBrZXkgaXMgbm90IGZvdW5kIHRoZW4gZmV0Y2ggbmV4dCBzZXRcbiAgICAgICAgLy8gbW9kZWxCeUtleSB3aWxsIGJlIHNldCBvbmx5IHdoZW4gZGF0YXZhbHVlIGlzIGF2YWlsYWJsZSBpbnNpZGUgdGhlIGxvY2FsRGF0YSBvdGhlcndpc2UgbWFrZSBhIE4vdyBjYWxsLlxuICAgICAgICBpZiAoaXNEZWZpbmVkKGRhdGEpICYmICFpc09iamVjdChkYXRhKSAmJiB0aGlzLmRhdGFzb3VyY2UgJiYgIWlzRGVmaW5lZCh0aGlzLl9tb2RlbEJ5S2V5KSAmJiB0aGlzLmRhdGFmaWVsZCAhPT0gQUxMRklFTERTKSB7XG4gICAgICAgICAgICAvLyBBdm9pZCBtYWtpbmcgZGVmYXVsdCBxdWVyeSBpZiBxdWVyeU1vZGVsIGFscmVhZHkgZXhpc3RzLlxuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh0aGlzLnF1ZXJ5TW9kZWwpICYmICFpc0VtcHR5KHRoaXMucXVlcnlNb2RlbCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZURhdGF2YWx1ZUZyb21RdWVyeU1vZGVsKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNYWtlIGRlZmF1bHQgcXVlcnkgY2FsbCBvbmx5IHdoZW4gZGF0YXNvdXJjZSBzdXBwb3J0cyBDUlVEIChsaXZlIHZhcmlhYmxlKS5cbiAgICAgICAgICAgIGlmICghdGhpcy5fZGVmYXVsdFF1ZXJ5SW52b2tlZCAmJiB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5TVVBQT1JUU19DUlVEKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVib3VuY2VEZWZhdWx0UXVlcnkoZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB1cGRhdGVzIHRoZSBtb2RlbCB2YWx1ZSB1c2luZyBxdWVyeU1vZGVsXG4gICAgcHJpdmF0ZSB1cGRhdGVEYXRhdmFsdWVGcm9tUXVlcnlNb2RlbCgpIHtcbiAgICAgICAgaWYgKGlzRGVmaW5lZCh0aGlzLnF1ZXJ5TW9kZWwpKSB7XG4gICAgICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSBpc0FycmF5KHRoaXMucXVlcnlNb2RlbCkgPyAodGhpcy5xdWVyeU1vZGVsWzBdIGFzIERhdGFTZXRJdGVtKS52YWx1ZSA6IHRoaXMucXVlcnlNb2RlbDtcbiAgICAgICAgICAgIHRoaXMuX21vZGVsQnlLZXkgPSBpc0FycmF5KHRoaXMucXVlcnlNb2RlbCkgPyAodGhpcy5xdWVyeU1vZGVsWzBdIGFzIERhdGFTZXRJdGVtKS5rZXkgOiB0aGlzLnF1ZXJ5TW9kZWw7XG4gICAgICAgICAgICB0aGlzLnRvQmVQcm9jZXNzZWREYXRhdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUJ5RGF0YXNldChkYXRhOiBhbnkpIHtcbiAgICAgICAgLy8gZGVmYXVsdCBxdWVyeSBpcyBhbHJlYWR5IGludm9rZWQgdGhlbiBkbyBub3QgbWFrZSBvdGhlciBkZWZhdWx0IHF1ZXJ5IGNhbGwuXG4gICAgICAgIC8vIEZvciBsb2NhbCBzZWFyY2ggaS5lLiBzZWFyY2hrZXkgaXMgdW5kZWZpbmVkLCBkbyBub3QgcmV0dXJuLCB2ZXJpZnkgdGhlIGRhdGF2YWx1ZSBhZ2FpbnN0IHRoZSBkYXRhc2V0SXRlbXMgLlxuICAgICAgICBpZiAodGhpcy5fZGVmYXVsdFF1ZXJ5SW52b2tlZCAmJiB0aGlzLnNlYXJjaGtleSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IGZpbmQodGhpcy5kYXRhc2V0SXRlbXMsIChpdGVtKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKGlzT2JqZWN0KGl0ZW0udmFsdWUpID8gaXNFcXVhbChpdGVtLnZhbHVlLCBkYXRhKSA6ICh0b1N0cmluZyhpdGVtLnZhbHVlKSkudG9Mb3dlckNhc2UoKSA9PT0gKHRvU3RyaW5nKGRhdGEpKS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gc2V0IHRoZSBkZWZhdWx0IG9ubHkgd2hlbiBpdCBpcyBhdmFpbGFibGUgaW4gZGF0YXNldC5cbiAgICAgICAgaWYgKHNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgdGhpcy5xdWVyeU1vZGVsID0gW3NlbGVjdGVkSXRlbV07XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhZmllbGQgPT09IEFMTEZJRUxEUyAmJiBpc09iamVjdChkYXRhKSkge1xuICAgICAgICAgICAgdGhpcy5xdWVyeU1vZGVsID0gdGhpcy5nZXRUcmFuc2Zvcm1lZERhdGEoZXh0cmFjdERhdGFBc0FycmF5KGRhdGEpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJlc2V0dGluZyB0aGUgcXVlcnlNb2RlbCBvbmx5IHdoZW4gcHJldkRhdGF2YWx1ZSBpcyBlcXVhbCB0byBkYXRhXG4gICAgICAgICAgICBpZiAoKHRoaXMgYXMgYW55KS5wcmV2RGF0YXZhbHVlICE9PSBkYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeU1vZGVsID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnkgPSAnJztcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVEYXRhdmFsdWVGcm9tUXVlcnlNb2RlbCgpO1xuXG4gICAgICAgIC8vIFNob3cgdGhlIGxhYmVsIHZhbHVlIG9uIGlucHV0LlxuICAgICAgICB0aGlzLl9sYXN0UXVlcnkgPSB0aGlzLnF1ZXJ5ID0gaXNEZWZpbmVkKHRoaXMucXVlcnlNb2RlbCkgJiYgdGhpcy5xdWVyeU1vZGVsLmxlbmd0aCA/IGdldCh0aGlzLnF1ZXJ5TW9kZWxbMF0sICdsYWJlbCcpIDogJyc7XG4gICAgICAgIHRoaXMuc2hvd0Nsb3NlYnRuID0gKHRoaXMucXVlcnkgIT09ICcnKTtcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBoYXZlIGxhc3Qgc2VhcmNoIHJlc3VsdHMgdGhlbiBvcGVuIGRyb3Bkb3duIG9uIGZvY3VzXG4gICAgcHJpdmF0ZSBoYW5kbGVGb2N1cygkZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ3NlYXJjaCcgJiYgdGhpcy5xdWVyeSA9PT0gdGhpcy5fbGFzdFF1ZXJ5ICYmIHRoaXMuX2xhc3RSZXN1bHQpIHtcbiAgICAgICAgICAgICh0aGlzLnR5cGVhaGVhZCBhcyBhbnkpLmtleVVwRXZlbnRFbWl0dGVyLmVtaXQodGhpcy5xdWVyeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbm90aWZ5U3Vic2NyaWJlcigpIHtcbiAgICAgICAgY29uc3QgcGFyZW50RWwgPSAkKHRoaXMubmF0aXZlRWxlbWVudCkuY2xvc2VzdCgnLmFwcC1jb21wb3NpdGUtd2lkZ2V0LmNhcHRpb24tZmxvYXRpbmcnKTtcbiAgICAgICAgaWYgKHBhcmVudEVsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuYXBwLm5vdGlmeSgnY2FwdGlvblBvc2l0aW9uQW5pbWF0ZScsIHtkaXNwbGF5VmFsOiB0cnVlLCBuYXRpdmVFbDogcGFyZW50RWx9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwcm9taXNlIHRoYXQgcHJvdmlkZXMgdGhlIGZpbHRlcmVkIGRhdGEgZnJvbSB0aGUgZGF0YXNvdXJjZS5cbiAgICBwdWJsaWMgZ2V0RGF0YVNvdXJjZShxdWVyeTogQXJyYXk8c3RyaW5nPiB8IHN0cmluZywgc2VhcmNoT25EYXRhRmllbGQ/OiBib29sZWFuLCBuZXh0SXRlbUluZGV4PzogbnVtYmVyKTogUHJvbWlzZTxEYXRhU2V0SXRlbVtdPiB7XG4gICAgICAgIC8vIEZvciBkZWZhdWx0IHF1ZXJ5LCBzZWFyY2hPbkRhdGFGaWVsZCBpcyBzZXQgdG8gdHJ1ZSwgdGhlbiBkbyBub3QgbWFrZSBhIG4vdyBjYWxsIHdoZW4gZGF0YWZpZWxkIGlzIEFMTEZJRUxEU1xuICAgICAgICBpZiAoc2VhcmNoT25EYXRhRmllbGQgJiYgdGhpcy5kYXRhZmllbGQgPT09IEFMTEZJRUxEUykge1xuICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZvciBkZWZhdWx0IGRhdGF2YWx1ZSwgc2VhcmNoIGtleSBhcyB0byBiZSBvbiBkYXRhZmllbGQgdG8gZ2V0IHRoZSBkZWZhdWx0IGRhdGEgZnJvbSB0aGUgZmlsdGVyIGNhbGwuXG4gICAgICAgIGNvbnN0IGRhdGFDb25maWc6IElEYXRhUHJvdmlkZXJDb25maWcgPSB7XG4gICAgICAgICAgICBkYXRhc2V0OiB0aGlzLmRhdGFzZXQgPyBjb252ZXJ0RGF0YVRvT2JqZWN0KHRoaXMuZGF0YXNldCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBiaW5kZGF0YXNldDogdGhpcy5iaW5kZGF0YXNldCxcbiAgICAgICAgICAgIGRhdGFzb3VyY2U6IHRoaXMuZGF0YXNvdXJjZSxcbiAgICAgICAgICAgIGRhdGFmaWVsZDogdGhpcy5kYXRhZmllbGQsXG4gICAgICAgICAgICBoYXNEYXRhOiB0aGlzLmRhdGFzZXQgJiYgdGhpcy5kYXRhc2V0Lmxlbmd0aCxcbiAgICAgICAgICAgIHF1ZXJ5OiBxdWVyeSxcbiAgICAgICAgICAgIGlzTG9jYWxGaWx0ZXI6ICF0aGlzLnNlYXJjaGtleSxcbiAgICAgICAgICAgIHNlYXJjaEtleTogc2VhcmNoT25EYXRhRmllbGQgPyB0aGlzLmRhdGFmaWVsZCA6IHRoaXMuc2VhcmNoa2V5LFxuICAgICAgICAgICAgLy8gZGVmYXVsdCBzZWFyY2ggY2FsbCBtYXRjaCBtb2RlIHNob3VsZCBiZSBzdGFydGlnbm9yZWNhc2VcbiAgICAgICAgICAgIG1hdGNoTW9kZTogc2VhcmNoT25EYXRhRmllbGQgPyAnc3RhcnRpZ25vcmVjYXNlJyA6IHRoaXMubWF0Y2htb2RlLFxuICAgICAgICAgICAgY2FzZXNlbnNpdGl2ZTogdGhpcy5jYXNlc2Vuc2l0aXZlLFxuICAgICAgICAgICAgaXNmb3JtZmllbGQ6IHRoaXMuaXNmb3JtZmllbGQsXG4gICAgICAgICAgICBvcmRlcmJ5OiB0aGlzLm9yZGVyYnksXG4gICAgICAgICAgICBsaW1pdDogdGhpcy5saW1pdCxcbiAgICAgICAgICAgIHBhZ2VzaXplOiB0aGlzLnBhZ2VzaXplLFxuICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlLFxuICAgICAgICAgICAgb25CZWZvcmVzZXJ2aWNlY2FsbDogdGhpcy5pbnZva2VPbkJlZm9yZVNlcnZpY2VDYWxsLmJpbmQodGhpcylcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5kYXRhb3B0aW9ucykge1xuICAgICAgICAgICAgZGF0YUNvbmZpZy5kYXRhb3B0aW9ucyA9IHRoaXMuZGF0YW9wdGlvbnM7XG4gICAgICAgICAgICBkYXRhQ29uZmlnLnZpZXdQYXJlbnQgPSB0aGlzLnZpZXdQYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFQcm92aWRlci5maWx0ZXIoZGF0YUNvbmZpZylcbiAgICAgICAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gcmVzcG9uc2UgZnJvbSBkYXRhUHJvdmlkZXIgcmV0dXJucyBhbHdheXMgZGF0YSBvYmplY3QuXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSByZXNwb25zZS5kYXRhIHx8IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIC8vIGZvciBzZXJ2aWNlIHZhcmlhYmxlLCB1cGRhdGluZyB0aGUgZGF0YXNldCBvbmx5IGlmIGl0IGlzIG5vdCBkZWZpbmVkIG9yIGVtcHR5XG4gICAgICAgICAgICAgICAgaWYgKCghaXNEZWZpbmVkKHRoaXMuZGF0YXNldCkgfHwgIXRoaXMuZGF0YXNldC5sZW5ndGgpICYmIHRoaXMuZGF0YVByb3ZpZGVyLnVwZGF0ZURhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc2V0ID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVByb3ZpZGVyLmhhc01vcmVEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVkRGF0YXNldCA9IHRoaXMuZm9ybWF0dGVkRGF0YXNldC5jb25jYXQocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVkRGF0YXNldCA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGV4cGxpY2l0bHkgc2V0dGluZyB0aGUgb3B0aW9uc2xpbWl0IGFzIHRoZSBtYXRjaGVzIG1vcmUgdGhhbiAyMCB3aWxsIGJlIGlnbm9yZWQgaWYgb3B0aW9uc2xpbWl0IGlzIG5vdCBzcGVjaWZpZWQuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybWF0dGVkRGF0YXNldC5sZW5ndGggPiAyMCAmJiAhaXNEZWZpbmVkKHRoaXMubGltaXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkLnR5cGVhaGVhZE9wdGlvbnNMaW1pdCA9IHRoaXMuZm9ybWF0dGVkRGF0YXNldC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gSW4gbW9iaWxlLCB0cmlnZ2VyIHRoZSBzZWFyY2ggYnkgZGVmYXVsdCB1bnRpbCB0aGUgcmVzdWx0cyBoYXZlIGhlaWdodCB1cHRvIHBhZ2UgaGVpZ2h0LiBPdGhlciByZXN1bHRzIGNhbiBiZSBmZXRjaGVkIGJ5IHNjcm9sbGluZ1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNPcGVuICYmIHRoaXMuaXNNb2JpbGVBdXRvQ29tcGxldGUoKSAmJiAhaXNVbmRlZmluZWQodGhpcy5kYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSkgJiYgIXRoaXMuZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyU2VhcmNoKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWREYXRhID0gdGhpcy5nZXRUcmFuc2Zvcm1lZERhdGEodGhpcy5mb3JtYXR0ZWREYXRhc2V0LCBuZXh0SXRlbUluZGV4KTtcblxuICAgICAgICAgICAgICAgIC8vIHJlc3VsdCBjb250YWlucyB0aGUgZGF0YWZpZWxkIHZhbHVlcy5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHQgPSBtYXAodHJhbnNmb3JtZWREYXRhLCAndmFsdWUnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtZWREYXRhO1xuICAgICAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICAoZGVib3VuY2UoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMYXN0QWN0aXZlTWF0Y2hBc1NlbGVjdGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDMwKSkoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1Njcm9sbGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFdoZW4gbm8gcmVzdWx0IGlzIGZvdW5kLCBzZXQgdGhlIGRhdGF2YWx1ZSB0byB1bmRlZmluZWQuXG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21vZGVsQnlWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVyeU1vZGVsID0gKHF1ZXJ5IGFzIHN0cmluZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIG9uIGZvY3Vzb3V0IGkuZS4gb24gb3RoZXIgd2lkZ2V0IGZvY3VzLCBpZiBuL3cgaXMgcGVuZGluZyBsb2FkaW5nIGljb24gaXMgc2hvd24sIHdoZW4gZGF0YSBpcyBhdmFpbGFibGUgdGhlbiBkcm9wZG93biBpcyBzaG93biBhZ2Fpbi5cbiAgICAgICAgICAgICAgICAvLyBvbiB1bnN1YnNjcmliaW5nIGRvIG5vdCBzaG93IHRoZSByZXN1bHRzLlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl91bnN1YnNjcmliZUR2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0UmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBwYXJlbnQgY29udGV4dCBpLmUuIFBhZ2UgY29udGV4dCBhbmQgbm90IHBhcmVudCBjb21wb25lbnQncyBjb250ZXh0LlxuICAgIHByaXZhdGUgZ2V0Q29udGV4dChjb250ZXh0KSB7XG4gICAgICAgIGlmIChjb250ZXh0ICYmIGdldChjb250ZXh0LCAnd2lkZ2V0JykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldENvbnRleHQoY29udGV4dC52aWV3UGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VHJhbnNmb3JtZWREYXRhKGRhdGE6IGFueSwgaXRlbUluZGV4PzogbnVtYmVyLCBpc2N1c3RvbT86IGJvb2xlYW4pOiBEYXRhU2V0SXRlbVtdIHtcbiAgICAgICAgaWYgKGlzRGVmaW5lZChpdGVtSW5kZXgpKSB7XG4gICAgICAgICAgICBpdGVtSW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YSA9IHRyYW5zZm9ybUZvcm1EYXRhKFxuICAgICAgICAgICAgdGhpcy5nZXRDb250ZXh0KHRoaXMudmlld1BhcmVudCksXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgdGhpcy5kYXRhZmllbGQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkOiB0aGlzLmRpc3BsYXlsYWJlbCB8fCB0aGlzLmRpc3BsYXlmaWVsZCxcbiAgICAgICAgICAgICAgICBkaXNwbGF5RXhwcjogaXNjdXN0b20gPyAnJyA6IHRoaXMuZGlzcGxheWV4cHJlc3Npb24sXG4gICAgICAgICAgICAgICAgYmluZERpc3BsYXlFeHByOiBpc2N1c3RvbSA/ICcnIDogdGhpcy5iaW5kZGlzcGxheWxhYmVsLFxuICAgICAgICAgICAgICAgIGJpbmREaXNwbGF5SW1nU3JjOiB0aGlzLmJpbmRkaXNwbGF5aW1hZ2VzcmMsXG4gICAgICAgICAgICAgICAgZGlzcGxheUltZ1NyYzogdGhpcy5kaXNwbGF5aW1hZ2VzcmNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpdGVtSW5kZXgsXG4gICAgICAgICAgICB0aGlzXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBnZXRVbmlxT2Jqc0J5RGF0YUZpZWxkKHRyYW5zZm9ybWVkRGF0YSwgdGhpcy5kYXRhZmllbGQsIHRoaXMuZGlzcGxheWZpZWxkIHx8IHRoaXMuZGlzcGxheWxhYmVsLCB0b0Jvb2xlYW4odGhpcy5hbGxvd2VtcHR5KSk7XG4gICAgfVxuXG4gICAgLy8gT3B0aW9uc0xpc3RUZW1wbGF0ZSBsaXN0ZW5zIHRvIHRoZSBzY3JvbGwgZXZlbnQgYW5kIHRyaWdnZXJzIHRoaXMgZnVuY3Rpb24uXG4gICAgcHVibGljIG9uU2Nyb2xsKCRzY3JvbGxFbDogRWxlbWVudCwgZXZ0OiBFdmVudCkge1xuICAgICAgICBjb25zdCB0b3RhbEhlaWdodCA9ICRzY3JvbGxFbC5zY3JvbGxIZWlnaHQsXG4gICAgICAgICAgICBjbGllbnRIZWlnaHQgPSAkc2Nyb2xsRWwuY2xpZW50SGVpZ2h0O1xuXG4gICAgICAgIC8vIElmIHNjcm9sbCBpcyBhdCB0aGUgYm90dG9tIGFuZCBubyByZXF1ZXN0IGlzIGluIHByb2dyZXNzIGFuZCBuZXh0IHBhZ2UgcmVjb3JkcyBhcmUgYXZhaWxhYmxlLCBmZXRjaCBuZXh0IHBhZ2UgaXRlbXMuXG4gICAgICAgIGlmICghdGhpcy5fbG9hZGluZ0l0ZW1zICYmICF0aGlzLmRhdGFQcm92aWRlci5pc0xhc3RQYWdlICYmICgkc2Nyb2xsRWwuc2Nyb2xsVG9wICsgY2xpZW50SGVpZ2h0ID49IHRvdGFsSGVpZ2h0KSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkTW9yZURhdGEodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAgICAgaWYgKCFpc0RlZmluZWQodGhpcy5taW5jaGFycykpIHtcbiAgICAgICAgICAgIC8vIGZvciBhdXRvY29tcGxldGUgc2V0IHRoZSBtaW5jaGFycyB0byAwXG4gICAgICAgICAgICBpZiAodGhpcy50eXBlID09PSAnYXV0b2NvbXBsZXRlJykge1xuICAgICAgICAgICAgICAgIHRoaXMubWluY2hhcnMgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1pbmNoYXJzID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGlzdGVuUXVlcnkgPSB0aGlzLmlzVXBkYXRlT25LZXlQcmVzcygpO1xuXG4gICAgICAgIC8vIGJ5IGRlZmF1bHQgZm9yIGF1dG9jb21wbGV0ZSBkbyBub3Qgc2hvdyB0aGUgc2VhcmNoIGljb25cbiAgICAgICAgLy8gYnkgZGVmYXVsdCBzaG93IHRoZSBzZWFyY2hpY29uIGZvciB0eXBlID0gc2VhcmNoXG4gICAgICAgIHRoaXMuc2hvd3NlYXJjaGljb24gPSBpc0RlZmluZWQodGhpcy5zaG93c2VhcmNoaWNvbikgPyB0aGlzLnNob3dzZWFyY2hpY29uIDogKHRoaXMudHlwZSA9PT0gJ3NlYXJjaCcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuXG4gICAgICAgIHN0eWxlcih0aGlzLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQsIHRoaXMpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lclRhcmdldCA9IGdldENvbnRhaW5lclRhcmdldENsYXNzKHRoaXMubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICQoJy5hcHAtc2VhcmNoLWlucHV0JykucmVtb3ZlQXR0cignYXJpYS1leHBhbmRlZCcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXZlbnREYXRhKCRldmVudCwgaXRlbSkge1xuICAgICAgICBpZiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAkZXZlbnRbJ2RhdGEnXSA9IHtcbiAgICAgICAgICAgICAgICBpdGVtICA6IGl0ZW0uZGF0YU9iamVjdCxcbiAgICAgICAgICAgICAgICBtb2RlbCA6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgbGFiZWwgOiBpdGVtLmxhYmVsLFxuICAgICAgICAgICAgICAgIHF1ZXJ5IDogdGhpcy5xdWVyeVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAkZXZlbnQ7XG4gICAgfVxuXG4gICAgLy8gdHJpZ2dlcmVkIG9uIHNlbGVjdCBvbiBvcHRpb24gZnJvbSB0aGUgbGlzdC4gU2V0IHRoZSBxdWVyeU1vZGVsLCBxdWVyeSBhbmQgbW9kZWxCeUtleSBmcm9tIHRoZSBtYXRjaGVkIGl0ZW0uXG4gICAgcHVibGljIHR5cGVhaGVhZE9uU2VsZWN0KG1hdGNoOiBUeXBlYWhlYWRNYXRjaCwgJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtID0gbWF0Y2guaXRlbTtcbiAgICAgICAgdGhpcy5xdWVyeU1vZGVsID0gaXRlbTtcbiAgICAgICAgaXRlbS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucXVlcnkgPSBpdGVtLmxhYmVsO1xuICAgICAgICB0aGlzLnNob3dDbG9zZWJ0biA9ICh0aGlzLnF1ZXJ5ICE9PSAnJyk7XG4gICAgICAgICRldmVudCA9ICRldmVudCB8fCB0aGlzLiR0eXBlYWhlYWRFdmVudDtcblxuICAgICAgICAvLyBBcyBpdGVtLmtleSBjYW4gdmFyeSBmcm9tIGtleSBpbiB0aGUgZGF0YXNldEl0ZW1zXG4gICAgICAgIHRoaXMuX21vZGVsQnlLZXkgPSBpdGVtLmtleTtcbiAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gaXRlbS52YWx1ZTtcblxuICAgICAgICAkZXZlbnQgPSB0aGlzLmV2ZW50RGF0YSgkZXZlbnQsIGl0ZW0pO1xuXG4gICAgICAgIHRoaXMuaW52b2tlT25Ub3VjaGVkKCk7XG4gICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsICRldmVudCB8fCB7fSk7XG4gICAgICAgIC8vIHVwZGF0aW5nIHRoZSB2YXJpYWJsZSBib3VuZCB0byBkZWZhdWx0IHZhbHVlIGFzIGludm9rZU9uQ2hhbmdlIGlzIG5vdCB1cGRhdGluZyB0aGUgdmFyaWFibGUuXG4gICAgICAgIGlmICh0aGlzLmRhdGF2YWx1ZSAhPT0gKHRoaXMgYXMgYW55KS5wcmV2RGF0YXZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUJvdW5kVmFyaWFibGUodGhpcy5kYXRhdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmdWxsLXNjcmVlbicpKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlU2VhcmNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzZWxlY3QnLCB7ICRldmVudCwgc2VsZWN0ZWRWYWx1ZTogdGhpcy5kYXRhdmFsdWUgfSk7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc3VibWl0JywgeyAkZXZlbnQgfSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVQcmV2RGF0YXZhbHVlKHRoaXMuZGF0YXZhbHVlKTtcbiAgICB9XG5cbiAgICBvblByb3BlcnR5Q2hhbmdlKGtleTogc3RyaW5nLCBudjogYW55LCBvdjogYW55KSB7XG4gICAgICAgIGlmIChrZXkgPT09ICd0YWJpbmRleCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJhY2t3YXJkIGNvbXBhdGFiaWxpdHkgZnJvbSAxMC4zLjEgdG8gMTAuMy4yXG4gICAgICAgIC8vIDEwLjMuMSB3ZSBoYWQgZGlzcGxheWxhYmVsIGFzIG1vZGFsIHZhbHVlXG4gICAgICAgIC8vIEZyb20gMTAuMy4yIG9ud29yZHMgd2Ugd2lsbCBiZSBoYXZpbmcgZGlzcGxheWV4cHJlc2lvbiBhcyBtb2RhbCB2YWx1ZVxuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnYXV0b2NvbXBsZXRlJyAmJiBrZXkgPT09ICdkaXNwbGF5bGFiZWwnICYmIHRoaXMuZGlzcGxheWxhYmVsICYmICghdGhpcy5kaXNwbGF5ZXhwcmVzc2lvbiB8fCAodGhpcy5kaXNwbGF5ZXhwcmVzc2lvbiAmJiAhdGhpcy5kYXRhc291cmNlKSkpICB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlleHByZXNzaW9uID0gdGhpcy5kaXNwbGF5bGFiZWw7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlsYWJlbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdoZW4gZGF0YW9wdGlvbnMgYXJlIHByb3ZpZGVkIGFuZCB0aGVyZSBpcyBubyBkaXNwbGF5bGFiZWwgZ2l2ZW4gdGhlbiBkaXNwbGF5bGFiZWwgaXMgc2V0IGFzIHRoZSByZWxhdGVkZmllbGRcbiAgICAgICAgaWYgKGtleSA9PT0gJ2Rpc3BsYXlsYWJlbCcgJiYgdGhpcy5kYXRhb3B0aW9ucyAmJiB0aGlzLmJpbmRkaXNwbGF5bGFiZWwgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMucXVlcnkgPSBnZXQodGhpcy5fbW9kZWxCeVZhbHVlLCBudikgfHwgdGhpcy5fbW9kZWxCeVZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2hlbiBzZWFyY2ggaXMgZGlzYWJsZWQsIGRvIG5vdCBsb2FkIGFueSBtb3JlIGRhdGEgb3IganVzdCBjbGVhciB0aGUgZGF0YSB0aGF0IGlzIGFscmVhZHkgaW4gcHJvY2VzcyBvciBsb2FkZWQuXG4gICAgICAgIGlmIChrZXkgPT09ICdkaXNhYmxlZCcpIHtcbiAgICAgICAgICAgIGlmIChudiA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyRGF0YSA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyRGF0YSA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKGdldCgodGhpcy50eXBlYWhlYWQgYXMgYW55KSwgJ190eXBlYWhlYWQuaXNTaG93bicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkLmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICB9XG59XG4iLCI8bmctdGVtcGxhdGUgI2N1c3RvbUl0ZW1UZW1wbGF0ZSBsZXQtbW9kZWw9XCJpdGVtXCIgbGV0LWluZGV4PVwiaW5kZXhcIiBsZXQtcXVlcnk9XCJxdWVyeVwiIGxldC1tYXRjaD1cIm1hdGNoXCI+XG4gICAgPCEtLSBEZWZhdWx0IGl0ZW0gdGVtcGxhdGUgLS0+XG4gICAgPGEgKm5nSWY9XCIhY29udGVudFwiPlxuICAgICAgICA8aW1nICpuZ0lmPVwibW9kZWwuaW1nU3JjXCIgW3NyY109XCJtb2RlbC5pbWdTcmNcIiBhbHQ9XCJTZWFyY2hcIiBbc3R5bGUud2lkdGhdPVwiaW1hZ2V3aWR0aFwiPlxuICAgICAgICA8c3BhbiBbdGl0bGVdPVwibW9kZWwubGFiZWxcIiBbaW5uZXJIdG1sXT1cImhpZ2hsaWdodChtYXRjaCwgcXVlcnkpIHx8IG1vZGVsLmxhYmVsXCI+PC9zcGFuPlxuICAgIDwvYT5cbiAgICA8IS0tIEN1c3RvbSBwYXJ0aWFsIHRlbXBsYXRlIC0tPlxuICAgIDxhICpuZ0lmPVwiY29udGVudFwiIFtuZ0NsYXNzXT1cIntjdXN0b21UZW1wbGF0ZTogY29udGVudH1cIiBwYXJ0aWFsQ29udGFpbmVyIFt3bUl0ZW1UZW1wbGF0ZV09XCJjb250ZW50XCIgW3VzZXJDb21wb25lbnRQYXJhbXNdPVwibWF0Y2guaXRlbVwiPlxuICAgICAgICA8ZGl2IHBhcnRpYWwtY29udGFpbmVyLXRhcmdldD48L2Rpdj5cbiAgICA8L2E+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2N1c3RvbUxpc3RUZW1wbGF0ZSBsZXQtbWF0Y2hlcz1cIm1hdGNoZXNcIiBsZXQtaXRlbVRlbXBsYXRlPVwiaXRlbVRlbXBsYXRlXCIgbGV0LXF1ZXJ5PVwicXVlcnlcIj5cbiAgICA8dWwgI3VsRWxlbWVudCBjbGFzcz1cImFwcC1zZWFyY2ggZHJvcGRvd24tbWVudVwiIHNjcm9sbGFibGU+XG4gICAgICAgIDxsaSAjbGlFbGVtZW50cyAqbmdGb3I9XCJsZXQgbWF0Y2ggb2YgbWF0Y2hlczsgbGV0IGkgPSBpbmRleDtcIiBbbmdDbGFzc109XCJ7YWN0aXZlOiB0eXBlYWhlYWRDb250YWluZXIgJiYgdHlwZWFoZWFkQ29udGFpbmVyLmlzQWN0aXZlKG1hdGNoKSwgJ2xpc3QtZ3JvdXAtaGVhZGVyJzogbWF0Y2ggJiYgbWF0Y2guaXNIZWFkZXIoKX1cIlxuICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwidHlwZWFoZWFkQ29udGFpbmVyLnNlbGVjdEFjdGl2ZShtYXRjaCk7XCJcbiAgICAgICAgICAgIChjbGljayk9XCJtYXRjaCAmJiAhbWF0Y2guaXNIZWFkZXIoKSAmJiB0eXBlYWhlYWRDb250YWluZXIuc2VsZWN0TWF0Y2gobWF0Y2gsICRldmVudCk7ICR0eXBlYWhlYWRFdmVudCA9ICRldmVudDsgbm90aWZ5U3Vic2NyaWJlcigpO1wiPlxuICAgICAgICAgICAgPCEtLSBpdGVtVGVtcGxhdGUgY29tZXMgZnJvbSB0aGUgPGlucHV0PiAtLT5cbiAgICAgICAgICAgIDxoNCAqbmdJZj1cIm1hdGNoLmlzSGVhZGVyKClcIiBjbGFzcz1cImdyb3VwLXRpdGxlXCI+e3ttYXRjaC52YWx1ZX19PC9oND5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbWF0Y2guaXNIZWFkZXIoKVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7aXRlbTogbWF0Y2guaXRlbSwgaW5kZXg6IGksIG1hdGNoOiBtYXRjaCwgcXVlcnk6IHF1ZXJ5fVwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0dXNcIiBbaGlkZGVuXT1cIl9sb2FkaW5nSXRlbXMgfHwgIShkYXRhY29tcGxldGVtc2cgJiYgZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UpXCI+XG4gICAgICAgICAgICA8c3BhbiBbdGV4dENvbnRlbnRdPVwiZGF0YWNvbXBsZXRlbXNnXCI+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0YXR1c1wiIFtoaWRkZW5dPVwiIV9sb2FkaW5nSXRlbXNcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2lyY2xlLW8tbm90Y2ggZmEtc3BpblwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJsb2FkaW5nZGF0YW1zZ1wiPjwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC91bD5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS1UaGlzIHRlbXBsYXRlIGlzIGZvciBzZWFyY2ggaW5zaWRlIG1vYmlsZSBuYXZiYXIuLS0+XG48bmctY29udGFpbmVyICpuZ0lmPVwibmF2c2VhcmNoYmFyOyBlbHNlIHNlYXJjaFRlbXBsYXRlXCI+XG4gICAgPGlucHV0IFt0aXRsZV09XCJxdWVyeSB8fCAnJ1wiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJhcHAtdGV4dGJveCBmb3JtLWNvbnRyb2wgbGlzdC1vZi1vYmpzIGFwcC1zZWFyY2gtaW5wdXRcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfHwgJydcIlxuICAgICAgICAgICBmb2N1cy10YXJnZXRcbiAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgIFthdHRyLmFjY2Vzc2tleV09XCJzaG9ydGN1dGtleVwiXG4gICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgIFsobmdNb2RlbCldPVwicXVlcnlcIlxuICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCJcbiAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgW3R5cGVhaGVhZF09XCJ0eXBlYWhlYWREYXRhU291cmNlXCJcbiAgICAgICAgICAgW3R5cGVhaGVhZFdhaXRNc109XCJkZWJvdW5jZXRpbWVcIlxuICAgICAgICAgICBbdHlwZWFoZWFkSXRlbVRlbXBsYXRlXT1cImN1c3RvbUl0ZW1UZW1wbGF0ZVwiXG4gICAgICAgICAgIFtvcHRpb25zTGlzdFRlbXBsYXRlXT1cImN1c3RvbUxpc3RUZW1wbGF0ZVwiXG4gICAgICAgICAgIChpbnB1dCk9XCJvbklucHV0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAoa2V5ZG93bik9XCJsaXN0ZW5RdWVyeSA9IHRydWVcIlxuICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCIkdHlwZWFoZWFkRXZlbnQgPSAkZXZlbnQ7aGFuZGxlRW50ZXJFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgKGtleWRvd24uYXJyb3dkb3duKT1cInNlbGVjdE5leHQoJGV2ZW50KVwiXG4gICAgICAgICAgIChibHVyKT1cImludm9rZU9uVG91Y2hlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUZvY3VzKCRldmVudCk7XCJcbiAgICAgICAgICAgKGZvY3VzKT1cIl91bnN1YnNjcmliZUR2ID0gZmFsc2U7IGxpc3RlblF1ZXJ5ID0gdHJ1ZTsgaGFuZGxlRm9jdXMoJGV2ZW50KTsgaW52b2tlT25Gb2N1cygkZXZlbnQpO1wiXG4gICAgICAgICAgIChmb2N1c291dCk9XCJvbkZvY3VzT3V0KClcIlxuICAgICAgICAgICBbdHlwZWFoZWFkTWluTGVuZ3RoXT1cIm1pbmNoYXJzXCJcbiAgICAgICAgICAgW3R5cGVhaGVhZE9wdGlvbnNMaW1pdF09XCJsaW1pdFwiXG4gICAgICAgICAgICh0eXBlYWhlYWRMb2FkaW5nKT1cIl9sb2FkaW5nSXRlbXNcIlxuICAgICAgICAgICAodHlwZWFoZWFkT25TZWxlY3QpPVwidHlwZWFoZWFkT25TZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgIHR5cGVhaGVhZE9wdGlvbkZpZWxkPVwibGFiZWxcIlxuICAgICAgICAgICBbdHlwZWFoZWFkR3JvdXBGaWVsZF09XCJncm91cGJ5ID8gJ2dyb3VwYnknIDogbnVsbFwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRBc3luY109XCJ0cnVlXCJcbiAgICAgICAgICAgW3R5cGVhaGVhZFNjcm9sbGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cInRydWVcIlxuICAgICAgICAgICBbdHlwZWFoZWFkT3B0aW9uc0luU2Nyb2xsYWJsZVZpZXddPVwib3B0aW9uc2xpbWl0aW5zY3JvbGxhYmxldmlld1wiXG4gICAgICAgICAgIFtkcm9wdXBdPVwiZHJvcHVwXCJcbiAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgICAgICAgW2F0dHIubmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhbGFiZWwgfHwgJ1NlYXJjaCBmaWVsZCdcIi8+XG4gICAgPGkgY2xhc3M9XCJidG4tY2xvc2Ugd2kgd2ktY2FuY2VsXCIgW2hpZGRlbl09XCIhc2hvd0Nsb3NlYnRuXCIgKGNsaWNrKT1cImNsZWFyU2VhcmNoKCRldmVudCk7XCI+PC9pPlxuPC9uZy1jb250YWluZXI+XG48IS0tVGhpcyB0ZW1wbGF0ZSBpcyBmb3IgYm90aCB3ZWIgYW5kIGZ1bGxzY3JlZW4gbW9kZSBpbiBtb2JpbGUuLS0+XG48bmctdGVtcGxhdGUgI3NlYXJjaFRlbXBsYXRlPlxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWljb24gZm9ybS1jb250cm9sLWZlZWRiYWNrIGJhY2stYnRuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKGNsaWNrKT1cImNsb3NlU2VhcmNoKClcIj48aSBjbGFzcz1cImFwcC1pY29uIHt7YmFja3NlYXJjaGljb25jbGFzc319XCI+PC9pPjwvYnV0dG9uPlxuICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkJhY2sgYnV0dG9uPC9zcGFuPlxuICAgIDxpbnB1dCBbdGl0bGVdPVwicXVlcnkgfHwgJydcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiYXBwLXRleHRib3ggZm9ybS1jb250cm9sIGxpc3Qtb2Ytb2JqcyBhcHAtc2VhcmNoLWlucHV0XCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyIHx8ICcnXCJcbiAgICAgICAgICAgZm9jdXMtdGFyZ2V0XG4gICAgICAgICAgIFtjb250YWluZXJdPVwiY29udGFpbmVyVGFyZ2V0IHx8ICcud20tYXBwJ1wiXG4gICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgIFthdHRyLmFjY2Vzc2tleV09XCJzaG9ydGN1dGtleVwiXG4gICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgIFsobmdNb2RlbCldPVwicXVlcnlcIlxuICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCJcbiAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgW3R5cGVhaGVhZF09XCJ0eXBlYWhlYWREYXRhU291cmNlXCJcbiAgICAgICAgICAgW3R5cGVhaGVhZFdhaXRNc109XCJkZWJvdW5jZXRpbWVcIlxuICAgICAgICAgICBbdHlwZWFoZWFkSXRlbVRlbXBsYXRlXT1cImN1c3RvbUl0ZW1UZW1wbGF0ZVwiXG4gICAgICAgICAgIFtvcHRpb25zTGlzdFRlbXBsYXRlXT1cImN1c3RvbUxpc3RUZW1wbGF0ZVwiXG4gICAgICAgICAgIChpbnB1dCk9XCJvbklucHV0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAoa2V5ZG93bik9XCJsaXN0ZW5RdWVyeSA9IHRydWVcIlxuICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCIkdHlwZWFoZWFkRXZlbnQgPSAkZXZlbnQ7aGFuZGxlRW50ZXJFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgKGtleWRvd24uYXJyb3dkb3duKT1cInNlbGVjdE5leHQoJGV2ZW50KVwiXG4gICAgICAgICAgIChibHVyKT1cImludm9rZU9uVG91Y2hlZCgkZXZlbnQpOyBvbkZvY3VzT3V0KClcIlxuICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlRm9jdXMoJGV2ZW50KTtcIlxuICAgICAgICAgICAoZm9jdXMpPVwiX3Vuc3Vic2NyaWJlRHYgPSBmYWxzZTsgbGlzdGVuUXVlcnkgPSB0cnVlOyBoYW5kbGVGb2N1cygkZXZlbnQpOyBpbnZva2VPbkZvY3VzKCRldmVudClcIlxuICAgICAgICAgICBbdHlwZWFoZWFkTWluTGVuZ3RoXT1cIm1pbmNoYXJzXCJcbiAgICAgICAgICAgW3R5cGVhaGVhZE9wdGlvbnNMaW1pdF09XCJsaW1pdFwiXG4gICAgICAgICAgICh0eXBlYWhlYWRMb2FkaW5nKT1cIl9sb2FkaW5nSXRlbXNcIlxuICAgICAgICAgICAodHlwZWFoZWFkT25TZWxlY3QpPVwidHlwZWFoZWFkT25TZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgIHR5cGVhaGVhZE9wdGlvbkZpZWxkPVwibGFiZWxcIlxuICAgICAgICAgICBbdHlwZWFoZWFkR3JvdXBGaWVsZF09XCJncm91cGJ5ID8gJ2dyb3VwYnknIDogbnVsbFwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRBc3luY109XCJ0cnVlXCJcbiAgICAgICAgICAgW3R5cGVhaGVhZFNjcm9sbGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cInRydWVcIlxuICAgICAgICAgICBbdHlwZWFoZWFkT3B0aW9uc0luU2Nyb2xsYWJsZVZpZXddPVwib3B0aW9uc2xpbWl0aW5zY3JvbGxhYmxldmlld1wiXG4gICAgICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICAgICAgIFtkcm9wdXBdPVwiZHJvcHVwXCJcbiAgICAgICAgICAgW2F0dHIubmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhbGFiZWwgfHwgJ1NlYXJjaCBmaWVsZCdcIj5cbiAgICA8aW5wdXQgY2xhc3M9XCJtb2RlbC1ob2xkZXJcIiBuZy1tb2RlbD1cInByb3h5TW9kZWxcIiBuZy1yZXF1aXJlZD1cInJlcXVpcmVkXCIgdGFiaW5kZXg9XCItMVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxzcGFuICpuZ0lmPVwiX2xvYWRpbmdJdGVtc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiZmEgZmEtY2lyY2xlLW8tbm90Y2ggZmEtc3BpbiBmb3JtLWNvbnRyb2wtZmVlZGJhY2tcIj48L3NwYW4+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4taWNvbiBmb3JtLWNvbnRyb2wtZmVlZGJhY2sgY2xlYXItYnRuXCIgW25nQ2xhc3NdPVwieydzaG93LWJ0bic6IGlzUXVlcnlFbnRlcmVkKCl9XCIgKGNsaWNrKT1cImNsZWFyU2VhcmNoKCRldmVudCwgdHJ1ZSlcIj48aSBjbGFzcz1cImFwcC1pY29uIHt7Y2xlYXJzZWFyY2hpY29uY2xhc3N9fVwiPjwvaT48L2J1dHRvbj5cbiAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbGVhciBidXR0b248L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCJzaG93c2VhcmNoaWNvblwiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOiBkaXNhYmxlZH1cIiBjbGFzcz1cImlucHV0LWdyb3VwLWFkZG9uXCI+XG4gICAgICAgIDxmb3JtPlxuICAgICAgICAgICAgPGJ1dHRvbiB0aXRsZT1cIlNlYXJjaFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIGNsYXNzPVwiYXBwLXNlYXJjaC1idXR0b24gYnRuIGJ0bi1pY29uXCIgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblNlYXJjaFNlbGVjdCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiYXBwLWljb24ge3tzZWFyY2hpY29uY2xhc3N9fVwiPjwvaT48L2J1dHRvbj5cbiAgICAgICAgPC9mb3JtPlxuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
936
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SearchComponent, { className: "SearchComponent", filePath: "search.component.ts", lineNumber: 66 }); })();
|
937
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9iYXNpYy9zZWFyY2gvc3JjL3NlYXJjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvYmFzaWMvc2VhcmNoL3NyYy9zZWFyY2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBRVIsUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxhQUFhLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRCxPQUFPLEVBQThCLGtCQUFrQixFQUFpQixNQUFNLHlCQUF5QixDQUFDO0FBRXhHLE9BQU8sRUFBQyxRQUFRLEVBQUUsdUJBQXVCLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUM1RyxPQUFPLEVBQ0gsU0FBUyxFQUNULG1CQUFtQixFQUVuQixrQkFBa0IsRUFDbEIsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUN0QixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLE1BQU0sRUFDTixpQkFBaUIsRUFDcEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUUvRCxPQUFPLEVBQUMs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Q25ELFNBQVMsQ0FBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQztnQkFDL0Msa0JBQWtCLENBQUMsZUFBZSxDQUFDO2FBQ3RDO1lDVUwsQUF2Q0EsQUF0QkEsQUFaQSxpSEFBd0csb0dBWUMsc0VBc0JqRCxzR0F1QzNCOzs7WUF2Q2QsZUFBb0I7WUFBQSxBQUFwQix1Q0FBb0IsZ0NBQW1COzs7aUZEK0J6QyxlQUFlO2NBVDNCLFNBQVM7MkJBQ0ksWUFBWSxhQUVYO29CQUNQLFNBQVMsa0JBQWtCLGlCQUFpQixFQUFFLElBQUksQ0FBQztvQkFDbkQsU0FBUyxrQkFBa0IsYUFBYSxFQUFFLElBQUksQ0FBQztvQkFDL0Msa0JBQWtCLGlCQUFpQjtpQkFDdEM7O3NCQStFSSxTQUFTO3VCQUFDLGdCQUFnQjs7c0JBQzFCLFNBQVM7dUJBQUMsY0FBYzs7c0JBQ3hCLE1BQU07dUJBQUMsa0JBQWtCOztzQkFBRyxRQUFRO3FCQTVDVixTQUFTO2tCQUF2QyxTQUFTO21CQUFDLGtCQUFrQjtZQUNMLFNBQVM7a0JBQWhDLFNBQVM7bUJBQUMsV0FBVztZQUNNLFVBQVU7a0JBQXJDLFlBQVk7bUJBQUMsWUFBWTs7a0ZBckNqQixlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQXR0cmlidXRlLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7ZnJvbSwgT2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXIsIG1lcmdlTWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7VHlwZWFoZWFkQ29udGFpbmVyQ29tcG9uZW50LCBUeXBlYWhlYWREaXJlY3RpdmUsIFR5cGVhaGVhZE1hdGNofSBmcm9tICduZ3gtYm9vdHN0cmFwL3R5cGVhaGVhZCc7XG5cbmltcG9ydCB7YWRkQ2xhc3MsIGFkanVzdENvbnRhaW5lclBvc2l0aW9uLCBBcHAsIERhdGFTb3VyY2UsIGlzRGVmaW5lZCwgaXNNb2JpbGUsIHRvQm9vbGVhbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBTExGSUVMRFMsXG4gICAgY29udmVydERhdGFUb09iamVjdCxcbiAgICBEYXRhU2V0SXRlbSxcbiAgICBleHRyYWN0RGF0YUFzQXJyYXksXG4gICAgZ2V0Q29udGFpbmVyVGFyZ2V0Q2xhc3MsXG4gICAgZ2V0VW5pcU9ianNCeURhdGFGaWVsZCxcbiAgICBwcm92aWRlQXMsXG4gICAgcHJvdmlkZUFzV2lkZ2V0UmVmLFxuICAgIHN0eWxlcixcbiAgICB0cmFuc2Zvcm1Gb3JtRGF0YVxufSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7RGF0YXNldEF3YXJlRm9ybUNvbXBvbmVudH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvaW5wdXQnO1xuXG5pbXBvcnQge3JlZ2lzdGVyUHJvcHN9IGZyb20gJy4vc2VhcmNoLnByb3BzJztcbmltcG9ydCB7RGF0YVByb3ZpZGVyLCBJRGF0YVByb3ZpZGVyLCBJRGF0YVByb3ZpZGVyQ29uZmlnfSBmcm9tICcuL2RhdGEtcHJvdmlkZXIvZGF0YS1wcm92aWRlcic7XG5pbXBvcnQge1xuICAgIGRlYm91bmNlLFxuICAgIGZpbmQsXG4gICAgZ2V0LFxuICAgIGluY2x1ZGVzLFxuICAgIGlzQXJyYXksXG4gICAgaXNFbXB0eSxcbiAgICBpc0VxdWFsLFxuICAgIGlzT2JqZWN0LFxuICAgIGlzVW5kZWZpbmVkLFxuICAgIG1hcCxcbiAgICBzcGxpdCxcbiAgICB0b1N0cmluZyxcbiAgICB0cmltXG59IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuY29uc3QgV0lER0VUX0NPTkZJRyA9IHsgd2lkZ2V0VHlwZTogJ3dtLXNlYXJjaCcsIGhvc3RDbGFzczogJ2lucHV0LWdyb3VwJyB9O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ1t3bVNlYXJjaF0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2guY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXMoU2VhcmNoQ29tcG9uZW50LCBOR19WQUxVRV9BQ0NFU1NPUiwgdHJ1ZSksXG4gICAgICAgIHByb3ZpZGVBcyhTZWFyY2hDb21wb25lbnQsIE5HX1ZBTElEQVRPUlMsIHRydWUpLFxuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoU2VhcmNoQ29tcG9uZW50KVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoQ29tcG9uZW50IGV4dGVuZHMgRGF0YXNldEF3YXJlRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcbiAgICBwdWJsaWMgY2FzZXNlbnNpdGl2ZTogYm9vbGVhbjtcbiAgICBwdWJsaWMgc2VhcmNoa2V5OiBzdHJpbmc7XG4gICAgcHVibGljIHF1ZXJ5TW9kZWw6IEFycmF5PERhdGFTZXRJdGVtPiB8IHN0cmluZztcbiAgICBwdWJsaWMgcXVlcnkgPSAnJztcbiAgICBwdWJsaWMgbGltaXQ6IGFueTtcbiAgICBwdWJsaWMgc2hvd3NlYXJjaGljb246IGJvb2xlYW47XG4gICAgcHVibGljIG1pbmNoYXJzOiBudW1iZXI7XG4gICAgcHVibGljIHR5cGU6IHN0cmluZztcbiAgICBwdWJsaWMgbmF2c2VhcmNoYmFyOiBhbnk7XG4gICAgcHVibGljIGRlYm91bmNldGltZTogbnVtYmVyO1xuICAgIHB1YmxpYyBoaW50OiBzdHJpbmc7XG4gICAgcHVibGljIGFyaWFsYWJlbDogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBhcHA6IEFwcDtcbiAgICBwcml2YXRlIHR5cGVhaGVhZERhdGFTb3VyY2U6IE9ic2VydmFibGU8YW55PjtcbiAgICBwcml2YXRlIHBhZ2VzaXplOiBhbnk7XG4gICAgcHJpdmF0ZSBwYWdlID0gMTtcbiAgICBwdWJsaWMgX2xvYWRpbmdJdGVtczogYm9vbGVhbjtcbiAgICBwcml2YXRlIGRhdGFQcm92aWRlcjogSURhdGFQcm92aWRlcjtcbiAgICBwcml2YXRlIHJlc3VsdDogQXJyYXk8YW55PjsgLy8gY29udGFpbnMgdGhlIHNlYXJjaCByZXN1bHQgaS5lLiBtYXRjaGVzXG4gICAgcHJpdmF0ZSBmb3JtYXR0ZWREYXRhc2V0OiBhbnk7XG4gICAgcHJpdmF0ZSBpc2Zvcm1maWVsZDogYm9vbGVhbjtcbiAgICBwcml2YXRlICR0eXBlYWhlYWRFdmVudDogRXZlbnQ7XG5cbiAgICBwdWJsaWMgdGFiaW5kZXg6IG51bWJlcjtcbiAgICBwdWJsaWMgc3RhcnRJbmRleDogbnVtYmVyO1xuICAgIHB1YmxpYyBiaW5kZGlzcGxheWxhYmVsOiBzdHJpbmc7XG4gICAgcHVibGljIHR5cGVhaGVhZENvbnRhaW5lcjogVHlwZWFoZWFkQ29udGFpbmVyQ29tcG9uZW50O1xuICAgIHB1YmxpYyBjb250YWluZXJUYXJnZXQ6IHN0cmluZztcbiAgICBwdWJsaWMgY2xlYXJzZWFyY2hpY29uY2xhc3M6IHN0cmluZztcbiAgICBwdWJsaWMgYmFja3NlYXJjaGljb25jbGFzczogc3RyaW5nO1xuICAgIHB1YmxpYyBzZWFyY2hpY29uY2xhc3M6IHN0cmluZztcblxuICAgIEBWaWV3Q2hpbGQoVHlwZWFoZWFkRGlyZWN0aXZlKSB0eXBlYWhlYWQ6IFR5cGVhaGVhZERpcmVjdGl2ZTtcbiAgICBAVmlld0NoaWxkKCd1bEVsZW1lbnQnKSB1bEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZHJlbignbGlFbGVtZW50cycpIGxpRWxlbWVudHM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICAgIHByaXZhdGUgYWxsb3dvbmx5c2VsZWN0OiBib29sZWFuO1xuICAgIHByaXZhdGUgY2xhc3M6IHN0cmluZztcblxuICAgIHByaXZhdGUgbGFzdFNlbGVjdGVkSW5kZXg6IG51bWJlcjtcbiAgICBwcml2YXRlIGRhdGFvcHRpb25zOiBhbnk7XG4gICAgcHVibGljIGRyb3Bkb3duRWw6IGFueTtcbiAgICBwcml2YXRlIF9sYXN0UXVlcnk6IHN0cmluZztcbiAgICBwcml2YXRlIF9sYXN0UmVzdWx0OiBhbnk7XG4gICAgcHJpdmF0ZSBfaXNPcGVuOiBib29sZWFuOyAvLyBzZXQgdG8gdHJ1ZSB3aGVuIGRyb3Bkb3duIGlzIG9wZW5cbiAgICBwcml2YXRlIHNob3dDbG9zZWJ0bjogYm9vbGVhbjtcbiAgICBwcml2YXRlIF91bnN1YnNjcmliZUR2OiBib29sZWFuO1xuICAgIHByaXZhdGUgX2RhdGFzb3VyY2U6IGFueTtcbiAgICBwcml2YXRlIGlzU2Nyb2xsZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBwYXJlbnRFbDogYW55O1xuICAgIHByaXZhdGUgcG9zaXRpb246IHN0cmluZztcbiAgICBwcml2YXRlIGVsSW5kZXg6IG51bWJlcjtcbiAgICBwcml2YXRlIGxpc3RlblF1ZXJ5OiBib29sZWFuO1xuICAgIHByaXZhdGUgX2RvbVVwZGF0ZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBzZWFyY2hvbjogc3RyaW5nO1xuICAgIHByaXZhdGUgc2hvd2NsZWFyOiBib29sZWFuO1xuICAgIHB1YmxpYyBtYXRjaG1vZGU6IHN0cmluZztcbiAgICBwcml2YXRlIGNsZWFyRGF0YTogYm9vbGVhbjtcblxuXG4gICAgLy8gZ2V0dGVyIHNldHRlciBpcyBhZGRlZCB0byBwYXNzIHRoZSBkYXRhc291cmNlIHRvIHNlYXJjaGNvbXBvbmVudC5cbiAgICBnZXQgZGF0YXNvdXJjZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFzb3VyY2U7XG4gICAgfVxuXG4gICAgc2V0IGRhdGFzb3VyY2UobnYpIHtcbiAgICAgICAgdGhpcy5fZGF0YXNvdXJjZSA9IG52O1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhdmFsdWUgfHwgdGhpcy50b0JlUHJvY2Vzc2VkRGF0YXZhbHVlO1xuICAgICAgICB0aGlzLnVwZGF0ZUJ5RGF0YXZhbHVlKGRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmo6IEluamVjdG9yLFxuICAgICAgICBhcHA6IEFwcCxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGF0YXZhbHVlLmJpbmQnKSBwdWJsaWMgYmluZGRhdGF2YWx1ZSxcbiAgICAgICAgQEF0dHJpYnV0ZSgnZGF0YXNldC5iaW5kJykgcHVibGljIGJpbmRkYXRhc2V0LFxuICAgICAgICBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnlcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQpO1xuICAgICAgICAvLyB0aGlzIGZsYWcgd2lsbCBub3QgYWxsb3cgdGhlIGVtcHR5IGRhdGFmaWVsZCB2YWx1ZXMuXG4gICAgICAgIHRoaXMuYWxsb3dlbXB0eSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFwcCA9IGFwcDtcbiAgICAgICAgYWRkQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCAnYXBwLXNlYXJjaCcsIHRydWUpO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBMaXN0ZW5zIGZvciB0aGUgY2hhbmdlIGluIHRoZSBuZ01vZGVsIG9uIGV2ZXJ5IHNlYXJjaCBhbmQgcmV0cmlldmVzIHRoZSBkYXRhIGFzIG9ic2VydmFibGUuXG4gICAgICAgICAqIFRoaXMgb2JzZXJ2YWJsZSBkYXRhIGlzIHBhc3NlZCB0byB0aGUgdHlwZWFoZWFkLlxuICAgICAgICAgKiBAdHlwZSB7T2JzZXJ2YWJsZTxhbnk+fVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50eXBlYWhlYWREYXRhU291cmNlID0gT2JzZXJ2YWJsZVxuICAgICAgICAgICAgLmNyZWF0ZSgob2JzZXJ2ZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFJ1bnMgb24gZXZlcnkgc2VhcmNoXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGlzdGVuUXVlcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdFF1ZXJ5SW52b2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHRoaXMucXVlcnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBvbiBrZXlkb3duLCB3aGlsZSBzY3JvbGxpbmcgdGhlIGRyb3Bkb3duIGl0ZW1zLCB3aGVuIGxhc3QgaXRlbSBpcyByZWFjaGVkIG5leHQgY2FsbCBpcyB0cmlnZ2VyZWRcbiAgICAgICAgICAgICAgICAvLyB1bmxlc3MgdGhlIGNhbGwgaXMgcmVzb2x2ZWQsIHdlIGFyZSBhYmxlIHRvIHNjcm9sbCBuZXh0IHRvIGZpcnN0IGl0ZW0gYW5kIHNvb25cbiAgICAgICAgICAgICAgICAvLyBUaGlzIHNob3dzIGZsaWNrZXJpbmcgZnJvbSBmaXJzdCBpdGVtIHRvIG5leHQgbmV3IGl0ZW1zIGFwcGVuZGVkLlxuICAgICAgICAgICAgICAgIC8vIEJ5IHNldHRpbmcgY29udGFpbmVyIHRvIHVuZGVmaW5lZCwga2V5IGV2ZW50cyBjaGFuZ2VzIHdpbGwgYmUgc3RvcHBlZCB3aGlsZSBsb2FkaW5nIGl0ZW1zXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGFzdFNlbGVjdGVkSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQuX2NvbnRhaW5lciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMubWluY2hhcnMgPT09IDAgfHwgKHRoaXMucXVlcnkgJiYgdGhpcy5xdWVyeS5sZW5ndGggPj0gdGhpcy5taW5jaGFycykpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKCh0b2tlbjogc3RyaW5nKSA9PiB0aGlzLmdldERhdGFTb3VyY2VBc09ic2VydmFibGUodG9rZW4pKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmRhdGFQcm92aWRlciA9IG5ldyBEYXRhUHJvdmlkZXIoKTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogV2hlbiBkZWZhdWx0IGRhdGF2YWx1ZSBpcyBub3QgZm91bmQgd2l0aGluIHRoZSBkYXRhc2V0LCBhIGZpbHRlciBjYWxsIGlzIG1hZGUgdG8gZ2V0IHRoZSByZWNvcmQgdXNpbmcgZmV0Y2hEZWZhdWx0TW9kZWwuXG4gICAgICAgICAqIGFmdGVyIGdldHRpbmcgdGhlIHJlc3BvbnNlLCBzZXQgdGhlIHF1ZXJ5TW9kZWwgYW5kIHF1ZXJ5LlxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgZGF0YXZhbHVlU3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhdmFsdWUkLnN1YnNjcmliZSgodmFsOiBBcnJheTxzdHJpbmc+IHwgc3RyaW5nKSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gKGlzQXJyYXkodmFsKSA/IHZhbFswXSA6IHZhbCkgYXMgc3RyaW5nO1xuXG4gICAgICAgICAgICBpZiAocXVlcnkgPT09IG51bGwgfHwgcXVlcnkgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgLy8gcmVzZXQgdGhlIHF1ZXJ5LlxuICAgICAgICAgICAgICAgIHRoaXMucXVlcnkgPSB0aGlzLnF1ZXJ5TW9kZWwgPSAnJztcbiAgICAgICAgICAgICAgICAvLyBvbiBjbGVhciBvciByZXNldCBmaWx0ZXIsIGVtcHR5IHRoZSBsYXN0UmVzdWx0cyB0byBmZXRjaCBuZXcgcmVjb3Jkcy5cbiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0UmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLl91bnN1YnNjcmliZUR2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGVmYXVsdFF1ZXJ5SW52b2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIGlmIHByZXYgZGF0YXZhbHVlIGlzIG5vdCBlcXVhbCB0byBjdXJyZW50IGRhdGF2YWx1ZSB0aGVuIGNsZWFyIHRoZSBtb2RlbEJ5S2V5IGFuZCBxdWVyeU1vZGVsXG4gICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdCh2YWwpICYmICh0aGlzIGFzIGFueSkucHJldkRhdGF2YWx1ZSAhPT0gdmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21vZGVsQnlLZXkgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVlcnkgPSB0aGlzLnF1ZXJ5TW9kZWwgPSAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIGRhdGFmaWVsZCBpcyBBTExGSUxFRFMgZG8gbm90IGZldGNoIHRoZSByZWNvcmRzXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBxdWVyeSBtb2RlbCB3aXRoIHRoZSB2YWx1ZXMgd2UgaGF2ZVxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQnlEYXRhdmFsdWUodmFsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdHVybiBvbiBzaG93Q2xvc2VCdG4gd2hlbiBhIGRlZmF1bHQgdmFsdWUgaXMgZ2l2ZW5cbiAgICAgICAgICAgIHRoaXMuc2hvd0Nsb3NlYnRuID0gKHRoaXMucXVlcnkgIT09ICcnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoKCkgPT4gZGF0YXZhbHVlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuXG4gICAgICAgIGNvbnN0IGRhdGFzZXRTdWJzY3JpcHRpb24gPSB0aGlzLmRhdGFzZXQkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAvLyBzZXQgdGhlIG5leHQgaXRlbSBpbmRleC5cbiAgICAgICAgICAgIHRoaXMuc3RhcnRJbmRleCA9IHRoaXMuZGF0YXNldEl0ZW1zLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuX2xhc3RSZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLmRhdGF2YWx1ZSB8fCB0aGlzLnRvQmVQcm9jZXNzZWREYXRhdmFsdWU7XG4gICAgICAgICAgICAvLyBpbnZva2luZyB1cGRhdGVCeURhdGFzZXQgb25seSB3aGVuIGRhdGF2YWx1ZSBpcyBwcmVzZW50LCBhcyBlbnRlcmVkIHZhbHVlIGkuZS4gcXVlcnkgaXMgc2V0dGluZyBiYWNrIHRvICcnXG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUJ5RGF0YXNldChkZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigoKSA9PiBkYXRhc2V0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuICAgIH1cblxuICAgIC8vIG9uIGNsZWFyLCB0cmlnZ2VyIHNlYXJjaCB3aXRoIHBhZ2Ugc2l6ZSAxXG4gICAgcHJpdmF0ZSBjbGVhclNlYXJjaCgkZXZlbnQsIGxvYWRPbkNsZWFyKSB7XG4gICAgICAgIHRoaXMucXVlcnkgPSAnJztcbiAgICAgICAgdGhpcy5vbklucHV0Q2hhbmdlKCRldmVudCk7XG4gICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5saXN0ZW5RdWVyeSA9IGZhbHNlO1xuICAgICAgICBpZiAobG9hZE9uQ2xlYXIpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuUXVlcnkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVEdiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5sb2FkTW9yZURhdGEoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NsZWFyc2VhcmNoJyk7XG4gICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAvLyB3aGVuIHNlYXJjaCBpbnB1dCBpcyBjbGVhcmVkLCBmb2N1cyBvbiB0aGUgaW5wdXQgZmllbGRcbiAgICAgICAgaWYgKCRldmVudCkge1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCcuYXBwLXNlYXJjaC1pbnB1dCcpLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmdW5jdGlvbiB0byAgY2xlYXIgdGhlIGlucHV0IHZhbHVlXG4gICAgcHVibGljIGNsZWFyVGV4dCgpIHtcbiAgICAgICAgdGhpcy5xdWVyeSA9ICcnO1xuICAgICAgICB0aGlzLnNob3dDbG9zZWJ0biA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIENsb3NlIHRoZSBmdWxsIHNjcmVlbiBtb2RlIGluIG1vYmlsZSB2aWV3IG9mIGF1dG8gY29tcGxldGVcbiAgICBwcml2YXRlIGNsb3NlU2VhcmNoKCkge1xuICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wYWdlID0gMTtcbiAgICAgICAgLy8gYWZ0ZXIgY2xvc2luZyB0aGUgc2VhcmNoLCBpbnNlcnQgdGhlIGVsZW1lbnQgYXQgaXRzIHByZXZpb3VzIHBvc2l0aW9uIChlbEluZGV4KVxuICAgICAgICB0aGlzLmluc2VydEF0SW5kZXgodGhpcy5lbEluZGV4KTtcbiAgICAgICAgdGhpcy5lbEluZGV4ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnBhcmVudEVsID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCdmdWxsLXNjcmVlbicpO1xuICAgICAgICBpZiAodGhpcy5fZG9tVXBkYXRlZCkge1xuICAgICAgICAgICAgdGhpcy5fZG9tVXBkYXRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGlzdGVuUXVlcnkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVEdiA9IHRydWU7XG4gICAgICAgIHRoaXMudHlwZWFoZWFkLmhpZGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlck1vYmlsZUF1dG9Db21wbGV0ZSgpIHtcbiAgICAgICAgLy8gR2V0IHRoZSBwYXJlbnQgZWxlbWVudCBvZiB0aGUgc2VhcmNoIGVsZW1lbnQgd2hpY2ggY2FuIGJlIG5leHQgb3IgcHJldiBlbGVtZW50LCBpZiBib3RoIGFyZSBlbXB0eSB0aGVuIGdldCB0aGUgcGFyZW50IG9mIGVsZW1lbnQuXG4gICAgICAgIGlmICghaXNEZWZpbmVkKHRoaXMuZWxJbmRleCkpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50RWwgPSB0aGlzLiRlbGVtZW50LnBhcmVudCgpO1xuICAgICAgICAgICAgdGhpcy5lbEluZGV4ID0gdGhpcy5wYXJlbnRFbC5jaGlsZHJlbigpLmluZGV4KHRoaXMuJGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZnVsbC1zY3JlZW4nKSkge1xuICAgICAgICAgICAgLy8gdGhpcyBmbGFnIGlzIHNldCB0byBub3RpZnkgdGhhdCB0aGUgdHlwZWFoZWFkLWNvbnRhaW5lciBkb20gaGFzIGNoYW5nZWQgaXRzIHBvc2l0aW9uXG4gICAgICAgICAgICB0aGlzLl9kb21VcGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIEFkZCBmdWxsIHNjcmVlbiBjbGFzcyBvbiBmb2N1cyBvZiB0aGUgaW5wdXQgZWxlbWVudC5cbiAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoJ2Z1bGwtc2NyZWVuJyk7XG5cbiAgICAgICAgICAgIC8vIEFkZCBwb3NpdGlvbiB0byBzZXQgdGhlIGhlaWdodCB0byBhdXRvXG4gICAgICAgICAgICBpZiAodGhpcy5wb3NpdGlvbiA9PT0gJ2lubGluZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKHRoaXMucG9zaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGZvY3VzIGlzIGxvc3Qgd2hlbiBlbGVtZW50IGlzIGNoYW5nZWQgdG8gZnVsbC1zY3JlZW4sIGtleWRvd24gdG8gc2VsZWN0IG5leHQgaXRlbXMgd2lsbCBub3Qgd29ya1xuICAgICAgICAvLyBIZW5jZSBleHBsaWNpdGx5IGZvY3VzaW5nIHRoZSBpbnB1dFxuICAgICAgICBpZiAodGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZnVsbC1zY3JlZW4nKSkge1xuICAgICAgICAgICAgdGhpcy4kZWxlbWVudC5maW5kKCcuYXBwLXNlYXJjaC1pbnB1dCcpLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERhdGFTb3VyY2VBc09ic2VydmFibGUocXVlcnk6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgICAgIC8vIHNob3cgZHJvcGRvd24gb25seSB3aGVuIHRoZXJlIGlzIGNoYW5nZSBpbiBxdWVyeS4gVGhpcyBzaG91bGQgbm90IGFwcGx5IHdoZW4gZGF0YW9wdGlvbnMgd2l0aCBmaWx0ZXJGaWVsZHMgYXJlIHVwZGF0ZWQuXG4gICAgICAgIC8vIHdoZW4gbGFzdFJlc3VsdCBpcyBub3QgYXZhaWxhYmxlIGkuZS4gc3RpbGwgdGhlIGZpcnN0IGNhbGwgaXMgcGVuZGluZyBhbmQgc2Vjb25kIHF1ZXJ5IGlzIGludm9rZWQgdGhlbiBkbyBub3QgcmV0dXJuLlxuICAgICAgICBpZiAodGhpcy5fbGFzdFF1ZXJ5ID09PSBxdWVyeSAmJiAhZ2V0KHRoaXMuZGF0YW9wdGlvbnMsICdmaWx0ZXJGaWVsZHMnKSAmJiBpc0RlZmluZWQodGhpcy5fbGFzdFJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIG9mKHRoaXMuX2xhc3RSZXN1bHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLypcbiAgICAgICAgICAgICBXTVMtMTkxNzc6IE9uIGZvY3VzIG9mIGlucHV0IGZpZWxkIGZvciBhdXRvY29tcGxldGUgdHlwZSwgZG8gbm90IHRyaWdnZXIgYXBpIGNhbGwgd2hlblxuICAgICAgICAgICAgICAgICBhKSBzZWFyY2hrZXkgYW5kIGRpc3BsYXlleHByZXNzaW9uIGFyZSBkaWZmZXJlbnRcbiAgICAgICAgICAgICAgICAgYikgYmluZGRpc3BsYXlsYWJlbCBjb250YWlucyBtdWx0aXBsZSB2YWx1ZXNcbiAgICAgICAgICAgICAgICAgYykgYmluZGRpc3BsYXlsYWJlbCBjb250YWlucyBzaW5nbGUgdmFsdWUgd2hpY2ggZG9lcyBub3QgbWF0Y2ggd2l0aCBzZWFyY2hrZXlcbiAgICAgICAgKi9cbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2F1dG9jb21wbGV0ZScgJiYgdGhpcy5zZWFyY2hrZXkgJiYgdGhpcy5xdWVyeSAmJiB0aGlzLmRhdGF2YWx1ZSkge1xuICAgICAgICAgICAgbGV0IGJpbmREaXNwbGF5TGFiZWxBcnJheSA9IFtdO1xuICAgICAgICAgICAgY29uc3Qgc2VhcmNoS2V5QXJyYXkgPSBzcGxpdCh0aGlzLnNlYXJjaGtleSwgJywnKTtcbiAgICAgICAgICAgIGxldCBkaXNwbGF5bGFiZWw7XG4gICAgICAgICAgICBpZiAodGhpcy5iaW5kZGlzcGxheWxhYmVsKSB7XG4gICAgICAgICAgICAgICAgYmluZERpc3BsYXlMYWJlbEFycmF5ID0gc3BsaXQodGhpcy5iaW5kZGlzcGxheWxhYmVsLCAnKycpO1xuICAgICAgICAgICAgICAgIGlmIChiaW5kRGlzcGxheUxhYmVsQXJyYXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5jbHVkZXMoYmluZERpc3BsYXlMYWJlbEFycmF5WzBdLCAnfCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWdleCA9IC9cXFsoLio/KVxcXS87XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5bGFiZWwgPSByZWdleC5leGVjKGJpbmREaXNwbGF5TGFiZWxBcnJheVswXSlbMV07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5bGFiZWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChiaW5kRGlzcGxheUxhYmVsQXJyYXkubGVuZ3RoID4gMSB8fCAoZGlzcGxheWxhYmVsICYmICFpbmNsdWRlcyhzZWFyY2hLZXlBcnJheSwgZGlzcGxheWxhYmVsKSlcbiAgICAgICAgICAgICAgICB8fCAodGhpcy5kaXNwbGF5ZXhwcmVzc2lvbiAmJiAhaW5jbHVkZXMoc2VhcmNoS2V5QXJyYXksIHRoaXMuZGlzcGxheWV4cHJlc3Npb24pKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xhc3RRdWVyeSA9IHRoaXMucXVlcnk7XG4gICAgICAgIHJldHVybiBmcm9tKHRoaXMuZ2V0RGF0YVNvdXJjZShxdWVyeSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBoYW5kbGVFdmVudChub2RlOiBIVE1MRWxlbWVudCwgZXZlbnROYW1lOiBzdHJpbmcsIGV2ZW50Q2FsbGJhY2s6IEZ1bmN0aW9uLCBsb2NhbHM6IGFueSkge1xuICAgICAgICBpZiAoIWluY2x1ZGVzKFsnYmx1cicsICdmb2N1cycsICdzZWxlY3QnLCAnc3VibWl0JywgJ2NoYW5nZSddLCBldmVudE5hbWUpKSB7XG4gICAgICAgICAgICBzdXBlci5oYW5kbGVFdmVudChub2RlLCBldmVudE5hbWUsIGV2ZW50Q2FsbGJhY2ssIGxvY2Fscyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBoaWdobGlnaHQgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIGRyb3Bkb3duIG1hdGNoaW5nIHRoZSBxdWVyeS5cbiAgICBwcml2YXRlIGhpZ2hsaWdodChtYXRjaDogVHlwZWFoZWFkTWF0Y2gsIHF1ZXJ5OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZWFoZWFkQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAvLyBoaWdobGlnaHQgb2YgY2hhcnMgd2lsbCB3b3JrIG9ubHkgd2hlbiBsYWJlbCBhcmUgc3RyaW5ncy5cbiAgICAgICAgICAgIChtYXRjaCBhcyBhbnkpLnZhbHVlID0gbWF0Y2guaXRlbS5sYWJlbC50b1N0cmluZygpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudHlwZWFoZWFkQ29udGFpbmVyLmhpZ2hsaWdodChtYXRjaCwgcXVlcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gaW5zZXJ0cyB0aGUgZWxlbWVudCBhdCB0aGUgaW5kZXggcG9zaXRpb25cbiAgICBwcml2YXRlIGluc2VydEF0SW5kZXgoaSkge1xuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRFbC5wcmVwZW5kKHRoaXMuJGVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgJGVsQXRJbmRleCA9IHRoaXMucGFyZW50RWwuY2hpbGRyZW4oKS5lcShpKTtcbiAgICAgICAgICAgIGlmICgkZWxBdEluZGV4Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMucGFyZW50RWwuY2hpbGRyZW4oKS5lcShpKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVsZW1lbnQuaW5zZXJ0QWZ0ZXIodGhpcy5wYXJlbnRFbC5jaGlsZHJlbigpLmVxKGkgLSAxKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgd2lkZ2V0IGlzIG9mIHR5cGUgYXV0b2NvbXBsZXRlIGluIG1vYmlsZSB2aWV3LyBhcHBcbiAgICBwdWJsaWMgaXNNb2JpbGVBdXRvQ29tcGxldGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdhdXRvY29tcGxldGUnICYmIGlzTW9iaWxlKCk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHF1ZXJ5IGlzIGVudGVyZWQgaW4gdGhlIGlucHV0IGFuZCB0aGUgdmlldyBpcyBub3QgbW9iaWxlXG4gICAgcHVibGljIGlzUXVlcnlFbnRlcmVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93Y2xlYXIgJiYgdGhpcy5zaG93Q2xvc2VidG47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkTW9yZURhdGEoaW5jcmVtZW50UGFnZT86IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBJbmNyZWFzZSB0aGUgcGFnZSBudW1iZXIgYW5kIHRyaWdnZXIgZm9yY2UgcXVlcnkgdXBkYXRlXG4gICAgICAgIHRoaXMucGFnZSA9IGluY3JlbWVudFBhZ2UgPyB0aGlzLnBhZ2UgKyAxIDogdGhpcy5wYWdlO1xuXG4gICAgICAgIHRoaXMuaXNTY3JvbGxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IHRydWU7XG5cbiAgICAgICAgLy8gd2hlbiBpbnZva2luZyBuZXcgc2V0IG9mIHJlc3VsdHMsIHJlc2V0IHRoZSBsYXN0UXVlcnkuXG4gICAgICAgIGlmIChpbmNyZW1lbnRQYWdlKSB7XG4gICAgICAgICAgICB0aGlzLl9sYXN0UXVlcnkgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0cmlnZ2VyIHRoZSB0eXBlYWhlYWQgY2hhbmdlIG1hbnVhbGx5IHRvIGZldGNoIHRoZSBuZXh0IHNldCBvZiByZXN1bHRzLlxuICAgICAgICB0aGlzLnR5cGVhaGVhZC5vbklucHV0KHtcbiAgICAgICAgICAgIHRhcmdldDoge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0cmltKHRoaXMucXVlcnkpIHx8ICcwJyAvLyBkdW1teSBkYXRhIHRvIG5vdGlmeSB0aGUgb2JzZXJ2YWJsZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gb24gZm9jdXNvdXQsIHN1YnNjcmliZSB0byB0aGUgZGF0YXZhbHVlIGNoYW5nZXMgYWdhaW5cbiAgICBwcml2YXRlIG9uRm9jdXNPdXQoKSB7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlRHYgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fbG9hZGluZ0l0ZW1zID0gZmFsc2U7XG4gICAgICAgIC8vIHJlc2V0IHRoZSBwYWdlIHZhbHVlIG9uIGZvY3Vzb3V0LlxuICAgICAgICB0aGlzLnBhZ2UgPSAxO1xuICAgICAgICAvLyBpZiBkb21VcGRhdGVkIGlzIHRydWUgdGhlbiBkbyBub3QgaGlkZSB0aGUgZHJvcGRvd24gaW4gdGhlIGZ1bGxzY3JlZW5cbiAgICAgICAgaWYgKCF0aGlzLl9kb21VcGRhdGVkICYmIHRoaXMuX2lzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5RdWVyeSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzT3BlbiA9IGZhbHNlO1xuICAgICAgICAvLyBvbiBvdXRzaWRlIGNsaWNrLCB0eXBlYWhlYWQgaXMgaGlkZGVuLiBUbyBhdm9pZCB0aGlzLCB3aGVuIGZ1bGxzY3JlZW4gaXMgc2V0LCBvdmVycmlkZGluZyBpc0ZvY3VzZWQgZmxhZyBvbiB0aGUgdHlwZWFoZWFkIGNvbnRhaW5lclxuICAgICAgICBpZiAodGhpcy5fZG9tVXBkYXRlZCAmJiB0aGlzLnR5cGVhaGVhZCAmJiAodGhpcy50eXBlYWhlYWQgYXMgYW55KS5fY29udGFpbmVyKSB7XG4gICAgICAgICAgICAodGhpcy50eXBlYWhlYWQgYXMgYW55KS5fY29udGFpbmVyLmlzRm9jdXNlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uSW5wdXRDaGFuZ2UoJGV2ZW50KSB7XG4gICAgICAgIC8vIHJlc2V0IGFsbCB0aGUgcHJldmlvdXMgcGFnZSBkZXRhaWxzIGluIG9yZGVyIHRvIGZldGNoIG5ldyBzZXQgb2YgcmVzdWx0LlxuICAgICAgICB0aGlzLnJlc3VsdCA9IFtdO1xuICAgICAgICB0aGlzLnBhZ2UgPSAxO1xuICAgICAgICB0aGlzLmxpc3RlblF1ZXJ5ID0gdGhpcy5pc1VwZGF0ZU9uS2V5UHJlc3MoKTtcbiAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIC8vIHdoZW4gaW5wdXQgaXMgY2xlYXJlZCwgcmVzZXQgdGhlIGRhdGF2YWx1ZVxuICAgICAgICBpZiAodGhpcy5xdWVyeSA9PT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMucXVlcnlNb2RlbCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gJyc7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByZXZEYXRhdmFsdWUodGhpcy5fbGFzdFF1ZXJ5KTtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5fbW9kZWxCeVZhbHVlLCB7fSwgdHJ1ZSk7XG5cbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnY2xlYXInLCB7ICRldmVudCB9KTtcblxuICAgICAgICAgICAgLy8gdHJpZ2dlciBvblN1Ym1pdCBvbmx5IHdoZW4gdGhlIHNlYXJjaCBpbnB1dCBpcyBjbGVhcmVkIG9mZiBhbmQgZG8gbm90IHRyaWdnZXIgd2hlbiB0YWIgaXMgcHJlc3NlZC5cbiAgICAgICAgICAgIGlmICgkZXZlbnQgJiYgJGV2ZW50LndoaWNoICE9PSA5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzdWJtaXQnLCB7ICRldmVudCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGludm9raW5nIGNoYW5nZSBldmVudCBvbiBldmVyeSBpbnB1dCB2YWx1ZSBjaGFuZ2UuXG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAkZXZlbnQ6ICRldmVudCxcbiAgICAgICAgICAgICAgICBuZXdWYWw6IHRoaXMuX21vZGVsQnlWYWx1ZSB8fCB0aGlzLnF1ZXJ5LFxuICAgICAgICAgICAgICAgIG9sZFZhbDogKHRoaXMgYXMgYW55KS5wcmV2RGF0YXZhbHVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3dDbG9zZWJ0biA9ICh0aGlzLnF1ZXJ5ICE9PSAnJyk7XG4gICAgfVxuXG4gICAgLy8gVHJpZ2dlcmVkIGZvciBlbnRlciBldmVudFxuICAgIHByaXZhdGUgaGFuZGxlRW50ZXJFdmVudCgkZXZlbnQpIHtcbiAgICAgICAgLy8gc3VibWl0IGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZXJlIGlzIG5vIHNlYXJjaCByZXN1bHRzXG4gICAgICAgIGlmICghZ2V0KHRoaXMudHlwZWFoZWFkLCAnbWF0Y2hlcy5sZW5ndGgnKSkge1xuICAgICAgICAgICAgdGhpcy5vblNlYXJjaFNlbGVjdCgkZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFRyaWdnZXJyZWQgd2hlbiB0eXBlYWhlYWQgb3B0aW9uIGlzIHNlbGVjdGVkLlxuICAgIHByaXZhdGUgb25TZWFyY2hTZWxlY3QoJGV2ZW50OiBFdmVudCkge1xuICAgICAgICBsZXQgaXRlbTtcbiAgICAgICAgLy8gV01TLTIyNTMzOiBCZWZvcmUgYWRkaW5nIGFjdGl2ZSB0eXBlYWhlYWQgZWwsIGNoZWNrIGlmIHRoZSBlbnRlcmVkIHF1ZXJ5IG1hdGNoZXMgd2l0aCB0aGUgYWN0aXZlIGVsIG9yIG5vdFxuICAgICAgICBjb25zdCBpc1F1ZXJ5TWF0Y2ggPSB0aGlzLnR5cGVhaGVhZENvbnRhaW5lcj8uYWN0aXZlPy52YWx1ZSA9PT0gdGhpcy5xdWVyeTtcblxuICAgICAgICBpZiAodGhpcy50eXBlYWhlYWRDb250YWluZXIgJiYgdGhpcy50eXBlYWhlYWRDb250YWluZXIuYWN0aXZlICYmIGlzUXVlcnlNYXRjaCkge1xuICAgICAgICAgICAgaXRlbSA9IHRoaXMudHlwZWFoZWFkQ29udGFpbmVyLmFjdGl2ZS5pdGVtO1xuICAgICAgICB9XG4gICAgICAgICRldmVudCA9IHRoaXMuZXZlbnREYXRhKCRldmVudCwgaXRlbSB8fCB7fSk7XG5cbiAgICAgICAgLy8gc2VhcmNoT24gaXMgc2V0IGFzIG9uQnRuQ2xpY2ssIHRoZW4gaW52b2tlIHRoZSBzZWFyY2ggYXBpIGNhbGwgbWFudWFsbHkuXG4gICAgICAgIGlmICghdGhpcy5pc1VwZGF0ZU9uS2V5UHJlc3MoKSkge1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5RdWVyeSA9IHRydWU7XG4gICAgICAgICAgICAvLyB0cmlnZ2VyIHRoZSB0eXBlYWhlYWQgY2hhbmdlIG1hbnVhbGx5IHRvIGZldGNoIHRoZSBuZXh0IHNldCBvZiByZXN1bHRzLlxuICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQub25JbnB1dCh7XG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnF1ZXJ5IC8vIGR1bW15IGRhdGEgdG8gbm90aWZ5IHRoZSBvYnNlcnZhYmxlc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdoZW4gbWF0Y2hlcyBhcmUgYXZhaWxhYmxlLlxuICAgICAgICBpZiAodGhpcy50eXBlYWhlYWRDb250YWluZXIgJiYgdGhpcy5saUVsZW1lbnRzLmxlbmd0aCAmJiBpc1F1ZXJ5TWF0Y2gpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkQ29udGFpbmVyLnNlbGVjdEFjdGl2ZU1hdGNoKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSB0aGlzLnF1ZXJ5O1xuICAgICAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzdWJtaXQnLCB7ICRldmVudCB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW52b2tlT25CZWZvcmVTZXJ2aWNlQ2FsbChpbnB1dERhdGEpIHtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVzZXJ2aWNlY2FsbCcsIHsgaW5wdXREYXRhIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25Ecm9wZG93bk9wZW4oKSB7XG4gICAgICAgIGlmICh0aGlzLmNsZWFyRGF0YSkge1xuICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNldHRpbmcgdGhlIHVsRWxlbWVudHMsIGxpRWxlbWVudCBvbiB0eXBlYWhlYWRDb250YWluZXIuXG4gICAgICAgIC8vIGFzIHdlIGFyZSB1c2luZyBjdXN0b21PcHRpb24gdGVtcGxhdGUsIGxpRWxlbWVudHMgYXJlIG5vdCBhdmFpbGFibGUgb24gdHlwZWFoZWFkQ29udGFpbmVyIHNvIGFwcGVuZCB0aGVtIGV4cGxpY2l0bHkuXG4gICAgICAgIGNvbnN0IGZuID0gZGVib3VuY2UoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5faXNPcGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudHlwZWFoZWFkQ29udGFpbmVyID0gdGhpcy50eXBlYWhlYWQuX2NvbnRhaW5lciB8fCAodGhpcy50eXBlYWhlYWQgYXMgYW55KS5fdHlwZWFoZWFkLmluc3RhbmNlO1xuICAgICAgICAgICAgKHRoaXMudHlwZWFoZWFkQ29udGFpbmVyIGFzIGFueSkubGlFbGVtZW50cyA9IHRoaXMubGlFbGVtZW50cztcbiAgICAgICAgICAgICh0aGlzLnR5cGVhaGVhZENvbnRhaW5lciBhcyBhbnkpLnVsRWxlbWVudCA9IHRoaXMudWxFbGVtZW50O1xuICAgICAgICAgICAgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24oJCgndHlwZWFoZWFkLWNvbnRhaW5lcicpLCB0aGlzLm5hdGl2ZUVsZW1lbnQsICh0aGlzLnR5cGVhaGVhZCBhcyBhbnkpLl90eXBlYWhlYWQsICQoJ3R5cGVhaGVhZC1jb250YWluZXIgLmRyb3Bkb3duLW1lbnUnKSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm4oKTtcblxuICAgICAgICAvLyBvcGVuIGZ1bGwtc2NyZWVuIHNlYXJjaCB2aWV3XG4gICAgICAgIGlmICh0aGlzLmlzTW9iaWxlQXV0b0NvbXBsZXRlKCkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZnVsbC1zY3JlZW4nKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyTW9iaWxlQXV0b0NvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkcm9wZG93bkVsID0gdGhpcy5kcm9wZG93bkVsLmNsb3Nlc3QoJ3R5cGVhaGVhZC1jb250YWluZXInKTtcblxuICAgICAgICAgICAgZHJvcGRvd25FbC5pbnNlcnRBZnRlcih0aGlzLiRlbGVtZW50LmZpbmQoJ2lucHV0JykuZmlyc3QoKSk7XG4gICAgICAgICAgICBjb25zdCBzY3JlZW5IZWlnaHQgPSB0aGlzLiRlbGVtZW50LmNsb3Nlc3QoJy5hcHAtY29udGVudCcpLmhlaWdodCgpO1xuICAgICAgICAgICAgZHJvcGRvd25FbC5jc3MoeyBwb3NpdGlvbjogJ3JlbGF0aXZlJywgdG9wOiAwLCBoZWlnaHQ6IHNjcmVlbkhlaWdodCArICdweCcgfSk7XG4gICAgICAgICAgICB0aGlzLnNob3dDbG9zZWJ0biA9IHRoaXMucXVlcnkgJiYgdGhpcy5xdWVyeSAhPT0gJyc7XG5cbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5kYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSkgJiYgIXRoaXMuZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJTZWFyY2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0TmV4dCgpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHRoaXMudHlwZWFoZWFkQ29udGFpbmVyLm1hdGNoZXM7XG5cbiAgICAgICAgaWYgKCFtYXRjaGVzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSBtYXRjaGVzLmluZGV4T2YodGhpcy50eXBlYWhlYWRDb250YWluZXIuYWN0aXZlKTtcblxuICAgICAgICAvLyBvbiBrZXlkb3duLCBpZiBzY3JvbGwgaXMgYXQgdGhlIGJvdHRvbSBhbmQgbmV4dCBwYWdlIHJlY29yZHMgYXJlIGF2YWlsYWJsZSwgZmV0Y2ggbmV4dCBwYWdlIGl0ZW1zLlxuICAgICAgICBpZiAoIXRoaXMuX2xvYWRpbmdJdGVtcyAmJiAhdGhpcy5kYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSAmJiBpbmRleCArIDEgPiBtYXRjaGVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIC8vIGluZGV4IGlzIHNhdmVkIGluIG9yZGVyIHRvIHNlbGVjdCB0aGUgbGFzdFNlbGVjdGVkIGl0ZW0gaW4gdGhlIGRyb3Bkb3duIGFmdGVyIGZldGNoaW5nIG5leHQgcGFnZSBpdGVtcy5cbiAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vcmVEYXRhKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRMYXN0QWN0aXZlTWF0Y2hBc1NlbGVjdGVkKCkge1xuICAgICAgICBpZiAodGhpcy5sYXN0U2VsZWN0ZWRJbmRleCkge1xuICAgICAgICAgICAgKHRoaXMudHlwZWFoZWFkQ29udGFpbmVyIGFzIGFueSkuX2FjdGl2ZSA9IHRoaXMudHlwZWFoZWFkQ29udGFpbmVyLm1hdGNoZXNbdGhpcy5sYXN0U2VsZWN0ZWRJbmRleF07XG4gICAgICAgICAgICB0aGlzLnR5cGVhaGVhZENvbnRhaW5lci5uZXh0QWN0aXZlTWF0Y2goKTtcbiAgICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHRyaWdnZXJTZWFyY2goKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFQcm92aWRlci5pc0xhc3RQYWdlIHx8ICF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmdWxsLXNjcmVlbicpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHlwZUFoZWFkRHJvcERvd24gPSB0aGlzLmRyb3Bkb3duRWw7XG4gICAgICAgIGNvbnN0ICRsYXN0SXRlbSA9IHR5cGVBaGVhZERyb3BEb3duLmZpbmQoJ2xpJykubGFzdCgpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGxhc3QgaXRlbSBpcyBub3QgYmVsb3cgdGhlIGZ1bGwgc2NyZWVuXG4gICAgICAgIGlmICgkbGFzdEl0ZW0ubGVuZ3RoICYmIHR5cGVBaGVhZERyb3BEb3duLmxlbmd0aCAmJiAodHlwZUFoZWFkRHJvcERvd24uaGVpZ2h0KCkgKyB0eXBlQWhlYWREcm9wRG93bi5wb3NpdGlvbigpLnRvcCA+ICRsYXN0SXRlbS5oZWlnaHQoKSArICRsYXN0SXRlbS5wb3NpdGlvbigpLnRvcCkpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vcmVEYXRhKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1VwZGF0ZU9uS2V5UHJlc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaG9uID09PSAndHlwaW5nJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlYm91bmNlRGVmYXVsdFF1ZXJ5KGRhdGEpIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFF1ZXJ5SW52b2tlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZ2V0RGF0YVNvdXJjZShkYXRhLCB0cnVlKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnlNb2RlbCA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RRdWVyeSA9IHRoaXMucXVlcnkgPSB0aGlzLnF1ZXJ5TW9kZWxbMF0ubGFiZWwgfHwgJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gdGhpcy5xdWVyeU1vZGVsWzBdLnZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX21vZGVsQnlLZXkgPSB0aGlzLnF1ZXJ5TW9kZWxbMF0ua2V5O1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Nsb3NlYnRuID0gKHRoaXMucXVlcnkgIT09ICcnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnlNb2RlbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jbGVhckRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0KCh0aGlzLnR5cGVhaGVhZCBhcyBhbnkpLCAnX3R5cGVhaGVhZC5pc1Nob3duJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVCeURhdGF2YWx1ZShkYXRhKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQnlEYXRhc2V0KGRhdGEpO1xuICAgICAgICB0aGlzLnVwZGF0ZUJ5RGF0YVNvdXJjZShkYXRhKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUJ5RGF0YVNvdXJjZShkYXRhKSB7XG4gICAgICAgIC8vIHZhbHVlIGlzIHByZXNlbnQgYnV0IHRoZSBjb3JyZXNwb25kaW5nIGtleSBpcyBub3QgZm91bmQgdGhlbiBmZXRjaCBuZXh0IHNldFxuICAgICAgICAvLyBtb2RlbEJ5S2V5IHdpbGwgYmUgc2V0IG9ubHkgd2hlbiBkYXRhdmFsdWUgaXMgYXZhaWxhYmxlIGluc2lkZSB0aGUgbG9jYWxEYXRhIG90aGVyd2lzZSBtYWtlIGEgTi93IGNhbGwuXG4gICAgICAgIGlmIChpc0RlZmluZWQoZGF0YSkgJiYgIWlzT2JqZWN0KGRhdGEpICYmIHRoaXMuZGF0YXNvdXJjZSAmJiAhaXNEZWZpbmVkKHRoaXMuX21vZGVsQnlLZXkpICYmIHRoaXMuZGF0YWZpZWxkICE9PSBBTExGSUVMRFMpIHtcbiAgICAgICAgICAgIC8vIEF2b2lkIG1ha2luZyBkZWZhdWx0IHF1ZXJ5IGlmIHF1ZXJ5TW9kZWwgYWxyZWFkeSBleGlzdHMuXG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHRoaXMucXVlcnlNb2RlbCkgJiYgIWlzRW1wdHkodGhpcy5xdWVyeU1vZGVsKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YXZhbHVlRnJvbVF1ZXJ5TW9kZWwoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE1ha2UgZGVmYXVsdCBxdWVyeSBjYWxsIG9ubHkgd2hlbiBkYXRhc291cmNlIHN1cHBvcnRzIENSVUQgKGxpdmUgdmFyaWFibGUpLlxuICAgICAgICAgICAgaWYgKCF0aGlzLl9kZWZhdWx0UXVlcnlJbnZva2VkICYmIHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLlNVUFBPUlRTX0NSVUQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWJvdW5jZURlZmF1bHRRdWVyeShkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHVwZGF0ZXMgdGhlIG1vZGVsIHZhbHVlIHVzaW5nIHF1ZXJ5TW9kZWxcbiAgICBwcml2YXRlIHVwZGF0ZURhdGF2YWx1ZUZyb21RdWVyeU1vZGVsKCkge1xuICAgICAgICBpZiAoaXNEZWZpbmVkKHRoaXMucXVlcnlNb2RlbCkpIHtcbiAgICAgICAgICAgIHRoaXMuX21vZGVsQnlWYWx1ZSA9IGlzQXJyYXkodGhpcy5xdWVyeU1vZGVsKSA/ICh0aGlzLnF1ZXJ5TW9kZWxbMF0gYXMgRGF0YVNldEl0ZW0pLnZhbHVlIDogdGhpcy5xdWVyeU1vZGVsO1xuICAgICAgICAgICAgdGhpcy5fbW9kZWxCeUtleSA9IGlzQXJyYXkodGhpcy5xdWVyeU1vZGVsKSA/ICh0aGlzLnF1ZXJ5TW9kZWxbMF0gYXMgRGF0YVNldEl0ZW0pLmtleSA6IHRoaXMucXVlcnlNb2RlbDtcbiAgICAgICAgICAgIHRoaXMudG9CZVByb2Nlc3NlZERhdGF2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQnlEYXRhc2V0KGRhdGE6IGFueSkge1xuICAgICAgICAvLyBkZWZhdWx0IHF1ZXJ5IGlzIGFscmVhZHkgaW52b2tlZCB0aGVuIGRvIG5vdCBtYWtlIG90aGVyIGRlZmF1bHQgcXVlcnkgY2FsbC5cbiAgICAgICAgLy8gRm9yIGxvY2FsIHNlYXJjaCBpLmUuIHNlYXJjaGtleSBpcyB1bmRlZmluZWQsIGRvIG5vdCByZXR1cm4sIHZlcmlmeSB0aGUgZGF0YXZhbHVlIGFnYWluc3QgdGhlIGRhdGFzZXRJdGVtcyAuXG4gICAgICAgIGlmICh0aGlzLl9kZWZhdWx0UXVlcnlJbnZva2VkICYmIHRoaXMuc2VhcmNoa2V5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gZmluZCh0aGlzLmRhdGFzZXRJdGVtcywgKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoaXNPYmplY3QoaXRlbS52YWx1ZSkgPyBpc0VxdWFsKGl0ZW0udmFsdWUsIGRhdGEpIDogKHRvU3RyaW5nKGl0ZW0udmFsdWUpKS50b0xvd2VyQ2FzZSgpID09PSAodG9TdHJpbmcoZGF0YSkpLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBzZXQgdGhlIGRlZmF1bHQgb25seSB3aGVuIGl0IGlzIGF2YWlsYWJsZSBpbiBkYXRhc2V0LlxuICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSBbc2VsZWN0ZWRJdGVtXTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGFmaWVsZCA9PT0gQUxMRklFTERTICYmIGlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSB0aGlzLmdldFRyYW5zZm9ybWVkRGF0YShleHRyYWN0RGF0YUFzQXJyYXkoZGF0YSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmVzZXR0aW5nIHRoZSBxdWVyeU1vZGVsIG9ubHkgd2hlbiBwcmV2RGF0YXZhbHVlIGlzIGVxdWFsIHRvIGRhdGFcbiAgICAgICAgICAgIGlmICgodGhpcyBhcyBhbnkpLnByZXZEYXRhdmFsdWUgIT09IGRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeSA9ICcnO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZURhdGF2YWx1ZUZyb21RdWVyeU1vZGVsKCk7XG5cbiAgICAgICAgLy8gU2hvdyB0aGUgbGFiZWwgdmFsdWUgb24gaW5wdXQuXG4gICAgICAgIHRoaXMuX2xhc3RRdWVyeSA9IHRoaXMucXVlcnkgPSBpc0RlZmluZWQodGhpcy5xdWVyeU1vZGVsKSAmJiB0aGlzLnF1ZXJ5TW9kZWwubGVuZ3RoID8gZ2V0KHRoaXMucXVlcnlNb2RlbFswXSwgJ2xhYmVsJykgOiAnJztcbiAgICAgICAgdGhpcy5zaG93Q2xvc2VidG4gPSAodGhpcy5xdWVyeSAhPT0gJycpO1xuICAgIH1cblxuICAgIC8vIElmIHdlIGhhdmUgbGFzdCBzZWFyY2ggcmVzdWx0cyB0aGVuIG9wZW4gZHJvcGRvd24gb24gZm9jdXNcbiAgICBwcml2YXRlIGhhbmRsZUZvY3VzKCRldmVudCkge1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnc2VhcmNoJyAmJiB0aGlzLnF1ZXJ5ID09PSB0aGlzLl9sYXN0UXVlcnkgJiYgdGhpcy5fbGFzdFJlc3VsdCkge1xuICAgICAgICAgICAgKHRoaXMudHlwZWFoZWFkIGFzIGFueSkua2V5VXBFdmVudEVtaXR0ZXIuZW1pdCh0aGlzLnF1ZXJ5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBub3RpZnlTdWJzY3JpYmVyKCkge1xuICAgICAgICBjb25zdCBwYXJlbnRFbCA9ICQodGhpcy5uYXRpdmVFbGVtZW50KS5jbG9zZXN0KCcuYXBwLWNvbXBvc2l0ZS13aWRnZXQuY2FwdGlvbi1mbG9hdGluZycpO1xuICAgICAgICBpZiAocGFyZW50RWwubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5hcHAubm90aWZ5KCdjYXB0aW9uUG9zaXRpb25BbmltYXRlJywge2Rpc3BsYXlWYWw6IHRydWUsIG5hdGl2ZUVsOiBwYXJlbnRFbH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyBhIHByb21pc2UgdGhhdCBwcm92aWRlcyB0aGUgZmlsdGVyZWQgZGF0YSBmcm9tIHRoZSBkYXRhc291cmNlLlxuICAgIHB1YmxpYyBnZXREYXRhU291cmNlKHF1ZXJ5OiBBcnJheTxzdHJpbmc+IHwgc3RyaW5nLCBzZWFyY2hPbkRhdGFGaWVsZD86IGJvb2xlYW4sIG5leHRJdGVtSW5kZXg/OiBudW1iZXIpOiBQcm9taXNlPERhdGFTZXRJdGVtW10+IHtcbiAgICAgICAgLy8gRm9yIGRlZmF1bHQgcXVlcnksIHNlYXJjaE9uRGF0YUZpZWxkIGlzIHNldCB0byB0cnVlLCB0aGVuIGRvIG5vdCBtYWtlIGEgbi93IGNhbGwgd2hlbiBkYXRhZmllbGQgaXMgQUxMRklFTERTXG4gICAgICAgIGlmIChzZWFyY2hPbkRhdGFGaWVsZCAmJiB0aGlzLmRhdGFmaWVsZCA9PT0gQUxMRklFTERTKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRm9yIGRlZmF1bHQgZGF0YXZhbHVlLCBzZWFyY2gga2V5IGFzIHRvIGJlIG9uIGRhdGFmaWVsZCB0byBnZXQgdGhlIGRlZmF1bHQgZGF0YSBmcm9tIHRoZSBmaWx0ZXIgY2FsbC5cbiAgICAgICAgY29uc3QgZGF0YUNvbmZpZzogSURhdGFQcm92aWRlckNvbmZpZyA9IHtcbiAgICAgICAgICAgIGRhdGFzZXQ6IHRoaXMuZGF0YXNldCA/IGNvbnZlcnREYXRhVG9PYmplY3QodGhpcy5kYXRhc2V0KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGJpbmRkYXRhc2V0OiB0aGlzLmJpbmRkYXRhc2V0LFxuICAgICAgICAgICAgZGF0YXNvdXJjZTogdGhpcy5kYXRhc291cmNlLFxuICAgICAgICAgICAgZGF0YWZpZWxkOiB0aGlzLmRhdGFmaWVsZCxcbiAgICAgICAgICAgIGhhc0RhdGE6IHRoaXMuZGF0YXNldCAmJiB0aGlzLmRhdGFzZXQubGVuZ3RoLFxuICAgICAgICAgICAgcXVlcnk6IHF1ZXJ5LFxuICAgICAgICAgICAgaXNMb2NhbEZpbHRlcjogIXRoaXMuc2VhcmNoa2V5LFxuICAgICAgICAgICAgc2VhcmNoS2V5OiBzZWFyY2hPbkRhdGFGaWVsZCA/IHRoaXMuZGF0YWZpZWxkIDogdGhpcy5zZWFyY2hrZXksXG4gICAgICAgICAgICAvLyBkZWZhdWx0IHNlYXJjaCBjYWxsIG1hdGNoIG1vZGUgc2hvdWxkIGJlIHN0YXJ0aWdub3JlY2FzZVxuICAgICAgICAgICAgbWF0Y2hNb2RlOiBzZWFyY2hPbkRhdGFGaWVsZCA/ICdzdGFydGlnbm9yZWNhc2UnIDogdGhpcy5tYXRjaG1vZGUsXG4gICAgICAgICAgICBjYXNlc2Vuc2l0aXZlOiB0aGlzLmNhc2VzZW5zaXRpdmUsXG4gICAgICAgICAgICBpc2Zvcm1maWVsZDogdGhpcy5pc2Zvcm1maWVsZCxcbiAgICAgICAgICAgIG9yZGVyYnk6IHRoaXMub3JkZXJieSxcbiAgICAgICAgICAgIGxpbWl0OiB0aGlzLmxpbWl0LFxuICAgICAgICAgICAgcGFnZXNpemU6IHRoaXMucGFnZXNpemUsXG4gICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXG4gICAgICAgICAgICBvbkJlZm9yZXNlcnZpY2VjYWxsOiB0aGlzLmludm9rZU9uQmVmb3JlU2VydmljZUNhbGwuYmluZCh0aGlzKVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLmRhdGFvcHRpb25zKSB7XG4gICAgICAgICAgICBkYXRhQ29uZmlnLmRhdGFvcHRpb25zID0gdGhpcy5kYXRhb3B0aW9ucztcbiAgICAgICAgICAgIGRhdGFDb25maWcudmlld1BhcmVudCA9IHRoaXMudmlld1BhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVByb3ZpZGVyLmZpbHRlcihkYXRhQ29uZmlnKVxuICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAvLyByZXNwb25zZSBmcm9tIGRhdGFQcm92aWRlciByZXR1cm5zIGFsd2F5cyBkYXRhIG9iamVjdC5cbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IHJlc3BvbnNlLmRhdGEgfHwgcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgLy8gZm9yIHNlcnZpY2UgdmFyaWFibGUsIHVwZGF0aW5nIHRoZSBkYXRhc2V0IG9ubHkgaWYgaXQgaXMgbm90IGRlZmluZWQgb3IgZW1wdHlcbiAgICAgICAgICAgICAgICBpZiAoKCFpc0RlZmluZWQodGhpcy5kYXRhc2V0KSB8fCAhdGhpcy5kYXRhc2V0Lmxlbmd0aCkgJiYgdGhpcy5kYXRhUHJvdmlkZXIudXBkYXRlRGF0YXNldCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFzZXQgPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIuaGFzTW9yZURhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWREYXRhc2V0ID0gdGhpcy5mb3JtYXR0ZWREYXRhc2V0LmNvbmNhdChyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtYXR0ZWREYXRhc2V0ID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gZXhwbGljaXRseSBzZXR0aW5nIHRoZSBvcHRpb25zbGltaXQgYXMgdGhlIG1hdGNoZXMgbW9yZSB0aGFuIDIwIHdpbGwgYmUgaWdub3JlZCBpZiBvcHRpb25zbGltaXQgaXMgbm90IHNwZWNpZmllZC5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtYXR0ZWREYXRhc2V0Lmxlbmd0aCA+IDIwICYmICFpc0RlZmluZWQodGhpcy5saW1pdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQudHlwZWFoZWFkT3B0aW9uc0xpbWl0ID0gdGhpcy5mb3JtYXR0ZWREYXRhc2V0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBJbiBtb2JpbGUsIHRyaWdnZXIgdGhlIHNlYXJjaCBieSBkZWZhdWx0IHVudGlsIHRoZSByZXN1bHRzIGhhdmUgaGVpZ2h0IHVwdG8gcGFnZSBoZWlnaHQuIE90aGVyIHJlc3VsdHMgY2FuIGJlIGZldGNoZWQgYnkgc2Nyb2xsaW5nXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc09wZW4gJiYgdGhpcy5pc01vYmlsZUF1dG9Db21wbGV0ZSgpICYmICFpc1VuZGVmaW5lZCh0aGlzLmRhdGFQcm92aWRlci5pc0xhc3RQYWdlKSAmJiAhdGhpcy5kYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJTZWFyY2goKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGEgPSB0aGlzLmdldFRyYW5zZm9ybWVkRGF0YSh0aGlzLmZvcm1hdHRlZERhdGFzZXQsIG5leHRJdGVtSW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgLy8gcmVzdWx0IGNvbnRhaW5zIHRoZSBkYXRhZmllbGQgdmFsdWVzLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdCA9IG1hcCh0cmFuc2Zvcm1lZERhdGEsICd2YWx1ZScpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZERhdGE7XG4gICAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICApLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1Njcm9sbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIChkZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExhc3RBY3RpdmVNYXRjaEFzU2VsZWN0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMzApKSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2Nyb2xsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gV2hlbiBubyByZXN1bHQgaXMgZm91bmQsIHNldCB0aGUgZGF0YXZhbHVlIHRvIHVuZGVmaW5lZC5cbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbW9kZWxCeVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSAocXVlcnkgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gb24gZm9jdXNvdXQgaS5lLiBvbiBvdGhlciB3aWRnZXQgZm9jdXMsIGlmIG4vdyBpcyBwZW5kaW5nIGxvYWRpbmcgaWNvbiBpcyBzaG93biwgd2hlbiBkYXRhIGlzIGF2YWlsYWJsZSB0aGVuIGRyb3Bkb3duIGlzIHNob3duIGFnYWluLlxuICAgICAgICAgICAgICAgIC8vIG9uIHVuc3Vic2NyaWJpbmcgZG8gbm90IHNob3cgdGhlIHJlc3VsdHMuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Vuc3Vic2NyaWJlRHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RSZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHBhcmVudCBjb250ZXh0IGkuZS4gUGFnZSBjb250ZXh0IGFuZCBub3QgcGFyZW50IGNvbXBvbmVudCdzIGNvbnRleHQuXG4gICAgcHJpdmF0ZSBnZXRDb250ZXh0KGNvbnRleHQpIHtcbiAgICAgICAgaWYgKGNvbnRleHQgJiYgZ2V0KGNvbnRleHQsICd3aWRnZXQnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29udGV4dChjb250ZXh0LnZpZXdQYXJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUcmFuc2Zvcm1lZERhdGEoZGF0YTogYW55LCBpdGVtSW5kZXg/OiBudW1iZXIsIGlzY3VzdG9tPzogYm9vbGVhbik6IERhdGFTZXRJdGVtW10ge1xuICAgICAgICBpZiAoaXNEZWZpbmVkKGl0ZW1JbmRleCkpIHtcbiAgICAgICAgICAgIGl0ZW1JbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWREYXRhID0gdHJhbnNmb3JtRm9ybURhdGEoXG4gICAgICAgICAgICB0aGlzLmdldENvbnRleHQodGhpcy52aWV3UGFyZW50KSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICB0aGlzLmRhdGFmaWVsZCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGQ6IHRoaXMuZGlzcGxheWxhYmVsIHx8IHRoaXMuZGlzcGxheWZpZWxkLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlFeHByOiBpc2N1c3RvbSA/ICcnIDogdGhpcy5kaXNwbGF5ZXhwcmVzc2lvbixcbiAgICAgICAgICAgICAgICBiaW5kRGlzcGxheUV4cHI6IGlzY3VzdG9tID8gJycgOiB0aGlzLmJpbmRkaXNwbGF5bGFiZWwsXG4gICAgICAgICAgICAgICAgYmluZERpc3BsYXlJbWdTcmM6IHRoaXMuYmluZGRpc3BsYXlpbWFnZXNyYyxcbiAgICAgICAgICAgICAgICBkaXNwbGF5SW1nU3JjOiB0aGlzLmRpc3BsYXlpbWFnZXNyY1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGl0ZW1JbmRleCxcbiAgICAgICAgICAgIHRoaXNcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGdldFVuaXFPYmpzQnlEYXRhRmllbGQodHJhbnNmb3JtZWREYXRhLCB0aGlzLmRhdGFmaWVsZCwgdGhpcy5kaXNwbGF5ZmllbGQgfHwgdGhpcy5kaXNwbGF5bGFiZWwsIHRvQm9vbGVhbih0aGlzLmFsbG93ZW1wdHkpKTtcbiAgICB9XG5cbiAgICAvLyBPcHRpb25zTGlzdFRlbXBsYXRlIGxpc3RlbnMgdG8gdGhlIHNjcm9sbCBldmVudCBhbmQgdHJpZ2dlcnMgdGhpcyBmdW5jdGlvbi5cbiAgICBwdWJsaWMgb25TY3JvbGwoJHNjcm9sbEVsOiBFbGVtZW50LCBldnQ6IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHRvdGFsSGVpZ2h0ID0gJHNjcm9sbEVsLnNjcm9sbEhlaWdodCxcbiAgICAgICAgICAgIGNsaWVudEhlaWdodCA9ICRzY3JvbGxFbC5jbGllbnRIZWlnaHQ7XG5cbiAgICAgICAgLy8gSWYgc2Nyb2xsIGlzIGF0IHRoZSBib3R0b20gYW5kIG5vIHJlcXVlc3QgaXMgaW4gcHJvZ3Jlc3MgYW5kIG5leHQgcGFnZSByZWNvcmRzIGFyZSBhdmFpbGFibGUsIGZldGNoIG5leHQgcGFnZSBpdGVtcy5cbiAgICAgICAgaWYgKCF0aGlzLl9sb2FkaW5nSXRlbXMgJiYgIXRoaXMuZGF0YVByb3ZpZGVyLmlzTGFzdFBhZ2UgJiYgKCRzY3JvbGxFbC5zY3JvbGxUb3AgKyBjbGllbnRIZWlnaHQgPj0gdG90YWxIZWlnaHQpKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRNb3JlRGF0YSh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgICAgICBpZiAoIWlzRGVmaW5lZCh0aGlzLm1pbmNoYXJzKSkge1xuICAgICAgICAgICAgLy8gZm9yIGF1dG9jb21wbGV0ZSBzZXQgdGhlIG1pbmNoYXJzIHRvIDBcbiAgICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdhdXRvY29tcGxldGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5taW5jaGFycyA9IDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubWluY2hhcnMgPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5saXN0ZW5RdWVyeSA9IHRoaXMuaXNVcGRhdGVPbktleVByZXNzKCk7XG5cbiAgICAgICAgLy8gYnkgZGVmYXVsdCBmb3IgYXV0b2NvbXBsZXRlIGRvIG5vdCBzaG93IHRoZSBzZWFyY2ggaWNvblxuICAgICAgICAvLyBieSBkZWZhdWx0IHNob3cgdGhlIHNlYXJjaGljb24gZm9yIHR5cGUgPSBzZWFyY2hcbiAgICAgICAgdGhpcy5zaG93c2VhcmNoaWNvbiA9IGlzRGVmaW5lZCh0aGlzLnNob3dzZWFyY2hpY29uKSA/IHRoaXMuc2hvd3NlYXJjaGljb24gOiAodGhpcy50eXBlID09PSAnc2VhcmNoJyk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG5cbiAgICAgICAgc3R5bGVyKHRoaXMubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCwgdGhpcyk7XG4gICAgICAgIHRoaXMuY29udGFpbmVyVGFyZ2V0ID0gZ2V0Q29udGFpbmVyVGFyZ2V0Q2xhc3ModGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgICAgICBjb25zdCBzZWFyY2hJbnB1dEVsID0gJCgnLmFwcC1zZWFyY2gtaW5wdXQnKTtcbiAgICAgICAgaWYgKHNlYXJjaElucHV0RWwpIHtcbiAgICAgICAgICAgIHNlYXJjaElucHV0RWwucmVtb3ZlQXR0cignYXJpYS1leHBhbmRlZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBldmVudERhdGEoJGV2ZW50LCBpdGVtKSB7XG4gICAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgICAgICRldmVudFsnZGF0YSddID0ge1xuICAgICAgICAgICAgICAgIGl0ZW0gIDogaXRlbS5kYXRhT2JqZWN0LFxuICAgICAgICAgICAgICAgIG1vZGVsIDogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICBsYWJlbCA6IGl0ZW0ubGFiZWwsXG4gICAgICAgICAgICAgICAgcXVlcnkgOiB0aGlzLnF1ZXJ5XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICRldmVudDtcbiAgICB9XG5cbiAgICAvLyB0cmlnZ2VyZWQgb24gc2VsZWN0IG9uIG9wdGlvbiBmcm9tIHRoZSBsaXN0LiBTZXQgdGhlIHF1ZXJ5TW9kZWwsIHF1ZXJ5IGFuZCBtb2RlbEJ5S2V5IGZyb20gdGhlIG1hdGNoZWQgaXRlbS5cbiAgICBwdWJsaWMgdHlwZWFoZWFkT25TZWxlY3QobWF0Y2g6IFR5cGVhaGVhZE1hdGNoLCAkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBtYXRjaC5pdGVtO1xuICAgICAgICB0aGlzLnF1ZXJ5TW9kZWwgPSBpdGVtO1xuICAgICAgICBpdGVtLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5xdWVyeSA9IGl0ZW0ubGFiZWw7XG4gICAgICAgIHRoaXMuc2hvd0Nsb3NlYnRuID0gKHRoaXMucXVlcnkgIT09ICcnKTtcbiAgICAgICAgJGV2ZW50ID0gJGV2ZW50IHx8IHRoaXMuJHR5cGVhaGVhZEV2ZW50O1xuXG4gICAgICAgIC8vIEFzIGl0ZW0ua2V5IGNhbiB2YXJ5IGZyb20ga2V5IGluIHRoZSBkYXRhc2V0SXRlbXNcbiAgICAgICAgdGhpcy5fbW9kZWxCeUtleSA9IGl0ZW0ua2V5O1xuICAgICAgICB0aGlzLl9tb2RlbEJ5VmFsdWUgPSBpdGVtLnZhbHVlO1xuXG4gICAgICAgICRldmVudCA9IHRoaXMuZXZlbnREYXRhKCRldmVudCwgaXRlbSk7XG5cbiAgICAgICAgdGhpcy5pbnZva2VPblRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgJGV2ZW50IHx8IHt9KTtcbiAgICAgICAgLy8gdXBkYXRpbmcgdGhlIHZhcmlhYmxlIGJvdW5kIHRvIGRlZmF1bHQgdmFsdWUgYXMgaW52b2tlT25DaGFuZ2UgaXMgbm90IHVwZGF0aW5nIHRoZSB2YXJpYWJsZS5cbiAgICAgICAgaWYgKHRoaXMuZGF0YXZhbHVlICE9PSAodGhpcyBhcyBhbnkpLnByZXZEYXRhdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQm91bmRWYXJpYWJsZSh0aGlzLmRhdGF2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2Z1bGwtc2NyZWVuJykpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VTZWFyY2goKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NlbGVjdCcsIHsgJGV2ZW50LCBzZWxlY3RlZFZhbHVlOiB0aGlzLmRhdGF2YWx1ZSB9KTtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdzdWJtaXQnLCB7ICRldmVudCB9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVByZXZEYXRhdmFsdWUodGhpcy5kYXRhdmFsdWUpO1xuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92OiBhbnkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ3RhYmluZGV4Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmFja3dhcmQgY29tcGF0YWJpbGl0eSBmcm9tIDEwLjMuMSB0byAxMC4zLjJcbiAgICAgICAgLy8gMTAuMy4xIHdlIGhhZCBkaXNwbGF5bGFiZWwgYXMgbW9kYWwgdmFsdWVcbiAgICAgICAgLy8gRnJvbSAxMC4zLjIgb253b3JkcyB3ZSB3aWxsIGJlIGhhdmluZyBkaXNwbGF5ZXhwcmVzaW9uIGFzIG1vZGFsIHZhbHVlXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdhdXRvY29tcGxldGUnICYmIGtleSA9PT0gJ2Rpc3BsYXlsYWJlbCcgJiYgdGhpcy5kaXNwbGF5bGFiZWwgJiYgKCF0aGlzLmRpc3BsYXlleHByZXNzaW9uIHx8ICh0aGlzLmRpc3BsYXlleHByZXNzaW9uICYmICF0aGlzLmRhdGFzb3VyY2UpKSkgIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWV4cHJlc3Npb24gPSB0aGlzLmRpc3BsYXlsYWJlbDtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWxhYmVsID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2hlbiBkYXRhb3B0aW9ucyBhcmUgcHJvdmlkZWQgYW5kIHRoZXJlIGlzIG5vIGRpc3BsYXlsYWJlbCBnaXZlbiB0aGVuIGRpc3BsYXlsYWJlbCBpcyBzZXQgYXMgdGhlIHJlbGF0ZWRmaWVsZFxuICAgICAgICBpZiAoa2V5ID09PSAnZGlzcGxheWxhYmVsJyAmJiB0aGlzLmRhdGFvcHRpb25zICYmIHRoaXMuYmluZGRpc3BsYXlsYWJlbCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5xdWVyeSA9IGdldCh0aGlzLl9tb2RlbEJ5VmFsdWUsIG52KSB8fCB0aGlzLl9tb2RlbEJ5VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3aGVuIHNlYXJjaCBpcyBkaXNhYmxlZCwgZG8gbm90IGxvYWQgYW55IG1vcmUgZGF0YSBvciBqdXN0IGNsZWFyIHRoZSBkYXRhIHRoYXQgaXMgYWxyZWFkeSBpbiBwcm9jZXNzIG9yIGxvYWRlZC5cbiAgICAgICAgaWYgKGtleSA9PT0gJ2Rpc2FibGVkJykge1xuICAgICAgICAgICAgaWYgKG52ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJEYXRhID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJEYXRhID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0KCh0aGlzLnR5cGVhaGVhZCBhcyBhbnkpLCAnX3R5cGVhaGVhZC5pc1Nob3duJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlYWhlYWQuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjY3VzdG9tSXRlbVRlbXBsYXRlIGxldC1tb2RlbD1cIml0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiIGxldC1xdWVyeT1cInF1ZXJ5XCIgbGV0LW1hdGNoPVwibWF0Y2hcIj5cbiAgICA8IS0tIERlZmF1bHQgaXRlbSB0ZW1wbGF0ZSAtLT5cbiAgICA8YSAqbmdJZj1cIiFjb250ZW50XCI+XG4gICAgICAgIDxpbWcgKm5nSWY9XCJtb2RlbC5pbWdTcmNcIiBbc3JjXT1cIm1vZGVsLmltZ1NyY1wiIGFsdD1cIlNlYXJjaFwiIFtzdHlsZS53aWR0aF09XCJpbWFnZXdpZHRoXCI+XG4gICAgICAgIDxzcGFuIFt0aXRsZV09XCJtb2RlbC5sYWJlbFwiIFtpbm5lckh0bWxdPVwiaGlnaGxpZ2h0KG1hdGNoLCBxdWVyeSkgfHwgbW9kZWwubGFiZWxcIj48L3NwYW4+XG4gICAgPC9hPlxuICAgIDwhLS0gQ3VzdG9tIHBhcnRpYWwgdGVtcGxhdGUgLS0+XG4gICAgPGEgKm5nSWY9XCJjb250ZW50XCIgW25nQ2xhc3NdPVwie2N1c3RvbVRlbXBsYXRlOiBjb250ZW50fVwiIHBhcnRpYWxDb250YWluZXIgW3dtSXRlbVRlbXBsYXRlXT1cImNvbnRlbnRcIiBbdXNlckNvbXBvbmVudFBhcmFtc109XCJtYXRjaC5pdGVtXCI+XG4gICAgICAgIDxkaXYgcGFydGlhbC1jb250YWluZXItdGFyZ2V0PjwvZGl2PlxuICAgIDwvYT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY3VzdG9tTGlzdFRlbXBsYXRlIGxldC1tYXRjaGVzPVwibWF0Y2hlc1wiIGxldC1pdGVtVGVtcGxhdGU9XCJpdGVtVGVtcGxhdGVcIiBsZXQtcXVlcnk9XCJxdWVyeVwiPlxuICAgIDx1bCAjdWxFbGVtZW50IGNsYXNzPVwiYXBwLXNlYXJjaCBkcm9wZG93bi1tZW51XCIgc2Nyb2xsYWJsZT5cbiAgICAgICAgPGxpICNsaUVsZW1lbnRzICpuZ0Zvcj1cImxldCBtYXRjaCBvZiBtYXRjaGVzOyBsZXQgaSA9IGluZGV4O1wiIFtuZ0NsYXNzXT1cInthY3RpdmU6IHR5cGVhaGVhZENvbnRhaW5lciAmJiB0eXBlYWhlYWRDb250YWluZXIuaXNBY3RpdmUobWF0Y2gpLCAnbGlzdC1ncm91cC1oZWFkZXInOiBtYXRjaCAmJiBtYXRjaC5pc0hlYWRlcigpfVwiXG4gICAgICAgICAgICAobW91c2VlbnRlcik9XCJ0eXBlYWhlYWRDb250YWluZXIuc2VsZWN0QWN0aXZlKG1hdGNoKTtcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm1hdGNoICYmICFtYXRjaC5pc0hlYWRlcigpICYmIHR5cGVhaGVhZENvbnRhaW5lci5zZWxlY3RNYXRjaChtYXRjaCwgJGV2ZW50KTsgJHR5cGVhaGVhZEV2ZW50ID0gJGV2ZW50OyBub3RpZnlTdWJzY3JpYmVyKCk7XCI+XG4gICAgICAgICAgICA8IS0tIGl0ZW1UZW1wbGF0ZSBjb21lcyBmcm9tIHRoZSA8aW5wdXQ+IC0tPlxuICAgICAgICAgICAgPGg0ICpuZ0lmPVwibWF0Y2guaXNIZWFkZXIoKVwiIGNsYXNzPVwiZ3JvdXAtdGl0bGVcIj57e21hdGNoLnZhbHVlfX08L2g0PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFtYXRjaC5pc0hlYWRlcigpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntpdGVtOiBtYXRjaC5pdGVtLCBpbmRleDogaSwgbWF0Y2g6IG1hdGNoLCBxdWVyeTogcXVlcnl9XCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0YXR1c1wiIFtoaWRkZW5dPVwiX2xvYWRpbmdJdGVtcyB8fCAhKGRhdGFjb21wbGV0ZW1zZyAmJiBkYXRhUHJvdmlkZXIuaXNMYXN0UGFnZSlcIj5cbiAgICAgICAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJkYXRhY29tcGxldGVtc2dcIj48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdHVzXCIgW2hpZGRlbl09XCIhX2xvYWRpbmdJdGVtc1wiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaXJjbGUtby1ub3RjaCBmYS1zcGluXCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4gW3RleHRDb250ZW50XT1cImxvYWRpbmdkYXRhbXNnXCI+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L3VsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLVRoaXMgdGVtcGxhdGUgaXMgZm9yIHNlYXJjaCBpbnNpZGUgbW9iaWxlIG5hdmJhci4tLT5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJuYXZzZWFyY2hiYXI7IGVsc2Ugc2VhcmNoVGVtcGxhdGVcIj5cbiAgICA8aW5wdXQgW3RpdGxlXT1cInF1ZXJ5IHx8ICcnXCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImFwcC10ZXh0Ym94IGZvcm0tY29udHJvbCBsaXN0LW9mLW9ianMgYXBwLXNlYXJjaC1pbnB1dFwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8fCAnJ1wiXG4gICAgICAgICAgIGZvY3VzLXRhcmdldFxuICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgW2F0dHIuYWNjZXNza2V5XT1cInNob3J0Y3V0a2V5XCJcbiAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgWyhuZ01vZGVsKV09XCJxdWVyeVwiXG4gICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxuICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICBbdHlwZWFoZWFkXT1cInR5cGVhaGVhZERhdGFTb3VyY2VcIlxuICAgICAgICAgICBbdHlwZWFoZWFkV2FpdE1zXT1cImRlYm91bmNldGltZVwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRJdGVtVGVtcGxhdGVdPVwiY3VzdG9tSXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICAgW29wdGlvbnNMaXN0VGVtcGxhdGVdPVwiY3VzdG9tTGlzdFRlbXBsYXRlXCJcbiAgICAgICAgICAgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgIChrZXlkb3duKT1cImxpc3RlblF1ZXJ5ID0gdHJ1ZVwiXG4gICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIiR0eXBlYWhlYWRFdmVudCA9ICRldmVudDtoYW5kbGVFbnRlckV2ZW50KCRldmVudClcIlxuICAgICAgICAgICAoa2V5ZG93bi5hcnJvd2Rvd24pPVwic2VsZWN0TmV4dCgkZXZlbnQpXCJcbiAgICAgICAgICAgKGJsdXIpPVwiaW52b2tlT25Ub3VjaGVkKCRldmVudClcIlxuICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlRm9jdXMoJGV2ZW50KTtcIlxuICAgICAgICAgICAoZm9jdXMpPVwiX3Vuc3Vic2NyaWJlRHYgPSBmYWxzZTsgbGlzdGVuUXVlcnkgPSB0cnVlOyBoYW5kbGVGb2N1cygkZXZlbnQpOyBpbnZva2VPbkZvY3VzKCRldmVudCk7XCJcbiAgICAgICAgICAgKGZvY3Vzb3V0KT1cIm9uRm9jdXNPdXQoKVwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRNaW5MZW5ndGhdPVwibWluY2hhcnNcIlxuICAgICAgICAgICBbdHlwZWFoZWFkT3B0aW9uc0xpbWl0XT1cImxpbWl0XCJcbiAgICAgICAgICAgKHR5cGVhaGVhZExvYWRpbmcpPVwiX2xvYWRpbmdJdGVtc1wiXG4gICAgICAgICAgICh0eXBlYWhlYWRPblNlbGVjdCk9XCJ0eXBlYWhlYWRPblNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgICAgdHlwZWFoZWFkT3B0aW9uRmllbGQ9XCJsYWJlbFwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRHcm91cEZpZWxkXT1cImdyb3VwYnkgPyAnZ3JvdXBieScgOiBudWxsXCJcbiAgICAgICAgICAgW3R5cGVhaGVhZEFzeW5jXT1cInRydWVcIlxuICAgICAgICAgICBbdHlwZWFoZWFkU2Nyb2xsYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgW2FkYXB0aXZlUG9zaXRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRPcHRpb25zSW5TY3JvbGxhYmxlVmlld109XCJvcHRpb25zbGltaXRpbnNjcm9sbGFibGV2aWV3XCJcbiAgICAgICAgICAgW2Ryb3B1cF09XCJkcm9wdXBcIlxuICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAgICBbYXR0ci5uYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFsYWJlbCB8fCAnU2VhcmNoIGZpZWxkJ1wiLz5cbiAgICA8aSBjbGFzcz1cImJ0bi1jbG9zZSB3aSB3aS1jYW5jZWxcIiBbaGlkZGVuXT1cIiFzaG93Q2xvc2VidG5cIiAoY2xpY2spPVwiY2xlYXJTZWFyY2goJGV2ZW50KTtcIj48L2k+XG48L25nLWNvbnRhaW5lcj5cbjwhLS1UaGlzIHRlbXBsYXRlIGlzIGZvciBib3RoIHdlYiBhbmQgZnVsbHNjcmVlbiBtb2RlIGluIG1vYmlsZS4tLT5cbjxuZy10ZW1wbGF0ZSAjc2VhcmNoVGVtcGxhdGU+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4taWNvbiBmb3JtLWNvbnRyb2wtZmVlZGJhY2sgYmFjay1idG5cIiBhcmlhLWhpZGRlbj1cInRydWVcIiAoY2xpY2spPVwiY2xvc2VTZWFyY2goKVwiPjxpIGNsYXNzPVwiYXBwLWljb24ge3tiYWNrc2VhcmNoaWNvbmNsYXNzfX1cIj48L2k+PC9idXR0b24+XG4gICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+QmFjayBidXR0b248L3NwYW4+XG4gICAgPGlucHV0IFt0aXRsZV09XCJxdWVyeSB8fCAnJ1wiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJhcHAtdGV4dGJveCBmb3JtLWNvbnRyb2wgbGlzdC1vZi1vYmpzIGFwcC1zZWFyY2gtaW5wdXRcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfHwgJydcIlxuICAgICAgICAgICBmb2N1cy10YXJnZXRcbiAgICAgICAgICAgW2NvbnRhaW5lcl09XCJjb250YWluZXJUYXJnZXQgfHwgJy53bS1hcHAnXCJcbiAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgW2F0dHIuYWNjZXNza2V5XT1cInNob3J0Y3V0a2V5XCJcbiAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgWyhuZ01vZGVsKV09XCJxdWVyeVwiXG4gICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxuICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICBbdHlwZWFoZWFkXT1cInR5cGVhaGVhZERhdGFTb3VyY2VcIlxuICAgICAgICAgICBbdHlwZWFoZWFkV2FpdE1zXT1cImRlYm91bmNldGltZVwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRJdGVtVGVtcGxhdGVdPVwiY3VzdG9tSXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICAgW29wdGlvbnNMaXN0VGVtcGxhdGVdPVwiY3VzdG9tTGlzdFRlbXBsYXRlXCJcbiAgICAgICAgICAgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgIChrZXlkb3duKT1cImxpc3RlblF1ZXJ5ID0gdHJ1ZVwiXG4gICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIiR0eXBlYWhlYWRFdmVudCA9ICRldmVudDtoYW5kbGVFbnRlckV2ZW50KCRldmVudClcIlxuICAgICAgICAgICAoa2V5ZG93bi5hcnJvd2Rvd24pPVwic2VsZWN0TmV4dCgkZXZlbnQpXCJcbiAgICAgICAgICAgKGJsdXIpPVwiaW52b2tlT25Ub3VjaGVkKCRldmVudCk7IG9uRm9jdXNPdXQoKVwiXG4gICAgICAgICAgIChjbGljayk9XCJoYW5kbGVGb2N1cygkZXZlbnQpO1wiXG4gICAgICAgICAgIChmb2N1cyk9XCJfdW5zdWJzY3JpYmVEdiA9IGZhbHNlOyBsaXN0ZW5RdWVyeSA9IHRydWU7IGhhbmRsZUZvY3VzKCRldmVudCk7IGludm9rZU9uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRNaW5MZW5ndGhdPVwibWluY2hhcnNcIlxuICAgICAgICAgICBbdHlwZWFoZWFkT3B0aW9uc0xpbWl0XT1cImxpbWl0XCJcbiAgICAgICAgICAgKHR5cGVhaGVhZExvYWRpbmcpPVwiX2xvYWRpbmdJdGVtc1wiXG4gICAgICAgICAgICh0eXBlYWhlYWRPblNlbGVjdCk9XCJ0eXBlYWhlYWRPblNlbGVjdCgkZXZlbnQpXCJcbiAgICAgICAgICAgdHlwZWFoZWFkT3B0aW9uRmllbGQ9XCJsYWJlbFwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRHcm91cEZpZWxkXT1cImdyb3VwYnkgPyAnZ3JvdXBieScgOiBudWxsXCJcbiAgICAgICAgICAgW3R5cGVhaGVhZEFzeW5jXT1cInRydWVcIlxuICAgICAgICAgICBbdHlwZWFoZWFkU2Nyb2xsYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgW2FkYXB0aXZlUG9zaXRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgIFt0eXBlYWhlYWRPcHRpb25zSW5TY3JvbGxhYmxlVmlld109XCJvcHRpb25zbGltaXRpbnNjcm9sbGFibGV2aWV3XCJcbiAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICAgICAgICAgW2Ryb3B1cF09XCJkcm9wdXBcIlxuICAgICAgICAgICBbYXR0ci5uYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFsYWJlbCB8fCAnU2VhcmNoIGZpZWxkJ1wiPlxuICAgIDxpbnB1dCBjbGFzcz1cIm1vZGVsLWhvbGRlclwiIG5nLW1vZGVsPVwicHJveHlNb2RlbFwiIG5nLXJlcXVpcmVkPVwicmVxdWlyZWRcIiB0YWJpbmRleD1cIi0xXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgPHNwYW4gKm5nSWY9XCJfbG9hZGluZ0l0ZW1zXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJmYSBmYS1jaXJjbGUtby1ub3RjaCBmYS1zcGluIGZvcm0tY29udHJvbC1mZWVkYmFja1wiPjwvc3Bhbj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1pY29uIGZvcm0tY29udHJvbC1mZWVkYmFjayBjbGVhci1idG5cIiBbbmdDbGFzc109XCJ7J3Nob3ctYnRuJzogaXNRdWVyeUVudGVyZWQoKX1cIiAoY2xpY2spPVwiY2xlYXJTZWFyY2goJGV2ZW50LCB0cnVlKVwiPjxpIGNsYXNzPVwiYXBwLWljb24ge3tjbGVhcnNlYXJjaGljb25jbGFzc319XCI+PC9pPjwvYnV0dG9uPlxuICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkNsZWFyIGJ1dHRvbjwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cInNob3dzZWFyY2hpY29uXCIgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6IGRpc2FibGVkfVwiIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYWRkb25cIj5cbiAgICAgICAgPGZvcm0+XG4gICAgICAgICAgICA8YnV0dG9uIHRpdGxlPVwiU2VhcmNoXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgY2xhc3M9XCJhcHAtc2VhcmNoLWJ1dHRvbiBidG4gYnRuLWljb25cIiB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VhcmNoU2VsZWN0KCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJhcHAtaWNvbiB7e3NlYXJjaGljb25jbGFzc319XCI+PC9pPjwvYnV0dG9uPlxuICAgICAgICA8L2Zvcm0+XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
@@ -1096,7 +1096,12 @@ class SearchComponent extends DatasetAwareFormComponent {
|
|
1096
1096
|
super.ngAfterViewInit();
|
1097
1097
|
styler(this.nativeElement, this);
|
1098
1098
|
this.containerTarget = getContainerTargetClass(this.nativeElement);
|
1099
|
-
|
1099
|
+
}
|
1100
|
+
ngAfterViewChecked() {
|
1101
|
+
const searchInputEl = $('.app-search-input');
|
1102
|
+
if (searchInputEl) {
|
1103
|
+
searchInputEl.removeAttr('aria-expanded');
|
1104
|
+
}
|
1100
1105
|
}
|
1101
1106
|
eventData($event, item) {
|
1102
1107
|
if ($event) {
|
@@ -1213,7 +1218,7 @@ class SearchComponent extends DatasetAwareFormComponent {
|
|
1213
1218
|
type: ViewChildren,
|
1214
1219
|
args: ['liElements']
|
1215
1220
|
}] }); })();
|
1216
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SearchComponent, { className: "SearchComponent", filePath: "search.component.ts", lineNumber:
|
1221
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SearchComponent, { className: "SearchComponent", filePath: "search.component.ts", lineNumber: 66 }); })();
|
1217
1222
|
|
1218
1223
|
class ScrollableDirective {
|
1219
1224
|
constructor(inj, searchRef) {
|