@fundamental-ngx/core 0.58.0-rc.5 → 0.58.0-rc.51

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.
@@ -1 +1 @@
1
- {"version":3,"file":"fundamental-ngx-core-combobox.mjs","sources":["../tmp-esm2022/combobox/combobox-item.directive.js","../tmp-esm2022/combobox/combobox.interface.js","../tmp-esm2022/combobox/combobox-mobile/combobox-mobile.component.js","../tmp-esm2022/combobox/list-group.pipe.js","../tmp-esm2022/combobox/tokens.js","../tmp-esm2022/combobox/combobox.component.js","../tmp-esm2022/combobox/combobox.module.js","../tmp-esm2022/combobox/fundamental-ngx-core-combobox.js"],"sourcesContent":["import { Directive, Input, TemplateRef, inject } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class ComboboxItemDirective {\n constructor() {\n /** Template reference. */\n this.templateRef = inject((TemplateRef));\n }\n /** @hidden */\n static ngTemplateContextGuard(dir, ctx) {\n return true;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.1.4\", type: ComboboxItemDirective, isStandalone: true, selector: \"[fdComboboxItem]\", inputs: { fdComboboxItemUse: \"fdComboboxItemUse\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxItemDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[fdComboboxItem]',\n standalone: true\n }]\n }], propDecorators: { fdComboboxItemUse: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3gtaXRlbS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvY29tYm9ib3gvY29tYm9ib3gtaXRlbS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFPdEUsTUFBTSxPQUFPLHFCQUFxQjtJQUpsQztRQVlJLDBCQUEwQjtRQUMxQixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxDQUFBLFdBQTRDLENBQUEsQ0FBQyxDQUFDO0tBU3RFO0lBUEcsY0FBYztJQUNkLE1BQU0sQ0FBQyxzQkFBc0IsQ0FDekIsR0FBNkIsRUFDN0IsR0FBb0M7UUFFcEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzs4R0FqQlEscUJBQXFCO2tHQUFyQixxQkFBcUI7OzJGQUFyQixxQkFBcUI7a0JBSmpDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsVUFBVSxFQUFFLElBQUk7aUJBQ25COzhCQU9HLGlCQUFpQjtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIFRlbXBsYXRlUmVmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbWJvYm94SXRlbURpcmVjdGl2ZUNvbnRleHQgfSBmcm9tICcuL2NvbWJvYm94LmludGVyZmFjZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2ZkQ29tYm9ib3hJdGVtXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBDb21ib2JveEl0ZW1EaXJlY3RpdmU8VCA9IHVua25vd24+IHtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVXNlZCBmb3IgdHlwZSBzdXBwb3J0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmRDb21ib2JveEl0ZW1Vc2U6IFQ7XG5cbiAgICAvKiogVGVtcGxhdGUgcmVmZXJlbmNlLiAqL1xuICAgIHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmPENvbWJvYm94SXRlbURpcmVjdGl2ZUNvbnRleHQ8VD4+KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQ8VD4oXG4gICAgICAgIGRpcjogQ29tYm9ib3hJdGVtRGlyZWN0aXZlPFQ+LFxuICAgICAgICBjdHg6IENvbWJvYm94SXRlbURpcmVjdGl2ZUNvbnRleHQ8VD5cbiAgICApOiBjdHggaXMgQ29tYm9ib3hJdGVtRGlyZWN0aXZlQ29udGV4dDxUPiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbiJdfQ==","import { InjectionToken } from '@angular/core';\nexport const COMBOBOX_COMPONENT = new InjectionToken('ComboboxInterface');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NvbWJvYm94L2NvbWJvYm94LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc3RCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGNBQWMsQ0FBVyxtQkFBbUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9iaWxlTW9kZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9tb2JpbGUtbW9kZSc7XG5cbmV4cG9ydCBjb25zdCBDT01CT0JPWF9DT01QT05FTlQgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nW10+KCdDb21ib2JveEludGVyZmFjZScpO1xuXG4vKipcbiAqIENvbWJvYm94IEludGVyZmFjZSB0byBoYXZlIHR5cGluZyBhbmQgYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuXG4gKiBDb21ib2JveENvbXBvbmVudCA8PT0+IENvbWJvYm94TW9iaWxlQ29tcG9uZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYm9ib3hJbnRlcmZhY2UgZXh0ZW5kcyBNb2JpbGVNb2RlIHtcbiAgICBpbnB1dFRleHQ6IHN0cmluZztcbiAgICBvcGVuQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj47XG4gICAgaW5TaGVsbGJhcjogYm9vbGVhbjtcblxuICAgIGdldFZhbHVlKCk6IGFueTtcbiAgICBkaWFsb2dBcHByb3ZlKCk6IHZvaWQ7XG4gICAgZGlhbG9nRGlzbWlzcyhiYWNrdXA6IHN0cmluZyk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYm9ib3hJdGVtRGlyZWN0aXZlQ29udGV4dDxUID0gdW5rbm93bj4ge1xuICAgICRpbXBsaWNpdDogVDtcbiAgICBpbnB1dFRleHQ6IHN0cmluZztcbn1cbiJdfQ==","import { ChangeDetectionStrategy, Component, Inject, isDevMode, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { observeOn } from 'rxjs/operators';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { InitialFocusDirective, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { BarElementDirective, BarMiddleDirective, ButtonBarComponent } from '@fundamental-ngx/core/bar';\nimport { DialogBodyComponent, DialogCloseButtonComponent, DialogComponent, DialogFooterComponent, DialogHeaderComponent } from '@fundamental-ngx/core/dialog';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { asyncScheduler } from 'rxjs';\nimport { COMBOBOX_COMPONENT } from '../combobox.interface';\nimport * as i0 from \"@angular/core\";\nexport class ComboboxMobileComponent extends MobileModeBase {\n /** @hidden */\n constructor(comboboxComponent) {\n super(comboboxComponent, MobileModeControl.COMBOBOX);\n /**\n * @hidden\n * For internal usage\n * Control element, which will be rendered inside dialog.\n * List element, which will be rendered inside dialog.\n */\n this.childContent = null;\n }\n /** @hidden */\n ngOnInit() {\n this._listenOnMultiInputOpenChange();\n }\n /** @hidden */\n handleDismiss() {\n this.dialogRef.dismiss();\n this._component.dialogDismiss(this._selectedBackup);\n }\n /** @hidden */\n handleApprove() {\n this.dialogRef.close();\n this._component.dialogApprove();\n }\n /** @hidden */\n _toggleDialog(open) {\n if (open) {\n this._selectedBackup = this._component.getValue();\n if (!this._dialogService.hasOpenDialogs()) {\n this._open();\n }\n }\n }\n /** @hidden */\n _listenOnMultiInputOpenChange() {\n this._component.openChange\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((isOpen) => this._toggleDialog(isOpen));\n }\n /** @hidden */\n _open() {\n this.dialogRef = this._dialogService.open(this.dialogTemplate, {\n mobile: true,\n ...this.dialogConfig,\n backdropClickCloseable: false,\n container: this._elementRef.nativeElement,\n disablePaddings: true\n });\n this._focusInputElementOnceOpened();\n const refSub = this.dialogRef.afterClosed.subscribe({\n error: (type) => {\n if (type === 'escape') {\n this._component.dialogDismiss(this._selectedBackup);\n refSub.unsubscribe();\n }\n }\n });\n }\n /** @hidden */\n _focusInputElementOnceOpened() {\n this.dialogRef.afterLoaded\n .pipe(observeOn(asyncScheduler), // making the listener async\n takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n try {\n const input = this._elementRef.nativeElement.querySelector('fd-input-group input[role=\"combobox\"]');\n input.focus();\n }\n catch (error) {\n if (isDevMode()) {\n console.error('Failed to focus combobox search input', error);\n }\n }\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxMobileComponent, deps: [{ token: COMBOBOX_COMPONENT }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: ComboboxMobileComponent, isStandalone: true, selector: \"fd-combobox-mobile\", viewQueries: [{ propertyName: \"dialogTemplate\", first: true, predicate: [\"dialogTemplate\"], descendants: true }], usesInheritance: true, ngImport: i0, template: \"<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\\\"dialogConfig\\\" #dialogTemplate>\\n <fd-dialog [dialogConfig]=\\\"dialogConfig\\\" [dialogRef]=\\\"dialog\\\">\\n <fd-dialog-header>\\n @if (mobileConfig.title) {\\n <h1 fd-title>{{ mobileConfig.title }}</h1>\\n }\\n @if (mobileConfig.hasCloseButton) {\\n <button title=\\\"Close\\\" fd-dialog-close-button [mobile]=\\\"true\\\" (click)=\\\"handleDismiss()\\\"></button>\\n }\\n <ng-template fdkTemplate=\\\"subheader\\\">\\n <div fd-bar-middle>\\n <fd-bar-element [fullWidth]=\\\"true\\\">\\n <ng-template [ngTemplateOutlet]=\\\"childContent?.controlTemplate || null\\\"></ng-template>\\n </fd-bar-element>\\n </div>\\n </ng-template>\\n </fd-dialog-header>\\n <fd-dialog-body>\\n <ng-template [ngTemplateOutlet]=\\\"childContent?.listTemplate || null\\\"></ng-template>\\n </fd-dialog-body>\\n <fd-dialog-footer>\\n @if (mobileConfig.approveButtonText) {\\n <fd-button-bar fdType=\\\"emphasized\\\" [label]=\\\"mobileConfig.approveButtonText!\\\" (click)=\\\"handleApprove()\\\">\\n </fd-button-bar>\\n }\\n @if (mobileConfig.cancelButtonText) {\\n <fd-button-bar fdkInitialFocus [label]=\\\"mobileConfig.cancelButtonText!\\\" (click)=\\\"handleDismiss()\\\">\\n </fd-button-bar>\\n }\\n </fd-dialog-footer>\\n </fd-dialog>\\n</ng-template>\\n\", dependencies: [{ kind: \"directive\", type: TemplateDirective, selector: \"[fdkTemplate]\", inputs: [\"fdkTemplate\"] }, { kind: \"directive\", type: BarMiddleDirective, selector: \"[fd-bar-middle]\" }, { kind: \"directive\", type: BarElementDirective, selector: \"fd-bar-element\", inputs: [\"fullWidth\"] }, { kind: \"component\", type: ButtonBarComponent, selector: \"fd-button-bar\", inputs: [\"fullWidth\", \"fdType\", \"title\", \"ariaLabelledby\", \"id\"] }, { kind: \"component\", type: DialogHeaderComponent, selector: \"fd-dialog-header\" }, { kind: \"component\", type: DialogCloseButtonComponent, selector: \"[fd-dialog-close-button]\", inputs: [\"mobile\", \"title\", \"ariaLabel\"] }, { kind: \"component\", type: DialogComponent, selector: \"fd-dialog\", inputs: [\"class\", \"dialogRef\", \"dialogConfig\"] }, { kind: \"component\", type: DialogBodyComponent, selector: \"fd-dialog-body\", inputs: [\"disablePaddings\"] }, { kind: \"component\", type: DialogFooterComponent, selector: \"fd-dialog-footer\" }, { kind: \"component\", type: TitleComponent, selector: \"[fd-title], [fdTitle]\", inputs: [\"headerSize\", \"wrap\"], exportAs: [\"fd-title\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: InitialFocusDirective, selector: \"[fdkInitialFocus]\", inputs: [\"fdkInitialFocus\", \"enabled\", \"focusLastElement\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxMobileComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-combobox-mobile', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n TemplateDirective,\n BarMiddleDirective,\n BarElementDirective,\n ButtonBarComponent,\n DialogHeaderComponent,\n DialogCloseButtonComponent,\n DialogComponent,\n DialogBodyComponent,\n DialogFooterComponent,\n TitleComponent,\n TitleComponent,\n TemplateDirective,\n NgTemplateOutlet,\n InitialFocusDirective\n ], template: \"<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\\\"dialogConfig\\\" #dialogTemplate>\\n <fd-dialog [dialogConfig]=\\\"dialogConfig\\\" [dialogRef]=\\\"dialog\\\">\\n <fd-dialog-header>\\n @if (mobileConfig.title) {\\n <h1 fd-title>{{ mobileConfig.title }}</h1>\\n }\\n @if (mobileConfig.hasCloseButton) {\\n <button title=\\\"Close\\\" fd-dialog-close-button [mobile]=\\\"true\\\" (click)=\\\"handleDismiss()\\\"></button>\\n }\\n <ng-template fdkTemplate=\\\"subheader\\\">\\n <div fd-bar-middle>\\n <fd-bar-element [fullWidth]=\\\"true\\\">\\n <ng-template [ngTemplateOutlet]=\\\"childContent?.controlTemplate || null\\\"></ng-template>\\n </fd-bar-element>\\n </div>\\n </ng-template>\\n </fd-dialog-header>\\n <fd-dialog-body>\\n <ng-template [ngTemplateOutlet]=\\\"childContent?.listTemplate || null\\\"></ng-template>\\n </fd-dialog-body>\\n <fd-dialog-footer>\\n @if (mobileConfig.approveButtonText) {\\n <fd-button-bar fdType=\\\"emphasized\\\" [label]=\\\"mobileConfig.approveButtonText!\\\" (click)=\\\"handleApprove()\\\">\\n </fd-button-bar>\\n }\\n @if (mobileConfig.cancelButtonText) {\\n <fd-button-bar fdkInitialFocus [label]=\\\"mobileConfig.cancelButtonText!\\\" (click)=\\\"handleDismiss()\\\">\\n </fd-button-bar>\\n }\\n </fd-dialog-footer>\\n </fd-dialog>\\n</ng-template>\\n\" }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Inject,\n args: [COMBOBOX_COMPONENT]\n }] }], propDecorators: { dialogTemplate: [{\n type: ViewChild,\n args: ['dialogTemplate']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3gtbW9iaWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jb21ib2JveC9jb21ib2JveC1tb2JpbGUvY29tYm9ib3gtbW9iaWxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jb21ib2JveC9jb21ib2JveC1tb2JpbGUvY29tYm9ib3gtbW9iaWxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULE1BQU0sRUFDTixTQUFTLEVBRVQsV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUV0RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV4RyxPQUFPLEVBQ0gsbUJBQW1CLEVBQ25CLDBCQUEwQixFQUMxQixlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUN4QixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxrQkFBa0IsRUFBcUIs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QUFFLENBQUM7Z0JBQ2IsSUFBSSxTQUFTLEVBQUUsRUFBRSxDQUFDO29CQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2xFLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDOzhHQTdGUSx1QkFBdUIsa0JBZ0JaLGtCQUFrQjtrR0FoQjdCLHVCQUF1Qix1TkNwRHBDLGtpREFnQ0EsNENESVEsaUJBQWlCLG1GQUNqQixrQkFBa0IsNERBQ2xCLG1CQUFtQixrRkFDbkIsa0JBQWtCLDRIQUNsQixxQkFBcUIsNkRBQ3JCLDBCQUEwQiwrR0FDMUIsZUFBZSxzR0FDZixtQkFBbUIsd0ZBQ25CLHFCQUFxQiw2REFDckIsY0FBYywwSEFHZCxnQkFBZ0Isb0pBQ2hCLHFCQUFxQjs7MkZBR2hCLHVCQUF1QjtrQkF0Qm5DLFNBQVM7K0JBQ0ksb0JBQW9CLG1CQUViLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksV0FDNUI7d0JBQ0wsaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixxQkFBcUI7d0JBQ3JCLDBCQUEwQjt3QkFDMUIsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLHFCQUFxQjt3QkFDckIsY0FBYzt3QkFDZCxjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3dCQUNoQixxQkFBcUI7cUJBQ3hCOzswQkFrQlksTUFBTTsyQkFBQyxrQkFBa0I7eUNBZFQsY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBJbmplY3QsXG4gICAgaXNEZXZNb2RlLFxuICAgIE9uSW5pdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvYnNlcnZlT24gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE1vYmlsZU1vZGVCYXNlLCBNb2JpbGVNb2RlQ29udHJvbCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9tb2JpbGUtbW9kZSc7XG5cbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgSW5pdGlhbEZvY3VzRGlyZWN0aXZlLCBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IEJhckVsZW1lbnREaXJlY3RpdmUsIEJhck1pZGRsZURpcmVjdGl2ZSwgQnV0dG9uQmFyQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Jhcic7XG5cbmltcG9ydCB7XG4gICAgRGlhbG9nQm9keUNvbXBvbmVudCxcbiAgICBEaWFsb2dDbG9zZUJ1dHRvbkNvbXBvbmVudCxcbiAgICBEaWFsb2dDb21wb25lbnQsXG4gICAgRGlhbG9nRm9vdGVyQ29tcG9uZW50LFxuICAgIERpYWxvZ0hlYWRlckNvbXBvbmVudFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3RpdGxlJztcbmltcG9ydCB7IGFzeW5jU2NoZWR1bGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDT01CT0JPWF9DT01QT05FTlQsIENvbWJvYm94SW50ZXJmYWNlIH0gZnJvbSAnLi4vY29tYm9ib3guaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1jb21ib2JveC1tb2JpbGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb21ib2JveC1tb2JpbGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgQmFyTWlkZGxlRGlyZWN0aXZlLFxuICAgICAgICBCYXJFbGVtZW50RGlyZWN0aXZlLFxuICAgICAgICBCdXR0b25CYXJDb21wb25lbnQsXG4gICAgICAgIERpYWxvZ0hlYWRlckNvbXBvbmVudCxcbiAgICAgICAgRGlhbG9nQ2xvc2VCdXR0b25Db21wb25lbnQsXG4gICAgICAgIERpYWxvZ0NvbXBvbmVudCxcbiAgICAgICAgRGlhbG9nQm9keUNvbXBvbmVudCxcbiAgICAgICAgRGlhbG9nRm9vdGVyQ29tcG9uZW50LFxuICAgICAgICBUaXRsZUNvbXBvbmVudCxcbiAgICAgICAgVGl0bGVDb21wb25lbnQsXG4gICAgICAgIFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBJbml0aWFsRm9jdXNEaXJlY3RpdmVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIENvbWJvYm94TW9iaWxlQ29tcG9uZW50IGV4dGVuZHMgTW9iaWxlTW9kZUJhc2U8Q29tYm9ib3hJbnRlcmZhY2U+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2RpYWxvZ1RlbXBsYXRlJykgZGlhbG9nVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRm9yIGludGVybmFsIHVzYWdlXG4gICAgICogQ29udHJvbCBlbGVtZW50LCB3aGljaCB3aWxsIGJlIHJlbmRlcmVkIGluc2lkZSBkaWFsb2cuXG4gICAgICogTGlzdCBlbGVtZW50LCB3aGljaCB3aWxsIGJlIHJlbmRlcmVkIGluc2lkZSBkaWFsb2cuXG4gICAgICovXG4gICAgY2hpbGRDb250ZW50OiB7IGxpc3RUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjsgY29udHJvbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IH0gfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRCYWNrdXA6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoQEluamVjdChDT01CT0JPWF9DT01QT05FTlQpIGNvbWJvYm94Q29tcG9uZW50OiBDb21ib2JveEludGVyZmFjZSkge1xuICAgICAgICBzdXBlcihjb21ib2JveENvbXBvbmVudCwgTW9iaWxlTW9kZUNvbnRyb2wuQ09NQk9CT1gpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xpc3Rlbk9uTXVsdGlJbnB1dE9wZW5DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZURpc21pc3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmRpc21pc3MoKTtcbiAgICAgICAgdGhpcy5fY29tcG9uZW50LmRpYWxvZ0Rpc21pc3ModGhpcy5fc2VsZWN0ZWRCYWNrdXApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlQXBwcm92ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5fY29tcG9uZW50LmRpYWxvZ0FwcHJvdmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RvZ2dsZURpYWxvZyhvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEJhY2t1cCA9IHRoaXMuX2NvbXBvbmVudC5nZXRWYWx1ZSgpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9kaWFsb2dTZXJ2aWNlLmhhc09wZW5EaWFsb2dzKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3Rlbk9uTXVsdGlJbnB1dE9wZW5DaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudC5vcGVuQ2hhbmdlXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChpc09wZW4pID0+IHRoaXMuX3RvZ2dsZURpYWxvZyhpc09wZW4pKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX29wZW4oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKHRoaXMuZGlhbG9nVGVtcGxhdGUsIHtcbiAgICAgICAgICAgIG1vYmlsZTogdHJ1ZSxcbiAgICAgICAgICAgIC4uLnRoaXMuZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgYmFja2Ryb3BDbGlja0Nsb3NlYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBjb250YWluZXI6IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIGRpc2FibGVQYWRkaW5nczogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9mb2N1c0lucHV0RWxlbWVudE9uY2VPcGVuZWQoKTtcblxuICAgICAgICBjb25zdCByZWZTdWIgPSB0aGlzLmRpYWxvZ1JlZi5hZnRlckNsb3NlZC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgZXJyb3I6ICh0eXBlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdlc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudC5kaWFsb2dEaXNtaXNzKHRoaXMuX3NlbGVjdGVkQmFja3VwKTtcbiAgICAgICAgICAgICAgICAgICAgcmVmU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZvY3VzSW5wdXRFbGVtZW50T25jZU9wZW5lZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuYWZ0ZXJMb2FkZWRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG9ic2VydmVPbihhc3luY1NjaGVkdWxlciksIC8vIG1ha2luZyB0aGUgbGlzdGVuZXIgYXN5bmNcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2ZkLWlucHV0LWdyb3VwIGlucHV0W3JvbGU9XCJjb21ib2JveFwiXScpO1xuICAgICAgICAgICAgICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZvY3VzIGNvbWJvYm94IHNlYXJjaCBpbnB1dCcsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBbZmREaWFsb2dUZW1wbGF0ZV0gbGV0LWRpYWxvZyBsZXQtZGlhbG9nQ29uZmlnPVwiZGlhbG9nQ29uZmlnXCIgI2RpYWxvZ1RlbXBsYXRlPlxuICAgIDxmZC1kaWFsb2cgW2RpYWxvZ0NvbmZpZ109XCJkaWFsb2dDb25maWdcIiBbZGlhbG9nUmVmXT1cImRpYWxvZ1wiPlxuICAgICAgICA8ZmQtZGlhbG9nLWhlYWRlcj5cbiAgICAgICAgICAgIEBpZiAobW9iaWxlQ29uZmlnLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgPGgxIGZkLXRpdGxlPnt7IG1vYmlsZUNvbmZpZy50aXRsZSB9fTwvaDE+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKG1vYmlsZUNvbmZpZy5oYXNDbG9zZUJ1dHRvbikge1xuICAgICAgICAgICAgICAgIDxidXR0b24gdGl0bGU9XCJDbG9zZVwiIGZkLWRpYWxvZy1jbG9zZS1idXR0b24gW21vYmlsZV09XCJ0cnVlXCIgKGNsaWNrKT1cImhhbmRsZURpc21pc3MoKVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZka1RlbXBsYXRlPVwic3ViaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBmZC1iYXItbWlkZGxlPlxuICAgICAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQgW2Z1bGxXaWR0aF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2hpbGRDb250ZW50Py5jb250cm9sVGVtcGxhdGUgfHwgbnVsbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2ZkLWRpYWxvZy1oZWFkZXI+XG4gICAgICAgIDxmZC1kaWFsb2ctYm9keT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGlsZENvbnRlbnQ/Lmxpc3RUZW1wbGF0ZSB8fCBudWxsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZC1kaWFsb2ctYm9keT5cbiAgICAgICAgPGZkLWRpYWxvZy1mb290ZXI+XG4gICAgICAgICAgICBAaWYgKG1vYmlsZUNvbmZpZy5hcHByb3ZlQnV0dG9uVGV4dCkge1xuICAgICAgICAgICAgICAgIDxmZC1idXR0b24tYmFyIGZkVHlwZT1cImVtcGhhc2l6ZWRcIiBbbGFiZWxdPVwibW9iaWxlQ29uZmlnLmFwcHJvdmVCdXR0b25UZXh0IVwiIChjbGljayk9XCJoYW5kbGVBcHByb3ZlKClcIj5cbiAgICAgICAgICAgICAgICA8L2ZkLWJ1dHRvbi1iYXI+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKG1vYmlsZUNvbmZpZy5jYW5jZWxCdXR0b25UZXh0KSB7XG4gICAgICAgICAgICAgICAgPGZkLWJ1dHRvbi1iYXIgZmRrSW5pdGlhbEZvY3VzIFtsYWJlbF09XCJtb2JpbGVDb25maWcuY2FuY2VsQnV0dG9uVGV4dCFcIiAoY2xpY2spPVwiaGFuZGxlRGlzbWlzcygpXCI+XG4gICAgICAgICAgICAgICAgPC9mZC1idXR0b24tYmFyPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2ZkLWRpYWxvZy1mb290ZXI+XG4gICAgPC9mZC1kaWFsb2c+XG48L25nLXRlbXBsYXRlPlxuIl19","import { Pipe } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class ListGroupPipe {\n /** Group items */\n transform(items, group) {\n return Object.entries(group(items)).map(([key, value]) => ({ key, value }));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ListGroupPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.4\", ngImport: i0, type: ListGroupPipe, isStandalone: true, name: \"listGroupPipe\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ListGroupPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'listGroupPipe',\n standalone: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1ncm91cC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NvbWJvYm94L2xpc3QtZ3JvdXAucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFRcEQsTUFBTSxPQUFPLGFBQWE7SUFDdEIsa0JBQWtCO0lBQ2xCLFNBQVMsQ0FBQyxLQUFZLEVBQUUsS0FBdUI7UUFDM0MsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRixDQUFDOzhHQUpRLGFBQWE7NEdBQWIsYUFBYTs7MkZBQWIsYUFBYTtrQkFKekIsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsZUFBZTtvQkFDckIsVUFBVSxFQUFFLElBQUk7aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgS2V5VmFsdWUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBHcm91cEZ1bmN0aW9uPFQgPSBhbnk+ID0gKGl0ZW1zOiBUW10pID0+IHsgW2tleTogc3RyaW5nXTogVFtdIH07XG5cbkBQaXBlKHtcbiAgICBuYW1lOiAnbGlzdEdyb3VwUGlwZScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBMaXN0R3JvdXBQaXBlPFQgPSBhbnk+IGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgLyoqIEdyb3VwIGl0ZW1zICovXG4gICAgdHJhbnNmb3JtKGl0ZW1zOiBhbnlbXSwgZ3JvdXA6IEdyb3VwRnVuY3Rpb248VD4pOiBLZXlWYWx1ZTxzdHJpbmcsIFRbXT5bXSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhncm91cChpdGVtcykpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoeyBrZXksIHZhbHVlIH0pKTtcbiAgICB9XG59XG4iXX0=","import { InjectionToken } from '@angular/core';\nexport const FD_COMBOBOX_COMPONENT = new InjectionToken('FdComboboxComponent');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NvbWJvYm94L3Rva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9DLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFvQixxQkFBcUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbWJvYm94SW50ZXJmYWNlIH0gZnJvbSAnLi9jb21ib2JveC5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY29uc3QgRkRfQ09NQk9CT1hfQ09NUE9ORU5UID0gbmV3IEluamVjdGlvblRva2VuPENvbWJvYm94SW50ZXJmYWNlPignRmRDb21ib2JveENvbXBvbmVudCcpO1xuIl19","import { BACKSPACE, CONTROL, DOWN_ARROW, ENTER, ESCAPE, LEFT_ARROW, RIGHT_ARROW, SHIFT, SPACE, TAB, UP_ARROW } from '@angular/cdk/keycodes';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, EventEmitter, Injector, Input, Output, QueryList, TemplateRef, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation, forwardRef } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { DynamicComponentService, FocusTrapService, KeyUtil, TruncatedTitleDirective } from '@fundamental-ngx/cdk/utils';\nimport { registerFormItemControl } from '@fundamental-ngx/core/form';\nimport { MenuKeyboardService } from '@fundamental-ngx/core/menu';\nimport { PopoverComponent } from '@fundamental-ngx/core/popover';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { AutoCompleteDirective, DisplayFnPipe, SearchHighlightPipe } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { ContentDensityModule, ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FD_DEFAULT_ICON_FONT_FAMILY, IconComponent } from '@fundamental-ngx/core/icon';\nimport { InputGroupComponent, InputGroupInputDirective } from '@fundamental-ngx/core/input-group';\nimport { FD_LIST_MESSAGE_DIRECTIVE, ListComponent, ListGroupHeaderDirective, ListItemComponent, ListTitleDirective } from '@fundamental-ngx/core/list';\nimport { PopoverBodyComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { ComboboxItemDirective } from './combobox-item.directive';\nimport { ComboboxMobileComponent } from './combobox-mobile/combobox-mobile.component';\nimport { COMBOBOX_COMPONENT } from './combobox.interface';\nimport { ListGroupPipe } from './list-group.pipe';\nimport { FD_COMBOBOX_COMPONENT } from './tokens';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/cdk/overlay\";\nimport * as i2 from \"@fundamental-ngx/cdk/utils\";\nimport * as i3 from \"@fundamental-ngx/core/content-density\";\nimport * as i4 from \"@angular/forms\";\nlet comboboxUniqueId = 0;\n/**\n * Allows users to filter through results and select a value.\n *\n * Supports Angular Forms.\n * ```html\n * <fd-combobox\n * [(ngModel)]=\"searchTerm\"\n * [dropdownValues]=\"dropdownValues\"\n * placeholder=\"Type some text...\">\n * </fd-combobox>\n * ```\n */\nexport class ComboboxComponent {\n /** @hidden */\n get _customRenderer() {\n return this._comboboxItemRenderer?.templateRef || this.itemTemplate;\n }\n /** @hidden */\n constructor(_overlay, _cdRef, _injector, _viewContainerRef, _dynamicComponentService, _focusTrapService, _contentDensityObserver) {\n this._overlay = _overlay;\n this._cdRef = _cdRef;\n this._injector = _injector;\n this._viewContainerRef = _viewContainerRef;\n this._dynamicComponentService = _dynamicComponentService;\n this._focusTrapService = _focusTrapService;\n this._contentDensityObserver = _contentDensityObserver;\n /** Id for the Combobox. */\n this.comboboxId = `fd-combobox-${comboboxUniqueId++}`;\n /** Id attribute for input element inside Combobox component */\n this.inputId = '';\n /** If it is mandatory field */\n this.required = false;\n /** Values to be filtered in the search input. */\n this.dropdownValues = [];\n /** Filter function. Accepts an array of objects and a search term as arguments\n * and returns a string. See search input examples for details. */\n this.filterFn = this._defaultFilter;\n /**\n * Whether the Combobox is a Search Field\n */\n this.isSearch = false;\n /** Icon to display in the right-side button. */\n this.glyph = 'navigation-down-arrow';\n /** Glyph font family */\n this.glyphFont = FD_DEFAULT_ICON_FONT_FAMILY;\n /**\n * Whether to show the clear search term button\n */\n this.showClearButton = false;\n /**\n * The trigger events that will open/close the options popover.\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp).\n */\n this.triggers = [];\n /** Whether the combobox should close, when a click is performed outside its boundaries. True by default */\n this.closeOnOutsideClick = true;\n /**\n * Whether the combobox should open, when any key is pressed in input (except Escape, Space, Enter). True by default\n */\n this.openOnKeyboardEvent = true;\n /** Max height of the popover. Any overflowing elements will be accessible through scrolling. */\n this.maxHeight = '50vh';\n /** Max width of the dropdown in pixels. Default is 640px (40rem). */\n this.dropDownMaxWidthPx = 640;\n /**\n * Whether the dropdown should have max width.\n * Set to true if you want the dropdown to take the width of the control.\n * Default is false */\n this.noDropDownMaxWidth = false;\n /** Whether the matching string should be highlighted during filtration. */\n this.highlighting = true;\n /** Whether the popover should close when a user selects a result. */\n this.closeOnSelect = true;\n /** Whether the input field should be populated with the result picked by the user. */\n this.fillOnSelect = true;\n /** Whether the autocomplete should be enabled; Enabled by default */\n this.autoComplete = true;\n /**\n * Preset options for the Select body width, whatever is chosen, the body has a 600px limit.\n * * `at-least` will apply a minimum width to the body equivalent to the width of the control. - Default\n * * `equal` will apply a width to the body equivalent to the width of the control.\n * * 'fit-content' will apply width needed to properly display items inside, independent of control.\n */\n this.fillControlMode = 'at-least';\n /** Defines if combobox should behave same as dropdown. When it's enabled writing inside text input won't\n * trigger onChange function, until it matches one of displayed dropdown values. Also communicating with combobox\n * can be achieved only by objects with same type as dropdownValue */\n this.communicateByObject = false;\n /** Display function. Accepts an object of the same type as the\n * items passed to dropdownValues as argument, and outputs a string.\n * An arrow function can be used to access the *this* keyword in the calling component.\n * See search input examples for details. */\n this.displayFn = this._defaultDisplay;\n /**\n * Whether AddOn Button should be focusable\n * @default false\n */\n this.buttonFocusable = false;\n /**\n * Whether clear button should be focusable.\n * @default true\n */\n this.clearButtonFocusable = true;\n /** Whether the combobox is readonly. */\n this.readOnly = false;\n /** Whether the combobox should be built on mobile mode */\n this.mobile = false;\n /** Whether to display the addon button. */\n this.showDropdownButton = true;\n /**\n * Whether to return results where the input matches the entire string. By default, only results that start\n * with the input search term will be returned.\n */\n this.includes = false;\n /** Whether list item options should be rendered as byline. */\n this.byline = false;\n /**\n * Action to perform when user shifts focus from the dropdown.\n * - `close` will close the dropdown preserving previously selected value.\n * - `closeAndSelect` will close the dropdown and select last focused dropdown item.\n */\n this.tabOutStrategy = 'closeAndSelect';\n /** Event emitted when an item is clicked. Use *$event* to retrieve it. */\n this.itemClicked = new EventEmitter();\n /** Event emitted, when the combobox's popover body is opened or closed */\n this.openChange = new EventEmitter();\n /** Event emitted when the input text changes. */\n this.inputTextChange = new EventEmitter();\n /** Whether the matching string should be highlighted after combobox value is selected. */\n this.filterHighlight = true;\n /** Keys, that won't trigger the popover's open state, when dispatched on search input */\n this.nonOpeningKeys = [\n ESCAPE,\n ENTER,\n LEFT_ARROW,\n RIGHT_ARROW,\n DOWN_ARROW,\n UP_ARROW,\n CONTROL,\n TAB,\n SHIFT\n ];\n /** @hidden */\n this._defaultFontFamily = FD_DEFAULT_ICON_FONT_FAMILY;\n /** Whether the combobox is opened. */\n this.open = false;\n /**\n * Whether or not the input coup is in the shellbar. Only for internal use by combobox component\n * @hidden\n */\n this.inShellbar = false;\n /** @hidden */\n this.displayedValues = [];\n /** @hidden */\n this.inputTextValue = '';\n /** @hidden */\n this.clearInputBtnFocused = false;\n /** @hidden */\n this._subscriptions = new Subscription();\n /** @hidden */\n this.onChange = () => { };\n /** @hidden */\n this.onTouched = () => { };\n this._repositionScrollStrategy = this._overlay.scrollStrategies.reposition({ autoClose: true });\n }\n /** @hidden */\n ngOnInit() {\n if (this.readOnly) {\n this.showDropdownButton = false;\n }\n this._refreshDisplayedValues();\n }\n /** @hidden */\n ngOnChanges(changes) {\n if (this.dropdownValues && (changes.dropdownValues || changes.searchTerm)) {\n this._refreshDisplayedValues();\n }\n }\n /** @hidden */\n ngOnDestroy() {\n this._subscriptions.unsubscribe();\n }\n /** @hidden */\n ngAfterViewInit() {\n this._addShellbarClass();\n if (this.mobile) {\n this._setUpMobileMode();\n }\n }\n /** @hidden */\n onInputKeydownHandler(event) {\n if (this.readOnly) {\n return;\n }\n if (typeof event === 'string') {\n if (event === 'fromPaste') {\n this.isOpenChangeHandle(true);\n }\n }\n else {\n if (KeyUtil.isKeyCode(event, TAB) && this.open) {\n this._close();\n return;\n }\n if (KeyUtil.isKeyCode(event, ENTER)) {\n if (this.searchFn) {\n this.searchFn();\n }\n }\n else if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n if (event.altKey) {\n this._resetDisplayedValues();\n this.isOpenChangeHandle(true);\n }\n if (this.open && this.listComponent) {\n this.listComponent.setItemActive(0);\n }\n else if (!this.open) {\n this._chooseOtherItem(1);\n }\n event.preventDefault();\n }\n else if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n this._chooseOtherItem(-1);\n event.preventDefault();\n }\n else if (this.openOnKeyboardEvent &&\n !event.ctrlKey &&\n !event.altKey &&\n !KeyUtil.isKeyCode(event, this.nonOpeningKeys)) {\n this.isOpenChangeHandle(true);\n if (this.isEmptyValue && KeyUtil.isKeyType(event, 'control') && !KeyUtil.isKeyCode(event, BACKSPACE)) {\n this.listComponent.setItemActive(0);\n }\n }\n }\n }\n /** @hidden */\n onItemKeyDownHandler(event, value) {\n if (KeyUtil.isKeyCode(event, ENTER) || KeyUtil.isKeyCode(event, SPACE)) {\n event.preventDefault();\n this.onMenuClickHandler(value);\n }\n }\n /** @hidden */\n onMenuClickHandler(value) {\n if (value || value === 0) {\n const index = this.dropdownValues.findIndex((_value) => _value === value);\n this._handleClickActions(value);\n this.filterHighlight = false;\n this.itemClicked.emit({ item: value, index });\n }\n }\n /** Handle dialog dismissing, closes popover and sets backup data. */\n dialogDismiss(term) {\n this.inputText = this.displayFn(term);\n this.setValue(term);\n this.isOpenChangeHandle(false);\n }\n /** Handle dialog approval, closes popover and propagates data changes. */\n dialogApprove() {\n this._propagateChange();\n this.isOpenChangeHandle(false);\n }\n /** If true value empty */\n get isEmptyValue() {\n return !this.inputText || this.inputText?.trim().length === 0;\n }\n /** Input text of the input. */\n set inputText(value) {\n this.inputTextValue = value;\n if (!this.communicateByObject) {\n this._value = value;\n }\n this.inputTextChange.emit(value);\n if (!this.mobile) {\n this._propagateChange();\n }\n }\n get inputText() {\n return this.inputTextValue;\n }\n /** Get the glyph value based on whether the combobox is used as a search field or not. */\n get glyphValue() {\n return this.isSearch ? 'search' : this.glyph;\n }\n /** @hidden */\n _handleClearSearchTerm() {\n this.inputTextValue = '';\n this.inputTextChange.emit('');\n this.displayedValues = this.dropdownValues || [];\n this.searchInputElement.nativeElement.focus();\n if (!this.mobile) {\n this._propagateChange();\n }\n this._cdRef.detectChanges();\n }\n /** @hidden */\n writeValue(value) {\n this.inputTextValue = this.displayFn(value);\n this.setValue(value);\n this._cdRef.markForCheck();\n }\n /** @hidden */\n registerOnChange(fn) {\n this.onChange = fn;\n }\n /** @hidden */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /** Method passed to list component */\n handleListFocusEscape(direction) {\n if (direction === 'up') {\n this.searchInputElement.nativeElement.focus();\n }\n }\n /** @hidden */\n handleSearchTermChange() {\n this.displayedValues = this.filterFn(this.dropdownValues, this.inputText);\n this.popoverComponent?.refreshPosition();\n }\n /** @hidden */\n onPrimaryButtonClick() {\n // Prevent primary button click behaviour on mobiles\n if (this.mobile) {\n return;\n }\n if (this.searchFn) {\n this.searchFn();\n }\n this._resetDisplayedValues();\n this.isOpenChangeHandle(!this.open);\n this.searchInputElement.nativeElement.focus();\n this.filterHighlight = false;\n if (this.open) {\n this.searchInputElement?.nativeElement.focus();\n }\n }\n /** @hidden */\n isOpenChangeHandle(isOpen) {\n /** Reset displayed values on every mobile open */\n if (this.mobile && !this.open) {\n this._resetDisplayedValues();\n }\n if (this.open !== isOpen) {\n this.open = isOpen;\n this.openChange.emit(isOpen);\n /** Allow combobox up and down arrows to work properly when combobox is inside a dialog with a trapped focus */\n if (this.open) {\n this._focusTrapService.pauseCurrentFocusTrap();\n }\n else {\n this._focusTrapService.unpauseCurrentFocusTrap();\n }\n }\n if (!this.open && !this.mobile) {\n this.handleBlur();\n this.searchInputElement.nativeElement.focus({ preventScroll: true });\n }\n this._cdRef.detectChanges();\n }\n /** @hidden */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this._cdRef.detectChanges();\n }\n /** Method that handles complete event from auto complete directive, setting the new value, and closing popover */\n handleAutoComplete(event) {\n if (this.inputText !== event.term) {\n this.inputText = event.term;\n this.handleSearchTermChange();\n }\n if (event.forceClose && this.inputText) {\n this.isOpenChangeHandle(false);\n }\n }\n /** @hidden */\n handleBlur() {\n if (!this.open) {\n this.onTouched();\n this.handleAutoComplete({\n term: this.searchInputElement.nativeElement.value,\n forceClose: false\n });\n }\n }\n /** @hidden */\n clearInputBtnFocus() {\n this.clearInputBtnFocused = true;\n }\n /** @hidden */\n clearInputBtnBlur() {\n this.clearInputBtnFocused = false;\n }\n /** Current select value */\n getValue() {\n return this._value;\n }\n /** @hidden */\n _close() {\n this.inputText = this._value ? this.inputText : '';\n if (this.tabOutStrategy === 'closeAndSelect') {\n const focusedItem = this.listComponent.getActiveItem();\n if (focusedItem && !this.inputText) {\n this._handleClickActions(focusedItem.value);\n return;\n }\n }\n this.isOpenChangeHandle(false);\n this.searchInputElement.nativeElement.focus();\n }\n /** @hidden */\n isSelected(term) {\n const termValue = this.communicateByObject ? term : this.displayFn(term);\n return this.getValue() === termValue;\n }\n /** @hidden */\n _getGroupItemIds(groupIndex) {\n if (!this.items?.length) {\n return '';\n }\n const groupItemIds = this.items\n .filter((el) => {\n const idWithGroup = el.nativeElement.getAttribute('id-with-group-index');\n const groupIdx = idWithGroup.split('-')[idWithGroup.split('-').length - 1];\n return groupIdx === String(groupIndex);\n })\n .map((el) => el.nativeElement.getAttribute('id'));\n return groupItemIds?.join(' ');\n }\n /** Method that picks other value moved from current one by offset, called only when combobox is closed */\n _chooseOtherItem(offset) {\n const activeValue = this._getOptionObjectByDisplayedValue(this.inputTextValue)[0];\n const index = this.dropdownValues.findIndex((value) => value === activeValue);\n if (this.dropdownValues[index + offset]) {\n this.onMenuClickHandler(this.dropdownValues[index + offset]);\n }\n }\n /** Method that reset filtering for displayed values. It overrides displayed values by all possible dropdown values */\n _resetDisplayedValues() {\n this.displayedValues = this.dropdownValues || [];\n }\n /** @hidden */\n _addShellbarClass() {\n if (this.inShellbar) {\n this.searchInputElement.nativeElement.classList.add('fd-shellbar__input-group-input');\n if (this.inputGroup) {\n this.inputGroup.setInShellbar(true);\n }\n }\n }\n /** @hidden */\n _defaultDisplay(str) {\n return `${str}`;\n }\n /** @hidden */\n _defaultFilter(contentArray, searchTerm) {\n this.filterHighlight = true;\n if (typeof searchTerm === 'string') {\n const searchLower = searchTerm.toLocaleLowerCase();\n return contentArray.filter((item) => {\n if (item) {\n const term = this.displayFn(item).toLocaleLowerCase();\n return this.includes ? term.includes(searchLower) : term.startsWith(searchLower);\n }\n });\n }\n else if (typeof searchTerm === 'object') {\n return contentArray.filter((item) => item === searchTerm);\n }\n return contentArray || [];\n }\n /** @hidden */\n _handleClickActions(term) {\n if (this.closeOnSelect) {\n this.isOpenChangeHandle(false);\n }\n if (this.fillOnSelect) {\n this.setValue(term);\n this.inputText = this.displayFn(term);\n this.searchInputElement.nativeElement.value = this.inputText;\n this._cdRef.detectChanges();\n if (this.mobile) {\n this._propagateChange();\n }\n }\n this.handleSearchTermChange();\n }\n /** @hidden */\n _getOptionObjectByDisplayedValue(displayValue) {\n return this.dropdownValues.filter((value) => this.displayFn(value) === displayValue);\n }\n /** @hidden */\n _refreshDisplayedValues() {\n if (this.inputText) {\n this.displayedValues = this.filterFn(this.dropdownValues, this.inputText);\n }\n else {\n this.displayedValues = this.dropdownValues || [];\n }\n }\n /** @hidden */\n _propagateChange() {\n if (this.communicateByObject) {\n const values = this._getOptionObjectByDisplayedValue(this.inputText);\n // Do not set new value if theres multiple items that have same label.\n if (values.length === 1 && this.displayFn(values[0]) !== this.displayFn(this.getValue())) {\n this.setValue(values[0]);\n }\n else if (values.length === 0) {\n this.setValue(this.inputText);\n }\n const thisValue = this.getValue();\n if (typeof thisValue === 'object') {\n this.onChange(thisValue);\n }\n }\n else {\n this.onChange(this.inputText);\n }\n }\n /** @hidden */\n setValue(value) {\n if (this.communicateByObject) {\n this._value = value;\n }\n else {\n this._value = this.displayFn(value);\n }\n }\n /** @hidden */\n _setUpMobileMode() {\n const injector = Injector.create({\n providers: [{ provide: COMBOBOX_COMPONENT, useValue: this }],\n parent: this._injector\n });\n this._dynamicComponentService.createDynamicComponent({ listTemplate: this.listTemplate, controlTemplate: this.controlTemplate }, ComboboxMobileComponent, {\n containerRef: this._viewContainerRef\n }, {\n injector\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxComponent, deps: [{ token: i1.Overlay }, { token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i0.ViewContainerRef }, { token: i2.DynamicComponentService }, { token: i2.FocusTrapService }, { token: i3.ContentDensityObserver }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: ComboboxComponent, isStandalone: true, selector: \"fd-combobox\", inputs: { comboboxId: \"comboboxId\", inputId: \"inputId\", ariaLabel: \"ariaLabel\", ariaLabelledBy: \"ariaLabelledBy\", required: \"required\", dropdownValues: \"dropdownValues\", filterFn: \"filterFn\", disabled: \"disabled\", placeholder: \"placeholder\", isSearch: \"isSearch\", glyph: \"glyph\", glyphFont: \"glyphFont\", showClearButton: \"showClearButton\", triggers: \"triggers\", closeOnOutsideClick: \"closeOnOutsideClick\", openOnKeyboardEvent: \"openOnKeyboardEvent\", state: \"state\", itemTemplate: \"itemTemplate\", groupFn: \"groupFn\", maxHeight: \"maxHeight\", dropDownMaxWidthPx: \"dropDownMaxWidthPx\", noDropDownMaxWidth: \"noDropDownMaxWidth\", width: \"width\", searchFn: \"searchFn\", highlighting: \"highlighting\", closeOnSelect: \"closeOnSelect\", fillOnSelect: \"fillOnSelect\", autoComplete: \"autoComplete\", fillControlMode: \"fillControlMode\", communicateByObject: \"communicateByObject\", displayFn: \"displayFn\", buttonFocusable: \"buttonFocusable\", clearButtonFocusable: \"clearButtonFocusable\", readOnly: \"readOnly\", mobile: \"mobile\", mobileConfig: \"mobileConfig\", showDropdownButton: \"showDropdownButton\", includes: \"includes\", title: \"title\", byline: \"byline\", tabOutStrategy: \"tabOutStrategy\" }, outputs: { itemClicked: \"itemClicked\", openChange: \"openChange\", inputTextChange: \"inputTextChange\" }, host: { properties: { \"class.fd-combobox-custom-class\": \"true\", \"class.fd-combobox-input\": \"true\", \"class.fd-combobox-custom-class--mobile\": \"mobile\", \"style.width\": \"width\" } }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ComboboxComponent),\n multi: true\n },\n registerFormItemControl(ComboboxComponent),\n MenuKeyboardService,\n DynamicComponentService,\n contentDensityObserverProviders(),\n {\n provide: FD_COMBOBOX_COMPONENT,\n useExisting: ComboboxComponent\n }\n ], queries: [{ propertyName: \"_comboboxItemRenderer\", first: true, predicate: ComboboxItemDirective, descendants: true }, { propertyName: \"listMessages\", predicate: FD_LIST_MESSAGE_DIRECTIVE }], viewQueries: [{ propertyName: \"listComponent\", first: true, predicate: ListComponent, descendants: true }, { propertyName: \"searchInputElement\", first: true, predicate: [\"searchInputElement\"], descendants: true }, { propertyName: \"popoverComponent\", first: true, predicate: PopoverComponent, descendants: true }, { propertyName: \"inputGroup\", first: true, predicate: InputGroupComponent, descendants: true }, { propertyName: \"controlTemplate\", first: true, predicate: [\"controlTemplate\"], descendants: true }, { propertyName: \"listTemplate\", first: true, predicate: [\"listTemplate\"], descendants: true }, { propertyName: \"items\", predicate: [\"item\"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: \"<ng-template [ngTemplateOutlet]=\\\"mobile ? mobileTemplate : desktopTemplate\\\"></ng-template>\\n<ng-template #desktopTemplate>\\n <fd-popover\\n additionalBodyClass=\\\"fd-popover-custom-list\\\"\\n [class.fd-combobox-full-width]=\\\"isSearch || showClearButton\\\"\\n [isOpen]=\\\"open && displayedValues && displayedValues.length > 0\\\"\\n (isOpenChange)=\\\"isOpenChangeHandle($event)\\\"\\n [fillControlMode]=\\\"fillControlMode\\\"\\n [scrollStrategy]=\\\"_repositionScrollStrategy\\\"\\n [focusTrapped]=\\\"true\\\"\\n [triggers]=\\\"triggers\\\"\\n [disabled]=\\\"disabled || readOnly\\\"\\n [maxWidth]=\\\"!mobile && noDropDownMaxWidth ? null : dropDownMaxWidthPx\\\"\\n [style.width]=\\\"width && '100%'\\\"\\n [closeOnOutsideClick]=\\\"closeOnOutsideClick\\\"\\n >\\n <fd-popover-control>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n </fd-popover-control>\\n <fd-popover-body [hidden]=\\\"!displayedValues.length\\\">\\n <ng-template [ngTemplateOutlet]=\\\"listTemplate\\\"></ng-template>\\n <ng-content></ng-content>\\n </fd-popover-body>\\n </fd-popover>\\n</ng-template>\\n<ng-template let-term=\\\"term\\\" #itemSource>\\n @if (!_customRenderer) {\\n <span\\n fd-list-title\\n fdTruncatedTitle\\n [innerHTML]=\\\"term | displayFnPipe: displayFn | highlight: inputText : highlighting && filterHighlight\\\"\\n >\\n </span>\\n } @else {\\n <ng-template\\n [ngTemplateOutlet]=\\\"_customRenderer\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: term, inputText: inputText }\\\"\\n ></ng-template>\\n }\\n</ng-template>\\n<ng-template #mobileTemplate>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n</ng-template>\\n<ng-template #controlTemplate>\\n <fd-input-group\\n [button]=\\\"showDropdownButton\\\"\\n [glyph]=\\\"showDropdownButton ? glyphValue : null\\\"\\n [glyphFont]=\\\"isSearch ? _defaultFontFamily : glyphFont\\\"\\n [state]=\\\"state\\\"\\n [buttonFocusable]=\\\"buttonFocusable\\\"\\n [disabled]=\\\"disabled\\\"\\n [readonly]=\\\"readOnly\\\"\\n [isControl]=\\\"true\\\"\\n [isExpanded]=\\\"!mobile && open && displayedValues.length > 0\\\"\\n [showFocus]=\\\"!clearInputBtnFocused\\\"\\n [glyphAriaLabel]=\\\"ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\\\"\\n [iconTitle]=\\\"title || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\\\"\\n (addOnButtonClicked)=\\\"onPrimaryButtonClick()\\\"\\n (click)=\\\"mobile && isOpenChangeHandle(true)\\\"\\n >\\n <input\\n #searchInputElement\\n fdkAutoComplete\\n fd-input-group-input\\n type=\\\"text\\\"\\n role=\\\"combobox\\\"\\n autocomplete=\\\"off\\\"\\n [attr.aria-label]=\\\"ariaLabel\\\"\\n [attr.aria-labelledby]=\\\"ariaLabelledBy\\\"\\n [attr.aria-describedby]=\\\"comboboxId + '-list-results'\\\"\\n [attr.aria-autocomplete]=\\\"autoComplete && !mobile ? 'list' : null\\\"\\n [attr.aria-owns]=\\\"autoComplete && !mobile ? comboboxId + '-result' : null\\\"\\n [attr.aria-haspopup]=\\\"autoComplete && !mobile\\\"\\n [attr.aria-expanded]=\\\"!mobile && open && displayedValues.length\\\"\\n [attr.aria-required]=\\\"required\\\"\\n [attr.tabindex]=\\\"readOnly || disabled ? -1 : null\\\"\\n [enable]=\\\"autoComplete && !mobile\\\"\\n [displayFn]=\\\"displayFn\\\"\\n [options]=\\\"dropdownValues\\\"\\n [inputText]=\\\"inputText\\\"\\n [disabled]=\\\"disabled\\\"\\n [readonly]=\\\"readOnly\\\"\\n [attr.aria-readonly]=\\\"readOnly\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [id]=\\\"inputId\\\"\\n [(ngModel)]=\\\"inputText\\\"\\n (onComplete)=\\\"handleAutoComplete($event)\\\"\\n (keydown)=\\\"onInputKeydownHandler($event)\\\"\\n (paste)=\\\"onInputKeydownHandler('fromPaste')\\\"\\n (ngModelChange)=\\\"handleSearchTermChange()\\\"\\n (blur)=\\\"handleBlur()\\\"\\n />\\n @if ((isSearch || showClearButton) && inputText && inputText.length > 0) {\\n <span\\n class=\\\"fd-input-group__addon fd-input-group__addon--button\\\"\\n [class.fd-shellbar__input-group-addon]=\\\"inShellbar\\\"\\n >\\n <button\\n fd-button\\n class=\\\"fd-input-group__button\\\"\\n type=\\\"button\\\"\\n [fdType]=\\\"inShellbar ? 'standard' : 'transparent'\\\"\\n title=\\\"Clear input\\\"\\n [class.fd-shellbar__button]=\\\"inShellbar\\\"\\n [attr.tabindex]=\\\"clearButtonFocusable ? 0 : -1\\\"\\n (focus)=\\\"clearInputBtnFocus()\\\"\\n (blur)=\\\"clearInputBtnBlur()\\\"\\n (click)=\\\"_handleClearSearchTerm()\\\"\\n >\\n <fd-icon glyph=\\\"decline\\\"></fd-icon>\\n </button>\\n </span>\\n }\\n </fd-input-group>\\n <div [id]=\\\"comboboxId + '-list-results'\\\" class=\\\"fd-combobox-count-list-results\\\">\\n {{ displayedValues.length || 0 }} result list items\\n </div>\\n</ng-template>\\n<ng-template #listTemplate>\\n <ul\\n fd-list\\n class=\\\"fd-combobox-custom-list\\\"\\n [dropdownMode]=\\\"true\\\"\\n [id]=\\\"comboboxId + '-result'\\\"\\n role=\\\"listbox\\\"\\n [attr.aria-labelledby]=\\\"comboboxId + '-search'\\\"\\n [style.maxHeight]=\\\"!mobile && maxHeight\\\"\\n [hasMessage]=\\\"listMessages && listMessages.length > 0\\\"\\n [byline]=\\\"byline\\\"\\n [tabindex]=\\\"0\\\"\\n (keydown.tab)=\\\"_close()\\\"\\n (keydown.shift.tab)=\\\"_close()\\\"\\n (focusEscapeList)=\\\"handleListFocusEscape($event)\\\"\\n >\\n <ng-content></ng-content>\\n @if (groupFn) {\\n @for (group of displayedValues | listGroupPipe: groupFn; track group.key; let groupIndex = $index) {\\n <li\\n fd-list-item\\n fd-list-group-header\\n ariaRole=\\\"group\\\"\\n [attr.aria-roledescription]=\\\"'coreMultiComboBox.listGroupHeader' | fdTranslate\\\"\\n [attr.aria-owns]=\\\"_getGroupItemIds(groupIndex)\\\"\\n [attr.aria-label]=\\\"group.key\\\"\\n >\\n <span fd-list-title>{{ group.key }}</span>\\n </li>\\n @for (term of group.value; track term; let index = $index) {\\n <li\\n fd-list-item\\n #item=\\\"fdListItem\\\"\\n ariaRole=\\\"option\\\"\\n [attr.aria-placeholder]=\\\"group.key\\\"\\n [attr.aria-setsize]=\\\"group.value.length\\\"\\n [attr.aria-posinset]=\\\"index + 1\\\"\\n [attr.id-with-group-index]=\\\"item.id + '-group-' + groupIndex\\\"\\n class=\\\"fd-combobox-list-item\\\"\\n [selected]=\\\"isSelected(term)\\\"\\n [value]=\\\"term\\\"\\n (keydown)=\\\"onItemKeyDownHandler($event, term)\\\"\\n (click)=\\\"onMenuClickHandler(term)\\\"\\n >\\n <ng-template\\n [ngTemplateOutlet]=\\\"itemSource\\\"\\n [ngTemplateOutletContext]=\\\"{ term: term }\\\"\\n ></ng-template>\\n </li>\\n }\\n }\\n } @else {\\n @for (term of displayedValues; track term) {\\n <li\\n fd-list-item\\n role=\\\"option\\\"\\n [tabindex]=\\\"0\\\"\\n class=\\\"fd-combobox-list-item\\\"\\n [selected]=\\\"isSelected(term)\\\"\\n (keydown)=\\\"onItemKeyDownHandler($event, term)\\\"\\n (click)=\\\"onMenuClickHandler(term)\\\"\\n [value]=\\\"term\\\"\\n >\\n <ng-template\\n [ngTemplateOutlet]=\\\"itemSource\\\"\\n [ngTemplateOutletContext]=\\\"{ term: term }\\\"\\n ></ng-template>\\n </li>\\n }\\n }\\n </ul>\\n</ng-template>\\n\", styles: [\".fd-combobox-custom-class,.fd-combobox-custom-class .fd-combobox-shellbar-custom{display:inline-block}.fd-list__item.fd-combobox-list-item{cursor:pointer}.fd-combobox-full-width{width:100%}.fd-combobox-count-list-results{position:absolute;opacity:0;z-index:-1}\\n\"], dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: PopoverComponent, selector: \"fd-popover\", inputs: [\"title\", \"trigger\", \"fixedPosition\", \"id\", \"mobile\", \"mobileConfig\", \"preventSpaceKeyScroll\"] }, { kind: \"component\", type: PopoverControlComponent, selector: \"fd-popover-control, [fdPopoverControl]\" }, { kind: \"component\", type: PopoverBodyComponent, selector: \"fd-popover-body\", inputs: [\"minWidth\", \"maxWidth\", \"minHeight\", \"maxHeight\"] }, { kind: \"component\", type: ListComponent, selector: \"[fd-list], [fdList]\", inputs: [\"dropdownMode\", \"multiInputMode\", \"mobileMode\", \"hasMessage\", \"noBorder\", \"navigationIndicator\", \"selection\", \"keyboardSupport\", \"byline\", \"subline\", \"theme\", \"unreadIndicator\", \"role\", \"settingsList\", \"settingsListFooter\"], outputs: [\"focusEscapeList\"] }, { kind: \"component\", type: ListItemComponent, selector: \"[fdListItem] ,[fd-list-item]\", inputs: [\"selected\", \"noData\", \"action\", \"interactive\", \"growing\", \"counter\", \"active\", \"unread\", \"byline\", \"ariaRole\", \"id\", \"preventClick\", \"settingsListTpl\"], outputs: [\"keyDown\"], exportAs: [\"fdListItem\"] }, { kind: \"directive\", type: ListTitleDirective, selector: \"[fd-list-title], [fdListTitle]\", inputs: [\"wrap\", \"truncate\"] }, { kind: \"directive\", type: ListGroupHeaderDirective, selector: \"[fdListGroupHeader], [fd-list-group-header]\", inputs: [\"nativeElementId\"], outputs: [\"keyDown\"] }, { kind: \"component\", type: InputGroupComponent, selector: \"fd-input-group\", inputs: [\"placement\", \"required\", \"inline\", \"addOnText\", \"buttonFocusable\", \"type\", \"glyph\", \"glyphFont\", \"button\", \"isControl\", \"showFocus\", \"isExpanded\", \"glyphAriaLabel\", \"addonButtonAriaHidden\", \"iconTitle\", \"ariaLabelledBy\", \"ariaLabel\"], outputs: [\"addOnButtonClicked\", \"search\"] }, { kind: \"directive\", type: InputGroupInputDirective, selector: \"[fdInputGroupInput], [fd-input-group-input]\", inputs: [\"class\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i4.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: i4.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i4.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"directive\", type: AutoCompleteDirective, selector: \"[fdkAutoComplete]\", inputs: [\"options\", \"inputText\", \"enable\", \"displayFn\", \"matcher\"], outputs: [\"onComplete\"] }, { kind: \"component\", type: ButtonComponent, selector: \"button[fd-button], a[fd-button], span[fd-button]\", inputs: [\"class\", \"id\"], exportAs: [\"fd-button\"] }, { kind: \"component\", type: IconComponent, selector: \"fd-icon\", inputs: [\"glyph\", \"font\", \"color\", \"background\", \"class\", \"ariaLabel\", \"ariaHidden\"] }, { kind: \"ngmodule\", type: ContentDensityModule }, { kind: \"directive\", type: TruncatedTitleDirective, selector: \"[fdkTruncatedTitle], [fdTruncatedTitle], [fd-truncate-title]\" }, { kind: \"pipe\", type: DisplayFnPipe, name: \"displayFnPipe\" }, { kind: \"pipe\", type: SearchHighlightPipe, name: \"highlight\" }, { kind: \"pipe\", type: FdTranslatePipe, name: \"fdTranslate\" }, { kind: \"pipe\", type: ListGroupPipe, name: \"listGroupPipe\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-combobox', providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ComboboxComponent),\n multi: true\n },\n registerFormItemControl(ComboboxComponent),\n MenuKeyboardService,\n DynamicComponentService,\n contentDensityObserverProviders(),\n {\n provide: FD_COMBOBOX_COMPONENT,\n useExisting: ComboboxComponent\n }\n ], host: {\n '[class.fd-combobox-custom-class]': 'true',\n '[class.fd-combobox-input]': 'true',\n '[class.fd-combobox-custom-class--mobile]': 'mobile',\n '[style.width]': 'width'\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n NgTemplateOutlet,\n PopoverComponent,\n PopoverControlComponent,\n PopoverBodyComponent,\n ListComponent,\n ListItemComponent,\n ListTitleDirective,\n ListGroupHeaderDirective,\n InputGroupComponent,\n InputGroupInputDirective,\n FormsModule,\n AutoCompleteDirective,\n ButtonComponent,\n IconComponent,\n ContentDensityModule,\n DisplayFnPipe,\n SearchHighlightPipe,\n FdTranslatePipe,\n ListGroupPipe,\n TruncatedTitleDirective\n ], template: \"<ng-template [ngTemplateOutlet]=\\\"mobile ? mobileTemplate : desktopTemplate\\\"></ng-template>\\n<ng-template #desktopTemplate>\\n <fd-popover\\n additionalBodyClass=\\\"fd-popover-custom-list\\\"\\n [class.fd-combobox-full-width]=\\\"isSearch || showClearButton\\\"\\n [isOpen]=\\\"open && displayedValues && displayedValues.length > 0\\\"\\n (isOpenChange)=\\\"isOpenChangeHandle($event)\\\"\\n [fillControlMode]=\\\"fillControlMode\\\"\\n [scrollStrategy]=\\\"_repositionScrollStrategy\\\"\\n [focusTrapped]=\\\"true\\\"\\n [triggers]=\\\"triggers\\\"\\n [disabled]=\\\"disabled || readOnly\\\"\\n [maxWidth]=\\\"!mobile && noDropDownMaxWidth ? null : dropDownMaxWidthPx\\\"\\n [style.width]=\\\"width && '100%'\\\"\\n [closeOnOutsideClick]=\\\"closeOnOutsideClick\\\"\\n >\\n <fd-popover-control>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n </fd-popover-control>\\n <fd-popover-body [hidden]=\\\"!displayedValues.length\\\">\\n <ng-template [ngTemplateOutlet]=\\\"listTemplate\\\"></ng-template>\\n <ng-content></ng-content>\\n </fd-popover-body>\\n </fd-popover>\\n</ng-template>\\n<ng-template let-term=\\\"term\\\" #itemSource>\\n @if (!_customRenderer) {\\n <span\\n fd-list-title\\n fdTruncatedTitle\\n [innerHTML]=\\\"term | displayFnPipe: displayFn | highlight: inputText : highlighting && filterHighlight\\\"\\n >\\n </span>\\n } @else {\\n <ng-template\\n [ngTemplateOutlet]=\\\"_customRenderer\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: term, inputText: inputText }\\\"\\n ></ng-template>\\n }\\n</ng-template>\\n<ng-template #mobileTemplate>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n</ng-template>\\n<ng-template #controlTemplate>\\n <fd-input-group\\n [button]=\\\"showDropdownButton\\\"\\n [glyph]=\\\"showDropdownButton ? glyphValue : null\\\"\\n [glyphFont]=\\\"isSearch ? _defaultFontFamily : glyphFont\\\"\\n [state]=\\\"state\\\"\\n [buttonFocusable]=\\\"buttonFocusable\\\"\\n [disabled]=\\\"disabled\\\"\\n [readonly]=\\\"readOnly\\\"\\n [isControl]=\\\"true\\\"\\n [isExpanded]=\\\"!mobile && open && displayedValues.length > 0\\\"\\n [showFocus]=\\\"!clearInputBtnFocused\\\"\\n [glyphAriaLabel]=\\\"ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\\\"\\n [iconTitle]=\\\"title || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\\\"\\n (addOnButtonClicked)=\\\"onPrimaryButtonClick()\\\"\\n (click)=\\\"mobile && isOpenChangeHandle(true)\\\"\\n >\\n <input\\n #searchInputElement\\n fdkAutoComplete\\n fd-input-group-input\\n type=\\\"text\\\"\\n role=\\\"combobox\\\"\\n autocomplete=\\\"off\\\"\\n [attr.aria-label]=\\\"ariaLabel\\\"\\n [attr.aria-labelledby]=\\\"ariaLabelledBy\\\"\\n [attr.aria-describedby]=\\\"comboboxId + '-list-results'\\\"\\n [attr.aria-autocomplete]=\\\"autoComplete && !mobile ? 'list' : null\\\"\\n [attr.aria-owns]=\\\"autoComplete && !mobile ? comboboxId + '-result' : null\\\"\\n [attr.aria-haspopup]=\\\"autoComplete && !mobile\\\"\\n [attr.aria-expanded]=\\\"!mobile && open && displayedValues.length\\\"\\n [attr.aria-required]=\\\"required\\\"\\n [attr.tabindex]=\\\"readOnly || disabled ? -1 : null\\\"\\n [enable]=\\\"autoComplete && !mobile\\\"\\n [displayFn]=\\\"displayFn\\\"\\n [options]=\\\"dropdownValues\\\"\\n [inputText]=\\\"inputText\\\"\\n [disabled]=\\\"disabled\\\"\\n [readonly]=\\\"readOnly\\\"\\n [attr.aria-readonly]=\\\"readOnly\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [id]=\\\"inputId\\\"\\n [(ngModel)]=\\\"inputText\\\"\\n (onComplete)=\\\"handleAutoComplete($event)\\\"\\n (keydown)=\\\"onInputKeydownHandler($event)\\\"\\n (paste)=\\\"onInputKeydownHandler('fromPaste')\\\"\\n (ngModelChange)=\\\"handleSearchTermChange()\\\"\\n (blur)=\\\"handleBlur()\\\"\\n />\\n @if ((isSearch || showClearButton) && inputText && inputText.length > 0) {\\n <span\\n class=\\\"fd-input-group__addon fd-input-group__addon--button\\\"\\n [class.fd-shellbar__input-group-addon]=\\\"inShellbar\\\"\\n >\\n <button\\n fd-button\\n class=\\\"fd-input-group__button\\\"\\n type=\\\"button\\\"\\n [fdType]=\\\"inShellbar ? 'standard' : 'transparent'\\\"\\n title=\\\"Clear input\\\"\\n [class.fd-shellbar__button]=\\\"inShellbar\\\"\\n [attr.tabindex]=\\\"clearButtonFocusable ? 0 : -1\\\"\\n (focus)=\\\"clearInputBtnFocus()\\\"\\n (blur)=\\\"clearInputBtnBlur()\\\"\\n (click)=\\\"_handleClearSearchTerm()\\\"\\n >\\n <fd-icon glyph=\\\"decline\\\"></fd-icon>\\n </button>\\n </span>\\n }\\n </fd-input-group>\\n <div [id]=\\\"comboboxId + '-list-results'\\\" class=\\\"fd-combobox-count-list-results\\\">\\n {{ displayedValues.length || 0 }} result list items\\n </div>\\n</ng-template>\\n<ng-template #listTemplate>\\n <ul\\n fd-list\\n class=\\\"fd-combobox-custom-list\\\"\\n [dropdownMode]=\\\"true\\\"\\n [id]=\\\"comboboxId + '-result'\\\"\\n role=\\\"listbox\\\"\\n [attr.aria-labelledby]=\\\"comboboxId + '-search'\\\"\\n [style.maxHeight]=\\\"!mobile && maxHeight\\\"\\n [hasMessage]=\\\"listMessages && listMessages.length > 0\\\"\\n [byline]=\\\"byline\\\"\\n [tabindex]=\\\"0\\\"\\n (keydown.tab)=\\\"_close()\\\"\\n (keydown.shift.tab)=\\\"_close()\\\"\\n (focusEscapeList)=\\\"handleListFocusEscape($event)\\\"\\n >\\n <ng-content></ng-content>\\n @if (groupFn) {\\n @for (group of displayedValues | listGroupPipe: groupFn; track group.key; let groupIndex = $index) {\\n <li\\n fd-list-item\\n fd-list-group-header\\n ariaRole=\\\"group\\\"\\n [attr.aria-roledescription]=\\\"'coreMultiComboBox.listGroupHeader' | fdTranslate\\\"\\n [attr.aria-owns]=\\\"_getGroupItemIds(groupIndex)\\\"\\n [attr.aria-label]=\\\"group.key\\\"\\n >\\n <span fd-list-title>{{ group.key }}</span>\\n </li>\\n @for (term of group.value; track term; let index = $index) {\\n <li\\n fd-list-item\\n #item=\\\"fdListItem\\\"\\n ariaRole=\\\"option\\\"\\n [attr.aria-placeholder]=\\\"group.key\\\"\\n [attr.aria-setsize]=\\\"group.value.length\\\"\\n [attr.aria-posinset]=\\\"index + 1\\\"\\n [attr.id-with-group-index]=\\\"item.id + '-group-' + groupIndex\\\"\\n class=\\\"fd-combobox-list-item\\\"\\n [selected]=\\\"isSelected(term)\\\"\\n [value]=\\\"term\\\"\\n (keydown)=\\\"onItemKeyDownHandler($event, term)\\\"\\n (click)=\\\"onMenuClickHandler(term)\\\"\\n >\\n <ng-template\\n [ngTemplateOutlet]=\\\"itemSource\\\"\\n [ngTemplateOutletContext]=\\\"{ term: term }\\\"\\n ></ng-template>\\n </li>\\n }\\n }\\n } @else {\\n @for (term of displayedValues; track term) {\\n <li\\n fd-list-item\\n role=\\\"option\\\"\\n [tabindex]=\\\"0\\\"\\n class=\\\"fd-combobox-list-item\\\"\\n [selected]=\\\"isSelected(term)\\\"\\n (keydown)=\\\"onItemKeyDownHandler($event, term)\\\"\\n (click)=\\\"onMenuClickHandler(term)\\\"\\n [value]=\\\"term\\\"\\n >\\n <ng-template\\n [ngTemplateOutlet]=\\\"itemSource\\\"\\n [ngTemplateOutletContext]=\\\"{ term: term }\\\"\\n ></ng-template>\\n </li>\\n }\\n }\\n </ul>\\n</ng-template>\\n\", styles: [\".fd-combobox-custom-class,.fd-combobox-custom-class .fd-combobox-shellbar-custom{display:inline-block}.fd-list__item.fd-combobox-list-item{cursor:pointer}.fd-combobox-full-width{width:100%}.fd-combobox-count-list-results{position:absolute;opacity:0;z-index:-1}\\n\"] }]\n }], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: i0.ViewContainerRef }, { type: i2.DynamicComponentService }, { type: i2.FocusTrapService }, { type: i3.ContentDensityObserver }], propDecorators: { comboboxId: [{\n type: Input\n }], inputId: [{\n type: Input\n }], ariaLabel: [{\n type: Input\n }], ariaLabelledBy: [{\n type: Input\n }], required: [{\n type: Input\n }], dropdownValues: [{\n type: Input\n }], filterFn: [{\n type: Input\n }], disabled: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], isSearch: [{\n type: Input\n }], glyph: [{\n type: Input\n }], glyphFont: [{\n type: Input\n }], showClearButton: [{\n type: Input\n }], triggers: [{\n type: Input\n }], closeOnOutsideClick: [{\n type: Input\n }], openOnKeyboardEvent: [{\n type: Input\n }], state: [{\n type: Input\n }], itemTemplate: [{\n type: Input\n }], groupFn: [{\n type: Input\n }], maxHeight: [{\n type: Input\n }], dropDownMaxWidthPx: [{\n type: Input\n }], noDropDownMaxWidth: [{\n type: Input\n }], width: [{\n type: Input\n }], searchFn: [{\n type: Input\n }], highlighting: [{\n type: Input\n }], closeOnSelect: [{\n type: Input\n }], fillOnSelect: [{\n type: Input\n }], autoComplete: [{\n type: Input\n }], fillControlMode: [{\n type: Input\n }], communicateByObject: [{\n type: Input\n }], displayFn: [{\n type: Input\n }], buttonFocusable: [{\n type: Input\n }], clearButtonFocusable: [{\n type: Input\n }], readOnly: [{\n type: Input\n }], mobile: [{\n type: Input\n }], mobileConfig: [{\n type: Input\n }], showDropdownButton: [{\n type: Input\n }], includes: [{\n type: Input\n }], title: [{\n type: Input\n }], byline: [{\n type: Input\n }], tabOutStrategy: [{\n type: Input\n }], itemClicked: [{\n type: Output\n }], openChange: [{\n type: Output\n }], inputTextChange: [{\n type: Output\n }], listComponent: [{\n type: ViewChild,\n args: [ListComponent]\n }], searchInputElement: [{\n type: ViewChild,\n args: ['searchInputElement']\n }], popoverComponent: [{\n type: ViewChild,\n args: [PopoverComponent]\n }], inputGroup: [{\n type: ViewChild,\n args: [InputGroupComponent]\n }], listMessages: [{\n type: ContentChildren,\n args: [FD_LIST_MESSAGE_DIRECTIVE]\n }], controlTemplate: [{\n type: ViewChild,\n args: ['controlTemplate']\n }], listTemplate: [{\n type: ViewChild,\n args: ['listTemplate']\n }], _comboboxItemRenderer: [{\n type: ContentChild,\n args: [ComboboxItemDirective]\n }], items: [{\n type: ViewChildren,\n args: ['item', { read: ElementRef }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULE9BQU8sRUFDUCxVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFDTCxLQUFLLEVBQ0wsR0FBRyxFQUNILFFBQVEsRUFDWCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFJTCxNQUFNLEVBQ04sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsVUFBVSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxPQUFPLEVBRUgsdUJBQXVCLEVBRXZCLGdCQUFnQixFQUNoQixPQUFPLEVBRVAsdUJBQXVCLEVBQzFCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFtQix1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWpFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR2pFLE9BQU8sRUFBRSxPQUFPLEVBQTRCLE1BQU0sc0JBQXNCLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFbkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQ0gsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0QiwrQkFBK0IsRUFDbEMsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsYUFBYSxFQUFZLE1BQU0sNEJBQTRCLENBQUM7QUFDbEcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEcsT0FBTyxFQUNILHlCQUF5QixFQUN6QixhQUFhLEVBQ2Isd0JBQXdCLEVBQ3hCLGlCQUFpQixFQUVqQixrQkFBa0IsRUFDckIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGtCQUFrQixFQUFtRCxNQUFNLHNCQUFzQixDQUFDO0FBQzNHLE9BQU8sRUFBaUIsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sVUFBVSxDQUFDOzs7Ozs7QUFFakQsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFFekI7Ozs7Ozs7Ozs7O0dBV0c7QUFtREgsTUFBTSxPQUFPLGlCQUFpQjtJQXFUMUIsY0FBYztJQUNkLElBQUksZUFBZTtRQUNmLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixFQUFFLFdBQVcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQ3hFLENBQUM7SUFRRCxjQUFjO0lBQ2QsWUFDcUIsUUFBaUIsRUFDakIsTUFBeUIsRUFDekIsU0FBbUIsRUFDbkIsaUJBQW1DLEVBQ25DLHdCQUFpRCxFQUNqRCxpQkFBbUMsRUFDM0MsdUJBQStDO1FBTnZDLGFBQVEsR0FBUixRQUFRLENBQVM7UUFDakIsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFDekIsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNuQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBeUI7UUFDakQsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUMzQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXdCO1FBN1Q1RCwyQkFBMkI7UUFFM0IsZUFBVSxHQUFHLGVBQWUsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDO1FBRWpELCtEQUErRDtRQUUvRCxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBVWIsK0JBQStCO1FBRS9CLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsaURBQWlEO1FBRWpELG1CQUFjLEdBQVEsRUFBRSxDQUFDO1FBRXpCOzBFQUNrRTtRQUVsRSxhQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQVUvQjs7V0FFRztRQUVILGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsZ0RBQWdEO1FBRWhELFVBQUssR0FBRyx1QkFBdUIsQ0FBQztRQUVoQyx3QkFBd0I7UUFFeEIsY0FBUyxHQUFhLDJCQUEyQixDQUFDO1FBRWxEOztXQUVHO1FBRUgsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFFeEI7OztXQUdHO1FBRUgsYUFBUSxHQUFhLEVBQUUsQ0FBQztRQUV4QiwyR0FBMkc7UUFFM0csd0JBQW1CLEdBQUcsSUFBSSxDQUFDO1FBRTNCOztXQUVHO1FBRUgsd0JBQW1CLEdBQUcsSUFBSSxDQUFDO1FBc0IzQixnR0FBZ0c7UUFFaEcsY0FBUyxHQUFHLE1BQU0sQ0FBQztRQUVuQixxRUFBcUU7UUFFckUsdUJBQWtCLEdBQUcsR0FBRyxDQUFDO1FBRXpCOzs7OEJBR3NCO1FBRXRCLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQVUzQiwyRUFBMkU7UUFFM0UsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFFcEIscUVBQXFFO1FBRXJFLGtCQUFhLEdBQUcsSUFBSSxDQUFDO1FBRXJCLHNGQUFzRjtRQUV0RixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUVwQixxRUFBcUU7UUFFckUsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFFcEI7Ozs7O1dBS0c7UUFFSCxvQkFBZSxHQUFvQixVQUFVLENBQUM7UUFFOUM7OzZFQUVxRTtRQUVyRSx3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFFNUI7OztvREFHNEM7UUFFNUMsY0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFFakM7OztXQUdHO1FBRUgsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFFeEI7OztXQUdHO1FBRUgseUJBQW9CLEdBQUcsSUFBSSxDQUFDO1FBRTVCLHdDQUF3QztRQUV4QyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLDBEQUEwRDtRQUUxRCxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBTWYsMkNBQTJDO1FBRTNDLHVCQUFrQixHQUFHLElBQUksQ0FBQztRQUUxQjs7O1dBR0c7UUFFSCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBUWpCLDhEQUE4RDtRQUU5RCxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBRWY7Ozs7V0FJRztRQUVILG1CQUFjLEdBQStCLGdCQUFnQixDQUFDO1FBRTlELDBFQUEwRTtRQUVqRSxnQkFBVyxHQUErQixJQUFJLFlBQVksRUFBZ0IsQ0FBQztRQUVwRiwwRUFBMEU7UUFFakUsZUFBVSxHQUEwQixJQUFJLFlBQVksRUFBVyxDQUFDO1FBRXpFLGlEQUFpRDtRQUVqRCxvQkFBZSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBc0NuRSwwRkFBMEY7UUFDMUYsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFFdkIseUZBQXlGO1FBQ2hGLG1CQUFjLEdBQWE7WUFDaEMsTUFBTTtZQUNOLEtBQUs7WUFDTCxVQUFVO1lBQ1YsV0FBVztZQUNYLFVBQVU7WUFDVixRQUFRO1lBQ1IsT0FBTztZQUNQLEdBQUc7WUFDSCxLQUFLO1NBQ1IsQ0FBQztRQUtGLGNBQWM7UUFDTCx1QkFBa0IsR0FBRywyQkFBMkIsQ0FBQztRQUUxRCxzQ0FBc0M7UUFDdEMsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUViOzs7V0FHRztRQUNILGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFbkIsY0FBYztRQUNkLG9CQUFlLEdBQVUsRUFBRSxDQUFDO1FBRTVCLGNBQWM7UUFDZCxtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUVwQixjQUFjO1FBQ2QseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBTzdCLGNBQWM7UUFDTixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFrQjVDLGNBQWM7UUFDZCxhQUFRLEdBQXlCLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUUxQyxjQUFjO1FBQ2QsY0FBUyxHQUFHLEdBQVMsRUFBRSxHQUFFLENBQUMsQ0FBQztRQVB2QixJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBUUQsY0FBYztJQUNkLFFBQVE7UUFDSixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ3BDLENBQUM7UUFDRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVcsQ0FBQyxPQUFzQjtRQUM5QixJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3hFLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ25DLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVc7UUFDUCxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxjQUFjO0lBQ2QsZUFBZTtRQUNYLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRXpCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDNUIsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ2QscUJBQXFCLENBQUMsS0FBNkI7UUFDL0MsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzVCLElBQUksS0FBSyxLQUFLLFdBQVcsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDZCxPQUFPO1lBQ1gsQ0FBQztZQUVELElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2hCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDcEIsQ0FBQztZQUNMLENBQUM7aUJBQU0sSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDZixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsQyxDQUFDO2dCQUNELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDO3FCQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0IsQ0FBQztnQkFDRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDM0IsQ0FBQztpQkFBTSxJQUNILElBQUksQ0FBQyxtQkFBbUI7Z0JBQ3hCLENBQUMsS0FBSyxDQUFDLE9BQU87Z0JBQ2QsQ0FBQyxLQUFLLENBQUMsTUFBTTtnQkFDYixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsRUFDaEQsQ0FBQztnQkFDQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlCLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUM7b0JBQ25HLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLG9CQUFvQixDQUFDLEtBQW9CLEVBQUUsS0FBVTtRQUNqRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDckUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDZCxrQkFBa0IsQ0FBQyxLQUFVO1FBQ3pCLElBQUksS0FBSyxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QixNQUFNLEtBQUssR0FBVyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxDQUFDO1lBQ2xGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztZQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0wsQ0FBQztJQUVELHFFQUFxRTtJQUNyRSxhQUFhLENBQUMsSUFBUztRQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELDBFQUEwRTtJQUMxRSxhQUFhO1FBQ1QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCwwQkFBMEI7SUFDMUIsSUFBSSxZQUFZO1FBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsSUFBSSxTQUFTLENBQUMsS0FBYTtRQUN2QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDeEIsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM1QixDQUFDO0lBQ0wsQ0FBQztJQUNELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRUQsMEZBQTBGO0lBQzFGLElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ2pELENBQUM7SUFFRCxjQUFjO0lBQ2Qsc0JBQXNCO1FBQ2xCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELGNBQWM7SUFDZCxVQUFVLENBQUMsS0FBVTtRQUNqQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxjQUFjO0lBQ2QsZ0JBQWdCLENBQUMsRUFBd0I7UUFDckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELGNBQWM7SUFDZCxpQkFBaUIsQ0FBQyxFQUFjO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxzQ0FBc0M7SUFDdEMscUJBQXFCLENBQUMsU0FBK0I7UUFDakQsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsRCxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDZCxzQkFBc0I7UUFDbEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsY0FBYztJQUNkLG9CQUFvQjtRQUNoQixvREFBb0Q7UUFDcEQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDZCxPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBQ0QsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25ELENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLGtCQUFrQixDQUFDLE1BQWU7UUFDOUIsa0RBQWtEO1FBQ2xELElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO1lBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRTdCLCtHQUErRztZQUMvRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDWixJQUFJLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNuRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxDQUFDLGlCQUFpQixDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDckQsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsY0FBYztJQUNkLGdCQUFnQixDQUFDLFVBQW1CO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELGtIQUFrSDtJQUNsSCxrQkFBa0IsQ0FBQyxLQUF3QjtRQUN2QyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztZQUM1QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ2QsVUFBVTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLGtCQUFrQixDQUFDO2dCQUNwQixJQUFJLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxLQUFLO2dCQUNqRCxVQUFVLEVBQUUsS0FBSzthQUNwQixDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDZCxrQkFBa0I7UUFDZCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxjQUFjO0lBQ2QsaUJBQWlCO1FBQ2IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztJQUN0QyxDQUFDO0lBRUQsMkJBQTJCO0lBQzNCLFFBQVE7UUFDSixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELGNBQWM7SUFDZCxNQUFNO1FBQ0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkQsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLGdCQUFnQixFQUFFLENBQUM7WUFDM0MsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2RCxJQUFJLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDNUMsT0FBTztZQUNYLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUVELGNBQWM7SUFDZCxVQUFVLENBQUMsSUFBUztRQUNoQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6RSxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxTQUFTLENBQUM7SUFDekMsQ0FBQztJQUVELGNBQWM7SUFDZCxnQkFBZ0IsQ0FBQyxVQUFrQjtRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUN0QixPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSzthQUMxQixNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUNYLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDekUsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMzRSxPQUFPLFFBQVEsS0FBSyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDO2FBQ0QsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRXRELE9BQU8sWUFBWSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsMEdBQTBHO0lBQ2xHLGdCQUFnQixDQUFDLE1BQWM7UUFDbkMsTUFBTSxXQUFXLEdBQVEsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RixNQUFNLEtBQUssR0FBVyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDO1FBQ3RGLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNqRSxDQUFDO0lBQ0wsQ0FBQztJQUVELHNIQUFzSDtJQUM5RyxxQkFBcUI7UUFDekIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBRUQsY0FBYztJQUNOLGlCQUFpQjtRQUNyQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztZQUN0RixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNOLGVBQWUsQ0FBQyxHQUFRO1FBQzVCLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsY0FBYztJQUNOLGNBQWMsQ0FBQyxZQUFtQixFQUFFLFVBQWU7UUFDdkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNqQyxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNuRCxPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDaEMsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDUCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7b0JBQ3RELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDckYsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQzthQUFNLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDeEMsT0FBTyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUNELE9BQU8sWUFBWSxJQUFJLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsY0FBYztJQUNOLG1CQUFtQixDQUFDLElBQVM7UUFDakMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQzdELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7WUFFNUIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDNUIsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsY0FBYztJQUNOLGdDQUFnQyxDQUFDLFlBQW9CO1FBQ3pELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssWUFBWSxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELGNBQWM7SUFDTix1QkFBdUI7UUFDM0IsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlFLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQztRQUNyRCxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDTixnQkFBZ0I7UUFDcEIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JFLHNFQUFzRTtZQUN0RSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUN2RixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLENBQUM7aUJBQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNsQyxDQUFDO1lBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xDLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0IsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ04sUUFBUSxDQUFDLEtBQVU7UUFDdkIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUN4QixDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDTixnQkFBZ0I7UUFDcEIsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUM3QixTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDNUQsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQ3pCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxzQkFBc0IsQ0FDaEQsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUMxRSx1QkFBdUIsRUFDdkI7WUFDSSxZQUFZLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtTQUN2QyxFQUNEO1lBQ0ksUUFBUTtTQUNYLENBQ0osQ0FBQztJQUNOLENBQUM7OEdBMXZCUSxpQkFBaUI7a0dBQWpCLGlCQUFpQiwwK0NBOUNmO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDaEQsS0FBSyxFQUFFLElBQUk7YUFDZDtZQUNELHVCQUF1QixDQUFDLGlCQUFpQixDQUFDO1lBQzFDLG1CQUFtQjtZQUNuQix1QkFBdUI7WUFDdkIsK0JBQStCLEVBQUU7WUFDakM7Z0JBQ0ksT0FBTyxFQUFFLHFCQUFxQjtnQkFDOUIsV0FBVyxFQUFFLGlCQUFpQjthQUNqQztTQUNKLDZFQXNTYSxxQkFBcUIsa0VBWmxCLHlCQUF5Qiw0RUFoQi9CLGFBQWEsOExBUWIsZ0JBQWdCLDZFQUloQixtQkFBbUIsa1NBb0JBLFVBQVUsa0RDOVo1QyxtdFFBOExBLGdVRGhFUSxnQkFBZ0Isb0pBQ2hCLGdCQUFnQiwrSkFDaEIsdUJBQXVCLG1GQUN2QixvQkFBb0Isd0hBQ3BCLGFBQWEsd1VBQ2IsaUJBQWlCLDJSQUNqQixrQkFBa0IseUdBQ2xCLHdCQUF3QiwySUFDeEIsbUJBQW1CLDBWQUNuQix3QkFBd0IsMEdBQ3hCLFdBQVcsK21CQUNYLHFCQUFxQiwySkFDckIsZUFBZSwrSUFDZixhQUFhLHlJQUNiLG9CQUFvQiwrQkFLcEIsdUJBQXVCLG9HQUp2QixhQUFhLGlEQUNiLG1CQUFtQiw2Q0FDbkIsZUFBZSwrQ0FDZixhQUFhOzsyRkFJUixpQkFBaUI7a0JBbEQ3QixTQUFTOytCQUNJLGFBQWEsYUFHWjt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQzs0QkFDaEQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7d0JBQ0QsdUJBQXVCLG1CQUFtQjt3QkFDMUMsbUJBQW1CO3dCQUNuQix1QkFBdUI7d0JBQ3ZCLCtCQUErQixFQUFFO3dCQUNqQzs0QkFDSSxPQUFPLEVBQUUscUJBQXFCOzRCQUM5QixXQUFXLG1CQUFtQjt5QkFDakM7cUJBQ0osUUFDSzt3QkFDRixrQ0FBa0MsRUFBRSxNQUFNO3dCQUMxQywyQkFBMkIsRUFBRSxNQUFNO3dCQUNuQywwQ0FBMEMsRUFBRSxRQUFRO3dCQUNwRCxlQUFlLEVBQUUsT0FBTztxQkFDM0IsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDTCxnQkFBZ0I7d0JBQ2hCLGdCQUFnQjt3QkFDaEIsdUJBQXVCO3dCQUN2QixvQkFBb0I7d0JBQ3BCLGFBQWE7d0JBQ2IsaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLHdCQUF3Qjt3QkFDeEIsbUJBQW1CO3dCQUNuQix3QkFBd0I7d0JBQ3hCLFdBQVc7d0JBQ1gscUJBQXFCO3dCQUNyQixlQUFlO3dCQUNmLGFBQWE7d0JBQ2Isb0JBQW9CO3dCQUNwQixhQUFhO3dCQUNiLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixhQUFhO3dCQUNiLHVCQUF1QjtxQkFDMUI7NFFBZUQsVUFBVTtzQkFEVCxLQUFLO2dCQUtOLE9BQU87c0JBRE4sS0FBSztnQkFLTixTQUFTO3NCQURSLEtBQUs7Z0JBS04sY0FBYztzQkFEYixLQUFLO2dCQUtOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixjQUFjO3NCQURiLEtBQUs7Z0JBTU4sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixXQUFXO3NCQURWLEtBQUs7Z0JBT04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLEtBQUs7c0JBREosS0FBSztnQkFLTixTQUFTO3NCQURSLEtBQUs7Z0JBT04sZUFBZTtzQkFEZCxLQUFLO2dCQVFOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBT04sbUJBQW1CO3NCQURsQixLQUFLO2dCQVFOLEtBQUs7c0JBREosS0FBSztnQkFRTixZQUFZO3NCQURYLEtBQUs7Z0JBT04sT0FBTztzQkFETixLQUFLO2dCQUtOLFNBQVM7c0JBRFIsS0FBSztnQkFLTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBUU4sa0JBQWtCO3NCQURqQixLQUFLO2dCQUtOLEtBQUs7c0JBREosS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sWUFBWTtzQkFEWCxLQUFLO2dCQUtOLGFBQWE7c0JBRFosS0FBSztnQkFLTixZQUFZO3NCQURYLEtBQUs7Z0JBS04sWUFBWTtzQkFEWCxLQUFLO2dCQVVOLGVBQWU7c0JBRGQsS0FBSztnQkFPTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBUU4sU0FBUztzQkFEUixLQUFLO2dCQVFOLGVBQWU7c0JBRGQsS0FBSztnQkFRTixvQkFBb0I7c0JBRG5CLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLE1BQU07c0JBREwsS0FBSztnQkFLTixZQUFZO3NCQURYLEtBQUs7Z0JBS04sa0JBQWtCO3NCQURqQixLQUFLO2dCQVFOLFFBQVE7c0JBRFAsS0FBSztnQkFPTixLQUFLO3NCQURKLEtBQUs7Z0JBS04sTUFBTTtzQkFETCxLQUFLO2dCQVNOLGNBQWM7c0JBRGIsS0FBSztnQkFLRyxXQUFXO3NCQURuQixNQUFNO2dCQUtFLFVBQVU7c0JBRGxCLE1BQU07Z0JBS1AsZUFBZTtzQkFEZCxNQUFNO2dCQUtQLGFBQWE7c0JBRFosU0FBUzt1QkFBQyxhQUFhO2dCQUt4QixrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMsb0JBQW9CO2dCQUsvQixnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBSzNCLFVBQVU7c0JBRFQsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBSzlCLFlBQVk7c0JBRFgsZUFBZTt1QkFBQyx5QkFBeUI7Z0JBSzFDLGVBQWU7c0JBRGQsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBSzVCLFlBQVk7c0JBRFgsU0FBUzt1QkFBQyxjQUFjO2dCQUtSLHFCQUFxQjtzQkFEckMsWUFBWTt1QkFBQyxxQkFBcUI7Z0JBS2xCLEtBQUs7c0JBRHJCLFlBQVk7dUJBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQkFDS1NQQUNFLFxuICAgIENPTlRST0wsXG4gICAgRE9XTl9BUlJPVyxcbiAgICBFTlRFUixcbiAgICBFU0NBUEUsXG4gICAgTEVGVF9BUlJPVyxcbiAgICBSSUdIVF9BUlJPVyxcbiAgICBTSElGVCxcbiAgICBTUEFDRSxcbiAgICBUQUIsXG4gICAgVVBfQVJST1dcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gICAgQXV0b0NvbXBsZXRlRXZlbnQsXG4gICAgRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gICAgRm9jdXNFc2NhcGVEaXJlY3Rpb24sXG4gICAgRm9jdXNUcmFwU2VydmljZSxcbiAgICBLZXlVdGlsLFxuICAgIE51bGxhYmxlLFxuICAgIFRydW5jYXRlZFRpdGxlRGlyZWN0aXZlXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IEZvcm1JdGVtQ29udHJvbCwgcmVnaXN0ZXJGb3JtSXRlbUNvbnRyb2wgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZm9ybSc7XG5pbXBvcnQgeyBNZW51S2V5Ym9hcmRTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL21lbnUnO1xuaW1wb3J0IHsgTW9iaWxlTW9kZUNvbmZpZyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9tb2JpbGUtbW9kZSc7XG5pbXBvcnQgeyBQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3BvcG92ZXInO1xuaW1wb3J0IHsgUG9wb3ZlckZpbGxNb2RlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3NoYXJlZCc7XG5cbmltcG9ydCB7IE92ZXJsYXksIFJlcG9zaXRpb25TY3JvbGxTdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybVN0YXRlcywgU2luZ2xlRHJvcGRvd25WYWx1ZUNvbnRyb2wgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5pbXBvcnQgeyBBdXRvQ29tcGxldGVEaXJlY3RpdmUsIERpc3BsYXlGblBpcGUsIFNlYXJjaEhpZ2hsaWdodFBpcGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYnV0dG9uJztcbmltcG9ydCB7XG4gICAgQ29udGVudERlbnNpdHlNb2R1bGUsXG4gICAgQ29udGVudERlbnNpdHlPYnNlcnZlcixcbiAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuaW1wb3J0IHsgRkRfREVGQVVMVF9JQ09OX0ZPTlRfRkFNSUxZLCBJY29uQ29tcG9uZW50LCBJY29uRm9udCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9pY29uJztcbmltcG9ydCB7IElucHV0R3JvdXBDb21wb25lbnQsIElucHV0R3JvdXBJbnB1dERpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9pbnB1dC1ncm91cCc7XG5pbXBvcnQge1xuICAgIEZEX0xJU1RfTUVTU0FHRV9ESVJFQ1RJVkUsXG4gICAgTGlzdENvbXBvbmVudCxcbiAgICBMaXN0R3JvdXBIZWFkZXJEaXJlY3RpdmUsXG4gICAgTGlzdEl0ZW1Db21wb25lbnQsXG4gICAgTGlzdE1lc3NhZ2VEaXJlY3RpdmUsXG4gICAgTGlzdFRpdGxlRGlyZWN0aXZlXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9saXN0JztcbmltcG9ydCB7IFBvcG92ZXJCb2R5Q29tcG9uZW50LCBQb3BvdmVyQ29udHJvbENvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9wb3BvdmVyJztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBDb21ib2JveEl0ZW0gfSBmcm9tICcuL2NvbWJvYm94LWl0ZW0nO1xuaW1wb3J0IHsgQ29tYm9ib3hJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi9jb21ib2JveC1pdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDb21ib2JveE1vYmlsZUNvbXBvbmVudCB9IGZyb20gJy4vY29tYm9ib3gtbW9iaWxlL2NvbWJvYm94LW1vYmlsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ09NQk9CT1hfQ09NUE9ORU5ULCBDb21ib2JveEludGVyZmFjZSwgQ29tYm9ib3hJdGVtRGlyZWN0aXZlQ29udGV4dCB9IGZyb20gJy4vY29tYm9ib3guaW50ZXJmYWNlJztcbmltcG9ydCB7IEdyb3VwRnVuY3Rpb24sIExpc3RHcm91cFBpcGUgfSBmcm9tICcuL2xpc3QtZ3JvdXAucGlwZSc7XG5pbXBvcnQgeyBGRF9DT01CT0JPWF9DT01QT05FTlQgfSBmcm9tICcuL3Rva2Vucyc7XG5cbmxldCBjb21ib2JveFVuaXF1ZUlkID0gMDtcblxuLyoqXG4gKiBBbGxvd3MgdXNlcnMgdG8gZmlsdGVyIHRocm91Z2ggcmVzdWx0cyBhbmQgc2VsZWN0IGEgdmFsdWUuXG4gKlxuICogU3VwcG9ydHMgQW5ndWxhciBGb3Jtcy5cbiAqIGBgYGh0bWxcbiAqIDxmZC1jb21ib2JveFxuICogICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRlcm1cIlxuICogICAgICBbZHJvcGRvd25WYWx1ZXNdPVwiZHJvcGRvd25WYWx1ZXNcIlxuICogICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgc29tZSB0ZXh0Li4uXCI+XG4gKiA8L2ZkLWNvbWJvYm94PlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtY29tYm9ib3gnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb21ib2JveC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2NvbWJvYm94LmNvbXBvbmVudC5zY3NzJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDb21ib2JveENvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICByZWdpc3RlckZvcm1JdGVtQ29udHJvbChDb21ib2JveENvbXBvbmVudCksXG4gICAgICAgIE1lbnVLZXlib2FyZFNlcnZpY2UsXG4gICAgICAgIER5bmFtaWNDb21wb25lbnRTZXJ2aWNlLFxuICAgICAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzKCksXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZEX0NPTUJPQk9YX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBDb21ib2JveENvbXBvbmVudFxuICAgICAgICB9XG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbY2xhc3MuZmQtY29tYm9ib3gtY3VzdG9tLWNsYXNzXSc6ICd0cnVlJyxcbiAgICAgICAgJ1tjbGFzcy5mZC1jb21ib2JveC1pbnB1dF0nOiAndHJ1ZScsXG4gICAgICAgICdbY2xhc3MuZmQtY29tYm9ib3gtY3VzdG9tLWNsYXNzLS1tb2JpbGVdJzogJ21vYmlsZScsXG4gICAgICAgICdbc3R5bGUud2lkdGhdJzogJ3dpZHRoJ1xuICAgIH0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIFBvcG92ZXJDb21wb25lbnQsXG4gICAgICAgIFBvcG92ZXJDb250cm9sQ29tcG9uZW50LFxuICAgICAgICBQb3BvdmVyQm9keUNvbXBvbmVudCxcbiAgICAgICAgTGlzdENvbXBvbmVudCxcbiAgICAgICAgTGlzdEl0ZW1Db21wb25lbnQsXG4gICAgICAgIExpc3RUaXRsZURpcmVjdGl2ZSxcbiAgICAgICAgTGlzdEdyb3VwSGVhZGVyRGlyZWN0aXZlLFxuICAgICAgICBJbnB1dEdyb3VwQ29tcG9uZW50LFxuICAgICAgICBJbnB1dEdyb3VwSW5wdXREaXJlY3RpdmUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBBdXRvQ29tcGxldGVEaXJlY3RpdmUsXG4gICAgICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICAgICAgSWNvbkNvbXBvbmVudCxcbiAgICAgICAgQ29udGVudERlbnNpdHlNb2R1bGUsXG4gICAgICAgIERpc3BsYXlGblBpcGUsXG4gICAgICAgIFNlYXJjaEhpZ2hsaWdodFBpcGUsXG4gICAgICAgIEZkVHJhbnNsYXRlUGlwZSxcbiAgICAgICAgTGlzdEdyb3VwUGlwZSxcbiAgICAgICAgVHJ1bmNhdGVkVGl0bGVEaXJlY3RpdmVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIENvbWJvYm94Q29tcG9uZW50PFQgPSBhbnk+XG4gICAgaW1wbGVtZW50c1xuICAgICAgICBDb21ib2JveEludGVyZmFjZSxcbiAgICAgICAgU2luZ2xlRHJvcGRvd25WYWx1ZUNvbnRyb2wsXG4gICAgICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgICAgICBPbkluaXQsXG4gICAgICAgIE9uQ2hhbmdlcyxcbiAgICAgICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICAgICAgT25EZXN0cm95LFxuICAgICAgICBGb3JtSXRlbUNvbnRyb2xcbntcbiAgICAvKiogSWQgZm9yIHRoZSBDb21ib2JveC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbWJvYm94SWQgPSBgZmQtY29tYm9ib3gtJHtjb21ib2JveFVuaXF1ZUlkKyt9YDtcblxuICAgIC8qKiBJZCBhdHRyaWJ1dGUgZm9yIGlucHV0IGVsZW1lbnQgaW5zaWRlIENvbWJvYm94IGNvbXBvbmVudCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5wdXRJZCA9ICcnO1xuXG4gICAgLyoqIEFyaWEtbGFiZWwgZm9yIENvbWJvYm94LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIEFyaWEtTGFiZWxsZWRieSBmb3IgZWxlbWVudCBkZXNjcmliaW5nIENvbWJvYm94LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsbGVkQnk6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogSWYgaXQgaXMgbWFuZGF0b3J5IGZpZWxkICovXG4gICAgQElucHV0KClcbiAgICByZXF1aXJlZCA9IGZhbHNlO1xuXG4gICAgLyoqIFZhbHVlcyB0byBiZSBmaWx0ZXJlZCBpbiB0aGUgc2VhcmNoIGlucHV0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZHJvcGRvd25WYWx1ZXM6IFRbXSA9IFtdO1xuXG4gICAgLyoqIEZpbHRlciBmdW5jdGlvbi4gQWNjZXB0cyBhbiBhcnJheSBvZiBvYmplY3RzIGFuZCBhIHNlYXJjaCB0ZXJtIGFzIGFyZ3VtZW50c1xuICAgICAqIGFuZCByZXR1cm5zIGEgc3RyaW5nLiBTZWUgc2VhcmNoIGlucHV0IGV4YW1wbGVzIGZvciBkZXRhaWxzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmlsdGVyRm4gPSB0aGlzLl9kZWZhdWx0RmlsdGVyO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIHNlYXJjaCBpbnB1dCBpcyBkaXNhYmxlZC4gKiovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIC8qKiBQbGFjZWhvbGRlciBvZiB0aGUgc2VhcmNoIGlucHV0LiAqKi9cbiAgICBASW5wdXQoKVxuICAgIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBDb21ib2JveCBpcyBhIFNlYXJjaCBGaWVsZFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXNTZWFyY2ggPSBmYWxzZTtcblxuICAgIC8qKiBJY29uIHRvIGRpc3BsYXkgaW4gdGhlIHJpZ2h0LXNpZGUgYnV0dG9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2x5cGggPSAnbmF2aWdhdGlvbi1kb3duLWFycm93JztcblxuICAgIC8qKiBHbHlwaCBmb250IGZhbWlseSAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2x5cGhGb250OiBJY29uRm9udCA9IEZEX0RFRkFVTFRfSUNPTl9GT05UX0ZBTUlMWTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gc2hvdyB0aGUgY2xlYXIgc2VhcmNoIHRlcm0gYnV0dG9uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzaG93Q2xlYXJCdXR0b24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqICBUaGUgdHJpZ2dlciBldmVudHMgdGhhdCB3aWxsIG9wZW4vY2xvc2UgdGhlIG9wdGlvbnMgcG9wb3Zlci5cbiAgICAgKiAgQWNjZXB0cyBhbnkgW0hUTUwgRE9NIEV2ZW50c10oaHR0cHM6Ly93d3cudzNzY2hvb2xzLmNvbS9qc3JlZi9kb21fb2JqX2V2ZW50LmFzcCkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB0cmlnZ2Vyczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBjb21ib2JveCBzaG91bGQgY2xvc2UsIHdoZW4gYSBjbGljayBpcyBwZXJmb3JtZWQgb3V0c2lkZSBpdHMgYm91bmRhcmllcy4gVHJ1ZSBieSBkZWZhdWx0ICovXG4gICAgQElucHV0KClcbiAgICBjbG9zZU9uT3V0c2lkZUNsaWNrID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGNvbWJvYm94IHNob3VsZCBvcGVuLCB3aGVuIGFueSBrZXkgaXMgcHJlc3NlZCBpbiBpbnB1dCAoZXhjZXB0IEVzY2FwZSwgU3BhY2UsIEVudGVyKS4gVHJ1ZSBieSBkZWZhdWx0XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBvcGVuT25LZXlib2FyZEV2ZW50ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqICBUaGUgc3RhdGUgb2YgdGhlIGZvcm0gY29udHJvbCAtIGFwcGxpZXMgY3NzIGNsYXNzZXMuXG4gICAgICogIENhbiBiZSBgc3VjY2Vzc2AsIGBlcnJvcmAsIGB3YXJuaW5nYCwgYGluZm9ybWF0aW9uYCBvciBibGFuayBmb3IgZGVmYXVsdC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXRlPzogRm9ybVN0YXRlcztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0ZW1wbGF0ZSB3aXRoIHdoaWNoIHRvIGRpc3BsYXkgdGhlIGluZGl2aWR1YWwgbGlzdGVkIGl0ZW1zLlxuICAgICAqIFVzZSBpdCBieSBwYXNzaW5nIGFuIG5nLXRlbXBsYXRlIHdpdGggaW1wbGljaXQgY29udGVudC4gU2VlIGV4YW1wbGVzIGZvciBtb3JlIGluZm8uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPENvbWJvYm94SXRlbURpcmVjdGl2ZUNvbnRleHQ8VD4+O1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdXNlZCB0byBoYW5kbGUgZ3JvdXBpbmcgb2YgaXRlbXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBncm91cEZuOiBOdWxsYWJsZTxHcm91cEZ1bmN0aW9uPjtcblxuICAgIC8qKiBNYXggaGVpZ2h0IG9mIHRoZSBwb3BvdmVyLiBBbnkgb3ZlcmZsb3dpbmcgZWxlbWVudHMgd2lsbCBiZSBhY2Nlc3NpYmxlIHRocm91Z2ggc2Nyb2xsaW5nLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWF4SGVpZ2h0ID0gJzUwdmgnO1xuXG4gICAgLyoqIE1heCB3aWR0aCBvZiB0aGUgZHJvcGRvd24gaW4gcGl4ZWxzLiBEZWZhdWx0IGlzIDY0MHB4ICg0MHJlbSkuICovXG4gICAgQElucHV0KClcbiAgICBkcm9wRG93bk1heFdpZHRoUHggPSA2NDA7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBkcm9wZG93biBzaG91bGQgaGF2ZSBtYXggd2lkdGguXG4gICAgICogU2V0IHRvIHRydWUgaWYgeW91IHdhbnQgdGhlIGRyb3Bkb3duIHRvIHRha2UgdGhlIHdpZHRoIG9mIHRoZSBjb250cm9sLlxuICAgICAqIERlZmF1bHQgaXMgZmFsc2UgKi9cbiAgICBASW5wdXQoKVxuICAgIG5vRHJvcERvd25NYXhXaWR0aCA9IGZhbHNlO1xuXG4gICAgLyoqIEN1c3RvbSB3aWR0aCBvZiB0aGUgY29udHJvbC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHdpZHRoOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIFNlYXJjaCBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gdGhlIEVudGVyIGtleSBpcyBwcmVzc2VkIG9uIHRoZSBtYWluIGlucHV0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VhcmNoRm46ICgpID0+IHZvaWQ7XG5cbiAgICAvKiogV2hldGhlciB0aGUgbWF0Y2hpbmcgc3RyaW5nIHNob3VsZCBiZSBoaWdobGlnaHRlZCBkdXJpbmcgZmlsdHJhdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGhpZ2hsaWdodGluZyA9IHRydWU7XG5cbiAgICAvKiogV2hldGhlciB0aGUgcG9wb3ZlciBzaG91bGQgY2xvc2Ugd2hlbiBhIHVzZXIgc2VsZWN0cyBhIHJlc3VsdC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNsb3NlT25TZWxlY3QgPSB0cnVlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGlucHV0IGZpZWxkIHNob3VsZCBiZSBwb3B1bGF0ZWQgd2l0aCB0aGUgcmVzdWx0IHBpY2tlZCBieSB0aGUgdXNlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGZpbGxPblNlbGVjdCA9IHRydWU7XG5cbiAgICAvKiogV2hldGhlciB0aGUgYXV0b2NvbXBsZXRlIHNob3VsZCBiZSBlbmFibGVkOyBFbmFibGVkIGJ5IGRlZmF1bHQgKi9cbiAgICBASW5wdXQoKVxuICAgIGF1dG9Db21wbGV0ZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBQcmVzZXQgb3B0aW9ucyBmb3IgdGhlIFNlbGVjdCBib2R5IHdpZHRoLCB3aGF0ZXZlciBpcyBjaG9zZW4sIHRoZSBib2R5IGhhcyBhIDYwMHB4IGxpbWl0LlxuICAgICAqICogYGF0LWxlYXN0YCB3aWxsIGFwcGx5IGEgbWluaW11bSB3aWR0aCB0byB0aGUgYm9keSBlcXVpdmFsZW50IHRvIHRoZSB3aWR0aCBvZiB0aGUgY29udHJvbC4gLSBEZWZhdWx0XG4gICAgICogKiBgZXF1YWxgIHdpbGwgYXBwbHkgYSB3aWR0aCB0byB0aGUgYm9keSBlcXVpdmFsZW50IHRvIHRoZSB3aWR0aCBvZiB0aGUgY29udHJvbC5cbiAgICAgKiAqICdmaXQtY29udGVudCcgd2lsbCBhcHBseSB3aWR0aCBuZWVkZWQgdG8gcHJvcGVybHkgZGlzcGxheSBpdGVtcyBpbnNpZGUsIGluZGVwZW5kZW50IG9mIGNvbnRyb2wuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBmaWxsQ29udHJvbE1vZGU6IFBvcG92ZXJGaWxsTW9kZSA9ICdhdC1sZWFzdCc7XG5cbiAgICAvKiogRGVmaW5lcyBpZiBjb21ib2JveCBzaG91bGQgYmVoYXZlIHNhbWUgYXMgZHJvcGRvd24uIFdoZW4gaXQncyBlbmFibGVkIHdyaXRpbmcgaW5zaWRlIHRleHQgaW5wdXQgd29uJ3RcbiAgICAgKiB0cmlnZ2VyIG9uQ2hhbmdlIGZ1bmN0aW9uLCB1bnRpbCBpdCBtYXRjaGVzIG9uZSBvZiBkaXNwbGF5ZWQgZHJvcGRvd24gdmFsdWVzLiBBbHNvIGNvbW11bmljYXRpbmcgd2l0aCBjb21ib2JveFxuICAgICAqIGNhbiBiZSBhY2hpZXZlZCBvbmx5IGJ5IG9iamVjdHMgd2l0aCBzYW1lIHR5cGUgYXMgZHJvcGRvd25WYWx1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29tbXVuaWNhdGVCeU9iamVjdCA9IGZhbHNlO1xuXG4gICAgLyoqIERpc3BsYXkgZnVuY3Rpb24uIEFjY2VwdHMgYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlXG4gICAgICogaXRlbXMgcGFzc2VkIHRvIGRyb3Bkb3duVmFsdWVzIGFzIGFyZ3VtZW50LCBhbmQgb3V0cHV0cyBhIHN0cmluZy5cbiAgICAgKiBBbiBhcnJvdyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBhY2Nlc3MgdGhlICp0aGlzKiBrZXl3b3JkIGluIHRoZSBjYWxsaW5nIGNvbXBvbmVudC5cbiAgICAgKiBTZWUgc2VhcmNoIGlucHV0IGV4YW1wbGVzIGZvciBkZXRhaWxzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheUZuID0gdGhpcy5fZGVmYXVsdERpc3BsYXk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIEFkZE9uIEJ1dHRvbiBzaG91bGQgYmUgZm9jdXNhYmxlXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGJ1dHRvbkZvY3VzYWJsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBjbGVhciBidXR0b24gc2hvdWxkIGJlIGZvY3VzYWJsZS5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBjbGVhckJ1dHRvbkZvY3VzYWJsZSA9IHRydWU7XG5cbiAgICAvKiogV2hldGhlciB0aGUgY29tYm9ib3ggaXMgcmVhZG9ubHkuICovXG4gICAgQElucHV0KClcbiAgICByZWFkT25seSA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNvbWJvYm94IHNob3VsZCBiZSBidWlsdCBvbiBtb2JpbGUgbW9kZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlID0gZmFsc2U7XG5cbiAgICAvKiogTXVsdGkgSW5wdXQgTW9iaWxlIENvbmZpZ3VyYXRpb24sIGl0J3MgYXBwbGllZCBvbmx5LCB3aGVuIG1vYmlsZSBpcyBlbmFibGVkICovXG4gICAgQElucHV0KClcbiAgICBtb2JpbGVDb25maWc6IE1vYmlsZU1vZGVDb25maWc7XG5cbiAgICAvKiogV2hldGhlciB0byBkaXNwbGF5IHRoZSBhZGRvbiBidXR0b24uICovXG4gICAgQElucHV0KClcbiAgICBzaG93RHJvcGRvd25CdXR0b24gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byByZXR1cm4gcmVzdWx0cyB3aGVyZSB0aGUgaW5wdXQgbWF0Y2hlcyB0aGUgZW50aXJlIHN0cmluZy4gQnkgZGVmYXVsdCwgb25seSByZXN1bHRzIHRoYXQgc3RhcnRcbiAgICAgKiB3aXRoIHRoZSBpbnB1dCBzZWFyY2ggdGVybSB3aWxsIGJlIHJldHVybmVkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW5jbHVkZXMgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0b29sdGlwIGZvciB0aGUgbXVsdGktaW5wdXQgaWNvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciBsaXN0IGl0ZW0gb3B0aW9ucyBzaG91bGQgYmUgcmVuZGVyZWQgYXMgYnlsaW5lLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYnlsaW5lID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBBY3Rpb24gdG8gcGVyZm9ybSB3aGVuIHVzZXIgc2hpZnRzIGZvY3VzIGZyb20gdGhlIGRyb3Bkb3duLlxuICAgICAqIC0gYGNsb3NlYCB3aWxsIGNsb3NlIHRoZSBkcm9wZG93biBwcmVzZXJ2aW5nIHByZXZpb3VzbHkgc2VsZWN0ZWQgdmFsdWUuXG4gICAgICogLSBgY2xvc2VBbmRTZWxlY3RgIHdpbGwgY2xvc2UgdGhlIGRyb3Bkb3duIGFuZCBzZWxlY3QgbGFzdCBmb2N1c2VkIGRyb3Bkb3duIGl0ZW0uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB0YWJPdXRTdHJhdGVneTogJ2Nsb3NlJyB8ICdjbG9zZUFuZFNlbGVjdCcgPSAnY2xvc2VBbmRTZWxlY3QnO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhbiBpdGVtIGlzIGNsaWNrZWQuIFVzZSAqJGV2ZW50KiB0byByZXRyaWV2ZSBpdC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBpdGVtQ2xpY2tlZDogRXZlbnRFbWl0dGVyPENvbWJvYm94SXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyPENvbWJvYm94SXRlbT4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkLCB3aGVuIHRoZSBjb21ib2JveCdzIHBvcG92ZXIgYm9keSBpcyBvcGVuZWQgb3IgY2xvc2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgb3BlbkNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgaW5wdXQgdGV4dCBjaGFuZ2VzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGlucHV0VGV4dENoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChMaXN0Q29tcG9uZW50KVxuICAgIGxpc3RDb21wb25lbnQ6IExpc3RDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3NlYXJjaElucHV0RWxlbWVudCcpXG4gICAgc2VhcmNoSW5wdXRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKFBvcG92ZXJDb21wb25lbnQpXG4gICAgcG9wb3ZlckNvbXBvbmVudDogUG9wb3ZlckNvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChJbnB1dEdyb3VwQ29tcG9uZW50KVxuICAgIGlucHV0R3JvdXA6IElucHV0R3JvdXBDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oRkRfTElTVF9NRVNTQUdFX0RJUkVDVElWRSlcbiAgICBsaXN0TWVzc2FnZXM6IFF1ZXJ5TGlzdDxMaXN0TWVzc2FnZURpcmVjdGl2ZT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2NvbnRyb2xUZW1wbGF0ZScpXG4gICAgY29udHJvbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2xpc3RUZW1wbGF0ZScpXG4gICAgbGlzdFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoQ29tYm9ib3hJdGVtRGlyZWN0aXZlKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbWJvYm94SXRlbVJlbmRlcmVyOiBDb21ib2JveEl0ZW1EaXJlY3RpdmU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oJ2l0ZW0nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IGl0ZW1zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgICAvKiogV2hldGhlciB0aGUgbWF0Y2hpbmcgc3RyaW5nIHNob3VsZCBiZSBoaWdobGlnaHRlZCBhZnRlciBjb21ib2JveCB2YWx1ZSBpcyBzZWxlY3RlZC4gKi9cbiAgICBmaWx0ZXJIaWdobGlnaHQgPSB0cnVlO1xuXG4gICAgLyoqIEtleXMsIHRoYXQgd29uJ3QgdHJpZ2dlciB0aGUgcG9wb3ZlcidzIG9wZW4gc3RhdGUsIHdoZW4gZGlzcGF0Y2hlZCBvbiBzZWFyY2ggaW5wdXQgKi9cbiAgICByZWFkb25seSBub25PcGVuaW5nS2V5czogbnVtYmVyW10gPSBbXG4gICAgICAgIEVTQ0FQRSxcbiAgICAgICAgRU5URVIsXG4gICAgICAgIExFRlRfQVJST1csXG4gICAgICAgIFJJR0hUX0FSUk9XLFxuICAgICAgICBET1dOX0FSUk9XLFxuICAgICAgICBVUF9BUlJPVyxcbiAgICAgICAgQ09OVFJPTCxcbiAgICAgICAgVEFCLFxuICAgICAgICBTSElGVFxuICAgIF07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9yZXBvc2l0aW9uU2Nyb2xsU3RyYXRlZ3k6IFJlcG9zaXRpb25TY3JvbGxTdHJhdGVneTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX2RlZmF1bHRGb250RmFtaWx5ID0gRkRfREVGQVVMVF9JQ09OX0ZPTlRfRkFNSUxZO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNvbWJvYm94IGlzIG9wZW5lZC4gKi9cbiAgICBvcGVuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgaW5wdXQgY291cCBpcyBpbiB0aGUgc2hlbGxiYXIuIE9ubHkgZm9yIGludGVybmFsIHVzZSBieSBjb21ib2JveCBjb21wb25lbnRcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaW5TaGVsbGJhciA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBkaXNwbGF5ZWRWYWx1ZXM6IGFueVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGlucHV0VGV4dFZhbHVlID0gJyc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNsZWFySW5wdXRCdG5Gb2N1c2VkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfY3VzdG9tUmVuZGVyZXIoKTogTnVsbGFibGU8VGVtcGxhdGVSZWY8Q29tYm9ib3hJdGVtRGlyZWN0aXZlQ29udGV4dDxUPj4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbWJvYm94SXRlbVJlbmRlcmVyPy50ZW1wbGF0ZVJlZiB8fCB0aGlzLml0ZW1UZW1wbGF0ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZhbHVlOiBhbnk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9vdmVybGF5OiBPdmVybGF5LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9jZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZHluYW1pY0NvbXBvbmVudFNlcnZpY2U6IER5bmFtaWNDb21wb25lbnRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9mb2N1c1RyYXBTZXJ2aWNlOiBGb2N1c1RyYXBTZXJ2aWNlLFxuICAgICAgICByZWFkb25seSBfY29udGVudERlbnNpdHlPYnNlcnZlcjogQ29udGVudERlbnNpdHlPYnNlcnZlclxuICAgICkge1xuICAgICAgICB0aGlzLl9yZXBvc2l0aW9uU2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLl9vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbih7IGF1dG9DbG9zZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvblRvdWNoZWQgPSAoKTogdm9pZCA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICB0aGlzLnNob3dEcm9wZG93bkJ1dHRvbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JlZnJlc2hEaXNwbGF5ZWRWYWx1ZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZHJvcGRvd25WYWx1ZXMgJiYgKGNoYW5nZXMuZHJvcGRvd25WYWx1ZXMgfHwgY2hhbmdlcy5zZWFyY2hUZXJtKSkge1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaERpc3BsYXllZFZhbHVlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hZGRTaGVsbGJhckNsYXNzKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRVcE1vYmlsZU1vZGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25JbnB1dEtleWRvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50IHwgc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGV2ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKGV2ZW50ID09PSAnZnJvbVBhc3RlJykge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlSGFuZGxlKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBUQUIpICYmIHRoaXMub3Blbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3NlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEVOVEVSKSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaEZuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoRm4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBET1dOX0FSUk9XKSkge1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzZXREaXNwbGF5ZWRWYWx1ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wZW4gJiYgdGhpcy5saXN0Q29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudC5zZXRJdGVtQWN0aXZlKDApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3Blbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaG9vc2VPdGhlckl0ZW0oMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaG9vc2VPdGhlckl0ZW0oLTEpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMub3Blbk9uS2V5Ym9hcmRFdmVudCAmJlxuICAgICAgICAgICAgICAgICFldmVudC5jdHJsS2V5ICYmXG4gICAgICAgICAgICAgICAgIWV2ZW50LmFsdEtleSAmJlxuICAgICAgICAgICAgICAgICFLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgdGhpcy5ub25PcGVuaW5nS2V5cylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlSGFuZGxlKHRydWUpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRW1wdHlWYWx1ZSAmJiBLZXlVdGlsLmlzS2V5VHlwZShldmVudCwgJ2NvbnRyb2wnKSAmJiAhS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEJBQ0tTUEFDRSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0Q29tcG9uZW50LnNldEl0ZW1BY3RpdmUoMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkl0ZW1LZXlEb3duSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCwgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEVOVEVSKSB8fCBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgU1BBQ0UpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5vbk1lbnVDbGlja0hhbmRsZXIodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbk1lbnVDbGlja0hhbmRsZXIodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodmFsdWUgfHwgdmFsdWUgPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSB0aGlzLmRyb3Bkb3duVmFsdWVzLmZpbmRJbmRleCgoX3ZhbHVlKSA9PiBfdmFsdWUgPT09IHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZUNsaWNrQWN0aW9ucyh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckhpZ2hsaWdodCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5pdGVtQ2xpY2tlZC5lbWl0KHsgaXRlbTogdmFsdWUsIGluZGV4IH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEhhbmRsZSBkaWFsb2cgZGlzbWlzc2luZywgY2xvc2VzIHBvcG92ZXIgYW5kIHNldHMgYmFja3VwIGRhdGEuICovXG4gICAgZGlhbG9nRGlzbWlzcyh0ZXJtOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnB1dFRleHQgPSB0aGlzLmRpc3BsYXlGbih0ZXJtKTtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSh0ZXJtKTtcbiAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUoZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKiBIYW5kbGUgZGlhbG9nIGFwcHJvdmFsLCBjbG9zZXMgcG9wb3ZlciBhbmQgcHJvcGFnYXRlcyBkYXRhIGNoYW5nZXMuICovXG4gICAgZGlhbG9nQXBwcm92ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlKCk7XG4gICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlSGFuZGxlKGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKiogSWYgdHJ1ZSB2YWx1ZSBlbXB0eSAqL1xuICAgIGdldCBpc0VtcHR5VmFsdWUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pbnB1dFRleHQgfHwgdGhpcy5pbnB1dFRleHQ/LnRyaW0oKS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgLyoqIElucHV0IHRleHQgb2YgdGhlIGlucHV0LiAqL1xuICAgIHNldCBpbnB1dFRleHQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLmlucHV0VGV4dFZhbHVlID0gdmFsdWU7XG4gICAgICAgIGlmICghdGhpcy5jb21tdW5pY2F0ZUJ5T2JqZWN0KSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0Q2hhbmdlLmVtaXQodmFsdWUpO1xuICAgICAgICBpZiAoIXRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICB0aGlzLl9wcm9wYWdhdGVDaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgaW5wdXRUZXh0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0VGV4dFZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBHZXQgdGhlIGdseXBoIHZhbHVlIGJhc2VkIG9uIHdoZXRoZXIgdGhlIGNvbWJvYm94IGlzIHVzZWQgYXMgYSBzZWFyY2ggZmllbGQgb3Igbm90LiAqL1xuICAgIGdldCBnbHlwaFZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2VhcmNoID8gJ3NlYXJjaCcgOiB0aGlzLmdseXBoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2hhbmRsZUNsZWFyU2VhcmNoVGVybSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnB1dFRleHRWYWx1ZSA9ICcnO1xuICAgICAgICB0aGlzLmlucHV0VGV4dENoYW5nZS5lbWl0KCcnKTtcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRWYWx1ZXMgPSB0aGlzLmRyb3Bkb3duVmFsdWVzIHx8IFtdO1xuICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIGlmICghdGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb3BhZ2F0ZUNoYW5nZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0VGV4dFZhbHVlID0gdGhpcy5kaXNwbGF5Rm4odmFsdWUpO1xuICAgICAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgcGFzc2VkIHRvIGxpc3QgY29tcG9uZW50ICovXG4gICAgaGFuZGxlTGlzdEZvY3VzRXNjYXBlKGRpcmVjdGlvbjogRm9jdXNFc2NhcGVEaXJlY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3VwJykge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVTZWFyY2hUZXJtQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc3BsYXllZFZhbHVlcyA9IHRoaXMuZmlsdGVyRm4odGhpcy5kcm9wZG93blZhbHVlcywgdGhpcy5pbnB1dFRleHQpO1xuICAgICAgICB0aGlzLnBvcG92ZXJDb21wb25lbnQ/LnJlZnJlc2hQb3NpdGlvbigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25QcmltYXJ5QnV0dG9uQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIC8vIFByZXZlbnQgcHJpbWFyeSBidXR0b24gY2xpY2sgYmVoYXZpb3VyIG9uIG1vYmlsZXNcbiAgICAgICAgaWYgKHRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZWFyY2hGbikge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hGbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Jlc2V0RGlzcGxheWVkVmFsdWVzKCk7XG4gICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlSGFuZGxlKCF0aGlzLm9wZW4pO1xuICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIHRoaXMuZmlsdGVySGlnaGxpZ2h0ID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLm9wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGlzT3BlbkNoYW5nZUhhbmRsZShpc09wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgLyoqIFJlc2V0IGRpc3BsYXllZCB2YWx1ZXMgb24gZXZlcnkgbW9iaWxlIG9wZW4gKi9cbiAgICAgICAgaWYgKHRoaXMubW9iaWxlICYmICF0aGlzLm9wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0RGlzcGxheWVkVmFsdWVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3BlbiAhPT0gaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4gPSBpc09wZW47XG4gICAgICAgICAgICB0aGlzLm9wZW5DaGFuZ2UuZW1pdChpc09wZW4pO1xuXG4gICAgICAgICAgICAvKiogQWxsb3cgY29tYm9ib3ggdXAgYW5kIGRvd24gYXJyb3dzIHRvIHdvcmsgcHJvcGVybHkgd2hlbiBjb21ib2JveCBpcyBpbnNpZGUgYSBkaWFsb2cgd2l0aCBhIHRyYXBwZWQgZm9jdXMgKi9cbiAgICAgICAgICAgIGlmICh0aGlzLm9wZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c1RyYXBTZXJ2aWNlLnBhdXNlQ3VycmVudEZvY3VzVHJhcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c1RyYXBTZXJ2aWNlLnVucGF1c2VDdXJyZW50Rm9jdXNUcmFwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMub3BlbiAmJiAhdGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQmx1cigpO1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgaGFuZGxlcyBjb21wbGV0ZSBldmVudCBmcm9tIGF1dG8gY29tcGxldGUgZGlyZWN0aXZlLCBzZXR0aW5nIHRoZSBuZXcgdmFsdWUsIGFuZCBjbG9zaW5nIHBvcG92ZXIgKi9cbiAgICBoYW5kbGVBdXRvQ29tcGxldGUoZXZlbnQ6IEF1dG9Db21wbGV0ZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0VGV4dCAhPT0gZXZlbnQudGVybSkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFRleHQgPSBldmVudC50ZXJtO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVTZWFyY2hUZXJtQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmZvcmNlQ2xvc2UgJiYgdGhpcy5pbnB1dFRleHQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlSGFuZGxlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlQmx1cigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUF1dG9Db21wbGV0ZSh7XG4gICAgICAgICAgICAgICAgdGVybTogdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSxcbiAgICAgICAgICAgICAgICBmb3JjZUNsb3NlOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNsZWFySW5wdXRCdG5Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhcklucHV0QnRuRm9jdXNlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjbGVhcklucHV0QnRuQmx1cigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhcklucHV0QnRuRm9jdXNlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBDdXJyZW50IHNlbGVjdCB2YWx1ZSAqL1xuICAgIGdldFZhbHVlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnB1dFRleHQgPSB0aGlzLl92YWx1ZSA/IHRoaXMuaW5wdXRUZXh0IDogJyc7XG4gICAgICAgIGlmICh0aGlzLnRhYk91dFN0cmF0ZWd5ID09PSAnY2xvc2VBbmRTZWxlY3QnKSB7XG4gICAgICAgICAgICBjb25zdCBmb2N1c2VkSXRlbSA9IHRoaXMubGlzdENvbXBvbmVudC5nZXRBY3RpdmVJdGVtKCk7XG4gICAgICAgICAgICBpZiAoZm9jdXNlZEl0ZW0gJiYgIXRoaXMuaW5wdXRUZXh0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFuZGxlQ2xpY2tBY3Rpb25zKGZvY3VzZWRJdGVtLnZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUoZmFsc2UpO1xuICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBpc1NlbGVjdGVkKHRlcm06IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB0ZXJtVmFsdWUgPSB0aGlzLmNvbW11bmljYXRlQnlPYmplY3QgPyB0ZXJtIDogdGhpcy5kaXNwbGF5Rm4odGVybSk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlKCkgPT09IHRlcm1WYWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9nZXRHcm91cEl0ZW1JZHMoZ3JvdXBJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLml0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdyb3VwSXRlbUlkcyA9IHRoaXMuaXRlbXNcbiAgICAgICAgICAgIC5maWx0ZXIoKGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWRXaXRoR3JvdXAgPSBlbC5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQtd2l0aC1ncm91cC1pbmRleCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwSWR4ID0gaWRXaXRoR3JvdXAuc3BsaXQoJy0nKVtpZFdpdGhHcm91cC5zcGxpdCgnLScpLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIHJldHVybiBncm91cElkeCA9PT0gU3RyaW5nKGdyb3VwSW5kZXgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5tYXAoKGVsKSA9PiBlbC5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKSk7XG5cbiAgICAgICAgcmV0dXJuIGdyb3VwSXRlbUlkcz8uam9pbignICcpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCBwaWNrcyBvdGhlciB2YWx1ZSBtb3ZlZCBmcm9tIGN1cnJlbnQgb25lIGJ5IG9mZnNldCwgY2FsbGVkIG9ubHkgd2hlbiBjb21ib2JveCBpcyBjbG9zZWQgKi9cbiAgICBwcml2YXRlIF9jaG9vc2VPdGhlckl0ZW0ob2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYWN0aXZlVmFsdWU6IGFueSA9IHRoaXMuX2dldE9wdGlvbk9iamVjdEJ5RGlzcGxheWVkVmFsdWUodGhpcy5pbnB1dFRleHRWYWx1ZSlbMF07XG4gICAgICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSB0aGlzLmRyb3Bkb3duVmFsdWVzLmZpbmRJbmRleCgodmFsdWUpID0+IHZhbHVlID09PSBhY3RpdmVWYWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLmRyb3Bkb3duVmFsdWVzW2luZGV4ICsgb2Zmc2V0XSkge1xuICAgICAgICAgICAgdGhpcy5vbk1lbnVDbGlja0hhbmRsZXIodGhpcy5kcm9wZG93blZhbHVlc1tpbmRleCArIG9mZnNldF0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHJlc2V0IGZpbHRlcmluZyBmb3IgZGlzcGxheWVkIHZhbHVlcy4gSXQgb3ZlcnJpZGVzIGRpc3BsYXllZCB2YWx1ZXMgYnkgYWxsIHBvc3NpYmxlIGRyb3Bkb3duIHZhbHVlcyAqL1xuICAgIHByaXZhdGUgX3Jlc2V0RGlzcGxheWVkVmFsdWVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc3BsYXllZFZhbHVlcyA9IHRoaXMuZHJvcGRvd25WYWx1ZXMgfHwgW107XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hZGRTaGVsbGJhckNsYXNzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pblNoZWxsYmFyKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2ZkLXNoZWxsYmFyX19pbnB1dC1ncm91cC1pbnB1dCcpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRHcm91cCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRHcm91cC5zZXRJblNoZWxsYmFyKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kZWZhdWx0RGlzcGxheShzdHI6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHtzdHJ9YDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RlZmF1bHRGaWx0ZXIoY29udGVudEFycmF5OiBhbnlbXSwgc2VhcmNoVGVybTogYW55KTogYW55W10ge1xuICAgICAgICB0aGlzLmZpbHRlckhpZ2hsaWdodCA9IHRydWU7XG4gICAgICAgIGlmICh0eXBlb2Ygc2VhcmNoVGVybSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaExvd2VyID0gc2VhcmNoVGVybS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnRBcnJheS5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXJtID0gdGhpcy5kaXNwbGF5Rm4oaXRlbSkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5jbHVkZXMgPyB0ZXJtLmluY2x1ZGVzKHNlYXJjaExvd2VyKSA6IHRlcm0uc3RhcnRzV2l0aChzZWFyY2hMb3dlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNlYXJjaFRlcm0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udGVudEFycmF5LmZpbHRlcigoaXRlbSkgPT4gaXRlbSA9PT0gc2VhcmNoVGVybSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRlbnRBcnJheSB8fCBbXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2hhbmRsZUNsaWNrQWN0aW9ucyh0ZXJtOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbGxPblNlbGVjdCkge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSh0ZXJtKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRUZXh0ID0gdGhpcy5kaXNwbGF5Rm4odGVybSk7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5pbnB1dFRleHQ7XG4gICAgICAgICAgICB0aGlzLl9jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Byb3BhZ2F0ZUNoYW5nZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFuZGxlU2VhcmNoVGVybUNoYW5nZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0T3B0aW9uT2JqZWN0QnlEaXNwbGF5ZWRWYWx1ZShkaXNwbGF5VmFsdWU6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRyb3Bkb3duVmFsdWVzLmZpbHRlcigodmFsdWUpID0+IHRoaXMuZGlzcGxheUZuKHZhbHVlKSA9PT0gZGlzcGxheVZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JlZnJlc2hEaXNwbGF5ZWRWYWx1ZXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0VGV4dCkge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRWYWx1ZXMgPSB0aGlzLmZpbHRlckZuKHRoaXMuZHJvcGRvd25WYWx1ZXMsIHRoaXMuaW5wdXRUZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheWVkVmFsdWVzID0gdGhpcy5kcm9wZG93blZhbHVlcyB8fCBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcHJvcGFnYXRlQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb21tdW5pY2F0ZUJ5T2JqZWN0KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLl9nZXRPcHRpb25PYmplY3RCeURpc3BsYXllZFZhbHVlKHRoaXMuaW5wdXRUZXh0KTtcbiAgICAgICAgICAgIC8vIERvIG5vdCBzZXQgbmV3IHZhbHVlIGlmIHRoZXJlcyBtdWx0aXBsZSBpdGVtcyB0aGF0IGhhdmUgc2FtZSBsYWJlbC5cbiAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAxICYmIHRoaXMuZGlzcGxheUZuKHZhbHVlc1swXSkgIT09IHRoaXMuZGlzcGxheUZuKHRoaXMuZ2V0VmFsdWUoKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKHZhbHVlc1swXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKHRoaXMuaW5wdXRUZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRoaXNWYWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpc1ZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpc1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5pbnB1dFRleHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHNldFZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29tbXVuaWNhdGVCeU9iamVjdCkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5kaXNwbGF5Rm4odmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRVcE1vYmlsZU1vZGUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgICAgICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogQ09NQk9CT1hfQ09NUE9ORU5ULCB1c2VWYWx1ZTogdGhpcyB9XSxcbiAgICAgICAgICAgIHBhcmVudDogdGhpcy5faW5qZWN0b3JcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuY3JlYXRlRHluYW1pY0NvbXBvbmVudChcbiAgICAgICAgICAgIHsgbGlzdFRlbXBsYXRlOiB0aGlzLmxpc3RUZW1wbGF0ZSwgY29udHJvbFRlbXBsYXRlOiB0aGlzLmNvbnRyb2xUZW1wbGF0ZSB9LFxuICAgICAgICAgICAgQ29tYm9ib3hNb2JpbGVDb21wb25lbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyUmVmOiB0aGlzLl92aWV3Q29udGFpbmVyUmVmXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGluamVjdG9yXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm1vYmlsZSA/IG1vYmlsZVRlbXBsYXRlIDogZGVza3RvcFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZGVza3RvcFRlbXBsYXRlPlxuICAgIDxmZC1wb3BvdmVyXG4gICAgICAgIGFkZGl0aW9uYWxCb2R5Q2xhc3M9XCJmZC1wb3BvdmVyLWN1c3RvbS1saXN0XCJcbiAgICAgICAgW2NsYXNzLmZkLWNvbWJvYm94LWZ1bGwtd2lkdGhdPVwiaXNTZWFyY2ggfHwgc2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgICAgW2lzT3Blbl09XCJvcGVuICYmIGRpc3BsYXllZFZhbHVlcyAmJiBkaXNwbGF5ZWRWYWx1ZXMubGVuZ3RoID4gMFwiXG4gICAgICAgIChpc09wZW5DaGFuZ2UpPVwiaXNPcGVuQ2hhbmdlSGFuZGxlKCRldmVudClcIlxuICAgICAgICBbZmlsbENvbnRyb2xNb2RlXT1cImZpbGxDb250cm9sTW9kZVwiXG4gICAgICAgIFtzY3JvbGxTdHJhdGVneV09XCJfcmVwb3NpdGlvblNjcm9sbFN0cmF0ZWd5XCJcbiAgICAgICAgW2ZvY3VzVHJhcHBlZF09XCJ0cnVlXCJcbiAgICAgICAgW3RyaWdnZXJzXT1cInRyaWdnZXJzXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRPbmx5XCJcbiAgICAgICAgW21heFdpZHRoXT1cIiFtb2JpbGUgJiYgbm9Ecm9wRG93bk1heFdpZHRoID8gbnVsbCA6IGRyb3BEb3duTWF4V2lkdGhQeFwiXG4gICAgICAgIFtzdHlsZS53aWR0aF09XCJ3aWR0aCAmJiAnMTAwJSdcIlxuICAgICAgICBbY2xvc2VPbk91dHNpZGVDbGlja109XCJjbG9zZU9uT3V0c2lkZUNsaWNrXCJcbiAgICA+XG4gICAgICAgIDxmZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udHJvbFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgIDxmZC1wb3BvdmVyLWJvZHkgW2hpZGRlbl09XCIhZGlzcGxheWVkVmFsdWVzLmxlbmd0aFwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpc3RUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZmQtcG9wb3Zlci1ib2R5PlxuICAgIDwvZmQtcG9wb3Zlcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgbGV0LXRlcm09XCJ0ZXJtXCIgI2l0ZW1Tb3VyY2U+XG4gICAgQGlmICghX2N1c3RvbVJlbmRlcmVyKSB7XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICBmZC1saXN0LXRpdGxlXG4gICAgICAgICAgICBmZFRydW5jYXRlZFRpdGxlXG4gICAgICAgICAgICBbaW5uZXJIVE1MXT1cInRlcm0gfCBkaXNwbGF5Rm5QaXBlOiBkaXNwbGF5Rm4gfCBoaWdobGlnaHQ6IGlucHV0VGV4dCA6IGhpZ2hsaWdodGluZyAmJiBmaWx0ZXJIaWdobGlnaHRcIlxuICAgICAgICA+XG4gICAgICAgIDwvc3Bhbj5cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfY3VzdG9tUmVuZGVyZXJcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiB0ZXJtLCBpbnB1dFRleHQ6IGlucHV0VGV4dCB9XCJcbiAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbW9iaWxlVGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRyb2xUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNjb250cm9sVGVtcGxhdGU+XG4gICAgPGZkLWlucHV0LWdyb3VwXG4gICAgICAgIFtidXR0b25dPVwic2hvd0Ryb3Bkb3duQnV0dG9uXCJcbiAgICAgICAgW2dseXBoXT1cInNob3dEcm9wZG93bkJ1dHRvbiA/IGdseXBoVmFsdWUgOiBudWxsXCJcbiAgICAgICAgW2dseXBoRm9udF09XCJpc1NlYXJjaCA/IF9kZWZhdWx0Rm9udEZhbWlseSA6IGdseXBoRm9udFwiXG4gICAgICAgIFtzdGF0ZV09XCJzdGF0ZVwiXG4gICAgICAgIFtidXR0b25Gb2N1c2FibGVdPVwiYnV0dG9uRm9jdXNhYmxlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRPbmx5XCJcbiAgICAgICAgW2lzQ29udHJvbF09XCJ0cnVlXCJcbiAgICAgICAgW2lzRXhwYW5kZWRdPVwiIW1vYmlsZSAmJiBvcGVuICYmIGRpc3BsYXllZFZhbHVlcy5sZW5ndGggPiAwXCJcbiAgICAgICAgW3Nob3dGb2N1c109XCIhY2xlYXJJbnB1dEJ0bkZvY3VzZWRcIlxuICAgICAgICBbZ2x5cGhBcmlhTGFiZWxdPVwiYXJpYUxhYmVsIHx8ICgncGxhdGZvcm1NdWx0aUNvbWJvYm94LmlucHV0R2x5cGhBcmlhTGFiZWwnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgW2ljb25UaXRsZV09XCJ0aXRsZSB8fCAoJ3BsYXRmb3JtTXVsdGlDb21ib2JveC5pbnB1dEdseXBoQXJpYUxhYmVsJyB8IGZkVHJhbnNsYXRlKVwiXG4gICAgICAgIChhZGRPbkJ1dHRvbkNsaWNrZWQpPVwib25QcmltYXJ5QnV0dG9uQ2xpY2soKVwiXG4gICAgICAgIChjbGljayk9XCJtb2JpbGUgJiYgaXNPcGVuQ2hhbmdlSGFuZGxlKHRydWUpXCJcbiAgICA+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI3NlYXJjaElucHV0RWxlbWVudFxuICAgICAgICAgICAgZmRrQXV0b0NvbXBsZXRlXG4gICAgICAgICAgICBmZC1pbnB1dC1ncm91cC1pbnB1dFxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgcm9sZT1cImNvbWJvYm94XCJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJjb21ib2JveElkICsgJy1saXN0LXJlc3VsdHMnXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtYXV0b2NvbXBsZXRlXT1cImF1dG9Db21wbGV0ZSAmJiAhbW9iaWxlID8gJ2xpc3QnIDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLW93bnNdPVwiYXV0b0NvbXBsZXRlICYmICFtb2JpbGUgPyBjb21ib2JveElkICsgJy1yZXN1bHQnIDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cImF1dG9Db21wbGV0ZSAmJiAhbW9iaWxlXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiIW1vYmlsZSAmJiBvcGVuICYmIGRpc3BsYXllZFZhbHVlcy5sZW5ndGhcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJyZWFkT25seSB8fCBkaXNhYmxlZCA/IC0xIDogbnVsbFwiXG4gICAgICAgICAgICBbZW5hYmxlXT1cImF1dG9Db21wbGV0ZSAmJiAhbW9iaWxlXCJcbiAgICAgICAgICAgIFtkaXNwbGF5Rm5dPVwiZGlzcGxheUZuXCJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cImRyb3Bkb3duVmFsdWVzXCJcbiAgICAgICAgICAgIFtpbnB1dFRleHRdPVwiaW5wdXRUZXh0XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZE9ubHlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1yZWFkb25seV09XCJyZWFkT25seVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgW2lkXT1cImlucHV0SWRcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpbnB1dFRleHRcIlxuICAgICAgICAgICAgKG9uQ29tcGxldGUpPVwiaGFuZGxlQXV0b0NvbXBsZXRlKCRldmVudClcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwib25JbnB1dEtleWRvd25IYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgKHBhc3RlKT1cIm9uSW5wdXRLZXlkb3duSGFuZGxlcignZnJvbVBhc3RlJylcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiaGFuZGxlU2VhcmNoVGVybUNoYW5nZSgpXCJcbiAgICAgICAgICAgIChibHVyKT1cImhhbmRsZUJsdXIoKVwiXG4gICAgICAgIC8+XG4gICAgICAgIEBpZiAoKGlzU2VhcmNoIHx8IHNob3dDbGVhckJ1dHRvbikgJiYgaW5wdXRUZXh0ICYmIGlucHV0VGV4dC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtaW5wdXQtZ3JvdXBfX2FkZG9uIGZkLWlucHV0LWdyb3VwX19hZGRvbi0tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZmQtc2hlbGxiYXJfX2lucHV0LWdyb3VwLWFkZG9uXT1cImluU2hlbGxiYXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtaW5wdXQtZ3JvdXBfX2J1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBbZmRUeXBlXT1cImluU2hlbGxiYXIgPyAnc3RhbmRhcmQnIDogJ3RyYW5zcGFyZW50J1wiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQ2xlYXIgaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmQtc2hlbGxiYXJfX2J1dHRvbl09XCJpblNoZWxsYmFyXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiY2xlYXJCdXR0b25Gb2N1c2FibGUgPyAwIDogLTFcIlxuICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwiY2xlYXJJbnB1dEJ0bkZvY3VzKClcIlxuICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJjbGVhcklucHV0QnRuQmx1cigpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9oYW5kbGVDbGVhclNlYXJjaFRlcm0oKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZmQtaWNvbiBnbHlwaD1cImRlY2xpbmVcIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIH1cbiAgICA8L2ZkLWlucHV0LWdyb3VwPlxuICAgIDxkaXYgW2lkXT1cImNvbWJvYm94SWQgKyAnLWxpc3QtcmVzdWx0cydcIiBjbGFzcz1cImZkLWNvbWJvYm94LWNvdW50LWxpc3QtcmVzdWx0c1wiPlxuICAgICAgICB7eyBkaXNwbGF5ZWRWYWx1ZXMubGVuZ3RoIHx8IDAgfX0gcmVzdWx0IGxpc3QgaXRlbXNcbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2xpc3RUZW1wbGF0ZT5cbiAgICA8dWxcbiAgICAgICAgZmQtbGlzdFxuICAgICAgICBjbGFzcz1cImZkLWNvbWJvYm94LWN1c3RvbS1saXN0XCJcbiAgICAgICAgW2Ryb3Bkb3duTW9kZV09XCJ0cnVlXCJcbiAgICAgICAgW2lkXT1cImNvbWJvYm94SWQgKyAnLXJlc3VsdCdcIlxuICAgICAgICByb2xlPVwibGlzdGJveFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJjb21ib2JveElkICsgJy1zZWFyY2gnXCJcbiAgICAgICAgW3N0eWxlLm1heEhlaWdodF09XCIhbW9iaWxlICYmIG1heEhlaWdodFwiXG4gICAgICAgIFtoYXNNZXNzYWdlXT1cImxpc3RNZXNzYWdlcyAmJiBsaXN0TWVzc2FnZXMubGVuZ3RoID4gMFwiXG4gICAgICAgIFtieWxpbmVdPVwiYnlsaW5lXCJcbiAgICAgICAgW3RhYmluZGV4XT1cIjBcIlxuICAgICAgICAoa2V5ZG93bi50YWIpPVwiX2Nsb3NlKClcIlxuICAgICAgICAoa2V5ZG93bi5zaGlmdC50YWIpPVwiX2Nsb3NlKClcIlxuICAgICAgICAoZm9jdXNFc2NhcGVMaXN0KT1cImhhbmRsZUxpc3RGb2N1c0VzY2FwZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgQGlmIChncm91cEZuKSB7XG4gICAgICAgICAgICBAZm9yIChncm91cCBvZiBkaXNwbGF5ZWRWYWx1ZXMgfCBsaXN0R3JvdXBQaXBlOiBncm91cEZuOyB0cmFjayBncm91cC5rZXk7IGxldCBncm91cEluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgIGZkLWxpc3QtaXRlbVxuICAgICAgICAgICAgICAgICAgICBmZC1saXN0LWdyb3VwLWhlYWRlclxuICAgICAgICAgICAgICAgICAgICBhcmlhUm9sZT1cImdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1yb2xlZGVzY3JpcHRpb25dPVwiJ2NvcmVNdWx0aUNvbWJvQm94Lmxpc3RHcm91cEhlYWRlcicgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtb3duc109XCJfZ2V0R3JvdXBJdGVtSWRzKGdyb3VwSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJncm91cC5rZXlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZmQtbGlzdC10aXRsZT57eyBncm91cC5rZXkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICBAZm9yICh0ZXJtIG9mIGdyb3VwLnZhbHVlOyB0cmFjayB0ZXJtOyBsZXQgaW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgICAgICBmZC1saXN0LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICNpdGVtPVwiZmRMaXN0SXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhUm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXBsYWNlaG9sZGVyXT1cImdyb3VwLmtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNldHNpemVdPVwiZ3JvdXAudmFsdWUubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcG9zaW5zZXRdPVwiaW5kZXggKyAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmlkLXdpdGgtZ3JvdXAtaW5kZXhdPVwiaXRlbS5pZCArICctZ3JvdXAtJyArIGdyb3VwSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jb21ib2JveC1saXN0LWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImlzU2VsZWN0ZWQodGVybSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRlcm1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25JdGVtS2V5RG93bkhhbmRsZXIoJGV2ZW50LCB0ZXJtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25NZW51Q2xpY2tIYW5kbGVyKHRlcm0pXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVNvdXJjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgdGVybTogdGVybSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICBAZm9yICh0ZXJtIG9mIGRpc3BsYXllZFZhbHVlczsgdHJhY2sgdGVybSkge1xuICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICBmZC1saXN0LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jb21ib2JveC1saXN0LWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZCh0ZXJtKVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uSXRlbUtleURvd25IYW5kbGVyKCRldmVudCwgdGVybSlcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25NZW51Q2xpY2tIYW5kbGVyKHRlcm0pXCJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRlcm1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtU291cmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHRlcm06IHRlcm0gfVwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICA8L3VsPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==","import { NgModule } from '@angular/core';\nimport { ComboboxItemDirective } from './combobox-item.directive';\nimport { ComboboxComponent } from './combobox.component';\nimport { ListGroupPipe } from './list-group.pipe';\nimport * as i0 from \"@angular/core\";\n/**\n * @deprecated\n * Use `ComboboxComponent` import instead.\n */\nexport class ComboboxModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxModule, imports: [ComboboxComponent, ComboboxItemDirective, ListGroupPipe], exports: [ComboboxComponent, ComboboxItemDirective, ListGroupPipe] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxModule, imports: [ComboboxComponent] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [ComboboxComponent, ComboboxItemDirective, ListGroupPipe],\n exports: [ComboboxComponent, ComboboxItemDirective, ListGroupPipe]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3gubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NvbWJvYm94L2NvbWJvYm94Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFFbEQ7OztHQUdHO0FBS0gsTUFBTSxPQUFPLGNBQWM7OEdBQWQsY0FBYzsrR0FBZCxjQUFjLFlBSGIsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxhQUN2RCxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxhQUFhOytHQUV4RCxjQUFjLFlBSGIsaUJBQWlCOzsyRkFHbEIsY0FBYztrQkFKMUIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxhQUFhLENBQUM7b0JBQ2xFLE9BQU8sRUFBRSxDQUFDLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLGFBQWEsQ0FBQztpQkFDckUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tYm9ib3hJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi9jb21ib2JveC1pdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDb21ib2JveENvbXBvbmVudCB9IGZyb20gJy4vY29tYm9ib3guY29tcG9uZW50JztcbmltcG9ydCB7IExpc3RHcm91cFBpcGUgfSBmcm9tICcuL2xpc3QtZ3JvdXAucGlwZSc7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIFVzZSBgQ29tYm9ib3hDb21wb25lbnRgIGltcG9ydCBpbnN0ZWFkLlxuICovXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtDb21ib2JveENvbXBvbmVudCwgQ29tYm9ib3hJdGVtRGlyZWN0aXZlLCBMaXN0R3JvdXBQaXBlXSxcbiAgICBleHBvcnRzOiBbQ29tYm9ib3hDb21wb25lbnQsIENvbWJvYm94SXRlbURpcmVjdGl2ZSwgTGlzdEdyb3VwUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgQ29tYm9ib3hNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZGFtZW50YWwtbmd4LWNvcmUtY29tYm9ib3guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvY29tYm9ib3gvZnVuZGFtZW50YWwtbmd4LWNvcmUtY29tYm9ib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fundamental-ngx-core-combobox.mjs","sources":["../tmp-esm2022/combobox/combobox-item.directive.js","../tmp-esm2022/combobox/combobox.interface.js","../tmp-esm2022/combobox/combobox-mobile/combobox-mobile.component.js","../tmp-esm2022/combobox/list-group.pipe.js","../tmp-esm2022/combobox/tokens.js","../tmp-esm2022/combobox/combobox.component.js","../tmp-esm2022/combobox/combobox.module.js","../tmp-esm2022/combobox/fundamental-ngx-core-combobox.js"],"sourcesContent":["import { Directive, Input, TemplateRef, inject } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class ComboboxItemDirective {\n constructor() {\n /** Template reference. */\n this.templateRef = inject((TemplateRef));\n }\n /** @hidden */\n static ngTemplateContextGuard(dir, ctx) {\n return true;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.1.4\", type: ComboboxItemDirective, isStandalone: true, selector: \"[fdComboboxItem]\", inputs: { fdComboboxItemUse: \"fdComboboxItemUse\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxItemDirective, decorators: [{\n type: Directive,\n args: [{\n selector: '[fdComboboxItem]',\n standalone: true\n }]\n }], propDecorators: { fdComboboxItemUse: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3gtaXRlbS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvY29tYm9ib3gvY29tYm9ib3gtaXRlbS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFPdEUsTUFBTSxPQUFPLHFCQUFxQjtJQUpsQztRQVlJLDBCQUEwQjtRQUMxQixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxDQUFBLFdBQTRDLENBQUEsQ0FBQyxDQUFDO0tBU3RFO0lBUEcsY0FBYztJQUNkLE1BQU0sQ0FBQyxzQkFBc0IsQ0FDekIsR0FBNkIsRUFDN0IsR0FBb0M7UUFFcEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzs4R0FqQlEscUJBQXFCO2tHQUFyQixxQkFBcUI7OzJGQUFyQixxQkFBcUI7a0JBSmpDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsVUFBVSxFQUFFLElBQUk7aUJBQ25COzhCQU9HLGlCQUFpQjtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIFRlbXBsYXRlUmVmLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbWJvYm94SXRlbURpcmVjdGl2ZUNvbnRleHQgfSBmcm9tICcuL2NvbWJvYm94LmludGVyZmFjZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2ZkQ29tYm9ib3hJdGVtXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBDb21ib2JveEl0ZW1EaXJlY3RpdmU8VCA9IHVua25vd24+IHtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVXNlZCBmb3IgdHlwZSBzdXBwb3J0LlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmRDb21ib2JveEl0ZW1Vc2U6IFQ7XG5cbiAgICAvKiogVGVtcGxhdGUgcmVmZXJlbmNlLiAqL1xuICAgIHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmPENvbWJvYm94SXRlbURpcmVjdGl2ZUNvbnRleHQ8VD4+KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQ8VD4oXG4gICAgICAgIGRpcjogQ29tYm9ib3hJdGVtRGlyZWN0aXZlPFQ+LFxuICAgICAgICBjdHg6IENvbWJvYm94SXRlbURpcmVjdGl2ZUNvbnRleHQ8VD5cbiAgICApOiBjdHggaXMgQ29tYm9ib3hJdGVtRGlyZWN0aXZlQ29udGV4dDxUPiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbiJdfQ==","import { InjectionToken } from '@angular/core';\nexport const COMBOBOX_COMPONENT = new InjectionToken('ComboboxInterface');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NvbWJvYm94L2NvbWJvYm94LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc3RCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGNBQWMsQ0FBVyxtQkFBbUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9iaWxlTW9kZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9tb2JpbGUtbW9kZSc7XG5cbmV4cG9ydCBjb25zdCBDT01CT0JPWF9DT01QT05FTlQgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nW10+KCdDb21ib2JveEludGVyZmFjZScpO1xuXG4vKipcbiAqIENvbWJvYm94IEludGVyZmFjZSB0byBoYXZlIHR5cGluZyBhbmQgYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuXG4gKiBDb21ib2JveENvbXBvbmVudCA8PT0+IENvbWJvYm94TW9iaWxlQ29tcG9uZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYm9ib3hJbnRlcmZhY2UgZXh0ZW5kcyBNb2JpbGVNb2RlIHtcbiAgICBpbnB1dFRleHQ6IHN0cmluZztcbiAgICBvcGVuQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj47XG4gICAgaW5TaGVsbGJhcjogYm9vbGVhbjtcblxuICAgIGdldFZhbHVlKCk6IGFueTtcbiAgICBkaWFsb2dBcHByb3ZlKCk6IHZvaWQ7XG4gICAgZGlhbG9nRGlzbWlzcyhiYWNrdXA6IHN0cmluZyk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYm9ib3hJdGVtRGlyZWN0aXZlQ29udGV4dDxUID0gdW5rbm93bj4ge1xuICAgICRpbXBsaWNpdDogVDtcbiAgICBpbnB1dFRleHQ6IHN0cmluZztcbn1cbiJdfQ==","import { ChangeDetectionStrategy, Component, Inject, isDevMode, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { observeOn } from 'rxjs/operators';\nimport { MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { InitialFocusDirective, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { BarElementDirective, BarMiddleDirective, ButtonBarComponent } from '@fundamental-ngx/core/bar';\nimport { DialogBodyComponent, DialogCloseButtonComponent, DialogComponent, DialogFooterComponent, DialogHeaderComponent } from '@fundamental-ngx/core/dialog';\nimport { TitleComponent } from '@fundamental-ngx/core/title';\nimport { asyncScheduler } from 'rxjs';\nimport { COMBOBOX_COMPONENT } from '../combobox.interface';\nimport * as i0 from \"@angular/core\";\nexport class ComboboxMobileComponent extends MobileModeBase {\n /** @hidden */\n constructor(comboboxComponent) {\n super(comboboxComponent, MobileModeControl.COMBOBOX);\n /**\n * @hidden\n * For internal usage\n * Control element, which will be rendered inside dialog.\n * List element, which will be rendered inside dialog.\n */\n this.childContent = null;\n }\n /** @hidden */\n ngOnInit() {\n this._listenOnMultiInputOpenChange();\n }\n /** @hidden */\n handleDismiss() {\n this.dialogRef.dismiss();\n this._component.dialogDismiss(this._selectedBackup);\n }\n /** @hidden */\n handleApprove() {\n this.dialogRef.close();\n this._component.dialogApprove();\n }\n /** @hidden */\n _toggleDialog(open) {\n if (open) {\n this._selectedBackup = this._component.getValue();\n if (!this._dialogService.hasOpenDialogs()) {\n this._open();\n }\n }\n }\n /** @hidden */\n _listenOnMultiInputOpenChange() {\n this._component.openChange\n .pipe(takeUntilDestroyed(this._destroyRef))\n .subscribe((isOpen) => this._toggleDialog(isOpen));\n }\n /** @hidden */\n _open() {\n this.dialogRef = this._dialogService.open(this.dialogTemplate, {\n mobile: true,\n ...this.dialogConfig,\n backdropClickCloseable: false,\n container: this._elementRef.nativeElement,\n disablePaddings: true\n });\n this._focusInputElementOnceOpened();\n const refSub = this.dialogRef.afterClosed.subscribe({\n error: (type) => {\n if (type === 'escape') {\n this._component.dialogDismiss(this._selectedBackup);\n refSub.unsubscribe();\n }\n }\n });\n }\n /** @hidden */\n _focusInputElementOnceOpened() {\n this.dialogRef.afterLoaded\n .pipe(observeOn(asyncScheduler), // making the listener async\n takeUntilDestroyed(this._destroyRef))\n .subscribe(() => {\n try {\n const input = this._elementRef.nativeElement.querySelector('fd-input-group input[role=\"combobox\"]');\n input.focus();\n }\n catch (error) {\n if (isDevMode()) {\n console.error('Failed to focus combobox search input', error);\n }\n }\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxMobileComponent, deps: [{ token: COMBOBOX_COMPONENT }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: ComboboxMobileComponent, isStandalone: true, selector: \"fd-combobox-mobile\", viewQueries: [{ propertyName: \"dialogTemplate\", first: true, predicate: [\"dialogTemplate\"], descendants: true }], usesInheritance: true, ngImport: i0, template: \"<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\\\"dialogConfig\\\" #dialogTemplate>\\n <fd-dialog [dialogConfig]=\\\"dialogConfig\\\" [dialogRef]=\\\"dialog\\\">\\n <fd-dialog-header>\\n @if (mobileConfig.title) {\\n <h1 fd-title>{{ mobileConfig.title }}</h1>\\n }\\n @if (mobileConfig.hasCloseButton) {\\n <button title=\\\"Close\\\" fd-dialog-close-button [mobile]=\\\"true\\\" (click)=\\\"handleDismiss()\\\"></button>\\n }\\n <ng-template fdkTemplate=\\\"subheader\\\">\\n <div fd-bar-middle>\\n <fd-bar-element [fullWidth]=\\\"true\\\">\\n <ng-template [ngTemplateOutlet]=\\\"childContent?.controlTemplate || null\\\"></ng-template>\\n </fd-bar-element>\\n </div>\\n </ng-template>\\n </fd-dialog-header>\\n <fd-dialog-body>\\n <ng-template [ngTemplateOutlet]=\\\"childContent?.listTemplate || null\\\"></ng-template>\\n </fd-dialog-body>\\n <fd-dialog-footer>\\n @if (mobileConfig.approveButtonText) {\\n <fd-button-bar fdType=\\\"emphasized\\\" [label]=\\\"mobileConfig.approveButtonText!\\\" (click)=\\\"handleApprove()\\\">\\n </fd-button-bar>\\n }\\n @if (mobileConfig.cancelButtonText) {\\n <fd-button-bar fdkInitialFocus [label]=\\\"mobileConfig.cancelButtonText!\\\" (click)=\\\"handleDismiss()\\\">\\n </fd-button-bar>\\n }\\n </fd-dialog-footer>\\n </fd-dialog>\\n</ng-template>\\n\", dependencies: [{ kind: \"directive\", type: TemplateDirective, selector: \"[fdkTemplate]\", inputs: [\"fdkTemplate\"] }, { kind: \"directive\", type: BarMiddleDirective, selector: \"[fd-bar-middle]\" }, { kind: \"directive\", type: BarElementDirective, selector: \"fd-bar-element\", inputs: [\"fullWidth\"] }, { kind: \"component\", type: ButtonBarComponent, selector: \"fd-button-bar\", inputs: [\"fullWidth\", \"fdType\", \"title\", \"ariaLabelledby\", \"id\"] }, { kind: \"component\", type: DialogHeaderComponent, selector: \"fd-dialog-header\" }, { kind: \"component\", type: DialogCloseButtonComponent, selector: \"[fd-dialog-close-button]\", inputs: [\"mobile\", \"title\", \"ariaLabel\"] }, { kind: \"component\", type: DialogComponent, selector: \"fd-dialog\", inputs: [\"class\", \"dialogRef\", \"dialogConfig\"] }, { kind: \"component\", type: DialogBodyComponent, selector: \"fd-dialog-body\", inputs: [\"disablePaddings\"] }, { kind: \"component\", type: DialogFooterComponent, selector: \"fd-dialog-footer\" }, { kind: \"component\", type: TitleComponent, selector: \"[fd-title], [fdTitle]\", inputs: [\"headerSize\", \"wrap\"], exportAs: [\"fd-title\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: InitialFocusDirective, selector: \"[fdkInitialFocus]\", inputs: [\"fdkInitialFocus\", \"enabled\", \"focusLastElement\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxMobileComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-combobox-mobile', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n TemplateDirective,\n BarMiddleDirective,\n BarElementDirective,\n ButtonBarComponent,\n DialogHeaderComponent,\n DialogCloseButtonComponent,\n DialogComponent,\n DialogBodyComponent,\n DialogFooterComponent,\n TitleComponent,\n TitleComponent,\n TemplateDirective,\n NgTemplateOutlet,\n InitialFocusDirective\n ], template: \"<ng-template [fdDialogTemplate] let-dialog let-dialogConfig=\\\"dialogConfig\\\" #dialogTemplate>\\n <fd-dialog [dialogConfig]=\\\"dialogConfig\\\" [dialogRef]=\\\"dialog\\\">\\n <fd-dialog-header>\\n @if (mobileConfig.title) {\\n <h1 fd-title>{{ mobileConfig.title }}</h1>\\n }\\n @if (mobileConfig.hasCloseButton) {\\n <button title=\\\"Close\\\" fd-dialog-close-button [mobile]=\\\"true\\\" (click)=\\\"handleDismiss()\\\"></button>\\n }\\n <ng-template fdkTemplate=\\\"subheader\\\">\\n <div fd-bar-middle>\\n <fd-bar-element [fullWidth]=\\\"true\\\">\\n <ng-template [ngTemplateOutlet]=\\\"childContent?.controlTemplate || null\\\"></ng-template>\\n </fd-bar-element>\\n </div>\\n </ng-template>\\n </fd-dialog-header>\\n <fd-dialog-body>\\n <ng-template [ngTemplateOutlet]=\\\"childContent?.listTemplate || null\\\"></ng-template>\\n </fd-dialog-body>\\n <fd-dialog-footer>\\n @if (mobileConfig.approveButtonText) {\\n <fd-button-bar fdType=\\\"emphasized\\\" [label]=\\\"mobileConfig.approveButtonText!\\\" (click)=\\\"handleApprove()\\\">\\n </fd-button-bar>\\n }\\n @if (mobileConfig.cancelButtonText) {\\n <fd-button-bar fdkInitialFocus [label]=\\\"mobileConfig.cancelButtonText!\\\" (click)=\\\"handleDismiss()\\\">\\n </fd-button-bar>\\n }\\n </fd-dialog-footer>\\n </fd-dialog>\\n</ng-template>\\n\" }]\n }], ctorParameters: () => [{ type: undefined, decorators: [{\n type: Inject,\n args: [COMBOBOX_COMPONENT]\n }] }], propDecorators: { dialogTemplate: [{\n type: ViewChild,\n args: ['dialogTemplate']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3gtbW9iaWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jb21ib2JveC9jb21ib2JveC1tb2JpbGUvY29tYm9ib3gtbW9iaWxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jb21ib2JveC9jb21ib2JveC1tb2JpbGUvY29tYm9ib3gtbW9iaWxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULE1BQU0sRUFDTixTQUFTLEVBRVQsV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUV0RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV4RyxPQUFPLEVBQ0gsbUJBQW1CLEVBQ25CLDBCQUEwQixFQUMxQixlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUN4QixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxrQkFBa0IsRUFBcUIs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QUFFLENBQUM7Z0JBQ2IsSUFBSSxTQUFTLEVBQUUsRUFBRSxDQUFDO29CQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ2xFLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDOzhHQTdGUSx1QkFBdUIsa0JBZ0JaLGtCQUFrQjtrR0FoQjdCLHVCQUF1Qix1TkNwRHBDLGtpREFnQ0EsNENESVEsaUJBQWlCLG1GQUNqQixrQkFBa0IsNERBQ2xCLG1CQUFtQixrRkFDbkIsa0JBQWtCLDRIQUNsQixxQkFBcUIsNkRBQ3JCLDBCQUEwQiwrR0FDMUIsZUFBZSxzR0FDZixtQkFBbUIsd0ZBQ25CLHFCQUFxQiw2REFDckIsY0FBYywwSEFHZCxnQkFBZ0Isb0pBQ2hCLHFCQUFxQjs7MkZBR2hCLHVCQUF1QjtrQkF0Qm5DLFNBQVM7K0JBQ0ksb0JBQW9CLG1CQUViLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksV0FDNUI7d0JBQ0wsaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixxQkFBcUI7d0JBQ3JCLDBCQUEwQjt3QkFDMUIsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLHFCQUFxQjt3QkFDckIsY0FBYzt3QkFDZCxjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3dCQUNoQixxQkFBcUI7cUJBQ3hCOzswQkFrQlksTUFBTTsyQkFBQyxrQkFBa0I7eUNBZFQsY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBJbmplY3QsXG4gICAgaXNEZXZNb2RlLFxuICAgIE9uSW5pdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvYnNlcnZlT24gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE1vYmlsZU1vZGVCYXNlLCBNb2JpbGVNb2RlQ29udHJvbCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9tb2JpbGUtbW9kZSc7XG5cbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgSW5pdGlhbEZvY3VzRGlyZWN0aXZlLCBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IEJhckVsZW1lbnREaXJlY3RpdmUsIEJhck1pZGRsZURpcmVjdGl2ZSwgQnV0dG9uQmFyQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Jhcic7XG5cbmltcG9ydCB7XG4gICAgRGlhbG9nQm9keUNvbXBvbmVudCxcbiAgICBEaWFsb2dDbG9zZUJ1dHRvbkNvbXBvbmVudCxcbiAgICBEaWFsb2dDb21wb25lbnQsXG4gICAgRGlhbG9nRm9vdGVyQ29tcG9uZW50LFxuICAgIERpYWxvZ0hlYWRlckNvbXBvbmVudFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3RpdGxlJztcbmltcG9ydCB7IGFzeW5jU2NoZWR1bGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDT01CT0JPWF9DT01QT05FTlQsIENvbWJvYm94SW50ZXJmYWNlIH0gZnJvbSAnLi4vY29tYm9ib3guaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1jb21ib2JveC1tb2JpbGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb21ib2JveC1tb2JpbGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgQmFyTWlkZGxlRGlyZWN0aXZlLFxuICAgICAgICBCYXJFbGVtZW50RGlyZWN0aXZlLFxuICAgICAgICBCdXR0b25CYXJDb21wb25lbnQsXG4gICAgICAgIERpYWxvZ0hlYWRlckNvbXBvbmVudCxcbiAgICAgICAgRGlhbG9nQ2xvc2VCdXR0b25Db21wb25lbnQsXG4gICAgICAgIERpYWxvZ0NvbXBvbmVudCxcbiAgICAgICAgRGlhbG9nQm9keUNvbXBvbmVudCxcbiAgICAgICAgRGlhbG9nRm9vdGVyQ29tcG9uZW50LFxuICAgICAgICBUaXRsZUNvbXBvbmVudCxcbiAgICAgICAgVGl0bGVDb21wb25lbnQsXG4gICAgICAgIFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBJbml0aWFsRm9jdXNEaXJlY3RpdmVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIENvbWJvYm94TW9iaWxlQ29tcG9uZW50IGV4dGVuZHMgTW9iaWxlTW9kZUJhc2U8Q29tYm9ib3hJbnRlcmZhY2U+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2RpYWxvZ1RlbXBsYXRlJykgZGlhbG9nVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRm9yIGludGVybmFsIHVzYWdlXG4gICAgICogQ29udHJvbCBlbGVtZW50LCB3aGljaCB3aWxsIGJlIHJlbmRlcmVkIGluc2lkZSBkaWFsb2cuXG4gICAgICogTGlzdCBlbGVtZW50LCB3aGljaCB3aWxsIGJlIHJlbmRlcmVkIGluc2lkZSBkaWFsb2cuXG4gICAgICovXG4gICAgY2hpbGRDb250ZW50OiB7IGxpc3RUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjsgY29udHJvbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IH0gfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRCYWNrdXA6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoQEluamVjdChDT01CT0JPWF9DT01QT05FTlQpIGNvbWJvYm94Q29tcG9uZW50OiBDb21ib2JveEludGVyZmFjZSkge1xuICAgICAgICBzdXBlcihjb21ib2JveENvbXBvbmVudCwgTW9iaWxlTW9kZUNvbnRyb2wuQ09NQk9CT1gpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xpc3Rlbk9uTXVsdGlJbnB1dE9wZW5DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZURpc21pc3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmRpc21pc3MoKTtcbiAgICAgICAgdGhpcy5fY29tcG9uZW50LmRpYWxvZ0Rpc21pc3ModGhpcy5fc2VsZWN0ZWRCYWNrdXApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlQXBwcm92ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5fY29tcG9uZW50LmRpYWxvZ0FwcHJvdmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RvZ2dsZURpYWxvZyhvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEJhY2t1cCA9IHRoaXMuX2NvbXBvbmVudC5nZXRWYWx1ZSgpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9kaWFsb2dTZXJ2aWNlLmhhc09wZW5EaWFsb2dzKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3Rlbk9uTXVsdGlJbnB1dE9wZW5DaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudC5vcGVuQ2hhbmdlXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChpc09wZW4pID0+IHRoaXMuX3RvZ2dsZURpYWxvZyhpc09wZW4pKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX29wZW4oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKHRoaXMuZGlhbG9nVGVtcGxhdGUsIHtcbiAgICAgICAgICAgIG1vYmlsZTogdHJ1ZSxcbiAgICAgICAgICAgIC4uLnRoaXMuZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgYmFja2Ryb3BDbGlja0Nsb3NlYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBjb250YWluZXI6IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIGRpc2FibGVQYWRkaW5nczogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9mb2N1c0lucHV0RWxlbWVudE9uY2VPcGVuZWQoKTtcblxuICAgICAgICBjb25zdCByZWZTdWIgPSB0aGlzLmRpYWxvZ1JlZi5hZnRlckNsb3NlZC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgZXJyb3I6ICh0eXBlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdlc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudC5kaWFsb2dEaXNtaXNzKHRoaXMuX3NlbGVjdGVkQmFja3VwKTtcbiAgICAgICAgICAgICAgICAgICAgcmVmU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZvY3VzSW5wdXRFbGVtZW50T25jZU9wZW5lZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuYWZ0ZXJMb2FkZWRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG9ic2VydmVPbihhc3luY1NjaGVkdWxlciksIC8vIG1ha2luZyB0aGUgbGlzdGVuZXIgYXN5bmNcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2ZkLWlucHV0LWdyb3VwIGlucHV0W3JvbGU9XCJjb21ib2JveFwiXScpO1xuICAgICAgICAgICAgICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZvY3VzIGNvbWJvYm94IHNlYXJjaCBpbnB1dCcsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBbZmREaWFsb2dUZW1wbGF0ZV0gbGV0LWRpYWxvZyBsZXQtZGlhbG9nQ29uZmlnPVwiZGlhbG9nQ29uZmlnXCIgI2RpYWxvZ1RlbXBsYXRlPlxuICAgIDxmZC1kaWFsb2cgW2RpYWxvZ0NvbmZpZ109XCJkaWFsb2dDb25maWdcIiBbZGlhbG9nUmVmXT1cImRpYWxvZ1wiPlxuICAgICAgICA8ZmQtZGlhbG9nLWhlYWRlcj5cbiAgICAgICAgICAgIEBpZiAobW9iaWxlQ29uZmlnLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgPGgxIGZkLXRpdGxlPnt7IG1vYmlsZUNvbmZpZy50aXRsZSB9fTwvaDE+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKG1vYmlsZUNvbmZpZy5oYXNDbG9zZUJ1dHRvbikge1xuICAgICAgICAgICAgICAgIDxidXR0b24gdGl0bGU9XCJDbG9zZVwiIGZkLWRpYWxvZy1jbG9zZS1idXR0b24gW21vYmlsZV09XCJ0cnVlXCIgKGNsaWNrKT1cImhhbmRsZURpc21pc3MoKVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZka1RlbXBsYXRlPVwic3ViaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBmZC1iYXItbWlkZGxlPlxuICAgICAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQgW2Z1bGxXaWR0aF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2hpbGRDb250ZW50Py5jb250cm9sVGVtcGxhdGUgfHwgbnVsbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2ZkLWRpYWxvZy1oZWFkZXI+XG4gICAgICAgIDxmZC1kaWFsb2ctYm9keT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGlsZENvbnRlbnQ/Lmxpc3RUZW1wbGF0ZSB8fCBudWxsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZC1kaWFsb2ctYm9keT5cbiAgICAgICAgPGZkLWRpYWxvZy1mb290ZXI+XG4gICAgICAgICAgICBAaWYgKG1vYmlsZUNvbmZpZy5hcHByb3ZlQnV0dG9uVGV4dCkge1xuICAgICAgICAgICAgICAgIDxmZC1idXR0b24tYmFyIGZkVHlwZT1cImVtcGhhc2l6ZWRcIiBbbGFiZWxdPVwibW9iaWxlQ29uZmlnLmFwcHJvdmVCdXR0b25UZXh0IVwiIChjbGljayk9XCJoYW5kbGVBcHByb3ZlKClcIj5cbiAgICAgICAgICAgICAgICA8L2ZkLWJ1dHRvbi1iYXI+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKG1vYmlsZUNvbmZpZy5jYW5jZWxCdXR0b25UZXh0KSB7XG4gICAgICAgICAgICAgICAgPGZkLWJ1dHRvbi1iYXIgZmRrSW5pdGlhbEZvY3VzIFtsYWJlbF09XCJtb2JpbGVDb25maWcuY2FuY2VsQnV0dG9uVGV4dCFcIiAoY2xpY2spPVwiaGFuZGxlRGlzbWlzcygpXCI+XG4gICAgICAgICAgICAgICAgPC9mZC1idXR0b24tYmFyPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2ZkLWRpYWxvZy1mb290ZXI+XG4gICAgPC9mZC1kaWFsb2c+XG48L25nLXRlbXBsYXRlPlxuIl19","import { Pipe } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class ListGroupPipe {\n /** Group items */\n transform(items, group) {\n return Object.entries(group(items)).map(([key, value]) => ({ key, value }));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ListGroupPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.4\", ngImport: i0, type: ListGroupPipe, isStandalone: true, name: \"listGroupPipe\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ListGroupPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'listGroupPipe',\n standalone: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1ncm91cC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NvbWJvYm94L2xpc3QtZ3JvdXAucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFRcEQsTUFBTSxPQUFPLGFBQWE7SUFDdEIsa0JBQWtCO0lBQ2xCLFNBQVMsQ0FBQyxLQUFZLEVBQUUsS0FBdUI7UUFDM0MsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRixDQUFDOzhHQUpRLGFBQWE7NEdBQWIsYUFBYTs7MkZBQWIsYUFBYTtrQkFKekIsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsZUFBZTtvQkFDckIsVUFBVSxFQUFFLElBQUk7aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgS2V5VmFsdWUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBHcm91cEZ1bmN0aW9uPFQgPSBhbnk+ID0gKGl0ZW1zOiBUW10pID0+IHsgW2tleTogc3RyaW5nXTogVFtdIH07XG5cbkBQaXBlKHtcbiAgICBuYW1lOiAnbGlzdEdyb3VwUGlwZScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBMaXN0R3JvdXBQaXBlPFQgPSBhbnk+IGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gICAgLyoqIEdyb3VwIGl0ZW1zICovXG4gICAgdHJhbnNmb3JtKGl0ZW1zOiBhbnlbXSwgZ3JvdXA6IEdyb3VwRnVuY3Rpb248VD4pOiBLZXlWYWx1ZTxzdHJpbmcsIFRbXT5bXSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhncm91cChpdGVtcykpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiAoeyBrZXksIHZhbHVlIH0pKTtcbiAgICB9XG59XG4iXX0=","import { InjectionToken } from '@angular/core';\nexport const FD_COMBOBOX_COMPONENT = new InjectionToken('FdComboboxComponent');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NvbWJvYm94L3Rva2Vucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9DLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFvQixxQkFBcUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbWJvYm94SW50ZXJmYWNlIH0gZnJvbSAnLi9jb21ib2JveC5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY29uc3QgRkRfQ09NQk9CT1hfQ09NUE9ORU5UID0gbmV3IEluamVjdGlvblRva2VuPENvbWJvYm94SW50ZXJmYWNlPignRmRDb21ib2JveENvbXBvbmVudCcpO1xuIl19","import { BACKSPACE, CONTROL, DOWN_ARROW, ENTER, ESCAPE, LEFT_ARROW, RIGHT_ARROW, SHIFT, SPACE, TAB, UP_ARROW } from '@angular/cdk/keycodes';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, EventEmitter, Injector, Input, Output, QueryList, TemplateRef, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation, forwardRef } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subscription, fromEvent } from 'rxjs';\nimport { DynamicComponentService, FocusTrapService, KeyUtil, TruncatedTitleDirective } from '@fundamental-ngx/cdk/utils';\nimport { registerFormItemControl } from '@fundamental-ngx/core/form';\nimport { MenuKeyboardService } from '@fundamental-ngx/core/menu';\nimport { PopoverComponent } from '@fundamental-ngx/core/popover';\nimport { Overlay } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { AutoCompleteDirective, DisplayFnPipe, SearchHighlightPipe } from '@fundamental-ngx/cdk/utils';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { ContentDensityModule, ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';\nimport { FD_DEFAULT_ICON_FONT_FAMILY, IconComponent } from '@fundamental-ngx/core/icon';\nimport { InputGroupComponent, InputGroupInputDirective } from '@fundamental-ngx/core/input-group';\nimport { FD_LIST_MESSAGE_DIRECTIVE, ListComponent, ListGroupHeaderDirective, ListItemComponent, ListTitleDirective } from '@fundamental-ngx/core/list';\nimport { PopoverBodyComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { ComboboxItemDirective } from './combobox-item.directive';\nimport { ComboboxMobileComponent } from './combobox-mobile/combobox-mobile.component';\nimport { COMBOBOX_COMPONENT } from './combobox.interface';\nimport { ListGroupPipe } from './list-group.pipe';\nimport { FD_COMBOBOX_COMPONENT } from './tokens';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/cdk/overlay\";\nimport * as i2 from \"@fundamental-ngx/cdk/utils\";\nimport * as i3 from \"@fundamental-ngx/core/content-density\";\nimport * as i4 from \"@angular/forms\";\nlet comboboxUniqueId = 0;\n/**\n * Allows users to filter through results and select a value.\n *\n * Supports Angular Forms.\n * ```html\n * <fd-combobox\n * [(ngModel)]=\"searchTerm\"\n * [dropdownValues]=\"dropdownValues\"\n * placeholder=\"Type some text...\">\n * </fd-combobox>\n * ```\n */\nexport class ComboboxComponent {\n /** @hidden */\n get _customRenderer() {\n return this._comboboxItemRenderer?.templateRef || this.itemTemplate;\n }\n /** @hidden */\n constructor(_overlay, _cdRef, _injector, _viewContainerRef, _dynamicComponentService, _focusTrapService, _contentDensityObserver) {\n this._overlay = _overlay;\n this._cdRef = _cdRef;\n this._injector = _injector;\n this._viewContainerRef = _viewContainerRef;\n this._dynamicComponentService = _dynamicComponentService;\n this._focusTrapService = _focusTrapService;\n this._contentDensityObserver = _contentDensityObserver;\n /** Id for the Combobox. */\n this.comboboxId = `fd-combobox-${comboboxUniqueId++}`;\n /** Id attribute for input element inside Combobox component */\n this.inputId = '';\n /** If it is mandatory field */\n this.required = false;\n /** Values to be filtered in the search input. */\n this.dropdownValues = [];\n /** Filter function. Accepts an array of objects and a search term as arguments\n * and returns a string. See search input examples for details. */\n this.filterFn = this._defaultFilter;\n /**\n * Whether the Combobox is a Search Field\n */\n this.isSearch = false;\n /** Icon to display in the right-side button. */\n this.glyph = 'navigation-down-arrow';\n /** Glyph font family */\n this.glyphFont = FD_DEFAULT_ICON_FONT_FAMILY;\n /**\n * Whether to show the clear search term button\n */\n this.showClearButton = false;\n /**\n * The trigger events that will open/close the options popover.\n * Accepts any [HTML DOM Events](https://www.w3schools.com/jsref/dom_obj_event.asp).\n */\n this.triggers = [];\n /** Whether the combobox should close, when a click is performed outside its boundaries. True by default */\n this.closeOnOutsideClick = true;\n /**\n * Whether the combobox should open, when any key is pressed in input (except Escape, Space, Enter). True by default\n */\n this.openOnKeyboardEvent = true;\n /** Max height of the popover. Any overflowing elements will be accessible through scrolling. */\n this.maxHeight = '50vh';\n /** Max width of the dropdown in pixels. Default is 640px (40rem). */\n this.dropDownMaxWidthPx = 640;\n /**\n * Whether the dropdown should have max width.\n * Set to true if you want the dropdown to take the width of the control.\n * Default is false */\n this.noDropDownMaxWidth = false;\n /** Whether the matching string should be highlighted during filtration. */\n this.highlighting = true;\n /** Whether the popover should close when a user selects a result. */\n this.closeOnSelect = true;\n /** Whether the input field should be populated with the result picked by the user. */\n this.fillOnSelect = true;\n /** Whether the autocomplete should be enabled; Enabled by default */\n this.autoComplete = true;\n /**\n * Preset options for the Select body width, whatever is chosen, the body has a 600px limit.\n * * `at-least` will apply a minimum width to the body equivalent to the width of the control. - Default\n * * `equal` will apply a width to the body equivalent to the width of the control.\n * * 'fit-content' will apply width needed to properly display items inside, independent of control.\n */\n this.fillControlMode = 'at-least';\n /** Defines if combobox should behave same as dropdown. When it's enabled writing inside text input won't\n * trigger onChange function, until it matches one of displayed dropdown values. Also communicating with combobox\n * can be achieved only by objects with same type as dropdownValue */\n this.communicateByObject = false;\n /** Display function. Accepts an object of the same type as the\n * items passed to dropdownValues as argument, and outputs a string.\n * An arrow function can be used to access the *this* keyword in the calling component.\n * See search input examples for details. */\n this.displayFn = this._defaultDisplay;\n /**\n * Whether AddOn Button should be focusable\n * @default false\n */\n this.buttonFocusable = false;\n /**\n * Whether clear button should be focusable.\n * @default true\n */\n this.clearButtonFocusable = true;\n /** Whether the combobox is readonly. */\n this.readOnly = false;\n /** Whether the combobox should be built on mobile mode */\n this.mobile = false;\n /** Whether to display the addon button. */\n this.showDropdownButton = true;\n /**\n * Whether to return results where the input matches the entire string. By default, only results that start\n * with the input search term will be returned.\n */\n this.includes = false;\n /** Whether list item options should be rendered as byline. */\n this.byline = false;\n /**\n * Action to perform when user shifts focus from the dropdown.\n * - `close` will close the dropdown preserving previously selected value.\n * - `closeAndSelect` will close the dropdown and select last focused dropdown item.\n */\n this.tabOutStrategy = 'closeAndSelect';\n /** Event emitted when an item is clicked. Use *$event* to retrieve it. */\n this.itemClicked = new EventEmitter();\n /** Event emitted, when the combobox's popover body is opened or closed */\n this.openChange = new EventEmitter();\n /** Event emitted when the input text changes. */\n this.inputTextChange = new EventEmitter();\n /** Whether the matching string should be highlighted after combobox value is selected. */\n this.filterHighlight = true;\n /** Keys, that won't trigger the popover's open state, when dispatched on search input */\n this.nonOpeningKeys = [\n ESCAPE,\n ENTER,\n LEFT_ARROW,\n RIGHT_ARROW,\n DOWN_ARROW,\n UP_ARROW,\n CONTROL,\n TAB,\n SHIFT\n ];\n /** @hidden */\n this._defaultFontFamily = FD_DEFAULT_ICON_FONT_FAMILY;\n /** Whether the combobox is opened. */\n this.open = false;\n /**\n * Whether or not the input coup is in the shellbar. Only for internal use by combobox component\n * @hidden\n */\n this.inShellbar = false;\n /** @hidden */\n this.displayedValues = [];\n /** @hidden */\n this.inputTextValue = '';\n /** @hidden */\n this.clearInputBtnFocused = false;\n /** @hidden */\n this._subscriptions = new Subscription();\n /** @hidden */\n this.onChange = () => { };\n /** @hidden */\n this.onTouched = () => { };\n this._repositionScrollStrategy = this._overlay.scrollStrategies.reposition({ autoClose: true });\n }\n /** @hidden */\n ngOnInit() {\n if (this.readOnly) {\n this.showDropdownButton = false;\n }\n this._refreshDisplayedValues();\n }\n /** @hidden */\n ngOnChanges(changes) {\n if (this.dropdownValues && (changes.dropdownValues || changes.searchTerm)) {\n this._refreshDisplayedValues();\n }\n }\n /** @hidden */\n ngOnDestroy() {\n this._subscriptions.unsubscribe();\n }\n /** @hidden */\n ngAfterViewInit() {\n this._addShellbarClass();\n if (this.mobile) {\n this._setUpMobileMode();\n }\n this._setupValueSynchronization();\n }\n /** @hidden */\n onInputKeydownHandler(event) {\n if (this.readOnly) {\n return;\n }\n if (typeof event === 'string') {\n if (event === 'fromPaste') {\n this.isOpenChangeHandle(true);\n }\n }\n else {\n if (KeyUtil.isKeyCode(event, TAB) && this.open) {\n this._close();\n return;\n }\n if (KeyUtil.isKeyCode(event, ENTER)) {\n if (this.searchFn) {\n this.searchFn();\n }\n }\n else if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n if (event.altKey) {\n this._resetDisplayedValues();\n this.isOpenChangeHandle(true);\n }\n if (this.open && this.listComponent) {\n this.listComponent.setItemActive(0);\n }\n else if (!this.open) {\n this._chooseOtherItem(1);\n }\n event.preventDefault();\n }\n else if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n this._chooseOtherItem(-1);\n event.preventDefault();\n }\n else if (this.openOnKeyboardEvent &&\n !event.ctrlKey &&\n !event.altKey &&\n !KeyUtil.isKeyCode(event, this.nonOpeningKeys)) {\n this.isOpenChangeHandle(true);\n if (this.isEmptyValue && KeyUtil.isKeyType(event, 'control') && !KeyUtil.isKeyCode(event, BACKSPACE)) {\n this.listComponent.setItemActive(0);\n }\n }\n }\n }\n /** @hidden */\n onItemKeyDownHandler(event, value) {\n if (KeyUtil.isKeyCode(event, ENTER) || KeyUtil.isKeyCode(event, SPACE)) {\n event.preventDefault();\n this.onMenuClickHandler(value);\n }\n }\n /** @hidden */\n onMenuClickHandler(value) {\n if (value || value === 0) {\n const index = this.dropdownValues.findIndex((_value) => _value === value);\n this._handleClickActions(value);\n this.filterHighlight = false;\n this.itemClicked.emit({ item: value, index });\n }\n }\n /** Handle dialog dismissing, closes popover and sets backup data. */\n dialogDismiss(term) {\n this.inputText = this.displayFn(term);\n this.setValue(term);\n this.isOpenChangeHandle(false);\n }\n /** Handle dialog approval, closes popover and propagates data changes. */\n dialogApprove() {\n this._propagateChange();\n this.isOpenChangeHandle(false);\n }\n /** If true value empty */\n get isEmptyValue() {\n return !this.inputText || this.inputText?.trim().length === 0;\n }\n /** Input text of the input. */\n set inputText(value) {\n this.inputTextValue = value;\n if (!this.communicateByObject) {\n this._value = value;\n }\n this.inputTextChange.emit(value);\n if (!this.mobile) {\n this._propagateChange();\n }\n }\n get inputText() {\n return this.inputTextValue;\n }\n /** Get the glyph value based on whether the combobox is used as a search field or not. */\n get glyphValue() {\n return this.isSearch ? 'search' : this.glyph;\n }\n /** @hidden */\n _handleClearSearchTerm() {\n this.inputTextValue = '';\n this.inputTextChange.emit('');\n this.displayedValues = this.dropdownValues || [];\n this.searchInputElement.nativeElement.focus();\n if (!this.mobile) {\n this._propagateChange();\n }\n this._cdRef.detectChanges();\n }\n /** @hidden */\n writeValue(value) {\n this.inputTextValue = this.displayFn(value);\n this.setValue(value);\n this._cdRef.markForCheck();\n }\n /** @hidden */\n registerOnChange(fn) {\n this.onChange = fn;\n }\n /** @hidden */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /** Method passed to list component */\n handleListFocusEscape(direction) {\n if (direction === 'up') {\n this.searchInputElement.nativeElement.focus();\n }\n }\n /** @hidden */\n handleSearchTermChange() {\n this.displayedValues = this.filterFn(this.dropdownValues, this.inputText);\n this.popoverComponent?.refreshPosition();\n }\n /** @hidden */\n onPrimaryButtonClick() {\n // Prevent primary button click behaviour on mobiles\n if (this.mobile) {\n return;\n }\n if (this.searchFn) {\n this.searchFn();\n }\n this._resetDisplayedValues();\n this.isOpenChangeHandle(!this.open);\n this.searchInputElement.nativeElement.focus();\n this.filterHighlight = false;\n if (this.open) {\n this.searchInputElement?.nativeElement.focus();\n }\n }\n /** @hidden */\n isOpenChangeHandle(isOpen) {\n /** Reset displayed values on every mobile open */\n if (this.mobile && !this.open) {\n this._resetDisplayedValues();\n }\n if (this.open !== isOpen) {\n this.open = isOpen;\n this.openChange.emit(isOpen);\n /** Allow combobox up and down arrows to work properly when combobox is inside a dialog with a trapped focus */\n if (this.open) {\n this._focusTrapService.pauseCurrentFocusTrap();\n }\n else {\n this._focusTrapService.unpauseCurrentFocusTrap();\n }\n }\n if (!this.open && !this.mobile) {\n this.handleBlur();\n this.searchInputElement.nativeElement.focus({ preventScroll: true });\n }\n this._cdRef.detectChanges();\n }\n /** @hidden */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this._cdRef.detectChanges();\n }\n /** Method that handles complete event from auto complete directive, setting the new value, and closing popover */\n handleAutoComplete(event) {\n if (this.inputText !== event.term) {\n this.inputText = event.term;\n this.handleSearchTermChange();\n }\n if (event.forceClose && this.inputText) {\n this.isOpenChangeHandle(false);\n }\n }\n /** @hidden */\n handleBlur() {\n if (!this.open) {\n this.onTouched();\n this.handleAutoComplete({\n term: this.searchInputElement.nativeElement.value,\n forceClose: false\n });\n }\n }\n /** @hidden */\n clearInputBtnFocus() {\n this.clearInputBtnFocused = true;\n }\n /** @hidden */\n clearInputBtnBlur() {\n this.clearInputBtnFocused = false;\n }\n /** Current select value */\n getValue() {\n return this._value;\n }\n /** @hidden */\n _close() {\n this.inputText = this._value ? this.inputText : '';\n if (this.tabOutStrategy === 'closeAndSelect') {\n const focusedItem = this.listComponent.getActiveItem();\n if (focusedItem && !this.inputText) {\n this._handleClickActions(focusedItem.value);\n return;\n }\n }\n this.isOpenChangeHandle(false);\n this.searchInputElement.nativeElement.focus();\n }\n /** @hidden */\n isSelected(term) {\n const termValue = this.communicateByObject ? term : this.displayFn(term);\n return this.getValue() === termValue;\n }\n /** @hidden */\n _getGroupItemIds(groupIndex) {\n if (!this.items?.length) {\n return '';\n }\n const groupItemIds = this.items\n .filter((el) => {\n const idWithGroup = el.nativeElement.getAttribute('id-with-group-index');\n const groupIdx = idWithGroup.split('-')[idWithGroup.split('-').length - 1];\n return groupIdx === String(groupIndex);\n })\n .map((el) => el.nativeElement.getAttribute('id'));\n return groupItemIds?.join(' ');\n }\n /** Method that picks other value moved from current one by offset, called only when combobox is closed */\n _chooseOtherItem(offset) {\n const activeValue = this._getOptionObjectByDisplayedValue(this.inputTextValue)[0];\n const index = this.dropdownValues.findIndex((value) => value === activeValue);\n if (this.dropdownValues[index + offset]) {\n this.onMenuClickHandler(this.dropdownValues[index + offset]);\n }\n }\n /** Method that reset filtering for displayed values. It overrides displayed values by all possible dropdown values */\n _resetDisplayedValues() {\n this.displayedValues = this.dropdownValues || [];\n }\n /** @hidden */\n _addShellbarClass() {\n if (this.inShellbar) {\n this.searchInputElement.nativeElement.classList.add('fd-shellbar__input-group-input');\n if (this.inputGroup) {\n this.inputGroup.setInShellbar(true);\n }\n }\n }\n /** @hidden */\n _defaultDisplay(str) {\n return `${str}`;\n }\n /** @hidden */\n _defaultFilter(contentArray, searchTerm) {\n this.filterHighlight = true;\n if (typeof searchTerm === 'string') {\n const searchLower = searchTerm.toLocaleLowerCase();\n return contentArray.filter((item) => {\n if (item) {\n const term = this.displayFn(item).toLocaleLowerCase();\n return this.includes ? term.includes(searchLower) : term.startsWith(searchLower);\n }\n });\n }\n else if (typeof searchTerm === 'object') {\n return contentArray.filter((item) => item === searchTerm);\n }\n return contentArray || [];\n }\n /** @hidden */\n _handleClickActions(term) {\n if (this.closeOnSelect) {\n this.isOpenChangeHandle(false);\n }\n if (this.fillOnSelect) {\n this.setValue(term);\n this.inputText = this.displayFn(term);\n this.searchInputElement.nativeElement.value = this.inputText;\n this._cdRef.detectChanges();\n if (this.mobile) {\n this._propagateChange();\n }\n }\n this.handleSearchTermChange();\n }\n /** @hidden */\n _getOptionObjectByDisplayedValue(displayValue) {\n return this.dropdownValues.filter((value) => this.displayFn(value) === displayValue);\n }\n /** @hidden */\n _refreshDisplayedValues() {\n if (this.inputText) {\n this.displayedValues = this.filterFn(this.dropdownValues, this.inputText);\n }\n else {\n this.displayedValues = this.dropdownValues || [];\n }\n }\n /** @hidden */\n _propagateChange() {\n if (this.communicateByObject) {\n const values = this._getOptionObjectByDisplayedValue(this.inputText);\n // Do not set new value if theres multiple items that have same label.\n if (values.length === 1 && this.displayFn(values[0]) !== this.displayFn(this.getValue())) {\n this.setValue(values[0]);\n }\n else if (values.length === 0) {\n this.setValue(this.inputText);\n }\n const thisValue = this.getValue();\n if (typeof thisValue === 'object') {\n this.onChange(thisValue);\n }\n }\n else {\n this.onChange(this.inputText);\n }\n }\n /** @hidden */\n setValue(value) {\n if (this.communicateByObject) {\n this._value = value;\n }\n else {\n this._value = this.displayFn(value);\n }\n }\n /** @hidden */\n _setUpMobileMode() {\n const injector = Injector.create({\n providers: [{ provide: COMBOBOX_COMPONENT, useValue: this }],\n parent: this._injector\n });\n this._dynamicComponentService.createDynamicComponent({ listTemplate: this.listTemplate, controlTemplate: this.controlTemplate }, ComboboxMobileComponent, {\n containerRef: this._viewContainerRef\n }, {\n injector\n });\n }\n /** @hidden */\n _setupValueSynchronization() {\n if (!this.searchInputElement) {\n return;\n }\n // Listen for focus events to detect programmatic changes\n this._subscriptions.add(fromEvent(this.searchInputElement.nativeElement, 'focus').subscribe(() => {\n this._syncDomValueToModel();\n }));\n }\n /** @hidden */\n _syncDomValueToModel() {\n if (!this.searchInputElement) {\n return;\n }\n const domValue = this.searchInputElement.nativeElement.value;\n if (domValue !== this.inputText) {\n // Update the model and trigger change detection\n this.inputText = domValue;\n this.handleSearchTermChange();\n this._cdRef.detectChanges();\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxComponent, deps: [{ token: i1.Overlay }, { token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i0.ViewContainerRef }, { token: i2.DynamicComponentService }, { token: i2.FocusTrapService }, { token: i3.ContentDensityObserver }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.4\", type: ComboboxComponent, isStandalone: true, selector: \"fd-combobox\", inputs: { comboboxId: \"comboboxId\", inputId: \"inputId\", ariaLabel: \"ariaLabel\", ariaLabelledBy: \"ariaLabelledBy\", required: \"required\", dropdownValues: \"dropdownValues\", filterFn: \"filterFn\", disabled: \"disabled\", placeholder: \"placeholder\", isSearch: \"isSearch\", glyph: \"glyph\", glyphFont: \"glyphFont\", showClearButton: \"showClearButton\", triggers: \"triggers\", closeOnOutsideClick: \"closeOnOutsideClick\", openOnKeyboardEvent: \"openOnKeyboardEvent\", state: \"state\", itemTemplate: \"itemTemplate\", groupFn: \"groupFn\", maxHeight: \"maxHeight\", dropDownMaxWidthPx: \"dropDownMaxWidthPx\", noDropDownMaxWidth: \"noDropDownMaxWidth\", width: \"width\", searchFn: \"searchFn\", highlighting: \"highlighting\", closeOnSelect: \"closeOnSelect\", fillOnSelect: \"fillOnSelect\", autoComplete: \"autoComplete\", fillControlMode: \"fillControlMode\", communicateByObject: \"communicateByObject\", displayFn: \"displayFn\", buttonFocusable: \"buttonFocusable\", clearButtonFocusable: \"clearButtonFocusable\", readOnly: \"readOnly\", mobile: \"mobile\", mobileConfig: \"mobileConfig\", showDropdownButton: \"showDropdownButton\", includes: \"includes\", title: \"title\", byline: \"byline\", tabOutStrategy: \"tabOutStrategy\" }, outputs: { itemClicked: \"itemClicked\", openChange: \"openChange\", inputTextChange: \"inputTextChange\" }, host: { properties: { \"class.fd-combobox-custom-class\": \"true\", \"class.fd-combobox-input\": \"true\", \"class.fd-combobox-custom-class--mobile\": \"mobile\", \"style.width\": \"width\" } }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ComboboxComponent),\n multi: true\n },\n registerFormItemControl(ComboboxComponent),\n MenuKeyboardService,\n DynamicComponentService,\n contentDensityObserverProviders(),\n {\n provide: FD_COMBOBOX_COMPONENT,\n useExisting: ComboboxComponent\n }\n ], queries: [{ propertyName: \"_comboboxItemRenderer\", first: true, predicate: ComboboxItemDirective, descendants: true }, { propertyName: \"listMessages\", predicate: FD_LIST_MESSAGE_DIRECTIVE }], viewQueries: [{ propertyName: \"listComponent\", first: true, predicate: ListComponent, descendants: true }, { propertyName: \"searchInputElement\", first: true, predicate: [\"searchInputElement\"], descendants: true }, { propertyName: \"popoverComponent\", first: true, predicate: PopoverComponent, descendants: true }, { propertyName: \"inputGroup\", first: true, predicate: InputGroupComponent, descendants: true }, { propertyName: \"controlTemplate\", first: true, predicate: [\"controlTemplate\"], descendants: true }, { propertyName: \"listTemplate\", first: true, predicate: [\"listTemplate\"], descendants: true }, { propertyName: \"items\", predicate: [\"item\"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: \"<ng-template [ngTemplateOutlet]=\\\"mobile ? mobileTemplate : desktopTemplate\\\"></ng-template>\\n<ng-template #desktopTemplate>\\n <fd-popover\\n additionalBodyClass=\\\"fd-popover-custom-list\\\"\\n [class.fd-combobox-full-width]=\\\"isSearch || showClearButton\\\"\\n [isOpen]=\\\"open && displayedValues && displayedValues.length > 0\\\"\\n (isOpenChange)=\\\"isOpenChangeHandle($event)\\\"\\n [fillControlMode]=\\\"fillControlMode\\\"\\n [scrollStrategy]=\\\"_repositionScrollStrategy\\\"\\n [focusTrapped]=\\\"true\\\"\\n [triggers]=\\\"triggers\\\"\\n [disabled]=\\\"disabled || readOnly\\\"\\n [maxWidth]=\\\"!mobile && noDropDownMaxWidth ? null : dropDownMaxWidthPx\\\"\\n [style.width]=\\\"width && '100%'\\\"\\n [closeOnOutsideClick]=\\\"closeOnOutsideClick\\\"\\n >\\n <fd-popover-control>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n </fd-popover-control>\\n <fd-popover-body [hidden]=\\\"!displayedValues.length\\\">\\n <ng-template [ngTemplateOutlet]=\\\"listTemplate\\\"></ng-template>\\n <ng-content></ng-content>\\n </fd-popover-body>\\n </fd-popover>\\n</ng-template>\\n<ng-template let-term=\\\"term\\\" #itemSource>\\n @if (!_customRenderer) {\\n <span\\n fd-list-title\\n fdTruncatedTitle\\n [innerHTML]=\\\"term | displayFnPipe: displayFn | highlight: inputText : highlighting && filterHighlight\\\"\\n >\\n </span>\\n } @else {\\n <ng-template\\n [ngTemplateOutlet]=\\\"_customRenderer\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: term, inputText: inputText }\\\"\\n ></ng-template>\\n }\\n</ng-template>\\n<ng-template #mobileTemplate>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n</ng-template>\\n<ng-template #controlTemplate>\\n <fd-input-group\\n [button]=\\\"showDropdownButton\\\"\\n [glyph]=\\\"showDropdownButton ? glyphValue : null\\\"\\n [glyphFont]=\\\"isSearch ? _defaultFontFamily : glyphFont\\\"\\n [state]=\\\"state\\\"\\n [buttonFocusable]=\\\"buttonFocusable\\\"\\n [disabled]=\\\"disabled\\\"\\n [readonly]=\\\"readOnly\\\"\\n [isControl]=\\\"true\\\"\\n [isExpanded]=\\\"!mobile && open && displayedValues.length > 0\\\"\\n [showFocus]=\\\"!clearInputBtnFocused\\\"\\n [glyphAriaLabel]=\\\"ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\\\"\\n [iconTitle]=\\\"title || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\\\"\\n (addOnButtonClicked)=\\\"onPrimaryButtonClick()\\\"\\n (click)=\\\"mobile && isOpenChangeHandle(true)\\\"\\n >\\n <input\\n #searchInputElement\\n fdkAutoComplete\\n fd-input-group-input\\n type=\\\"text\\\"\\n role=\\\"combobox\\\"\\n autocomplete=\\\"off\\\"\\n [attr.aria-label]=\\\"ariaLabel\\\"\\n [attr.aria-labelledby]=\\\"ariaLabelledBy\\\"\\n [attr.aria-describedby]=\\\"comboboxId + '-list-results'\\\"\\n [attr.aria-autocomplete]=\\\"autoComplete && !mobile ? 'list' : null\\\"\\n [attr.aria-owns]=\\\"autoComplete && !mobile ? comboboxId + '-result' : null\\\"\\n [attr.aria-haspopup]=\\\"autoComplete && !mobile\\\"\\n [attr.aria-expanded]=\\\"!mobile && open && displayedValues.length\\\"\\n [attr.aria-required]=\\\"required\\\"\\n [attr.tabindex]=\\\"readOnly || disabled ? -1 : null\\\"\\n [enable]=\\\"autoComplete && !mobile\\\"\\n [displayFn]=\\\"displayFn\\\"\\n [options]=\\\"dropdownValues\\\"\\n [inputText]=\\\"inputText\\\"\\n [disabled]=\\\"disabled\\\"\\n [readonly]=\\\"readOnly\\\"\\n [attr.aria-readonly]=\\\"readOnly\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [id]=\\\"inputId\\\"\\n [(ngModel)]=\\\"inputText\\\"\\n (onComplete)=\\\"handleAutoComplete($event)\\\"\\n (keydown)=\\\"onInputKeydownHandler($event)\\\"\\n (paste)=\\\"onInputKeydownHandler('fromPaste')\\\"\\n (ngModelChange)=\\\"handleSearchTermChange()\\\"\\n (blur)=\\\"handleBlur()\\\"\\n />\\n @if ((isSearch || showClearButton) && inputText && inputText.length > 0) {\\n <span\\n class=\\\"fd-input-group__addon fd-input-group__addon--button\\\"\\n [class.fd-shellbar__input-group-addon]=\\\"inShellbar\\\"\\n >\\n <button\\n fd-button\\n class=\\\"fd-input-group__button\\\"\\n type=\\\"button\\\"\\n [fdType]=\\\"inShellbar ? 'standard' : 'transparent'\\\"\\n title=\\\"Clear input\\\"\\n [class.fd-shellbar__button]=\\\"inShellbar\\\"\\n [attr.tabindex]=\\\"clearButtonFocusable ? 0 : -1\\\"\\n (focus)=\\\"clearInputBtnFocus()\\\"\\n (blur)=\\\"clearInputBtnBlur()\\\"\\n (click)=\\\"_handleClearSearchTerm()\\\"\\n >\\n <fd-icon glyph=\\\"decline\\\"></fd-icon>\\n </button>\\n </span>\\n }\\n </fd-input-group>\\n <div [id]=\\\"comboboxId + '-list-results'\\\" class=\\\"fd-combobox-count-list-results\\\">\\n {{ displayedValues.length || 0 }} result list items\\n </div>\\n</ng-template>\\n<ng-template #listTemplate>\\n <ul\\n fd-list\\n class=\\\"fd-combobox-custom-list\\\"\\n [dropdownMode]=\\\"true\\\"\\n [id]=\\\"comboboxId + '-result'\\\"\\n role=\\\"listbox\\\"\\n [attr.aria-labelledby]=\\\"comboboxId + '-search'\\\"\\n [style.maxHeight]=\\\"!mobile && maxHeight\\\"\\n [hasMessage]=\\\"listMessages && listMessages.length > 0\\\"\\n [byline]=\\\"byline\\\"\\n [tabindex]=\\\"0\\\"\\n (keydown.tab)=\\\"_close()\\\"\\n (keydown.shift.tab)=\\\"_close()\\\"\\n (focusEscapeList)=\\\"handleListFocusEscape($event)\\\"\\n >\\n <ng-content></ng-content>\\n @if (groupFn) {\\n @for (group of displayedValues | listGroupPipe: groupFn; track group.key; let groupIndex = $index) {\\n <li\\n fd-list-item\\n fd-list-group-header\\n ariaRole=\\\"group\\\"\\n [attr.aria-roledescription]=\\\"'coreMultiComboBox.listGroupHeader' | fdTranslate\\\"\\n [attr.aria-owns]=\\\"_getGroupItemIds(groupIndex)\\\"\\n [attr.aria-label]=\\\"group.key\\\"\\n >\\n <span fd-list-title>{{ group.key }}</span>\\n </li>\\n @for (term of group.value; track $index; let index = $index) {\\n <li\\n fd-list-item\\n #item=\\\"fdListItem\\\"\\n ariaRole=\\\"option\\\"\\n [attr.aria-placeholder]=\\\"group.key\\\"\\n [attr.aria-setsize]=\\\"group.value.length\\\"\\n [attr.aria-posinset]=\\\"index + 1\\\"\\n [attr.id-with-group-index]=\\\"item.id + '-group-' + groupIndex\\\"\\n class=\\\"fd-combobox-list-item\\\"\\n [selected]=\\\"isSelected(term)\\\"\\n [value]=\\\"term\\\"\\n (keydown)=\\\"onItemKeyDownHandler($event, term)\\\"\\n (click)=\\\"onMenuClickHandler(term)\\\"\\n >\\n <ng-template\\n [ngTemplateOutlet]=\\\"itemSource\\\"\\n [ngTemplateOutletContext]=\\\"{ term: term }\\\"\\n ></ng-template>\\n </li>\\n }\\n }\\n } @else {\\n @for (term of displayedValues; track $index) {\\n <li\\n fd-list-item\\n role=\\\"option\\\"\\n [tabindex]=\\\"0\\\"\\n class=\\\"fd-combobox-list-item\\\"\\n [selected]=\\\"isSelected(term)\\\"\\n (keydown)=\\\"onItemKeyDownHandler($event, term)\\\"\\n (click)=\\\"onMenuClickHandler(term)\\\"\\n [value]=\\\"term\\\"\\n >\\n <ng-template\\n [ngTemplateOutlet]=\\\"itemSource\\\"\\n [ngTemplateOutletContext]=\\\"{ term: term }\\\"\\n ></ng-template>\\n </li>\\n }\\n }\\n </ul>\\n</ng-template>\\n\", styles: [\".fd-combobox-custom-class,.fd-combobox-custom-class .fd-combobox-shellbar-custom{display:inline-block}.fd-list__item.fd-combobox-list-item{cursor:pointer}.fd-combobox-full-width{width:100%}.fd-combobox-count-list-results{position:absolute;opacity:0;z-index:-1}\\n\"], dependencies: [{ kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: PopoverComponent, selector: \"fd-popover\", inputs: [\"title\", \"trigger\", \"fixedPosition\", \"id\", \"mobile\", \"mobileConfig\", \"preventSpaceKeyScroll\"] }, { kind: \"component\", type: PopoverControlComponent, selector: \"fd-popover-control, [fdPopoverControl]\" }, { kind: \"component\", type: PopoverBodyComponent, selector: \"fd-popover-body\", inputs: [\"minWidth\", \"maxWidth\", \"minHeight\", \"maxHeight\"] }, { kind: \"component\", type: ListComponent, selector: \"[fd-list], [fdList]\", inputs: [\"dropdownMode\", \"multiInputMode\", \"mobileMode\", \"hasMessage\", \"noBorder\", \"navigationIndicator\", \"selection\", \"keyboardSupport\", \"byline\", \"subline\", \"theme\", \"unreadIndicator\", \"role\", \"settingsList\", \"settingsListFooter\"], outputs: [\"focusEscapeList\"] }, { kind: \"component\", type: ListItemComponent, selector: \"[fdListItem] ,[fd-list-item]\", inputs: [\"selected\", \"noData\", \"action\", \"interactive\", \"growing\", \"counter\", \"active\", \"unread\", \"byline\", \"ariaRole\", \"id\", \"preventClick\", \"settingsListTpl\"], outputs: [\"keyDown\"], exportAs: [\"fdListItem\"] }, { kind: \"directive\", type: ListTitleDirective, selector: \"[fd-list-title], [fdListTitle]\", inputs: [\"wrap\", \"truncate\"] }, { kind: \"directive\", type: ListGroupHeaderDirective, selector: \"[fdListGroupHeader], [fd-list-group-header]\", inputs: [\"nativeElementId\"], outputs: [\"keyDown\"] }, { kind: \"component\", type: InputGroupComponent, selector: \"fd-input-group\", inputs: [\"placement\", \"required\", \"inline\", \"addOnText\", \"buttonFocusable\", \"type\", \"glyph\", \"glyphFont\", \"button\", \"isControl\", \"showFocus\", \"isExpanded\", \"glyphAriaLabel\", \"addonButtonAriaHidden\", \"iconTitle\", \"ariaLabelledBy\", \"ariaLabel\"], outputs: [\"addOnButtonClicked\", \"search\"] }, { kind: \"directive\", type: InputGroupInputDirective, selector: \"[fdInputGroupInput], [fd-input-group-input]\", inputs: [\"class\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i4.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: i4.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i4.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"directive\", type: AutoCompleteDirective, selector: \"[fdkAutoComplete]\", inputs: [\"options\", \"inputText\", \"enable\", \"displayFn\", \"matcher\"], outputs: [\"onComplete\"] }, { kind: \"component\", type: ButtonComponent, selector: \"button[fd-button], a[fd-button], span[fd-button]\", inputs: [\"class\", \"id\"], exportAs: [\"fd-button\"] }, { kind: \"component\", type: IconComponent, selector: \"fd-icon\", inputs: [\"glyph\", \"font\", \"color\", \"background\", \"class\", \"ariaLabel\", \"ariaHidden\"] }, { kind: \"ngmodule\", type: ContentDensityModule }, { kind: \"directive\", type: TruncatedTitleDirective, selector: \"[fdkTruncatedTitle], [fdTruncatedTitle], [fd-truncate-title]\" }, { kind: \"pipe\", type: DisplayFnPipe, name: \"displayFnPipe\" }, { kind: \"pipe\", type: SearchHighlightPipe, name: \"highlight\" }, { kind: \"pipe\", type: FdTranslatePipe, name: \"fdTranslate\" }, { kind: \"pipe\", type: ListGroupPipe, name: \"listGroupPipe\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxComponent, decorators: [{\n type: Component,\n args: [{ selector: 'fd-combobox', providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ComboboxComponent),\n multi: true\n },\n registerFormItemControl(ComboboxComponent),\n MenuKeyboardService,\n DynamicComponentService,\n contentDensityObserverProviders(),\n {\n provide: FD_COMBOBOX_COMPONENT,\n useExisting: ComboboxComponent\n }\n ], host: {\n '[class.fd-combobox-custom-class]': 'true',\n '[class.fd-combobox-input]': 'true',\n '[class.fd-combobox-custom-class--mobile]': 'mobile',\n '[style.width]': 'width'\n }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n NgTemplateOutlet,\n PopoverComponent,\n PopoverControlComponent,\n PopoverBodyComponent,\n ListComponent,\n ListItemComponent,\n ListTitleDirective,\n ListGroupHeaderDirective,\n InputGroupComponent,\n InputGroupInputDirective,\n FormsModule,\n AutoCompleteDirective,\n ButtonComponent,\n IconComponent,\n ContentDensityModule,\n DisplayFnPipe,\n SearchHighlightPipe,\n FdTranslatePipe,\n ListGroupPipe,\n TruncatedTitleDirective\n ], template: \"<ng-template [ngTemplateOutlet]=\\\"mobile ? mobileTemplate : desktopTemplate\\\"></ng-template>\\n<ng-template #desktopTemplate>\\n <fd-popover\\n additionalBodyClass=\\\"fd-popover-custom-list\\\"\\n [class.fd-combobox-full-width]=\\\"isSearch || showClearButton\\\"\\n [isOpen]=\\\"open && displayedValues && displayedValues.length > 0\\\"\\n (isOpenChange)=\\\"isOpenChangeHandle($event)\\\"\\n [fillControlMode]=\\\"fillControlMode\\\"\\n [scrollStrategy]=\\\"_repositionScrollStrategy\\\"\\n [focusTrapped]=\\\"true\\\"\\n [triggers]=\\\"triggers\\\"\\n [disabled]=\\\"disabled || readOnly\\\"\\n [maxWidth]=\\\"!mobile && noDropDownMaxWidth ? null : dropDownMaxWidthPx\\\"\\n [style.width]=\\\"width && '100%'\\\"\\n [closeOnOutsideClick]=\\\"closeOnOutsideClick\\\"\\n >\\n <fd-popover-control>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n </fd-popover-control>\\n <fd-popover-body [hidden]=\\\"!displayedValues.length\\\">\\n <ng-template [ngTemplateOutlet]=\\\"listTemplate\\\"></ng-template>\\n <ng-content></ng-content>\\n </fd-popover-body>\\n </fd-popover>\\n</ng-template>\\n<ng-template let-term=\\\"term\\\" #itemSource>\\n @if (!_customRenderer) {\\n <span\\n fd-list-title\\n fdTruncatedTitle\\n [innerHTML]=\\\"term | displayFnPipe: displayFn | highlight: inputText : highlighting && filterHighlight\\\"\\n >\\n </span>\\n } @else {\\n <ng-template\\n [ngTemplateOutlet]=\\\"_customRenderer\\\"\\n [ngTemplateOutletContext]=\\\"{ $implicit: term, inputText: inputText }\\\"\\n ></ng-template>\\n }\\n</ng-template>\\n<ng-template #mobileTemplate>\\n <ng-template [ngTemplateOutlet]=\\\"controlTemplate\\\"></ng-template>\\n</ng-template>\\n<ng-template #controlTemplate>\\n <fd-input-group\\n [button]=\\\"showDropdownButton\\\"\\n [glyph]=\\\"showDropdownButton ? glyphValue : null\\\"\\n [glyphFont]=\\\"isSearch ? _defaultFontFamily : glyphFont\\\"\\n [state]=\\\"state\\\"\\n [buttonFocusable]=\\\"buttonFocusable\\\"\\n [disabled]=\\\"disabled\\\"\\n [readonly]=\\\"readOnly\\\"\\n [isControl]=\\\"true\\\"\\n [isExpanded]=\\\"!mobile && open && displayedValues.length > 0\\\"\\n [showFocus]=\\\"!clearInputBtnFocused\\\"\\n [glyphAriaLabel]=\\\"ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\\\"\\n [iconTitle]=\\\"title || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\\\"\\n (addOnButtonClicked)=\\\"onPrimaryButtonClick()\\\"\\n (click)=\\\"mobile && isOpenChangeHandle(true)\\\"\\n >\\n <input\\n #searchInputElement\\n fdkAutoComplete\\n fd-input-group-input\\n type=\\\"text\\\"\\n role=\\\"combobox\\\"\\n autocomplete=\\\"off\\\"\\n [attr.aria-label]=\\\"ariaLabel\\\"\\n [attr.aria-labelledby]=\\\"ariaLabelledBy\\\"\\n [attr.aria-describedby]=\\\"comboboxId + '-list-results'\\\"\\n [attr.aria-autocomplete]=\\\"autoComplete && !mobile ? 'list' : null\\\"\\n [attr.aria-owns]=\\\"autoComplete && !mobile ? comboboxId + '-result' : null\\\"\\n [attr.aria-haspopup]=\\\"autoComplete && !mobile\\\"\\n [attr.aria-expanded]=\\\"!mobile && open && displayedValues.length\\\"\\n [attr.aria-required]=\\\"required\\\"\\n [attr.tabindex]=\\\"readOnly || disabled ? -1 : null\\\"\\n [enable]=\\\"autoComplete && !mobile\\\"\\n [displayFn]=\\\"displayFn\\\"\\n [options]=\\\"dropdownValues\\\"\\n [inputText]=\\\"inputText\\\"\\n [disabled]=\\\"disabled\\\"\\n [readonly]=\\\"readOnly\\\"\\n [attr.aria-readonly]=\\\"readOnly\\\"\\n [placeholder]=\\\"placeholder\\\"\\n [id]=\\\"inputId\\\"\\n [(ngModel)]=\\\"inputText\\\"\\n (onComplete)=\\\"handleAutoComplete($event)\\\"\\n (keydown)=\\\"onInputKeydownHandler($event)\\\"\\n (paste)=\\\"onInputKeydownHandler('fromPaste')\\\"\\n (ngModelChange)=\\\"handleSearchTermChange()\\\"\\n (blur)=\\\"handleBlur()\\\"\\n />\\n @if ((isSearch || showClearButton) && inputText && inputText.length > 0) {\\n <span\\n class=\\\"fd-input-group__addon fd-input-group__addon--button\\\"\\n [class.fd-shellbar__input-group-addon]=\\\"inShellbar\\\"\\n >\\n <button\\n fd-button\\n class=\\\"fd-input-group__button\\\"\\n type=\\\"button\\\"\\n [fdType]=\\\"inShellbar ? 'standard' : 'transparent'\\\"\\n title=\\\"Clear input\\\"\\n [class.fd-shellbar__button]=\\\"inShellbar\\\"\\n [attr.tabindex]=\\\"clearButtonFocusable ? 0 : -1\\\"\\n (focus)=\\\"clearInputBtnFocus()\\\"\\n (blur)=\\\"clearInputBtnBlur()\\\"\\n (click)=\\\"_handleClearSearchTerm()\\\"\\n >\\n <fd-icon glyph=\\\"decline\\\"></fd-icon>\\n </button>\\n </span>\\n }\\n </fd-input-group>\\n <div [id]=\\\"comboboxId + '-list-results'\\\" class=\\\"fd-combobox-count-list-results\\\">\\n {{ displayedValues.length || 0 }} result list items\\n </div>\\n</ng-template>\\n<ng-template #listTemplate>\\n <ul\\n fd-list\\n class=\\\"fd-combobox-custom-list\\\"\\n [dropdownMode]=\\\"true\\\"\\n [id]=\\\"comboboxId + '-result'\\\"\\n role=\\\"listbox\\\"\\n [attr.aria-labelledby]=\\\"comboboxId + '-search'\\\"\\n [style.maxHeight]=\\\"!mobile && maxHeight\\\"\\n [hasMessage]=\\\"listMessages && listMessages.length > 0\\\"\\n [byline]=\\\"byline\\\"\\n [tabindex]=\\\"0\\\"\\n (keydown.tab)=\\\"_close()\\\"\\n (keydown.shift.tab)=\\\"_close()\\\"\\n (focusEscapeList)=\\\"handleListFocusEscape($event)\\\"\\n >\\n <ng-content></ng-content>\\n @if (groupFn) {\\n @for (group of displayedValues | listGroupPipe: groupFn; track group.key; let groupIndex = $index) {\\n <li\\n fd-list-item\\n fd-list-group-header\\n ariaRole=\\\"group\\\"\\n [attr.aria-roledescription]=\\\"'coreMultiComboBox.listGroupHeader' | fdTranslate\\\"\\n [attr.aria-owns]=\\\"_getGroupItemIds(groupIndex)\\\"\\n [attr.aria-label]=\\\"group.key\\\"\\n >\\n <span fd-list-title>{{ group.key }}</span>\\n </li>\\n @for (term of group.value; track $index; let index = $index) {\\n <li\\n fd-list-item\\n #item=\\\"fdListItem\\\"\\n ariaRole=\\\"option\\\"\\n [attr.aria-placeholder]=\\\"group.key\\\"\\n [attr.aria-setsize]=\\\"group.value.length\\\"\\n [attr.aria-posinset]=\\\"index + 1\\\"\\n [attr.id-with-group-index]=\\\"item.id + '-group-' + groupIndex\\\"\\n class=\\\"fd-combobox-list-item\\\"\\n [selected]=\\\"isSelected(term)\\\"\\n [value]=\\\"term\\\"\\n (keydown)=\\\"onItemKeyDownHandler($event, term)\\\"\\n (click)=\\\"onMenuClickHandler(term)\\\"\\n >\\n <ng-template\\n [ngTemplateOutlet]=\\\"itemSource\\\"\\n [ngTemplateOutletContext]=\\\"{ term: term }\\\"\\n ></ng-template>\\n </li>\\n }\\n }\\n } @else {\\n @for (term of displayedValues; track $index) {\\n <li\\n fd-list-item\\n role=\\\"option\\\"\\n [tabindex]=\\\"0\\\"\\n class=\\\"fd-combobox-list-item\\\"\\n [selected]=\\\"isSelected(term)\\\"\\n (keydown)=\\\"onItemKeyDownHandler($event, term)\\\"\\n (click)=\\\"onMenuClickHandler(term)\\\"\\n [value]=\\\"term\\\"\\n >\\n <ng-template\\n [ngTemplateOutlet]=\\\"itemSource\\\"\\n [ngTemplateOutletContext]=\\\"{ term: term }\\\"\\n ></ng-template>\\n </li>\\n }\\n }\\n </ul>\\n</ng-template>\\n\", styles: [\".fd-combobox-custom-class,.fd-combobox-custom-class .fd-combobox-shellbar-custom{display:inline-block}.fd-list__item.fd-combobox-list-item{cursor:pointer}.fd-combobox-full-width{width:100%}.fd-combobox-count-list-results{position:absolute;opacity:0;z-index:-1}\\n\"] }]\n }], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: i0.ViewContainerRef }, { type: i2.DynamicComponentService }, { type: i2.FocusTrapService }, { type: i3.ContentDensityObserver }], propDecorators: { comboboxId: [{\n type: Input\n }], inputId: [{\n type: Input\n }], ariaLabel: [{\n type: Input\n }], ariaLabelledBy: [{\n type: Input\n }], required: [{\n type: Input\n }], dropdownValues: [{\n type: Input\n }], filterFn: [{\n type: Input\n }], disabled: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], isSearch: [{\n type: Input\n }], glyph: [{\n type: Input\n }], glyphFont: [{\n type: Input\n }], showClearButton: [{\n type: Input\n }], triggers: [{\n type: Input\n }], closeOnOutsideClick: [{\n type: Input\n }], openOnKeyboardEvent: [{\n type: Input\n }], state: [{\n type: Input\n }], itemTemplate: [{\n type: Input\n }], groupFn: [{\n type: Input\n }], maxHeight: [{\n type: Input\n }], dropDownMaxWidthPx: [{\n type: Input\n }], noDropDownMaxWidth: [{\n type: Input\n }], width: [{\n type: Input\n }], searchFn: [{\n type: Input\n }], highlighting: [{\n type: Input\n }], closeOnSelect: [{\n type: Input\n }], fillOnSelect: [{\n type: Input\n }], autoComplete: [{\n type: Input\n }], fillControlMode: [{\n type: Input\n }], communicateByObject: [{\n type: Input\n }], displayFn: [{\n type: Input\n }], buttonFocusable: [{\n type: Input\n }], clearButtonFocusable: [{\n type: Input\n }], readOnly: [{\n type: Input\n }], mobile: [{\n type: Input\n }], mobileConfig: [{\n type: Input\n }], showDropdownButton: [{\n type: Input\n }], includes: [{\n type: Input\n }], title: [{\n type: Input\n }], byline: [{\n type: Input\n }], tabOutStrategy: [{\n type: Input\n }], itemClicked: [{\n type: Output\n }], openChange: [{\n type: Output\n }], inputTextChange: [{\n type: Output\n }], listComponent: [{\n type: ViewChild,\n args: [ListComponent]\n }], searchInputElement: [{\n type: ViewChild,\n args: ['searchInputElement']\n }], popoverComponent: [{\n type: ViewChild,\n args: [PopoverComponent]\n }], inputGroup: [{\n type: ViewChild,\n args: [InputGroupComponent]\n }], listMessages: [{\n type: ContentChildren,\n args: [FD_LIST_MESSAGE_DIRECTIVE]\n }], controlTemplate: [{\n type: ViewChild,\n args: ['controlTemplate']\n }], listTemplate: [{\n type: ViewChild,\n args: ['listTemplate']\n }], _comboboxItemRenderer: [{\n type: ContentChild,\n args: [ComboboxItemDirective]\n }], items: [{\n type: ViewChildren,\n args: ['item', { read: ElementRef }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULE9BQU8sRUFDUCxVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFDTCxLQUFLLEVBQ0wsR0FBRyxFQUNILFFBQVEsRUFDWCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFJTCxNQUFNLEVBQ04sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsVUFBVSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0MsT0FBTyxFQUVILHVCQUF1QixFQUV2QixnQkFBZ0IsRUFDaEIsT0FBTyxFQUVQLHVCQUF1QixFQUMxQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBbUIsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUdqRSxP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MUMsZUFBZTtzQkFEZCxTQUFTO3VCQUFDLGlCQUFpQjtnQkFLNUIsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLGNBQWM7Z0JBS1IscUJBQXFCO3NCQURyQyxZQUFZO3VCQUFDLHFCQUFxQjtnQkFLbEIsS0FBSztzQkFEckIsWUFBWTt1QkFBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBCQUNLU1BBQ0UsXG4gICAgQ09OVFJPTCxcbiAgICBET1dOX0FSUk9XLFxuICAgIEVOVEVSLFxuICAgIEVTQ0FQRSxcbiAgICBMRUZUX0FSUk9XLFxuICAgIFJJR0hUX0FSUk9XLFxuICAgIFNISUZULFxuICAgIFNQQUNFLFxuICAgIFRBQixcbiAgICBVUF9BUlJPV1xufSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICAgIEF1dG9Db21wbGV0ZUV2ZW50LFxuICAgIER5bmFtaWNDb21wb25lbnRTZXJ2aWNlLFxuICAgIEZvY3VzRXNjYXBlRGlyZWN0aW9uLFxuICAgIEZvY3VzVHJhcFNlcnZpY2UsXG4gICAgS2V5VXRpbCxcbiAgICBOdWxsYWJsZSxcbiAgICBUcnVuY2F0ZWRUaXRsZURpcmVjdGl2ZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBGb3JtSXRlbUNvbnRyb2wsIHJlZ2lzdGVyRm9ybUl0ZW1Db250cm9sIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHsgTWVudUtleWJvYXJkU2VydmljZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9tZW51JztcbmltcG9ydCB7IE1vYmlsZU1vZGVDb25maWcgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbW9iaWxlLW1vZGUnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9wb3BvdmVyJztcbmltcG9ydCB7IFBvcG92ZXJGaWxsTW9kZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zaGFyZWQnO1xuXG5pbXBvcnQgeyBPdmVybGF5LCBSZXBvc2l0aW9uU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1TdGF0ZXMsIFNpbmdsZURyb3Bkb3duVmFsdWVDb250cm9sIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvZm9ybXMnO1xuaW1wb3J0IHsgQXV0b0NvbXBsZXRlRGlyZWN0aXZlLCBEaXNwbGF5Rm5QaXBlLCBTZWFyY2hIaWdobGlnaHRQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5pbXBvcnQge1xuICAgIENvbnRlbnREZW5zaXR5TW9kdWxlLFxuICAgIENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsXG4gICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVyc1xufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY29udGVudC1kZW5zaXR5JztcbmltcG9ydCB7IEZEX0RFRkFVTFRfSUNPTl9GT05UX0ZBTUlMWSwgSWNvbkNvbXBvbmVudCwgSWNvbkZvbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvaWNvbic7XG5pbXBvcnQgeyBJbnB1dEdyb3VwQ29tcG9uZW50LCBJbnB1dEdyb3VwSW5wdXREaXJlY3RpdmUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvaW5wdXQtZ3JvdXAnO1xuaW1wb3J0IHtcbiAgICBGRF9MSVNUX01FU1NBR0VfRElSRUNUSVZFLFxuICAgIExpc3RDb21wb25lbnQsXG4gICAgTGlzdEdyb3VwSGVhZGVyRGlyZWN0aXZlLFxuICAgIExpc3RJdGVtQ29tcG9uZW50LFxuICAgIExpc3RNZXNzYWdlRGlyZWN0aXZlLFxuICAgIExpc3RUaXRsZURpcmVjdGl2ZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbGlzdCc7XG5pbXBvcnQgeyBQb3BvdmVyQm9keUNvbXBvbmVudCwgUG9wb3ZlckNvbnRyb2xDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcG9wb3Zlcic7XG5pbXBvcnQgeyBGZFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2kxOG4nO1xuaW1wb3J0IHsgQ29tYm9ib3hJdGVtIH0gZnJvbSAnLi9jb21ib2JveC1pdGVtJztcbmltcG9ydCB7IENvbWJvYm94SXRlbURpcmVjdGl2ZSB9IGZyb20gJy4vY29tYm9ib3gtaXRlbS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29tYm9ib3hNb2JpbGVDb21wb25lbnQgfSBmcm9tICcuL2NvbWJvYm94LW1vYmlsZS9jb21ib2JveC1tb2JpbGUuY29tcG9uZW50JztcbmltcG9ydCB7IENPTUJPQk9YX0NPTVBPTkVOVCwgQ29tYm9ib3hJbnRlcmZhY2UsIENvbWJvYm94SXRlbURpcmVjdGl2ZUNvbnRleHQgfSBmcm9tICcuL2NvbWJvYm94LmludGVyZmFjZSc7XG5pbXBvcnQgeyBHcm91cEZ1bmN0aW9uLCBMaXN0R3JvdXBQaXBlIH0gZnJvbSAnLi9saXN0LWdyb3VwLnBpcGUnO1xuaW1wb3J0IHsgRkRfQ09NQk9CT1hfQ09NUE9ORU5UIH0gZnJvbSAnLi90b2tlbnMnO1xuXG5sZXQgY29tYm9ib3hVbmlxdWVJZCA9IDA7XG5cbi8qKlxuICogQWxsb3dzIHVzZXJzIHRvIGZpbHRlciB0aHJvdWdoIHJlc3VsdHMgYW5kIHNlbGVjdCBhIHZhbHVlLlxuICpcbiAqIFN1cHBvcnRzIEFuZ3VsYXIgRm9ybXMuXG4gKiBgYGBodG1sXG4gKiA8ZmQtY29tYm9ib3hcbiAqICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXJtXCJcbiAqICAgICAgW2Ryb3Bkb3duVmFsdWVzXT1cImRyb3Bkb3duVmFsdWVzXCJcbiAqICAgICAgcGxhY2Vob2xkZXI9XCJUeXBlIHNvbWUgdGV4dC4uLlwiPlxuICogPC9mZC1jb21ib2JveD5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWNvbWJvYm94JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29tYm9ib3guY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9jb21ib2JveC5jb21wb25lbnQuc2NzcycsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ29tYm9ib3hDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgcmVnaXN0ZXJGb3JtSXRlbUNvbnRyb2woQ29tYm9ib3hDb21wb25lbnQpLFxuICAgICAgICBNZW51S2V5Ym9hcmRTZXJ2aWNlLFxuICAgICAgICBEeW5hbWljQ29tcG9uZW50U2VydmljZSxcbiAgICAgICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycygpLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGRF9DT01CT0JPWF9DT01QT05FTlQsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogQ29tYm9ib3hDb21wb25lbnRcbiAgICAgICAgfVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnW2NsYXNzLmZkLWNvbWJvYm94LWN1c3RvbS1jbGFzc10nOiAndHJ1ZScsXG4gICAgICAgICdbY2xhc3MuZmQtY29tYm9ib3gtaW5wdXRdJzogJ3RydWUnLFxuICAgICAgICAnW2NsYXNzLmZkLWNvbWJvYm94LWN1c3RvbS1jbGFzcy0tbW9iaWxlXSc6ICdtb2JpbGUnLFxuICAgICAgICAnW3N0eWxlLndpZHRoXSc6ICd3aWR0aCdcbiAgICB9LFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBQb3BvdmVyQ29tcG9uZW50LFxuICAgICAgICBQb3BvdmVyQ29udHJvbENvbXBvbmVudCxcbiAgICAgICAgUG9wb3ZlckJvZHlDb21wb25lbnQsXG4gICAgICAgIExpc3RDb21wb25lbnQsXG4gICAgICAgIExpc3RJdGVtQ29tcG9uZW50LFxuICAgICAgICBMaXN0VGl0bGVEaXJlY3RpdmUsXG4gICAgICAgIExpc3RHcm91cEhlYWRlckRpcmVjdGl2ZSxcbiAgICAgICAgSW5wdXRHcm91cENvbXBvbmVudCxcbiAgICAgICAgSW5wdXRHcm91cElucHV0RGlyZWN0aXZlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgQXV0b0NvbXBsZXRlRGlyZWN0aXZlLFxuICAgICAgICBCdXR0b25Db21wb25lbnQsXG4gICAgICAgIEljb25Db21wb25lbnQsXG4gICAgICAgIENvbnRlbnREZW5zaXR5TW9kdWxlLFxuICAgICAgICBEaXNwbGF5Rm5QaXBlLFxuICAgICAgICBTZWFyY2hIaWdobGlnaHRQaXBlLFxuICAgICAgICBGZFRyYW5zbGF0ZVBpcGUsXG4gICAgICAgIExpc3RHcm91cFBpcGUsXG4gICAgICAgIFRydW5jYXRlZFRpdGxlRGlyZWN0aXZlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBDb21ib2JveENvbXBvbmVudDxUID0gYW55PlxuICAgIGltcGxlbWVudHNcbiAgICAgICAgQ29tYm9ib3hJbnRlcmZhY2UsXG4gICAgICAgIFNpbmdsZURyb3Bkb3duVmFsdWVDb250cm9sLFxuICAgICAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICAgICAgT25Jbml0LFxuICAgICAgICBPbkNoYW5nZXMsXG4gICAgICAgIEFmdGVyVmlld0luaXQsXG4gICAgICAgIE9uRGVzdHJveSxcbiAgICAgICAgRm9ybUl0ZW1Db250cm9sXG57XG4gICAgLyoqIElkIGZvciB0aGUgQ29tYm9ib3guICovXG4gICAgQElucHV0KClcbiAgICBjb21ib2JveElkID0gYGZkLWNvbWJvYm94LSR7Y29tYm9ib3hVbmlxdWVJZCsrfWA7XG5cbiAgICAvKiogSWQgYXR0cmlidXRlIGZvciBpbnB1dCBlbGVtZW50IGluc2lkZSBDb21ib2JveCBjb21wb25lbnQgKi9cbiAgICBASW5wdXQoKVxuICAgIGlucHV0SWQgPSAnJztcblxuICAgIC8qKiBBcmlhLWxhYmVsIGZvciBDb21ib2JveC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbDogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBBcmlhLUxhYmVsbGVkYnkgZm9yIGVsZW1lbnQgZGVzY3JpYmluZyBDb21ib2JveC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbGxlZEJ5OiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIElmIGl0IGlzIG1hbmRhdG9yeSBmaWVsZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVxdWlyZWQgPSBmYWxzZTtcblxuICAgIC8qKiBWYWx1ZXMgdG8gYmUgZmlsdGVyZWQgaW4gdGhlIHNlYXJjaCBpbnB1dC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRyb3Bkb3duVmFsdWVzOiBUW10gPSBbXTtcblxuICAgIC8qKiBGaWx0ZXIgZnVuY3Rpb24uIEFjY2VwdHMgYW4gYXJyYXkgb2Ygb2JqZWN0cyBhbmQgYSBzZWFyY2ggdGVybSBhcyBhcmd1bWVudHNcbiAgICAgKiBhbmQgcmV0dXJucyBhIHN0cmluZy4gU2VlIHNlYXJjaCBpbnB1dCBleGFtcGxlcyBmb3IgZGV0YWlscy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGZpbHRlckZuID0gdGhpcy5fZGVmYXVsdEZpbHRlcjtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBzZWFyY2ggaW5wdXQgaXMgZGlzYWJsZWQuICoqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICAvKiogUGxhY2Vob2xkZXIgb2YgdGhlIHNlYXJjaCBpbnB1dC4gKiovXG4gICAgQElucHV0KClcbiAgICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgQ29tYm9ib3ggaXMgYSBTZWFyY2ggRmllbGRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGlzU2VhcmNoID0gZmFsc2U7XG5cbiAgICAvKiogSWNvbiB0byBkaXNwbGF5IGluIHRoZSByaWdodC1zaWRlIGJ1dHRvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGdseXBoID0gJ25hdmlnYXRpb24tZG93bi1hcnJvdyc7XG5cbiAgICAvKiogR2x5cGggZm9udCBmYW1pbHkgKi9cbiAgICBASW5wdXQoKVxuICAgIGdseXBoRm9udDogSWNvbkZvbnQgPSBGRF9ERUZBVUxUX0lDT05fRk9OVF9GQU1JTFk7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHNob3cgdGhlIGNsZWFyIHNlYXJjaCB0ZXJtIGJ1dHRvblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0NsZWFyQnV0dG9uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiAgVGhlIHRyaWdnZXIgZXZlbnRzIHRoYXQgd2lsbCBvcGVuL2Nsb3NlIHRoZSBvcHRpb25zIHBvcG92ZXIuXG4gICAgICogIEFjY2VwdHMgYW55IFtIVE1MIERPTSBFdmVudHNdKGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vanNyZWYvZG9tX29ial9ldmVudC5hc3ApLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdHJpZ2dlcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKiogV2hldGhlciB0aGUgY29tYm9ib3ggc2hvdWxkIGNsb3NlLCB3aGVuIGEgY2xpY2sgaXMgcGVyZm9ybWVkIG91dHNpZGUgaXRzIGJvdW5kYXJpZXMuIFRydWUgYnkgZGVmYXVsdCAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xvc2VPbk91dHNpZGVDbGljayA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBjb21ib2JveCBzaG91bGQgb3Blbiwgd2hlbiBhbnkga2V5IGlzIHByZXNzZWQgaW4gaW5wdXQgKGV4Y2VwdCBFc2NhcGUsIFNwYWNlLCBFbnRlcikuIFRydWUgYnkgZGVmYXVsdFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgb3Blbk9uS2V5Ym9hcmRFdmVudCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiAgVGhlIHN0YXRlIG9mIHRoZSBmb3JtIGNvbnRyb2wgLSBhcHBsaWVzIGNzcyBjbGFzc2VzLlxuICAgICAqICBDYW4gYmUgYHN1Y2Nlc3NgLCBgZXJyb3JgLCBgd2FybmluZ2AsIGBpbmZvcm1hdGlvbmAgb3IgYmxhbmsgZm9yIGRlZmF1bHQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzdGF0ZT86IEZvcm1TdGF0ZXM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdGVtcGxhdGUgd2l0aCB3aGljaCB0byBkaXNwbGF5IHRoZSBpbmRpdmlkdWFsIGxpc3RlZCBpdGVtcy5cbiAgICAgKiBVc2UgaXQgYnkgcGFzc2luZyBhbiBuZy10ZW1wbGF0ZSB3aXRoIGltcGxpY2l0IGNvbnRlbnQuIFNlZSBleGFtcGxlcyBmb3IgbW9yZSBpbmZvLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxDb21ib2JveEl0ZW1EaXJlY3RpdmVDb250ZXh0PFQ+PjtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gaGFuZGxlIGdyb3VwaW5nIG9mIGl0ZW1zLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ3JvdXBGbjogTnVsbGFibGU8R3JvdXBGdW5jdGlvbj47XG5cbiAgICAvKiogTWF4IGhlaWdodCBvZiB0aGUgcG9wb3Zlci4gQW55IG92ZXJmbG93aW5nIGVsZW1lbnRzIHdpbGwgYmUgYWNjZXNzaWJsZSB0aHJvdWdoIHNjcm9sbGluZy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1heEhlaWdodCA9ICc1MHZoJztcblxuICAgIC8qKiBNYXggd2lkdGggb2YgdGhlIGRyb3Bkb3duIGluIHBpeGVscy4gRGVmYXVsdCBpcyA2NDBweCAoNDByZW0pLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZHJvcERvd25NYXhXaWR0aFB4ID0gNjQwO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgZHJvcGRvd24gc2hvdWxkIGhhdmUgbWF4IHdpZHRoLlxuICAgICAqIFNldCB0byB0cnVlIGlmIHlvdSB3YW50IHRoZSBkcm9wZG93biB0byB0YWtlIHRoZSB3aWR0aCBvZiB0aGUgY29udHJvbC5cbiAgICAgKiBEZWZhdWx0IGlzIGZhbHNlICovXG4gICAgQElucHV0KClcbiAgICBub0Ryb3BEb3duTWF4V2lkdGggPSBmYWxzZTtcblxuICAgIC8qKiBDdXN0b20gd2lkdGggb2YgdGhlIGNvbnRyb2wuICovXG4gICAgQElucHV0KClcbiAgICB3aWR0aDogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBTZWFyY2ggZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRoZSBFbnRlciBrZXkgaXMgcHJlc3NlZCBvbiB0aGUgbWFpbiBpbnB1dC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlYXJjaEZuOiAoKSA9PiB2b2lkO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIG1hdGNoaW5nIHN0cmluZyBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQgZHVyaW5nIGZpbHRyYXRpb24uICovXG4gICAgQElucHV0KClcbiAgICBoaWdobGlnaHRpbmcgPSB0cnVlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIHBvcG92ZXIgc2hvdWxkIGNsb3NlIHdoZW4gYSB1c2VyIHNlbGVjdHMgYSByZXN1bHQuICovXG4gICAgQElucHV0KClcbiAgICBjbG9zZU9uU2VsZWN0ID0gdHJ1ZTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBpbnB1dCBmaWVsZCBzaG91bGQgYmUgcG9wdWxhdGVkIHdpdGggdGhlIHJlc3VsdCBwaWNrZWQgYnkgdGhlIHVzZXIuICovXG4gICAgQElucHV0KClcbiAgICBmaWxsT25TZWxlY3QgPSB0cnVlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGF1dG9jb21wbGV0ZSBzaG91bGQgYmUgZW5hYmxlZDsgRW5hYmxlZCBieSBkZWZhdWx0ICovXG4gICAgQElucHV0KClcbiAgICBhdXRvQ29tcGxldGUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogUHJlc2V0IG9wdGlvbnMgZm9yIHRoZSBTZWxlY3QgYm9keSB3aWR0aCwgd2hhdGV2ZXIgaXMgY2hvc2VuLCB0aGUgYm9keSBoYXMgYSA2MDBweCBsaW1pdC5cbiAgICAgKiAqIGBhdC1sZWFzdGAgd2lsbCBhcHBseSBhIG1pbmltdW0gd2lkdGggdG8gdGhlIGJvZHkgZXF1aXZhbGVudCB0byB0aGUgd2lkdGggb2YgdGhlIGNvbnRyb2wuIC0gRGVmYXVsdFxuICAgICAqICogYGVxdWFsYCB3aWxsIGFwcGx5IGEgd2lkdGggdG8gdGhlIGJvZHkgZXF1aXZhbGVudCB0byB0aGUgd2lkdGggb2YgdGhlIGNvbnRyb2wuXG4gICAgICogKiAnZml0LWNvbnRlbnQnIHdpbGwgYXBwbHkgd2lkdGggbmVlZGVkIHRvIHByb3Blcmx5IGRpc3BsYXkgaXRlbXMgaW5zaWRlLCBpbmRlcGVuZGVudCBvZiBjb250cm9sLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmlsbENvbnRyb2xNb2RlOiBQb3BvdmVyRmlsbE1vZGUgPSAnYXQtbGVhc3QnO1xuXG4gICAgLyoqIERlZmluZXMgaWYgY29tYm9ib3ggc2hvdWxkIGJlaGF2ZSBzYW1lIGFzIGRyb3Bkb3duLiBXaGVuIGl0J3MgZW5hYmxlZCB3cml0aW5nIGluc2lkZSB0ZXh0IGlucHV0IHdvbid0XG4gICAgICogdHJpZ2dlciBvbkNoYW5nZSBmdW5jdGlvbiwgdW50aWwgaXQgbWF0Y2hlcyBvbmUgb2YgZGlzcGxheWVkIGRyb3Bkb3duIHZhbHVlcy4gQWxzbyBjb21tdW5pY2F0aW5nIHdpdGggY29tYm9ib3hcbiAgICAgKiBjYW4gYmUgYWNoaWV2ZWQgb25seSBieSBvYmplY3RzIHdpdGggc2FtZSB0eXBlIGFzIGRyb3Bkb3duVmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbW11bmljYXRlQnlPYmplY3QgPSBmYWxzZTtcblxuICAgIC8qKiBEaXNwbGF5IGZ1bmN0aW9uLiBBY2NlcHRzIGFuIG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoZVxuICAgICAqIGl0ZW1zIHBhc3NlZCB0byBkcm9wZG93blZhbHVlcyBhcyBhcmd1bWVudCwgYW5kIG91dHB1dHMgYSBzdHJpbmcuXG4gICAgICogQW4gYXJyb3cgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRoZSAqdGhpcyoga2V5d29yZCBpbiB0aGUgY2FsbGluZyBjb21wb25lbnQuXG4gICAgICogU2VlIHNlYXJjaCBpbnB1dCBleGFtcGxlcyBmb3IgZGV0YWlscy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlGbiA9IHRoaXMuX2RlZmF1bHREaXNwbGF5O1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBBZGRPbiBCdXR0b24gc2hvdWxkIGJlIGZvY3VzYWJsZVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBidXR0b25Gb2N1c2FibGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgY2xlYXIgYnV0dG9uIHNob3VsZCBiZSBmb2N1c2FibGUuXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xlYXJCdXR0b25Gb2N1c2FibGUgPSB0cnVlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNvbWJvYm94IGlzIHJlYWRvbmx5LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVhZE9ubHkgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBjb21ib2JveCBzaG91bGQgYmUgYnVpbHQgb24gbW9iaWxlIG1vZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZSA9IGZhbHNlO1xuXG4gICAgLyoqIE11bHRpIElucHV0IE1vYmlsZSBDb25maWd1cmF0aW9uLCBpdCdzIGFwcGxpZWQgb25seSwgd2hlbiBtb2JpbGUgaXMgZW5hYmxlZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlQ29uZmlnOiBNb2JpbGVNb2RlQ29uZmlnO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gZGlzcGxheSB0aGUgYWRkb24gYnV0dG9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0Ryb3Bkb3duQnV0dG9uID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gcmV0dXJuIHJlc3VsdHMgd2hlcmUgdGhlIGlucHV0IG1hdGNoZXMgdGhlIGVudGlyZSBzdHJpbmcuIEJ5IGRlZmF1bHQsIG9ubHkgcmVzdWx0cyB0aGF0IHN0YXJ0XG4gICAgICogd2l0aCB0aGUgaW5wdXQgc2VhcmNoIHRlcm0gd2lsbCBiZSByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGluY2x1ZGVzID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdG9vbHRpcCBmb3IgdGhlIG11bHRpLWlucHV0IGljb24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB0aXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgbGlzdCBpdGVtIG9wdGlvbnMgc2hvdWxkIGJlIHJlbmRlcmVkIGFzIGJ5bGluZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGJ5bGluZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQWN0aW9uIHRvIHBlcmZvcm0gd2hlbiB1c2VyIHNoaWZ0cyBmb2N1cyBmcm9tIHRoZSBkcm9wZG93bi5cbiAgICAgKiAtIGBjbG9zZWAgd2lsbCBjbG9zZSB0aGUgZHJvcGRvd24gcHJlc2VydmluZyBwcmV2aW91c2x5IHNlbGVjdGVkIHZhbHVlLlxuICAgICAqIC0gYGNsb3NlQW5kU2VsZWN0YCB3aWxsIGNsb3NlIHRoZSBkcm9wZG93biBhbmQgc2VsZWN0IGxhc3QgZm9jdXNlZCBkcm9wZG93biBpdGVtLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGFiT3V0U3RyYXRlZ3k6ICdjbG9zZScgfCAnY2xvc2VBbmRTZWxlY3QnID0gJ2Nsb3NlQW5kU2VsZWN0JztcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gYW4gaXRlbSBpcyBjbGlja2VkLiBVc2UgKiRldmVudCogdG8gcmV0cmlldmUgaXQuICovXG4gICAgQE91dHB1dCgpXG4gICAgcmVhZG9ubHkgaXRlbUNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxDb21ib2JveEl0ZW0+ID0gbmV3IEV2ZW50RW1pdHRlcjxDb21ib2JveEl0ZW0+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCwgd2hlbiB0aGUgY29tYm9ib3gncyBwb3BvdmVyIGJvZHkgaXMgb3BlbmVkIG9yIGNsb3NlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IG9wZW5DaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGlucHV0IHRleHQgY2hhbmdlcy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBpbnB1dFRleHRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoTGlzdENvbXBvbmVudClcbiAgICBsaXN0Q29tcG9uZW50OiBMaXN0Q29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdzZWFyY2hJbnB1dEVsZW1lbnQnKVxuICAgIHNlYXJjaElucHV0RWxlbWVudDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChQb3BvdmVyQ29tcG9uZW50KVxuICAgIHBvcG92ZXJDb21wb25lbnQ6IFBvcG92ZXJDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoSW5wdXRHcm91cENvbXBvbmVudClcbiAgICBpbnB1dEdyb3VwOiBJbnB1dEdyb3VwQ29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKEZEX0xJU1RfTUVTU0FHRV9ESVJFQ1RJVkUpXG4gICAgbGlzdE1lc3NhZ2VzOiBRdWVyeUxpc3Q8TGlzdE1lc3NhZ2VEaXJlY3RpdmU+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdjb250cm9sVGVtcGxhdGUnKVxuICAgIGNvbnRyb2xUZW1wbGF0ZTogVGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdsaXN0VGVtcGxhdGUnKVxuICAgIGxpc3RUZW1wbGF0ZTogVGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKENvbWJvYm94SXRlbURpcmVjdGl2ZSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb21ib2JveEl0ZW1SZW5kZXJlcjogQ29tYm9ib3hJdGVtRGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkcmVuKCdpdGVtJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgcHJpdmF0ZSByZWFkb25seSBpdGVtczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIG1hdGNoaW5nIHN0cmluZyBzaG91bGQgYmUgaGlnaGxpZ2h0ZWQgYWZ0ZXIgY29tYm9ib3ggdmFsdWUgaXMgc2VsZWN0ZWQuICovXG4gICAgZmlsdGVySGlnaGxpZ2h0ID0gdHJ1ZTtcblxuICAgIC8qKiBLZXlzLCB0aGF0IHdvbid0IHRyaWdnZXIgdGhlIHBvcG92ZXIncyBvcGVuIHN0YXRlLCB3aGVuIGRpc3BhdGNoZWQgb24gc2VhcmNoIGlucHV0ICovXG4gICAgcmVhZG9ubHkgbm9uT3BlbmluZ0tleXM6IG51bWJlcltdID0gW1xuICAgICAgICBFU0NBUEUsXG4gICAgICAgIEVOVEVSLFxuICAgICAgICBMRUZUX0FSUk9XLFxuICAgICAgICBSSUdIVF9BUlJPVyxcbiAgICAgICAgRE9XTl9BUlJPVyxcbiAgICAgICAgVVBfQVJST1csXG4gICAgICAgIENPTlRST0wsXG4gICAgICAgIFRBQixcbiAgICAgICAgU0hJRlRcbiAgICBdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfcmVwb3NpdGlvblNjcm9sbFN0cmF0ZWd5OiBSZXBvc2l0aW9uU2Nyb2xsU3RyYXRlZ3k7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF9kZWZhdWx0Rm9udEZhbWlseSA9IEZEX0RFRkFVTFRfSUNPTl9GT05UX0ZBTUlMWTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBjb21ib2JveCBpcyBvcGVuZWQuICovXG4gICAgb3BlbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdGhlIGlucHV0IGNvdXAgaXMgaW4gdGhlIHNoZWxsYmFyLiBPbmx5IGZvciBpbnRlcm5hbCB1c2UgYnkgY29tYm9ib3ggY29tcG9uZW50XG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGluU2hlbGxiYXIgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZGlzcGxheWVkVmFsdWVzOiBhbnlbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBpbnB1dFRleHRWYWx1ZSA9ICcnO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjbGVhcklucHV0QnRuRm9jdXNlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2N1c3RvbVJlbmRlcmVyKCk6IE51bGxhYmxlPFRlbXBsYXRlUmVmPENvbWJvYm94SXRlbURpcmVjdGl2ZUNvbnRleHQ8VD4+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb21ib2JveEl0ZW1SZW5kZXJlcj8udGVtcGxhdGVSZWYgfHwgdGhpcy5pdGVtVGVtcGxhdGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF92YWx1ZTogYW55O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfb3ZlcmxheTogT3ZlcmxheSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2R5bmFtaWNDb21wb25lbnRTZXJ2aWNlOiBEeW5hbWljQ29tcG9uZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZm9jdXNUcmFwU2VydmljZTogRm9jdXNUcmFwU2VydmljZSxcbiAgICAgICAgcmVhZG9ubHkgX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXI6IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXJcbiAgICApIHtcbiAgICAgICAgdGhpcy5fcmVwb3NpdGlvblNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oeyBhdXRvQ2xvc2U6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbkNoYW5nZTogKHZhbHVlOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb25Ub3VjaGVkID0gKCk6IHZvaWQgPT4ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgICAgICAgdGhpcy5zaG93RHJvcGRvd25CdXR0b24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZWZyZXNoRGlzcGxheWVkVmFsdWVzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRyb3Bkb3duVmFsdWVzICYmIChjaGFuZ2VzLmRyb3Bkb3duVmFsdWVzIHx8IGNoYW5nZXMuc2VhcmNoVGVybSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hEaXNwbGF5ZWRWYWx1ZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWRkU2hlbGxiYXJDbGFzcygpO1xuXG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0VXBNb2JpbGVNb2RlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZXR1cFZhbHVlU3luY2hyb25pemF0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvbklucHV0S2V5ZG93bkhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQgfCBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZXZlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQgPT09ICdmcm9tUGFzdGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFRBQikgJiYgdGhpcy5vcGVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2xvc2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRU5URVIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hGbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXNldERpc3BsYXllZFZhbHVlcygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZUhhbmRsZSh0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3BlbiAmJiB0aGlzLmxpc3RDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saXN0Q29tcG9uZW50LnNldEl0ZW1BY3RpdmUoMCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5vcGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nob29zZU90aGVySXRlbSgxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nob29zZU90aGVySXRlbSgtMSk7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuT25LZXlib2FyZEV2ZW50ICYmXG4gICAgICAgICAgICAgICAgIWV2ZW50LmN0cmxLZXkgJiZcbiAgICAgICAgICAgICAgICAhZXZlbnQuYWx0S2V5ICYmXG4gICAgICAgICAgICAgICAgIUtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCB0aGlzLm5vbk9wZW5pbmdLZXlzKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNFbXB0eVZhbHVlICYmIEtleVV0aWwuaXNLZXlUeXBlKGV2ZW50LCAnY29udHJvbCcpICYmICFLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgQkFDS1NQQUNFKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RDb21wb25lbnQuc2V0SXRlbUFjdGl2ZSgwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uSXRlbUtleURvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50LCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRU5URVIpIHx8IEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBTUEFDRSkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLm9uTWVudUNsaWNrSGFuZGxlcih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9uTWVudUNsaWNrSGFuZGxlcih2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXg6IG51bWJlciA9IHRoaXMuZHJvcGRvd25WYWx1ZXMuZmluZEluZGV4KChfdmFsdWUpID0+IF92YWx1ZSA9PT0gdmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlQ2xpY2tBY3Rpb25zKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVySGlnaGxpZ2h0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLml0ZW1DbGlja2VkLmVtaXQoeyBpdGVtOiB2YWx1ZSwgaW5kZXggfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogSGFuZGxlIGRpYWxvZyBkaXNtaXNzaW5nLCBjbG9zZXMgcG9wb3ZlciBhbmQgc2V0cyBiYWNrdXAgZGF0YS4gKi9cbiAgICBkaWFsb2dEaXNtaXNzKHRlcm06IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0VGV4dCA9IHRoaXMuZGlzcGxheUZuKHRlcm0pO1xuICAgICAgICB0aGlzLnNldFZhbHVlKHRlcm0pO1xuICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZUhhbmRsZShmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqIEhhbmRsZSBkaWFsb2cgYXBwcm92YWwsIGNsb3NlcyBwb3BvdmVyIGFuZCBwcm9wYWdhdGVzIGRhdGEgY2hhbmdlcy4gKi9cbiAgICBkaWFsb2dBcHByb3ZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcm9wYWdhdGVDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUoZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKiBJZiB0cnVlIHZhbHVlIGVtcHR5ICovXG4gICAgZ2V0IGlzRW1wdHlWYWx1ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmlucHV0VGV4dCB8fCB0aGlzLmlucHV0VGV4dD8udHJpbSgpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICAvKiogSW5wdXQgdGV4dCBvZiB0aGUgaW5wdXQuICovXG4gICAgc2V0IGlucHV0VGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmNvbW11bmljYXRlQnlPYmplY3QpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnB1dFRleHRDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgIGlmICghdGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb3BhZ2F0ZUNoYW5nZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBpbnB1dFRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRUZXh0VmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEdldCB0aGUgZ2x5cGggdmFsdWUgYmFzZWQgb24gd2hldGhlciB0aGUgY29tYm9ib3ggaXMgdXNlZCBhcyBhIHNlYXJjaCBmaWVsZCBvciBub3QuICovXG4gICAgZ2V0IGdseXBoVmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTZWFyY2ggPyAnc2VhcmNoJyA6IHRoaXMuZ2x5cGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaGFuZGxlQ2xlYXJTZWFyY2hUZXJtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0VGV4dFZhbHVlID0gJyc7XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0Q2hhbmdlLmVtaXQoJycpO1xuICAgICAgICB0aGlzLmRpc3BsYXllZFZhbHVlcyA9IHRoaXMuZHJvcGRvd25WYWx1ZXMgfHwgW107XG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgaWYgKCF0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0VmFsdWUgPSB0aGlzLmRpc3BsYXlGbih2YWx1ZSk7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCBwYXNzZWQgdG8gbGlzdCBjb21wb25lbnQgKi9cbiAgICBoYW5kbGVMaXN0Rm9jdXNFc2NhcGUoZGlyZWN0aW9uOiBGb2N1c0VzY2FwZURpcmVjdGlvbik6IHZvaWQge1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAndXAnKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZVNlYXJjaFRlcm1DaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzcGxheWVkVmFsdWVzID0gdGhpcy5maWx0ZXJGbih0aGlzLmRyb3Bkb3duVmFsdWVzLCB0aGlzLmlucHV0VGV4dCk7XG4gICAgICAgIHRoaXMucG9wb3ZlckNvbXBvbmVudD8ucmVmcmVzaFBvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvblByaW1hcnlCdXR0b25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgLy8gUHJldmVudCBwcmltYXJ5IGJ1dHRvbiBjbGljayBiZWhhdmlvdXIgb24gbW9iaWxlc1xuICAgICAgICBpZiAodGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaEZuKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaEZuKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVzZXREaXNwbGF5ZWRWYWx1ZXMoKTtcbiAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUoIXRoaXMub3Blbik7XG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJIaWdobGlnaHQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMub3Blbikge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaXNPcGVuQ2hhbmdlSGFuZGxlKGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICAvKiogUmVzZXQgZGlzcGxheWVkIHZhbHVlcyBvbiBldmVyeSBtb2JpbGUgb3BlbiAqL1xuICAgICAgICBpZiAodGhpcy5tb2JpbGUgJiYgIXRoaXMub3Blbikge1xuICAgICAgICAgICAgdGhpcy5fcmVzZXREaXNwbGF5ZWRWYWx1ZXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcGVuICE9PSBpc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub3BlbiA9IGlzT3BlbjtcbiAgICAgICAgICAgIHRoaXMub3BlbkNoYW5nZS5lbWl0KGlzT3Blbik7XG5cbiAgICAgICAgICAgIC8qKiBBbGxvdyBjb21ib2JveCB1cCBhbmQgZG93biBhcnJvd3MgdG8gd29yayBwcm9wZXJseSB3aGVuIGNvbWJvYm94IGlzIGluc2lkZSBhIGRpYWxvZyB3aXRoIGEgdHJhcHBlZCBmb2N1cyAqL1xuICAgICAgICAgICAgaWYgKHRoaXMub3Blbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvY3VzVHJhcFNlcnZpY2UucGF1c2VDdXJyZW50Rm9jdXNUcmFwKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvY3VzVHJhcFNlcnZpY2UudW5wYXVzZUN1cnJlbnRGb2N1c1RyYXAoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5vcGVuICYmICF0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVCbHVyKCk7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdGhhdCBoYW5kbGVzIGNvbXBsZXRlIGV2ZW50IGZyb20gYXV0byBjb21wbGV0ZSBkaXJlY3RpdmUsIHNldHRpbmcgdGhlIG5ldyB2YWx1ZSwgYW5kIGNsb3NpbmcgcG9wb3ZlciAqL1xuICAgIGhhbmRsZUF1dG9Db21wbGV0ZShldmVudDogQXV0b0NvbXBsZXRlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRUZXh0ICE9PSBldmVudC50ZXJtKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0VGV4dCA9IGV2ZW50LnRlcm07XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVNlYXJjaFRlcm1DaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQuZm9yY2VDbG9zZSAmJiB0aGlzLmlucHV0VGV4dCkge1xuICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVCbHVyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMub3Blbikge1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQXV0b0NvbXBsZXRlKHtcbiAgICAgICAgICAgICAgICB0ZXJtOiB0aGlzLnNlYXJjaElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlLFxuICAgICAgICAgICAgICAgIGZvcmNlQ2xvc2U6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY2xlYXJJbnB1dEJ0bkZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFySW5wdXRCdG5Gb2N1c2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNsZWFySW5wdXRCdG5CbHVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFySW5wdXRCdG5Gb2N1c2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIEN1cnJlbnQgc2VsZWN0IHZhbHVlICovXG4gICAgZ2V0VmFsdWUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2Nsb3NlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlucHV0VGV4dCA9IHRoaXMuX3ZhbHVlID8gdGhpcy5pbnB1dFRleHQgOiAnJztcbiAgICAgICAgaWYgKHRoaXMudGFiT3V0U3RyYXRlZ3kgPT09ICdjbG9zZUFuZFNlbGVjdCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzZWRJdGVtID0gdGhpcy5saXN0Q29tcG9uZW50LmdldEFjdGl2ZUl0ZW0oKTtcbiAgICAgICAgICAgIGlmIChmb2N1c2VkSXRlbSAmJiAhdGhpcy5pbnB1dFRleHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVDbGlja0FjdGlvbnMoZm9jdXNlZEl0ZW0udmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZUhhbmRsZShmYWxzZSk7XG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGlzU2VsZWN0ZWQodGVybTogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRlcm1WYWx1ZSA9IHRoaXMuY29tbXVuaWNhdGVCeU9iamVjdCA/IHRlcm0gOiB0aGlzLmRpc3BsYXlGbih0ZXJtKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoKSA9PT0gdGVybVZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2dldEdyb3VwSXRlbUlkcyhncm91cEluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXRoaXMuaXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ3JvdXBJdGVtSWRzID0gdGhpcy5pdGVtc1xuICAgICAgICAgICAgLmZpbHRlcigoZWwpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZFdpdGhHcm91cCA9IGVsLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZC13aXRoLWdyb3VwLWluZGV4Jyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBJZHggPSBpZFdpdGhHcm91cC5zcGxpdCgnLScpW2lkV2l0aEdyb3VwLnNwbGl0KCctJykubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdyb3VwSWR4ID09PSBTdHJpbmcoZ3JvdXBJbmRleCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1hcCgoZWwpID0+IGVsLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpKTtcblxuICAgICAgICByZXR1cm4gZ3JvdXBJdGVtSWRzPy5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0aGF0IHBpY2tzIG90aGVyIHZhbHVlIG1vdmVkIGZyb20gY3VycmVudCBvbmUgYnkgb2Zmc2V0LCBjYWxsZWQgb25seSB3aGVuIGNvbWJvYm94IGlzIGNsb3NlZCAqL1xuICAgIHByaXZhdGUgX2Nob29zZU90aGVySXRlbShvZmZzZXQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBhY3RpdmVWYWx1ZTogYW55ID0gdGhpcy5fZ2V0T3B0aW9uT2JqZWN0QnlEaXNwbGF5ZWRWYWx1ZSh0aGlzLmlucHV0VGV4dFZhbHVlKVswXTtcbiAgICAgICAgY29uc3QgaW5kZXg6IG51bWJlciA9IHRoaXMuZHJvcGRvd25WYWx1ZXMuZmluZEluZGV4KCh2YWx1ZSkgPT4gdmFsdWUgPT09IGFjdGl2ZVZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuZHJvcGRvd25WYWx1ZXNbaW5kZXggKyBvZmZzZXRdKSB7XG4gICAgICAgICAgICB0aGlzLm9uTWVudUNsaWNrSGFuZGxlcih0aGlzLmRyb3Bkb3duVmFsdWVzW2luZGV4ICsgb2Zmc2V0XSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIHRoYXQgcmVzZXQgZmlsdGVyaW5nIGZvciBkaXNwbGF5ZWQgdmFsdWVzLiBJdCBvdmVycmlkZXMgZGlzcGxheWVkIHZhbHVlcyBieSBhbGwgcG9zc2libGUgZHJvcGRvd24gdmFsdWVzICovXG4gICAgcHJpdmF0ZSBfcmVzZXREaXNwbGF5ZWRWYWx1ZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzcGxheWVkVmFsdWVzID0gdGhpcy5kcm9wZG93blZhbHVlcyB8fCBbXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FkZFNoZWxsYmFyQ2xhc3MoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmluU2hlbGxiYXIpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZmQtc2hlbGxiYXJfX2lucHV0LWdyb3VwLWlucHV0Jyk7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnB1dEdyb3VwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dEdyb3VwLnNldEluU2hlbGxiYXIodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RlZmF1bHREaXNwbGF5KHN0cjogYW55KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3N0cn1gO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGVmYXVsdEZpbHRlcihjb250ZW50QXJyYXk6IGFueVtdLCBzZWFyY2hUZXJtOiBhbnkpOiBhbnlbXSB7XG4gICAgICAgIHRoaXMuZmlsdGVySGlnaGxpZ2h0ID0gdHJ1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBzZWFyY2hUZXJtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3Qgc2VhcmNoTG93ZXIgPSBzZWFyY2hUZXJtLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICByZXR1cm4gY29udGVudEFycmF5LmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlcm0gPSB0aGlzLmRpc3BsYXlGbihpdGVtKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbmNsdWRlcyA/IHRlcm0uaW5jbHVkZXMoc2VhcmNoTG93ZXIpIDogdGVybS5zdGFydHNXaXRoKHNlYXJjaExvd2VyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc2VhcmNoVGVybSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250ZW50QXJyYXkuZmlsdGVyKChpdGVtKSA9PiBpdGVtID09PSBzZWFyY2hUZXJtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGVudEFycmF5IHx8IFtdO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlQ2xpY2tBY3Rpb25zKHRlcm06IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jbG9zZU9uU2VsZWN0KSB7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZUhhbmRsZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsbE9uU2VsZWN0KSB7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKHRlcm0pO1xuICAgICAgICAgICAgdGhpcy5pbnB1dFRleHQgPSB0aGlzLmRpc3BsYXlGbih0ZXJtKTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLmlucHV0VGV4dDtcbiAgICAgICAgICAgIHRoaXMuX2NkUmVmLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oYW5kbGVTZWFyY2hUZXJtQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRPcHRpb25PYmplY3RCeURpc3BsYXllZFZhbHVlKGRpc3BsYXlWYWx1ZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJvcGRvd25WYWx1ZXMuZmlsdGVyKCh2YWx1ZSkgPT4gdGhpcy5kaXNwbGF5Rm4odmFsdWUpID09PSBkaXNwbGF5VmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVmcmVzaERpc3BsYXllZFZhbHVlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRUZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXllZFZhbHVlcyA9IHRoaXMuZmlsdGVyRm4odGhpcy5kcm9wZG93blZhbHVlcywgdGhpcy5pbnB1dFRleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5ZWRWYWx1ZXMgPSB0aGlzLmRyb3Bkb3duVmFsdWVzIHx8IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wcm9wYWdhdGVDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNvbW11bmljYXRlQnlPYmplY3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuX2dldE9wdGlvbk9iamVjdEJ5RGlzcGxheWVkVmFsdWUodGhpcy5pbnB1dFRleHQpO1xuICAgICAgICAgICAgLy8gRG8gbm90IHNldCBuZXcgdmFsdWUgaWYgdGhlcmVzIG11bHRpcGxlIGl0ZW1zIHRoYXQgaGF2ZSBzYW1lIGxhYmVsLlxuICAgICAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDEgJiYgdGhpcy5kaXNwbGF5Rm4odmFsdWVzWzBdKSAhPT0gdGhpcy5kaXNwbGF5Rm4odGhpcy5nZXRWYWx1ZSgpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodmFsdWVzWzBdKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy5pbnB1dFRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdGhpc1ZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzVmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmlucHV0VGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgc2V0VmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb21tdW5pY2F0ZUJ5T2JqZWN0KSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLmRpc3BsYXlGbih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFVwTW9iaWxlTW9kZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICAgICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDT01CT0JPWF9DT01QT05FTlQsIHVzZVZhbHVlOiB0aGlzIH1dLFxuICAgICAgICAgICAgcGFyZW50OiB0aGlzLl9pbmplY3RvclxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9keW5hbWljQ29tcG9uZW50U2VydmljZS5jcmVhdGVEeW5hbWljQ29tcG9uZW50KFxuICAgICAgICAgICAgeyBsaXN0VGVtcGxhdGU6IHRoaXMubGlzdFRlbXBsYXRlLCBjb250cm9sVGVtcGxhdGU6IHRoaXMuY29udHJvbFRlbXBsYXRlIH0sXG4gICAgICAgICAgICBDb21ib2JveE1vYmlsZUNvbXBvbmVudCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXJSZWY6IHRoaXMuX3ZpZXdDb250YWluZXJSZWZcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaW5qZWN0b3JcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldHVwVmFsdWVTeW5jaHJvbml6YXRpb24oKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExpc3RlbiBmb3IgZm9jdXMgZXZlbnRzIHRvIGRldGVjdCBwcm9ncmFtbWF0aWMgY2hhbmdlc1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIGZyb21FdmVudCh0aGlzLnNlYXJjaElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LCAnZm9jdXMnKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N5bmNEb21WYWx1ZVRvTW9kZWwoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zeW5jRG9tVmFsdWVUb01vZGVsKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoSW5wdXRFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkb21WYWx1ZSA9IHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgICAgIGlmIChkb21WYWx1ZSAhPT0gdGhpcy5pbnB1dFRleHQpIHtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgbW9kZWwgYW5kIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvblxuICAgICAgICAgICAgdGhpcy5pbnB1dFRleHQgPSBkb21WYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlU2VhcmNoVGVybUNoYW5nZSgpO1xuICAgICAgICAgICAgdGhpcy5fY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm1vYmlsZSA/IG1vYmlsZVRlbXBsYXRlIDogZGVza3RvcFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZGVza3RvcFRlbXBsYXRlPlxuICAgIDxmZC1wb3BvdmVyXG4gICAgICAgIGFkZGl0aW9uYWxCb2R5Q2xhc3M9XCJmZC1wb3BvdmVyLWN1c3RvbS1saXN0XCJcbiAgICAgICAgW2NsYXNzLmZkLWNvbWJvYm94LWZ1bGwtd2lkdGhdPVwiaXNTZWFyY2ggfHwgc2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgICAgW2lzT3Blbl09XCJvcGVuICYmIGRpc3BsYXllZFZhbHVlcyAmJiBkaXNwbGF5ZWRWYWx1ZXMubGVuZ3RoID4gMFwiXG4gICAgICAgIChpc09wZW5DaGFuZ2UpPVwiaXNPcGVuQ2hhbmdlSGFuZGxlKCRldmVudClcIlxuICAgICAgICBbZmlsbENvbnRyb2xNb2RlXT1cImZpbGxDb250cm9sTW9kZVwiXG4gICAgICAgIFtzY3JvbGxTdHJhdGVneV09XCJfcmVwb3NpdGlvblNjcm9sbFN0cmF0ZWd5XCJcbiAgICAgICAgW2ZvY3VzVHJhcHBlZF09XCJ0cnVlXCJcbiAgICAgICAgW3RyaWdnZXJzXT1cInRyaWdnZXJzXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRPbmx5XCJcbiAgICAgICAgW21heFdpZHRoXT1cIiFtb2JpbGUgJiYgbm9Ecm9wRG93bk1heFdpZHRoID8gbnVsbCA6IGRyb3BEb3duTWF4V2lkdGhQeFwiXG4gICAgICAgIFtzdHlsZS53aWR0aF09XCJ3aWR0aCAmJiAnMTAwJSdcIlxuICAgICAgICBbY2xvc2VPbk91dHNpZGVDbGlja109XCJjbG9zZU9uT3V0c2lkZUNsaWNrXCJcbiAgICA+XG4gICAgICAgIDxmZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udHJvbFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgIDxmZC1wb3BvdmVyLWJvZHkgW2hpZGRlbl09XCIhZGlzcGxheWVkVmFsdWVzLmxlbmd0aFwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxpc3RUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZmQtcG9wb3Zlci1ib2R5PlxuICAgIDwvZmQtcG9wb3Zlcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgbGV0LXRlcm09XCJ0ZXJtXCIgI2l0ZW1Tb3VyY2U+XG4gICAgQGlmICghX2N1c3RvbVJlbmRlcmVyKSB7XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICBmZC1saXN0LXRpdGxlXG4gICAgICAgICAgICBmZFRydW5jYXRlZFRpdGxlXG4gICAgICAgICAgICBbaW5uZXJIVE1MXT1cInRlcm0gfCBkaXNwbGF5Rm5QaXBlOiBkaXNwbGF5Rm4gfCBoaWdobGlnaHQ6IGlucHV0VGV4dCA6IGhpZ2hsaWdodGluZyAmJiBmaWx0ZXJIaWdobGlnaHRcIlxuICAgICAgICA+XG4gICAgICAgIDwvc3Bhbj5cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfY3VzdG9tUmVuZGVyZXJcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiB0ZXJtLCBpbnB1dFRleHQ6IGlucHV0VGV4dCB9XCJcbiAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbW9iaWxlVGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRyb2xUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNjb250cm9sVGVtcGxhdGU+XG4gICAgPGZkLWlucHV0LWdyb3VwXG4gICAgICAgIFtidXR0b25dPVwic2hvd0Ryb3Bkb3duQnV0dG9uXCJcbiAgICAgICAgW2dseXBoXT1cInNob3dEcm9wZG93bkJ1dHRvbiA/IGdseXBoVmFsdWUgOiBudWxsXCJcbiAgICAgICAgW2dseXBoRm9udF09XCJpc1NlYXJjaCA/IF9kZWZhdWx0Rm9udEZhbWlseSA6IGdseXBoRm9udFwiXG4gICAgICAgIFtzdGF0ZV09XCJzdGF0ZVwiXG4gICAgICAgIFtidXR0b25Gb2N1c2FibGVdPVwiYnV0dG9uRm9jdXNhYmxlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRPbmx5XCJcbiAgICAgICAgW2lzQ29udHJvbF09XCJ0cnVlXCJcbiAgICAgICAgW2lzRXhwYW5kZWRdPVwiIW1vYmlsZSAmJiBvcGVuICYmIGRpc3BsYXllZFZhbHVlcy5sZW5ndGggPiAwXCJcbiAgICAgICAgW3Nob3dGb2N1c109XCIhY2xlYXJJbnB1dEJ0bkZvY3VzZWRcIlxuICAgICAgICBbZ2x5cGhBcmlhTGFiZWxdPVwiYXJpYUxhYmVsIHx8ICgncGxhdGZvcm1NdWx0aUNvbWJvYm94LmlucHV0R2x5cGhBcmlhTGFiZWwnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgW2ljb25UaXRsZV09XCJ0aXRsZSB8fCAoJ3BsYXRmb3JtTXVsdGlDb21ib2JveC5pbnB1dEdseXBoQXJpYUxhYmVsJyB8IGZkVHJhbnNsYXRlKVwiXG4gICAgICAgIChhZGRPbkJ1dHRvbkNsaWNrZWQpPVwib25QcmltYXJ5QnV0dG9uQ2xpY2soKVwiXG4gICAgICAgIChjbGljayk9XCJtb2JpbGUgJiYgaXNPcGVuQ2hhbmdlSGFuZGxlKHRydWUpXCJcbiAgICA+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI3NlYXJjaElucHV0RWxlbWVudFxuICAgICAgICAgICAgZmRrQXV0b0NvbXBsZXRlXG4gICAgICAgICAgICBmZC1pbnB1dC1ncm91cC1pbnB1dFxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgcm9sZT1cImNvbWJvYm94XCJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJjb21ib2JveElkICsgJy1saXN0LXJlc3VsdHMnXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtYXV0b2NvbXBsZXRlXT1cImF1dG9Db21wbGV0ZSAmJiAhbW9iaWxlID8gJ2xpc3QnIDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLW93bnNdPVwiYXV0b0NvbXBsZXRlICYmICFtb2JpbGUgPyBjb21ib2JveElkICsgJy1yZXN1bHQnIDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cImF1dG9Db21wbGV0ZSAmJiAhbW9iaWxlXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiIW1vYmlsZSAmJiBvcGVuICYmIGRpc3BsYXllZFZhbHVlcy5sZW5ndGhcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJyZWFkT25seSB8fCBkaXNhYmxlZCA/IC0xIDogbnVsbFwiXG4gICAgICAgICAgICBbZW5hYmxlXT1cImF1dG9Db21wbGV0ZSAmJiAhbW9iaWxlXCJcbiAgICAgICAgICAgIFtkaXNwbGF5Rm5dPVwiZGlzcGxheUZuXCJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cImRyb3Bkb3duVmFsdWVzXCJcbiAgICAgICAgICAgIFtpbnB1dFRleHRdPVwiaW5wdXRUZXh0XCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZE9ubHlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1yZWFkb25seV09XCJyZWFkT25seVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgW2lkXT1cImlucHV0SWRcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpbnB1dFRleHRcIlxuICAgICAgICAgICAgKG9uQ29tcGxldGUpPVwiaGFuZGxlQXV0b0NvbXBsZXRlKCRldmVudClcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwib25JbnB1dEtleWRvd25IYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgKHBhc3RlKT1cIm9uSW5wdXRLZXlkb3duSGFuZGxlcignZnJvbVBhc3RlJylcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiaGFuZGxlU2VhcmNoVGVybUNoYW5nZSgpXCJcbiAgICAgICAgICAgIChibHVyKT1cImhhbmRsZUJsdXIoKVwiXG4gICAgICAgIC8+XG4gICAgICAgIEBpZiAoKGlzU2VhcmNoIHx8IHNob3dDbGVhckJ1dHRvbikgJiYgaW5wdXRUZXh0ICYmIGlucHV0VGV4dC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtaW5wdXQtZ3JvdXBfX2FkZG9uIGZkLWlucHV0LWdyb3VwX19hZGRvbi0tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZmQtc2hlbGxiYXJfX2lucHV0LWdyb3VwLWFkZG9uXT1cImluU2hlbGxiYXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtaW5wdXQtZ3JvdXBfX2J1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBbZmRUeXBlXT1cImluU2hlbGxiYXIgPyAnc3RhbmRhcmQnIDogJ3RyYW5zcGFyZW50J1wiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQ2xlYXIgaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmQtc2hlbGxiYXJfX2J1dHRvbl09XCJpblNoZWxsYmFyXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiY2xlYXJCdXR0b25Gb2N1c2FibGUgPyAwIDogLTFcIlxuICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwiY2xlYXJJbnB1dEJ0bkZvY3VzKClcIlxuICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJjbGVhcklucHV0QnRuQmx1cigpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9oYW5kbGVDbGVhclNlYXJjaFRlcm0oKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZmQtaWNvbiBnbHlwaD1cImRlY2xpbmVcIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIH1cbiAgICA8L2ZkLWlucHV0LWdyb3VwPlxuICAgIDxkaXYgW2lkXT1cImNvbWJvYm94SWQgKyAnLWxpc3QtcmVzdWx0cydcIiBjbGFzcz1cImZkLWNvbWJvYm94LWNvdW50LWxpc3QtcmVzdWx0c1wiPlxuICAgICAgICB7eyBkaXNwbGF5ZWRWYWx1ZXMubGVuZ3RoIHx8IDAgfX0gcmVzdWx0IGxpc3QgaXRlbXNcbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2xpc3RUZW1wbGF0ZT5cbiAgICA8dWxcbiAgICAgICAgZmQtbGlzdFxuICAgICAgICBjbGFzcz1cImZkLWNvbWJvYm94LWN1c3RvbS1saXN0XCJcbiAgICAgICAgW2Ryb3Bkb3duTW9kZV09XCJ0cnVlXCJcbiAgICAgICAgW2lkXT1cImNvbWJvYm94SWQgKyAnLXJlc3VsdCdcIlxuICAgICAgICByb2xlPVwibGlzdGJveFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJjb21ib2JveElkICsgJy1zZWFyY2gnXCJcbiAgICAgICAgW3N0eWxlLm1heEhlaWdodF09XCIhbW9iaWxlICYmIG1heEhlaWdodFwiXG4gICAgICAgIFtoYXNNZXNzYWdlXT1cImxpc3RNZXNzYWdlcyAmJiBsaXN0TWVzc2FnZXMubGVuZ3RoID4gMFwiXG4gICAgICAgIFtieWxpbmVdPVwiYnlsaW5lXCJcbiAgICAgICAgW3RhYmluZGV4XT1cIjBcIlxuICAgICAgICAoa2V5ZG93bi50YWIpPVwiX2Nsb3NlKClcIlxuICAgICAgICAoa2V5ZG93bi5zaGlmdC50YWIpPVwiX2Nsb3NlKClcIlxuICAgICAgICAoZm9jdXNFc2NhcGVMaXN0KT1cImhhbmRsZUxpc3RGb2N1c0VzY2FwZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgQGlmIChncm91cEZuKSB7XG4gICAgICAgICAgICBAZm9yIChncm91cCBvZiBkaXNwbGF5ZWRWYWx1ZXMgfCBsaXN0R3JvdXBQaXBlOiBncm91cEZuOyB0cmFjayBncm91cC5rZXk7IGxldCBncm91cEluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgIGZkLWxpc3QtaXRlbVxuICAgICAgICAgICAgICAgICAgICBmZC1saXN0LWdyb3VwLWhlYWRlclxuICAgICAgICAgICAgICAgICAgICBhcmlhUm9sZT1cImdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1yb2xlZGVzY3JpcHRpb25dPVwiJ2NvcmVNdWx0aUNvbWJvQm94Lmxpc3RHcm91cEhlYWRlcicgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtb3duc109XCJfZ2V0R3JvdXBJdGVtSWRzKGdyb3VwSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJncm91cC5rZXlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZmQtbGlzdC10aXRsZT57eyBncm91cC5rZXkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICBAZm9yICh0ZXJtIG9mIGdyb3VwLnZhbHVlOyB0cmFjayAkaW5kZXg7IGxldCBpbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgIGZkLWxpc3QtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgI2l0ZW09XCJmZExpc3RJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWFSb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcGxhY2Vob2xkZXJdPVwiZ3JvdXAua2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtc2V0c2l6ZV09XCJncm91cC52YWx1ZS5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1wb3NpbnNldF09XCJpbmRleCArIDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWQtd2l0aC1ncm91cC1pbmRleF09XCJpdGVtLmlkICsgJy1ncm91cC0nICsgZ3JvdXBJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWNvbWJvYm94LWxpc3QtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZCh0ZXJtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidGVybVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkl0ZW1LZXlEb3duSGFuZGxlcigkZXZlbnQsIHRlcm0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk1lbnVDbGlja0hhbmRsZXIodGVybSlcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtU291cmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyB0ZXJtOiB0ZXJtIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIEBmb3IgKHRlcm0gb2YgZGlzcGxheWVkVmFsdWVzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgZmQtbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY29tYm9ib3gtbGlzdC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImlzU2VsZWN0ZWQodGVybSlcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbkl0ZW1LZXlEb3duSGFuZGxlcigkZXZlbnQsIHRlcm0pXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTWVudUNsaWNrSGFuZGxlcih0ZXJtKVwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0ZXJtXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVNvdXJjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyB0ZXJtOiB0ZXJtIH1cIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgPC91bD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=","import { NgModule } from '@angular/core';\nimport { ComboboxItemDirective } from './combobox-item.directive';\nimport { ComboboxComponent } from './combobox.component';\nimport { ListGroupPipe } from './list-group.pipe';\nimport * as i0 from \"@angular/core\";\n/**\n * @deprecated\n * Use `ComboboxComponent` import instead.\n */\nexport class ComboboxModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxModule, imports: [ComboboxComponent, ComboboxItemDirective, ListGroupPipe], exports: [ComboboxComponent, ComboboxItemDirective, ListGroupPipe] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxModule, imports: [ComboboxComponent] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.4\", ngImport: i0, type: ComboboxModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [ComboboxComponent, ComboboxItemDirective, ListGroupPipe],\n exports: [ComboboxComponent, ComboboxItemDirective, ListGroupPipe]\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3gubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2NvbWJvYm94L2NvbWJvYm94Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFFbEQ7OztHQUdHO0FBS0gsTUFBTSxPQUFPLGNBQWM7OEdBQWQsY0FBYzsrR0FBZCxjQUFjLFlBSGIsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxhQUN2RCxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxhQUFhOytHQUV4RCxjQUFjLFlBSGIsaUJBQWlCOzsyRkFHbEIsY0FBYztrQkFKMUIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxhQUFhLENBQUM7b0JBQ2xFLE9BQU8sRUFBRSxDQUFDLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLGFBQWEsQ0FBQztpQkFDckUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tYm9ib3hJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi9jb21ib2JveC1pdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDb21ib2JveENvbXBvbmVudCB9IGZyb20gJy4vY29tYm9ib3guY29tcG9uZW50JztcbmltcG9ydCB7IExpc3RHcm91cFBpcGUgfSBmcm9tICcuL2xpc3QtZ3JvdXAucGlwZSc7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqIFVzZSBgQ29tYm9ib3hDb21wb25lbnRgIGltcG9ydCBpbnN0ZWFkLlxuICovXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtDb21ib2JveENvbXBvbmVudCwgQ29tYm9ib3hJdGVtRGlyZWN0aXZlLCBMaXN0R3JvdXBQaXBlXSxcbiAgICBleHBvcnRzOiBbQ29tYm9ib3hDb21wb25lbnQsIENvbWJvYm94SXRlbURpcmVjdGl2ZSwgTGlzdEdyb3VwUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgQ29tYm9ib3hNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuZGFtZW50YWwtbmd4LWNvcmUtY29tYm9ib3guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvY29tYm9ib3gvZnVuZGFtZW50YWwtbmd4LWNvcmUtY29tYm9ib3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAEO,MAAM,qBAAqB,CAAC;AACnC,IAAI,WAAW,GAAG;AAClB;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,MAAM,EAAE,WAAW,EAAE;AAChD,IAAI;AACJ;AACA,IAAI,OAAO,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE;AAC5C,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AACvL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,qBAAqB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;AAC/O;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,qBAAqB,EAAE,UAAU,EAAE,CAAC;AAC/H,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,QAAQ,EAAE,kBAAkB;AAChD,oBAAoB,UAAU,EAAE;AAChC,iBAAiB;AACjB,SAAS,CAAC,EAAE,cAAc,EAAE,EAAE,iBAAiB,EAAE,CAAC;AAClD,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,EAAE,CAAC;;ACrBP,MAAC,kBAAkB,GAAG,IAAI,cAAc,CAAC,mBAAmB;;ACWjE,MAAM,uBAAuB,SAAS,cAAc,CAAC;AAC5D;AACA,IAAI,WAAW,CAAC,iBAAiB,EAAE;AACnC,QAAQ,KAAK,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,QAAQ,CAAC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI;AAChC,IAAI;AACJ;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,CAAC,6BAA6B,EAAE;AAC5C,IAAI;AACJ;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AAChC,QAAQ,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;AAC3D,IAAI;AACJ;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AAC9B,QAAQ,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;AACvC,IAAI;AACJ;AACA,IAAI,aAAa,CAAC,IAAI,EAAE;AACxB,QAAQ,IAAI,IAAI,EAAE;AAClB,YAAY,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;AAC7D,YAAY,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,EAAE;AACvD,gBAAgB,IAAI,CAAC,KAAK,EAAE;AAC5B,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,6BAA6B,GAAG;AACpC,QAAQ,IAAI,CAAC,UAAU,CAAC;AACxB,aAAa,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACtD,aAAa,SAAS,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAC9D,IAAI;AACJ;AACA,IAAI,KAAK,GAAG;AACZ,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACvE,YAAY,MAAM,EAAE,IAAI;AACxB,YAAY,GAAG,IAAI,CAAC,YAAY;AAChC,YAAY,sBAAsB,EAAE,KAAK;AACzC,YAAY,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa;AACrD,YAAY,eAAe,EAAE;AAC7B,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,4BAA4B,EAAE;AAC3C,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC;AAC5D,YAAY,KAAK,EAAE,CAAC,IAAI,KAAK;AAC7B,gBAAgB,IAAI,IAAI,KAAK,QAAQ,EAAE;AACvC,oBAAoB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC;AACvE,oBAAoB,MAAM,CAAC,WAAW,EAAE;AACxC,gBAAgB;AAChB,YAAY;AACZ,SAAS,CAAC;AACV,IAAI;AACJ;AACA,IAAI,4BAA4B,GAAG;AACnC,QAAQ,IAAI,CAAC,SAAS,CAAC;AACvB,aAAa,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;AAC3C,QAAQ,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AAC5C,aAAa,SAAS,CAAC,MAAM;AAC7B,YAAY,IAAI;AAChB,gBAAgB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC,uCAAuC,CAAC;AACnH,gBAAgB,KAAK,CAAC,KAAK,EAAE;AAC7B,YAAY;AACZ,YAAY,OAAO,KAAK,EAAE;AAC1B,gBAAgB,IAAI,SAAS,EAAE,EAAE;AACjC,oBAAoB,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC;AACjF,gBAAgB;AAChB,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AACtN,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,uBAAuB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,gBAAgB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,kiDAAkiD,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,0BAA0B,EAAE,QAAQ,EAAE,0BAA0B,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,cAAc,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC,yBAAyB,EAAE,kBAAkB,EAAE,0BAA0B,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC,iBAAiB,EAAE,SAAS,EAAE,kBAAkB,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;AACj1G;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,UAAU,EAAE,CAAC;AACjI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,oBAAoB,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE;AACtJ,wBAAwB,iBAAiB;AACzC,wBAAwB,kBAAkB;AAC1C,wBAAwB,mBAAmB;AAC3C,wBAAwB,kBAAkB;AAC1C,wBAAwB,qBAAqB;AAC7C,wBAAwB,0BAA0B;AAClD,wBAAwB,eAAe;AACvC,wBAAwB,mBAAmB;AAC3C,wBAAwB,qBAAqB;AAC7C,wBAAwB,cAAc;AACtC,wBAAwB,cAAc;AACtC,wBAAwB,iBAAiB;AACzC,wBAAwB,gBAAgB;AACxC,wBAAwB;AACxB,qBAAqB,EAAE,QAAQ,EAAE,kiDAAkiD,EAAE;AACrkD,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACnE,oBAAoB,IAAI,EAAE,MAAM;AAChC,oBAAoB,IAAI,EAAE,CAAC,kBAAkB;AAC7C,iBAAiB,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,cAAc,EAAE,CAAC;AAC1D,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,gBAAgB;AACvC,aAAa,CAAC,EAAE,EAAE,CAAC;;AClHZ,MAAM,aAAa,CAAC;AAC3B;AACA,IAAI,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE;AAC5B,QAAQ,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;AACnF,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1K,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;AACxK;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;AACvH,YAAY,IAAI,EAAE,IAAI;AACtB,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,IAAI,EAAE,eAAe;AACzC,oBAAoB,UAAU,EAAE;AAChC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;ACfD,MAAC,qBAAqB,GAAG,IAAI,cAAc,CAAC,qBAAqB;;AC2B7E,IAAI,gBAAgB,GAAG,CAAC;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,iBAAiB,CAAC;AAC/B;AACA,IAAI,IAAI,eAAe,GAAG;AAC1B,QAAQ,OAAO,IAAI,CAAC,qBAAqB,EAAE,WAAW,IAAI,IAAI,CAAC,YAAY;AAC3E,IAAI;AACJ;AACA,IAAI,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE;AACtI,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ;AAChC,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM;AAC5B,QAAQ,IAAI,CAAC,SAAS,GAAG,SAAS;AAClC,QAAQ,IAAI,CAAC,iBAAiB,GAAG,iBAAiB;AAClD,QAAQ,IAAI,CAAC,wBAAwB,GAAG,wBAAwB;AAChE,QAAQ,IAAI,CAAC,iBAAiB,GAAG,iBAAiB;AAClD,QAAQ,IAAI,CAAC,uBAAuB,GAAG,uBAAuB;AAC9D;AACA,QAAQ,IAAI,CAAC,UAAU,GAAG,CAAC,YAAY,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAC7D;AACA,QAAQ,IAAI,CAAC,OAAO,GAAG,EAAE;AACzB;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK;AAC7B;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,EAAE;AAChC;AACA;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc;AAC3C;AACA;AACA;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK;AAC7B;AACA,QAAQ,IAAI,CAAC,KAAK,GAAG,uBAAuB;AAC5C;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,2BAA2B;AACpD;AACA;AACA;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK;AACpC;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,EAAE;AAC1B;AACA,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI;AACvC;AACA;AACA;AACA,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI;AACvC;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM;AAC/B;AACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG,GAAG;AACrC;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG,KAAK;AACvC;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI;AAChC;AACA,QAAQ,IAAI,CAAC,aAAa,GAAG,IAAI;AACjC;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI;AAChC;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,UAAU;AACzC;AACA;AACA;AACA,QAAQ,IAAI,CAAC,mBAAmB,GAAG,KAAK;AACxC;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe;AAC7C;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK;AACpC;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI;AACxC;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK;AAC7B;AACA,QAAQ,IAAI,CAAC,MAAM,GAAG,KAAK;AAC3B;AACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI;AACtC;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK;AAC7B;AACA,QAAQ,IAAI,CAAC,MAAM,GAAG,KAAK;AAC3B;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,gBAAgB;AAC9C;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI,YAAY,EAAE;AAC7C;AACA,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,YAAY,EAAE;AAC5C;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,YAAY,EAAE;AACjD;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI;AACnC;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG;AAC9B,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,YAAY,UAAU;AACtB,YAAY,WAAW;AACvB,YAAY,UAAU;AACtB,YAAY,QAAQ;AACpB,YAAY,OAAO;AACnB,YAAY,GAAG;AACf,YAAY;AACZ,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG,2BAA2B;AAC7D;AACA,QAAQ,IAAI,CAAC,IAAI,GAAG,KAAK;AACzB;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK;AAC/B;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,EAAE;AACjC;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,EAAE;AAChC;AACA,QAAQ,IAAI,CAAC,oBAAoB,GAAG,KAAK;AACzC;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI,YAAY,EAAE;AAChD;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,EAAE,CAAC;AACjC;AACA,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC;AAClC,QAAQ,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACvG,IAAI;AACJ;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC3B,YAAY,IAAI,CAAC,kBAAkB,GAAG,KAAK;AAC3C,QAAQ;AACR,QAAQ,IAAI,CAAC,uBAAuB,EAAE;AACtC,IAAI;AACJ;AACA,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,IAAI,IAAI,CAAC,cAAc,KAAK,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE;AACnF,YAAY,IAAI,CAAC,uBAAuB,EAAE;AAC1C,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE;AACzC,IAAI;AACJ;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,IAAI,CAAC,iBAAiB,EAAE;AAChC,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE;AACzB,YAAY,IAAI,CAAC,gBAAgB,EAAE;AACnC,QAAQ;AACR,QAAQ,IAAI,CAAC,0BAA0B,EAAE;AACzC,IAAI;AACJ;AACA,IAAI,qBAAqB,CAAC,KAAK,EAAE;AACjC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC3B,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACvC,YAAY,IAAI,KAAK,KAAK,WAAW,EAAE;AACvC,gBAAgB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;AAC7C,YAAY;AACZ,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;AAC5D,gBAAgB,IAAI,CAAC,MAAM,EAAE;AAC7B,gBAAgB;AAChB,YAAY;AACZ,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;AACjD,gBAAgB,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnC,oBAAoB,IAAI,CAAC,QAAQ,EAAE;AACnC,gBAAgB;AAChB,YAAY;AACZ,iBAAiB,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;AAC3D,gBAAgB,IAAI,KAAK,CAAC,MAAM,EAAE;AAClC,oBAAoB,IAAI,CAAC,qBAAqB,EAAE;AAChD,oBAAoB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;AACjD,gBAAgB;AAChB,gBAAgB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE;AACrD,oBAAoB,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;AACvD,gBAAgB;AAChB,qBAAqB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACrC,oBAAoB,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAC5C,gBAAgB;AAChB,gBAAgB,KAAK,CAAC,cAAc,EAAE;AACtC,YAAY;AACZ,iBAAiB,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;AACzD,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AACzC,gBAAgB,KAAK,CAAC,cAAc,EAAE;AACtC,YAAY;AACZ,iBAAiB,IAAI,IAAI,CAAC,mBAAmB;AAC7C,gBAAgB,CAAC,KAAK,CAAC,OAAO;AAC9B,gBAAgB,CAAC,KAAK,CAAC,MAAM;AAC7B,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE;AAChE,gBAAgB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;AAC7C,gBAAgB,IAAI,IAAI,CAAC,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE;AACtH,oBAAoB,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;AACvD,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE;AACvC,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;AAChF,YAAY,KAAK,CAAC,cAAc,EAAE;AAClC,YAAY,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAC1C,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,kBAAkB,CAAC,KAAK,EAAE;AAC9B,QAAQ,IAAI,KAAK,IAAI,KAAK,KAAK,CAAC,EAAE;AAClC,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,MAAM,KAAK,KAAK,CAAC;AACrF,YAAY,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;AAC3C,YAAY,IAAI,CAAC,eAAe,GAAG,KAAK;AACxC,YAAY,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACzD,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,aAAa,CAAC,IAAI,EAAE;AACxB,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC7C,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC3B,QAAQ,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AACtC,IAAI;AACJ;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,IAAI,CAAC,gBAAgB,EAAE;AAC/B,QAAQ,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AACtC,IAAI;AACJ;AACA,IAAI,IAAI,YAAY,GAAG;AACvB,QAAQ,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;AACrE,IAAI;AACJ;AACA,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE;AACzB,QAAQ,IAAI,CAAC,cAAc,GAAG,KAAK;AACnC,QAAQ,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AACvC,YAAY,IAAI,CAAC,MAAM,GAAG,KAAK;AAC/B,QAAQ;AACR,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;AACxC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC1B,YAAY,IAAI,CAAC,gBAAgB,EAAE;AACnC,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,SAAS,GAAG;AACpB,QAAQ,OAAO,IAAI,CAAC,cAAc;AAClC,IAAI;AACJ;AACA,IAAI,IAAI,UAAU,GAAG;AACrB,QAAQ,OAAO,IAAI,CAAC,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK;AACpD,IAAI;AACJ;AACA,IAAI,sBAAsB,GAAG;AAC7B,QAAQ,IAAI,CAAC,cAAc,GAAG,EAAE;AAChC,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;AACrC,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE;AACxD,QAAQ,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE;AACrD,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAC1B,YAAY,IAAI,CAAC,gBAAgB,EAAE;AACnC,QAAQ;AACR,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;AACnC,IAAI;AACJ;AACA,IAAI,UAAU,CAAC,KAAK,EAAE;AACtB,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACnD,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC5B,QAAQ,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AAClC,IAAI;AACJ;AACA,IAAI,gBAAgB,CAAC,EAAE,EAAE;AACzB,QAAQ,IAAI,CAAC,QAAQ,GAAG,EAAE;AAC1B,IAAI;AACJ;AACA,IAAI,iBAAiB,CAAC,EAAE,EAAE;AAC1B,QAAQ,IAAI,CAAC,SAAS,GAAG,EAAE;AAC3B,IAAI;AACJ;AACA,IAAI,qBAAqB,CAAC,SAAS,EAAE;AACrC,QAAQ,IAAI,SAAS,KAAK,IAAI,EAAE;AAChC,YAAY,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE;AACzD,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,sBAAsB,GAAG;AAC7B,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC;AACjF,QAAQ,IAAI,CAAC,gBAAgB,EAAE,eAAe,EAAE;AAChD,IAAI;AACJ;AACA,IAAI,oBAAoB,GAAG;AAC3B;AACA,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE;AACzB,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC3B,YAAY,IAAI,CAAC,QAAQ,EAAE;AAC3B,QAAQ;AACR,QAAQ,IAAI,CAAC,qBAAqB,EAAE;AACpC,QAAQ,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3C,QAAQ,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE;AACrD,QAAQ,IAAI,CAAC,eAAe,GAAG,KAAK;AACpC,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE;AACvB,YAAY,IAAI,CAAC,kBAAkB,EAAE,aAAa,CAAC,KAAK,EAAE;AAC1D,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,kBAAkB,CAAC,MAAM,EAAE;AAC/B;AACA,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACvC,YAAY,IAAI,CAAC,qBAAqB,EAAE;AACxC,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AAClC,YAAY,IAAI,CAAC,IAAI,GAAG,MAAM;AAC9B,YAAY,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;AACxC;AACA,YAAY,IAAI,IAAI,CAAC,IAAI,EAAE;AAC3B,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,EAAE;AAC9D,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,EAAE;AAChE,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACxC,YAAY,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAY,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AAChF,QAAQ;AACR,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;AACnC,IAAI;AACJ;AACA,IAAI,gBAAgB,CAAC,UAAU,EAAE;AACjC,QAAQ,IAAI,CAAC,QAAQ,GAAG,UAAU;AAClC,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;AACnC,IAAI;AACJ;AACA,IAAI,kBAAkB,CAAC,KAAK,EAAE;AAC9B,QAAQ,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,IAAI,EAAE;AAC3C,YAAY,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI;AACvC,YAAY,IAAI,CAAC,sBAAsB,EAAE;AACzC,QAAQ;AACR,QAAQ,IAAI,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,EAAE;AAChD,YAAY,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAC1C,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,UAAU,GAAG;AACjB,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACxB,YAAY,IAAI,CAAC,SAAS,EAAE;AAC5B,YAAY,IAAI,CAAC,kBAAkB,CAAC;AACpC,gBAAgB,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK;AACjE,gBAAgB,UAAU,EAAE;AAC5B,aAAa,CAAC;AACd,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,kBAAkB,GAAG;AACzB,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI;AACxC,IAAI;AACJ;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,IAAI,CAAC,oBAAoB,GAAG,KAAK;AACzC,IAAI;AACJ;AACA,IAAI,QAAQ,GAAG;AACf,QAAQ,OAAO,IAAI,CAAC,MAAM;AAC1B,IAAI;AACJ;AACA,IAAI,MAAM,GAAG;AACb,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,GAAG,EAAE;AAC1D,QAAQ,IAAI,IAAI,CAAC,cAAc,KAAK,gBAAgB,EAAE;AACtD,YAAY,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;AAClE,YAAY,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAChD,gBAAgB,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,KAAK,CAAC;AAC3D,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AACtC,QAAQ,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,EAAE;AACrD,IAAI;AACJ;AACA,IAAI,UAAU,CAAC,IAAI,EAAE;AACrB,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAChF,QAAQ,OAAO,IAAI,CAAC,QAAQ,EAAE,KAAK,SAAS;AAC5C,IAAI;AACJ;AACA,IAAI,gBAAgB,CAAC,UAAU,EAAE;AACjC,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;AACjC,YAAY,OAAO,EAAE;AACrB,QAAQ;AACR,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC;AAClC,aAAa,MAAM,CAAC,CAAC,EAAE,KAAK;AAC5B,YAAY,MAAM,WAAW,GAAG,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,qBAAqB,CAAC;AACpF,YAAY,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACtF,YAAY,OAAO,QAAQ,KAAK,MAAM,CAAC,UAAU,CAAC;AAClD,QAAQ,CAAC;AACT,aAAa,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC7D,QAAQ,OAAO,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC;AACtC,IAAI;AACJ;AACA,IAAI,gBAAgB,CAAC,MAAM,EAAE;AAC7B,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AACzF,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,WAAW,CAAC;AACrF,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE;AACjD,YAAY,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;AACxE,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,qBAAqB,GAAG;AAC5B,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE;AACxD,IAAI;AACJ;AACA,IAAI,iBAAiB,GAAG;AACxB,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAY,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,gCAAgC,CAAC;AACjG,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE;AACjC,gBAAgB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC;AACnD,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,eAAe,CAAC,GAAG,EAAE;AACzB,QAAQ,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;AACvB,IAAI;AACJ;AACA,IAAI,cAAc,CAAC,YAAY,EAAE,UAAU,EAAE;AAC7C,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI;AACnC,QAAQ,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AAC5C,YAAY,MAAM,WAAW,GAAG,UAAU,CAAC,iBAAiB,EAAE;AAC9D,YAAY,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK;AACjD,gBAAgB,IAAI,IAAI,EAAE;AAC1B,oBAAoB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE;AACzE,oBAAoB,OAAO,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;AACpG,gBAAgB;AAChB,YAAY,CAAC,CAAC;AACd,QAAQ;AACR,aAAa,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AACjD,YAAY,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,UAAU,CAAC;AACrE,QAAQ;AACR,QAAQ,OAAO,YAAY,IAAI,EAAE;AACjC,IAAI;AACJ;AACA,IAAI,mBAAmB,CAAC,IAAI,EAAE;AAC9B,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;AAChC,YAAY,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAC1C,QAAQ;AACR,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE;AAC/B,YAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC/B,YAAY,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACjD,YAAY,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS;AACxE,YAAY,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;AACvC,YAAY,IAAI,IAAI,CAAC,MAAM,EAAE;AAC7B,gBAAgB,IAAI,CAAC,gBAAgB,EAAE;AACvC,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,sBAAsB,EAAE;AACrC,IAAI;AACJ;AACA,IAAI,gCAAgC,CAAC,YAAY,EAAE;AACnD,QAAQ,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,YAAY,CAAC;AAC5F,IAAI;AACJ;AACA,IAAI,uBAAuB,GAAG;AAC9B,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AAC5B,YAAY,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC;AACrF,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE;AAC5D,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,gBAAgB,GAAG;AACvB,QAAQ,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACtC,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,SAAS,CAAC;AAChF;AACA,YAAY,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE;AACtG,gBAAgB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACxC,YAAY;AACZ,iBAAiB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1C,gBAAgB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;AAC7C,YAAY;AACZ,YAAY,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC7C,YAAY,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;AAC/C,gBAAgB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;AACxC,YAAY;AACZ,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;AACzC,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,QAAQ,CAAC,KAAK,EAAE;AACpB,QAAQ,IAAI,IAAI,CAAC,mBAAmB,EAAE;AACtC,YAAY,IAAI,CAAC,MAAM,GAAG,KAAK;AAC/B,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AAC/C,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,gBAAgB,GAAG;AACvB,QAAQ,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;AACzC,YAAY,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACxE,YAAY,MAAM,EAAE,IAAI,CAAC;AACzB,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,wBAAwB,CAAC,sBAAsB,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,uBAAuB,EAAE;AAClK,YAAY,YAAY,EAAE,IAAI,CAAC;AAC/B,SAAS,EAAE;AACX,YAAY;AACZ,SAAS,CAAC;AACV,IAAI;AACJ;AACA,IAAI,0BAA0B,GAAG;AACjC,QAAQ,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AACtC,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,MAAM;AAC1G,YAAY,IAAI,CAAC,oBAAoB,EAAE;AACvC,QAAQ,CAAC,CAAC,CAAC;AACX,IAAI;AACJ;AACA,IAAI,oBAAoB,GAAG;AAC3B,QAAQ,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AACtC,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK;AACpE,QAAQ,IAAI,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE;AACzC;AACA,YAAY,IAAI,CAAC,SAAS,GAAG,QAAQ;AACrC,YAAY,IAAI,CAAC,sBAAsB,EAAE;AACzC,YAAY,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;AACvC,QAAQ;AACR,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,gBAAgB,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,uBAAuB,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,gBAAgB,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,sBAAsB,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAC9Y,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,EAAE,gCAAgC,EAAE,MAAM,EAAE,yBAAyB,EAAE,MAAM,EAAE,wCAAwC,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE;AAC7lD,YAAY;AACZ,gBAAgB,OAAO,EAAE,iBAAiB;AAC1C,gBAAgB,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;AAChE,gBAAgB,KAAK,EAAE;AACvB,aAAa;AACb,YAAY,uBAAuB,CAAC,iBAAiB,CAAC;AACtD,YAAY,mBAAmB;AAC/B,YAAY,uBAAuB;AACnC,YAAY,+BAA+B,EAAE;AAC7C,YAAY;AACZ,gBAAgB,OAAO,EAAE,qBAAqB;AAC9C,gBAAgB,WAAW,EAAE;AAC7B;AACA,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,uBAAuB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,oBAAoB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,mBAAmB,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,iBAAiB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,cAAc,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,utQAAutQ,EAAE,MAAM,EAAE,CAAC,wQAAwQ,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,EAAE,CAAC,yBAAyB,EAAE,kBAAkB,EAAE,0BAA0B,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,uBAAuB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,EAAE,QAAQ,EAAE,wCAAwC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,EAAE,CAAC,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,qBAAqB,EAAE,WAAW,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,cAAc,EAAE,oBAAoB,CAAC,EAAE,OAAO,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,8BAA8B,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,gCAAgC,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,6CAA6C,EAAE,MAAM,EAAE,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,oBAAoB,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,6CAA6C,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,oBAAoB,EAAE,QAAQ,EAAE,8MAA8M,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,2CAA2C,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,qDAAqD,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,kDAAkD,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,EAAE,QAAQ,EAAE,8DAA8D,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1+Z;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC;AAC3H,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE;AACzD,wBAAwB;AACxB,4BAA4B,OAAO,EAAE,iBAAiB;AACtD,4BAA4B,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;AAC5E,4BAA4B,KAAK,EAAE;AACnC,yBAAyB;AACzB,wBAAwB,uBAAuB,CAAC,iBAAiB,CAAC;AAClE,wBAAwB,mBAAmB;AAC3C,wBAAwB,uBAAuB;AAC/C,wBAAwB,+BAA+B,EAAE;AACzD,wBAAwB;AACxB,4BAA4B,OAAO,EAAE,qBAAqB;AAC1D,4BAA4B,WAAW,EAAE;AACzC;AACA,qBAAqB,EAAE,IAAI,EAAE;AAC7B,wBAAwB,kCAAkC,EAAE,MAAM;AAClE,wBAAwB,2BAA2B,EAAE,MAAM;AAC3D,wBAAwB,0CAA0C,EAAE,QAAQ;AAC5E,wBAAwB,eAAe,EAAE;AACzC,qBAAqB,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE;AACxH,wBAAwB,gBAAgB;AACxC,wBAAwB,gBAAgB;AACxC,wBAAwB,uBAAuB;AAC/C,wBAAwB,oBAAoB;AAC5C,wBAAwB,aAAa;AACrC,wBAAwB,iBAAiB;AACzC,wBAAwB,kBAAkB;AAC1C,wBAAwB,wBAAwB;AAChD,wBAAwB,mBAAmB;AAC3C,wBAAwB,wBAAwB;AAChD,wBAAwB,WAAW;AACnC,wBAAwB,qBAAqB;AAC7C,wBAAwB,eAAe;AACvC,wBAAwB,aAAa;AACrC,wBAAwB,oBAAoB;AAC5C,wBAAwB,aAAa;AACrC,wBAAwB,mBAAmB;AAC3C,wBAAwB,eAAe;AACvC,wBAAwB,aAAa;AACrC,wBAAwB;AACxB,qBAAqB,EAAE,QAAQ,EAAE,utQAAutQ,EAAE,MAAM,EAAE,CAAC,wQAAwQ,CAAC,EAAE;AAC9gR,SAAS,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,gBAAgB,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,uBAAuB,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,gBAAgB,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,sBAAsB,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,UAAU,EAAE,CAAC;AACzR,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;AAC5B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;AACjC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;AACjC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;AAC9B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC;AACxB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;AAC5B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;AAClC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC;AACtC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC;AACtC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC;AACxB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;AAC1B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;AAC5B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;AACrC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;AACrC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC;AACxB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;AAChC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;AAClC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC;AACtC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;AAC5B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;AAClC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,oBAAoB,EAAE,CAAC;AACvC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;AACzB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;AACrC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;AAC3B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC;AACxB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;AACzB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,cAAc,EAAE,CAAC;AACjC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC;AAC9B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;AAClC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;AAChC,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,aAAa;AACpC,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC;AACrC,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,oBAAoB;AAC3C,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;AACnC,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,gBAAgB;AACvC,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC;AAC7B,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,mBAAmB;AAC1C,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE,eAAe;AACrC,gBAAgB,IAAI,EAAE,CAAC,yBAAyB;AAChD,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;AAClC,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,iBAAiB;AACxC,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;AAC/B,gBAAgB,IAAI,EAAE,SAAS;AAC/B,gBAAgB,IAAI,EAAE,CAAC,cAAc;AACrC,aAAa,CAAC,EAAE,qBAAqB,EAAE,CAAC;AACxC,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,qBAAqB;AAC5C,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC;AACxB,gBAAgB,IAAI,EAAE,YAAY;AAClC,gBAAgB,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;AACnD,aAAa,CAAC,EAAE,EAAE,CAAC;;AC9vBnB;AACA;AACA;AACA;AACO,MAAM,cAAc,CAAC;AAC5B,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC/K,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,iBAAiB,EAAE,qBAAqB,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,iBAAiB,EAAE,qBAAqB,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;AACzQ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;AAC/J;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC;AACxH,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,OAAO,EAAE,CAAC,iBAAiB,EAAE,qBAAqB,EAAE,aAAa,CAAC;AACtF,oBAAoB,OAAO,EAAE,CAAC,iBAAiB,EAAE,qBAAqB,EAAE,aAAa;AACrF,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;ACpBb;AACA;AACA;;;;"}