@provoly/dashboard 1.3.35 → 1.3.36
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.
|
@@ -290,7 +290,7 @@ export class PrySelectComponent extends SubscriptionnerDirective {
|
|
|
290
290
|
multi: true
|
|
291
291
|
},
|
|
292
292
|
SelectA11yService
|
|
293
|
-
], viewQueries: [{ propertyName: "optionsModal", first: true, predicate: ["optionsModal"], descendants: true, read: TemplateRef }, { propertyName: "selectElement", first: true, predicate: ["selectElement"], descendants: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\n class=\"a-pry-select\"\n [attr.aria-disabled]=\"disabled\"\n #selectElement\n [class.-focused]=\"focused\"\n (click)=\"handleClick()\"\n role=\"combobox\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-owns]=\"open ? modalId : null\"\n aria-haspopup=\"listbox\"\n tabindex=\"0\"\n cdkMonitorElementFocus\n (cdkFocusChange)=\"onFocusChange($event)\"\n (keydown)=\"onKeydownSelect($event)\"\n>\n <div class=\"a-pry-select__content\">\n @if (autocomplete) {\n <input\n type=\"text\"\n class=\"a-pry-select__search\"\n [ngModel]=\"search$.getValue()\"\n (ngModelChange)=\"search($event, true)\"\n aria-autocomplete=\"list\"\n [attr.aria-controls]=\"open ? modalId : null\"\n [attr.aria-disabled]=\"disabled\"\n [disabled]=\"disabled\"\n (keydown)=\"onKeydownAutocompleteInput($event)\"\n [placeholder]=\"placeholder ?? ''\"\n #input\n />\n } @else if ((valueItems$ | async).length === 0) {\n <span class=\"a-pry-select__placeholder\">{{ placeholder }}</span>\n <div class=\"a-pry-select__filler\"></div>\n } @else {\n <ng-container *ngFor=\"let item of valueItems$ | async\">\n <div\n class=\"a-pry-select__value\"\n [class.pry-select-form]=\"isForm\"\n [class.-multiple]=\"multiple\"\n [ngClass]=\"item ? item[bindClasses ?? ''] ?? {} : {}\"\n >\n @if (template) {\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n } @else {\n <pry-icon\n *ngIf=\"bindIcon\"\n [iconSvg]=\"item[bindIcon]\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n @if (bindLabel ? item?.[bindLabel] : item; as value) {\n {{ (i18nPrefix ?? '') + value | i18n: { warn: false } }}\n <span\n *ngIf=\"multiple && clearable\"\n class=\"a-pry-select__clear\"\n (click)=\"clear($event, item)\"\n aria-hidden=\"true\"\n >\u00D7</span\n >\n }\n }\n </div>\n </ng-container>\n <div class=\"a-pry-select__filler\"></div>\n }\n </div>\n <div class=\"a-pry-select__actions\">\n @if (clearable) {\n
|
|
293
|
+
], viewQueries: [{ propertyName: "optionsModal", first: true, predicate: ["optionsModal"], descendants: true, read: TemplateRef }, { propertyName: "selectElement", first: true, predicate: ["selectElement"], descendants: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\n class=\"a-pry-select\"\n [attr.aria-disabled]=\"disabled\"\n #selectElement\n [class.-focused]=\"focused\"\n (click)=\"handleClick()\"\n role=\"combobox\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-owns]=\"open ? modalId : null\"\n aria-haspopup=\"listbox\"\n tabindex=\"0\"\n cdkMonitorElementFocus\n (cdkFocusChange)=\"onFocusChange($event)\"\n (keydown)=\"onKeydownSelect($event)\"\n>\n <div class=\"a-pry-select__content\">\n @if (autocomplete) {\n <input\n type=\"text\"\n class=\"a-pry-select__search\"\n [ngModel]=\"search$.getValue()\"\n (ngModelChange)=\"search($event, true)\"\n aria-autocomplete=\"list\"\n [attr.aria-controls]=\"open ? modalId : null\"\n [attr.aria-disabled]=\"disabled\"\n [disabled]=\"disabled\"\n (keydown)=\"onKeydownAutocompleteInput($event)\"\n [placeholder]=\"placeholder ?? ''\"\n #input\n />\n } @else if ((valueItems$ | async).length === 0) {\n <span class=\"a-pry-select__placeholder\">{{ placeholder }}</span>\n <div class=\"a-pry-select__filler\"></div>\n } @else {\n <ng-container *ngFor=\"let item of valueItems$ | async\">\n <div\n class=\"a-pry-select__value\"\n [class.pry-select-form]=\"isForm\"\n [class.-multiple]=\"multiple\"\n [ngClass]=\"item ? item[bindClasses ?? ''] ?? {} : {}\"\n >\n @if (template) {\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n } @else {\n <pry-icon\n *ngIf=\"bindIcon\"\n [iconSvg]=\"item[bindIcon]\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n @if (bindLabel ? item?.[bindLabel] : item; as value) {\n {{ (i18nPrefix ?? '') + value | i18n: { warn: false } }}\n <span\n *ngIf=\"multiple && clearable\"\n class=\"a-pry-select__clear\"\n (click)=\"clear($event, item)\"\n aria-hidden=\"true\"\n >\u00D7</span\n >\n }\n }\n </div>\n </ng-container>\n <div class=\"a-pry-select__filler\"></div>\n }\n </div>\n <div class=\"a-pry-select__actions\">\n <div class=\"a-pry-select__actions__clear-button\">\n @if (clearable && (search$ | async)) {\n <span class=\"a-pry-select__clear\" (click)=\"clearAll($event)\" aria-hidden=\"true\">\u00D7</span>\n }\n </div>\n <pry-icon\n class=\"a-pry-select__toggle\"\n [iconSvg]=\"open ? 'chevron_top' : 'chevron_bottom'\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n </div>\n</div>\n<ng-template #optionsModal>\n <div\n role=\"listbox\"\n [attr.aria-label]=\"'@pry.select.label' | i18n\"\n [id]=\"modalId\"\n [attr.aria-activedescendant]=\"'select-option-' + activeDescendant\"\n [attr.aria-multiselectable]=\"multiple\"\n [attr.required]=\"required\"\n [attr.aria-readonly]=\"disabled\"\n cdkTrapFocus=\"!autocomplete\"\n [cdkTrapFocusAutoCapture]=\"!autocomplete\"\n >\n @if (loading) {\n <div class=\"a-pry-select__options__option -hint\" [style.width.px]=\"modalWidth\">\n <div class=\"no-widget no-widget__loader\">\n <pry-page-loader></pry-page-loader>\n </div>\n <p>{{ '@pry.select.loading' | i18n }}...</p>\n </div>\n } @else {\n @for (item of matchingItems$ | async; track trackFn; let index = $index; let first = $first; let last = $last) {\n <div\n class=\"a-pry-select__options__option\"\n [attr.aria-selected]=\"(valueItems$ | async).includes(item)\"\n [attr.aria-checked]=\"(valueItems$ | async).includes(item)\"\n [attr.aria-disabled]=\"disabled\"\n (click)=\"select($event, item, index)\"\n (keydown)=\"onKeydownOption($event, item, index, optionDivRef, first, last)\"\n [style.width.px]=\"modalWidth\"\n role=\"option\"\n [id]=\"'select-option-' + index\"\n tabindex=\"0\"\n #optionDivRef\n >\n @if (template) {\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n } @else {\n @if (multiple) {\n <pry-checkbox\n (click)=\"$event.preventDefault()\"\n [ngModel]=\"(valueItems$ | async).includes(item)\"\n ></pry-checkbox>\n }\n @if (bindIcon) {\n <pry-icon [iconSvg]=\"item[bindIcon]\" [width]=\"iconSize[0]\" [height]=\"iconSize[1]\"></pry-icon>\n }\n @if (bindLabel ? item?.[bindLabel] : item; as value) {\n {{ (i18nPrefix ? i18nPrefix : '') + value | i18n: { warn: false } }}\n }\n }\n </div>\n } @empty {\n <div class=\"a-pry-select__options__option -hint\" [style.width.px]=\"modalWidth\">\n <p>{{ '@pry.select.empty' | i18n }}</p>\n </div>\n }\n }\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i3.CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i7.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle", "name", "inputId", "inhibit"] }, { kind: "component", type: i8.PryPageLoaderComponent, selector: "pry-page-loader", inputs: ["image", "imageAltText"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.I18nPipe, name: "i18n" }] }); }
|
|
294
294
|
}
|
|
295
295
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PrySelectComponent, decorators: [{
|
|
296
296
|
type: Component,
|
|
@@ -301,7 +301,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
|
|
|
301
301
|
multi: true
|
|
302
302
|
},
|
|
303
303
|
SelectA11yService
|
|
304
|
-
], template: "<div\n class=\"a-pry-select\"\n [attr.aria-disabled]=\"disabled\"\n #selectElement\n [class.-focused]=\"focused\"\n (click)=\"handleClick()\"\n role=\"combobox\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-owns]=\"open ? modalId : null\"\n aria-haspopup=\"listbox\"\n tabindex=\"0\"\n cdkMonitorElementFocus\n (cdkFocusChange)=\"onFocusChange($event)\"\n (keydown)=\"onKeydownSelect($event)\"\n>\n <div class=\"a-pry-select__content\">\n @if (autocomplete) {\n <input\n type=\"text\"\n class=\"a-pry-select__search\"\n [ngModel]=\"search$.getValue()\"\n (ngModelChange)=\"search($event, true)\"\n aria-autocomplete=\"list\"\n [attr.aria-controls]=\"open ? modalId : null\"\n [attr.aria-disabled]=\"disabled\"\n [disabled]=\"disabled\"\n (keydown)=\"onKeydownAutocompleteInput($event)\"\n [placeholder]=\"placeholder ?? ''\"\n #input\n />\n } @else if ((valueItems$ | async).length === 0) {\n <span class=\"a-pry-select__placeholder\">{{ placeholder }}</span>\n <div class=\"a-pry-select__filler\"></div>\n } @else {\n <ng-container *ngFor=\"let item of valueItems$ | async\">\n <div\n class=\"a-pry-select__value\"\n [class.pry-select-form]=\"isForm\"\n [class.-multiple]=\"multiple\"\n [ngClass]=\"item ? item[bindClasses ?? ''] ?? {} : {}\"\n >\n @if (template) {\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n } @else {\n <pry-icon\n *ngIf=\"bindIcon\"\n [iconSvg]=\"item[bindIcon]\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n @if (bindLabel ? item?.[bindLabel] : item; as value) {\n {{ (i18nPrefix ?? '') + value | i18n: { warn: false } }}\n <span\n *ngIf=\"multiple && clearable\"\n class=\"a-pry-select__clear\"\n (click)=\"clear($event, item)\"\n aria-hidden=\"true\"\n >\u00D7</span\n >\n }\n }\n </div>\n </ng-container>\n <div class=\"a-pry-select__filler\"></div>\n }\n </div>\n <div class=\"a-pry-select__actions\">\n @if (clearable) {\n
|
|
304
|
+
], template: "<div\n class=\"a-pry-select\"\n [attr.aria-disabled]=\"disabled\"\n #selectElement\n [class.-focused]=\"focused\"\n (click)=\"handleClick()\"\n role=\"combobox\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-owns]=\"open ? modalId : null\"\n aria-haspopup=\"listbox\"\n tabindex=\"0\"\n cdkMonitorElementFocus\n (cdkFocusChange)=\"onFocusChange($event)\"\n (keydown)=\"onKeydownSelect($event)\"\n>\n <div class=\"a-pry-select__content\">\n @if (autocomplete) {\n <input\n type=\"text\"\n class=\"a-pry-select__search\"\n [ngModel]=\"search$.getValue()\"\n (ngModelChange)=\"search($event, true)\"\n aria-autocomplete=\"list\"\n [attr.aria-controls]=\"open ? modalId : null\"\n [attr.aria-disabled]=\"disabled\"\n [disabled]=\"disabled\"\n (keydown)=\"onKeydownAutocompleteInput($event)\"\n [placeholder]=\"placeholder ?? ''\"\n #input\n />\n } @else if ((valueItems$ | async).length === 0) {\n <span class=\"a-pry-select__placeholder\">{{ placeholder }}</span>\n <div class=\"a-pry-select__filler\"></div>\n } @else {\n <ng-container *ngFor=\"let item of valueItems$ | async\">\n <div\n class=\"a-pry-select__value\"\n [class.pry-select-form]=\"isForm\"\n [class.-multiple]=\"multiple\"\n [ngClass]=\"item ? item[bindClasses ?? ''] ?? {} : {}\"\n >\n @if (template) {\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n } @else {\n <pry-icon\n *ngIf=\"bindIcon\"\n [iconSvg]=\"item[bindIcon]\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n @if (bindLabel ? item?.[bindLabel] : item; as value) {\n {{ (i18nPrefix ?? '') + value | i18n: { warn: false } }}\n <span\n *ngIf=\"multiple && clearable\"\n class=\"a-pry-select__clear\"\n (click)=\"clear($event, item)\"\n aria-hidden=\"true\"\n >\u00D7</span\n >\n }\n }\n </div>\n </ng-container>\n <div class=\"a-pry-select__filler\"></div>\n }\n </div>\n <div class=\"a-pry-select__actions\">\n <div class=\"a-pry-select__actions__clear-button\">\n @if (clearable && (search$ | async)) {\n <span class=\"a-pry-select__clear\" (click)=\"clearAll($event)\" aria-hidden=\"true\">\u00D7</span>\n }\n </div>\n <pry-icon\n class=\"a-pry-select__toggle\"\n [iconSvg]=\"open ? 'chevron_top' : 'chevron_bottom'\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n </div>\n</div>\n<ng-template #optionsModal>\n <div\n role=\"listbox\"\n [attr.aria-label]=\"'@pry.select.label' | i18n\"\n [id]=\"modalId\"\n [attr.aria-activedescendant]=\"'select-option-' + activeDescendant\"\n [attr.aria-multiselectable]=\"multiple\"\n [attr.required]=\"required\"\n [attr.aria-readonly]=\"disabled\"\n cdkTrapFocus=\"!autocomplete\"\n [cdkTrapFocusAutoCapture]=\"!autocomplete\"\n >\n @if (loading) {\n <div class=\"a-pry-select__options__option -hint\" [style.width.px]=\"modalWidth\">\n <div class=\"no-widget no-widget__loader\">\n <pry-page-loader></pry-page-loader>\n </div>\n <p>{{ '@pry.select.loading' | i18n }}...</p>\n </div>\n } @else {\n @for (item of matchingItems$ | async; track trackFn; let index = $index; let first = $first; let last = $last) {\n <div\n class=\"a-pry-select__options__option\"\n [attr.aria-selected]=\"(valueItems$ | async).includes(item)\"\n [attr.aria-checked]=\"(valueItems$ | async).includes(item)\"\n [attr.aria-disabled]=\"disabled\"\n (click)=\"select($event, item, index)\"\n (keydown)=\"onKeydownOption($event, item, index, optionDivRef, first, last)\"\n [style.width.px]=\"modalWidth\"\n role=\"option\"\n [id]=\"'select-option-' + index\"\n tabindex=\"0\"\n #optionDivRef\n >\n @if (template) {\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n } @else {\n @if (multiple) {\n <pry-checkbox\n (click)=\"$event.preventDefault()\"\n [ngModel]=\"(valueItems$ | async).includes(item)\"\n ></pry-checkbox>\n }\n @if (bindIcon) {\n <pry-icon [iconSvg]=\"item[bindIcon]\" [width]=\"iconSize[0]\" [height]=\"iconSize[1]\"></pry-icon>\n }\n @if (bindLabel ? item?.[bindLabel] : item; as value) {\n {{ (i18nPrefix ? i18nPrefix : '') + value | i18n: { warn: false } }}\n }\n }\n </div>\n } @empty {\n <div class=\"a-pry-select__options__option -hint\" [style.width.px]=\"modalWidth\">\n <p>{{ '@pry.select.empty' | i18n }}</p>\n </div>\n }\n }\n </div>\n</ng-template>\n" }]
|
|
305
305
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.Overlay }, { type: i0.ViewContainerRef }, { type: i2.SelectA11yService }], propDecorators: { items: [{
|
|
306
306
|
type: Input
|
|
307
307
|
}], clearable: [{
|
|
@@ -358,4 +358,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
|
|
|
358
358
|
type: ViewChild,
|
|
359
359
|
args: ['input']
|
|
360
360
|
}] } });
|
|
361
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2xpYi9jb3JlL2NvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9saWIvY29yZS9jb21wb25lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFHVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3ZFLE9BQU8sRUFBVyxhQUFhLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDbkcsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7OztBQUcxRCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFlakIsTUFBTSxPQUFPLGtCQUFtQixTQUFRLHdCQUF3QjtJQVc5RCxJQUFhLEtBQUssQ0FBQyxLQUErQjtRQUNoRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElB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YVksS0FBSztzQkFBakIsS0FBSztnQkFJRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFDRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0ksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0UsV0FBVztzQkFBbkIsS0FBSztnQkFNTyxPQUFPO3NCQUFuQixLQUFLO2dCQWdCNEMsWUFBWTtzQkFBN0QsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUViLGFBQWE7c0JBQS9DLFNBQVM7dUJBQUMsZUFBZTtnQkFDakIsVUFBVTtzQkFBbEIsS0FBSztnQkFDYyxLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFbWJlZGRlZFZpZXdSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBPdmVybGF5LCBPdmVybGF5Q29uZmlnLCBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCBlcXVhbCBmcm9tICdmYXN0LWRlZXAtZXF1YWwvZXM2JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2Rhc2hib2FyZC9jb21wb25lbnRzL3N1YnNjcmlwdGlvbm5lci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU2VsZWN0QTExeVNlcnZpY2UgfSBmcm9tICcuL3NlbGVjdC1hMTF5LnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9jdXNPcmlnaW4gfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5cbmxldCB1bmlxdWVJZCA9IDA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcblxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFByeVNlbGVjdENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAgU2VsZWN0QTExeVNlcnZpY2VcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBQcnlTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHB1YmxpYyBpZDogbnVtYmVyID0gdW5pcXVlSWQrKztcbiAgX2l0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcbiAgbWF0Y2hpbmdJdGVtcyQ6IE9ic2VydmFibGU8YW55PjtcbiAgb3BlbiA9IGZhbHNlO1xuICBhY3RpdmVEZXNjZW5kYW50OiBudW1iZXIgPSAtMTtcbiAgdmFsdWVJdGVtcyQ6IE9ic2VydmFibGU8YW55PjtcbiAgdmFsdWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XG4gIHNlYXJjaFNlbGVjdGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBpbmhpYmF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNldCBpdGVtcyhpdGVtczogYW55W10gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5faXRlbXMkLm5leHQoaXRlbXMgPz8gW10pO1xuICB9XG5cbiAgQElucHV0KCkgY2xlYXJhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIG11bHRpcGxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNsb3NlT25TZWxlY3QgPSB0cnVlO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgQElucHV0KCkgaXNGb3JtID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJlcXVpcmVkPzogYW55O1xuICBASW5wdXQoKSBuYW1lPzogYW55O1xuICBASW5wdXQoKSBhdXRvY29tcGxldGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYWx3YXlzU2hvd0F1dG9zdWdnZXN0ZWRWYWx1ZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZXh0ZXJuYWxBdXRvY29tcGxldGVTZXJ2aWNlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGJpbmRWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBiaW5kTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgaWNvblNpemUgPSBbMTAsIDE2XTtcbiAgQElucHV0KCkgYmluZEljb246IGFueTtcbiAgQElucHV0KCkgdGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBpMThuUHJlZml4OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgQE91dHB1dCgpIHNlYXJjaGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBjbGVhcmVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgY2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQElucHV0KCkgYmluZENsYXNzZXM6IGFueTtcbiAgc2VhcmNoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG5cbiAgX2xvYWRpbmcgPSBmYWxzZTtcbiAgaGFzTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc2V0IGxvYWRpbmcobG9hZGluZzogYm9vbGVhbikge1xuICAgIHRoaXMuX2xvYWRpbmcgPSBsb2FkaW5nO1xuICAgIGlmICh0aGlzLl9sb2FkaW5nKSB7XG4gICAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmc7XG4gIH1cblxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG5cbiAgb3ZlcmxheVJlZj86IE92ZXJsYXlSZWY7XG4gIEBWaWV3Q2hpbGQoJ29wdGlvbnNNb2RhbCcsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgb3B0aW9uc01vZGFsITogVGVtcGxhdGVSZWY8YW55PjtcbiAgb3B0aW9uc01vZGFsUmVmPzogRW1iZWRkZWRWaWV3UmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdEVsZW1lbnQnKSBwdWJsaWMgc2VsZWN0RWxlbWVudCE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBASW5wdXQoKSBlbGVtZW50UmVmITogSFRNTERpdkVsZW1lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQ/OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIHByaXZhdGUgX29uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG4gIHByaXZhdGUgX29uVG91Y2hlZCA9ICgpID0+IHt9O1xuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuICBmb2N1c2VkID0gZmFsc2U7XG4gIG1vZGFsV2lkdGggPSAyMDA7XG5cbiAgZ2V0IG1vZGFsSWQoKSB7XG4gICAgcmV0dXJuICdzZWxlY3QtbW9kYWwtJyArIHRoaXMuaWQ7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBvdmVybGF5OiBPdmVybGF5LFxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwdWJsaWMgYTExeVNlcnZpY2U6IFNlbGVjdEExMXlTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5tYXRjaGluZ0l0ZW1zJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuX2l0ZW1zJCwgdGhpcy5zZWFyY2gkLCB0aGlzLnNlYXJjaFNlbGVjdGVkJF0pLnBpcGUoXG4gICAgICBtYXAoKFtpdGVtcywgdGVybSwgYWxyZWFkeVNlbGVjdGVkXSkgPT5cbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGUgJiZcbiAgICAgICAgdGVybSAmJlxuICAgICAgICB0ZXJtLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgIWFscmVhZHlTZWxlY3RlZCAmJlxuICAgICAgICAhdGhpcy5hbHdheXNTaG93QXV0b3N1Z2dlc3RlZFZhbHVlcyAmJlxuICAgICAgICAhdGhpcy5leHRlcm5hbEF1dG9jb21wbGV0ZVNlcnZpY2VcbiAgICAgICAgICA/IGl0ZW1zLmZpbHRlcigoaSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpdGVtVmFsdWUgPSB0aGlzLmJpbmRMYWJlbCA/IGk/Llt0aGlzLmJpbmRMYWJlbF0gOiBpO1xuICAgICAgICAgICAgICByZXR1cm4gaXRlbVZhbHVlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0ZXJtLnRvTG93ZXJDYXNlKCkpID4gLTE7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogaXRlbXNcbiAgICAgICksXG4gICAgICBtYXAoKGl0ZW1zKSA9PiBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+ICEhaXRlbSkpLFxuICAgICAgdGFwKCgpID0+IHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKSlcbiAgICApO1xuICAgIHRoaXMudmFsdWVJdGVtcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnZhbHVlJCwgdGhpcy5faXRlbXMkXSkucGlwZShcbiAgICAgIG1hcCgoW3ZhbHVlLCBpdGVtc10pID0+XG4gICAgICAgICh0aGlzLm11bHRpcGxlID8gdmFsdWUgPz8gW10gOiAhIXZhbHVlID8gW3ZhbHVlXSA6IFtdKS5tYXAoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBrZXlQcm9wID0gdGhpcy5iaW5kVmFsdWUgPz8gdGhpcy5iaW5kTGFiZWwgPz8gJ2lkJztcbiAgICAgICAgICByZXR1cm4gaXRlbXMuZmluZCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICA/IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICA/IGl0ZW1ba2V5UHJvcF0gPT09IHZhbHVlW2tleVByb3BdXG4gICAgICAgICAgICAgICAgOiBpdGVtW2tleVByb3BdID09PSB2YWx1ZVxuICAgICAgICAgICAgICA6IGl0ZW0gPT09IHZhbHVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudmFsdWVJdGVtcyQuc3Vic2NyaWJlKChpdGVtKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IHRoaXMuYmluZExhYmVsID8gaXRlbVswXT8uW3RoaXMuYmluZExhYmVsXSA6IGl0ZW1bMF07XG4gICAgICAgICAgaWYgKGl0ZW1WYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2gkLm5leHQoaXRlbVZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VsZWN0ZWQkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpZiAodGhpcy5leHRlcm5hbEF1dG9jb21wbGV0ZVNlcnZpY2UpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5faXRlbXMkLnN1YnNjcmliZSgoXykgPT4gdGhpcy50b2dnbGUoKSkpO1xuICAgIH1cblxuICAgIHRoaXMuYTExeVNlcnZpY2Uuc2V0VG9nZ2xlKChmb3JjZT86IGJvb2xlYW4pID0+IHRoaXMudG9nZ2xlKGZvcmNlKSk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xuICAgIGlmICghZXF1YWwodGhpcy52YWx1ZSQuZ2V0VmFsdWUoKSwgb2JqKSkge1xuICAgICAgdGhpcy52YWx1ZSQubmV4dChvYmopO1xuICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy52YWx1ZSQuZ2V0VmFsdWUoKSk7XG4gICAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy5zZWFyY2gkLm5leHQob2JqKTtcbiAgICAgIHRoaXMuc2VhcmNoU2VsZWN0ZWQkLm5leHQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXIoJGV2ZW50OiBFdmVudCwgaXRlbTogYW55KSB7XG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IHRoaXMuYmluZFZhbHVlID8gaXRlbT8uW3RoaXMuYmluZFZhbHVlXSA6IGl0ZW07XG4gICAgY29uc3Qga2V5UHJvcCA9IHRoaXMuYmluZFZhbHVlID8/IHRoaXMuYmluZExhYmVsID8/ICdpZCc7XG4gICAgdGhpcy53cml0ZVZhbHVlKFxuICAgICAgdGhpcy52YWx1ZSRcbiAgICAgICAgLmdldFZhbHVlKClcbiAgICAgICAgLmZpbHRlcigoaTogYW55KSA9PlxuICAgICAgICAgIHR5cGVvZiBpdGVtVmFsdWUgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IHR5cGVvZiBpID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICA/IGlba2V5UHJvcF0gIT09IGl0ZW1WYWx1ZVtrZXlQcm9wXVxuICAgICAgICAgICAgICA6IGkgIT09IGl0ZW1WYWx1ZVtrZXlQcm9wXVxuICAgICAgICAgICAgOiB0eXBlb2YgaSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgPyBpW2tleVByb3BdICE9PSBpdGVtVmFsdWVcbiAgICAgICAgICAgICAgOiBpICE9PSBpdGVtVmFsdWVcbiAgICAgICAgKVxuICAgICk7XG4gIH1cblxuICBjbGVhckFsbCgkZXZlbnQ6IEV2ZW50KSB7XG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUoW10pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgdGhpcy5zZWFyY2goJycpO1xuICAgIHRoaXMuY2xlYXJlZC5uZXh0KCk7XG4gIH1cblxuICBzZWFyY2goJGV2ZW50OiBzdHJpbmcsIGZyb21UZW1wbGF0ZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5zZWFyY2gkLm5leHQoJGV2ZW50KTtcbiAgICB0aGlzLnNlYXJjaGVkLm5leHQoJGV2ZW50KTtcbiAgICB0aGlzLnNlYXJjaFNlbGVjdGVkJC5uZXh0KGZhbHNlKTtcbiAgICBpZiAoZnJvbVRlbXBsYXRlICYmIHRoaXMuYXV0b2NvbXBsZXRlICYmIHRoaXMuZXh0ZXJuYWxBdXRvY29tcGxldGVTZXJ2aWNlKSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUoJGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3QoJGV2ZW50OiBFdmVudCwgaXRlbTogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgaXRlbVZhbHVlID0gdGhpcy5iaW5kVmFsdWUgPyBpdGVtPy5bdGhpcy5iaW5kVmFsdWVdIDogaXRlbTtcbiAgICBjb25zdCBrZXlQcm9wID0gdGhpcy5iaW5kVmFsdWUgPz8gdGhpcy5iaW5kTGFiZWwgPz8gJ2lkJztcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgaWYgKCF0aGlzLnZhbHVlJC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgIHRoaXMud3JpdGVWYWx1ZShbaXRlbVZhbHVlXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIGl0ZW1WYWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgID8gdGhpcy52YWx1ZSRcbiAgICAgICAgICAgICAgICAuZ2V0VmFsdWUoKVxuICAgICAgICAgICAgICAgIC5tYXAoKHZhbDogYW55KSA9PiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgPyB2YWxba2V5UHJvcF0gOiB2YWwpKVxuICAgICAgICAgICAgICAgIC5pbmNsdWRlcyhpdGVtVmFsdWVba2V5UHJvcF0pXG4gICAgICAgICAgICA6IHRoaXMudmFsdWUkXG4gICAgICAgICAgICAgICAgLmdldFZhbHVlKClcbiAgICAgICAgICAgICAgICAubWFwKCh2YWw6IGFueSkgPT4gKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnID8gdmFsW2tleVByb3BdIDogdmFsKSlcbiAgICAgICAgICAgICAgICAuaW5jbHVkZXMoaXRlbVZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmNsZWFyKCRldmVudCwgaXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy53cml0ZVZhbHVlKFsuLi50aGlzLnZhbHVlJC5nZXRWYWx1ZSgpLCBpdGVtVmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUoaXRlbVZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgdGhpcy50b2dnbGUoZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZURlc2NlbmRhbnQgPSBpbmRleDtcbiAgICBjb25zdCBpdGVtTGFiZWwgPSB0aGlzLmJpbmRMYWJlbCA/IGl0ZW0/Llt0aGlzLmJpbmRMYWJlbF0gOiBpdGVtO1xuICAgIHRoaXMuc2VhcmNoJC5uZXh0KGl0ZW1MYWJlbCk7XG4gICAgdGhpcy5zZWFyY2hTZWxlY3RlZCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHRvZ2dsZShmb3JjZT86IGJvb2xlYW4pIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGlmICh0aGlzLm9wZW4gIT09IGZvcmNlKSB7XG4gICAgICAgIHRoaXMub3BlbiA9IGZvcmNlICE9PSB1bmRlZmluZWQgPyBmb3JjZSA6ICF0aGlzLm9wZW47XG4gICAgICAgIGlmICh0aGlzLm9wZW4pIHtcbiAgICAgICAgICB0aGlzLm1vZGFsV2lkdGggPSB0aGlzLl9lbGVtZW50UmVmLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIC0gNTtcbiAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHRoaXMuZ2V0T3ZlcmxheUNvbmZpZygpKTtcbiAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZShmYWxzZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvY29tcGxldGUpIHtcbiAgICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMuc2VhcmNoJC5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLm9wdGlvbnNNb2RhbFJlZiA9IHRoaXMub3ZlcmxheVJlZi5hdHRhY2gobmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMub3B0aW9uc01vZGFsLCB0aGlzLnZpZXdDb250YWluZXJSZWYpKTtcbiAgICAgICAgICB0aGlzLmZvY3VzSW5pdGlhbFNlbGVjdGlvbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub3ZlcmxheVJlZj8uZGlzcG9zZSgpO1xuICAgICAgICAgIHRoaXMub3ZlcmxheVJlZiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB0aGlzLnJldHVybkZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaGliaXRpb24oKSB7XG4gICAgdGhpcy5pbmhpYmF0ZSA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiAodGhpcy5pbmhpYmF0ZSA9IGZhbHNlKSwgMTAwKTtcbiAgfVxuXG4gIGhhbmRsZUNsaWNrKCkge1xuICAgIGlmICghdGhpcy5pbmhpYmF0ZSkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgICB0aGlzLmNsaWNrZWQuZW1pdCgpO1xuICAgICAgdGhpcy5pbmhpYml0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlRm9jdXMoKSB7XG4gICAgdGhpcy5mb2N1c2VkID0gIXRoaXMuZm9jdXNlZDtcbiAgfVxuXG4gIHJldHVybkZvY3VzKCkge1xuICAgIHJldHVybiB0aGlzLmF1dG9jb21wbGV0ZSA/IHRoaXMuZm9jdXNJbnB1dCgpIDogdGhpcy5zZWxlY3RFbGVtZW50Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBmb2N1c0lucHV0KCkge1xuICAgIHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3ZlcmxheUNvbmZpZygpOiBPdmVybGF5Q29uZmlnIHtcbiAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5XG4gICAgICAucG9zaXRpb24oKVxuICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZWxlbWVudFJlZilcbiAgICAgIC53aXRoUHVzaChmYWxzZSlcbiAgICAgIC53aXRoUG9zaXRpb25zKFtcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgb3ZlcmxheVk6ICd0b3AnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJ1xuICAgICAgICB9XG4gICAgICBdKTtcblxuICAgIGNvbnN0IHNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpO1xuICAgIHJldHVybiBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICBwb3NpdGlvblN0cmF0ZWd5OiBwb3NpdGlvblN0cmF0ZWd5LFxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHNjcm9sbFN0cmF0ZWd5LFxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICBwYW5lbENsYXNzOiBbJ2EtcHJ5LXNlbGVjdF9fb3B0aW9ucyddLFxuICAgICAgYmFja2Ryb3BDbGFzczogJ2EtcHJ5LXNlbGVjdF9fYmFja2Ryb3AnXG4gICAgfSk7XG4gIH1cblxuICBnZXQgX2VsZW1lbnRSZWYoKTogSFRNTERpdkVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYgPz8gdGhpcy5zZWxlY3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBvbkZvY3VzQ2hhbmdlID0gKG9yaWdpbjogRm9jdXNPcmlnaW4pID0+IHtcbiAgICBpZiAoIXRoaXMuaW5oaWJhdGUpIHtcbiAgICAgIHRoaXMuYTExeVNlcnZpY2Uub25Gb2N1c0NoYW5nZShcbiAgICAgICAgb3JpZ2luLFxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZSxcbiAgICAgICAgKCkgPT4gdGhpcy50b2dnbGVGb2N1cygpLFxuICAgICAgICAoKSA9PiB0aGlzLmZvY3VzSW5wdXQoKVxuICAgICAgKTtcbiAgICAgIHRoaXMuaW5oaWJpdGlvbigpO1xuICAgIH1cbiAgfTtcbiAgb25LZXlkb3duU2VsZWN0ID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLmExMXlTZXJ2aWNlLm9uS2V5ZG93blNlbGVjdChldmVudCwgdGhpcy5hdXRvY29tcGxldGUpO1xuICBvbktleWRvd25BdXRvY29tcGxldGVJbnB1dCA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT5cbiAgICB0aGlzLmExMXlTZXJ2aWNlLm9uS2V5ZG93bkF1dG9jb21wbGV0ZUlucHV0KGV2ZW50LCB0aGlzLm9wZW4sIHRoaXMuc2VhcmNoJC5nZXRWYWx1ZSgpLCB0aGlzLm9wdGlvbnNNb2RhbFJlZik7XG4gIG9uS2V5ZG93bk9wdGlvbiA9IChcbiAgICBldmVudDogS2V5Ym9hcmRFdmVudCxcbiAgICBpdGVtOiBhbnksXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBvcHRpb25EaXZSZWY6IEhUTUxEaXZFbGVtZW50LFxuICAgIGZpcnN0OiBib29sZWFuLFxuICAgIGxhc3Q6IGJvb2xlYW5cbiAgKSA9PlxuICAgIHRoaXMuYTExeVNlcnZpY2Uub25LZXlkb3duT3B0aW9uKFxuICAgICAgZXZlbnQsXG4gICAgICBvcHRpb25EaXZSZWYsXG4gICAgICBmaXJzdCxcbiAgICAgIGxhc3QsXG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZSxcbiAgICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgKCkgPT4gdGhpcy5zZWxlY3QoZXZlbnQsIGl0ZW0sIGluZGV4KVxuICAgICk7XG4gIGZvY3VzSW5pdGlhbFNlbGVjdGlvbiA9ICgpID0+IHRoaXMuYTExeVNlcnZpY2UuZm9jdXNJbml0aWFsU2VsZWN0aW9uKHRoaXMuYXV0b2NvbXBsZXRlLCB0aGlzLm9wdGlvbnNNb2RhbFJlZik7XG4gIHRyYWNrRm4oaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIGl0ZW0uaWQgPz8gaXRlbTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAjc2VsZWN0RWxlbWVudFxuICBbY2xhc3MuLWZvY3VzZWRdPVwiZm9jdXNlZFwiXG4gIChjbGljayk9XCJoYW5kbGVDbGljaygpXCJcbiAgcm9sZT1cImNvbWJvYm94XCJcbiAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJvcGVuXCJcbiAgW2F0dHIuYXJpYS1vd25zXT1cIm9wZW4gPyBtb2RhbElkIDogbnVsbFwiXG4gIGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCJcbiAgdGFiaW5kZXg9XCIwXCJcbiAgY2RrTW9uaXRvckVsZW1lbnRGb2N1c1xuICAoY2RrRm9jdXNDaGFuZ2UpPVwib25Gb2N1c0NoYW5nZSgkZXZlbnQpXCJcbiAgKGtleWRvd24pPVwib25LZXlkb3duU2VsZWN0KCRldmVudClcIlxuPlxuICA8ZGl2IGNsYXNzPVwiYS1wcnktc2VsZWN0X19jb250ZW50XCI+XG4gICAgQGlmIChhdXRvY29tcGxldGUpIHtcbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0X19zZWFyY2hcIlxuICAgICAgICBbbmdNb2RlbF09XCJzZWFyY2gkLmdldFZhbHVlKClcIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWFyY2goJGV2ZW50LCB0cnVlKVwiXG4gICAgICAgIGFyaWEtYXV0b2NvbXBsZXRlPVwibGlzdFwiXG4gICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwib3BlbiA/IG1vZGFsSWQgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93bkF1dG9jb21wbGV0ZUlucHV0KCRldmVudClcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgPz8gJydcIlxuICAgICAgICAjaW5wdXRcbiAgICAgIC8+XG4gICAgfSBAZWxzZSBpZiAoKHZhbHVlSXRlbXMkIHwgYXN5bmMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgPHNwYW4gY2xhc3M9XCJhLXByeS1zZWxlY3RfX3BsYWNlaG9sZGVyXCI+e3sgcGxhY2Vob2xkZXIgfX08L3NwYW4+XG4gICAgICA8ZGl2IGNsYXNzPVwiYS1wcnktc2VsZWN0X19maWxsZXJcIj48L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdmFsdWVJdGVtcyQgfCBhc3luY1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RfX3ZhbHVlXCJcbiAgICAgICAgICBbY2xhc3MucHJ5LXNlbGVjdC1mb3JtXT1cImlzRm9ybVwiXG4gICAgICAgICAgW2NsYXNzLi1tdWx0aXBsZV09XCJtdWx0aXBsZVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbSA/IGl0ZW1bYmluZENsYXNzZXMgPz8gJyddID8/IHt9IDoge31cIlxuICAgICAgICA+XG4gICAgICAgICAgQGlmICh0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGl0ZW0sIGNsZWFyIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxwcnktaWNvblxuICAgICAgICAgICAgICAqbmdJZj1cImJpbmRJY29uXCJcbiAgICAgICAgICAgICAgW2ljb25TdmddPVwiaXRlbVtiaW5kSWNvbl1cIlxuICAgICAgICAgICAgICBbd2lkdGhdPVwiaWNvblNpemVbMF1cIlxuICAgICAgICAgICAgICBbaGVpZ2h0XT1cImljb25TaXplWzFdXCJcbiAgICAgICAgICAgID48L3ByeS1pY29uPlxuICAgICAgICAgICAgQGlmIChiaW5kTGFiZWwgPyBpdGVtPy5bYmluZExhYmVsXSA6IGl0ZW07IGFzIHZhbHVlKSB7XG4gICAgICAgICAgICAgIHt7IChpMThuUHJlZml4ID8/ICcnKSArIHZhbHVlIHwgaTE4bjogeyB3YXJuOiBmYWxzZSB9IH19XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtdWx0aXBsZSAmJiBjbGVhcmFibGVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0X19jbGVhclwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgPsOXPC9zcGFuXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYS1wcnktc2VsZWN0X19maWxsZXJcIj48L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiYS1wcnktc2VsZWN0X19hY3Rpb25zXCI+XG4gICAgQGlmIChjbGVhcmFibGUpIHtcbiAgICAgIDxzcGFuIGNsYXNzPVwiYS1wcnktc2VsZWN0X19jbGVhclwiIChjbGljayk9XCJjbGVhckFsbCgkZXZlbnQpXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+w5c8L3NwYW4+XG4gICAgfVxuICAgIDxwcnktaWNvblxuICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RfX3RvZ2dsZVwiXG4gICAgICBbaWNvblN2Z109XCJvcGVuID8gJ2NoZXZyb25fdG9wJyA6ICdjaGV2cm9uX2JvdHRvbSdcIlxuICAgICAgW3dpZHRoXT1cImljb25TaXplWzBdXCJcbiAgICAgIFtoZWlnaHRdPVwiaWNvblNpemVbMV1cIlxuICAgID48L3ByeS1pY29uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNvcHRpb25zTW9kYWw+XG4gIDxkaXZcbiAgICByb2xlPVwibGlzdGJveFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQHByeS5zZWxlY3QubGFiZWwnIHwgaTE4blwiXG4gICAgW2lkXT1cIm1vZGFsSWRcIlxuICAgIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCInc2VsZWN0LW9wdGlvbi0nICsgYWN0aXZlRGVzY2VuZGFudFwiXG4gICAgW2F0dHIuYXJpYS1tdWx0aXNlbGVjdGFibGVdPVwibXVsdGlwbGVcIlxuICAgIFthdHRyLnJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICBbYXR0ci5hcmlhLXJlYWRvbmx5XT1cImRpc2FibGVkXCJcbiAgICBjZGtUcmFwRm9jdXM9XCIhYXV0b2NvbXBsZXRlXCJcbiAgICBbY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmVdPVwiIWF1dG9jb21wbGV0ZVwiXG4gID5cbiAgICBAaWYgKGxvYWRpbmcpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJhLXByeS1zZWxlY3RfX29wdGlvbnNfX29wdGlvbiAtaGludFwiIFtzdHlsZS53aWR0aC5weF09XCJtb2RhbFdpZHRoXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuby13aWRnZXQgbm8td2lkZ2V0X19sb2FkZXJcIj5cbiAgICAgICAgICA8cHJ5LXBhZ2UtbG9hZGVyPjwvcHJ5LXBhZ2UtbG9hZGVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHA+e3sgJ0Bwcnkuc2VsZWN0LmxvYWRpbmcnIHwgaTE4biB9fS4uLjwvcD5cbiAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgICAgQGZvciAoaXRlbSBvZiBtYXRjaGluZ0l0ZW1zJCB8IGFzeW5jOyB0cmFjayB0cmFja0ZuOyBsZXQgaW5kZXggPSAkaW5kZXg7IGxldCBmaXJzdCA9ICRmaXJzdDsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RfX29wdGlvbnNfX29wdGlvblwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCIodmFsdWVJdGVtcyQgfCBhc3luYykuaW5jbHVkZXMoaXRlbSlcIlxuICAgICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCIodmFsdWVJdGVtcyQgfCBhc3luYykuaW5jbHVkZXMoaXRlbSlcIlxuICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3QoJGV2ZW50LCBpdGVtLCBpbmRleClcIlxuICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93bk9wdGlvbigkZXZlbnQsIGl0ZW0sIGluZGV4LCBvcHRpb25EaXZSZWYsIGZpcnN0LCBsYXN0KVwiXG4gICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIm1vZGFsV2lkdGhcIlxuICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgIFtpZF09XCInc2VsZWN0LW9wdGlvbi0nICsgaW5kZXhcIlxuICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgI29wdGlvbkRpdlJlZlxuICAgICAgICA+XG4gICAgICAgICAgQGlmICh0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGl0ZW0sIGNsZWFyIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIEBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgPHByeS1jaGVja2JveFxuICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiKHZhbHVlSXRlbXMkIHwgYXN5bmMpLmluY2x1ZGVzKGl0ZW0pXCJcbiAgICAgICAgICAgICAgPjwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChiaW5kSWNvbikge1xuICAgICAgICAgICAgICA8cHJ5LWljb24gW2ljb25TdmddPVwiaXRlbVtiaW5kSWNvbl1cIiBbd2lkdGhdPVwiaWNvblNpemVbMF1cIiBbaGVpZ2h0XT1cImljb25TaXplWzFdXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoYmluZExhYmVsID8gaXRlbT8uW2JpbmRMYWJlbF0gOiBpdGVtOyBhcyB2YWx1ZSkge1xuICAgICAgICAgICAgICB7eyAoaTE4blByZWZpeCA/IGkxOG5QcmVmaXggOiAnJykgKyB2YWx1ZSB8IGkxOG46IHsgd2FybjogZmFsc2UgfSB9fVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbXB0eSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhLXByeS1zZWxlY3RfX29wdGlvbnNfX29wdGlvbiAtaGludFwiIFtzdHlsZS53aWR0aC5weF09XCJtb2RhbFdpZHRoXCI+XG4gICAgICAgICAgPHA+e3sgJ0Bwcnkuc2VsZWN0LmVtcHR5JyB8IGkxOG4gfX08L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIH1cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
361
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2xpYi9jb3JlL2NvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9saWIvY29yZS9jb21wb25lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFHVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3ZFLE9BQU8sRUFBVyxhQUFhLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDbkcsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7OztBQUcxRCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFlakIsTUFBTSxPQUFPLGtCQUFtQixTQUFRLHdCQUF3QjtJQVc5RCxJQUFhLEtBQUssQ0FBQyxLQUErQjtRQUNoRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElB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YVksS0FBSztzQkFBakIsS0FBSztnQkFJRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFDRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0ksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0UsV0FBVztzQkFBbkIsS0FBSztnQkFNTyxPQUFPO3NCQUFuQixLQUFLO2dCQWdCNEMsWUFBWTtzQkFBN0QsU0FBUzt1QkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUViLGFBQWE7c0JBQS9DLFNBQVM7dUJBQUMsZUFBZTtnQkFDakIsVUFBVTtzQkFBbEIsS0FBSztnQkFDYyxLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFbWJlZGRlZFZpZXdSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBPdmVybGF5LCBPdmVybGF5Q29uZmlnLCBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCBlcXVhbCBmcm9tICdmYXN0LWRlZXAtZXF1YWwvZXM2JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2Rhc2hib2FyZC9jb21wb25lbnRzL3N1YnNjcmlwdGlvbm5lci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU2VsZWN0QTExeVNlcnZpY2UgfSBmcm9tICcuL3NlbGVjdC1hMTF5LnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9jdXNPcmlnaW4gfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5cbmxldCB1bmlxdWVJZCA9IDA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcblxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFByeVNlbGVjdENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAgU2VsZWN0QTExeVNlcnZpY2VcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBQcnlTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHB1YmxpYyBpZDogbnVtYmVyID0gdW5pcXVlSWQrKztcbiAgX2l0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcbiAgbWF0Y2hpbmdJdGVtcyQ6IE9ic2VydmFibGU8YW55PjtcbiAgb3BlbiA9IGZhbHNlO1xuICBhY3RpdmVEZXNjZW5kYW50OiBudW1iZXIgPSAtMTtcbiAgdmFsdWVJdGVtcyQ6IE9ic2VydmFibGU8YW55PjtcbiAgdmFsdWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XG4gIHNlYXJjaFNlbGVjdGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBpbmhpYmF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNldCBpdGVtcyhpdGVtczogYW55W10gfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5faXRlbXMkLm5leHQoaXRlbXMgPz8gW10pO1xuICB9XG5cbiAgQElucHV0KCkgY2xlYXJhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIG11bHRpcGxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNsb3NlT25TZWxlY3QgPSB0cnVlO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgQElucHV0KCkgaXNGb3JtID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJlcXVpcmVkPzogYW55O1xuICBASW5wdXQoKSBuYW1lPzogYW55O1xuICBASW5wdXQoKSBhdXRvY29tcGxldGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYWx3YXlzU2hvd0F1dG9zdWdnZXN0ZWRWYWx1ZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZXh0ZXJuYWxBdXRvY29tcGxldGVTZXJ2aWNlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGJpbmRWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBiaW5kTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgaWNvblNpemUgPSBbMTAsIDE2XTtcbiAgQElucHV0KCkgYmluZEljb246IGFueTtcbiAgQElucHV0KCkgdGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBpMThuUHJlZml4OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgQE91dHB1dCgpIHNlYXJjaGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBjbGVhcmVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgY2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQElucHV0KCkgYmluZENsYXNzZXM6IGFueTtcbiAgc2VhcmNoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG5cbiAgX2xvYWRpbmcgPSBmYWxzZTtcbiAgaGFzTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc2V0IGxvYWRpbmcobG9hZGluZzogYm9vbGVhbikge1xuICAgIHRoaXMuX2xvYWRpbmcgPSBsb2FkaW5nO1xuICAgIGlmICh0aGlzLl9sb2FkaW5nKSB7XG4gICAgICB0aGlzLmhhc0xvYWRlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRpbmc7XG4gIH1cblxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG5cbiAgb3ZlcmxheVJlZj86IE92ZXJsYXlSZWY7XG4gIEBWaWV3Q2hpbGQoJ29wdGlvbnNNb2RhbCcsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgb3B0aW9uc01vZGFsITogVGVtcGxhdGVSZWY8YW55PjtcbiAgb3B0aW9uc01vZGFsUmVmPzogRW1iZWRkZWRWaWV3UmVmPGFueT47XG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdEVsZW1lbnQnKSBwdWJsaWMgc2VsZWN0RWxlbWVudCE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBASW5wdXQoKSBlbGVtZW50UmVmITogSFRNTERpdkVsZW1lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQ/OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gIHByaXZhdGUgX29uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG4gIHByaXZhdGUgX29uVG91Y2hlZCA9ICgpID0+IHt9O1xuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuICBmb2N1c2VkID0gZmFsc2U7XG4gIG1vZGFsV2lkdGggPSAyMDA7XG5cbiAgZ2V0IG1vZGFsSWQoKSB7XG4gICAgcmV0dXJuICdzZWxlY3QtbW9kYWwtJyArIHRoaXMuaWQ7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBvdmVybGF5OiBPdmVybGF5LFxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwdWJsaWMgYTExeVNlcnZpY2U6IFNlbGVjdEExMXlTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5tYXRjaGluZ0l0ZW1zJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuX2l0ZW1zJCwgdGhpcy5zZWFyY2gkLCB0aGlzLnNlYXJjaFNlbGVjdGVkJF0pLnBpcGUoXG4gICAgICBtYXAoKFtpdGVtcywgdGVybSwgYWxyZWFkeVNlbGVjdGVkXSkgPT5cbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGUgJiZcbiAgICAgICAgdGVybSAmJlxuICAgICAgICB0ZXJtLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgIWFscmVhZHlTZWxlY3RlZCAmJlxuICAgICAgICAhdGhpcy5hbHdheXNTaG93QXV0b3N1Z2dlc3RlZFZhbHVlcyAmJlxuICAgICAgICAhdGhpcy5leHRlcm5hbEF1dG9jb21wbGV0ZVNlcnZpY2VcbiAgICAgICAgICA/IGl0ZW1zLmZpbHRlcigoaSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpdGVtVmFsdWUgPSB0aGlzLmJpbmRMYWJlbCA/IGk/Llt0aGlzLmJpbmRMYWJlbF0gOiBpO1xuICAgICAgICAgICAgICByZXR1cm4gaXRlbVZhbHVlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0ZXJtLnRvTG93ZXJDYXNlKCkpID4gLTE7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogaXRlbXNcbiAgICAgICksXG4gICAgICBtYXAoKGl0ZW1zKSA9PiBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+ICEhaXRlbSkpLFxuICAgICAgdGFwKCgpID0+IHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKSlcbiAgICApO1xuICAgIHRoaXMudmFsdWVJdGVtcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnZhbHVlJCwgdGhpcy5faXRlbXMkXSkucGlwZShcbiAgICAgIG1hcCgoW3ZhbHVlLCBpdGVtc10pID0+XG4gICAgICAgICh0aGlzLm11bHRpcGxlID8gdmFsdWUgPz8gW10gOiAhIXZhbHVlID8gW3ZhbHVlXSA6IFtdKS5tYXAoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBrZXlQcm9wID0gdGhpcy5iaW5kVmFsdWUgPz8gdGhpcy5iaW5kTGFiZWwgPz8gJ2lkJztcbiAgICAgICAgICByZXR1cm4gaXRlbXMuZmluZCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICA/IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICA/IGl0ZW1ba2V5UHJvcF0gPT09IHZhbHVlW2tleVByb3BdXG4gICAgICAgICAgICAgICAgOiBpdGVtW2tleVByb3BdID09PSB2YWx1ZVxuICAgICAgICAgICAgICA6IGl0ZW0gPT09IHZhbHVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudmFsdWVJdGVtcyQuc3Vic2NyaWJlKChpdGVtKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IHRoaXMuYmluZExhYmVsID8gaXRlbVswXT8uW3RoaXMuYmluZExhYmVsXSA6IGl0ZW1bMF07XG4gICAgICAgICAgaWYgKGl0ZW1WYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2gkLm5leHQoaXRlbVZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VsZWN0ZWQkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpZiAodGhpcy5leHRlcm5hbEF1dG9jb21wbGV0ZVNlcnZpY2UpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5faXRlbXMkLnN1YnNjcmliZSgoXykgPT4gdGhpcy50b2dnbGUoKSkpO1xuICAgIH1cblxuICAgIHRoaXMuYTExeVNlcnZpY2Uuc2V0VG9nZ2xlKChmb3JjZT86IGJvb2xlYW4pID0+IHRoaXMudG9nZ2xlKGZvcmNlKSk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xuICAgIGlmICghZXF1YWwodGhpcy52YWx1ZSQuZ2V0VmFsdWUoKSwgb2JqKSkge1xuICAgICAgdGhpcy52YWx1ZSQubmV4dChvYmopO1xuICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy52YWx1ZSQuZ2V0VmFsdWUoKSk7XG4gICAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy5zZWFyY2gkLm5leHQob2JqKTtcbiAgICAgIHRoaXMuc2VhcmNoU2VsZWN0ZWQkLm5leHQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXIoJGV2ZW50OiBFdmVudCwgaXRlbTogYW55KSB7XG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IHRoaXMuYmluZFZhbHVlID8gaXRlbT8uW3RoaXMuYmluZFZhbHVlXSA6IGl0ZW07XG4gICAgY29uc3Qga2V5UHJvcCA9IHRoaXMuYmluZFZhbHVlID8/IHRoaXMuYmluZExhYmVsID8/ICdpZCc7XG4gICAgdGhpcy53cml0ZVZhbHVlKFxuICAgICAgdGhpcy52YWx1ZSRcbiAgICAgICAgLmdldFZhbHVlKClcbiAgICAgICAgLmZpbHRlcigoaTogYW55KSA9PlxuICAgICAgICAgIHR5cGVvZiBpdGVtVmFsdWUgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IHR5cGVvZiBpID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICA/IGlba2V5UHJvcF0gIT09IGl0ZW1WYWx1ZVtrZXlQcm9wXVxuICAgICAgICAgICAgICA6IGkgIT09IGl0ZW1WYWx1ZVtrZXlQcm9wXVxuICAgICAgICAgICAgOiB0eXBlb2YgaSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgPyBpW2tleVByb3BdICE9PSBpdGVtVmFsdWVcbiAgICAgICAgICAgICAgOiBpICE9PSBpdGVtVmFsdWVcbiAgICAgICAgKVxuICAgICk7XG4gIH1cblxuICBjbGVhckFsbCgkZXZlbnQ6IEV2ZW50KSB7XG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUoW10pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgdGhpcy5zZWFyY2goJycpO1xuICAgIHRoaXMuY2xlYXJlZC5uZXh0KCk7XG4gIH1cblxuICBzZWFyY2goJGV2ZW50OiBzdHJpbmcsIGZyb21UZW1wbGF0ZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5zZWFyY2gkLm5leHQoJGV2ZW50KTtcbiAgICB0aGlzLnNlYXJjaGVkLm5leHQoJGV2ZW50KTtcbiAgICB0aGlzLnNlYXJjaFNlbGVjdGVkJC5uZXh0KGZhbHNlKTtcbiAgICBpZiAoZnJvbVRlbXBsYXRlICYmIHRoaXMuYXV0b2NvbXBsZXRlICYmIHRoaXMuZXh0ZXJuYWxBdXRvY29tcGxldGVTZXJ2aWNlKSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUoJGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3QoJGV2ZW50OiBFdmVudCwgaXRlbTogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgaXRlbVZhbHVlID0gdGhpcy5iaW5kVmFsdWUgPyBpdGVtPy5bdGhpcy5iaW5kVmFsdWVdIDogaXRlbTtcbiAgICBjb25zdCBrZXlQcm9wID0gdGhpcy5iaW5kVmFsdWUgPz8gdGhpcy5iaW5kTGFiZWwgPz8gJ2lkJztcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgaWYgKCF0aGlzLnZhbHVlJC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgIHRoaXMud3JpdGVWYWx1ZShbaXRlbVZhbHVlXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIGl0ZW1WYWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgID8gdGhpcy52YWx1ZSRcbiAgICAgICAgICAgICAgICAuZ2V0VmFsdWUoKVxuICAgICAgICAgICAgICAgIC5tYXAoKHZhbDogYW55KSA9PiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgPyB2YWxba2V5UHJvcF0gOiB2YWwpKVxuICAgICAgICAgICAgICAgIC5pbmNsdWRlcyhpdGVtVmFsdWVba2V5UHJvcF0pXG4gICAgICAgICAgICA6IHRoaXMudmFsdWUkXG4gICAgICAgICAgICAgICAgLmdldFZhbHVlKClcbiAgICAgICAgICAgICAgICAubWFwKCh2YWw6IGFueSkgPT4gKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnID8gdmFsW2tleVByb3BdIDogdmFsKSlcbiAgICAgICAgICAgICAgICAuaW5jbHVkZXMoaXRlbVZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmNsZWFyKCRldmVudCwgaXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy53cml0ZVZhbHVlKFsuLi50aGlzLnZhbHVlJC5nZXRWYWx1ZSgpLCBpdGVtVmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUoaXRlbVZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgdGhpcy50b2dnbGUoZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZURlc2NlbmRhbnQgPSBpbmRleDtcbiAgICBjb25zdCBpdGVtTGFiZWwgPSB0aGlzLmJpbmRMYWJlbCA/IGl0ZW0/Llt0aGlzLmJpbmRMYWJlbF0gOiBpdGVtO1xuICAgIHRoaXMuc2VhcmNoJC5uZXh0KGl0ZW1MYWJlbCk7XG4gICAgdGhpcy5zZWFyY2hTZWxlY3RlZCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHRvZ2dsZShmb3JjZT86IGJvb2xlYW4pIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGlmICh0aGlzLm9wZW4gIT09IGZvcmNlKSB7XG4gICAgICAgIHRoaXMub3BlbiA9IGZvcmNlICE9PSB1bmRlZmluZWQgPyBmb3JjZSA6ICF0aGlzLm9wZW47XG4gICAgICAgIGlmICh0aGlzLm9wZW4pIHtcbiAgICAgICAgICB0aGlzLm1vZGFsV2lkdGggPSB0aGlzLl9lbGVtZW50UmVmLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIC0gNTtcbiAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHRoaXMuZ2V0T3ZlcmxheUNvbmZpZygpKTtcbiAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZShmYWxzZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvY29tcGxldGUpIHtcbiAgICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMuc2VhcmNoJC5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLm9wdGlvbnNNb2RhbFJlZiA9IHRoaXMub3ZlcmxheVJlZi5hdHRhY2gobmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMub3B0aW9uc01vZGFsLCB0aGlzLnZpZXdDb250YWluZXJSZWYpKTtcbiAgICAgICAgICB0aGlzLmZvY3VzSW5pdGlhbFNlbGVjdGlvbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub3ZlcmxheVJlZj8uZGlzcG9zZSgpO1xuICAgICAgICAgIHRoaXMub3ZlcmxheVJlZiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB0aGlzLnJldHVybkZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaGliaXRpb24oKSB7XG4gICAgdGhpcy5pbmhpYmF0ZSA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiAodGhpcy5pbmhpYmF0ZSA9IGZhbHNlKSwgMTAwKTtcbiAgfVxuXG4gIGhhbmRsZUNsaWNrKCkge1xuICAgIGlmICghdGhpcy5pbmhpYmF0ZSkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgICB0aGlzLmNsaWNrZWQuZW1pdCgpO1xuICAgICAgdGhpcy5pbmhpYml0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlRm9jdXMoKSB7XG4gICAgdGhpcy5mb2N1c2VkID0gIXRoaXMuZm9jdXNlZDtcbiAgfVxuXG4gIHJldHVybkZvY3VzKCkge1xuICAgIHJldHVybiB0aGlzLmF1dG9jb21wbGV0ZSA/IHRoaXMuZm9jdXNJbnB1dCgpIDogdGhpcy5zZWxlY3RFbGVtZW50Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBmb2N1c0lucHV0KCkge1xuICAgIHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3ZlcmxheUNvbmZpZygpOiBPdmVybGF5Q29uZmlnIHtcbiAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5XG4gICAgICAucG9zaXRpb24oKVxuICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZWxlbWVudFJlZilcbiAgICAgIC53aXRoUHVzaChmYWxzZSlcbiAgICAgIC53aXRoUG9zaXRpb25zKFtcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgb3ZlcmxheVk6ICd0b3AnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJ1xuICAgICAgICB9XG4gICAgICBdKTtcblxuICAgIGNvbnN0IHNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpO1xuICAgIHJldHVybiBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICBwb3NpdGlvblN0cmF0ZWd5OiBwb3NpdGlvblN0cmF0ZWd5LFxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHNjcm9sbFN0cmF0ZWd5LFxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICBwYW5lbENsYXNzOiBbJ2EtcHJ5LXNlbGVjdF9fb3B0aW9ucyddLFxuICAgICAgYmFja2Ryb3BDbGFzczogJ2EtcHJ5LXNlbGVjdF9fYmFja2Ryb3AnXG4gICAgfSk7XG4gIH1cblxuICBnZXQgX2VsZW1lbnRSZWYoKTogSFRNTERpdkVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYgPz8gdGhpcy5zZWxlY3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBvbkZvY3VzQ2hhbmdlID0gKG9yaWdpbjogRm9jdXNPcmlnaW4pID0+IHtcbiAgICBpZiAoIXRoaXMuaW5oaWJhdGUpIHtcbiAgICAgIHRoaXMuYTExeVNlcnZpY2Uub25Gb2N1c0NoYW5nZShcbiAgICAgICAgb3JpZ2luLFxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZSxcbiAgICAgICAgKCkgPT4gdGhpcy50b2dnbGVGb2N1cygpLFxuICAgICAgICAoKSA9PiB0aGlzLmZvY3VzSW5wdXQoKVxuICAgICAgKTtcbiAgICAgIHRoaXMuaW5oaWJpdGlvbigpO1xuICAgIH1cbiAgfTtcbiAgb25LZXlkb3duU2VsZWN0ID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLmExMXlTZXJ2aWNlLm9uS2V5ZG93blNlbGVjdChldmVudCwgdGhpcy5hdXRvY29tcGxldGUpO1xuICBvbktleWRvd25BdXRvY29tcGxldGVJbnB1dCA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT5cbiAgICB0aGlzLmExMXlTZXJ2aWNlLm9uS2V5ZG93bkF1dG9jb21wbGV0ZUlucHV0KGV2ZW50LCB0aGlzLm9wZW4sIHRoaXMuc2VhcmNoJC5nZXRWYWx1ZSgpLCB0aGlzLm9wdGlvbnNNb2RhbFJlZik7XG4gIG9uS2V5ZG93bk9wdGlvbiA9IChcbiAgICBldmVudDogS2V5Ym9hcmRFdmVudCxcbiAgICBpdGVtOiBhbnksXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBvcHRpb25EaXZSZWY6IEhUTUxEaXZFbGVtZW50LFxuICAgIGZpcnN0OiBib29sZWFuLFxuICAgIGxhc3Q6IGJvb2xlYW5cbiAgKSA9PlxuICAgIHRoaXMuYTExeVNlcnZpY2Uub25LZXlkb3duT3B0aW9uKFxuICAgICAgZXZlbnQsXG4gICAgICBvcHRpb25EaXZSZWYsXG4gICAgICBmaXJzdCxcbiAgICAgIGxhc3QsXG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZSxcbiAgICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgKCkgPT4gdGhpcy5zZWxlY3QoZXZlbnQsIGl0ZW0sIGluZGV4KVxuICAgICk7XG4gIGZvY3VzSW5pdGlhbFNlbGVjdGlvbiA9ICgpID0+IHRoaXMuYTExeVNlcnZpY2UuZm9jdXNJbml0aWFsU2VsZWN0aW9uKHRoaXMuYXV0b2NvbXBsZXRlLCB0aGlzLm9wdGlvbnNNb2RhbFJlZik7XG4gIHRyYWNrRm4oaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIGl0ZW0uaWQgPz8gaXRlbTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImEtcHJ5LXNlbGVjdFwiXG4gIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAjc2VsZWN0RWxlbWVudFxuICBbY2xhc3MuLWZvY3VzZWRdPVwiZm9jdXNlZFwiXG4gIChjbGljayk9XCJoYW5kbGVDbGljaygpXCJcbiAgcm9sZT1cImNvbWJvYm94XCJcbiAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJvcGVuXCJcbiAgW2F0dHIuYXJpYS1vd25zXT1cIm9wZW4gPyBtb2RhbElkIDogbnVsbFwiXG4gIGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCJcbiAgdGFiaW5kZXg9XCIwXCJcbiAgY2RrTW9uaXRvckVsZW1lbnRGb2N1c1xuICAoY2RrRm9jdXNDaGFuZ2UpPVwib25Gb2N1c0NoYW5nZSgkZXZlbnQpXCJcbiAgKGtleWRvd24pPVwib25LZXlkb3duU2VsZWN0KCRldmVudClcIlxuPlxuICA8ZGl2IGNsYXNzPVwiYS1wcnktc2VsZWN0X19jb250ZW50XCI+XG4gICAgQGlmIChhdXRvY29tcGxldGUpIHtcbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0X19zZWFyY2hcIlxuICAgICAgICBbbmdNb2RlbF09XCJzZWFyY2gkLmdldFZhbHVlKClcIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWFyY2goJGV2ZW50LCB0cnVlKVwiXG4gICAgICAgIGFyaWEtYXV0b2NvbXBsZXRlPVwibGlzdFwiXG4gICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwib3BlbiA/IG1vZGFsSWQgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93bkF1dG9jb21wbGV0ZUlucHV0KCRldmVudClcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgPz8gJydcIlxuICAgICAgICAjaW5wdXRcbiAgICAgIC8+XG4gICAgfSBAZWxzZSBpZiAoKHZhbHVlSXRlbXMkIHwgYXN5bmMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgPHNwYW4gY2xhc3M9XCJhLXByeS1zZWxlY3RfX3BsYWNlaG9sZGVyXCI+e3sgcGxhY2Vob2xkZXIgfX08L3NwYW4+XG4gICAgICA8ZGl2IGNsYXNzPVwiYS1wcnktc2VsZWN0X19maWxsZXJcIj48L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdmFsdWVJdGVtcyQgfCBhc3luY1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RfX3ZhbHVlXCJcbiAgICAgICAgICBbY2xhc3MucHJ5LXNlbGVjdC1mb3JtXT1cImlzRm9ybVwiXG4gICAgICAgICAgW2NsYXNzLi1tdWx0aXBsZV09XCJtdWx0aXBsZVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbSA/IGl0ZW1bYmluZENsYXNzZXMgPz8gJyddID8/IHt9IDoge31cIlxuICAgICAgICA+XG4gICAgICAgICAgQGlmICh0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGl0ZW0sIGNsZWFyIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxwcnktaWNvblxuICAgICAgICAgICAgICAqbmdJZj1cImJpbmRJY29uXCJcbiAgICAgICAgICAgICAgW2ljb25TdmddPVwiaXRlbVtiaW5kSWNvbl1cIlxuICAgICAgICAgICAgICBbd2lkdGhdPVwiaWNvblNpemVbMF1cIlxuICAgICAgICAgICAgICBbaGVpZ2h0XT1cImljb25TaXplWzFdXCJcbiAgICAgICAgICAgID48L3ByeS1pY29uPlxuICAgICAgICAgICAgQGlmIChiaW5kTGFiZWwgPyBpdGVtPy5bYmluZExhYmVsXSA6IGl0ZW07IGFzIHZhbHVlKSB7XG4gICAgICAgICAgICAgIHt7IChpMThuUHJlZml4ID8/ICcnKSArIHZhbHVlIHwgaTE4bjogeyB3YXJuOiBmYWxzZSB9IH19XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtdWx0aXBsZSAmJiBjbGVhcmFibGVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0X19jbGVhclwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgPsOXPC9zcGFuXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwiYS1wcnktc2VsZWN0X19maWxsZXJcIj48L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiYS1wcnktc2VsZWN0X19hY3Rpb25zXCI+XG4gICAgPGRpdiBjbGFzcz1cImEtcHJ5LXNlbGVjdF9fYWN0aW9uc19fY2xlYXItYnV0dG9uXCI+XG4gICAgICBAaWYgKGNsZWFyYWJsZSAmJiAoc2VhcmNoJCB8IGFzeW5jKSkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cImEtcHJ5LXNlbGVjdF9fY2xlYXJcIiAoY2xpY2spPVwiY2xlYXJBbGwoJGV2ZW50KVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPsOXPC9zcGFuPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIDxwcnktaWNvblxuICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RfX3RvZ2dsZVwiXG4gICAgICBbaWNvblN2Z109XCJvcGVuID8gJ2NoZXZyb25fdG9wJyA6ICdjaGV2cm9uX2JvdHRvbSdcIlxuICAgICAgW3dpZHRoXT1cImljb25TaXplWzBdXCJcbiAgICAgIFtoZWlnaHRdPVwiaWNvblNpemVbMV1cIlxuICAgID48L3ByeS1pY29uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNvcHRpb25zTW9kYWw+XG4gIDxkaXZcbiAgICByb2xlPVwibGlzdGJveFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQHByeS5zZWxlY3QubGFiZWwnIHwgaTE4blwiXG4gICAgW2lkXT1cIm1vZGFsSWRcIlxuICAgIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCInc2VsZWN0LW9wdGlvbi0nICsgYWN0aXZlRGVzY2VuZGFudFwiXG4gICAgW2F0dHIuYXJpYS1tdWx0aXNlbGVjdGFibGVdPVwibXVsdGlwbGVcIlxuICAgIFthdHRyLnJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICBbYXR0ci5hcmlhLXJlYWRvbmx5XT1cImRpc2FibGVkXCJcbiAgICBjZGtUcmFwRm9jdXM9XCIhYXV0b2NvbXBsZXRlXCJcbiAgICBbY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmVdPVwiIWF1dG9jb21wbGV0ZVwiXG4gID5cbiAgICBAaWYgKGxvYWRpbmcpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJhLXByeS1zZWxlY3RfX29wdGlvbnNfX29wdGlvbiAtaGludFwiIFtzdHlsZS53aWR0aC5weF09XCJtb2RhbFdpZHRoXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuby13aWRnZXQgbm8td2lkZ2V0X19sb2FkZXJcIj5cbiAgICAgICAgICA8cHJ5LXBhZ2UtbG9hZGVyPjwvcHJ5LXBhZ2UtbG9hZGVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHA+e3sgJ0Bwcnkuc2VsZWN0LmxvYWRpbmcnIHwgaTE4biB9fS4uLjwvcD5cbiAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgICAgQGZvciAoaXRlbSBvZiBtYXRjaGluZ0l0ZW1zJCB8IGFzeW5jOyB0cmFjayB0cmFja0ZuOyBsZXQgaW5kZXggPSAkaW5kZXg7IGxldCBmaXJzdCA9ICRmaXJzdDsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RfX29wdGlvbnNfX29wdGlvblwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCIodmFsdWVJdGVtcyQgfCBhc3luYykuaW5jbHVkZXMoaXRlbSlcIlxuICAgICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCIodmFsdWVJdGVtcyQgfCBhc3luYykuaW5jbHVkZXMoaXRlbSlcIlxuICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3QoJGV2ZW50LCBpdGVtLCBpbmRleClcIlxuICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93bk9wdGlvbigkZXZlbnQsIGl0ZW0sIGluZGV4LCBvcHRpb25EaXZSZWYsIGZpcnN0LCBsYXN0KVwiXG4gICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIm1vZGFsV2lkdGhcIlxuICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgIFtpZF09XCInc2VsZWN0LW9wdGlvbi0nICsgaW5kZXhcIlxuICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgI29wdGlvbkRpdlJlZlxuICAgICAgICA+XG4gICAgICAgICAgQGlmICh0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGl0ZW0sIGNsZWFyIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIEBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgPHByeS1jaGVja2JveFxuICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiKHZhbHVlSXRlbXMkIHwgYXN5bmMpLmluY2x1ZGVzKGl0ZW0pXCJcbiAgICAgICAgICAgICAgPjwvcHJ5LWNoZWNrYm94PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChiaW5kSWNvbikge1xuICAgICAgICAgICAgICA8cHJ5LWljb24gW2ljb25TdmddPVwiaXRlbVtiaW5kSWNvbl1cIiBbd2lkdGhdPVwiaWNvblNpemVbMF1cIiBbaGVpZ2h0XT1cImljb25TaXplWzFdXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoYmluZExhYmVsID8gaXRlbT8uW2JpbmRMYWJlbF0gOiBpdGVtOyBhcyB2YWx1ZSkge1xuICAgICAgICAgICAgICB7eyAoaTE4blByZWZpeCA/IGkxOG5QcmVmaXggOiAnJykgKyB2YWx1ZSB8IGkxOG46IHsgd2FybjogZmFsc2UgfSB9fVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbXB0eSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhLXByeS1zZWxlY3RfX29wdGlvbnNfX29wdGlvbiAtaGludFwiIFtzdHlsZS53aWR0aC5weF09XCJtb2RhbFdpZHRoXCI+XG4gICAgICAgICAgPHA+e3sgJ0Bwcnkuc2VsZWN0LmVtcHR5JyB8IGkxOG4gfX08L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIH1cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -7308,7 +7308,7 @@ class PrySelectComponent extends SubscriptionnerDirective {
|
|
|
7308
7308
|
multi: true
|
|
7309
7309
|
},
|
|
7310
7310
|
SelectA11yService
|
|
7311
|
-
], viewQueries: [{ propertyName: "optionsModal", first: true, predicate: ["optionsModal"], descendants: true, read: TemplateRef }, { propertyName: "selectElement", first: true, predicate: ["selectElement"], descendants: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\n class=\"a-pry-select\"\n [attr.aria-disabled]=\"disabled\"\n #selectElement\n [class.-focused]=\"focused\"\n (click)=\"handleClick()\"\n role=\"combobox\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-owns]=\"open ? modalId : null\"\n aria-haspopup=\"listbox\"\n tabindex=\"0\"\n cdkMonitorElementFocus\n (cdkFocusChange)=\"onFocusChange($event)\"\n (keydown)=\"onKeydownSelect($event)\"\n>\n <div class=\"a-pry-select__content\">\n @if (autocomplete) {\n <input\n type=\"text\"\n class=\"a-pry-select__search\"\n [ngModel]=\"search$.getValue()\"\n (ngModelChange)=\"search($event, true)\"\n aria-autocomplete=\"list\"\n [attr.aria-controls]=\"open ? modalId : null\"\n [attr.aria-disabled]=\"disabled\"\n [disabled]=\"disabled\"\n (keydown)=\"onKeydownAutocompleteInput($event)\"\n [placeholder]=\"placeholder ?? ''\"\n #input\n />\n } @else if ((valueItems$ | async).length === 0) {\n <span class=\"a-pry-select__placeholder\">{{ placeholder }}</span>\n <div class=\"a-pry-select__filler\"></div>\n } @else {\n <ng-container *ngFor=\"let item of valueItems$ | async\">\n <div\n class=\"a-pry-select__value\"\n [class.pry-select-form]=\"isForm\"\n [class.-multiple]=\"multiple\"\n [ngClass]=\"item ? item[bindClasses ?? ''] ?? {} : {}\"\n >\n @if (template) {\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n } @else {\n <pry-icon\n *ngIf=\"bindIcon\"\n [iconSvg]=\"item[bindIcon]\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n @if (bindLabel ? item?.[bindLabel] : item; as value) {\n {{ (i18nPrefix ?? '') + value | i18n: { warn: false } }}\n <span\n *ngIf=\"multiple && clearable\"\n class=\"a-pry-select__clear\"\n (click)=\"clear($event, item)\"\n aria-hidden=\"true\"\n >\u00D7</span\n >\n }\n }\n </div>\n </ng-container>\n <div class=\"a-pry-select__filler\"></div>\n }\n </div>\n <div class=\"a-pry-select__actions\">\n @if (clearable) {\n
|
|
7311
|
+
], viewQueries: [{ propertyName: "optionsModal", first: true, predicate: ["optionsModal"], descendants: true, read: TemplateRef }, { propertyName: "selectElement", first: true, predicate: ["selectElement"], descendants: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\n class=\"a-pry-select\"\n [attr.aria-disabled]=\"disabled\"\n #selectElement\n [class.-focused]=\"focused\"\n (click)=\"handleClick()\"\n role=\"combobox\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-owns]=\"open ? modalId : null\"\n aria-haspopup=\"listbox\"\n tabindex=\"0\"\n cdkMonitorElementFocus\n (cdkFocusChange)=\"onFocusChange($event)\"\n (keydown)=\"onKeydownSelect($event)\"\n>\n <div class=\"a-pry-select__content\">\n @if (autocomplete) {\n <input\n type=\"text\"\n class=\"a-pry-select__search\"\n [ngModel]=\"search$.getValue()\"\n (ngModelChange)=\"search($event, true)\"\n aria-autocomplete=\"list\"\n [attr.aria-controls]=\"open ? modalId : null\"\n [attr.aria-disabled]=\"disabled\"\n [disabled]=\"disabled\"\n (keydown)=\"onKeydownAutocompleteInput($event)\"\n [placeholder]=\"placeholder ?? ''\"\n #input\n />\n } @else if ((valueItems$ | async).length === 0) {\n <span class=\"a-pry-select__placeholder\">{{ placeholder }}</span>\n <div class=\"a-pry-select__filler\"></div>\n } @else {\n <ng-container *ngFor=\"let item of valueItems$ | async\">\n <div\n class=\"a-pry-select__value\"\n [class.pry-select-form]=\"isForm\"\n [class.-multiple]=\"multiple\"\n [ngClass]=\"item ? item[bindClasses ?? ''] ?? {} : {}\"\n >\n @if (template) {\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n } @else {\n <pry-icon\n *ngIf=\"bindIcon\"\n [iconSvg]=\"item[bindIcon]\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n @if (bindLabel ? item?.[bindLabel] : item; as value) {\n {{ (i18nPrefix ?? '') + value | i18n: { warn: false } }}\n <span\n *ngIf=\"multiple && clearable\"\n class=\"a-pry-select__clear\"\n (click)=\"clear($event, item)\"\n aria-hidden=\"true\"\n >\u00D7</span\n >\n }\n }\n </div>\n </ng-container>\n <div class=\"a-pry-select__filler\"></div>\n }\n </div>\n <div class=\"a-pry-select__actions\">\n <div class=\"a-pry-select__actions__clear-button\">\n @if (clearable && (search$ | async)) {\n <span class=\"a-pry-select__clear\" (click)=\"clearAll($event)\" aria-hidden=\"true\">\u00D7</span>\n }\n </div>\n <pry-icon\n class=\"a-pry-select__toggle\"\n [iconSvg]=\"open ? 'chevron_top' : 'chevron_bottom'\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n </div>\n</div>\n<ng-template #optionsModal>\n <div\n role=\"listbox\"\n [attr.aria-label]=\"'@pry.select.label' | i18n\"\n [id]=\"modalId\"\n [attr.aria-activedescendant]=\"'select-option-' + activeDescendant\"\n [attr.aria-multiselectable]=\"multiple\"\n [attr.required]=\"required\"\n [attr.aria-readonly]=\"disabled\"\n cdkTrapFocus=\"!autocomplete\"\n [cdkTrapFocusAutoCapture]=\"!autocomplete\"\n >\n @if (loading) {\n <div class=\"a-pry-select__options__option -hint\" [style.width.px]=\"modalWidth\">\n <div class=\"no-widget no-widget__loader\">\n <pry-page-loader></pry-page-loader>\n </div>\n <p>{{ '@pry.select.loading' | i18n }}...</p>\n </div>\n } @else {\n @for (item of matchingItems$ | async; track trackFn; let index = $index; let first = $first; let last = $last) {\n <div\n class=\"a-pry-select__options__option\"\n [attr.aria-selected]=\"(valueItems$ | async).includes(item)\"\n [attr.aria-checked]=\"(valueItems$ | async).includes(item)\"\n [attr.aria-disabled]=\"disabled\"\n (click)=\"select($event, item, index)\"\n (keydown)=\"onKeydownOption($event, item, index, optionDivRef, first, last)\"\n [style.width.px]=\"modalWidth\"\n role=\"option\"\n [id]=\"'select-option-' + index\"\n tabindex=\"0\"\n #optionDivRef\n >\n @if (template) {\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n } @else {\n @if (multiple) {\n <pry-checkbox\n (click)=\"$event.preventDefault()\"\n [ngModel]=\"(valueItems$ | async).includes(item)\"\n ></pry-checkbox>\n }\n @if (bindIcon) {\n <pry-icon [iconSvg]=\"item[bindIcon]\" [width]=\"iconSize[0]\" [height]=\"iconSize[1]\"></pry-icon>\n }\n @if (bindLabel ? item?.[bindLabel] : item; as value) {\n {{ (i18nPrefix ? i18nPrefix : '') + value | i18n: { warn: false } }}\n }\n }\n </div>\n } @empty {\n <div class=\"a-pry-select__options__option -hint\" [style.width.px]=\"modalWidth\">\n <p>{{ '@pry.select.empty' | i18n }}</p>\n </div>\n }\n }\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3$2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i3$2.CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3$3.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$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i7.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle", "name", "inputId", "inhibit"] }, { kind: "component", type: i8.PryPageLoaderComponent, selector: "pry-page-loader", inputs: ["image", "imageAltText"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: I18nPipe, name: "i18n" }] }); }
|
|
7312
7312
|
}
|
|
7313
7313
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PrySelectComponent, decorators: [{
|
|
7314
7314
|
type: Component,
|
|
@@ -7319,7 +7319,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
|
|
|
7319
7319
|
multi: true
|
|
7320
7320
|
},
|
|
7321
7321
|
SelectA11yService
|
|
7322
|
-
], template: "<div\n class=\"a-pry-select\"\n [attr.aria-disabled]=\"disabled\"\n #selectElement\n [class.-focused]=\"focused\"\n (click)=\"handleClick()\"\n role=\"combobox\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-owns]=\"open ? modalId : null\"\n aria-haspopup=\"listbox\"\n tabindex=\"0\"\n cdkMonitorElementFocus\n (cdkFocusChange)=\"onFocusChange($event)\"\n (keydown)=\"onKeydownSelect($event)\"\n>\n <div class=\"a-pry-select__content\">\n @if (autocomplete) {\n <input\n type=\"text\"\n class=\"a-pry-select__search\"\n [ngModel]=\"search$.getValue()\"\n (ngModelChange)=\"search($event, true)\"\n aria-autocomplete=\"list\"\n [attr.aria-controls]=\"open ? modalId : null\"\n [attr.aria-disabled]=\"disabled\"\n [disabled]=\"disabled\"\n (keydown)=\"onKeydownAutocompleteInput($event)\"\n [placeholder]=\"placeholder ?? ''\"\n #input\n />\n } @else if ((valueItems$ | async).length === 0) {\n <span class=\"a-pry-select__placeholder\">{{ placeholder }}</span>\n <div class=\"a-pry-select__filler\"></div>\n } @else {\n <ng-container *ngFor=\"let item of valueItems$ | async\">\n <div\n class=\"a-pry-select__value\"\n [class.pry-select-form]=\"isForm\"\n [class.-multiple]=\"multiple\"\n [ngClass]=\"item ? item[bindClasses ?? ''] ?? {} : {}\"\n >\n @if (template) {\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n } @else {\n <pry-icon\n *ngIf=\"bindIcon\"\n [iconSvg]=\"item[bindIcon]\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n @if (bindLabel ? item?.[bindLabel] : item; as value) {\n {{ (i18nPrefix ?? '') + value | i18n: { warn: false } }}\n <span\n *ngIf=\"multiple && clearable\"\n class=\"a-pry-select__clear\"\n (click)=\"clear($event, item)\"\n aria-hidden=\"true\"\n >\u00D7</span\n >\n }\n }\n </div>\n </ng-container>\n <div class=\"a-pry-select__filler\"></div>\n }\n </div>\n <div class=\"a-pry-select__actions\">\n @if (clearable) {\n
|
|
7322
|
+
], template: "<div\n class=\"a-pry-select\"\n [attr.aria-disabled]=\"disabled\"\n #selectElement\n [class.-focused]=\"focused\"\n (click)=\"handleClick()\"\n role=\"combobox\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-owns]=\"open ? modalId : null\"\n aria-haspopup=\"listbox\"\n tabindex=\"0\"\n cdkMonitorElementFocus\n (cdkFocusChange)=\"onFocusChange($event)\"\n (keydown)=\"onKeydownSelect($event)\"\n>\n <div class=\"a-pry-select__content\">\n @if (autocomplete) {\n <input\n type=\"text\"\n class=\"a-pry-select__search\"\n [ngModel]=\"search$.getValue()\"\n (ngModelChange)=\"search($event, true)\"\n aria-autocomplete=\"list\"\n [attr.aria-controls]=\"open ? modalId : null\"\n [attr.aria-disabled]=\"disabled\"\n [disabled]=\"disabled\"\n (keydown)=\"onKeydownAutocompleteInput($event)\"\n [placeholder]=\"placeholder ?? ''\"\n #input\n />\n } @else if ((valueItems$ | async).length === 0) {\n <span class=\"a-pry-select__placeholder\">{{ placeholder }}</span>\n <div class=\"a-pry-select__filler\"></div>\n } @else {\n <ng-container *ngFor=\"let item of valueItems$ | async\">\n <div\n class=\"a-pry-select__value\"\n [class.pry-select-form]=\"isForm\"\n [class.-multiple]=\"multiple\"\n [ngClass]=\"item ? item[bindClasses ?? ''] ?? {} : {}\"\n >\n @if (template) {\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n } @else {\n <pry-icon\n *ngIf=\"bindIcon\"\n [iconSvg]=\"item[bindIcon]\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n @if (bindLabel ? item?.[bindLabel] : item; as value) {\n {{ (i18nPrefix ?? '') + value | i18n: { warn: false } }}\n <span\n *ngIf=\"multiple && clearable\"\n class=\"a-pry-select__clear\"\n (click)=\"clear($event, item)\"\n aria-hidden=\"true\"\n >\u00D7</span\n >\n }\n }\n </div>\n </ng-container>\n <div class=\"a-pry-select__filler\"></div>\n }\n </div>\n <div class=\"a-pry-select__actions\">\n <div class=\"a-pry-select__actions__clear-button\">\n @if (clearable && (search$ | async)) {\n <span class=\"a-pry-select__clear\" (click)=\"clearAll($event)\" aria-hidden=\"true\">\u00D7</span>\n }\n </div>\n <pry-icon\n class=\"a-pry-select__toggle\"\n [iconSvg]=\"open ? 'chevron_top' : 'chevron_bottom'\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n </div>\n</div>\n<ng-template #optionsModal>\n <div\n role=\"listbox\"\n [attr.aria-label]=\"'@pry.select.label' | i18n\"\n [id]=\"modalId\"\n [attr.aria-activedescendant]=\"'select-option-' + activeDescendant\"\n [attr.aria-multiselectable]=\"multiple\"\n [attr.required]=\"required\"\n [attr.aria-readonly]=\"disabled\"\n cdkTrapFocus=\"!autocomplete\"\n [cdkTrapFocusAutoCapture]=\"!autocomplete\"\n >\n @if (loading) {\n <div class=\"a-pry-select__options__option -hint\" [style.width.px]=\"modalWidth\">\n <div class=\"no-widget no-widget__loader\">\n <pry-page-loader></pry-page-loader>\n </div>\n <p>{{ '@pry.select.loading' | i18n }}...</p>\n </div>\n } @else {\n @for (item of matchingItems$ | async; track trackFn; let index = $index; let first = $first; let last = $last) {\n <div\n class=\"a-pry-select__options__option\"\n [attr.aria-selected]=\"(valueItems$ | async).includes(item)\"\n [attr.aria-checked]=\"(valueItems$ | async).includes(item)\"\n [attr.aria-disabled]=\"disabled\"\n (click)=\"select($event, item, index)\"\n (keydown)=\"onKeydownOption($event, item, index, optionDivRef, first, last)\"\n [style.width.px]=\"modalWidth\"\n role=\"option\"\n [id]=\"'select-option-' + index\"\n tabindex=\"0\"\n #optionDivRef\n >\n @if (template) {\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n } @else {\n @if (multiple) {\n <pry-checkbox\n (click)=\"$event.preventDefault()\"\n [ngModel]=\"(valueItems$ | async).includes(item)\"\n ></pry-checkbox>\n }\n @if (bindIcon) {\n <pry-icon [iconSvg]=\"item[bindIcon]\" [width]=\"iconSize[0]\" [height]=\"iconSize[1]\"></pry-icon>\n }\n @if (bindLabel ? item?.[bindLabel] : item; as value) {\n {{ (i18nPrefix ? i18nPrefix : '') + value | i18n: { warn: false } }}\n }\n }\n </div>\n } @empty {\n <div class=\"a-pry-select__options__option -hint\" [style.width.px]=\"modalWidth\">\n <p>{{ '@pry.select.empty' | i18n }}</p>\n </div>\n }\n }\n </div>\n</ng-template>\n" }]
|
|
7323
7323
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i2.Overlay }, { type: i0.ViewContainerRef }, { type: SelectA11yService }], propDecorators: { items: [{
|
|
7324
7324
|
type: Input
|
|
7325
7325
|
}], clearable: [{
|