@eui/components 15.5.4 → 15.5.5-snapshot-1701389710443
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/docs/dependencies.html +2 -2
- package/docs/js/search/search_index.js +2 -2
- package/esm2020/eui-input-number/eui-input-number.component.mjs +2 -2
- package/esm2020/legacy/ux-form-control/ux-form-control.component.mjs +2 -2
- package/fesm2015/eui-components-eui-input-number.mjs +4 -4
- package/fesm2015/eui-components-eui-input-number.mjs.map +1 -1
- package/fesm2015/eui-components-legacy-ux-form-control.mjs +2 -2
- package/fesm2015/eui-components-legacy-ux-form-control.mjs.map +1 -1
- package/fesm2020/eui-components-eui-input-number.mjs +1 -1
- package/fesm2020/eui-components-eui-input-number.mjs.map +1 -1
- package/fesm2020/eui-components-legacy-ux-form-control.mjs +2 -2
- package/fesm2020/eui-components-legacy-ux-form-control.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -204,7 +204,7 @@ export class EuiInputNumberComponent extends InputDirective {
|
|
|
204
204
|
}
|
|
205
205
|
onKeyDown(e) {
|
|
206
206
|
// check if it's a single symbol and not Special like (Ctrl, backspace etc)
|
|
207
|
-
if (e?.key
|
|
207
|
+
if (e?.key?.length <= 1 && !e.ctrlKey && !e.altKey && !e.metaKey) {
|
|
208
208
|
// stop event propagation if key pressed is not a number or locale character or minus sign
|
|
209
209
|
if (Number.isNaN(Number.parseInt(e.key, 10)) &&
|
|
210
210
|
this.isMinusAllowed(e.key) &&
|
|
@@ -586,4 +586,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
586
586
|
type: HostListener,
|
|
587
587
|
args: ['focusout']
|
|
588
588
|
}] } });
|
|
589
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLWlucHV0LW51bWJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9ldWktaW5wdXQtbnVtYmVyL2V1aS1pbnB1dC1udW1iZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxRQUFRLEVBQ1IsU0FBUyxFQUNULE1BQU0sRUFFTixTQUFTLEVBR1QsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBTUwsaUJBQWlCLEdBRXBCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBNkIsTUFBTSx1QkFBdUIsQ0FBQztBQUUvRyxPQUFPLE1BQU0sTUFBTSxXQUFXLENBQUM7QUFFL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBNEMzQyxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsY0FBYztJQTBHdkQsWUFDYyxXQUF1QixFQUN2QixTQUFvQixFQUN0QixFQUFxQixFQUNULGFBQTRCLEVBQ3JCLFNBQWlCLEVBQzVDLFFBQWtCLEVBQ1EsUUFBa0I7UUFFNUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFSOUIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUN0QixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNULGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQ3JCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFFbEIsYUFBUSxHQUFSLFFBQVEs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QUksa0JBQ3JCO3dCQUNaOzRCQUNJLFNBQVMsRUFBRSxxQkFBcUI7NEJBQ2hDLE1BQU0sRUFBRSxDQUFDLGNBQWMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDO3lCQUNuRDt3QkFDRDs0QkFDSSxTQUFTLEVBQUUsbUJBQW1COzRCQUM5QixNQUFNLEVBQUUsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDO3lCQUNyQztxQkFDSixRQUVLO3dCQUNGLFFBQVEsRUFBRSxhQUFhO3FCQUMxQjs7MEJBZ0hJLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsU0FBUzs7MEJBRWhCLE1BQU07MkJBQUMsUUFBUTs0Q0E1R1QsR0FBRztzQkFEYixLQUFLO2dCQVdLLEdBQUc7c0JBRGIsS0FBSztnQkFXSyxXQUFXO3NCQURyQixLQUFLO2dCQVFLLFNBQVM7c0JBRG5CLEtBQUs7Z0JBU0ssVUFBVTtzQkFEcEIsV0FBVzt1QkFBQyxPQUFPO2dCQU9oQixjQUFjO3NCQURqQixLQUFLO2dCQVNGLE1BQU07c0JBRFQsS0FBSztnQkFRRixZQUFZO3NCQURmLEtBQUs7Z0JBU0YsT0FBTztzQkFEVixLQUFLO2dCQVlGLFFBQVE7c0JBRFgsS0FBSztnQkFRRyxVQUFVO3NCQUFsQixLQUFLO2dCQUM4QixJQUFJO3NCQUF2QyxXQUFXO3VCQUFDLFdBQVc7Z0JBQ2YsS0FBSztzQkFBYixLQUFLO2dCQWtJTixPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXVCdkIsU0FBUztzQkFEbEIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBMkN6QixVQUFVO3NCQURuQixZQUFZO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIE9wdGlvbmFsLFxuICAgIExPQ0FMRV9JRCxcbiAgICBJbmplY3QsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERvQ2hlY2ssXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgSW5qZWN0b3IsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYWxlU2VydmljZSwgTG9jYWxlU3RhdGUgfSBmcm9tICdAZXVpL2NvcmUnO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5LCBjb2VyY2VOdW1iZXJQcm9wZXJ0eSwgQm9vbGVhbklucHV0LCBOdW1iZXJJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyB0eXBlIENsZWF2ZU9wdGlvbnMgfSBmcm9tICdjbGVhdmUuanMvb3B0aW9ucyc7XG5pbXBvcnQgQ2xlYXZlIGZyb20gJ2NsZWF2ZS5qcyc7XG5pbXBvcnQgeyBDbGVhdmVFdmVudE9uQ2hhbmdlIH0gZnJvbSAnLi9tb2RlbHMvY2xlYXZlLWV2ZW50LW9uY2hhbmdlLm1vZGVsJztcbmltcG9ydCB7IElucHV0RGlyZWN0aXZlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL3NoYXJlZCc7XG5pbXBvcnQgeyBET0NVTUVOVCwgZ2V0TG9jYWxlTnVtYmVyU3ltYm9sLCBOdW1iZXJTeW1ib2wgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRXVpQ2xlYXJhYmxlRGlyZWN0aXZlLCBFdWlMb2FkaW5nRGlyZWN0aXZlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENsZWF2ZUluc3RhbmNlIGV4dGVuZHMgQ2xlYXZlIHtcbiAgICBpbml0U3dhcEhpZGRlbklucHV0PzogKCkgPT4gdm9pZDtcbiAgICBpbml0TnVtZXJhbEZvcm1hdHRlcj86ICgpID0+IHZvaWQ7XG4gICAgaW5pdFRpbWVGb3JtYXR0ZXI/OiAoKSA9PiB2b2lkO1xuICAgIGluaXREYXRlRm9ybWF0dGVyPzogKCkgPT4gdm9pZDtcbiAgICBpbml0UGhvbmVGb3JtYXR0ZXI/OiAoKSA9PiB2b2lkO1xuICAgIHVwZGF0ZUNyZWRpdENhcmRQcm9wc0J5VmFsdWU/OiAoKSA9PiB2b2lkO1xuICAgIHVwZGF0ZVZhbHVlU3RhdGU/OiAoKSA9PiB2b2lkO1xuICAgIGNhbGxPblZhbHVlQ2hhbmdlZD86ICgpID0+IHZvaWQ7XG4gICAgb25DaGFuZ2U/OiAoZXZlbnQ/OiBFdmVudCkgPT4gdm9pZDtcbiAgICBvbkN1dD86IChldmVudD86IEV2ZW50KSA9PiB2b2lkO1xuICAgIG9uRm9jdXM/OiAoZXZlbnQ/OiBFdmVudCkgPT4gdm9pZDtcbiAgICBvbkNvcHk/OiAoZXZlbnQ/OiBFdmVudCkgPT4gdm9pZDtcbiAgICBvbktleURvd24/OiAoZXZlbnQ/OiBFdmVudCkgPT4gdm9pZDtcbiAgICBvbkNoYW5nZUxpc3RlbmVyPzogKGV2ZW50PzogRXZlbnQpID0+IHZvaWQ7XG4gICAgb25LZXlEb3duTGlzdGVuZXI/OiAoZXZlbnQ/OiBFdmVudCkgPT4gdm9pZDtcbiAgICBvbkZvY3VzTGlzdGVuZXI/OiAoZXZlbnQ/OiBFdmVudCkgPT4gdm9pZDtcbiAgICBvbkN1dExpc3RlbmVyPzogKGV2ZW50PzogRXZlbnQpID0+IHZvaWQ7XG4gICAgb25Db3B5TGlzdGVuZXI/OiAoZXZlbnQ/OiBFdmVudCkgPT4gdm9pZDtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ2lucHV0W2V1aUlucHV0TnVtYmVyXScsXG4gICAgc3R5bGVVcmxzOiBbJy4vc3R5bGVzL19pbmRleC5zY3NzJ10sXG4gICAgdGVtcGxhdGU6ICcnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgZGlyZWN0aXZlOiBFdWlDbGVhcmFibGVEaXJlY3RpdmUsXG4gICAgICAgICAgICBpbnB1dHM6IFsnZXVpQ2xlYXJhYmxlJywgJ3JlYWRvbmx5JywgJ2Rpc2FibGVkJ10sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZTogRXVpTG9hZGluZ0RpcmVjdGl2ZSxcbiAgICAgICAgICAgIGlucHV0czogWydldWlMb2FkaW5nJywgJ3JlYWRvbmx5J10sXG4gICAgICAgIH0sXG4gICAgXSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWhvc3QtbWV0YWRhdGEtcHJvcGVydHlcbiAgICBob3N0OiB7XG4gICAgICAgICcoYmx1ciknOiAnb25Ub3VjaGVkKCknLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIEV1aUlucHV0TnVtYmVyQ29tcG9uZW50IGV4dGVuZHMgSW5wdXREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgRG9DaGVjaywgT25DaGFuZ2VzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbWluaW11bSBudW1iZXIgY2FuIGJlIGVudGVyZWQuIEJsb2NrcyB1c2VyJ3MgaW5wdXQgaWYgbm90IGluIHJhbmdlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBtaW4oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbjtcbiAgICB9XG4gICAgcHVibGljIHNldCBtaW4odmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgICAgIHRoaXMuX21pbiA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIG1heGltdW0gbnVtYmVyIGNhbiBiZSBlbnRlcmVkLiBCbG9ja3MgdXNlcidzIGlucHV0IGlmIG5vdCBpbiByYW5nZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgbWF4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXg7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgbWF4KHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgICAgICB0aGlzLl9tYXggPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIC8qKiBBZGRzIGxlYWRpbmcgemVybyB0byBhIG51bWJlci4gRm9ybWF0dGluZyB3aWxsIG5vdCB3b3JrLlxuICAgICAqICAgICAgZS5nLiB3aXRoIGxlYWRpbmdaZXJvPTMgaW5wdXQgbnVtYmVyIDUgPT4gMDA1XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGxlYWRpbmdaZXJvKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFkaW5nWmVybztcbiAgICB9XG4gICAgcHVibGljIHNldCBsZWFkaW5nWmVybyh2YWx1ZTogTnVtYmVySW5wdXQpIHtcbiAgICAgICAgdGhpcy5fbGVhZGluZ1plcm8gPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBpc0ludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0ludmFsaWQgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGlzSW52YWxpZChzdGF0ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuc2V0SW52YWxpZChzdGF0ZSk7XG4gICAgfVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICAgIHB1YmxpYyBnZXQgY3NzQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gW3N1cGVyLmdldENzc0NsYXNzZXMoJ2V1aS1pbnB1dC1udW1iZXInKSwgdGhpcy5faXNJbnZhbGlkID8gJ2V1aS1pbnB1dC1udW1iZXItLWludmFsaWQnIDogJyddLmpvaW4oJyAnKS50cmltKCk7XG4gICAgfVxuXG4gICAgLyoqIGhvdyBtYW55IGRpZ2l0cyBmb3IgdGhlIGRlY2ltYWwgcGFydCAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGZyYWN0aW9uRGlnaXRzKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mcmFjdGlvbkRpZ2l0cztcbiAgICB9XG4gICAgc2V0IGZyYWN0aW9uRGlnaXRzKHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgICAgICB0aGlzLl9mcmFjdGlvbkRpZ2l0cyA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgLyoqIGhvdyBtYW55IGRpZ2l0cyBmb3IgdGhlIGludGVnZXIgcGFydCAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGRpZ2l0cygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlnaXRzO1xuICAgIH1cbiAgICBzZXQgZGlnaXRzKHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgICAgICB0aGlzLl9kaWdpdHMgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGZpbGxGcmFjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGxGcmFjdGlvbjtcbiAgICB9XG4gICAgc2V0IGZpbGxGcmFjdGlvbih2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2ZpbGxGcmFjdGlvbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIC8qKiByb3VuZHMgYSBudW1iZXIgd2l0aCBtb3JlIHRoYW4gdHdvIGRlY2ltYWxzIFVQICovXG4gICAgQElucHV0KClcbiAgICBnZXQgcm91bmRVcCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm91bmRVcDtcbiAgICB9XG4gICAgc2V0IHJvdW5kVXAodmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgICAgIHRoaXMuX3JvdW5kVXAgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfaXNJbnZhbGlkOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIGRvZXMgbm90IGZvcm1hdCB0aGUgYW5kIGRvIGEgdGhvdXNhbmQgZ3JvdXBpbmcgb2YgbnVtYmVyXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBnZXQgbm9Gb3JtYXQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub0Zvcm1hdDtcbiAgICB9XG4gICAgc2V0IG5vRm9ybWF0KHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fbm9Gb3JtYXQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX25vRm9ybWF0OiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHN0eWxlQ2xhc3M6IHN0cmluZztcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIudHlwZScpIHByb3RlY3RlZCB0eXBlID0gJ2V1aS1udW1iZXInO1xuICAgIEBJbnB1dCgpIHZhbHVlOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9yb3VuZFVwOiBudW1iZXI7XG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcHVibGljIG9uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQ7XG4gICAgY2xlYXZlSW5zdGFuY2U6IENsZWF2ZUluc3RhbmNlO1xuICAgIHByaXZhdGUgX21pbjogbnVtYmVyO1xuICAgIHByaXZhdGUgX21heDogbnVtYmVyO1xuXG4gICAgcHJpdmF0ZSBfbGVhZGluZ1plcm8gPSAwO1xuICAgIC8qKiBob2xkcyBpbnN0YW5jZSBvZiBjbGVhdmUgKi9cbiAgICAvKiogb3B0aW9ucyBmb3IgdGhlIENsZWF2ZSBpbnN0YW5jZSAqL1xuICAgIHByaXZhdGUgb3B0aW9uczogQ2xlYXZlT3B0aW9ucztcbiAgICBwcml2YXRlIF9mcmFjdGlvbkRpZ2l0cyA9IDA7XG4gICAgcHJpdmF0ZSBfZGlnaXRzOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfZmlsbEZyYWN0aW9uOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJvdGVjdGVkIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBsb2NhbGVTZXJ2aWNlOiBMb2NhbGVTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KExPQ0FMRV9JRCkgcHJpdmF0ZSBsb2NhbGVfaWQ6IHN0cmluZyxcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICApIHtcbiAgICAgICAgc3VwZXIoX2VsZW1lbnRSZWYsIF9yZW5kZXJlciwgaW5qZWN0b3IpO1xuXG4gICAgICAgIC8vIHNldCBkZWZhdWx0IG9wdGlvbnNcbiAgICAgICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgICAgICAgbnVtZXJhbDogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgICAgICB0aGlzLmNvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wsIHVuZGVmaW5lZCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAgICAgICAvLyBpbnN0YW50aWF0ZSBjbGVhdmVcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdENsZWF2ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc3Vic2NyaWJlIHRvIGxvY2FsaXphdGlvbiBzZXJ2aWNlIGFuZCBsaXN0ZW4gZm9yIGxvY2FsZSBjaGFuZ2UuIERlLWNvbnN0cnVjdGlvbiBvZiBsb2NhbGUgc2hvdWxkIGhhcHBlbiBoZXJlIVxuICAgICAgICB0aGlzLmxvY2FsZVNlcnZpY2U/LmdldFN0YXRlKCkuc3Vic2NyaWJlKChzdGF0ZTogTG9jYWxlU3RhdGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuZ2V0Q2xlYXZlT3B0c0Jhc2VkT25Mb2NhbGUoc3RhdGU/LmlkKTtcblxuICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBvcHRpb25zIG9uIHRoZSBjbGVhdmUgaW5zdGFuY2VcbiAgICAgICAgICAgIHRoaXMudXBkYXRlT3B0aW9ucyh0cnVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAncm9vdENsYXNzTmFtZScsICdldWktaW5wdXQtbnVtYmVyJyk7XG4gICAgfVxuXG4gICAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sLCB1bmRlZmluZWQsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0ludmFsaWQgPSB0aGlzLmNvbnRyb2wgPyB0aGlzLmNvbnRyb2wuaW52YWxpZCAmJiB0aGlzLmNvbnRyb2wudG91Y2hlZCA6IHRoaXMuX2lzSW52YWxpZDtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChPYmplY3QuaGFzT3duKGNoYW5nZXMsICd2YWx1ZScpKSB7XG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xlYXZlSW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWF2ZUluc3RhbmNlLnNldFJhd1ZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3QuaGFzT3duKGNoYW5nZXMsICdmcmFjdGlvbkRpZ2l0cycpKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB7IC4uLnRoaXMub3B0aW9ucywgbnVtZXJhbERlY2ltYWxTY2FsZTogdGhpcy5mcmFjdGlvbkRpZ2l0cyB9O1xuICAgICAgICAgICAgdGhpcy51cGRhdGVPcHRpb25zKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE9iamVjdC5oYXNPd24oY2hhbmdlcywgJ25vRm9ybWF0JykpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHsgLi4udGhpcy5vcHRpb25zLCBudW1lcmFsVGhvdXNhbmRzR3JvdXBTdHlsZTogdGhpcy5ub0Zvcm1hdCA/ICdub25lJyA6ICd0aG91c2FuZCcgfTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlT3B0aW9ucygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3QuaGFzT3duKGNoYW5nZXMsICdmaWxsRnJhY3Rpb24nKSAmJiB0aGlzLmNsZWF2ZUluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5RnJhY3Rpb25GaWxsKHRoaXMuY2xlYXZlSW5zdGFuY2UuZ2V0UmF3VmFsdWUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE9iamVjdC5oYXNPd24oY2hhbmdlcywgJ2RpZ2l0cycpKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB7IC4uLnRoaXMub3B0aW9ucywgbnVtZXJhbEludGVnZXJTY2FsZTogdGhpcy5kaWdpdHMgfTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlT3B0aW9ucygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3QuaGFzT3duKGNoYW5nZXMsICdtaW4nKSkge1xuICAgICAgICAgICAgaWYgKGNoYW5nZXNbJ21pbiddLmN1cnJlbnRWYWx1ZSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2xlYXZlSW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGFrZSBjYXJlIG9mIHRoZSBzaWduIHN5bWJvbFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWF2ZUluc3RhbmNlLnNldFJhd1ZhbHVlKE1hdGguYWJzKE51bWJlcih0aGlzLmNsZWF2ZUluc3RhbmNlLmdldFJhd1ZhbHVlKCkpKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE9iamVjdC5oYXNPd24oY2hhbmdlcywgJ3JvdW5kVXAnKSkge1xuICAgICAgICAgICAgaWYgKGNoYW5nZXNbJ3JvdW5kVXAnXS5jdXJyZW50VmFsdWUgPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2xlYXZlSW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG51bWJlciA9IE51bWJlci5wYXJzZUZsb2F0KHRoaXMuY2xlYXZlSW5zdGFuY2UuZ2V0UmF3VmFsdWUoKSk7XG4gICAgICAgICAgICAgICAgICAgIG51bWJlciA9IHRoaXMuZGVjaW1hbEFkanVzdChudW1iZXIsIHRoaXMucm91bmRVcCAqIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5zZXRSYXdWYWx1ZShudW1iZXIudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIC8vIGRlc3Ryb3kgY2xlYXZlIGluc3RhbmNlXG4gICAgICAgIGlmICh0aGlzLmNsZWF2ZUluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWF2ZUluc3RhbmNlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIG9uQ2hhbmdlOiBhbnkgPSAoXzogYW55KTogdm9pZCA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wgJiYgKF8gIT09IG51bGwgfHwgXyAhPT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgLy8gcGFyc2UgbnVtYmVyXG4gICAgICAgICAgICAvLyBjb25zdCB2YWx1ZSA9IE51bWJlcihfKTtcbiAgICAgICAgICAgIC8vIHJ1biBvbiBuZXh0IE1pY3JvVGFzayB0byBhdm9pZCBORzAxMDAgZXJyb3IgVE9ETzogZGVlcGVyIGludmVzdGlnYXRpb25cbiAgICAgICAgICAgIC8vIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gdGhpcy5jb250cm9sLnZpZXdUb01vZGVsVXBkYXRlKHZhbHVlKSk7XG4gICAgICAgICAgICAvLyBpbiBjYXNlIGNvbnRyb2wgaXMgRm9ybUNvbnRyb2xcbiAgICAgICAgICAgIC8vIHRoaXMuY29udHJvbD8uY29udHJvbC5zZXRWYWx1ZShpc05hTih2YWx1ZSkgPyBudWxsIDogdmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSwgZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgb25Ub3VjaGVkOiBhbnkgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuY29udHJvbD8uY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgfTtcblxuICAgIEBIb3N0TGlzdGVuZXIoJ3Bhc3RlJywgWyckZXZlbnQnXSlcbiAgICBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICAvLyBnZXQgdGhlIHZhbHVlIGZyb20gY2xpcGJvYXJkXG4gICAgICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LmNsaXBib2FyZERhdGEgfHwgd2luZG93WydjbGlwYm9hcmREYXRhJ10pLmdldERhdGEoJ3RleHQnKTtcbiAgICAgICAgLy8gaW4gY2FzZSByb3VuZCBVUCBpcyBlbmFibGVkXG4gICAgICAgIGlmICh0aGlzLl9yb3VuZFVwID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZGl2ID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgLy8gY3JlYXRlIGEgY2xvbmUgb2YgY2xlYXZlSW5zdGFuY2VcbiAgICAgICAgICAgIGNvbnN0IGNsb25lSW5zdGFuY2U6IENsZWF2ZUluc3RhbmNlID0gbmV3IENsZWF2ZShkaXYsIHsgLi4udGhpcy5vcHRpb25zLCBudW1lcmFsRGVjaW1hbFNjYWxlOiA4IH0pO1xuICAgICAgICAgICAgY2xvbmVJbnN0YW5jZS5zZXRSYXdWYWx1ZSh2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGxldCBudW1iZXIgPSBOdW1iZXIucGFyc2VGbG9hdChjbG9uZUluc3RhbmNlLmdldFJhd1ZhbHVlKCkpO1xuICAgICAgICAgICAgbnVtYmVyID0gdGhpcy5kZWNpbWFsQWRqdXN0KG51bWJlciwgdGhpcy5yb3VuZFVwICogLTEpO1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obnVtYmVyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXZlSW5zdGFuY2Uuc2V0UmF3VmFsdWUobnVtYmVyLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IGludmVzdGlnYXRlIGluIHRoZSBmdXR1cmUgaG93IGNhbiB0aGlzIGJlIGF2b2lkZWRcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy53cml0ZVZhbHVlKG51bWJlci50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIHByb3RlY3RlZCBvbktleURvd24oZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICAvLyBjaGVjayBpZiBpdCdzIGEgc2luZ2xlIHN5bWJvbCBhbmQgbm90IFNwZWNpYWwgbGlrZSAoQ3RybCwgYmFja3NwYWNlIGV0YylcbiAgICAgICAgaWYgKGU/LmtleS5sZW5ndGggPD0gMSAmJiAhZS5jdHJsS2V5ICYmICFlLmFsdEtleSAmJiAhZS5tZXRhS2V5KSB7XG4gICAgICAgICAgICAvLyBzdG9wIGV2ZW50IHByb3BhZ2F0aW9uIGlmIGtleSBwcmVzc2VkIGlzIG5vdCBhIG51bWJlciBvciBsb2NhbGUgY2hhcmFjdGVyIG9yIG1pbnVzIHNpZ25cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBOdW1iZXIuaXNOYU4oTnVtYmVyLnBhcnNlSW50KGUua2V5LCAxMCkpICYmXG4gICAgICAgICAgICAgICAgdGhpcy5pc01pbnVzQWxsb3dlZChlLmtleSkgJiZcbiAgICAgICAgICAgICAgICBlLmtleSAhPT0gZ2V0TG9jYWxlTnVtYmVyU3ltYm9sKHRoaXMubG9jYWxlU2VydmljZT8uY3VycmVudExvY2FsZSB8fCB0aGlzLmxvY2FsZV9pZCwgTnVtYmVyU3ltYm9sLkRlY2ltYWwpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAvLyBzdG9wIGV2ZW50IHByb3BhZ2F0aW9uIGlmIGtleSBwcmVzc2VkIGV4Y2VlZHMgdGhlIG1pbi9tYXggdmFsdWUgcmFuZ2VcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIU51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQoZS5rZXksIDEwKSkgJiYgdGhpcy5pc091dFNpZGVSYW5nZShlKSkge1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzT3V0U2lkZVJhbmdlKGUpKSB7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwcm90ZWN0IGRlY2ltYWwgc3ltYm9sIGRlbGV0aW9uIGluIGNhc2UgZmlsbEZyYWN0aW9uIGlzIG9uXG4gICAgICAgIGlmIChlLmtleSA9PT0gJ0RlbGV0ZScgfHwgZS5rZXkgPT09ICdCYWNrc3BhY2UnKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgLy8gcG9zaXRpb24gb2YgY2FyZXRcbiAgICAgICAgICAgIGNvbnN0IHBvcyA9IGVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgICAgICAvLyBnZXQgY2hhcmFjdGVyIGFib3V0IHRvIGJlIGRlbGV0ZWRcbiAgICAgICAgICAgIGNvbnN0IGNoYXIgPSBlbGVtZW50LnZhbHVlLmNoYXJBdChwb3MgLSAxKTtcbiAgICAgICAgICAgIC8vIGluIGNhc2UgdGhlIGNoYXIgaXMgdGhlIGRlY2ltYWwgc3ltYm9sIHByZXZlbnQgZGVsZXRpb24gYW5kIG1vdmUgY2FyZXQgaW4gZnJvbnRcbiAgICAgICAgICAgIGlmIChjaGFyID09PSBnZXRMb2NhbGVOdW1iZXJTeW1ib2wodGhpcy5sb2NhbGVTZXJ2aWNlPy5jdXJyZW50TG9jYWxlIHx8IHRoaXMubG9jYWxlX2lkLCBOdW1iZXJTeW1ib2wuRGVjaW1hbCkpIHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHBvcyAtIDEsIHBvcyAtIDEpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzT3V0U2lkZVJhbmdlKGUpKSB7XG4gICAgICAgICAgICAgICAgLy8gZG9uJ3QgYWxsb3cgaW5zZXJ0aW9uIHRoYXQgd2lsbCBwdXQgbnVtYmVyIG91dCBvZiByYW5nZVxuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignZm9jdXNvdXQnKVxuICAgIHByb3RlY3RlZCBvbkZvY3Vzb3V0KCk6IHZvaWQge1xuICAgICAgICAvLyBpbiBjYXNlIGZpbGxGcmFjdGlvbiBmZWF0dXJlIGlzIG9uIGFuZCB0aGVyZSdzIG5vIGludGVnZXIgcGFydCBhZGQgbGVhZGluZyAwXG4gICAgICAgIGlmICh0aGlzLmZpbGxGcmFjdGlvbiAmJiB0aGlzLmNsZWF2ZUluc3RhbmNlLmdldFJhd1ZhbHVlKCkubWF0Y2goL15cXC5bMC05XSsvZykpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXZlSW5zdGFuY2Uuc2V0UmF3VmFsdWUoJzAnICsgdGhpcy5jbGVhdmVJbnN0YW5jZS5nZXRSYXdWYWx1ZSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGluIGNhc2Ugcm91bmQgVVAgaXMgZW5hYmxlZFxuICAgICAgICBpZiAodGhpcy5fcm91bmRVcCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IE51bWJlci5wYXJzZUZsb2F0KHRoaXMuY2xlYXZlSW5zdGFuY2UuZ2V0UmF3VmFsdWUoKSk7XG4gICAgICAgICAgICB0aGlzLmNsZWF2ZUluc3RhbmNlLnNldFJhd1ZhbHVlKHRoaXMuZGVjaW1hbEFkanVzdChudW1iZXIsIHRoaXMucm91bmRVcCAqIC0xKS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGluIGNhc2UgbWluIGlzIHNldCBhbmQgdmFsdWUgaXMgbGVzcyB0aGFuIG1pbiByZXNldCB0byB0aGUgbWluIHZhbHVlXG4gICAgICAgIGlmICh0aGlzLm1pbiAmJiBOdW1iZXIucGFyc2VGbG9hdCh0aGlzLmNsZWF2ZUluc3RhbmNlLmdldFJhd1ZhbHVlKCkpIDwgdGhpcy5taW4pIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXZlSW5zdGFuY2Uuc2V0UmF3VmFsdWUodGhpcy5taW4udG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc2V0SW52YWxpZChzdGF0ZT86IEJvb2xlYW5JbnB1dCk6IHZvaWQge1xuICAgICAgICAvLyBpbiBjYXNlIGl0J3MgY29udHJvbGxlZCBieSBOZ0NvbnRyb2wgb3ZlcnJpZGVcbiAgICAgICAgdGhpcy5faXNJbnZhbGlkID0gdGhpcy5jb250cm9sID8gdGhpcy5jb250cm9sLmludmFsaWQgJiYgdGhpcy5jb250cm9sLnRvdWNoZWQgOiBjb2VyY2VCb29sZWFuUHJvcGVydHkoc3RhdGUpO1xuXG4gICAgICAgIC8vIHNldCBCYXNlRGlyZWN0aXZlIEF0dHJpYnV0ZVxuICAgICAgICBzdXBlci5ldWlEYW5nZXIgPSB0aGlzLl9pc0ludmFsaWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQE92ZXJyaWRlIHNldFBsYWNlaG9sZGVyIHNldFBsYWNlaG9sZGVyQXR0cmlidXRlIG9mIElucHV0RGlyZWN0aXZlXG4gICAgICogVXBkYXRlcyB0aGUgcGxhY2Vob2xkZXIgdmFsdWUgYmFzZWQgb24gY3VycmVudCBudW1iZXIgZm9ybWF0IGFuZCBnaXZlbiB2YWx1ZS5cbiAgICAgKiBJZiB2YWx1ZSBwYXNzZWQgY29udGFpbnMgY2hhcmFjdGVycyBpdCBkb2Vzbid0IGZvcm1hdCBwbGFjZWhvbGRlci5cbiAgICAgKiAqL1xuICAgIHByb3RlY3RlZCBzZXRQbGFjZWhvbGRlckF0dHJpYnV0ZSh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyID0gOTk5OTk5Ljk5OTkpOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgdmFsdWUgaXMgYSBudW1iZXIsIGZvcm1hdCB0aGUgdmFsdWUgYmFzZWQgb24gY3VycmVudCBudW1iZXIgZm9ybWF0XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmICFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpdiA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBhIGNsb25lIG9mIGNsZWF2ZUluc3RhbmNlXG4gICAgICAgICAgICBjb25zdCBjbG9uZUluc3RhbmNlOiBDbGVhdmVJbnN0YW5jZSA9IG5ldyBDbGVhdmUoZGl2LCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICAgICAgLy8gQkVXQVJFOiBieSB0aGUgdGltZSB5b3VyIHNldFJhd1ZhbHVlIGNsZWF2ZSBvcHRpb25zIGhhdmUgY2hhbmdlZCB0aHVzIG51bWJlciBmb3JtYXR0aW5nXG4gICAgICAgICAgICBjbG9uZUluc3RhbmNlLnNldFJhd1ZhbHVlKHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgLy8gc2V0IHRoZSB2YWx1ZSB3aXRoIGN1cnJlbnQgZm9ybWF0IGFzIHBsYWNlaG9sZGVyXG4gICAgICAgICAgICBzdXBlci5zZXRQbGFjZWhvbGRlckF0dHJpYnV0ZShjbG9uZUluc3RhbmNlLmdldEZvcm1hdHRlZFZhbHVlKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHN1cGVyLnNldFBsYWNlaG9sZGVyQXR0cmlidXRlKHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGxhY2Vob2xkZXI7XG4gICAgICAgICAgICBzdXBlci5zZXRQbGFjZWhvbGRlckF0dHJpYnV0ZSh2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGluc3RhbnRpYXRlIENsZWF2ZS5qc1xuICAgICAqL1xuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHByaXZhdGUgaW5pdENsZWF2ZShvbkNoYW5nZUNhbGxiYWNrPzogKG9iajogYW55KSA9PiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gY2hhbmdlIHRoZSBjbGVhdmUgcHJvdG90eXBlIGZ1bmN0aW9uIHRvIGludGVyY2VwdCBvbkN1dCBjYWxsYmFja1xuICAgICAgICAvLyBhbmQgYWxsb3cgYmFzZWQgb24gdGhlIGV2ZW50IGJ1YmJsaW5nIGFuZCBkaXNhYmxlZCBzdGF0ZVxuICAgICAgICAvLyBUSVA6IGNoYW5nZSBiZWhhdmlvciBvZiBvbkN1dCB0byBzdG9wIGluIGNhc2UgYnViYmxlIGlzIGNhbmNlbGVkXG4gICAgICAgIC8vIFRPRE86IFNlZSByZWxldmFudCBpc3N1ZSBodHRwczovL2dpdGh1Yi5jb20vbm9zaXIvY2xlYXZlLmpzL2lzc3Vlcy82NzVcbiAgICAgICAgY29uc3QgX29uQ3V0ID0gQ2xlYXZlLnByb3RvdHlwZVsnb25DdXQnXTtcbiAgICAgICAgQ2xlYXZlLnByb3RvdHlwZVsnb25DdXQnXSA9IGZ1bmN0aW9uIChlOiBFdmVudCk6IHZvaWQge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWludmFsaWQtdGhpc1xuICAgICAgICAgICAgaWYgKCFlLmNhbmNlbEJ1YmJsZSAmJiAhdGhpcy5lbGVtZW50LmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWludmFsaWQtdGhpc1xuICAgICAgICAgICAgICAgIF9vbkN1dC5jYWxsKHRoaXMsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGluIGNhc2Ugb3B0aW9ucyBpcyB1bmRlZmluZWRcbiAgICAgICAgY29uc3Qgb3B0czogQ2xlYXZlT3B0aW9ucyA9IHsgLi4udGhpcy5vcHRpb25zIH07XG5cbiAgICAgICAgLy8gc2V0IHRoZSBvblZhbHVlIGNoYW5nZSBsaXN0ZW5lciB0byBrZWVwIHRoZSB2YWx1ZSBhdCByZWFkT25seSBlbGVtZW50IGluIHN5bmNcbiAgICAgICAgb3B0cy5vblZhbHVlQ2hhbmdlZCA9IG9uQ2hhbmdlQ2FsbGJhY2sgfHwgdGhpcy5vblZhbHVlQ2hhbmdlZC5iaW5kKHRoaXMpO1xuXG4gICAgICAgIC8vIGluIGNhc2Ugcm91bmQgVVAgaXMgZW5hYmxlZFxuICAgICAgICBpZiAodGhpcy5fcm91bmRVcCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IE51bWJlci5wYXJzZUZsb2F0KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLmRlY2ltYWxBZGp1c3QobnVtYmVyLCB0aGlzLnJvdW5kVXAgKiAtMSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjcmVhdGUgdGhlIENsZWF2ZSBpbnN0YW5jZSB3aXRoIHRoZSBuZXcgb3IgdXBkYXRlZCBvcHRpb25zXG4gICAgICAgIHRoaXMuY2xlYXZlSW5zdGFuY2UgPSBuZXcgQ2xlYXZlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgb3B0cyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgY2xlYXZlIG9wdGlvbnMgYnkgZGVzdHJveWluZyB0aGUgY3VycmVudCBpbnN0YW5jZSBhbmQgY3JlYXRpbmcgYW5vdGhlciBvbmUgd2hpbGUga2VlcGluZyB0aGUgcHJldmlvdXNcbiAgICAgKiB2YWx1ZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZU9wdGlvbnMobG9jYWxlVXBkYXRlZCA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNsZWF2ZUluc3RhbmNlKSB7XG4gICAgICAgICAgICAvLyB0aGUgdmFsdWUgYmVmb3JlIGRlc3Ryb3lpbmcgY2xlYXZlIGluc3RhbmNlXG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gdGhpcy5jbGVhdmVJbnN0YW5jZS5nZXRSYXdWYWx1ZSgpO1xuXG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIENsZWF2ZSBpbnN0YW5jZSB3aXRoIHRoZSBuZXcgb3IgdXBkYXRlZCBvcHRpb25zXG4gICAgICAgICAgICB0aGlzLmNsZWF2ZUluc3RhbmNlLnByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5jbGVhdmVJbnN0YW5jZS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBpbml0VmFsdWU6IHByZXZpb3VzVmFsdWUsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBpbml0IG51bWJlciBmb3JtYXR0ZXIgd2l0aCB1cGRhdGVkIG9wdGlvbnNcbiAgICAgICAgICAgIHRoaXMuY2xlYXZlSW5zdGFuY2UuaW5pdE51bWVyYWxGb3JtYXR0ZXIoKTtcblxuICAgICAgICAgICAgLy8gSW4gY2FzZSBwcmV2aW91cyBzZXR0aW5ncyB3aGVyZSBudW1lcmFsRGVjaW1hbE1hcms9Jy4nIHdpdGggdmFsdWUgMTAwMC45OSwgYW5kIHRoZXkgY2hhbmdlZCB0b1xuICAgICAgICAgICAgLy8gbnVtZXJhbERlY2ltYWxNYXJrPScsJzsgc2V0IGluaXRWYWx1ZSB0byAxMDAwLjk5IG9yIGV2ZW4gMTAwMCw5OSB3aWxsIG5vdCBiZSByZWZsZWN0ZWQgYW5kIGNsZWF2ZSB3aWxsXG4gICAgICAgICAgICAvLyByZW1vdmUgdGhlIGRlY2ltYWwgcGFydC4gU2V0IG9mIHRoZSB2YWx1ZSBhZnRlciBpbml0aWFsaXphdGlvbiBjYXVzZXMgcmVmb3JtYXQgb2YgbnVtYmVyIGFuZCB3b3Jrcy5cbiAgICAgICAgICAgIHRoaXMuY2xlYXZlSW5zdGFuY2Uuc2V0UmF3VmFsdWUocHJldmlvdXNWYWx1ZSk7XG5cbiAgICAgICAgICAgIC8vIHBhcnNlIG51bWJlclxuICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gdGhpcy5wYXJzZU51bWJlcih0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGxhY2Vob2xkZXIgfHwgdW5kZWZpbmVkLCBsb2NhbGVVcGRhdGVkKTtcbiAgICAgICAgICAgIC8vIHNldCBwbGFjZWhvbGRlciBpbiBjYXNlIG5vbmUgaXMgcHJvdmlkZWRcbiAgICAgICAgICAgIHRoaXMuc2V0UGxhY2Vob2xkZXJBdHRyaWJ1dGUobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIGZ1bmN0aW9uIG9mIHRoZSBDbGVhdmUgaW5zdGFuY2UgdGhhdCBpcyBpbnZva2VkIHdoZW4gdmFsdWUgaXMgY2hhbmdlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudCB0eXBlIG9mIENsZWF2ZUV2ZW50T25DaGFuZ2VcbiAgICAgKi9cbiAgICBwcml2YXRlIG9uVmFsdWVDaGFuZ2VkKGV2ZW50OiBDbGVhdmVFdmVudE9uQ2hhbmdlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBldmVudDtcblxuICAgICAgICBpZiAodGhpcy5maWxsRnJhY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlGcmFjdGlvbkZpbGwodGFyZ2V0LnJhd1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKE51bWJlci5wYXJzZUZsb2F0KHRhcmdldC5yYXdWYWx1ZSkpO1xuICAgICAgICAvLyBmaWxsIGxlYWRpbmcgemVyb1xuICAgICAgICBpZiAodGhpcy5sZWFkaW5nWmVybykge1xuICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMubGVhZGluZ1plcm8gPiB0aGlzLmRpZ2l0cyAmJiB0aGlzLmRpZ2l0cyA+IDAgPyB0aGlzLmRpZ2l0cyA6IHRoaXMubGVhZGluZ1plcm87XG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLnBhZFplcm8oZXZlbnQudGFyZ2V0LnJhd1ZhbHVlLCBzaXplKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJlc3BvbnNpYmxlIHRvIGV4dHJhY3QgYWxsIGxvY2FsZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gYnVpbGQgQ2xlYXZlT3B0aW9ucyByZWxhdGVkIHRvIG51bWJlciBmb3JtYXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWQgVGhlIGlkIG9mIHRoZSBsb2NhbGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldENsZWF2ZU9wdHNCYXNlZE9uTG9jYWxlKGlkOiBzdHJpbmcpOiBDbGVhdmVPcHRpb25zIHtcbiAgICAgICAgaWYgKCFpZCB8fCBpZCA9PT0gJycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTG9jYWxlIGlkIGNhbm5vdCBiZSBlbXB0eSBvciB1bmRlZmluZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRzOiBDbGVhdmVPcHRpb25zID0ge1xuICAgICAgICAgICAgbnVtZXJhbDogdHJ1ZSxcbiAgICAgICAgICAgIGRlbGltaXRlcjogZ2V0TG9jYWxlTnVtYmVyU3ltYm9sKGlkLCBOdW1iZXJTeW1ib2wuR3JvdXApLFxuICAgICAgICAgICAgbnVtZXJhbERlY2ltYWxNYXJrOiBnZXRMb2NhbGVOdW1iZXJTeW1ib2woaWQsIE51bWJlclN5bWJvbC5EZWNpbWFsKSxcbiAgICAgICAgICAgIG51bWVyYWxEZWNpbWFsU2NhbGU6IHRoaXMuZnJhY3Rpb25EaWdpdHMsXG4gICAgICAgICAgICBudW1lcmFsSW50ZWdlclNjYWxlOiB0aGlzLmRpZ2l0cyxcbiAgICAgICAgICAgIG51bWVyYWxUaG91c2FuZHNHcm91cFN0eWxlOiB0aGlzLm5vRm9ybWF0ID8gJ25vbmUnIDogJ3Rob3VzYW5kJywgLy8gVE9ETzogaW1wbGVtZW50IGJhc2VkIG9uIGxvY2FsZVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB7IC4uLnRoaXMub3B0aW9ucywgLi4ub3B0cyB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIGZpbGwgb2YgZGVjaW1hbCBwYXJ0IHdpdGggemVyb3MgaW4gY2FzZSBkZWNpbWFsIHBhcnQgb2YgZ2l2ZW4gbnVtYmVyIGhhc1xuICAgICAqIHNpemUgbGVzcyB0aGFuIHRoZSBtYXggZnJhY3Rpb24gZGlnaXRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIG51bWJlclxuICAgICAqIEBwYXJhbSBjbGVhdmVJbnN0YW5jZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBhcHBseUZyYWN0aW9uRmlsbChudW1iZXI6IHN0cmluZywgY2xlYXZlSW5zdGFuY2U6IENsZWF2ZUluc3RhbmNlID0gdGhpcy5jbGVhdmVJbnN0YW5jZSk6IHZvaWQge1xuICAgICAgICAvLyBpZiBmaWxsIGZyYWN0aW9uIGlzIGVuYWJsZWQgYW5kIHRoZXJlJ3MgY2xlYXZlIGluc3RhbmNlXG4gICAgICAgIGlmICh0aGlzLmZpbGxGcmFjdGlvbikge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xlYXZlSW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICBudW1iZXIgPSBudW1iZXI/LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gJycgfHwgIW51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGhhc0RlY2ltYWwgPSBudW1iZXIuc3BsaXQoJy4nKS5sZW5ndGggPiAxO1xuICAgICAgICAgICAgICAgIC8vIGluIGNhc2UgdGhlcmUncyBhbHJlYWR5IGRlY2ltYWwgcG9pbnQgaW4gbnVtYmVyXG4gICAgICAgICAgICAgICAgaWYgKGhhc0RlY2ltYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVjaW1hbFNpemUgPSBudW1iZXIuc3BsaXQoJy4nKVsxXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHNpemUgb2YgZGVjaW1hbCBwYXJ0IG9mIG51bWJlciBpcyBsZXNzIHRoYW4gdGhlIG1heCBmcmFjdGlvbiBkaWdpdHNcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2ltYWxTaXplIDwgdGhpcy5fZnJhY3Rpb25EaWdpdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciA9IG51bWJlciArIG5ldyBBcnJheSh0aGlzLl9mcmFjdGlvbkRpZ2l0cyAtIGRlY2ltYWxTaXplKS5maWxsKDApLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXZlSW5zdGFuY2Uuc2V0UmF3VmFsdWUobnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShwb3MsIHBvcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gaW4gY2FzZSB0aGVyZSdzIG5vdCwgZm9yY2UgaXQgYnkgZmlsbGluZyBpdCBhcyBtdWNoIHplcm8gYXMgdGhlIGZyYWN0aW9uIGRpZ2l0c1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5mcmFjdGlvbkRpZ2l0cyA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyID0gYCR7bnVtYmVyfS4ke25ldyBBcnJheSh0aGlzLl9mcmFjdGlvbkRpZ2l0cykuZmlsbCgwKS5qb2luKCcnKX1gO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3MgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgIGNsZWF2ZUluc3RhbmNlLnNldFJhd1ZhbHVlKG51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShwb3MsIHBvcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIGEgZ2l2ZW4gZm9ybWF0dGVkIG51bWJlciBhbmQgcmV0dXJucyBpdCBhcyBhIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgZm9ybWF0dGVkIG51bWJlciB5b3Ugd2FudCB0byBwYXJzZSBlLmcuIDExMSw4ODguMjJcbiAgICAgKiBAcGFyYW0gdXNlclByZXZMb2NhbGVTdGF0ZSBVc2UgcHJldmlvdXMgbG9jYWxlIHN0YXRlIHRvIHBhcnNlIHRoZSB2YWx1ZS4gQnkgZGVmYXVsdCwgaXMgZmFsc2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcGFyc2VOdW1iZXIodmFsdWU6IHN0cmluZywgdXNlclByZXZMb2NhbGVTdGF0ZSA9IGZhbHNlKTogbnVtYmVyIHtcbiAgICAgICAgLy8gbG9jYWxlIHN0YXRlXG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IHVzZXJQcmV2TG9jYWxlU3RhdGUgPyB0aGlzLmxvY2FsZVNlcnZpY2U/LnByZXZpb3VzTG9jYWxlIDogdGhpcy5sb2NhbGVTZXJ2aWNlPy5jdXJyZW50TG9jYWxlIHx8IHRoaXMubG9jYWxlX2lkO1xuICAgICAgICAvLyBnZXQgZGVjaW1hbCBhbmQgZ3JvdXAgc3ltYm9sc1xuICAgICAgICBjb25zdCBkZWNpbWFsU3ltYm9sID0gZ2V0TG9jYWxlTnVtYmVyU3ltYm9sKGxvY2FsZSwgTnVtYmVyU3ltYm9sLkRlY2ltYWwpO1xuICAgICAgICBjb25zdCBncm91cFN5bWJvbCA9IGdldExvY2FsZU51bWJlclN5bWJvbChsb2NhbGUsIE51bWJlclN5bWJvbC5Hcm91cCk7XG4gICAgICAgIC8vIHJlcGxhY2Ugc3ltYm9scyB0byBwYXJzZSBudW1iZXJcbiAgICAgICAgY29uc3QgcGFyc2VkTnVtYmVyID0gdmFsdWU/LnNwbGl0KGdyb3VwU3ltYm9sKS5qb2luKCcnKS5zcGxpdChkZWNpbWFsU3ltYm9sKS5qb2luKCcuJyk7XG4gICAgICAgIHJldHVybiBOdW1iZXIucGFyc2VGbG9hdChwYXJzZWROdW1iZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhZCBsZWFkaW5nIHplcm8gdG8gdGhlIG51bWJlclxuICAgICAqXG4gICAgICogQHBhcmFtIG51bSBUaGUgbnVtYmVyIHRvIGFkZCBsZWFkaW5nIHplcm8gdG9cbiAgICAgKiBAcGFyYW0gc2l6ZSBOdW1iZXIgb2YgbnVtYmVyJ3MgbGVhZGluZyB6ZXJvXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhZFplcm8obnVtLCBzaXplKTogc3RyaW5nIHtcbiAgICAgICAgbnVtID0gbnVtLnRvU3RyaW5nKCk7XG4gICAgICAgIC8vIGdldCBpbnRlZ2VyIGFuZCBkZWNpbWFsIHBhcnRcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgICAgICBsZXQgW2ludGVnZXIsIGRlY2ltYWxdID0gbnVtLnNwbGl0KCcuJyk7XG4gICAgICAgIHdoaWxlIChpbnRlZ2VyLmxlbmd0aCA8IHNpemUpIHtcbiAgICAgICAgICAgIGludGVnZXIgPSAnMCcgKyBpbnRlZ2VyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWNpbWFsID8gYCR7aW50ZWdlcn0uJHtkZWNpbWFsfWAgOiBpbnRlZ2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNoZWNrcyB3aGV0aGVyIHRoZSBtaW4gc3ltYm9sIGlzIGFsbG93ZWQuIEl0IGlzIGFsbG93ZWQgd2hlbiBtaW51cyBzeW1ib2xcbiAgICAgKiBwcm92aWRlZCBhbmQgbWluIGlucHV0IGlzIHVuZGVmaW5lZCBvciBtaW4gcHJvdmlkZWQgYW5kIGlzIG5lZ2F0aXZlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHN0cmluZyBjb21pbmcgZnJvbSBhbiBldmVudFxuICAgICAqL1xuICAgIHByaXZhdGUgaXNNaW51c0FsbG93ZWQoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLm1pbiB8fCB0aGlzLm1pbiA8IDAgPyBrZXkgIT09ICctJyA6IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY2hlY2sgd2hldGhlciB0aGUga2V5IGVudGVyZWQgaXMgaW5zaWRlIHRoZSBtaW4gYW5kXG4gICAgICogbWF4IHJhbmdlLiBSZXR1cm5zIHRydWUgaWYgaXQncyBvdXQgb2YgcmFuZ2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZSBBIGtleWJvYXJkIGV2ZW50XG4gICAgICovXG4gICAgcHJpdmF0ZSBpc091dFNpZGVSYW5nZShlOiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5jbGVhdmVJbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGdldCBjYXJldCBwb3NpdGlvblxuICAgICAgICBjb25zdCBwb3MgPSBlLnRhcmdldFsnc2VsZWN0aW9uU3RhcnQnXTtcbiAgICAgICAgLy8gZ2V0IGNhcmV0IHBvc2l0aW9uIChpbiBjYXNlIHRoZXJlJ3MgdGV4dCBzZWxlY3RlZClcbiAgICAgICAgY29uc3QgZW5kUG9zID0gZS50YXJnZXRbJ3NlbGVjdGlvbkVuZCddO1xuICAgICAgICAvLyBnZXQgY3VycmVudCB2YWx1ZSAoZm9ybWF0dGVkKVxuICAgICAgICBsZXQgdmFsdWUgPSBlLnRhcmdldFsndmFsdWUnXTtcbiAgICAgICAgLy8gcmVtb3ZlIGtleSBmcm9tIHZhbHVlXG4gICAgICAgIGlmIChlLmtleSA9PT0gJ0RlbGV0ZScgfHwgZS5rZXkgPT09ICdCYWNrc3BhY2UnKSB7XG4gICAgICAgICAgICAvLyBjaGVjayBpZiB0aGVyZSdzIHNlbGVjdGlvbiBvZiB0ZXh0IHRvIGJlIHJlbW92ZWRcbiAgICAgICAgICAgIGlmIChwb3MgIT09IGVuZFBvcykge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gZS50YXJnZXRbJ3ZhbHVlJ10uc3Vic3RyaW5nKDAsIHBvcykgKyBlLnRhcmdldFsndmFsdWUnXS5zdWJzdHJpbmcoZW5kUG9zLCBlLnRhcmdldFsndmFsdWUnXS5sZW5ndGgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGUudGFyZ2V0Wyd2YWx1ZSddLnN1YnN0cmluZygwLCBwb3MgLSAxKSArIGUudGFyZ2V0Wyd2YWx1ZSddLnN1YnN0cmluZyhlbmRQb3MsIGUudGFyZ2V0Wyd2YWx1ZSddLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBhZGQga2V5IHRvIHRoZSB2YWx1ZVxuICAgICAgICAgICAgdmFsdWUgPSBbdmFsdWUuc2xpY2UoMCwgcG9zKSwgZS5rZXksIHZhbHVlLnNsaWNlKGVuZFBvcyldLmpvaW4oJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY3JlYXRlIGEgQ2xlYXZlIGluc3RhbmNlIHRvIGV4dHJhY3QgdGhlIG51bWJlciBmcm9tIGZvcm1hdHRlZCB2YWx1ZVxuICAgICAgICBjb25zdCBjbGVhdmU6IENsZWF2ZUluc3RhbmNlID0gbmV3IENsZWF2ZSh0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0JyksIHsgLi4udGhpcy5vcHRpb25zIH0pO1xuICAgICAgICBjbGVhdmUuc2V0UmF3VmFsdWUodmFsdWUpO1xuICAgICAgICBjb25zdCBudW1iZXIgPSBOdW1iZXIoY2xlYXZlLmdldFJhd1ZhbHVlKCkpO1xuICAgICAgICAvLyBkZXN0cm95IGNsZWF2ZSBpbnN0YW5jZVxuICAgICAgICBjbGVhdmUuZGVzdHJveSgpO1xuICAgICAgICByZXR1cm4gdGhpcy5taW4gPj0gMCA/IGZhbHNlIDogdGhpcy5taW4gPiBudW1iZXIgfHwgdGhpcy5tYXggPCBudW1iZXI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVjaW1hbCBhZGp1c3RtZW50IG9mIGEgbnVtYmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtICB2YWx1ZSBUaGUgbnVtYmVyLlxuICAgICAqIEBwYXJhbSBleHAgICBUaGUgZXhwb25lbnQgKHRoZSAxMCBsb2dhcml0aG0gb2YgdGhlIGFkanVzdG1lbnQgYmFzZSkuXG4gICAgICogQHJldHVybnMgVGhlIGFkanVzdGVkIHZhbHVlLlxuICAgICAqL1xuICAgIHByaXZhdGUgZGVjaW1hbEFkanVzdCh2YWx1ZTogbnVtYmVyLCBleHA6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIC8vIElmIHRoZSBleHAgaXMgdW5kZWZpbmVkIG9yIHplcm8uLi5cbiAgICAgICAgaWYgKHR5cGVvZiBleHAgPT09ICd1bmRlZmluZWQnIHx8ICtleHAgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZSA9ICt2YWx1ZTtcbiAgICAgICAgZXhwID0gK2V4cDtcbiAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIG5vdCBhIG51bWJlciBvciB0aGUgZXhwIGlzIG5vdCBhbiBpbnRlZ2VyLi4uXG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkgfHwgISh0eXBlb2YgZXhwID09PSAnbnVtYmVyJyAmJiBleHAgJSAxID09PSAwKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICAvLyBTaGlmdFxuICAgICAgICBsZXQgY2xlYW5lZCA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJ2UnKTtcbiAgICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKCsoY2xlYW5lZFswXSArICdlJyArIChjbGVhbmVkWzFdID8gK2NsZWFuZWRbMV0gLSBleHAgOiAtZXhwKSkpO1xuICAgICAgICAvLyBTaGlmdCBiYWNrXG4gICAgICAgIGNsZWFuZWQgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KCdlJyk7XG4gICAgICAgIHJldHVybiArKGNsZWFuZWRbMF0gKyAnZScgKyAoY2xlYW5lZFsxXSA/ICtjbGVhbmVkWzFdICsgZXhwIDogZXhwKSk7XG4gICAgfVxufVxuIl19
|
|
589
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLWlucHV0LW51bWJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9ldWktaW5wdXQtbnVtYmVyL2V1aS1pbnB1dC1udW1iZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxRQUFRLEVBQ1IsU0FBUyxFQUNULE1BQU0sRUFFTixTQUFTLEVBR1QsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBTUwsaUJBQWlCLEdBRXBCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBNkIsTUFBTSx1QkFBdUIsQ0FBQztBQUUvRyxPQUFPLE1BQU0sTUFBTSxXQUFXLENBQUM7QUFFL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBNEMzQyxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsY0FBYztJQTBHdkQsWUFDYyxXQUF1QixFQUN2QixTQUFvQixFQUN0QixFQUFxQixFQUNULGFBQTRCLEVBQ3JCLFNBQWlCLEVBQzVDLFFBQWtCLEVBQ1EsUUFBa0I7UUFFNUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFSOUIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUN0QixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNULGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQ3JCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFFbEIsYUFBUSxHQUFSLFFBQVEs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QUksa0JBQ3JCO3dCQUNaOzRCQUNJLFNBQVMsRUFBRSxxQkFBcUI7NEJBQ2hDLE1BQU0sRUFBRSxDQUFDLGNBQWMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDO3lCQUNuRDt3QkFDRDs0QkFDSSxTQUFTLEVBQUUsbUJBQW1COzRCQUM5QixNQUFNLEVBQUUsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDO3lCQUNyQztxQkFDSixRQUVLO3dCQUNGLFFBQVEsRUFBRSxhQUFhO3FCQUMxQjs7MEJBZ0hJLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsU0FBUzs7MEJBRWhCLE1BQU07MkJBQUMsUUFBUTs0Q0E1R1QsR0FBRztzQkFEYixLQUFLO2dCQVdLLEdBQUc7c0JBRGIsS0FBSztnQkFXSyxXQUFXO3NCQURyQixLQUFLO2dCQVFLLFNBQVM7c0JBRG5CLEtBQUs7Z0JBU0ssVUFBVTtzQkFEcEIsV0FBVzt1QkFBQyxPQUFPO2dCQU9oQixjQUFjO3NCQURqQixLQUFLO2dCQVNGLE1BQU07c0JBRFQsS0FBSztnQkFRRixZQUFZO3NCQURmLEtBQUs7Z0JBU0YsT0FBTztzQkFEVixLQUFLO2dCQVlGLFFBQVE7c0JBRFgsS0FBSztnQkFRRyxVQUFVO3NCQUFsQixLQUFLO2dCQUM4QixJQUFJO3NCQUF2QyxXQUFXO3VCQUFDLFdBQVc7Z0JBQ2YsS0FBSztzQkFBYixLQUFLO2dCQWtJTixPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXVCdkIsU0FBUztzQkFEbEIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBMkN6QixVQUFVO3NCQURuQixZQUFZO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIE9wdGlvbmFsLFxuICAgIExPQ0FMRV9JRCxcbiAgICBJbmplY3QsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERvQ2hlY2ssXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgSW5qZWN0b3IsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYWxlU2VydmljZSwgTG9jYWxlU3RhdGUgfSBmcm9tICdAZXVpL2NvcmUnO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5LCBjb2VyY2VOdW1iZXJQcm9wZXJ0eSwgQm9vbGVhbklucHV0LCBOdW1iZXJJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyB0eXBlIENsZWF2ZU9wdGlvbnMgfSBmcm9tICdjbGVhdmUuanMvb3B0aW9ucyc7XG5pbXBvcnQgQ2xlYXZlIGZyb20gJ2NsZWF2ZS5qcyc7XG5pbXBvcnQgeyBDbGVhdmVFdmVudE9uQ2hhbmdlIH0gZnJvbSAnLi9tb2RlbHMvY2xlYXZlLWV2ZW50LW9uY2hhbmdlLm1vZGVsJztcbmltcG9ydCB7IElucHV0RGlyZWN0aXZlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL3NoYXJlZCc7XG5pbXBvcnQgeyBET0NVTUVOVCwgZ2V0TG9jYWxlTnVtYmVyU3ltYm9sLCBOdW1iZXJTeW1ib2wgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRXVpQ2xlYXJhYmxlRGlyZWN0aXZlLCBFdWlMb2FkaW5nRGlyZWN0aXZlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENsZWF2ZUluc3RhbmNlIGV4dGVuZHMgQ2xlYXZlIHtcbiAgICBpbml0U3dhcEhpZGRlbklucHV0PzogKCkgPT4gdm9pZDtcbiAgICBpbml0TnVtZXJhbEZvcm1hdHRlcj86ICgpID0+IHZvaWQ7XG4gICAgaW5pdFRpbWVGb3JtYXR0ZXI/OiAoKSA9PiB2b2lkO1xuICAgIGluaXREYXRlRm9ybWF0dGVyPzogKCkgPT4gdm9pZDtcbiAgICBpbml0UGhvbmVGb3JtYXR0ZXI/OiAoKSA9PiB2b2lkO1xuICAgIHVwZGF0ZUNyZWRpdENhcmRQcm9wc0J5VmFsdWU/OiAoKSA9PiB2b2lkO1xuICAgIHVwZGF0ZVZhbHVlU3RhdGU/OiAoKSA9PiB2b2lkO1xuICAgIGNhbGxPblZhbHVlQ2hhbmdlZD86ICgpID0+IHZvaWQ7XG4gICAgb25DaGFuZ2U/OiAoZXZlbnQ/OiBFdmVudCkgPT4gdm9pZDtcbiAgICBvbkN1dD86IChldmVudD86IEV2ZW50KSA9PiB2b2lkO1xuICAgIG9uRm9jdXM/OiAoZXZlbnQ/OiBFdmVudCkgPT4gdm9pZDtcbiAgICBvbkNvcHk/OiAoZXZlbnQ/OiBFdmVudCkgPT4gdm9pZDtcbiAgICBvbktleURvd24/OiAoZXZlbnQ/OiBFdmVudCkgPT4gdm9pZDtcbiAgICBvbkNoYW5nZUxpc3RlbmVyPzogKGV2ZW50PzogRXZlbnQpID0+IHZvaWQ7XG4gICAgb25LZXlEb3duTGlzdGVuZXI/OiAoZXZlbnQ/OiBFdmVudCkgPT4gdm9pZDtcbiAgICBvbkZvY3VzTGlzdGVuZXI/OiAoZXZlbnQ/OiBFdmVudCkgPT4gdm9pZDtcbiAgICBvbkN1dExpc3RlbmVyPzogKGV2ZW50PzogRXZlbnQpID0+IHZvaWQ7XG4gICAgb25Db3B5TGlzdGVuZXI/OiAoZXZlbnQ/OiBFdmVudCkgPT4gdm9pZDtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ2lucHV0W2V1aUlucHV0TnVtYmVyXScsXG4gICAgc3R5bGVVcmxzOiBbJy4vc3R5bGVzL19pbmRleC5zY3NzJ10sXG4gICAgdGVtcGxhdGU6ICcnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgZGlyZWN0aXZlOiBFdWlDbGVhcmFibGVEaXJlY3RpdmUsXG4gICAgICAgICAgICBpbnB1dHM6IFsnZXVpQ2xlYXJhYmxlJywgJ3JlYWRvbmx5JywgJ2Rpc2FibGVkJ10sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZTogRXVpTG9hZGluZ0RpcmVjdGl2ZSxcbiAgICAgICAgICAgIGlucHV0czogWydldWlMb2FkaW5nJywgJ3JlYWRvbmx5J10sXG4gICAgICAgIH0sXG4gICAgXSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWhvc3QtbWV0YWRhdGEtcHJvcGVydHlcbiAgICBob3N0OiB7XG4gICAgICAgICcoYmx1ciknOiAnb25Ub3VjaGVkKCknLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIEV1aUlucHV0TnVtYmVyQ29tcG9uZW50IGV4dGVuZHMgSW5wdXREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgRG9DaGVjaywgT25DaGFuZ2VzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbWluaW11bSBudW1iZXIgY2FuIGJlIGVudGVyZWQuIEJsb2NrcyB1c2VyJ3MgaW5wdXQgaWYgbm90IGluIHJhbmdlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBtaW4oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21pbjtcbiAgICB9XG4gICAgcHVibGljIHNldCBtaW4odmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgICAgIHRoaXMuX21pbiA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIG1heGltdW0gbnVtYmVyIGNhbiBiZSBlbnRlcmVkLiBCbG9ja3MgdXNlcidzIGlucHV0IGlmIG5vdCBpbiByYW5nZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgbWF4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXg7XG4gICAgfVxuICAgIHB1YmxpYyBzZXQgbWF4KHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgICAgICB0aGlzLl9tYXggPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIC8qKiBBZGRzIGxlYWRpbmcgemVybyB0byBhIG51bWJlci4gRm9ybWF0dGluZyB3aWxsIG5vdCB3b3JrLlxuICAgICAqICAgICAgZS5nLiB3aXRoIGxlYWRpbmdaZXJvPTMgaW5wdXQgbnVtYmVyIDUgPT4gMDA1XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGxlYWRpbmdaZXJvKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWFkaW5nWmVybztcbiAgICB9XG4gICAgcHVibGljIHNldCBsZWFkaW5nWmVybyh2YWx1ZTogTnVtYmVySW5wdXQpIHtcbiAgICAgICAgdGhpcy5fbGVhZGluZ1plcm8gPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBpc0ludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0ludmFsaWQgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGlzSW52YWxpZChzdGF0ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuc2V0SW52YWxpZChzdGF0ZSk7XG4gICAgfVxuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICAgIHB1YmxpYyBnZXQgY3NzQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gW3N1cGVyLmdldENzc0NsYXNzZXMoJ2V1aS1pbnB1dC1udW1iZXInKSwgdGhpcy5faXNJbnZhbGlkID8gJ2V1aS1pbnB1dC1udW1iZXItLWludmFsaWQnIDogJyddLmpvaW4oJyAnKS50cmltKCk7XG4gICAgfVxuXG4gICAgLyoqIGhvdyBtYW55IGRpZ2l0cyBmb3IgdGhlIGRlY2ltYWwgcGFydCAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGZyYWN0aW9uRGlnaXRzKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mcmFjdGlvbkRpZ2l0cztcbiAgICB9XG4gICAgc2V0IGZyYWN0aW9uRGlnaXRzKHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgICAgICB0aGlzLl9mcmFjdGlvbkRpZ2l0cyA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgLyoqIGhvdyBtYW55IGRpZ2l0cyBmb3IgdGhlIGludGVnZXIgcGFydCAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGRpZ2l0cygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlnaXRzO1xuICAgIH1cbiAgICBzZXQgZGlnaXRzKHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgICAgICB0aGlzLl9kaWdpdHMgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGZpbGxGcmFjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGxGcmFjdGlvbjtcbiAgICB9XG4gICAgc2V0IGZpbGxGcmFjdGlvbih2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2ZpbGxGcmFjdGlvbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIC8qKiByb3VuZHMgYSBudW1iZXIgd2l0aCBtb3JlIHRoYW4gdHdvIGRlY2ltYWxzIFVQICovXG4gICAgQElucHV0KClcbiAgICBnZXQgcm91bmRVcCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm91bmRVcDtcbiAgICB9XG4gICAgc2V0IHJvdW5kVXAodmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgICAgIHRoaXMuX3JvdW5kVXAgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByb3RlY3RlZCBfaXNJbnZhbGlkOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIGRvZXMgbm90IGZvcm1hdCB0aGUgYW5kIGRvIGEgdGhvdXNhbmQgZ3JvdXBpbmcgb2YgbnVtYmVyXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBnZXQgbm9Gb3JtYXQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub0Zvcm1hdDtcbiAgICB9XG4gICAgc2V0IG5vRm9ybWF0KHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fbm9Gb3JtYXQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgX25vRm9ybWF0OiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHN0eWxlQ2xhc3M6IHN0cmluZztcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIudHlwZScpIHByb3RlY3RlZCB0eXBlID0gJ2V1aS1udW1iZXInO1xuICAgIEBJbnB1dCgpIHZhbHVlOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9yb3VuZFVwOiBudW1iZXI7XG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcHVibGljIG9uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQ7XG4gICAgY2xlYXZlSW5zdGFuY2U6IENsZWF2ZUluc3RhbmNlO1xuICAgIHByaXZhdGUgX21pbjogbnVtYmVyO1xuICAgIHByaXZhdGUgX21heDogbnVtYmVyO1xuXG4gICAgcHJpdmF0ZSBfbGVhZGluZ1plcm8gPSAwO1xuICAgIC8qKiBob2xkcyBpbnN0YW5jZSBvZiBjbGVhdmUgKi9cbiAgICAvKiogb3B0aW9ucyBmb3IgdGhlIENsZWF2ZSBpbnN0YW5jZSAqL1xuICAgIHByaXZhdGUgb3B0aW9uczogQ2xlYXZlT3B0aW9ucztcbiAgICBwcml2YXRlIF9mcmFjdGlvbkRpZ2l0cyA9IDA7XG4gICAgcHJpdmF0ZSBfZGlnaXRzOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfZmlsbEZyYWN0aW9uOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJvdGVjdGVkIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBsb2NhbGVTZXJ2aWNlOiBMb2NhbGVTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KExPQ0FMRV9JRCkgcHJpdmF0ZSBsb2NhbGVfaWQ6IHN0cmluZyxcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCxcbiAgICApIHtcbiAgICAgICAgc3VwZXIoX2VsZW1lbnRSZWYsIF9yZW5kZXJlciwgaW5qZWN0b3IpO1xuXG4gICAgICAgIC8vIHNldCBkZWZhdWx0IG9wdGlvbnNcbiAgICAgICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgICAgICAgbnVtZXJhbDogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgICAgICB0aGlzLmNvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wsIHVuZGVmaW5lZCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAgICAgICAvLyBpbnN0YW50aWF0ZSBjbGVhdmVcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdENsZWF2ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc3Vic2NyaWJlIHRvIGxvY2FsaXphdGlvbiBzZXJ2aWNlIGFuZCBsaXN0ZW4gZm9yIGxvY2FsZSBjaGFuZ2UuIERlLWNvbnN0cnVjdGlvbiBvZiBsb2NhbGUgc2hvdWxkIGhhcHBlbiBoZXJlIVxuICAgICAgICB0aGlzLmxvY2FsZVNlcnZpY2U/LmdldFN0YXRlKCkuc3Vic2NyaWJlKChzdGF0ZTogTG9jYWxlU3RhdGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuZ2V0Q2xlYXZlT3B0c0Jhc2VkT25Mb2NhbGUoc3RhdGU/LmlkKTtcblxuICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBvcHRpb25zIG9uIHRoZSBjbGVhdmUgaW5zdGFuY2VcbiAgICAgICAgICAgIHRoaXMudXBkYXRlT3B0aW9ucyh0cnVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAncm9vdENsYXNzTmFtZScsICdldWktaW5wdXQtbnVtYmVyJyk7XG4gICAgfVxuXG4gICAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sLCB1bmRlZmluZWQsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0ludmFsaWQgPSB0aGlzLmNvbnRyb2wgPyB0aGlzLmNvbnRyb2wuaW52YWxpZCAmJiB0aGlzLmNvbnRyb2wudG91Y2hlZCA6IHRoaXMuX2lzSW52YWxpZDtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChPYmplY3QuaGFzT3duKGNoYW5nZXMsICd2YWx1ZScpKSB7XG4gICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xlYXZlSW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWF2ZUluc3RhbmNlLnNldFJhd1ZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3QuaGFzT3duKGNoYW5nZXMsICdmcmFjdGlvbkRpZ2l0cycpKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB7IC4uLnRoaXMub3B0aW9ucywgbnVtZXJhbERlY2ltYWxTY2FsZTogdGhpcy5mcmFjdGlvbkRpZ2l0cyB9O1xuICAgICAgICAgICAgdGhpcy51cGRhdGVPcHRpb25zKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE9iamVjdC5oYXNPd24oY2hhbmdlcywgJ25vRm9ybWF0JykpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IHsgLi4udGhpcy5vcHRpb25zLCBudW1lcmFsVGhvdXNhbmRzR3JvdXBTdHlsZTogdGhpcy5ub0Zvcm1hdCA/ICdub25lJyA6ICd0aG91c2FuZCcgfTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlT3B0aW9ucygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3QuaGFzT3duKGNoYW5nZXMsICdmaWxsRnJhY3Rpb24nKSAmJiB0aGlzLmNsZWF2ZUluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5RnJhY3Rpb25GaWxsKHRoaXMuY2xlYXZlSW5zdGFuY2UuZ2V0UmF3VmFsdWUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE9iamVjdC5oYXNPd24oY2hhbmdlcywgJ2RpZ2l0cycpKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB7IC4uLnRoaXMub3B0aW9ucywgbnVtZXJhbEludGVnZXJTY2FsZTogdGhpcy5kaWdpdHMgfTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlT3B0aW9ucygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3QuaGFzT3duKGNoYW5nZXMsICdtaW4nKSkge1xuICAgICAgICAgICAgaWYgKGNoYW5nZXNbJ21pbiddLmN1cnJlbnRWYWx1ZSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2xlYXZlSW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGFrZSBjYXJlIG9mIHRoZSBzaWduIHN5bWJvbFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWF2ZUluc3RhbmNlLnNldFJhd1ZhbHVlKE1hdGguYWJzKE51bWJlcih0aGlzLmNsZWF2ZUluc3RhbmNlLmdldFJhd1ZhbHVlKCkpKS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE9iamVjdC5oYXNPd24oY2hhbmdlcywgJ3JvdW5kVXAnKSkge1xuICAgICAgICAgICAgaWYgKGNoYW5nZXNbJ3JvdW5kVXAnXS5jdXJyZW50VmFsdWUgPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2xlYXZlSW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG51bWJlciA9IE51bWJlci5wYXJzZUZsb2F0KHRoaXMuY2xlYXZlSW5zdGFuY2UuZ2V0UmF3VmFsdWUoKSk7XG4gICAgICAgICAgICAgICAgICAgIG51bWJlciA9IHRoaXMuZGVjaW1hbEFkanVzdChudW1iZXIsIHRoaXMucm91bmRVcCAqIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5zZXRSYXdWYWx1ZShudW1iZXIudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIC8vIGRlc3Ryb3kgY2xlYXZlIGluc3RhbmNlXG4gICAgICAgIGlmICh0aGlzLmNsZWF2ZUluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWF2ZUluc3RhbmNlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIG9uQ2hhbmdlOiBhbnkgPSAoXzogYW55KTogdm9pZCA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wgJiYgKF8gIT09IG51bGwgfHwgXyAhPT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgICAgLy8gcGFyc2UgbnVtYmVyXG4gICAgICAgICAgICAvLyBjb25zdCB2YWx1ZSA9IE51bWJlcihfKTtcbiAgICAgICAgICAgIC8vIHJ1biBvbiBuZXh0IE1pY3JvVGFzayB0byBhdm9pZCBORzAxMDAgZXJyb3IgVE9ETzogZGVlcGVyIGludmVzdGlnYXRpb25cbiAgICAgICAgICAgIC8vIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gdGhpcy5jb250cm9sLnZpZXdUb01vZGVsVXBkYXRlKHZhbHVlKSk7XG4gICAgICAgICAgICAvLyBpbiBjYXNlIGNvbnRyb2wgaXMgRm9ybUNvbnRyb2xcbiAgICAgICAgICAgIC8vIHRoaXMuY29udHJvbD8uY29udHJvbC5zZXRWYWx1ZShpc05hTih2YWx1ZSkgPyBudWxsIDogdmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSwgZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgb25Ub3VjaGVkOiBhbnkgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuY29udHJvbD8uY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgfTtcblxuICAgIEBIb3N0TGlzdGVuZXIoJ3Bhc3RlJywgWyckZXZlbnQnXSlcbiAgICBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICAvLyBnZXQgdGhlIHZhbHVlIGZyb20gY2xpcGJvYXJkXG4gICAgICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LmNsaXBib2FyZERhdGEgfHwgd2luZG93WydjbGlwYm9hcmREYXRhJ10pLmdldERhdGEoJ3RleHQnKTtcbiAgICAgICAgLy8gaW4gY2FzZSByb3VuZCBVUCBpcyBlbmFibGVkXG4gICAgICAgIGlmICh0aGlzLl9yb3VuZFVwID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZGl2ID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgLy8gY3JlYXRlIGEgY2xvbmUgb2YgY2xlYXZlSW5zdGFuY2VcbiAgICAgICAgICAgIGNvbnN0IGNsb25lSW5zdGFuY2U6IENsZWF2ZUluc3RhbmNlID0gbmV3IENsZWF2ZShkaXYsIHsgLi4udGhpcy5vcHRpb25zLCBudW1lcmFsRGVjaW1hbFNjYWxlOiA4IH0pO1xuICAgICAgICAgICAgY2xvbmVJbnN0YW5jZS5zZXRSYXdWYWx1ZSh2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIGxldCBudW1iZXIgPSBOdW1iZXIucGFyc2VGbG9hdChjbG9uZUluc3RhbmNlLmdldFJhd1ZhbHVlKCkpO1xuICAgICAgICAgICAgbnVtYmVyID0gdGhpcy5kZWNpbWFsQWRqdXN0KG51bWJlciwgdGhpcy5yb3VuZFVwICogLTEpO1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obnVtYmVyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXZlSW5zdGFuY2Uuc2V0UmF3VmFsdWUobnVtYmVyLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IGludmVzdGlnYXRlIGluIHRoZSBmdXR1cmUgaG93IGNhbiB0aGlzIGJlIGF2b2lkZWRcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy53cml0ZVZhbHVlKG51bWJlci50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIHByb3RlY3RlZCBvbktleURvd24oZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICAvLyBjaGVjayBpZiBpdCdzIGEgc2luZ2xlIHN5bWJvbCBhbmQgbm90IFNwZWNpYWwgbGlrZSAoQ3RybCwgYmFja3NwYWNlIGV0YylcbiAgICAgICAgaWYgKGU/LmtleT8ubGVuZ3RoIDw9IDEgJiYgIWUuY3RybEtleSAmJiAhZS5hbHRLZXkgJiYgIWUubWV0YUtleSkge1xuICAgICAgICAgICAgLy8gc3RvcCBldmVudCBwcm9wYWdhdGlvbiBpZiBrZXkgcHJlc3NlZCBpcyBub3QgYSBudW1iZXIgb3IgbG9jYWxlIGNoYXJhY3RlciBvciBtaW51cyBzaWduXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgTnVtYmVyLmlzTmFOKE51bWJlci5wYXJzZUludChlLmtleSwgMTApKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuaXNNaW51c0FsbG93ZWQoZS5rZXkpICYmXG4gICAgICAgICAgICAgICAgZS5rZXkgIT09IGdldExvY2FsZU51bWJlclN5bWJvbCh0aGlzLmxvY2FsZVNlcnZpY2U/LmN1cnJlbnRMb2NhbGUgfHwgdGhpcy5sb2NhbGVfaWQsIE51bWJlclN5bWJvbC5EZWNpbWFsKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgLy8gc3RvcCBldmVudCBwcm9wYWdhdGlvbiBpZiBrZXkgcHJlc3NlZCBleGNlZWRzIHRoZSBtaW4vbWF4IHZhbHVlIHJhbmdlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFOdW1iZXIuaXNOYU4oTnVtYmVyLnBhcnNlSW50KGUua2V5LCAxMCkpICYmIHRoaXMuaXNPdXRTaWRlUmFuZ2UoZSkpIHtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc091dFNpZGVSYW5nZShlKSkge1xuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gcHJvdGVjdCBkZWNpbWFsIHN5bWJvbCBkZWxldGlvbiBpbiBjYXNlIGZpbGxGcmFjdGlvbiBpcyBvblxuICAgICAgICBpZiAoZS5rZXkgPT09ICdEZWxldGUnIHx8IGUua2V5ID09PSAnQmFja3NwYWNlJykge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIC8vIHBvc2l0aW9uIG9mIGNhcmV0XG4gICAgICAgICAgICBjb25zdCBwb3MgPSBlbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICAgICAgLy8gZ2V0IGNoYXJhY3RlciBhYm91dCB0byBiZSBkZWxldGVkXG4gICAgICAgICAgICBjb25zdCBjaGFyID0gZWxlbWVudC52YWx1ZS5jaGFyQXQocG9zIC0gMSk7XG4gICAgICAgICAgICAvLyBpbiBjYXNlIHRoZSBjaGFyIGlzIHRoZSBkZWNpbWFsIHN5bWJvbCBwcmV2ZW50IGRlbGV0aW9uIGFuZCBtb3ZlIGNhcmV0IGluIGZyb250XG4gICAgICAgICAgICBpZiAoY2hhciA9PT0gZ2V0TG9jYWxlTnVtYmVyU3ltYm9sKHRoaXMubG9jYWxlU2VydmljZT8uY3VycmVudExvY2FsZSB8fCB0aGlzLmxvY2FsZV9pZCwgTnVtYmVyU3ltYm9sLkRlY2ltYWwpKSB7XG4gICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShwb3MgLSAxLCBwb3MgLSAxKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc091dFNpZGVSYW5nZShlKSkge1xuICAgICAgICAgICAgICAgIC8vIGRvbid0IGFsbG93IGluc2VydGlvbiB0aGF0IHdpbGwgcHV0IG51bWJlciBvdXQgb2YgcmFuZ2VcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2ZvY3Vzb3V0JylcbiAgICBwcm90ZWN0ZWQgb25Gb2N1c291dCgpOiB2b2lkIHtcbiAgICAgICAgLy8gaW4gY2FzZSBmaWxsRnJhY3Rpb24gZmVhdHVyZSBpcyBvbiBhbmQgdGhlcmUncyBubyBpbnRlZ2VyIHBhcnQgYWRkIGxlYWRpbmcgMFxuICAgICAgICBpZiAodGhpcy5maWxsRnJhY3Rpb24gJiYgdGhpcy5jbGVhdmVJbnN0YW5jZS5nZXRSYXdWYWx1ZSgpLm1hdGNoKC9eXFwuWzAtOV0rL2cpKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWF2ZUluc3RhbmNlLnNldFJhd1ZhbHVlKCcwJyArIHRoaXMuY2xlYXZlSW5zdGFuY2UuZ2V0UmF3VmFsdWUoKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpbiBjYXNlIHJvdW5kIFVQIGlzIGVuYWJsZWRcbiAgICAgICAgaWYgKHRoaXMuX3JvdW5kVXAgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBudW1iZXIgPSBOdW1iZXIucGFyc2VGbG9hdCh0aGlzLmNsZWF2ZUluc3RhbmNlLmdldFJhd1ZhbHVlKCkpO1xuICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5zZXRSYXdWYWx1ZSh0aGlzLmRlY2ltYWxBZGp1c3QobnVtYmVyLCB0aGlzLnJvdW5kVXAgKiAtMSkudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpbiBjYXNlIG1pbiBpcyBzZXQgYW5kIHZhbHVlIGlzIGxlc3MgdGhhbiBtaW4gcmVzZXQgdG8gdGhlIG1pbiB2YWx1ZVxuICAgICAgICBpZiAodGhpcy5taW4gJiYgTnVtYmVyLnBhcnNlRmxvYXQodGhpcy5jbGVhdmVJbnN0YW5jZS5nZXRSYXdWYWx1ZSgpKSA8IHRoaXMubWluKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWF2ZUluc3RhbmNlLnNldFJhd1ZhbHVlKHRoaXMubWluLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNldEludmFsaWQoc3RhdGU/OiBCb29sZWFuSW5wdXQpOiB2b2lkIHtcbiAgICAgICAgLy8gaW4gY2FzZSBpdCdzIGNvbnRyb2xsZWQgYnkgTmdDb250cm9sIG92ZXJyaWRlXG4gICAgICAgIHRoaXMuX2lzSW52YWxpZCA9IHRoaXMuY29udHJvbCA/IHRoaXMuY29udHJvbC5pbnZhbGlkICYmIHRoaXMuY29udHJvbC50b3VjaGVkIDogY29lcmNlQm9vbGVhblByb3BlcnR5KHN0YXRlKTtcblxuICAgICAgICAvLyBzZXQgQmFzZURpcmVjdGl2ZSBBdHRyaWJ1dGVcbiAgICAgICAgc3VwZXIuZXVpRGFuZ2VyID0gdGhpcy5faXNJbnZhbGlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBPdmVycmlkZSBzZXRQbGFjZWhvbGRlciBzZXRQbGFjZWhvbGRlckF0dHJpYnV0ZSBvZiBJbnB1dERpcmVjdGl2ZVxuICAgICAqIFVwZGF0ZXMgdGhlIHBsYWNlaG9sZGVyIHZhbHVlIGJhc2VkIG9uIGN1cnJlbnQgbnVtYmVyIGZvcm1hdCBhbmQgZ2l2ZW4gdmFsdWUuXG4gICAgICogSWYgdmFsdWUgcGFzc2VkIGNvbnRhaW5zIGNoYXJhY3RlcnMgaXQgZG9lc24ndCBmb3JtYXQgcGxhY2Vob2xkZXIuXG4gICAgICogKi9cbiAgICBwcm90ZWN0ZWQgc2V0UGxhY2Vob2xkZXJBdHRyaWJ1dGUodmFsdWU6IHN0cmluZyB8IG51bWJlciA9IDk5OTk5OS45OTk5KTogdm9pZCB7XG4gICAgICAgIC8vIGlmIHZhbHVlIGlzIGEgbnVtYmVyLCBmb3JtYXQgdGhlIHZhbHVlIGJhc2VkIG9uIGN1cnJlbnQgbnVtYmVyIGZvcm1hdFxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBkaXYgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICAvLyBjcmVhdGUgYSBjbG9uZSBvZiBjbGVhdmVJbnN0YW5jZVxuICAgICAgICAgICAgY29uc3QgY2xvbmVJbnN0YW5jZTogQ2xlYXZlSW5zdGFuY2UgPSBuZXcgQ2xlYXZlKGRpdiwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgICAgIC8vIEJFV0FSRTogYnkgdGhlIHRpbWUgeW91ciBzZXRSYXdWYWx1ZSBjbGVhdmUgb3B0aW9ucyBoYXZlIGNoYW5nZWQgdGh1cyBudW1iZXIgZm9ybWF0dGluZ1xuICAgICAgICAgICAgY2xvbmVJbnN0YW5jZS5zZXRSYXdWYWx1ZSh2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIC8vIHNldCB0aGUgdmFsdWUgd2l0aCBjdXJyZW50IGZvcm1hdCBhcyBwbGFjZWhvbGRlclxuICAgICAgICAgICAgc3VwZXIuc2V0UGxhY2Vob2xkZXJBdHRyaWJ1dGUoY2xvbmVJbnN0YW5jZS5nZXRGb3JtYXR0ZWRWYWx1ZSgpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBzdXBlci5zZXRQbGFjZWhvbGRlckF0dHJpYnV0ZSh2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgc3VwZXIuc2V0UGxhY2Vob2xkZXJBdHRyaWJ1dGUodmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBpbnN0YW50aWF0ZSBDbGVhdmUuanNcbiAgICAgKi9cbiAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwcml2YXRlIGluaXRDbGVhdmUob25DaGFuZ2VDYWxsYmFjaz86IChvYmo6IGFueSkgPT4gYW55KTogdm9pZCB7XG4gICAgICAgIC8vIGNoYW5nZSB0aGUgY2xlYXZlIHByb3RvdHlwZSBmdW5jdGlvbiB0byBpbnRlcmNlcHQgb25DdXQgY2FsbGJhY2tcbiAgICAgICAgLy8gYW5kIGFsbG93IGJhc2VkIG9uIHRoZSBldmVudCBidWJibGluZyBhbmQgZGlzYWJsZWQgc3RhdGVcbiAgICAgICAgLy8gVElQOiBjaGFuZ2UgYmVoYXZpb3Igb2Ygb25DdXQgdG8gc3RvcCBpbiBjYXNlIGJ1YmJsZSBpcyBjYW5jZWxlZFxuICAgICAgICAvLyBUT0RPOiBTZWUgcmVsZXZhbnQgaXNzdWUgaHR0cHM6Ly9naXRodWIuY29tL25vc2lyL2NsZWF2ZS5qcy9pc3N1ZXMvNjc1XG4gICAgICAgIGNvbnN0IF9vbkN1dCA9IENsZWF2ZS5wcm90b3R5cGVbJ29uQ3V0J107XG4gICAgICAgIENsZWF2ZS5wcm90b3R5cGVbJ29uQ3V0J10gPSBmdW5jdGlvbiAoZTogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnZhbGlkLXRoaXNcbiAgICAgICAgICAgIGlmICghZS5jYW5jZWxCdWJibGUgJiYgIXRoaXMuZWxlbWVudC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1pbnZhbGlkLXRoaXNcbiAgICAgICAgICAgICAgICBfb25DdXQuY2FsbCh0aGlzLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBpbiBjYXNlIG9wdGlvbnMgaXMgdW5kZWZpbmVkXG4gICAgICAgIGNvbnN0IG9wdHM6IENsZWF2ZU9wdGlvbnMgPSB7IC4uLnRoaXMub3B0aW9ucyB9O1xuXG4gICAgICAgIC8vIHNldCB0aGUgb25WYWx1ZSBjaGFuZ2UgbGlzdGVuZXIgdG8ga2VlcCB0aGUgdmFsdWUgYXQgcmVhZE9ubHkgZWxlbWVudCBpbiBzeW5jXG4gICAgICAgIG9wdHMub25WYWx1ZUNoYW5nZWQgPSBvbkNoYW5nZUNhbGxiYWNrIHx8IHRoaXMub25WYWx1ZUNoYW5nZWQuYmluZCh0aGlzKTtcblxuICAgICAgICAvLyBpbiBjYXNlIHJvdW5kIFVQIGlzIGVuYWJsZWRcbiAgICAgICAgaWYgKHRoaXMuX3JvdW5kVXAgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBudW1iZXIgPSBOdW1iZXIucGFyc2VGbG9hdCh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5kZWNpbWFsQWRqdXN0KG51bWJlciwgdGhpcy5yb3VuZFVwICogLTEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY3JlYXRlIHRoZSBDbGVhdmUgaW5zdGFuY2Ugd2l0aCB0aGUgbmV3IG9yIHVwZGF0ZWQgb3B0aW9uc1xuICAgICAgICB0aGlzLmNsZWF2ZUluc3RhbmNlID0gbmV3IENsZWF2ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIG9wdHMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGNsZWF2ZSBvcHRpb25zIGJ5IGRlc3Ryb3lpbmcgdGhlIGN1cnJlbnQgaW5zdGFuY2UgYW5kIGNyZWF0aW5nIGFub3RoZXIgb25lIHdoaWxlIGtlZXBpbmcgdGhlIHByZXZpb3VzXG4gICAgICogdmFsdWUuXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVPcHRpb25zKGxvY2FsZVVwZGF0ZWQgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jbGVhdmVJbnN0YW5jZSkge1xuICAgICAgICAgICAgLy8gdGhlIHZhbHVlIGJlZm9yZSBkZXN0cm95aW5nIGNsZWF2ZSBpbnN0YW5jZVxuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHRoaXMuY2xlYXZlSW5zdGFuY2UuZ2V0UmF3VmFsdWUoKTtcblxuICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBDbGVhdmUgaW5zdGFuY2Ugd2l0aCB0aGUgbmV3IG9yIHVwZGF0ZWQgb3B0aW9uc1xuICAgICAgICAgICAgdGhpcy5jbGVhdmVJbnN0YW5jZS5wcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuY2xlYXZlSW5zdGFuY2UucHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgaW5pdFZhbHVlOiBwcmV2aW91c1ZhbHVlLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gaW5pdCBudW1iZXIgZm9ybWF0dGVyIHdpdGggdXBkYXRlZCBvcHRpb25zXG4gICAgICAgICAgICB0aGlzLmNsZWF2ZUluc3RhbmNlLmluaXROdW1lcmFsRm9ybWF0dGVyKCk7XG5cbiAgICAgICAgICAgIC8vIEluIGNhc2UgcHJldmlvdXMgc2V0dGluZ3Mgd2hlcmUgbnVtZXJhbERlY2ltYWxNYXJrPScuJyB3aXRoIHZhbHVlIDEwMDAuOTksIGFuZCB0aGV5IGNoYW5nZWQgdG9cbiAgICAgICAgICAgIC8vIG51bWVyYWxEZWNpbWFsTWFyaz0nLCc7IHNldCBpbml0VmFsdWUgdG8gMTAwMC45OSBvciBldmVuIDEwMDAsOTkgd2lsbCBub3QgYmUgcmVmbGVjdGVkIGFuZCBjbGVhdmUgd2lsbFxuICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBkZWNpbWFsIHBhcnQuIFNldCBvZiB0aGUgdmFsdWUgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gY2F1c2VzIHJlZm9ybWF0IG9mIG51bWJlciBhbmQgd29ya3MuXG4gICAgICAgICAgICB0aGlzLmNsZWF2ZUluc3RhbmNlLnNldFJhd1ZhbHVlKHByZXZpb3VzVmFsdWUpO1xuXG4gICAgICAgICAgICAvLyBwYXJzZSBudW1iZXJcbiAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IHRoaXMucGFyc2VOdW1iZXIodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBsYWNlaG9sZGVyIHx8IHVuZGVmaW5lZCwgbG9jYWxlVXBkYXRlZCk7XG4gICAgICAgICAgICAvLyBzZXQgcGxhY2Vob2xkZXIgaW4gY2FzZSBub25lIGlzIHByb3ZpZGVkXG4gICAgICAgICAgICB0aGlzLnNldFBsYWNlaG9sZGVyQXR0cmlidXRlKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayBmdW5jdGlvbiBvZiB0aGUgQ2xlYXZlIGluc3RhbmNlIHRoYXQgaXMgaW52b2tlZCB3aGVuIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnQgdHlwZSBvZiBDbGVhdmVFdmVudE9uQ2hhbmdlXG4gICAgICovXG4gICAgcHJpdmF0ZSBvblZhbHVlQ2hhbmdlZChldmVudDogQ2xlYXZlRXZlbnRPbkNoYW5nZSk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IHRhcmdldCB9ID0gZXZlbnQ7XG5cbiAgICAgICAgaWYgKHRoaXMuZmlsbEZyYWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5RnJhY3Rpb25GaWxsKHRhcmdldC5yYXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZShOdW1iZXIucGFyc2VGbG9hdCh0YXJnZXQucmF3VmFsdWUpKTtcbiAgICAgICAgLy8gZmlsbCBsZWFkaW5nIHplcm9cbiAgICAgICAgaWYgKHRoaXMubGVhZGluZ1plcm8pIHtcbiAgICAgICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLmxlYWRpbmdaZXJvID4gdGhpcy5kaWdpdHMgJiYgdGhpcy5kaWdpdHMgPiAwID8gdGhpcy5kaWdpdHMgOiB0aGlzLmxlYWRpbmdaZXJvO1xuICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5wYWRaZXJvKGV2ZW50LnRhcmdldC5yYXdWYWx1ZSwgc2l6ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXNwb25zaWJsZSB0byBleHRyYWN0IGFsbCBsb2NhbGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGJ1aWxkIENsZWF2ZU9wdGlvbnMgcmVsYXRlZCB0byBudW1iZXIgZm9ybWF0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIFRoZSBpZCBvZiB0aGUgbG9jYWxlXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRDbGVhdmVPcHRzQmFzZWRPbkxvY2FsZShpZDogc3RyaW5nKTogQ2xlYXZlT3B0aW9ucyB7XG4gICAgICAgIGlmICghaWQgfHwgaWQgPT09ICcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsZSBpZCBjYW5ub3QgYmUgZW1wdHkgb3IgdW5kZWZpbmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0czogQ2xlYXZlT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIG51bWVyYWw6IHRydWUsXG4gICAgICAgICAgICBkZWxpbWl0ZXI6IGdldExvY2FsZU51bWJlclN5bWJvbChpZCwgTnVtYmVyU3ltYm9sLkdyb3VwKSxcbiAgICAgICAgICAgIG51bWVyYWxEZWNpbWFsTWFyazogZ2V0TG9jYWxlTnVtYmVyU3ltYm9sKGlkLCBOdW1iZXJTeW1ib2wuRGVjaW1hbCksXG4gICAgICAgICAgICBudW1lcmFsRGVjaW1hbFNjYWxlOiB0aGlzLmZyYWN0aW9uRGlnaXRzLFxuICAgICAgICAgICAgbnVtZXJhbEludGVnZXJTY2FsZTogdGhpcy5kaWdpdHMsXG4gICAgICAgICAgICBudW1lcmFsVGhvdXNhbmRzR3JvdXBTdHlsZTogdGhpcy5ub0Zvcm1hdCA/ICdub25lJyA6ICd0aG91c2FuZCcsIC8vIFRPRE86IGltcGxlbWVudCBiYXNlZCBvbiBsb2NhbGVcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4geyAuLi50aGlzLm9wdGlvbnMsIC4uLm9wdHMgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBsaWVzIHRoZSBmaWxsIG9mIGRlY2ltYWwgcGFydCB3aXRoIHplcm9zIGluIGNhc2UgZGVjaW1hbCBwYXJ0IG9mIGdpdmVuIG51bWJlciBoYXNcbiAgICAgKiBzaXplIGxlc3MgdGhhbiB0aGUgbWF4IGZyYWN0aW9uIGRpZ2l0cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW1iZXJcbiAgICAgKiBAcGFyYW0gY2xlYXZlSW5zdGFuY2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgYXBwbHlGcmFjdGlvbkZpbGwobnVtYmVyOiBzdHJpbmcsIGNsZWF2ZUluc3RhbmNlOiBDbGVhdmVJbnN0YW5jZSA9IHRoaXMuY2xlYXZlSW5zdGFuY2UpOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgZmlsbCBmcmFjdGlvbiBpcyBlbmFibGVkIGFuZCB0aGVyZSdzIGNsZWF2ZSBpbnN0YW5jZVxuICAgICAgICBpZiAodGhpcy5maWxsRnJhY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNsZWF2ZUluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyID0gbnVtYmVyPy50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09ICcnIHx8ICFudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBoYXNEZWNpbWFsID0gbnVtYmVyLnNwbGl0KCcuJykubGVuZ3RoID4gMTtcbiAgICAgICAgICAgICAgICAvLyBpbiBjYXNlIHRoZXJlJ3MgYWxyZWFkeSBkZWNpbWFsIHBvaW50IGluIG51bWJlclxuICAgICAgICAgICAgICAgIGlmIChoYXNEZWNpbWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlY2ltYWxTaXplID0gbnVtYmVyLnNwbGl0KCcuJylbMV0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiBzaXplIG9mIGRlY2ltYWwgcGFydCBvZiBudW1iZXIgaXMgbGVzcyB0aGFuIHRoZSBtYXggZnJhY3Rpb24gZGlnaXRzXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWNpbWFsU2l6ZSA8IHRoaXMuX2ZyYWN0aW9uRGlnaXRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgKyBuZXcgQXJyYXkodGhpcy5fZnJhY3Rpb25EaWdpdHMgLSBkZWNpbWFsU2l6ZSkuZmlsbCgwKS5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWF2ZUluc3RhbmNlLnNldFJhd1ZhbHVlKG51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UocG9zLCBwb3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIGluIGNhc2UgdGhlcmUncyBub3QsIGZvcmNlIGl0IGJ5IGZpbGxpbmcgaXQgYXMgbXVjaCB6ZXJvIGFzIHRoZSBmcmFjdGlvbiBkaWdpdHNcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZnJhY3Rpb25EaWdpdHMgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG51bWJlciA9IGAke251bWJlcn0uJHtuZXcgQXJyYXkodGhpcy5fZnJhY3Rpb25EaWdpdHMpLmZpbGwoMCkuam9pbignJyl9YDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICBjbGVhdmVJbnN0YW5jZS5zZXRSYXdWYWx1ZShudW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UocG9zLCBwb3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyBhIGdpdmVuIGZvcm1hdHRlZCBudW1iZXIgYW5kIHJldHVybnMgaXQgYXMgYSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIGZvcm1hdHRlZCBudW1iZXIgeW91IHdhbnQgdG8gcGFyc2UgZS5nLiAxMTEsODg4LjIyXG4gICAgICogQHBhcmFtIHVzZXJQcmV2TG9jYWxlU3RhdGUgVXNlIHByZXZpb3VzIGxvY2FsZSBzdGF0ZSB0byBwYXJzZSB0aGUgdmFsdWUuIEJ5IGRlZmF1bHQsIGlzIGZhbHNlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhcnNlTnVtYmVyKHZhbHVlOiBzdHJpbmcsIHVzZXJQcmV2TG9jYWxlU3RhdGUgPSBmYWxzZSk6IG51bWJlciB7XG4gICAgICAgIC8vIGxvY2FsZSBzdGF0ZVxuICAgICAgICBjb25zdCBsb2NhbGUgPSB1c2VyUHJldkxvY2FsZVN0YXRlID8gdGhpcy5sb2NhbGVTZXJ2aWNlPy5wcmV2aW91c0xvY2FsZSA6IHRoaXMubG9jYWxlU2VydmljZT8uY3VycmVudExvY2FsZSB8fCB0aGlzLmxvY2FsZV9pZDtcbiAgICAgICAgLy8gZ2V0IGRlY2ltYWwgYW5kIGdyb3VwIHN5bWJvbHNcbiAgICAgICAgY29uc3QgZGVjaW1hbFN5bWJvbCA9IGdldExvY2FsZU51bWJlclN5bWJvbChsb2NhbGUsIE51bWJlclN5bWJvbC5EZWNpbWFsKTtcbiAgICAgICAgY29uc3QgZ3JvdXBTeW1ib2wgPSBnZXRMb2NhbGVOdW1iZXJTeW1ib2wobG9jYWxlLCBOdW1iZXJTeW1ib2wuR3JvdXApO1xuICAgICAgICAvLyByZXBsYWNlIHN5bWJvbHMgdG8gcGFyc2UgbnVtYmVyXG4gICAgICAgIGNvbnN0IHBhcnNlZE51bWJlciA9IHZhbHVlPy5zcGxpdChncm91cFN5bWJvbCkuam9pbignJykuc3BsaXQoZGVjaW1hbFN5bWJvbCkuam9pbignLicpO1xuICAgICAgICByZXR1cm4gTnVtYmVyLnBhcnNlRmxvYXQocGFyc2VkTnVtYmVyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYWQgbGVhZGluZyB6ZXJvIHRvIHRoZSBudW1iZXJcbiAgICAgKlxuICAgICAqIEBwYXJhbSBudW0gVGhlIG51bWJlciB0byBhZGQgbGVhZGluZyB6ZXJvIHRvXG4gICAgICogQHBhcmFtIHNpemUgTnVtYmVyIG9mIG51bWJlcidzIGxlYWRpbmcgemVyb1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBwYWRaZXJvKG51bSwgc2l6ZSk6IHN0cmluZyB7XG4gICAgICAgIG51bSA9IG51bS50b1N0cmluZygpO1xuICAgICAgICAvLyBnZXQgaW50ZWdlciBhbmQgZGVjaW1hbCBwYXJ0XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICAgICAgbGV0IFtpbnRlZ2VyLCBkZWNpbWFsXSA9IG51bS5zcGxpdCgnLicpO1xuICAgICAgICB3aGlsZSAoaW50ZWdlci5sZW5ndGggPCBzaXplKSB7XG4gICAgICAgICAgICBpbnRlZ2VyID0gJzAnICsgaW50ZWdlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVjaW1hbCA/IGAke2ludGVnZXJ9LiR7ZGVjaW1hbH1gIDogaW50ZWdlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjaGVja3Mgd2hldGhlciB0aGUgbWluIHN5bWJvbCBpcyBhbGxvd2VkLiBJdCBpcyBhbGxvd2VkIHdoZW4gbWludXMgc3ltYm9sXG4gICAgICogcHJvdmlkZWQgYW5kIG1pbiBpbnB1dCBpcyB1bmRlZmluZWQgb3IgbWluIHByb3ZpZGVkIGFuZCBpcyBuZWdhdGl2ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBzdHJpbmcgY29taW5nIGZyb20gYW4gZXZlbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzTWludXNBbGxvd2VkKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5taW4gfHwgdGhpcy5taW4gPCAwID8ga2V5ICE9PSAnLScgOiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNoZWNrIHdoZXRoZXIgdGhlIGtleSBlbnRlcmVkIGlzIGluc2lkZSB0aGUgbWluIGFuZFxuICAgICAqIG1heCByYW5nZS4gUmV0dXJucyB0cnVlIGlmIGl0J3Mgb3V0IG9mIHJhbmdlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGUgQSBrZXlib2FyZCBldmVudFxuICAgICAqL1xuICAgIHByaXZhdGUgaXNPdXRTaWRlUmFuZ2UoZTogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuY2xlYXZlSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBnZXQgY2FyZXQgcG9zaXRpb25cbiAgICAgICAgY29uc3QgcG9zID0gZS50YXJnZXRbJ3NlbGVjdGlvblN0YXJ0J107XG4gICAgICAgIC8vIGdldCBjYXJldCBwb3NpdGlvbiAoaW4gY2FzZSB0aGVyZSdzIHRleHQgc2VsZWN0ZWQpXG4gICAgICAgIGNvbnN0IGVuZFBvcyA9IGUudGFyZ2V0WydzZWxlY3Rpb25FbmQnXTtcbiAgICAgICAgLy8gZ2V0IGN1cnJlbnQgdmFsdWUgKGZvcm1hdHRlZClcbiAgICAgICAgbGV0IHZhbHVlID0gZS50YXJnZXRbJ3ZhbHVlJ107XG4gICAgICAgIC8vIHJlbW92ZSBrZXkgZnJvbSB2YWx1ZVxuICAgICAgICBpZiAoZS5rZXkgPT09ICdEZWxldGUnIHx8IGUua2V5ID09PSAnQmFja3NwYWNlJykge1xuICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhlcmUncyBzZWxlY3Rpb24gb2YgdGV4dCB0byBiZSByZW1vdmVkXG4gICAgICAgICAgICBpZiAocG9zICE9PSBlbmRQb3MpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGUudGFyZ2V0Wyd2YWx1ZSddLnN1YnN0cmluZygwLCBwb3MpICsgZS50YXJnZXRbJ3ZhbHVlJ10uc3Vic3RyaW5nKGVuZFBvcywgZS50YXJnZXRbJ3ZhbHVlJ10ubGVuZ3RoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBlLnRhcmdldFsndmFsdWUnXS5zdWJzdHJpbmcoMCwgcG9zIC0gMSkgKyBlLnRhcmdldFsndmFsdWUnXS5zdWJzdHJpbmcoZW5kUG9zLCBlLnRhcmdldFsndmFsdWUnXS5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gYWRkIGtleSB0byB0aGUgdmFsdWVcbiAgICAgICAgICAgIHZhbHVlID0gW3ZhbHVlLnNsaWNlKDAsIHBvcyksIGUua2V5LCB2YWx1ZS5zbGljZShlbmRQb3MpXS5qb2luKCcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNyZWF0ZSBhIENsZWF2ZSBpbnN0YW5jZSB0byBleHRyYWN0IHRoZSBudW1iZXIgZnJvbSBmb3JtYXR0ZWQgdmFsdWVcbiAgICAgICAgY29uc3QgY2xlYXZlOiBDbGVhdmVJbnN0YW5jZSA9IG5ldyBDbGVhdmUodGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpLCB7IC4uLnRoaXMub3B0aW9ucyB9KTtcbiAgICAgICAgY2xlYXZlLnNldFJhd1ZhbHVlKHZhbHVlKTtcbiAgICAgICAgY29uc3QgbnVtYmVyID0gTnVtYmVyKGNsZWF2ZS5nZXRSYXdWYWx1ZSgpKTtcbiAgICAgICAgLy8gZGVzdHJveSBjbGVhdmUgaW5zdGFuY2VcbiAgICAgICAgY2xlYXZlLmRlc3Ryb3koKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluID49IDAgPyBmYWxzZSA6IHRoaXMubWluID4gbnVtYmVyIHx8IHRoaXMubWF4IDwgbnVtYmVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlY2ltYWwgYWRqdXN0bWVudCBvZiBhIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAgdmFsdWUgVGhlIG51bWJlci5cbiAgICAgKiBAcGFyYW0gZXhwICAgVGhlIGV4cG9uZW50ICh0aGUgMTAgbG9nYXJpdGhtIG9mIHRoZSBhZGp1c3RtZW50IGJhc2UpLlxuICAgICAqIEByZXR1cm5zIFRoZSBhZGp1c3RlZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGRlY2ltYWxBZGp1c3QodmFsdWU6IG51bWJlciwgZXhwOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICAvLyBJZiB0aGUgZXhwIGlzIHVuZGVmaW5lZCBvciB6ZXJvLi4uXG4gICAgICAgIGlmICh0eXBlb2YgZXhwID09PSAndW5kZWZpbmVkJyB8fCArZXhwID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUgPSArdmFsdWU7XG4gICAgICAgIGV4cCA9ICtleHA7XG4gICAgICAgIC8vIElmIHRoZSB2YWx1ZSBpcyBub3QgYSBudW1iZXIgb3IgdGhlIGV4cCBpcyBub3QgYW4gaW50ZWdlci4uLlxuICAgICAgICBpZiAoaXNOYU4odmFsdWUpIHx8ICEodHlwZW9mIGV4cCA9PT0gJ251bWJlcicgJiYgZXhwICUgMSA9PT0gMCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2hpZnRcbiAgICAgICAgbGV0IGNsZWFuZWQgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KCdlJyk7XG4gICAgICAgIHZhbHVlID0gTWF0aC5yb3VuZCgrKGNsZWFuZWRbMF0gKyAnZScgKyAoY2xlYW5lZFsxXSA/ICtjbGVhbmVkWzFdIC0gZXhwIDogLWV4cCkpKTtcbiAgICAgICAgLy8gU2hpZnQgYmFja1xuICAgICAgICBjbGVhbmVkID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnZScpO1xuICAgICAgICByZXR1cm4gKyhjbGVhbmVkWzBdICsgJ2UnICsgKGNsZWFuZWRbMV0gPyArY2xlYW5lZFsxXSArIGV4cCA6IGV4cCkpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -455,7 +455,7 @@ export class UxFormControlComponent {
|
|
|
455
455
|
useExisting: forwardRef((() => UxFormControlComponent)),
|
|
456
456
|
multi: true,
|
|
457
457
|
},
|
|
458
|
-
], viewQueries: [{ propertyName: "radioElement", first: true, predicate: ["radioElement"], descendants: true }, { propertyName: "inputRef", first: true, predicate: ["inputRef"], descendants: true }, { propertyName: "formControlRef", first: true, predicate: ["formControlRef"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"isInputText && !isReadOnly\">\n <span attr.data-e2e=\"{{ e2eAttr }}-tf-rw\">\n <input\n #inputRef\n #formControlRef\n id=\"{{ generatedId }}\"\n type=\"text\"\n [(ngModel)]=\"inputValue\"\n class=\"ux-form-control {{ inputStyleClass }}\"\n (change)=\"onChange($event)\"\n (keyup)=\"onChange($event)\"\n (blur)=\"onTouched($event)\"\n (focus)=\"onFocus($event)\"\n placeholder=\"{{ placeholderLabel }}\"\n [uxMaxlength]=\"maxlength\"\n (validityChange)=\"OnMaxLengthValidityChange($event)\"\n [isShowMaxlengthCounter]=\"isShowMaxlengthCounter\"\n [disabled]=\"isDisabled\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\" />\n </span>\n</ng-container>\n\n<ng-container *ngIf=\"isTextarea && !isReadOnly\">\n <span attr.data-e2e=\"{{ e2eAttr }}-ta-rw\">\n <textarea\n #formControlRef\n id=\"{{ generatedId }}\"\n class=\"ux-form-control {{ inputStyleClass }}\"\n [(ngModel)]=\"inputValue\"\n (change)=\"onChange($event)\"\n (keyup)=\"onChange($event)\"\n (blur)=\"onTouched($event)\"\n (focus)=\"onFocus($event)\"\n placeholder=\"{{ placeholderLabel }}\"\n [uxMaxlength]=\"maxlength\"\n (validityChange)=\"OnMaxLengthValidityChange($event)\"\n [isShowMaxlengthCounter]=\"isShowMaxlengthCounter\"\n [attr.rows]=\"rows\"\n [minRows]=\"minRows\"\n [disabled]=\"isDisabled\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\"\n [uxAutoResize]=\"isTextareaAutoresize\">\n </textarea>\n </span>\n</ng-container>\n\n<ng-container *ngIf=\"isSelect && !isReadOnly\">\n <select\n #formControlRef\n id=\"{{ generatedId }}\"\n class=\"ux-form-control ux-form-control__custom-select {{ inputStyleClass }}\"\n [(ngModel)]=\"inputValue\"\n (change)=\"onChange($event)\"\n (keyup)=\"onChange($event)\"\n (blur)=\"onTouched($event)\"\n (focus)=\"onFocus($event)\"\n [disabled]=\"isDisabled\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\"\n attr.data-e2e=\"{{ e2eAttr }}-sel-rw\">\n <ng-container *ngIf=\"selectOptions\">\n <option *ngIf=\"!selectNoBlankLine\" [value]=\"'' || null\" class=\"ux-u-color-grey\">{{ placeholderLabel }}</option>\n <ng-template [ngIf]=\"isSelectHasOptions\">\n <ng-template ngFor let-item [ngForOf]=\"selectOptions\">\n <optgroup *ngIf=\"item.options\" label=\"{{ item.value }}\" class=\"ux-u-font-regular\">\n <option\n *ngFor=\"let opt of item.options\"\n [value]=\"opt[selectKeyName]\"\n [selected]=\"inputValue === opt[selectKeyName]\">\n {{ opt[selectValueName] }}\n </option>\n </optgroup>\n <option *ngIf=\"!item.options\" [value]=\"item[selectKeyName]\" [selected]=\"inputValue === item[selectKeyName]\">\n {{ item[selectValueName] }}\n </option>\n </ng-template>\n </ng-template>\n\n <ng-template [ngIf]=\"!isSelectHasOptions\">\n <option *ngFor=\"let opt of selectOptions\" [value]=\"opt[selectKeyName]\" [selected]=\"inputValue === opt[selectKeyName]\">\n {{ opt[selectValueName] }}\n </option>\n </ng-template>\n </ng-container>\n <ng-content *ngIf=\"!selectOptions\"></ng-content>\n </select>\n</ng-container>\n\n<ng-container *ngIf=\"isReadOnly && isSelect\">\n <!-- <input type=\"text\" role=\"combobox\" [attr.aria-readonly]=\"true\" readonly=\"readonly\" id=\"{{generatedId}}\" class=\"ux-form-control__read-only {{inputStyleClass}}\" [value]=\"selectValue\" [tabindex]=\"tabindex\" /> -->\n <div\n id=\"{{ generatedId }}\"\n class=\"ux-form-group--read-only {{ inputStyleClass }}\"\n [tabindex]=\"tabindex\"\n attr.data-e2e=\"{{ e2eAttr }}-sel-ro\">\n {{ selectValue === '' || !selectValue ? emptyValueTextOnReadOnly : selectValue }}\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isCheckbox && !isReadOnly\">\n <input\n #formControlRef\n id=\"{{ generatedId }}\"\n type=\"checkbox\"\n class=\"ux-input__checkbox {{ styleClass }}\"\n [(ngModel)]=\"inputValue\"\n (click)=\"onChange($event)\"\n (blur)=\"onTouched($event)\"\n (focus)=\"onFocus($event)\"\n [disabled]=\"isDisabled\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\"\n attr.data-e2e=\"{{ e2eAttr }}-cb-rw\" />\n <label for=\"{{ generatedId }}\" *ngIf=\"checkboxLabel\">{{ checkboxLabel }}</label>\n <label for=\"{{ generatedId }}\" role=\"presentation\" *ngIf=\"!checkboxLabel\"> </label>\n</ng-container>\n\n<ng-container *ngIf=\"isCheckbox && isReadOnly\">\n <input\n #formControlRef\n id=\"{{ generatedId }}\"\n class=\"ux-input__checkbox {{ styleClass }}\"\n type=\"checkbox\"\n [checked]=\"inputValue\"\n onclick=\"return false;\"\n [tabindex]=\"tabindex\"\n readonly=\"readonly\"\n aria-readonly=\"true\"\n attr.data-e2e=\"{{ e2eAttr }}-cb-ro\" />\n <label for=\"{{ generatedId }}\" *ngIf=\"checkboxLabel\">{{ checkboxLabel }}</label>\n <label for=\"{{ generatedId }}\" role=\"presentation\" *ngIf=\"!checkboxLabel\"> </label>\n</ng-container>\n\n<ng-container *ngIf=\"isRadio && !isReadOnly\">\n <input\n #radioElement\n #formControlRef\n id=\"{{ generatedId }}\"\n class=\"ux-input__radio {{ styleClass }}\"\n type=\"radio\"\n [checked]=\"checked\"\n [name]=\"formControlName + groupId\"\n [value]=\"formControlValue\"\n (click)=\"onChange($event)\"\n (blur)=\"onTouched($event)\"\n (focus)=\"onFocus($event)\"\n [disabled]=\"isDisabled\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\"\n attr.data-e2e=\"{{ e2eAttr }}-ra-rw\" />\n <label for=\"{{ generatedId }}\" class=\"radio-label\">{{ radioLabel || ' ' }}</label>\n</ng-container>\n\n<ng-container *ngIf=\"isRadio && isReadOnly && isRadioOptionChecked\">\n <div\n *ngIf=\"radioLabel\"\n id=\"{{ generatedId }}\"\n class=\"ux-form-group--read-only {{ inputStyleClass }}\"\n [tabindex]=\"tabindex\"\n attr.data-e2e=\"{{ e2eAttr }}-ro\">\n {{ radioLabel }}\n </div>\n <div\n *ngIf=\"!radioLabel\"\n id=\"{{ generatedId }}\"\n class=\"ux-form-group--read-only {{ inputStyleClass }}\"\n [tabindex]=\"tabindex\"\n attr.data-e2e=\"{{ e2eAttr }}-ro\">\n {{ inputValue }}\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isReadOnly && !isCheckbox && !isNumber && !isSelect && !isRadio && !isTextarea\">\n <div\n id=\"{{ generatedId }}\"\n class=\"ux-form-group--read-only {{ inputStyleClass }}\"\n [tabindex]=\"tabindex\"\n attr.data-e2e=\"{{ e2eAttr }}-ro\">\n {{ inputValue === '' || !inputValue ? emptyValueTextOnReadOnly : inputValue }}\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isNumber\">\n <div\n *ngIf=\"isReadOnly\"\n id=\"{{ generatedId }}\"\n class=\"ux-form-group--read-only {{ inputStyleClass }}\"\n [tabindex]=\"tabindex\"\n attr.data-e2e=\"{{ e2eAttr }}-sel-ro\">\n {{ inputRef.value === '' || !inputRef.value ? emptyValueTextOnReadOnly : inputRef.value }}\n </div>\n <span [hidden]=\"isReadOnly\" attr.data-e2e=\"{{ e2eAttr }}-num-rw\">\n <input\n #inputRef\n #formControlRef\n id=\"{{ generatedId }}\"\n type=\"text\"\n [uxCleave]=\"cleaveOptions\"\n [readOnly]=\"isReadOnly\"\n [(ngModel)]=\"inputValue\"\n [isModelNumber]=\"true\"\n class=\"ux-form-control {{ inputStyleClass }}\"\n (change)=\"onChange($event)\"\n (keyup)=\"onChange($event)\"\n (blur)=\"onTouched($event)\"\n (focus)=\"onFocus($event)\"\n placeholder=\"{{ placeholderLabel }}\"\n [disabled]=\"isDisabled\"\n [uxMaxlength]=\"maxlength\"\n (validityChange)=\"OnMaxLengthValidityChange($event)\"\n [isShowMaxlengthCounter]=\"isShowMaxlengthCounter\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\" />\n </span>\n</ng-container>\n\n<ng-container *ngIf=\"isTextarea && isReadOnly\">\n <div\n id=\"{{ generatedId }}\"\n class=\"ux-form-group--read-only {{ inputStyleClass }}\"\n [tabindex]=\"tabindex\"\n attr.data-e2e=\"{{ e2eAttr }}-ro\">\n <pre>{{ inputValue === '' || !inputValue ? emptyValueTextOnReadOnly : inputValue }}</pre>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"!isFieldValid && !hasFormGroupParent\">\n <ux-control-feedback\n *ngIf=\"validationErrorMessage\"\n typeClass=\"{{ validationErrorType ? validationErrorType : 'danger' }}\"\n attr.data-e2e=\"{{ e2eAttr }}\">\n {{\n validationErrorMessage && $any(validationErrorMessage).id\n ? ($any(validationErrorMessage).id | translate : $any(validationErrorMessage).params)\n : validationErrorMessage\n }}\n </ux-control-feedback>\n</ng-container>\n\n<ng-container *ngIf=\"!isMaxLengthValid\">\n <ux-control-feedback *ngIf=\"maxLengthValidationErrorMessage\" typeClass=\"danger\" attr.data-e2e=\"{{ e2eAttr }}\">\n {{ maxLengthValidationErrorMessage }}\n </ux-control-feedback>\n</ng-container>\n", styles: ["input.ux-form-control,select.ux-form-control,textarea.ux-form-control{border:1px solid var(--eui-base-color-grey-20);border-radius:var(--eui-base-border-radius);color:var(--eui-base-color-grey-100);font-size:var(--eui-base-font-size);font-style:normal;font-weight:400;height:calc(var(--eui-base-spacing-2xl) + 2px);padding:var(--eui-base-spacing-xs) var(--eui-base-spacing-s);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}input.ux-form-control:active,input.ux-form-control:focus,select.ux-form-control:active,select.ux-form-control:focus,textarea.ux-form-control:active,textarea.ux-form-control:focus{outline:2px solid var(--eui-base-color-accessible-focus);outline-offset:-2px;-moz-outline-radius:var(--eui-base-border-radius);transition:outline .15s ease-in-out,border .15s ease-in-out}input::-ms-clear{display:none}.ux-clearable-input-wrapper{display:flex;flex:1 1 0%;position:relative}.ux-clearable-input-wrapper .ux-clearable-input-wrapper__clear{color:var(--eui-base-color-grey-35);cursor:pointer;font-size:var(--eui-base-font-size-xl);font-style:normal;position:absolute;right:var(--eui-base-spacing-xs);top:var(--eui-base-spacing-xs);-webkit-user-select:none;user-select:none;z-index:var(--eui-base-z-index-clearable-icon)}.ux-clearable-input-wrapper .ux-clearable-input-wrapper__clear:hover{color:var(--eui-base-color-danger);opacity:1}.ux-clearable-input-wrapper .ux-clearable-input-wrapper__clear:before{font-family:eui-icons!important}@keyframes borderscale{50%{box-shadow:0 0 0 2px var(--eui-base-color-primary-110)}}select.ux-form-control:not([readonly]){-webkit-appearance:none;appearance:none;background-color:var(--eui-base-color-white);background-image:url('data:image/svg+xml;utf8,<svg viewBox=\"0 0 4 5\" fill=\"black\" xmlns=\"http://www.w3.org/2000/svg\" name=\"arrow-up-down\" aria-label=\"Close menu\" role=\"img\"><path d=\"M2 0L0 2h4zm0 5L0 3h4z\"/></svg>');background-position:calc(100% - var(--eui-base-spacing-s)) center;background-repeat:no-repeat;background-size:var(--eui-base-spacing-xs);padding-right:var(--eui-base-spacing-xl)}:host{width:100%}.ux-form-control{background-clip:padding-box;background-color:var(--eui-base-color-white);border-radius:var(--eui-border-radius-base);display:block;line-height:var(--eui-base-line-height);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}.ux-form-control:disabled,.ux-form-control[readonly]{background-color:var(--eui-base-color-grey-5)!important;color:var(--eui-base-color-grey-80)!important}.ux-form-control.custom-select,.ux-form-control.ux-form-control__custom-select{padding-right:var(--eui-base-spacing-2xl);text-overflow:ellipsis}select.ux-form-control[multiple],select.ux-form-control[size]{height:calc(var(--eui-base-spacing-2xl) + var(--eui-base-spacing-m) + 2px)!important;padding-right:0}select.ux-form-control:not([size]),select.ux-form-control[size=\"1\"],select.ux-form-control:not([multiple]){height:calc(var(--eui-base-spacing-2xl) + 2px)}textarea.ux-form-control{height:auto}.ux-input__checkbox:not(.cdk-visually-hidden){-webkit-appearance:inherit;appearance:inherit;cursor:pointer;display:inline-flex;flex-shrink:0;height:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs));margin-right:var(--eui-base-spacing-s);position:relative;transition:all .25s ease;vertical-align:top;width:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs));accent-color:var(--eui-base-color-white);background:var(--eui-base-color-white);border:2px solid var(--eui-base-color-grey-20)}.ux-input__checkbox:not(.cdk-visually-hidden)+label{display:inline-flex;cursor:pointer;margin-right:var(--eui-base-spacing-m);white-space:inherit}.ux-input__checkbox:not(.cdk-visually-hidden):checked{background:var(--eui-base-color-primary-100);opacity:1}.ux-input__checkbox:not(.cdk-visually-hidden):checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Ctitle%3ECheckmark%3C/title%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='64' d='M416 128L192 384l-96-96'/%3E%3C/svg%3E\");height:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs));width:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs))}.ux-input__checkbox:not(.cdk-visually-hidden):disabled:not([readonly]){background:var(--eui-base-color-grey-15);opacity:.25;pointer-events:none;-webkit-user-select:none;user-select:none}.ux-input__checkbox:not(.cdk-visually-hidden):disabled:not([readonly]):checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Ctitle%3ECheckmark%3C/title%3E%3Cpath fill='none' stroke='%23004494' stroke-linecap='round' stroke-linejoin='round' stroke-width='64' d='M416 128L192 384l-96-96'/%3E%3C/svg%3E\")}.ux-input__checkbox:not(.cdk-visually-hidden):disabled:not([readonly])+label{pointer-events:none}.ux-input__checkbox:not(.cdk-visually-hidden)[readonly]{background:var(--eui-base-color-grey-35);opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none}.ux-input__checkbox:not(.cdk-visually-hidden)[readonly]:checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Ctitle%3ECheckmark%3C/title%3E%3Cpath fill='none' stroke='%23004494' stroke-linecap='round' stroke-linejoin='round' stroke-width='64' d='M416 128L192 384l-96-96'/%3E%3C/svg%3E\")}.ux-input__checkbox:not(.cdk-visually-hidden)[readonly]+label{pointer-events:none}.ux-input__checkbox:not(.cdk-visually-hidden):active,.ux-input__checkbox:not(.cdk-visually-hidden):focus{box-shadow:var(--eui-base-shadow-3);outline:2px solid var(--eui-base-color-accessible-focus);outline-offset:0;-moz-outline-radius:var(--eui-base-border-radius);transition:outline .15s ease-in-out,border .15s ease-in-out}.ux-input__radio:not(.cdk-visually-hidden){-webkit-appearance:inherit;appearance:inherit;align-items:center;border-radius:50%;cursor:pointer;display:inline-flex;flex-shrink:0;height:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs));margin-right:var(--eui-base-spacing-s);position:relative;vertical-align:bottom;transition:all .25s ease;width:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs));accent-color:var(--eui-base-color-white);background:var(--eui-base-color-white);border:2px solid var(--eui-base-color-grey-20)}.ux-input__radio:not(.cdk-visually-hidden)+label{display:inline-flex;cursor:pointer;margin-right:var(--eui-base-spacing-m);white-space:inherit}.ux-input__radio:not(.cdk-visually-hidden):checked{background:var(--eui-base-color-white)}.ux-input__radio:not(.cdk-visually-hidden):checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'%3E%3Ctitle%3EEllipse%3C/title%3E%3Cpath fill='%23004494' stroke='%23004494' d='M256 464c-114.69 0-208-93.31-208-208S141.31 48 256 48s208 93.31 208 208-93.31 208-208 208z'/%3E%3C/svg%3E\")}.ux-input__radio:not(.cdk-visually-hidden):disabled:not([readonly]){background:var(--eui-base-color-grey-15);opacity:.25;pointer-events:none;-webkit-user-select:none;user-select:none}.ux-input__radio:not(.cdk-visually-hidden):disabled:not([readonly]):checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'%3E%3Ctitle%3EEllipse%3C/title%3E%3Cpath fill='%23004494' stroke='%23004494' d='M256 464c-114.69 0-208-93.31-208-208S141.31 48 256 48s208 93.31 208 208-93.31 208-208 208z'/%3E%3C/svg%3E\")}.ux-input__radio:not(.cdk-visually-hidden):disabled:not([readonly])+label{pointer-events:none}.ux-input__radio:not(.cdk-visually-hidden)[readonly]{display:none;opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none}.ux-input__radio:not(.cdk-visually-hidden)[readonly]:checked{display:inline-flex}.ux-input__radio:not(.cdk-visually-hidden)[readonly]:checked:before{background:var(--eui-base-color-grey-25);border-radius:50%;height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'%3E%3Ctitle%3EEllipse%3C/title%3E%3Cpath fill='%23004494' stroke='%23004494' d='M256 464c-114.69 0-208-93.31-208-208S141.31 48 256 48s208 93.31 208 208-93.31 208-208 208z'/%3E%3C/svg%3E\")}.ux-input__radio:not(.cdk-visually-hidden).eui-input-radio--invalid:not(:disabled):not([readonly]),.ux-input__radio:not(.cdk-visually-hidden).eui-input-radio--danger:not(:disabled):not([readonly]){border:2px solid var(--eui-base-color-danger-100)}.ux-input__radio:not(.cdk-visually-hidden).eui-input-radio--invalid:not(:disabled):not([readonly]):checked:before,.ux-input__radio:not(.cdk-visually-hidden).eui-input-radio--danger:not(:disabled):not([readonly]):checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'%3E%3Ctitle%3EEllipse%3C/title%3E%3Cpath fill='%23da2131' stroke='%23da2131' d='M256 464c-114.69 0-208-93.31-208-208S141.31 48 256 48s208 93.31 208 208-93.31 208-208 208z'/%3E%3C/svg%3E\")}.ux-input__radio:not(.cdk-visually-hidden):active,.ux-input__radio:not(.cdk-visually-hidden):focus{box-shadow:var(--eui-base-shadow-3);outline:2px solid var(--eui-base-color-accessible-focus);outline-offset:0;-moz-outline-radius:var(--eui-base-border-radius);transition:outline .15s ease-in-out,border .15s ease-in-out}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.UxControlFeedbackComponent, selector: "ux-control-feedback", inputs: ["styleClass", "typeClass", "e2eAttr"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.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: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.UxMaxlengthDirective, selector: "input[type=\"text\"][uxMaxlength], input[type=\"password\"][uxMaxlength], textarea[uxMaxlength]", inputs: ["uxMaxlength", "isShowMaxlengthCounter"], outputs: ["validityChange"] }, { kind: "directive", type: i4.UxAutoResizeDirective, selector: "textarea[uxAutoResize]", inputs: ["uxAutoResize", "minRows"] }, { kind: "directive", type: i4.UxCleaveDirective, selector: "[uxCleave]", inputs: ["uxCleave", "readOnly", "isModelNumber"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
|
|
458
|
+
], viewQueries: [{ propertyName: "radioElement", first: true, predicate: ["radioElement"], descendants: true }, { propertyName: "inputRef", first: true, predicate: ["inputRef"], descendants: true }, { propertyName: "formControlRef", first: true, predicate: ["formControlRef"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"isInputText && !isReadOnly\">\n <span attr.data-e2e=\"{{ e2eAttr }}-tf-rw\">\n <input\n #inputRef\n #formControlRef\n id=\"{{ generatedId }}\"\n type=\"text\"\n [(ngModel)]=\"inputValue\"\n class=\"ux-form-control {{ inputStyleClass }}\"\n (change)=\"onChange($event)\"\n (keyup)=\"onChange($event)\"\n (blur)=\"onTouched($event)\"\n (focus)=\"onFocus($event)\"\n placeholder=\"{{ placeholderLabel }}\"\n [uxMaxlength]=\"maxlength\"\n (validityChange)=\"OnMaxLengthValidityChange($event)\"\n [isShowMaxlengthCounter]=\"isShowMaxlengthCounter\"\n [disabled]=\"isDisabled\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\" />\n </span>\n</ng-container>\n\n<ng-container *ngIf=\"isTextarea && !isReadOnly\">\n <span attr.data-e2e=\"{{ e2eAttr }}-ta-rw\">\n <textarea\n #formControlRef\n id=\"{{ generatedId }}\"\n class=\"ux-form-control {{ inputStyleClass }}\"\n [(ngModel)]=\"inputValue\"\n (change)=\"onChange($event)\"\n (keyup)=\"onChange($event)\"\n (blur)=\"onTouched($event)\"\n (focus)=\"onFocus($event)\"\n placeholder=\"{{ placeholderLabel }}\"\n [uxMaxlength]=\"maxlength\"\n (validityChange)=\"OnMaxLengthValidityChange($event)\"\n [isShowMaxlengthCounter]=\"isShowMaxlengthCounter\"\n [attr.rows]=\"rows\"\n [minRows]=\"minRows\"\n [disabled]=\"isDisabled\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\"\n [uxAutoResize]=\"isTextareaAutoresize\">\n </textarea>\n </span>\n</ng-container>\n\n<ng-container *ngIf=\"isSelect && !isReadOnly\">\n <select\n #formControlRef\n id=\"{{ generatedId }}\"\n class=\"ux-form-control ux-form-control__custom-select {{ inputStyleClass }}\"\n [(ngModel)]=\"inputValue\"\n (change)=\"onChange($event)\"\n (keyup)=\"onChange($event)\"\n (blur)=\"onTouched($event)\"\n (focus)=\"onFocus($event)\"\n [disabled]=\"isDisabled\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\"\n attr.data-e2e=\"{{ e2eAttr }}-sel-rw\">\n <ng-container *ngIf=\"selectOptions\">\n <option *ngIf=\"!selectNoBlankLine\" [value]=\"'' || null\" class=\"ux-u-color-grey\">{{ placeholderLabel }}</option>\n <ng-template [ngIf]=\"isSelectHasOptions\">\n <ng-template ngFor let-item [ngForOf]=\"selectOptions\">\n <optgroup *ngIf=\"item.options\" label=\"{{ item.value }}\" class=\"ux-u-font-regular\">\n <option\n *ngFor=\"let opt of item.options\"\n [value]=\"opt[selectKeyName]\"\n [selected]=\"inputValue === opt[selectKeyName]\">\n {{ opt[selectValueName] }}\n </option>\n </optgroup>\n <option *ngIf=\"!item.options\" [value]=\"item[selectKeyName]\" [selected]=\"inputValue === item[selectKeyName]\">\n {{ item[selectValueName] }}\n </option>\n </ng-template>\n </ng-template>\n\n <ng-template [ngIf]=\"!isSelectHasOptions\">\n <option *ngFor=\"let opt of selectOptions\" [value]=\"opt[selectKeyName]\" [selected]=\"inputValue === opt[selectKeyName]\">\n {{ opt[selectValueName] }}\n </option>\n </ng-template>\n </ng-container>\n <ng-content *ngIf=\"!selectOptions\"></ng-content>\n </select>\n</ng-container>\n\n<ng-container *ngIf=\"isReadOnly && isSelect\">\n <!-- <input type=\"text\" role=\"combobox\" [attr.aria-readonly]=\"true\" readonly=\"readonly\" id=\"{{generatedId}}\" class=\"ux-form-control__read-only {{inputStyleClass}}\" [value]=\"selectValue\" [tabindex]=\"tabindex\" /> -->\n <div\n id=\"{{ generatedId }}\"\n class=\"ux-form-group--read-only {{ inputStyleClass }}\"\n [tabindex]=\"tabindex\"\n attr.data-e2e=\"{{ e2eAttr }}-sel-ro\">\n {{ selectValue === '' || !selectValue ? emptyValueTextOnReadOnly : selectValue }}\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isCheckbox && !isReadOnly\">\n <input\n #formControlRef\n id=\"{{ generatedId }}\"\n type=\"checkbox\"\n class=\"ux-input__checkbox {{ styleClass }}\"\n [(ngModel)]=\"inputValue\"\n (click)=\"onChange($event)\"\n (blur)=\"onTouched($event)\"\n (focus)=\"onFocus($event)\"\n [disabled]=\"isDisabled\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\"\n attr.data-e2e=\"{{ e2eAttr }}-cb-rw\" />\n <label for=\"{{ generatedId }}\" *ngIf=\"checkboxLabel\">{{ checkboxLabel }}</label>\n <label for=\"{{ generatedId }}\" role=\"presentation\" *ngIf=\"!checkboxLabel\"> </label>\n</ng-container>\n\n<ng-container *ngIf=\"isCheckbox && isReadOnly\">\n <input\n #formControlRef\n id=\"{{ generatedId }}\"\n class=\"ux-input__checkbox {{ styleClass }}\"\n type=\"checkbox\"\n [checked]=\"inputValue\"\n onclick=\"return false;\"\n [tabindex]=\"tabindex\"\n readonly=\"readonly\"\n aria-readonly=\"true\"\n attr.data-e2e=\"{{ e2eAttr }}-cb-ro\" />\n <label for=\"{{ generatedId }}\" *ngIf=\"checkboxLabel\">{{ checkboxLabel }}</label>\n <label for=\"{{ generatedId }}\" role=\"presentation\" *ngIf=\"!checkboxLabel\"> </label>\n</ng-container>\n\n<ng-container *ngIf=\"isRadio && !isReadOnly\">\n <input\n #radioElement\n #formControlRef\n id=\"{{ generatedId }}\"\n class=\"ux-input__radio {{ styleClass }}\"\n type=\"radio\"\n [checked]=\"checked\"\n [name]=\"formControlName + groupId\"\n [value]=\"formControlValue\"\n (click)=\"onChange($event)\"\n (blur)=\"onTouched($event)\"\n (focus)=\"onFocus($event)\"\n [disabled]=\"isDisabled\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\"\n attr.data-e2e=\"{{ e2eAttr }}-ra-rw\" />\n <label for=\"{{ generatedId }}\" class=\"radio-label\">{{ radioLabel || ' ' }}</label>\n</ng-container>\n\n<ng-container *ngIf=\"isRadio && isReadOnly && isRadioOptionChecked\">\n <div\n *ngIf=\"radioLabel\"\n id=\"{{ generatedId }}\"\n class=\"ux-form-group--read-only {{ inputStyleClass }}\"\n [tabindex]=\"tabindex\"\n attr.data-e2e=\"{{ e2eAttr }}-ro\">\n {{ radioLabel }}\n </div>\n <div\n *ngIf=\"!radioLabel\"\n id=\"{{ generatedId }}\"\n class=\"ux-form-group--read-only {{ inputStyleClass }}\"\n [tabindex]=\"tabindex\"\n attr.data-e2e=\"{{ e2eAttr }}-ro\">\n {{ inputValue }}\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isReadOnly && !isCheckbox && !isNumber && !isSelect && !isRadio && !isTextarea\">\n <div\n id=\"{{ generatedId }}\"\n class=\"ux-form-group--read-only {{ inputStyleClass }}\"\n [tabindex]=\"tabindex\"\n attr.data-e2e=\"{{ e2eAttr }}-ro\">\n {{ inputValue === '' || !inputValue ? emptyValueTextOnReadOnly : inputValue }}\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isNumber\">\n <div\n *ngIf=\"isReadOnly\"\n id=\"{{ generatedId }}\"\n class=\"ux-form-group--read-only {{ inputStyleClass }}\"\n [tabindex]=\"tabindex\"\n attr.data-e2e=\"{{ e2eAttr }}-sel-ro\">\n {{ inputRef.value === '' || !inputRef.value ? emptyValueTextOnReadOnly : inputRef.value }}\n </div>\n <span [hidden]=\"isReadOnly\" attr.data-e2e=\"{{ e2eAttr }}-num-rw\">\n <input\n #inputRef\n #formControlRef\n id=\"{{ generatedId }}\"\n type=\"text\"\n [uxCleave]=\"cleaveOptions\"\n [readOnly]=\"isReadOnly\"\n [(ngModel)]=\"inputValue\"\n [isModelNumber]=\"true\"\n class=\"ux-form-control {{ inputStyleClass }}\"\n (change)=\"onChange($event)\"\n (keyup)=\"onChange($event)\"\n (blur)=\"onTouched($event)\"\n (focus)=\"onFocus($event)\"\n placeholder=\"{{ placeholderLabel }}\"\n [disabled]=\"isDisabled\"\n [uxMaxlength]=\"maxlength\"\n (validityChange)=\"OnMaxLengthValidityChange($event)\"\n [isShowMaxlengthCounter]=\"isShowMaxlengthCounter\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\" />\n </span>\n</ng-container>\n\n<ng-container *ngIf=\"isTextarea && isReadOnly\">\n <div\n id=\"{{ generatedId }}\"\n class=\"ux-form-group--read-only {{ inputStyleClass }}\"\n [tabindex]=\"tabindex\"\n attr.data-e2e=\"{{ e2eAttr }}-ro\">\n <pre>{{ inputValue === '' || !inputValue ? emptyValueTextOnReadOnly : inputValue }}</pre>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"!isFieldValid && !hasFormGroupParent\">\n <ux-control-feedback\n *ngIf=\"validationErrorMessage\"\n typeClass=\"{{ validationErrorType ? validationErrorType : 'danger' }}\"\n attr.data-e2e=\"{{ e2eAttr }}\">\n {{\n validationErrorMessage && $any(validationErrorMessage).id\n ? ($any(validationErrorMessage).id | translate : $any(validationErrorMessage).params)\n : validationErrorMessage\n }}\n </ux-control-feedback>\n</ng-container>\n\n<ng-container *ngIf=\"!isMaxLengthValid\">\n <ux-control-feedback *ngIf=\"maxLengthValidationErrorMessage\" typeClass=\"danger\" attr.data-e2e=\"{{ e2eAttr }}\">\n {{ maxLengthValidationErrorMessage }}\n </ux-control-feedback>\n</ng-container>\n", styles: ["input.ux-form-control,select.ux-form-control{border:1px solid var(--eui-base-color-grey-20);border-radius:var(--eui-base-border-radius);color:var(--eui-base-color-grey-100);font-size:var(--eui-base-font-size);font-style:normal;font-weight:400;height:calc(var(--eui-base-spacing-2xl) + 2px);padding:var(--eui-base-spacing-xs) var(--eui-base-spacing-s);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}input.ux-form-control:active,input.ux-form-control:focus,select.ux-form-control:active,select.ux-form-control:focus{outline:2px solid var(--eui-base-color-accessible-focus);outline-offset:-2px;-moz-outline-radius:var(--eui-base-border-radius);transition:outline .15s ease-in-out,border .15s ease-in-out}textarea.ux-form-control{border:1px solid var(--eui-base-color-grey-20);border-radius:var(--eui-base-border-radius);color:var(--eui-base-color-grey-100);font-size:var(--eui-base-font-size);font-style:normal;font-weight:400;padding:var(--eui-base-spacing-xs) var(--eui-base-spacing-s);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}textarea.ux-form-control:active,textarea.ux-form-control:focus{outline:2px solid var(--eui-base-color-accessible-focus);outline-offset:-2px;-moz-outline-radius:var(--eui-base-border-radius);transition:outline .15s ease-in-out,border .15s ease-in-out}input::-ms-clear{display:none}.ux-clearable-input-wrapper{display:flex;flex:1 1 0%;position:relative}.ux-clearable-input-wrapper .ux-clearable-input-wrapper__clear{color:var(--eui-base-color-grey-35);cursor:pointer;font-size:var(--eui-base-font-size-xl);font-style:normal;position:absolute;right:var(--eui-base-spacing-xs);top:var(--eui-base-spacing-xs);-webkit-user-select:none;user-select:none;z-index:var(--eui-base-z-index-clearable-icon)}.ux-clearable-input-wrapper .ux-clearable-input-wrapper__clear:hover{color:var(--eui-base-color-danger);opacity:1}.ux-clearable-input-wrapper .ux-clearable-input-wrapper__clear:before{font-family:eui-icons!important}@keyframes borderscale{50%{box-shadow:0 0 0 2px var(--eui-base-color-primary-110)}}select.ux-form-control:not([readonly]){-webkit-appearance:none;appearance:none;background-color:var(--eui-base-color-white);background-image:url('data:image/svg+xml;utf8,<svg viewBox=\"0 0 4 5\" fill=\"black\" xmlns=\"http://www.w3.org/2000/svg\" name=\"arrow-up-down\" aria-label=\"Close menu\" role=\"img\"><path d=\"M2 0L0 2h4zm0 5L0 3h4z\"/></svg>');background-position:calc(100% - var(--eui-base-spacing-s)) center;background-repeat:no-repeat;background-size:var(--eui-base-spacing-xs);padding-right:var(--eui-base-spacing-xl)}:host{width:100%}.ux-form-control{background-clip:padding-box;background-color:var(--eui-base-color-white);border-radius:var(--eui-border-radius-base);display:block;line-height:var(--eui-base-line-height);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}.ux-form-control:disabled,.ux-form-control[readonly]{background-color:var(--eui-base-color-grey-5)!important;color:var(--eui-base-color-grey-80)!important}.ux-form-control.custom-select,.ux-form-control.ux-form-control__custom-select{padding-right:var(--eui-base-spacing-2xl);text-overflow:ellipsis}select.ux-form-control[multiple],select.ux-form-control[size]{height:calc(var(--eui-base-spacing-2xl) + var(--eui-base-spacing-m) + 2px)!important;padding-right:0}select.ux-form-control:not([size]),select.ux-form-control[size=\"1\"],select.ux-form-control:not([multiple]){height:calc(var(--eui-base-spacing-2xl) + 2px)}textarea.ux-form-control{height:auto}.ux-input__checkbox:not(.cdk-visually-hidden){-webkit-appearance:inherit;appearance:inherit;cursor:pointer;display:inline-flex;flex-shrink:0;height:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs));margin-right:var(--eui-base-spacing-s);position:relative;transition:all .25s ease;vertical-align:top;width:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs));accent-color:var(--eui-base-color-white);background:var(--eui-base-color-white);border:2px solid var(--eui-base-color-grey-20)}.ux-input__checkbox:not(.cdk-visually-hidden)+label{display:inline-flex;cursor:pointer;margin-right:var(--eui-base-spacing-m);white-space:inherit}.ux-input__checkbox:not(.cdk-visually-hidden):checked{background:var(--eui-base-color-primary-100);opacity:1}.ux-input__checkbox:not(.cdk-visually-hidden):checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Ctitle%3ECheckmark%3C/title%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='64' d='M416 128L192 384l-96-96'/%3E%3C/svg%3E\");height:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs));width:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs))}.ux-input__checkbox:not(.cdk-visually-hidden):disabled:not([readonly]){background:var(--eui-base-color-grey-15);opacity:.25;pointer-events:none;-webkit-user-select:none;user-select:none}.ux-input__checkbox:not(.cdk-visually-hidden):disabled:not([readonly]):checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Ctitle%3ECheckmark%3C/title%3E%3Cpath fill='none' stroke='%23004494' stroke-linecap='round' stroke-linejoin='round' stroke-width='64' d='M416 128L192 384l-96-96'/%3E%3C/svg%3E\")}.ux-input__checkbox:not(.cdk-visually-hidden):disabled:not([readonly])+label{pointer-events:none}.ux-input__checkbox:not(.cdk-visually-hidden)[readonly]{background:var(--eui-base-color-grey-35);opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none}.ux-input__checkbox:not(.cdk-visually-hidden)[readonly]:checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Ctitle%3ECheckmark%3C/title%3E%3Cpath fill='none' stroke='%23004494' stroke-linecap='round' stroke-linejoin='round' stroke-width='64' d='M416 128L192 384l-96-96'/%3E%3C/svg%3E\")}.ux-input__checkbox:not(.cdk-visually-hidden)[readonly]+label{pointer-events:none}.ux-input__checkbox:not(.cdk-visually-hidden):active,.ux-input__checkbox:not(.cdk-visually-hidden):focus{box-shadow:var(--eui-base-shadow-3);outline:2px solid var(--eui-base-color-accessible-focus);outline-offset:0;-moz-outline-radius:var(--eui-base-border-radius);transition:outline .15s ease-in-out,border .15s ease-in-out}.ux-input__radio:not(.cdk-visually-hidden){-webkit-appearance:inherit;appearance:inherit;align-items:center;border-radius:50%;cursor:pointer;display:inline-flex;flex-shrink:0;height:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs));margin-right:var(--eui-base-spacing-s);position:relative;vertical-align:bottom;transition:all .25s ease;width:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs));accent-color:var(--eui-base-color-white);background:var(--eui-base-color-white);border:2px solid var(--eui-base-color-grey-20)}.ux-input__radio:not(.cdk-visually-hidden)+label{display:inline-flex;cursor:pointer;margin-right:var(--eui-base-spacing-m);white-space:inherit}.ux-input__radio:not(.cdk-visually-hidden):checked{background:var(--eui-base-color-white)}.ux-input__radio:not(.cdk-visually-hidden):checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'%3E%3Ctitle%3EEllipse%3C/title%3E%3Cpath fill='%23004494' stroke='%23004494' d='M256 464c-114.69 0-208-93.31-208-208S141.31 48 256 48s208 93.31 208 208-93.31 208-208 208z'/%3E%3C/svg%3E\")}.ux-input__radio:not(.cdk-visually-hidden):disabled:not([readonly]){background:var(--eui-base-color-grey-15);opacity:.25;pointer-events:none;-webkit-user-select:none;user-select:none}.ux-input__radio:not(.cdk-visually-hidden):disabled:not([readonly]):checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'%3E%3Ctitle%3EEllipse%3C/title%3E%3Cpath fill='%23004494' stroke='%23004494' d='M256 464c-114.69 0-208-93.31-208-208S141.31 48 256 48s208 93.31 208 208-93.31 208-208 208z'/%3E%3C/svg%3E\")}.ux-input__radio:not(.cdk-visually-hidden):disabled:not([readonly])+label{pointer-events:none}.ux-input__radio:not(.cdk-visually-hidden)[readonly]{display:none;opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none}.ux-input__radio:not(.cdk-visually-hidden)[readonly]:checked{display:inline-flex}.ux-input__radio:not(.cdk-visually-hidden)[readonly]:checked:before{background:var(--eui-base-color-grey-25);border-radius:50%;height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'%3E%3Ctitle%3EEllipse%3C/title%3E%3Cpath fill='%23004494' stroke='%23004494' d='M256 464c-114.69 0-208-93.31-208-208S141.31 48 256 48s208 93.31 208 208-93.31 208-208 208z'/%3E%3C/svg%3E\")}.ux-input__radio:not(.cdk-visually-hidden).eui-input-radio--invalid:not(:disabled):not([readonly]),.ux-input__radio:not(.cdk-visually-hidden).eui-input-radio--danger:not(:disabled):not([readonly]){border:2px solid var(--eui-base-color-danger-100)}.ux-input__radio:not(.cdk-visually-hidden).eui-input-radio--invalid:not(:disabled):not([readonly]):checked:before,.ux-input__radio:not(.cdk-visually-hidden).eui-input-radio--danger:not(:disabled):not([readonly]):checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'%3E%3Ctitle%3EEllipse%3C/title%3E%3Cpath fill='%23da2131' stroke='%23da2131' d='M256 464c-114.69 0-208-93.31-208-208S141.31 48 256 48s208 93.31 208 208-93.31 208-208 208z'/%3E%3C/svg%3E\")}.ux-input__radio:not(.cdk-visually-hidden):active,.ux-input__radio:not(.cdk-visually-hidden):focus{box-shadow:var(--eui-base-shadow-3);outline:2px solid var(--eui-base-color-accessible-focus);outline-offset:0;-moz-outline-radius:var(--eui-base-border-radius);transition:outline .15s ease-in-out,border .15s ease-in-out}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.UxControlFeedbackComponent, selector: "ux-control-feedback", inputs: ["styleClass", "typeClass", "e2eAttr"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.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: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.UxMaxlengthDirective, selector: "input[type=\"text\"][uxMaxlength], input[type=\"password\"][uxMaxlength], textarea[uxMaxlength]", inputs: ["uxMaxlength", "isShowMaxlengthCounter"], outputs: ["validityChange"] }, { kind: "directive", type: i4.UxAutoResizeDirective, selector: "textarea[uxAutoResize]", inputs: ["uxAutoResize", "minRows"] }, { kind: "directive", type: i4.UxCleaveDirective, selector: "[uxCleave]", inputs: ["uxCleave", "readOnly", "isModelNumber"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
|
|
459
459
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: UxFormControlComponent, decorators: [{
|
|
460
460
|
type: Component,
|
|
461
461
|
args: [{ selector: 'ux-form-control', providers: [
|
|
@@ -469,7 +469,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
469
469
|
useExisting: forwardRef((() => UxFormControlComponent)),
|
|
470
470
|
multi: true,
|
|
471
471
|
},
|
|
472
|
-
], encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"isInputText && !isReadOnly\">\n <span attr.data-e2e=\"{{ e2eAttr }}-tf-rw\">\n <input\n #inputRef\n #formControlRef\n id=\"{{ generatedId }}\"\n type=\"text\"\n [(ngModel)]=\"inputValue\"\n class=\"ux-form-control {{ inputStyleClass }}\"\n (change)=\"onChange($event)\"\n (keyup)=\"onChange($event)\"\n (blur)=\"onTouched($event)\"\n (focus)=\"onFocus($event)\"\n placeholder=\"{{ placeholderLabel }}\"\n [uxMaxlength]=\"maxlength\"\n (validityChange)=\"OnMaxLengthValidityChange($event)\"\n [isShowMaxlengthCounter]=\"isShowMaxlengthCounter\"\n [disabled]=\"isDisabled\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\" />\n </span>\n</ng-container>\n\n<ng-container *ngIf=\"isTextarea && !isReadOnly\">\n <span attr.data-e2e=\"{{ e2eAttr }}-ta-rw\">\n <textarea\n #formControlRef\n id=\"{{ generatedId }}\"\n class=\"ux-form-control {{ inputStyleClass }}\"\n [(ngModel)]=\"inputValue\"\n (change)=\"onChange($event)\"\n (keyup)=\"onChange($event)\"\n (blur)=\"onTouched($event)\"\n (focus)=\"onFocus($event)\"\n placeholder=\"{{ placeholderLabel }}\"\n [uxMaxlength]=\"maxlength\"\n (validityChange)=\"OnMaxLengthValidityChange($event)\"\n [isShowMaxlengthCounter]=\"isShowMaxlengthCounter\"\n [attr.rows]=\"rows\"\n [minRows]=\"minRows\"\n [disabled]=\"isDisabled\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\"\n [uxAutoResize]=\"isTextareaAutoresize\">\n </textarea>\n </span>\n</ng-container>\n\n<ng-container *ngIf=\"isSelect && !isReadOnly\">\n <select\n #formControlRef\n id=\"{{ generatedId }}\"\n class=\"ux-form-control ux-form-control__custom-select {{ inputStyleClass }}\"\n [(ngModel)]=\"inputValue\"\n (change)=\"onChange($event)\"\n (keyup)=\"onChange($event)\"\n (blur)=\"onTouched($event)\"\n (focus)=\"onFocus($event)\"\n [disabled]=\"isDisabled\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\"\n attr.data-e2e=\"{{ e2eAttr }}-sel-rw\">\n <ng-container *ngIf=\"selectOptions\">\n <option *ngIf=\"!selectNoBlankLine\" [value]=\"'' || null\" class=\"ux-u-color-grey\">{{ placeholderLabel }}</option>\n <ng-template [ngIf]=\"isSelectHasOptions\">\n <ng-template ngFor let-item [ngForOf]=\"selectOptions\">\n <optgroup *ngIf=\"item.options\" label=\"{{ item.value }}\" class=\"ux-u-font-regular\">\n <option\n *ngFor=\"let opt of item.options\"\n [value]=\"opt[selectKeyName]\"\n [selected]=\"inputValue === opt[selectKeyName]\">\n {{ opt[selectValueName] }}\n </option>\n </optgroup>\n <option *ngIf=\"!item.options\" [value]=\"item[selectKeyName]\" [selected]=\"inputValue === item[selectKeyName]\">\n {{ item[selectValueName] }}\n </option>\n </ng-template>\n </ng-template>\n\n <ng-template [ngIf]=\"!isSelectHasOptions\">\n <option *ngFor=\"let opt of selectOptions\" [value]=\"opt[selectKeyName]\" [selected]=\"inputValue === opt[selectKeyName]\">\n {{ opt[selectValueName] }}\n </option>\n </ng-template>\n </ng-container>\n <ng-content *ngIf=\"!selectOptions\"></ng-content>\n </select>\n</ng-container>\n\n<ng-container *ngIf=\"isReadOnly && isSelect\">\n <!-- <input type=\"text\" role=\"combobox\" [attr.aria-readonly]=\"true\" readonly=\"readonly\" id=\"{{generatedId}}\" class=\"ux-form-control__read-only {{inputStyleClass}}\" [value]=\"selectValue\" [tabindex]=\"tabindex\" /> -->\n <div\n id=\"{{ generatedId }}\"\n class=\"ux-form-group--read-only {{ inputStyleClass }}\"\n [tabindex]=\"tabindex\"\n attr.data-e2e=\"{{ e2eAttr }}-sel-ro\">\n {{ selectValue === '' || !selectValue ? emptyValueTextOnReadOnly : selectValue }}\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isCheckbox && !isReadOnly\">\n <input\n #formControlRef\n id=\"{{ generatedId }}\"\n type=\"checkbox\"\n class=\"ux-input__checkbox {{ styleClass }}\"\n [(ngModel)]=\"inputValue\"\n (click)=\"onChange($event)\"\n (blur)=\"onTouched($event)\"\n (focus)=\"onFocus($event)\"\n [disabled]=\"isDisabled\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\"\n attr.data-e2e=\"{{ e2eAttr }}-cb-rw\" />\n <label for=\"{{ generatedId }}\" *ngIf=\"checkboxLabel\">{{ checkboxLabel }}</label>\n <label for=\"{{ generatedId }}\" role=\"presentation\" *ngIf=\"!checkboxLabel\"> </label>\n</ng-container>\n\n<ng-container *ngIf=\"isCheckbox && isReadOnly\">\n <input\n #formControlRef\n id=\"{{ generatedId }}\"\n class=\"ux-input__checkbox {{ styleClass }}\"\n type=\"checkbox\"\n [checked]=\"inputValue\"\n onclick=\"return false;\"\n [tabindex]=\"tabindex\"\n readonly=\"readonly\"\n aria-readonly=\"true\"\n attr.data-e2e=\"{{ e2eAttr }}-cb-ro\" />\n <label for=\"{{ generatedId }}\" *ngIf=\"checkboxLabel\">{{ checkboxLabel }}</label>\n <label for=\"{{ generatedId }}\" role=\"presentation\" *ngIf=\"!checkboxLabel\"> </label>\n</ng-container>\n\n<ng-container *ngIf=\"isRadio && !isReadOnly\">\n <input\n #radioElement\n #formControlRef\n id=\"{{ generatedId }}\"\n class=\"ux-input__radio {{ styleClass }}\"\n type=\"radio\"\n [checked]=\"checked\"\n [name]=\"formControlName + groupId\"\n [value]=\"formControlValue\"\n (click)=\"onChange($event)\"\n (blur)=\"onTouched($event)\"\n (focus)=\"onFocus($event)\"\n [disabled]=\"isDisabled\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\"\n attr.data-e2e=\"{{ e2eAttr }}-ra-rw\" />\n <label for=\"{{ generatedId }}\" class=\"radio-label\">{{ radioLabel || ' ' }}</label>\n</ng-container>\n\n<ng-container *ngIf=\"isRadio && isReadOnly && isRadioOptionChecked\">\n <div\n *ngIf=\"radioLabel\"\n id=\"{{ generatedId }}\"\n class=\"ux-form-group--read-only {{ inputStyleClass }}\"\n [tabindex]=\"tabindex\"\n attr.data-e2e=\"{{ e2eAttr }}-ro\">\n {{ radioLabel }}\n </div>\n <div\n *ngIf=\"!radioLabel\"\n id=\"{{ generatedId }}\"\n class=\"ux-form-group--read-only {{ inputStyleClass }}\"\n [tabindex]=\"tabindex\"\n attr.data-e2e=\"{{ e2eAttr }}-ro\">\n {{ inputValue }}\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isReadOnly && !isCheckbox && !isNumber && !isSelect && !isRadio && !isTextarea\">\n <div\n id=\"{{ generatedId }}\"\n class=\"ux-form-group--read-only {{ inputStyleClass }}\"\n [tabindex]=\"tabindex\"\n attr.data-e2e=\"{{ e2eAttr }}-ro\">\n {{ inputValue === '' || !inputValue ? emptyValueTextOnReadOnly : inputValue }}\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isNumber\">\n <div\n *ngIf=\"isReadOnly\"\n id=\"{{ generatedId }}\"\n class=\"ux-form-group--read-only {{ inputStyleClass }}\"\n [tabindex]=\"tabindex\"\n attr.data-e2e=\"{{ e2eAttr }}-sel-ro\">\n {{ inputRef.value === '' || !inputRef.value ? emptyValueTextOnReadOnly : inputRef.value }}\n </div>\n <span [hidden]=\"isReadOnly\" attr.data-e2e=\"{{ e2eAttr }}-num-rw\">\n <input\n #inputRef\n #formControlRef\n id=\"{{ generatedId }}\"\n type=\"text\"\n [uxCleave]=\"cleaveOptions\"\n [readOnly]=\"isReadOnly\"\n [(ngModel)]=\"inputValue\"\n [isModelNumber]=\"true\"\n class=\"ux-form-control {{ inputStyleClass }}\"\n (change)=\"onChange($event)\"\n (keyup)=\"onChange($event)\"\n (blur)=\"onTouched($event)\"\n (focus)=\"onFocus($event)\"\n placeholder=\"{{ placeholderLabel }}\"\n [disabled]=\"isDisabled\"\n [uxMaxlength]=\"maxlength\"\n (validityChange)=\"OnMaxLengthValidityChange($event)\"\n [isShowMaxlengthCounter]=\"isShowMaxlengthCounter\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\" />\n </span>\n</ng-container>\n\n<ng-container *ngIf=\"isTextarea && isReadOnly\">\n <div\n id=\"{{ generatedId }}\"\n class=\"ux-form-group--read-only {{ inputStyleClass }}\"\n [tabindex]=\"tabindex\"\n attr.data-e2e=\"{{ e2eAttr }}-ro\">\n <pre>{{ inputValue === '' || !inputValue ? emptyValueTextOnReadOnly : inputValue }}</pre>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"!isFieldValid && !hasFormGroupParent\">\n <ux-control-feedback\n *ngIf=\"validationErrorMessage\"\n typeClass=\"{{ validationErrorType ? validationErrorType : 'danger' }}\"\n attr.data-e2e=\"{{ e2eAttr }}\">\n {{\n validationErrorMessage && $any(validationErrorMessage).id\n ? ($any(validationErrorMessage).id | translate : $any(validationErrorMessage).params)\n : validationErrorMessage\n }}\n </ux-control-feedback>\n</ng-container>\n\n<ng-container *ngIf=\"!isMaxLengthValid\">\n <ux-control-feedback *ngIf=\"maxLengthValidationErrorMessage\" typeClass=\"danger\" attr.data-e2e=\"{{ e2eAttr }}\">\n {{ maxLengthValidationErrorMessage }}\n </ux-control-feedback>\n</ng-container>\n", styles: ["input.ux-form-control,select.ux-form-control,textarea.ux-form-control{border:1px solid var(--eui-base-color-grey-20);border-radius:var(--eui-base-border-radius);color:var(--eui-base-color-grey-100);font-size:var(--eui-base-font-size);font-style:normal;font-weight:400;height:calc(var(--eui-base-spacing-2xl) + 2px);padding:var(--eui-base-spacing-xs) var(--eui-base-spacing-s);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}input.ux-form-control:active,input.ux-form-control:focus,select.ux-form-control:active,select.ux-form-control:focus,textarea.ux-form-control:active,textarea.ux-form-control:focus{outline:2px solid var(--eui-base-color-accessible-focus);outline-offset:-2px;-moz-outline-radius:var(--eui-base-border-radius);transition:outline .15s ease-in-out,border .15s ease-in-out}input::-ms-clear{display:none}.ux-clearable-input-wrapper{display:flex;flex:1 1 0%;position:relative}.ux-clearable-input-wrapper .ux-clearable-input-wrapper__clear{color:var(--eui-base-color-grey-35);cursor:pointer;font-size:var(--eui-base-font-size-xl);font-style:normal;position:absolute;right:var(--eui-base-spacing-xs);top:var(--eui-base-spacing-xs);-webkit-user-select:none;user-select:none;z-index:var(--eui-base-z-index-clearable-icon)}.ux-clearable-input-wrapper .ux-clearable-input-wrapper__clear:hover{color:var(--eui-base-color-danger);opacity:1}.ux-clearable-input-wrapper .ux-clearable-input-wrapper__clear:before{font-family:eui-icons!important}@keyframes borderscale{50%{box-shadow:0 0 0 2px var(--eui-base-color-primary-110)}}select.ux-form-control:not([readonly]){-webkit-appearance:none;appearance:none;background-color:var(--eui-base-color-white);background-image:url('data:image/svg+xml;utf8,<svg viewBox=\"0 0 4 5\" fill=\"black\" xmlns=\"http://www.w3.org/2000/svg\" name=\"arrow-up-down\" aria-label=\"Close menu\" role=\"img\"><path d=\"M2 0L0 2h4zm0 5L0 3h4z\"/></svg>');background-position:calc(100% - var(--eui-base-spacing-s)) center;background-repeat:no-repeat;background-size:var(--eui-base-spacing-xs);padding-right:var(--eui-base-spacing-xl)}:host{width:100%}.ux-form-control{background-clip:padding-box;background-color:var(--eui-base-color-white);border-radius:var(--eui-border-radius-base);display:block;line-height:var(--eui-base-line-height);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}.ux-form-control:disabled,.ux-form-control[readonly]{background-color:var(--eui-base-color-grey-5)!important;color:var(--eui-base-color-grey-80)!important}.ux-form-control.custom-select,.ux-form-control.ux-form-control__custom-select{padding-right:var(--eui-base-spacing-2xl);text-overflow:ellipsis}select.ux-form-control[multiple],select.ux-form-control[size]{height:calc(var(--eui-base-spacing-2xl) + var(--eui-base-spacing-m) + 2px)!important;padding-right:0}select.ux-form-control:not([size]),select.ux-form-control[size=\"1\"],select.ux-form-control:not([multiple]){height:calc(var(--eui-base-spacing-2xl) + 2px)}textarea.ux-form-control{height:auto}.ux-input__checkbox:not(.cdk-visually-hidden){-webkit-appearance:inherit;appearance:inherit;cursor:pointer;display:inline-flex;flex-shrink:0;height:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs));margin-right:var(--eui-base-spacing-s);position:relative;transition:all .25s ease;vertical-align:top;width:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs));accent-color:var(--eui-base-color-white);background:var(--eui-base-color-white);border:2px solid var(--eui-base-color-grey-20)}.ux-input__checkbox:not(.cdk-visually-hidden)+label{display:inline-flex;cursor:pointer;margin-right:var(--eui-base-spacing-m);white-space:inherit}.ux-input__checkbox:not(.cdk-visually-hidden):checked{background:var(--eui-base-color-primary-100);opacity:1}.ux-input__checkbox:not(.cdk-visually-hidden):checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Ctitle%3ECheckmark%3C/title%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='64' d='M416 128L192 384l-96-96'/%3E%3C/svg%3E\");height:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs));width:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs))}.ux-input__checkbox:not(.cdk-visually-hidden):disabled:not([readonly]){background:var(--eui-base-color-grey-15);opacity:.25;pointer-events:none;-webkit-user-select:none;user-select:none}.ux-input__checkbox:not(.cdk-visually-hidden):disabled:not([readonly]):checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Ctitle%3ECheckmark%3C/title%3E%3Cpath fill='none' stroke='%23004494' stroke-linecap='round' stroke-linejoin='round' stroke-width='64' d='M416 128L192 384l-96-96'/%3E%3C/svg%3E\")}.ux-input__checkbox:not(.cdk-visually-hidden):disabled:not([readonly])+label{pointer-events:none}.ux-input__checkbox:not(.cdk-visually-hidden)[readonly]{background:var(--eui-base-color-grey-35);opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none}.ux-input__checkbox:not(.cdk-visually-hidden)[readonly]:checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Ctitle%3ECheckmark%3C/title%3E%3Cpath fill='none' stroke='%23004494' stroke-linecap='round' stroke-linejoin='round' stroke-width='64' d='M416 128L192 384l-96-96'/%3E%3C/svg%3E\")}.ux-input__checkbox:not(.cdk-visually-hidden)[readonly]+label{pointer-events:none}.ux-input__checkbox:not(.cdk-visually-hidden):active,.ux-input__checkbox:not(.cdk-visually-hidden):focus{box-shadow:var(--eui-base-shadow-3);outline:2px solid var(--eui-base-color-accessible-focus);outline-offset:0;-moz-outline-radius:var(--eui-base-border-radius);transition:outline .15s ease-in-out,border .15s ease-in-out}.ux-input__radio:not(.cdk-visually-hidden){-webkit-appearance:inherit;appearance:inherit;align-items:center;border-radius:50%;cursor:pointer;display:inline-flex;flex-shrink:0;height:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs));margin-right:var(--eui-base-spacing-s);position:relative;vertical-align:bottom;transition:all .25s ease;width:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs));accent-color:var(--eui-base-color-white);background:var(--eui-base-color-white);border:2px solid var(--eui-base-color-grey-20)}.ux-input__radio:not(.cdk-visually-hidden)+label{display:inline-flex;cursor:pointer;margin-right:var(--eui-base-spacing-m);white-space:inherit}.ux-input__radio:not(.cdk-visually-hidden):checked{background:var(--eui-base-color-white)}.ux-input__radio:not(.cdk-visually-hidden):checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'%3E%3Ctitle%3EEllipse%3C/title%3E%3Cpath fill='%23004494' stroke='%23004494' d='M256 464c-114.69 0-208-93.31-208-208S141.31 48 256 48s208 93.31 208 208-93.31 208-208 208z'/%3E%3C/svg%3E\")}.ux-input__radio:not(.cdk-visually-hidden):disabled:not([readonly]){background:var(--eui-base-color-grey-15);opacity:.25;pointer-events:none;-webkit-user-select:none;user-select:none}.ux-input__radio:not(.cdk-visually-hidden):disabled:not([readonly]):checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'%3E%3Ctitle%3EEllipse%3C/title%3E%3Cpath fill='%23004494' stroke='%23004494' d='M256 464c-114.69 0-208-93.31-208-208S141.31 48 256 48s208 93.31 208 208-93.31 208-208 208z'/%3E%3C/svg%3E\")}.ux-input__radio:not(.cdk-visually-hidden):disabled:not([readonly])+label{pointer-events:none}.ux-input__radio:not(.cdk-visually-hidden)[readonly]{display:none;opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none}.ux-input__radio:not(.cdk-visually-hidden)[readonly]:checked{display:inline-flex}.ux-input__radio:not(.cdk-visually-hidden)[readonly]:checked:before{background:var(--eui-base-color-grey-25);border-radius:50%;height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'%3E%3Ctitle%3EEllipse%3C/title%3E%3Cpath fill='%23004494' stroke='%23004494' d='M256 464c-114.69 0-208-93.31-208-208S141.31 48 256 48s208 93.31 208 208-93.31 208-208 208z'/%3E%3C/svg%3E\")}.ux-input__radio:not(.cdk-visually-hidden).eui-input-radio--invalid:not(:disabled):not([readonly]),.ux-input__radio:not(.cdk-visually-hidden).eui-input-radio--danger:not(:disabled):not([readonly]){border:2px solid var(--eui-base-color-danger-100)}.ux-input__radio:not(.cdk-visually-hidden).eui-input-radio--invalid:not(:disabled):not([readonly]):checked:before,.ux-input__radio:not(.cdk-visually-hidden).eui-input-radio--danger:not(:disabled):not([readonly]):checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'%3E%3Ctitle%3EEllipse%3C/title%3E%3Cpath fill='%23da2131' stroke='%23da2131' d='M256 464c-114.69 0-208-93.31-208-208S141.31 48 256 48s208 93.31 208 208-93.31 208-208 208z'/%3E%3C/svg%3E\")}.ux-input__radio:not(.cdk-visually-hidden):active,.ux-input__radio:not(.cdk-visually-hidden):focus{box-shadow:var(--eui-base-shadow-3);outline:2px solid var(--eui-base-color-accessible-focus);outline-offset:0;-moz-outline-radius:var(--eui-base-border-radius);transition:outline .15s ease-in-out,border .15s ease-in-out}\n"] }]
|
|
472
|
+
], encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"isInputText && !isReadOnly\">\n <span attr.data-e2e=\"{{ e2eAttr }}-tf-rw\">\n <input\n #inputRef\n #formControlRef\n id=\"{{ generatedId }}\"\n type=\"text\"\n [(ngModel)]=\"inputValue\"\n class=\"ux-form-control {{ inputStyleClass }}\"\n (change)=\"onChange($event)\"\n (keyup)=\"onChange($event)\"\n (blur)=\"onTouched($event)\"\n (focus)=\"onFocus($event)\"\n placeholder=\"{{ placeholderLabel }}\"\n [uxMaxlength]=\"maxlength\"\n (validityChange)=\"OnMaxLengthValidityChange($event)\"\n [isShowMaxlengthCounter]=\"isShowMaxlengthCounter\"\n [disabled]=\"isDisabled\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\" />\n </span>\n</ng-container>\n\n<ng-container *ngIf=\"isTextarea && !isReadOnly\">\n <span attr.data-e2e=\"{{ e2eAttr }}-ta-rw\">\n <textarea\n #formControlRef\n id=\"{{ generatedId }}\"\n class=\"ux-form-control {{ inputStyleClass }}\"\n [(ngModel)]=\"inputValue\"\n (change)=\"onChange($event)\"\n (keyup)=\"onChange($event)\"\n (blur)=\"onTouched($event)\"\n (focus)=\"onFocus($event)\"\n placeholder=\"{{ placeholderLabel }}\"\n [uxMaxlength]=\"maxlength\"\n (validityChange)=\"OnMaxLengthValidityChange($event)\"\n [isShowMaxlengthCounter]=\"isShowMaxlengthCounter\"\n [attr.rows]=\"rows\"\n [minRows]=\"minRows\"\n [disabled]=\"isDisabled\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\"\n [uxAutoResize]=\"isTextareaAutoresize\">\n </textarea>\n </span>\n</ng-container>\n\n<ng-container *ngIf=\"isSelect && !isReadOnly\">\n <select\n #formControlRef\n id=\"{{ generatedId }}\"\n class=\"ux-form-control ux-form-control__custom-select {{ inputStyleClass }}\"\n [(ngModel)]=\"inputValue\"\n (change)=\"onChange($event)\"\n (keyup)=\"onChange($event)\"\n (blur)=\"onTouched($event)\"\n (focus)=\"onFocus($event)\"\n [disabled]=\"isDisabled\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\"\n attr.data-e2e=\"{{ e2eAttr }}-sel-rw\">\n <ng-container *ngIf=\"selectOptions\">\n <option *ngIf=\"!selectNoBlankLine\" [value]=\"'' || null\" class=\"ux-u-color-grey\">{{ placeholderLabel }}</option>\n <ng-template [ngIf]=\"isSelectHasOptions\">\n <ng-template ngFor let-item [ngForOf]=\"selectOptions\">\n <optgroup *ngIf=\"item.options\" label=\"{{ item.value }}\" class=\"ux-u-font-regular\">\n <option\n *ngFor=\"let opt of item.options\"\n [value]=\"opt[selectKeyName]\"\n [selected]=\"inputValue === opt[selectKeyName]\">\n {{ opt[selectValueName] }}\n </option>\n </optgroup>\n <option *ngIf=\"!item.options\" [value]=\"item[selectKeyName]\" [selected]=\"inputValue === item[selectKeyName]\">\n {{ item[selectValueName] }}\n </option>\n </ng-template>\n </ng-template>\n\n <ng-template [ngIf]=\"!isSelectHasOptions\">\n <option *ngFor=\"let opt of selectOptions\" [value]=\"opt[selectKeyName]\" [selected]=\"inputValue === opt[selectKeyName]\">\n {{ opt[selectValueName] }}\n </option>\n </ng-template>\n </ng-container>\n <ng-content *ngIf=\"!selectOptions\"></ng-content>\n </select>\n</ng-container>\n\n<ng-container *ngIf=\"isReadOnly && isSelect\">\n <!-- <input type=\"text\" role=\"combobox\" [attr.aria-readonly]=\"true\" readonly=\"readonly\" id=\"{{generatedId}}\" class=\"ux-form-control__read-only {{inputStyleClass}}\" [value]=\"selectValue\" [tabindex]=\"tabindex\" /> -->\n <div\n id=\"{{ generatedId }}\"\n class=\"ux-form-group--read-only {{ inputStyleClass }}\"\n [tabindex]=\"tabindex\"\n attr.data-e2e=\"{{ e2eAttr }}-sel-ro\">\n {{ selectValue === '' || !selectValue ? emptyValueTextOnReadOnly : selectValue }}\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isCheckbox && !isReadOnly\">\n <input\n #formControlRef\n id=\"{{ generatedId }}\"\n type=\"checkbox\"\n class=\"ux-input__checkbox {{ styleClass }}\"\n [(ngModel)]=\"inputValue\"\n (click)=\"onChange($event)\"\n (blur)=\"onTouched($event)\"\n (focus)=\"onFocus($event)\"\n [disabled]=\"isDisabled\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\"\n attr.data-e2e=\"{{ e2eAttr }}-cb-rw\" />\n <label for=\"{{ generatedId }}\" *ngIf=\"checkboxLabel\">{{ checkboxLabel }}</label>\n <label for=\"{{ generatedId }}\" role=\"presentation\" *ngIf=\"!checkboxLabel\"> </label>\n</ng-container>\n\n<ng-container *ngIf=\"isCheckbox && isReadOnly\">\n <input\n #formControlRef\n id=\"{{ generatedId }}\"\n class=\"ux-input__checkbox {{ styleClass }}\"\n type=\"checkbox\"\n [checked]=\"inputValue\"\n onclick=\"return false;\"\n [tabindex]=\"tabindex\"\n readonly=\"readonly\"\n aria-readonly=\"true\"\n attr.data-e2e=\"{{ e2eAttr }}-cb-ro\" />\n <label for=\"{{ generatedId }}\" *ngIf=\"checkboxLabel\">{{ checkboxLabel }}</label>\n <label for=\"{{ generatedId }}\" role=\"presentation\" *ngIf=\"!checkboxLabel\"> </label>\n</ng-container>\n\n<ng-container *ngIf=\"isRadio && !isReadOnly\">\n <input\n #radioElement\n #formControlRef\n id=\"{{ generatedId }}\"\n class=\"ux-input__radio {{ styleClass }}\"\n type=\"radio\"\n [checked]=\"checked\"\n [name]=\"formControlName + groupId\"\n [value]=\"formControlValue\"\n (click)=\"onChange($event)\"\n (blur)=\"onTouched($event)\"\n (focus)=\"onFocus($event)\"\n [disabled]=\"isDisabled\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\"\n attr.data-e2e=\"{{ e2eAttr }}-ra-rw\" />\n <label for=\"{{ generatedId }}\" class=\"radio-label\">{{ radioLabel || ' ' }}</label>\n</ng-container>\n\n<ng-container *ngIf=\"isRadio && isReadOnly && isRadioOptionChecked\">\n <div\n *ngIf=\"radioLabel\"\n id=\"{{ generatedId }}\"\n class=\"ux-form-group--read-only {{ inputStyleClass }}\"\n [tabindex]=\"tabindex\"\n attr.data-e2e=\"{{ e2eAttr }}-ro\">\n {{ radioLabel }}\n </div>\n <div\n *ngIf=\"!radioLabel\"\n id=\"{{ generatedId }}\"\n class=\"ux-form-group--read-only {{ inputStyleClass }}\"\n [tabindex]=\"tabindex\"\n attr.data-e2e=\"{{ e2eAttr }}-ro\">\n {{ inputValue }}\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isReadOnly && !isCheckbox && !isNumber && !isSelect && !isRadio && !isTextarea\">\n <div\n id=\"{{ generatedId }}\"\n class=\"ux-form-group--read-only {{ inputStyleClass }}\"\n [tabindex]=\"tabindex\"\n attr.data-e2e=\"{{ e2eAttr }}-ro\">\n {{ inputValue === '' || !inputValue ? emptyValueTextOnReadOnly : inputValue }}\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isNumber\">\n <div\n *ngIf=\"isReadOnly\"\n id=\"{{ generatedId }}\"\n class=\"ux-form-group--read-only {{ inputStyleClass }}\"\n [tabindex]=\"tabindex\"\n attr.data-e2e=\"{{ e2eAttr }}-sel-ro\">\n {{ inputRef.value === '' || !inputRef.value ? emptyValueTextOnReadOnly : inputRef.value }}\n </div>\n <span [hidden]=\"isReadOnly\" attr.data-e2e=\"{{ e2eAttr }}-num-rw\">\n <input\n #inputRef\n #formControlRef\n id=\"{{ generatedId }}\"\n type=\"text\"\n [uxCleave]=\"cleaveOptions\"\n [readOnly]=\"isReadOnly\"\n [(ngModel)]=\"inputValue\"\n [isModelNumber]=\"true\"\n class=\"ux-form-control {{ inputStyleClass }}\"\n (change)=\"onChange($event)\"\n (keyup)=\"onChange($event)\"\n (blur)=\"onTouched($event)\"\n (focus)=\"onFocus($event)\"\n placeholder=\"{{ placeholderLabel }}\"\n [disabled]=\"isDisabled\"\n [uxMaxlength]=\"maxlength\"\n (validityChange)=\"OnMaxLengthValidityChange($event)\"\n [isShowMaxlengthCounter]=\"isShowMaxlengthCounter\"\n [tabindex]=\"tabindex\"\n [attr.aria-invalid]=\"ariaInvalid\"\n [attr.aria-required]=\"isRequired\" />\n </span>\n</ng-container>\n\n<ng-container *ngIf=\"isTextarea && isReadOnly\">\n <div\n id=\"{{ generatedId }}\"\n class=\"ux-form-group--read-only {{ inputStyleClass }}\"\n [tabindex]=\"tabindex\"\n attr.data-e2e=\"{{ e2eAttr }}-ro\">\n <pre>{{ inputValue === '' || !inputValue ? emptyValueTextOnReadOnly : inputValue }}</pre>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"!isFieldValid && !hasFormGroupParent\">\n <ux-control-feedback\n *ngIf=\"validationErrorMessage\"\n typeClass=\"{{ validationErrorType ? validationErrorType : 'danger' }}\"\n attr.data-e2e=\"{{ e2eAttr }}\">\n {{\n validationErrorMessage && $any(validationErrorMessage).id\n ? ($any(validationErrorMessage).id | translate : $any(validationErrorMessage).params)\n : validationErrorMessage\n }}\n </ux-control-feedback>\n</ng-container>\n\n<ng-container *ngIf=\"!isMaxLengthValid\">\n <ux-control-feedback *ngIf=\"maxLengthValidationErrorMessage\" typeClass=\"danger\" attr.data-e2e=\"{{ e2eAttr }}\">\n {{ maxLengthValidationErrorMessage }}\n </ux-control-feedback>\n</ng-container>\n", styles: ["input.ux-form-control,select.ux-form-control{border:1px solid var(--eui-base-color-grey-20);border-radius:var(--eui-base-border-radius);color:var(--eui-base-color-grey-100);font-size:var(--eui-base-font-size);font-style:normal;font-weight:400;height:calc(var(--eui-base-spacing-2xl) + 2px);padding:var(--eui-base-spacing-xs) var(--eui-base-spacing-s);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}input.ux-form-control:active,input.ux-form-control:focus,select.ux-form-control:active,select.ux-form-control:focus{outline:2px solid var(--eui-base-color-accessible-focus);outline-offset:-2px;-moz-outline-radius:var(--eui-base-border-radius);transition:outline .15s ease-in-out,border .15s ease-in-out}textarea.ux-form-control{border:1px solid var(--eui-base-color-grey-20);border-radius:var(--eui-base-border-radius);color:var(--eui-base-color-grey-100);font-size:var(--eui-base-font-size);font-style:normal;font-weight:400;padding:var(--eui-base-spacing-xs) var(--eui-base-spacing-s);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}textarea.ux-form-control:active,textarea.ux-form-control:focus{outline:2px solid var(--eui-base-color-accessible-focus);outline-offset:-2px;-moz-outline-radius:var(--eui-base-border-radius);transition:outline .15s ease-in-out,border .15s ease-in-out}input::-ms-clear{display:none}.ux-clearable-input-wrapper{display:flex;flex:1 1 0%;position:relative}.ux-clearable-input-wrapper .ux-clearable-input-wrapper__clear{color:var(--eui-base-color-grey-35);cursor:pointer;font-size:var(--eui-base-font-size-xl);font-style:normal;position:absolute;right:var(--eui-base-spacing-xs);top:var(--eui-base-spacing-xs);-webkit-user-select:none;user-select:none;z-index:var(--eui-base-z-index-clearable-icon)}.ux-clearable-input-wrapper .ux-clearable-input-wrapper__clear:hover{color:var(--eui-base-color-danger);opacity:1}.ux-clearable-input-wrapper .ux-clearable-input-wrapper__clear:before{font-family:eui-icons!important}@keyframes borderscale{50%{box-shadow:0 0 0 2px var(--eui-base-color-primary-110)}}select.ux-form-control:not([readonly]){-webkit-appearance:none;appearance:none;background-color:var(--eui-base-color-white);background-image:url('data:image/svg+xml;utf8,<svg viewBox=\"0 0 4 5\" fill=\"black\" xmlns=\"http://www.w3.org/2000/svg\" name=\"arrow-up-down\" aria-label=\"Close menu\" role=\"img\"><path d=\"M2 0L0 2h4zm0 5L0 3h4z\"/></svg>');background-position:calc(100% - var(--eui-base-spacing-s)) center;background-repeat:no-repeat;background-size:var(--eui-base-spacing-xs);padding-right:var(--eui-base-spacing-xl)}:host{width:100%}.ux-form-control{background-clip:padding-box;background-color:var(--eui-base-color-white);border-radius:var(--eui-border-radius-base);display:block;line-height:var(--eui-base-line-height);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}.ux-form-control:disabled,.ux-form-control[readonly]{background-color:var(--eui-base-color-grey-5)!important;color:var(--eui-base-color-grey-80)!important}.ux-form-control.custom-select,.ux-form-control.ux-form-control__custom-select{padding-right:var(--eui-base-spacing-2xl);text-overflow:ellipsis}select.ux-form-control[multiple],select.ux-form-control[size]{height:calc(var(--eui-base-spacing-2xl) + var(--eui-base-spacing-m) + 2px)!important;padding-right:0}select.ux-form-control:not([size]),select.ux-form-control[size=\"1\"],select.ux-form-control:not([multiple]){height:calc(var(--eui-base-spacing-2xl) + 2px)}textarea.ux-form-control{height:auto}.ux-input__checkbox:not(.cdk-visually-hidden){-webkit-appearance:inherit;appearance:inherit;cursor:pointer;display:inline-flex;flex-shrink:0;height:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs));margin-right:var(--eui-base-spacing-s);position:relative;transition:all .25s ease;vertical-align:top;width:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs));accent-color:var(--eui-base-color-white);background:var(--eui-base-color-white);border:2px solid var(--eui-base-color-grey-20)}.ux-input__checkbox:not(.cdk-visually-hidden)+label{display:inline-flex;cursor:pointer;margin-right:var(--eui-base-spacing-m);white-space:inherit}.ux-input__checkbox:not(.cdk-visually-hidden):checked{background:var(--eui-base-color-primary-100);opacity:1}.ux-input__checkbox:not(.cdk-visually-hidden):checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Ctitle%3ECheckmark%3C/title%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='64' d='M416 128L192 384l-96-96'/%3E%3C/svg%3E\");height:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs));width:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs))}.ux-input__checkbox:not(.cdk-visually-hidden):disabled:not([readonly]){background:var(--eui-base-color-grey-15);opacity:.25;pointer-events:none;-webkit-user-select:none;user-select:none}.ux-input__checkbox:not(.cdk-visually-hidden):disabled:not([readonly]):checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Ctitle%3ECheckmark%3C/title%3E%3Cpath fill='none' stroke='%23004494' stroke-linecap='round' stroke-linejoin='round' stroke-width='64' d='M416 128L192 384l-96-96'/%3E%3C/svg%3E\")}.ux-input__checkbox:not(.cdk-visually-hidden):disabled:not([readonly])+label{pointer-events:none}.ux-input__checkbox:not(.cdk-visually-hidden)[readonly]{background:var(--eui-base-color-grey-35);opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none}.ux-input__checkbox:not(.cdk-visually-hidden)[readonly]:checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Ctitle%3ECheckmark%3C/title%3E%3Cpath fill='none' stroke='%23004494' stroke-linecap='round' stroke-linejoin='round' stroke-width='64' d='M416 128L192 384l-96-96'/%3E%3C/svg%3E\")}.ux-input__checkbox:not(.cdk-visually-hidden)[readonly]+label{pointer-events:none}.ux-input__checkbox:not(.cdk-visually-hidden):active,.ux-input__checkbox:not(.cdk-visually-hidden):focus{box-shadow:var(--eui-base-shadow-3);outline:2px solid var(--eui-base-color-accessible-focus);outline-offset:0;-moz-outline-radius:var(--eui-base-border-radius);transition:outline .15s ease-in-out,border .15s ease-in-out}.ux-input__radio:not(.cdk-visually-hidden){-webkit-appearance:inherit;appearance:inherit;align-items:center;border-radius:50%;cursor:pointer;display:inline-flex;flex-shrink:0;height:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs));margin-right:var(--eui-base-spacing-s);position:relative;vertical-align:bottom;transition:all .25s ease;width:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs));accent-color:var(--eui-base-color-white);background:var(--eui-base-color-white);border:2px solid var(--eui-base-color-grey-20)}.ux-input__radio:not(.cdk-visually-hidden)+label{display:inline-flex;cursor:pointer;margin-right:var(--eui-base-spacing-m);white-space:inherit}.ux-input__radio:not(.cdk-visually-hidden):checked{background:var(--eui-base-color-white)}.ux-input__radio:not(.cdk-visually-hidden):checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'%3E%3Ctitle%3EEllipse%3C/title%3E%3Cpath fill='%23004494' stroke='%23004494' d='M256 464c-114.69 0-208-93.31-208-208S141.31 48 256 48s208 93.31 208 208-93.31 208-208 208z'/%3E%3C/svg%3E\")}.ux-input__radio:not(.cdk-visually-hidden):disabled:not([readonly]){background:var(--eui-base-color-grey-15);opacity:.25;pointer-events:none;-webkit-user-select:none;user-select:none}.ux-input__radio:not(.cdk-visually-hidden):disabled:not([readonly]):checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'%3E%3Ctitle%3EEllipse%3C/title%3E%3Cpath fill='%23004494' stroke='%23004494' d='M256 464c-114.69 0-208-93.31-208-208S141.31 48 256 48s208 93.31 208 208-93.31 208-208 208z'/%3E%3C/svg%3E\")}.ux-input__radio:not(.cdk-visually-hidden):disabled:not([readonly])+label{pointer-events:none}.ux-input__radio:not(.cdk-visually-hidden)[readonly]{display:none;opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none}.ux-input__radio:not(.cdk-visually-hidden)[readonly]:checked{display:inline-flex}.ux-input__radio:not(.cdk-visually-hidden)[readonly]:checked:before{background:var(--eui-base-color-grey-25);border-radius:50%;height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'%3E%3Ctitle%3EEllipse%3C/title%3E%3Cpath fill='%23004494' stroke='%23004494' d='M256 464c-114.69 0-208-93.31-208-208S141.31 48 256 48s208 93.31 208 208-93.31 208-208 208z'/%3E%3C/svg%3E\")}.ux-input__radio:not(.cdk-visually-hidden).eui-input-radio--invalid:not(:disabled):not([readonly]),.ux-input__radio:not(.cdk-visually-hidden).eui-input-radio--danger:not(:disabled):not([readonly]){border:2px solid var(--eui-base-color-danger-100)}.ux-input__radio:not(.cdk-visually-hidden).eui-input-radio--invalid:not(:disabled):not([readonly]):checked:before,.ux-input__radio:not(.cdk-visually-hidden).eui-input-radio--danger:not(:disabled):not([readonly]):checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'%3E%3Ctitle%3EEllipse%3C/title%3E%3Cpath fill='%23da2131' stroke='%23da2131' d='M256 464c-114.69 0-208-93.31-208-208S141.31 48 256 48s208 93.31 208 208-93.31 208-208 208z'/%3E%3C/svg%3E\")}.ux-input__radio:not(.cdk-visually-hidden):active,.ux-input__radio:not(.cdk-visually-hidden):focus{box-shadow:var(--eui-base-shadow-3);outline:2px solid var(--eui-base-color-accessible-focus);outline-offset:0;-moz-outline-radius:var(--eui-base-border-radius);transition:outline .15s ease-in-out,border .15s ease-in-out}\n"] }]
|
|
473
473
|
}], ctorParameters: function () { return [{ type: i6.UxFormGroupComponent, decorators: [{
|
|
474
474
|
type: Optional
|
|
475
475
|
}, {
|
|
@@ -206,13 +206,13 @@ class EuiInputNumberComponent extends InputDirective {
|
|
|
206
206
|
}
|
|
207
207
|
}
|
|
208
208
|
onKeyDown(e) {
|
|
209
|
-
var _a, _b;
|
|
209
|
+
var _a, _b, _c;
|
|
210
210
|
// check if it's a single symbol and not Special like (Ctrl, backspace etc)
|
|
211
|
-
if ((e === null || e === void 0 ? void 0 : e.key.length) <= 1 && !e.ctrlKey && !e.altKey && !e.metaKey) {
|
|
211
|
+
if (((_a = e === null || e === void 0 ? void 0 : e.key) === null || _a === void 0 ? void 0 : _a.length) <= 1 && !e.ctrlKey && !e.altKey && !e.metaKey) {
|
|
212
212
|
// stop event propagation if key pressed is not a number or locale character or minus sign
|
|
213
213
|
if (Number.isNaN(Number.parseInt(e.key, 10)) &&
|
|
214
214
|
this.isMinusAllowed(e.key) &&
|
|
215
|
-
e.key !== getLocaleNumberSymbol(((
|
|
215
|
+
e.key !== getLocaleNumberSymbol(((_b = this.localeService) === null || _b === void 0 ? void 0 : _b.currentLocale) || this.locale_id, NumberSymbol.Decimal)) {
|
|
216
216
|
e.stopPropagation();
|
|
217
217
|
e.preventDefault();
|
|
218
218
|
// stop event propagation if key pressed exceeds the min/max value range
|
|
@@ -234,7 +234,7 @@ class EuiInputNumberComponent extends InputDirective {
|
|
|
234
234
|
// get character about to be deleted
|
|
235
235
|
const char = element.value.charAt(pos - 1);
|
|
236
236
|
// in case the char is the decimal symbol prevent deletion and move caret in front
|
|
237
|
-
if (char === getLocaleNumberSymbol(((
|
|
237
|
+
if (char === getLocaleNumberSymbol(((_c = this.localeService) === null || _c === void 0 ? void 0 : _c.currentLocale) || this.locale_id, NumberSymbol.Decimal)) {
|
|
238
238
|
e.stopPropagation();
|
|
239
239
|
e.preventDefault();
|
|
240
240
|
element.setSelectionRange(pos - 1, pos - 1);
|