@wavemaker/app-ng-runtime 11.8.0-next.141688 → 11.8.0-next.141689
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build-task/bundles/index.umd.js +4 -4
- package/build-task/esm2022/advanced/carousel/carousel-template/carousel-template.build.mjs +3 -3
- package/build-task/esm2022/containers/repeat-template.build.mjs +3 -3
- package/build-task/fesm2022/index.mjs +4 -4
- package/build-task/fesm2022/index.mjs.map +1 -1
- package/components/advanced/carousel/bundles/index.umd.js +3 -2
- package/components/advanced/carousel/carousel-template/carousel-template.directive.d.ts +1 -1
- package/components/advanced/carousel/esm2022/carousel-template/carousel-template.directive.mjs +4 -3
- package/components/advanced/carousel/fesm2022/index.mjs +3 -2
- package/components/advanced/carousel/fesm2022/index.mjs.map +1 -1
- package/components/base/bundles/index.umd.js +45 -32
- package/components/base/directives/show-in-device.directive.d.ts +3 -6
- package/components/base/esm2022/directives/show-in-device.directive.mjs +12 -14
- package/components/base/esm2022/public_api.mjs +2 -1
- package/components/base/esm2022/widgets/common/base/base-field-validations.mjs +5 -7
- package/components/base/esm2022/widgets/common/base/base.component.mjs +22 -15
- package/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +13 -6
- package/components/base/esm2022/widgets/common/repeat-template/repeat-template.directive.mjs +4 -3
- package/components/base/fesm2022/index.mjs +45 -33
- package/components/base/fesm2022/index.mjs.map +1 -1
- package/components/base/public_api.d.ts +1 -0
- package/components/base/widgets/common/base/base.component.d.ts +18 -1
- package/components/base/widgets/common/lazy-load/lazy-load.directive.d.ts +2 -2
- package/components/base/widgets/common/repeat-template/repeat-template.directive.d.ts +1 -1
- package/components/basic/search/bundles/index.umd.js +10 -9
- package/components/basic/search/esm2022/search.component.mjs +11 -10
- package/components/basic/search/fesm2022/index.mjs +10 -9
- package/components/basic/search/fesm2022/index.mjs.map +1 -1
- package/components/data/form/bundles/index.umd.js +1 -1
- package/components/data/form/esm2022/form.component.mjs +2 -2
- package/components/data/form/fesm2022/index.mjs +1 -1
- package/components/data/form/fesm2022/index.mjs.map +1 -1
- package/components/data/list/bundles/index.umd.js +10 -7
- package/components/data/list/esm2022/list-item.directive.mjs +6 -1
- package/components/data/list/esm2022/list.component.mjs +7 -8
- package/components/data/list/fesm2022/index.mjs +11 -8
- package/components/data/list/fesm2022/index.mjs.map +1 -1
- package/components/data/list/list-item.directive.d.ts +4 -0
- package/components/data/pagination/bundles/index.umd.js +10 -9
- package/components/data/pagination/esm2022/pagination.component.mjs +11 -10
- package/components/data/pagination/fesm2022/index.mjs +10 -9
- package/components/data/pagination/fesm2022/index.mjs.map +1 -1
- package/components/data/table/bundles/index.umd.js +3 -1
- package/components/data/table/esm2022/table.component.mjs +4 -2
- package/components/data/table/fesm2022/index.mjs +3 -1
- package/components/data/table/fesm2022/index.mjs.map +1 -1
- package/components/input/color-picker/bundles/index.umd.js +2 -2
- package/components/input/color-picker/esm2022/color-picker.component.mjs +3 -3
- package/components/input/color-picker/fesm2022/index.mjs +2 -2
- package/components/input/color-picker/fesm2022/index.mjs.map +1 -1
- package/components/input/default/bundles/index.umd.js +37 -32
- package/components/input/default/esm2022/checkbox/checkbox.component.mjs +6 -5
- package/components/input/default/esm2022/select/select.component.mjs +6 -5
- package/components/input/default/esm2022/text/base/base-input.mjs +3 -2
- package/components/input/default/esm2022/text/calendar/input-calendar.component.mjs +5 -4
- package/components/input/default/esm2022/text/color/input-color.component.mjs +5 -4
- package/components/input/default/fesm2022/index.mjs +37 -32
- package/components/input/default/fesm2022/index.mjs.map +1 -1
- package/components/input/default/text/base/base-input.d.ts +1 -0
- package/components/input/epoch/bundles/index.umd.js +13 -11
- package/components/input/epoch/esm2022/date/date.component.mjs +2 -2
- package/components/input/epoch/esm2022/date-time/date-time.component.mjs +6 -5
- package/components/input/epoch/esm2022/time/time.component.mjs +6 -5
- package/components/input/epoch/fesm2022/index.mjs +13 -11
- package/components/input/epoch/fesm2022/index.mjs.map +1 -1
- package/components/input/rating/bundles/index.umd.js +12 -10
- package/components/input/rating/esm2022/rating.component.mjs +13 -11
- package/components/input/rating/fesm2022/index.mjs +12 -10
- package/components/input/rating/fesm2022/index.mjs.map +1 -1
- package/components/input/slider/bundles/index.umd.js +4 -3
- package/components/input/slider/esm2022/slider.component.mjs +5 -4
- package/components/input/slider/fesm2022/index.mjs +4 -3
- package/components/input/slider/fesm2022/index.mjs.map +1 -1
- package/components/navigation/menu/bundles/index.umd.js +10 -12
- package/components/navigation/menu/esm2022/menu.module.mjs +3 -2
- package/components/navigation/menu/esm2022/nav/nav-item/nav-item.directive.mjs +3 -2
- package/components/navigation/menu/esm2022/nav/nav.component.mjs +8 -12
- package/components/navigation/menu/fesm2022/index.mjs +11 -13
- package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
- package/components/navigation/menu/nav/nav-item/nav-item.directive.d.ts +1 -1
- package/components/navigation/menu/nav/nav.component.d.ts +1 -2
- package/core/bundles/index.umd.js +23 -0
- package/core/esm2022/public_api.mjs +2 -1
- package/core/esm2022/services/custom-icons-loader.service.mjs +26 -0
- package/core/fesm2022/index.mjs +25 -3
- package/core/fesm2022/index.mjs.map +1 -1
- package/core/public_api.d.ts +1 -0
- package/core/services/custom-icons-loader.service.d.ts +7 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/runtime/base/bundles/index.umd.js +19 -8
- package/runtime/base/components/app-component/app.component.d.ts +3 -1
- package/runtime/base/directives/accessroles.directive.d.ts +4 -3
- package/runtime/base/esm2022/components/app-component/app.component.mjs +9 -5
- package/runtime/base/esm2022/directives/accessroles.directive.mjs +14 -7
- package/runtime/base/esm2022/services/i18n.service.mjs +2 -2
- package/runtime/base/fesm2022/index.mjs +20 -9
- package/runtime/base/fesm2022/index.mjs.map +1 -1
- package/scripts/datatable/datatable.js +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Validators } from '@angular/forms';
|
|
2
|
-
import {
|
|
3
|
-
import { cloneDeep, concat, extend, filter, find, forEach, get, isEmpty, isFunction, toUpper } from "lodash-es";
|
|
2
|
+
import { $unwatch, $watch, FormWidgetType, VALIDATOR } from '@wm/core';
|
|
3
|
+
import { cloneDeep, concat, extend, filter, find, forEach, get, isEmpty, isFunction, keys as _keys, toUpper } from "lodash-es";
|
|
4
4
|
const DEFAULT_VALIDATOR = {
|
|
5
5
|
pattern: 'regexp',
|
|
6
6
|
max: 'maxvalue',
|
|
@@ -101,8 +101,7 @@ export class BaseFieldValidations {
|
|
|
101
101
|
this.instance.validationmessage = get(err, 'errorMessage');
|
|
102
102
|
}
|
|
103
103
|
else {
|
|
104
|
-
|
|
105
|
-
const keys = keys(err);
|
|
104
|
+
const keys = _keys(err);
|
|
106
105
|
this.instance.validationmessage = (err[keys[0]]).toString();
|
|
107
106
|
}
|
|
108
107
|
return err;
|
|
@@ -243,8 +242,7 @@ export class BaseFieldValidations {
|
|
|
243
242
|
this.instance.validationmessage = get(fieldErrors, 'errorMessage');
|
|
244
243
|
}
|
|
245
244
|
else {
|
|
246
|
-
|
|
247
|
-
const keys = keys(fieldErrors);
|
|
245
|
+
const keys = _keys(fieldErrors);
|
|
248
246
|
const key = keys[0];
|
|
249
247
|
const validationMsgKey = get(DEFAULT_VALIDATOR, key) || this.formwidget.validateType;
|
|
250
248
|
if (validationMsgKey) {
|
|
@@ -264,4 +262,4 @@ export class BaseFieldValidations {
|
|
|
264
262
|
}
|
|
265
263
|
}
|
|
266
264
|
}
|
|
267
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1maWVsZC12YWxpZGF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvYmFzZS9zcmMvd2lkZ2V0cy9jb21tb24vYmFzZS9iYXNlLWZpZWxkLXZhbGlkYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFOUcsTUFBTSxpQkFBaUIsR0FBRztJQUN0QixPQUFPLEVBQUUsUUFBUTtJQUNqQixHQUFHLEVBQUUsVUFBVTtJQUNmLEdBQUcsRUFBRSxVQUFVO0lBQ2YsUUFBUSxFQUFFLFVBQVU7SUFDcEIsU0FBUyxFQUFFLFVBQVU7SUFDckIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsWUFBWSxFQUFFLGNBQWM7SUFDNUIsV0FBVyxFQUFFLGFBQWE7SUFDMUIsYUFBYSxFQUFDLGVBQWU7Q0FDaEMsQ0FBQztBQUVGLE1BQU0sT0FBTyxvQkFBb0I7SUFvQjdCLFlBQVksUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxjQUFlO1FBQ3ZGLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxhQUFh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QUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixNQUFNLGdCQUFnQixHQUFHLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztZQUNyRixJQUFJLGdCQUFnQixFQUFFLENBQUM7Z0JBQ25CLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDO2dCQUNwRyxJQUFJLEdBQUcsSUFBSSxHQUFHLFlBQVksUUFBUSxFQUFFLENBQUM7b0JBQ2pDLHdFQUF3RTtvQkFDeEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ2xGLENBQUM7cUJBQU0sQ0FBQztvQkFDSixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztnQkFDMUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDSix3RkFBd0Y7Z0JBQ3hGLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1lBQ3pDLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgVkFMSURBVE9SLCAkd2F0Y2gsICR1bndhdGNoLCBGb3JtV2lkZ2V0VHlwZSB9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7Y2xvbmVEZWVwLCBjb25jYXQsIGV4dGVuZCwgZmlsdGVyLCBmaW5kLCBmb3JFYWNoLCBnZXQsIGlzRW1wdHksIGlzRnVuY3Rpb24sIHRvVXBwZXJ9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuY29uc3QgREVGQVVMVF9WQUxJREFUT1IgPSB7XG4gICAgcGF0dGVybjogJ3JlZ2V4cCcsXG4gICAgbWF4OiAnbWF4dmFsdWUnLFxuICAgIG1pbjogJ21pbnZhbHVlJyxcbiAgICByZXF1aXJlZDogJ3JlcXVpcmVkJyxcbiAgICBtYXhsZW5ndGg6ICdtYXhjaGFycycsXG4gICAgbWluZGF0ZTogJ21pbmRhdGUnLFxuICAgIG1heGRhdGU6ICdtYXhkYXRlJyxcbiAgICBleGNsdWRlZGF0ZXM6ICdleGNsdWRlZGF0ZXMnLFxuICAgIGV4Y2x1ZGVkYXlzOiAnZXhjbHVkZWRheXMnLFxuICAgIGludmFsaWROdW1iZXI6J2ludmFsaWROdW1iZXInXG59O1xuXG5leHBvcnQgY2xhc3MgQmFzZUZpZWxkVmFsaWRhdGlvbnMge1xuICAgIHByaXZhdGUgaGFzVmFsaWRhdG9ycztcblxuICAgIC8vIEluc3RhbmNlIG9mIHRoZSBkaXJlY3RpdmUgdGFibGUtY29sdW1uLCBmb3JtLWZpZWxkLi5cbiAgICBwcml2YXRlIGluc3RhbmNlO1xuICAgIC8vIElubGluZSBmb3JtIHdpZGdldFxuICAgIHB1YmxpYyBmb3Jtd2lkZ2V0O1xuICAgIC8vIFdpZGdldCB0eXBlXG4gICAgcHJpdmF0ZSB3aWRnZXR0eXBlO1xuICAgIC8vIEZyb20gY29udHJvbFxuICAgIHByaXZhdGUgd2lkZ2V0Q29udHJvbDtcbiAgICAvLyBQYXJlbnQgd2lkZ2V0IGNvbnRleHQgVGFibGUsIEZvcm0uLlxuICAgIHByaXZhdGUgd2lkZ2V0Q29udGV4dDtcbiAgICAvLyBPcHRpb25hbCB0YWJsZSBjb2x1bW4gdHlwZSBxdWlja2VkaXQgbmV3cm93LyBpbmxpbmUgZWRpdFxuICAgIHByaXZhdGUgdGFibGVGaWVsZFR5cGU7XG5cbiAgICBwcml2YXRlIGRlZmF1bHRWYWxpZGF0b3JNZXNzYWdlczogYW55O1xuICAgIHByaXZhdGUgX3N5bmNWYWxpZGF0b3JzOiBhbnk7XG4gICAgcHJpdmF0ZSBfYXN5bmNWYWxpZGF0b3JGbjogYW55O1xuXG4gICAgY29uc3RydWN0b3IoaW5zdGFuY2UsIGZvcm13aWRnZXQsIHdpZGdldHR5cGUsIHdpZGdldENvbnRyb2wsIHdpZGdldENvbnRleHQsIHRhYmxlRmllbGRUeXBlPyl7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgdGhpcy5mb3Jtd2lkZ2V0ID0gZm9ybXdpZGdldDtcbiAgICAgICAgdGhpcy53aWRnZXR0eXBlID0gd2lkZ2V0dHlwZTtcbiAgICAgICAgdGhpcy53aWRnZXRDb250cm9sID0gd2lkZ2V0Q29udHJvbDtcbiAgICAgICAgdGhpcy53aWRnZXRDb250ZXh0ID0gd2lkZ2V0Q29udGV4dDtcblxuICAgICAgICB0aGlzLmRlZmF1bHRWYWxpZGF0b3JNZXNzYWdlcyA9IFtdO1xuICAgICAgICBpZiAodGFibGVGaWVsZFR5cGUpIHtcbiAgICAgICAgICAgIHRoaXMudGFibGVGaWVsZFR5cGUgPSB0YWJsZUZpZWxkVHlwZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGNvbGxlY3Rpb24gb2Ygc3VwcG9ydGVkIGRlZmF1bHQgdmFsaWRhdG9yc1xuICAgIHByaXZhdGUgZ2V0RGVmYXVsdFZhbGlkYXRvcnMoKSB7XG4gICAgICAgIGNvbnN0IF92YWxpZGF0b3IgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UucmVxdWlyZWQgJiYgdGhpcy5pbnN0YW5jZS5zaG93ICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgLy8gRm9yIGNoZWNrYm94L3RvZ2dsZSB3aWRnZXQsIHJlcXVpcmVkIHZhbGlkYXRpb24gc2hvdWxkIGNvbnNpZGVyIHRydWUgdmFsdWUgb25seVxuICAgICAgICAgICAgaWYgKHRoaXMud2lkZ2V0dHlwZSA9PT0gRm9ybVdpZGdldFR5cGUuQ0hFQ0tCT1ggfHwgdGhpcy53aWRnZXR0eXBlID09PSBGb3JtV2lkZ2V0VHlwZS5UT0dHTEUpIHtcbiAgICAgICAgICAgICAgICBfdmFsaWRhdG9yLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZFRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfdmFsaWRhdG9yLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UubWF4Y2hhcnMpIHtcbiAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCh0aGlzLmluc3RhbmNlLm1heGNoYXJzKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UubWludmFsdWUpIHtcbiAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLm1pbih0aGlzLmluc3RhbmNlLm1pbnZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UubWF4dmFsdWUgJiYgdGhpcy53aWRnZXR0eXBlICE9PSBGb3JtV2lkZ2V0VHlwZS5SQVRJTkcpIHtcbiAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLm1heCh0aGlzLmluc3RhbmNlLm1heHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UucmVnZXhwKSB7XG4gICAgICAgICAgICBfdmFsaWRhdG9yLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMuaW5zdGFuY2UucmVnZXhwKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZm9ybXdpZGdldCAmJiBpc0Z1bmN0aW9uKHRoaXMuZm9ybXdpZGdldC52YWxpZGF0ZSkpIHtcbiAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaCh0aGlzLmZvcm13aWRnZXQudmFsaWRhdGUuYmluZCh0aGlzLmZvcm13aWRnZXQpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3ZhbGlkYXRvcjtcbiAgICB9XG5cbiAgICAvLyBPbiBjaGFuZ2Ugb2YgYW55IHZhbGlkYXRpb24gcHJvcGVydHksIHNldCB0aGUgYW5ndWxhciBmb3JtIHZhbGlkYXRvcnNcbiAgICBzZXRVcFZhbGlkYXRvcnMoY3VzdG9tVmFsaWRhdG9yPykge1xuICAgICAgICBpZiAodGhpcy5oYXNWYWxpZGF0b3JzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnN0YW5jZS5fdmFsaWRhdG9ycyA9IHRoaXMuZ2V0RGVmYXVsdFZhbGlkYXRvcnMoKTtcblxuICAgICAgICBpZiAoY3VzdG9tVmFsaWRhdG9yKSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLl92YWxpZGF0b3JzLnB1c2goY3VzdG9tVmFsaWRhdG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLndpZGdldENvbnRleHQubmdmb3JtKSB7XG4gICAgICAgICAgICB0aGlzLndpZGdldENvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLmluc3RhbmNlLl92YWxpZGF0b3JzKTtcbiAgICAgICAgICAgIGNvbnN0IG9wdCA9IHt9O1xuICAgICAgICAgICAgLy8gdXBkYXRpbmcgdGhlIHZhbHVlIG9ubHkgd2hlbiBwcmV2RGF0YSBpcyBub3QgZXF1YWwgdG8gY3VycmVudCB2YWx1ZS4gYW5kIGFsc28gaW5pdGlhbGx5IHdoZW4gIGluc3RhbmNlLnZhbHVlIGlzIGVtcHR5IG9yIG51bGwgZm9yIHNvbWUgd2lkZ2V0cyBsaWtlIGRhdGUsIGNoZWNrYm94c2V0XG4gICAgICAgICAgICAvLyBlbWl0RXZlbnQgZmxhZyB3aWxsIHByZXZlbnQgZnJvbSBlbWl0dGluZyB0aGUgdmFsdWVDaGFuZ2VzIHdoZW4gdmFsdWUgaXMgZXF1YWwgdG8gdGhlIHByZXZEYXRhdmFsdWUuXG4gICAgICAgICAgICBpZiAodGhpcy5mb3Jtd2lkZ2V0ICYmICh0aGlzLmluc3RhbmNlLnZhbHVlID09PSB0aGlzLmZvcm13aWRnZXQucHJldkRhdGF2YWx1ZSB8fCB0aGlzLmlzTnVsbE9yRW1wdHlPckZhbHN5KHRoaXMuaW5zdGFuY2UudmFsdWUpKSkge1xuICAgICAgICAgICAgICAgIG9wdFsnZW1pdEV2ZW50J10gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KG9wdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRQcm9taXNlTGlzdCh2YWxpZGF0b3JzKSB7XG4gICAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgICBmb3JFYWNoKHZhbGlkYXRvcnMsIChmbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGxldCBwcm9taXNlID0gZm47XG4gICAgICAgICAgICBpZiAoZm4gaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBmbi5iaW5kKSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZSA9IGZuKHRoaXMud2lkZ2V0Q29udHJvbCwgdGhpcy53aWRnZXRDb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKHByb21pc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG5cbiAgICAvLyB0aGlzIG1ldGhvZCBzZXRzIHRoZSBhc3luY1ZhbGlkYXRpb24gb24gdGhlIGZvcm0gZmllbGQuIEFzc2lnbnMgdmFsaWRhdGlvbm1lc3NhZ2VzIGZyb20gdGhlIHJldHVybmVkIHJlc3BvbnNlXG4gICAgc2V0QXN5bmNWYWxpZGF0b3JzKHZhbGlkYXRvcnMpIHtcbiAgICAgICAgdGhpcy5fYXN5bmNWYWxpZGF0b3JGbiA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHRoaXMuZ2V0UHJvbWlzZUxpc3QodmFsaWRhdG9ycykpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIGVyciBvYmogaGFzIHZhbGlkYXRpb25NZXNzYWdlIGtleSwgdGhlbiBzZXQgdmFsaWRhdGlvbk1lc3NhZ2UgdXNpbmcgdGhpcyB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAvLyBlbHNlIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGtleSBpbiB0aGUgZXJyIG9iamVjdCBhcyB2YWxpZGF0aW9uIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIuaGFzT3duUHJvcGVydHkoJ2Vycm9yTWVzc2FnZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlID0gZ2V0KGVyciwgJ2Vycm9yTWVzc2FnZScpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IGtleXMoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UudmFsaWRhdGlvbm1lc3NhZ2UgPSAoZXJyW2tleXNbMF1dKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7XG4gICAgICAgICAgICAgICAgfSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZvcm0gY29udHJvbCBzdGF0dXMgaXMgbm90IGNoYW5nZWQgZnJvbSBwZW5kaW5nLiBUaGlzIGlzIGFuIGFuZ3VsYXIgaXNzdWUgcmVmZXIgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTMyMDBcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hlY2tGb3JTdGF0dXNDaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy53aWRnZXRDb250cm9sLnN0YXR1cyA9PT0gJ1BFTkRJTkcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yU3RhdHVzQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS5vblN0YXR1c0NoYW5nZSh0aGlzLndpZGdldENvbnRyb2wuc3RhdHVzLCB0aGlzLnRhYmxlRmllbGRUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjaGVja0ZvclN0YXR1c0NoYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnMoW3RoaXMuX2FzeW5jVmFsaWRhdG9yRm4oKV0pO1xuICAgICAgICBpZih0aGlzLndpZGdldENvbnRleHQubmdmb3JtLnRvdWNoZWQpe1xuICAgICAgICAgICAgY29uc3Qgb3B0ID0ge307XG4gICAgICAgICAgICAvLyB1cGRhdGluZyB0aGUgdmFsdWUgb25seSB3aGVuIHByZXZEYXRhIGlzIG5vdCBlcXVhbCB0byBjdXJyZW50IHZhbHVlLiBhbmQgYWxzbyBpbml0aWFsbHkgd2hlbiAgaW5zdGFuY2UudmFsdWUgaXMgZW1wdHkgb3IgbnVsbCBmb3Igc29tZSB3aWRnZXRzIGxpa2UgZGF0ZSwgY2hlY2tib3hzZXRcbiAgICAgICAgICAgIC8vIGVtaXRFdmVudCBmbGFnIHdpbGwgcHJldmVudCBmcm9tIGVtaXR0aW5nIHRoZSB2YWx1ZUNoYW5nZXMgd2hlbiB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgcHJldkRhdGF2YWx1ZS5cbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm13aWRnZXQgJiYgKHRoaXMuaW5zdGFuY2UudmFsdWUgPT09IHRoaXMuZm9ybXdpZGdldC5wcmV2RGF0YXZhbHVlIHx8IHRoaXMuaXNOdWxsT3JFbXB0eU9yRmFsc3kodGhpcy5pbnN0YW5jZS52YWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgb3B0WydlbWl0RXZlbnQnXSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy53aWRnZXRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkob3B0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzRGVmYXVsdFZhbGlkYXRvcih0eXBlKSB7XG4gICAgICAgIHJldHVybiBnZXQoVkFMSURBVE9SLCB0b1VwcGVyKHR5cGUpKTtcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IHZhbGlkYXRvciBpcyBib3VuZCB0byBhIGZ1bmN0aW9uIHRoZW4gd2F0Y2ggZm9yIHZhbHVlIGNoYW5nZXNcbiAgICAvLyBvdGhlcndpc2Ugc2V0IHRoZSB2YWx1ZSBvZiBkZWZhdWx0IHZhbGlkYXRvciBkaXJlY3RseVxuICAgIHNldERlZmF1bHRWYWxpZGF0b3Ioa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgLy8gcGFzc2luZyBmb3JtZmllbGQgYW5kIGZvcm0gYXMgYXJndW1lbnRzIHRvIHRoZSBkZWZhdWx0IHZhbGlkYXRvciBmdW5jdGlvblxuICAgICAgICAgICAgdGhpcy53YXRjaERlZmF1bHRWYWxpZGF0b3JFeHByKHZhbHVlLmJpbmQodW5kZWZpbmVkLCB0aGlzLndpZGdldENvbnRyb2wsIHRoaXMud2lkZ2V0Q29udGV4dCksIGtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLndpZGdldFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNldHMgdGhlIGRlZmF1bHQgdmFsaWRhdGlvbiBvbiB0aGUgZm9ybSBmaWVsZFxuICAgIHNldFZhbGlkYXRvcnModmFsaWRhdG9ycykge1xuICAgICAgICBsZXQgX2Nsb25lVmFsaWRhdG9ycyA9IGNsb25lRGVlcCh2YWxpZGF0b3JzKTtcbiAgICAgICAgdGhpcy5oYXNWYWxpZGF0b3JzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fc3luY1ZhbGlkYXRvcnMgPSBbXTtcbiAgICAgICAgZm9yRWFjaChfY2xvbmVWYWxpZGF0b3JzLCAob2JqLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgLy8gY3VzdG9tIHZhbGlkYXRpb24gaXMgYm91bmQgdG8gZnVuY3Rpb24uXG4gICAgICAgICAgICBpZiAob2JqICYmIG9iaiBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgLy8gcGFzc2luZyBmb3JtZmllbGQgYW5kIGZvcm0gYXMgYXJndW1lbnRzIHRvIHRoZSBvYmogKGkuZS4gdmFsaWRhdG9yIGZ1bmN0aW9uKVxuICAgICAgICAgICAgICAgIF9jbG9uZVZhbGlkYXRvcnNbaW5kZXhdID0gb2JqLmJpbmQodW5kZWZpbmVkLCB0aGlzLndpZGdldENvbnRyb2wsIHRoaXMud2lkZ2V0Q29udGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3luY1ZhbGlkYXRvcnMucHVzaChfY2xvbmVWYWxpZGF0b3JzW2luZGV4XSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrcyBmb3IgZGVmYXVsdCB2YWxpZGF0b3IgbGlrZSByZXF1aXJlZCwgbWF4Y2hhcnMgZXRjLlxuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGdldChvYmosICd0eXBlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsaWRhdG9yTWVzc2FnZXNba2V5XSA9IGdldChvYmosICdlcnJvck1lc3NhZ2UnKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0RlZmF1bHRWYWxpZGF0b3Ioa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldChvYmosICd2YWxpZGF0b3InKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0VmFsaWRhdG9yKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBfY2xvbmVWYWxpZGF0b3JzW2luZGV4XSA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gX3N5bmNWYWxpZGF0b3JzIGNvbnRhaW5zIGFsbCB0aGUgY3VzdG9tIHZhbGlkYXRpb25zIG9uIHRoZSBmb3JtIGZpZWxkLiB3aWxsIG5vdCBpbmNsdWRlIGRlZmF1bHQgdmFsaWRhdG9ycy5cbiAgICAgICAgdGhpcy5fc3luY1ZhbGlkYXRvcnMgPSBmaWx0ZXIoX2Nsb25lVmFsaWRhdG9ycywgdmFsID0+IHtcbiAgICAgICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hcHBseURlZmF1bHRWYWxpZGF0b3JzKCk7XG4gICAgfVxuXG4gICAgb2JzZXJ2ZU9uKGZpZWxkcywgY29udGV4dCkge1xuICAgICAgICBmb3JFYWNoKGZpZWxkcywgZmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybWZpZWxkID0gZmluZCh0aGlzLndpZGdldENvbnRleHRbY29udGV4dF0sIHsna2V5JzogZmllbGR9KTtcbiAgICAgICAgICAgIGlmIChmb3JtZmllbGQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWZvcm1maWVsZC5ub3RpZnlGb3JGaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWZpZWxkLm5vdGlmeUZvckZpZWxkcyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3JtZmllbGQubm90aWZ5Rm9yRmllbGRzLnB1c2godGhpcy5pbnN0YW5jZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKCkge1xuICAgICAgICB0aGlzLmFwcGx5RGVmYXVsdFZhbGlkYXRvcnMoKTtcbiAgICAgICAgaWYgKHRoaXMuX2FzeW5jVmFsaWRhdG9yRm4pIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdCA9IHt9O1xuICAgICAgICAgICAgLy8gdXBkYXRpbmcgdGhlIHZhbHVlIG9ubHkgd2hlbiBwcmV2RGF0YSBpcyBub3QgZXF1YWwgdG8gY3VycmVudCB2YWx1ZS4gYW5kIGFsc28gaW5pdGlhbGx5IHdoZW4gIGluc3RhbmNlLnZhbHVlIGlzIGVtcHR5IG9yIG51bGwgZm9yIHNvbWUgd2lkZ2V0cyBsaWtlIGRhdGUsIGNoZWNrYm94c2V0XG4gICAgICAgICAgICAvLyBlbWl0RXZlbnQgZmxhZyB3aWxsIHByZXZlbnQgZnJvbSBlbWl0dGluZyB0aGUgdmFsdWVDaGFuZ2VzIHdoZW4gdmFsdWUgaXMgZXF1YWwgdG8gdGhlIHByZXZEYXRhdmFsdWUuXG4gICAgICAgICAgICBpZiAodGhpcy5mb3Jtd2lkZ2V0ICYmICh0aGlzLmluc3RhbmNlLnZhbHVlID09PSB0aGlzLmZvcm13aWRnZXQucHJldkRhdGF2YWx1ZSB8fCB0aGlzLmlzTnVsbE9yRW1wdHlPckZhbHN5KHRoaXMuaW5zdGFuY2UudmFsdWUpKSkge1xuICAgICAgICAgICAgICAgIG9wdFsnZW1pdEV2ZW50J10gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnMoW3RoaXMuX2FzeW5jVmFsaWRhdG9yRm4oKV0pO1xuICAgICAgICAgICAgdGhpcy53aWRnZXRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkob3B0KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzaG93IHRoZSB2YWxpZGF0aW9uIGVycm9zIHNob3cgd2hlbiBmb3JtIGlzIHRvdWNoZWQgYW5kIG5vdCBvbiBsb2FkLiBUaGlzIGp1c3QgaGlnaGxpZ2h0cyB0aGUgZmllbGQgdGhhdCBpcyBzdWJzY3JpYmVkIGZvciBjaGFuZ2VzLlxuICAgICAgICBpZiAodGhpcy53aWRnZXRDb250ZXh0Lm5nZm9ybS50b3VjaGVkKSB7XG4gICAgICAgICAgICB0aGlzLndpZGdldENvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gd2F0Y2hlcyBmb3IgY2hhbmdlcyBpbiB0aGUgYm91bmQgZnVuY3Rpb24gZm9yIGRlZmF1bHQgdmFsaWRhdG9ycy5cbiAgICB3YXRjaERlZmF1bHRWYWxpZGF0b3JFeHByKGZuLCBrZXkpIHtcbiAgICAgICAgY29uc3Qgd2F0Y2hOYW1lID0gYCR7dGhpcy5pbnN0YW5jZS53aWRnZXRJZH1fYCArIGtleSArICdfZm9ybUZpZWxkJztcbiAgICAgICAgJHVud2F0Y2god2F0Y2hOYW1lKTtcbiAgICAgICAgLy9bVG9kby1DU1BdOiBOZWVkIGNsYXJpdHkgZ2VuZXJhdGUgdGhpcyBleHByIGZuIGlmIGZvcm0gaXMgcHJlc2VudCBpbiB0aGUgcGFnZVxuICAgICAgICB0aGlzLmluc3RhbmNlLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCR3YXRjaCgnYm91bmRGbihmbiknLCBleHRlbmQodGhpcy5pbnN0YW5jZSwgdGhpcy5pbnN0YW5jZS52aWV3UGFyZW50KSwge2ZufSwgKG52LCBvdikgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS53aWRnZXRba2V5XSA9IG52O1xuICAgICAgICAgICAgdGhpcy5hcHBseURlZmF1bHRWYWxpZGF0b3JzKCk7XG4gICAgICAgIH0sIHdhdGNoTmFtZSkpO1xuICAgIH1cbiAgICBpc051bGxPckVtcHR5T3JGYWxzeSh2YWx1ZSkgIHtcbiAgICAgICAgcmV0dXJuIGlzRW1wdHkodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIGludm9rZXMgYm90aCBjdXN0b20gc3luYyB2YWxpZGF0aW9ucyBhbmQgZGVmYXVsdCB2YWxpZGF0aW9ucy5cbiAgICBhcHBseURlZmF1bHRWYWxpZGF0b3JzKCkge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gdGhpcy5nZXREZWZhdWx0VmFsaWRhdG9ycygpO1xuICAgICAgICBjb25zdCBvcHQgPSB7fTtcbiAgICAgICAgLy8gdXBkYXRpbmcgdGhlIHZhbHVlIG9ubHkgd2hlbiBwcmV2RGF0YSBpcyBub3QgZXF1YWwgdG8gY3VycmVudCB2YWx1ZS4gYW5kIGFsc28gaW5pdGlhbGx5IHdoZW4gIGluc3RhbmNlLnZhbHVlIGlzIGVtcHR5IG9yIG51bGwgZm9yIHNvbWUgd2lkZ2V0cyBsaWtlIGRhdGUsIGNoZWNrYm94c2V0XG4gICAgICAgIC8vIGVtaXRFdmVudCBmbGFnIHdpbGwgcHJldmVudCBmcm9tIGVtaXR0aW5nIHRoZSB2YWx1ZUNoYW5nZXMgd2hlbiB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgcHJldkRhdGF2YWx1ZS5cbiAgICAgICAgaWYgKHRoaXMuZm9ybXdpZGdldCAmJiAodGhpcy5pbnN0YW5jZS52YWx1ZSA9PT0gdGhpcy5mb3Jtd2lkZ2V0LnByZXZEYXRhdmFsdWUgfHwgdGhpcy5pc051bGxPckVtcHR5T3JGYWxzeSh0aGlzLmluc3RhbmNlLnZhbHVlKSkpIHtcbiAgICAgICAgICAgIG9wdFsnZW1pdEV2ZW50J10gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndpZGdldENvbnRyb2wuc2V0VmFsaWRhdG9ycyhjb25jYXQodGhpcy5fc3luY1ZhbGlkYXRvcnMgfHwgW10sIHZhbGlkYXRvcnMpKTtcbiAgICAgICAgdGhpcy53aWRnZXRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkob3B0KTtcbiAgICAgICAgdGhpcy5zZXRDdXN0b21WYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgIH1cblxuICAgIHNldEN1c3RvbVZhbGlkYXRpb25NZXNzYWdlKCkge1xuICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IHRoaXMud2lkZ2V0Q29udHJvbCAmJiB0aGlzLndpZGdldENvbnRyb2wuZXJyb3JzO1xuXG4gICAgICAgIGlmICghZmllbGRFcnJvcnMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGRFcnJvcnMuaGFzT3duUHJvcGVydHkoJ2Vycm9yTWVzc2FnZScpKSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlID0gZ2V0KGZpZWxkRXJyb3JzLCAnZXJyb3JNZXNzYWdlJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBjb25zdCBrZXlzID0ga2V5cyhmaWVsZEVycm9ycyk7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlzWzBdO1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvbk1zZ0tleSA9IGdldChERUZBVUxUX1ZBTElEQVRPUiwga2V5KSB8fCB0aGlzLmZvcm13aWRnZXQudmFsaWRhdGVUeXBlO1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25Nc2dLZXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBnZXQodGhpcy5kZWZhdWx0VmFsaWRhdG9yTWVzc2FnZXMsIHZhbGlkYXRpb25Nc2dLZXkpIHx8IHRoaXMuaW5zdGFuY2UudmFsaWRhdGlvbm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgaWYgKG1zZyAmJiBtc2cgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBwYXNzaW5nIGZvcm1maWVsZCBhbmQgZm9ybSBhcyBhcmd1bWVudHMgdG8gdGhlIGVycm9yTWVzc2FnZSBmdW5jdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS52YWxpZGF0aW9ubWVzc2FnZSA9IG1zZyh0aGlzLndpZGdldENvbnRyb2wsIHRoaXMud2lkZ2V0Q29udGV4dCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS52YWxpZGF0aW9ubWVzc2FnZSA9IG1zZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGZhbGxiYWNrIHdoZW4gdGhlcmUgaXMgbm8gdmFsaWRhdGlvbm1lc3NhZ2UgZm9yIGZpZWxkcyBvdGhlciB0aGFuIGRlZmF1bHQgdmFsaWRhdG9ycy5cbiAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
265
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1maWVsZC12YWxpZGF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvYmFzZS9zcmMvd2lkZ2V0cy9jb21tb24vYmFzZS9iYXNlLWZpZWxkLXZhbGlkYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxQyxPQUFPLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3JFLE9BQU8sRUFDSCxTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixNQUFNLEVBQ04sSUFBSSxFQUNKLE9BQU8sRUFDUCxHQUFHLEVBQ0gsT0FBTyxFQUNQLFVBQVUsRUFDVixJQUFJLElBQUksS0FBSyxFQUNiLE9BQU8sRUFDVixNQUFNLFdBQVcsQ0FBQztBQUVuQixNQUFNLGlCQUFpQixHQUFHO0lBQ3RCLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLEdBQUcsRUFBRSxVQUFVO0lBQ2YsR0FBRyxFQUFFLFVBQVU7SUFDZixRQUFRLEVBQUUsVUFBVTtJQUNwQixTQUFTLEVBQUUsVUFBVTtJQUNyQixPQUFPLEVBQUUsU0FBUztJQUNsQixPQUFPLEVBQUUsU0FBUztJQUNsQixZQUFZLEVBQUUsY0FBYztJQUM1QixXQUFXLEVBQUUsYUFBYTtJQUMxQixhQUFhLEVBQUMsZUFBZTtDQUNoQyxDQUFDO0FBRUYsTUFBTSxPQUFPLG9CQUFvQjtJQW9CN0IsWUFBWSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGNBQWU7UUFDdkYsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7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RyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDaEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO1lBQ3JGLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUM7Z0JBQ3BHLElBQUksR0FBRyxJQUFJLEdBQUcsWUFBWSxRQUFRLEVBQUUsQ0FBQztvQkFDakMsd0VBQXdFO29CQUN4RSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDbEYsQ0FBQztxQkFBTSxDQUFDO29CQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDO2dCQUMxQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLHdGQUF3RjtnQkFDeEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7WUFDekMsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1ZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHskdW53YXRjaCwgJHdhdGNoLCBGb3JtV2lkZ2V0VHlwZSwgVkFMSURBVE9SfSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQge1xuICAgIGNsb25lRGVlcCxcbiAgICBjb25jYXQsXG4gICAgZXh0ZW5kLFxuICAgIGZpbHRlcixcbiAgICBmaW5kLFxuICAgIGZvckVhY2gsXG4gICAgZ2V0LFxuICAgIGlzRW1wdHksXG4gICAgaXNGdW5jdGlvbixcbiAgICBrZXlzIGFzIF9rZXlzLFxuICAgIHRvVXBwZXJcbn0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5jb25zdCBERUZBVUxUX1ZBTElEQVRPUiA9IHtcbiAgICBwYXR0ZXJuOiAncmVnZXhwJyxcbiAgICBtYXg6ICdtYXh2YWx1ZScsXG4gICAgbWluOiAnbWludmFsdWUnLFxuICAgIHJlcXVpcmVkOiAncmVxdWlyZWQnLFxuICAgIG1heGxlbmd0aDogJ21heGNoYXJzJyxcbiAgICBtaW5kYXRlOiAnbWluZGF0ZScsXG4gICAgbWF4ZGF0ZTogJ21heGRhdGUnLFxuICAgIGV4Y2x1ZGVkYXRlczogJ2V4Y2x1ZGVkYXRlcycsXG4gICAgZXhjbHVkZWRheXM6ICdleGNsdWRlZGF5cycsXG4gICAgaW52YWxpZE51bWJlcjonaW52YWxpZE51bWJlcidcbn07XG5cbmV4cG9ydCBjbGFzcyBCYXNlRmllbGRWYWxpZGF0aW9ucyB7XG4gICAgcHJpdmF0ZSBoYXNWYWxpZGF0b3JzO1xuXG4gICAgLy8gSW5zdGFuY2Ugb2YgdGhlIGRpcmVjdGl2ZSB0YWJsZS1jb2x1bW4sIGZvcm0tZmllbGQuLlxuICAgIHByaXZhdGUgaW5zdGFuY2U7XG4gICAgLy8gSW5saW5lIGZvcm0gd2lkZ2V0XG4gICAgcHVibGljIGZvcm13aWRnZXQ7XG4gICAgLy8gV2lkZ2V0IHR5cGVcbiAgICBwcml2YXRlIHdpZGdldHR5cGU7XG4gICAgLy8gRnJvbSBjb250cm9sXG4gICAgcHJpdmF0ZSB3aWRnZXRDb250cm9sO1xuICAgIC8vIFBhcmVudCB3aWRnZXQgY29udGV4dCBUYWJsZSwgRm9ybS4uXG4gICAgcHJpdmF0ZSB3aWRnZXRDb250ZXh0O1xuICAgIC8vIE9wdGlvbmFsIHRhYmxlIGNvbHVtbiB0eXBlIHF1aWNrZWRpdCBuZXdyb3cvIGlubGluZSBlZGl0XG4gICAgcHJpdmF0ZSB0YWJsZUZpZWxkVHlwZTtcblxuICAgIHByaXZhdGUgZGVmYXVsdFZhbGlkYXRvck1lc3NhZ2VzOiBhbnk7XG4gICAgcHJpdmF0ZSBfc3luY1ZhbGlkYXRvcnM6IGFueTtcbiAgICBwcml2YXRlIF9hc3luY1ZhbGlkYXRvckZuOiBhbnk7XG5cbiAgICBjb25zdHJ1Y3RvcihpbnN0YW5jZSwgZm9ybXdpZGdldCwgd2lkZ2V0dHlwZSwgd2lkZ2V0Q29udHJvbCwgd2lkZ2V0Q29udGV4dCwgdGFibGVGaWVsZFR5cGU/KXtcbiAgICAgICAgdGhpcy5pbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgICB0aGlzLmZvcm13aWRnZXQgPSBmb3Jtd2lkZ2V0O1xuICAgICAgICB0aGlzLndpZGdldHR5cGUgPSB3aWRnZXR0eXBlO1xuICAgICAgICB0aGlzLndpZGdldENvbnRyb2wgPSB3aWRnZXRDb250cm9sO1xuICAgICAgICB0aGlzLndpZGdldENvbnRleHQgPSB3aWRnZXRDb250ZXh0O1xuXG4gICAgICAgIHRoaXMuZGVmYXVsdFZhbGlkYXRvck1lc3NhZ2VzID0gW107XG4gICAgICAgIGlmICh0YWJsZUZpZWxkVHlwZSkge1xuICAgICAgICAgICAgdGhpcy50YWJsZUZpZWxkVHlwZSA9IHRhYmxlRmllbGRUeXBlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBvZiBzdXBwb3J0ZWQgZGVmYXVsdCB2YWxpZGF0b3JzXG4gICAgcHJpdmF0ZSBnZXREZWZhdWx0VmFsaWRhdG9ycygpIHtcbiAgICAgICAgY29uc3QgX3ZhbGlkYXRvciA9IFtdO1xuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZS5yZXF1aXJlZCAmJiB0aGlzLmluc3RhbmNlLnNob3cgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAvLyBGb3IgY2hlY2tib3gvdG9nZ2xlIHdpZGdldCwgcmVxdWlyZWQgdmFsaWRhdGlvbiBzaG91bGQgY29uc2lkZXIgdHJ1ZSB2YWx1ZSBvbmx5XG4gICAgICAgICAgICBpZiAodGhpcy53aWRnZXR0eXBlID09PSBGb3JtV2lkZ2V0VHlwZS5DSEVDS0JPWCB8fCB0aGlzLndpZGdldHR5cGUgPT09IEZvcm1XaWRnZXRUeXBlLlRPR0dMRSkge1xuICAgICAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkVHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZS5tYXhjaGFycykge1xuICAgICAgICAgICAgX3ZhbGlkYXRvci5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMuaW5zdGFuY2UubWF4Y2hhcnMpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZS5taW52YWx1ZSkge1xuICAgICAgICAgICAgX3ZhbGlkYXRvci5wdXNoKFZhbGlkYXRvcnMubWluKHRoaXMuaW5zdGFuY2UubWludmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZS5tYXh2YWx1ZSAmJiB0aGlzLndpZGdldHR5cGUgIT09IEZvcm1XaWRnZXRUeXBlLlJBVElORykge1xuICAgICAgICAgICAgX3ZhbGlkYXRvci5wdXNoKFZhbGlkYXRvcnMubWF4KHRoaXMuaW5zdGFuY2UubWF4dmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZS5yZWdleHApIHtcbiAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4odGhpcy5pbnN0YW5jZS5yZWdleHApKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mb3Jtd2lkZ2V0ICYmIGlzRnVuY3Rpb24odGhpcy5mb3Jtd2lkZ2V0LnZhbGlkYXRlKSkge1xuICAgICAgICAgICAgX3ZhbGlkYXRvci5wdXNoKHRoaXMuZm9ybXdpZGdldC52YWxpZGF0ZS5iaW5kKHRoaXMuZm9ybXdpZGdldCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdmFsaWRhdG9yO1xuICAgIH1cblxuICAgIC8vIE9uIGNoYW5nZSBvZiBhbnkgdmFsaWRhdGlvbiBwcm9wZXJ0eSwgc2V0IHRoZSBhbmd1bGFyIGZvcm0gdmFsaWRhdG9yc1xuICAgIHNldFVwVmFsaWRhdG9ycyhjdXN0b21WYWxpZGF0b3I/KSB7XG4gICAgICAgIGlmICh0aGlzLmhhc1ZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluc3RhbmNlLl92YWxpZGF0b3JzID0gdGhpcy5nZXREZWZhdWx0VmFsaWRhdG9ycygpO1xuXG4gICAgICAgIGlmIChjdXN0b21WYWxpZGF0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UuX3ZhbGlkYXRvcnMucHVzaChjdXN0b21WYWxpZGF0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMud2lkZ2V0Q29udGV4dC5uZ2Zvcm0pIHtcbiAgICAgICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMuaW5zdGFuY2UuX3ZhbGlkYXRvcnMpO1xuICAgICAgICAgICAgY29uc3Qgb3B0ID0ge307XG4gICAgICAgICAgICAvLyB1cGRhdGluZyB0aGUgdmFsdWUgb25seSB3aGVuIHByZXZEYXRhIGlzIG5vdCBlcXVhbCB0byBjdXJyZW50IHZhbHVlLiBhbmQgYWxzbyBpbml0aWFsbHkgd2hlbiAgaW5zdGFuY2UudmFsdWUgaXMgZW1wdHkgb3IgbnVsbCBmb3Igc29tZSB3aWRnZXRzIGxpa2UgZGF0ZSwgY2hlY2tib3hzZXRcbiAgICAgICAgICAgIC8vIGVtaXRFdmVudCBmbGFnIHdpbGwgcHJldmVudCBmcm9tIGVtaXR0aW5nIHRoZSB2YWx1ZUNoYW5nZXMgd2hlbiB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgcHJldkRhdGF2YWx1ZS5cbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm13aWRnZXQgJiYgKHRoaXMuaW5zdGFuY2UudmFsdWUgPT09IHRoaXMuZm9ybXdpZGdldC5wcmV2RGF0YXZhbHVlIHx8IHRoaXMuaXNOdWxsT3JFbXB0eU9yRmFsc3kodGhpcy5pbnN0YW5jZS52YWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgb3B0WydlbWl0RXZlbnQnXSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy53aWRnZXRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkob3B0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldFByb21pc2VMaXN0KHZhbGlkYXRvcnMpIHtcbiAgICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICAgIGZvckVhY2godmFsaWRhdG9ycywgKGZuLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgbGV0IHByb21pc2UgPSBmbjtcbiAgICAgICAgICAgIGlmIChmbiBpbnN0YW5jZW9mIEZ1bmN0aW9uICYmIGZuLmJpbmQpIHtcbiAgICAgICAgICAgICAgICBwcm9taXNlID0gZm4odGhpcy53aWRnZXRDb250cm9sLCB0aGlzLndpZGdldENvbnRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgYXJyLnB1c2gocHJvbWlzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH1cblxuICAgIC8vIHRoaXMgbWV0aG9kIHNldHMgdGhlIGFzeW5jVmFsaWRhdGlvbiBvbiB0aGUgZm9ybSBmaWVsZC4gQXNzaWducyB2YWxpZGF0aW9ubWVzc2FnZXMgZnJvbSB0aGUgcmV0dXJuZWQgcmVzcG9uc2VcbiAgICBzZXRBc3luY1ZhbGlkYXRvcnModmFsaWRhdG9ycykge1xuICAgICAgICB0aGlzLl9hc3luY1ZhbGlkYXRvckZuID0gKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5nZXRQcm9taXNlTGlzdCh2YWxpZGF0b3JzKSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UudmFsaWRhdGlvbm1lc3NhZ2UgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgZXJyIG9iaiBoYXMgdmFsaWRhdGlvbk1lc3NhZ2Uga2V5LCB0aGVuIHNldCB2YWxpZGF0aW9uTWVzc2FnZSB1c2luZyB0aGlzIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIC8vIGVsc2UgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3Qga2V5IGluIHRoZSBlcnIgb2JqZWN0IGFzIHZhbGlkYXRpb24gbWVzc2FnZS5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5oYXNPd25Qcm9wZXJ0eSgnZXJyb3JNZXNzYWdlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UudmFsaWRhdGlvbm1lc3NhZ2UgPSBnZXQoZXJyLCAnZXJyb3JNZXNzYWdlJyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gX2tleXMoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UudmFsaWRhdGlvbm1lc3NhZ2UgPSAoZXJyW2tleXNbMF1dKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7XG4gICAgICAgICAgICAgICAgfSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZvcm0gY29udHJvbCBzdGF0dXMgaXMgbm90IGNoYW5nZWQgZnJvbSBwZW5kaW5nLiBUaGlzIGlzIGFuIGFuZ3VsYXIgaXNzdWUgcmVmZXIgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTMyMDBcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hlY2tGb3JTdGF0dXNDaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy53aWRnZXRDb250cm9sLnN0YXR1cyA9PT0gJ1BFTkRJTkcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRm9yU3RhdHVzQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS5vblN0YXR1c0NoYW5nZSh0aGlzLndpZGdldENvbnRyb2wuc3RhdHVzLCB0aGlzLnRhYmxlRmllbGRUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjaGVja0ZvclN0YXR1c0NoYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnMoW3RoaXMuX2FzeW5jVmFsaWRhdG9yRm4oKV0pO1xuICAgICAgICBpZih0aGlzLndpZGdldENvbnRleHQubmdmb3JtLnRvdWNoZWQpe1xuICAgICAgICAgICAgY29uc3Qgb3B0ID0ge307XG4gICAgICAgICAgICAvLyB1cGRhdGluZyB0aGUgdmFsdWUgb25seSB3aGVuIHByZXZEYXRhIGlzIG5vdCBlcXVhbCB0byBjdXJyZW50IHZhbHVlLiBhbmQgYWxzbyBpbml0aWFsbHkgd2hlbiAgaW5zdGFuY2UudmFsdWUgaXMgZW1wdHkgb3IgbnVsbCBmb3Igc29tZSB3aWRnZXRzIGxpa2UgZGF0ZSwgY2hlY2tib3hzZXRcbiAgICAgICAgICAgIC8vIGVtaXRFdmVudCBmbGFnIHdpbGwgcHJldmVudCBmcm9tIGVtaXR0aW5nIHRoZSB2YWx1ZUNoYW5nZXMgd2hlbiB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgcHJldkRhdGF2YWx1ZS5cbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm13aWRnZXQgJiYgKHRoaXMuaW5zdGFuY2UudmFsdWUgPT09IHRoaXMuZm9ybXdpZGdldC5wcmV2RGF0YXZhbHVlIHx8IHRoaXMuaXNOdWxsT3JFbXB0eU9yRmFsc3kodGhpcy5pbnN0YW5jZS52YWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgb3B0WydlbWl0RXZlbnQnXSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy53aWRnZXRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkob3B0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzRGVmYXVsdFZhbGlkYXRvcih0eXBlKSB7XG4gICAgICAgIHJldHVybiBnZXQoVkFMSURBVE9SLCB0b1VwcGVyKHR5cGUpKTtcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IHZhbGlkYXRvciBpcyBib3VuZCB0byBhIGZ1bmN0aW9uIHRoZW4gd2F0Y2ggZm9yIHZhbHVlIGNoYW5nZXNcbiAgICAvLyBvdGhlcndpc2Ugc2V0IHRoZSB2YWx1ZSBvZiBkZWZhdWx0IHZhbGlkYXRvciBkaXJlY3RseVxuICAgIHNldERlZmF1bHRWYWxpZGF0b3Ioa2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgLy8gcGFzc2luZyBmb3JtZmllbGQgYW5kIGZvcm0gYXMgYXJndW1lbnRzIHRvIHRoZSBkZWZhdWx0IHZhbGlkYXRvciBmdW5jdGlvblxuICAgICAgICAgICAgdGhpcy53YXRjaERlZmF1bHRWYWxpZGF0b3JFeHByKHZhbHVlLmJpbmQodW5kZWZpbmVkLCB0aGlzLndpZGdldENvbnRyb2wsIHRoaXMud2lkZ2V0Q29udGV4dCksIGtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLndpZGdldFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNldHMgdGhlIGRlZmF1bHQgdmFsaWRhdGlvbiBvbiB0aGUgZm9ybSBmaWVsZFxuICAgIHNldFZhbGlkYXRvcnModmFsaWRhdG9ycykge1xuICAgICAgICBsZXQgX2Nsb25lVmFsaWRhdG9ycyA9IGNsb25lRGVlcCh2YWxpZGF0b3JzKTtcbiAgICAgICAgdGhpcy5oYXNWYWxpZGF0b3JzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fc3luY1ZhbGlkYXRvcnMgPSBbXTtcbiAgICAgICAgZm9yRWFjaChfY2xvbmVWYWxpZGF0b3JzLCAob2JqLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgLy8gY3VzdG9tIHZhbGlkYXRpb24gaXMgYm91bmQgdG8gZnVuY3Rpb24uXG4gICAgICAgICAgICBpZiAob2JqICYmIG9iaiBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgLy8gcGFzc2luZyBmb3JtZmllbGQgYW5kIGZvcm0gYXMgYXJndW1lbnRzIHRvIHRoZSBvYmogKGkuZS4gdmFsaWRhdG9yIGZ1bmN0aW9uKVxuICAgICAgICAgICAgICAgIF9jbG9uZVZhbGlkYXRvcnNbaW5kZXhdID0gb2JqLmJpbmQodW5kZWZpbmVkLCB0aGlzLndpZGdldENvbnRyb2wsIHRoaXMud2lkZ2V0Q29udGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3luY1ZhbGlkYXRvcnMucHVzaChfY2xvbmVWYWxpZGF0b3JzW2luZGV4XSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrcyBmb3IgZGVmYXVsdCB2YWxpZGF0b3IgbGlrZSByZXF1aXJlZCwgbWF4Y2hhcnMgZXRjLlxuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGdldChvYmosICd0eXBlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsaWRhdG9yTWVzc2FnZXNba2V5XSA9IGdldChvYmosICdlcnJvck1lc3NhZ2UnKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0RlZmF1bHRWYWxpZGF0b3Ioa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldChvYmosICd2YWxpZGF0b3InKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0VmFsaWRhdG9yKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBfY2xvbmVWYWxpZGF0b3JzW2luZGV4XSA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gX3N5bmNWYWxpZGF0b3JzIGNvbnRhaW5zIGFsbCB0aGUgY3VzdG9tIHZhbGlkYXRpb25zIG9uIHRoZSBmb3JtIGZpZWxkLiB3aWxsIG5vdCBpbmNsdWRlIGRlZmF1bHQgdmFsaWRhdG9ycy5cbiAgICAgICAgdGhpcy5fc3luY1ZhbGlkYXRvcnMgPSBmaWx0ZXIoX2Nsb25lVmFsaWRhdG9ycywgdmFsID0+IHtcbiAgICAgICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hcHBseURlZmF1bHRWYWxpZGF0b3JzKCk7XG4gICAgfVxuXG4gICAgb2JzZXJ2ZU9uKGZpZWxkcywgY29udGV4dCkge1xuICAgICAgICBmb3JFYWNoKGZpZWxkcywgZmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybWZpZWxkID0gZmluZCh0aGlzLndpZGdldENvbnRleHRbY29udGV4dF0sIHsna2V5JzogZmllbGR9KTtcbiAgICAgICAgICAgIGlmIChmb3JtZmllbGQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWZvcm1maWVsZC5ub3RpZnlGb3JGaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWZpZWxkLm5vdGlmeUZvckZpZWxkcyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3JtZmllbGQubm90aWZ5Rm9yRmllbGRzLnB1c2godGhpcy5pbnN0YW5jZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhbGlkYXRlKCkge1xuICAgICAgICB0aGlzLmFwcGx5RGVmYXVsdFZhbGlkYXRvcnMoKTtcbiAgICAgICAgaWYgKHRoaXMuX2FzeW5jVmFsaWRhdG9yRm4pIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdCA9IHt9O1xuICAgICAgICAgICAgLy8gdXBkYXRpbmcgdGhlIHZhbHVlIG9ubHkgd2hlbiBwcmV2RGF0YSBpcyBub3QgZXF1YWwgdG8gY3VycmVudCB2YWx1ZS4gYW5kIGFsc28gaW5pdGlhbGx5IHdoZW4gIGluc3RhbmNlLnZhbHVlIGlzIGVtcHR5IG9yIG51bGwgZm9yIHNvbWUgd2lkZ2V0cyBsaWtlIGRhdGUsIGNoZWNrYm94c2V0XG4gICAgICAgICAgICAvLyBlbWl0RXZlbnQgZmxhZyB3aWxsIHByZXZlbnQgZnJvbSBlbWl0dGluZyB0aGUgdmFsdWVDaGFuZ2VzIHdoZW4gdmFsdWUgaXMgZXF1YWwgdG8gdGhlIHByZXZEYXRhdmFsdWUuXG4gICAgICAgICAgICBpZiAodGhpcy5mb3Jtd2lkZ2V0ICYmICh0aGlzLmluc3RhbmNlLnZhbHVlID09PSB0aGlzLmZvcm13aWRnZXQucHJldkRhdGF2YWx1ZSB8fCB0aGlzLmlzTnVsbE9yRW1wdHlPckZhbHN5KHRoaXMuaW5zdGFuY2UudmFsdWUpKSkge1xuICAgICAgICAgICAgICAgIG9wdFsnZW1pdEV2ZW50J10gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnMoW3RoaXMuX2FzeW5jVmFsaWRhdG9yRm4oKV0pO1xuICAgICAgICAgICAgdGhpcy53aWRnZXRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkob3B0KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzaG93IHRoZSB2YWxpZGF0aW9uIGVycm9zIHNob3cgd2hlbiBmb3JtIGlzIHRvdWNoZWQgYW5kIG5vdCBvbiBsb2FkLiBUaGlzIGp1c3QgaGlnaGxpZ2h0cyB0aGUgZmllbGQgdGhhdCBpcyBzdWJzY3JpYmVkIGZvciBjaGFuZ2VzLlxuICAgICAgICBpZiAodGhpcy53aWRnZXRDb250ZXh0Lm5nZm9ybS50b3VjaGVkKSB7XG4gICAgICAgICAgICB0aGlzLndpZGdldENvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gd2F0Y2hlcyBmb3IgY2hhbmdlcyBpbiB0aGUgYm91bmQgZnVuY3Rpb24gZm9yIGRlZmF1bHQgdmFsaWRhdG9ycy5cbiAgICB3YXRjaERlZmF1bHRWYWxpZGF0b3JFeHByKGZuLCBrZXkpIHtcbiAgICAgICAgY29uc3Qgd2F0Y2hOYW1lID0gYCR7dGhpcy5pbnN0YW5jZS53aWRnZXRJZH1fYCArIGtleSArICdfZm9ybUZpZWxkJztcbiAgICAgICAgJHVud2F0Y2god2F0Y2hOYW1lKTtcbiAgICAgICAgLy9bVG9kby1DU1BdOiBOZWVkIGNsYXJpdHkgZ2VuZXJhdGUgdGhpcyBleHByIGZuIGlmIGZvcm0gaXMgcHJlc2VudCBpbiB0aGUgcGFnZVxuICAgICAgICB0aGlzLmluc3RhbmNlLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKCR3YXRjaCgnYm91bmRGbihmbiknLCBleHRlbmQodGhpcy5pbnN0YW5jZSwgdGhpcy5pbnN0YW5jZS52aWV3UGFyZW50KSwge2ZufSwgKG52LCBvdikgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS53aWRnZXRba2V5XSA9IG52O1xuICAgICAgICAgICAgdGhpcy5hcHBseURlZmF1bHRWYWxpZGF0b3JzKCk7XG4gICAgICAgIH0sIHdhdGNoTmFtZSkpO1xuICAgIH1cbiAgICBpc051bGxPckVtcHR5T3JGYWxzeSh2YWx1ZSkgIHtcbiAgICAgICAgcmV0dXJuIGlzRW1wdHkodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIGludm9rZXMgYm90aCBjdXN0b20gc3luYyB2YWxpZGF0aW9ucyBhbmQgZGVmYXVsdCB2YWxpZGF0aW9ucy5cbiAgICBhcHBseURlZmF1bHRWYWxpZGF0b3JzKCkge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gdGhpcy5nZXREZWZhdWx0VmFsaWRhdG9ycygpO1xuICAgICAgICBjb25zdCBvcHQgPSB7fTtcbiAgICAgICAgLy8gdXBkYXRpbmcgdGhlIHZhbHVlIG9ubHkgd2hlbiBwcmV2RGF0YSBpcyBub3QgZXF1YWwgdG8gY3VycmVudCB2YWx1ZS4gYW5kIGFsc28gaW5pdGlhbGx5IHdoZW4gIGluc3RhbmNlLnZhbHVlIGlzIGVtcHR5IG9yIG51bGwgZm9yIHNvbWUgd2lkZ2V0cyBsaWtlIGRhdGUsIGNoZWNrYm94c2V0XG4gICAgICAgIC8vIGVtaXRFdmVudCBmbGFnIHdpbGwgcHJldmVudCBmcm9tIGVtaXR0aW5nIHRoZSB2YWx1ZUNoYW5nZXMgd2hlbiB2YWx1ZSBpcyBlcXVhbCB0byB0aGUgcHJldkRhdGF2YWx1ZS5cbiAgICAgICAgaWYgKHRoaXMuZm9ybXdpZGdldCAmJiAodGhpcy5pbnN0YW5jZS52YWx1ZSA9PT0gdGhpcy5mb3Jtd2lkZ2V0LnByZXZEYXRhdmFsdWUgfHwgdGhpcy5pc051bGxPckVtcHR5T3JGYWxzeSh0aGlzLmluc3RhbmNlLnZhbHVlKSkpIHtcbiAgICAgICAgICAgIG9wdFsnZW1pdEV2ZW50J10gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndpZGdldENvbnRyb2wuc2V0VmFsaWRhdG9ycyhjb25jYXQodGhpcy5fc3luY1ZhbGlkYXRvcnMgfHwgW10sIHZhbGlkYXRvcnMpKTtcbiAgICAgICAgdGhpcy53aWRnZXRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkob3B0KTtcbiAgICAgICAgdGhpcy5zZXRDdXN0b21WYWxpZGF0aW9uTWVzc2FnZSgpO1xuICAgIH1cblxuICAgIHNldEN1c3RvbVZhbGlkYXRpb25NZXNzYWdlKCkge1xuICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IHRoaXMud2lkZ2V0Q29udHJvbCAmJiB0aGlzLndpZGdldENvbnRyb2wuZXJyb3JzO1xuXG4gICAgICAgIGlmICghZmllbGRFcnJvcnMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGRFcnJvcnMuaGFzT3duUHJvcGVydHkoJ2Vycm9yTWVzc2FnZScpKSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlID0gZ2V0KGZpZWxkRXJyb3JzLCAnZXJyb3JNZXNzYWdlJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gX2tleXMoZmllbGRFcnJvcnMpO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5c1swXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRpb25Nc2dLZXkgPSBnZXQoREVGQVVMVF9WQUxJREFUT1IsIGtleSkgfHwgdGhpcy5mb3Jtd2lkZ2V0LnZhbGlkYXRlVHlwZTtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uTXNnS2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gZ2V0KHRoaXMuZGVmYXVsdFZhbGlkYXRvck1lc3NhZ2VzLCB2YWxpZGF0aW9uTXNnS2V5KSB8fCB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlO1xuICAgICAgICAgICAgICAgIGlmIChtc2cgJiYgbXNnIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcGFzc2luZyBmb3JtZmllbGQgYW5kIGZvcm0gYXMgYXJndW1lbnRzIHRvIHRoZSBlcnJvck1lc3NhZ2UgZnVuY3Rpb24uXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UudmFsaWRhdGlvbm1lc3NhZ2UgPSBtc2codGhpcy53aWRnZXRDb250cm9sLCB0aGlzLndpZGdldENvbnRleHQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UudmFsaWRhdGlvbm1lc3NhZ2UgPSBtc2c7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBmYWxsYmFjayB3aGVuIHRoZXJlIGlzIG5vIHZhbGlkYXRpb25tZXNzYWdlIGZvciBmaWVsZHMgb3RoZXIgdGhhbiBkZWZhdWx0IHZhbGlkYXRvcnMuXG4gICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS52YWxpZGF0aW9ubWVzc2FnZSA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { ElementRef,
|
|
1
|
+
import { ElementRef, Inject, inject, Injectable, Injector, Optional, ViewContainerRef } from '@angular/core';
|
|
2
2
|
import { EventManager } from '@angular/platform-browser';
|
|
3
3
|
import { ReplaySubject, Subject } from 'rxjs';
|
|
4
|
-
import { $invokeWatchers, $parseEvent, $unwatch, $watch, addClass, App, isDefined, isMobileApp, removeAttr, removeClass, setAttr, setCSS, setCSSFromObj, switchClass
|
|
4
|
+
import { $invokeWatchers, $parseEvent, $unwatch, $watch, addClass, App, findParent, isDefined, isMobileApp, removeAttr, removeClass, setAttr, setCSS, setCSSFromObj, switchClass } from '@wm/core';
|
|
5
5
|
import { getWidgetPropsByType } from '../../framework/widget-props';
|
|
6
6
|
import { isStyle } from '../../framework/styler';
|
|
7
7
|
import { register, renameWidget } from '../../framework/widget-registry';
|
|
@@ -10,7 +10,7 @@ import { widgetIdGenerator } from '../../framework/widget-id-generator';
|
|
|
10
10
|
import { DISPLAY_TYPE, EVENTS_MAP } from '../../framework/constants';
|
|
11
11
|
import { WidgetProxyProvider } from '../../framework/widget-proxy-provider';
|
|
12
12
|
import { getWatchIdentifier } from '../../../utils/widget-utils';
|
|
13
|
-
import { camelCase, forEach, isArray, isObject, join, map
|
|
13
|
+
import { camelCase, extend, forEach, isArray, isObject, join, map } from "lodash-es";
|
|
14
14
|
import * as i0 from "@angular/core";
|
|
15
15
|
// Gets list of classes to add and remove and applies on the $el
|
|
16
16
|
const updateClasses = (toAdd, toRemove, el) => {
|
|
@@ -125,6 +125,7 @@ export class BaseComponent {
|
|
|
125
125
|
addClass(this.nativeElement, config.hostClass);
|
|
126
126
|
}
|
|
127
127
|
this.widgetId = this.generateWidgetId();
|
|
128
|
+
this.trackId = this.generateWidgetId();
|
|
128
129
|
setAttr(this.nativeElement, 'widget-id', this.widgetId, true);
|
|
129
130
|
// register default property change handler and style change handler
|
|
130
131
|
this.registerStyleChangeListener(this.onStyleChange, this);
|
|
@@ -557,21 +558,27 @@ export class BaseComponent {
|
|
|
557
558
|
unmute() {
|
|
558
559
|
this.isMuted = false;
|
|
559
560
|
}
|
|
561
|
+
/**
|
|
562
|
+
* After the Angular 17 upgrade, Angular is no longer sending ngTemplateContext to components in ng-template.
|
|
563
|
+
* Wavemaker widgets inside ng-template require context to evaluate bind expressions.
|
|
564
|
+
* So we're creating an injectionToken that returns the context as a value.
|
|
565
|
+
* We are passing the injectionToken to the ngTemplateOutletInjector.
|
|
566
|
+
* This injects the context into each widget in the ng-template.
|
|
567
|
+
* In the widget component constructor we are getting the injectionToken using dependency injection.
|
|
568
|
+
* If injectionToken is present, we extend the component context with the value of injectionToken.
|
|
569
|
+
* @param contextKey
|
|
570
|
+
* @param context
|
|
571
|
+
* @returns injector
|
|
572
|
+
*/
|
|
560
573
|
createCustomInjector(contextKey, context) {
|
|
561
574
|
if (this.customInjectorMap[contextKey]) {
|
|
562
|
-
|
|
563
|
-
return this.customInjectorMap[contextKey].injector;
|
|
564
|
-
}
|
|
565
|
-
delete this.customInjectorMap[contextKey];
|
|
575
|
+
return this.customInjectorMap[contextKey].injector;
|
|
566
576
|
}
|
|
567
|
-
const
|
|
568
|
-
providers: [{ provide: 'EXPLICIT_CONTEXT',
|
|
577
|
+
const injector = Injector.create({
|
|
578
|
+
providers: [{ provide: 'EXPLICIT_CONTEXT', useFactory: () => context }]
|
|
569
579
|
});
|
|
570
|
-
this.customInjectorMap[contextKey] = {
|
|
571
|
-
|
|
572
|
-
injector: inj
|
|
573
|
-
};
|
|
574
|
-
return inj;
|
|
580
|
+
this.customInjectorMap[contextKey] = { context, injector };
|
|
581
|
+
return injector;
|
|
575
582
|
}
|
|
576
583
|
/**
|
|
577
584
|
* After the host page is attached from cache, this function is called.
|
|
@@ -630,4 +637,4 @@ export class BaseComponent {
|
|
|
630
637
|
}, {
|
|
631
638
|
type: Optional
|
|
632
639
|
}] }, { type: Promise }], null); })();
|
|
633
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL2Jhc2Uvc3JjL3dpZGdldHMvY29tbW9uL2Jhc2UvYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFVBQVUsRUFDVixVQUFVLEVBQ1YsUUFBUSxFQUNSLE1BQU0sRUFHTixnQkFBZ0IsRUFDaEIsTUFBTSxFQUNOLFFBQVEsRUFDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFNUMsT0FBTyxFQUNILGVBQWUsRUFDZixXQUFXLEVBQ1gsUUFBUSxFQUNSLE1BQU0sRUFDTixRQUFRLEVBQ1IsR0FBRyxFQUNILFNBQVMsRUFDVCxXQUFXLEVBQ1gsVUFBVSxFQUNWLFdBQVcsRUFDWCxPQUFPLEVBQ1AsTUFBTSxFQUNOLGFBQWEsRUFDYixXQUFXLEVBQ1gsVUFBVSxFQUNiLE1BQU0sVUFBVSxDQUFDO0FBRWxCLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsUUFBUSxFQUFFLFlBQVksRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBaUIsT0FBTyxFQUFpQixZQUFZLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUMsWUFBWSxFQUFFLFVBQVUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ25FLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FB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clZpZXdJbml0LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0YWJsZSxcbiAgICBJbmplY3RvcixcbiAgICBJbmplY3QsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIGluamVjdCxcbiAgICBPcHRpb25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RXZlbnRNYW5hZ2VyfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuaW1wb3J0IHtSZXBsYXlTdWJqZWN0LCBTdWJqZWN0fSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgICAkaW52b2tlV2F0Y2hlcnMsXG4gICAgJHBhcnNlRXZlbnQsXG4gICAgJHVud2F0Y2gsXG4gICAgJHdhdGNoLFxuICAgIGFkZENsYXNzLFxuICAgIEFwcCxcbiAgICBpc0RlZmluZWQsXG4gICAgaXNNb2JpbGVBcHAsXG4gICAgcmVtb3ZlQXR0cixcbiAgICByZW1vdmVDbGFzcyxcbiAgICBzZXRBdHRyLFxuICAgIHNldENTUyxcbiAgICBzZXRDU1NGcm9tT2JqLFxuICAgIHN3aXRjaENsYXNzLFxuICAgIGZpbmRQYXJlbnRcbn0gZnJvbSAnQHdtL2NvcmUnO1xuXG5pbXBvcnQge2dldFdpZGdldFByb3BzQnlUeXBlfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvd2lkZ2V0LXByb3BzJztcbmltcG9ydCB7aXNTdHlsZX0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL3N0eWxlcic7XG5pbXBvcnQge3JlZ2lzdGVyLCByZW5hbWVXaWRnZXR9IGZyb20gJy4uLy4uL2ZyYW1ld29yay93aWRnZXQtcmVnaXN0cnknO1xuaW1wb3J0IHtDaGFuZ2VMaXN0ZW5lciwgQ29udGV4dCwgSVdpZGdldENvbmZpZywgV2lkZ2V0Q29uZmlnfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvdHlwZXMnO1xuaW1wb3J0IHt3aWRnZXRJZEdlbmVyYXRvcn0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL3dpZGdldC1pZC1nZW5lcmF0b3InO1xuaW1wb3J0IHtESVNQTEFZX1RZUEUsIEVWRU5UU19NQVB9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9jb25zdGFudHMnO1xuaW1wb3J0IHtXaWRnZXRQcm94eVByb3ZpZGVyfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvd2lkZ2V0LXByb3h5LXByb3ZpZGVyJztcbmltcG9ydCB7Z2V0V2F0Y2hJZGVudGlmaWVyfSBmcm9tICcuLi8uLi8uLi91dGlscy93aWRnZXQtdXRpbHMnO1xuaW1wb3J0IHtjYW1lbENhc2UsIGZvckVhY2gsIGlzQXJyYXksIGlzT2JqZWN0LCBqb2luLCBtYXAsIGV4dGVuZH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5kZWNsYXJlIGNvbnN0ICQ7XG5cbi8vIEdldHMgbGlzdCBvZiBjbGFzc2VzIHRvIGFkZCBhbmQgcmVtb3ZlIGFuZCBhcHBsaWVzIG9uIHRoZSAkZWxcbmNvbnN0IHVwZGF0ZUNsYXNzZXMgPSAodG9BZGQsIHRvUmVtb3ZlLCBlbCkgPT4ge1xuICAgIGlmICh0b1JlbW92ZSAmJiB0b1JlbW92ZS5sZW5ndGgpIHtcbiAgICAgICAgcmVtb3ZlQ2xhc3MoZWwsIGpvaW4odG9SZW1vdmUsICcgJykpO1xuICAgIH1cbiAgICBpZiAodG9BZGQgJiYgdG9BZGQubGVuZ3RoKSB7XG4gICAgICAgIGFkZENsYXNzKGVsLCBqb2luKHRvQWRkLCAnICcpKTtcbiAgICB9XG59O1xuXG4vLyBUbyBhZGQgYW5kIHJlbW92ZSBzdHlsZXMgb24gdGhlICRlbFxuY29uc3QgdXBkYXRlU3R5bGVzID0gKG52LCBvdiwgZWwpID0+IHtcbiAgICBpZiAob3YgJiYgaXNPYmplY3Qob3YpKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvdiB8fCB7fSk7XG4gICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgICAgIHNldENTUyhlbCwga2V5LCAnJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAobnYgJiYgaXNPYmplY3QobnYpKSB7XG4gICAgICAgIHNldENTU0Zyb21PYmooZWwsIG52KTtcbiAgICB9XG5cbn07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQge1xuXG4gICAgLyoqXG4gICAgICogdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSB3aWRnZXRcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgd2lkZ2V0SWQ6IGFueTtcblxuICAgIHB1YmxpYyBpc0Rlc3Ryb3llZDogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBpc0F0dGFjaGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBqUXVlcnkgbmF0aXZlRWxlbWVudCByZWZlcmVuY2Ugb2YgdGhlIGNvbXBvbmVudCByb290XG4gICAgICovXG4gICAgcHVibGljIGdldCAkZWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuICQodGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBET00gbm9kZSByZWZlcmVuY2Ugb2YgdGhlIGNvbXBvbmVudCByb290XG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IG5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gICAgLyoqXG4gICAgICogVHlwZSBvZiB0aGUgY29tcG9uZW50XG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHdpZGdldFR5cGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIE1vc3Qgb2YgdGhlIGNhc2VzIGl0IGlzIHNhbWUgYXMgd2lkZ2V0VHlwZVxuICAgICAqIGZvciBzcGVjaWZpYyB3aWRnZXRzIGxpa2UgY2hhcnRzIHdpZGdldFR5cGUgY2FuIGJlIHdtLWNoYXJ0IHdoZXJlIGFzIHRoZSBzdWJ0eXBlIGNhbiBiZSB3bS1iYXItY2hhcnRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgd2lkZ2V0U3ViVHlwZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogUHJveHkgZm9yIHRoZSBjb21wb25lbnQgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHdpZGdldDogYW55O1xuXG4gICAgLyoqXG4gICAgICogVmlldyBwYXJlbnQgY29tcG9uZW50XG4gICAgICogZWcsIFBhZ2UsIFBhcnRpYWwsIFByZWZhYlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSB2aWV3UGFyZW50OiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudE1hbmdlciB0byBhZGQvcmVtb3ZlIGV2ZW50c1xuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBldmVudE1hbmFnZXI6IEV2ZW50TWFuYWdlcjtcblxuICAgIC8qKlxuICAgICAqIEFwcCBMb2NhbGVcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgYXBwTG9jYWxlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBTdHlsZSBjaGFuZ2Ugc3ViamVjdCBhbmQgb2JzZXJ2YWJsZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3R5bGVDaGFuZ2UgPSBuZXcgUmVwbGF5U3ViamVjdCgpO1xuXG4gICAgLyoqXG4gICAgICogUHJvcGVydHkgY2hhbmdlIHN1YmplY3QgYW5kIG9ic2VydmFibGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb3BlcnR5Q2hhbmdlID0gbmV3IFN1YmplY3QoKTtcblxuICAgIC8qKlxuICAgICAqIE9uIFJlYWR5IFN0YXRlIGNoYW5nZSBzdWJqZWN0IGFuZCBvYnNlcnZhYmxlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSByZWFkeVN0YXRlID0gbmV3IFN1YmplY3QoKTtcblxuICAgIC8qKlxuICAgICAqIENvbXBvbmVudCBkZXN0cm95IHN1YmplY3QgYW5kIG9ic2VydmFibGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgLyoqXG4gICAgICogTWFwIG9mIGV2ZW50IGhhbmRsZXIgY2FsbGJhY2tzXG4gICAgICovXG4gICAgcHJpdmF0ZSBldmVudEhhbmRsZXJzID0gbmV3IE1hcDxzdHJpbmcsIHtjYWxsYmFjazogRnVuY3Rpb24sIGxvY2FsczogYW55fT4oKTtcblxuICAgIC8qKlxuICAgICAqIGNvbnRleHQgb2YgdGhlIHdpZGdldFxuICAgICAqIHdoZW4gdGhlIHdpZGdldCBpcyBwcmVzZXQgaW5zaWRlIGEgcmVwZWF0ZXIgdGhpcyBjb250ZXh0IHdpbGwgaGF2ZSB0aGUgcmVwZWF0ZXIgcmVsYXRlZCBwcm9wZXJ0aWVzXG4gICAgICovXG4gICAgcHVibGljIGNvbnRleHQ6IGFueTtcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWwgc3RhdGUgb2YgdGhlIHdpZGdldC5cbiAgICAgKiBXaWxsIGJlIHVuZGVmaW5lZCBvbmNlIHRoZSBpbml0aWFsIHByb3BlcnRpZXMgYXJlIHNldCBvbiB0byB0aGUgY29tcG9uZW50XG4gICAgICovXG4gICAgcHJpdmF0ZSBpbml0U3RhdGU6IE1hcDxzdHJpbmcsIGFueT47XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcm5hbCBmbGFnIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHdhaXQgZm9yIHRoZSB3aWRnZXQgaW5pdGlhbGl6YXRpb24gb3Igbm90XG4gICAgICogSWYgdGhlIGluaXRQcm9taXNlIGlzIHByb3ZpZGVkIGluIHRoZSBjb25zdHJ1Y3Rpb24gd2FpdCB0aWxsIHRoZSBwcm9taXNlIGlzIHJlc29sdmVkXG4gICAgICogSWYgdGhlIGluaXRQcm9taXNlIGlzIG5vdCBwcm92aWRlZCBwcm9jZWVkIHdpdGggdGhlIGluaXRpYWxpemF0aW9uLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlbGF5ZWRJbml0OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRGlzcGxheSB0eXBlIG9mIHRoZSBjb21wb25lbnQuIGVnLCBibG9jayhEZWZhdWx0KSwgaW5saW5lLWJsb2NrLCBpbmxpbmUgZXRjXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaXNwbGF5VHlwZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGV2ZW50IHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMuXG4gICAgICogdGhlc2UgZnVuY3Rpb25zIG5lZWRzIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIG9uVmlld0luaXRcbiAgICAgKi9cbiAgICBwcml2YXRlIHRvQmVTZXR1cEV2ZW50c1F1ZXVlOiBBcnJheTxGdW5jdGlvbj4gPSBbXTtcblxuICAgIHB1YmxpYyBfX2Nsb25lYWJsZV9fID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgd2lkZ2V0UHJvcHM6IE1hcDxzdHJpbmcsIGFueT47XG5cbiAgICBwcml2YXRlICRhdHRycyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICBwcml2YXRlIGlzTXV0ZWQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuICAgIHB1YmxpYyB2aWV3UGFyZW50QXBwOiBBcHA7XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBpbmo6IEluamVjdG9yLFxuICAgICAgICBASW5qZWN0KFdpZGdldENvbmZpZykgY29uZmlnOiBJV2lkZ2V0Q29uZmlnLFxuICAgICAgICBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnksXG4gICAgICAgIGluaXRQcm9taXNlPzogUHJvbWlzZTxhbnk+IC8vIFByb21pc2Ugb24gd2hpY2ggdGhlIGluaXRpYWxpemF0aW9uIGhhcyB0byB3YWl0XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWYgPSBpbmouZ2V0KEVsZW1lbnRSZWYpO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIC8vbWFraW5nIHRoZSBjb2RlIGNvbXBhdGlibGUgaW4gYm90aCB0aGUgSklUIGFuZCBBT1QgbW9kZXNcbiAgICAgICAgdGhpcy52aWV3UGFyZW50QXBwID0gaW5qID8gaW5qLmdldChBcHApIDogaW5qZWN0KEFwcCk7XG4gICAgICAgIHRoaXMud2lkZ2V0VHlwZSA9IGNvbmZpZy53aWRnZXRUeXBlO1xuICAgICAgICB0aGlzLndpZGdldFN1YlR5cGUgPSBjb25maWcud2lkZ2V0U3ViVHlwZSB8fCBjb25maWcud2lkZ2V0VHlwZTtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmID0gaW5qLmdldChWaWV3Q29udGFpbmVyUmVmKTtcbiAgICAgICAgLy8gdGhpcy52aWV3UGFyZW50ID0gKGluaiBhcyBhbnkpLnZpZXcuY29tcG9uZW50O1xuICAgICAgICAvLyB0aGlzLnZpZXdQYXJlbnQgPSAodGhpcy52aWV3Q29udGFpbmVyUmVmIGFzIGFueSkucGFyZW50SW5qZWN0b3IuX2xWaWV3WzhdO1xuICAgICAgICAvLyB0aGlzLnZpZXdQYXJlbnQgPSBfdmlld1BhcmVudCB8fCAodGhpcy52aWV3Q29udGFpbmVyUmVmIGFzIGFueSkucGFyZW50SW5qZWN0b3IuX2xWaWV3WzhdO1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvbWFpbi9wYWNrYWdlcy9jb3JlL3NyYy9yZW5kZXIzL2ludGVyZmFjZXMvdmlldy50c1xuXG4gICAgICAgIGxldCBsVmlldyA9ICh0aGlzLmluaiBhcyBhbnkpLl9sVmlldztcbiAgICAgICAgdGhpcy52aWV3UGFyZW50ID0gZmluZFBhcmVudChsVmlldywgdGhpcy52aWV3UGFyZW50QXBwKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIi0tLSoqKioqKioqKioqKiotLWNvbnRleHQtLSoqKioqKioqKioqKiotLS1cIiwgbFZpZXdbOF0pO1xuICAgICAgICB0aGlzLmNvbnRleHQgPSAodGhpcy5pbmogYXMgYW55KS5fbFZpZXdbOF07XG5cbiAgICAgICAgdGhpcy5kaXNwbGF5VHlwZSA9IGNvbmZpZy5kaXNwbGF5VHlwZSB8fCBESVNQTEFZX1RZUEUuQkxPQ0s7XG4gICAgICAgIC8vIHRoaXMuY29udGV4dCA9IChpbmogYXMgYW55KS52aWV3LmNvbnRleHQ7XG4gICAgICAgIC8vIHRoaXMuY29udGV4dCA9ICh0aGlzLnZpZXdDb250YWluZXJSZWYgYXMgYW55KS5faG9zdExWaWV3LmRlYnVnLmNvbnRleHQ7XG4gICAgICAgIC8vIGxldCBoYXNJbXBsaWNpdENvbnRleHQgPSAodGhpcy52aWV3Q29udGFpbmVyUmVmIGFzIGFueSkuX2hvc3RMVmlldy5maW5kKHQgPT4gdCAmJiAhIXQuJGltcGxpY2l0KTtcbiAgICAgICAgLy8gd2hlbiAkaW1wbGljaXQgaXMgbm90IGF2YWlsYWJsZSwgdGhpcyBvYmplY3QgY29udGFpbnMgc29tZSBuZ0ZvciBjb250ZXh0IG9yIGxpc3RpdGVtIGNvbnRleHQgb2YgdGhlIHdpZGdldCB0aGVuXG4gICAgICAgIC8vIHdlIHVzZSB0aGUgZGlyZWN0IHBhcmVudCBmb3IgZXhhbXBsZTogbmF2IGNvbXBvbmVudCBpcyB0aGUgcGFyZW50IGZvciBhbmNob3IgPT4gYW5jaG9yIGdldHMgdmlld1BhcmVudCBhcyBOYXZcbiAgICAgICAgLy8gSW4gb3RoZXIgY2FzZSwgd2hlcmUgd2UgaGF2ZSBpbXBsaWNpdENvbnRleHQgdGhlcmUgd2UgY2FuIG1ha2UgdXNlIG9mIHBhZ2UvYXBwIGxldmVsIGNvbnRleHQgaGVuY2Ugdmlld1BhcmVudC52aWV3UGFyZW50IHRvIGdldCBwYWdlIGxldmVsIGNvbnRleHRcbiAgICAgICAgLyppZiAoaGFzSW1wbGljaXRDb250ZXh0ICYmIHRoaXMudmlld1BhcmVudC52aWV3UGFyZW50KSB7XG4gICAgICAgICAgICBpZiAodGhpcy52aWV3UGFyZW50LndpZGdldFR5cGUgIT09ICd3bS1jYXJkJyAmJiB0aGlzLnZpZXdQYXJlbnQud2lkZ2V0VHlwZSAhPT0gJ3dtLWlmcmFtZWRpYWxvZydcbiAgICAgICAgICAgICAgICAmJiB0aGlzLnZpZXdQYXJlbnQud2lkZ2V0VHlwZSAhPT0gJ3dtLXBhcnRpYWxkaWFsb2cnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3UGFyZW50ID0gdGhpcy52aWV3UGFyZW50LnZpZXdQYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoYXNJbXBsaWNpdENvbnRleHQgfHwgKCF0aGlzLnZpZXdQYXJlbnQud2lkZ2V0VHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dCA9ICh0aGlzLnZpZXdDb250YWluZXJSZWYgYXMgYW55KS5faG9zdExWaWV3LmZpbmQodCA9PiB0ICYmICEhdC4kaW1wbGljaXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gKHRoaXMudmlld0NvbnRhaW5lclJlZiBhcyBhbnkpLnBhcmVudEluamVjdG9yLl9sVmlld1s4XTtcbiAgICAgICAgfSovXG5cbiAgICAgICAgLyppZihfdmlld1BhcmVudCAmJiAhaGFzSW1wbGljaXRDb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQgPSAodGhpcy52aWV3Q29udGFpbmVyUmVmIGFzIGFueSkuX2hvc3RMVmlld1s4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IGhhc0ltcGxpY2l0Q29udGV4dDtcbiAgICAgICAgfSovXG4gICAgICAgIC8vIGlmIChbJ3dtLWxpc3QnLCAnd20tbmF2J10uaW5jbHVkZXModGhpcy52aWV3UGFyZW50LndpZGdldFR5cGUpIHx8IFsnd20tY2Fyb3VzZWwtdGVtcGxhdGUnLCAnd20tY2FyZCddLmluY2x1ZGVzKHRoaXMud2lkZ2V0VHlwZSkpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuY29udGV4dCA9ICh0aGlzLnZpZXdDb250YWluZXJSZWYgYXMgYW55KS5faG9zdExWaWV3LmRlYnVnLmNvbnRleHQ7XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICB0aGlzLmNvbnRleHQgPSAodGhpcy52aWV3Q29udGFpbmVyUmVmIGFzIGFueSkucGFyZW50SW5qZWN0b3IuX2xWaWV3WzhdO1xuICAgICAgICAvLyB9XG4gICAgICAgIHRoaXMud2lkZ2V0ID0gdGhpcy5jcmVhdGVQcm94eSgpO1xuICAgICAgICB0aGlzLmV2ZW50TWFuYWdlciA9IGluai5nZXQoRXZlbnRNYW5hZ2VyKTtcbiAgICAgICAgKHRoaXMubmF0aXZlRWxlbWVudCBhcyBhbnkpLndpZGdldCA9IHRoaXMud2lkZ2V0O1xuXG4gICAgICAgIHRoaXMuYXBwTG9jYWxlID0gaW5qLmdldChBcHApLmFwcExvY2FsZSB8fCB7fTtcblxuICAgICAgICB0aGlzLmluaXRDb250ZXh0KCk7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5ob3N0Q2xhc3MpIHtcbiAgICAgICAgICAgIGFkZENsYXNzKHRoaXMubmF0aXZlRWxlbWVudCwgY29uZmlnLmhvc3RDbGFzcyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLndpZGdldElkID0gdGhpcy5nZW5lcmF0ZVdpZGdldElkKCk7XG4gICAgICAgIHNldEF0dHIodGhpcy5uYXRpdmVFbGVtZW50LCAnd2lkZ2V0LWlkJywgdGhpcy53aWRnZXRJZCwgdHJ1ZSk7XG5cbiAgICAgICAgLy8gcmVnaXN0ZXIgZGVmYXVsdCBwcm9wZXJ0eSBjaGFuZ2UgaGFuZGxlciBhbmQgc3R5bGUgY2hhbmdlIGhhbmRsZXJcbiAgICAgICAgdGhpcy5yZWdpc3RlclN0eWxlQ2hhbmdlTGlzdGVuZXIodGhpcy5vblN0eWxlQ2hhbmdlLCB0aGlzKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclByb3BlcnR5Q2hhbmdlTGlzdGVuZXIodGhpcy5vblByb3BlcnR5Q2hhbmdlLCB0aGlzKTtcblxuICAgICAgICAvLyBpZiB0aGUgaW5pdFByb21pc2UgaXMgcHJvdmlkZWQsIHdhaXQgdGlsbCB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZCB0byBwcm9jZWVkIHdpdGggdGhlIHdpZGdldCBpbml0aWFsaXphdGlvblxuICAgICAgICBpZiAoIWluaXRQcm9taXNlKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRXaWRnZXQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVsYXllZEluaXQgPSB0cnVlO1xuICAgICAgICAgICAgaW5pdFByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0V2lkZ2V0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbml0UHJvcHMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmKGV4cGxpY2l0Q29udGV4dCkge1xuICAgICAgICAgICAgZXh0ZW5kKHRoaXMuY29udGV4dCwgZXhwbGljaXRDb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXROYXRpdmVFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0V2lkZ2V0VHlwZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy53aWRnZXRUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRXaWRnZXRTdWJUeXBlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpZGdldFN1YlR5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFdpZGdldCgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy53aWRnZXQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFByb3BlcnR5KHByb3BOYW1lLCBwcm9wVmFsdWUpIHtcbiAgICAgICAgdGhpcy53aWRnZXRbcHJvcE5hbWVdID0gcHJvcFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRWaWV3UGFyZW50KCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdQYXJlbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIG5vdGlmeVN0eWxlQ2hhbmdlKGtleTogc3RyaW5nLCBudjogYW55LCBvdjogYW55KSB7XG4gICAgICAgIHRoaXMuc3R5bGVDaGFuZ2UubmV4dCh7a2V5LCBudiwgb3Z9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbm90aWZ5UHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52OiBhbnksIG92OiBhbnkpIHtcbiAgICAgICAgdGhpcy5wcm9wZXJ0eUNoYW5nZS5uZXh0KHtrZXksIG52LCBvdn0pO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlclN0eWxlQ2hhbmdlTGlzdGVuZXIoZm46IENoYW5nZUxpc3RlbmVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgZm4gPSBmbi5iaW5kKGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdHlsZUNoYW5nZS5zdWJzY3JpYmUoKHtrZXksIG52LCBvdn0pID0+IGZuKGtleSwgbnYsIG92KSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyUmVhZHlTdGF0ZUxpc3RlbmVyKGZuOiBGdW5jdGlvbiwgY3R4PzogYW55KSB7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgIGZuID0gZm4uYmluZChjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVhZHlTdGF0ZS5zdWJzY3JpYmUoKCkgPT4gZm4oKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyUHJvcGVydHlDaGFuZ2VMaXN0ZW5lcihmbjogQ2hhbmdlTGlzdGVuZXIsIGN0eD86IGFueSkge1xuICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICBmbiA9IGZuLmJpbmQoY3R4KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb3BlcnR5Q2hhbmdlLnN1YnNjcmliZSgoe2tleSwgbnYsIG92fSkgPT4gZm4oa2V5LCBudiwgb3YpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoZm46IEZ1bmN0aW9uLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgZm4gPSBmbi5iaW5kKGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXN0cm95LnN1YnNjcmliZSgoKSA9PiB7fSwgKCkgPT4ge30sICgpID0+IGZuKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREaXNwbGF5VHlwZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5VHlwZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY3JlYXRlUHJveHkoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIFdpZGdldFByb3h5UHJvdmlkZXIuY3JlYXRlKHRoaXMsIHRoaXMud2lkZ2V0U3ViVHlwZSwgZ2V0V2lkZ2V0UHJvcHNCeVR5cGUodGhpcy53aWRnZXRTdWJUeXBlKSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGluaXRDb250ZXh0KCkge1xuICAgICAgICAvLyBjb25zdCBjb250ZXh0ID0gKHRoaXMuaW5qIGFzIGFueSkudmlldy5jb250ZXh0O1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0IHx8IHt9O1xuXG4gICAgICAgIGNvbnN0IHBhcmVudENvbnRleHRzID0gdGhpcy5pbmouZ2V0KENvbnRleHQsIHt9KTtcblxuICAgICAgICAvLyBhc3NpZ24gdGhlIGNvbnRleHQgcHJvcGVydHkgYWNjb3JkaW5nbHlcbiAgICAgICAgaWYgKHRoaXMudmlld1BhcmVudCAhPT0gY29udGV4dCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmVudENvbnRleHRzKSB7XG4gICAgICAgICAgICBsZXQgcGFyZW50Q29udGV4dE9iaiA9IHt9O1xuICAgICAgICAgICAgaWYgKGlzQXJyYXkocGFyZW50Q29udGV4dHMpKSB7XG4gICAgICAgICAgICAgICAgZm9yRWFjaChwYXJlbnRDb250ZXh0cywgKGNvbnRleHRPYmopID0+IHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihwYXJlbnRDb250ZXh0T2JqLCBjb250ZXh0T2JqKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyZW50Q29udGV4dE9iaiA9IHBhcmVudENvbnRleHRzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gT2JqZWN0LmFzc2lnbih7fSwgcGFyZW50Q29udGV4dE9iaiwgdGhpcy5jb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHNldCB0aGUgdmFsdWUgb24gdGhlIHByb3h5IG9iamVjdCBpZSwgd2lkZ2V0XG4gICAgICogc2V0dGluZyB0aGUgcHJvcGVydHkgb24gdGhlIHByb3h5IHdpbGwgaW52b2tlIHRoZSBjaGFuZ2UgbGlzdGVuZXJzXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRXaWRnZXRQcm9wZXJ0eShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLndpZGdldFtrZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEF0dHIoYXR0ck5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLiRhdHRycy5nZXQoYXR0ck5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgYXBwIGluc3RhbmNlXG4gICAgICogQHJldHVybnMge0FwcH1cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0QXBwSW5zdGFuY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluai5nZXQoQXBwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgYSB1bmlxdWUgaWRcbiAgICAgKiBEZWZhdWx0IHBhdHRlcm4gaXMgYHdpZGdldC1pZC0ke2lkfWBcbiAgICAgKiBDb21wb25lbnRzIGNhbiBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBnZW5lcmF0ZSBhIGRpZmZlcmVudCBpZCBlZywgYmFyLWNoYXJ0LTFcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2VuZXJhdGVXaWRnZXRJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gd2lkZ2V0SWRHZW5lcmF0b3IubmV4dFVpZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgdGhlIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGFjcm9zcyB0aGUgY29tcG9uZW50c1xuICAgICAqIGVnLFxuICAgICAqICAxLiB2YWx1ZSBvZiB0aGUgY2xhc3MgcHJvcGVydHkgd2lsbCBiZSBhcHBsaWVkIG9uIHRoZSBob3N0IGVsZW1lbnRcbiAgICAgKiAgMi4gYmFzZWQgb24gdGhlIHZhbHVlIG9mIHNob3cgcHJvcGVydHkgY29tcG9uZW50IGlzIHNob3duL2hpZGRlblxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgICAqIEBwYXJhbSBudlxuICAgICAqIEBwYXJhbSBvdlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvblByb3BlcnR5Q2hhbmdlKGtleTogc3RyaW5nLCBudjogYW55LCBvdj86IGFueSkge1xuICAgICAgICBpZiAoa2V5ID09PSAnc2hvdycpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5oaWRkZW4gPSAhbnY7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnaGludCcpIHtcbiAgICAgICAgICAgIGlmICghaXNNb2JpbGVBcHAoKSkge1xuICAgICAgICAgICAgICAgIHNldEF0dHIodGhpcy5uYXRpdmVFbGVtZW50LCAndGl0bGUnLCBudik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnY2xhc3MnKSB7XG4gICAgICAgICAgICBzd2l0Y2hDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsIG52LCBvdik7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gbnYubWF0Y2goLyhcXFd8XikoaChbMC02XSkpKD89XFxzfCQpLyk7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgc2V0QXR0cih0aGlzLm5hdGl2ZUVsZW1lbnQsICdyb2xlJywgJ2hlYWRpbmcnKTtcbiAgICAgICAgICAgICAgICBzZXRBdHRyKHRoaXMubmF0aXZlRWxlbWVudCwgJ2FyaWEtbGV2ZWwnLCByZXN1bHRbM10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ25hbWUnIHx8IGtleSA9PT0gJ3RhYmluZGV4Jykge1xuICAgICAgICAgICAgc2V0QXR0cih0aGlzLm5hdGl2ZUVsZW1lbnQsIGtleSwgbnYpO1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ25hbWUnICYmIG52KSB7XG4gICAgICAgICAgICAgICAgcmVuYW1lV2lkZ2V0KHRoaXMudmlld1BhcmVudCwgdGhpcy53aWRnZXQsIG52LCBvdik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnY29uZGl0aW9uYWxjbGFzcycpIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBjbGFzc2VzIGlmIG9sZCBhbmQgbnYgdmFsdWUgYXJlIGRpZmZlcmVudFxuICAgICAgICAgICAgdXBkYXRlQ2xhc3Nlcyhudi50b0FkZCwgbnYudG9SZW1vdmUsIHRoaXMubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSAgaWYgKGtleSA9PT0gJ2F1dG9wbGF5Jykge1xuICAgICAgICAgICAgY29uc3QgdGFnTmFtZSA9IHRoaXMud2lkZ2V0VHlwZSA9PT0gJ3dtLWF1ZGlvJyA/ICdhdWRpbycgOiAndmlkZW8nO1xuICAgICAgICAgICAgLy8gVHJpZ2dlciBtZWRpYShhdWRpby92aWRlbykgZWxlbWVudCBsb2FkIG1ldGhvZCBhZnRlciBjaGFuZ2luZyBhdXRvcGxheSBwcm9wZXJ0eVxuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IodGFnTmFtZSkubG9hZCgpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2NvbmRpdGlvbmFsc3R5bGUnKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgc3R5bGVzIGlmIG9sZCBhbmQgbnYgdmFsdWUgYXJlIGRpZmZlcmVudFxuICAgICAgICAgICAgdXBkYXRlU3R5bGVzKG52LCBvdiwgdGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdhbmltYXRpb24nKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgc3R5bGVzIGlmIG9sZCBhbmQgbnYgdmFsdWUgYXJlIGRpZmZlcmVudFxuICAgICAgICAgICAgYWRkQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCBcImFuaW1hdGVkIFwiICsgbnYpO1xuICAgICAgICB9ICBlbHNlIGlmIChrZXkgPT09ICdkaXNhYmxlZCcpIHtcbiAgICAgICAgICAgIC8vIFdNUy0xOTMyMTogSW4gSUUsIHdpZGdldCBpcyBpbiBkaXNhYmxlZCBzdGF0ZSB3aGVuIGRpc2FibGVkPVwiZmFsc2VcIiBhdHRyaWJ1dGUgaXMgcHJlc2VudFxuICAgICAgICAgICAgKG52ID09PSB0cnVlKSA/IHNldEF0dHIodGhpcy5uYXRpdmVFbGVtZW50LCAnZGlzYWJsZWQnLCAndHJ1ZScsIHRydWUpIDogcmVtb3ZlQXR0cih0aGlzLm5hdGl2ZUVsZW1lbnQsICdkaXNhYmxlZCcsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBzdHlsZSBjaGFuZ2UgaGFuZGxlclxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvblN0eWxlQ2hhbmdlKGs6IHN0cmluZywgbnY6IGFueSwgb3Y/OiBhbnkpIHt9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciB0aGUgd2lkZ2V0IHdpdGggdGhlIHdpZGdldFJlZ2lzdHJ5XG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlZ2lzdGVyV2lkZ2V0KHdpZGdldE5hbWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKHJlZ2lzdGVyKHRoaXMud2lkZ2V0LCB0aGlzLnZpZXdQYXJlbnQsIHRoaXMud2lkZ2V0SWQsIHdpZGdldE5hbWUpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBvdmVycmlkZSB0aGVcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0TWFwcGVkRXZlbnROYW1lKGV2ZW50TmFtZSkge1xuICAgICAgICByZXR1cm4gRVZFTlRTX01BUC5nZXQoZXZlbnROYW1lKSB8fCBldmVudE5hbWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogaW52b2tlIHRoZSBldmVudCBoYW5kbGVyXG4gICAgICogQ29tcG9uZW50cyBjYW4gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gZXhlY3V0ZSBjdXN0b20gbG9naWMgYmVmb3JlIGludm9raW5nIHRoZSB1c2VyIGNhbGxiYWNrXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGhhbmRsZUV2ZW50KG5vZGU6IEhUTUxFbGVtZW50LCBldmVudE5hbWU6IHN0cmluZywgZXZlbnRDYWxsYmFjazogRnVuY3Rpb24sIGxvY2FsczogYW55LCBtZXRhPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICAgICAgZSA9PiB7XG4gICAgICAgICAgICAgICAgbG9jYWxzLiRldmVudCA9IGU7XG4gICAgICAgICAgICAgICAgaWYgKG1ldGEgPT09ICdkZWxheWVkJykge1xuICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZXZlbnRDYWxsYmFjaygpLCAxNTApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBldmVudENhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHBhcnNlIHRoZSBldmVudCBleHByZXNzaW9uIGFuZCBzYXZlIHJlZmVyZW5jZSB0byB0aGUgZnVuY3Rpb24gaW5zaWRlIGV2ZW50SGFuZGxlcnMgbWFwXG4gICAgICogSWYgdGhlIGNvbXBvbmVudCBwcm92aWRlcyBhIG92ZXJyaWRlIGZvciBhbiBldmVudCB0aHJvdWdoIEBFdmVudCBkZWNvcmF0b3IgaW52b2tlIHRoYXRcbiAgICAgKiBlbHNlIGludm9rZSB0aGUgcmVzb2x2ZWQgZnVuY3Rpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwclxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwcm9jZXNzRXZlbnRBdHRyKGV2ZW50TmFtZTogc3RyaW5nLCBleHByOiBzdHJpbmcsIG1ldGE/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZm4gPSAkcGFyc2VFdmVudChleHByKTtcbiAgICAgICAgY29uc3QgbG9jYWxzID0gdGhpcy5jb250ZXh0O1xuICAgICAgICBsb2NhbHMud2lkZ2V0ID0gdGhpcy53aWRnZXQ7XG4gICAgICAgIGNvbnN0IGJvdW5kRm4gPSBmbi5iaW5kKHVuZGVmaW5lZCwgdGhpcy52aWV3UGFyZW50LCBsb2NhbHMpO1xuXG4gICAgICAgIGNvbnN0IGV2ZW50Q2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgYm91bmRGblZhbDtcbiAgICAgICAgICAgICRpbnZva2VXYXRjaGVycyh0cnVlKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbG9jYWxzLiRldmVudCA9IGxvY2Fscy4kZXZlbnQgfHwgbmV3IHdpbmRvdy5DdXN0b21FdmVudChldmVudE5hbWUpO1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBldmVudCBpcyBib3VuZCBkaXJlY3RseSB0byB0aGUgdmFyaWFibGUgdGhlbiB3ZSBuZWVkIHRvIGludGVybmFsbHkgaGFuZGxlXG4gICAgICAgICAgICAgICAgLy8gdGhlIHByb21pc2UgcmV0dXJuZWQgYnkgdGhlIHZhcmlhYmxlIGNhbGwuXG4gICAgICAgICAgICAgICAgYm91bmRGblZhbCA9IGJvdW5kRm4oKTtcbiAgICAgICAgICAgICAgICBpZiAoYm91bmRGblZhbCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgYm91bmRGblZhbC50aGVuKCByZXNwb25zZSA9PiByZXNwb25zZSwgZXJyID0+IGVycik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJvdW5kRm5WYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5ldmVudEhhbmRsZXJzLnNldCh0aGlzLmdldE1hcHBlZEV2ZW50TmFtZShldmVudE5hbWUpLCB7Y2FsbGJhY2s6IGV2ZW50Q2FsbGJhY2ssIGxvY2Fsc30pO1xuICAgICAgICAvLyBwcmVwZW5kIGV2ZW50TmFtZSB3aXRoIG9uIGFuZCBjb252ZXJ0IGl0IHRvIGNhbWVsY2FzZS5cbiAgICAgICAgLy8gZWcsIFwiY2xpY2tcIiAtLS0+IG9uQ2xpY2tcbiAgICAgICAgY29uc3Qgb25FdmVudE5hbWUgPSBjYW1lbENhc2UoYG9uLSR7ZXZlbnROYW1lfWApO1xuICAgICAgICAvLyBzYXZlIHRoZSBldmVudENhbGxiYWNrIGluIHdpZGdldFNjb3BlLlxuICAgICAgICB0aGlzW29uRXZlbnROYW1lXSA9IGV2ZW50Q2FsbGJhY2s7XG5cbiAgICAgICAgLy8gZXZlbnRzIG5lZWRzIHRvIGJlIHNldHVwIGFmdGVyIHZpZXdJbml0XG4gICAgICAgIHRoaXMudG9CZVNldHVwRXZlbnRzUXVldWUucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUV2ZW50KHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcy5nZXRNYXBwZWRFdmVudE5hbWUoZXZlbnROYW1lKSwgZXZlbnRDYWxsYmFjaywgbG9jYWxzLCBtZXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvY2VzcyB0aGUgYm91bmQgcHJvcGVydHlcbiAgICAgKiBSZWdpc3RlciBhIHdhdGNoIG9uIHRoZSBib3VuZCBleHByZXNzaW9uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NCaW5kQXR0cihwcm9wTmFtZTogc3RyaW5nLCBleHByOiBzdHJpbmcpIHtcblxuICAgICAgICB0aGlzLmluaXRTdGF0ZS5kZWxldGUocHJvcE5hbWUpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKFxuICAgICAgICAgICAgJHdhdGNoKFxuICAgICAgICAgICAgICAgIGV4cHIsXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3UGFyZW50LFxuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dCxcbiAgICAgICAgICAgICAgICBudiA9PiB0aGlzLndpZGdldFtwcm9wTmFtZV0gPSBudixcbiAgICAgICAgICAgICAgICBnZXRXYXRjaElkZW50aWZpZXIodGhpcy53aWRnZXRJZCwgcHJvcE5hbWUpLFxuICAgICAgICAgICAgICAgIHByb3BOYW1lID09PSAnZGF0YXNvdXJjZScsXG4gICAgICAgICAgICAgICAgdGhpcy53aWRnZXRQcm9wcy5nZXQocHJvcE5hbWUpLFxuICAgICAgICAgICAgICAgICgpID0+IHRoaXMuaXNNdXRlZFxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSB3YXRjaCBvbiB0aGUgYm91bmQgcHJvcGVydHlcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVtb3ZlUHJvcGVydHlCaW5kaW5nKHByb3BOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgJHVud2F0Y2goZ2V0V2F0Y2hJZGVudGlmaWVyKHRoaXMud2lkZ2V0SWQsIHByb3BOYW1lKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogaW52b2tlIHRoZSBldmVudCBjYWxsYmFjayBtZXRob2RcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gICAgICogQHBhcmFtIGV4dHJhTG9jYWxzXG4gICAgICovXG4gICAgcHVibGljIGludm9rZUV2ZW50Q2FsbGJhY2soZXZlbnROYW1lOiBzdHJpbmcsIGV4dHJhTG9jYWxzPzogYW55KSB7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrSW5mbyA9IHRoaXMuZXZlbnRIYW5kbGVycy5nZXQoZXZlbnROYW1lKTtcbiAgICAgICAgaWYgKGNhbGxiYWNrSW5mbykge1xuICAgICAgICAgICAgY29uc3QgZm4gPSBjYWxsYmFja0luZm8uY2FsbGJhY2s7XG4gICAgICAgICAgICBjb25zdCBsb2NhbHMgPSBjYWxsYmFja0luZm8ubG9jYWxzIHx8IHt9O1xuXG4gICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm4oT2JqZWN0LmFzc2lnbihsb2NhbHMsIGV4dHJhTG9jYWxzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzIHRoZSBhdHRyaWJ1dGVcbiAgICAgKiBJZiB0aGUgYXR0cmlidXRlIGlzIGFuIGV2ZW50IGV4cHJlc3Npb24sIGdlbmVyYXRlIGEgZnVuY3Rpb25hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXhwcmVzc2lvblxuICAgICAqICAgICAgYW5kIGtlZXAgaW4gZXZlbnRIYW5kbGVyc1xuICAgICAqIElmIHRoZSBhdHRyaWJ1dGUgaXMgYSBib3VuZCBleHByZXNzaW9uLCByZWdpc3RlciBhIHdhdGNoIG9uIHRoZSBleHByZXNzaW9uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NBdHRyKGF0dHJOYW1lOiBzdHJpbmcsIGF0dHJWYWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiPT09PWF0dHJOYW1lPT09PT1cIiwgYXR0ck5hbWUsIFwiPT09PT10eXBlb2YgYXR0cm5hbWU9PT09PVwiLCB0eXBlb2YgYXR0ck5hbWUsIFwiLS0tLS1hdHRyVmFsdWUtLS0tXCIsIGF0dHJWYWx1ZSk7XG4gICAgICAgIGNvbnN0IHswOiBwcm9wTmFtZSwgMTogdHlwZSwgMjogbWV0YSwgbGVuZ3RofSA9IGF0dHJOYW1lLnNwbGl0KCcuJyk7XG4gICAgICAgIGlmICh0eXBlID09PSAnYmluZCcpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBzaG93IHByb3BlcnR5IGlzIGJvdW5kLCBzZXQgdGhlIGluaXRpYWwgdmFsdWUgdG8gZmFsc2VcbiAgICAgICAgICAgIGlmIChwcm9wTmFtZSA9PT0gJ3Nob3cnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NCaW5kQXR0cihwcm9wTmFtZSwgYXR0clZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnZXZlbnQnKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NFdmVudEF0dHIocHJvcE5hbWUsIGF0dHJWYWx1ZSwgbWV0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAobGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgY2xhc3MgYW5kIG5hbWUgYXR0cmlidXRlcy4gQ29tcG9uZW50IHdpbGwgc2V0IHRoZW0gb24gdGhlIHByb3BlciBub2RlXG4gICAgICAgICAgICBpZiAoYXR0ck5hbWUgPT09ICdjbGFzcycpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsIGF0dHJWYWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09PSAndGFiaW5kZXgnIHx8IGF0dHJOYW1lID09PSAnbmFtZScpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVBdHRyKHRoaXMubmF0aXZlRWxlbWVudCwgYXR0ck5hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmluaXRTdGF0ZS5zZXQocHJvcE5hbWUsIGF0dHJWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBjdXN0b20gYXR0cmlidXRlcyBwcm92aWRlZCBvbiBlbERlZjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgcmVxdWlyZWQgYXMgdGhlIG5hdGl2ZSBlbGVtZW50IGF0dHJpYnV0ZXMgYXJlIGNhc2UgaW5zZW5zaXRpdmUoY2FtZWxjYXNlKSBsaWtlIGN1c3RvbUV4cHJlc3Npb25zIGJlY29tZXMgY3VzdG9tZXhwcmVzc2lvblxuICAgICAqIGFuZCBvdXIgbG9naWMgdG8gY2hlY2sgbGlrZSB0aGVzZSBjaGFuZ2VzIHdpbGwgZmFpbC4gQmVmb3JlIElWWSBjaGFuZ2VzLCBhbmd1bGFyIG1haW50YWlucyBhIHNlcGFyYXRlIG9iamVjdCB3aXRoIHRoZXNlIGF0dHJpYnV0ZXNcbiAgICAgKiBhcyBpdCBpcyBsaWtlIGluIHRoZSBjYW1lbGNhc2UuIFdpdGggSVZZIGFsbCB0aG9zZSBhcmUgZ29uZS4gU28gbmVlZCB0byBtYWludGFpbiBhIHNlcGFyYXRlIGxpc3Qgd2l0aCB0aGUgY2FtZWxjYXNpbmcgb2YgYXR0cmlidXRlc1xuICAgICAqIEBwcml2YXRlXG4gICAgICogX3ROb2RlLmF0dHJzIGF0dHJpYnV0ZXMgYXJlIHN0b3JlZCBpbiBhcnJheShldmVuIGluZGV4OiBrZXksIG9kZCBpbmRleDogdmFsdWUpXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRBdHRyaWJ1dGVzKCkge1xuICAgICAgICBsZXQgX3ROb2RlQXR0cnMgPSAodGhpcy5pbmogYXMgYW55KS5fdE5vZGUuYXR0cnMsIGFjdHVhbEF0dHJzID0gQXJyYXkuZnJvbSh0aGlzLm5hdGl2ZUVsZW1lbnQuYXR0cmlidXRlcykubWFwKGF0dHIgPT4gYXR0ci5uYW1lKTtcbiAgICAgICAgaWYoX3ROb2RlQXR0cnMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBhY3R1YWxBdHRycy5zb3J0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yRWFjaChfdE5vZGVBdHRycywgKGF0dHIsIGk6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBhdHRyID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHR5cGVvZiBhdHRyID09PSAnc3RyaW5nJyAmJiBpICUgMiA9PSAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGxvd2VyQ2FzZUF0dHIgPSBhdHRyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGFjdHVhbEF0dHJzLmluY2x1ZGVzKGxvd2VyQ2FzZUF0dHIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IGFjdHVhbEF0dHJzLmluZGV4T2YobG93ZXJDYXNlQXR0cilcbiAgICAgICAgICAgICAgICAgICAgYWN0dWFsQXR0cnNbaW5kZXhdID0gYXR0cjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8qXG4gICAgICAgIFNvcnRpbmcgYXR0cmlidXRlcyBhcyBwcm9wZXJ0aWVzIGxpa2UgcGxhY2Vob2xkZXIgaXMgbm90IHdvcmtpbmcgd2hlbiBpdCBpcyBib3VuZC5cbiAgICAgICAgcGxhY2Vob2xkZXIgYW5kIHBsYWNlaG9sZGVyLmJpbmQgdHdvIHByb3BlcnRpZXMgYXJlIGNvbWluZyBpbiBBcnJheS5cbiAgICAgICAgV2hlbiBhcnJheSBpcyBub3Qgc29ydGVkLCBpbml0aWFsbHkgcGxhY2Vob2xkZXIuYmluZCB2YWx1ZSBpcyBzZXQgdGhlbiBwbGFjZWhvbGRlciBkZWZhdWx0IHZhbHVlIGlzIHVwZGF0ZWQuXG4gICAgICAgIElmIGFycmF5IGlzIHNvcnRlZCwgcGxhY2Vob2xkZXIuYmluZCB2YWx1ZSB3aWxsIGJlIHNldCBmaW5hbGx5LlxuICAgICAgICBUaGlzIGlzIGNhdXNlZCBiZWNhdXNlIG9mIHRoZSB3YXkgd2UgYXJlIHN0b3JpbmcgYXR0cmlidXRlIG5hbWVzIGluIHdhdGNoZXIgcmVnaXN0cnkgbWFwXG4gICAgICAgICAqL1xuICAgICAgICByZXR1cm4gYWN0dWFsQXR0cnMuc29ydCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2Nlc3MgdGhlIGF0dHJpYnV0ZXNcbiAgICAgKi9cbiAgICBwcml2YXRlIHByb2Nlc3NBdHRycygpIHtcbiAgICAgICAgbWFwKHRoaXMuZ2V0QXR0cmlidXRlcygpLCAoYXR0ck5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgbGV0IGF0dHJWYWx1ZSA9IHRoaXMubmF0aXZlRWxlbWVudC5hdHRyaWJ1dGVzW2F0dHJOYW1lXS52YWx1ZVxuICAgICAgICAgICAgdGhpcy4kYXR0cnMuc2V0KGF0dHJOYW1lLCBhdHRyVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzQXR0cihhdHRyTmFtZSwgYXR0clZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHRoZSBpbml0U3RhdGUgd2l0aCB0aGUgZGVmYXVsdCBwcm9wZXJ0eSB2YWx1ZXMgYW5kIHRoZSB2YWx1ZXMgcHJvdmlkZWQgaW4gdGhlIG1hcmt1cFxuICAgICAqIFByb2Nlc3MgdGhlIGF0dHJpYnV0ZXNcbiAgICAgKiBSZWdpc3RlciB0aGUgd2lkZ2V0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGluaXRXaWRnZXQoKSB7XG4gICAgICAgIHRoaXMuaW5pdFN0YXRlID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcblxuICAgICAgICAvLyBnZXQgdGhlIHdpZGdldCBwcm9wZXJ0aWVzXG4gICAgICAgIGNvbnN0IHdpZGdldFByb3BzOiBNYXA8c3RyaW5nLCBhbnk+ID0gZ2V0V2lkZ2V0UHJvcHNCeVR5cGUodGhpcy53aWRnZXRTdWJUeXBlKTtcbiAgICAgICAgd2lkZ2V0UHJvcHMuZm9yRWFjaCgodiwgaykgPT4ge1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh2LnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFN0YXRlLnNldChrLCB2LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy53aWRnZXRQcm9wcyA9IHdpZGdldFByb3BzO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc0F0dHJzKCk7XG5cbiAgICAgICAgdGhpcy5yZWdpc3RlcldpZGdldCh0aGlzLmluaXRTdGF0ZS5nZXQoJ25hbWUnKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHRoZSBkZWZhdWx0IHByb3BlcnRpZXMgYW5kIHRoZSBwcm9wZXJ0aWVzIHByb3ZpZGVkIGluIHRoZSBtYXJrdXAgaW4gY29tcG9uZW50XG4gICAgICogSW52b2tpbmcgdGhpcyBtZXRob2Qgd2lsbCByZXN1bHQgaW4gaW52b2NhdGlvbiBvZiBwcm9wZXJ0eUNoYW5nZSBoYW5kbGVycyBvbiB0aGUgY29tcG9uZW50IGZvciB0aGUgZmlyc3QgdGltZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzZXRJbml0UHJvcHMoKSB7XG4gICAgICAgIGlmICh0aGlzLmluaXRTdGF0ZS5nZXQoJ25hbWUnKSkge1xuICAgICAgICAgICAgdGhpcy53aWRnZXQubmFtZSA9IHRoaXMuaW5pdFN0YXRlLmdldCgnbmFtZScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5pdFN0YXRlLmZvckVhY2goKHYsIGspID0+IHtcbiAgICAgICAgICAgIC8vIG5hbWUgaXMgYWxyZWFkeSBzZXQsIGlnbm9yZSBuYW1lXG4gICAgICAgICAgICAvLyBpZiB0aGUga2V5IGlzIHBhcnQgb2YgdG8gYmUgaWdub3JlZCBhdHRyaWJ1dGVzIGxpc3QgZG8gbm90IHNldCBpdCBvbiB0aGUgY29tcG9uZW50IGluc3RhbmNlXG4gICAgICAgICAgICBpZiAoKHRoaXMud2lkZ2V0UHJvcHMuZ2V0KGspIHx8IGlzU3R5bGUoaykpICYmIGsgIT09ICduYW1lJykge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0W2tdID0gdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaW5pdFN0YXRlLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuaW5pdFN0YXRlID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMucmVhZHlTdGF0ZS5uZXh0KG51bGwpO1xuICAgICAgICB0aGlzLnJlYWR5U3RhdGUuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUsIGlmIGEgbGlzdGVuZXIgcmVnaXN0ZXJlZCBmb3IgdGhlIGdpdmVuIGV2ZW50IG9uIHRoaXMgd2lkZ2V0IG1hcmt1cC5cbiAgICAgKiBAcGFyYW0gZXZlbnROYW1lXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGhhc0V2ZW50Q2FsbGJhY2soZXZlbnROYW1lKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV2ZW50SGFuZGxlcnMuaGFzKGV2ZW50TmFtZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZm9jdXMgb24gdGhlIHdpZGdldFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENoZWNrIGZvciB0aGUgbm9kZXMgaGF2aW5nIGZvY3VzLXRhcmdldCBhdHRyaWJ1dGUgaW5zaWRlIHRoZSBlbGVtZW50XG4gICAgICAgICAqIElmIGZvdW5kLCBmb2N1cyB0aGUgZmlyc3Qgbm9kZSAoZWcsIGRhdGUgd2lkZ2V0KVxuICAgICAgICAgKiBlbHNlLCBmb2N1cyB0aGUgZWxlbWVudCAoZWcsIHRleHQgd2lkZ2V0KVxuICAgICAgICAgKi9cbiAgICAgICAgbGV0ICR0YXJnZXQgPSB0aGlzLiRlbGVtZW50WzBdLnF1ZXJ5U2VsZWN0b3IoJ1tmb2N1cy10YXJnZXRdJyk7XG4gICAgICAgIGlmICghJHRhcmdldCkge1xuICAgICAgICAgICAgJHRhcmdldCA9IHRoaXMuJGVsZW1lbnRbMF07XG4gICAgICAgIH1cbiAgICAgICAgJHRhcmdldC5mb2N1cygpO1xuICAgIH1cblxuICAgIC8vIERlZmluaW5nIHRoZSBleGVjdXRlIG1ldGhvZCBvbiBCYXNlQ29tcG9uZW50LiBJZiBkYXRhc2V0IGlzIGJpbmRlZCB0byB3aWRnZXRzIG91cHR1dCB0aGVuIGRhdGFzb3VyY2UuZXhlY3V0ZSB3aWxsIGJlIGRlZmluZWRcbiAgICBwcm90ZWN0ZWQgZXhlY3V0ZShvcGVyYXRpb24sIG9wdGlvbnMpOiBhbnkge1xuXG4gICAgfVxuXG4gICAgcHVibGljIG11dGUoKSB7XG4gICAgICAgIHRoaXMuaXNNdXRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIHVubXV0ZSgpIHtcbiAgICAgICAgdGhpcy5pc011dGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY3VzdG9tSW5qZWN0b3JNYXA6IGFueSA9IHt9O1xuICAgIGNyZWF0ZUN1c3RvbUluamVjdG9yKGNvbnRleHRLZXk6IHN0cmluZywgY29udGV4dDogYW55KSB7XG4gICAgICAgIGlmKHRoaXMuY3VzdG9tSW5qZWN0b3JNYXBbY29udGV4dEtleV0pIHtcbiAgICAgICAgICAgIGlmKCB0aGlzLmN1c3RvbUluamVjdG9yTWFwW2NvbnRleHRLZXldLmNvbnRleHQgPT09IGNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21JbmplY3Rvck1hcFtjb250ZXh0S2V5XS5pbmplY3RvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmN1c3RvbUluamVjdG9yTWFwW2NvbnRleHRLZXldO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluaiA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgICAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6ICdFWFBMSUNJVF9DT05URVhUJywgdXNlVmFsdWU6IGNvbnRleHQgfV0sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmN1c3RvbUluamVjdG9yTWFwW2NvbnRleHRLZXldID0ge1xuICAgICAgICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgICAgICAgIGluamVjdG9yOiBpbmpcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5qO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFmdGVyIHRoZSBob3N0IHBhZ2UgaXMgYXR0YWNoZWQgZnJvbSBjYWNoZSwgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuXG4gICAgICovXG4gICAgcHVibGljIG5nT25BdHRhY2goKSB7XG4gICAgICAgIHRoaXMuaXNBdHRhY2hlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQmVmb3JlIHRoZSBob3N0IHBhZ2UgaXMgZGV0YWNoZWQgZnJvbSBkb20gYW5kIHN0b3JlZCBpbiBjYWNoZSwgIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uRGV0YWNoKCkge1xuICAgICAgICB0aGlzLmlzQXR0YWNoZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBuYXRpdmVFbGVtZW50IHdpbGwgYmUgYXZhaWxhYmxlIGJ5IHRoaXMgdGltZVxuICAgICAqIGlmIHRoZSBkZWxheUluaXQgaXMgZmFsc2UsIHByb3BlcnRpZXMgbWV0YSB3aWxsIGJlIGF2YWlsYWJsZSBieSB0aGlzIHRpbWVcbiAgICAgKiBJbnZva2UgdGhlIHNldEluaXRQcm9wcyBpZiB0aGUgZGVsYXlJbml0IGlzIGZhbHNlXG4gICAgICovXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5kZWxheWVkSW5pdCkge1xuICAgICAgICAgICAgdGhpcy5zZXRJbml0UHJvcHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIHRoZSBldmVudHNcbiAgICAgKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnRvQmVTZXR1cEV2ZW50c1F1ZXVlLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBmbiBvZiB0aGlzLnRvQmVTZXR1cEV2ZW50c1F1ZXVlKSB7XG4gICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRvQmVTZXR1cEV2ZW50c1F1ZXVlLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuaXNBdHRhY2hlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge31cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmlzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy53aWRnZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLnN0eWxlQ2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMucHJvcGVydHlDaGFuZ2UuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95LmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuaXNBdHRhY2hlZCA9IGZhbHNlO1xuICAgIH1cbn1cbiJdfQ==
|
|
640
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL2Jhc2Uvc3JjL3dpZGdldHMvY29tbW9uL2Jhc2UvYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLFVBQVUsRUFDVixRQUFRLEVBR1IsUUFBUSxFQUNSLGdCQUFnQixFQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFNUMsT0FBTyxFQUNILGVBQWUsRUFDZixXQUFXLEVBQ1gsUUFBUSxFQUNSLE1BQU0sRUFDTixRQUFRLEVBQ1IsR0FBRyxFQUNILFVBQVUsRUFDVixTQUFTLEVBQ1QsV0FBVyxFQUNYLFVBQVUsRUFDVixXQUFXLEVBQ1gsT0FBTyxFQUNQLE1BQU0sRUFDTixhQUFhLEVBQ2IsV0FBVyxFQUNkLE1BQU0sVUFBVSxDQUFDO0FBRWxCLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsUUFBUSxFQUFFLFlBQVksRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBaUIsT0FBTyxFQUFpQixZQUFZLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMzRixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUMsWUFBWSxFQUFFLFVBQVUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ25FLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FB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Q0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEIsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWU7UUFDWCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQyxLQUFLLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUN6QyxFQUFFLEVBQUUsQ0FBQztZQUNULENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUVELGtCQUFrQixLQUFJLENBQUM7SUFFdkIsV0FBVztRQUNQLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDOzhFQTl1QmlCLGFBQWEsd0NBZ0luQixZQUFZLGVBQ1osa0JBQWtCO3VFQWpJWixhQUFhLFdBQWIsYUFBYTs7aUZBQWIsYUFBYTtjQURsQyxVQUFVOztzQkFpSUYsTUFBTTt1QkFBQyxZQUFZOztzQkFDbkIsTUFBTTt1QkFBQyxrQkFBa0I7O3NCQUFHLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdCxcbiAgICBpbmplY3QsXG4gICAgSW5qZWN0YWJsZSxcbiAgICBJbmplY3RvcixcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0V2ZW50TWFuYWdlcn0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbmltcG9ydCB7UmVwbGF5U3ViamVjdCwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gICAgJGludm9rZVdhdGNoZXJzLFxuICAgICRwYXJzZUV2ZW50LFxuICAgICR1bndhdGNoLFxuICAgICR3YXRjaCxcbiAgICBhZGRDbGFzcyxcbiAgICBBcHAsXG4gICAgZmluZFBhcmVudCxcbiAgICBpc0RlZmluZWQsXG4gICAgaXNNb2JpbGVBcHAsXG4gICAgcmVtb3ZlQXR0cixcbiAgICByZW1vdmVDbGFzcyxcbiAgICBzZXRBdHRyLFxuICAgIHNldENTUyxcbiAgICBzZXRDU1NGcm9tT2JqLFxuICAgIHN3aXRjaENsYXNzXG59IGZyb20gJ0B3bS9jb3JlJztcblxuaW1wb3J0IHtnZXRXaWRnZXRQcm9wc0J5VHlwZX0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL3dpZGdldC1wcm9wcyc7XG5pbXBvcnQge2lzU3R5bGV9IGZyb20gJy4uLy4uL2ZyYW1ld29yay9zdHlsZXInO1xuaW1wb3J0IHtyZWdpc3RlciwgcmVuYW1lV2lkZ2V0fSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvd2lkZ2V0LXJlZ2lzdHJ5JztcbmltcG9ydCB7Q2hhbmdlTGlzdGVuZXIsIENvbnRleHQsIElXaWRnZXRDb25maWcsIFdpZGdldENvbmZpZ30gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL3R5cGVzJztcbmltcG9ydCB7d2lkZ2V0SWRHZW5lcmF0b3J9IGZyb20gJy4uLy4uL2ZyYW1ld29yay93aWRnZXQtaWQtZ2VuZXJhdG9yJztcbmltcG9ydCB7RElTUExBWV9UWVBFLCBFVkVOVFNfTUFQfSBmcm9tICcuLi8uLi9mcmFtZXdvcmsvY29uc3RhbnRzJztcbmltcG9ydCB7V2lkZ2V0UHJveHlQcm92aWRlcn0gZnJvbSAnLi4vLi4vZnJhbWV3b3JrL3dpZGdldC1wcm94eS1wcm92aWRlcic7XG5pbXBvcnQge2dldFdhdGNoSWRlbnRpZmllcn0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvd2lkZ2V0LXV0aWxzJztcbmltcG9ydCB7Y2FtZWxDYXNlLCBleHRlbmQsIGZvckVhY2gsIGlzQXJyYXksIGlzT2JqZWN0LCBqb2luLCBtYXB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuZGVjbGFyZSBjb25zdCAkO1xuXG4vLyBHZXRzIGxpc3Qgb2YgY2xhc3NlcyB0byBhZGQgYW5kIHJlbW92ZSBhbmQgYXBwbGllcyBvbiB0aGUgJGVsXG5jb25zdCB1cGRhdGVDbGFzc2VzID0gKHRvQWRkLCB0b1JlbW92ZSwgZWwpID0+IHtcbiAgICBpZiAodG9SZW1vdmUgJiYgdG9SZW1vdmUubGVuZ3RoKSB7XG4gICAgICAgIHJlbW92ZUNsYXNzKGVsLCBqb2luKHRvUmVtb3ZlLCAnICcpKTtcbiAgICB9XG4gICAgaWYgKHRvQWRkICYmIHRvQWRkLmxlbmd0aCkge1xuICAgICAgICBhZGRDbGFzcyhlbCwgam9pbih0b0FkZCwgJyAnKSk7XG4gICAgfVxufTtcblxuLy8gVG8gYWRkIGFuZCByZW1vdmUgc3R5bGVzIG9uIHRoZSAkZWxcbmNvbnN0IHVwZGF0ZVN0eWxlcyA9IChudiwgb3YsIGVsKSA9PiB7XG4gICAgaWYgKG92ICYmIGlzT2JqZWN0KG92KSkge1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob3YgfHwge30pO1xuICAgICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgICBzZXRDU1MoZWwsIGtleSwgJycpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKG52ICYmIGlzT2JqZWN0KG52KSkge1xuICAgICAgICBzZXRDU1NGcm9tT2JqKGVsLCBudik7XG4gICAgfVxuXG59O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0IHtcblxuICAgIC8qKlxuICAgICAqIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgd2lkZ2V0XG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHdpZGdldElkOiBhbnk7XG5cbiAgICBwdWJsaWMgaXNEZXN0cm95ZWQ6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgaXNBdHRhY2hlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogalF1ZXJ5IG5hdGl2ZUVsZW1lbnQgcmVmZXJlbmNlIG9mIHRoZSBjb21wb25lbnQgcm9vdFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgJGVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiAkKHRoaXMubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRE9NIG5vZGUgcmVmZXJlbmNlIG9mIHRoZSBjb21wb25lbnQgcm9vdFxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBuYXRpdmVFbGVtZW50OiBIVE1MRWxlbWVudDtcblxuICAgIC8qKlxuICAgICAqIFR5cGUgb2YgdGhlIGNvbXBvbmVudFxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSB3aWRnZXRUeXBlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBNb3N0IG9mIHRoZSBjYXNlcyBpdCBpcyBzYW1lIGFzIHdpZGdldFR5cGVcbiAgICAgKiBmb3Igc3BlY2lmaWMgd2lkZ2V0cyBsaWtlIGNoYXJ0cyB3aWRnZXRUeXBlIGNhbiBiZSB3bS1jaGFydCB3aGVyZSBhcyB0aGUgc3VidHlwZSBjYW4gYmUgd20tYmFyLWNoYXJ0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHdpZGdldFN1YlR5cGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFByb3h5IGZvciB0aGUgY29tcG9uZW50IGluc3RhbmNlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCB3aWRnZXQ6IGFueTtcblxuICAgIC8qKlxuICAgICAqIFZpZXcgcGFyZW50IGNvbXBvbmVudFxuICAgICAqIGVnLCBQYWdlLCBQYXJ0aWFsLCBQcmVmYWJcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdmlld1BhcmVudDogYW55O1xuXG4gICAgLyoqXG4gICAgICogRXZlbnRNYW5nZXIgdG8gYWRkL3JlbW92ZSBldmVudHNcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZXZlbnRNYW5hZ2VyOiBFdmVudE1hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBBcHAgTG9jYWxlXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGFwcExvY2FsZTogYW55O1xuXG4gICAgLyoqXG4gICAgICogU3R5bGUgY2hhbmdlIHN1YmplY3QgYW5kIG9ic2VydmFibGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0eWxlQ2hhbmdlID0gbmV3IFJlcGxheVN1YmplY3QoKTtcblxuICAgIC8qKlxuICAgICAqIFByb3BlcnR5IGNoYW5nZSBzdWJqZWN0IGFuZCBvYnNlcnZhYmxlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9wZXJ0eUNoYW5nZSA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICAvKipcbiAgICAgKiBPbiBSZWFkeSBTdGF0ZSBjaGFuZ2Ugc3ViamVjdCBhbmQgb2JzZXJ2YWJsZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVhZHlTdGF0ZSA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICAvKipcbiAgICAgKiBDb21wb25lbnQgZGVzdHJveSBzdWJqZWN0IGFuZCBvYnNlcnZhYmxlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95ID0gbmV3IFN1YmplY3QoKTtcblxuICAgIC8qKlxuICAgICAqIE1hcCBvZiBldmVudCBoYW5kbGVyIGNhbGxiYWNrc1xuICAgICAqL1xuICAgIHByaXZhdGUgZXZlbnRIYW5kbGVycyA9IG5ldyBNYXA8c3RyaW5nLCB7Y2FsbGJhY2s6IEZ1bmN0aW9uLCBsb2NhbHM6IGFueX0+KCk7XG5cbiAgICAvKipcbiAgICAgKiBjb250ZXh0IG9mIHRoZSB3aWRnZXRcbiAgICAgKiB3aGVuIHRoZSB3aWRnZXQgaXMgcHJlc2V0IGluc2lkZSBhIHJlcGVhdGVyIHRoaXMgY29udGV4dCB3aWxsIGhhdmUgdGhlIHJlcGVhdGVyIHJlbGF0ZWQgcHJvcGVydGllc1xuICAgICAqL1xuICAgIHB1YmxpYyBjb250ZXh0OiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsIHN0YXRlIG9mIHRoZSB3aWRnZXQuXG4gICAgICogV2lsbCBiZSB1bmRlZmluZWQgb25jZSB0aGUgaW5pdGlhbCBwcm9wZXJ0aWVzIGFyZSBzZXQgb24gdG8gdGhlIGNvbXBvbmVudFxuICAgICAqL1xuICAgIHByaXZhdGUgaW5pdFN0YXRlOiBNYXA8c3RyaW5nLCBhbnk+O1xuXG4gICAgLyoqXG4gICAgICogSW50ZXJuYWwgZmxhZyB0byBkZXRlcm1pbmUgd2hldGhlciB0byB3YWl0IGZvciB0aGUgd2lkZ2V0IGluaXRpYWxpemF0aW9uIG9yIG5vdFxuICAgICAqIElmIHRoZSBpbml0UHJvbWlzZSBpcyBwcm92aWRlZCBpbiB0aGUgY29uc3RydWN0aW9uIHdhaXQgdGlsbCB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZFxuICAgICAqIElmIHRoZSBpbml0UHJvbWlzZSBpcyBub3QgcHJvdmlkZWQgcHJvY2VlZCB3aXRoIHRoZSBpbml0aWFsaXphdGlvbiwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWxheWVkSW5pdDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIERpc3BsYXkgdHlwZSBvZiB0aGUgY29tcG9uZW50LiBlZywgYmxvY2soRGVmYXVsdCksIGlubGluZS1ibG9jaywgaW5saW5lIGV0Y1xuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlzcGxheVR5cGU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBldmVudCByZWdpc3RyYXRpb24gZnVuY3Rpb25zLlxuICAgICAqIHRoZXNlIGZ1bmN0aW9ucyBuZWVkcyB0byBiZSBleGVjdXRlZCBhZnRlciBvblZpZXdJbml0XG4gICAgICovXG4gICAgcHJpdmF0ZSB0b0JlU2V0dXBFdmVudHNRdWV1ZTogQXJyYXk8RnVuY3Rpb24+ID0gW107XG5cbiAgICBwdWJsaWMgX19jbG9uZWFibGVfXyA9IGZhbHNlO1xuXG4gICAgcHVibGljIHdpZGdldFByb3BzOiBNYXA8c3RyaW5nLCBhbnk+O1xuXG4gICAgcHJpdmF0ZSAkYXR0cnMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gICAgcHJpdmF0ZSBpc011dGVkID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZjtcbiAgICBwdWJsaWMgdmlld1BhcmVudEFwcDogQXBwO1xuICAgIC8qKlxuICAgICAqIFRvIGF2b2lkIHJlLXJlbmRlcmluZyBvZiB3aWRnZXQsIHBhc3NpbmcgdW5pcXVlIGlkIGFzIGNvbnRleHRLZXkgdG8gY3JlYXRlQ3VzdG9tSW5qZWN0b3JcbiAgICAgKiAoZm9yIExpc3QsIER5bmFtaWMgVGFicywgQWNjb3JkaW9uLCBOYXYsIENhcm91c2VsKVxuICAgICAqL1xuICAgIHB1YmxpYyB0cmFja0lkOiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBpbmo6IEluamVjdG9yLFxuICAgICAgICBASW5qZWN0KFdpZGdldENvbmZpZykgY29uZmlnOiBJV2lkZ2V0Q29uZmlnLFxuICAgICAgICBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnksXG4gICAgICAgIGluaXRQcm9taXNlPzogUHJvbWlzZTxhbnk+IC8vIFByb21pc2Ugb24gd2hpY2ggdGhlIGluaXRpYWxpemF0aW9uIGhhcyB0byB3YWl0XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWYgPSBpbmouZ2V0KEVsZW1lbnRSZWYpO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIC8vbWFraW5nIHRoZSBjb2RlIGNvbXBhdGlibGUgaW4gYm90aCB0aGUgSklUIGFuZCBBT1QgbW9kZXNcbiAgICAgICAgdGhpcy52aWV3UGFyZW50QXBwID0gaW5qID8gaW5qLmdldChBcHApIDogaW5qZWN0KEFwcCk7XG4gICAgICAgIHRoaXMud2lkZ2V0VHlwZSA9IGNvbmZpZy53aWRnZXRUeXBlO1xuICAgICAgICB0aGlzLndpZGdldFN1YlR5cGUgPSBjb25maWcud2lkZ2V0U3ViVHlwZSB8fCBjb25maWcud2lkZ2V0VHlwZTtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmID0gaW5qLmdldChWaWV3Q29udGFpbmVyUmVmKTtcbiAgICAgICAgLy8gdGhpcy52aWV3UGFyZW50ID0gKGluaiBhcyBhbnkpLnZpZXcuY29tcG9uZW50O1xuICAgICAgICAvLyB0aGlzLnZpZXdQYXJlbnQgPSAodGhpcy52aWV3Q29udGFpbmVyUmVmIGFzIGFueSkucGFyZW50SW5qZWN0b3IuX2xWaWV3WzhdO1xuICAgICAgICAvLyB0aGlzLnZpZXdQYXJlbnQgPSBfdmlld1BhcmVudCB8fCAodGhpcy52aWV3Q29udGFpbmVyUmVmIGFzIGFueSkucGFyZW50SW5qZWN0b3IuX2xWaWV3WzhdO1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvbWFpbi9wYWNrYWdlcy9jb3JlL3NyYy9yZW5kZXIzL2ludGVyZmFjZXMvdmlldy50c1xuXG4gICAgICAgIGxldCBsVmlldyA9ICh0aGlzLmluaiBhcyBhbnkpLl9sVmlldztcbiAgICAgICAgdGhpcy52aWV3UGFyZW50ID0gZmluZFBhcmVudChsVmlldywgdGhpcy52aWV3UGFyZW50QXBwKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcIi0tLSoqKioqKioqKioqKiotLWNvbnRleHQtLSoqKioqKioqKioqKiotLS1cIiwgbFZpZXdbOF0pO1xuICAgICAgICB0aGlzLmNvbnRleHQgPSAodGhpcy5pbmogYXMgYW55KS5fbFZpZXdbOF07XG5cbiAgICAgICAgdGhpcy5kaXNwbGF5VHlwZSA9IGNvbmZpZy5kaXNwbGF5VHlwZSB8fCBESVNQTEFZX1RZUEUuQkxPQ0s7XG4gICAgICAgIC8vIHRoaXMuY29udGV4dCA9IChpbmogYXMgYW55KS52aWV3LmNvbnRleHQ7XG4gICAgICAgIC8vIHRoaXMuY29udGV4dCA9ICh0aGlzLnZpZXdDb250YWluZXJSZWYgYXMgYW55KS5faG9zdExWaWV3LmRlYnVnLmNvbnRleHQ7XG4gICAgICAgIC8vIGxldCBoYXNJbXBsaWNpdENvbnRleHQgPSAodGhpcy52aWV3Q29udGFpbmVyUmVmIGFzIGFueSkuX2hvc3RMVmlldy5maW5kKHQgPT4gdCAmJiAhIXQuJGltcGxpY2l0KTtcbiAgICAgICAgLy8gd2hlbiAkaW1wbGljaXQgaXMgbm90IGF2YWlsYWJsZSwgdGhpcyBvYmplY3QgY29udGFpbnMgc29tZSBuZ0ZvciBjb250ZXh0IG9yIGxpc3RpdGVtIGNvbnRleHQgb2YgdGhlIHdpZGdldCB0aGVuXG4gICAgICAgIC8vIHdlIHVzZSB0aGUgZGlyZWN0IHBhcmVudCBmb3IgZXhhbXBsZTogbmF2IGNvbXBvbmVudCBpcyB0aGUgcGFyZW50IGZvciBhbmNob3IgPT4gYW5jaG9yIGdldHMgdmlld1BhcmVudCBhcyBOYXZcbiAgICAgICAgLy8gSW4gb3RoZXIgY2FzZSwgd2hlcmUgd2UgaGF2ZSBpbXBsaWNpdENvbnRleHQgdGhlcmUgd2UgY2FuIG1ha2UgdXNlIG9mIHBhZ2UvYXBwIGxldmVsIGNvbnRleHQgaGVuY2Ugdmlld1BhcmVudC52aWV3UGFyZW50IHRvIGdldCBwYWdlIGxldmVsIGNvbnRleHRcbiAgICAgICAgLyppZiAoaGFzSW1wbGljaXRDb250ZXh0ICYmIHRoaXMudmlld1BhcmVudC52aWV3UGFyZW50KSB7XG4gICAgICAgICAgICBpZiAodGhpcy52aWV3UGFyZW50LndpZGdldFR5cGUgIT09ICd3bS1jYXJkJyAmJiB0aGlzLnZpZXdQYXJlbnQud2lkZ2V0VHlwZSAhPT0gJ3dtLWlmcmFtZWRpYWxvZydcbiAgICAgICAgICAgICAgICAmJiB0aGlzLnZpZXdQYXJlbnQud2lkZ2V0VHlwZSAhPT0gJ3dtLXBhcnRpYWxkaWFsb2cnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3UGFyZW50ID0gdGhpcy52aWV3UGFyZW50LnZpZXdQYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoYXNJbXBsaWNpdENvbnRleHQgfHwgKCF0aGlzLnZpZXdQYXJlbnQud2lkZ2V0VHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dCA9ICh0aGlzLnZpZXdDb250YWluZXJSZWYgYXMgYW55KS5faG9zdExWaWV3LmZpbmQodCA9PiB0ICYmICEhdC4kaW1wbGljaXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gKHRoaXMudmlld0NvbnRhaW5lclJlZiBhcyBhbnkpLnBhcmVudEluamVjdG9yLl9sVmlld1s4XTtcbiAgICAgICAgfSovXG5cbiAgICAgICAgLyppZihfdmlld1BhcmVudCAmJiAhaGFzSW1wbGljaXRDb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQgPSAodGhpcy52aWV3Q29udGFpbmVyUmVmIGFzIGFueSkuX2hvc3RMVmlld1s4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IGhhc0ltcGxpY2l0Q29udGV4dDtcbiAgICAgICAgfSovXG4gICAgICAgIC8vIGlmIChbJ3dtLWxpc3QnLCAnd20tbmF2J10uaW5jbHVkZXModGhpcy52aWV3UGFyZW50LndpZGdldFR5cGUpIHx8IFsnd20tY2Fyb3VzZWwtdGVtcGxhdGUnLCAnd20tY2FyZCddLmluY2x1ZGVzKHRoaXMud2lkZ2V0VHlwZSkpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuY29udGV4dCA9ICh0aGlzLnZpZXdDb250YWluZXJSZWYgYXMgYW55KS5faG9zdExWaWV3LmRlYnVnLmNvbnRleHQ7XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICB0aGlzLmNvbnRleHQgPSAodGhpcy52aWV3Q29udGFpbmVyUmVmIGFzIGFueSkucGFyZW50SW5qZWN0b3IuX2xWaWV3WzhdO1xuICAgICAgICAvLyB9XG4gICAgICAgIHRoaXMud2lkZ2V0ID0gdGhpcy5jcmVhdGVQcm94eSgpO1xuICAgICAgICB0aGlzLmV2ZW50TWFuYWdlciA9IGluai5nZXQoRXZlbnRNYW5hZ2VyKTtcbiAgICAgICAgKHRoaXMubmF0aXZlRWxlbWVudCBhcyBhbnkpLndpZGdldCA9IHRoaXMud2lkZ2V0O1xuXG4gICAgICAgIHRoaXMuYXBwTG9jYWxlID0gaW5qLmdldChBcHApLmFwcExvY2FsZSB8fCB7fTtcblxuICAgICAgICB0aGlzLmluaXRDb250ZXh0KCk7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5ob3N0Q2xhc3MpIHtcbiAgICAgICAgICAgIGFkZENsYXNzKHRoaXMubmF0aXZlRWxlbWVudCwgY29uZmlnLmhvc3RDbGFzcyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLndpZGdldElkID0gdGhpcy5nZW5lcmF0ZVdpZGdldElkKCk7XG4gICAgICAgIHRoaXMudHJhY2tJZCA9IHRoaXMuZ2VuZXJhdGVXaWRnZXRJZCgpO1xuICAgICAgICBzZXRBdHRyKHRoaXMubmF0aXZlRWxlbWVudCwgJ3dpZGdldC1pZCcsIHRoaXMud2lkZ2V0SWQsIHRydWUpO1xuXG4gICAgICAgIC8vIHJlZ2lzdGVyIGRlZmF1bHQgcHJvcGVydHkgY2hhbmdlIGhhbmRsZXIgYW5kIHN0eWxlIGNoYW5nZSBoYW5kbGVyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJTdHlsZUNoYW5nZUxpc3RlbmVyKHRoaXMub25TdHlsZUNoYW5nZSwgdGhpcyk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJQcm9wZXJ0eUNoYW5nZUxpc3RlbmVyKHRoaXMub25Qcm9wZXJ0eUNoYW5nZSwgdGhpcyk7XG5cbiAgICAgICAgLy8gaWYgdGhlIGluaXRQcm9taXNlIGlzIHByb3ZpZGVkLCB3YWl0IHRpbGwgdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgdG8gcHJvY2VlZCB3aXRoIHRoZSB3aWRnZXQgaW5pdGlhbGl6YXRpb25cbiAgICAgICAgaWYgKCFpbml0UHJvbWlzZSkge1xuICAgICAgICAgICAgdGhpcy5pbml0V2lkZ2V0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlbGF5ZWRJbml0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGluaXRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFdpZGdldCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5pdFByb3BzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZihleHBsaWNpdENvbnRleHQpIHtcbiAgICAgICAgICAgIGV4dGVuZCh0aGlzLmNvbnRleHQsIGV4cGxpY2l0Q29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TmF0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFdpZGdldFR5cGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0VHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0V2lkZ2V0U3ViVHlwZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy53aWRnZXRTdWJUeXBlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRXaWRnZXQoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRQcm9wZXJ0eShwcm9wTmFtZSwgcHJvcFZhbHVlKSB7XG4gICAgICAgIHRoaXMud2lkZ2V0W3Byb3BOYW1lXSA9IHByb3BWYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Vmlld1BhcmVudCgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy52aWV3UGFyZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBub3RpZnlTdHlsZUNoYW5nZShrZXk6IHN0cmluZywgbnY6IGFueSwgb3Y6IGFueSkge1xuICAgICAgICB0aGlzLnN0eWxlQ2hhbmdlLm5leHQoe2tleSwgbnYsIG92fSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5vdGlmeVByb3BlcnR5Q2hhbmdlKGtleTogc3RyaW5nLCBudjogYW55LCBvdjogYW55KSB7XG4gICAgICAgIHRoaXMucHJvcGVydHlDaGFuZ2UubmV4dCh7a2V5LCBudiwgb3Z9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJTdHlsZUNoYW5nZUxpc3RlbmVyKGZuOiBDaGFuZ2VMaXN0ZW5lciwgY3R4PzogYW55KSB7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgIGZuID0gZm4uYmluZChjdHgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3R5bGVDaGFuZ2Uuc3Vic2NyaWJlKCh7a2V5LCBudiwgb3Z9KSA9PiBmbihrZXksIG52LCBvdikpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlclJlYWR5U3RhdGVMaXN0ZW5lcihmbjogRnVuY3Rpb24sIGN0eD86IGFueSkge1xuICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICBmbiA9IGZuLmJpbmQoY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlYWR5U3RhdGUuc3Vic2NyaWJlKCgpID0+IGZuKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3RlclByb3BlcnR5Q2hhbmdlTGlzdGVuZXIoZm46IENoYW5nZUxpc3RlbmVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgZm4gPSBmbi5iaW5kKGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9wZXJ0eUNoYW5nZS5zdWJzY3JpYmUoKHtrZXksIG52LCBvdn0pID0+IGZuKGtleSwgbnYsIG92KSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKGZuOiBGdW5jdGlvbiwgY3R4PzogYW55KSB7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgIGZuID0gZm4uYmluZChjdHgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVzdHJveS5zdWJzY3JpYmUoKCkgPT4ge30sICgpID0+IHt9LCAoKSA9PiBmbigpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGlzcGxheVR5cGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheVR5cGU7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVByb3h5KCk6IGFueSB7XG4gICAgICAgIHJldHVybiBXaWRnZXRQcm94eVByb3ZpZGVyLmNyZWF0ZSh0aGlzLCB0aGlzLndpZGdldFN1YlR5cGUsIGdldFdpZGdldFByb3BzQnlUeXBlKHRoaXMud2lkZ2V0U3ViVHlwZSkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpbml0Q29udGV4dCgpIHtcbiAgICAgICAgLy8gY29uc3QgY29udGV4dCA9ICh0aGlzLmluaiBhcyBhbnkpLnZpZXcuY29udGV4dDtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dCB8fCB7fTtcblxuICAgICAgICBjb25zdCBwYXJlbnRDb250ZXh0cyA9IHRoaXMuaW5qLmdldChDb250ZXh0LCB7fSk7XG5cbiAgICAgICAgLy8gYXNzaWduIHRoZSBjb250ZXh0IHByb3BlcnR5IGFjY29yZGluZ2x5XG4gICAgICAgIGlmICh0aGlzLnZpZXdQYXJlbnQgIT09IGNvbnRleHQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJlbnRDb250ZXh0cykge1xuICAgICAgICAgICAgbGV0IHBhcmVudENvbnRleHRPYmogPSB7fTtcbiAgICAgICAgICAgIGlmIChpc0FycmF5KHBhcmVudENvbnRleHRzKSkge1xuICAgICAgICAgICAgICAgIGZvckVhY2gocGFyZW50Q29udGV4dHMsIChjb250ZXh0T2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocGFyZW50Q29udGV4dE9iaiwgY29udGV4dE9iaik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcmVudENvbnRleHRPYmogPSBwYXJlbnRDb250ZXh0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IE9iamVjdC5hc3NpZ24oe30sIHBhcmVudENvbnRleHRPYmosIHRoaXMuY29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXQgdGhlIHZhbHVlIG9uIHRoZSBwcm94eSBvYmplY3QgaWUsIHdpZGdldFxuICAgICAqIHNldHRpbmcgdGhlIHByb3BlcnR5IG9uIHRoZSBwcm94eSB3aWxsIGludm9rZSB0aGUgY2hhbmdlIGxpc3RlbmVyc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0V2lkZ2V0UHJvcGVydHkoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy53aWRnZXRba2V5XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBdHRyKGF0dHJOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy4kYXR0cnMuZ2V0KGF0dHJOYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIGFwcCBpbnN0YW5jZVxuICAgICAqIEByZXR1cm5zIHtBcHB9XG4gICAgICovXG4gICAgcHVibGljIGdldEFwcEluc3RhbmNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmouZ2V0KEFwcCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgdW5pcXVlIGlkXG4gICAgICogRGVmYXVsdCBwYXR0ZXJuIGlzIGB3aWRnZXQtaWQtJHtpZH1gXG4gICAgICogQ29tcG9uZW50cyBjYW4gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gZ2VuZXJhdGUgYSBkaWZmZXJlbnQgaWQgZWcsIGJhci1jaGFydC0xXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdlbmVyYXRlV2lkZ2V0SWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHdpZGdldElkR2VuZXJhdG9yLm5leHRVaWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIHRoZSBjb21tb24gZnVuY3Rpb25hbGl0eSBhY3Jvc3MgdGhlIGNvbXBvbmVudHNcbiAgICAgKiBlZyxcbiAgICAgKiAgMS4gdmFsdWUgb2YgdGhlIGNsYXNzIHByb3BlcnR5IHdpbGwgYmUgYXBwbGllZCBvbiB0aGUgaG9zdCBlbGVtZW50XG4gICAgICogIDIuIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBzaG93IHByb3BlcnR5IGNvbXBvbmVudCBpcyBzaG93bi9oaWRkZW5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICAgKiBAcGFyYW0gbnZcbiAgICAgKiBAcGFyYW0gb3ZcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnY6IGFueSwgb3Y/OiBhbnkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ3Nob3cnKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuaGlkZGVuID0gIW52O1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2hpbnQnKSB7XG4gICAgICAgICAgICBpZiAoIWlzTW9iaWxlQXBwKCkpIHtcbiAgICAgICAgICAgICAgICBzZXRBdHRyKHRoaXMubmF0aXZlRWxlbWVudCwgJ3RpdGxlJywgbnYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2NsYXNzJykge1xuICAgICAgICAgICAgc3dpdGNoQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCBudiwgb3YpO1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG52Lm1hdGNoKC8oXFxXfF4pKGgoWzAtNl0pKSg/PVxcc3wkKS8pO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHNldEF0dHIodGhpcy5uYXRpdmVFbGVtZW50LCAncm9sZScsICdoZWFkaW5nJyk7XG4gICAgICAgICAgICAgICAgc2V0QXR0cih0aGlzLm5hdGl2ZUVsZW1lbnQsICdhcmlhLWxldmVsJywgcmVzdWx0WzNdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICduYW1lJyB8fCBrZXkgPT09ICd0YWJpbmRleCcpIHtcbiAgICAgICAgICAgIHNldEF0dHIodGhpcy5uYXRpdmVFbGVtZW50LCBrZXksIG52KTtcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICduYW1lJyAmJiBudikge1xuICAgICAgICAgICAgICAgIHJlbmFtZVdpZGdldCh0aGlzLnZpZXdQYXJlbnQsIHRoaXMud2lkZ2V0LCBudiwgb3YpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2NvbmRpdGlvbmFsY2xhc3MnKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgY2xhc3NlcyBpZiBvbGQgYW5kIG52IHZhbHVlIGFyZSBkaWZmZXJlbnRcbiAgICAgICAgICAgIHVwZGF0ZUNsYXNzZXMobnYudG9BZGQsIG52LnRvUmVtb3ZlLCB0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9IGVsc2UgIGlmIChrZXkgPT09ICdhdXRvcGxheScpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhZ05hbWUgPSB0aGlzLndpZGdldFR5cGUgPT09ICd3bS1hdWRpbycgPyAnYXVkaW8nIDogJ3ZpZGVvJztcbiAgICAgICAgICAgIC8vIFRyaWdnZXIgbWVkaWEoYXVkaW8vdmlkZW8pIGVsZW1lbnQgbG9hZCBtZXRob2QgYWZ0ZXIgY2hhbmdpbmcgYXV0b3BsYXkgcHJvcGVydHlcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKHRhZ05hbWUpLmxvYWQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdjb25kaXRpb25hbHN0eWxlJykge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHN0eWxlcyBpZiBvbGQgYW5kIG52IHZhbHVlIGFyZSBkaWZmZXJlbnRcbiAgICAgICAgICAgIHVwZGF0ZVN0eWxlcyhudiwgb3YsIHRoaXMubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnYW5pbWF0aW9uJykge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHN0eWxlcyBpZiBvbGQgYW5kIG52IHZhbHVlIGFyZSBkaWZmZXJlbnRcbiAgICAgICAgICAgIGFkZENsYXNzKHRoaXMubmF0aXZlRWxlbWVudCwgXCJhbmltYXRlZCBcIiArIG52KTtcbiAgICAgICAgfSAgZWxzZSBpZiAoa2V5ID09PSAnZGlzYWJsZWQnKSB7XG4gICAgICAgICAgICAvLyBXTVMtMTkzMjE6IEluIElFLCB3aWRnZXQgaXMgaW4gZGlzYWJsZWQgc3RhdGUgd2hlbiBkaXNhYmxlZD1cImZhbHNlXCIgYXR0cmlidXRlIGlzIHByZXNlbnRcbiAgICAgICAgICAgIChudiA9PT0gdHJ1ZSkgPyBzZXRBdHRyKHRoaXMubmF0aXZlRWxlbWVudCwgJ2Rpc2FibGVkJywgJ3RydWUnLCB0cnVlKSA6IHJlbW92ZUF0dHIodGhpcy5uYXRpdmVFbGVtZW50LCAnZGlzYWJsZWQnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgc3R5bGUgY2hhbmdlIGhhbmRsZXJcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb25TdHlsZUNoYW5nZShrOiBzdHJpbmcsIG52OiBhbnksIG92PzogYW55KSB7fVxuXG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXIgdGhlIHdpZGdldCB3aXRoIHRoZSB3aWRnZXRSZWdpc3RyeVxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWdpc3RlcldpZGdldCh3aWRnZXROYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcihyZWdpc3Rlcih0aGlzLndpZGdldCwgdGhpcy52aWV3UGFyZW50LCB0aGlzLndpZGdldElkLCB3aWRnZXROYW1lKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogb3ZlcnJpZGUgdGhlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldE1hcHBlZEV2ZW50TmFtZShldmVudE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIEVWRU5UU19NQVAuZ2V0KGV2ZW50TmFtZSkgfHwgZXZlbnROYW1lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGludm9rZSB0aGUgZXZlbnQgaGFuZGxlclxuICAgICAqIENvbXBvbmVudHMgY2FuIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGV4ZWN1dGUgY3VzdG9tIGxvZ2ljIGJlZm9yZSBpbnZva2luZyB0aGUgdXNlciBjYWxsYmFja1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBoYW5kbGVFdmVudChub2RlOiBIVE1MRWxlbWVudCwgZXZlbnROYW1lOiBzdHJpbmcsIGV2ZW50Q2FsbGJhY2s6IEZ1bmN0aW9uLCBsb2NhbHM6IGFueSwgbWV0YT86IHN0cmluZykge1xuICAgICAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgICAgIGUgPT4ge1xuICAgICAgICAgICAgICAgIGxvY2Fscy4kZXZlbnQgPSBlO1xuICAgICAgICAgICAgICAgIGlmIChtZXRhID09PSAnZGVsYXllZCcpIHtcbiAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IGV2ZW50Q2FsbGJhY2soKSwgMTUwKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnRDYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBwYXJzZSB0aGUgZXZlbnQgZXhwcmVzc2lvbiBhbmQgc2F2ZSByZWZlcmVuY2UgdG8gdGhlIGZ1bmN0aW9uIGluc2lkZSBldmVudEhhbmRsZXJzIG1hcFxuICAgICAqIElmIHRoZSBjb21wb25lbnQgcHJvdmlkZXMgYSBvdmVycmlkZSBmb3IgYW4gZXZlbnQgdGhyb3VnaCBARXZlbnQgZGVjb3JhdG9yIGludm9rZSB0aGF0XG4gICAgICogZWxzZSBpbnZva2UgdGhlIHJlc29sdmVkIGZ1bmN0aW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc0V2ZW50QXR0cihldmVudE5hbWU6IHN0cmluZywgZXhwcjogc3RyaW5nLCBtZXRhPzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZuID0gJHBhcnNlRXZlbnQoZXhwcik7XG4gICAgICAgIGNvbnN0IGxvY2FscyA9IHRoaXMuY29udGV4dDtcbiAgICAgICAgbG9jYWxzLndpZGdldCA9IHRoaXMud2lkZ2V0O1xuICAgICAgICBjb25zdCBib3VuZEZuID0gZm4uYmluZCh1bmRlZmluZWQsIHRoaXMudmlld1BhcmVudCwgbG9jYWxzKTtcblxuICAgICAgICBjb25zdCBldmVudENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgbGV0IGJvdW5kRm5WYWw7XG4gICAgICAgICAgICAkaW52b2tlV2F0Y2hlcnModHJ1ZSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxvY2Fscy4kZXZlbnQgPSBsb2NhbHMuJGV2ZW50IHx8IG5ldyB3aW5kb3cuQ3VzdG9tRXZlbnQoZXZlbnROYW1lKTtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZXZlbnQgaXMgYm91bmQgZGlyZWN0bHkgdG8gdGhlIHZhcmlhYmxlIHRoZW4gd2UgbmVlZCB0byBpbnRlcm5hbGx5IGhhbmRsZVxuICAgICAgICAgICAgICAgIC8vIHRoZSBwcm9taXNlIHJldHVybmVkIGJ5IHRoZSB2YXJpYWJsZSBjYWxsLlxuICAgICAgICAgICAgICAgIGJvdW5kRm5WYWwgPSBib3VuZEZuKCk7XG4gICAgICAgICAgICAgICAgaWYgKGJvdW5kRm5WYWwgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGJvdW5kRm5WYWwudGhlbiggcmVzcG9uc2UgPT4gcmVzcG9uc2UsIGVyciA9PiBlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBib3VuZEZuVmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZXZlbnRIYW5kbGVycy5zZXQodGhpcy5nZXRNYXBwZWRFdmVudE5hbWUoZXZlbnROYW1lKSwge2NhbGxiYWNrOiBldmVudENhbGxiYWNrLCBsb2NhbHN9KTtcbiAgICAgICAgLy8gcHJlcGVuZCBldmVudE5hbWUgd2l0aCBvbiBhbmQgY29udmVydCBpdCB0byBjYW1lbGNhc2UuXG4gICAgICAgIC8vIGVnLCBcImNsaWNrXCIgLS0tPiBvbkNsaWNrXG4gICAgICAgIGNvbnN0IG9uRXZlbnROYW1lID0gY2FtZWxDYXNlKGBvbi0ke2V2ZW50TmFtZX1gKTtcbiAgICAgICAgLy8gc2F2ZSB0aGUgZXZlbnRDYWxsYmFjayBpbiB3aWRnZXRTY29wZS5cbiAgICAgICAgdGhpc1tvbkV2ZW50TmFtZV0gPSBldmVudENhbGxiYWNrO1xuXG4gICAgICAgIC8vIGV2ZW50cyBuZWVkcyB0byBiZSBzZXR1cCBhZnRlciB2aWV3SW5pdFxuICAgICAgICB0aGlzLnRvQmVTZXR1cEV2ZW50c1F1ZXVlLnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVFdmVudCh0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMuZ2V0TWFwcGVkRXZlbnROYW1lKGV2ZW50TmFtZSksIGV2ZW50Q2FsbGJhY2ssIGxvY2FscywgbWV0YSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2Nlc3MgdGhlIGJvdW5kIHByb3BlcnR5XG4gICAgICogUmVnaXN0ZXIgYSB3YXRjaCBvbiB0aGUgYm91bmQgZXhwcmVzc2lvblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwcm9jZXNzQmluZEF0dHIocHJvcE5hbWU6IHN0cmluZywgZXhwcjogc3RyaW5nKSB7XG5cbiAgICAgICAgdGhpcy5pbml0U3RhdGUuZGVsZXRlKHByb3BOYW1lKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcihcbiAgICAgICAgICAgICR3YXRjaChcbiAgICAgICAgICAgICAgICBleHByLFxuICAgICAgICAgICAgICAgIHRoaXMudmlld1BhcmVudCxcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgbnYgPT4gdGhpcy53aWRnZXRbcHJvcE5hbWVdID0gbnYsXG4gICAgICAgICAgICAgICAgZ2V0V2F0Y2hJZGVudGlmaWVyKHRoaXMud2lkZ2V0SWQsIHByb3BOYW1lKSxcbiAgICAgICAgICAgICAgICBwcm9wTmFtZSA9PT0gJ2RhdGFzb3VyY2UnLFxuICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0UHJvcHMuZ2V0KHByb3BOYW1lKSxcbiAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLmlzTXV0ZWRcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgd2F0Y2ggb24gdGhlIGJvdW5kIHByb3BlcnR5XG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlbW92ZVByb3BlcnR5QmluZGluZyhwcm9wTmFtZTogc3RyaW5nKSB7XG4gICAgICAgICR1bndhdGNoKGdldFdhdGNoSWRlbnRpZmllcih0aGlzLndpZGdldElkLCBwcm9wTmFtZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGludm9rZSB0aGUgZXZlbnQgY2FsbGJhY2sgbWV0aG9kXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICAgICAqIEBwYXJhbSBleHRyYUxvY2Fsc1xuICAgICAqL1xuICAgIHB1YmxpYyBpbnZva2VFdmVudENhbGxiYWNrKGV2ZW50TmFtZTogc3RyaW5nLCBleHRyYUxvY2Fscz86IGFueSkge1xuICAgICAgICBjb25zdCBjYWxsYmFja0luZm8gPSB0aGlzLmV2ZW50SGFuZGxlcnMuZ2V0KGV2ZW50TmFtZSk7XG4gICAgICAgIGlmIChjYWxsYmFja0luZm8pIHtcbiAgICAgICAgICAgIGNvbnN0IGZuID0gY2FsbGJhY2tJbmZvLmNhbGxiYWNrO1xuICAgICAgICAgICAgY29uc3QgbG9jYWxzID0gY2FsbGJhY2tJbmZvLmxvY2FscyB8fCB7fTtcblxuICAgICAgICAgICAgaWYgKGZuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuKE9iamVjdC5hc3NpZ24obG9jYWxzLCBleHRyYUxvY2FscykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvY2VzcyB0aGUgYXR0cmlidXRlXG4gICAgICogSWYgdGhlIGF0dHJpYnV0ZSBpcyBhbiBldmVudCBleHByZXNzaW9uLCBnZW5lcmF0ZSBhIGZ1bmN0aW9uYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGV4cHJlc3Npb25cbiAgICAgKiAgICAgIGFuZCBrZWVwIGluIGV2ZW50SGFuZGxlcnNcbiAgICAgKiBJZiB0aGUgYXR0cmlidXRlIGlzIGEgYm91bmQgZXhwcmVzc2lvbiwgcmVnaXN0ZXIgYSB3YXRjaCBvbiB0aGUgZXhwcmVzc2lvblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwcm9jZXNzQXR0cihhdHRyTmFtZTogc3RyaW5nLCBhdHRyVmFsdWU6IHN0cmluZykge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIj09PT1hdHRyTmFtZT09PT09XCIsIGF0dHJOYW1lLCBcIj09PT09dHlwZW9mIGF0dHJuYW1lPT09PT1cIiwgdHlwZW9mIGF0dHJOYW1lLCBcIi0tLS0tYXR0clZhbHVlLS0tLVwiLCBhdHRyVmFsdWUpO1xuICAgICAgICBjb25zdCB7MDogcHJvcE5hbWUsIDE6IHR5cGUsIDI6IG1ldGEsIGxlbmd0aH0gPSBhdHRyTmFtZS5zcGxpdCgnLicpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ2JpbmQnKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgc2hvdyBwcm9wZXJ0eSBpcyBib3VuZCwgc2V0IHRoZSBpbml0aWFsIHZhbHVlIHRvIGZhbHNlXG4gICAgICAgICAgICBpZiAocHJvcE5hbWUgPT09ICdzaG93Jykge1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzQmluZEF0dHIocHJvcE5hbWUsIGF0dHJWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2V2ZW50Jykge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRXZlbnRBdHRyKHByb3BOYW1lLCBhdHRyVmFsdWUsIG1ldGEpO1xuICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgLy8gcmVtb3ZlIGNsYXNzIGFuZCBuYW1lIGF0dHJpYnV0ZXMuIENvbXBvbmVudCB3aWxsIHNldCB0aGVtIG9uIHRoZSBwcm9wZXIgbm9kZVxuICAgICAgICAgICAgaWYgKGF0dHJOYW1lID09PSAnY2xhc3MnKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCBhdHRyVmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PT0gJ3RhYmluZGV4JyB8fCBhdHRyTmFtZSA9PT0gJ25hbWUnKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlQXR0cih0aGlzLm5hdGl2ZUVsZW1lbnQsIGF0dHJOYW1lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pbml0U3RhdGUuc2V0KHByb3BOYW1lLCBhdHRyVmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gY3VzdG9tIGF0dHJpYnV0ZXMgcHJvdmlkZWQgb24gZWxEZWY7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHJlcXVpcmVkIGFzIHRoZSBuYXRpdmUgZWxlbWVudCBhdHRyaWJ1dGVzIGFyZSBjYXNlIGluc2Vuc2l0aXZlKGNhbWVsY2FzZSkgbGlrZSBjdXN0b21FeHByZXNzaW9ucyBiZWNvbWVzIGN1c3RvbWV4cHJlc3Npb25cbiAgICAgKiBhbmQgb3VyIGxvZ2ljIHRvIGNoZWNrIGxpa2UgdGhlc2UgY2hhbmdlcyB3aWxsIGZhaWwuIEJlZm9yZSBJVlkgY2hhbmdlcywgYW5ndWxhciBtYWludGFpbnMgYSBzZXBhcmF0ZSBvYmplY3Qgd2l0aCB0aGVzZSBhdHRyaWJ1dGVzXG4gICAgICogYXMgaXQgaXMgbGlrZSBpbiB0aGUgY2FtZWxjYXNlLiBXaXRoIElWWSBhbGwgdGhvc2UgYXJlIGdvbmUuIFNvIG5lZWQgdG8gbWFpbnRhaW4gYSBzZXBhcmF0ZSBsaXN0IHdpdGggdGhlIGNhbWVsY2FzaW5nIG9mIGF0dHJpYnV0ZXNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIF90Tm9kZS5hdHRycyBhdHRyaWJ1dGVzIGFyZSBzdG9yZWQgaW4gYXJyYXkoZXZlbiBpbmRleDoga2V5LCBvZGQgaW5kZXg6IHZhbHVlKVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0QXR0cmlidXRlcygpIHtcbiAgICAgICAgbGV0IF90Tm9kZUF0dHJzID0gKHRoaXMuaW5qIGFzIGFueSkuX3ROb2RlLmF0dHJzLCBhY3R1YWxBdHRycyA9IEFycmF5LmZyb20odGhpcy5uYXRpdmVFbGVtZW50LmF0dHJpYnV0ZXMpLm1hcChhdHRyID0+IGF0dHIubmFtZSk7XG4gICAgICAgIGlmKF90Tm9kZUF0dHJzID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYWN0dWFsQXR0cnMuc29ydCgpO1xuICAgICAgICB9XG4gICAgICAgIGZvckVhY2goX3ROb2RlQXR0cnMsIChhdHRyLCBpOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYXR0ciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0eXBlb2YgYXR0ciA9PT0gJ3N0cmluZycgJiYgaSAlIDIgPT0gMCkge1xuICAgICAgICAgICAgICAgIGxldCBsb3dlckNhc2VBdHRyID0gYXR0ci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmIChhY3R1YWxBdHRycy5pbmNsdWRlcyhsb3dlckNhc2VBdHRyKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBhY3R1YWxBdHRycy5pbmRleE9mKGxvd2VyQ2FzZUF0dHIpXG4gICAgICAgICAgICAgICAgICAgIGFjdHVhbEF0dHJzW2luZGV4XSA9IGF0dHI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvKlxuICAgICAgICBTb3J0aW5nIGF0dHJpYnV0ZXMgYXMgcHJvcGVydGllcyBsaWtlIHBsYWNlaG9sZGVyIGlzIG5vdCB3b3JraW5nIHdoZW4gaXQgaXMgYm91bmQuXG4gICAgICAgIHBsYWNlaG9sZGVyIGFuZCBwbGFjZWhvbGRlci5iaW5kIHR3byBwcm9wZXJ0aWVzIGFyZSBjb21pbmcgaW4gQXJyYXkuXG4gICAgICAgIFdoZW4gYXJyYXkgaXMgbm90IHNvcnRlZCwgaW5pdGlhbGx5IHBsYWNlaG9sZGVyLmJpbmQgdmFsdWUgaXMgc2V0IHRoZW4gcGxhY2Vob2xkZXIgZGVmYXVsdCB2YWx1ZSBpcyB1cGRhdGVkLlxuICAgICAgICBJZiBhcnJheSBpcyBzb3J0ZWQsIHBsYWNlaG9sZGVyLmJpbmQgdmFsdWUgd2lsbCBiZSBzZXQgZmluYWxseS5cbiAgICAgICAgVGhpcyBpcyBjYXVzZWQgYmVjYXVzZSBvZiB0aGUgd2F5IHdlIGFyZSBzdG9yaW5nIGF0dHJpYnV0ZSBuYW1lcyBpbiB3YXRjaGVyIHJlZ2lzdHJ5IG1hcFxuICAgICAgICAgKi9cbiAgICAgICAgcmV0dXJuIGFjdHVhbEF0dHJzLnNvcnQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzIHRoZSBhdHRyaWJ1dGVzXG4gICAgICovXG4gICAgcHJpdmF0ZSBwcm9jZXNzQXR0cnMoKSB7XG4gICAgICAgIG1hcCh0aGlzLmdldEF0dHJpYnV0ZXMoKSwgKGF0dHJOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGxldCBhdHRyVmFsdWUgPSB0aGlzLm5hdGl2ZUVsZW1lbnQuYXR0cmlidXRlc1thdHRyTmFtZV0udmFsdWVcbiAgICAgICAgICAgIHRoaXMuJGF0dHJzLnNldChhdHRyTmFtZSwgYXR0clZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0F0dHIoYXR0ck5hbWUsIGF0dHJWYWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSB0aGUgaW5pdFN0YXRlIHdpdGggdGhlIGRlZmF1bHQgcHJvcGVydHkgdmFsdWVzIGFuZCB0aGUgdmFsdWVzIHByb3ZpZGVkIGluIHRoZSBtYXJrdXBcbiAgICAgKiBQcm9jZXNzIHRoZSBhdHRyaWJ1dGVzXG4gICAgICogUmVnaXN0ZXIgdGhlIHdpZGdldFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpbml0V2lkZ2V0KCkge1xuICAgICAgICB0aGlzLmluaXRTdGF0ZSA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5cbiAgICAgICAgLy8gZ2V0IHRoZSB3aWRnZXQgcHJvcGVydGllc1xuICAgICAgICBjb25zdCB3aWRnZXRQcm9wczogTWFwPHN0cmluZywgYW55PiA9IGdldFdpZGdldFByb3BzQnlUeXBlKHRoaXMud2lkZ2V0U3ViVHlwZSk7XG4gICAgICAgIHdpZGdldFByb3BzLmZvckVhY2goKHYsIGspID0+IHtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodi52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRTdGF0ZS5zZXQoaywgdi52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMud2lkZ2V0UHJvcHMgPSB3aWRnZXRQcm9wcztcblxuICAgICAgICB0aGlzLnByb2Nlc3NBdHRycygpO1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJXaWRnZXQodGhpcy5pbml0U3RhdGUuZ2V0KCduYW1lJykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSB0aGUgZGVmYXVsdCBwcm9wZXJ0aWVzIGFuZCB0aGUgcHJvcGVydGllcyBwcm92aWRlZCBpbiB0aGUgbWFya3VwIGluIGNvbXBvbmVudFxuICAgICAqIEludm9raW5nIHRoaXMgbWV0aG9kIHdpbGwgcmVzdWx0IGluIGludm9jYXRpb24gb2YgcHJvcGVydHlDaGFuZ2UgaGFuZGxlcnMgb24gdGhlIGNvbXBvbmVudCBmb3IgdGhlIGZpcnN0IHRpbWVcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc2V0SW5pdFByb3BzKCkge1xuICAgICAgICBpZiAodGhpcy5pbml0U3RhdGUuZ2V0KCduYW1lJykpIHtcbiAgICAgICAgICAgIHRoaXMud2lkZ2V0Lm5hbWUgPSB0aGlzLmluaXRTdGF0ZS5nZXQoJ25hbWUnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluaXRTdGF0ZS5mb3JFYWNoKCh2LCBrKSA9PiB7XG4gICAgICAgICAgICAvLyBuYW1lIGlzIGFscmVhZHkgc2V0LCBpZ25vcmUgbmFtZVxuICAgICAgICAgICAgLy8gaWYgdGhlIGtleSBpcyBwYXJ0IG9mIHRvIGJlIGlnbm9yZWQgYXR0cmlidXRlcyBsaXN0IGRvIG5vdCBzZXQgaXQgb24gdGhlIGNvbXBvbmVudCBpbnN0YW5jZVxuICAgICAgICAgICAgaWYgKCh0aGlzLndpZGdldFByb3BzLmdldChrKSB8fCBpc1N0eWxlKGspKSAmJiBrICE9PSAnbmFtZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLndpZGdldFtrXSA9IHY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmluaXRTdGF0ZS5jbGVhcigpO1xuICAgICAgICB0aGlzLmluaXRTdGF0ZSA9IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLnJlYWR5U3RhdGUubmV4dChudWxsKTtcbiAgICAgICAgdGhpcy5yZWFkeVN0YXRlLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlLCBpZiBhIGxpc3RlbmVyIHJlZ2lzdGVyZWQgZm9yIHRoZSBnaXZlbiBldmVudCBvbiB0aGlzIHdpZGdldCBtYXJrdXAuXG4gICAgICogQHBhcmFtIGV2ZW50TmFtZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBoYXNFdmVudENhbGxiYWNrKGV2ZW50TmFtZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ldmVudEhhbmRsZXJzLmhhcyhldmVudE5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGZvY3VzIG9uIHRoZSB3aWRnZXRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDaGVjayBmb3IgdGhlIG5vZGVzIGhhdmluZyBmb2N1cy10YXJnZXQgYXR0cmlidXRlIGluc2lkZSB0aGUgZWxlbWVudFxuICAgICAgICAgKiBJZiBmb3VuZCwgZm9jdXMgdGhlIGZpcnN0IG5vZGUgKGVnLCBkYXRlIHdpZGdldClcbiAgICAgICAgICogZWxzZSwgZm9jdXMgdGhlIGVsZW1lbnQgKGVnLCB0ZXh0IHdpZGdldClcbiAgICAgICAgICovXG4gICAgICAgIGxldCAkdGFyZ2V0ID0gdGhpcy4kZWxlbWVudFswXS5xdWVyeVNlbGVjdG9yKCdbZm9jdXMtdGFyZ2V0XScpO1xuICAgICAgICBpZiAoISR0YXJnZXQpIHtcbiAgICAgICAgICAgICR0YXJnZXQgPSB0aGlzLiRlbGVtZW50WzBdO1xuICAgICAgICB9XG4gICAgICAgICR0YXJnZXQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmluZyB0aGUgZXhlY3V0ZSBtZXRob2Qgb24gQmFzZUNvbXBvbmVudC4gSWYgZGF0YXNldCBpcyBiaW5kZWQgdG8gd2lkZ2V0cyBvdXB0dXQgdGhlbiBkYXRhc291cmNlLmV4ZWN1dGUgd2lsbCBiZSBkZWZpbmVkXG4gICAgcHJvdGVjdGVkIGV4ZWN1dGUob3BlcmF0aW9uLCBvcHRpb25zKTogYW55IHtcblxuICAgIH1cblxuICAgIHB1YmxpYyBtdXRlKCkge1xuICAgICAgICB0aGlzLmlzTXV0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyB1bm11dGUoKSB7XG4gICAgICAgIHRoaXMuaXNNdXRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3VzdG9tSW5qZWN0b3JNYXA6IGFueSA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQWZ0ZXIgdGhlIEFuZ3VsYXIgMTcgdXBncmFkZSwgQW5ndWxhciBpcyBubyBsb25nZXIgc2VuZGluZyBuZ1RlbXBsYXRlQ29udGV4dCB0byBjb21wb25lbnRzIGluIG5nLXRlbXBsYXRlLlxuICAgICAqIFdhdmVtYWtlciB3aWRnZXRzIGluc2lkZSBuZy10ZW1wbGF0ZSByZXF1aXJlIGNvbnRleHQgdG8gZXZhbHVhdGUgYmluZCBleHByZXNzaW9ucy5cbiAgICAgKiBTbyB3ZSdyZSBjcmVhdGluZyBhbiBpbmplY3Rpb25Ub2tlbiB0aGF0IHJldHVybnMgdGhlIGNvbnRleHQgYXMgYSB2YWx1ZS5cbiAgICAgKiBXZSBhcmUgcGFzc2luZyB0aGUgaW5qZWN0aW9uVG9rZW4gdG8gdGhlIG5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvci5cbiAgICAgKiBUaGlzIGluamVjdHMgdGhlIGNvbnRleHQgaW50byBlYWNoIHdpZGdldCBpbiB0aGUgbmctdGVtcGxhdGUuXG4gICAgICogSW4gdGhlIHdpZGdldCBjb21wb25lbnQgY29uc3RydWN0b3Igd2UgYXJlIGdldHRpbmcgdGhlIGluamVjdGlvblRva2VuIHVzaW5nIGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuICAgICAqIElmIGluamVjdGlvblRva2VuIGlzIHByZXNlbnQsIHdlIGV4dGVuZCB0aGUgY29tcG9uZW50IGNvbnRleHQgd2l0aCB0aGUgdmFsdWUgb2YgaW5qZWN0aW9uVG9rZW4uXG4gICAgICogQHBhcmFtIGNvbnRleHRLZXlcbiAgICAgKiBAcGFyYW0gY29udGV4dFxuICAgICAqIEByZXR1cm5zIGluamVjdG9yXG4gICAgICovXG4gICAgY3JlYXRlQ3VzdG9tSW5qZWN0b3IoY29udGV4dEtleTogc3RyaW5nLCBjb250ZXh0OiBhbnkpIHtcbiAgICAgICAgaWYodGhpcy5jdXN0b21JbmplY3Rvck1hcFtjb250ZXh0S2V5XSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tSW5qZWN0b3JNYXBbY29udGV4dEtleV0uaW5qZWN0b3I7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICAgICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiAnRVhQTElDSVRfQ09OVEVYVCcsIHVzZUZhY3Rvcnk6ICgpID0+IGNvbnRleHQgfV1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY3VzdG9tSW5qZWN0b3JNYXBbY29udGV4dEtleV0gPSB7IGNvbnRleHQsIGluamVjdG9yIH07XG4gICAgICAgIHJldHVybiBpbmplY3RvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZnRlciB0aGUgaG9zdCBwYWdlIGlzIGF0dGFjaGVkIGZyb20gY2FjaGUsIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uQXR0YWNoKCkge1xuICAgICAgICB0aGlzLmlzQXR0YWNoZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJlZm9yZSB0aGUgaG9zdCBwYWdlIGlzIGRldGFjaGVkIGZyb20gZG9tIGFuZCBzdG9yZWQgaW4gY2FjaGUsICB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkRldGFjaCgpIHtcbiAgICAgICAgdGhpcy5pc0F0dGFjaGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogbmF0aXZlRWxlbWVudCB3aWxsIGJlIGF2YWlsYWJsZSBieSB0aGlzIHRpbWVcbiAgICAgKiBpZiB0aGUgZGVsYXlJbml0IGlzIGZhbHNlLCBwcm9wZXJ0aWVzIG1ldGEgd2lsbCBiZSBhdmFpbGFibGUgYnkgdGhpcyB0aW1lXG4gICAgICogSW52b2tlIHRoZSBzZXRJbml0UHJvcHMgaWYgdGhlIGRlbGF5SW5pdCBpcyBmYWxzZVxuICAgICAqL1xuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAoIXRoaXMuZGVsYXllZEluaXQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SW5pdFByb3BzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciB0aGUgZXZlbnRzXG4gICAgICovXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBpZiAodGhpcy50b0JlU2V0dXBFdmVudHNRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZm4gb2YgdGhpcy50b0JlU2V0dXBFdmVudHNRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b0JlU2V0dXBFdmVudHNRdWV1ZS5sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLmlzQXR0YWNoZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHt9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICAgIHRoaXMud2lkZ2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5zdHlsZUNoYW5nZS5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLnByb3BlcnR5Q2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuZGVzdHJveS5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmlzQXR0YWNoZWQgPSBmYWxzZTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import { Directive, inject, Injector, Input, TemplateRef, ViewContainerRef } from '@angular/core';
|
|
1
|
+
import { Directive, Inject, inject, Injector, Input, Optional, TemplateRef, ViewContainerRef } from '@angular/core';
|
|
2
2
|
import { $watch, App, findParent } from '@wm/core';
|
|
3
|
+
import { extend } from "lodash-es";
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
export class LazyLoadDirective {
|
|
5
|
-
constructor(inj, templateRef, viewContainer) {
|
|
6
|
+
constructor(inj, templateRef, viewContainer, explicitContext = {}) {
|
|
6
7
|
this.templateRef = templateRef;
|
|
7
8
|
this.viewContainer = viewContainer;
|
|
9
|
+
this.context = {};
|
|
8
10
|
let viewParentApp = inj ? inj.get(App) : inject(App);
|
|
9
11
|
let lView = inj._lView;
|
|
10
12
|
this.viewParent = findParent(lView, viewParentApp);
|
|
11
13
|
//this.context = (inj as any).view.context;
|
|
12
|
-
this.context
|
|
14
|
+
extend(this.context, inj._lView[8], explicitContext);
|
|
13
15
|
}
|
|
14
16
|
set lazyLoad(expr) {
|
|
15
17
|
this.unSubscribeFn = $watch(expr, this.viewParent, this.context, (val) => {
|
|
@@ -22,7 +24,7 @@ export class LazyLoadDirective {
|
|
|
22
24
|
ngOnDestroy() {
|
|
23
25
|
this.unSubscribeFn();
|
|
24
26
|
}
|
|
25
|
-
static { this.ɵfac = function LazyLoadDirective_Factory(t) { return new (t || LazyLoadDirective)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.ViewContainerRef)); }; }
|
|
27
|
+
static { this.ɵfac = function LazyLoadDirective_Factory(t) { return new (t || LazyLoadDirective)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8)); }; }
|
|
26
28
|
static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: LazyLoadDirective, selectors: [["", "lazyLoad", ""]], inputs: { lazyLoad: "lazyLoad" } }); }
|
|
27
29
|
}
|
|
28
30
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LazyLoadDirective, [{
|
|
@@ -30,7 +32,12 @@ export class LazyLoadDirective {
|
|
|
30
32
|
args: [{
|
|
31
33
|
selector: '[lazyLoad]'
|
|
32
34
|
}]
|
|
33
|
-
}], () => [{ type: i0.Injector }, { type: i0.TemplateRef }, { type: i0.ViewContainerRef }
|
|
35
|
+
}], () => [{ type: i0.Injector }, { type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{
|
|
36
|
+
type: Inject,
|
|
37
|
+
args: ['EXPLICIT_CONTEXT']
|
|
38
|
+
}, {
|
|
39
|
+
type: Optional
|
|
40
|
+
}] }], { lazyLoad: [{
|
|
34
41
|
type: Input
|
|
35
42
|
}] }); })();
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1sb2FkLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvYmFzZS9zcmMvd2lkZ2V0cy9jb21tb24vbGF6eS1sb2FkL2xhenktbG9hZC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxNQUFNLEVBQ04sTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBRUwsUUFBUSxFQUNSLFdBQVcsRUFDWCxnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2pELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxXQUFXLENBQUM7O0FBS2pDLE1BQU0sT0FBTyxpQkFBaUI7SUFNMUIsWUFDSSxHQUFhLEVBQ0wsV0FBNkIsRUFDN0IsYUFBK0IsRUFDQyxrQkFBdUIsRUFBRTtRQUZ6RCxnQkFBVyxHQUFYLFdBQVcsQ0FBa0I7UUFDN0Isa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBUDFCLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFVMUIsSUFBSSxhQUFhLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckQsSUFBSSxLQUFLLEdBQUksR0FBVyxDQUFDLE1BQU0sQ0FBQztRQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUE7UUFDbEQsMkNBQTJDO1FBQzNDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFHLEdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELElBQ0ksUUFBUSxDQUFDLElBQUk7UUFDYixJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FDdkIsSUFBSSxFQUNKLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLE9BQU8sRUFDWixDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDM0YsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLENBQUM7UUFDTCxDQUFDLENBQ0osQ0FBQztJQUNOLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7a0ZBcENRLGlCQUFpQiwySUFVZCxrQkFBa0I7b0VBVnJCLGlCQUFpQjs7aUZBQWpCLGlCQUFpQjtjQUg3QixTQUFTO2VBQUM7Z0JBQ1AsUUFBUSxFQUFFLFlBQVk7YUFDekI7O3NCQVdRLE1BQU07dUJBQUMsa0JBQWtCOztzQkFBRyxRQUFRO3FCQVVyQyxRQUFRO2tCQURYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIERpcmVjdGl2ZSxcbiAgICBJbmplY3QsXG4gICAgaW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPcHRpb25hbCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyR3YXRjaCwgQXBwLCBmaW5kUGFyZW50fSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQge2V4dGVuZH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tsYXp5TG9hZF0nXG59KVxuZXhwb3J0IGNsYXNzIExhenlMb2FkRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZpZXdQYXJlbnQ6IGFueTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRleHQgPSB7fTtcbiAgICBwcml2YXRlIGVtYmVkZGVkVmlldztcbiAgICBwcml2YXRlIHVuU3Vic2NyaWJlRm46IEZ1bmN0aW9uO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluajogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgICAgIHByaXZhdGUgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgQEluamVjdCgnRVhQTElDSVRfQ09OVEVYVCcpIEBPcHRpb25hbCgpIGV4cGxpY2l0Q29udGV4dDogYW55ID0ge31cbiAgICApIHtcbiAgICAgICAgbGV0IHZpZXdQYXJlbnRBcHAgPSBpbmogPyBpbmouZ2V0KEFwcCkgOiBpbmplY3QoQXBwKTtcbiAgICAgICAgbGV0IGxWaWV3ID0gKGluaiBhcyBhbnkpLl9sVmlldztcbiAgICAgICAgdGhpcy52aWV3UGFyZW50ID0gZmluZFBhcmVudChsVmlldywgdmlld1BhcmVudEFwcClcbiAgICAgICAgLy90aGlzLmNvbnRleHQgPSAoaW5qIGFzIGFueSkudmlldy5jb250ZXh0O1xuICAgICAgICBleHRlbmQodGhpcy5jb250ZXh0LCAoaW5qIGFzIGFueSkuX2xWaWV3WzhdLCBleHBsaWNpdENvbnRleHQpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGxhenlMb2FkKGV4cHIpIHtcbiAgICAgICAgdGhpcy51blN1YnNjcmliZUZuID0gJHdhdGNoKFxuICAgICAgICAgICAgZXhwcixcbiAgICAgICAgICAgIHRoaXMudmlld1BhcmVudCxcbiAgICAgICAgICAgIHRoaXMuY29udGV4dCxcbiAgICAgICAgICAgICh2YWwpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZW1iZWRkZWRWaWV3ICYmIHZhbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtYmVkZGVkVmlldyAgPSB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYsIHRoaXMuY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5TdWJzY3JpYmVGbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy51blN1YnNjcmliZUZuKCk7XG4gICAgfVxufVxuIl19
|