@wavemaker/app-ng-runtime 12.0.0-next.1417146 → 12.0.0-next.1417150
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- app-ng-runtime/components/chart/bundles/index.umd.js +1 -1
- app-ng-runtime/components/chart/esm2022/chart.utils.mjs +2 -2
- app-ng-runtime/components/chart/fesm2022/index.mjs +1 -1
- app-ng-runtime/components/chart/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/epoch/base-date-time.component.d.ts +1 -0
- app-ng-runtime/components/input/epoch/bundles/index.umd.js +4 -0
- app-ng-runtime/components/input/epoch/esm2022/base-date-time.component.mjs +4 -1
- app-ng-runtime/components/input/epoch/esm2022/date/date.props.mjs +2 -1
- app-ng-runtime/components/input/epoch/fesm2022/index.mjs +4 -0
- app-ng-runtime/components/input/epoch/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/core/bundles/index.umd.js +11 -8
- app-ng-runtime/core/esm2022/services/custom-icons-loader.service.mjs +9 -10
- app-ng-runtime/core/esm2022/utils/utils.mjs +4 -1
- app-ng-runtime/core/fesm2022/index.mjs +11 -8
- app-ng-runtime/core/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/core/utils/utils.d.ts +1 -0
- app-ng-runtime/mobile/runtime/bundles/index.umd.js +1 -1
- app-ng-runtime/mobile/runtime/esm2022/services/http-interceptor.service.mjs +3 -3
- app-ng-runtime/mobile/runtime/fesm2022/index.mjs +2 -2
- app-ng-runtime/mobile/runtime/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/package.json +1 -1
- app-ng-runtime/runtime/dynamic/app/app.module.d.ts +0 -2
- app-ng-runtime/runtime/dynamic/app/xsrfconfig.module.d.ts +9 -0
- app-ng-runtime/runtime/dynamic/bundles/index.umd.js +47 -13
- app-ng-runtime/runtime/dynamic/esm2022/app/app.module.mjs +6 -15
- app-ng-runtime/runtime/dynamic/esm2022/app/xsrfconfig.module.mjs +49 -0
- app-ng-runtime/runtime/dynamic/fesm2022/index.mjs +51 -15
- app-ng-runtime/runtime/dynamic/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/security/bundles/index.umd.js +5 -0
- app-ng-runtime/security/esm2022/security.service.mjs +6 -1
- app-ng-runtime/security/fesm2022/index.mjs +5 -0
- app-ng-runtime/security/fesm2022/index.mjs.map +1 -1
|
@@ -1548,6 +1548,9 @@
|
|
|
1548
1548
|
if (key === 'datepattern') {
|
|
1549
1549
|
this.updateFormat(key);
|
|
1550
1550
|
}
|
|
1551
|
+
else if (key === 'viewmode') {
|
|
1552
|
+
this._dateOptions.minMode = this.viewmode;
|
|
1553
|
+
}
|
|
1551
1554
|
else if (key === 'showweeks') {
|
|
1552
1555
|
this._dateOptions.showWeekNumbers = nv;
|
|
1553
1556
|
}
|
|
@@ -1692,6 +1695,7 @@
|
|
|
1692
1695
|
['todaybuttonlabel', { value: 'LABEL_TODAY_DATE', ...base.PROP_STRING }],
|
|
1693
1696
|
['clearbuttonlabel', { value: 'LABEL_CLEAR_DATE', ...base.PROP_STRING }],
|
|
1694
1697
|
['showdateformatasplaceholder', base.PROP_BOOLEAN],
|
|
1698
|
+
['viewmode', { value: 'day', ...base.PROP_STRING }]
|
|
1695
1699
|
]);
|
|
1696
1700
|
const registerProps$2 = () => {
|
|
1697
1701
|
base.register('wm-date', dateProps);
|
|
@@ -901,6 +901,9 @@ export class BaseDateTimeComponent extends BaseFormCustomComponent {
|
|
|
901
901
|
if (key === 'datepattern') {
|
|
902
902
|
this.updateFormat(key);
|
|
903
903
|
}
|
|
904
|
+
else if (key === 'viewmode') {
|
|
905
|
+
this._dateOptions.minMode = this.viewmode;
|
|
906
|
+
}
|
|
904
907
|
else if (key === 'showweeks') {
|
|
905
908
|
this._dateOptions.showWeekNumbers = nv;
|
|
906
909
|
}
|
|
@@ -1010,4 +1013,4 @@ export class BaseDateTimeComponent extends BaseFormCustomComponent {
|
|
|
1010
1013
|
type: ViewChild,
|
|
1011
1014
|
args: [DateTimePickerComponent]
|
|
1012
1015
|
}] }); })();
|
|
1013
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kYXRlLXRpbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2lucHV0L2Vwb2NoL3NyYy9iYXNlLWRhdGUtdGltZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBYSxRQUFRLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR3pHLE9BQU8sRUFBQyxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRSxPQUFPLEVBQ0gsbUJBQW1CLEVBQ25CLFVBQVUsRUFDVixnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLFVBQVUsRUFDVixLQUFLLEVBQ0wsUUFBUSxFQUNSLE9BQU8sRUFDVixNQUFNLFVBQVUsQ0FBQztBQUVsQixPQUFPLEVBQUMsdUJBQXVCLEVBQUUsVUFBVSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGtCQUFrQixFQUF3QixNQUFNLDBCQUEwQixDQUFDO0FBQ25GLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ2hGLE9BQU8sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxJQUFJLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUMsTUFBTSxXQUFXLENBQUM7O0FBS2xILE1BQU0sWUFBWSxH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LFNBQVM7O3NCQStEcUMsTUFBTTt1QkFBQyxrQkFBa0I7O3NCQUFHLFFBQVE7cUJBTnJDLFVBQVU7a0JBQW5ELFNBQVM7bUJBQUMsbUJBQW1CO1lBQ1ksWUFBWTtrQkFBckQsU0FBUzttQkFBQyxtQkFBbUI7WUFDTSx1QkFBdUI7a0JBQTFELFNBQVM7bUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEluamVjdCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT3B0aW9uYWwsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbCwgVmFsaWRhdG9yfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0Zvcm1TdHlsZSwgZ2V0TG9jYWxlRGF5UGVyaW9kcywgVHJhbnNsYXRpb25XaWR0aH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7QnNEcm9wZG93bkRpcmVjdGl2ZX0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kcm9wZG93bic7XG5pbXBvcnQge1RpbWVwaWNrZXJDb21wb25lbnQsIFRpbWVwaWNrZXJDb25maWd9IGZyb20gJ25neC1ib290c3RyYXAvdGltZXBpY2tlcic7XG5pbXBvcnQge1xuICAgIEFic3RyYWN0STE4blNlcnZpY2UsXG4gICAgZ2V0RGF0ZU9iaixcbiAgICBnZXRGb3JtYXR0ZWREYXRlLFxuICAgIGdldE5hdGl2ZURhdGVPYmplY3QsXG4gICAgaGFzQ29yZG92YSxcbiAgICBpc0lvcyxcbiAgICBpc01vYmlsZSxcbiAgICBzZXRBdHRyXG59IGZyb20gJ0B3bS9jb3JlJztcblxuaW1wb3J0IHtnZXRDb250YWluZXJUYXJnZXRDbGFzcywgVG9EYXRlUGlwZX0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQge0Jhc2VGb3JtQ3VzdG9tQ29tcG9uZW50fSBmcm9tICdAd20vY29tcG9uZW50cy9pbnB1dCc7XG5pbXBvcnQge0JzRGF0ZXBpY2tlckNvbmZpZywgQnNEYXRlcGlja2VyRGlyZWN0aXZlfSBmcm9tICduZ3gtYm9vdHN0cmFwL2RhdGVwaWNrZXInO1xuaW1wb3J0IHtEYXRlVGltZVBpY2tlckNvbXBvbmVudH0gZnJvbSAnLi9kYXRlLXRpbWUvL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7ZmlsdGVyLCBmb3JFYWNoLCBnZXQsIGluY2x1ZGVzLCBpc05hTiBhcyBfaXNOYU4sIGlzU3RyaW5nLCBpc1VuZGVmaW5lZCwgcGFyc2VJbnQsIHNwbGl0fSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmRlY2xhcmUgY29uc3QgJDtcbmRlY2xhcmUgY29uc3QgbW9tZW50O1xuXG5jb25zdCBDVVJSRU5UX0RBVEUgPSAnQ1VSUkVOVF9EQVRFJztcbmNvbnN0IG1vbnRocyA9IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddO1xuY29uc3QgREFURVBJQ0tFUl9EUk9QRE9XTl9PUFRJT05TID0ge1xuICAgIEJVVFRPTjogJ2J1dHRvbicsXG4gICAgREVGQVVMVDogJ2RlZmF1bHQnXG59O1xuY29uc3QgREFUQUVOVFJZTU9ERV9EUk9QRE9XTl9PUFRJT05TID0ge1xuICAgIFBJQ0tFUjogJ3BpY2tlcicsXG4gICAgREVGQVVMVDogJ2RlZmF1bHQnXG59O1xuXG4vLyBQcm92aWRpbmcgbWVyaWRpYW5zIHRvIHRoZSB0aW1lcGlja2VyIGJhZXNkIG9uIHNlbGVjdGVkIGxvY2FsZVxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWVwaWNrZXJDb25maWcoaTE4blNlcnZpY2UpOiBUaW1lcGlja2VyQ29uZmlnIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgVGltZXBpY2tlckNvbmZpZygpLCB7XG4gICAgICAgIG1lcmlkaWFuczogZ2V0TG9jYWxlRGF5UGVyaW9kcyhpMThuU2VydmljZS5nZXRTZWxlY3RlZExvY2FsZSgpLCBGb3JtU3R5bGUuRm9ybWF0LCBUcmFuc2xhdGlvbldpZHRoLkFiYnJldmlhdGVkKVxuICAgIH0pO1xufVxuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRGF0ZVRpbWVDb21wb25lbnQgZXh0ZW5kcyBCYXNlRm9ybUN1c3RvbUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgVmFsaWRhdG9yIHtcbiAgICBwdWJsaWMgcmVxdWlyZWQ6IGJvb2xlYW47XG4gICAgcHVibGljIGRpc2FibGVkOiBib29sZWFuO1xuICAgIHB1YmxpYyB0YWJpbmRleDogYW55O1xuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG4gICAgcHVibGljIGF1dG9mb2N1czogYm9vbGVhbjtcbiAgICBwdWJsaWMgcmVhZG9ubHk6IGJvb2xlYW47XG4gICAgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gICAgcHVibGljIHNob3J0Y3V0a2V5OiBzdHJpbmc7XG4gICAgcHVibGljIF90cmlnZ2VyZWRCeVVzZXI6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgZXhjbHVkZWRheXM6IHN0cmluZztcbiAgICBwdWJsaWMgZXhjbHVkZWREYXlzVG9EaXNhYmxlOiBBcnJheTxudW1iZXI+O1xuICAgIHB1YmxpYyBleGNsdWRlZERhdGVzVG9EaXNhYmxlOiBBcnJheTxEYXRlPjtcbiAgICBwdWJsaWMgZXhjbHVkZWRhdGVzO1xuICAgIHB1YmxpYyBvdXRwdXRmb3JtYXQ7XG4gICAgcHVibGljIG1pbmRhdGU7XG4gICAgcHVibGljIG1heGRhdGU7XG4gICAgcHVibGljIGRhdGFlbnRyeW1vZGU7XG4gICAgcHJvdGVjdGVkIGFjdGl2ZURhdGU7XG4gICAgcHJpdmF0ZSBlbGVtZW50U2NvcGU7XG4gICAgcHVibGljIGRhdGVwYXR0ZXJuO1xuICAgIHB1YmxpYyB0aW1lcGF0dGVybjtcbiAgICBwcm90ZWN0ZWQgc2hvd3NlY29uZHM6IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIGlzbWVyaWRpYW46IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIG1lcmlkaWFuczogYW55O1xuICAgIHByb3RlY3RlZCBkYXRlUGlwZTtcbiAgICBwcm90ZWN0ZWQgaTE4blNlcnZpY2U7XG4gICAgcHVibGljIGlzUmVhZE9ubHkgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgc2VsZWN0ZWRMb2NhbGU6IHN0cmluZztcbiAgICBwdWJsaWMgc2VsZWN0ZnJvbW90aGVybW9udGg6IGJvb2xlYW47XG4gICAgcHVibGljIHRvZGF5YnV0dG9uOiBib29sZWFuO1xuICAgIHB1YmxpYyBjbGVhcmJ1dHRvbjogYm9vbGVhbjtcbiAgICBwdWJsaWMgcmVtb3ZlS2V5dXBMaXN0ZW5lcjtcbiAgICBwdWJsaWMgbG9hZE5hdGl2ZURhdGVJbnB1dDtcbiAgICBwdWJsaWMgc2hvd2N1c3RvbXBpY2tlcjtcbiAgICBwdWJsaWMgbmV4dDtcbiAgICBwdWJsaWMgcHJldjtcbiAgICBwdWJsaWMgY2xpY2tlZCA9IGZhbHNlO1xuXG4gICAgcHJvdGVjdGVkIGRhdGVOb3RJblJhbmdlOiBib29sZWFuO1xuICAgIHByb3RlY3RlZCB0aW1lTm90SW5SYW5nZTogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgaW52YWxpZERhdGVUaW1lRm9ybWF0OiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBkYXRlT25TaG93U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBjYW5jZWxMb2NhbGVDaGFuZ2VTdWJzY3JpcHRpb247XG4gICAgcHVibGljIGdldCB0aW1lWm9uZSgpIHsgcmV0dXJuIHRoaXMuaW5qLmdldChBYnN0cmFjdEkxOG5TZXJ2aWNlKS5nZXRUaW1lem9uZSh0aGlzKTsgfVxuXG4gICAgZm9ybWF0c0J5TG9jYWxlID0geyd0aW1lem9uZSc6ICcnfTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgcHJvcGVydHkgdXNlZCB0byBtYXAgdGhlIGNvbnRhaW5lckNsYXNzLCBzaG93V2Vla051bWJlcnMgZXRjLiwgdG8gdGhlIGJzRGF0ZXBpY2tlclxuICAgICAqL1xuICAgIHB1YmxpYyBfZGF0ZU9wdGlvbnM6IEJzRGF0ZXBpY2tlckNvbmZpZyA9IG5ldyBCc0RhdGVwaWNrZXJDb25maWcoKTtcbiAgICBwcm90ZWN0ZWQgYnNEYXRlUGlja2VyRGlyZWN0aXZlOiBCc0RhdGVwaWNrZXJEaXJlY3RpdmU7XG5cbiAgICBAVmlld0NoaWxkKEJzRHJvcGRvd25EaXJlY3RpdmUpIHByb3RlY3RlZCBic0Ryb3Bkb3duO1xuICAgIEBWaWV3Q2hpbGQoVGltZXBpY2tlckNvbXBvbmVudCkgcHJvdGVjdGVkIGJzVGltZVBpY2tlcjtcbiAgICBAVmlld0NoaWxkKERhdGVUaW1lUGlja2VyQ29tcG9uZW50KSBkYXRldGltZXBpY2tlckNvbXBvbmVudDtcbiAgICBwcml2YXRlIHZhbGlkYXRlVHlwZTogc3RyaW5nO1xuICAgIGNvbnRhaW5lclRhcmdldDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoaW5qOiBJbmplY3RvciwgV0lER0VUX0NPTkZJRywgQEluamVjdCgnRVhQTElDSVRfQ09OVEVYVCcpIEBPcHRpb25hbCgpIGV4cGxpY2l0Q29udGV4dDogYW55KSB7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRywgZXhwbGljaXRDb250ZXh0KTtcbiAgICAgICAgdGhpcy5pMThuU2VydmljZSA9IHRoaXMuaW5qLmdldChBYnN0cmFjdEkxOG5TZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdiZWZvcmVsb2FkJyk7XG5cbiAgICAgICAgdGhpcy5kYXRlUGlwZSA9IHRoaXMuaW5qLmdldChUb0RhdGVQaXBlKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExvY2FsZSA9IHRoaXMuaTE4blNlcnZpY2UuZ2V0U2VsZWN0ZWRMb2NhbGUoKTtcbiAgICAgICAgdGhpcy5fZGF0ZU9wdGlvbnMudG9kYXlQb3NpdGlvbiA9ICdsZWZ0JztcbiAgICAgICAgdGhpcy5fZGF0ZU9wdGlvbnMuY2xlYXJQb3NpdGlvbiA9ICdyaWdodCc7XG4gICAgICAgIHRoaXMubWVyaWRpYW5zID0gZ2V0TG9jYWxlRGF5UGVyaW9kcyh0aGlzLnNlbGVjdGVkTG9jYWxlLCBGb3JtU3R5bGUuRm9ybWF0LCBUcmFuc2xhdGlvbldpZHRoLkFiYnJldmlhdGVkKTtcbiAgICAgICAgdGhpcy5sb2FkTmF0aXZlRGF0ZUlucHV0ID0gaXNNb2JpbGUoKSAmJiAhdGhpcy5zaG93Y3VzdG9tcGlja2VyO1xuXG4gICAgICAgIHRoaXMuY2FuY2VsTG9jYWxlQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5nZXRBcHBJbnN0YW5jZSgpLnN1YnNjcmliZShcImxvY2FsZS1jaGFuZ2VkXCIsIChsb2NhbGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVBpcGUuZGF0ZVBpcGUubG9jYWxlID0gbG9jYWxlLmFuZ3VsYXI7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy50b2RheUJ1dHRvbkxhYmVsID0gdGhpcy5pMThuU2VydmljZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCdMQUJFTF9UT0RBWV9EQVRFJyk7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5jbGVhckJ1dHRvbkxhYmVsID0gdGhpcy5pMThuU2VydmljZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCdMQUJFTF9DTEVBUl9EQVRFJyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyB0cnVlIGlmIHRoZSBpbnB1dCB2YWx1ZSBpcyBkZWZhdWx0IChpLmUgb3BlbiBkYXRlIHBpY2tlciBvbiBpbnB1dCBjbGljaylcbiAgICAgKiBAcGFyYW0xIGRyb3Bkb3dudmFsdWUsIHVzZXIgc2VsZWN0ZWQgdmFsdWUgKGJ5IGRlZmF1bHQgZGF0ZXBpY2tlciBvcGVucyBvbiBpbnB1dCBjbGljaylcbiAgICAgKiAqKi9cbiAgICBwcm90ZWN0ZWQgaXNEcm9wRG93bkRpc3BsYXlFbmFibGVkT25JbnB1dChkcm9wZG93bnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkcm9wZG93bnZhbHVlID09PSBEQVRFUElDS0VSX0RST1BET1dOX09QVElPTlMuREVGQVVMVDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIHRydWUgaWYgdGhlIGlucHV0IHZhbHVlIGlzIGRlZmF1bHQgKGkuZSBEYXRhIGVudHJ5IGNhbiBiZSBkb25lIGVpdGhlciBieSBzZWxlY3RpbmcgZnJvbSB0aGUgRGF0ZS9EYXRlVGltZS9UaW1lIFBpY2tlciBvciBieSBlbnRlcmluZyAgbWFudWFsbHkgdXNpbmcgdGhlIGtleWJvYXJkLiApXG4gICAgICogQHBhcmFtMSBkcm9wZG93bnZhbHVlLCB1c2VyIHNlbGVjdGVkIHZhbHVlXG4gICAgICogKiovXG4gICAgcHJvdGVjdGVkIGlzRGF0YUVudHJ5TW9kZUVuYWJsZWRPbklucHV0KGRyb3Bkb3dudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRyb3Bkb3dudmFsdWUgPT09IERBVEFFTlRSWU1PREVfRFJPUERPV05fT1BUSU9OUy5ERUZBVUxUO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHNob3cgdmFsaWRhdGlvbiBtZXNzYWdlIGRlcGVuZGluZyBvbiB0aGUgaXNOYXRpdmVQaWNrZXIgZmxhZy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNob3dWYWxpZGF0aW9uKCRldmVudCwgZGlzcGxheVZhbHVlLCBpc05hdGl2ZVBpY2tlciwgbXNnKSB7XG4gICAgICAgIGlmIChpc05hdGl2ZVBpY2tlcikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdtaW4gbWF4IGRhdGUgdmFsaWRhdGlvbiBmYWlsZWQgJywgbXNnKTtcbiAgICAgICAgICAgIHJldHVybiAkKCRldmVudC50YXJnZXQpLnZhbChkaXNwbGF5VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXREaXNwbGF5SW5wdXQoKSB7XG4gICAgICAgICQodGhpcy5uYXRpdmVFbGVtZW50KS5maW5kKCcuZGlzcGxheS1pbnB1dCcpLnZhbCgnJyk7XG4gICAgfVxuXG4gICAgcHVibGljIHZhbGlkYXRlKGM6IEFic3RyYWN0Q29udHJvbCkge1xuICAgICAgICBpZiAodGhpcy5pbnZhbGlkRGF0ZVRpbWVGb3JtYXQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaW52YWxpZERhdGVUaW1lRm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLmRhdGVOb3RJblJhbmdlKSAmJiB0aGlzLmRhdGVOb3RJblJhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGVOb3RJblJhbmdlOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQodGhpcy50aW1lTm90SW5SYW5nZSkgJiYgdGhpcy50aW1lTm90SW5SYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0aW1lTm90SW5SYW5nZToge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvKiBXTVMtMTgyNjkgfCBFeHRlbmRpbmcgdGhlIGV4aXN0aW5nIHZhbGlkYXRpb24gZm9yICdyZXF1aXJlZCcgKi9cbiAgICAgICAgaWYgKHRoaXNbJ3Nob3cnXSAmJiB0aGlzWydyZXF1aXJlZCddKSB7XG4gICAgICAgICAgICByZXR1cm4gISFjLnZhbHVlID8gbnVsbCA6IHsgcmVxdWlyZWQ6IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICcnO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHZhbGlkYXRlIGRhdGUgcGF0dGVybiBhbmQgdGltZSBwYXR0ZXJuXG4gICAgICogSWYgdXNlciBzZWxlY3RzIG9uZSBwYXR0ZXJuIGluIGRlc2lnbiB0aW1lIGFuZCBpZiBoZSB0cmllcyB0byBlbnRlciB0aGUgZGF0ZSBpbiBhbm90aGVyIHBhdHRlcm4gdGhlbiB0aGUgZGV2aWNlIGlzIHRocm93aW5nIGFuIGVycm9yXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGZvcm1hdFZhbGlkYXRpb24obmV3VmFsLCBpbnB1dFZhbCwgaXNOYXRpdmVQaWNrZXI/OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSB0aGlzLmRhdGVwYXR0ZXJuIHx8IHRoaXMudGltZXBhdHRlcm47XG4gICAgICAgIGNvbnN0IHRpbWVab25lID0gdGhpcy50aW1lWm9uZTtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgbmV3VmFsLCBwYXR0ZXJuLCB0aW1lWm9uZSwgbnVsbCwgbnVsbCwgdGhpcyk7XG4gICAgICAgIGlucHV0VmFsID0gaW5wdXRWYWwudHJpbSgpO1xuICAgICAgICBpZiAoaW5wdXRWYWwpIHtcbiAgICAgICAgICAgIGlmIChwYXR0ZXJuID09PSAndGltZXN0YW1wJykge1xuICAgICAgICAgICAgICAgIGlmICghX2lzTmFOKGlucHV0VmFsKSAmJiBwYXJzZUludChpbnB1dFZhbCkgIT09IGZvcm1hdHRlZERhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkRGF0ZVRpbWVGb3JtYXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICdpbmNvcnJlY3Rmb3JtYXQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmF0aXZlUGlja2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZvcm1hdCB0aGUgZGF0ZSB2YWx1ZSBvbmx5IHdoZW4gaW5wdXRWYWwgaXMgb2J0YWluZWQgZnJvbSAkZXZlbnQudGFyZ2V0LnZhbHVlLCBhcyB0aGUgZm9ybWF0IGRvZXNudCBtYXRjaC5cbiAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWwgPSBnZXRGb3JtYXR0ZWREYXRlKHRoaXMuZGF0ZVBpcGUsIGlucHV0VmFsLCBwYXR0ZXJuLCB0aW1lWm9uZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFZhbCAhPT0gZm9ybWF0dGVkRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludmFsaWREYXRlVGltZUZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJ2luY29ycmVjdGZvcm1hdCc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsIHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byB2YWxpZGF0ZSBtaW4gZGF0ZSwgbWF4IGRhdGUsIGV4Y2x1ZGUgZGF0ZXMgYW5kIGV4Y2x1ZGUgZGF5c1xuICAgICAqIEluIG1vYmlsZSBpZiBpbnZhbGlkIGRhdGVzIGFyZSBlbnRlcmVkLCBkZXZpY2UgaXMgc2hvd2luZyBhbiBhbGVydC5cbiAgICAgKiBJbiB3ZWIgaWYgaW52YWxpZCBkYXRlcyBhcmUgZW50ZXJlZCwgZGV2aWNlIGlzIHNob3dpbmcgdmFsaWRhdGlvbiBtZXNzYWdlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBtaW5EYXRlTWF4RGF0ZVZhbGlkYXRpb25PbklucHV0KG5ld1ZhbCwgJGV2ZW50PzogRXZlbnQsIGRpc3BsYXlWYWx1ZT86IHN0cmluZywgaXNOYXRpdmVQaWNrZXI/OiBib29sZWFuKSB7XG4gICAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVUaW1lVmFsID0gbmV3VmFsO1xuICAgICAgICAgICAgbmV3VmFsID0gbW9tZW50KG5ld1ZhbCkuc3RhcnRPZignZGF5JykudG9EYXRlKCk7XG4gICAgICAgICAgICBjb25zdCBtaW5EYXRlID0gbW9tZW50KGdldERhdGVPYmoodGhpcy5taW5kYXRlKSkuc3RhcnRPZignZGF5JykudG9EYXRlKCk7XG4gICAgICAgICAgICBjb25zdCBtYXhEYXRlID0gbW9tZW50KGdldERhdGVPYmoodGhpcy5tYXhkYXRlKSkuc3RhcnRPZignZGF5JykudG9EYXRlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5taW5kYXRlICYmIG5ld1ZhbCA8IG1pbkRhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBgJHt0aGlzLmFwcExvY2FsZS5MQUJFTF9NSU5EQVRFX1ZBTElEQVRJT05fTUVTU0FHRX0gJHt0aGlzLm1pbmRhdGV9LmA7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmF0aXZlUGlja2VyICYmIGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgbWluRGF0ZSwgdGhpcy5kYXRlcGF0dGVybiwgdGhpcy50aW1lWm9uZSwgbnVsbCwgbnVsbCwgdGhpcykgPT09IGRpc3BsYXlWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgkZXZlbnQudGFyZ2V0KS52YWwoZGlzcGxheVZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlTm90SW5SYW5nZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVR5cGUgPSAnbWluZGF0ZSc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hvd1ZhbGlkYXRpb24oJGV2ZW50LCBkaXNwbGF5VmFsdWUsIGlzTmF0aXZlUGlja2VyLCBtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubWF4ZGF0ZSAmJiBuZXdWYWwgPiBtYXhEYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7dGhpcy5hcHBMb2NhbGUuTEFCRUxfTUFYREFURV9WQUxJREFUSU9OX01FU1NBR0V9ICR7dGhpcy5tYXhkYXRlfS5gO1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsIHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChpc05hdGl2ZVBpY2tlciAmJiBnZXRGb3JtYXR0ZWREYXRlKHRoaXMuZGF0ZVBpcGUsIG1heERhdGUsIHRoaXMuZGF0ZXBhdHRlcm4sIHRoaXMudGltZVpvbmUsIG51bGwsIG51bGwsIHRoaXMpID09PSBkaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJGV2ZW50LnRhcmdldCkudmFsKGRpc3BsYXlWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZU5vdEluUmFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJ21heGRhdGUnO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3dWYWxpZGF0aW9uKCRldmVudCwgZGlzcGxheVZhbHVlLCBpc05hdGl2ZVBpY2tlciwgbXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmV4Y2x1ZGVkYXRlcykge1xuICAgICAgICAgICAgICAgIGxldCBleGNsdWRlRGF0ZXNBcnJheTtcbiAgICAgICAgICAgICAgICBpZiAoaXNTdHJpbmcodGhpcy5leGNsdWRlZGF0ZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVEYXRlc0FycmF5ID0gc3BsaXQodGhpcy5leGNsdWRlZGF0ZXMsICcsJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXhjbHVkZURhdGVzQXJyYXkgPSB0aGlzLmV4Y2x1ZGVkYXRlcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXhjbHVkZURhdGVzQXJyYXkgPSBleGNsdWRlRGF0ZXNBcnJheS5tYXAoZCA9PiBnZXRGb3JtYXR0ZWREYXRlKHRoaXMuZGF0ZVBpcGUsIGQsIHRoaXMuZGF0ZXBhdHRlcm4sIHRoaXMudGltZVpvbmUsIG51bGwsIG51bGwsIHRoaXMpKTtcbiAgICAgICAgICAgICAgICBpZiAoZXhjbHVkZURhdGVzQXJyYXkuaW5kZXhPZihnZXRGb3JtYXR0ZWREYXRlKHRoaXMuZGF0ZVBpcGUsIGRhdGVUaW1lVmFsLCB0aGlzLmRhdGVwYXR0ZXJuLCB0aGlzLnRpbWVab25lLCBudWxsLCBudWxsLCB0aGlzKSkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVOb3RJblJhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVR5cGUgPSAnZXhjbHVkZWRhdGVzJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5leGNsdWRlZGF5cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVEYXlzQXJyYXkgPSBzcGxpdCh0aGlzLmV4Y2x1ZGVkYXlzLCAnLCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRheSA9IGdldChkYXRlVGltZVZhbCwgJ2dldERheScpID8gZGF0ZVRpbWVWYWwuZ2V0RGF5KCkgOiBkYXRlVGltZVZhbDtcbiAgICAgICAgICAgICAgICBpZiAoZXhjbHVkZURheXNBcnJheS5pbmRleE9mKGRheS50b1N0cmluZygpKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZU5vdEluUmFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICdleGNsdWRlZGF5cyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsIHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05hdGl2ZVBpY2tlcikge1xuICAgICAgICAgICAgdGhpcy5kYXRlTm90SW5SYW5nZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGhpZ2hsaWdodCB0aGUgY3VycmVudCBkYXRlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGhpZ2h0bGlnaHRUb2RheShuZXdEYXRlKSB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZU1vbnRoID0gJChgLmJzLWRhdGVwaWNrZXItaGVhZCAuY3VycmVudGApLmZpcnN0KCkudGV4dCgpO1xuICAgICAgICBjb25zdCBhY3RpdmVZZWFyID0gICQoXCIuYnMtZGF0ZXBpY2tlci1oZWFkIC5jdXJyZW50XCIpLmVxKDEpLnRleHQoKTtcbiAgICAgICAgY29uc3QgbW9udGggPSBuZXcgRGF0ZShuZXdEYXRlKS50b0xvY2FsZVN0cmluZygnZGVmYXVsdCcsIHsgbW9udGg6ICdsb25nJyB9KTtcbiAgICAgICAgY29uc3QgeWVhciA9IG5ld0RhdGUuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpO1xuXG4gICAgICAgIGlmKGFjdGl2ZU1vbnRoID09IG1vbnRoICYmIGFjdGl2ZVllYXIgPT0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpICYmIG5ld0RhdGUuZ2V0RGF0ZSgpID09PSBuZXcgRGF0ZSgpLmdldERhdGUoKSAmJiBuZXdEYXRlLmdldE1vbnRoKCkgPT09IG5ldyBEYXRlKCkuZ2V0TW9udGgoKSAmJiBuZXdEYXRlLmdldEZ1bGxZZWFyKCkgPT09IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSkge1xuICAgICAgICAgICAgY29uc3QgdG9EYXkgPSBuZXcgRGF0ZSgpLmdldERhdGUoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgZmlsdGVyKCQoYHNwYW46Y29udGFpbnMoJHt0b0RheX0pYCkubm90KCcuaXMtb3RoZXItbW9udGgnKSwgKG9iaikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgkKG9iaikudGV4dCgpID09PSB0b0RheSkge1xuICAgICAgICAgICAgICAgICAgICAkKG9iaikuYWRkQ2xhc3MoJ2N1cnJlbnQtZGF0ZSB0ZXh0LWluZm8nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZmluZCB0aGUgbmV3IGRhdGUgaXMgZnJvbSBhbm90aGVyIHllYXIgb3Igbm90XG4gICAgICogQHBhcmFtIG5ld0RhdGUgLSBuZXdseSBzZWxlY3RlZCBkYXRlIHZhbHVlXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc090aGVyeWVhcihuZXdEYXRlKSB7XG4gICAgICAgIHJldHVybiAobmV3RGF0ZS5nZXRNb250aCgpID09PSAwICYmIHRoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpID09PSAxMSkgfHwgKG5ld0RhdGUuZ2V0TW9udGgoKSA9PT0gMTEgJiYgdGhpcy5hY3RpdmVEYXRlLmdldE1vbnRoKCkgPT09IDApO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93RGF0ZVBpY2tlck1vZGFsKGJzRGF0YVZhbHVlKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGJzRGF0YVZhbHVlIHx8IG5ldyBEYXRlKCk7XG4gICAgICAgIHRoaXMuc2V0TmV4dERhdGEodGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgICAgdGhpcy5kYXRldGltZXBpY2tlckNvbXBvbmVudC5zaG93KCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZGREYXRlcGlja2VyTW91c2VFdmVudHMoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKHRoaXMuYWN0aXZlRGF0ZSwgdHJ1ZSk7XG4gICAgICAgIH0sIDUwMCk7XG4gICAgICAgIHJldHVybiA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBsb2FkIG90aGVyIG1vbnRoIGRheXMgb3Igb3RoZXIgbW9udGggb3Igb3RoZXIgeWVhclxuICAgICAqIEBwYXJhbSBidG5DbGFzcyAtIGNsYXNzKHByZXZpb3VzL25leHQpIG9mIHRoZSBidXR0b24gd2hpY2ggd2UgaGF2ZSB0byBjbGlja1xuICAgICAqIEBwYXJhbSB0aW1lUGVyaW9kIC0gU3RyaW5nIHZhbHVlIGRlY2lkZXMgdG8gbG9hZCBvdGhlciBtb250aCBkYXlzIG9yIG90aGVyIG1vbnRoIG9yIG90aGVyIHllYXJcbiAgICAgKi9cbiAgICBwcml2YXRlIGdvVG9PdGhlck1vbnRoT3J5ZWFyKGJ0bkNsYXNzLCB0aW1lUGVyaW9kKSB7XG4gICAgICAgIGNvbnN0ICRub2RlID0gJChgLmJzLWRhdGVwaWNrZXItaGVhZCAuJHtidG5DbGFzc31gKTtcbiAgICAgICAgaWYgKCRub2RlLmF0dHIoJ2Rpc2FibGVkJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAkbm9kZS50cmlnZ2VyKCdjbGljaycpO1xuICAgICAgICBpZiAodGltZVBlcmlvZCA9PT0gJ2RheXMnKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWREYXlzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGltZVBlcmlvZCA9PT0gJ21vbnRoJykge1xuICAgICAgICAgICAgdGhpcy5sb2FkTW9udGhzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGltZVBlcmlvZCA9PT0gJ3llYXInKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRZZWFycygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBzZXQgZm9jdXMgZm9yIGFjdGl2ZSBkYXlcbiAgICAgKiBAcGFyYW0gbmV3RGF0ZSAtIG5ld2x5IHNlbGVjdGVkIGRhdGUgdmFsdWVcbiAgICAgKiBAcGFyYW0gaXNNb3VzZUV2ZW50IC0gYm9vbGVhbiB2YWx1ZSByZXByZXNlbnRzIHRoZSBldmVudCBpcyBtb3VzZSBldmVudC8ga2V5Ym9hcmQgZXZlbnRcbiAgICAgKiBAcGFyYW0gZnJvbUtleWJvYXJkRXZlbnRzXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRBY3RpdmVEYXRlRm9jdXMobmV3RGF0ZSwgaXNNb3VzZUV2ZW50PzogYm9vbGVhbiwgZnJvbUtleWJvYXJkRXZlbnRzPzogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5taW5kYXRlICYmICF0aGlzLmRhdGF2YWx1ZSAmJiBmcm9tS2V5Ym9hcmRFdmVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IG5ld0RhdGUgPSBuZXcgRGF0ZSh0aGlzLm1pbmRhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0TmV4dERhdGEobmV3RGF0ZSk7XG4gICAgICAgIHRoaXMuY2xpY2tlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBhY3RpdmVNb250aCA9IHRoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpO1xuICAgICAgICAvLyBjaGVjayBmb3Iga2V5Ym9hcmQgZXZlbnRcbiAgICAgICAgaWYgKCFpc01vdXNlRXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChuZXdEYXRlLmdldE1vbnRoKCkgPCBhY3RpdmVNb250aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPdGhlcnllYXIobmV3RGF0ZSkgPyB0aGlzLmdvVG9PdGhlck1vbnRoT3J5ZWFyKCduZXh0JywgJ2RheXMnKSA6IHRoaXMuZ29Ub090aGVyTW9udGhPcnllYXIoJ3ByZXZpb3VzJywgJ2RheXMnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobmV3RGF0ZS5nZXRNb250aCgpID4gYWN0aXZlTW9udGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzT3RoZXJ5ZWFyKG5ld0RhdGUpID8gdGhpcy5nb1RvT3RoZXJNb250aE9yeWVhcigncHJldmlvdXMnLCAnZGF5cycpIDogdGhpcy5nb1RvT3RoZXJNb250aE9yeWVhcignbmV4dCcsICdkYXlzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdEYXkgPSBuZXdEYXRlLmdldERhdGUoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgZmlsdGVyKCQoYHNwYW46Y29udGFpbnMoJHtuZXdEYXl9KWApLm5vdCgnLmlzLW90aGVyLW1vbnRoJyksIChvYmopID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVNb250aCA9ICQoYC5icy1kYXRlcGlja2VyLWhlYWQgLmN1cnJlbnRgKS5maXJzdCgpLnRleHQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVZZWFyID0gICQoXCIuYnMtZGF0ZXBpY2tlci1oZWFkIC5jdXJyZW50XCIpLmVxKDEpLnRleHQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtb250aE5hbWUgPSBuZXcgRGF0ZSgpLnRvTG9jYWxlU3RyaW5nKCdkZWZhdWx0JywgeyBtb250aDogJ2xvbmcnIH0pO1xuICAgICAgICAgICAgICAgIGlmICgkKG9iaikudGV4dCgpID09PSBuZXdEYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQob2JqKS5oYXNDbGFzcygnc2VsZWN0ZWQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJChvYmopLnBhcmVudCgpLmF0dHIoJ2FyaWEtc2VsZWN0ZWQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICQob2JqKS5hdHRyKCdhcmlhLWxhYmVsJywgbW9tZW50KG5ld0RhdGUpLmZvcm1hdCgnZGRkZCwgTU1NTSBEbyBZWVlZJykpO1xuICAgICAgICAgICAgICAgICAgICAkKCdbYnNkYXRlcGlja2VyZGF5ZGVjb3JhdG9yXScpLm5vdCgnLmlzLW90aGVyLW1vbnRoJykuYXR0cigndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgICAgICAgICAgICAgICAgJChvYmopLmF0dHIoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgICAgICAgICAgICAgJChvYmopLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IG5ld0RhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAobmV3RGF0ZS5nZXREYXRlKCkgPT09IG5ldyBEYXRlKCkuZ2V0RGF0ZSgpICYmIG5ld0RhdGUuZ2V0TW9udGgoKSA9PT0gbmV3IERhdGUoKS5nZXRNb250aCgpICYmIG5ld0RhdGUuZ2V0RnVsbFllYXIoKSA9PT0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWdodGxpZ2h0VG9kYXkobmV3RGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNb250aChkYXRlLCBpbmMpIHtcbiAgICAgICAgY29uc3QgY3VycmVudE1vbnRoID0gbmV3IERhdGUoZGF0ZSk7XG5cbiAgICAgICAgbGV0IG1vbnRoID0gY3VycmVudE1vbnRoLmdldE1vbnRoKCk7XG4gICAgICAgIGNvbnN0IHllYXIgPSBjdXJyZW50TW9udGguZ2V0RnVsbFllYXIoKTtcblxuICAgICAgICBtb250aCArPSBpbmM7XG5cbiAgICAgICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoKTtcblxuICAgICAgICBjb25zdCBmdWxsTW9udGggPSBuZXdEYXRlLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgbW9udGg6ICdsb25nJyB9KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0ZTogbmV3RGF0ZSxcbiAgICAgICAgICAgIGZ1bGxNb250aDogZnVsbE1vbnRoXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2Qgc2V0cyBmb2N1cyBmb3IgbW9udGhzL2RheXMgZGVwZW5kaW5nIG9uIHRoZSBsb2FkZWQgZGF0ZXBpY2tlciB0YWJsZVxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0Rm9jdXNGb3JNb250aE9yRGF5KCkge1xuICAgICAgICBjb25zdCBhY3RpdmVNb250aE9yWWVhciA9ICQoYC5icy1kYXRlcGlja2VyLWhlYWQgLmN1cnJlbnRgKS5maXJzdCgpLnRleHQoKTtcbiAgICAgICAgY29uc3QgZGF0ZVBpY2tlckJvZHkgPSAkKCcuYnMtZGF0ZXBpY2tlci1ib2R5Jyk7XG4gICAgICAgIGlmIChkYXRlUGlja2VyQm9keS5maW5kKCd0YWJsZS5tb250aHMnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAocGFyc2VJbnQoYWN0aXZlTW9udGhPclllYXIpICE9PSB0aGlzLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZE1vbnRocygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKHBhcnNlSW50KGFjdGl2ZU1vbnRoT3JZZWFyKSwgdGhpcy5hY3RpdmVEYXRlLmdldE1vbnRoKCksIHRoaXMuYWN0aXZlRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKG5ld0RhdGUsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLmRheXMnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdNb250aCA9IG1vbnRocy5pbmRleE9mKGFjdGl2ZU1vbnRoT3JZZWFyKTtcbiAgICAgICAgICAgIGlmIChuZXdNb250aCAhPT0gdGhpcy5hY3RpdmVEYXRlLmdldE1vbnRoKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWREYXlzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUodGhpcy5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksIG5ld01vbnRoLCAxKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKG5ld0RhdGUsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2Qgc2V0cyBmb2N1cyBmb3IgbW9udGhzL3llYXJzIGRlcGVuZGluZyBvbiB0aGUgbG9hZGVkIGRhdGVwaWNrZXIgdGFibGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEZvY3VzRm9yQ3VycmVudE1vbnRoT3J5ZWFyKCkge1xuICAgICAgICBjb25zdCBkYXRlUGlja2VyQm9keSA9ICQoJy5icy1kYXRlcGlja2VyLWJvZHknKTtcbiAgICAgICAgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLm1vbnRocycpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vbnRocygpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKHRoaXMuYWN0aXZlRGF0ZSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0ZVBpY2tlckJvZHkuZmluZCgndGFibGUueWVhcnMnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRZZWFycygpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVZZWFyRm9jdXModGhpcy5hY3RpdmVEYXRlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHNldHMgZm9jdXMgZm9yIG1vbnRocy95ZWFycy9kYXlzIGRlcGVuZGluZyBvbiB0aGUgbG9hZGVkIGRhdGVwaWNrZXIgdGFibGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEZvY3VzRm9yRGF0ZShjb3VudCkge1xuICAgICAgICBjb25zdCBkYXRlUGlja2VyQm9keSA9ICQoJy5icy1kYXRlcGlja2VyLWJvZHknKTtcbiAgICAgICAgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLm1vbnRocycpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vbnRocygpO1xuICAgICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKHRoaXMuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpICsgY291bnQsIDAsIHRoaXMuYWN0aXZlRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKG5ld0RhdGUsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLnllYXJzJykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkWWVhcnMoKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0WWVhciA9IGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLnllYXJzIHNwYW4nKS5maXJzdCgpLnRleHQoKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZShwYXJzZUludChzdGFydFllYXIpLCB0aGlzLmFjdGl2ZURhdGUuZ2V0TW9udGgoKSwgdGhpcy5hY3RpdmVEYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVllYXJGb2N1cyhuZXdEYXRlLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRlUGlja2VyQm9keS5maW5kKCd0YWJsZS5kYXlzJykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkRGF5cygpO1xuICAgICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKHRoaXMuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpLCB0aGlzLmFjdGl2ZURhdGUuZ2V0TW9udGgoKSArIGNvdW50LCAxKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKG5ld0RhdGUsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBhZGQga2V5Ym9hcmQgZXZlbnRzIHdoaWxlIG9wZW5pbmcgdGhlIGRhdGUgcGlja2VyXG4gICAgICogQHBhcmFtIHNjb3BlIC0gc2NvcGUgb2YgdGhlIGRhdGUvZGF0ZXRpbWUgd2lkZ2V0XG4gICAgICogQHBhcmFtIGlzRGF0ZVRpbWUgLSBib29sZWFuIHZhbHVlIHJlcHJlc2VudHMgdGhlIGxvYWRlZCB3aWRnZXQgaXMgZGF0ZSBvciBkYXRldGltZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhZGREYXRlcGlja2VyS2V5Ym9hcmRFdmVudHMoc2NvcGUsIGlzRGF0ZVRpbWUpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50U2NvcGUgPSBzY29wZTtcbiAgICAgICAgY29uc3QgZGF0ZUNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke3Njb3BlLmRhdGVDb250YWluZXJDbHN9YCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIHNldEF0dHIoZGF0ZUNvbnRhaW5lciwgJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgZGF0ZUNvbnRhaW5lci5vbmtleWRvd24gPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBTaGlmdCtUYWIga2V5IG9yIFRhYiBrZXkgb3IgZXNjYXBlXG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFNjb3BlLmhpZGVEYXRlcGlja2VyRHJvcGRvd24oKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5SW5wdXRFbGVtID0gdGhpcy5lbGVtZW50U2NvcGUubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZGlzcGxheS1pbnB1dCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZGlzcGxheUlucHV0RWxlbS5mb2N1cygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5sb2FkRGF5cygpO1xuICAgICAgICB0aGlzLnNldEFjdGl2ZURhdGVGb2N1cyh0aGlzLmFjdGl2ZURhdGUsIHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgc2V0TmV4dERhdGEobmV4dERhdGUpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gdGhpcy5nZXRNb250aChuZXh0RGF0ZSwgMSk7XG4gICAgICAgIHRoaXMucHJldiA9IHRoaXMuZ2V0TW9udGgobmV4dERhdGUsIC0xKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBhZGQgdGFiaW5kZXgsIGtleWJvcmQgYW5kIG1vdXNlIGV2ZW50cyBmb3IgZGF5c1xuICAgICAqL1xuICAgIHByaXZhdGUgbG9hZERheXMoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgJCgnW2JzZGF0ZXBpY2tlcmRheWRlY29yYXRvcl0nKS5ub3QoJy5pcy1vdGhlci1tb250aCcpLmF0dHIoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLmNsaWNrZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAvLyAgICAgdGhpcy5uZXh0ID0gdGhpcy5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUsIDEpO1xuICAgICAgICAgICAgLy8gICAgIHRoaXMucHJldiA9IHRoaXMuZ2V0TW9udGgodGhpcy5hY3RpdmVEYXRlLCAtMSk7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICB0aGlzLmFkZEtleUJvYXJkRXZlbnRzRm9yRGF5cygpO1xuICAgICAgICAgICAgdGhpcy5hZGREYXRlcGlja2VyTW91c2VFdmVudHMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2Qgc2V0cyBrZXlib2FyZCBldmVudHMgZm9yIGRheXNcbiAgICAgKi9cbiAgICBwcml2YXRlIGFkZEtleUJvYXJkRXZlbnRzRm9yRGF5cygpIHtcbiAgICAgICAgY29uc3QgZGF0ZVBpY2tlckJvZHkgPSAkKCcuYnMtZGF0ZXBpY2tlci1ib2R5Jyk7XG4gICAgICAgIGRhdGVQaWNrZXJCb2R5LmtleWRvd24oKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBsZXQgbmV3ZGF0ZTtcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKCs3LCAnZGF5cycpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5jdHJsS2V5ICYmIGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgICAgICAgICAgLy8gY2xpY2tpbmcgb24gdGFibGUgaGVhZGVyIG1vbnRoIG5hbWUgdG8gbG9hZCBsaXN0IG9mIG1vbnRoc1xuICAgICAgICAgICAgICAgICQoJy5icy1kYXRlcGlja2VyLWhlYWQgLmN1cnJlbnQnKS5maXJzdCgpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkTW9udGhzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKC03LCAnZGF5cycpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgtMSwgJ2RheXMnKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZURhdGVGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKCsxLCAnZGF5cycpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdQYWdlVXAnKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKC0xLCAnbW9udGgnKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZURhdGVGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnUGFnZURvd24nKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKCsxLCAnbW9udGgnKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZURhdGVGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICAgICAgaWYgKCQoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkuaGFzQ2xhc3MoJ2Rpc2FibGVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAkKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50U2NvcGUuaGlkZURhdGVwaWNrZXJEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlJbnB1dEVsZW0gPSB0aGlzLmVsZW1lbnRTY29wZS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kaXNwbGF5LWlucHV0JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBkaXNwbGF5SW5wdXRFbGVtLmZvY3VzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5mb2N1c0JsdXJEYXRlUGlja2VySGVhZEJ1dHRvbnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvY3VzQmx1ckRhdGVQaWNrZXJIZWFkQnV0dG9ucygpIHtcbiAgICAgICAgY29uc3QgZGF0ZVBpY2tlckhlYWRCdXR0b24gPSAkKCcuYnMtZGF0ZXBpY2tlci1oZWFkIGJ1dHRvbicpO1xuICAgICAgICBkYXRlUGlja2VySGVhZEJ1dHRvbi5vbignZm9jdXMnLCBmdW5jdGlvbigpIHsgJCh0aGlzKS5jc3MoJ2JhY2tncm91bmQtY29sb3InLCAnIzlBQTBBMycpOyB9KTtcbiAgICAgICAgZGF0ZVBpY2tlckhlYWRCdXR0b24ub24oJ2JsdXInLCBmdW5jdGlvbigpIHsgJCh0aGlzKS5jc3MoJ2JhY2tncm91bmQtY29sb3InLCAnJyk7IH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gYWRkIHRhYmluZGV4LCBrZXlib3JkIGFuZCBtb3VzZSBldmVudHMgZm9yIG1vbnRoc1xuICAgICAqL1xuICAgIHByaXZhdGUgbG9hZE1vbnRocygpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZEtleUJvYXJkRXZlbnRzRm9yTW9udGhzKCk7XG4gICAgICAgICAgICB0aGlzLmFkZERhdGVwaWNrZXJNb3VzZUV2ZW50cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIGtleWJvYXJkIGV2ZW50cyBmb3IgbW9udGhzXG4gICAgICovXG4gICAgcHJpdmF0ZSBhZGRLZXlCb2FyZEV2ZW50c0Zvck1vbnRocygpIHtcbiAgICAgICAgJCgnLmJzLWRhdGVwaWNrZXItYm9keScpLmtleWRvd24oKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBsZXQgbmV3ZGF0ZTtcbiAgICAgICAgICAgIGlmICgoZXZlbnQuY3RybEtleSAmJiBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB8fCBldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgICAgICBpZiAoJChkb2N1bWVudC5hY3RpdmVFbGVtZW50KS5wYXJlbnQoKS5oYXNDbGFzcygnZGlzYWJsZWQnKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICQoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkuY2xpY2soKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWREYXlzKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKHRoaXMuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpLCB0aGlzLmFjdGl2ZURhdGUuZ2V0TW9udGgoKSwgMSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVEYXRlRm9jdXMobmV3RGF0ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmN0cmxLZXkgJiYgZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgICAgICAgICAvLyBjbGlja2luZyBvbiB0YWJsZSBoZWFkZXIgeWVhciB0byBsb2FkIGxpc3Qgb2YgeWVhcnNcbiAgICAgICAgICAgICAgICAkKCcuYnMtZGF0ZXBpY2tlci1oZWFkIC5jdXJyZW50JykuZmlyc3QoKS5jbGljaygpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZFllYXJzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVZZWFyRm9jdXModGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgrMywgJ21vbnRoJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgtMywgJ21vbnRoJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgtMSwgJ21vbnRoJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgICAgICAgIG5ld2RhdGUgPSBtb21lbnQodGhpcy5hY3RpdmVEYXRlKS5hZGQoKzEsICdtb250aCcpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlTW9udGhGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZm9jdXNCbHVyRGF0ZVBpY2tlckhlYWRCdXR0b25zKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBhZGQgdGFiaW5kZXgsIGtleWJvcmQgYW5kIG1vdXNlIGV2ZW50cyBmb3IgeWVhcnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGxvYWRZZWFycygpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZEtleUJvYXJkRXZlbnRzRm9yWWVhcnMoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkRGF0ZXBpY2tlck1vdXNlRXZlbnRzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc2V0IGZvY3VzIGZvciBhY3RpdmUgbW9udGhcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEFjdGl2ZU1vbnRoRm9jdXMobmV3RGF0ZSwgaXNNb291c2VFdmVudD86IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXROZXh0RGF0YShuZXdEYXRlKTtcbiAgICAgICAgY29uc3QgbmV3TW9udGggPSBtb250aHNbbmV3RGF0ZS5nZXRNb250aCgpXTtcbiAgICAgICAgLy8gY2hlY2sgZm9yIGtleWJvYXJkIGV2ZW50XG4gICAgICAgIGlmICghaXNNb291c2VFdmVudCkge1xuICAgICAgICAgICAgaWYgKG5ld0RhdGUuZ2V0RnVsbFllYXIoKSA8IHRoaXMuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvT3RoZXJNb250aE9yeWVhcigncHJldmlvdXMnLCAnbW9udGgnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobmV3RGF0ZS5nZXRGdWxsWWVhcigpID4gdGhpcy5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9PdGhlck1vbnRoT3J5ZWFyKCduZXh0JywgJ21vbnRoJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAkKGAuYnMtZGF0ZXBpY2tlci1ib2R5IHRhYmxlLm1vbnRocyBzcGFuYCkuYXR0cigndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgICAgICAgICQoYC5icy1kYXRlcGlja2VyLWJvZHkgdGFibGUubW9udGhzIHNwYW46Y29udGFpbnMoJHtuZXdNb250aH0pYCkuYXR0cigndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgICAgICAgJChgLmJzLWRhdGVwaWNrZXItYm9keSB0YWJsZS5tb250aHMgc3Bhbjpjb250YWlucygke25ld01vbnRofSlgKS5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gbmV3RGF0ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2Qgc2V0cyBrZXlib2FyZCBldmVudHMgZm9yIHllYXJzXG4gICAgICovXG4gICAgcHJpdmF0ZSBhZGRLZXlCb2FyZEV2ZW50c0ZvclllYXJzKCkge1xuICAgICAgICAkKCcuYnMtZGF0ZXBpY2tlci1ib2R5Jykua2V5ZG93bigoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGxldCBuZXdkYXRlO1xuICAgICAgICAgICAgaWYgKChldmVudC5jdHJsS2V5ICYmIGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHx8IGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgICAgIGlmICgkKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLnBhcmVudCgpLmhhc0NsYXNzKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJChkb2N1bWVudC5hY3RpdmVFbGVtZW50KS5jbGljaygpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZE1vbnRocygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlTW9udGhGb2N1cyh0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKCs0LCAneWVhcicpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlWWVhckZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgtNCwgJ3llYXInKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVllYXJGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgICAgICAgICAgIG5ld2RhdGUgPSBtb21lbnQodGhpcy5hY3RpdmVEYXRlKS5hZGQoLTEsICd5ZWFyJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVZZWFyRm9jdXMobmV3ZGF0ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgrMSwgJ3llYXInKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVllYXJGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZm9jdXNCbHVyRGF0ZVBpY2tlckhlYWRCdXR0b25zKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBzZXQgZm9jdXMgZm9yIGFjdGl2ZSB5ZWFyXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRBY3RpdmVZZWFyRm9jdXMobmV3RGF0ZSwgaXNNb3VzZUV2ZW50PzogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBuZXdZZWFyID0gbmV3RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBjb25zdCBkYXRlUGlja2VyWWVhcnMgPSAkKCcuYnMtZGF0ZXBpY2tlci1ib2R5IHRhYmxlLnllYXJzIHNwYW4nKTtcbiAgICAgICAgY29uc3Qgc3RhcnRZZWFyID0gZGF0ZVBpY2tlclllYXJzLmZpcnN0KCkudGV4dCgpO1xuICAgICAgICBjb25zdCBlbmRZZWFyID0gZGF0ZVBpY2tlclllYXJzLmxhc3QoKS50ZXh0KCk7XG4gICAgICAgIC8vIGNoZWNrIGZvciBrZXlib2FyZCBldmVudFxuICAgICAgICBpZiAoIWlzTW91c2VFdmVudCkge1xuICAgICAgICAgICAgaWYgKG5ld0RhdGUuZ2V0RnVsbFllYXIoKSA8IHBhcnNlSW50KHN0YXJ0WWVhcikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9PdGhlck1vbnRoT3J5ZWFyKCdwcmV2aW91cycsICd5ZWFyJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5ld0RhdGUuZ2V0RnVsbFllYXIoKSA+IHBhcnNlSW50KGVuZFllYXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvT3RoZXJNb250aE9yeWVhcignbmV4dCcsICd5ZWFyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAkKGAuYnMtZGF0ZXBpY2tlci1ib2R5IHRhYmxlLnllYXJzIHNwYW5gKS5hdHRyKCd0YWJpbmRleCcsICctMScpO1xuICAgICAgICAgICAgJChgLmJzLWRhdGVwaWNrZXItYm9keSB0YWJsZS55ZWFycyBzcGFuOmNvbnRhaW5zKCR7bmV3WWVhcn0pYCkuYXR0cigndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgICAgICAgJChgLmJzLWRhdGVwaWNrZXItYm9keSB0YWJsZS55ZWFycyBzcGFuOmNvbnRhaW5zKCR7bmV3WWVhcn0pYCkuZm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IG5ld0RhdGU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHNldHMgZm9jdXMgZm9yIHRpbWVwaWNrZXIgZmlyc3QgaW5wdXQgZmllbGQoaG91cnMgZmllbGQpIHdoaWxlIG9wZW5pbmcgdGltZSBwaWNrZXJcbiAgICAgKiBAcGFyYW0gc2NvcGUgLSBzY29wZSBvZiB0aGUgdGltZSBwaWNrZXIgd2lkZ2V0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGZvY3VzVGltZVBpY2tlclBvcG92ZXIoc2NvcGUpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50U2NvcGUgPSBzY29wZTtcbiAgICAgICAgLy8gc2V0VGltZW91dCBpcyB1c2VkIHNvIHRoYXQgYnkgdGhlbiB0aW1lIGlucHV0IGhhcyB0aGUgdXBkYXRlZCB2YWx1ZS4gZm9jdXMgaXMgc2V0dGluZyBiYWNrIHRvIHRoZSBpbnB1dCBmaWVsZFxuICAgICAgICB0aGlzLmVsZW1lbnRTY29wZS5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgJCgndGltZXBpY2tlciAuZm9ybS1ncm91cCcpLmZpcnN0KCkuZmluZCgnPiBpbnB1dC5mb3JtLWNvbnRyb2wnKS5mb2N1cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBrZXlib2FyZCBldmVudHMgdG8gVGltZXBpY2tlciBwb3B1cFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBiaW5kVGltZVBpY2tlcktleWJvYXJkRXZlbnRzKCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0ICR0aW1lcGlja2VyUG9wdXAgPSAkKCdib2R5JykuZmluZCgnPiBicy1kcm9wZG93bi1jb250YWluZXIgdGltZXBpY2tlcicpO1xuICAgICAgICAgICAgJHRpbWVwaWNrZXJQb3B1cC5hdHRyKCd0YWJpbmRleCcsIDApO1xuICAgICAgICAgICAgdGhpcy5hZGRFdmVudHNPblRpbWVQaWNrZXIoJHRpbWVwaWNrZXJQb3B1cCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBmb2N1c09uSW5wdXRFbCgpIHtcbiAgICAgICAgaWYgKCQodGhpcy5uYXRpdmVFbGVtZW50KS5jbG9zZXN0KCcuY2FwdGlvbi1mbG9hdGluZycpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICQodGhpcy5uYXRpdmVFbGVtZW50KS5maW5kKCcuYXBwLXRleHRib3gnKS5mb2N1cygpO1xuICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIGRhdGUgaXMgdmFsaWQgb3Igbm90XG4gICAgICogQHJldHVybnMgYm9vbGVhbiB2YWx1ZSwgdHJ1ZSBpZiBkYXRlIGlzIHZhbGlkIGVsc2UgcmV0dXJucyBmYWxzZVxuICAgICAqL1xuICAgIHByaXZhdGUgaXNWYWxpZERhdGUoZGF0ZSkge1xuICAgICAgICByZXR1cm4gZGF0ZSAmJiBkYXRlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oZGF0ZS5nZXRUaW1lKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIHRpbWUgaXMgdmFsaWQgb3Igbm90XG4gICAgICovXG4gICAgcHJpdmF0ZSB0aW1lRm9ybWF0VmFsaWRhdGlvbigpIHtcbiAgICAgICAgY29uc3QgZW50ZXJlZERhdGUgPSAkKHRoaXMubmF0aXZlRWxlbWVudCkuZmluZCgnaW5wdXQnKS52YWwoKTtcbiAgICAgICAgY29uc3QgbmV3VmFsID0gZ2V0TmF0aXZlRGF0ZU9iamVjdChlbnRlcmVkRGF0ZSwge21lcmlkaWFuczogdGhpcy5tZXJpZGlhbnMsIHBhdHRlcm46IHRoaXMuZGF0ZXBhdHRlcm59KTtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm1hdFZhbGlkYXRpb24obmV3VmFsLCBlbnRlcmVkRGF0ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludmFsaWREYXRlVGltZUZvcm1hdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVRpbWVWYWx1ZShlbCwgdmFsdWUsIGZpZWxkTmFtZSkge1xuICAgICAgICBsZXQgbWluRWwgPSBlbC5maW5kKCdpbnB1dFthcmlhLWxhYmVsPVwibWludXRlc1wiXScpO1xuICAgICAgICBsZXQgc2VjRWwgPSBlbC5maW5kKCdpbnB1dFthcmlhLWxhYmVsPVwic2Vjb25kc1wiXScpO1xuICAgICAgICBtaW5FbC52YWx1ZSA9IHNlY0VsLnZhbHVlID0gJzAwJztcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9PT0gJ21pbnV0ZXMnID8gdGhpcy5ic1RpbWVQaWNrZXIudXBkYXRlTWludXRlcyhtaW5FbCkgOiB0aGlzLmJzVGltZVBpY2tlci51cGRhdGVTZWNvbmRzKHNlY0VsKTtcbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZE5hbWUgPT09ICdtaW51dGVzJyA/IHRoaXMuYnNUaW1lUGlja2VyLnVwZGF0ZU1pbnV0ZXMobWluRWwpIDogdGhpcy5ic1RpbWVQaWNrZXIudXBkYXRlU2Vjb25kcyhzZWNFbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGV2ZW50cyB0byBnaXZlbiBlbGVtZW50XG4gICAgICogQHBhcmFtICRlbCAtIGVsZW1lbnQgb24gd2hpY2ggdGhlIGV2ZW50IGlzIGFkZGVkXG4gICAgICovXG4gICAgcHJpdmF0ZSBhZGRFdmVudHNPblRpbWVQaWNrZXIoJGVsOiBKUXVlcnkpIHtcbiAgICAgICAgY29uc3QgaW5wdXRGaWVsZHMgPSAkZWwuZmluZCgnLmJzLXRpbWVwaWNrZXItZmllbGQnKTtcbiAgICAgICAgLy8gV01TLTE5MzgyOiB1cGRhdGUgbWludXRlcyBhbmQgc2Vjb25kcyB0byAwIHdoZW4gd2UgZW50ZXIgaG91ciB2YWx1ZVxuICAgICAgICBpbnB1dEZpZWxkcy5maXJzdCgpLm9uKCdrZXl1cCcsIGV2dCA9PiB7XG4gICAgICAgICAgICBjb25zdCBob3VyVmFsdWUgPSAoZXZ0LnRhcmdldCBhcyBhbnkpLnZhbHVlO1xuICAgICAgICAgICAgZm9yRWFjaChpbnB1dEZpZWxkcywgKGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBpZiAoZXZ0LnRhcmdldCAhPT0gZmllbGQgJiYgZmllbGQudmFsdWUgPT09ICcnICYmIGhvdXJWYWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGROYW1lID0gaW5kZXggPT09IDEgPyAnbWludXRlcycgOiAnc2Vjb25kcyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGltZVZhbHVlKCRlbCwgaG91clZhbHVlLCBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZW1vdmVLZXl1cExpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgICAgICAgaW5wdXRGaWVsZHMuZmlyc3QoKS5vZmYoJ2tleXVwJyk7XG4gICAgICAgIH07XG4gICAgICAgICRlbC5vbigna2V5ZG93bicsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0ICR0YXJnZXQgPSAkKGV2ZW50LnRhcmdldCk7XG4gICAgICAgICAgICBjb25zdCAkcGFyZW50ID0gJHRhcmdldC5wYXJlbnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRTY29wZSA9IHRoaXMuZWxlbWVudFNjb3BlO1xuXG4gICAgICAgICAgICBsZXQgc3RvcFByb3BvZ2F0aW9uLCBwcmV2ZW50RGVmYXVsdDtcblxuICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50U2NvcGUuaGlkZVRpbWVwaWNrZXJEcm9wZG93bigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoJHRhcmdldC5oYXNDbGFzcygnYnMtdGltZXBpY2tlci1maWVsZCcpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCRwYXJlbnQuaXMoJzpmaXJzdC1jaGlsZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoZXZlbnQuc2hpZnRLZXkgJiYgZXZlbnQua2V5ID09PSAnVGFiJykgfHwgZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTY29wZS5zZXRJc1RpbWVPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BQcm9wb2dhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCRwYXJlbnQuaXMoJzpsYXN0LWNoaWxkJykgfHwgKCRwYXJlbnQubmV4dCgpLm5leHQoKS5maW5kKCdidXR0b24uZGlzYWJsZWQnKS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInIHx8IGV2ZW50LmtleSA9PT0gJ0VzY2FwZScgfHwgZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50U2NvcGUuc2V0SXNUaW1lT3BlbihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9wUHJvcG9nYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50U2NvcGUuc2V0SXNUaW1lT3BlbihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9wUHJvcG9nYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzdG9wUHJvcG9nYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudFNjb3BlLm1pbnRpbWUgJiYgZWxlbWVudFNjb3BlLm1heHRpbWUgJiYgIXRoaXMuaXNWYWxpZERhdGUoZWxlbWVudFNjb3BlLmJzVGltZVZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFNjb3BlLmJzVGltZVZhbHVlID0gZWxlbWVudFNjb3BlLm1heFRpbWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTY29wZS5ic1RpbWVWYWx1ZSA9IGVsZW1lbnRTY29wZS5taW5UaW1lO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52YWxpZERhdGVUaW1lRm9ybWF0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsIHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5kYXRlcGF0dGVybiB8fCB0aGlzLnRpbWVwYXR0ZXJuO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0Rm9ybWF0dGVkRGF0ZShlbGVtZW50U2NvcGUuZGF0ZVBpcGUsIGVsZW1lbnRTY29wZS5ic1RpbWVWYWx1ZSwgcGF0dGVybiwgdGhpcy50aW1lWm9uZSwgbnVsbCwgbnVsbCwgdGhpcykgPT09IGVsZW1lbnRTY29wZS5kaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcy5uYXRpdmVFbGVtZW50KS5maW5kKCcuZGlzcGxheS1pbnB1dCcpLnZhbChlbGVtZW50U2NvcGUuZGlzcGxheVZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyB8fCBldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbWVGb3JtYXRWYWxpZGF0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICgkdGFyZ2V0Lmhhc0NsYXNzKCdidG4tZGVmYXVsdCcpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicgfHwgZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50U2NvcGUuc2V0SXNUaW1lT3BlbihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAkZWwuZmluZCgnYScpLm9uKCdjbGljaycsIGV2dCA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50U2NvcGUgPSB0aGlzLmVsZW1lbnRTY29wZTtcbiAgICAgICAgICAgIGNvbnN0ICR0YXJnZXQgPSAkKGV2dC50YXJnZXQpO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnRTY29wZS5taW50aW1lICYmIGVsZW1lbnRTY29wZS5tYXh0aW1lICYmICF0aGlzLmlzVmFsaWREYXRlKGVsZW1lbnRTY29wZS5ic1RpbWVWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoJHRhcmdldC5maW5kKCdzcGFuJykuaGFzQ2xhc3MoJ2JzLWNoZXZyb24tZG93bicpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTY29wZS5ic1RpbWVWYWx1ZSA9IGVsZW1lbnRTY29wZS5tYXhUaW1lO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJHRhcmdldC5maW5kKCdzcGFuJykuaGFzQ2xhc3MoJ2JzLWNoZXZyb24tdXAnKSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50U2NvcGUuYnNUaW1lVmFsdWUgPSBlbGVtZW50U2NvcGUubWluVGltZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRpbWVGb3JtYXRWYWxpZGF0aW9uKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVGb3JtYXQocGF0dGVybikge1xuICAgICAgICBpZiAocGF0dGVybiA9PT0gJ2RhdGVwYXR0ZXJuJykge1xuICAgICAgICAgICAgdGhpcy5fZGF0ZU9wdGlvbnMuZGF0ZUlucHV0Rm9ybWF0ID0gdGhpcy5kYXRlcGF0dGVybjtcbiAgICAgICAgICAgIHRoaXMuc2hvd3NlY29uZHMgPSBpbmNsdWRlcyh0aGlzLmRhdGVwYXR0ZXJuLCAncycpO1xuICAgICAgICAgICAgdGhpcy5pc21lcmlkaWFuID0gaW5jbHVkZXModGhpcy5kYXRlcGF0dGVybiwgJ2gnKTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXR0ZXJuID09PSAndGltZXBhdHRlcm4nKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dzZWNvbmRzID0gaW5jbHVkZXModGhpcy50aW1lcGF0dGVybiwgJ3MnKTtcbiAgICAgICAgICAgIHRoaXMuaXNtZXJpZGlhbiA9IGluY2x1ZGVzKHRoaXMudGltZXBhdHRlcm4sICdoJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRNb2JpbGVJbnB1dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcubW9iaWxlLWlucHV0JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgb25EYXRlVGltZUlucHV0Qmx1cigpIHtcbiAgICAgICAgLy8gcmVtb3ZpbmcgdGhlIG9wYWNpdHkgb24gYmx1ciBvZiB0aGUgbW9iaWxlIHdpZGdldFxuICAgICAgICBjb25zdCBkaXNwbGF5SW5wdXRFbGVtID0gdGhpcy5nZXRNb2JpbGVJbnB1dCgpO1xuICAgICAgICBpZiAoZGlzcGxheUlucHV0RWxlbSAmJiAhaGFzQ29yZG92YSgpKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMubmF0aXZlRWxlbWVudC5jaGlsZHJlbjtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbltpXS5jbGFzc0xpc3QucmVtb3ZlKCdhZGQtb3BhY2l0eScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlzcGxheUlucHV0RWxlbS5jbGFzc0xpc3QucmVtb3ZlKCdyZW1vdmUtb3BhY2l0eScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25EYXRlVGltZUlucHV0Rm9jdXMoc2tpcEZvY3VzOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmxvYWROYXRpdmVEYXRlSW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXNwbGF5SW5wdXRFbGVtID0gdGhpcy5nZXRNb2JpbGVJbnB1dCgpO1xuICAgICAgICAvLyB0b2dnbGluZyB0aGUgY2xhc3NlcyB0byBzaG93IGFuZCBoaWRlIHRoZSBuYXRpdmUgd2lkZ2V0IHVzaW5nIG9wYWNpdHlcbiAgICAgICAgaWYgKHNraXBGb2N1cyAmJiAhaGFzQ29yZG92YSgpKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMubmF0aXZlRWxlbWVudC5jaGlsZHJlbjtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbltpXS5jbGFzc0xpc3QuYWRkKCdhZGQtb3BhY2l0eScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlzcGxheUlucHV0RWxlbS5jbGFzc0xpc3QuYWRkKCdyZW1vdmUtb3BhY2l0eScpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpc3BsYXlJbnB1dEVsZW0gJiYgdGhpcy5fdHJpZ2dlcmVkQnlVc2VyKSB7XG4gICAgICAgICAgICBkaXNwbGF5SW5wdXRFbGVtLmZvY3VzKCk7XG4gICAgICAgICAgICBkaXNwbGF5SW5wdXRFbGVtLmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDb3Jkb3ZhUGx1Z2luRGF0ZVBpY2tlckFwaSgpIHtcbiAgICAgICAgaWYgKGlzSW9zKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQod2luZG93LCAnY29yZG92YS53YXZlbWFrZXIuZGF0ZVBpY2tlci5zZWxlY3REYXRlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBtb3VzZSBldmVudHMgdG8gRGF0ZXBpY2tlciBwb3B1cC4gVGhlc2UgZXZlbnRzIGFyZSByZXF1aXJlZCB3aGVuIHdlIG5hdmlnYXRlIGRhdGUgcGlja2VyIHRocm91Z2ggbW91c2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBhZGREYXRlcGlja2VyTW91c2VFdmVudHMoKSB7XG4gICAgICAgICQoXCIuYnMtZGF0ZXBpY2tlci1oZWFkIC5wcmV2aW91cyBzcGFuXCIpLmF0dHIoXCJhcmlhLWhpZGRlblwiLCAndHJ1ZScpO1xuICAgICAgICAkKFwiLmJzLWRhdGVwaWNrZXItaGVhZCAubmV4dCBzcGFuXCIpLmF0dHIoXCJhcmlhLWhpZGRlblwiLCAndHJ1ZScpO1xuXG4gICAgICAgICQoXCIuYnMtZGF0ZXBpY2tlci1oZWFkXCIpLm9uKFwiY2xpY2tcIiwgXCIucHJldmlvdXNcIiwgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5leHQgPSB0aGlzLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSwgMCk7XG4gICAgICAgICAgICB0aGlzLnByZXYgPSB0aGlzLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSwgLTIpO1xuICAgICAgICAgICAgdGhpcy5jbGlja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBvcmlnaW5hbCBtb3VzZSBjbGlja1xuICAgICAgICAgICAgaWYgKGV2ZW50Lm9yaWdpbmFsRXZlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzRm9yRGF0ZSgtMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcHJldk1vbiA9IHRoaXMuZ2V0TW9udGgodGhpcy5hY3RpdmVEYXRlLCAtMSk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICQoXCIuYnMtZGF0ZXBpY2tlci1oZWFkIC5wcmV2aW91cyBzcGFuXCIpLmF0dHIoXCJhcmlhLWhpZGRlblwiLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgICQoXCIuYnMtZGF0ZXBpY2tlci1oZWFkIC5uZXh0IHNwYW5cIikuYXR0cihcImFyaWEtaGlkZGVuXCIsICd0cnVlJyk7XG4gICAgICAgICAgICAgICAgJChcIi5icy1kYXRlcGlja2VyLWhlYWQgLm5leHRcIikuYXR0cignYXJpYS1sYWJlbCcsIGBOZXh0IE1vbnRoLCAke3RoaXMubmV4dC5mdWxsTW9udGh9ICR7dGhpcy5uZXh0LmRhdGUuZ2V0RnVsbFllYXIoKX1gKTtcbiAgICAgICAgICAgICAgICAkKFwiLmJzLWRhdGVwaWNrZXItaGVhZCAucHJldmlvdXNcIikuYXR0cignYXJpYS1sYWJlbCcsIGBQcmV2aW91cyBNb250aCwgJHt0aGlzLnByZXYuZnVsbE1vbnRofSAke3RoaXMucHJldi5kYXRlLmdldEZ1bGxZZWFyKCl9YCk7XG4gICAgICAgICAgICAgICAgJCgnLmJzLWRhdGVwaWNrZXItaGVhZCAuY3VycmVudCcpLmZpcnN0KCkuYXBwZW5kKGA8aDIgYXJpYS1oaWRkZW49XCJmYWxzZVwiIGFyaWEtYXRvbWljPVwidHJ1ZVwiIGFyaWEtbGl2ZT0ncG9saXRlJyBjbGFzcz1cInNyLW9ubHlcIj5DaGFuZ2VkIHRvIFByZXZpb3VzIE1vbnRoLCAke3ByZXZNb24uZnVsbE1vbnRofSBhbmQgeWVhciAke3ByZXZNb24uZGF0ZS5nZXRGdWxsWWVhcigpfTwvaDI+YCk7XG4gICAgICAgICAgICAgICAgJCgnLmJzLWRhdGVwaWNrZXItaGVhZCcpLm9uKCdmb2N1cycsICcuY3VycmVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgJCgnLmJzLWRhdGVwaWNrZXItaGVhZCAuY3VycmVudCcpLmZpbmQoJ2gyJykucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAkKGAuYnMtZGF0ZXBpY2tlci1oZWFkIC5wcmV2aW91c2ApLmZvY3VzKCk7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuICAgICAgICAkKFwiLmJzLWRhdGVwaWNrZXItaGVhZFwiKS5vbihcImNsaWNrXCIsIFwiLm5leHRcIiwgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5leHQgPSB0aGlzLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSwgMik7XG4gICAgICAgICAgICB0aGlzLnByZXYgPSB0aGlzLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSwgMCk7XG4gICAgICAgICAgICB0aGlzLmNsaWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIG9yaWdpbmFsIG1vdXNlIGNsaWNrXG4gICAgICAgICAgICBpZiAoZXZlbnQub3JpZ2luYWxFdmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXNGb3JEYXRlKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG5leHRNb24gPSB0aGlzLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSwgMSk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAkKFwiLmJzLWRhdGVwaWNrZXItaGVhZCAucHJldmlvdXMgc3BhblwiKS5hdHRyKFwiYXJpYS1oaWRkZW5cIiwgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICAkKFwiLmJzLWRhdGVwaWNrZXItaGVhZCAubmV4dCBzcGFuXCIpLmF0dHIoXCJhcmlhLWhpZGRlblwiLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgICQoXCIuYnMtZGF0ZXBpY2tlci1oZWFkIC5uZXh0XCIpLmF0dHIoJ2FyaWEtbGFiZWwnLCBgTmV4dCBNb250aCwgJHt0aGlzLm5leHQuZnVsbE1vbnRofSAke3RoaXMubmV4dC5kYXRlLmdldEZ1bGxZZWFyKCl9YCk7XG4gICAgICAgICAgICAgICAgJChcIi5icy1kYXRlcGlja2VyLWhlYWQgLnByZXZpb3VzXCIpLmF0dHIoJ2FyaWEtbGFiZWwnLCBgUHJldmlvdXMgTW9udGgsICR7dGhpcy5wcmV2LmZ1bGxNb250aH0gJHt0aGlzLnByZXYuZGF0ZS5nZXRGdWxsWWVhcigpfWApO1xuICAgICAgICAgICAgICAgICQoJy5icy1kYXRlcGlja2VyLWhlYWQgLmN1cnJlbnQnKS5maXJzdCgpLmFwcGVuZChgPGgyIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBhcmlhLWF0b21pYz1cInRydWVcIiBhcmlhLWxpdmU9J3BvbGl0ZScgY2xhc3M9XCJzci1vbmx5XCI+Q2hhbmdlZCB0byBOZXh0IE1vbnRoLCAke25leHRNb24uZnVsbE1vbnRofSBhbmQgeWVhciAke25leHRNb24uZGF0ZS5nZXRGdWxsWWVhcigpfTwvaDI+YCk7XG4gICAgICAgICAgICAgICAgJCgnLmJzLWRhdGVwaWNrZXItaGVhZCcpLm9uKCdmb2N1cycsICcuY3VycmVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgJCgnLmJzLWRhdGVwaWNrZXItaGVhZCAuY3VycmVudCcpLmZpbmQoJ2gyJykucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAkKGAuYnMtZGF0ZXBpY2tlci1oZWFkIC5uZXh0YCkuZm9jdXMoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuICAgICAgICAkKFwiLmJzLWRhdGVwaWNrZXItaGVhZFwiKS5vbihcImNsaWNrXCIsIFwiLmN1cnJlbnRcIiwgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAvLyBjaGVjayBmb3Igb3JpZ2luYWwgbW91c2UgY2xpY2tcbiAgICAgICAgICAgIGlmIChldmVudC5vcmlnaW5hbEV2ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGb2N1c0ZvckN1cnJlbnRNb250aE9yeWVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgJCgnLmJzLWRhdGVwaWNrZXItYm9keScpLm9uKFwiY2xpY2tcIiwgXCIuYnMtZGF0ZXBpY2tlci1hY3Rpb24tYnV0dG9uc1wiLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIG9yaWdpbmFsIG1vdXNlIGNsaWNrXG4gICAgICAgICAgICBpZiAoZXZlbnQub3JpZ2luYWxFdmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXNGb3JNb250aE9yRGF5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBpZighdGhpcy5jbGlja2VkKSB7XG4gICAgICAgICQoXCIuYnMtZGF0ZXBpY2tlci1oZWFkIC5uZXh0XCIpLmF0dHIoJ2FyaWEtbGFiZWwnLCBgTmV4dCBNb250aCwgJHt0aGlzLm5leHQuZnVsbE1vbnRofSAke3RoaXMubmV4dC5kYXRlLmdldEZ1bGxZZWFyKCl9YCk7XG4gICAgICAgICQoXCIuYnMtZGF0ZXBpY2tlci1oZWFkIC5wcmV2aW91c1wiKS5hdHRyKCdhcmlhLWxhYmVsJywgYFByZXZpb3VzIE1vbnRoLCAke3RoaXMucHJldi5mdWxsTW9udGh9ICR7dGhpcy5wcmV2LmRhdGUuZ2V0RnVsbFllYXIoKX1gKTtcbiAgICAgICAgLy8gIH1cbiAgICB9XG5cbiAgICBibHVyRGF0ZUlucHV0KGlzUGlja2VyT3Blbikge1xuICAgICAgICBjb25zdCBkaXNwbGF5SW5wdXRFbGVtID0gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kaXNwbGF5LWlucHV0JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmIChpc1BpY2tlck9wZW4pIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZGlzcGxheUlucHV0RWxlbS5ibHVyKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdj8pIHtcblxuICAgICAgICBpZiAoa2V5ID09PSAndGFiaW5kZXgnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ3JlcXVpcmVkJykge1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy5kYXRhdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdkYXRlcGF0dGVybicpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRm9ybWF0KGtleSk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnc2hvd3dlZWtzJykge1xuICAgICAgICAgICAgdGhpcy5fZGF0ZU9wdGlvbnMuc2hvd1dlZWtOdW1iZXJzID0gbnY7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbWluZGF0ZScpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLm1pbkRhdGUgPSAobnYgPT09IENVUlJFTlRfREFURSkgPyB0aGlzLm1pbmRhdGUgPSBuZXcgRGF0ZSgpIDogZ2V0RGF0ZU9iaihudik7XG4gICAgICAgICAgICB0aGlzLm1pbkRhdGVNYXhEYXRlVmFsaWRhdGlvbk9uSW5wdXQodGhpcy5kYXRhdmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ21heGRhdGUnKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5tYXhEYXRlID0gKG52ID09PSBDVVJSRU5UX0RBVEUpID8gdGhpcy5tYXhkYXRlID0gbmV3IERhdGUoKSA6IGdldERhdGVPYmoobnYpO1xuICAgICAgICAgICAgdGhpcy5taW5EYXRlTWF4RGF0ZVZhbGlkYXRpb25PbklucHV0KHRoaXMuZGF0YXZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdleGNsdWRlZGF0ZXMnIHx8IGtleSA9PT0gJ2V4Y2x1ZGVkYXlzJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZXhjbHVkZWRheXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4Y2x1ZGVkRGF5c1RvRGlzYWJsZSA9IHNwbGl0KHRoaXMuZXhjbHVkZWRheXMsICcsJykubWFwKChkYXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICtkYXk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5leGNsdWRlZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4Y2x1ZGVkRGF0ZXNUb0Rpc2FibGUgPSB0aGlzLmV4Y2x1ZGVkYXRlcztcbiAgICAgICAgICAgICAgICBpZiAoaXNTdHJpbmcodGhpcy5leGNsdWRlZGF0ZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leGNsdWRlZERhdGVzVG9EaXNhYmxlID0gc3BsaXQodGhpcy5leGNsdWRlZGF0ZXMsICcsJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZXhjbHVkZWREYXRlc1RvRGlzYWJsZSA9IHRoaXMuZXhjbHVkZWREYXRlc1RvRGlzYWJsZS5tYXAoZCA9PiBnZXREYXRlT2JqKGQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubWluRGF0ZU1heERhdGVWYWxpZGF0aW9uT25JbnB1dCh0aGlzLmRhdGF2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnc2VsZWN0ZnJvbW90aGVybW9udGgnKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5zZWxlY3RGcm9tT3RoZXJNb250aCA9IG52O1xuXG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAndG9kYXlidXR0b24nKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5zaG93VG9kYXlCdXR0b24gPSBudjtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdjbGVhcmJ1dHRvbicpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLnNob3dDbGVhckJ1dHRvbiA9IG52O1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3RvZGF5YnV0dG9ubGFiZWwnKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy50b2RheUJ1dHRvbkxhYmVsID0gdGhpcy5pMThuU2VydmljZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKG52KSB8fCBudjtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdjbGVhcmJ1dHRvbmxhYmVsJykge1xuICAgICAgICAgICAgdGhpcy5fZGF0ZU9wdGlvbnMuY2xlYXJCdXR0b25MYWJlbCA9IHRoaXMuaTE4blNlcnZpY2UuZ2V0TG9jYWxpemVkTWVzc2FnZShudikgfHwgbnY7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnc2hvd2N1c3RvbXBpY2tlcicpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE5hdGl2ZURhdGVJbnB1dCA9IGlzTW9iaWxlKCkgJiYgIXRoaXMuc2hvd2N1c3RvbXBpY2tlcjtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdhZGFwdGl2ZXBvc2l0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5fZGF0ZU9wdGlvbnMuYWRhcHRpdmVQb3NpdGlvbiA9IG52O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIHRoaXMuY29udGFpbmVyVGFyZ2V0ID0gZ2V0Q29udGFpbmVyVGFyZ2V0Q2xhc3ModGhpcy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgdGhpcy5pc1JlYWRPbmx5ID0gdGhpcy5kYXRhZW50cnltb2RlICE9ICd1bmRlZmluZWQnICYmICF0aGlzLmlzRGF0YUVudHJ5TW9kZUVuYWJsZWRPbklucHV0KHRoaXMuZGF0YWVudHJ5bW9kZSk7XG5cbiAgICAgICAgLy8gdGhpcyBtb2JpbGVpbnB1dCB3aWR0aCB2YXJpZXMgaW4gaW9zIGhlbmNlIHNldHRpbmcgd2lkdGggaGVyZS5cbiAgICAgICAgY29uc3QgbW9iaWxlSW5wdXQgPSB0aGlzLmdldE1vYmlsZUlucHV0KCk7XG4gICAgICAgIGlmIChtb2JpbGVJbnB1dCkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbW9iaWxlSW5wdXQuc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgICAgICAgICAgICAgbW9iaWxlSW5wdXQuc3R5bGUuaGVpZ2h0ID0gJzEwMCUnO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0ZU9uU2hvd1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5kYXRlT25TaG93U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5jYW5jZWxMb2NhbGVDaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsTG9jYWxlQ2hhbmdlU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGV0YWNoKCkge1xuICAgICAgICB0aGlzLmRhdGV0aW1lcGlja2VyQ29tcG9uZW50Py5oaWRlTW9kYWwoKTtcbiAgICB9XG5cbiAgICBzZXRUaW1lem9uZShsb2NhbGUpIHtcbiAgICAgICAgdGhpcy5pMThuU2VydmljZS5zZXRUaW1lem9uZShsb2NhbGUsIHRoaXMpO1xuICAgIH1cbn1cbiJdfQ==
|
|
1016
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kYXRlLXRpbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2lucHV0L2Vwb2NoL3NyYy9iYXNlLWRhdGUtdGltZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBYSxRQUFRLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR3pHLE9BQU8sRUFBQyxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRSxPQUFPLEVBQ0gsbUJBQW1CLEVBQ25CLFVBQVUsRUFDVixnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLFVBQVUsRUFDVixLQUFLLEVBQ0wsUUFBUSxFQUNSLE9BQU8sRUFDVixNQUFNLFVBQVUsQ0FBQztBQUVsQixPQUFPLEVBQUMsdUJBQXVCLEVBQUUsVUFBVSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGtCQUFrQixFQUF3QixNQUFNLDBCQUEwQixDQUFDO0FBQ25GLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ2hGLE9BQU8sRUFBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxJQUFJLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUMsTUFBTSxXQUFXLENBQUM7O0FBS2xILE1BQU0sWUFBWSxH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QUFDO0lBQy9DLENBQUM7O29FQTNnQ2lCLHFCQUFxQjsyQkF5RDVCLG1CQUFtQjsyQkFDbkIsbUJBQW1COzJCQUNuQix1QkFBdUI7Ozs7Ozs7O2lGQTNEaEIscUJBQXFCO2NBRDFDLFNBQVM7O3NCQWdFcUMsTUFBTTt1QkFBQyxrQkFBa0I7O3NCQUFHLFFBQVE7cUJBTnJDLFVBQVU7a0JBQW5ELFNBQVM7bUJBQUMsbUJBQW1CO1lBQ1ksWUFBWTtrQkFBckQsU0FBUzttQkFBQyxtQkFBbUI7WUFDTSx1QkFBdUI7a0JBQTFELFNBQVM7bUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEluamVjdCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT3B0aW9uYWwsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbCwgVmFsaWRhdG9yfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0Zvcm1TdHlsZSwgZ2V0TG9jYWxlRGF5UGVyaW9kcywgVHJhbnNsYXRpb25XaWR0aH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7QnNEcm9wZG93bkRpcmVjdGl2ZX0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kcm9wZG93bic7XG5pbXBvcnQge1RpbWVwaWNrZXJDb21wb25lbnQsIFRpbWVwaWNrZXJDb25maWd9IGZyb20gJ25neC1ib290c3RyYXAvdGltZXBpY2tlcic7XG5pbXBvcnQge1xuICAgIEFic3RyYWN0STE4blNlcnZpY2UsXG4gICAgZ2V0RGF0ZU9iaixcbiAgICBnZXRGb3JtYXR0ZWREYXRlLFxuICAgIGdldE5hdGl2ZURhdGVPYmplY3QsXG4gICAgaGFzQ29yZG92YSxcbiAgICBpc0lvcyxcbiAgICBpc01vYmlsZSxcbiAgICBzZXRBdHRyXG59IGZyb20gJ0B3bS9jb3JlJztcblxuaW1wb3J0IHtnZXRDb250YWluZXJUYXJnZXRDbGFzcywgVG9EYXRlUGlwZX0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQge0Jhc2VGb3JtQ3VzdG9tQ29tcG9uZW50fSBmcm9tICdAd20vY29tcG9uZW50cy9pbnB1dCc7XG5pbXBvcnQge0JzRGF0ZXBpY2tlckNvbmZpZywgQnNEYXRlcGlja2VyRGlyZWN0aXZlfSBmcm9tICduZ3gtYm9vdHN0cmFwL2RhdGVwaWNrZXInO1xuaW1wb3J0IHtEYXRlVGltZVBpY2tlckNvbXBvbmVudH0gZnJvbSAnLi9kYXRlLXRpbWUvL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7ZmlsdGVyLCBmb3JFYWNoLCBnZXQsIGluY2x1ZGVzLCBpc05hTiBhcyBfaXNOYU4sIGlzU3RyaW5nLCBpc1VuZGVmaW5lZCwgcGFyc2VJbnQsIHNwbGl0fSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmRlY2xhcmUgY29uc3QgJDtcbmRlY2xhcmUgY29uc3QgbW9tZW50O1xuXG5jb25zdCBDVVJSRU5UX0RBVEUgPSAnQ1VSUkVOVF9EQVRFJztcbmNvbnN0IG1vbnRocyA9IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddO1xuY29uc3QgREFURVBJQ0tFUl9EUk9QRE9XTl9PUFRJT05TID0ge1xuICAgIEJVVFRPTjogJ2J1dHRvbicsXG4gICAgREVGQVVMVDogJ2RlZmF1bHQnXG59O1xuY29uc3QgREFUQUVOVFJZTU9ERV9EUk9QRE9XTl9PUFRJT05TID0ge1xuICAgIFBJQ0tFUjogJ3BpY2tlcicsXG4gICAgREVGQVVMVDogJ2RlZmF1bHQnXG59O1xuXG4vLyBQcm92aWRpbmcgbWVyaWRpYW5zIHRvIHRoZSB0aW1lcGlja2VyIGJhZXNkIG9uIHNlbGVjdGVkIGxvY2FsZVxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWVwaWNrZXJDb25maWcoaTE4blNlcnZpY2UpOiBUaW1lcGlja2VyQ29uZmlnIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgVGltZXBpY2tlckNvbmZpZygpLCB7XG4gICAgICAgIG1lcmlkaWFuczogZ2V0TG9jYWxlRGF5UGVyaW9kcyhpMThuU2VydmljZS5nZXRTZWxlY3RlZExvY2FsZSgpLCBGb3JtU3R5bGUuRm9ybWF0LCBUcmFuc2xhdGlvbldpZHRoLkFiYnJldmlhdGVkKVxuICAgIH0pO1xufVxuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRGF0ZVRpbWVDb21wb25lbnQgZXh0ZW5kcyBCYXNlRm9ybUN1c3RvbUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgVmFsaWRhdG9yIHtcbiAgICBwdWJsaWMgcmVxdWlyZWQ6IGJvb2xlYW47XG4gICAgcHVibGljIGRpc2FibGVkOiBib29sZWFuO1xuICAgIHB1YmxpYyB0YWJpbmRleDogYW55O1xuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG4gICAgcHVibGljIGF1dG9mb2N1czogYm9vbGVhbjtcbiAgICBwdWJsaWMgcmVhZG9ubHk6IGJvb2xlYW47XG4gICAgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gICAgcHVibGljIHNob3J0Y3V0a2V5OiBzdHJpbmc7XG4gICAgcHVibGljIF90cmlnZ2VyZWRCeVVzZXI6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgZXhjbHVkZWRheXM6IHN0cmluZztcbiAgICBwdWJsaWMgZXhjbHVkZWREYXlzVG9EaXNhYmxlOiBBcnJheTxudW1iZXI+O1xuICAgIHB1YmxpYyBleGNsdWRlZERhdGVzVG9EaXNhYmxlOiBBcnJheTxEYXRlPjtcbiAgICBwdWJsaWMgZXhjbHVkZWRhdGVzO1xuICAgIHB1YmxpYyBvdXRwdXRmb3JtYXQ7XG4gICAgcHVibGljIG1pbmRhdGU7XG4gICAgcHVibGljIG1heGRhdGU7XG4gICAgcHVibGljIGRhdGFlbnRyeW1vZGU7XG4gICAgcHJvdGVjdGVkIGFjdGl2ZURhdGU7XG4gICAgcHJpdmF0ZSBlbGVtZW50U2NvcGU7XG4gICAgcHVibGljIHZpZXdtb2RlO1xuICAgIHB1YmxpYyBkYXRlcGF0dGVybjtcbiAgICBwdWJsaWMgdGltZXBhdHRlcm47XG4gICAgcHJvdGVjdGVkIHNob3dzZWNvbmRzOiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBpc21lcmlkaWFuOiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBtZXJpZGlhbnM6IGFueTtcbiAgICBwcm90ZWN0ZWQgZGF0ZVBpcGU7XG4gICAgcHJvdGVjdGVkIGkxOG5TZXJ2aWNlO1xuICAgIHB1YmxpYyBpc1JlYWRPbmx5ID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIHNlbGVjdGVkTG9jYWxlOiBzdHJpbmc7XG4gICAgcHVibGljIHNlbGVjdGZyb21vdGhlcm1vbnRoOiBib29sZWFuO1xuICAgIHB1YmxpYyB0b2RheWJ1dHRvbjogYm9vbGVhbjtcbiAgICBwdWJsaWMgY2xlYXJidXR0b246IGJvb2xlYW47XG4gICAgcHVibGljIHJlbW92ZUtleXVwTGlzdGVuZXI7XG4gICAgcHVibGljIGxvYWROYXRpdmVEYXRlSW5wdXQ7XG4gICAgcHVibGljIHNob3djdXN0b21waWNrZXI7XG4gICAgcHVibGljIG5leHQ7XG4gICAgcHVibGljIHByZXY7XG4gICAgcHVibGljIGNsaWNrZWQgPSBmYWxzZTtcblxuICAgIHByb3RlY3RlZCBkYXRlTm90SW5SYW5nZTogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgdGltZU5vdEluUmFuZ2U6IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIGludmFsaWREYXRlVGltZUZvcm1hdDogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgZGF0ZU9uU2hvd1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgY2FuY2VsTG9jYWxlQ2hhbmdlU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyBnZXQgdGltZVpvbmUoKSB7IHJldHVybiB0aGlzLmluai5nZXQoQWJzdHJhY3RJMThuU2VydmljZSkuZ2V0VGltZXpvbmUodGhpcyk7IH1cblxuICAgIGZvcm1hdHNCeUxvY2FsZSA9IHsndGltZXpvbmUnOiAnJ307XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGFuIGludGVybmFsIHByb3BlcnR5IHVzZWQgdG8gbWFwIHRoZSBjb250YWluZXJDbGFzcywgc2hvd1dlZWtOdW1iZXJzIGV0Yy4sIHRvIHRoZSBic0RhdGVwaWNrZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgX2RhdGVPcHRpb25zOiBCc0RhdGVwaWNrZXJDb25maWcgPSBuZXcgQnNEYXRlcGlja2VyQ29uZmlnKCk7XG4gICAgcHJvdGVjdGVkIGJzRGF0ZVBpY2tlckRpcmVjdGl2ZTogQnNEYXRlcGlja2VyRGlyZWN0aXZlO1xuXG4gICAgQFZpZXdDaGlsZChCc0Ryb3Bkb3duRGlyZWN0aXZlKSBwcm90ZWN0ZWQgYnNEcm9wZG93bjtcbiAgICBAVmlld0NoaWxkKFRpbWVwaWNrZXJDb21wb25lbnQpIHByb3RlY3RlZCBic1RpbWVQaWNrZXI7XG4gICAgQFZpZXdDaGlsZChEYXRlVGltZVBpY2tlckNvbXBvbmVudCkgZGF0ZXRpbWVwaWNrZXJDb21wb25lbnQ7XG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVR5cGU6IHN0cmluZztcbiAgICBjb250YWluZXJUYXJnZXQ6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKGluajogSW5qZWN0b3IsIFdJREdFVF9DT05GSUcsIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueSkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIGV4cGxpY2l0Q29udGV4dCk7XG4gICAgICAgIHRoaXMuaTE4blNlcnZpY2UgPSB0aGlzLmluai5nZXQoQWJzdHJhY3RJMThuU2VydmljZSk7XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlbG9hZCcpO1xuXG4gICAgICAgIHRoaXMuZGF0ZVBpcGUgPSB0aGlzLmluai5nZXQoVG9EYXRlUGlwZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMb2NhbGUgPSB0aGlzLmkxOG5TZXJ2aWNlLmdldFNlbGVjdGVkTG9jYWxlKCk7XG4gICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLnRvZGF5UG9zaXRpb24gPSAnbGVmdCc7XG4gICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLmNsZWFyUG9zaXRpb24gPSAncmlnaHQnO1xuICAgICAgICB0aGlzLm1lcmlkaWFucyA9IGdldExvY2FsZURheVBlcmlvZHModGhpcy5zZWxlY3RlZExvY2FsZSwgRm9ybVN0eWxlLkZvcm1hdCwgVHJhbnNsYXRpb25XaWR0aC5BYmJyZXZpYXRlZCk7XG4gICAgICAgIHRoaXMubG9hZE5hdGl2ZURhdGVJbnB1dCA9IGlzTW9iaWxlKCkgJiYgIXRoaXMuc2hvd2N1c3RvbXBpY2tlcjtcblxuICAgICAgICB0aGlzLmNhbmNlbExvY2FsZUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuZ2V0QXBwSW5zdGFuY2UoKS5zdWJzY3JpYmUoXCJsb2NhbGUtY2hhbmdlZFwiLCAobG9jYWxlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRhdGVQaXBlLmRhdGVQaXBlLmxvY2FsZSA9IGxvY2FsZS5hbmd1bGFyO1xuICAgICAgICAgICAgdGhpcy5fZGF0ZU9wdGlvbnMudG9kYXlCdXR0b25MYWJlbCA9IHRoaXMuaTE4blNlcnZpY2UuZ2V0TG9jYWxpemVkTWVzc2FnZSgnTEFCRUxfVE9EQVlfREFURScpO1xuICAgICAgICAgICAgdGhpcy5fZGF0ZU9wdGlvbnMuY2xlYXJCdXR0b25MYWJlbCA9IHRoaXMuaTE4blNlcnZpY2UuZ2V0TG9jYWxpemVkTWVzc2FnZSgnTEFCRUxfQ0xFQVJfREFURScpO1xuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgaW5wdXQgdmFsdWUgaXMgZGVmYXVsdCAoaS5lIG9wZW4gZGF0ZSBwaWNrZXIgb24gaW5wdXQgY2xpY2spXG4gICAgICogQHBhcmFtMSBkcm9wZG93bnZhbHVlLCB1c2VyIHNlbGVjdGVkIHZhbHVlIChieSBkZWZhdWx0IGRhdGVwaWNrZXIgb3BlbnMgb24gaW5wdXQgY2xpY2spXG4gICAgICogKiovXG4gICAgcHJvdGVjdGVkIGlzRHJvcERvd25EaXNwbGF5RW5hYmxlZE9uSW5wdXQoZHJvcGRvd252YWx1ZSkge1xuICAgICAgICByZXR1cm4gZHJvcGRvd252YWx1ZSA9PT0gREFURVBJQ0tFUl9EUk9QRE9XTl9PUFRJT05TLkRFRkFVTFQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyB0cnVlIGlmIHRoZSBpbnB1dCB2YWx1ZSBpcyBkZWZhdWx0IChpLmUgRGF0YSBlbnRyeSBjYW4gYmUgZG9uZSBlaXRoZXIgYnkgc2VsZWN0aW5nIGZyb20gdGhlIERhdGUvRGF0ZVRpbWUvVGltZSBQaWNrZXIgb3IgYnkgZW50ZXJpbmcgIG1hbnVhbGx5IHVzaW5nIHRoZSBrZXlib2FyZC4gKVxuICAgICAqIEBwYXJhbTEgZHJvcGRvd252YWx1ZSwgdXNlciBzZWxlY3RlZCB2YWx1ZVxuICAgICAqICoqL1xuICAgIHByb3RlY3RlZCBpc0RhdGFFbnRyeU1vZGVFbmFibGVkT25JbnB1dChkcm9wZG93bnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkcm9wZG93bnZhbHVlID09PSBEQVRBRU5UUllNT0RFX0RST1BET1dOX09QVElPTlMuREVGQVVMVDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBzaG93IHZhbGlkYXRpb24gbWVzc2FnZSBkZXBlbmRpbmcgb24gdGhlIGlzTmF0aXZlUGlja2VyIGZsYWcuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzaG93VmFsaWRhdGlvbigkZXZlbnQsIGRpc3BsYXlWYWx1ZSwgaXNOYXRpdmVQaWNrZXIsIG1zZykge1xuICAgICAgICBpZiAoaXNOYXRpdmVQaWNrZXIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignbWluIG1heCBkYXRlIHZhbGlkYXRpb24gZmFpbGVkICcsIG1zZyk7XG4gICAgICAgICAgICByZXR1cm4gJCgkZXZlbnQudGFyZ2V0KS52YWwoZGlzcGxheVZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0RGlzcGxheUlucHV0KCkge1xuICAgICAgICAkKHRoaXMubmF0aXZlRWxlbWVudCkuZmluZCgnLmRpc3BsYXktaW5wdXQnKS52YWwoJycpO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWxpZGF0ZShjOiBBYnN0cmFjdENvbnRyb2wpIHtcbiAgICAgICAgaWYgKHRoaXMuaW52YWxpZERhdGVUaW1lRm9ybWF0KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGludmFsaWREYXRlVGltZUZvcm1hdDoge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5kYXRlTm90SW5SYW5nZSkgJiYgdGhpcy5kYXRlTm90SW5SYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRlTm90SW5SYW5nZToge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMudGltZU5vdEluUmFuZ2UpICYmIHRoaXMudGltZU5vdEluUmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdGltZU5vdEluUmFuZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLyogV01TLTE4MjY5IHwgRXh0ZW5kaW5nIHRoZSBleGlzdGluZyB2YWxpZGF0aW9uIGZvciAncmVxdWlyZWQnICovXG4gICAgICAgIGlmICh0aGlzWydzaG93J10gJiYgdGhpc1sncmVxdWlyZWQnXSkge1xuICAgICAgICAgICAgcmV0dXJuICEhYy52YWx1ZSA/IG51bGwgOiB7IHJlcXVpcmVkOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWxpZGF0ZVR5cGUgPSAnJztcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byB2YWxpZGF0ZSBkYXRlIHBhdHRlcm4gYW5kIHRpbWUgcGF0dGVyblxuICAgICAqIElmIHVzZXIgc2VsZWN0cyBvbmUgcGF0dGVybiBpbiBkZXNpZ24gdGltZSBhbmQgaWYgaGUgdHJpZXMgdG8gZW50ZXIgdGhlIGRhdGUgaW4gYW5vdGhlciBwYXR0ZXJuIHRoZW4gdGhlIGRldmljZSBpcyB0aHJvd2luZyBhbiBlcnJvclxuICAgICAqL1xuICAgIHByb3RlY3RlZCBmb3JtYXRWYWxpZGF0aW9uKG5ld1ZhbCwgaW5wdXRWYWwsIGlzTmF0aXZlUGlja2VyPzogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gdGhpcy5kYXRlcGF0dGVybiB8fCB0aGlzLnRpbWVwYXR0ZXJuO1xuICAgICAgICBjb25zdCB0aW1lWm9uZSA9IHRoaXMudGltZVpvbmU7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBnZXRGb3JtYXR0ZWREYXRlKHRoaXMuZGF0ZVBpcGUsIG5ld1ZhbCwgcGF0dGVybiwgdGltZVpvbmUsIG51bGwsIG51bGwsIHRoaXMpO1xuICAgICAgICBpbnB1dFZhbCA9IGlucHV0VmFsLnRyaW0oKTtcbiAgICAgICAgaWYgKGlucHV0VmFsKSB7XG4gICAgICAgICAgICBpZiAocGF0dGVybiA9PT0gJ3RpbWVzdGFtcCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9pc05hTihpbnB1dFZhbCkgJiYgcGFyc2VJbnQoaW5wdXRWYWwpICE9PSBmb3JtYXR0ZWREYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52YWxpZERhdGVUaW1lRm9ybWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVR5cGUgPSAnaW5jb3JyZWN0Zm9ybWF0JztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChpc05hdGl2ZVBpY2tlcikge1xuICAgICAgICAgICAgICAgICAgICAvLyBmb3JtYXQgdGhlIGRhdGUgdmFsdWUgb25seSB3aGVuIGlucHV0VmFsIGlzIG9idGFpbmVkIGZyb20gJGV2ZW50LnRhcmdldC52YWx1ZSwgYXMgdGhlIGZvcm1hdCBkb2VzbnQgbWF0Y2guXG4gICAgICAgICAgICAgICAgICAgIGlucHV0VmFsID0gZ2V0Rm9ybWF0dGVkRGF0ZSh0aGlzLmRhdGVQaXBlLCBpbnB1dFZhbCwgcGF0dGVybiwgdGltZVpvbmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRWYWwgIT09IGZvcm1hdHRlZERhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkRGF0ZVRpbWVGb3JtYXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICdpbmNvcnJlY3Rmb3JtYXQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gdmFsaWRhdGUgbWluIGRhdGUsIG1heCBkYXRlLCBleGNsdWRlIGRhdGVzIGFuZCBleGNsdWRlIGRheXNcbiAgICAgKiBJbiBtb2JpbGUgaWYgaW52YWxpZCBkYXRlcyBhcmUgZW50ZXJlZCwgZGV2aWNlIGlzIHNob3dpbmcgYW4gYWxlcnQuXG4gICAgICogSW4gd2ViIGlmIGludmFsaWQgZGF0ZXMgYXJlIGVudGVyZWQsIGRldmljZSBpcyBzaG93aW5nIHZhbGlkYXRpb24gbWVzc2FnZS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgbWluRGF0ZU1heERhdGVWYWxpZGF0aW9uT25JbnB1dChuZXdWYWwsICRldmVudD86IEV2ZW50LCBkaXNwbGF5VmFsdWU/OiBzdHJpbmcsIGlzTmF0aXZlUGlja2VyPzogYm9vbGVhbikge1xuICAgICAgICBpZiAobmV3VmFsKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlVGltZVZhbCA9IG5ld1ZhbDtcbiAgICAgICAgICAgIG5ld1ZhbCA9IG1vbWVudChuZXdWYWwpLnN0YXJ0T2YoJ2RheScpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgY29uc3QgbWluRGF0ZSA9IG1vbWVudChnZXREYXRlT2JqKHRoaXMubWluZGF0ZSkpLnN0YXJ0T2YoJ2RheScpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgY29uc3QgbWF4RGF0ZSA9IG1vbWVudChnZXREYXRlT2JqKHRoaXMubWF4ZGF0ZSkpLnN0YXJ0T2YoJ2RheScpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMubWluZGF0ZSAmJiBuZXdWYWwgPCBtaW5EYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7dGhpcy5hcHBMb2NhbGUuTEFCRUxfTUlOREFURV9WQUxJREFUSU9OX01FU1NBR0V9ICR7dGhpcy5taW5kYXRlfS5gO1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsIHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChpc05hdGl2ZVBpY2tlciAmJiBnZXRGb3JtYXR0ZWREYXRlKHRoaXMuZGF0ZVBpcGUsIG1pbkRhdGUsIHRoaXMuZGF0ZXBhdHRlcm4sIHRoaXMudGltZVpvbmUsIG51bGwsIG51bGwsIHRoaXMpID09PSBkaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJGV2ZW50LnRhcmdldCkudmFsKGRpc3BsYXlWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZU5vdEluUmFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJ21pbmRhdGUnO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3dWYWxpZGF0aW9uKCRldmVudCwgZGlzcGxheVZhbHVlLCBpc05hdGl2ZVBpY2tlciwgbXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1heGRhdGUgJiYgbmV3VmFsID4gbWF4RGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IGAke3RoaXMuYXBwTG9jYWxlLkxBQkVMX01BWERBVEVfVkFMSURBVElPTl9NRVNTQUdFfSAke3RoaXMubWF4ZGF0ZX0uYDtcbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYXRpdmVQaWNrZXIgJiYgZ2V0Rm9ybWF0dGVkRGF0ZSh0aGlzLmRhdGVQaXBlLCBtYXhEYXRlLCB0aGlzLmRhdGVwYXR0ZXJuLCB0aGlzLnRpbWVab25lLCBudWxsLCBudWxsLCB0aGlzKSA9PT0gZGlzcGxheVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCRldmVudC50YXJnZXQpLnZhbChkaXNwbGF5VmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVOb3RJblJhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICdtYXhkYXRlJztcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaG93VmFsaWRhdGlvbigkZXZlbnQsIGRpc3BsYXlWYWx1ZSwgaXNOYXRpdmVQaWNrZXIsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5leGNsdWRlZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgZXhjbHVkZURhdGVzQXJyYXk7XG4gICAgICAgICAgICAgICAgaWYgKGlzU3RyaW5nKHRoaXMuZXhjbHVkZWRhdGVzKSkge1xuICAgICAgICAgICAgICAgICAgICBleGNsdWRlRGF0ZXNBcnJheSA9IHNwbGl0KHRoaXMuZXhjbHVkZWRhdGVzLCAnLCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVEYXRlc0FycmF5ID0gdGhpcy5leGNsdWRlZGF0ZXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV4Y2x1ZGVEYXRlc0FycmF5ID0gZXhjbHVkZURhdGVzQXJyYXkubWFwKGQgPT4gZ2V0Rm9ybWF0dGVkRGF0ZSh0aGlzLmRhdGVQaXBlLCBkLCB0aGlzLmRhdGVwYXR0ZXJuLCB0aGlzLnRpbWVab25lLCBudWxsLCBudWxsLCB0aGlzKSk7XG4gICAgICAgICAgICAgICAgaWYgKGV4Y2x1ZGVEYXRlc0FycmF5LmluZGV4T2YoZ2V0Rm9ybWF0dGVkRGF0ZSh0aGlzLmRhdGVQaXBlLCBkYXRlVGltZVZhbCwgdGhpcy5kYXRlcGF0dGVybiwgdGhpcy50aW1lWm9uZSwgbnVsbCwgbnVsbCwgdGhpcykpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlTm90SW5SYW5nZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJ2V4Y2x1ZGVkYXRlcyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsIHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZXhjbHVkZWRheXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGNsdWRlRGF5c0FycmF5ID0gc3BsaXQodGhpcy5leGNsdWRlZGF5cywgJywnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXkgPSBnZXQoZGF0ZVRpbWVWYWwsICdnZXREYXknKSA/IGRhdGVUaW1lVmFsLmdldERheSgpIDogZGF0ZVRpbWVWYWw7XG4gICAgICAgICAgICAgICAgaWYgKGV4Y2x1ZGVEYXlzQXJyYXkuaW5kZXhPZihkYXkudG9TdHJpbmcoKSkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVOb3RJblJhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVR5cGUgPSAnZXhjbHVkZWRheXMnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNOYXRpdmVQaWNrZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZU5vdEluUmFuZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsIHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBoaWdobGlnaHQgdGhlIGN1cnJlbnQgZGF0ZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBoaWdodGxpZ2h0VG9kYXkobmV3RGF0ZSkge1xuICAgICAgICBjb25zdCBhY3RpdmVNb250aCA9ICQoYC5icy1kYXRlcGlja2VyLWhlYWQgLmN1cnJlbnRgKS5maXJzdCgpLnRleHQoKTtcbiAgICAgICAgY29uc3QgYWN0aXZlWWVhciA9ICAkKFwiLmJzLWRhdGVwaWNrZXItaGVhZCAuY3VycmVudFwiKS5lcSgxKS50ZXh0KCk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gbmV3IERhdGUobmV3RGF0ZSkudG9Mb2NhbGVTdHJpbmcoJ2RlZmF1bHQnLCB7IG1vbnRoOiAnbG9uZycgfSk7XG4gICAgICAgIGNvbnN0IHllYXIgPSBuZXdEYXRlLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKTtcblxuICAgICAgICBpZihhY3RpdmVNb250aCA9PSBtb250aCAmJiBhY3RpdmVZZWFyID09IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSAmJiBuZXdEYXRlLmdldERhdGUoKSA9PT0gbmV3IERhdGUoKS5nZXREYXRlKCkgJiYgbmV3RGF0ZS5nZXRNb250aCgpID09PSBuZXcgRGF0ZSgpLmdldE1vbnRoKCkgJiYgbmV3RGF0ZS5nZXRGdWxsWWVhcigpID09PSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvRGF5ID0gbmV3IERhdGUoKS5nZXREYXRlKCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGZpbHRlcigkKGBzcGFuOmNvbnRhaW5zKCR7dG9EYXl9KWApLm5vdCgnLmlzLW90aGVyLW1vbnRoJyksIChvYmopID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoJChvYmopLnRleHQoKSA9PT0gdG9EYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgJChvYmopLmFkZENsYXNzKCdjdXJyZW50LWRhdGUgdGV4dC1pbmZvJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGZpbmQgdGhlIG5ldyBkYXRlIGlzIGZyb20gYW5vdGhlciB5ZWFyIG9yIG5vdFxuICAgICAqIEBwYXJhbSBuZXdEYXRlIC0gbmV3bHkgc2VsZWN0ZWQgZGF0ZSB2YWx1ZVxuICAgICAqL1xuICAgIHByaXZhdGUgaXNPdGhlcnllYXIobmV3RGF0ZSkge1xuICAgICAgICByZXR1cm4gKG5ld0RhdGUuZ2V0TW9udGgoKSA9PT0gMCAmJiB0aGlzLmFjdGl2ZURhdGUuZ2V0TW9udGgoKSA9PT0gMTEpIHx8IChuZXdEYXRlLmdldE1vbnRoKCkgPT09IDExICYmIHRoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpID09PSAwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd0RhdGVQaWNrZXJNb2RhbChic0RhdGFWYWx1ZSkge1xuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBic0RhdGFWYWx1ZSB8fCBuZXcgRGF0ZSgpO1xuICAgICAgICB0aGlzLnNldE5leHREYXRhKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgICAgIHRoaXMuZGF0ZXRpbWVwaWNrZXJDb21wb25lbnQuc2hvdygpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkRGF0ZXBpY2tlck1vdXNlRXZlbnRzKCk7XG4gICAgICAgICAgICB0aGlzLnNldEFjdGl2ZURhdGVGb2N1cyh0aGlzLmFjdGl2ZURhdGUsIHRydWUpO1xuICAgICAgICB9LCA1MDApO1xuICAgICAgICByZXR1cm4gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gbG9hZCBvdGhlciBtb250aCBkYXlzIG9yIG90aGVyIG1vbnRoIG9yIG90aGVyIHllYXJcbiAgICAgKiBAcGFyYW0gYnRuQ2xhc3MgLSBjbGFzcyhwcmV2aW91cy9uZXh0KSBvZiB0aGUgYnV0dG9uIHdoaWNoIHdlIGhhdmUgdG8gY2xpY2tcbiAgICAgKiBAcGFyYW0gdGltZVBlcmlvZCAtIFN0cmluZyB2YWx1ZSBkZWNpZGVzIHRvIGxvYWQgb3RoZXIgbW9udGggZGF5cyBvciBvdGhlciBtb250aCBvciBvdGhlciB5ZWFyXG4gICAgICovXG4gICAgcHJpdmF0ZSBnb1RvT3RoZXJNb250aE9yeWVhcihidG5DbGFzcywgdGltZVBlcmlvZCkge1xuICAgICAgICBjb25zdCAkbm9kZSA9ICQoYC5icy1kYXRlcGlja2VyLWhlYWQgLiR7YnRuQ2xhc3N9YCk7XG4gICAgICAgIGlmICgkbm9kZS5hdHRyKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgJG5vZGUudHJpZ2dlcignY2xpY2snKTtcbiAgICAgICAgaWYgKHRpbWVQZXJpb2QgPT09ICdkYXlzJykge1xuICAgICAgICAgICAgdGhpcy5sb2FkRGF5cygpO1xuICAgICAgICB9IGVsc2UgaWYgKHRpbWVQZXJpb2QgPT09ICdtb250aCcpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vbnRocygpO1xuICAgICAgICB9IGVsc2UgaWYgKHRpbWVQZXJpb2QgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgdGhpcy5sb2FkWWVhcnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc2V0IGZvY3VzIGZvciBhY3RpdmUgZGF5XG4gICAgICogQHBhcmFtIG5ld0RhdGUgLSBuZXdseSBzZWxlY3RlZCBkYXRlIHZhbHVlXG4gICAgICogQHBhcmFtIGlzTW91c2VFdmVudCAtIGJvb2xlYW4gdmFsdWUgcmVwcmVzZW50cyB0aGUgZXZlbnQgaXMgbW91c2UgZXZlbnQvIGtleWJvYXJkIGV2ZW50XG4gICAgICogQHBhcmFtIGZyb21LZXlib2FyZEV2ZW50c1xuICAgICAqL1xuICAgIHByaXZhdGUgc2V0QWN0aXZlRGF0ZUZvY3VzKG5ld0RhdGUsIGlzTW91c2VFdmVudD86IGJvb2xlYW4sIGZyb21LZXlib2FyZEV2ZW50cz86IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMubWluZGF0ZSAmJiAhdGhpcy5kYXRhdmFsdWUgJiYgZnJvbUtleWJvYXJkRXZlbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBuZXdEYXRlID0gbmV3IERhdGUodGhpcy5taW5kYXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldE5leHREYXRhKG5ld0RhdGUpO1xuICAgICAgICB0aGlzLmNsaWNrZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgYWN0aXZlTW9udGggPSB0aGlzLmFjdGl2ZURhdGUuZ2V0TW9udGgoKTtcbiAgICAgICAgLy8gY2hlY2sgZm9yIGtleWJvYXJkIGV2ZW50XG4gICAgICAgIGlmICghaXNNb3VzZUV2ZW50KSB7XG4gICAgICAgICAgICBpZiAobmV3RGF0ZS5nZXRNb250aCgpIDwgYWN0aXZlTW9udGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzT3RoZXJ5ZWFyKG5ld0RhdGUpID8gdGhpcy5nb1RvT3RoZXJNb250aE9yeWVhcignbmV4dCcsICdkYXlzJykgOiB0aGlzLmdvVG9PdGhlck1vbnRoT3J5ZWFyKCdwcmV2aW91cycsICdkYXlzJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5ld0RhdGUuZ2V0TW9udGgoKSA+IGFjdGl2ZU1vbnRoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc090aGVyeWVhcihuZXdEYXRlKSA/IHRoaXMuZ29Ub090aGVyTW9udGhPcnllYXIoJ3ByZXZpb3VzJywgJ2RheXMnKSA6IHRoaXMuZ29Ub090aGVyTW9udGhPcnllYXIoJ25leHQnLCAnZGF5cycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3RGF5ID0gbmV3RGF0ZS5nZXREYXRlKCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGZpbHRlcigkKGBzcGFuOmNvbnRhaW5zKCR7bmV3RGF5fSlgKS5ub3QoJy5pcy1vdGhlci1tb250aCcpLCAob2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlTW9udGggPSAkKGAuYnMtZGF0ZXBpY2tlci1oZWFkIC5jdXJyZW50YCkuZmlyc3QoKS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlWWVhciA9ICAkKFwiLmJzLWRhdGVwaWNrZXItaGVhZCAuY3VycmVudFwiKS5lcSgxKS50ZXh0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9udGhOYW1lID0gbmV3IERhdGUoKS50b0xvY2FsZVN0cmluZygnZGVmYXVsdCcsIHsgbW9udGg6ICdsb25nJyB9KTtcbiAgICAgICAgICAgICAgICBpZiAoJChvYmopLnRleHQoKSA9PT0gbmV3RGF5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkKG9iaikuaGFzQ2xhc3MoJ3NlbGVjdGVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQob2JqKS5wYXJlbnQoKS5hdHRyKCdhcmlhLXNlbGVjdGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAkKG9iaikuYXR0cignYXJpYS1sYWJlbCcsIG1vbWVudChuZXdEYXRlKS5mb3JtYXQoJ2RkZGQsIE1NTU0gRG8gWVlZWScpKTtcbiAgICAgICAgICAgICAgICAgICAgJCgnW2JzZGF0ZXBpY2tlcmRheWRlY29yYXRvcl0nKS5ub3QoJy5pcy1vdGhlci1tb250aCcpLmF0dHIoJ3RhYmluZGV4JywgJy0xJyk7XG4gICAgICAgICAgICAgICAgICAgICQob2JqKS5hdHRyKCd0YWJpbmRleCcsICcwJyk7XG4gICAgICAgICAgICAgICAgICAgICQob2JqKS5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBuZXdEYXRlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKG5ld0RhdGUuZ2V0RGF0ZSgpID09PSBuZXcgRGF0ZSgpLmdldERhdGUoKSAmJiBuZXdEYXRlLmdldE1vbnRoKCkgPT09IG5ldyBEYXRlKCkuZ2V0TW9udGgoKSAmJiBuZXdEYXRlLmdldEZ1bGxZZWFyKCkgPT09IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGlnaHRsaWdodFRvZGF5KG5ld0RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TW9udGgoZGF0ZSwgaW5jKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRNb250aCA9IG5ldyBEYXRlKGRhdGUpO1xuXG4gICAgICAgIGxldCBtb250aCA9IGN1cnJlbnRNb250aC5nZXRNb250aCgpO1xuICAgICAgICBjb25zdCB5ZWFyID0gY3VycmVudE1vbnRoLmdldEZ1bGxZZWFyKCk7XG5cbiAgICAgICAgbW9udGggKz0gaW5jO1xuXG4gICAgICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCk7XG5cbiAgICAgICAgY29uc3QgZnVsbE1vbnRoID0gbmV3RGF0ZS50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1vbnRoOiAnbG9uZycgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGU6IG5ld0RhdGUsXG4gICAgICAgICAgICBmdWxsTW9udGg6IGZ1bGxNb250aFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHNldHMgZm9jdXMgZm9yIG1vbnRocy9kYXlzIGRlcGVuZGluZyBvbiB0aGUgbG9hZGVkIGRhdGVwaWNrZXIgdGFibGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEZvY3VzRm9yTW9udGhPckRheSgpIHtcbiAgICAgICAgY29uc3QgYWN0aXZlTW9udGhPclllYXIgPSAkKGAuYnMtZGF0ZXBpY2tlci1oZWFkIC5jdXJyZW50YCkuZmlyc3QoKS50ZXh0KCk7XG4gICAgICAgIGNvbnN0IGRhdGVQaWNrZXJCb2R5ID0gJCgnLmJzLWRhdGVwaWNrZXItYm9keScpO1xuICAgICAgICBpZiAoZGF0ZVBpY2tlckJvZHkuZmluZCgndGFibGUubW9udGhzJykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKHBhcnNlSW50KGFjdGl2ZU1vbnRoT3JZZWFyKSAhPT0gdGhpcy5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRNb250aHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZShwYXJzZUludChhY3RpdmVNb250aE9yWWVhciksIHRoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpLCB0aGlzLmFjdGl2ZURhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlTW9udGhGb2N1cyhuZXdEYXRlLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRlUGlja2VyQm9keS5maW5kKCd0YWJsZS5kYXlzJykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbmV3TW9udGggPSBtb250aHMuaW5kZXhPZihhY3RpdmVNb250aE9yWWVhcik7XG4gICAgICAgICAgICBpZiAobmV3TW9udGggIT09IHRoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRGF5cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKHRoaXMuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpLCBuZXdNb250aCwgMSk7XG4gICAgICAgICAgICB0aGlzLnNldEFjdGl2ZURhdGVGb2N1cyhuZXdEYXRlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHNldHMgZm9jdXMgZm9yIG1vbnRocy95ZWFycyBkZXBlbmRpbmcgb24gdGhlIGxvYWRlZCBkYXRlcGlja2VyIHRhYmxlXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRGb2N1c0ZvckN1cnJlbnRNb250aE9yeWVhcigpIHtcbiAgICAgICAgY29uc3QgZGF0ZVBpY2tlckJvZHkgPSAkKCcuYnMtZGF0ZXBpY2tlci1ib2R5Jyk7XG4gICAgICAgIGlmIChkYXRlUGlja2VyQm9keS5maW5kKCd0YWJsZS5tb250aHMnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRNb250aHMoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlTW9udGhGb2N1cyh0aGlzLmFjdGl2ZURhdGUsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLnllYXJzJykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkWWVhcnMoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlWWVhckZvY3VzKHRoaXMuYWN0aXZlRGF0ZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIGZvY3VzIGZvciBtb250aHMveWVhcnMvZGF5cyBkZXBlbmRpbmcgb24gdGhlIGxvYWRlZCBkYXRlcGlja2VyIHRhYmxlXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRGb2N1c0ZvckRhdGUoY291bnQpIHtcbiAgICAgICAgY29uc3QgZGF0ZVBpY2tlckJvZHkgPSAkKCcuYnMtZGF0ZXBpY2tlci1ib2R5Jyk7XG4gICAgICAgIGlmIChkYXRlUGlja2VyQm9keS5maW5kKCd0YWJsZS5tb250aHMnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRNb250aHMoKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZSh0aGlzLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSArIGNvdW50LCAwLCB0aGlzLmFjdGl2ZURhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlTW9udGhGb2N1cyhuZXdEYXRlLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRlUGlja2VyQm9keS5maW5kKCd0YWJsZS55ZWFycycpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMubG9hZFllYXJzKCk7XG4gICAgICAgICAgICBjb25zdCBzdGFydFllYXIgPSBkYXRlUGlja2VyQm9keS5maW5kKCd0YWJsZS55ZWFycyBzcGFuJykuZmlyc3QoKS50ZXh0KCk7XG4gICAgICAgICAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUocGFyc2VJbnQoc3RhcnRZZWFyKSwgdGhpcy5hY3RpdmVEYXRlLmdldE1vbnRoKCksIHRoaXMuYWN0aXZlRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVZZWFyRm9jdXMobmV3RGF0ZSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0ZVBpY2tlckJvZHkuZmluZCgndGFibGUuZGF5cycpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMubG9hZERheXMoKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZSh0aGlzLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSwgdGhpcy5hY3RpdmVEYXRlLmdldE1vbnRoKCkgKyBjb3VudCwgMSk7XG4gICAgICAgICAgICB0aGlzLnNldEFjdGl2ZURhdGVGb2N1cyhuZXdEYXRlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gYWRkIGtleWJvYXJkIGV2ZW50cyB3aGlsZSBvcGVuaW5nIHRoZSBkYXRlIHBpY2tlclxuICAgICAqIEBwYXJhbSBzY29wZSAtIHNjb3BlIG9mIHRoZSBkYXRlL2RhdGV0aW1lIHdpZGdldFxuICAgICAqIEBwYXJhbSBpc0RhdGVUaW1lIC0gYm9vbGVhbiB2YWx1ZSByZXByZXNlbnRzIHRoZSBsb2FkZWQgd2lkZ2V0IGlzIGRhdGUgb3IgZGF0ZXRpbWVcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYWRkRGF0ZXBpY2tlcktleWJvYXJkRXZlbnRzKHNjb3BlLCBpc0RhdGVUaW1lKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudFNjb3BlID0gc2NvcGU7XG4gICAgICAgIGNvbnN0IGRhdGVDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHtzY29wZS5kYXRlQ29udGFpbmVyQ2xzfWApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBzZXRBdHRyKGRhdGVDb250YWluZXIsICd0YWJpbmRleCcsICcwJyk7XG4gICAgICAgIGRhdGVDb250YWluZXIub25rZXlkb3duID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAvLyBDaGVjayBmb3IgU2hpZnQrVGFiIGtleSBvciBUYWIga2V5IG9yIGVzY2FwZVxuICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRTY29wZS5oaWRlRGF0ZXBpY2tlckRyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlzcGxheUlucHV0RWxlbSA9IHRoaXMuZWxlbWVudFNjb3BlLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmRpc3BsYXktaW5wdXQnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IGRpc3BsYXlJbnB1dEVsZW0uZm9jdXMoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubG9hZERheXMoKTtcbiAgICAgICAgdGhpcy5zZXRBY3RpdmVEYXRlRm9jdXModGhpcy5hY3RpdmVEYXRlLCB1bmRlZmluZWQsIHRydWUpO1xuICAgIH1cbiAgICBwcml2YXRlIHNldE5leHREYXRhKG5leHREYXRlKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHRoaXMuZ2V0TW9udGgobmV4dERhdGUsIDEpO1xuICAgICAgICB0aGlzLnByZXYgPSB0aGlzLmdldE1vbnRoKG5leHREYXRlLCAtMSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gYWRkIHRhYmluZGV4LCBrZXlib3JkIGFuZCBtb3VzZSBldmVudHMgZm9yIGRheXNcbiAgICAgKi9cbiAgICBwcml2YXRlIGxvYWREYXlzKCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICQoJ1tic2RhdGVwaWNrZXJkYXlkZWNvcmF0b3JdJykubm90KCcuaXMtb3RoZXItbW9udGgnKS5hdHRyKCd0YWJpbmRleCcsICcwJyk7XG4gICAgICAgICAgICAvLyBpZiAodGhpcy5jbGlja2VkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgLy8gICAgIHRoaXMubmV4dCA9IHRoaXMuZ2V0TW9udGgodGhpcy5hY3RpdmVEYXRlLCAxKTtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnByZXYgPSB0aGlzLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSwgLTEpO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgdGhpcy5hZGRLZXlCb2FyZEV2ZW50c0ZvckRheXMoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkRGF0ZXBpY2tlck1vdXNlRXZlbnRzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHNldHMga2V5Ym9hcmQgZXZlbnRzIGZvciBkYXlzXG4gICAgICovXG4gICAgcHJpdmF0ZSBhZGRLZXlCb2FyZEV2ZW50c0ZvckRheXMoKSB7XG4gICAgICAgIGNvbnN0IGRhdGVQaWNrZXJCb2R5ID0gJCgnLmJzLWRhdGVwaWNrZXItYm9keScpO1xuICAgICAgICBkYXRlUGlja2VyQm9keS5rZXlkb3duKChldmVudCkgPT4ge1xuICAgICAgICAgICAgbGV0IG5ld2RhdGU7XG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgrNywgJ2RheXMnKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZURhdGVGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuY3RybEtleSAmJiBldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAgICAgICAgIC8vIGNsaWNraW5nIG9uIHRhYmxlIGhlYWRlciBtb250aCBuYW1lIHRvIGxvYWQgbGlzdCBvZiBtb250aHNcbiAgICAgICAgICAgICAgICAkKCcuYnMtZGF0ZXBpY2tlci1oZWFkIC5jdXJyZW50JykuZmlyc3QoKS5jbGljaygpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZE1vbnRocygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlTW9udGhGb2N1cyh0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgtNywgJ2RheXMnKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZURhdGVGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgICAgICAgICAgIG5ld2RhdGUgPSBtb21lbnQodGhpcy5hY3RpdmVEYXRlKS5hZGQoLTEsICdkYXlzJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVEYXRlRm9jdXMobmV3ZGF0ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgrMSwgJ2RheXMnKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZURhdGVGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnUGFnZVVwJykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgtMSwgJ21vbnRoJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVEYXRlRm9jdXMobmV3ZGF0ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ1BhZ2VEb3duJykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgrMSwgJ21vbnRoJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVEYXRlRm9jdXMobmV3ZGF0ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgICAgIGlmICgkKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLmhhc0NsYXNzKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJChkb2N1bWVudC5hY3RpdmVFbGVtZW50KS5jbGljaygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFNjb3BlLmhpZGVEYXRlcGlja2VyRHJvcGRvd24oKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5SW5wdXRFbGVtID0gdGhpcy5lbGVtZW50U2NvcGUubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZGlzcGxheS1pbnB1dCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZGlzcGxheUlucHV0RWxlbS5mb2N1cygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZm9jdXNCbHVyRGF0ZVBpY2tlckhlYWRCdXR0b25zKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb2N1c0JsdXJEYXRlUGlja2VySGVhZEJ1dHRvbnMoKSB7XG4gICAgICAgIGNvbnN0IGRhdGVQaWNrZXJIZWFkQnV0dG9uID0gJCgnLmJzLWRhdGVwaWNrZXItaGVhZCBidXR0b24nKTtcbiAgICAgICAgZGF0ZVBpY2tlckhlYWRCdXR0b24ub24oJ2ZvY3VzJywgZnVuY3Rpb24oKSB7ICQodGhpcykuY3NzKCdiYWNrZ3JvdW5kLWNvbG9yJywgJyM5QUEwQTMnKTsgfSk7XG4gICAgICAgIGRhdGVQaWNrZXJIZWFkQnV0dG9uLm9uKCdibHVyJywgZnVuY3Rpb24oKSB7ICQodGhpcykuY3NzKCdiYWNrZ3JvdW5kLWNvbG9yJywgJycpOyB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGFkZCB0YWJpbmRleCwga2V5Ym9yZCBhbmQgbW91c2UgZXZlbnRzIGZvciBtb250aHNcbiAgICAgKi9cbiAgICBwcml2YXRlIGxvYWRNb250aHMoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZGRLZXlCb2FyZEV2ZW50c0Zvck1vbnRocygpO1xuICAgICAgICAgICAgdGhpcy5hZGREYXRlcGlja2VyTW91c2VFdmVudHMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2Qgc2V0cyBrZXlib2FyZCBldmVudHMgZm9yIG1vbnRoc1xuICAgICAqL1xuICAgIHByaXZhdGUgYWRkS2V5Qm9hcmRFdmVudHNGb3JNb250aHMoKSB7XG4gICAgICAgICQoJy5icy1kYXRlcGlja2VyLWJvZHknKS5rZXlkb3duKChldmVudCkgPT4ge1xuICAgICAgICAgICAgbGV0IG5ld2RhdGU7XG4gICAgICAgICAgICBpZiAoKGV2ZW50LmN0cmxLZXkgJiYgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykgfHwgZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICAgICAgaWYgKCQoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkucGFyZW50KCkuaGFzQ2xhc3MoJ2Rpc2FibGVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAkKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRGF5cygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZSh0aGlzLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSwgdGhpcy5hY3RpdmVEYXRlLmdldE1vbnRoKCksIDEpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKG5ld0RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5jdHJsS2V5ICYmIGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgICAgICAgICAgLy8gY2xpY2tpbmcgb24gdGFibGUgaGVhZGVyIHllYXIgdG8gbG9hZCBsaXN0IG9mIHllYXJzXG4gICAgICAgICAgICAgICAgJCgnLmJzLWRhdGVwaWNrZXItaGVhZCAuY3VycmVudCcpLmZpcnN0KCkuY2xpY2soKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRZZWFycygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlWWVhckZvY3VzKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIG5ld2RhdGUgPSBtb21lbnQodGhpcy5hY3RpdmVEYXRlKS5hZGQoKzMsICdtb250aCcpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlTW9udGhGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIG5ld2RhdGUgPSBtb21lbnQodGhpcy5hY3RpdmVEYXRlKS5hZGQoLTMsICdtb250aCcpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlTW9udGhGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgICAgICAgICAgIG5ld2RhdGUgPSBtb21lbnQodGhpcy5hY3RpdmVEYXRlKS5hZGQoLTEsICdtb250aCcpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlTW9udGhGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKCsxLCAnbW9udGgnKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZU1vbnRoRm9jdXMobmV3ZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmZvY3VzQmx1ckRhdGVQaWNrZXJIZWFkQnV0dG9ucygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gYWRkIHRhYmluZGV4LCBrZXlib3JkIGFuZCBtb3VzZSBldmVudHMgZm9yIHllYXJzXG4gICAgICovXG4gICAgcHJpdmF0ZSBsb2FkWWVhcnMoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZGRLZXlCb2FyZEV2ZW50c0ZvclllYXJzKCk7XG4gICAgICAgICAgICB0aGlzLmFkZERhdGVwaWNrZXJNb3VzZUV2ZW50cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHNldCBmb2N1cyBmb3IgYWN0aXZlIG1vbnRoXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRBY3RpdmVNb250aEZvY3VzKG5ld0RhdGUsIGlzTW9vdXNlRXZlbnQ/OiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0TmV4dERhdGEobmV3RGF0ZSk7XG4gICAgICAgIGNvbnN0IG5ld01vbnRoID0gbW9udGhzW25ld0RhdGUuZ2V0TW9udGgoKV07XG4gICAgICAgIC8vIGNoZWNrIGZvciBrZXlib2FyZCBldmVudFxuICAgICAgICBpZiAoIWlzTW9vdXNlRXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChuZXdEYXRlLmdldEZ1bGxZZWFyKCkgPCB0aGlzLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub090aGVyTW9udGhPcnllYXIoJ3ByZXZpb3VzJywgJ21vbnRoJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5ld0RhdGUuZ2V0RnVsbFllYXIoKSA+IHRoaXMuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvT3RoZXJNb250aE9yeWVhcignbmV4dCcsICdtb250aCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgJChgLmJzLWRhdGVwaWNrZXItYm9keSB0YWJsZS5tb250aHMgc3BhbmApLmF0dHIoJ3RhYmluZGV4JywgJy0xJyk7XG4gICAgICAgICAgICAkKGAuYnMtZGF0ZXBpY2tlci1ib2R5IHRhYmxlLm1vbnRocyBzcGFuOmNvbnRhaW5zKCR7bmV3TW9udGh9KWApLmF0dHIoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgICAgICQoYC5icy1kYXRlcGlja2VyLWJvZHkgdGFibGUubW9udGhzIHNwYW46Y29udGFpbnMoJHtuZXdNb250aH0pYCkuZm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IG5ld0RhdGU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHNldHMga2V5Ym9hcmQgZXZlbnRzIGZvciB5ZWFyc1xuICAgICAqL1xuICAgIHByaXZhdGUgYWRkS2V5Qm9hcmRFdmVudHNGb3JZZWFycygpIHtcbiAgICAgICAgJCgnLmJzLWRhdGVwaWNrZXItYm9keScpLmtleWRvd24oKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBsZXQgbmV3ZGF0ZTtcbiAgICAgICAgICAgIGlmICgoZXZlbnQuY3RybEtleSAmJiBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB8fCBldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgICAgICBpZiAoJChkb2N1bWVudC5hY3RpdmVFbGVtZW50KS5wYXJlbnQoKS5oYXNDbGFzcygnZGlzYWJsZWQnKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICQoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkuY2xpY2soKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRNb250aHMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZU1vbnRoRm9jdXModGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgrNCwgJ3llYXInKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVllYXJGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIG5ld2RhdGUgPSBtb21lbnQodGhpcy5hY3RpdmVEYXRlKS5hZGQoLTQsICd5ZWFyJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVZZWFyRm9jdXMobmV3ZGF0ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKC0xLCAneWVhcicpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlWWVhckZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0Jykge1xuICAgICAgICAgICAgICAgIG5ld2RhdGUgPSBtb21lbnQodGhpcy5hY3RpdmVEYXRlKS5hZGQoKzEsICd5ZWFyJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVZZWFyRm9jdXMobmV3ZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmZvY3VzQmx1ckRhdGVQaWNrZXJIZWFkQnV0dG9ucygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc2V0IGZvY3VzIGZvciBhY3RpdmUgeWVhclxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0QWN0aXZlWWVhckZvY3VzKG5ld0RhdGUsIGlzTW91c2VFdmVudD86IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgbmV3WWVhciA9IG5ld0RhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgY29uc3QgZGF0ZVBpY2tlclllYXJzID0gJCgnLmJzLWRhdGVwaWNrZXItYm9keSB0YWJsZS55ZWFycyBzcGFuJyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0WWVhciA9IGRhdGVQaWNrZXJZZWFycy5maXJzdCgpLnRleHQoKTtcbiAgICAgICAgY29uc3QgZW5kWWVhciA9IGRhdGVQaWNrZXJZZWFycy5sYXN0KCkudGV4dCgpO1xuICAgICAgICAvLyBjaGVjayBmb3Iga2V5Ym9hcmQgZXZlbnRcbiAgICAgICAgaWYgKCFpc01vdXNlRXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChuZXdEYXRlLmdldEZ1bGxZZWFyKCkgPCBwYXJzZUludChzdGFydFllYXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvT3RoZXJNb250aE9yeWVhcigncHJldmlvdXMnLCAneWVhcicpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChuZXdEYXRlLmdldEZ1bGxZZWFyKCkgPiBwYXJzZUludChlbmRZZWFyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub090aGVyTW9udGhPcnllYXIoJ25leHQnLCAneWVhcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgJChgLmJzLWRhdGVwaWNrZXItYm9keSB0YWJsZS55ZWFycyBzcGFuYCkuYXR0cigndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgICAgICAgICQoYC5icy1kYXRlcGlja2VyLWJvZHkgdGFibGUueWVhcnMgc3Bhbjpjb250YWlucygke25ld1llYXJ9KWApLmF0dHIoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgICAgICQoYC5icy1kYXRlcGlja2VyLWJvZHkgdGFibGUueWVhcnMgc3Bhbjpjb250YWlucygke25ld1llYXJ9KWApLmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBuZXdEYXRlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIGZvY3VzIGZvciB0aW1lcGlja2VyIGZpcnN0IGlucHV0IGZpZWxkKGhvdXJzIGZpZWxkKSB3aGlsZSBvcGVuaW5nIHRpbWUgcGlja2VyXG4gICAgICogQHBhcmFtIHNjb3BlIC0gc2NvcGUgb2YgdGhlIHRpbWUgcGlja2VyIHdpZGdldFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBmb2N1c1RpbWVQaWNrZXJQb3BvdmVyKHNjb3BlKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudFNjb3BlID0gc2NvcGU7XG4gICAgICAgIC8vIHNldFRpbWVvdXQgaXMgdXNlZCBzbyB0aGF0IGJ5IHRoZW4gdGltZSBpbnB1dCBoYXMgdGhlIHVwZGF0ZWQgdmFsdWUuIGZvY3VzIGlzIHNldHRpbmcgYmFjayB0byB0aGUgaW5wdXQgZmllbGRcbiAgICAgICAgdGhpcy5lbGVtZW50U2NvcGUubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICQoJ3RpbWVwaWNrZXIgLmZvcm0tZ3JvdXAnKS5maXJzdCgpLmZpbmQoJz4gaW5wdXQuZm9ybS1jb250cm9sJykuZm9jdXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUga2V5Ym9hcmQgZXZlbnRzIHRvIFRpbWVwaWNrZXIgcG9wdXBcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYmluZFRpbWVQaWNrZXJLZXlib2FyZEV2ZW50cygpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCAkdGltZXBpY2tlclBvcHVwID0gJCgnYm9keScpLmZpbmQoJz4gYnMtZHJvcGRvd24tY29udGFpbmVyIHRpbWVwaWNrZXInKTtcbiAgICAgICAgICAgICR0aW1lcGlja2VyUG9wdXAuYXR0cigndGFiaW5kZXgnLCAwKTtcbiAgICAgICAgICAgIHRoaXMuYWRkRXZlbnRzT25UaW1lUGlja2VyKCR0aW1lcGlja2VyUG9wdXApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZm9jdXNPbklucHV0RWwoKSB7XG4gICAgICAgIGlmICgkKHRoaXMubmF0aXZlRWxlbWVudCkuY2xvc2VzdCgnLmNhcHRpb24tZmxvYXRpbmcnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAkKHRoaXMubmF0aXZlRWxlbWVudCkuZmluZCgnLmFwcC10ZXh0Ym94JykuZm9jdXMoKTtcbiAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBkYXRlIGlzIHZhbGlkIG9yIG5vdFxuICAgICAqIEByZXR1cm5zIGJvb2xlYW4gdmFsdWUsIHRydWUgaWYgZGF0ZSBpcyB2YWxpZCBlbHNlIHJldHVybnMgZmFsc2VcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzVmFsaWREYXRlKGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIGRhdGUgJiYgZGF0ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKGRhdGUuZ2V0VGltZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiB0aW1lIGlzIHZhbGlkIG9yIG5vdFxuICAgICAqL1xuICAgIHByaXZhdGUgdGltZUZvcm1hdFZhbGlkYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGVudGVyZWREYXRlID0gJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLmZpbmQoJ2lucHV0JykudmFsKCk7XG4gICAgICAgIGNvbnN0IG5ld1ZhbCA9IGdldE5hdGl2ZURhdGVPYmplY3QoZW50ZXJlZERhdGUsIHttZXJpZGlhbnM6IHRoaXMubWVyaWRpYW5zLCBwYXR0ZXJuOiB0aGlzLmRhdGVwYXR0ZXJufSk7XG4gICAgICAgIGlmICghdGhpcy5mb3JtYXRWYWxpZGF0aW9uKG5ld1ZhbCwgZW50ZXJlZERhdGUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnZhbGlkRGF0ZVRpbWVGb3JtYXQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVUaW1lVmFsdWUoZWwsIHZhbHVlLCBmaWVsZE5hbWUpIHtcbiAgICAgICAgbGV0IG1pbkVsID0gZWwuZmluZCgnaW5wdXRbYXJpYS1sYWJlbD1cIm1pbnV0ZXNcIl0nKTtcbiAgICAgICAgbGV0IHNlY0VsID0gZWwuZmluZCgnaW5wdXRbYXJpYS1sYWJlbD1cInNlY29uZHNcIl0nKTtcbiAgICAgICAgbWluRWwudmFsdWUgPSBzZWNFbC52YWx1ZSA9ICcwMCc7XG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBmaWVsZE5hbWUgPT09ICdtaW51dGVzJyA/IHRoaXMuYnNUaW1lUGlja2VyLnVwZGF0ZU1pbnV0ZXMobWluRWwpIDogdGhpcy5ic1RpbWVQaWNrZXIudXBkYXRlU2Vjb25kcyhzZWNFbCk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmllbGROYW1lID09PSAnbWludXRlcycgPyB0aGlzLmJzVGltZVBpY2tlci51cGRhdGVNaW51dGVzKG1pbkVsKSA6IHRoaXMuYnNUaW1lUGlja2VyLnVwZGF0ZVNlY29uZHMoc2VjRWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBldmVudHMgdG8gZ2l2ZW4gZWxlbWVudFxuICAgICAqIEBwYXJhbSAkZWwgLSBlbGVtZW50IG9uIHdoaWNoIHRoZSBldmVudCBpcyBhZGRlZFxuICAgICAqL1xuICAgIHByaXZhdGUgYWRkRXZlbnRzT25UaW1lUGlja2VyKCRlbDogSlF1ZXJ5KSB7XG4gICAgICAgIGNvbnN0IGlucHV0RmllbGRzID0gJGVsLmZpbmQoJy5icy10aW1lcGlja2VyLWZpZWxkJyk7XG4gICAgICAgIC8vIFdNUy0xOTM4MjogdXBkYXRlIG1pbnV0ZXMgYW5kIHNlY29uZHMgdG8gMCB3aGVuIHdlIGVudGVyIGhvdXIgdmFsdWVcbiAgICAgICAgaW5wdXRGaWVsZHMuZmlyc3QoKS5vbigna2V5dXAnLCBldnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgaG91clZhbHVlID0gKGV2dC50YXJnZXQgYXMgYW55KS52YWx1ZTtcbiAgICAgICAgICAgIGZvckVhY2goaW5wdXRGaWVsZHMsIChmaWVsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgaWYgKGV2dC50YXJnZXQgIT09IGZpZWxkICYmIGZpZWxkLnZhbHVlID09PSAnJyAmJiBob3VyVmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IGluZGV4ID09PSAxID8gJ21pbnV0ZXMnIDogJ3NlY29uZHMnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRpbWVWYWx1ZSgkZWwsIGhvdXJWYWx1ZSwgZmllbGROYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVtb3ZlS2V5dXBMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlucHV0RmllbGRzLmZpcnN0KCkub2ZmKCdrZXl1cCcpO1xuICAgICAgICB9O1xuICAgICAgICAkZWwub24oJ2tleWRvd24nLCBldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCAkdGFyZ2V0ID0gJChldmVudC50YXJnZXQpO1xuICAgICAgICAgICAgY29uc3QgJHBhcmVudCA9ICR0YXJnZXQucGFyZW50KCk7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50U2NvcGUgPSB0aGlzLmVsZW1lbnRTY29wZTtcblxuICAgICAgICAgICAgbGV0IHN0b3BQcm9wb2dhdGlvbiwgcHJldmVudERlZmF1bHQ7XG5cbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudFNjb3BlLmhpZGVUaW1lcGlja2VyRHJvcGRvd24oKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCR0YXJnZXQuaGFzQ2xhc3MoJ2JzLXRpbWVwaWNrZXItZmllbGQnKSkge1xuICAgICAgICAgICAgICAgIGlmICgkcGFyZW50LmlzKCc6Zmlyc3QtY2hpbGQnKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleSA9PT0gJ1RhYicpIHx8IGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50U2NvcGUuc2V0SXNUaW1lT3BlbihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9wUHJvcG9nYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkcGFyZW50LmlzKCc6bGFzdC1jaGlsZCcpIHx8ICgkcGFyZW50Lm5leHQoKS5uZXh0KCkuZmluZCgnYnV0dG9uLmRpc2FibGVkJykubGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJyB8fCBldmVudC5rZXkgPT09ICdFc2NhcGUnIHx8IGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFNjb3BlLnNldElzVGltZU9wZW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFByb3BvZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgfHwgZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFNjb3BlLnNldElzVGltZU9wZW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFByb3BvZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc3RvcFByb3BvZ2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRTY29wZS5taW50aW1lICYmIGVsZW1lbnRTY29wZS5tYXh0aW1lICYmICF0aGlzLmlzVmFsaWREYXRlKGVsZW1lbnRTY29wZS5ic1RpbWVWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTY29wZS5ic1RpbWVWYWx1ZSA9IGVsZW1lbnRTY29wZS5tYXhUaW1lO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50U2NvcGUuYnNUaW1lVmFsdWUgPSBlbGVtZW50U2NvcGUubWluVGltZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludmFsaWREYXRlVGltZUZvcm1hdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0dGVybiA9IHRoaXMuZGF0ZXBhdHRlcm4gfHwgdGhpcy50aW1lcGF0dGVybjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdldEZvcm1hdHRlZERhdGUoZWxlbWVudFNjb3BlLmRhdGVQaXBlLCBlbGVtZW50U2NvcGUuYnNUaW1lVmFsdWUsIHBhdHRlcm4sIHRoaXMudGltZVpvbmUsIG51bGwsIG51bGwsIHRoaXMpID09PSBlbGVtZW50U2NvcGUuZGlzcGxheVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMubmF0aXZlRWxlbWVudCkuZmluZCgnLmRpc3BsYXktaW5wdXQnKS52YWwoZWxlbWVudFNjb3BlLmRpc3BsYXlWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aW1lRm9ybWF0VmFsaWRhdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJHRhcmdldC5oYXNDbGFzcygnYnRuLWRlZmF1bHQnKSkge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInIHx8IGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFNjb3BlLnNldElzVGltZU9wZW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgJGVsLmZpbmQoJ2EnKS5vbignY2xpY2snLCBldnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudFNjb3BlID0gdGhpcy5lbGVtZW50U2NvcGU7XG4gICAgICAgICAgICBjb25zdCAkdGFyZ2V0ID0gJChldnQudGFyZ2V0KTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50U2NvcGUubWludGltZSAmJiBlbGVtZW50U2NvcGUubWF4dGltZSAmJiAhdGhpcy5pc1ZhbGlkRGF0ZShlbGVtZW50U2NvcGUuYnNUaW1lVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCR0YXJnZXQuZmluZCgnc3BhbicpLmhhc0NsYXNzKCdicy1jaGV2cm9uLWRvd24nKSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50U2NvcGUuYnNUaW1lVmFsdWUgPSBlbGVtZW50U2NvcGUubWF4VGltZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCR0YXJnZXQuZmluZCgnc3BhbicpLmhhc0NsYXNzKCdicy1jaGV2cm9uLXVwJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFNjb3BlLmJzVGltZVZhbHVlID0gZWxlbWVudFNjb3BlLm1pblRpbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50aW1lRm9ybWF0VmFsaWRhdGlvbigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlRm9ybWF0KHBhdHRlcm4pIHtcbiAgICAgICAgaWYgKHBhdHRlcm4gPT09ICdkYXRlcGF0dGVybicpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLmRhdGVJbnB1dEZvcm1hdCA9IHRoaXMuZGF0ZXBhdHRlcm47XG4gICAgICAgICAgICB0aGlzLnNob3dzZWNvbmRzID0gaW5jbHVkZXModGhpcy5kYXRlcGF0dGVybiwgJ3MnKTtcbiAgICAgICAgICAgIHRoaXMuaXNtZXJpZGlhbiA9IGluY2x1ZGVzKHRoaXMuZGF0ZXBhdHRlcm4sICdoJyk7XG4gICAgICAgIH0gZWxzZSBpZiAocGF0dGVybiA9PT0gJ3RpbWVwYXR0ZXJuJykge1xuICAgICAgICAgICAgdGhpcy5zaG93c2Vjb25kcyA9IGluY2x1ZGVzKHRoaXMudGltZXBhdHRlcm4sICdzJyk7XG4gICAgICAgICAgICB0aGlzLmlzbWVyaWRpYW4gPSBpbmNsdWRlcyh0aGlzLnRpbWVwYXR0ZXJuLCAnaCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0TW9iaWxlSW5wdXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm1vYmlsZS1pbnB1dCcpIGFzIEhUTUxFbGVtZW50O1xuICAgIH1cblxuICAgIG9uRGF0ZVRpbWVJbnB1dEJsdXIoKSB7XG4gICAgICAgIC8vIHJlbW92aW5nIHRoZSBvcGFjaXR5IG9uIGJsdXIgb2YgdGhlIG1vYmlsZSB3aWRnZXRcbiAgICAgICAgY29uc3QgZGlzcGxheUlucHV0RWxlbSA9IHRoaXMuZ2V0TW9iaWxlSW5wdXQoKTtcbiAgICAgICAgaWYgKGRpc3BsYXlJbnB1dEVsZW0gJiYgIWhhc0NvcmRvdmEoKSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW47XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5baV0uY2xhc3NMaXN0LnJlbW92ZSgnYWRkLW9wYWNpdHknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpc3BsYXlJbnB1dEVsZW0uY2xhc3NMaXN0LnJlbW92ZSgncmVtb3ZlLW9wYWNpdHknKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRGF0ZVRpbWVJbnB1dEZvY3VzKHNraXBGb2N1czogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5sb2FkTmF0aXZlRGF0ZUlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGlzcGxheUlucHV0RWxlbSA9IHRoaXMuZ2V0TW9iaWxlSW5wdXQoKTtcbiAgICAgICAgLy8gdG9nZ2xpbmcgdGhlIGNsYXNzZXMgdG8gc2hvdyBhbmQgaGlkZSB0aGUgbmF0aXZlIHdpZGdldCB1c2luZyBvcGFjaXR5XG4gICAgICAgIGlmIChza2lwRm9jdXMgJiYgIWhhc0NvcmRvdmEoKSkge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW47XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW5baV0uY2xhc3NMaXN0LmFkZCgnYWRkLW9wYWNpdHknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpc3BsYXlJbnB1dEVsZW0uY2xhc3NMaXN0LmFkZCgncmVtb3ZlLW9wYWNpdHknKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXNwbGF5SW5wdXRFbGVtICYmIHRoaXMuX3RyaWdnZXJlZEJ5VXNlcikge1xuICAgICAgICAgICAgZGlzcGxheUlucHV0RWxlbS5mb2N1cygpO1xuICAgICAgICAgICAgZGlzcGxheUlucHV0RWxlbS5jbGljaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Q29yZG92YVBsdWdpbkRhdGVQaWNrZXJBcGkoKSB7XG4gICAgICAgIGlmIChpc0lvcygpKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0KHdpbmRvdywgJ2NvcmRvdmEud2F2ZW1ha2VyLmRhdGVQaWNrZXIuc2VsZWN0RGF0ZScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgbW91c2UgZXZlbnRzIHRvIERhdGVwaWNrZXIgcG9wdXAuIFRoZXNlIGV2ZW50cyBhcmUgcmVxdWlyZWQgd2hlbiB3ZSBuYXZpZ2F0ZSBkYXRlIHBpY2tlciB0aHJvdWdoIG1vdXNlLlxuICAgICAqL1xuICAgIHByaXZhdGUgYWRkRGF0ZXBpY2tlck1vdXNlRXZlbnRzKCkge1xuICAgICAgICAkKFwiLmJzLWRhdGVwaWNrZXItaGVhZCAucHJldmlvdXMgc3BhblwiKS5hdHRyKFwiYXJpYS1oaWRkZW5cIiwgJ3RydWUnKTtcbiAgICAgICAgJChcIi5icy1kYXRlcGlja2VyLWhlYWQgLm5leHQgc3BhblwiKS5hdHRyKFwiYXJpYS1oaWRkZW5cIiwgJ3RydWUnKTtcblxuICAgICAgICAkKFwiLmJzLWRhdGVwaWNrZXItaGVhZFwiKS5vbihcImNsaWNrXCIsIFwiLnByZXZpb3VzXCIsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZXh0ID0gdGhpcy5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUsIDApO1xuICAgICAgICAgICAgdGhpcy5wcmV2ID0gdGhpcy5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUsIC0yKTtcbiAgICAgICAgICAgIHRoaXMuY2xpY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAvLyBjaGVjayBmb3Igb3JpZ2luYWwgbW91c2UgY2xpY2tcbiAgICAgICAgICAgIGlmIChldmVudC5vcmlnaW5hbEV2ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGb2N1c0ZvckRhdGUoLTEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHByZXZNb24gPSB0aGlzLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSwgLTEpO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAkKFwiLmJzLWRhdGVwaWNrZXItaGVhZCAucHJldmlvdXMgc3BhblwiKS5hdHRyKFwiYXJpYS1oaWRkZW5cIiwgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICAkKFwiLmJzLWRhdGVwaWNrZXItaGVhZCAubmV4dCBzcGFuXCIpLmF0dHIoXCJhcmlhLWhpZGRlblwiLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgICQoXCIuYnMtZGF0ZXBpY2tlci1oZWFkIC5uZXh0XCIpLmF0dHIoJ2FyaWEtbGFiZWwnLCBgTmV4dCBNb250aCwgJHt0aGlzLm5leHQuZnVsbE1vbnRofSAke3RoaXMubmV4dC5kYXRlLmdldEZ1bGxZZWFyKCl9YCk7XG4gICAgICAgICAgICAgICAgJChcIi5icy1kYXRlcGlja2VyLWhlYWQgLnByZXZpb3VzXCIpLmF0dHIoJ2FyaWEtbGFiZWwnLCBgUHJldmlvdXMgTW9udGgsICR7dGhpcy5wcmV2LmZ1bGxNb250aH0gJHt0aGlzLnByZXYuZGF0ZS5nZXRGdWxsWWVhcigpfWApO1xuICAgICAgICAgICAgICAgICQoJy5icy1kYXRlcGlja2VyLWhlYWQgLmN1cnJlbnQnKS5maXJzdCgpLmFwcGVuZChgPGgyIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBhcmlhLWF0b21pYz1cInRydWVcIiBhcmlhLWxpdmU9J3BvbGl0ZScgY2xhc3M9XCJzci1vbmx5XCI+Q2hhbmdlZCB0byBQcmV2aW91cyBNb250aCwgJHtwcmV2TW9uLmZ1bGxNb250aH0gYW5kIHllYXIgJHtwcmV2TW9uLmRhdGUuZ2V0RnVsbFllYXIoKX08L2gyPmApO1xuICAgICAgICAgICAgICAgICQoJy5icy1kYXRlcGlja2VyLWhlYWQnKS5vbignZm9jdXMnLCAnLmN1cnJlbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICQoJy5icy1kYXRlcGlja2VyLWhlYWQgLmN1cnJlbnQnKS5maW5kKCdoMicpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgJChgLmJzLWRhdGVwaWNrZXItaGVhZCAucHJldmlvdXNgKS5mb2N1cygpO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcbiAgICAgICAgJChcIi5icy1kYXRlcGlja2VyLWhlYWRcIikub24oXCJjbGlja1wiLCBcIi5uZXh0XCIsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZXh0ID0gdGhpcy5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUsIDIpO1xuICAgICAgICAgICAgdGhpcy5wcmV2ID0gdGhpcy5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUsIDApO1xuICAgICAgICAgICAgdGhpcy5jbGlja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBvcmlnaW5hbCBtb3VzZSBjbGlja1xuICAgICAgICAgICAgaWYgKGV2ZW50Lm9yaWdpbmFsRXZlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzRm9yRGF0ZSgxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBuZXh0TW9uID0gdGhpcy5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUsIDEpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgJChcIi5icy1kYXRlcGlja2VyLWhlYWQgLnByZXZpb3VzIHNwYW5cIikuYXR0cihcImFyaWEtaGlkZGVuXCIsICd0cnVlJyk7XG4gICAgICAgICAgICAgICAgJChcIi5icy1kYXRlcGlja2VyLWhlYWQgLm5leHQgc3BhblwiKS5hdHRyKFwiYXJpYS1oaWRkZW5cIiwgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICAkKFwiLmJzLWRhdGVwaWNrZXItaGVhZCAubmV4dFwiKS5hdHRyKCdhcmlhLWxhYmVsJywgYE5leHQgTW9udGgsICR7dGhpcy5uZXh0LmZ1bGxNb250aH0gJHt0aGlzLm5leHQuZGF0ZS5nZXRGdWxsWWVhcigpfWApO1xuICAgICAgICAgICAgICAgICQoXCIuYnMtZGF0ZXBpY2tlci1oZWFkIC5wcmV2aW91c1wiKS5hdHRyKCdhcmlhLWxhYmVsJywgYFByZXZpb3VzIE1vbnRoLCAke3RoaXMucHJldi5mdWxsTW9udGh9ICR7dGhpcy5wcmV2LmRhdGUuZ2V0RnVsbFllYXIoKX1gKTtcbiAgICAgICAgICAgICAgICAkKCcuYnMtZGF0ZXBpY2tlci1oZWFkIC5jdXJyZW50JykuZmlyc3QoKS5hcHBlbmQoYDxoMiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgYXJpYS1hdG9taWM9XCJ0cnVlXCIgYXJpYS1saXZlPSdwb2xpdGUnIGNsYXNzPVwic3Itb25seVwiPkNoYW5nZWQgdG8gTmV4dCBNb250aCwgJHtuZXh0TW9uLmZ1bGxNb250aH0gYW5kIHllYXIgJHtuZXh0TW9uLmRhdGUuZ2V0RnVsbFllYXIoKX08L2gyPmApO1xuICAgICAgICAgICAgICAgICQoJy5icy1kYXRlcGlja2VyLWhlYWQnKS5vbignZm9jdXMnLCAnLmN1cnJlbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICQoJy5icy1kYXRlcGlja2VyLWhlYWQgLmN1cnJlbnQnKS5maW5kKCdoMicpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgJChgLmJzLWRhdGVwaWNrZXItaGVhZCAubmV4dGApLmZvY3VzKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcbiAgICAgICAgJChcIi5icy1kYXRlcGlja2VyLWhlYWRcIikub24oXCJjbGlja1wiLCBcIi5jdXJyZW50XCIsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIG9yaWdpbmFsIG1vdXNlIGNsaWNrXG4gICAgICAgICAgICBpZiAoZXZlbnQub3JpZ2luYWxFdmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXNGb3JDdXJyZW50TW9udGhPcnllYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgICQoJy5icy1kYXRlcGlja2VyLWJvZHknKS5vbihcImNsaWNrXCIsIFwiLmJzLWRhdGVwaWNrZXItYWN0aW9uLWJ1dHRvbnNcIiwgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBvcmlnaW5hbCBtb3VzZSBjbGlja1xuICAgICAgICAgICAgaWYgKGV2ZW50Lm9yaWdpbmFsRXZlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzRm9yTW9udGhPckRheSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gaWYoIXRoaXMuY2xpY2tlZCkge1xuICAgICAgICAkKFwiLmJzLWRhdGVwaWNrZXItaGVhZCAubmV4dFwiKS5hdHRyKCdhcmlhLWxhYmVsJywgYE5leHQgTW9udGgsICR7dGhpcy5uZXh0LmZ1bGxNb250aH0gJHt0aGlzLm5leHQuZGF0ZS5nZXRGdWxsWWVhcigpfWApO1xuICAgICAgICAkKFwiLmJzLWRhdGVwaWNrZXItaGVhZCAucHJldmlvdXNcIikuYXR0cignYXJpYS1sYWJlbCcsIGBQcmV2aW91cyBNb250aCwgJHt0aGlzLnByZXYuZnVsbE1vbnRofSAke3RoaXMucHJldi5kYXRlLmdldEZ1bGxZZWFyKCl9YCk7XG4gICAgICAgIC8vICB9XG4gICAgfVxuXG4gICAgYmx1ckRhdGVJbnB1dChpc1BpY2tlck9wZW4pIHtcbiAgICAgICAgY29uc3QgZGlzcGxheUlucHV0RWxlbSA9IHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZGlzcGxheS1pbnB1dCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoaXNQaWNrZXJPcGVuKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IGRpc3BsYXlJbnB1dEVsZW0uYmx1cigpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3Y/KSB7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gJ3RhYmluZGV4Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdyZXF1aXJlZCcpIHtcbiAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnZGF0ZXBhdHRlcm4nKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZvcm1hdChrZXkpO1xuICAgICAgICB9IGVsc2UgaWYoa2V5ID09PSAndmlld21vZGUnKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5taW5Nb2RlID0gdGhpcy52aWV3bW9kZTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdzaG93d2Vla3MnKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5zaG93V2Vla051bWJlcnMgPSBudjtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdtaW5kYXRlJykge1xuICAgICAgICAgICAgdGhpcy5fZGF0ZU9wdGlvbnMubWluRGF0ZSA9IChudiA9PT0gQ1VSUkVOVF9EQVRFKSA/IHRoaXMubWluZGF0ZSA9IG5ldyBEYXRlKCkgOiBnZXREYXRlT2JqKG52KTtcbiAgICAgICAgICAgIHRoaXMubWluRGF0ZU1heERhdGVWYWxpZGF0aW9uT25JbnB1dCh0aGlzLmRhdGF2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbWF4ZGF0ZScpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLm1heERhdGUgPSAobnYgPT09IENVUlJFTlRfREFURSkgPyB0aGlzLm1heGRhdGUgPSBuZXcgRGF0ZSgpIDogZ2V0RGF0ZU9iaihudik7XG4gICAgICAgICAgICB0aGlzLm1pbkRhdGVNYXhEYXRlVmFsaWRhdGlvbk9uSW5wdXQodGhpcy5kYXRhdmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2V4Y2x1ZGVkYXRlcycgfHwga2V5ID09PSAnZXhjbHVkZWRheXMnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5leGNsdWRlZGF5cykge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhjbHVkZWREYXlzVG9EaXNhYmxlID0gc3BsaXQodGhpcy5leGNsdWRlZGF5cywgJywnKS5tYXAoKGRheSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gK2RheTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmV4Y2x1ZGVkYXRlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhjbHVkZWREYXRlc1RvRGlzYWJsZSA9IHRoaXMuZXhjbHVkZWRhdGVzO1xuICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZyh0aGlzLmV4Y2x1ZGVkYXRlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4Y2x1ZGVkRGF0ZXNUb0Rpc2FibGUgPSBzcGxpdCh0aGlzLmV4Y2x1ZGVkYXRlcywgJywnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5leGNsdWRlZERhdGVzVG9EaXNhYmxlID0gdGhpcy5leGNsdWRlZERhdGVzVG9EaXNhYmxlLm1hcChkID0+IGdldERhdGVPYmooZCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5taW5EYXRlTWF4RGF0ZVZhbGlkYXRpb25PbklucHV0KHRoaXMuZGF0YXZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdzZWxlY3Rmcm9tb3RoZXJtb250aCcpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLnNlbGVjdEZyb21PdGhlck1vbnRoID0gbnY7XG5cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICd0b2RheWJ1dHRvbicpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLnNob3dUb2RheUJ1dHRvbiA9IG52O1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2NsZWFyYnV0dG9uJykge1xuICAgICAgICAgICAgdGhpcy5fZGF0ZU9wdGlvbnMuc2hvd0NsZWFyQnV0dG9uID0gbnY7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAndG9kYXlidXR0b25sYWJlbCcpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLnRvZGF5QnV0dG9uTGFiZWwgPSB0aGlzLmkxOG5TZXJ2aWNlLmdldExvY2FsaXplZE1lc3NhZ2UobnYpIHx8IG52O1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2NsZWFyYnV0dG9ubGFiZWwnKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5jbGVhckJ1dHRvbkxhYmVsID0gdGhpcy5pMThuU2VydmljZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKG52KSB8fCBudjtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdzaG93Y3VzdG9tcGlja2VyJykge1xuICAgICAgICAgICAgdGhpcy5sb2FkTmF0aXZlRGF0ZUlucHV0ID0gaXNNb2JpbGUoKSAmJiAhdGhpcy5zaG93Y3VzdG9tcGlja2VyO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2FkYXB0aXZlcG9zaXRpb24nKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5hZGFwdGl2ZVBvc2l0aW9uID0gbnY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgdGhpcy5jb250YWluZXJUYXJnZXQgPSBnZXRDb250YWluZXJUYXJnZXRDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLmlzUmVhZE9ubHkgPSB0aGlzLmRhdGFlbnRyeW1vZGUgIT0gJ3VuZGVmaW5lZCcgJiYgIXRoaXMuaXNEYXRhRW50cnlNb2RlRW5hYmxlZE9uSW5wdXQodGhpcy5kYXRhZW50cnltb2RlKTtcblxuICAgICAgICAvLyB0aGlzIG1vYmlsZWlucHV0IHdpZHRoIHZhcmllcyBpbiBpb3MgaGVuY2Ugc2V0dGluZyB3aWR0aCBoZXJlLlxuICAgICAgICBjb25zdCBtb2JpbGVJbnB1dCA9IHRoaXMuZ2V0TW9iaWxlSW5wdXQoKTtcbiAgICAgICAgaWYgKG1vYmlsZUlucHV0KSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBtb2JpbGVJbnB1dC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICAgICAgICAgICAgICBtb2JpbGVJbnB1dC5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5kYXRlT25TaG93U3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVPblNob3dTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLmNhbmNlbExvY2FsZUNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jYW5jZWxMb2NhbGVDaGFuZ2VTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXRhY2goKSB7XG4gICAgICAgIHRoaXMuZGF0ZXRpbWVwaWNrZXJDb21wb25lbnQ/LmhpZGVNb2RhbCgpO1xuICAgIH1cblxuICAgIHNldFRpbWV6b25lKGxvY2FsZSkge1xuICAgICAgICB0aGlzLmkxOG5TZXJ2aWNlLnNldFRpbWV6b25lKGxvY2FsZSwgdGhpcyk7XG4gICAgfVxufVxuIl19
|