@ecodev/natural 56.0.2 → 56.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/modules/alert/confirm.component.mjs +1 -1
- package/esm2022/lib/modules/columns-picker/columns-picker.component.mjs +1 -1
- package/esm2022/lib/modules/detail-header/detail-header.component.mjs +1 -1
- package/esm2022/lib/modules/dropdown-components/type-date/type-date.component.mjs +1 -1
- package/esm2022/lib/modules/dropdown-components/type-number/type-number.component.mjs +1 -1
- package/esm2022/lib/modules/dropdown-components/type-text/type-text.component.mjs +1 -1
- package/esm2022/lib/modules/file/component/file.component.mjs +1 -1
- package/esm2022/lib/modules/fixed-button/fixed-button.component.mjs +1 -1
- package/esm2022/lib/modules/fixed-button-detail/fixed-button-detail.component.mjs +1 -1
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.mjs +1 -1
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.mjs +1 -1
- package/esm2022/lib/modules/relations/relations.component.mjs +1 -1
- package/esm2022/lib/modules/search/dropdown-container/dropdown-container.component.mjs +1 -1
- package/esm2022/lib/modules/search/facet-selector/facet-selector.component.mjs +1 -1
- package/esm2022/lib/modules/search/group/group.component.mjs +1 -1
- package/esm2022/lib/modules/search/input/input.component.mjs +1 -1
- package/esm2022/lib/modules/search/search/search.component.mjs +1 -1
- package/esm2022/lib/modules/select/select/select.component.mjs +3 -3
- package/esm2022/lib/modules/select/select-enum/select-enum.component.mjs +1 -1
- package/esm2022/lib/modules/select/select-hierarchic/select-hierarchic.component.mjs +1 -1
- package/esm2022/lib/modules/sidenav/sidenav-container/sidenav-container.component.mjs +1 -1
- package/esm2022/lib/modules/sidenav/sidenav-content/sidenav-content.component.mjs +1 -1
- package/esm2022/lib/modules/table-button/table-button.component.mjs +1 -1
- package/esm2022/lib/services/abstract-model.service.mjs +7 -5
- package/fesm2022/ecodev-natural.mjs +8 -6
- package/fesm2022/ecodev-natural.mjs.map +1 -1
- package/lib/services/abstract-model.service.d.ts +2 -2
- package/package.json +2 -2
- package/src/lib/_natural.theme.scss +4 -0
|
@@ -8,4 +8,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImpor
|
|
|
8
8
|
type: Component,
|
|
9
9
|
args: [{ selector: 'natural-sidenav-content', template: '<ng-content />', standalone: true, styles: [":host{flex:1;display:flex;flex-direction:column;overflow:auto}\n"] }]
|
|
10
10
|
}] });
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZW5hdi1jb250ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL3NpZGVuYXYvc2lkZW5hdi1jb250ZW50L3NpZGVuYXYtY29udGVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7QUFReEMsTUFBTSxPQUFPLDhCQUE4Qjs4R0FBOUIsOEJBQThCO2tHQUE5Qiw4QkFBOEIsbUZBSjdCLGdCQUFnQjs7MkZBSWpCLDhCQUE4QjtrQkFOMUMsU0FBUzsrQkFDSSx5QkFBeUIsWUFDekIsZ0JBQWdCLGNBRWQsSUFBSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduYXR1cmFsLXNpZGVuYXYtY29udGVudCcsXG4gICAgdGVtcGxhdGU6ICc8bmctY29udGVudCAvPicsXG4gICAgc3R5bGVVcmw6ICcuL3NpZGVuYXYtY29udGVudC5jb21wb25lbnQuc2NzcycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbFNpZGVuYXZDb250ZW50Q29tcG9uZW50IHt9XG4iXX0=
|
|
@@ -72,4 +72,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImpor
|
|
|
72
72
|
}], buttonClick: [{
|
|
73
73
|
type: Output
|
|
74
74
|
}] } });
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL3RhYmxlLWJ1dHRvbi90YWJsZS1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvdGFibGUtYnV0dG9uL3RhYmxlLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBOEIsVUFBVSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFeEUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQUVyRDs7Ozs7Ozs7O0dBU0c7QUFVSCxNQUFNLE9BQU8sMkJBQTJCO0lBVHhDO1FBVW9CLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLHdCQUFtQixHQUF3QixFQUFFLENBQUM7UUFJOUMsYUFBUSxHQUE2QixFQUFFLENBQUM7UUFFeEMscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUVMLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQUNoRSxTQUFJLEdBQTZDLE1BQU0sQ0FBQztLQWFsRTtJQVhVLFdBQVc7UUFDZCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDO1FBQzdCLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztRQUN2QixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7UUFDdkIsQ0FBQztJQUNMLENBQUM7OEdBekJRLDJCQUEyQjtrR0FBM0IsMkJBQTJCLHdaQzFCeEMsODRLQTJLQSxra0JEbkpjLGFBQWEsb0xBQUUsb0JBQW9CLGtHQUFFLGVBQWUsaVVBQUUsVUFBVTs7MkZBRWpFLDJCQUEyQjtrQkFUdkMsU0FBUzsrQkFDSSxzQkFBc0IsaUJBSWpCLGlCQUFpQixDQUFDLElBQUksY0FDekIsSUFBSSxXQUNQLENBQUMsYUFBYSxFQUFFLG9CQUFvQixFQUFFLGVBQWUsRUFBRSxVQUFVLENBQUM7OEJBRzNELFdBQVc7c0JBQTFCLEtBQUs7Z0JBQ1UsbUJBQW1CO3NCQUFsQyxLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxJQUFJO3NCQUFuQixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxnQkFBZ0I7c0JBQS9CLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxNQUFNO3NCQUFyQixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ29CLFdBQVc7c0JBQXBDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UGFyYW1zLCBRdWVyeVBhcmFtc0hhbmRsaW5nLCBSb3V0ZXJMaW5rfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtUaGVtZVBhbGV0dGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHtNYXRCdXR0b25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQge05hdHVyYWxJY29uRGlyZWN0aXZlfSBmcm9tICcuLi9pY29uL2ljb24uZGlyZWN0aXZlJztcbmltcG9ydCB7TWF0SWNvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5cbi8qKlxuICogQnV0dG9uIHRoYXQgZml0cyB3ZWxsIGluIGEgYDxtYXQtdGFibGU+YCBhbmQgc3VwcG9ydCBlaXRoZXJcbiAqIHJvdXRlIG5hdmlnYXRpb24gdmlhIGBuYXZpZ2F0ZWAsIG9yIGV4dGVybmFsIFVSTCB2aWEgYGhyZWZgLFxuICogb3IgY2FsbGJhY2sgdmlhIGBidXR0b25DbGlja2AuXG4gKlxuICogSWYgbmVpdGhlciBgbmF2aWdhdGVgIG5vciBgaHJlZmAgbm9yIGBidXR0b25DbGlja2AgaGF2ZSBhIG1lYW5pbmdmdWwgdmFsdWUsIHRoZW5cbiAqIGl0IHdpbGwgc2hvdyB0aGUgaWNvbiBhbmQvb3IgbGFiZWwgaW4gYSBgPHNwYW4+YCBpbnN0ZWFkIG9mIGEgYnV0dG9uLlxuICpcbiAqIEV4dGVybmFsIFVSTCB3aWxsIGFsd2F5cyBiZSBvcGVuZWQgaW4gbmV3IHRhYi5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduYXR1cmFsLXRhYmxlLWJ1dHRvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFibGUtYnV0dG9uLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC91c2UtY29tcG9uZW50LXZpZXctZW5jYXBzdWxhdGlvblxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTWF0SWNvbk1vZHVsZSwgTmF0dXJhbEljb25EaXJlY3RpdmUsIE1hdEJ1dHRvbk1vZHVsZSwgUm91dGVyTGlua10sXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxUYWJsZUJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KCkgcHVibGljIHF1ZXJ5UGFyYW1zOiBQYXJhbXMgPSB7fTtcbiAgICBASW5wdXQoKSBwdWJsaWMgcXVlcnlQYXJhbXNIYW5kbGluZzogUXVlcnlQYXJhbXNIYW5kbGluZyA9ICcnO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbD86IHN0cmluZyB8IG51bGw7XG4gICAgQElucHV0KCkgcHVibGljIGljb24/OiBzdHJpbmcgfCBudWxsO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBocmVmPzogc3RyaW5nIHwgbnVsbDtcbiAgICBASW5wdXQoKSBwdWJsaWMgbmF2aWdhdGU6IFJvdXRlckxpbmtbJ3JvdXRlckxpbmsnXSA9IFtdO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBmcmFnbWVudD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBASW5wdXQoKSBwdWJsaWMgcHJlc2VydmVGcmFnbWVudCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyByYWlzZWQgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgY29sb3I6IFRoZW1lUGFsZXR0ZTtcbiAgICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IGJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuICAgIHB1YmxpYyB0eXBlOiAncm91dGVyTGluaycgfCAnaHJlZicgfCAnY2xpY2snIHwgJ25vbmUnID0gJ25vbmUnO1xuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0ZT8ubGVuZ3RoIHx8IE9iamVjdC5rZXlzKHRoaXMucXVlcnlQYXJhbXMpLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gJ3JvdXRlckxpbmsnO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaHJlZikge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gJ2hyZWYnO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYnV0dG9uQ2xpY2sub2JzZXJ2ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9ICdjbGljayc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSAnbm9uZSc7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8IS0tIEJlY2F1c2UgZGlyZWN0aXZlcyBjYW4ndCBiZSBhcHBsaWVkIGNvbmRpdGlvbmFsbHkgKHJvdXRlckxpbmssIG1hdC1idXR0b24gYW5kIG1hdC1pY29uLWJ1dHRvbiksIHdlIGhhdmUgdG8gdXNlIGRpZmZlcmVudCBlbGVtZW50cyAtLT5cblxuPCEtLSBFZGdlIGNhc2Ugb2YgYSBidXR0b24gd2l0aG91dCBhbnkga2luZCBvZiBsaW5rIGF0IGFsbCAtLT5cbkBpZiAodHlwZSA9PT0gJ25vbmUnKSB7XG4gICAgPHNwYW4+XG4gICAgICAgIEBpZiAoaWNvbikge1xuICAgICAgICAgICAgPG1hdC1pY29uIFtuYXR1cmFsSWNvbl09XCJpY29uXCIgLz5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGxhYmVsKSB7XG4gICAgICAgICAgICA8c3Bhbj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgfVxuICAgIDwvc3Bhbj5cbn1cblxuQGlmICghcmFpc2VkKSB7XG4gICAgPCEtLSBBcHAgcm91dGVkIGxpbmsgd2l0aCBsYWJlbC4uLiAtLT5cbiAgICBAaWYgKHR5cGUgPT09ICdyb3V0ZXJMaW5rJyAmJiBsYWJlbCkge1xuICAgICAgICA8YVxuICAgICAgICAgICAgW2NvbG9yXT1cImNvbG9yXCJcbiAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJxdWVyeVBhcmFtc1wiXG4gICAgICAgICAgICBbcXVlcnlQYXJhbXNIYW5kbGluZ109XCJxdWVyeVBhcmFtc0hhbmRsaW5nXCJcbiAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIm5hdmlnYXRlXCJcbiAgICAgICAgICAgIFtmcmFnbWVudF09XCJmcmFnbWVudFwiXG4gICAgICAgICAgICBbcHJlc2VydmVGcmFnbWVudF09XCJwcmVzZXJ2ZUZyYWdtZW50XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoaWNvbikge1xuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBbbmF0dXJhbEljb25dPVwiaWNvblwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8c3Bhbj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgIH1cbiAgICA8IS0tIC4uLiBhbmQgd2l0aG91dCBsYWJlbCAtLT5cbiAgICBAaWYgKHR5cGUgPT09ICdyb3V0ZXJMaW5rJyAmJiAhbGFiZWwpIHtcbiAgICAgICAgPGFcbiAgICAgICAgICAgIFtjb2xvcl09XCJjb2xvclwiXG4gICAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwicXVlcnlQYXJhbXNcIlxuICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zSGFuZGxpbmddPVwicXVlcnlQYXJhbXNIYW5kbGluZ1wiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCJuYXZpZ2F0ZVwiXG4gICAgICAgICAgICBbZnJhZ21lbnRdPVwiZnJhZ21lbnRcIlxuICAgICAgICAgICAgW3ByZXNlcnZlRnJhZ21lbnRdPVwicHJlc2VydmVGcmFnbWVudFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoaWNvbikge1xuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBbbmF0dXJhbEljb25dPVwiaWNvblwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvYT5cbiAgICB9XG4gICAgPCEtLSBDbGljayB3aXRoIGxhYmVsLi4uIC0tPlxuICAgIEBpZiAodHlwZSA9PT0gJ2NsaWNrJyAmJiBsYWJlbCkge1xuICAgICAgICA8YSBbY29sb3JdPVwiY29sb3JcIiAoY2xpY2spPVwiYnV0dG9uQ2xpY2suZW1pdCgkZXZlbnQpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgbWF0LWJ1dHRvbj5cbiAgICAgICAgICAgIEBpZiAoaWNvbikge1xuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBbbmF0dXJhbEljb25dPVwiaWNvblwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8c3Bhbj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgIH1cbiAgICA8IS0tIC4uLiBhbmQgd2l0aG91dCBsYWJlbCAtLT5cbiAgICBAaWYgKHR5cGUgPT09ICdjbGljaycgJiYgIWxhYmVsKSB7XG4gICAgICAgIDxhIChjbGljayk9XCJidXR0b25DbGljay5lbWl0KCRldmVudClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBtYXQtaWNvbi1idXR0b24+XG4gICAgICAgICAgICBAaWYgKGljb24pIHtcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gW25hdHVyYWxJY29uXT1cImljb25cIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2E+XG4gICAgfVxuICAgIDwhLS0gRXh0ZXJuYWwgbGluayB3aXRoIGxhYmVsLi4uIC0tPlxuICAgIEBpZiAodHlwZSA9PT0gJ2hyZWYnICYmIGxhYmVsKSB7XG4gICAgICAgIDxhIFthdHRyLmhyZWZdPVwiaHJlZlwiIFtjb2xvcl09XCJjb2xvclwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIG1hdC1idXR0b24gdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgICAgICBAaWYgKGljb24pIHtcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gW25hdHVyYWxJY29uXT1cImljb25cIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPHNwYW4+e3sgbGFiZWwgfX08L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICB9XG4gICAgPCEtLSAuLi4gYW5kIHdpdGhvdXQgbGFiZWwgLS0+XG4gICAgQGlmICh0eXBlID09PSAnaHJlZicgJiYgIWxhYmVsKSB7XG4gICAgICAgIDxhIFthdHRyLmhyZWZdPVwiaHJlZlwiIFtjb2xvcl09XCJjb2xvclwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIG1hdC1pY29uLWJ1dHRvbiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgICAgICAgIEBpZiAoaWNvbikge1xuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBbbmF0dXJhbEljb25dPVwiaWNvblwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvYT5cbiAgICB9XG59XG5cbkBpZiAocmFpc2VkKSB7XG4gICAgPCEtLSBBcHAgcm91dGVkIGxpbmsgd2l0aCBsYWJlbC4uLiAtLT5cbiAgICBAaWYgKHR5cGUgPT09ICdyb3V0ZXJMaW5rJyAmJiBsYWJlbCkge1xuICAgICAgICA8YVxuICAgICAgICAgICAgW2NvbG9yXT1cImNvbG9yXCJcbiAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJxdWVyeVBhcmFtc1wiXG4gICAgICAgICAgICBbcXVlcnlQYXJhbXNIYW5kbGluZ109XCJxdWVyeVBhcmFtc0hhbmRsaW5nXCJcbiAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIm5hdmlnYXRlXCJcbiAgICAgICAgICAgIFtmcmFnbWVudF09XCJmcmFnbWVudFwiXG4gICAgICAgICAgICBbcHJlc2VydmVGcmFnbWVudF09XCJwcmVzZXJ2ZUZyYWdtZW50XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKGljb24pIHtcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gW25hdHVyYWxJY29uXT1cImljb25cIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPHNwYW4+e3sgbGFiZWwgfX08L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICB9XG4gICAgPCEtLSAuLi4gYW5kIHdpdGhvdXQgbGFiZWwgLS0+XG4gICAgQGlmICh0eXBlID09PSAncm91dGVyTGluaycgJiYgIWxhYmVsKSB7XG4gICAgICAgIDxhXG4gICAgICAgICAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cInF1ZXJ5UGFyYW1zXCJcbiAgICAgICAgICAgIFtxdWVyeVBhcmFtc0hhbmRsaW5nXT1cInF1ZXJ5UGFyYW1zSGFuZGxpbmdcIlxuICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwibmF2aWdhdGVcIlxuICAgICAgICAgICAgW2ZyYWdtZW50XT1cImZyYWdtZW50XCJcbiAgICAgICAgICAgIFtwcmVzZXJ2ZUZyYWdtZW50XT1cInByZXNlcnZlRnJhZ21lbnRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXo0XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgQGlmIChpY29uKSB7XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIFtuYXR1cmFsSWNvbl09XCJpY29uXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9hPlxuICAgIH1cbiAgICA8IS0tIENsaWNrIHdpdGggbGFiZWwuLi4gLS0+XG4gICAgQGlmICh0eXBlID09PSAnY2xpY2snICYmIGxhYmVsKSB7XG4gICAgICAgIDxhIFtjb2xvcl09XCJjb2xvclwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIChjbGljayk9XCJidXR0b25DbGljay5lbWl0KCRldmVudClcIiBtYXQtcmFpc2VkLWJ1dHRvbj5cbiAgICAgICAgICAgIEBpZiAoaWNvbikge1xuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBbbmF0dXJhbEljb25dPVwiaWNvblwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8c3Bhbj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgIH1cbiAgICA8IS0tIC4uLiBhbmQgd2l0aG91dCBsYWJlbCAtLT5cbiAgICBAaWYgKHR5cGUgPT09ICdjbGljaycgJiYgIWxhYmVsKSB7XG4gICAgICAgIDxhXG4gICAgICAgICAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJidXR0b25DbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejRcIlxuICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKGljb24pIHtcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gW25hdHVyYWxJY29uXT1cImljb25cIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2E+XG4gICAgfVxuICAgIDwhLS0gRXh0ZXJuYWwgbGluayB3aXRoIGxhYmVsLi4uIC0tPlxuICAgIEBpZiAodHlwZSA9PT0gJ2hyZWYnICYmIGxhYmVsKSB7XG4gICAgICAgIDxhIFthdHRyLmhyZWZdPVwiaHJlZlwiIFtjb2xvcl09XCJjb2xvclwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIG1hdC1yYWlzZWQtYnV0dG9uIHRhcmdldD1cIl9ibGFua1wiPlxuICAgICAgICAgICAgQGlmIChpY29uKSB7XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIFtuYXR1cmFsSWNvbl09XCJpY29uXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxzcGFuPnt7IGxhYmVsIH19PC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgfVxuICAgIDwhLS0gLi4uIGFuZCB3aXRob3V0IGxhYmVsIC0tPlxuICAgIEBpZiAodHlwZSA9PT0gJ2hyZWYnICYmICFsYWJlbCkge1xuICAgICAgICA8YVxuICAgICAgICAgICAgW2F0dHIuaHJlZl09XCJocmVmXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJjb2xvclwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejRcIlxuICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgQGlmIChpY29uKSB7XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIFtuYXR1cmFsSWNvbl09XCJpY29uXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9hPlxuICAgIH1cbn1cbiJdfQ==
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL3RhYmxlLWJ1dHRvbi90YWJsZS1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvdGFibGUtYnV0dG9uL3RhYmxlLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBOEIsVUFBVSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFeEUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQUVyRDs7Ozs7Ozs7O0dBU0c7QUFVSCxNQUFNLE9BQU8sMkJBQTJCO0lBVHhDO1FBVW9CLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLHdCQUFtQixHQUF3QixFQUFFLENBQUM7UUFJOUMsYUFBUSxHQUE2QixFQUFFLENBQUM7UUFFeEMscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUVMLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQUNoRSxTQUFJLEdBQTZDLE1BQU0sQ0FBQztLQWFsRTtJQVhVLFdBQVc7UUFDZCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDO1FBQzdCLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztRQUN2QixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7UUFDdkIsQ0FBQztJQUNMLENBQUM7OEdBekJRLDJCQUEyQjtrR0FBM0IsMkJBQTJCLHdaQzFCeEMsODRLQTJLQSxra0JEbkpjLGFBQWEsb0xBQUUsb0JBQW9CLGtHQUFFLGVBQWUsaVVBQUUsVUFBVTs7MkZBRWpFLDJCQUEyQjtrQkFUdkMsU0FBUzsrQkFDSSxzQkFBc0IsaUJBSWpCLGlCQUFpQixDQUFDLElBQUksY0FDekIsSUFBSSxXQUNQLENBQUMsYUFBYSxFQUFFLG9CQUFvQixFQUFFLGVBQWUsRUFBRSxVQUFVLENBQUM7OEJBRzNELFdBQVc7c0JBQTFCLEtBQUs7Z0JBQ1UsbUJBQW1CO3NCQUFsQyxLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxJQUFJO3NCQUFuQixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxnQkFBZ0I7c0JBQS9CLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSztnQkFDVSxNQUFNO3NCQUFyQixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ29CLFdBQVc7c0JBQXBDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UGFyYW1zLCBRdWVyeVBhcmFtc0hhbmRsaW5nLCBSb3V0ZXJMaW5rfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtUaGVtZVBhbGV0dGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHtNYXRCdXR0b25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQge05hdHVyYWxJY29uRGlyZWN0aXZlfSBmcm9tICcuLi9pY29uL2ljb24uZGlyZWN0aXZlJztcbmltcG9ydCB7TWF0SWNvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5cbi8qKlxuICogQnV0dG9uIHRoYXQgZml0cyB3ZWxsIGluIGEgYDxtYXQtdGFibGU+YCBhbmQgc3VwcG9ydCBlaXRoZXJcbiAqIHJvdXRlIG5hdmlnYXRpb24gdmlhIGBuYXZpZ2F0ZWAsIG9yIGV4dGVybmFsIFVSTCB2aWEgYGhyZWZgLFxuICogb3IgY2FsbGJhY2sgdmlhIGBidXR0b25DbGlja2AuXG4gKlxuICogSWYgbmVpdGhlciBgbmF2aWdhdGVgIG5vciBgaHJlZmAgbm9yIGBidXR0b25DbGlja2AgaGF2ZSBhIG1lYW5pbmdmdWwgdmFsdWUsIHRoZW5cbiAqIGl0IHdpbGwgc2hvdyB0aGUgaWNvbiBhbmQvb3IgbGFiZWwgaW4gYSBgPHNwYW4+YCBpbnN0ZWFkIG9mIGEgYnV0dG9uLlxuICpcbiAqIEV4dGVybmFsIFVSTCB3aWxsIGFsd2F5cyBiZSBvcGVuZWQgaW4gbmV3IHRhYi5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduYXR1cmFsLXRhYmxlLWJ1dHRvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL3RhYmxlLWJ1dHRvbi5jb21wb25lbnQuc2NzcycsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC91c2UtY29tcG9uZW50LXZpZXctZW5jYXBzdWxhdGlvblxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTWF0SWNvbk1vZHVsZSwgTmF0dXJhbEljb25EaXJlY3RpdmUsIE1hdEJ1dHRvbk1vZHVsZSwgUm91dGVyTGlua10sXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxUYWJsZUJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KCkgcHVibGljIHF1ZXJ5UGFyYW1zOiBQYXJhbXMgPSB7fTtcbiAgICBASW5wdXQoKSBwdWJsaWMgcXVlcnlQYXJhbXNIYW5kbGluZzogUXVlcnlQYXJhbXNIYW5kbGluZyA9ICcnO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbD86IHN0cmluZyB8IG51bGw7XG4gICAgQElucHV0KCkgcHVibGljIGljb24/OiBzdHJpbmcgfCBudWxsO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBocmVmPzogc3RyaW5nIHwgbnVsbDtcbiAgICBASW5wdXQoKSBwdWJsaWMgbmF2aWdhdGU6IFJvdXRlckxpbmtbJ3JvdXRlckxpbmsnXSA9IFtdO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBmcmFnbWVudD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBASW5wdXQoKSBwdWJsaWMgcHJlc2VydmVGcmFnbWVudCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyByYWlzZWQgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgY29sb3I6IFRoZW1lUGFsZXR0ZTtcbiAgICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IGJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuICAgIHB1YmxpYyB0eXBlOiAncm91dGVyTGluaycgfCAnaHJlZicgfCAnY2xpY2snIHwgJ25vbmUnID0gJ25vbmUnO1xuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0ZT8ubGVuZ3RoIHx8IE9iamVjdC5rZXlzKHRoaXMucXVlcnlQYXJhbXMpLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gJ3JvdXRlckxpbmsnO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaHJlZikge1xuICAgICAgICAgICAgdGhpcy50eXBlID0gJ2hyZWYnO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYnV0dG9uQ2xpY2sub2JzZXJ2ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudHlwZSA9ICdjbGljayc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSAnbm9uZSc7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8IS0tIEJlY2F1c2UgZGlyZWN0aXZlcyBjYW4ndCBiZSBhcHBsaWVkIGNvbmRpdGlvbmFsbHkgKHJvdXRlckxpbmssIG1hdC1idXR0b24gYW5kIG1hdC1pY29uLWJ1dHRvbiksIHdlIGhhdmUgdG8gdXNlIGRpZmZlcmVudCBlbGVtZW50cyAtLT5cblxuPCEtLSBFZGdlIGNhc2Ugb2YgYSBidXR0b24gd2l0aG91dCBhbnkga2luZCBvZiBsaW5rIGF0IGFsbCAtLT5cbkBpZiAodHlwZSA9PT0gJ25vbmUnKSB7XG4gICAgPHNwYW4+XG4gICAgICAgIEBpZiAoaWNvbikge1xuICAgICAgICAgICAgPG1hdC1pY29uIFtuYXR1cmFsSWNvbl09XCJpY29uXCIgLz5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGxhYmVsKSB7XG4gICAgICAgICAgICA8c3Bhbj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgfVxuICAgIDwvc3Bhbj5cbn1cblxuQGlmICghcmFpc2VkKSB7XG4gICAgPCEtLSBBcHAgcm91dGVkIGxpbmsgd2l0aCBsYWJlbC4uLiAtLT5cbiAgICBAaWYgKHR5cGUgPT09ICdyb3V0ZXJMaW5rJyAmJiBsYWJlbCkge1xuICAgICAgICA8YVxuICAgICAgICAgICAgW2NvbG9yXT1cImNvbG9yXCJcbiAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJxdWVyeVBhcmFtc1wiXG4gICAgICAgICAgICBbcXVlcnlQYXJhbXNIYW5kbGluZ109XCJxdWVyeVBhcmFtc0hhbmRsaW5nXCJcbiAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIm5hdmlnYXRlXCJcbiAgICAgICAgICAgIFtmcmFnbWVudF09XCJmcmFnbWVudFwiXG4gICAgICAgICAgICBbcHJlc2VydmVGcmFnbWVudF09XCJwcmVzZXJ2ZUZyYWdtZW50XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoaWNvbikge1xuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBbbmF0dXJhbEljb25dPVwiaWNvblwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8c3Bhbj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgIH1cbiAgICA8IS0tIC4uLiBhbmQgd2l0aG91dCBsYWJlbCAtLT5cbiAgICBAaWYgKHR5cGUgPT09ICdyb3V0ZXJMaW5rJyAmJiAhbGFiZWwpIHtcbiAgICAgICAgPGFcbiAgICAgICAgICAgIFtjb2xvcl09XCJjb2xvclwiXG4gICAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwicXVlcnlQYXJhbXNcIlxuICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zSGFuZGxpbmddPVwicXVlcnlQYXJhbXNIYW5kbGluZ1wiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCJuYXZpZ2F0ZVwiXG4gICAgICAgICAgICBbZnJhZ21lbnRdPVwiZnJhZ21lbnRcIlxuICAgICAgICAgICAgW3ByZXNlcnZlRnJhZ21lbnRdPVwicHJlc2VydmVGcmFnbWVudFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoaWNvbikge1xuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBbbmF0dXJhbEljb25dPVwiaWNvblwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvYT5cbiAgICB9XG4gICAgPCEtLSBDbGljayB3aXRoIGxhYmVsLi4uIC0tPlxuICAgIEBpZiAodHlwZSA9PT0gJ2NsaWNrJyAmJiBsYWJlbCkge1xuICAgICAgICA8YSBbY29sb3JdPVwiY29sb3JcIiAoY2xpY2spPVwiYnV0dG9uQ2xpY2suZW1pdCgkZXZlbnQpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgbWF0LWJ1dHRvbj5cbiAgICAgICAgICAgIEBpZiAoaWNvbikge1xuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBbbmF0dXJhbEljb25dPVwiaWNvblwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8c3Bhbj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgIH1cbiAgICA8IS0tIC4uLiBhbmQgd2l0aG91dCBsYWJlbCAtLT5cbiAgICBAaWYgKHR5cGUgPT09ICdjbGljaycgJiYgIWxhYmVsKSB7XG4gICAgICAgIDxhIChjbGljayk9XCJidXR0b25DbGljay5lbWl0KCRldmVudClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBtYXQtaWNvbi1idXR0b24+XG4gICAgICAgICAgICBAaWYgKGljb24pIHtcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gW25hdHVyYWxJY29uXT1cImljb25cIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2E+XG4gICAgfVxuICAgIDwhLS0gRXh0ZXJuYWwgbGluayB3aXRoIGxhYmVsLi4uIC0tPlxuICAgIEBpZiAodHlwZSA9PT0gJ2hyZWYnICYmIGxhYmVsKSB7XG4gICAgICAgIDxhIFthdHRyLmhyZWZdPVwiaHJlZlwiIFtjb2xvcl09XCJjb2xvclwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIG1hdC1idXR0b24gdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgICAgICBAaWYgKGljb24pIHtcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gW25hdHVyYWxJY29uXT1cImljb25cIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPHNwYW4+e3sgbGFiZWwgfX08L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICB9XG4gICAgPCEtLSAuLi4gYW5kIHdpdGhvdXQgbGFiZWwgLS0+XG4gICAgQGlmICh0eXBlID09PSAnaHJlZicgJiYgIWxhYmVsKSB7XG4gICAgICAgIDxhIFthdHRyLmhyZWZdPVwiaHJlZlwiIFtjb2xvcl09XCJjb2xvclwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIG1hdC1pY29uLWJ1dHRvbiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgICAgICAgIEBpZiAoaWNvbikge1xuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBbbmF0dXJhbEljb25dPVwiaWNvblwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvYT5cbiAgICB9XG59XG5cbkBpZiAocmFpc2VkKSB7XG4gICAgPCEtLSBBcHAgcm91dGVkIGxpbmsgd2l0aCBsYWJlbC4uLiAtLT5cbiAgICBAaWYgKHR5cGUgPT09ICdyb3V0ZXJMaW5rJyAmJiBsYWJlbCkge1xuICAgICAgICA8YVxuICAgICAgICAgICAgW2NvbG9yXT1cImNvbG9yXCJcbiAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJxdWVyeVBhcmFtc1wiXG4gICAgICAgICAgICBbcXVlcnlQYXJhbXNIYW5kbGluZ109XCJxdWVyeVBhcmFtc0hhbmRsaW5nXCJcbiAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIm5hdmlnYXRlXCJcbiAgICAgICAgICAgIFtmcmFnbWVudF09XCJmcmFnbWVudFwiXG4gICAgICAgICAgICBbcHJlc2VydmVGcmFnbWVudF09XCJwcmVzZXJ2ZUZyYWdtZW50XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKGljb24pIHtcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gW25hdHVyYWxJY29uXT1cImljb25cIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPHNwYW4+e3sgbGFiZWwgfX08L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICB9XG4gICAgPCEtLSAuLi4gYW5kIHdpdGhvdXQgbGFiZWwgLS0+XG4gICAgQGlmICh0eXBlID09PSAncm91dGVyTGluaycgJiYgIWxhYmVsKSB7XG4gICAgICAgIDxhXG4gICAgICAgICAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cInF1ZXJ5UGFyYW1zXCJcbiAgICAgICAgICAgIFtxdWVyeVBhcmFtc0hhbmRsaW5nXT1cInF1ZXJ5UGFyYW1zSGFuZGxpbmdcIlxuICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwibmF2aWdhdGVcIlxuICAgICAgICAgICAgW2ZyYWdtZW50XT1cImZyYWdtZW50XCJcbiAgICAgICAgICAgIFtwcmVzZXJ2ZUZyYWdtZW50XT1cInByZXNlcnZlRnJhZ21lbnRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXo0XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgQGlmIChpY29uKSB7XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIFtuYXR1cmFsSWNvbl09XCJpY29uXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9hPlxuICAgIH1cbiAgICA8IS0tIENsaWNrIHdpdGggbGFiZWwuLi4gLS0+XG4gICAgQGlmICh0eXBlID09PSAnY2xpY2snICYmIGxhYmVsKSB7XG4gICAgICAgIDxhIFtjb2xvcl09XCJjb2xvclwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIChjbGljayk9XCJidXR0b25DbGljay5lbWl0KCRldmVudClcIiBtYXQtcmFpc2VkLWJ1dHRvbj5cbiAgICAgICAgICAgIEBpZiAoaWNvbikge1xuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBbbmF0dXJhbEljb25dPVwiaWNvblwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8c3Bhbj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgIH1cbiAgICA8IS0tIC4uLiBhbmQgd2l0aG91dCBsYWJlbCAtLT5cbiAgICBAaWYgKHR5cGUgPT09ICdjbGljaycgJiYgIWxhYmVsKSB7XG4gICAgICAgIDxhXG4gICAgICAgICAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJidXR0b25DbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejRcIlxuICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKGljb24pIHtcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gW25hdHVyYWxJY29uXT1cImljb25cIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2E+XG4gICAgfVxuICAgIDwhLS0gRXh0ZXJuYWwgbGluayB3aXRoIGxhYmVsLi4uIC0tPlxuICAgIEBpZiAodHlwZSA9PT0gJ2hyZWYnICYmIGxhYmVsKSB7XG4gICAgICAgIDxhIFthdHRyLmhyZWZdPVwiaHJlZlwiIFtjb2xvcl09XCJjb2xvclwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIG1hdC1yYWlzZWQtYnV0dG9uIHRhcmdldD1cIl9ibGFua1wiPlxuICAgICAgICAgICAgQGlmIChpY29uKSB7XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIFtuYXR1cmFsSWNvbl09XCJpY29uXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxzcGFuPnt7IGxhYmVsIH19PC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgfVxuICAgIDwhLS0gLi4uIGFuZCB3aXRob3V0IGxhYmVsIC0tPlxuICAgIEBpZiAodHlwZSA9PT0gJ2hyZWYnICYmICFsYWJlbCkge1xuICAgICAgICA8YVxuICAgICAgICAgICAgW2F0dHIuaHJlZl09XCJocmVmXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJjb2xvclwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejRcIlxuICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgQGlmIChpY29uKSB7XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIFtuYXR1cmFsSWNvbl09XCJpY29uXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9hPlxuICAgIH1cbn1cbiJdfQ==
|
|
@@ -112,7 +112,7 @@ export class NaturalAbstractModelService {
|
|
|
112
112
|
* If available it will emit object from cache immediately, then it
|
|
113
113
|
* will **always** fetch from network and then the observable will be completed
|
|
114
114
|
*/
|
|
115
|
-
getOne(id) {
|
|
115
|
+
getOne(id, fetchPolicy = 'cache-and-network') {
|
|
116
116
|
this.throwIfObservable(id);
|
|
117
117
|
this.throwIfNotQuery(this.oneQuery);
|
|
118
118
|
return this.getVariablesForOne(id).pipe(switchMap(variables => {
|
|
@@ -120,7 +120,7 @@ export class NaturalAbstractModelService {
|
|
|
120
120
|
return this.apollo.watchQuery({
|
|
121
121
|
query: this.oneQuery,
|
|
122
122
|
variables: variables,
|
|
123
|
-
fetchPolicy:
|
|
123
|
+
fetchPolicy: fetchPolicy,
|
|
124
124
|
nextFetchPolicy: 'cache-only',
|
|
125
125
|
}).valueChanges;
|
|
126
126
|
}), filter(result => !!result.data), takeWhile(result => result.networkStatus !== NetworkStatus.ready, true), map(result => result.data[this.name]));
|
|
@@ -319,13 +319,15 @@ export class NaturalAbstractModelService {
|
|
|
319
319
|
}));
|
|
320
320
|
}
|
|
321
321
|
/**
|
|
322
|
-
* Resolve model and items related to the model, if the id is provided, in order to show a form
|
|
322
|
+
* Resolve model from server (never from cache) and items related to the model, if the id is provided, in order to show a form
|
|
323
323
|
*/
|
|
324
324
|
resolve(id) {
|
|
325
325
|
// Load model if id is given
|
|
326
326
|
let observable;
|
|
327
327
|
if (id) {
|
|
328
|
-
observable = this.naturalDebounceService
|
|
328
|
+
observable = this.naturalDebounceService
|
|
329
|
+
.flushOne(this, id)
|
|
330
|
+
.pipe(switchMap(() => this.getOne(id, 'network-only')));
|
|
329
331
|
}
|
|
330
332
|
else {
|
|
331
333
|
observable = of(this.getDefaultForServer());
|
|
@@ -493,4 +495,4 @@ export class NaturalAbstractModelService {
|
|
|
493
495
|
}
|
|
494
496
|
}
|
|
495
497
|
}
|
|
496
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbW9kZWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9zZXJ2aWNlcy9hYnN0cmFjdC1tb2RlbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBUyxHQUFHLEVBQWlCLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFjLGFBQWEsRUFBd0IsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RixPQUFPLEVBQW9DLGtCQUFrQixFQUFFLGdCQUFnQixFQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEgsT0FBTyxFQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakUsT0FBTyxFQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBbUIsTUFBTSxNQUFNLENBQUM7QUFDckcsT0FBTyxFQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pHLE9BQU8sRUFBQyw0QkFBNEIsRUFBaUIsTUFBTSxtQ0FBbUMsQ0FBQztBQUUvRixPQUFPLEVBQUMsVUFBVSxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBb0J4RyxNQUFNLE9BQWdCLDJCQUEyQjtJQWlCN0MsWUFDdUIsTUFBYyxFQUNkLHNCQUE4QyxFQUM5QyxJQUFZLEVBQ1osUUFBNkIsRUFDN0IsUUFBNkIsRUFDN0IsY0FBbUMsRUFDbkMsY0FBbUMsRUFDbkMsY0FBbUM7UUFQbkMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLDJCQUFzQixHQUF0Qixz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LDRCQUE0QixDQUFDLE9BQWtCO1FBQ3JELE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ08saUJBQWlCLENBQUMsS0FBYztRQUN0QyxJQUFJLEtBQUssWUFBWSxVQUFVLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksS0FBSyxDQUNYLDhHQUE4RyxDQUNqSCxDQUFDO1FBQ04sQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLGtCQUFrQixDQUFDLEVBQVU7UUFDakMsT0FBTyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxJQUFJLENBQ3hDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFDLEVBQUUsRUFBRSxFQUFFLEVBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQ3pFLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSyxlQUFlLENBQUMsS0FBMEI7UUFDOUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQyw4RUFBOEUsQ0FBQyxDQUFDO1FBQ3BHLENBQUM7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Fwb2xsbywgZ3FsLCBNdXRhdGlvblJlc3VsdH0gZnJvbSAnYXBvbGxvLWFuZ3VsYXInO1xuaW1wb3J0IHtGZXRjaFJlc3VsdCwgTmV0d29ya1N0YXR1cywgV2F0Y2hRdWVyeUZldGNoUG9saWN5fSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlJztcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBBc3luY1ZhbGlkYXRvckZuLCBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvckZufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0RvY3VtZW50Tm9kZX0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQge2RlZmF1bHRzLCBtZXJnZSwgbWVyZ2VXaXRoLCBvbWl0LCBwaWNrfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBjb21iaW5lTGF0ZXN0LCBFTVBUWSwgZmlyc3QsIGZyb20sIE9ic2VydmFibGUsIG9mLCBPcGVyYXRvckZ1bmN0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFrZVdoaWxlLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlciwgUXVlcnlWYXJpYWJsZXN9IGZyb20gJy4uL2NsYXNzZXMvcXVlcnktdmFyaWFibGUtbWFuYWdlcic7XG5pbXBvcnQge0xpdGVyYWx9IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcbmltcG9ydCB7bWFrZVBsdXJhbCwgbWVyZ2VPdmVycmlkZUFycmF5LCByZWxhdGlvbnNUb0lkcywgdXBwZXJDYXNlRmlyc3RMZXR0ZXJ9IGZyb20gJy4uL2NsYXNzZXMvdXRpbGl0eSc7XG5pbXBvcnQge1BhZ2luYXRlZERhdGF9IGZyb20gJy4uL2NsYXNzZXMvZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHtOYXR1cmFsRGVib3VuY2VTZXJ2aWNlfSBmcm9tICcuL2RlYm91bmNlLnNlcnZpY2UnO1xuXG5leHBvcnQgdHlwZSBGb3JtVmFsaWRhdG9ycyA9IFJlY29yZDxzdHJpbmcsIFZhbGlkYXRvckZuW10+O1xuXG5leHBvcnQgdHlwZSBGb3JtQXN5bmNWYWxpZGF0b3JzID0gUmVjb3JkPHN0cmluZywgQXN5bmNWYWxpZGF0b3JGbltdPjtcblxuZXhwb3J0IHR5cGUgVmFyaWFibGVzV2l0aElucHV0ID0ge1xuICAgIGlucHV0OiBMaXRlcmFsO1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybUNvbnRyb2xzID0gUmVjb3JkPHN0cmluZywgQWJzdHJhY3RDb250cm9sPjtcblxudHlwZSBSZXNvbHZlPFRPbmU+ID0ge1xuICAgIG1vZGVsOiBUT25lO1xufTtcblxuZXhwb3J0IHR5cGUgV2l0aElkPFQ+ID0ge2lkOiBzdHJpbmd9ICYgVDtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5hdHVyYWxBYnN0cmFjdE1vZGVsU2VydmljZTxcbiAgICBUb25lLFxuICAgIFZvbmUgZXh0ZW5kcyB7aWQ6IHN0cmluZ30sXG4gICAgVGFsbCBleHRlbmRzIFBhZ2luYXRlZERhdGE8TGl0ZXJhbD4sXG4gICAgVmFsbCBleHRlbmRzIFF1ZXJ5VmFyaWFibGVzLFxuICAgIFRjcmVhdGUsXG4gICAgVmNyZWF0ZSBleHRlbmRzIFZhcmlhYmxlc1dpdGhJbnB1dCxcbiAgICBUdXBkYXRlLFxuICAgIFZ1cGRhdGUgZXh0ZW5kcyB7aWQ6IHN0cmluZzsgaW5wdXQ6IExpdGVyYWx9LFxuICAgIFRkZWxldGUsXG4gICAgVmRlbGV0ZSBleHRlbmRzIHtpZHM6IHN0cmluZ1tdfSxcbj4ge1xuICAgIC8qKlxuICAgICAqIFN0b3JlIHRoZSBjcmVhdGlvbiBtdXRhdGlvbnMgdGhhdCBhcmUgcGVuZGluZ1xuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY3JlYXRpbmdDYWNoZSA9IG5ldyBNYXA8VmNyZWF0ZVsnaW5wdXQnXSB8IFdpdGhJZDxWdXBkYXRlWydpbnB1dCddPiwgT2JzZXJ2YWJsZTxUY3JlYXRlPj4oKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFwb2xsbzogQXBvbGxvLFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbmF0dXJhbERlYm91bmNlU2VydmljZTogTmF0dXJhbERlYm91bmNlU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IG5hbWU6IHN0cmluZyxcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IG9uZVF1ZXJ5OiBEb2N1bWVudE5vZGUgfCBudWxsLFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWxsUXVlcnk6IERvY3VtZW50Tm9kZSB8IG51bGwsXG4gICAgICAgIHByb3RlY3RlZCByZWFkb25seSBjcmVhdGVNdXRhdGlvbjogRG9jdW1lbnROb2RlIHwgbnVsbCxcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IHVwZGF0ZU11dGF0aW9uOiBEb2N1bWVudE5vZGUgfCBudWxsLFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVsZXRlTXV0YXRpb246IERvY3VtZW50Tm9kZSB8IG51bGwsXG4gICAgKSB7fVxuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBpbmRpdmlkdWFsIGZpZWxkcyB2YWxpZGF0b3JzXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHB1YmxpYyBnZXRGb3JtVmFsaWRhdG9ycyhtb2RlbD86IExpdGVyYWwpOiBGb3JtVmFsaWRhdG9ycyB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGluZGl2aWR1YWwgYXN5bmMgZmllbGRzIHZhbGlkYXRvcnNcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHVibGljIGdldEZvcm1Bc3luY1ZhbGlkYXRvcnMobW9kZWw/OiBMaXRlcmFsKTogRm9ybUFzeW5jVmFsaWRhdG9ycyB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGdyb3VwZWQgZmllbGRzIHZhbGlkYXRvcnMgKGxpa2UgcGFzc3dvcmQgKyBjb25maXJtIHBhc3N3b3JkKVxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwdWJsaWMgZ2V0Rm9ybUdyb3VwVmFsaWRhdG9ycyhtb2RlbD86IExpdGVyYWwpOiBWYWxpZGF0b3JGbltdIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgYXN5bmMgZ3JvdXAgZmllbGRzIHZhbGlkYXRvcnMgKGxpa2UgdW5pcXVlIGNvbnN0cmFpbnQgb24gbXVsdGlwbGUgY29sdW1ucylcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHVibGljIGdldEZvcm1Hcm91cEFzeW5jVmFsaWRhdG9ycyhtb2RlbD86IExpdGVyYWwpOiBBc3luY1ZhbGlkYXRvckZuW10ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZvcm1Db25maWcobW9kZWw6IExpdGVyYWwpOiBGb3JtQ29udHJvbHMge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSB7Li4udGhpcy5nZXREZWZhdWx0Rm9yU2VydmVyKCksIC4uLnRoaXMuZ2V0Rm9ybUV4dHJhRmllbGREZWZhdWx0VmFsdWVzKCl9O1xuICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gdGhpcy5nZXRGb3JtVmFsaWRhdG9ycyhtb2RlbCk7XG4gICAgICAgIGNvbnN0IGFzeW5jVmFsaWRhdG9ycyA9IHRoaXMuZ2V0Rm9ybUFzeW5jVmFsaWRhdG9ycyhtb2RlbCk7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xzOiBGb3JtQ29udHJvbHMgPSB7fTtcbiAgICAgICAgY29uc3QgZGlzYWJsZWQgPSBtb2RlbC5wZXJtaXNzaW9ucyA/ICFtb2RlbC5wZXJtaXNzaW9ucy51cGRhdGUgOiBmYWxzZTtcblxuICAgICAgICBpZiAobW9kZWwuaWQpIHtcbiAgICAgICAgICAgIGNvbnRyb2xzLmlkID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCh7dmFsdWU6IG1vZGVsLmlkLCBkaXNhYmxlZDogdHJ1ZX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29uZmlndXJlIGZvcm0gZm9yIGVhY2ggZmllbGQgb2YgbW9kZWxcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModmFsdWVzKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtb2RlbFtrZXldICE9PSB1bmRlZmluZWQgPyBtb2RlbFtrZXldIDogdmFsdWVzW2tleV07XG4gICAgICAgICAgICBjb25zdCBmb3JtU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSB0eXBlb2YgdmFsaWRhdG9yc1trZXldICE9PSAndW5kZWZpbmVkJyA/IHZhbGlkYXRvcnNba2V5XSA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCBhc3luY1ZhbGlkYXRvciA9IHR5cGVvZiBhc3luY1ZhbGlkYXRvcnNba2V5XSAhPT0gJ3VuZGVmaW5lZCcgPyBhc3luY1ZhbGlkYXRvcnNba2V5XSA6IG51bGw7XG5cbiAgICAgICAgICAgIGNvbnRyb2xzW2tleV0gPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKGZvcm1TdGF0ZSwgdmFsaWRhdG9yLCBhc3luY1ZhbGlkYXRvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb25maWd1cmUgZm9ybSBmb3IgZXh0cmEgdmFsaWRhdG9ycyB0aGF0IGFyZSBub3Qgb24gYSBzcGVjaWZpYyBmaWVsZFxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh2YWxpZGF0b3JzKSkge1xuICAgICAgICAgICAgaWYgKCFjb250cm9sc1trZXldKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybVN0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbW9kZWxba2V5XSA/IG1vZGVsW2tleV0gOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGNvbnRyb2xzW2tleV0gPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKGZvcm1TdGF0ZSwgdmFsaWRhdG9yc1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGFzeW5jVmFsaWRhdG9ycykpIHtcbiAgICAgICAgICAgIGlmIChjb250cm9sc1trZXldICYmIGFzeW5jVmFsaWRhdG9yc1trZXldKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbHNba2V5XS5zZXRBc3luY1ZhbGlkYXRvcnMoYXN5bmNWYWxpZGF0b3JzW2tleV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtb2RlbFtrZXldID8gbW9kZWxba2V5XSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29udHJvbHNba2V5XSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woZm9ybVN0YXRlLCBudWxsLCBhc3luY1ZhbGlkYXRvcnNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udHJvbHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIHRoZSBmaW5hbCBGb3JtR3JvdXAgZm9yIHRoZSBvYmplY3QsIGluY2x1ZGluZyBhbGwgdmFsaWRhdG9yc1xuICAgICAqXG4gICAgICogVGhpcyBtZXRob2Qgc2hvdWxkICoqbm90KiogYmUgb3ZlcnJpZGRlbiwgYnV0IGluc3RlYWQgYGdldEZvcm1Db25maWdgLFxuICAgICAqIGBnZXRGb3JtR3JvdXBWYWxpZGF0b3JzYCwgYGdldEZvcm1Hcm91cEFzeW5jVmFsaWRhdG9yc2AgbWlnaHQgYmUuXG4gICAgICovXG4gICAgcHVibGljIGdldEZvcm1Hcm91cChtb2RlbDogTGl0ZXJhbCk6IFVudHlwZWRGb3JtR3JvdXAge1xuICAgICAgICBjb25zdCBmb3JtQ29uZmlnID0gdGhpcy5nZXRGb3JtQ29uZmlnKG1vZGVsKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVbnR5cGVkRm9ybUdyb3VwKGZvcm1Db25maWcsIHtcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IHRoaXMuZ2V0Rm9ybUdyb3VwVmFsaWRhdG9ycyhtb2RlbCksXG4gICAgICAgICAgICBhc3luY1ZhbGlkYXRvcnM6IHRoaXMuZ2V0Rm9ybUdyb3VwQXN5bmNWYWxpZGF0b3JzKG1vZGVsKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGEgc2luZ2xlIG9iamVjdFxuICAgICAqXG4gICAgICogSWYgYXZhaWxhYmxlIGl0IHdpbGwgZW1pdCBvYmplY3QgZnJvbSBjYWNoZSBpbW1lZGlhdGVseSwgdGhlbiBpdFxuICAgICAqIHdpbGwgKiphbHdheXMqKiBmZXRjaCBmcm9tIG5ldHdvcmsgYW5kIHRoZW4gdGhlIG9ic2VydmFibGUgd2lsbCBiZSBjb21wbGV0ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0T25lKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFRvbmU+IHtcbiAgICAgICAgdGhpcy50aHJvd0lmT2JzZXJ2YWJsZShpZCk7XG4gICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMub25lUXVlcnkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmdldFZhcmlhYmxlc0Zvck9uZShpZCkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCh2YXJpYWJsZXMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMub25lUXVlcnkpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBvbGxvLndhdGNoUXVlcnk8dW5rbm93biwgVm9uZT4oe1xuICAgICAgICAgICAgICAgICAgICBxdWVyeTogdGhpcy5vbmVRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzOiB2YXJpYWJsZXMsXG4gICAgICAgICAgICAgICAgICAgIGZldGNoUG9saWN5OiAnY2FjaGUtYW5kLW5ldHdvcmsnLFxuICAgICAgICAgICAgICAgICAgICBuZXh0RmV0Y2hQb2xpY3k6ICdjYWNoZS1vbmx5JyxcbiAgICAgICAgICAgICAgICB9KS52YWx1ZUNoYW5nZXM7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGZpbHRlcihyZXN1bHQgPT4gISFyZXN1bHQuZGF0YSksXG4gICAgICAgICAgICB0YWtlV2hpbGUocmVzdWx0ID0+IHJlc3VsdC5uZXR3b3JrU3RhdHVzICE9PSBOZXR3b3JrU3RhdHVzLnJlYWR5LCB0cnVlKSxcbiAgICAgICAgICAgIG1hcChyZXN1bHQgPT4gKHJlc3VsdC5kYXRhIGFzIExpdGVyYWwpW3RoaXMubmFtZV0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhIGNvbGxlY3Rpb24gb2Ygb2JqZWN0c1xuICAgICAqXG4gICAgICogSXQgd2lsbCAqKmFsd2F5cyoqIGZldGNoIGZyb20gbmV0d29yayBhbmQgdGhlbiB0aGUgb2JzZXJ2YWJsZSB3aWxsIGJlIGNvbXBsZXRlZC5cbiAgICAgKiBObyBjYWNoZSBpcyBldmVyIHVzZWQsIHNvIGl0J3Mgc2xvdyBidXQgY29ycmVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0QWxsKHF1ZXJ5VmFyaWFibGVzTWFuYWdlcjogTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjxWYWxsPik6IE9ic2VydmFibGU8VGFsbD4ge1xuICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLmFsbFF1ZXJ5KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRQYXJ0aWFsVmFyaWFibGVzRm9yQWxsKCkucGlwZShcbiAgICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgICBzd2l0Y2hNYXAocGFydGlhbFZhcmlhYmxlcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50aHJvd0lmTm90UXVlcnkodGhpcy5hbGxRdWVyeSk7XG5cbiAgICAgICAgICAgICAgICAvLyBDb3B5IG1hbmFnZXIgdG8gcHJldmVudCB0byBhcHBseSBpbnRlcm5hbCB2YXJpYWJsZXMgdG8gZXh0ZXJuYWwgUXVlcnlWYXJpYWJsZXNNYW5hZ2VyXG4gICAgICAgICAgICAgICAgY29uc3QgbWFuYWdlciA9IG5ldyBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyPFZhbGw+KHF1ZXJ5VmFyaWFibGVzTWFuYWdlcik7XG4gICAgICAgICAgICAgICAgbWFuYWdlci5tZXJnZSgncGFydGlhbC12YXJpYWJsZXMnLCBwYXJ0aWFsVmFyaWFibGVzKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwb2xsby5xdWVyeTx1bmtub3duLCBWYWxsPih7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiB0aGlzLmFsbFF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IG1hbmFnZXIudmFyaWFibGVzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seScsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRoaXMubWFwQWxsKCksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGEgY29sbGVjdGlvbiBvZiBvYmplY3RzXG4gICAgICpcbiAgICAgKiBFdmVyeSB0aW1lIHRoZSBvYnNlcnZhYmxlIHZhcmlhYmxlcyBjaGFuZ2UsIGFuZCB0aGV5IGFyZSBub3QgdW5kZWZpbmVkLFxuICAgICAqIGl0IHdpbGwgcmV0dXJuIHJlc3VsdCBmcm9tIGNhY2hlLCB0aGVuIGl0IHdpbGwgKiphbHdheXMqKiBmZXRjaCBmcm9tIG5ldHdvcmsuXG4gICAgICpcbiAgICAgKiBZb3UgbXVzdCBzdWJzY3JpYmUgdG8gc3RhcnQgZ2V0dGluZyByZXN1bHRzIChhbmQgZmV0Y2ggZnJvbSBuZXR3b3JrKS5cbiAgICAgKlxuICAgICAqIFRoZSBvYnNlcnZhYmxlIHJlc3VsdCB3aWxsIG9ubHkgY29tcGxldGUgd2hlbiB1bnN1YnNjcmliaW5nLiBUaGF0IG1lYW5zIHlvdSAqKm11c3QqKiB1bnN1YnNjcmliZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2F0Y2hBbGwoXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzTWFuYWdlcjogTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjxWYWxsPixcbiAgICAgICAgZmV0Y2hQb2xpY3k6IFdhdGNoUXVlcnlGZXRjaFBvbGljeSA9ICdjYWNoZS1hbmQtbmV0d29yaycsXG4gICAgKTogT2JzZXJ2YWJsZTxUYWxsPiB7XG4gICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMuYWxsUXVlcnkpO1xuXG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KHtcbiAgICAgICAgICAgIHZhcmlhYmxlczogcXVlcnlWYXJpYWJsZXNNYW5hZ2VyLnZhcmlhYmxlcy5waXBlKFxuICAgICAgICAgICAgICAgIC8vIElnbm9yZSB2ZXJ5IGZhc3QgdmFyaWFibGUgY2hhbmdlc1xuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgyMCksXG4gICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdmFyaWFibGVzIHRvIGJlIGRlZmluZWQgdG8gcHJldmVudCBkdXBsaWNhdGUgcXVlcnk6IHdpdGggYW5kIHdpdGhvdXQgdmFyaWFibGVzXG4gICAgICAgICAgICAgICAgLy8gTnVsbCBpcyBhY2NlcHRlZCB2YWx1ZSBmb3IgXCJubyB2YXJpYWJsZXNcIlxuICAgICAgICAgICAgICAgIGZpbHRlcih2YXJpYWJsZXMgPT4gdHlwZW9mIHZhcmlhYmxlcyAhPT0gJ3VuZGVmaW5lZCcpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHBhcnRpYWxWYXJpYWJsZXM6IHRoaXMuZ2V0UGFydGlhbFZhcmlhYmxlc0ZvckFsbCgpLFxuICAgICAgICB9KS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQXBwbHkgcGFydGlhbCB2YXJpYWJsZXMgZnJvbSBzZXJ2aWNlXG4gICAgICAgICAgICAgICAgLy8gQ29weSBtYW5hZ2VyIHRvIHByZXZlbnQgdG8gYXBwbHkgaW50ZXJuYWwgdmFyaWFibGVzIHRvIGV4dGVybmFsIFF1ZXJ5VmFyaWFibGVzTWFuYWdlclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjxWYWxsPihxdWVyeVZhcmlhYmxlc01hbmFnZXIpO1xuICAgICAgICAgICAgICAgIG1hbmFnZXIubWVyZ2UoJ3BhcnRpYWwtdmFyaWFibGVzJywgcmVzdWx0LnBhcnRpYWxWYXJpYWJsZXMpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy50aHJvd0lmTm90UXVlcnkodGhpcy5hbGxRdWVyeSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcG9sbG9cbiAgICAgICAgICAgICAgICAgICAgLndhdGNoUXVlcnk8dW5rbm93biwgVmFsbD4oe1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHRoaXMuYWxsUXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IG1hbmFnZXIudmFyaWFibGVzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hQb2xpY3k6IGZldGNoUG9saWN5LFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IEVNUFRZKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihyID0+ICEhci5kYXRhKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFwQWxsKCksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9ucyBhbGxvdyB0byBxdWlja2x5IGNyZWF0ZSBvciB1cGRhdGUgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIE1hbmFnZXMgYSBcImNyZWF0aW9uIGlzIHBlbmRpbmdcIiBzdGF0dXMsIGFuZCB1cGRhdGUgd2hlbiBjcmVhdGlvbiBpcyByZWFkeS5cbiAgICAgKiBVc2VzIHJlZ3VsYXIgdXBkYXRlL3VwZGF0ZU5vdyBhbmQgY3JlYXRlIG1ldGhvZHMuXG4gICAgICogVXNlZCBtYWlubHkgd2hlbiBlZGl0aW5nIG11bHRpcGxlIG9iamVjdHMgaW4gc2FtZSBjb250cm9sbGVyIChsaWtlIGluIGVkaXRhYmxlIGFycmF5cylcbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlT3JVcGRhdGUoXG4gICAgICAgIG9iamVjdDogVmNyZWF0ZVsnaW5wdXQnXSB8IFdpdGhJZDxWdXBkYXRlWydpbnB1dCddPixcbiAgICAgICAgbm93ID0gZmFsc2UsXG4gICAgKTogT2JzZXJ2YWJsZTxUY3JlYXRlIHwgVHVwZGF0ZT4ge1xuICAgICAgICB0aGlzLnRocm93SWZPYnNlcnZhYmxlKG9iamVjdCk7XG4gICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMuY3JlYXRlTXV0YXRpb24pO1xuICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLnVwZGF0ZU11dGF0aW9uKTtcblxuICAgICAgICAvLyBJZiBjcmVhdGlvbiBpcyBwZW5kaW5nLCBsaXN0ZW4gdG8gY3JlYXRpb24gb2JzZXJ2YWJsZSBhbmQgd2hlbiByZWFkeSwgZmlyZSB1cGRhdGVcbiAgICAgICAgY29uc3QgcGVuZGluZ0NyZWF0aW9uID0gdGhpcy5jcmVhdGluZ0NhY2hlLmdldChvYmplY3QpO1xuICAgICAgICBpZiAocGVuZGluZ0NyZWF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gcGVuZGluZ0NyZWF0aW9uLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKG9iamVjdCBhcyBXaXRoSWQ8VnVwZGF0ZVsnaW5wdXQnXT4pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIG9iamVjdCBoYXMgSWQsIGp1c3Qgc2F2ZSBpdFxuICAgICAgICBpZiAoJ2lkJyBpbiBvYmplY3QgJiYgb2JqZWN0LmlkKSB7XG4gICAgICAgICAgICBpZiAobm93KSB7XG4gICAgICAgICAgICAgICAgLy8gdXNlZCBtYWlubHkgZm9yIHRlc3RzLCBiZWNhdXNlIGxvZGFzaCBkZWJvdW5jZWQgdXNlZCBpbiB1cGRhdGUoKSBkb2VzIG5vdCB3b3JrIGZpbmUgd2l0aCBmYWtlQXN5bmMgYW5kIHRpY2soKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU5vdyhvYmplY3QgYXMgV2l0aElkPFZ1cGRhdGVbJ2lucHV0J10+KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKG9iamVjdCBhcyBXaXRoSWQ8VnVwZGF0ZVsnaW5wdXQnXT4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgb2JqZWN0IHdhcyBub3Qgc2F2aW5nLCBhbmQgaGFzIG5vIElELCBjcmVhdGUgaXRcbiAgICAgICAgY29uc3QgY3JlYXRpb24gPSB0aGlzLmNyZWF0ZShvYmplY3QpLnBpcGUoXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRpbmdDYWNoZS5kZWxldGUob2JqZWN0KTsgLy8gcmVtb3ZlIGZyb20gY2FjaGVcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIHN0b3JlcyBjcmVhdGluZyBvYnNlcnZhYmxlIGluIGEgY2FjaGUgcmVwbGF5YWJsZSB2ZXJzaW9uIG9mIHRoZSBvYnNlcnZhYmxlLFxuICAgICAgICAvLyBzbyBzZXZlcmFsIHVwZGF0ZSgpIGNhbiBzdWJzY3JpYmUgdG8gdGhlIHNhbWUgY3JlYXRpb25cbiAgICAgICAgdGhpcy5jcmVhdGluZ0NhY2hlLnNldChvYmplY3QsIGNyZWF0aW9uLnBpcGUoc2hhcmVSZXBsYXkoKSkpO1xuXG4gICAgICAgIHJldHVybiBjcmVhdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gb2JqZWN0IGluIERCIGFuZCB0aGVuIHJlZmV0Y2ggdGhlIGxpc3Qgb2Ygb2JqZWN0c1xuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGUob2JqZWN0OiBWY3JlYXRlWydpbnB1dCddKTogT2JzZXJ2YWJsZTxUY3JlYXRlPiB7XG4gICAgICAgIHRoaXMudGhyb3dJZk9ic2VydmFibGUob2JqZWN0KTtcbiAgICAgICAgdGhpcy50aHJvd0lmTm90UXVlcnkodGhpcy5jcmVhdGVNdXRhdGlvbik7XG5cbiAgICAgICAgY29uc3QgdmFyaWFibGVzID0gbWVyZ2UoXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHtpbnB1dDogdGhpcy5nZXRJbnB1dChvYmplY3QpfSxcbiAgICAgICAgICAgIHRoaXMuZ2V0UGFydGlhbFZhcmlhYmxlc0ZvckNyZWF0aW9uKG9iamVjdCksXG4gICAgICAgICkgYXMgVmNyZWF0ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcG9sbG9cbiAgICAgICAgICAgIC5tdXRhdGU8VGNyZWF0ZSwgVmNyZWF0ZT4oe1xuICAgICAgICAgICAgICAgIG11dGF0aW9uOiB0aGlzLmNyZWF0ZU11dGF0aW9uLFxuICAgICAgICAgICAgICAgIHZhcmlhYmxlczogdmFyaWFibGVzLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwb2xsby5jbGllbnQucmVGZXRjaE9ic2VydmFibGVRdWVyaWVzKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld09iamVjdCA9IHRoaXMubWFwQ3JlYXRpb24ocmVzdWx0KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3T2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVyZ2VXaXRoKG9iamVjdCwgbmV3T2JqZWN0LCBtZXJnZU92ZXJyaWRlQXJyYXkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld09iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgYW4gb2JqZWN0LCBhZnRlciBhIHNob3J0IGRlYm91bmNlXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZShvYmplY3Q6IFdpdGhJZDxWdXBkYXRlWydpbnB1dCddPik6IE9ic2VydmFibGU8VHVwZGF0ZT4ge1xuICAgICAgICB0aGlzLnRocm93SWZPYnNlcnZhYmxlKG9iamVjdCk7XG4gICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMudXBkYXRlTXV0YXRpb24pO1xuXG4gICAgICAgIC8vIEtlZXAgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgdGhlIGRlYm91bmNlZCB1cGRhdGUgZnVuY3Rpb25cbiAgICAgICAgY29uc3QgaWQgPSBvYmplY3QuaWQ7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubmF0dXJhbERlYm91bmNlU2VydmljZS5kZWJvdW5jZSh0aGlzLCBpZCwgdGhpcy51cGRhdGVOb3cob2JqZWN0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIGFuIG9iamVjdCBpbW1lZGlhdGVseSB3aGVuIHN1YnNjcmliaW5nXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZU5vdyhvYmplY3Q6IFdpdGhJZDxWdXBkYXRlWydpbnB1dCddPik6IE9ic2VydmFibGU8VHVwZGF0ZT4ge1xuICAgICAgICB0aGlzLnRocm93SWZPYnNlcnZhYmxlKG9iamVjdCk7XG4gICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMudXBkYXRlTXV0YXRpb24pO1xuXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IG1lcmdlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiBvYmplY3QuaWQsXG4gICAgICAgICAgICAgICAgaW5wdXQ6IHRoaXMuZ2V0SW5wdXQob2JqZWN0KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLmdldFBhcnRpYWxWYXJpYWJsZXNGb3JVcGRhdGUob2JqZWN0KSxcbiAgICAgICAgKSBhcyBWdXBkYXRlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwb2xsb1xuICAgICAgICAgICAgLm11dGF0ZTxUdXBkYXRlLCBWdXBkYXRlPih7XG4gICAgICAgICAgICAgICAgbXV0YXRpb246IHRoaXMudXBkYXRlTXV0YXRpb24sXG4gICAgICAgICAgICAgICAgdmFyaWFibGVzOiB2YXJpYWJsZXMsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBvbGxvLmNsaWVudC5yZUZldGNoT2JzZXJ2YWJsZVF1ZXJpZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkUmVzdWx0ID0gdGhpcy5tYXBVcGRhdGUocmVzdWx0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVyZ2VXaXRoKG9iamVjdCwgbWFwcGVkUmVzdWx0LCBtZXJnZU92ZXJyaWRlQXJyYXkpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgYW4gb2JqZWN0IGJ1dCB3aXRob3V0IGF1dG9tYXRpY2FsbHkgaW5qZWN0aW5nIHZhbHVlcyBjb21pbmdcbiAgICAgKiBmcm9tIGBnZXREZWZhdWx0Rm9yU2VydmVyKClgLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGVQYXJ0aWFsbHkob2JqZWN0OiBXaXRoSWQ8VnVwZGF0ZVsnaW5wdXQnXT4pOiBPYnNlcnZhYmxlPFR1cGRhdGU+IHtcbiAgICAgICAgdGhpcy50aHJvd0lmT2JzZXJ2YWJsZShvYmplY3QpO1xuICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLnVwZGF0ZU11dGF0aW9uKTtcblxuICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSB7XG4gICAgICAgICAgICBpZDogb2JqZWN0LmlkLFxuICAgICAgICAgICAgaW5wdXQ6IG9taXQocmVsYXRpb25zVG9JZHMob2JqZWN0KSwgJ2lkJyksXG4gICAgICAgIH0gYXMgVnVwZGF0ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcG9sbG9cbiAgICAgICAgICAgIC5tdXRhdGU8VHVwZGF0ZSwgVnVwZGF0ZT4oe1xuICAgICAgICAgICAgICAgIG11dGF0aW9uOiB0aGlzLnVwZGF0ZU11dGF0aW9uLFxuICAgICAgICAgICAgICAgIHZhcmlhYmxlczogdmFyaWFibGVzLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwb2xsby5jbGllbnQucmVGZXRjaE9ic2VydmFibGVRdWVyaWVzKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1hcFVwZGF0ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWxldGUgb2JqZWN0cyBhbmQgdGhlbiByZWZldGNoIHRoZSBsaXN0IG9mIG9iamVjdHNcbiAgICAgKi9cbiAgICBwdWJsaWMgZGVsZXRlKG9iamVjdHM6IHtpZDogc3RyaW5nfVtdKTogT2JzZXJ2YWJsZTxUZGVsZXRlPiB7XG4gICAgICAgIHRoaXMudGhyb3dJZk9ic2VydmFibGUob2JqZWN0cyk7XG4gICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMuZGVsZXRlTXV0YXRpb24pO1xuXG4gICAgICAgIGNvbnN0IGlkcyA9IG9iamVjdHMubWFwKG8gPT4ge1xuICAgICAgICAgICAgLy8gQ2FuY2VsIHBlbmRpbmcgdXBkYXRlXG4gICAgICAgICAgICB0aGlzLm5hdHVyYWxEZWJvdW5jZVNlcnZpY2UuY2FuY2VsT25lKHRoaXMsIG8uaWQpO1xuXG4gICAgICAgICAgICByZXR1cm4gby5pZDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IG1lcmdlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkczogaWRzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMuZ2V0UGFydGlhbFZhcmlhYmxlc0ZvckRlbGV0ZShvYmplY3RzKSxcbiAgICAgICAgKSBhcyBWZGVsZXRlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwb2xsb1xuICAgICAgICAgICAgLm11dGF0ZTxUZGVsZXRlLCBWZGVsZXRlPih7XG4gICAgICAgICAgICAgICAgbXV0YXRpb246IHRoaXMuZGVsZXRlTXV0YXRpb24sXG4gICAgICAgICAgICAgICAgdmFyaWFibGVzOiB2YXJpYWJsZXMsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgLy8gRGVsYXkgdGhlIG9ic2VydmFibGUgdW50aWwgQXBvbGxvIHJlZmV0Y2ggaXMgY29tcGxldGVkXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZFJlc3VsdCA9IHRoaXMubWFwRGVsZXRlKHJlc3VsdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZyb20odGhpcy5hcG9sbG8uY2xpZW50LnJlRmV0Y2hPYnNlcnZhYmxlUXVlcmllcygpKS5waXBlKG1hcCgoKSA9PiBtYXBwZWRSZXN1bHQpKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzb2x2ZSBtb2RlbCBhbmQgaXRlbXMgcmVsYXRlZCB0byB0aGUgbW9kZWwsIGlmIHRoZSBpZCBpcyBwcm92aWRlZCwgaW4gb3JkZXIgdG8gc2hvdyBhIGZvcm1cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVzb2x2ZShpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxSZXNvbHZlPFRvbmUgfCBWY3JlYXRlWydpbnB1dCddPj4ge1xuICAgICAgICAvLyBMb2FkIG1vZGVsIGlmIGlkIGlzIGdpdmVuXG4gICAgICAgIGxldCBvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPFRvbmUgfCBWY3JlYXRlWydpbnB1dCddPjtcbiAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICBvYnNlcnZhYmxlID0gdGhpcy5uYXR1cmFsRGVib3VuY2VTZXJ2aWNlLmZsdXNoT25lKHRoaXMsIGlkKS5waXBlKHN3aXRjaE1hcCgoKSA9PiB0aGlzLmdldE9uZShpZCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9ic2VydmFibGUgPSBvZih0aGlzLmdldERlZmF1bHRGb3JTZXJ2ZXIoKSBhcyBUb25lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlLnBpcGUoXG4gICAgICAgICAgICBtYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge21vZGVsOiByZXN1bHR9O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFuIG9iamVjdCB0aGF0IG1hdGNoIHRoZSBHcmFwaFFMIGlucHV0IHR5cGUuXG4gICAgICogSXQgY3JlYXRlcyBhbiBvYmplY3Qgd2l0aCBtYW51YWxseSBmaWxsZWQgZGF0YSBhbmQgYWRkIHVuY29tcGxldGVkIGRhdGEgKGxpa2UgcmVxdWlyZWQgYXR0cmlidXRlcyB0aGF0IGNhbiBiZSBlbXB0eSBzdHJpbmdzKVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRJbnB1dChvYmplY3Q6IExpdGVyYWwpOiBWY3JlYXRlWydpbnB1dCddIHwgVnVwZGF0ZVsnaW5wdXQnXSB7XG4gICAgICAgIC8vIENvbnZlcnQgcmVsYXRpb25zIHRvIHRoZWlyIElEcyBmb3IgbXV0YXRpb25cbiAgICAgICAgb2JqZWN0ID0gcmVsYXRpb25zVG9JZHMob2JqZWN0KTtcblxuICAgICAgICAvLyBQaWNrIG9ubHkgYXR0cmlidXRlcyB0aGF0IHdlIGNhbiBmaW5kIGluIHRoZSBlbXB0eSBvYmplY3RcbiAgICAgICAgLy8gSW4gb3RoZXIgd29yZHMsIHByZXZlbnQgdG8gc2VsZWN0IGRhdGEgdGhhdCBoYXMgdW53YW50ZWQgYXR0cmlidXRlc1xuICAgICAgICBjb25zdCBlbXB0eU9iamVjdCA9IHRoaXMuZ2V0RGVmYXVsdEZvclNlcnZlcigpO1xuICAgICAgICBsZXQgaW5wdXQgPSBwaWNrKG9iamVjdCwgT2JqZWN0LmtleXMoZW1wdHlPYmplY3QpKTtcblxuICAgICAgICAvLyBDb21wbGV0ZSBhIHBvdGVudGlhbGx5IHVuY29tcGxldGVkIG9iamVjdCB3aXRoIGRlZmF1bHQgdmFsdWVzXG4gICAgICAgIGlucHV0ID0gZGVmYXVsdHMoaW5wdXQsIGVtcHR5T2JqZWN0KTtcblxuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBtYXRjaGluZyB0aGUgcXVlcnkuIEl0IG1heSBuZXZlciBjb21wbGV0ZS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgdXNlZCBmb3IgdGhlIHVuaXF1ZSB2YWxpZGF0b3JcbiAgICAgKi9cbiAgICBwdWJsaWMgY291bnQocXVlcnlWYXJpYWJsZXNNYW5hZ2VyOiBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyPFZhbGw+KTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3QgcGx1cmFsID0gbWFrZVBsdXJhbCh0aGlzLm5hbWUpO1xuICAgICAgICBjb25zdCBxdWVyeU5hbWUgPSAnQ291bnQnICsgdXBwZXJDYXNlRmlyc3RMZXR0ZXIocGx1cmFsKTtcbiAgICAgICAgY29uc3QgZmlsdGVyVHlwZSA9IHVwcGVyQ2FzZUZpcnN0TGV0dGVyKHRoaXMubmFtZSkgKyAnRmlsdGVyJztcblxuICAgICAgICBjb25zdCBxdWVyeSA9IGdxbGBcbiAgICAgICAgICAgIHF1ZXJ5ICR7cXVlcnlOYW1lfSAoJGZpbHRlcjogJHtmaWx0ZXJUeXBlfSkge1xuICAgICAgICAgICAgY291bnQ6ICR7cGx1cmFsfSAoZmlsdGVyOiAkZmlsdGVyLCBwYWdpbmF0aW9uOiB7cGFnZVNpemU6IDAsIHBhZ2VJbmRleDogMH0pIHtcbiAgICAgICAgICAgIGxlbmd0aFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWA7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFydGlhbFZhcmlhYmxlc0ZvckFsbCgpLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAocGFydGlhbFZhcmlhYmxlcyA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQ29weSBtYW5hZ2VyIHRvIHByZXZlbnQgdG8gYXBwbHkgaW50ZXJuYWwgdmFyaWFibGVzIHRvIGV4dGVybmFsIFF1ZXJ5VmFyaWFibGVzTWFuYWdlclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjxWYWxsPihxdWVyeVZhcmlhYmxlc01hbmFnZXIpO1xuICAgICAgICAgICAgICAgIG1hbmFnZXIubWVyZ2UoJ3BhcnRpYWwtdmFyaWFibGVzJywgcGFydGlhbFZhcmlhYmxlcyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcG9sbG8ucXVlcnk8e2NvdW50OiB7bGVuZ3RoOiBudW1iZXJ9fSwgVmFsbD4oe1xuICAgICAgICAgICAgICAgICAgICBxdWVyeTogcXVlcnksXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlczogbWFuYWdlci52YXJpYWJsZXMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5JyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWFwKHJlc3VsdCA9PiByZXN1bHQuZGF0YS5jb3VudC5sZW5ndGgpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBlbXB0eSBvYmplY3Qgd2l0aCBzb21lIGRlZmF1bHQgdmFsdWVzIGZyb20gc2VydmVyIHBlcnNwZWN0aXZlXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHR5cGljYWxseSB1c2VmdWwgd2hlbiBzaG93aW5nIGEgZm9ybSBmb3IgY3JlYXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RGVmYXVsdEZvclNlcnZlcigpOiBWY3JlYXRlWydpbnB1dCddIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFlvdSBwcm9iYWJseSAqKnNob3VsZCBub3QqKiB1c2UgdGhpcy5cbiAgICAgKlxuICAgICAqIElmIHlvdSBhcmUgdHJ5aW5nIHRvICpjYWxsKiB0aGlzIG1ldGhvZCwgaW5zdGVhZCB5b3UgcHJvYmFibHkgd2FudCB0byBjYWxsIGBnZXREZWZhdWx0Rm9yU2VydmVyKClgIHRvIGdldCBkZWZhdWx0XG4gICAgICogdmFsdWVzIGZvciBhIG1vZGVsLCBvciBgZ2V0Rm9ybUNvbmZpZygpYCB0byBnZXQgYSBjb25maWd1cmVkIGZvcm0gdGhhdCBpbmNsdWRlcyBleHRyYSBmb3JtIGZpZWxkcy5cbiAgICAgKlxuICAgICAqIElmIHlvdSBhcmUgdHJ5aW5nIHRvICpvdmVycmlkZSogdGhpcyBtZXRob2QsIGluc3RlYWQgeW91IHByb2JhYmx5IHdhbnQgdG8gb3ZlcnJpZGUgYGdldERlZmF1bHRGb3JTZXJ2ZXIoKWAuXG4gICAgICpcbiAgICAgKiBUaGUgb25seSBhbmQgKip2ZXJ5IHJhcmUqKiByZWFzb24gdG8gb3ZlcnJpZGUgdGhpcyBtZXRob2QgaXMgaWYgdGhlIGNsaWVudCBuZWVkcyBleHRyYSBmb3JtIGZpZWxkcyB0aGF0IGNhbm5vdCBiZVxuICAgICAqIGFjY2VwdGVkIGJ5IHRoZSBzZXJ2ZXIgKG5vdCBwYXJ0IG9mIGBYWFhJbnB1dGAgdHlwZSkgYW5kIHRoYXQgYXJlIHN0cmljdGx5IGZvciB0aGUgY2xpZW50IGZvcm0gbmVlZHMuIEluIHRoYXQgY2FzZSxcbiAgICAgKiB0aGVuIHlvdSBjYW4gcmV0dXJuIGRlZmF1bHQgdmFsdWVzIGZvciB0aG9zZSBleHRyYSBmb3JtIGZpZWxkcywgYW5kIHRoZSBmb3JtIHJldHVybmVkIGJ5IGBnZXRGb3JtQ29uZmlnKClgIHdpbGxcbiAgICAgKiBpbmNsdWRlIHRob3NlIGV4dHJhIGZpZWxkcy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0Rm9ybUV4dHJhRmllbGREZWZhdWx0VmFsdWVzKCk6IExpdGVyYWwge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB1c2VkIHRvIGV4dHJhY3Qgb25seSB0aGUgYXJyYXkgb2YgZmV0Y2hlZCBvYmplY3RzIG91dCBvZiB0aGUgZW50aXJlIGZldGNoZWQgZGF0YVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBtYXBBbGwoKTogT3BlcmF0b3JGdW5jdGlvbjxGZXRjaFJlc3VsdDx1bmtub3duPiwgVGFsbD4ge1xuICAgICAgICBjb25zdCBwbHVyYWwgPSBtYWtlUGx1cmFsKHRoaXMubmFtZSk7XG4gICAgICAgIHJldHVybiBtYXAocmVzdWx0ID0+IChyZXN1bHQuZGF0YSBhcyBhbnkpW3BsdXJhbF0pOyAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Fwb2xsb2dyYXBocWwvYXBvbGxvLWNsaWVudC9pc3N1ZXMvNTY2MlxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdXNlZCB0byBleHRyYWN0IG9ubHkgdGhlIGNyZWF0ZWQgb2JqZWN0IG91dCBvZiB0aGUgZW50aXJlIGZldGNoZWQgZGF0YVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBtYXBDcmVhdGlvbihyZXN1bHQ6IE11dGF0aW9uUmVzdWx0PHVua25vd24+KTogVGNyZWF0ZSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSAnY3JlYXRlJyArIHVwcGVyQ2FzZUZpcnN0TGV0dGVyKHRoaXMubmFtZSk7XG4gICAgICAgIHJldHVybiAocmVzdWx0LmRhdGEgYXMgYW55KVtuYW1lXTsgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hcG9sbG9ncmFwaHFsL2Fwb2xsby1jbGllbnQvaXNzdWVzLzU2NjJcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHVzZWQgdG8gZXh0cmFjdCBvbmx5IHRoZSB1cGRhdGVkIG9iamVjdCBvdXQgb2YgdGhlIGVudGlyZSBmZXRjaGVkIGRhdGFcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgbWFwVXBkYXRlKHJlc3VsdDogTXV0YXRpb25SZXN1bHQ8dW5rbm93bj4pOiBUdXBkYXRlIHtcbiAgICAgICAgY29uc3QgbmFtZSA9ICd1cGRhdGUnICsgdXBwZXJDYXNlRmlyc3RMZXR0ZXIodGhpcy5uYW1lKTtcbiAgICAgICAgcmV0dXJuIChyZXN1bHQuZGF0YSBhcyBhbnkpW25hbWVdOyAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Fwb2xsb2dyYXBocWwvYXBvbGxvLWNsaWVudC9pc3N1ZXMvNTY2MlxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdXNlZCB0byBleHRyYWN0IG9ubHkgZmxhZyB3aGVuIGRlbGV0aW5nIGFuIG9iamVjdFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBtYXBEZWxldGUocmVzdWx0OiBNdXRhdGlvblJlc3VsdDx1bmtub3duPik6IFRkZWxldGUge1xuICAgICAgICBjb25zdCBuYW1lID0gJ2RlbGV0ZScgKyBtYWtlUGx1cmFsKHVwcGVyQ2FzZUZpcnN0TGV0dGVyKHRoaXMubmFtZSkpO1xuICAgICAgICByZXR1cm4gKHJlc3VsdC5kYXRhIGFzIGFueSlbbmFtZV07IC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBvbGxvZ3JhcGhxbC9hcG9sbG8tY2xpZW50L2lzc3Vlcy81NjYyXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhZGRpdGlvbmFsIHZhcmlhYmxlcyB0byBiZSB1c2VkIHdoZW4gZ2V0dGluZyBhIHNpbmdsZSBvYmplY3RcbiAgICAgKlxuICAgICAqIFRoaXMgaXMgdHlwaWNhbGx5IGEgc2l0ZSBvciBzdGF0ZSBJRCwgYW5kIGlzIG5lZWRlZCB0byBnZXQgYXBwcm9wcmlhdGUgYWNjZXNzIHJpZ2h0c1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRQYXJ0aWFsVmFyaWFibGVzRm9yT25lKCk6IE9ic2VydmFibGU8UGFydGlhbDxWb25lPj4ge1xuICAgICAgICByZXR1cm4gb2Yoe30pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYWRkaXRpb25hbCB2YXJpYWJsZXMgdG8gYmUgdXNlZCB3aGVuIGdldHRpbmcgbXVsdGlwbGUgb2JqZWN0c1xuICAgICAqXG4gICAgICogVGhpcyBpcyB0eXBpY2FsbHkgYSBzaXRlIG9yIHN0YXRlIElELCBidXQgaXQgY291bGQgYmUgc29tZXRoaW5nIGVsc2UgdG8gZnVydGhlciBmaWx0ZXIgdGhlIHF1ZXJ5XG4gICAgICovXG4gICAgcHVibGljIGdldFBhcnRpYWxWYXJpYWJsZXNGb3JBbGwoKTogT2JzZXJ2YWJsZTxQYXJ0aWFsPFZhbGw+PiB7XG4gICAgICAgIHJldHVybiBvZih7fSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhZGRpdGlvbmFsIHZhcmlhYmxlcyB0byBiZSB1c2VkIHdoZW4gY3JlYXRpbmcgYW4gb2JqZWN0XG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHR5cGljYWxseSBhIHNpdGUgb3Igc3RhdGUgSURcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHJvdGVjdGVkIGdldFBhcnRpYWxWYXJpYWJsZXNGb3JDcmVhdGlvbihvYmplY3Q6IExpdGVyYWwpOiBQYXJ0aWFsPFZjcmVhdGU+IHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYWRkaXRpb25hbCB2YXJpYWJsZXMgdG8gYmUgdXNlZCB3aGVuIHVwZGF0aW5nIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogVGhpcyBpcyB0eXBpY2FsbHkgYSBzaXRlIG9yIHN0YXRlIElEXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHByb3RlY3RlZCBnZXRQYXJ0aWFsVmFyaWFibGVzRm9yVXBkYXRlKG9iamVjdDogTGl0ZXJhbCk6IFBhcnRpYWw8VnVwZGF0ZT4ge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGFkZGl0aW9uYWwgdmFyaWFibGVzIHRvIGJlIHVzZWQgd2hlbiBkZWxldGluZyBhbiBvYmplY3RcbiAgICAgKlxuICAgICAqIFRoaXMgaXMgdHlwaWNhbGx5IGEgc2l0ZSBvciBzdGF0ZSBJRFxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwcm90ZWN0ZWQgZ2V0UGFydGlhbFZhcmlhYmxlc0ZvckRlbGV0ZShvYmplY3RzOiBMaXRlcmFsW10pOiBQYXJ0aWFsPFZkZWxldGU+IHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRocm93IGV4Y2VwdGlvbiB0byBwcmV2ZW50IGV4ZWN1dGluZyBxdWVyaWVzIHdpdGggaW52YWxpZCB2YXJpYWJsZXNcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgdGhyb3dJZk9ic2VydmFibGUodmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdDYW5ub3QgdXNlIE9ic2VydmFibGUgYXMgdmFyaWFibGVzLiBJbnN0ZWFkIHlvdSBzaG91bGQgdXNlIC5zdWJzY3JpYmUoKSB0byBjYWxsIHRoZSBtZXRob2Qgd2l0aCBhIHJlYWwgdmFsdWUnLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1lcmdlIGdpdmVuIElEIHdpdGggYWRkaXRpb25hbCBwYXJ0aWFsIHZhcmlhYmxlcyBpZiB0aGVyZSBpcyBhbnlcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFZhcmlhYmxlc0Zvck9uZShpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxWb25lPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFBhcnRpYWxWYXJpYWJsZXNGb3JPbmUoKS5waXBlKFxuICAgICAgICAgICAgbWFwKHBhcnRpYWxWYXJpYWJsZXMgPT4gbWVyZ2Uoe30sIHtpZDogaWR9IGFzIFZvbmUsIHBhcnRpYWxWYXJpYWJsZXMpKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaHJvdyBleGNlcHRpb24gdG8gcHJldmVudCBleGVjdXRpbmcgbnVsbCBxdWVyaWVzXG4gICAgICovXG4gICAgcHJpdmF0ZSB0aHJvd0lmTm90UXVlcnkocXVlcnk6IERvY3VtZW50Tm9kZSB8IG51bGwpOiBhc3NlcnRzIHF1ZXJ5IHtcbiAgICAgICAgaWYgKCFxdWVyeSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdHcmFwaFFMIHF1ZXJ5IGZvciB0aGlzIG1ldGhvZCB3YXMgbm90IGNvbmZpZ3VyZWQgaW4gdGhpcyBzZXJ2aWNlIGNvbnN0cnVjdG9yJyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
498
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbW9kZWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9zZXJ2aWNlcy9hYnN0cmFjdC1tb2RlbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBUyxHQUFHLEVBQWlCLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFjLGFBQWEsRUFBd0IsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RixPQUFPLEVBQW9DLGtCQUFrQixFQUFFLGdCQUFnQixFQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEgsT0FBTyxFQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDakUsT0FBTyxFQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBbUIsTUFBTSxNQUFNLENBQUM7QUFDckcsT0FBTyxFQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pHLE9BQU8sRUFBQyw0QkFBNEIsRUFBaUIsTUFBTSxtQ0FBbUMsQ0FBQztBQUUvRixPQUFPLEVBQUMsVUFBVSxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBb0J4RyxNQUFNLE9BQWdCLDJCQUEyQjtJQWlCN0MsWUFDdUIsTUFBYyxFQUNkLHNCQUE4QyxFQUM5QyxJQUFZLEVBQ1osUUFBNkIsRUFDN0IsUUFBNkIsRUFDN0IsY0FBbUMsRUFDbkMsY0FBbUMsRUFDbkMsY0FBbUM7UUFQbkMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLDJCQUFzQixHQUF0Qixz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SUFFRDs7OztPQUlHO0lBQ0gsNkRBQTZEO0lBQ25ELDRCQUE0QixDQUFDLE9BQWtCO1FBQ3JELE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ08saUJBQWlCLENBQUMsS0FBYztRQUN0QyxJQUFJLEtBQUssWUFBWSxVQUFVLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksS0FBSyxDQUNYLDhHQUE4RyxDQUNqSCxDQUFDO1FBQ04sQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLGtCQUFrQixDQUFDLEVBQVU7UUFDakMsT0FBTyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxJQUFJLENBQ3hDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFDLEVBQUUsRUFBRSxFQUFFLEVBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQ3pFLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSyxlQUFlLENBQUMsS0FBMEI7UUFDOUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQyw4RUFBOEUsQ0FBQyxDQUFDO1FBQ3BHLENBQUM7SUFDTCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Fwb2xsbywgZ3FsLCBNdXRhdGlvblJlc3VsdH0gZnJvbSAnYXBvbGxvLWFuZ3VsYXInO1xuaW1wb3J0IHtGZXRjaFJlc3VsdCwgTmV0d29ya1N0YXR1cywgV2F0Y2hRdWVyeUZldGNoUG9saWN5fSBmcm9tICdAYXBvbGxvL2NsaWVudC9jb3JlJztcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBBc3luY1ZhbGlkYXRvckZuLCBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvckZufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0RvY3VtZW50Tm9kZX0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQge2RlZmF1bHRzLCBtZXJnZSwgbWVyZ2VXaXRoLCBvbWl0LCBwaWNrfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBjb21iaW5lTGF0ZXN0LCBFTVBUWSwgZmlyc3QsIGZyb20sIE9ic2VydmFibGUsIG9mLCBPcGVyYXRvckZ1bmN0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFrZVdoaWxlLCB0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlciwgUXVlcnlWYXJpYWJsZXN9IGZyb20gJy4uL2NsYXNzZXMvcXVlcnktdmFyaWFibGUtbWFuYWdlcic7XG5pbXBvcnQge0xpdGVyYWx9IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcbmltcG9ydCB7bWFrZVBsdXJhbCwgbWVyZ2VPdmVycmlkZUFycmF5LCByZWxhdGlvbnNUb0lkcywgdXBwZXJDYXNlRmlyc3RMZXR0ZXJ9IGZyb20gJy4uL2NsYXNzZXMvdXRpbGl0eSc7XG5pbXBvcnQge1BhZ2luYXRlZERhdGF9IGZyb20gJy4uL2NsYXNzZXMvZGF0YS1zb3VyY2UnO1xuaW1wb3J0IHtOYXR1cmFsRGVib3VuY2VTZXJ2aWNlfSBmcm9tICcuL2RlYm91bmNlLnNlcnZpY2UnO1xuXG5leHBvcnQgdHlwZSBGb3JtVmFsaWRhdG9ycyA9IFJlY29yZDxzdHJpbmcsIFZhbGlkYXRvckZuW10+O1xuXG5leHBvcnQgdHlwZSBGb3JtQXN5bmNWYWxpZGF0b3JzID0gUmVjb3JkPHN0cmluZywgQXN5bmNWYWxpZGF0b3JGbltdPjtcblxuZXhwb3J0IHR5cGUgVmFyaWFibGVzV2l0aElucHV0ID0ge1xuICAgIGlucHV0OiBMaXRlcmFsO1xufTtcblxuZXhwb3J0IHR5cGUgRm9ybUNvbnRyb2xzID0gUmVjb3JkPHN0cmluZywgQWJzdHJhY3RDb250cm9sPjtcblxudHlwZSBSZXNvbHZlPFRPbmU+ID0ge1xuICAgIG1vZGVsOiBUT25lO1xufTtcblxuZXhwb3J0IHR5cGUgV2l0aElkPFQ+ID0ge2lkOiBzdHJpbmd9ICYgVDtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5hdHVyYWxBYnN0cmFjdE1vZGVsU2VydmljZTxcbiAgICBUb25lLFxuICAgIFZvbmUgZXh0ZW5kcyB7aWQ6IHN0cmluZ30sXG4gICAgVGFsbCBleHRlbmRzIFBhZ2luYXRlZERhdGE8TGl0ZXJhbD4sXG4gICAgVmFsbCBleHRlbmRzIFF1ZXJ5VmFyaWFibGVzLFxuICAgIFRjcmVhdGUsXG4gICAgVmNyZWF0ZSBleHRlbmRzIFZhcmlhYmxlc1dpdGhJbnB1dCxcbiAgICBUdXBkYXRlLFxuICAgIFZ1cGRhdGUgZXh0ZW5kcyB7aWQ6IHN0cmluZzsgaW5wdXQ6IExpdGVyYWx9LFxuICAgIFRkZWxldGUsXG4gICAgVmRlbGV0ZSBleHRlbmRzIHtpZHM6IHN0cmluZ1tdfSxcbj4ge1xuICAgIC8qKlxuICAgICAqIFN0b3JlIHRoZSBjcmVhdGlvbiBtdXRhdGlvbnMgdGhhdCBhcmUgcGVuZGluZ1xuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY3JlYXRpbmdDYWNoZSA9IG5ldyBNYXA8VmNyZWF0ZVsnaW5wdXQnXSB8IFdpdGhJZDxWdXBkYXRlWydpbnB1dCddPiwgT2JzZXJ2YWJsZTxUY3JlYXRlPj4oKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFwb2xsbzogQXBvbGxvLFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbmF0dXJhbERlYm91bmNlU2VydmljZTogTmF0dXJhbERlYm91bmNlU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IG5hbWU6IHN0cmluZyxcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IG9uZVF1ZXJ5OiBEb2N1bWVudE5vZGUgfCBudWxsLFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWxsUXVlcnk6IERvY3VtZW50Tm9kZSB8IG51bGwsXG4gICAgICAgIHByb3RlY3RlZCByZWFkb25seSBjcmVhdGVNdXRhdGlvbjogRG9jdW1lbnROb2RlIHwgbnVsbCxcbiAgICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IHVwZGF0ZU11dGF0aW9uOiBEb2N1bWVudE5vZGUgfCBudWxsLFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVsZXRlTXV0YXRpb246IERvY3VtZW50Tm9kZSB8IG51bGwsXG4gICAgKSB7fVxuXG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBpbmRpdmlkdWFsIGZpZWxkcyB2YWxpZGF0b3JzXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHB1YmxpYyBnZXRGb3JtVmFsaWRhdG9ycyhtb2RlbD86IExpdGVyYWwpOiBGb3JtVmFsaWRhdG9ycyB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGluZGl2aWR1YWwgYXN5bmMgZmllbGRzIHZhbGlkYXRvcnNcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHVibGljIGdldEZvcm1Bc3luY1ZhbGlkYXRvcnMobW9kZWw/OiBMaXRlcmFsKTogRm9ybUFzeW5jVmFsaWRhdG9ycyB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGdyb3VwZWQgZmllbGRzIHZhbGlkYXRvcnMgKGxpa2UgcGFzc3dvcmQgKyBjb25maXJtIHBhc3N3b3JkKVxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwdWJsaWMgZ2V0Rm9ybUdyb3VwVmFsaWRhdG9ycyhtb2RlbD86IExpdGVyYWwpOiBWYWxpZGF0b3JGbltdIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgYXN5bmMgZ3JvdXAgZmllbGRzIHZhbGlkYXRvcnMgKGxpa2UgdW5pcXVlIGNvbnN0cmFpbnQgb24gbXVsdGlwbGUgY29sdW1ucylcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHVibGljIGdldEZvcm1Hcm91cEFzeW5jVmFsaWRhdG9ycyhtb2RlbD86IExpdGVyYWwpOiBBc3luY1ZhbGlkYXRvckZuW10ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZvcm1Db25maWcobW9kZWw6IExpdGVyYWwpOiBGb3JtQ29udHJvbHMge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSB7Li4udGhpcy5nZXREZWZhdWx0Rm9yU2VydmVyKCksIC4uLnRoaXMuZ2V0Rm9ybUV4dHJhRmllbGREZWZhdWx0VmFsdWVzKCl9O1xuICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gdGhpcy5nZXRGb3JtVmFsaWRhdG9ycyhtb2RlbCk7XG4gICAgICAgIGNvbnN0IGFzeW5jVmFsaWRhdG9ycyA9IHRoaXMuZ2V0Rm9ybUFzeW5jVmFsaWRhdG9ycyhtb2RlbCk7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xzOiBGb3JtQ29udHJvbHMgPSB7fTtcbiAgICAgICAgY29uc3QgZGlzYWJsZWQgPSBtb2RlbC5wZXJtaXNzaW9ucyA/ICFtb2RlbC5wZXJtaXNzaW9ucy51cGRhdGUgOiBmYWxzZTtcblxuICAgICAgICBpZiAobW9kZWwuaWQpIHtcbiAgICAgICAgICAgIGNvbnRyb2xzLmlkID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCh7dmFsdWU6IG1vZGVsLmlkLCBkaXNhYmxlZDogdHJ1ZX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29uZmlndXJlIGZvcm0gZm9yIGVhY2ggZmllbGQgb2YgbW9kZWxcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModmFsdWVzKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtb2RlbFtrZXldICE9PSB1bmRlZmluZWQgPyBtb2RlbFtrZXldIDogdmFsdWVzW2tleV07XG4gICAgICAgICAgICBjb25zdCBmb3JtU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSB0eXBlb2YgdmFsaWRhdG9yc1trZXldICE9PSAndW5kZWZpbmVkJyA/IHZhbGlkYXRvcnNba2V5XSA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCBhc3luY1ZhbGlkYXRvciA9IHR5cGVvZiBhc3luY1ZhbGlkYXRvcnNba2V5XSAhPT0gJ3VuZGVmaW5lZCcgPyBhc3luY1ZhbGlkYXRvcnNba2V5XSA6IG51bGw7XG5cbiAgICAgICAgICAgIGNvbnRyb2xzW2tleV0gPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKGZvcm1TdGF0ZSwgdmFsaWRhdG9yLCBhc3luY1ZhbGlkYXRvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb25maWd1cmUgZm9ybSBmb3IgZXh0cmEgdmFsaWRhdG9ycyB0aGF0IGFyZSBub3Qgb24gYSBzcGVjaWZpYyBmaWVsZFxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh2YWxpZGF0b3JzKSkge1xuICAgICAgICAgICAgaWYgKCFjb250cm9sc1trZXldKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybVN0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbW9kZWxba2V5XSA/IG1vZGVsW2tleV0gOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGNvbnRyb2xzW2tleV0gPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKGZvcm1TdGF0ZSwgdmFsaWRhdG9yc1trZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGFzeW5jVmFsaWRhdG9ycykpIHtcbiAgICAgICAgICAgIGlmIChjb250cm9sc1trZXldICYmIGFzeW5jVmFsaWRhdG9yc1trZXldKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbHNba2V5XS5zZXRBc3luY1ZhbGlkYXRvcnMoYXN5bmNWYWxpZGF0b3JzW2tleV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBtb2RlbFtrZXldID8gbW9kZWxba2V5XSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29udHJvbHNba2V5XSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woZm9ybVN0YXRlLCBudWxsLCBhc3luY1ZhbGlkYXRvcnNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udHJvbHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIHRoZSBmaW5hbCBGb3JtR3JvdXAgZm9yIHRoZSBvYmplY3QsIGluY2x1ZGluZyBhbGwgdmFsaWRhdG9yc1xuICAgICAqXG4gICAgICogVGhpcyBtZXRob2Qgc2hvdWxkICoqbm90KiogYmUgb3ZlcnJpZGRlbiwgYnV0IGluc3RlYWQgYGdldEZvcm1Db25maWdgLFxuICAgICAqIGBnZXRGb3JtR3JvdXBWYWxpZGF0b3JzYCwgYGdldEZvcm1Hcm91cEFzeW5jVmFsaWRhdG9yc2AgbWlnaHQgYmUuXG4gICAgICovXG4gICAgcHVibGljIGdldEZvcm1Hcm91cChtb2RlbDogTGl0ZXJhbCk6IFVudHlwZWRGb3JtR3JvdXAge1xuICAgICAgICBjb25zdCBmb3JtQ29uZmlnID0gdGhpcy5nZXRGb3JtQ29uZmlnKG1vZGVsKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVbnR5cGVkRm9ybUdyb3VwKGZvcm1Db25maWcsIHtcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IHRoaXMuZ2V0Rm9ybUdyb3VwVmFsaWRhdG9ycyhtb2RlbCksXG4gICAgICAgICAgICBhc3luY1ZhbGlkYXRvcnM6IHRoaXMuZ2V0Rm9ybUdyb3VwQXN5bmNWYWxpZGF0b3JzKG1vZGVsKSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGEgc2luZ2xlIG9iamVjdFxuICAgICAqXG4gICAgICogSWYgYXZhaWxhYmxlIGl0IHdpbGwgZW1pdCBvYmplY3QgZnJvbSBjYWNoZSBpbW1lZGlhdGVseSwgdGhlbiBpdFxuICAgICAqIHdpbGwgKiphbHdheXMqKiBmZXRjaCBmcm9tIG5ldHdvcmsgYW5kIHRoZW4gdGhlIG9ic2VydmFibGUgd2lsbCBiZSBjb21wbGV0ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0T25lKGlkOiBzdHJpbmcsIGZldGNoUG9saWN5OiBXYXRjaFF1ZXJ5RmV0Y2hQb2xpY3kgPSAnY2FjaGUtYW5kLW5ldHdvcmsnKTogT2JzZXJ2YWJsZTxUb25lPiB7XG4gICAgICAgIHRoaXMudGhyb3dJZk9ic2VydmFibGUoaWQpO1xuICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLm9uZVF1ZXJ5KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRWYXJpYWJsZXNGb3JPbmUoaWQpLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAodmFyaWFibGVzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLm9uZVF1ZXJ5KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwb2xsby53YXRjaFF1ZXJ5PHVua25vd24sIFZvbmU+KHtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHRoaXMub25lUXVlcnksXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlczogdmFyaWFibGVzLFxuICAgICAgICAgICAgICAgICAgICBmZXRjaFBvbGljeTogZmV0Y2hQb2xpY3ksXG4gICAgICAgICAgICAgICAgICAgIG5leHRGZXRjaFBvbGljeTogJ2NhY2hlLW9ubHknLFxuICAgICAgICAgICAgICAgIH0pLnZhbHVlQ2hhbmdlcztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZmlsdGVyKHJlc3VsdCA9PiAhIXJlc3VsdC5kYXRhKSxcbiAgICAgICAgICAgIHRha2VXaGlsZShyZXN1bHQgPT4gcmVzdWx0Lm5ldHdvcmtTdGF0dXMgIT09IE5ldHdvcmtTdGF0dXMucmVhZHksIHRydWUpLFxuICAgICAgICAgICAgbWFwKHJlc3VsdCA9PiAocmVzdWx0LmRhdGEgYXMgTGl0ZXJhbClbdGhpcy5uYW1lXSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGEgY29sbGVjdGlvbiBvZiBvYmplY3RzXG4gICAgICpcbiAgICAgKiBJdCB3aWxsICoqYWx3YXlzKiogZmV0Y2ggZnJvbSBuZXR3b3JrIGFuZCB0aGVuIHRoZSBvYnNlcnZhYmxlIHdpbGwgYmUgY29tcGxldGVkLlxuICAgICAqIE5vIGNhY2hlIGlzIGV2ZXIgdXNlZCwgc28gaXQncyBzbG93IGJ1dCBjb3JyZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRBbGwocXVlcnlWYXJpYWJsZXNNYW5hZ2VyOiBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyPFZhbGw+KTogT2JzZXJ2YWJsZTxUYWxsPiB7XG4gICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMuYWxsUXVlcnkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmdldFBhcnRpYWxWYXJpYWJsZXNGb3JBbGwoKS5waXBlKFxuICAgICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcChwYXJ0aWFsVmFyaWFibGVzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLmFsbFF1ZXJ5KTtcblxuICAgICAgICAgICAgICAgIC8vIENvcHkgbWFuYWdlciB0byBwcmV2ZW50IHRvIGFwcGx5IGludGVybmFsIHZhcmlhYmxlcyB0byBleHRlcm5hbCBRdWVyeVZhcmlhYmxlc01hbmFnZXJcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5hZ2VyID0gbmV3IE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXI8VmFsbD4ocXVlcnlWYXJpYWJsZXNNYW5hZ2VyKTtcbiAgICAgICAgICAgICAgICBtYW5hZ2VyLm1lcmdlKCdwYXJ0aWFsLXZhcmlhYmxlcycsIHBhcnRpYWxWYXJpYWJsZXMpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBvbGxvLnF1ZXJ5PHVua25vd24sIFZhbGw+KHtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHRoaXMuYWxsUXVlcnksXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlczogbWFuYWdlci52YXJpYWJsZXMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGZldGNoUG9saWN5OiAnbmV0d29yay1vbmx5JyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGhpcy5tYXBBbGwoKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYSBjb2xsZWN0aW9uIG9mIG9iamVjdHNcbiAgICAgKlxuICAgICAqIEV2ZXJ5IHRpbWUgdGhlIG9ic2VydmFibGUgdmFyaWFibGVzIGNoYW5nZSwgYW5kIHRoZXkgYXJlIG5vdCB1bmRlZmluZWQsXG4gICAgICogaXQgd2lsbCByZXR1cm4gcmVzdWx0IGZyb20gY2FjaGUsIHRoZW4gaXQgd2lsbCAqKmFsd2F5cyoqIGZldGNoIGZyb20gbmV0d29yay5cbiAgICAgKlxuICAgICAqIFlvdSBtdXN0IHN1YnNjcmliZSB0byBzdGFydCBnZXR0aW5nIHJlc3VsdHMgKGFuZCBmZXRjaCBmcm9tIG5ldHdvcmspLlxuICAgICAqXG4gICAgICogVGhlIG9ic2VydmFibGUgcmVzdWx0IHdpbGwgb25seSBjb21wbGV0ZSB3aGVuIHVuc3Vic2NyaWJpbmcuIFRoYXQgbWVhbnMgeW91ICoqbXVzdCoqIHVuc3Vic2NyaWJlLlxuICAgICAqL1xuICAgIHB1YmxpYyB3YXRjaEFsbChcbiAgICAgICAgcXVlcnlWYXJpYWJsZXNNYW5hZ2VyOiBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyPFZhbGw+LFxuICAgICAgICBmZXRjaFBvbGljeTogV2F0Y2hRdWVyeUZldGNoUG9saWN5ID0gJ2NhY2hlLWFuZC1uZXR3b3JrJyxcbiAgICApOiBPYnNlcnZhYmxlPFRhbGw+IHtcbiAgICAgICAgdGhpcy50aHJvd0lmTm90UXVlcnkodGhpcy5hbGxRdWVyeSk7XG5cbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3Qoe1xuICAgICAgICAgICAgdmFyaWFibGVzOiBxdWVyeVZhcmlhYmxlc01hbmFnZXIudmFyaWFibGVzLnBpcGUoXG4gICAgICAgICAgICAgICAgLy8gSWdub3JlIHZlcnkgZmFzdCB2YXJpYWJsZSBjaGFuZ2VzXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDIwKSxcbiAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB2YXJpYWJsZXMgdG8gYmUgZGVmaW5lZCB0byBwcmV2ZW50IGR1cGxpY2F0ZSBxdWVyeTogd2l0aCBhbmQgd2l0aG91dCB2YXJpYWJsZXNcbiAgICAgICAgICAgICAgICAvLyBOdWxsIGlzIGFjY2VwdGVkIHZhbHVlIGZvciBcIm5vIHZhcmlhYmxlc1wiXG4gICAgICAgICAgICAgICAgZmlsdGVyKHZhcmlhYmxlcyA9PiB0eXBlb2YgdmFyaWFibGVzICE9PSAndW5kZWZpbmVkJyksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgcGFydGlhbFZhcmlhYmxlczogdGhpcy5nZXRQYXJ0aWFsVmFyaWFibGVzRm9yQWxsKCksXG4gICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAvLyBBcHBseSBwYXJ0aWFsIHZhcmlhYmxlcyBmcm9tIHNlcnZpY2VcbiAgICAgICAgICAgICAgICAvLyBDb3B5IG1hbmFnZXIgdG8gcHJldmVudCB0byBhcHBseSBpbnRlcm5hbCB2YXJpYWJsZXMgdG8gZXh0ZXJuYWwgUXVlcnlWYXJpYWJsZXNNYW5hZ2VyXG4gICAgICAgICAgICAgICAgY29uc3QgbWFuYWdlciA9IG5ldyBOYXR1cmFsUXVlcnlWYXJpYWJsZXNNYW5hZ2VyPFZhbGw+KHF1ZXJ5VmFyaWFibGVzTWFuYWdlcik7XG4gICAgICAgICAgICAgICAgbWFuYWdlci5tZXJnZSgncGFydGlhbC12YXJpYWJsZXMnLCByZXN1bHQucGFydGlhbFZhcmlhYmxlcyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLmFsbFF1ZXJ5KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwb2xsb1xuICAgICAgICAgICAgICAgICAgICAud2F0Y2hRdWVyeTx1bmtub3duLCBWYWxsPih7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeTogdGhpcy5hbGxRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlczogbWFuYWdlci52YXJpYWJsZXMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmZXRjaFBvbGljeTogZmV0Y2hQb2xpY3ksXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gRU1QVFkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHIgPT4gISFyLmRhdGEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBBbGwoKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb25zIGFsbG93IHRvIHF1aWNrbHkgY3JlYXRlIG9yIHVwZGF0ZSBvYmplY3RzLlxuICAgICAqXG4gICAgICogTWFuYWdlcyBhIFwiY3JlYXRpb24gaXMgcGVuZGluZ1wiIHN0YXR1cywgYW5kIHVwZGF0ZSB3aGVuIGNyZWF0aW9uIGlzIHJlYWR5LlxuICAgICAqIFVzZXMgcmVndWxhciB1cGRhdGUvdXBkYXRlTm93IGFuZCBjcmVhdGUgbWV0aG9kcy5cbiAgICAgKiBVc2VkIG1haW5seSB3aGVuIGVkaXRpbmcgbXVsdGlwbGUgb2JqZWN0cyBpbiBzYW1lIGNvbnRyb2xsZXIgKGxpa2UgaW4gZWRpdGFibGUgYXJyYXlzKVxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVPclVwZGF0ZShcbiAgICAgICAgb2JqZWN0OiBWY3JlYXRlWydpbnB1dCddIHwgV2l0aElkPFZ1cGRhdGVbJ2lucHV0J10+LFxuICAgICAgICBub3cgPSBmYWxzZSxcbiAgICApOiBPYnNlcnZhYmxlPFRjcmVhdGUgfCBUdXBkYXRlPiB7XG4gICAgICAgIHRoaXMudGhyb3dJZk9ic2VydmFibGUob2JqZWN0KTtcbiAgICAgICAgdGhpcy50aHJvd0lmTm90UXVlcnkodGhpcy5jcmVhdGVNdXRhdGlvbik7XG4gICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMudXBkYXRlTXV0YXRpb24pO1xuXG4gICAgICAgIC8vIElmIGNyZWF0aW9uIGlzIHBlbmRpbmcsIGxpc3RlbiB0byBjcmVhdGlvbiBvYnNlcnZhYmxlIGFuZCB3aGVuIHJlYWR5LCBmaXJlIHVwZGF0ZVxuICAgICAgICBjb25zdCBwZW5kaW5nQ3JlYXRpb24gPSB0aGlzLmNyZWF0aW5nQ2FjaGUuZ2V0KG9iamVjdCk7XG4gICAgICAgIGlmIChwZW5kaW5nQ3JlYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBwZW5kaW5nQ3JlYXRpb24ucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUob2JqZWN0IGFzIFdpdGhJZDxWdXBkYXRlWydpbnB1dCddPik7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgb2JqZWN0IGhhcyBJZCwganVzdCBzYXZlIGl0XG4gICAgICAgIGlmICgnaWQnIGluIG9iamVjdCAmJiBvYmplY3QuaWQpIHtcbiAgICAgICAgICAgIGlmIChub3cpIHtcbiAgICAgICAgICAgICAgICAvLyB1c2VkIG1haW5seSBmb3IgdGVzdHMsIGJlY2F1c2UgbG9kYXNoIGRlYm91bmNlZCB1c2VkIGluIHVwZGF0ZSgpIGRvZXMgbm90IHdvcmsgZmluZSB3aXRoIGZha2VBc3luYyBhbmQgdGljaygpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlTm93KG9iamVjdCBhcyBXaXRoSWQ8VnVwZGF0ZVsnaW5wdXQnXT4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGUob2JqZWN0IGFzIFdpdGhJZDxWdXBkYXRlWydpbnB1dCddPik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBvYmplY3Qgd2FzIG5vdCBzYXZpbmcsIGFuZCBoYXMgbm8gSUQsIGNyZWF0ZSBpdFxuICAgICAgICBjb25zdCBjcmVhdGlvbiA9IHRoaXMuY3JlYXRlKG9iamVjdCkucGlwZShcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGluZ0NhY2hlLmRlbGV0ZShvYmplY3QpOyAvLyByZW1vdmUgZnJvbSBjYWNoZVxuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gc3RvcmVzIGNyZWF0aW5nIG9ic2VydmFibGUgaW4gYSBjYWNoZSByZXBsYXlhYmxlIHZlcnNpb24gb2YgdGhlIG9ic2VydmFibGUsXG4gICAgICAgIC8vIHNvIHNldmVyYWwgdXBkYXRlKCkgY2FuIHN1YnNjcmliZSB0byB0aGUgc2FtZSBjcmVhdGlvblxuICAgICAgICB0aGlzLmNyZWF0aW5nQ2FjaGUuc2V0KG9iamVjdCwgY3JlYXRpb24ucGlwZShzaGFyZVJlcGxheSgpKSk7XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0aW9uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhbiBvYmplY3QgaW4gREIgYW5kIHRoZW4gcmVmZXRjaCB0aGUgbGlzdCBvZiBvYmplY3RzXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZShvYmplY3Q6IFZjcmVhdGVbJ2lucHV0J10pOiBPYnNlcnZhYmxlPFRjcmVhdGU+IHtcbiAgICAgICAgdGhpcy50aHJvd0lmT2JzZXJ2YWJsZShvYmplY3QpO1xuICAgICAgICB0aGlzLnRocm93SWZOb3RRdWVyeSh0aGlzLmNyZWF0ZU11dGF0aW9uKTtcblxuICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSBtZXJnZShcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAge2lucHV0OiB0aGlzLmdldElucHV0KG9iamVjdCl9LFxuICAgICAgICAgICAgdGhpcy5nZXRQYXJ0aWFsVmFyaWFibGVzRm9yQ3JlYXRpb24ob2JqZWN0KSxcbiAgICAgICAgKSBhcyBWY3JlYXRlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwb2xsb1xuICAgICAgICAgICAgLm11dGF0ZTxUY3JlYXRlLCBWY3JlYXRlPih7XG4gICAgICAgICAgICAgICAgbXV0YXRpb246IHRoaXMuY3JlYXRlTXV0YXRpb24sXG4gICAgICAgICAgICAgICAgdmFyaWFibGVzOiB2YXJpYWJsZXMsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBvbGxvLmNsaWVudC5yZUZldGNoT2JzZXJ2YWJsZVF1ZXJpZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3T2JqZWN0ID0gdGhpcy5tYXBDcmVhdGlvbihyZXN1bHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXJnZVdpdGgob2JqZWN0LCBuZXdPYmplY3QsIG1lcmdlT3ZlcnJpZGVBcnJheSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3T2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBhbiBvYmplY3QsIGFmdGVyIGEgc2hvcnQgZGVib3VuY2VcbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlKG9iamVjdDogV2l0aElkPFZ1cGRhdGVbJ2lucHV0J10+KTogT2JzZXJ2YWJsZTxUdXBkYXRlPiB7XG4gICAgICAgIHRoaXMudGhyb3dJZk9ic2VydmFibGUob2JqZWN0KTtcbiAgICAgICAgdGhpcy50aHJvd0lmTm90UXVlcnkodGhpcy51cGRhdGVNdXRhdGlvbik7XG5cbiAgICAgICAgLy8gS2VlcCBhIHNpbmdsZSBpbnN0YW5jZSBvZiB0aGUgZGVib3VuY2VkIHVwZGF0ZSBmdW5jdGlvblxuICAgICAgICBjb25zdCBpZCA9IG9iamVjdC5pZDtcblxuICAgICAgICByZXR1cm4gdGhpcy5uYXR1cmFsRGVib3VuY2VTZXJ2aWNlLmRlYm91bmNlKHRoaXMsIGlkLCB0aGlzLnVwZGF0ZU5vdyhvYmplY3QpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgYW4gb2JqZWN0IGltbWVkaWF0ZWx5IHdoZW4gc3Vic2NyaWJpbmdcbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlTm93KG9iamVjdDogV2l0aElkPFZ1cGRhdGVbJ2lucHV0J10+KTogT2JzZXJ2YWJsZTxUdXBkYXRlPiB7XG4gICAgICAgIHRoaXMudGhyb3dJZk9ic2VydmFibGUob2JqZWN0KTtcbiAgICAgICAgdGhpcy50aHJvd0lmTm90UXVlcnkodGhpcy51cGRhdGVNdXRhdGlvbik7XG5cbiAgICAgICAgY29uc3QgdmFyaWFibGVzID0gbWVyZ2UoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6IG9iamVjdC5pZCxcbiAgICAgICAgICAgICAgICBpbnB1dDogdGhpcy5nZXRJbnB1dChvYmplY3QpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMuZ2V0UGFydGlhbFZhcmlhYmxlc0ZvclVwZGF0ZShvYmplY3QpLFxuICAgICAgICApIGFzIFZ1cGRhdGU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBvbGxvXG4gICAgICAgICAgICAubXV0YXRlPFR1cGRhdGUsIFZ1cGRhdGU+KHtcbiAgICAgICAgICAgICAgICBtdXRhdGlvbjogdGhpcy51cGRhdGVNdXRhdGlvbixcbiAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IHZhcmlhYmxlcyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcG9sbG8uY2xpZW50LnJlRmV0Y2hPYnNlcnZhYmxlUXVlcmllcygpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWRSZXN1bHQgPSB0aGlzLm1hcFVwZGF0ZShyZXN1bHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXJnZVdpdGgob2JqZWN0LCBtYXBwZWRSZXN1bHQsIG1lcmdlT3ZlcnJpZGVBcnJheSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBhbiBvYmplY3QgYnV0IHdpdGhvdXQgYXV0b21hdGljYWxseSBpbmplY3RpbmcgdmFsdWVzIGNvbWluZ1xuICAgICAqIGZyb20gYGdldERlZmF1bHRGb3JTZXJ2ZXIoKWAuXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZVBhcnRpYWxseShvYmplY3Q6IFdpdGhJZDxWdXBkYXRlWydpbnB1dCddPik6IE9ic2VydmFibGU8VHVwZGF0ZT4ge1xuICAgICAgICB0aGlzLnRocm93SWZPYnNlcnZhYmxlKG9iamVjdCk7XG4gICAgICAgIHRoaXMudGhyb3dJZk5vdFF1ZXJ5KHRoaXMudXBkYXRlTXV0YXRpb24pO1xuXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IHtcbiAgICAgICAgICAgIGlkOiBvYmplY3QuaWQsXG4gICAgICAgICAgICBpbnB1dDogb21pdChyZWxhdGlvbnNUb0lkcyhvYmplY3QpLCAnaWQnKSxcbiAgICAgICAgfSBhcyBWdXBkYXRlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwb2xsb1xuICAgICAgICAgICAgLm11dGF0ZTxUdXBkYXRlLCBWdXBkYXRlPih7XG4gICAgICAgICAgICAgICAgbXV0YXRpb246IHRoaXMudXBkYXRlTXV0YXRpb24sXG4gICAgICAgICAgICAgICAgdmFyaWFibGVzOiB2YXJpYWJsZXMsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBvbGxvLmNsaWVudC5yZUZldGNoT2JzZXJ2YWJsZVF1ZXJpZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFwVXBkYXRlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZSBvYmplY3RzIGFuZCB0aGVuIHJlZmV0Y2ggdGhlIGxpc3Qgb2Ygb2JqZWN0c1xuICAgICAqL1xuICAgIHB1YmxpYyBkZWxldGUob2JqZWN0czoge2lkOiBzdHJpbmd9W10pOiBPYnNlcnZhYmxlPFRkZWxldGU+IHtcbiAgICAgICAgdGhpcy50aHJvd0lmT2JzZXJ2YWJsZShvYmplY3RzKTtcbiAgICAgICAgdGhpcy50aHJvd0lmTm90UXVlcnkodGhpcy5kZWxldGVNdXRhdGlvbik7XG5cbiAgICAgICAgY29uc3QgaWRzID0gb2JqZWN0cy5tYXAobyA9PiB7XG4gICAgICAgICAgICAvLyBDYW5jZWwgcGVuZGluZyB1cGRhdGVcbiAgICAgICAgICAgIHRoaXMubmF0dXJhbERlYm91bmNlU2VydmljZS5jYW5jZWxPbmUodGhpcywgby5pZCk7XG5cbiAgICAgICAgICAgIHJldHVybiBvLmlkO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdmFyaWFibGVzID0gbWVyZ2UoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWRzOiBpZHMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5nZXRQYXJ0aWFsVmFyaWFibGVzRm9yRGVsZXRlKG9iamVjdHMpLFxuICAgICAgICApIGFzIFZkZWxldGU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBvbGxvXG4gICAgICAgICAgICAubXV0YXRlPFRkZWxldGUsIFZkZWxldGU+KHtcbiAgICAgICAgICAgICAgICBtdXRhdGlvbjogdGhpcy5kZWxldGVNdXRhdGlvbixcbiAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IHZhcmlhYmxlcyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAvLyBEZWxheSB0aGUgb2JzZXJ2YWJsZSB1bnRpbCBBcG9sbG8gcmVmZXRjaCBpcyBjb21wbGV0ZWRcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkUmVzdWx0ID0gdGhpcy5tYXBEZWxldGUocmVzdWx0KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnJvbSh0aGlzLmFwb2xsby5jbGllbnQucmVGZXRjaE9ic2VydmFibGVRdWVyaWVzKCkpLnBpcGUobWFwKCgpID0+IG1hcHBlZFJlc3VsdCkpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlIG1vZGVsIGZyb20gc2VydmVyIChuZXZlciBmcm9tIGNhY2hlKSBhbmQgaXRlbXMgcmVsYXRlZCB0byB0aGUgbW9kZWwsIGlmIHRoZSBpZCBpcyBwcm92aWRlZCwgaW4gb3JkZXIgdG8gc2hvdyBhIGZvcm1cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVzb2x2ZShpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxSZXNvbHZlPFRvbmUgfCBWY3JlYXRlWydpbnB1dCddPj4ge1xuICAgICAgICAvLyBMb2FkIG1vZGVsIGlmIGlkIGlzIGdpdmVuXG4gICAgICAgIGxldCBvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPFRvbmUgfCBWY3JlYXRlWydpbnB1dCddPjtcbiAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgICBvYnNlcnZhYmxlID0gdGhpcy5uYXR1cmFsRGVib3VuY2VTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmZsdXNoT25lKHRoaXMsIGlkKVxuICAgICAgICAgICAgICAgIC5waXBlKHN3aXRjaE1hcCgoKSA9PiB0aGlzLmdldE9uZShpZCwgJ25ldHdvcmstb25seScpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYnNlcnZhYmxlID0gb2YodGhpcy5nZXREZWZhdWx0Rm9yU2VydmVyKCkgYXMgVG9uZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZS5waXBlKFxuICAgICAgICAgICAgbWFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHttb2RlbDogcmVzdWx0fTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhbiBvYmplY3QgdGhhdCBtYXRjaCB0aGUgR3JhcGhRTCBpbnB1dCB0eXBlLlxuICAgICAqIEl0IGNyZWF0ZXMgYW4gb2JqZWN0IHdpdGggbWFudWFsbHkgZmlsbGVkIGRhdGEgYW5kIGFkZCB1bmNvbXBsZXRlZCBkYXRhIChsaWtlIHJlcXVpcmVkIGF0dHJpYnV0ZXMgdGhhdCBjYW4gYmUgZW1wdHkgc3RyaW5ncylcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SW5wdXQob2JqZWN0OiBMaXRlcmFsKTogVmNyZWF0ZVsnaW5wdXQnXSB8IFZ1cGRhdGVbJ2lucHV0J10ge1xuICAgICAgICAvLyBDb252ZXJ0IHJlbGF0aW9ucyB0byB0aGVpciBJRHMgZm9yIG11dGF0aW9uXG4gICAgICAgIG9iamVjdCA9IHJlbGF0aW9uc1RvSWRzKG9iamVjdCk7XG5cbiAgICAgICAgLy8gUGljayBvbmx5IGF0dHJpYnV0ZXMgdGhhdCB3ZSBjYW4gZmluZCBpbiB0aGUgZW1wdHkgb2JqZWN0XG4gICAgICAgIC8vIEluIG90aGVyIHdvcmRzLCBwcmV2ZW50IHRvIHNlbGVjdCBkYXRhIHRoYXQgaGFzIHVud2FudGVkIGF0dHJpYnV0ZXNcbiAgICAgICAgY29uc3QgZW1wdHlPYmplY3QgPSB0aGlzLmdldERlZmF1bHRGb3JTZXJ2ZXIoKTtcbiAgICAgICAgbGV0IGlucHV0ID0gcGljayhvYmplY3QsIE9iamVjdC5rZXlzKGVtcHR5T2JqZWN0KSk7XG5cbiAgICAgICAgLy8gQ29tcGxldGUgYSBwb3RlbnRpYWxseSB1bmNvbXBsZXRlZCBvYmplY3Qgd2l0aCBkZWZhdWx0IHZhbHVlc1xuICAgICAgICBpbnB1dCA9IGRlZmF1bHRzKGlucHV0LCBlbXB0eU9iamVjdCk7XG5cbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIG9iamVjdHMgbWF0Y2hpbmcgdGhlIHF1ZXJ5LiBJdCBtYXkgbmV2ZXIgY29tcGxldGUuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHVzZWQgZm9yIHRoZSB1bmlxdWUgdmFsaWRhdG9yXG4gICAgICovXG4gICAgcHVibGljIGNvdW50KHF1ZXJ5VmFyaWFibGVzTWFuYWdlcjogTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjxWYWxsPik6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IHBsdXJhbCA9IG1ha2VQbHVyYWwodGhpcy5uYW1lKTtcbiAgICAgICAgY29uc3QgcXVlcnlOYW1lID0gJ0NvdW50JyArIHVwcGVyQ2FzZUZpcnN0TGV0dGVyKHBsdXJhbCk7XG4gICAgICAgIGNvbnN0IGZpbHRlclR5cGUgPSB1cHBlckNhc2VGaXJzdExldHRlcih0aGlzLm5hbWUpICsgJ0ZpbHRlcic7XG5cbiAgICAgICAgY29uc3QgcXVlcnkgPSBncWxgXG4gICAgICAgICAgICBxdWVyeSAke3F1ZXJ5TmFtZX0gKCRmaWx0ZXI6ICR7ZmlsdGVyVHlwZX0pIHtcbiAgICAgICAgICAgIGNvdW50OiAke3BsdXJhbH0gKGZpbHRlcjogJGZpbHRlciwgcGFnaW5hdGlvbjoge3BhZ2VTaXplOiAwLCBwYWdlSW5kZXg6IDB9KSB7XG4gICAgICAgICAgICBsZW5ndGhcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1gO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmdldFBhcnRpYWxWYXJpYWJsZXNGb3JBbGwoKS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKHBhcnRpYWxWYXJpYWJsZXMgPT4ge1xuICAgICAgICAgICAgICAgIC8vIENvcHkgbWFuYWdlciB0byBwcmV2ZW50IHRvIGFwcGx5IGludGVybmFsIHZhcmlhYmxlcyB0byBleHRlcm5hbCBRdWVyeVZhcmlhYmxlc01hbmFnZXJcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5hZ2VyID0gbmV3IE5hdHVyYWxRdWVyeVZhcmlhYmxlc01hbmFnZXI8VmFsbD4ocXVlcnlWYXJpYWJsZXNNYW5hZ2VyKTtcbiAgICAgICAgICAgICAgICBtYW5hZ2VyLm1lcmdlKCdwYXJ0aWFsLXZhcmlhYmxlcycsIHBhcnRpYWxWYXJpYWJsZXMpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBvbGxvLnF1ZXJ5PHtjb3VudDoge2xlbmd0aDogbnVtYmVyfX0sIFZhbGw+KHtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IG1hbmFnZXIudmFyaWFibGVzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seScsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcChyZXN1bHQgPT4gcmVzdWx0LmRhdGEuY291bnQubGVuZ3RoKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gZW1wdHkgb2JqZWN0IHdpdGggc29tZSBkZWZhdWx0IHZhbHVlcyBmcm9tIHNlcnZlciBwZXJzcGVjdGl2ZVxuICAgICAqXG4gICAgICogVGhpcyBpcyB0eXBpY2FsbHkgdXNlZnVsIHdoZW4gc2hvd2luZyBhIGZvcm0gZm9yIGNyZWF0aW9uXG4gICAgICovXG4gICAgcHVibGljIGdldERlZmF1bHRGb3JTZXJ2ZXIoKTogVmNyZWF0ZVsnaW5wdXQnXSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBZb3UgcHJvYmFibHkgKipzaG91bGQgbm90KiogdXNlIHRoaXMuXG4gICAgICpcbiAgICAgKiBJZiB5b3UgYXJlIHRyeWluZyB0byAqY2FsbCogdGhpcyBtZXRob2QsIGluc3RlYWQgeW91IHByb2JhYmx5IHdhbnQgdG8gY2FsbCBgZ2V0RGVmYXVsdEZvclNlcnZlcigpYCB0byBnZXQgZGVmYXVsdFxuICAgICAqIHZhbHVlcyBmb3IgYSBtb2RlbCwgb3IgYGdldEZvcm1Db25maWcoKWAgdG8gZ2V0IGEgY29uZmlndXJlZCBmb3JtIHRoYXQgaW5jbHVkZXMgZXh0cmEgZm9ybSBmaWVsZHMuXG4gICAgICpcbiAgICAgKiBJZiB5b3UgYXJlIHRyeWluZyB0byAqb3ZlcnJpZGUqIHRoaXMgbWV0aG9kLCBpbnN0ZWFkIHlvdSBwcm9iYWJseSB3YW50IHRvIG92ZXJyaWRlIGBnZXREZWZhdWx0Rm9yU2VydmVyKClgLlxuICAgICAqXG4gICAgICogVGhlIG9ubHkgYW5kICoqdmVyeSByYXJlKiogcmVhc29uIHRvIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGlzIGlmIHRoZSBjbGllbnQgbmVlZHMgZXh0cmEgZm9ybSBmaWVsZHMgdGhhdCBjYW5ub3QgYmVcbiAgICAgKiBhY2NlcHRlZCBieSB0aGUgc2VydmVyIChub3QgcGFydCBvZiBgWFhYSW5wdXRgIHR5cGUpIGFuZCB0aGF0IGFyZSBzdHJpY3RseSBmb3IgdGhlIGNsaWVudCBmb3JtIG5lZWRzLiBJbiB0aGF0IGNhc2UsXG4gICAgICogdGhlbiB5b3UgY2FuIHJldHVybiBkZWZhdWx0IHZhbHVlcyBmb3IgdGhvc2UgZXh0cmEgZm9ybSBmaWVsZHMsIGFuZCB0aGUgZm9ybSByZXR1cm5lZCBieSBgZ2V0Rm9ybUNvbmZpZygpYCB3aWxsXG4gICAgICogaW5jbHVkZSB0aG9zZSBleHRyYSBmaWVsZHMuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldEZvcm1FeHRyYUZpZWxkRGVmYXVsdFZhbHVlcygpOiBMaXRlcmFsIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdXNlZCB0byBleHRyYWN0IG9ubHkgdGhlIGFycmF5IG9mIGZldGNoZWQgb2JqZWN0cyBvdXQgb2YgdGhlIGVudGlyZSBmZXRjaGVkIGRhdGFcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgbWFwQWxsKCk6IE9wZXJhdG9yRnVuY3Rpb248RmV0Y2hSZXN1bHQ8dW5rbm93bj4sIFRhbGw+IHtcbiAgICAgICAgY29uc3QgcGx1cmFsID0gbWFrZVBsdXJhbCh0aGlzLm5hbWUpO1xuICAgICAgICByZXR1cm4gbWFwKHJlc3VsdCA9PiAocmVzdWx0LmRhdGEgYXMgYW55KVtwbHVyYWxdKTsgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hcG9sbG9ncmFwaHFsL2Fwb2xsby1jbGllbnQvaXNzdWVzLzU2NjJcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHVzZWQgdG8gZXh0cmFjdCBvbmx5IHRoZSBjcmVhdGVkIG9iamVjdCBvdXQgb2YgdGhlIGVudGlyZSBmZXRjaGVkIGRhdGFcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgbWFwQ3JlYXRpb24ocmVzdWx0OiBNdXRhdGlvblJlc3VsdDx1bmtub3duPik6IFRjcmVhdGUge1xuICAgICAgICBjb25zdCBuYW1lID0gJ2NyZWF0ZScgKyB1cHBlckNhc2VGaXJzdExldHRlcih0aGlzLm5hbWUpO1xuICAgICAgICByZXR1cm4gKHJlc3VsdC5kYXRhIGFzIGFueSlbbmFtZV07IC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXBvbGxvZ3JhcGhxbC9hcG9sbG8tY2xpZW50L2lzc3Vlcy81NjYyXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB1c2VkIHRvIGV4dHJhY3Qgb25seSB0aGUgdXBkYXRlZCBvYmplY3Qgb3V0IG9mIHRoZSBlbnRpcmUgZmV0Y2hlZCBkYXRhXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG1hcFVwZGF0ZShyZXN1bHQ6IE11dGF0aW9uUmVzdWx0PHVua25vd24+KTogVHVwZGF0ZSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSAndXBkYXRlJyArIHVwcGVyQ2FzZUZpcnN0TGV0dGVyKHRoaXMubmFtZSk7XG4gICAgICAgIHJldHVybiAocmVzdWx0LmRhdGEgYXMgYW55KVtuYW1lXTsgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hcG9sbG9ncmFwaHFsL2Fwb2xsby1jbGllbnQvaXNzdWVzLzU2NjJcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIHVzZWQgdG8gZXh0cmFjdCBvbmx5IGZsYWcgd2hlbiBkZWxldGluZyBhbiBvYmplY3RcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgbWFwRGVsZXRlKHJlc3VsdDogTXV0YXRpb25SZXN1bHQ8dW5rbm93bj4pOiBUZGVsZXRlIHtcbiAgICAgICAgY29uc3QgbmFtZSA9ICdkZWxldGUnICsgbWFrZVBsdXJhbCh1cHBlckNhc2VGaXJzdExldHRlcih0aGlzLm5hbWUpKTtcbiAgICAgICAgcmV0dXJuIChyZXN1bHQuZGF0YSBhcyBhbnkpW25hbWVdOyAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Fwb2xsb2dyYXBocWwvYXBvbGxvLWNsaWVudC9pc3N1ZXMvNTY2MlxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYWRkaXRpb25hbCB2YXJpYWJsZXMgdG8gYmUgdXNlZCB3aGVuIGdldHRpbmcgYSBzaW5nbGUgb2JqZWN0XG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHR5cGljYWxseSBhIHNpdGUgb3Igc3RhdGUgSUQsIGFuZCBpcyBuZWVkZWQgdG8gZ2V0IGFwcHJvcHJpYXRlIGFjY2VzcyByaWdodHNcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0UGFydGlhbFZhcmlhYmxlc0Zvck9uZSgpOiBPYnNlcnZhYmxlPFBhcnRpYWw8Vm9uZT4+IHtcbiAgICAgICAgcmV0dXJuIG9mKHt9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFkZGl0aW9uYWwgdmFyaWFibGVzIHRvIGJlIHVzZWQgd2hlbiBnZXR0aW5nIG11bHRpcGxlIG9iamVjdHNcbiAgICAgKlxuICAgICAqIFRoaXMgaXMgdHlwaWNhbGx5IGEgc2l0ZSBvciBzdGF0ZSBJRCwgYnV0IGl0IGNvdWxkIGJlIHNvbWV0aGluZyBlbHNlIHRvIGZ1cnRoZXIgZmlsdGVyIHRoZSBxdWVyeVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRQYXJ0aWFsVmFyaWFibGVzRm9yQWxsKCk6IE9ic2VydmFibGU8UGFydGlhbDxWYWxsPj4ge1xuICAgICAgICByZXR1cm4gb2Yoe30pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYWRkaXRpb25hbCB2YXJpYWJsZXMgdG8gYmUgdXNlZCB3aGVuIGNyZWF0aW5nIGFuIG9iamVjdFxuICAgICAqXG4gICAgICogVGhpcyBpcyB0eXBpY2FsbHkgYSBzaXRlIG9yIHN0YXRlIElEXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHByb3RlY3RlZCBnZXRQYXJ0aWFsVmFyaWFibGVzRm9yQ3JlYXRpb24ob2JqZWN0OiBMaXRlcmFsKTogUGFydGlhbDxWY3JlYXRlPiB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFkZGl0aW9uYWwgdmFyaWFibGVzIHRvIGJlIHVzZWQgd2hlbiB1cGRhdGluZyBhbiBvYmplY3RcbiAgICAgKlxuICAgICAqIFRoaXMgaXMgdHlwaWNhbGx5IGEgc2l0ZSBvciBzdGF0ZSBJRFxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwcm90ZWN0ZWQgZ2V0UGFydGlhbFZhcmlhYmxlc0ZvclVwZGF0ZShvYmplY3Q6IExpdGVyYWwpOiBQYXJ0aWFsPFZ1cGRhdGU+IHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhZGRpdGlvbmFsIHZhcmlhYmxlcyB0byBiZSB1c2VkIHdoZW4gZGVsZXRpbmcgYW4gb2JqZWN0XG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHR5cGljYWxseSBhIHNpdGUgb3Igc3RhdGUgSURcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHJvdGVjdGVkIGdldFBhcnRpYWxWYXJpYWJsZXNGb3JEZWxldGUob2JqZWN0czogTGl0ZXJhbFtdKTogUGFydGlhbDxWZGVsZXRlPiB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaHJvdyBleGNlcHRpb24gdG8gcHJldmVudCBleGVjdXRpbmcgcXVlcmllcyB3aXRoIGludmFsaWQgdmFyaWFibGVzXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHRocm93SWZPYnNlcnZhYmxlKHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAnQ2Fubm90IHVzZSBPYnNlcnZhYmxlIGFzIHZhcmlhYmxlcy4gSW5zdGVhZCB5b3Ugc2hvdWxkIHVzZSAuc3Vic2NyaWJlKCkgdG8gY2FsbCB0aGUgbWV0aG9kIHdpdGggYSByZWFsIHZhbHVlJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXJnZSBnaXZlbiBJRCB3aXRoIGFkZGl0aW9uYWwgcGFydGlhbCB2YXJpYWJsZXMgaWYgdGhlcmUgaXMgYW55XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRWYXJpYWJsZXNGb3JPbmUoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8Vm9uZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQYXJ0aWFsVmFyaWFibGVzRm9yT25lKCkucGlwZShcbiAgICAgICAgICAgIG1hcChwYXJ0aWFsVmFyaWFibGVzID0+IG1lcmdlKHt9LCB7aWQ6IGlkfSBhcyBWb25lLCBwYXJ0aWFsVmFyaWFibGVzKSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhyb3cgZXhjZXB0aW9uIHRvIHByZXZlbnQgZXhlY3V0aW5nIG51bGwgcXVlcmllc1xuICAgICAqL1xuICAgIHByaXZhdGUgdGhyb3dJZk5vdFF1ZXJ5KHF1ZXJ5OiBEb2N1bWVudE5vZGUgfCBudWxsKTogYXNzZXJ0cyBxdWVyeSB7XG4gICAgICAgIGlmICghcXVlcnkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignR3JhcGhRTCBxdWVyeSBmb3IgdGhpcyBtZXRob2Qgd2FzIG5vdCBjb25maWd1cmVkIGluIHRoaXMgc2VydmljZSBjb25zdHJ1Y3RvcicpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
@@ -4407,7 +4407,7 @@ class NaturalAbstractModelService {
|
|
|
4407
4407
|
* If available it will emit object from cache immediately, then it
|
|
4408
4408
|
* will **always** fetch from network and then the observable will be completed
|
|
4409
4409
|
*/
|
|
4410
|
-
getOne(id) {
|
|
4410
|
+
getOne(id, fetchPolicy = 'cache-and-network') {
|
|
4411
4411
|
this.throwIfObservable(id);
|
|
4412
4412
|
this.throwIfNotQuery(this.oneQuery);
|
|
4413
4413
|
return this.getVariablesForOne(id).pipe(switchMap(variables => {
|
|
@@ -4415,7 +4415,7 @@ class NaturalAbstractModelService {
|
|
|
4415
4415
|
return this.apollo.watchQuery({
|
|
4416
4416
|
query: this.oneQuery,
|
|
4417
4417
|
variables: variables,
|
|
4418
|
-
fetchPolicy:
|
|
4418
|
+
fetchPolicy: fetchPolicy,
|
|
4419
4419
|
nextFetchPolicy: 'cache-only',
|
|
4420
4420
|
}).valueChanges;
|
|
4421
4421
|
}), filter(result => !!result.data), takeWhile(result => result.networkStatus !== NetworkStatus.ready, true), map(result => result.data[this.name]));
|
|
@@ -4614,13 +4614,15 @@ class NaturalAbstractModelService {
|
|
|
4614
4614
|
}));
|
|
4615
4615
|
}
|
|
4616
4616
|
/**
|
|
4617
|
-
* Resolve model and items related to the model, if the id is provided, in order to show a form
|
|
4617
|
+
* Resolve model from server (never from cache) and items related to the model, if the id is provided, in order to show a form
|
|
4618
4618
|
*/
|
|
4619
4619
|
resolve(id) {
|
|
4620
4620
|
// Load model if id is given
|
|
4621
4621
|
let observable;
|
|
4622
4622
|
if (id) {
|
|
4623
|
-
observable = this.naturalDebounceService
|
|
4623
|
+
observable = this.naturalDebounceService
|
|
4624
|
+
.flushOne(this, id)
|
|
4625
|
+
.pipe(switchMap(() => this.getOne(id, 'network-only')));
|
|
4624
4626
|
}
|
|
4625
4627
|
else {
|
|
4626
4628
|
observable = of(this.getDefaultForServer());
|
|
@@ -6847,7 +6849,7 @@ class NaturalSelectComponent extends AbstractSelect {
|
|
|
6847
6849
|
return this.variablesManager.variables.value;
|
|
6848
6850
|
}
|
|
6849
6851
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: NaturalSelectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
6850
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.2", type: NaturalSelectComponent, isStandalone: true, selector: "natural-select", inputs: { service: "service", optionRequired: "optionRequired", searchField: "searchField", searchOperator: "searchOperator", filter: "filter", disabled: "disabled" }, queries: [{ propertyName: "itemTemplate", first: true, predicate: TemplateRef, descendants: true }], viewQueries: [{ propertyName: "autoTrigger", first: true, predicate: MatAutocompleteTrigger, descendants: true }], usesInheritance: true, ngImport: i0, template: "<!-- Autocomplete menu -->\n<mat-autocomplete\n #ac=\"matAutocomplete\"\n (optionSelected)=\"propagateValue($event.option.value)\"\n [displayWith]=\"getDisplayFn()\"\n panelWidth=\"auto !important\"\n>\n @for (item of items | async; track item) {\n <mat-option [value]=\"item\">\n <ng-template\n [ngTemplateOutletContext]=\"{item: item}\"\n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultACItem\"\n />\n </mat-option>\n }\n @if (moreNbItems > 0) {\n <div class=\"mat-caption\" i18n style=\"padding: 5px 10px\">{{ moreNbItems }}
|
|
6852
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.2", type: NaturalSelectComponent, isStandalone: true, selector: "natural-select", inputs: { service: "service", optionRequired: "optionRequired", searchField: "searchField", searchOperator: "searchOperator", filter: "filter", disabled: "disabled" }, queries: [{ propertyName: "itemTemplate", first: true, predicate: TemplateRef, descendants: true }], viewQueries: [{ propertyName: "autoTrigger", first: true, predicate: MatAutocompleteTrigger, descendants: true }], usesInheritance: true, ngImport: i0, template: "<!-- Autocomplete menu -->\n<mat-autocomplete\n #ac=\"matAutocomplete\"\n (optionSelected)=\"propagateValue($event.option.value)\"\n [displayWith]=\"getDisplayFn()\"\n panelWidth=\"auto !important\"\n>\n @for (item of items | async; track item) {\n <mat-option [value]=\"item\">\n <ng-template\n [ngTemplateOutletContext]=\"{item: item}\"\n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultACItem\"\n />\n </mat-option>\n }\n @if (moreNbItems > 0) {\n <div class=\"mat-caption\" i18n style=\"padding: 5px 10px\"\n >Tapez pour chercher parmis les {{ moreNbItems }} elements</div\n >\n }\n</mat-autocomplete>\n\n<ng-template #defaultACItem let-item=\"item\">\n <span>{{ getDisplayFn()(item) }}</span>\n</ng-template>\n\n<!-- Input for autocomplete -->\n<mat-form-field>\n <mat-label>{{ placeholder }}</mat-label>\n\n <input\n (blur)=\"onBlur()\"\n (change)=\"onInternalFormChange()\"\n (click)=\"autoTrigger.openPanel()\"\n (focus)=\"startSearch()\"\n (keydown.esc)=\"reset()\"\n (keydown.enter)=\"onKeyEnter()\"\n [formControl]=\"internalCtrl\"\n [matAutocomplete]=\"ac\"\n aria-label=\"Recherche et s\u00E9lection\"\n i18n-aria-label\n matInput\n [errorStateMatcher]=\"matcher\"\n />\n\n @if (hint) {\n <mat-hint>{{ hint }}</mat-hint>\n }\n\n <!-- Meta data -->\n @if (!loading && showIcon) {\n <mat-icon [naturalIcon]=\"icon\" matIconPrefix />\n }\n\n @if (loading) {\n <div class=\"loading-wrapper\" matIconPrefix>\n <mat-progress-spinner [diameter]=\"21\" [strokeWidth]=\"5\" mode=\"indeterminate\" />\n </div>\n }\n\n <!-- Clear button -->\n <div class=\"suffix-buttons\" matIconSuffix>\n @if (internalCtrl.pristine && internalCtrl.value && internalCtrl.enabled && !clearLabel) {\n <button (click)=\"clear()\" mat-icon-button i18n-matTooltip matTooltip=\"D\u00E9s\u00E9lectionner\">\n <mat-icon naturalIcon=\"close\" />\n </button>\n }\n @if (internalCtrl.dirty && internalCtrl.enabled && optionRequired) {\n <button (click)=\"reset()\" mat-icon-button i18n-matTooltip matTooltip=\"Annuler la recherche\">\n <mat-icon naturalIcon=\"undo\" />\n </button>\n }\n @if (internalCtrl.pristine && internalCtrl.value && navigateTo) {\n <button\n [routerLink]=\"navigateTo\"\n (click)=\"$event.stopPropagation()\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Naviguer vers\"\n >\n <mat-icon naturalIcon=\"open_in_browser\" />\n </button>\n }\n </div>\n\n @if (hasRequiredError()) {\n <mat-error i18n>Ce champ est requis</mat-error>\n }\n</mat-form-field>\n\n<!-- Additional (un)select/(un)link buttons for more visual cohesion with natural-relations --><!-- [clearLabel] and/or [selectLabel] has to be given as attribute input -->\n@if (showClearButton()) {\n <div class=\"external-buttons\">\n @if (showClearButton()) {\n <button (click)=\"clear()\" color=\"warn\" mat-button>{{ clearLabel }}</button>\n }\n </div>\n}\n", styles: [":host{display:flex;flex-direction:column}:host>*:not(:last-child){margin-bottom:20px}:host>mat-autocomplete{margin-bottom:0!important}:host .suffix-buttons,:host .external-buttons{display:flex;flex-direction:row}:host .external-buttons{display:flex;flex-direction:row}:host .external-buttons>*:not(:last-child){margin-right:10px}:host .loading-wrapper{display:flex;justify-content:center;align-items:center;width:48px;height:48px}\n"], dependencies: [{ kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i1$8.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i1$3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i1$8.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2$5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i2$5.AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3$1.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3$1.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i3$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NaturalIconDirective, selector: "mat-icon[naturalIcon]", inputs: ["naturalIcon", "size"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i8.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
|
|
6851
6853
|
}
|
|
6852
6854
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: NaturalSelectComponent, decorators: [{
|
|
6853
6855
|
type: Component,
|
|
@@ -6865,7 +6867,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImpor
|
|
|
6865
6867
|
MatButtonModule,
|
|
6866
6868
|
MatTooltipModule,
|
|
6867
6869
|
RouterLink,
|
|
6868
|
-
], template: "<!-- Autocomplete menu -->\n<mat-autocomplete\n #ac=\"matAutocomplete\"\n (optionSelected)=\"propagateValue($event.option.value)\"\n [displayWith]=\"getDisplayFn()\"\n panelWidth=\"auto !important\"\n>\n @for (item of items | async; track item) {\n <mat-option [value]=\"item\">\n <ng-template\n [ngTemplateOutletContext]=\"{item: item}\"\n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultACItem\"\n />\n </mat-option>\n }\n @if (moreNbItems > 0) {\n <div class=\"mat-caption\" i18n style=\"padding: 5px 10px\">{{ moreNbItems }}
|
|
6870
|
+
], template: "<!-- Autocomplete menu -->\n<mat-autocomplete\n #ac=\"matAutocomplete\"\n (optionSelected)=\"propagateValue($event.option.value)\"\n [displayWith]=\"getDisplayFn()\"\n panelWidth=\"auto !important\"\n>\n @for (item of items | async; track item) {\n <mat-option [value]=\"item\">\n <ng-template\n [ngTemplateOutletContext]=\"{item: item}\"\n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultACItem\"\n />\n </mat-option>\n }\n @if (moreNbItems > 0) {\n <div class=\"mat-caption\" i18n style=\"padding: 5px 10px\"\n >Tapez pour chercher parmis les {{ moreNbItems }} elements</div\n >\n }\n</mat-autocomplete>\n\n<ng-template #defaultACItem let-item=\"item\">\n <span>{{ getDisplayFn()(item) }}</span>\n</ng-template>\n\n<!-- Input for autocomplete -->\n<mat-form-field>\n <mat-label>{{ placeholder }}</mat-label>\n\n <input\n (blur)=\"onBlur()\"\n (change)=\"onInternalFormChange()\"\n (click)=\"autoTrigger.openPanel()\"\n (focus)=\"startSearch()\"\n (keydown.esc)=\"reset()\"\n (keydown.enter)=\"onKeyEnter()\"\n [formControl]=\"internalCtrl\"\n [matAutocomplete]=\"ac\"\n aria-label=\"Recherche et s\u00E9lection\"\n i18n-aria-label\n matInput\n [errorStateMatcher]=\"matcher\"\n />\n\n @if (hint) {\n <mat-hint>{{ hint }}</mat-hint>\n }\n\n <!-- Meta data -->\n @if (!loading && showIcon) {\n <mat-icon [naturalIcon]=\"icon\" matIconPrefix />\n }\n\n @if (loading) {\n <div class=\"loading-wrapper\" matIconPrefix>\n <mat-progress-spinner [diameter]=\"21\" [strokeWidth]=\"5\" mode=\"indeterminate\" />\n </div>\n }\n\n <!-- Clear button -->\n <div class=\"suffix-buttons\" matIconSuffix>\n @if (internalCtrl.pristine && internalCtrl.value && internalCtrl.enabled && !clearLabel) {\n <button (click)=\"clear()\" mat-icon-button i18n-matTooltip matTooltip=\"D\u00E9s\u00E9lectionner\">\n <mat-icon naturalIcon=\"close\" />\n </button>\n }\n @if (internalCtrl.dirty && internalCtrl.enabled && optionRequired) {\n <button (click)=\"reset()\" mat-icon-button i18n-matTooltip matTooltip=\"Annuler la recherche\">\n <mat-icon naturalIcon=\"undo\" />\n </button>\n }\n @if (internalCtrl.pristine && internalCtrl.value && navigateTo) {\n <button\n [routerLink]=\"navigateTo\"\n (click)=\"$event.stopPropagation()\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Naviguer vers\"\n >\n <mat-icon naturalIcon=\"open_in_browser\" />\n </button>\n }\n </div>\n\n @if (hasRequiredError()) {\n <mat-error i18n>Ce champ est requis</mat-error>\n }\n</mat-form-field>\n\n<!-- Additional (un)select/(un)link buttons for more visual cohesion with natural-relations --><!-- [clearLabel] and/or [selectLabel] has to be given as attribute input -->\n@if (showClearButton()) {\n <div class=\"external-buttons\">\n @if (showClearButton()) {\n <button (click)=\"clear()\" color=\"warn\" mat-button>{{ clearLabel }}</button>\n }\n </div>\n}\n", styles: [":host{display:flex;flex-direction:column}:host>*:not(:last-child){margin-bottom:20px}:host>mat-autocomplete{margin-bottom:0!important}:host .suffix-buttons,:host .external-buttons{display:flex;flex-direction:row}:host .external-buttons{display:flex;flex-direction:row}:host .external-buttons>*:not(:last-child){margin-right:10px}:host .loading-wrapper{display:flex;justify-content:center;align-items:center;width:48px;height:48px}\n"] }]
|
|
6869
6871
|
}], propDecorators: { autoTrigger: [{
|
|
6870
6872
|
type: ViewChild,
|
|
6871
6873
|
args: [MatAutocompleteTrigger]
|