@fundamental-ngx/platform 0.49.0-rc.2 → 0.49.0-rc.21

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.
Files changed (43) hide show
  1. package/esm2022/dynamic-page/dynamic-page.component.mjs +2 -2
  2. package/esm2022/form/multi-input/base-multi-input.mjs +8 -2
  3. package/esm2022/form/switch/switch/switch.component.mjs +2 -2
  4. package/esm2022/search-field/search-field.component.mjs +25 -86
  5. package/esm2022/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +2 -2
  6. package/esm2022/smart-filter-bar/smart-filter-bar.component.mjs +12 -8
  7. package/esm2022/table/components/growing-button/table-growing-button.component.mjs +31 -0
  8. package/esm2022/table/components/table-p13-dialog/columns/columns.component.mjs +3 -3
  9. package/esm2022/table/components/table-row/table-row.component.mjs +20 -3
  10. package/esm2022/table/index.mjs +2 -1
  11. package/esm2022/table/table.component.mjs +29 -9
  12. package/esm2022/table/table.module.mjs +10 -5
  13. package/esm2022/table-helpers/services/table.service.mjs +25 -2
  14. package/esm2022/table-helpers/table.mjs +1 -1
  15. package/esm2022/variant-management/components/manage-variants-dialog/manage-variants-dialog.component.mjs +2 -2
  16. package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs +1 -1
  17. package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs.map +1 -1
  18. package/fesm2022/fundamental-ngx-platform-form.mjs +8 -2
  19. package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
  20. package/fesm2022/fundamental-ngx-platform-search-field.mjs +25 -85
  21. package/fesm2022/fundamental-ngx-platform-search-field.mjs.map +1 -1
  22. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs +10 -5
  23. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
  24. package/fesm2022/fundamental-ngx-platform-table-helpers.mjs +24 -1
  25. package/fesm2022/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
  26. package/fesm2022/fundamental-ngx-platform-table.mjs +81 -16
  27. package/fesm2022/fundamental-ngx-platform-table.mjs.map +1 -1
  28. package/fesm2022/fundamental-ngx-platform-variant-management.mjs +1 -1
  29. package/fesm2022/fundamental-ngx-platform-variant-management.mjs.map +1 -1
  30. package/form/multi-input/base-multi-input.d.ts +4 -1
  31. package/fundamental-ngx-platform-v0.49.0-rc.21.tgz +0 -0
  32. package/package.json +4 -4
  33. package/search-field/search-field.component.d.ts +5 -16
  34. package/smart-filter-bar/smart-filter-bar.component.d.ts +6 -3
  35. package/table/components/growing-button/table-growing-button.component.d.ts +16 -0
  36. package/table/components/table-p13-dialog/columns/columns.component.d.ts +1 -1
  37. package/table/components/table-row/table-row.component.d.ts +3 -0
  38. package/table/index.d.ts +1 -0
  39. package/table/table.component.d.ts +12 -2
  40. package/table/table.module.d.ts +3 -2
  41. package/table-helpers/services/table.service.d.ts +3 -1
  42. package/table-helpers/table.d.ts +2 -1
  43. package/fundamental-ngx-platform-v0.49.0-rc.2.tgz +0 -0
@@ -141,7 +141,7 @@ export class SmartFilterBarSettingsDialogComponent {
141
141
  }
142
142
  }
143
143
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: SmartFilterBarSettingsDialogComponent, deps: [{ token: i1.DialogRef }, { token: FD_LANGUAGE }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
144
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.8", type: SmartFilterBarSettingsDialogComponent, isStandalone: true, selector: "fdp-smart-filter-bar-settings-dialog", providers: [{ provide: RESETTABLE_TOKEN, useExisting: SmartFilterBarSettingsDialogComponent }], viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true }], ngImport: i0, template: "<fd-dialog class=\"fdp-table-p13-filtering-dialog\">\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element>\n <h4 [headerSize]=\"4\" fd-title>\n {{ 'platformSmartFilterBar.selectFiltersHeader' | fdTranslate }}\n </h4>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fdp-table-reset-button></fdp-table-reset-button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n @if (loaded) {\n <fdp-table\n #table\n (rowSelectionChange)=\"_onRowSelectionChange($event)\"\n [dataSource]=\"source\"\n selectionMode=\"multiple\"\n >\n <fdp-table-toolbar\n [hideItemCount]=\"false\"\n [title]=\"'platformSmartFilterBar.selectFiltersAvailableFiltersText' | fdTranslate\"\n >\n <fdp-table-toolbar-actions>\n <fdp-select\n (selectionChange)=\"_onFilterVisibilityChange($event)\"\n [list]=\"_filterVisibilityOptions\"\n [value]=\"_filterVisibilityOptions[0].value\"\n >\n </fdp-select>\n </fdp-table-toolbar-actions>\n </fdp-table-toolbar>\n <fdp-column\n align=\"start\"\n key=\"label\"\n [label]=\"'platformSmartFilterBar.selectFiltersFilterColumnLabel' | fdTranslate\"\n name=\"label\"\n ></fdp-column>\n <fdp-column\n align=\"center\"\n key=\"active\"\n [label]=\"'platformSmartFilterBar.selectFiltersActiveColumnLabel' | fdTranslate\"\n name=\"active\"\n width=\"150px\"\n >\n <fdp-table-cell *fdpCellDef=\"let item\">\n @if (item.active) {\n <fd-icon glyph=\"accept\"></fd-icon>\n }\n </fdp-table-cell>\n </fdp-column>\n </fdp-table>\n } @else {\n <div [style.text-align]=\"'center'\" [style.margin.rem]=\"1\">\n <fd-busy-indicator [loading]=\"true\"></fd-busy-indicator>\n </div>\n }\n </fd-dialog-body>\n <fd-dialog-footer>\n <fd-button-bar\n (click)=\"_confirm()\"\n fdType=\"emphasized\"\n [label]=\"'platformSmartFilterBar.selectFiltersSubmitButtonLabel' | fdTranslate\"\n ></fd-button-bar>\n <fd-button-bar\n (click)=\"_cancel()\"\n fdType=\"transparent\"\n [label]=\"'platformSmartFilterBar.selectFiltersCancelButton' | fdTranslate\"\n ></fd-button-bar>\n </fd-dialog-footer>\n</fd-dialog>\n", dependencies: [{ kind: "component", type: DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "directive", type: TemplateDirective, selector: "[fdkTemplate]", inputs: ["fdkTemplate"] }, { kind: "directive", type: BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "component", type: TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title], span[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: BarRightDirective, selector: "[fd-bar-right]" }, { kind: "component", type: ResetButtonComponent, selector: "fdp-table-reset-button" }, { kind: "component", type: DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "component", type: TableComponent, selector: "fdp-table", inputs: ["name", "id", "enableDragResize", "fixed", "freezeColumnsTo", "freezeEndColumnsTo", "pageScrolling", "pageSize", "pageScrollingThreshold", "bodyHeight", "emptyTableMessage", "noVisibleColumnsMessage", "noHorizontalBorders", "noVerticalBorders", "noBorders", "noBodyBorders", "noOuterBorders", "noBorderX", "noBorderY", "relationKey", "expandedStateKey", "hasChildrenKey", "rowNavigatable", "highlightNavigatedRow", "rowsActivable", "selectedKey", "selectableKey", "trackBy", "rowComparator", "rowsClass", "editableRowSkeleton", "expandOnInit", "rowHeight", "loadPagesBefore", "selectionMode", "enableTristateMode", "semanticHighlighting", "forceCheckedAllState", "ariaLabelledBy", "nonFrozenColumnsMinWidth", "loading"], outputs: ["presetChanged", "rowSelectionChange", "sortChange", "filterChange", "groupChange", "columnsChange", "pageChange", "columnFreeze", "rowToggleOpenState", "rowActivate", "rowNavigate", "emptyRowAdded", "save", "cancel", "tableScrolled", "tableRowsSet", "allRowsExpanded", "allRowsCollapsed", "cellFocused"] }, { kind: "directive", type: TableInitialStateDirective, selector: "[fdpTableInitialState], fdp-table", inputs: ["initialVisibleColumns", "initialSortBy", "initialFilterBy", "initialGroupBy", "initialPage", "state"] }, { kind: "component", type: TableToolbarComponent, selector: "fdp-table-toolbar", inputs: ["shouldOverflow", "title", "searchFieldAriaLabel", "hideItemCount", "hideSearchInput", "showExpandCollapseButtons", "searchSuggestions", "editMode"] }, { kind: "component", type: TableToolbarActionsComponent, selector: "fdp-table-toolbar-actions" }, { kind: "component", type: SelectComponent, selector: "fdp-select", inputs: ["value", "inline"] }, { kind: "component", type: TableColumnComponent, selector: "fdp-column", inputs: ["name", "key", "label", "align", "sortable", "filterable", "visible", "dataType", "groupable", "freezable", "endFreezable", "width", "noWrap", "applyText", "role"] }, { kind: "directive", type: FdpCellDef, selector: "[fdpCellDef]", inputs: ["fdpCellDefAs"] }, { kind: "directive", type: FdpTableCell, selector: "fdp-table-cell" }, { kind: "component", type: IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabel", "ariaLabelledby", "id"] }, { kind: "component", type: BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
144
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.8", type: SmartFilterBarSettingsDialogComponent, isStandalone: true, selector: "fdp-smart-filter-bar-settings-dialog", providers: [{ provide: RESETTABLE_TOKEN, useExisting: SmartFilterBarSettingsDialogComponent }], viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true }], ngImport: i0, template: "<fd-dialog class=\"fdp-table-p13-filtering-dialog\">\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <div fd-bar-left>\n <fd-bar-element>\n <h4 [headerSize]=\"4\" fd-title>\n {{ 'platformSmartFilterBar.selectFiltersHeader' | fdTranslate }}\n </h4>\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element>\n <fdp-table-reset-button></fdp-table-reset-button>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n @if (loaded) {\n <fdp-table\n #table\n (rowSelectionChange)=\"_onRowSelectionChange($event)\"\n [dataSource]=\"source\"\n selectionMode=\"multiple\"\n >\n <fdp-table-toolbar\n [hideItemCount]=\"false\"\n [title]=\"'platformSmartFilterBar.selectFiltersAvailableFiltersText' | fdTranslate\"\n >\n <fdp-table-toolbar-actions>\n <fdp-select\n (selectionChange)=\"_onFilterVisibilityChange($event)\"\n [list]=\"_filterVisibilityOptions\"\n [value]=\"_filterVisibilityOptions[0].value\"\n >\n </fdp-select>\n </fdp-table-toolbar-actions>\n </fdp-table-toolbar>\n <fdp-column\n align=\"start\"\n key=\"label\"\n [label]=\"'platformSmartFilterBar.selectFiltersFilterColumnLabel' | fdTranslate\"\n name=\"label\"\n ></fdp-column>\n <fdp-column\n align=\"center\"\n key=\"active\"\n [label]=\"'platformSmartFilterBar.selectFiltersActiveColumnLabel' | fdTranslate\"\n name=\"active\"\n width=\"150px\"\n >\n <fdp-table-cell *fdpCellDef=\"let item\">\n @if (item.active) {\n <fd-icon glyph=\"accept\"></fd-icon>\n }\n </fdp-table-cell>\n </fdp-column>\n </fdp-table>\n } @else {\n <div [style.text-align]=\"'center'\" [style.margin.rem]=\"1\">\n <fd-busy-indicator [loading]=\"true\"></fd-busy-indicator>\n </div>\n }\n </fd-dialog-body>\n <fd-dialog-footer>\n <fd-button-bar\n (click)=\"_confirm()\"\n fdType=\"emphasized\"\n [label]=\"'platformSmartFilterBar.selectFiltersSubmitButtonLabel' | fdTranslate\"\n ></fd-button-bar>\n <fd-button-bar\n (click)=\"_cancel()\"\n fdType=\"transparent\"\n [label]=\"'platformSmartFilterBar.selectFiltersCancelButton' | fdTranslate\"\n ></fd-button-bar>\n </fd-dialog-footer>\n</fd-dialog>\n", dependencies: [{ kind: "component", type: DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "directive", type: TemplateDirective, selector: "[fdkTemplate]", inputs: ["fdkTemplate"] }, { kind: "directive", type: BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "component", type: TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title], span[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: BarRightDirective, selector: "[fd-bar-right]" }, { kind: "component", type: ResetButtonComponent, selector: "fdp-table-reset-button" }, { kind: "component", type: DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "component", type: TableComponent, selector: "fdp-table", inputs: ["name", "id", "enableDragResize", "fixed", "freezeColumnsTo", "freezeEndColumnsTo", "pageScrolling", "showGrowingButton", "showItemsCount", "pageSize", "pageScrollingThreshold", "bodyHeight", "emptyTableMessage", "noVisibleColumnsMessage", "noHorizontalBorders", "noVerticalBorders", "noBorders", "noBodyBorders", "noOuterBorders", "noBorderX", "noBorderY", "relationKey", "expandedStateKey", "hasChildrenKey", "rowNavigatable", "highlightNavigatedRow", "rowsActivable", "selectedKey", "selectableKey", "trackBy", "rowComparator", "rowsClass", "editableRowSkeleton", "expandOnInit", "rowHeight", "loadPagesBefore", "selectionMode", "enableTristateMode", "semanticHighlighting", "forceCheckedAllState", "ariaLabelledBy", "nonFrozenColumnsMinWidth", "loading"], outputs: ["presetChanged", "rowSelectionChange", "sortChange", "filterChange", "groupChange", "columnsChange", "pageChange", "columnFreeze", "rowToggleOpenState", "rowActivate", "rowNavigate", "emptyRowAdded", "save", "cancel", "tableScrolled", "tableRowsSet", "allRowsExpanded", "allRowsCollapsed", "cellFocused"] }, { kind: "directive", type: TableInitialStateDirective, selector: "[fdpTableInitialState], fdp-table", inputs: ["initialVisibleColumns", "initialSortBy", "initialFilterBy", "initialGroupBy", "initialPage", "state"] }, { kind: "component", type: TableToolbarComponent, selector: "fdp-table-toolbar", inputs: ["shouldOverflow", "title", "searchFieldAriaLabel", "hideItemCount", "hideSearchInput", "showExpandCollapseButtons", "searchSuggestions", "editMode"] }, { kind: "component", type: TableToolbarActionsComponent, selector: "fdp-table-toolbar-actions" }, { kind: "component", type: SelectComponent, selector: "fdp-select", inputs: ["value", "inline"] }, { kind: "component", type: TableColumnComponent, selector: "fdp-column", inputs: ["name", "key", "label", "align", "sortable", "filterable", "visible", "dataType", "groupable", "freezable", "endFreezable", "width", "noWrap", "applyText", "role"] }, { kind: "directive", type: FdpCellDef, selector: "[fdpCellDef]", inputs: ["fdpCellDefAs"] }, { kind: "directive", type: FdpTableCell, selector: "fdp-table-cell" }, { kind: "component", type: IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabel", "ariaLabelledby", "id"] }, { kind: "component", type: BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
145
145
  }
146
146
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: SmartFilterBarSettingsDialogComponent, decorators: [{
147
147
  type: Component,
@@ -180,4 +180,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
180
180
  type: ViewChild,
181
181
  args: ['table']
182
182
  }] } });
183
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZmlsdGVyLWJhci1zZXR0aW5ncy1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zbWFydC1maWx0ZXItYmFyL2NvbXBvbmVudHMvc21hcnQtZmlsdGVyLWJhci1zZXR0aW5ncy1kaWFsb2cvc21hcnQtZmlsdGVyLWJhci1zZXR0aW5ncy1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zbWFydC1maWx0ZXItYmFyL2NvbXBvbmVudHMvc21hcnQtZmlsdGVyLWJhci1zZXR0aW5ncy1kaWFsb2cvc21hcnQtZmlsdGVyLWJhci1zZXR0aW5ncy1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixFQUNqQixNQUFNLEVBQ04sTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQWdCLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFDSCxtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDckIsU0FBUyxFQUNaLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUEyQixlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUUxRixPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLG9CQUFvQixFQUVwQixLQUFLLEVBQ0wsb0JBQW9CLEVBQ3BCLGNBQWMsRUFDZCxlQUFlLEVBRWYsNEJBQTRCLEVBQzVCLHFCQUFxQixFQUN4QixNQUFNLGlDQUFp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TCxlQUFlO3dCQUNmLHFCQUFxQjt3QkFDckIsaUJBQWlCO3dCQUNqQixnQkFBZ0I7d0JBQ2hCLG1CQUFtQjt3QkFDbkIsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLG9CQUFvQjt3QkFDcEIsYUFBYTt3QkFDYixrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsd0JBQXdCO3dCQUN4QiwyQkFBMkI7d0JBQzNCLGNBQWM7d0JBQ2QsMEJBQTBCO3dCQUMxQixxQkFBcUI7d0JBQ3JCLDRCQUE0Qjt3QkFDNUIsZUFBZTt3QkFDZixvQkFBb0I7d0JBQ3BCLFVBQVU7d0JBQ1YsWUFBWTt3QkFDWixhQUFhO3dCQUNiLHFCQUFxQjt3QkFDckIsa0JBQWtCO3dCQUNsQixzQkFBc0I7d0JBQ3RCLGVBQWU7cUJBQ2xCOzswQkFvREksTUFBTTsyQkFBQyxXQUFXO3lFQTlDSCxLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgSW5qZWN0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBpbmplY3QsXG4gICAgc2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBhc3luY1NjaGVkdWxlciwgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG9ic2VydmVPbiB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgICBEaWFsb2dCb2R5Q29tcG9uZW50LFxuICAgIERpYWxvZ0NvbXBvbmVudCxcbiAgICBEaWFsb2dGb290ZXJDb21wb25lbnQsXG4gICAgRGlhbG9nSGVhZGVyQ29tcG9uZW50LFxuICAgIERpYWxvZ1JlZlxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7IEZkcFNlbGVjdGlvbkNoYW5nZUV2ZW50LCBTZWxlY3RDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL2Zvcm0nO1xuaW1wb3J0IHsgU2VsZWN0SXRlbSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2hhcmVkJztcbmltcG9ydCB7XG4gICAgUkVTRVRUQUJMRV9UT0tFTixcbiAgICBSZXNldEJ1dHRvbkNvbXBvbmVudCxcbiAgICBSZXNldHRhYmxlLFxuICAgIFRhYmxlLFxuICAgIFRhYmxlQ29sdW1uQ29tcG9uZW50LFxuICAgIFRhYmxlQ29tcG9uZW50LFxuICAgIFRhYmxlRGF0YVNvdXJjZSxcbiAgICBUYWJsZVJvd1NlbGVjdGlvbkNoYW5nZUV2ZW50LFxuICAgIFRhYmxlVG9vbGJhckFjdGlvbnNDb21wb25lbnQsXG4gICAgVGFibGVUb29sYmFyQ29tcG9uZW50XG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vdGFibGUnO1xuXG5pbXBvcnQgeyBDZGtTY3JvbGxhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7XG4gICAgQmFyRWxlbWVudERpcmVjdGl2ZSxcbiAgICBCYXJMZWZ0RGlyZWN0aXZlLFxuICAgIEJhclJpZ2h0RGlyZWN0aXZlLFxuICAgIEJ1dHRvbkJhckNvbXBvbmVudFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYmFyJztcbmltcG9ydCB7IEJ1c3lJbmRpY2F0b3JDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYnVzeS1pbmRpY2F0b3InO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9pY29uJztcbmltcG9ydCB7IFNjcm9sbGJhckRpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zY3JvbGxiYXInO1xuaW1wb3J0IHsgVGl0bGVDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdGl0bGUnO1xuaW1wb3J0IHtcbiAgICBGRF9MQU5HVUFHRSxcbiAgICBGZExhbmd1YWdlLFxuICAgIEZkTGFuZ3VhZ2VLZXlJZGVudGlmaWVyLFxuICAgIEZkVHJhbnNsYXRlUGlwZSxcbiAgICBUcmFuc2xhdGlvblJlc29sdmVyXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQge1xuICAgIEZkcENlbGxEZWYsXG4gICAgRmRwVGFibGVDZWxsLFxuICAgIFRhYmxlRGF0YVNvdXJjZURpcmVjdGl2ZSxcbiAgICBUYWJsZUhlYWRlclJlc2l6ZXJEaXJlY3RpdmUsXG4gICAgVGFibGVJbml0aWFsU3RhdGVEaXJlY3RpdmVcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS90YWJsZS1oZWxwZXJzJztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyRmllbGREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zbWFydC1maWx0ZXItYmFyLWZpZWxkLWRlZmluaXRpb24nO1xuaW1wb3J0IHsgRmllbGRGaWx0ZXJJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zbWFydC1maWx0ZXItYmFyLWZpZWxkLWZpbHRlci1pdGVtJztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyU2V0dGluZ3NEaWFsb2dDb25maWcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NtYXJ0LWZpbHRlci1iYXItc2V0dGluZ3MtZGlhbG9nLWNvbmZpZyc7XG5pbXBvcnQgeyBTbWFydEZpbHRlckJhclZpc2liaWxpdHlDYXRlZ29yeUxhYmVscyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc21hcnQtZmlsdGVyLWJhci12aXNpYmlsaXR5LWNhdGVnb3J5JztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyT3B0aW9uc0RhdGFQcm92aWRlciB9IGZyb20gJy4vZGF0YS1wcm92aWRlcic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmRwLXNtYXJ0LWZpbHRlci1iYXItc2V0dGluZ3MtZGlhbG9nJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtZmlsdGVyLWJhci1zZXR0aW5ncy1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBSRVNFVFRBQkxFX1RPS0VOLCB1c2VFeGlzdGluZzogU21hcnRGaWx0ZXJCYXJTZXR0aW5nc0RpYWxvZ0NvbXBvbmVudCB9XSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgRGlhbG9nQ29tcG9uZW50LFxuICAgICAgICBEaWFsb2dIZWFkZXJDb21wb25lbnQsXG4gICAgICAgIFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBCYXJMZWZ0RGlyZWN0aXZlLFxuICAgICAgICBCYXJFbGVtZW50RGlyZWN0aXZlLFxuICAgICAgICBUaXRsZUNvbXBvbmVudCxcbiAgICAgICAgQmFyUmlnaHREaXJlY3RpdmUsXG4gICAgICAgIFJlc2V0QnV0dG9uQ29tcG9uZW50LFxuICAgICAgICBDZGtTY3JvbGxhYmxlLFxuICAgICAgICBTY3JvbGxiYXJEaXJlY3RpdmUsXG4gICAgICAgIERpYWxvZ0JvZHlDb21wb25lbnQsXG4gICAgICAgIFRhYmxlRGF0YVNvdXJjZURpcmVjdGl2ZSxcbiAgICAgICAgVGFibGVIZWFkZXJSZXNpemVyRGlyZWN0aXZlLFxuICAgICAgICBUYWJsZUNvbXBvbmVudCxcbiAgICAgICAgVGFibGVJbml0aWFsU3RhdGVEaXJlY3RpdmUsXG4gICAgICAgIFRhYmxlVG9vbGJhckNvbXBvbmVudCxcbiAgICAgICAgVGFibGVUb29sYmFyQWN0aW9uc0NvbXBvbmVudCxcbiAgICAgICAgU2VsZWN0Q29tcG9uZW50LFxuICAgICAgICBUYWJsZUNvbHVtbkNvbXBvbmVudCxcbiAgICAgICAgRmRwQ2VsbERlZixcbiAgICAgICAgRmRwVGFibGVDZWxsLFxuICAgICAgICBJY29uQ29tcG9uZW50LFxuICAgICAgICBEaWFsb2dGb290ZXJDb21wb25lbnQsXG4gICAgICAgIEJ1dHRvbkJhckNvbXBvbmVudCxcbiAgICAgICAgQnVzeUluZGljYXRvckNvbXBvbmVudCxcbiAgICAgICAgRmRUcmFuc2xhdGVQaXBlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBTbWFydEZpbHRlckJhclNldHRpbmdzRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgUmVzZXR0YWJsZSwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgLyoqXG4gICAgICogVGFibGUgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCd0YWJsZScpIHRhYmxlITogVGFibGU7XG5cbiAgICAvKipcbiAgICAgKiBUYWJsZSBkYXRhIHNvdXJjZS5cbiAgICAgKi9cbiAgICBzb3VyY2UhOiBUYWJsZURhdGFTb3VyY2U8RmllbGRGaWx0ZXJJdGVtPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2F2YWlsYWJsZUZpZWxkcyE6IEZpZWxkRmlsdGVySXRlbVtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZmlsdGVyVmlzaWJpbGl0eU9wdGlvbnM6IFNlbGVjdEl0ZW1bXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBsb2FkZWQgPSBmYWxzZTtcblxuICAgIC8qKiBJbmRpY2F0ZXMgd2hlbiByZXNldCBjb21tYW5kIGlzIGF2YWlsYWJsZSAqL1xuICAgIHJlYWRvbmx5IGlzUmVzZXRBdmFpbGFibGUkID0gc2lnbmFsKGZhbHNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2F0ZWdvcnlMYWJlbEtleXM6IFNtYXJ0RmlsdGVyQmFyVmlzaWJpbGl0eUNhdGVnb3J5TGFiZWxzID0ge1xuICAgICAgICBhbGw6ICdzZXR0aW5nc0NhdGVnb3J5QWxsJyxcbiAgICAgICAgdmlzaWJsZTogJ3NldHRpbmdzQ2F0ZWdvcnlWaXNpYmxlJyxcbiAgICAgICAgYWN0aXZlOiAnc2V0dGluZ3NDYXRlZ29yeUFjdGl2ZScsXG4gICAgICAgIHZpc2libGVBbmRBY3RpdmU6ICdzZXR0aW5nc0NhdGVnb3J5VmlzaWJsZUFuZEFjdGl2ZScsXG4gICAgICAgIG1hbmRhdG9yeTogJ3NldHRpbmdzQ2F0ZWdvcnlNYW5kYXRvcnknXG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc291cmNlU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZWxlY3RlZEZpbHRlcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQW4gUnhKUyBTdWJqZWN0IHRoYXQgd2lsbCBraWxsIHRoZSBkYXRhIHN0cmVhbSB1cG9uIGNvbXBvbmVudOKAmXMgZGVzdHJ1Y3Rpb24gKGZvciB1bnN1YnNjcmliaW5nKVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RyYW5zbGF0aW9uUmVzb2x2ZXIgPSBuZXcgVHJhbnNsYXRpb25SZXNvbHZlcigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZGlhbG9nUmVmOiBEaWFsb2dSZWY8U21hcnRGaWx0ZXJTZXR0aW5nc0RpYWxvZ0NvbmZpZywgc3RyaW5nW10+LFxuICAgICAgICBASW5qZWN0KEZEX0xBTkdVQUdFKSBwcml2YXRlIHJlYWRvbmx5IF9sYW5ndWFnZSQ6IE9ic2VydmFibGU8RmRMYW5ndWFnZT4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgICApIHtcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsVGFibGVTdGF0ZSgpO1xuICAgICAgICB0aGlzLl9pbml0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRGaWx0ZXJzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHRoZSBjaGVja2JveCBpbiB0aGUgdGFibGUgcm93IGlmIHRoZSBmaWVsZCBpcyBzZWxlY3RlZC5cbiAgICAgKi9cbiAgICBzZXRTZWxlY3RlZEZpbHRlcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NvdXJjZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fc291cmNlU3Vic2NyaXB0aW9uID0gdGhpcy5zb3VyY2VcbiAgICAgICAgICAgIC5vcGVuKClcbiAgICAgICAgICAgIC5waXBlKG9ic2VydmVPbihhc3luY1NjaGVkdWxlciksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaCgoZmllbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC52aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLnRvZ2dsZVNlbGVjdGFibGVSb3coaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNldHMgZmlsdGVycyBzZWxlY3Rpb24uXG4gICAgICovXG4gICAgcmVzZXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbFRhYmxlU3RhdGUoKTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEZpbHRlcnMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGluaXRpYWwgc3RhdGUgb2YgdGhlIHRhYmxlLlxuICAgICAqL1xuICAgIHNldEluaXRpYWxUYWJsZVN0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hdmFpbGFibGVGaWVsZHMgPSB0aGlzLl9kaWFsb2dSZWYuZGF0YS5maWVsZHNcbiAgICAgICAgICAgIC5maWx0ZXIoKGM6IFNtYXJ0RmlsdGVyQmFyRmllbGREZWZpbml0aW9uKSA9PiBjLmZpbHRlcmFibGUpXG4gICAgICAgICAgICAubWFwKChjOiBTbWFydEZpbHRlckJhckZpZWxkRGVmaW5pdGlvbikgPT4gKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogYy5sYWJlbCxcbiAgICAgICAgICAgICAgICBhY3RpdmU6ICEhdGhpcy5fZGlhbG9nUmVmLmRhdGEuZmlsdGVyQnkuZmluZCgoZikgPT4gZi5maWVsZCA9PT0gYy5uYW1lKSxcbiAgICAgICAgICAgICAgICBtYW5kYXRvcnk6IGMucmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogdGhpcy5fZGlhbG9nUmVmLmRhdGEuc2VsZWN0ZWRGaWx0ZXJzLmluY2x1ZGVzKGMubmFtZSksXG4gICAgICAgICAgICAgICAga2V5OiBjLmtleSxcbiAgICAgICAgICAgICAgICBuYW1lOiBjLm5hbWVcbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICB0aGlzLnNvdXJjZSA9IG5ldyBUYWJsZURhdGFTb3VyY2UobmV3IFNtYXJ0RmlsdGVyQmFyT3B0aW9uc0RhdGFQcm92aWRlcih0aGlzLl9hdmFpbGFibGVGaWVsZHMpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jYW5jZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5kaXNtaXNzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY29uZmlybSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGlhbG9nUmVmLmNsb3NlKHRoaXMuX3NlbGVjdGVkRmlsdGVycyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25Sb3dTZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IFRhYmxlUm93U2VsZWN0aW9uQ2hhbmdlRXZlbnQ8RmllbGRGaWx0ZXJJdGVtPik6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZEZpbHRlcnMgPSBldmVudC5zZWxlY3Rpb24ubWFwKChjKSA9PiBjLm5hbWUpO1xuICAgICAgICB0aGlzLmlzUmVzZXRBdmFpbGFibGUkLnNldCh0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbkZpbHRlclZpc2liaWxpdHlDaGFuZ2UoZXZlbnQ6IEZkcFNlbGVjdGlvbkNoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy50YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgICh0aGlzLnNvdXJjZS5kYXRhUHJvdmlkZXIgYXMgU21hcnRGaWx0ZXJCYXJPcHRpb25zRGF0YVByb3ZpZGVyKS5maWx0ZXIoZXZlbnQucGF5bG9hZCk7XG4gICAgICAgIHRoaXMuc291cmNlLmZldGNoKHRoaXMudGFibGUuZ2V0VGFibGVTdGF0ZSgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgYXN5bmMgX2luaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuX3RyYW5zZm9ybVZpc2liaWxpdHlMYWJlbHMoKTtcbiAgICAgICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtcyB2aXNpYmlsaXR5IG9wdGlvbnMgaW50byBhcHByb3ByaWF0ZSBzZWxlY3QgaXRlbSBvYmplY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBfdHJhbnNmb3JtVmlzaWJpbGl0eUxhYmVscygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgbGFuZyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2xhbmd1YWdlJCk7XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IHsgLi4udGhpcy5fY2F0ZWdvcnlMYWJlbEtleXMgfTtcbiAgICAgICAgZm9yIChjb25zdCBzdHJhdGVneUl0ZW0gaW4gbGFiZWxzKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxhYmVscywgc3RyYXRlZ3lJdGVtKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uS2V5ID0gKCdwbGF0Zm9ybVNtYXJ0RmlsdGVyQmFyLicgK1xuICAgICAgICAgICAgICAgICAgICBsYWJlbHNbc3RyYXRlZ3lJdGVtIGFzIGtleW9mIFNtYXJ0RmlsdGVyQmFyVmlzaWJpbGl0eUNhdGVnb3J5TGFiZWxzXSkgYXMgRmRMYW5ndWFnZUtleUlkZW50aWZpZXI7XG4gICAgICAgICAgICAgICAgbGFiZWxzW3N0cmF0ZWd5SXRlbV0gPSB0aGlzLl90cmFuc2xhdGlvblJlc29sdmVyLnJlc29sdmUobGFuZywgdHJhbnNsYXRpb25LZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW3NlbGVjdFZhbHVlLCBzZWxlY3RMYWJlbF0gb2YgT2JqZWN0LmVudHJpZXMobGFiZWxzKSkge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVyVmlzaWJpbGl0eU9wdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IHNlbGVjdExhYmVsLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBzZWxlY3RWYWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZmQtZGlhbG9nIGNsYXNzPVwiZmRwLXRhYmxlLXAxMy1maWx0ZXJpbmctZGlhbG9nXCI+XG4gICAgPGZkLWRpYWxvZy1oZWFkZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBmZGtUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICAgICAgPGRpdiBmZC1iYXItbGVmdD5cbiAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxoNCBbaGVhZGVyU2l6ZV09XCI0XCIgZmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm1TbWFydEZpbHRlckJhci5zZWxlY3RGaWx0ZXJzSGVhZGVyJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmZC1iYXItcmlnaHQ+XG4gICAgICAgICAgICAgICAgPGZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgICAgICA8ZmRwLXRhYmxlLXJlc2V0LWJ1dHRvbj48L2ZkcC10YWJsZS1yZXNldC1idXR0b24+XG4gICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZmQtZGlhbG9nLWhlYWRlcj5cbiAgICA8ZmQtZGlhbG9nLWJvZHk+XG4gICAgICAgIEBpZiAobG9hZGVkKSB7XG4gICAgICAgICAgICA8ZmRwLXRhYmxlXG4gICAgICAgICAgICAgICAgI3RhYmxlXG4gICAgICAgICAgICAgICAgKHJvd1NlbGVjdGlvbkNoYW5nZSk9XCJfb25Sb3dTZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwic291cmNlXCJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25Nb2RlPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxmZHAtdGFibGUtdG9vbGJhclxuICAgICAgICAgICAgICAgICAgICBbaGlkZUl0ZW1Db3VudF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1TbWFydEZpbHRlckJhci5zZWxlY3RGaWx0ZXJzQXZhaWxhYmxlRmlsdGVyc1RleHQnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGZkcC10YWJsZS10b29sYmFyLWFjdGlvbnM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmRwLXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiX29uRmlsdGVyVmlzaWJpbGl0eUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdF09XCJfZmlsdGVyVmlzaWJpbGl0eU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJfZmlsdGVyVmlzaWJpbGl0eU9wdGlvbnNbMF0udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9mZHAtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L2ZkcC10YWJsZS10b29sYmFyLWFjdGlvbnM+XG4gICAgICAgICAgICAgICAgPC9mZHAtdGFibGUtdG9vbGJhcj5cbiAgICAgICAgICAgICAgICA8ZmRwLWNvbHVtblxuICAgICAgICAgICAgICAgICAgICBhbGlnbj1cInN0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAga2V5PVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtU21hcnRGaWx0ZXJCYXIuc2VsZWN0RmlsdGVyc0ZpbHRlckNvbHVtbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICA+PC9mZHAtY29sdW1uPlxuICAgICAgICAgICAgICAgIDxmZHAtY29sdW1uXG4gICAgICAgICAgICAgICAgICAgIGFsaWduPVwiY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAga2V5PVwiYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybVNtYXJ0RmlsdGVyQmFyLnNlbGVjdEZpbHRlcnNBY3RpdmVDb2x1bW5MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJhY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE1MHB4XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxmZHAtdGFibGUtY2VsbCAqZmRwQ2VsbERlZj1cImxldCBpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWljb24gZ2x5cGg9XCJhY2NlcHRcIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZmRwLXRhYmxlLWNlbGw+XG4gICAgICAgICAgICAgICAgPC9mZHAtY29sdW1uPlxuICAgICAgICAgICAgPC9mZHAtdGFibGU+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGRpdiBbc3R5bGUudGV4dC1hbGlnbl09XCInY2VudGVyJ1wiIFtzdHlsZS5tYXJnaW4ucmVtXT1cIjFcIj5cbiAgICAgICAgICAgICAgICA8ZmQtYnVzeS1pbmRpY2F0b3IgW2xvYWRpbmddPVwidHJ1ZVwiPjwvZmQtYnVzeS1pbmRpY2F0b3I+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIDwvZmQtZGlhbG9nLWJvZHk+XG4gICAgPGZkLWRpYWxvZy1mb290ZXI+XG4gICAgICAgIDxmZC1idXR0b24tYmFyXG4gICAgICAgICAgICAoY2xpY2spPVwiX2NvbmZpcm0oKVwiXG4gICAgICAgICAgICBmZFR5cGU9XCJlbXBoYXNpemVkXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm1TbWFydEZpbHRlckJhci5zZWxlY3RGaWx0ZXJzU3VibWl0QnV0dG9uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICA+PC9mZC1idXR0b24tYmFyPlxuICAgICAgICA8ZmQtYnV0dG9uLWJhclxuICAgICAgICAgICAgKGNsaWNrKT1cIl9jYW5jZWwoKVwiXG4gICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtU21hcnRGaWx0ZXJCYXIuc2VsZWN0RmlsdGVyc0NhbmNlbEJ1dHRvbicgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgID48L2ZkLWJ1dHRvbi1iYXI+XG4gICAgPC9mZC1kaWFsb2ctZm9vdGVyPlxuPC9mZC1kaWFsb2c+XG4iXX0=
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZmlsdGVyLWJhci1zZXR0aW5ncy1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zbWFydC1maWx0ZXItYmFyL2NvbXBvbmVudHMvc21hcnQtZmlsdGVyLWJhci1zZXR0aW5ncy1kaWFsb2cvc21hcnQtZmlsdGVyLWJhci1zZXR0aW5ncy1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zbWFydC1maWx0ZXItYmFyL2NvbXBvbmVudHMvc21hcnQtZmlsdGVyLWJhci1zZXR0aW5ncy1kaWFsb2cvc21hcnQtZmlsdGVyLWJhci1zZXR0aW5ncy1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixFQUNqQixNQUFNLEVBQ04sTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQWdCLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFDSCxtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDckIsU0FBUyxFQUNaLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUEyQixlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUUxRixPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLG9CQUFvQixFQUVwQixLQUFLLEVBQ0wsb0JBQW9CLEVBQ3BCLGNBQWMsRUFDZCxlQUFlLEVBRWYsNEJBQTRCLEVBQzVCLHFCQUFxQixFQUN4QixNQUFNLGlDQUFpQyxDQUFDO0FBRXpDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQ0gsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ3JCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQ0gsV0FBVyxFQUdYLGVBQWUsRUFDZixtQkFBbUIsRUFDdEIsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQ0gsVUFBVSxFQUNWLFlBQVksRUFDWix3QkFBd0IsRUFDeEIsMkJBQTJCLEVBQzNCLDBCQUEwQixFQUM3QixNQUFNLHlDQUF5QyxDQUFDO0FBS2pELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7O0FBc0NwRSxNQUFNLE9BQU8scUNBQXFDO0lBK0M5QyxjQUFjO0lBQ2QsWUFDWSxVQUFnRSxFQUNsQyxVQUFrQyxFQUN2RCxJQUF1QjtRQUZoQyxlQUFVLEdBQVYsVUFBVSxDQUFzRDtRQUNsQyxlQUFVLEdBQVYsVUFBVSxDQUF3QjtRQUN2RCxTQUFJLEdBQUosSUFBSSxDQUFtQjtRQXJDNUMsY0FBYztRQUNkLDZCQUF3QixHQUFpQixFQUFFLENBQUM7UUFFNUMsY0FBYztRQUNkLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFFZixnREFBZ0Q7UUFDdkMsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNDLGNBQWM7UUFDRyx1QkFBa0IsR0FBMkM7WUFDMUUsR0FBRyxFQUFFLHFCQUFxQjtZQUMxQixPQUFPLEVBQUUseUJBQXlCO1lBQ2xDLE1BQU0sRUFBRSx3QkFBd0I7WUFDaEMsZ0JBQWdCLEVBQUUsa0NBQWtDO1lBQ3BELFNBQVMsRUFBRSwyQkFBMkI7U0FDekMsQ0FBQztRQUtGLGNBQWM7UUFDTixxQkFBZ0IsR0FBYSxFQUFFLENBQUM7UUFFeEM7OztXQUdHO1FBQ2MsZ0JBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFbEQsY0FBYztRQUNHLHlCQUFvQixHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQVE5RCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELGNBQWM7SUFDZCxlQUFlO1FBQ1gsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsa0JBQWtCO1FBQ2QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsTUFBTTthQUNqQyxJQUFJLEVBQUU7YUFDTixJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNyRSxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNqQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUMzQixJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDekM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNILG9CQUFvQjtRQUNoQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTTthQUM5QyxNQUFNLENBQUMsQ0FBQyxDQUFnQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO2FBQzFELEdBQUcsQ0FBQyxDQUFDLENBQWdDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDeEMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO1lBQ2QsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDdkUsU0FBUyxFQUFFLENBQUMsQ0FBQyxRQUFRO1lBQ3JCLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDOUQsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHO1lBQ1YsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJO1NBQ2YsQ0FBQyxDQUFDLENBQUM7UUFFUixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksaUNBQWlDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBRUQsY0FBYztJQUNkLE9BQU87UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxjQUFjO0lBQ2QsUUFBUTtRQUNKLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxjQUFjO0lBQ2QscUJBQXFCLENBQUMsS0FBb0Q7UUFDdEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsY0FBYztJQUNkLHlCQUF5QixDQUFDLEtBQThCO1FBQ3BELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2IsT0FBTztTQUNWO1FBQ0EsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFrRCxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxjQUFjO0lBQ04sS0FBSyxDQUFDLEtBQUs7UUFDZixNQUFNLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLDBCQUEwQjtRQUNwQyxNQUFNLElBQUksR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkQsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzlDLEtBQUssTUFBTSxZQUFZLElBQUksTUFBTSxFQUFFO1lBQy9CLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsRUFBRTtnQkFDNUQsTUFBTSxjQUFjLEdBQUcsQ0FBQyx5QkFBeUI7b0JBQzdDLE1BQU0sQ0FBQyxZQUE0RCxDQUFDLENBQTRCLENBQUM7Z0JBQ3JHLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQzthQUNsRjtTQUNKO1FBQ0QsS0FBSyxNQUFNLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDN0QsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQztnQkFDL0IsS0FBSyxFQUFFLFdBQVc7Z0JBQ2xCLEtBQUssRUFBRSxXQUFXO2FBQ3JCLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQzs4R0E1SlEscUNBQXFDLDJDQWtEbEMsV0FBVztrR0FsRGQscUNBQXFDLG1GQS9CbkMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUscUNBQXFDLEVBQUUsQ0FBQywwSEM1RWxHLDhtR0E2RUEsNENERVEsZUFBZSxzR0FDZixxQkFBcUIsNkRBQ3JCLGlCQUFpQixtRkFDakIsZ0JBQWdCLDBEQUNoQixtQkFBbUIsa0ZBQ25CLGNBQWMsdU1BQ2QsaUJBQWlCLDJEQUNqQixvQkFBb0IsbUVBR3BCLG1CQUFtQiwyREFHbkIsY0FBYyxtbkNBQ2QsMEJBQTBCLGtNQUMxQixxQkFBcUIsNk5BQ3JCLDRCQUE0QixzRUFDNUIsZUFBZSxvRkFDZixvQkFBb0IscU9BQ3BCLFVBQVUsbUZBQ1YsWUFBWSwyREFDWixhQUFhLDBJQUNiLHFCQUFxQiw2REFDckIsa0JBQWtCLHlJQUNsQixzQkFBc0IsMElBQ3RCLGVBQWU7OzJGQUdWLHFDQUFxQztrQkFwQ2pELFNBQVM7K0JBQ0ksc0NBQXNDLGlCQUVqQyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyx1Q0FBdUMsRUFBRSxDQUFDLGNBQ2xGLElBQUksV0FDUDt3QkFDTCxlQUFlO3dCQUNmLHFCQUFxQjt3QkFDckIsaUJBQWlCO3dCQUNqQixnQkFBZ0I7d0JBQ2hCLG1CQUFtQjt3QkFDbkIsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLG9CQUFvQjt3QkFDcEIsYUFBYTt3QkFDYixrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsd0JBQXdCO3dCQUN4QiwyQkFBMkI7d0JBQzNCLGNBQWM7d0JBQ2QsMEJBQTBCO3dCQUMxQixxQkFBcUI7d0JBQ3JCLDRCQUE0Qjt3QkFDNUIsZUFBZTt3QkFDZixvQkFBb0I7d0JBQ3BCLFVBQVU7d0JBQ1YsWUFBWTt3QkFDWixhQUFhO3dCQUNiLHFCQUFxQjt3QkFDckIsa0JBQWtCO3dCQUNsQixzQkFBc0I7d0JBQ3RCLGVBQWU7cUJBQ2xCOzswQkFvREksTUFBTTsyQkFBQyxXQUFXO3lFQTlDSCxLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgSW5qZWN0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBpbmplY3QsXG4gICAgc2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBhc3luY1NjaGVkdWxlciwgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG9ic2VydmVPbiB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgICBEaWFsb2dCb2R5Q29tcG9uZW50LFxuICAgIERpYWxvZ0NvbXBvbmVudCxcbiAgICBEaWFsb2dGb290ZXJDb21wb25lbnQsXG4gICAgRGlhbG9nSGVhZGVyQ29tcG9uZW50LFxuICAgIERpYWxvZ1JlZlxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7IEZkcFNlbGVjdGlvbkNoYW5nZUV2ZW50LCBTZWxlY3RDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL2Zvcm0nO1xuaW1wb3J0IHsgU2VsZWN0SXRlbSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2hhcmVkJztcbmltcG9ydCB7XG4gICAgUkVTRVRUQUJMRV9UT0tFTixcbiAgICBSZXNldEJ1dHRvbkNvbXBvbmVudCxcbiAgICBSZXNldHRhYmxlLFxuICAgIFRhYmxlLFxuICAgIFRhYmxlQ29sdW1uQ29tcG9uZW50LFxuICAgIFRhYmxlQ29tcG9uZW50LFxuICAgIFRhYmxlRGF0YVNvdXJjZSxcbiAgICBUYWJsZVJvd1NlbGVjdGlvbkNoYW5nZUV2ZW50LFxuICAgIFRhYmxlVG9vbGJhckFjdGlvbnNDb21wb25lbnQsXG4gICAgVGFibGVUb29sYmFyQ29tcG9uZW50XG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vdGFibGUnO1xuXG5pbXBvcnQgeyBDZGtTY3JvbGxhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7XG4gICAgQmFyRWxlbWVudERpcmVjdGl2ZSxcbiAgICBCYXJMZWZ0RGlyZWN0aXZlLFxuICAgIEJhclJpZ2h0RGlyZWN0aXZlLFxuICAgIEJ1dHRvbkJhckNvbXBvbmVudFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYmFyJztcbmltcG9ydCB7IEJ1c3lJbmRpY2F0b3JDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYnVzeS1pbmRpY2F0b3InO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9pY29uJztcbmltcG9ydCB7IFNjcm9sbGJhckRpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zY3JvbGxiYXInO1xuaW1wb3J0IHsgVGl0bGVDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdGl0bGUnO1xuaW1wb3J0IHtcbiAgICBGRF9MQU5HVUFHRSxcbiAgICBGZExhbmd1YWdlLFxuICAgIEZkTGFuZ3VhZ2VLZXlJZGVudGlmaWVyLFxuICAgIEZkVHJhbnNsYXRlUGlwZSxcbiAgICBUcmFuc2xhdGlvblJlc29sdmVyXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQge1xuICAgIEZkcENlbGxEZWYsXG4gICAgRmRwVGFibGVDZWxsLFxuICAgIFRhYmxlRGF0YVNvdXJjZURpcmVjdGl2ZSxcbiAgICBUYWJsZUhlYWRlclJlc2l6ZXJEaXJlY3RpdmUsXG4gICAgVGFibGVJbml0aWFsU3RhdGVEaXJlY3RpdmVcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS90YWJsZS1oZWxwZXJzJztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyRmllbGREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zbWFydC1maWx0ZXItYmFyLWZpZWxkLWRlZmluaXRpb24nO1xuaW1wb3J0IHsgRmllbGRGaWx0ZXJJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zbWFydC1maWx0ZXItYmFyLWZpZWxkLWZpbHRlci1pdGVtJztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyU2V0dGluZ3NEaWFsb2dDb25maWcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NtYXJ0LWZpbHRlci1iYXItc2V0dGluZ3MtZGlhbG9nLWNvbmZpZyc7XG5pbXBvcnQgeyBTbWFydEZpbHRlckJhclZpc2liaWxpdHlDYXRlZ29yeUxhYmVscyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc21hcnQtZmlsdGVyLWJhci12aXNpYmlsaXR5LWNhdGVnb3J5JztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyT3B0aW9uc0RhdGFQcm92aWRlciB9IGZyb20gJy4vZGF0YS1wcm92aWRlcic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmRwLXNtYXJ0LWZpbHRlci1iYXItc2V0dGluZ3MtZGlhbG9nJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtZmlsdGVyLWJhci1zZXR0aW5ncy1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBSRVNFVFRBQkxFX1RPS0VOLCB1c2VFeGlzdGluZzogU21hcnRGaWx0ZXJCYXJTZXR0aW5nc0RpYWxvZ0NvbXBvbmVudCB9XSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgRGlhbG9nQ29tcG9uZW50LFxuICAgICAgICBEaWFsb2dIZWFkZXJDb21wb25lbnQsXG4gICAgICAgIFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBCYXJMZWZ0RGlyZWN0aXZlLFxuICAgICAgICBCYXJFbGVtZW50RGlyZWN0aXZlLFxuICAgICAgICBUaXRsZUNvbXBvbmVudCxcbiAgICAgICAgQmFyUmlnaHREaXJlY3RpdmUsXG4gICAgICAgIFJlc2V0QnV0dG9uQ29tcG9uZW50LFxuICAgICAgICBDZGtTY3JvbGxhYmxlLFxuICAgICAgICBTY3JvbGxiYXJEaXJlY3RpdmUsXG4gICAgICAgIERpYWxvZ0JvZHlDb21wb25lbnQsXG4gICAgICAgIFRhYmxlRGF0YVNvdXJjZURpcmVjdGl2ZSxcbiAgICAgICAgVGFibGVIZWFkZXJSZXNpemVyRGlyZWN0aXZlLFxuICAgICAgICBUYWJsZUNvbXBvbmVudCxcbiAgICAgICAgVGFibGVJbml0aWFsU3RhdGVEaXJlY3RpdmUsXG4gICAgICAgIFRhYmxlVG9vbGJhckNvbXBvbmVudCxcbiAgICAgICAgVGFibGVUb29sYmFyQWN0aW9uc0NvbXBvbmVudCxcbiAgICAgICAgU2VsZWN0Q29tcG9uZW50LFxuICAgICAgICBUYWJsZUNvbHVtbkNvbXBvbmVudCxcbiAgICAgICAgRmRwQ2VsbERlZixcbiAgICAgICAgRmRwVGFibGVDZWxsLFxuICAgICAgICBJY29uQ29tcG9uZW50LFxuICAgICAgICBEaWFsb2dGb290ZXJDb21wb25lbnQsXG4gICAgICAgIEJ1dHRvbkJhckNvbXBvbmVudCxcbiAgICAgICAgQnVzeUluZGljYXRvckNvbXBvbmVudCxcbiAgICAgICAgRmRUcmFuc2xhdGVQaXBlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBTbWFydEZpbHRlckJhclNldHRpbmdzRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgUmVzZXR0YWJsZSwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgLyoqXG4gICAgICogVGFibGUgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCd0YWJsZScpIHRhYmxlITogVGFibGU7XG5cbiAgICAvKipcbiAgICAgKiBUYWJsZSBkYXRhIHNvdXJjZS5cbiAgICAgKi9cbiAgICBzb3VyY2UhOiBUYWJsZURhdGFTb3VyY2U8RmllbGRGaWx0ZXJJdGVtPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2F2YWlsYWJsZUZpZWxkcyE6IEZpZWxkRmlsdGVySXRlbVtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZmlsdGVyVmlzaWJpbGl0eU9wdGlvbnM6IFNlbGVjdEl0ZW1bXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBsb2FkZWQgPSBmYWxzZTtcblxuICAgIC8qKiBJbmRpY2F0ZXMgd2hlbiByZXNldCBjb21tYW5kIGlzIGF2YWlsYWJsZSAqL1xuICAgIHJlYWRvbmx5IGlzUmVzZXRBdmFpbGFibGUkID0gc2lnbmFsKGZhbHNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2F0ZWdvcnlMYWJlbEtleXM6IFNtYXJ0RmlsdGVyQmFyVmlzaWJpbGl0eUNhdGVnb3J5TGFiZWxzID0ge1xuICAgICAgICBhbGw6ICdzZXR0aW5nc0NhdGVnb3J5QWxsJyxcbiAgICAgICAgdmlzaWJsZTogJ3NldHRpbmdzQ2F0ZWdvcnlWaXNpYmxlJyxcbiAgICAgICAgYWN0aXZlOiAnc2V0dGluZ3NDYXRlZ29yeUFjdGl2ZScsXG4gICAgICAgIHZpc2libGVBbmRBY3RpdmU6ICdzZXR0aW5nc0NhdGVnb3J5VmlzaWJsZUFuZEFjdGl2ZScsXG4gICAgICAgIG1hbmRhdG9yeTogJ3NldHRpbmdzQ2F0ZWdvcnlNYW5kYXRvcnknXG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc291cmNlU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZWxlY3RlZEZpbHRlcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQW4gUnhKUyBTdWJqZWN0IHRoYXQgd2lsbCBraWxsIHRoZSBkYXRhIHN0cmVhbSB1cG9uIGNvbXBvbmVudOKAmXMgZGVzdHJ1Y3Rpb24gKGZvciB1bnN1YnNjcmliaW5nKVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RyYW5zbGF0aW9uUmVzb2x2ZXIgPSBuZXcgVHJhbnNsYXRpb25SZXNvbHZlcigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZGlhbG9nUmVmOiBEaWFsb2dSZWY8U21hcnRGaWx0ZXJTZXR0aW5nc0RpYWxvZ0NvbmZpZywgc3RyaW5nW10+LFxuICAgICAgICBASW5qZWN0KEZEX0xBTkdVQUdFKSBwcml2YXRlIHJlYWRvbmx5IF9sYW5ndWFnZSQ6IE9ic2VydmFibGU8RmRMYW5ndWFnZT4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgICApIHtcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsVGFibGVTdGF0ZSgpO1xuICAgICAgICB0aGlzLl9pbml0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRGaWx0ZXJzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHRoZSBjaGVja2JveCBpbiB0aGUgdGFibGUgcm93IGlmIHRoZSBmaWVsZCBpcyBzZWxlY3RlZC5cbiAgICAgKi9cbiAgICBzZXRTZWxlY3RlZEZpbHRlcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NvdXJjZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fc291cmNlU3Vic2NyaXB0aW9uID0gdGhpcy5zb3VyY2VcbiAgICAgICAgICAgIC5vcGVuKClcbiAgICAgICAgICAgIC5waXBlKG9ic2VydmVPbihhc3luY1NjaGVkdWxlciksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaCgoZmllbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC52aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLnRvZ2dsZVNlbGVjdGFibGVSb3coaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNldHMgZmlsdGVycyBzZWxlY3Rpb24uXG4gICAgICovXG4gICAgcmVzZXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbFRhYmxlU3RhdGUoKTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEZpbHRlcnMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGluaXRpYWwgc3RhdGUgb2YgdGhlIHRhYmxlLlxuICAgICAqL1xuICAgIHNldEluaXRpYWxUYWJsZVN0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hdmFpbGFibGVGaWVsZHMgPSB0aGlzLl9kaWFsb2dSZWYuZGF0YS5maWVsZHNcbiAgICAgICAgICAgIC5maWx0ZXIoKGM6IFNtYXJ0RmlsdGVyQmFyRmllbGREZWZpbml0aW9uKSA9PiBjLmZpbHRlcmFibGUpXG4gICAgICAgICAgICAubWFwKChjOiBTbWFydEZpbHRlckJhckZpZWxkRGVmaW5pdGlvbikgPT4gKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogYy5sYWJlbCxcbiAgICAgICAgICAgICAgICBhY3RpdmU6ICEhdGhpcy5fZGlhbG9nUmVmLmRhdGEuZmlsdGVyQnkuZmluZCgoZikgPT4gZi5maWVsZCA9PT0gYy5uYW1lKSxcbiAgICAgICAgICAgICAgICBtYW5kYXRvcnk6IGMucmVxdWlyZWQsXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogdGhpcy5fZGlhbG9nUmVmLmRhdGEuc2VsZWN0ZWRGaWx0ZXJzLmluY2x1ZGVzKGMubmFtZSksXG4gICAgICAgICAgICAgICAga2V5OiBjLmtleSxcbiAgICAgICAgICAgICAgICBuYW1lOiBjLm5hbWVcbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICB0aGlzLnNvdXJjZSA9IG5ldyBUYWJsZURhdGFTb3VyY2UobmV3IFNtYXJ0RmlsdGVyQmFyT3B0aW9uc0RhdGFQcm92aWRlcih0aGlzLl9hdmFpbGFibGVGaWVsZHMpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jYW5jZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5kaXNtaXNzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY29uZmlybSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGlhbG9nUmVmLmNsb3NlKHRoaXMuX3NlbGVjdGVkRmlsdGVycyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25Sb3dTZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IFRhYmxlUm93U2VsZWN0aW9uQ2hhbmdlRXZlbnQ8RmllbGRGaWx0ZXJJdGVtPik6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZEZpbHRlcnMgPSBldmVudC5zZWxlY3Rpb24ubWFwKChjKSA9PiBjLm5hbWUpO1xuICAgICAgICB0aGlzLmlzUmVzZXRBdmFpbGFibGUkLnNldCh0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbkZpbHRlclZpc2liaWxpdHlDaGFuZ2UoZXZlbnQ6IEZkcFNlbGVjdGlvbkNoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy50YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgICh0aGlzLnNvdXJjZS5kYXRhUHJvdmlkZXIgYXMgU21hcnRGaWx0ZXJCYXJPcHRpb25zRGF0YVByb3ZpZGVyKS5maWx0ZXIoZXZlbnQucGF5bG9hZCk7XG4gICAgICAgIHRoaXMuc291cmNlLmZldGNoKHRoaXMudGFibGUuZ2V0VGFibGVTdGF0ZSgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgYXN5bmMgX2luaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuX3RyYW5zZm9ybVZpc2liaWxpdHlMYWJlbHMoKTtcbiAgICAgICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtcyB2aXNpYmlsaXR5IG9wdGlvbnMgaW50byBhcHByb3ByaWF0ZSBzZWxlY3QgaXRlbSBvYmplY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBfdHJhbnNmb3JtVmlzaWJpbGl0eUxhYmVscygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgbGFuZyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2xhbmd1YWdlJCk7XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IHsgLi4udGhpcy5fY2F0ZWdvcnlMYWJlbEtleXMgfTtcbiAgICAgICAgZm9yIChjb25zdCBzdHJhdGVneUl0ZW0gaW4gbGFiZWxzKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxhYmVscywgc3RyYXRlZ3lJdGVtKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uS2V5ID0gKCdwbGF0Zm9ybVNtYXJ0RmlsdGVyQmFyLicgK1xuICAgICAgICAgICAgICAgICAgICBsYWJlbHNbc3RyYXRlZ3lJdGVtIGFzIGtleW9mIFNtYXJ0RmlsdGVyQmFyVmlzaWJpbGl0eUNhdGVnb3J5TGFiZWxzXSkgYXMgRmRMYW5ndWFnZUtleUlkZW50aWZpZXI7XG4gICAgICAgICAgICAgICAgbGFiZWxzW3N0cmF0ZWd5SXRlbV0gPSB0aGlzLl90cmFuc2xhdGlvblJlc29sdmVyLnJlc29sdmUobGFuZywgdHJhbnNsYXRpb25LZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW3NlbGVjdFZhbHVlLCBzZWxlY3RMYWJlbF0gb2YgT2JqZWN0LmVudHJpZXMobGFiZWxzKSkge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVyVmlzaWJpbGl0eU9wdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IHNlbGVjdExhYmVsLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBzZWxlY3RWYWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZmQtZGlhbG9nIGNsYXNzPVwiZmRwLXRhYmxlLXAxMy1maWx0ZXJpbmctZGlhbG9nXCI+XG4gICAgPGZkLWRpYWxvZy1oZWFkZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBmZGtUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICAgICAgPGRpdiBmZC1iYXItbGVmdD5cbiAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxoNCBbaGVhZGVyU2l6ZV09XCI0XCIgZmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAncGxhdGZvcm1TbWFydEZpbHRlckJhci5zZWxlY3RGaWx0ZXJzSGVhZGVyJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmZC1iYXItcmlnaHQ+XG4gICAgICAgICAgICAgICAgPGZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgICAgICA8ZmRwLXRhYmxlLXJlc2V0LWJ1dHRvbj48L2ZkcC10YWJsZS1yZXNldC1idXR0b24+XG4gICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZmQtZGlhbG9nLWhlYWRlcj5cbiAgICA8ZmQtZGlhbG9nLWJvZHk+XG4gICAgICAgIEBpZiAobG9hZGVkKSB7XG4gICAgICAgICAgICA8ZmRwLXRhYmxlXG4gICAgICAgICAgICAgICAgI3RhYmxlXG4gICAgICAgICAgICAgICAgKHJvd1NlbGVjdGlvbkNoYW5nZSk9XCJfb25Sb3dTZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwic291cmNlXCJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25Nb2RlPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxmZHAtdGFibGUtdG9vbGJhclxuICAgICAgICAgICAgICAgICAgICBbaGlkZUl0ZW1Db3VudF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1TbWFydEZpbHRlckJhci5zZWxlY3RGaWx0ZXJzQXZhaWxhYmxlRmlsdGVyc1RleHQnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGZkcC10YWJsZS10b29sYmFyLWFjdGlvbnM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmRwLXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiX29uRmlsdGVyVmlzaWJpbGl0eUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdF09XCJfZmlsdGVyVmlzaWJpbGl0eU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJfZmlsdGVyVmlzaWJpbGl0eU9wdGlvbnNbMF0udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9mZHAtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L2ZkcC10YWJsZS10b29sYmFyLWFjdGlvbnM+XG4gICAgICAgICAgICAgICAgPC9mZHAtdGFibGUtdG9vbGJhcj5cbiAgICAgICAgICAgICAgICA8ZmRwLWNvbHVtblxuICAgICAgICAgICAgICAgICAgICBhbGlnbj1cInN0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAga2V5PVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtU21hcnRGaWx0ZXJCYXIuc2VsZWN0RmlsdGVyc0ZpbHRlckNvbHVtbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICA+PC9mZHAtY29sdW1uPlxuICAgICAgICAgICAgICAgIDxmZHAtY29sdW1uXG4gICAgICAgICAgICAgICAgICAgIGFsaWduPVwiY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgICAga2V5PVwiYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybVNtYXJ0RmlsdGVyQmFyLnNlbGVjdEZpbHRlcnNBY3RpdmVDb2x1bW5MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJhY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE1MHB4XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxmZHAtdGFibGUtY2VsbCAqZmRwQ2VsbERlZj1cImxldCBpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWljb24gZ2x5cGg9XCJhY2NlcHRcIj48L2ZkLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZmRwLXRhYmxlLWNlbGw+XG4gICAgICAgICAgICAgICAgPC9mZHAtY29sdW1uPlxuICAgICAgICAgICAgPC9mZHAtdGFibGU+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGRpdiBbc3R5bGUudGV4dC1hbGlnbl09XCInY2VudGVyJ1wiIFtzdHlsZS5tYXJnaW4ucmVtXT1cIjFcIj5cbiAgICAgICAgICAgICAgICA8ZmQtYnVzeS1pbmRpY2F0b3IgW2xvYWRpbmddPVwidHJ1ZVwiPjwvZmQtYnVzeS1pbmRpY2F0b3I+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIDwvZmQtZGlhbG9nLWJvZHk+XG4gICAgPGZkLWRpYWxvZy1mb290ZXI+XG4gICAgICAgIDxmZC1idXR0b24tYmFyXG4gICAgICAgICAgICAoY2xpY2spPVwiX2NvbmZpcm0oKVwiXG4gICAgICAgICAgICBmZFR5cGU9XCJlbXBoYXNpemVkXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm1TbWFydEZpbHRlckJhci5zZWxlY3RGaWx0ZXJzU3VibWl0QnV0dG9uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICA+PC9mZC1idXR0b24tYmFyPlxuICAgICAgICA8ZmQtYnV0dG9uLWJhclxuICAgICAgICAgICAgKGNsaWNrKT1cIl9jYW5jZWwoKVwiXG4gICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtU21hcnRGaWx0ZXJCYXIuc2VsZWN0RmlsdGVyc0NhbmNlbEJ1dHRvbicgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgID48L2ZkLWJ1dHRvbi1iYXI+XG4gICAgPC9mZC1kaWFsb2ctZm9vdGVyPlxuPC9mZC1kaWFsb2c+XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { booleanAttribute, ChangeDetectionStrategy, Component, computed, ContentChildren, DestroyRef, EventEmitter, forwardRef, Injector, Input, Output, QueryList, signal, ViewChild, ViewEncapsulation } from '@angular/core';
1
+ import { booleanAttribute, ChangeDetectionStrategy, Component, computed, ContentChildren, DestroyRef, EventEmitter, forwardRef, inject, Injector, Input, Output, QueryList, signal, ViewChild, ViewEncapsulation } from '@angular/core';
2
2
  import { Validators } from '@angular/forms';
3
3
  import { BehaviorSubject, debounceTime, filter, firstValueFrom, Subject, Subscription } from 'rxjs';
4
4
  import { map, startWith, take, takeUntil } from 'rxjs/operators';
@@ -22,8 +22,7 @@ import { SmartFilterBar } from './smart-filter-bar.class';
22
22
  import { SmartFilterBarService } from './smart-filter-bar.service';
23
23
  import * as i0 from "@angular/core";
24
24
  import * as i1 from "@fundamental-ngx/core/dialog";
25
- import * as i2 from "./smart-filter-bar.service";
26
- import * as i3 from "@fundamental-ngx/platform/form";
25
+ import * as i2 from "@fundamental-ngx/platform/form";
27
26
  const defaultColumnsLayout = 'XL4-L3-M2-S1';
28
27
  function getColumnsNumber(layout) {
29
28
  return Math.max(...layout.split('-').map((part) => {
@@ -60,10 +59,9 @@ export class SmartFilterBarComponent extends SmartFilterBar {
60
59
  return this._subject?.getDataSource() ? this._subject.getDataSource().isDataLoading : true;
61
60
  }
62
61
  /** @hidden */
63
- constructor(_dialogService, _smartFilterBarService, _fgService, _injector, _destroyRef) {
62
+ constructor(_dialogService, _fgService, _injector, _destroyRef) {
64
63
  super();
65
64
  this._dialogService = _dialogService;
66
- this._smartFilterBarService = _smartFilterBarService;
67
65
  this._fgService = _fgService;
68
66
  this._injector = _injector;
69
67
  this._destroyRef = _destroyRef;
@@ -119,6 +117,12 @@ export class SmartFilterBarComponent extends SmartFilterBar {
119
117
  this._ignorePresetChange = false;
120
118
  /** @hidden */
121
119
  this._refresh$ = new Subject();
120
+ /**
121
+ * @hidden
122
+ * Smart filter bar service may be provided by parent component that adds custom configuration, so we need to check if it's provided.
123
+ */
124
+ this._smartFilterBarService = inject(SmartFilterBarService, { optional: true, skipSelf: true }) ??
125
+ inject(SmartFilterBarService, { self: true });
122
126
  this._fgService.addComponent(SmartFilterBarConditionFieldComponent, [SMART_FILTER_BAR_RENDERER_COMPONENT]);
123
127
  }
124
128
  /** @hidden */
@@ -483,7 +487,7 @@ export class SmartFilterBarComponent extends SmartFilterBar {
483
487
  this.selectedFilters$.set(filters.filter((f, i) => filters.indexOf(f) === i));
484
488
  this._formGenerator.refreshStepsVisibility();
485
489
  }
486
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: SmartFilterBarComponent, deps: [{ token: i1.DialogService }, { token: i2.SmartFilterBarService }, { token: i3.FormGeneratorService }, { token: i0.Injector }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component }); }
490
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: SmartFilterBarComponent, deps: [{ token: i1.DialogService }, { token: i2.FormGeneratorService }, { token: i0.Injector }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component }); }
487
491
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.8", type: SmartFilterBarComponent, isStandalone: true, selector: "fdp-smart-filter-bar", inputs: { subject: "subject", transparent: ["transparent", "transparent", booleanAttribute], filtersColumnLayout: "filtersColumnLayout", liveUpdate: ["liveUpdate", "liveUpdate", booleanAttribute], hideToolbar: ["hideToolbar", "hideToolbar", booleanAttribute] }, outputs: { smartFiltersChanged: "smartFiltersChanged", smartFiltersApplied: "smartFiltersApplied", searchInputChanged: "searchInputChanged" }, host: { properties: { "class.fdp-smart-filter-bar--transparent": "transparent" }, classAttribute: "fdp-smart-filter-bar" }, providers: [
488
492
  smartFilterBarProvider,
489
493
  SmartFilterBarService,
@@ -518,7 +522,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
518
522
  FormGeneratorComponent,
519
523
  FdTranslatePipe
520
524
  ], template: "@if (!hideToolbar) {\n <fd-toolbar fdType=\"transparent\">\n @if (_toolbarItems) {\n @for (template of _toolbarItems; track template) {\n <ng-template [ngTemplateOutlet]=\"template\"></ng-template>\n <fd-toolbar-separator></fd-toolbar-separator>\n }\n }\n <fdp-search-field\n (inputChange)=\"onSearchInputChange($event)\"\n (searchSubmit)=\"submitForm()\"\n (cancelSearch)=\"cancelSearch()\"\n [disabled]=\"loading\"\n [disableRefresh]=\"true\"\n [placeholder]=\"'platformSmartFilterBar.searchPlaceholder' | fdTranslate\"\n ></fdp-search-field>\n <fd-toolbar-spacer></fd-toolbar-spacer>\n @if (!liveUpdate) {\n <button\n fd-button\n (click)=\"submitForm()\"\n fdType=\"emphasized\"\n fd-toolbar-item\n [disabled]=\"loading\"\n [label]=\"'platformSmartFilterBar.submitButtonLabel' | fdTranslate\"\n ></button>\n }\n <button\n fd-button\n (click)=\"submitForm()\"\n fd-toolbar-item\n glyph=\"synchronize\"\n [disabled]=\"loading\"\n [ariaLabel]=\"'platformSmartFilterBar.refreshButtonAriaLabel' | fdTranslate\"\n ></button>\n <button\n fd-button\n (click)=\"showFilteringSettings()\"\n [label]=\"\n 'platformSmartFilterBar.filtersButtonLabel' | fdTranslate: { filtersCount: selectedFiltersCount$() }\n \"\n fd-toolbar-item\n [disabled]=\"loading\"\n ></button>\n <button\n fd-button\n (click)=\"toggleFilterBar()\"\n [label]=\"\n (showFilterBar$()\n ? 'platformSmartFilterBar.hideFiltersButtonLabel'\n : 'platformSmartFilterBar.showFiltersButtonLabel'\n ) | fdTranslate\n \"\n fdType=\"transparent\"\n fd-toolbar-item\n [disabled]=\"loading\"\n ></button>\n </fd-toolbar>\n}\n@if (_formItems(); as formItems) {\n <div class=\"fdp-smart-filter-bar__filters\" [hidden]=\"!showFilterBar$()\">\n <fdp-form-generator\n (formCreated)=\"_onFormCreated()\"\n (formSubmitted)=\"_onFormSubmitted($event)\"\n [noAdditionalContent]=\"true\"\n [formItems]=\"formItems\"\n [columnLayout]=\"filtersColumnLayout\"\n ></fdp-form-generator>\n </div>\n}\n", styles: [".fdp-smart-filter-bar{display:block;box-shadow:var(--sapContent_HeaderShadow);background-color:var(--sapObjectHeader_Background)}.fdp-smart-filter-bar--transparent{background-color:var(--sapToolbar_Background);box-shadow:none}.fdp-smart-filter-bar .fd-toolbar--title{height:3rem;min-height:3rem;border-bottom:none;padding:.5rem}@media (min-width: 600px){.fdp-smart-filter-bar .fd-toolbar--title{padding-left:2rem;padding-right:2rem}}.fdp-smart-filter-bar .fd-toolbar fdp-search-field{min-width:15.5rem}.fdp-smart-filter-bar .fdp-smart-filter-bar__filters{padding-left:.5rem;padding-right:.5rem}@media (min-width: 600px){.fdp-smart-filter-bar .fdp-smart-filter-bar__filters{padding-left:2rem;padding-right:2rem}}.fdp-smart-filter-bar .fd-container.fd-form-layout-grid-container{padding:0}.fdp-smart-filter-bar .fd-container.fd-form-layout-grid-container .fd-row .fd-form-group{padding-left:.25rem!important;padding-right:.25rem!important}.fdp-smart-filter-bar__conditions-dialog .fdp-smart-filter-bar__actions-column{min-width:auto;flex:0 0 auto}.fdp-smart-filter-bar__conditions-dialog .fd-popover-custom{display:block}.fdp-smart-filter-bar__conditions-dialog .fd-dialog__body{padding:0 .5rem;background-color:var(--sapBackgroundColor, #f7f7f7)}.fdp-smart-filter-bar__conditions-dialog .fd-container.fd-form-layout-grid-container,.fdp-smart-filter-bar__conditions-dialog .fd-container.fd-form-layout-grid-container .fd-row .fd-form-group{padding-top:0!important;padding-bottom:0!important}.fdp-smart-filter-bar .fd-toolbar{--fdToolbar_Border: none}\n"] }]
521
- }], ctorParameters: () => [{ type: i1.DialogService }, { type: i2.SmartFilterBarService }, { type: i3.FormGeneratorService }, { type: i0.Injector }, { type: i0.DestroyRef }], propDecorators: { _formGenerator: [{
525
+ }], ctorParameters: () => [{ type: i1.DialogService }, { type: i2.FormGeneratorService }, { type: i0.Injector }, { type: i0.DestroyRef }], propDecorators: { _formGenerator: [{
522
526
  type: ViewChild,
523
527
  args: [FormGeneratorComponent]
524
528
  }], subject: [{
@@ -544,4 +548,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
544
548
  type: ContentChildren,
545
549
  args: [SmartFilterBarToolbarItemDirective]
546
550
  }] } });
547
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZmlsdGVyLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NtYXJ0LWZpbHRlci1iYXIvc21hcnQtZmlsdGVyLWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NtYXJ0LWZpbHRlci1iYXIvc21hcnQtZmlsdGVyLWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixRQUFRLEVBQ1IsS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1QsTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQWMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoSCxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHakUsT0FBTyxFQUFnQixhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRSxPQUFPLEVBR0gsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUV2QixNQUFNLGdDQUFnQyxDQUFDO0FBRXhDLE9BQU8sRUFBRSw0QkFBNEIsRUFBYyxNQUFNLGtDQUFrQyxDQUFDO0FBQzVGLE9BQU8sRUFBeUIsd0JBQXdCLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFOUcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlC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TCxnQkFBZ0I7d0JBQ2hCLGdCQUFnQjt3QkFDaEIseUJBQXlCO3dCQUN6QixvQkFBb0I7d0JBQ3BCLHNCQUFzQjt3QkFDdEIsZUFBZTt3QkFDZixvQkFBb0I7d0JBQ3BCLHNCQUFzQjt3QkFDdEIsZUFBZTtxQkFDbEI7eU1BT2tDLGNBQWM7c0JBQWhELFNBQVM7dUJBQUMsc0JBQXNCO2dCQU03QixPQUFPO3NCQURWLEtBQUs7Z0JBWU4sV0FBVztzQkFEVixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQU90QyxtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBT04sVUFBVTtzQkFEVCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQU90QyxXQUFXO3NCQURWLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBT3RDLG1CQUFtQjtzQkFEbEIsTUFBTTtnQkFPUCxtQkFBbUI7c0JBRGxCLE1BQU07Z0JBT1Asa0JBQWtCO3NCQURqQixNQUFNO2dCQUlVLGdCQUFnQjtzQkFEaEMsZUFBZTt1QkFBQyxrQ0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE91dHB1dCxcbiAgICBQcm92aWRlcixcbiAgICBRdWVyeUxpc3QsXG4gICAgc2lnbmFsLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIGZpcnN0VmFsdWVGcm9tLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc3RhcnRXaXRoLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgRGlhbG9nQ29uZmlnLCBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2RpYWxvZyc7XG5pbXBvcnQge1xuICAgIER5bmFtaWNGb3JtRmllbGRJdGVtLFxuICAgIER5bmFtaWNGb3JtSXRlbSxcbiAgICBGb3JtR2VuZXJhdG9yQ29tcG9uZW50LFxuICAgIEZvcm1HZW5lcmF0b3JTZXJ2aWNlLFxuICAgIFByZXBhcmVkRHluYW1pY0Zvcm1GaWVsZEl0ZW1cbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9mb3JtJztcbmltcG9ydCB7IFNlYXJjaElucHV0IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zZWFyY2gtZmllbGQnO1xuaW1wb3J0IHsgRkRQX1BSRVNFVF9NQU5BR0VEX0NPTVBPTkVOVCwgU2VsZWN0SXRlbSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2hhcmVkJztcbmltcG9ydCB7IENvbGxlY3Rpb25GaWx0ZXJHcm91cCwgRmlsdGVyYWJsZUNvbHVtbkRhdGFUeXBlLCBGaWx0ZXJUeXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS90YWJsZSc7XG5cbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5pbXBvcnQge1xuICAgIFRvb2xiYXJDb21wb25lbnQsXG4gICAgVG9vbGJhckl0ZW1EaXJlY3RpdmUsXG4gICAgVG9vbGJhclNlcGFyYXRvckNvbXBvbmVudCxcbiAgICBUb29sYmFyU3BhY2VyRGlyZWN0aXZlXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS90b29sYmFyJztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBTZWFyY2hGaWVsZENvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2VhcmNoLWZpZWxkJztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyQ29uZGl0aW9uRmllbGRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtZmlsdGVyLWJhci1jb25kaXRpb24tZmllbGQvc21hcnQtZmlsdGVyLWJhci1jb25kaXRpb24tZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyU2V0dGluZ3NEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc21hcnQtZmlsdGVyLWJhci1zZXR0aW5ncy1kaWFsb2cvc21hcnQtZmlsdGVyLWJhci1zZXR0aW5ncy1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IFNNQVJUX0ZJTFRFUl9CQVJfUkVOREVSRVJfQ09NUE9ORU5UIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgU21hcnRGaWx0ZXJCYXJTdWJqZWN0RGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL3NtYXJ0LWZpbHRlci1iYXItc3ViamVjdC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU21hcnRGaWx0ZXJCYXJUb29sYmFySXRlbURpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9zbWFydC1maWx0ZXItYmFyLXRvb2xiYXItaXRlbS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgZ2V0U2VsZWN0SXRlbVZhbHVlIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyTWFuYWdlZFByZXNldCwgU21hcnRGaWx0ZXJDaGFuZ2VPYmplY3QgfSBmcm9tICcuL2ludGVyZmFjZXMvc21hcnQtZmlsdGVyLWJhci1jaGFuZ2UnO1xuaW1wb3J0IHsgU21hcnRGaWx0ZXJCYXJDb25kaXRpb24gfSBmcm9tICcuL2ludGVyZmFjZXMvc21hcnQtZmlsdGVyLWJhci1jb25kaXRpb24nO1xuaW1wb3J0IHsgU21hcnRGaWx0ZXJCYXJGaWVsZERlZmluaXRpb24gfSBmcm9tICcuL2ludGVyZmFjZXMvc21hcnQtZmlsdGVyLWJhci1maWVsZC1kZWZpbml0aW9uJztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyU2V0dGluZ3NEaWFsb2dDb25maWcgfSBmcm9tICcuL2ludGVyZmFjZXMvc21hcnQtZmlsdGVyLWJhci1zZXR0aW5ncy1kaWFsb2ctY29uZmlnJztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyRHluYW1pY0Zvcm1GaWVsZEl0ZW0gfSBmcm9tICcuL2ludGVyZmFjZXMvc21hcnQtZmlsdGVyLWR5bmFtaWMtZm9ybS1pdGVtJztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyIH0gZnJvbSAnLi9zbWFydC1maWx0ZXItYmFyLmNsYXNzJztcbmltcG9ydCB7IFNtYXJ0RmlsdGVyQmFyU2VydmljZSB9IGZyb20gJy4vc21hcnQtZmlsdGVyLWJhci5zZXJ2aWNlJztcblxuY29uc3QgZGVmYXVsdENvbHVtbnNMYXlvdXQgPSAnWEw0LUwzLU0yLVMxJztcblxuZnVuY3Rpb24gZ2V0Q29sdW1uc051bWJlcihsYXlvdXQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICAuLi5sYXlvdXQuc3BsaXQoJy0nKS5tYXAoKHBhcnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoQXJyYXkgPSBwYXJ0Lm1hdGNoKC9cXGQrLyk7XG5cbiAgICAgICAgICAgIHJldHVybiBtYXRjaEFycmF5ID8gcGFyc2VJbnQobWF0Y2hBcnJheVswXSwgMTApIDogMTtcbiAgICAgICAgfSlcbiAgICApO1xufVxuXG4vKipcbiAqIERlZmF1bHQgZGlhbG9nIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmNvbnN0IGRpYWxvZ0NvbmZpZzogRGlhbG9nQ29uZmlnID0ge1xuICAgIHJlc3BvbnNpdmVQYWRkaW5nOiB0cnVlLFxuICAgIHZlcnRpY2FsUGFkZGluZzogdHJ1ZSxcbiAgICBtaW5XaWR0aDogJzMwcmVtJyxcbiAgICAvKiogODhweCBpdCdzIHRoZSBoZWFkZXIgKyBmb290ZXIgaGVpZ2h0ICovXG4gICAgYm9keU1pbkhlaWdodDogJ2NhbGMoNTB2aCAtIDUuNXJlbSknXG59O1xuXG5jb25zdCBzbWFydEZpbHRlckJhclByb3ZpZGVyOiBQcm92aWRlciA9IHtcbiAgICBwcm92aWRlOiBTbWFydEZpbHRlckJhcixcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTbWFydEZpbHRlckJhckNvbXBvbmVudClcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmRwLXNtYXJ0LWZpbHRlci1iYXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zbWFydC1maWx0ZXItYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vc21hcnQtZmlsdGVyLWJhci5jb21wb25lbnQuc2NzcycsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgc21hcnRGaWx0ZXJCYXJQcm92aWRlcixcbiAgICAgICAgU21hcnRGaWx0ZXJCYXJTZXJ2aWNlLFxuICAgICAgICBGb3JtR2VuZXJhdG9yU2VydmljZSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRQX1BSRVNFVF9NQU5BR0VEX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBTbWFydEZpbHRlckJhckNvbXBvbmVudFxuICAgICAgICB9XG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnZmRwLXNtYXJ0LWZpbHRlci1iYXInLFxuICAgICAgICAnW2NsYXNzLmZkcC1zbWFydC1maWx0ZXItYmFyLS10cmFuc3BhcmVudF0nOiAndHJhbnNwYXJlbnQnXG4gICAgfSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgVG9vbGJhckNvbXBvbmVudCxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgVG9vbGJhclNlcGFyYXRvckNvbXBvbmVudCxcbiAgICAgICAgU2VhcmNoRmllbGRDb21wb25lbnQsXG4gICAgICAgIFRvb2xiYXJTcGFjZXJEaXJlY3RpdmUsXG4gICAgICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICAgICAgVG9vbGJhckl0ZW1EaXJlY3RpdmUsXG4gICAgICAgIEZvcm1HZW5lcmF0b3JDb21wb25lbnQsXG4gICAgICAgIEZkVHJhbnNsYXRlUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgU21hcnRGaWx0ZXJCYXJDb21wb25lbnQgZXh0ZW5kcyBTbWFydEZpbHRlckJhciBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEZvcm0gZ2VuZXJhdG9yIGNvbXBvbmVudCBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKEZvcm1HZW5lcmF0b3JDb21wb25lbnQpIF9mb3JtR2VuZXJhdG9yITogRm9ybUdlbmVyYXRvckNvbXBvbmVudDtcblxuICAgIC8qKlxuICAgICAqIFN1YmplY3Qgd2hpY2ggd2lsbCBwcm92aWRlIGNvbmZpZ3VyYXRpb24gZGF0YTogZGF0YSBzb3VyY2UsIGNvbHVtbnMgZGVmaW5pdGlvbnMsIGV0Yy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzdWJqZWN0KHZhbHVlOiBTbWFydEZpbHRlckJhclN1YmplY3REaXJlY3RpdmUpIHtcbiAgICAgICAgdGhpcy5fc2V0U3ViamVjdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IHN1YmplY3QoKTogU21hcnRGaWx0ZXJCYXJTdWJqZWN0RGlyZWN0aXZlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1YmplY3Q7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgc21hcnQgZmlsdGVyIGJhciBiYWNrZ3JvdW5kIHNob3VsZCBiZSB0cmFuc3BhcmVudC5cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICB0cmFuc3BhcmVudCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQ29sdW1ucyBsYXlvdXQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBmaWx0ZXJzQ29sdW1uTGF5b3V0OiBOdWxsYWJsZTxzdHJpbmc+ID0gZGVmYXVsdENvbHVtbnNMYXlvdXQ7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHVwZGF0ZSBmaWx0ZXJzIHdoZW4gdGhleSBhcmUgc2VsZWN0ZWQuIE90aGVyd2lzZSwgZmlsdGVycyB3aWxsIGJlIGFwcGxpZWQgb25seSBieSBwcmVzc2luZyBcIkdvXCIgYnV0dG9uLlxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIGxpdmVVcGRhdGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gaGlkZSBUb29sYmFyLlxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIGhpZGVUb29sYmFyID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHNlbGVjdGVkIGZpbHRlcnMgaGF2ZSBiZWVuIGNoYW5nZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgc21hcnRGaWx0ZXJzQ2hhbmdlZDogRXZlbnRFbWl0dGVyPFNtYXJ0RmlsdGVyQ2hhbmdlT2JqZWN0PiA9IG5ldyBFdmVudEVtaXR0ZXI8U21hcnRGaWx0ZXJDaGFuZ2VPYmplY3Q+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gc2VsZWN0ZWQgZmlsdGVycyBoYXMgYmVlbiBhcHBsaWVkIChVc2VyIGNsaWNrZWQgb24gR28gYnV0dG9uKS5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBzbWFydEZpbHRlcnNBcHBsaWVkOiBFdmVudEVtaXR0ZXI8U21hcnRGaWx0ZXJDaGFuZ2VPYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxTbWFydEZpbHRlckNoYW5nZU9iamVjdD4oKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBzZWFyY2ggaW5wdXQgZmllbGQgdmFsdWUgaGFzIGJlZW4gY2hhbmdlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBzZWFyY2hJbnB1dENoYW5nZWQ6IEV2ZW50RW1pdHRlcjxTZWFyY2hJbnB1dD4gPSBuZXcgRXZlbnRFbWl0dGVyPFNlYXJjaElucHV0PigpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihTbWFydEZpbHRlckJhclRvb2xiYXJJdGVtRGlyZWN0aXZlKVxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Rvb2xiYXJJdGVtUmVmczogUXVlcnlMaXN0PFNtYXJ0RmlsdGVyQmFyVG9vbGJhckl0ZW1EaXJlY3RpdmU+O1xuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlZCBhcnJheSBvZiBmaWx0ZXJzIHRvIGFwcGx5IGZvciB0aGUgc3ViamVjdCdzIGRhdGEgc291cmNlLlxuICAgICAqL1xuICAgIGZpbHRlckJ5OiBDb2xsZWN0aW9uRmlsdGVyR3JvdXBbXSA9IFtdO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGZpbHRlcnMgc2VjdGlvbiBzaG91bGQgYmUgc2hvd24uICovXG4gICAgc2hvd0ZpbHRlckJhciQgPSBzaWduYWwodHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiBTZWFyY2ggZmllbGQgdmFsdWUgdG8gYXBwbHkgZm9yIHRoZSBzdWJqZWN0J3MgZGF0YSBzb3VyY2UuXG4gICAgICovXG4gICAgc2VhcmNoOiBTZWFyY2hJbnB1dCB8IHVuZGVmaW5lZDtcbiAgICAvKiogQEhpZGRlbiAqL1xuICAgIF90b29sYmFySXRlbXM6IFRlbXBsYXRlUmVmPGFueT5bXSA9IFtdO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2Zvcm1JdGVtcyA9IHNpZ25hbDxEeW5hbWljRm9ybUl0ZW1bXSB8IG51bGw+KG51bGwpO1xuICAgIC8qKiBTZWxlY3RlZCBmaWx0ZXJzLiAqL1xuICAgIHNlbGVjdGVkRmlsdGVycyQgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcblxuICAgIC8qKiBTZWxlY3RlZCBmaWx0ZXJzIGNvdW50LiAqL1xuICAgIHNlbGVjdGVkRmlsdGVyc0NvdW50JCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRGaWx0ZXJzJCgpLmxlbmd0aCk7XG5cbiAgICAvKiogTG9hZGluZyBzdGF0ZS4gKi9cbiAgICBnZXQgbG9hZGluZygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1YmplY3Q/LmdldERhdGFTb3VyY2UoKSA/IHRoaXMuX3N1YmplY3QuZ2V0RGF0YVNvdXJjZSgpLmlzRGF0YUxvYWRpbmcgOiB0cnVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3ViamVjdFN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Zvcm1HZW5lcmF0b3JSZWFkeSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pZ25vcmVQcmVzZXRDaGFuZ2UgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3ViamVjdCE6IFNtYXJ0RmlsdGVyQmFyU3ViamVjdERpcmVjdGl2ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVmcmVzaCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfc21hcnRGaWx0ZXJCYXJTZXJ2aWNlOiBTbWFydEZpbHRlckJhclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2ZnU2VydmljZTogRm9ybUdlbmVyYXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveVJlZjogRGVzdHJveVJlZlxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9mZ1NlcnZpY2UuYWRkQ29tcG9uZW50KFNtYXJ0RmlsdGVyQmFyQ29uZGl0aW9uRmllbGRDb21wb25lbnQsIFtTTUFSVF9GSUxURVJfQkFSX1JFTkRFUkVSX0NPTVBPTkVOVF0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3Rvb2xiYXJJdGVtUmVmcy5jaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKG51bGwpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Rvb2xiYXJJdGVtcyA9IHRoaXMuX3Rvb2xiYXJJdGVtUmVmcy50b0FycmF5KCkubWFwKChyZWYpID0+IHJlZi50ZW1wbGF0ZVJlZik7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVGcm9tU3ViamVjdCgpO1xuICAgICAgICB0aGlzLl9yZWZyZXNoJC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX3JlZnJlc2gkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtcyBjb25kaXRpb24gdmFsdWUgaW50byBodW1hbi1yZWFkYWJsZSB0ZXh0LlxuICAgICAqIEBwYXJhbSBjb25kaXRpb24gU21hcnQgZmlsdGVyIGJhciBjb25kaXRpb24uXG4gICAgICogQHBhcmFtIGZpbHRlclR5cGUgQ29uZGl0aW9uIGZpbHRlciB0eXBlLlxuICAgICAqL1xuICAgIGFzeW5jIGdldERpc3BsYXlWYWx1ZShjb25kaXRpb246IFNtYXJ0RmlsdGVyQmFyQ29uZGl0aW9uLCBmaWx0ZXJUeXBlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc21hcnRGaWx0ZXJCYXJTZXJ2aWNlLmdldERpc3BsYXlWYWx1ZShjb25kaXRpb24sIGZpbHRlclR5cGUpO1xuICAgIH1cblxuICAgIC8qKiBPcGVuIEZpbHRlcmluZyBTZXR0aW5ncyBEaWFsb2cgKi9cbiAgICBzaG93RmlsdGVyaW5nU2V0dGluZ3MoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLl9nZXRTdWJqZWN0RGVmaW5pdGlvbnMoKTtcbiAgICAgICAgY29uc3QgZGlhbG9nRGF0YTogU21hcnRGaWx0ZXJTZXR0aW5nc0RpYWxvZ0NvbmZpZyA9IHtcbiAgICAgICAgICAgIGZpZWxkczogY29sdW1ucyxcbiAgICAgICAgICAgIGZpbHRlckJ5OiB0aGlzLmZpbHRlckJ5LFxuICAgICAgICAgICAgc2VsZWN0ZWRGaWx0ZXJzOiB0aGlzLnNlbGVjdGVkRmlsdGVycyQoKVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3BlbihcbiAgICAgICAgICAgIFNtYXJ0RmlsdGVyQmFyU2V0dGluZ3NEaWFsb2dDb21wb25lbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4uZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgICAgIGRpc2FibGVQYWRkaW5nczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzUwcmVtJyxcbiAgICAgICAgICAgICAgICBkYXRhOiBkaWFsb2dEYXRhXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5faW5qZWN0b3JcbiAgICAgICAgKTtcblxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogKHNlbGVjdGVkRmlsdGVyczogc3RyaW5nW10pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRTZWxlY3RlZEZpbHRlcnMoc2VsZWN0ZWRGaWx0ZXJzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogKCkgPT4ge31cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIENhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gc2VhcmNoIHF1ZXJ5IGNoYW5nZWQuICovXG4gICAgb25TZWFyY2hJbnB1dENoYW5nZShldmVudDogU2VhcmNoSW5wdXQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWFyY2ggPSBldmVudDtcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dENoYW5nZWQuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIENsZWFyIHNlYXJjaCBxdWVyeS4gKi9cbiAgICBjYW5jZWxTZWFyY2goKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VhcmNoID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICh0aGlzLmxpdmVVcGRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuc3VibWl0Rm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3VibWl0cyBmaWx0ZXJzIGFuZCBzZWFyY2ggZm9ybS5cbiAgICAgKi9cbiAgICBzdWJtaXRGb3JtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb3JtR2VuZXJhdG9yLnN1Ym1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgZm9yIHNldHRpbmcgcHJlZGVmaW5lZCBjb25maWd1cmF0aW9uLiAqL1xuICAgIGFzeW5jIHNldFByZXNldChkYXRhOiBTbWFydEZpbHRlckJhck1hbmFnZWRQcmVzZXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5faWdub3JlUHJlc2V0Q2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgZGF0YS5maWx0ZXJCeSA9IGRhdGEuZmlsdGVyQnkgfHwgW107XG4gICAgICAgIHRoaXMuZmlsdGVyQnkgPSBkYXRhLmZpbHRlckJ5O1xuICAgICAgICB0aGlzLnNlYXJjaCA9IGRhdGEuc2VhcmNoO1xuXG4gICAgICAgIHRoaXMuX3JlZnJlc2gkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fcmVmcmVzaCQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fcmVmcmVzaCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgICAgIHRoaXMuX2Zvcm1HZW5lcmF0b3JSZWFkeVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9yZWZyZXNoJClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFJlc2V0IGZvcm1cbiAgICAgICAgICAgICAgICB0aGlzLl9mZ1NlcnZpY2UucmVzZXRGb3JtKHRoaXMuX2Zvcm1HZW5lcmF0b3IuZm9ybSk7XG5cbiAgICAgICAgICAgICAgICAvLyBTZXQgbmV3IGRhdGFcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlckJ5IG9mIHRoaXMuZmlsdGVyQnkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuX2ZnU2VydmljZS5nZXRGb3JtQ29udHJvbCh0aGlzLl9mb3JtR2VuZXJhdG9yLmZvcm0sIGZpbHRlckJ5LmZpZWxkKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybUl0ZW0gPSBjb250cm9sLmZvcm1JdGVtIGFzIFByZXBhcmVkRHluYW1pY0Zvcm1GaWVsZEl0ZW07XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uID0gdGhpcy5fc21hcnRGaWx0ZXJCYXJTZXJ2aWNlLnRyYW5zZm9ybUNvbGxlY3Rpb25GaWx0ZXIoZmlsdGVyQnkpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ29uZGl0aW9ucyA9IGF3YWl0IHRoaXMuX3NtYXJ0RmlsdGVyQmFyU2VydmljZS5nZXRDb25kaXRpb25GaWVsZFNlbGVjdGVkVmFyaWFudHMoXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtSXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sPy5zZXRWYWx1ZShzZWxlY3RlZENvbmRpdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX3NldFNlbGVjdGVkRmlsdGVycyh0aGlzLmZpbHRlckJ5Lm1hcCgoZmlsdGVyQnkpID0+IGZpbHRlckJ5LmZpZWxkKSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnN1YmplY3QuZ2V0RGF0YVNvdXJjZSgpO1xuICAgICAgICAgICAgICAgIHNvdXJjZS5kYXRhUHJvdmlkZXIuc2V0RmlsdGVycyh0aGlzLmZpbHRlckJ5LCB0aGlzLnNlYXJjaCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJqZWN0LmdldFN1YmplY3QoKS5mZXRjaCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgY3VycmVudCBwcmVzZXQgY29uZmlndXJhdGlvbi4gKi9cbiAgICBnZXRDdXJyZW50UHJlc2V0KCk6IFNtYXJ0RmlsdGVyQmFyTWFuYWdlZFByZXNldCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzZWFyY2g6IHRoaXMuc2VhcmNoLFxuICAgICAgICAgICAgZmlsdGVyQnk6IHRoaXMuZmlsdGVyQnlcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ2FsbGJhY2sgZnVuY3Rpb24gd2hlbiBmb3JtIGdlbmVyYXRvciBmb3JtIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB2YWxpZGF0ZWQgYW5kIHN1Ym1pdHRlZC5cbiAgICAgKi9cbiAgICBfb25Gb3JtU3VibWl0dGVkKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9ucyA9IHRoaXMuX2dlbmVyYXRlQ29sbGVjdGlvbkZpbHRlckdyb3VwcyhldmVudCk7XG4gICAgICAgIHRoaXMuX2FwcGx5RmlsdGVyaW5nKGNvbmRpdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDYWxsYmFjayBtZXRob2Qgd2hlbiBmb3JtIGhhcyBiZWVuIGNyZWF0ZWQuXG4gICAgICogUG9wdWxhdGVzIHNlbGVjdGVkIGZpbHRlcnMgYXJyYXkgd2l0aCB1c2VyLWRlZmluZWQgZGVmYXVsdCBmaWx0ZXJzLlxuICAgICAqL1xuICAgIF9vbkZvcm1DcmVhdGVkKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zdWJqZWN0KSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRTZWxlY3RlZEZpbHRlcnMoWy4uLnRoaXMuc3ViamVjdC5nZXREZWZhdWx0RmllbGRzKCksIC4uLnRoaXMuc2VsZWN0ZWRGaWx0ZXJzJCgpXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9mb3JtR2VuZXJhdG9yLmZvcm0udmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoNTApLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25kaXRpb25zID0gYXdhaXQgdGhpcy5nZXRGb3JtYXR0ZWRDb25kaXRpb25zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zbWFydEZpbHRlcnNDaGFuZ2VkLmVtaXQoeyBmaWx0ZXJCeTogY29uZGl0aW9ucywgc2VhcmNoOiB0aGlzLnNlYXJjaCwgc3ViamVjdDogdGhpcy5zdWJqZWN0IH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxpdmVVcGRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBseUZpbHRlcmluZyhjb25kaXRpb25zKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2Zvcm1HZW5lcmF0b3JSZWFkeS5uZXh0KHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgU21hcnQgRmlsdGVyIEJhciBmaWx0ZXJzIHNlY3Rpb24uXG4gICAgICovXG4gICAgdG9nZ2xlRmlsdGVyQmFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNob3dGaWx0ZXJCYXIkLnVwZGF0ZSgoc2hvdykgPT4gIXNob3cpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvcm1hdHMgcmF3IGZpbHRlcnMgb2JqZWN0IGludG8gYXJyYXkgb2YgZ3JvdXBlZCBmaWx0ZXJzLlxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIGdyb3VwZWQgZmlsdGVycy5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRGb3JtYXR0ZWRDb25kaXRpb25zKCk6IFByb21pc2U8Q29sbGVjdGlvbkZpbHRlckdyb3VwW10+IHtcbiAgICAgICAgY29uc3QgZm9ybVZhbHVlID0gYXdhaXQgdGhpcy5fZmdTZXJ2aWNlLmdldEZvcm1WYWx1ZSh0aGlzLl9mb3JtR2VuZXJhdG9yLmZvcm0pO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2VuZXJhdGVDb2xsZWN0aW9uRmlsdGVyR3JvdXBzKGZvcm1WYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZW5lcmF0ZUNvbGxlY3Rpb25GaWx0ZXJHcm91cHModmFsdWU6IHtcbiAgICAgICAgW2tleTogc3RyaW5nXTogU21hcnRGaWx0ZXJCYXJDb25kaXRpb25bXTtcbiAgICB9KTogQ29sbGVjdGlvbkZpbHRlckdyb3VwW10ge1xuICAgICAgICBjb25zdCBjb2xsZWN0aW9uRmlsdGVyR3JvdXBzOiBDb2xsZWN0aW9uRmlsdGVyR3JvdXBbXSA9IFtdO1xuXG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLl9nZXRTdWJqZWN0RGVmaW5pdGlvbnMoKTtcblxuICAgICAgICBPYmplY3QuZW50cmllcyh2YWx1ZSlcbiAgICAgICAgICAgIC5maWx0ZXIoKFssIGZpZWxkQ29uZGl0aW9uc10pID0+ICEhZmllbGRDb25kaXRpb25zKVxuICAgICAgICAgICAgLmZvckVhY2goKFtmaWVsZE5hbWUsIGZpZWxkQ29uZGl0aW9uc10pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gZmllbGROYW1lKSBhcyBTbWFydEZpbHRlckJhckZpZWxkRGVmaW5pdGlvbjtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJHcm91cDogQ29sbGVjdGlvbkZpbHRlckdyb3VwID0ge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6IGNvbHVtbi5jb25kaXRpb25TdHJhdGVneSxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5rZXlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGZpZWxkQ29uZGl0aW9ucy5mb3JFYWNoKChjb25kaXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyR3JvdXAuZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5OiBjb25kaXRpb24ub3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sdW1uLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjb25kaXRpb24udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTI6IGNvbmRpdGlvbi52YWx1ZTIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBjb2x1bW4uZGF0YVR5cGVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uRmlsdGVyR3JvdXBzLnB1c2goZmlsdGVyR3JvdXApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIGVtcHR5IGZpbHRlciBvYmplY3RzLlxuICAgICAgICByZXR1cm4gY29sbGVjdGlvbkZpbHRlckdyb3Vwcy5maWx0ZXIoKGZpbHRlckdyb3VwKSA9PiBmaWx0ZXJHcm91cC5maWx0ZXJzPy5sZW5ndGggPiAwKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFN1YmplY3Qoc3ViamVjdDogU21hcnRGaWx0ZXJCYXJTdWJqZWN0RGlyZWN0aXZlKTogdm9pZCB7XG4gICAgICAgIGlmICghc3ViamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3ViamVjdCA9IHN1YmplY3Q7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVGcm9tU3ViamVjdCgpO1xuICAgICAgICB0aGlzLl9saXN0ZW5Ub1N1YmplY3RDb2x1bW5zKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHVuc3Vic2NyaWJlRnJvbVN1YmplY3QoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fc3ViamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3N1YmplY3RTdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1N1YmplY3RDb2x1bW5zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJqZWN0U3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgdGhpcy5fc3ViamVjdFN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fc3ViamVjdC5maWVsZHNTdHJlYW0uc3Vic2NyaWJlKGFzeW5jIChjb2x1bW5zOiBTbWFydEZpbHRlckJhckZpZWxkRGVmaW5pdGlvbltdKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZ2VuZXJhdGVGb3JtKGNvbHVtbnMuZmlsdGVyKChjKSA9PiBjLmZpbHRlcmFibGUpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEdlbmVyYXRlcyBmb3JtIGl0ZW1zIHRvIGJlIGNvbnN1bWVkIGJ5IGZvcm0gZ2VuZXJhdG9yIGNvbXBvbmVudC5cbiAgICAgKiBAcGFyYW0gY29sdW1ucyBjb2x1bW5zIGRlZmluaXRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIF9nZW5lcmF0ZUZvcm0oY29sdW1uczogU21hcnRGaWx0ZXJCYXJGaWVsZERlZmluaXRpb25bXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBpdGVtczogRHluYW1pY0Zvcm1GaWVsZEl0ZW1bXSA9IFtdO1xuICAgICAgICBjb25zdCBjb2x1bW5zTnVtYmVyID0gZ2V0Q29sdW1uc051bWJlcih0aGlzLmZpbHRlcnNDb2x1bW5MYXlvdXQgPz8gJycpO1xuICAgICAgICBsZXQgY3VycmVudENvbHVtbiA9IDE7XG5cbiAgICAgICAgaWYgKGNvbHVtbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgbGV0IGl0ZW06IFNtYXJ0RmlsdGVyQmFyRHluYW1pY0Zvcm1GaWVsZEl0ZW0gPSB0aGlzLl9nZW5lcmF0ZUJhc2VGaWVsZEl0ZW0oY29sdW1uKTtcblxuICAgICAgICAgICAgaWYgKGNvbHVtbi5yZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzJC51cGRhdGUoKGZpbHRlcnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKGNvbHVtbi5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcnM7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN3aXRjaCAoY29sdW1uLmZpbHRlclR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclR5cGUuU0lOR0xFOlxuICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyVHlwZS5DQVRFR09SWTpcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5ndWlPcHRpb25zLmFkZGl0aW9uYWxEYXRhLnR5cGUgPSAnc2VsZWN0JztcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5ndWlPcHRpb25zLmlubGluZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclR5cGUuTVVMVEk6XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZ3VpT3B0aW9ucy5hZGRpdGlvbmFsRGF0YS50eXBlID0gJ211bHRpLWlucHV0JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJUeXBlLkNVU1RPTTpcbiAgICAgICAgICAgICAgICAgICAgaXRlbSA9IHRoaXMuX2dlbmVyYXRlQ3VzdG9tRmlsdGVyRmllbGRJdGVtKGNvbHVtbiwgaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyVHlwZS5JTlBVVDpcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpdGVtID0gdGhpcy5fZ2VuZXJhdGVJbnB1dEZpZWxkSXRlbShjb2x1bW4sIGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXRlbS5ndWlPcHRpb25zLmNvbHVtbiA9IGN1cnJlbnRDb2x1bW47XG4gICAgICAgICAgICBjdXJyZW50Q29sdW1uICs9IDE7XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50Q29sdW1uID4gY29sdW1uc051bWJlcikge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRDb2x1bW4gPSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9mb3JtSXRlbXMuc2V0KGl0ZW1zKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dlbmVyYXRlQ3VzdG9tRmlsdGVyRmllbGRJdGVtKFxuICAgICAgICBjb2x1bW46IFNtYXJ0RmlsdGVyQmFyRmllbGREZWZpbml0aW9uLFxuICAgICAgICBpdGVtOiBTbWFydEZpbHRlckJhckR5bmFtaWNGb3JtRmllbGRJdGVtXG4gICAgKTogU21hcnRGaWx0ZXJCYXJEeW5hbWljRm9ybUZpZWxkSXRlbSB7XG4gICAgICAgIGlmICghY29sdW1uLmN1c3RvbUZpbHRlclR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW0uZ3VpT3B0aW9ucy5hZGRpdGlvbmFsRGF0YS50eXBlID0gY29sdW1uLmN1c3RvbUZpbHRlclR5cGU7XG4gICAgICAgIGl0ZW0uZ3VpT3B0aW9ucy5hZGRpdGlvbmFsRGF0YSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICBpdGVtLmd1aU9wdGlvbnMuYWRkaXRpb25hbERhdGEsXG4gICAgICAgICAgICB0aGlzLl9zbWFydEZpbHRlckJhclNlcnZpY2UuZ2V0Q3VzdG9tRmlsdGVyQ29uZmlndXJhdGlvbihjb2x1bW4uY3VzdG9tRmlsdGVyVHlwZSlcbiAgICAgICAgKTtcblxuICAgICAgICBpdGVtLnR5cGUgPSBpdGVtLmd1aU9wdGlvbnMuYWRkaXRpb25hbERhdGEucmVuZGVyZXJDb21wb25lbnRcbiAgICAgICAgICAgID8gYCR7aXRlbS5ndWlPcHRpb25zLmFkZGl0aW9uYWxEYXRhLnR5cGV9LXJlbmRlcmVyYFxuICAgICAgICAgICAgOiBpdGVtLnR5cGU7XG4gICAgICAgIGl0ZW0udHJhbnNmb3JtZXIgPSBpdGVtLmd1aU9wdGlvbnMuYWRkaXRpb25hbERhdGEudmFsdWVUcmFuc2Zvcm1lcjtcblxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogR2VuZXJhdGVzIGZvcm0gaXRlbSBiYXNlZCBvbiBkYXRhIHR5cGUuXG4gICAgICogQHBhcmFtIGNvbHVtblxuICAgICAqIEBwYXJhbSBpdGVtXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZW5lcmF0ZUlucHV0RmllbGRJdGVtKFxuICAgICAgICBjb2x1bW46IFNtYXJ0RmlsdGVyQmFyRmllbGREZWZpbml0aW9uLFxuICAgICAgICBpdGVtOiBTbWFydEZpbHRlckJhckR5bmFtaWNGb3JtRmllbGRJdGVtXG4gICAgKTogU21hcnRGaWx0ZXJCYXJEeW5hbWljRm9ybUZpZWxkSXRlbSB7XG4gICAgICAgIHN3aXRjaCAoY29sdW1uLmRhdGFUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEZpbHRlcmFibGVDb2x1bW5EYXRhVHlwZS5EQVRFOlxuICAgICAgICAgICAgICAgIGl0ZW0uZ3VpT3B0aW9ucy5hZGRpdGlvbmFsRGF0YS50eXBlID0gJ2RhdGVwaWNrZXInO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJhYmxlQ29sdW1uRGF0YVR5cGUuTlVNQkVSOlxuICAgICAgICAgICAgICAgIGl0ZW0uZ3VpT3B0aW9ucy5hZGRpdGlvbmFsRGF0YS5jb250cm9sVHlwZSA9ICdudW1iZXInO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJhYmxlQ29sdW1uRGF0YVR5cGUuQk9PTEVBTjpcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyYWJsZUNvbHVtbkRhdGFUeXBlLlNUUklORzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaXRlbS5ndWlPcHRpb25zLmFkZGl0aW9uYWxEYXRhLmNvbnRyb2xUeXBlID0gJ3RleHQnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEdlbmVyYXRlcyBiYXNlIGZvcm0gaXRlbSBvYmplY3QgdG8gYmUgY29uc3VtZWQgYnkgZm9ybSBnZW5lcmF0b3IgY29tcG9uZW50LlxuICAgICAqIEBwYXJhbSBjb2x1bW4gY29sdW1uIGRlZmluaXRpb25cbiAgICAgKiBAcmV0dXJucyBiYXNlIGZvcm0gaXRlbSBvYmplY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2VuZXJhdGVCYXNlRmllbGRJdGVtKGNvbHVtbjogU21hcnRGaWx0ZXJCYXJGaWVsZERlZmluaXRpb24pOiBTbWFydEZpbHRlckJhckR5bmFtaWNGb3JtRmllbGRJdGVtIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgbWVzc2FnZTogY29sdW1uLmxhYmVsLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGNvbHVtbi5yZXF1aXJlZCxcbiAgICAgICAgICAgIHR5cGU6IFNNQVJUX0ZJTFRFUl9CQVJfUkVOREVSRVJfQ09NUE9ORU5ULFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICcgJyxcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IGNvbHVtbi5yZXF1aXJlZCA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSA6IFtdLFxuICAgICAgICAgICAgY2hvaWNlczogY29sdW1uLmhhc09wdGlvbnMgPyB0aGlzLl9nZXRGaWx0ZXJEZWZhdWx0T3B0aW9ucyhjb2x1bW4ua2V5LCBjb2x1bW4uZmlsdGVyVHlwZSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB0cmFuc2Zvcm1lcjogKGl0ZW1WYWx1ZSkgPT4gZ2V0U2VsZWN0SXRlbVZhbHVlKGl0ZW1WYWx1ZSksXG4gICAgICAgICAgICBndWlPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgYWRkaXRpb25hbERhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IGNvbHVtbi5kYXRhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyVHlwZTogY29sdW1uLmZpbHRlclR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAgICAgIGNob2ljZXM6IGNvbHVtbi5oYXNPcHRpb25zID8gdGhpcy5fZ2V0RmlsdGVyQXZhaWxhYmxlT3B0aW9ucyhjb2x1bW4ua2V5KSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3aGVuOiAoKSA9PiB0aGlzLnNlbGVjdGVkRmlsdGVycyQoKS5pbmNsdWRlcyhjb2x1bW4ubmFtZSlcbiAgICAgICAgfSBhcyBTbWFydEZpbHRlckJhckR5bmFtaWNGb3JtRmllbGRJdGVtO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXRyaWV2ZXMgYXZhaWxhYmxlIG9wdGlvbnMgZm9yIHBhcnRpY3VsYXIgY29sdW1uIGJ5IHVzaW5nIGRhdGEgc291cmNlIG1ldGhvZC5cbiAgICAgKiBAcGFyYW0gY29sdW1uIHByb3BlcnR5IG5hbWUgb2YgdGhlIGRhdGEgc291cmNlIGl0ZW1zLlxuICAgICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPFNlbGVjdEl0ZW1bXT59IE9ic2VydmFibGUgd2l0aCB0aGUgYXJyYXkgb2YgYXZhaWxhYmxlIG9wdGlvbnMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0RmlsdGVyQXZhaWxhYmxlT3B0aW9ucyhjb2x1bW46IHN0cmluZyk6ICgpID0+IE9ic2VydmFibGU8U2VsZWN0SXRlbVtdPiB7XG4gICAgICAgIHJldHVybiAoKSA9PiB0aGlzLl9nZXRGaWVsZFZhcmlhbnRzKGNvbHVtbik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRGaWx0ZXJEZWZhdWx0T3B0aW9ucyhjb2x1bW46IHN0cmluZywgZmlsdGVyVHlwZTogRmlsdGVyVHlwZSk6ICgpID0+IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhbnRzID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5fZ2V0RmllbGRWYXJpYW50cyhjb2x1bW4pLnBpcGUodGFrZSgxKSkpO1xuXG4gICAgICAgICAgICBjb25zdCBhdmFpbGFibGVEZWZhdWx0Q29uZGl0aW9uczogU21hcnRGaWx0ZXJCYXJDb25kaXRpb25bXSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiB2YXJpYW50cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbjogU21hcnRGaWx0ZXJCYXJDb25kaXRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBvcHRpb24udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnZXF1YWxUbydcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uZGl0aW9uLmRpc3BsYXlWYWx1ZSA9IGF3YWl0IHRoaXMuZ2V0RGlzcGxheVZhbHVlKGNvbmRpdGlvbiwgZmlsdGVyVHlwZSk7XG5cbiAgICAgICAgICAgICAgICBhdmFpbGFibGVEZWZhdWx0Q29uZGl0aW9ucy5wdXNoKGNvbmRpdGlvbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBhdmFpbGFibGVEZWZhdWx0Q29uZGl0aW9ucztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEZpZWxkVmFyaWFudHMoY29sdW1uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNlbGVjdEl0ZW1bXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJqZWN0LmdldEZpZWxkVmFyaWFudHMoY29sdW1uKS5waXBlKFxuICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgIG1hcCgoZGF0YSkgPT4gZGF0YS5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiBkYXRhLmZpbmRJbmRleCgoX2l0ZW0pID0+IF9pdGVtLnZhbHVlID09PSBpdGVtLnZhbHVlKSA9PT0gaW5kZXgpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0U3ViamVjdERlZmluaXRpb25zKCk6IFNtYXJ0RmlsdGVyQmFyRmllbGREZWZpbml0aW9uW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJqZWN0Py5nZXRTdWJqZWN0RmllbGRzKCkgfHwgW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNldHMgcHJvdmlkZWQgZmlsdGVycyBkaXJlY3RseSB0byB0aGUgZGF0YSBzb3VyY2UuXG4gICAgICogQHBhcmFtIGZpbHRlcnMgYXJyYXkgb2YgZmlsdGVycy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9hcHBseUZpbHRlcmluZyhmaWx0ZXJzOiBDb2xsZWN0aW9uRmlsdGVyR3JvdXBbXSk6IHZvaWQge1xuICAgICAgICAvLyBBcHBseSBvdXRzaWRlIGZpbHRlcmluZyBhbmQgZm9yY2Ugc3ViamVjdCB0byBmZXRjaCBuZXcgZGF0YS5cbiAgICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5zdWJqZWN0LmdldERhdGFTb3VyY2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJCeSA9IGZpbHRlcnM7XG4gICAgICAgIHNvdXJjZS5kYXRhUHJvdmlkZXIuc2V0RmlsdGVycyhmaWx0ZXJzLCB0aGlzLnNlYXJjaCk7XG4gICAgICAgIHRoaXMuc3ViamVjdC5nZXRTdWJqZWN0KCkuZmV0Y2goKTtcbiAgICAgICAgY29uc3QgZW1pdHRlZFZhbHVlOiBTbWFydEZpbHRlckJhck1hbmFnZWRQcmVzZXQgPSB7IHNlYXJjaDogdGhpcy5zZWFyY2gsIGZpbHRlckJ5OiB0aGlzLmZpbHRlckJ5IH07XG4gICAgICAgIHRoaXMuc21hcnRGaWx0ZXJzQXBwbGllZC5lbWl0KHsgLi4uZW1pdHRlZFZhbHVlLCBzdWJqZWN0OiB0aGlzLl9zdWJqZWN0IH0pO1xuXG4gICAgICAgIGlmICghdGhpcy5faWdub3JlUHJlc2V0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnByZXNldENoYW5nZWQuZW1pdChlbWl0dGVkVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lnbm9yZVByZXNldENoYW5nZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVGcm9tU3ViamVjdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3ViamVjdFN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fc3ViamVjdFN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRTZWxlY3RlZEZpbHRlcnMoZmlsdGVyczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMkLnNldChmaWx0ZXJzLmZpbHRlcigoZjogc3RyaW5nLCBpOiBudW1iZXIpID0+IGZpbHRlcnMuaW5kZXhPZihmKSA9PT0gaSkpO1xuICAgICAgICB0aGlzLl9mb3JtR2VuZXJhdG9yLnJlZnJlc2hTdGVwc1Zpc2liaWxpdHkoKTtcbiAgICB9XG59XG4iLCJAaWYgKCFoaWRlVG9vbGJhcikge1xuICAgIDxmZC10b29sYmFyIGZkVHlwZT1cInRyYW5zcGFyZW50XCI+XG4gICAgICAgIEBpZiAoX3Rvb2xiYXJJdGVtcykge1xuICAgICAgICAgICAgQGZvciAodGVtcGxhdGUgb2YgX3Rvb2xiYXJJdGVtczsgdHJhY2sgdGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxmZC10b29sYmFyLXNlcGFyYXRvcj48L2ZkLXRvb2xiYXItc2VwYXJhdG9yPlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIDxmZHAtc2VhcmNoLWZpZWxkXG4gICAgICAgICAgICAoaW5wdXRDaGFuZ2UpPVwib25TZWFyY2hJbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChzZWFyY2hTdWJtaXQpPVwic3VibWl0Rm9ybSgpXCJcbiAgICAgICAgICAgIChjYW5jZWxTZWFyY2gpPVwiY2FuY2VsU2VhcmNoKClcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdcIlxuICAgICAgICAgICAgW2Rpc2FibGVSZWZyZXNoXT1cInRydWVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidwbGF0Zm9ybVNtYXJ0RmlsdGVyQmFyLnNlYXJjaFBsYWNlaG9sZGVyJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgPjwvZmRwLXNlYXJjaC1maWVsZD5cbiAgICAgICAgPGZkLXRvb2xiYXItc3BhY2VyPjwvZmQtdG9vbGJhci1zcGFjZXI+XG4gICAgICAgIEBpZiAoIWxpdmVVcGRhdGUpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic3VibWl0Rm9ybSgpXCJcbiAgICAgICAgICAgICAgICBmZFR5cGU9XCJlbXBoYXNpemVkXCJcbiAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybVNtYXJ0RmlsdGVyQmFyLnN1Ym1pdEJ1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJzdWJtaXRGb3JtKClcIlxuICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICBnbHlwaD1cInN5bmNocm9uaXplXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nXCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiJ3BsYXRmb3JtU21hcnRGaWx0ZXJCYXIucmVmcmVzaEJ1dHRvbkFyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwic2hvd0ZpbHRlcmluZ1NldHRpbmdzKClcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIlxuICAgICAgICAgICAgICAgICdwbGF0Zm9ybVNtYXJ0RmlsdGVyQmFyLmZpbHRlcnNCdXR0b25MYWJlbCcgfCBmZFRyYW5zbGF0ZTogeyBmaWx0ZXJzQ291bnQ6IHNlbGVjdGVkRmlsdGVyc0NvdW50JCgpIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVGaWx0ZXJCYXIoKVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgKHNob3dGaWx0ZXJCYXIkKClcbiAgICAgICAgICAgICAgICAgICAgPyAncGxhdGZvcm1TbWFydEZpbHRlckJhci5oaWRlRmlsdGVyc0J1dHRvbkxhYmVsJ1xuICAgICAgICAgICAgICAgICAgICA6ICdwbGF0Zm9ybVNtYXJ0RmlsdGVyQmFyLnNob3dGaWx0ZXJzQnV0dG9uTGFiZWwnXG4gICAgICAgICAgICAgICAgKSB8IGZkVHJhbnNsYXRlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1wiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICA8L2ZkLXRvb2xiYXI+XG59XG5AaWYgKF9mb3JtSXRlbXMoKTsgYXMgZm9ybUl0ZW1zKSB7XG4gICAgPGRpdiBjbGFzcz1cImZkcC1zbWFydC1maWx0ZXItYmFyX19maWx0ZXJzXCIgW2hpZGRlbl09XCIhc2hvd0ZpbHRlckJhciQoKVwiPlxuICAgICAgICA8ZmRwLWZvcm0tZ2VuZXJhdG9yXG4gICAgICAgICAgICAoZm9ybUNyZWF0ZWQpPVwiX29uRm9ybUNyZWF0ZWQoKVwiXG4gICAgICAgICAgICAoZm9ybVN1Ym1pdHRlZCk9XCJfb25Gb3JtU3VibWl0dGVkKCRldmVudClcIlxuICAgICAgICAgICAgW25vQWRkaXRpb25hbENvbnRlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZm9ybUl0ZW1zXT1cImZvcm1JdGVtc1wiXG4gICAgICAgICAgICBbY29sdW1uTGF5b3V0XT1cImZpbHRlcnNDb2x1bW5MYXlvdXRcIlxuICAgICAgICA+PC9mZHAtZm9ybS1nZW5lcmF0b3I+XG4gICAgPC9kaXY+XG59XG4iXX0=
551
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZmlsdGVyLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NtYXJ0LWZpbHRlci1iYXIvc21hcnQtZmlsdGVyLWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NtYXJ0LWZpbHRlci1iYXIvc21hcnQtZmlsdGVyLWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFFTCxNQUFNLEVBRU4sU0FBUyxFQUNULE1BQU0sRUFFTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEgsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2pFLE9BQU8sRUFBZ0IsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0UsT0FBTyxFQUdILHNCQUFzQixFQUN0QixvQkFBb0IsRUFFdkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4QyxPQUFPLEVBQUUsNEJBQTRCLEVBQWMsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RixPQUFPLEVBQXlCLHdCQUF3QixFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTlHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxN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Q0ksT0FBTyxFQUFFLDRCQUE0Qjs0QkFDckMsV0FBVyx5QkFBeUI7eUJBQ3ZDO3FCQUNKLFFBQ0s7d0JBQ0YsS0FBSyxFQUFFLHNCQUFzQjt3QkFDN0IsMkNBQTJDLEVBQUUsYUFBYTtxQkFDN0QsY0FDVyxJQUFJLFdBQ1A7d0JBQ0wsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLHlCQUF5Qjt3QkFDekIsb0JBQW9CO3dCQUNwQixzQkFBc0I7d0JBQ3RCLGVBQWU7d0JBQ2Ysb0JBQW9CO3dCQUNwQixzQkFBc0I7d0JBQ3RCLGVBQWU7cUJBQ2xCO3FLQU9rQyxjQUFjO3NCQUFoRCxTQUFTO3VCQUFDLHNCQUFzQjtnQkFNN0IsT0FBTztzQkFEVixLQUFLO2dCQVlOLFdBQVc7c0JBRFYsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFPdEMsbUJBQW1CO3NCQURsQixLQUFLO2dCQU9OLFVBQVU7c0JBRFQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFPdEMsV0FBVztzQkFEVixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQU90QyxtQkFBbUI7c0JBRGxCLE1BQU07Z0JBT1AsbUJBQW1CO3NCQURsQixNQUFNO2dCQU9QLGtCQUFrQjtzQkFEakIsTUFBTTtnQkFJVSxnQkFBZ0I7c0JBRGhDLGVBQWU7dUJBQUMsa0NBQWtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEZXN0cm95UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIGluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFByb3ZpZGVyLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBzaWduYWwsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIGZpbHRlciwgZmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzdGFydFdpdGgsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBEaWFsb2dDb25maWcsIERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7XG4gICAgRHluYW1pY0Zvcm1GaWVsZEl0ZW0sXG4gICAgRHluYW1pY0Zvcm1JdGVtLFxuICAgIEZvcm1HZW5lcmF0b3JDb21wb25lbnQsXG4gICAgRm9ybUdlbmVyYXRvclNlcnZpY2UsXG4gICAgUHJlcGFyZWREeW5hbWljRm9ybUZpZWxkSXRlbVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL2Zvcm0nO1xuaW1wb3J0IHsgU2VhcmNoSW5wdXQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NlYXJjaC1maWVsZCc7XG5pbXBvcnQgeyBGRFBfUFJFU0VUX01BTkFHRURfQ09NUE9ORU5ULCBTZWxlY3RJdGVtIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkZpbHRlckdyb3VwLCBGaWx0ZXJhYmxlQ29sdW1uRGF0YVR5cGUsIEZpbHRlclR5cGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3RhYmxlJztcblxuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYnV0dG9uJztcbmltcG9ydCB7XG4gICAgVG9vbGJhckNvbXBvbmVudCxcbiAgICBUb29sYmFySXRlbURpcmVjdGl2ZSxcbiAgICBUb29sYmFyU2VwYXJhdG9yQ29tcG9uZW50LFxuICAgIFRvb2xiYXJTcGFjZXJEaXJlY3RpdmVcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3Rvb2xiYXInO1xuaW1wb3J0IHsgRmRUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9pMThuJztcbmltcG9ydCB7IFNlYXJjaEZpZWxkQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zZWFyY2gtZmllbGQnO1xuaW1wb3J0IHsgU21hcnRGaWx0ZXJCYXJDb25kaXRpb25GaWVsZENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zbWFydC1maWx0ZXItYmFyLWNvbmRpdGlvbi1maWVsZC9zbWFydC1maWx0ZXItYmFyLWNvbmRpdGlvbi1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU21hcnRGaWx0ZXJCYXJTZXR0aW5nc0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zbWFydC1maWx0ZXItYmFyLXNldHRpbmdzLWRpYWxvZy9zbWFydC1maWx0ZXItYmFyLXNldHRpbmdzLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU01BUlRfRklMVEVSX0JBUl9SRU5ERVJFUl9DT01QT05FTlQgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBTbWFydEZpbHRlckJhclN1YmplY3REaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvc21hcnQtZmlsdGVyLWJhci1zdWJqZWN0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTbWFydEZpbHRlckJhclRvb2xiYXJJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL3NtYXJ0LWZpbHRlci1iYXItdG9vbGJhci1pdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBnZXRTZWxlY3RJdGVtVmFsdWUgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgU21hcnRGaWx0ZXJCYXJNYW5hZ2VkUHJlc2V0LCBTbWFydEZpbHRlckNoYW5nZU9iamVjdCB9IGZyb20gJy4vaW50ZXJmYWNlcy9zbWFydC1maWx0ZXItYmFyLWNoYW5nZSc7XG5pbXBvcnQgeyBTbWFydEZpbHRlckJhckNvbmRpdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9zbWFydC1maWx0ZXItYmFyLWNvbmRpdGlvbic7XG5pbXBvcnQgeyBTbWFydEZpbHRlckJhckZpZWxkRGVmaW5pdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9zbWFydC1maWx0ZXItYmFyLWZpZWxkLWRlZmluaXRpb24nO1xuaW1wb3J0IHsgU21hcnRGaWx0ZXJTZXR0aW5nc0RpYWxvZ0NvbmZpZyB9IGZyb20gJy4vaW50ZXJmYWNlcy9zbWFydC1maWx0ZXItYmFyLXNldHRpbmdzLWRpYWxvZy1jb25maWcnO1xuaW1wb3J0IHsgU21hcnRGaWx0ZXJCYXJEeW5hbWljRm9ybUZpZWxkSXRlbSB9IGZyb20gJy4vaW50ZXJmYWNlcy9zbWFydC1maWx0ZXItZHluYW1pYy1mb3JtLWl0ZW0nO1xuaW1wb3J0IHsgU21hcnRGaWx0ZXJCYXIgfSBmcm9tICcuL3NtYXJ0LWZpbHRlci1iYXIuY2xhc3MnO1xuaW1wb3J0IHsgU21hcnRGaWx0ZXJCYXJTZXJ2aWNlIH0gZnJvbSAnLi9zbWFydC1maWx0ZXItYmFyLnNlcnZpY2UnO1xuXG5jb25zdCBkZWZhdWx0Q29sdW1uc0xheW91dCA9ICdYTDQtTDMtTTItUzEnO1xuXG5mdW5jdGlvbiBnZXRDb2x1bW5zTnVtYmVyKGxheW91dDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAgIC4uLmxheW91dC5zcGxpdCgnLScpLm1hcCgocGFydCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hBcnJheSA9IHBhcnQubWF0Y2goL1xcZCsvKTtcblxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoQXJyYXkgPyBwYXJzZUludChtYXRjaEFycmF5WzBdLCAxMCkgOiAxO1xuICAgICAgICB9KVxuICAgICk7XG59XG5cbi8qKlxuICogRGVmYXVsdCBkaWFsb2cgY29uZmlndXJhdGlvbi5cbiAqL1xuY29uc3QgZGlhbG9nQ29uZmlnOiBEaWFsb2dDb25maWcgPSB7XG4gICAgcmVzcG9uc2l2ZVBhZGRpbmc6IHRydWUsXG4gICAgdmVydGljYWxQYWRkaW5nOiB0cnVlLFxuICAgIG1pbldpZHRoOiAnMzByZW0nLFxuICAgIC8qKiA4OHB4IGl0J3MgdGhlIGhlYWRlciArIGZvb3RlciBoZWlnaHQgKi9cbiAgICBib2R5TWluSGVpZ2h0OiAnY2FsYyg1MHZoIC0gNS41cmVtKSdcbn07XG5cbmNvbnN0IHNtYXJ0RmlsdGVyQmFyUHJvdmlkZXI6IFByb3ZpZGVyID0ge1xuICAgIHByb3ZpZGU6IFNtYXJ0RmlsdGVyQmFyLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNtYXJ0RmlsdGVyQmFyQ29tcG9uZW50KVxufTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtc21hcnQtZmlsdGVyLWJhcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0LWZpbHRlci1iYXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9zbWFydC1maWx0ZXItYmFyLmNvbXBvbmVudC5zY3NzJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBzbWFydEZpbHRlckJhclByb3ZpZGVyLFxuICAgICAgICBTbWFydEZpbHRlckJhclNlcnZpY2UsXG4gICAgICAgIEZvcm1HZW5lcmF0b3JTZXJ2aWNlLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGRFBfUFJFU0VUX01BTkFHRURfQ09NUE9ORU5ULFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFNtYXJ0RmlsdGVyQmFyQ29tcG9uZW50XG4gICAgICAgIH1cbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdmZHAtc21hcnQtZmlsdGVyLWJhcicsXG4gICAgICAgICdbY2xhc3MuZmRwLXNtYXJ0LWZpbHRlci1iYXItLXRyYW5zcGFyZW50XSc6ICd0cmFuc3BhcmVudCdcbiAgICB9LFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBUb29sYmFyQ29tcG9uZW50LFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBUb29sYmFyU2VwYXJhdG9yQ29tcG9uZW50LFxuICAgICAgICBTZWFyY2hGaWVsZENvbXBvbmVudCxcbiAgICAgICAgVG9vbGJhclNwYWNlckRpcmVjdGl2ZSxcbiAgICAgICAgQnV0dG9uQ29tcG9uZW50LFxuICAgICAgICBUb29sYmFySXRlbURpcmVjdGl2ZSxcbiAgICAgICAgRm9ybUdlbmVyYXRvckNvbXBvbmVudCxcbiAgICAgICAgRmRUcmFuc2xhdGVQaXBlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBTbWFydEZpbHRlckJhckNvbXBvbmVudCBleHRlbmRzIFNtYXJ0RmlsdGVyQmFyIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogRm9ybSBnZW5lcmF0b3IgY29tcG9uZW50IGluc3RhbmNlLlxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoRm9ybUdlbmVyYXRvckNvbXBvbmVudCkgX2Zvcm1HZW5lcmF0b3IhOiBGb3JtR2VuZXJhdG9yQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogU3ViamVjdCB3aGljaCB3aWxsIHByb3ZpZGUgY29uZmlndXJhdGlvbiBkYXRhOiBkYXRhIHNvdXJjZSwgY29sdW1ucyBkZWZpbml0aW9ucywgZXRjLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHN1YmplY3QodmFsdWU6IFNtYXJ0RmlsdGVyQmFyU3ViamVjdERpcmVjdGl2ZSkge1xuICAgICAgICB0aGlzLl9zZXRTdWJqZWN0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXQgc3ViamVjdCgpOiBTbWFydEZpbHRlckJhclN1YmplY3REaXJlY3RpdmUge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3ViamVjdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogV2hldGhlciBzbWFydCBmaWx0ZXIgYmFyIGJhY2tncm91bmQgc2hvdWxkIGJlIHRyYW5zcGFyZW50LlxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHRyYW5zcGFyZW50ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBDb2x1bW5zIGxheW91dC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGZpbHRlcnNDb2x1bW5MYXlvdXQ6IE51bGxhYmxlPHN0cmluZz4gPSBkZWZhdWx0Q29sdW1uc0xheW91dDtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gdXBkYXRlIGZpbHRlcnMgd2hlbiB0aGV5IGFyZSBzZWxlY3RlZC4gT3RoZXJ3aXNlLCBmaWx0ZXJzIHdpbGwgYmUgYXBwbGllZCBvbmx5IGJ5IHByZXNzaW5nIFwiR29cIiBidXR0b24uXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgbGl2ZVVwZGF0ZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBoaWRlIFRvb2xiYXIuXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgaGlkZVRvb2xiYXIgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgc2VsZWN0ZWQgZmlsdGVycyBoYXZlIGJlZW4gY2hhbmdlZC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBzbWFydEZpbHRlcnNDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8U21hcnRGaWx0ZXJDaGFuZ2VPYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxTbWFydEZpbHRlckNoYW5nZU9iamVjdD4oKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBzZWxlY3RlZCBmaWx0ZXJzIGhhcyBiZWVuIGFwcGxpZWQgKFVzZXIgY2xpY2tlZCBvbiBHbyBidXR0b24pLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNtYXJ0RmlsdGVyc0FwcGxpZWQ6IEV2ZW50RW1pdHRlcjxTbWFydEZpbHRlckNoYW5nZU9iamVjdD4gPSBuZXcgRXZlbnRFbWl0dGVyPFNtYXJ0RmlsdGVyQ2hhbmdlT2JqZWN0PigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHNlYXJjaCBpbnB1dCBmaWVsZCB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNlYXJjaElucHV0Q2hhbmdlZDogRXZlbnRFbWl0dGVyPFNlYXJjaElucHV0PiA9IG5ldyBFdmVudEVtaXR0ZXI8U2VhcmNoSW5wdXQ+KCk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKFNtYXJ0RmlsdGVyQmFyVG9vbGJhckl0ZW1EaXJlY3RpdmUpXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdG9vbGJhckl0ZW1SZWZzOiBRdWVyeUxpc3Q8U21hcnRGaWx0ZXJCYXJUb29sYmFySXRlbURpcmVjdGl2ZT47XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVkIGFycmF5IG9mIGZpbHRlcnMgdG8gYXBwbHkgZm9yIHRoZSBzdWJqZWN0J3MgZGF0YSBzb3VyY2UuXG4gICAgICovXG4gICAgZmlsdGVyQnk6IENvbGxlY3Rpb25GaWx0ZXJHcm91cFtdID0gW107XG5cbiAgICAvKiogV2hldGhlciB0aGUgZmlsdGVycyBzZWN0aW9uIHNob3VsZCBiZSBzaG93bi4gKi9cbiAgICBzaG93RmlsdGVyQmFyJCA9IHNpZ25hbCh0cnVlKTtcblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCBmaWVsZCB2YWx1ZSB0byBhcHBseSBmb3IgdGhlIHN1YmplY3QncyBkYXRhIHNvdXJjZS5cbiAgICAgKi9cbiAgICBzZWFyY2g6IFNlYXJjaElucHV0IHwgdW5kZWZpbmVkO1xuICAgIC8qKiBASGlkZGVuICovXG4gICAgX3Rvb2xiYXJJdGVtczogVGVtcGxhdGVSZWY8YW55PltdID0gW107XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZm9ybUl0ZW1zID0gc2lnbmFsPER5bmFtaWNGb3JtSXRlbVtdIHwgbnVsbD4obnVsbCk7XG4gICAgLyoqIFNlbGVjdGVkIGZpbHRlcnMuICovXG4gICAgc2VsZWN0ZWRGaWx0ZXJzJCA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xuXG4gICAgLyoqIFNlbGVjdGVkIGZpbHRlcnMgY291bnQuICovXG4gICAgc2VsZWN0ZWRGaWx0ZXJzQ291bnQkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWxlY3RlZEZpbHRlcnMkKCkubGVuZ3RoKTtcblxuICAgIC8qKiBMb2FkaW5nIHN0YXRlLiAqL1xuICAgIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3ViamVjdD8uZ2V0RGF0YVNvdXJjZSgpID8gdGhpcy5fc3ViamVjdC5nZXREYXRhU291cmNlKCkuaXNEYXRhTG9hZGluZyA6IHRydWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJqZWN0U3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZm9ybUdlbmVyYXRvclJlYWR5ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lnbm9yZVByZXNldENoYW5nZSA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdWJqZWN0ITogU21hcnRGaWx0ZXJCYXJTdWJqZWN0RGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZWZyZXNoJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU21hcnQgZmlsdGVyIGJhciBzZXJ2aWNlIG1heSBiZSBwcm92aWRlZCBieSBwYXJlbnQgY29tcG9uZW50IHRoYXQgYWRkcyBjdXN0b20gY29uZmlndXJhdGlvbiwgc28gd2UgbmVlZCB0byBjaGVjayBpZiBpdCdzIHByb3ZpZGVkLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3NtYXJ0RmlsdGVyQmFyU2VydmljZSA9XG4gICAgICAgIGluamVjdChTbWFydEZpbHRlckJhclNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUsIHNraXBTZWxmOiB0cnVlIH0pID8/XG4gICAgICAgIGluamVjdChTbWFydEZpbHRlckJhclNlcnZpY2UsIHsgc2VsZjogdHJ1ZSB9KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2RpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2ZnU2VydmljZTogRm9ybUdlbmVyYXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveVJlZjogRGVzdHJveVJlZlxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9mZ1NlcnZpY2UuYWRkQ29tcG9uZW50KFNtYXJ0RmlsdGVyQmFyQ29uZGl0aW9uRmllbGRDb21wb25lbnQsIFtTTUFSVF9GSUxURVJfQkFSX1JFTkRFUkVSX0NPTVBPTkVOVF0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMuX3Rvb2xiYXJJdGVtUmVmcy5jaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKG51bGwpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Rvb2xiYXJJdGVtcyA9IHRoaXMuX3Rvb2xiYXJJdGVtUmVmcy50b0FycmF5KCkubWFwKChyZWYpID0+IHJlZi50ZW1wbGF0ZVJlZik7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVGcm9tU3ViamVjdCgpO1xuICAgICAgICB0aGlzLl9yZWZyZXNoJC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX3JlZnJlc2gkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtcyBjb25kaXRpb24gdmFsdWUgaW50byBodW1hbi1yZWFkYWJsZSB0ZXh0LlxuICAgICAqIEBwYXJhbSBjb25kaXRpb24gU21hcnQgZmlsdGVyIGJhciBjb25kaXRpb24uXG4gICAgICogQHBhcmFtIGZpbHRlclR5cGUgQ29uZGl0aW9uIGZpbHRlciB0eXBlLlxuICAgICAqL1xuICAgIGFzeW5jIGdldERpc3BsYXlWYWx1ZShjb25kaXRpb246IFNtYXJ0RmlsdGVyQmFyQ29uZGl0aW9uLCBmaWx0ZXJUeXBlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc21hcnRGaWx0ZXJCYXJTZXJ2aWNlLmdldERpc3BsYXlWYWx1ZShjb25kaXRpb24sIGZpbHRlclR5cGUpO1xuICAgIH1cblxuICAgIC8qKiBPcGVuIEZpbHRlcmluZyBTZXR0aW5ncyBEaWFsb2cgKi9cbiAgICBzaG93RmlsdGVyaW5nU2V0dGluZ3MoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLl9nZXRTdWJqZWN0RGVmaW5pdGlvbnMoKTtcbiAgICAgICAgY29uc3QgZGlhbG9nRGF0YTogU21hcnRGaWx0ZXJTZXR0aW5nc0RpYWxvZ0NvbmZpZyA9IHtcbiAgICAgICAgICAgIGZpZWxkczogY29sdW1ucyxcbiAgICAgICAgICAgIGZpbHRlckJ5OiB0aGlzLmZpbHRlckJ5LFxuICAgICAgICAgICAgc2VsZWN0ZWRGaWx0ZXJzOiB0aGlzLnNlbGVjdGVkRmlsdGVycyQoKVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuX2RpYWxvZ1NlcnZpY2Uub3BlbihcbiAgICAgICAgICAgIFNtYXJ0RmlsdGVyQmFyU2V0dGluZ3NEaWFsb2dDb21wb25lbnQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4uZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgICAgIGRpc2FibGVQYWRkaW5nczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzUwcmVtJyxcbiAgICAgICAgICAgICAgICBkYXRhOiBkaWFsb2dEYXRhXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5faW5qZWN0b3JcbiAgICAgICAgKTtcblxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogKHNlbGVjdGVkRmlsdGVyczogc3RyaW5nW10pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRTZWxlY3RlZEZpbHRlcnMoc2VsZWN0ZWRGaWx0ZXJzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogKCkgPT4ge31cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIENhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gc2VhcmNoIHF1ZXJ5IGNoYW5nZWQuICovXG4gICAgb25TZWFyY2hJbnB1dENoYW5nZShldmVudDogU2VhcmNoSW5wdXQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWFyY2ggPSBldmVudDtcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dENoYW5nZWQuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIENsZWFyIHNlYXJjaCBxdWVyeS4gKi9cbiAgICBjYW5jZWxTZWFyY2goKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VhcmNoID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICh0aGlzLmxpdmVVcGRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuc3VibWl0Rm9ybSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3VibWl0cyBmaWx0ZXJzIGFuZCBzZWFyY2ggZm9ybS5cbiAgICAgKi9cbiAgICBzdWJtaXRGb3JtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb3JtR2VuZXJhdG9yLnN1Ym1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgZm9yIHNldHRpbmcgcHJlZGVmaW5lZCBjb25maWd1cmF0aW9uLiAqL1xuICAgIGFzeW5jIHNldFByZXNldChkYXRhOiBTbWFydEZpbHRlckJhck1hbmFnZWRQcmVzZXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5faWdub3JlUHJlc2V0Q2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgZGF0YS5maWx0ZXJCeSA9IGRhdGEuZmlsdGVyQnkgfHwgW107XG4gICAgICAgIHRoaXMuZmlsdGVyQnkgPSBkYXRhLmZpbHRlckJ5O1xuICAgICAgICB0aGlzLnNlYXJjaCA9IGRhdGEuc2VhcmNoO1xuXG4gICAgICAgIHRoaXMuX3JlZnJlc2gkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fcmVmcmVzaCQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fcmVmcmVzaCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgICAgIHRoaXMuX2Zvcm1HZW5lcmF0b3JSZWFkeVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9yZWZyZXNoJClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFJlc2V0IGZvcm1cbiAgICAgICAgICAgICAgICB0aGlzLl9mZ1NlcnZpY2UucmVzZXRGb3JtKHRoaXMuX2Zvcm1HZW5lcmF0b3IuZm9ybSk7XG5cbiAgICAgICAgICAgICAgICAvLyBTZXQgbmV3IGRhdGFcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlckJ5IG9mIHRoaXMuZmlsdGVyQnkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuX2ZnU2VydmljZS5nZXRGb3JtQ29udHJvbCh0aGlzLl9mb3JtR2VuZXJhdG9yLmZvcm0sIGZpbHRlckJ5LmZpZWxkKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybUl0ZW0gPSBjb250cm9sLmZvcm1JdGVtIGFzIFByZXBhcmVkRHluYW1pY0Zvcm1GaWVsZEl0ZW07XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uID0gdGhpcy5fc21hcnRGaWx0ZXJCYXJTZXJ2aWNlLnRyYW5zZm9ybUNvbGxlY3Rpb25GaWx0ZXIoZmlsdGVyQnkpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ29uZGl0aW9ucyA9IGF3YWl0IHRoaXMuX3NtYXJ0RmlsdGVyQmFyU2VydmljZS5nZXRDb25kaXRpb25GaWVsZFNlbGVjdGVkVmFyaWFudHMoXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtSXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sPy5zZXRWYWx1ZShzZWxlY3RlZENvbmRpdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX3NldFNlbGVjdGVkRmlsdGVycyh0aGlzLmZpbHRlckJ5Lm1hcCgoZmlsdGVyQnkpID0+IGZpbHRlckJ5LmZpZWxkKSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnN1YmplY3QuZ2V0RGF0YVNvdXJjZSgpO1xuICAgICAgICAgICAgICAgIHNvdXJjZS5kYXRhUHJvdmlkZXIuc2V0RmlsdGVycyh0aGlzLmZpbHRlckJ5LCB0aGlzLnNlYXJjaCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJqZWN0LmdldFN1YmplY3QoKS5mZXRjaCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgY3VycmVudCBwcmVzZXQgY29uZmlndXJhdGlvbi4gKi9cbiAgICBnZXRDdXJyZW50UHJlc2V0KCk6IFNtYXJ0RmlsdGVyQmFyTWFuYWdlZFByZXNldCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzZWFyY2g6IHRoaXMuc2VhcmNoLFxuICAgICAgICAgICAgZmlsdGVyQnk6IHRoaXMuZmlsdGVyQnlcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ2FsbGJhY2sgZnVuY3Rpb24gd2hlbiBmb3JtIGdlbmVyYXRvciBmb3JtIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB2YWxpZGF0ZWQgYW5kIHN1Ym1pdHRlZC5cbiAgICAgKi9cbiAgICBfb25Gb3JtU3VibWl0dGVkKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9ucyA9IHRoaXMuX2dlbmVyYXRlQ29sbGVjdGlvbkZpbHRlckdyb3VwcyhldmVudCk7XG4gICAgICAgIHRoaXMuX2FwcGx5RmlsdGVyaW5nKGNvbmRpdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDYWxsYmFjayBtZXRob2Qgd2hlbiBmb3JtIGhhcyBiZWVuIGNyZWF0ZWQuXG4gICAgICogUG9wdWxhdGVzIHNlbGVjdGVkIGZpbHRlcnMgYXJyYXkgd2l0aCB1c2VyLWRlZmluZWQgZGVmYXVsdCBmaWx0ZXJzLlxuICAgICAqL1xuICAgIF9vbkZvcm1DcmVhdGVkKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zdWJqZWN0KSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRTZWxlY3RlZEZpbHRlcnMoWy4uLnRoaXMuc3ViamVjdC5nZXREZWZhdWx0RmllbGRzKCksIC4uLnRoaXMuc2VsZWN0ZWRGaWx0ZXJzJCgpXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9mb3JtR2VuZXJhdG9yLmZvcm0udmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoNTApLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25kaXRpb25zID0gYXdhaXQgdGhpcy5nZXRGb3JtYXR0ZWRDb25kaXRpb25zKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zbWFydEZpbHRlcnNDaGFuZ2VkLmVtaXQoeyBmaWx0ZXJCeTogY29uZGl0aW9ucywgc2VhcmNoOiB0aGlzLnNlYXJjaCwgc3ViamVjdDogdGhpcy5zdWJqZWN0IH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxpdmVVcGRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBseUZpbHRlcmluZyhjb25kaXRpb25zKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2Zvcm1HZW5lcmF0b3JSZWFkeS5uZXh0KHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgU21hcnQgRmlsdGVyIEJhciBmaWx0ZXJzIHNlY3Rpb24uXG4gICAgICovXG4gICAgdG9nZ2xlRmlsdGVyQmFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNob3dGaWx0ZXJCYXIkLnVwZGF0ZSgoc2hvdykgPT4gIXNob3cpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvcm1hdHMgcmF3IGZpbHRlcnMgb2JqZWN0IGludG8gYXJyYXkgb2YgZ3JvdXBlZCBmaWx0ZXJzLlxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIGdyb3VwZWQgZmlsdGVycy5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRGb3JtYXR0ZWRDb25kaXRpb25zKCk6IFByb21pc2U8Q29sbGVjdGlvbkZpbHRlckdyb3VwW10+IHtcbiAgICAgICAgY29uc3QgZm9ybVZhbHVlID0gYXdhaXQgdGhpcy5fZmdTZXJ2aWNlLmdldEZvcm1WYWx1ZSh0aGlzLl9mb3JtR2VuZXJhdG9yLmZvcm0pO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2VuZXJhdGVDb2xsZWN0aW9uRmlsdGVyR3JvdXBzKGZvcm1WYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZW5lcmF0ZUNvbGxlY3Rpb25GaWx0ZXJHcm91cHModmFsdWU6IHtcbiAgICAgICAgW2tleTogc3RyaW5nXTogU21hcnRGaWx0ZXJCYXJDb25kaXRpb25bXTtcbiAgICB9KTogQ29sbGVjdGlvbkZpbHRlckdyb3VwW10ge1xuICAgICAgICBjb25zdCBjb2xsZWN0aW9uRmlsdGVyR3JvdXBzOiBDb2xsZWN0aW9uRmlsdGVyR3JvdXBbXSA9IFtdO1xuXG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLl9nZXRTdWJqZWN0RGVmaW5pdGlvbnMoKTtcblxuICAgICAgICBPYmplY3QuZW50cmllcyh2YWx1ZSlcbiAgICAgICAgICAgIC5maWx0ZXIoKFssIGZpZWxkQ29uZGl0aW9uc10pID0+ICEhZmllbGRDb25kaXRpb25zKVxuICAgICAgICAgICAgLmZvckVhY2goKFtmaWVsZE5hbWUsIGZpZWxkQ29uZGl0aW9uc10pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gZmllbGROYW1lKSBhcyBTbWFydEZpbHRlckJhckZpZWxkRGVmaW5pdGlvbjtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJHcm91cDogQ29sbGVjdGlvbkZpbHRlckdyb3VwID0ge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgc3RyYXRlZ3k6IGNvbHVtbi5jb25kaXRpb25TdHJhdGVneSxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5rZXlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGZpZWxkQ29uZGl0aW9ucy5mb3JFYWNoKChjb25kaXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyR3JvdXAuZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5OiBjb25kaXRpb24ub3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sdW1uLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjb25kaXRpb24udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTI6IGNvbmRpdGlvbi52YWx1ZTIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBjb2x1bW4uZGF0YVR5cGVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uRmlsdGVyR3JvdXBzLnB1c2goZmlsdGVyR3JvdXApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIGVtcHR5IGZpbHRlciBvYmplY3RzLlxuICAgICAgICByZXR1cm4gY29sbGVjdGlvbkZpbHRlckdyb3Vwcy5maWx0ZXIoKGZpbHRlckdyb3VwKSA9PiBmaWx0ZXJHcm91cC5maWx0ZXJzPy5sZW5ndGggPiAwKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldFN1YmplY3Qoc3ViamVjdDogU21hcnRGaWx0ZXJCYXJTdWJqZWN0RGlyZWN0aXZlKTogdm9pZCB7XG4gICAgICAgIGlmICghc3ViamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3ViamVjdCA9IHN1YmplY3Q7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVGcm9tU3ViamVjdCgpO1xuICAgICAgICB0aGlzLl9saXN0ZW5Ub1N1YmplY3RDb2x1bW5zKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHVuc3Vic2NyaWJlRnJvbVN1YmplY3QoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fc3ViamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3N1YmplY3RTdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1N1YmplY3RDb2x1bW5zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJqZWN0U3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgdGhpcy5fc3ViamVjdFN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy5fc3ViamVjdC5maWVsZHNTdHJlYW0uc3Vic2NyaWJlKGFzeW5jIChjb2x1bW5zOiBTbWFydEZpbHRlckJhckZpZWxkRGVmaW5pdGlvbltdKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fZ2VuZXJhdGVGb3JtKGNvbHVtbnMuZmlsdGVyKChjKSA9PiBjLmZpbHRlcmFibGUpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEdlbmVyYXRlcyBmb3JtIGl0ZW1zIHRvIGJlIGNvbnN1bWVkIGJ5IGZvcm0gZ2VuZXJhdG9yIGNvbXBvbmVudC5cbiAgICAgKiBAcGFyYW0gY29sdW1ucyBjb2x1bW5zIGRlZmluaXRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIGFzeW5jIF9nZW5lcmF0ZUZvcm0oY29sdW1uczogU21hcnRGaWx0ZXJCYXJGaWVsZERlZmluaXRpb25bXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBpdGVtczogRHluYW1pY0Zvcm1GaWVsZEl0ZW1bXSA9IFtdO1xuICAgICAgICBjb25zdCBjb2x1bW5zTnVtYmVyID0gZ2V0Q29sdW1uc051bWJlcih0aGlzLmZpbHRlcnNDb2x1bW5MYXlvdXQgPz8gJycpO1xuICAgICAgICBsZXQgY3VycmVudENvbHVtbiA9IDE7XG5cbiAgICAgICAgaWYgKGNvbHVtbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgbGV0IGl0ZW06IFNtYXJ0RmlsdGVyQmFyRHluYW1pY0Zvcm1GaWVsZEl0ZW0gPSB0aGlzLl9nZW5lcmF0ZUJhc2VGaWVsZEl0ZW0oY29sdW1uKTtcblxuICAgICAgICAgICAgaWYgKGNvbHVtbi5yZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzJC51cGRhdGUoKGZpbHRlcnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKGNvbHVtbi5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcnM7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN3aXRjaCAoY29sdW1uLmZpbHRlclR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclR5cGUuU0lOR0xFOlxuICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyVHlwZS5DQVRFR09SWTpcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5ndWlPcHRpb25zLmFkZGl0aW9uYWxEYXRhLnR5cGUgPSAnc2VsZWN0JztcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5ndWlPcHRpb25zLmlubGluZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclR5cGUuTVVMVEk6XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZ3VpT3B0aW9ucy5hZGRpdGlvbmFsRGF0YS50eXBlID0gJ211bHRpLWlucHV0JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJUeXBlLkNVU1RPTTpcbiAgICAgICAgICAgICAgICAgICAgaXRlbSA9IHRoaXMuX2dlbmVyYXRlQ3VzdG9tRmlsdGVyRmllbGRJdGVtKGNvbHVtbiwgaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRmlsdGVyVHlwZS5JTlBVVDpcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpdGVtID0gdGhpcy5fZ2VuZXJhdGVJbnB1dEZpZWxkSXRlbShjb2x1bW4sIGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXRlbS5ndWlPcHRpb25zLmNvbHVtbiA9IGN1cnJlbnRDb2x1bW47XG4gICAgICAgICAgICBjdXJyZW50Q29sdW1uICs9IDE7XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50Q29sdW1uID4gY29sdW1uc051bWJlcikge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRDb2x1bW4gPSAxO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9mb3JtSXRlbXMuc2V0KGl0ZW1zKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dlbmVyYXRlQ3VzdG9tRmlsdGVyRmllbGRJdGVtKFxuICAgICAgICBjb2x1bW46IFNtYXJ0RmlsdGVyQmFyRmllbGREZWZpbml0aW9uLFxuICAgICAgICBpdGVtOiBTbWFydEZpbHRlckJhckR5bmFtaWNGb3JtRmllbGRJdGVtXG4gICAgKTogU21hcnRGaWx0ZXJCYXJEeW5hbWljRm9ybUZpZWxkSXRlbSB7XG4gICAgICAgIGlmICghY29sdW1uLmN1c3RvbUZpbHRlclR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW0uZ3VpT3B0aW9ucy5hZGRpdGlvbmFsRGF0YS50eXBlID0gY29sdW1uLmN1c3RvbUZpbHRlclR5cGU7XG4gICAgICAgIGl0ZW0uZ3VpT3B0aW9ucy5hZGRpdGlvbmFsRGF0YSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICBpdGVtLmd1aU9wdGlvbnMuYWRkaXRpb25hbERhdGEsXG4gICAgICAgICAgICB0aGlzLl9zbWFydEZpbHRlckJhclNlcnZpY2UuZ2V0Q3VzdG9tRmlsdGVyQ29uZmlndXJhdGlvbihjb2x1bW4uY3VzdG9tRmlsdGVyVHlwZSlcbiAgICAgICAgKTtcblxuICAgICAgICBpdGVtLnR5cGUgPSBpdGVtLmd1aU9wdGlvbnMuYWRkaXRpb25hbERhdGEucmVuZGVyZXJDb21wb25lbnRcbiAgICAgICAgICAgID8gYCR7aXRlbS5ndWlPcHRpb25zLmFkZGl0aW9uYWxEYXRhLnR5cGV9LXJlbmRlcmVyYFxuICAgICAgICAgICAgOiBpdGVtLnR5cGU7XG4gICAgICAgIGl0ZW0udHJhbnNmb3JtZXIgPSBpdGVtLmd1aU9wdGlvbnMuYWRkaXRpb25hbERhdGEudmFsdWVUcmFuc2Zvcm1lcjtcblxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogR2VuZXJhdGVzIGZvcm0gaXRlbSBiYXNlZCBvbiBkYXRhIHR5cGUuXG4gICAgICogQHBhcmFtIGNvbHVtblxuICAgICAqIEBwYXJhbSBpdGVtXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZW5lcmF0ZUlucHV0RmllbGRJdGVtKFxuICAgICAgICBjb2x1bW46IFNtYXJ0RmlsdGVyQmFyRmllbGREZWZpbml0aW9uLFxuICAgICAgICBpdGVtOiBTbWFydEZpbHRlckJhckR5bmFtaWNGb3JtRmllbGRJdGVtXG4gICAgKTogU21hcnRGaWx0ZXJCYXJEeW5hbWljRm9ybUZpZWxkSXRlbSB7XG4gICAgICAgIHN3aXRjaCAoY29sdW1uLmRhdGFUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEZpbHRlcmFibGVDb2x1bW5EYXRhVHlwZS5EQVRFOlxuICAgICAgICAgICAgICAgIGl0ZW0uZ3VpT3B0aW9ucy5hZGRpdGlvbmFsRGF0YS50eXBlID0gJ2RhdGVwaWNrZXInO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJhYmxlQ29sdW1uRGF0YVR5cGUuTlVNQkVSOlxuICAgICAgICAgICAgICAgIGl0ZW0uZ3VpT3B0aW9ucy5hZGRpdGlvbmFsRGF0YS5jb250cm9sVHlwZSA9ICdudW1iZXInO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBGaWx0ZXJhYmxlQ29sdW1uRGF0YVR5cGUuQk9PTEVBTjpcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyYWJsZUNvbHVtbkRhdGFUeXBlLlNUUklORzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaXRlbS5ndWlPcHRpb25zLmFkZGl0aW9uYWxEYXRhLmNvbnRyb2xUeXBlID0gJ3RleHQnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEdlbmVyYXRlcyBiYXNlIGZvcm0gaXRlbSBvYmplY3QgdG8gYmUgY29uc3VtZWQgYnkgZm9ybSBnZW5lcmF0b3IgY29tcG9uZW50LlxuICAgICAqIEBwYXJhbSBjb2x1bW4gY29sdW1uIGRlZmluaXRpb25cbiAgICAgKiBAcmV0dXJucyBiYXNlIGZvcm0gaXRlbSBvYmplY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2VuZXJhdGVCYXNlRmllbGRJdGVtKGNvbHVtbjogU21hcnRGaWx0ZXJCYXJGaWVsZERlZmluaXRpb24pOiBTbWFydEZpbHRlckJhckR5bmFtaWNGb3JtRmllbGRJdGVtIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgbWVzc2FnZTogY29sdW1uLmxhYmVsLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGNvbHVtbi5yZXF1aXJlZCxcbiAgICAgICAgICAgIHR5cGU6IFNNQVJUX0ZJTFRFUl9CQVJfUkVOREVSRVJfQ09NUE9ORU5ULFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICcgJyxcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IGNvbHVtbi5yZXF1aXJlZCA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSA6IFtdLFxuICAgICAgICAgICAgY2hvaWNlczogY29sdW1uLmhhc09wdGlvbnMgPyB0aGlzLl9nZXRGaWx0ZXJEZWZhdWx0T3B0aW9ucyhjb2x1bW4ua2V5LCBjb2x1bW4uZmlsdGVyVHlwZSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB0cmFuc2Zvcm1lcjogKGl0ZW1WYWx1ZSkgPT4gZ2V0U2VsZWN0SXRlbVZhbHVlKGl0ZW1WYWx1ZSksXG4gICAgICAgICAgICBndWlPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgYWRkaXRpb25hbERhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IGNvbHVtbi5kYXRhVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyVHlwZTogY29sdW1uLmZpbHRlclR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAgICAgIGNob2ljZXM6IGNvbHVtbi5oYXNPcHRpb25zID8gdGhpcy5fZ2V0RmlsdGVyQXZhaWxhYmxlT3B0aW9ucyhjb2x1bW4ua2V5KSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB3aGVuOiAoKSA9PiB0aGlzLnNlbGVjdGVkRmlsdGVycyQoKS5pbmNsdWRlcyhjb2x1bW4ubmFtZSlcbiAgICAgICAgfSBhcyBTbWFydEZpbHRlckJhckR5bmFtaWNGb3JtRmllbGRJdGVtO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXRyaWV2ZXMgYXZhaWxhYmxlIG9wdGlvbnMgZm9yIHBhcnRpY3VsYXIgY29sdW1uIGJ5IHVzaW5nIGRhdGEgc291cmNlIG1ldGhvZC5cbiAgICAgKiBAcGFyYW0gY29sdW1uIHByb3BlcnR5IG5hbWUgb2YgdGhlIGRhdGEgc291cmNlIGl0ZW1zLlxuICAgICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPFNlbGVjdEl0ZW1bXT59IE9ic2VydmFibGUgd2l0aCB0aGUgYXJyYXkgb2YgYXZhaWxhYmxlIG9wdGlvbnMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0RmlsdGVyQXZhaWxhYmxlT3B0aW9ucyhjb2x1bW46IHN0cmluZyk6ICgpID0+IE9ic2VydmFibGU8U2VsZWN0SXRlbVtdPiB7XG4gICAgICAgIHJldHVybiAoKSA9PiB0aGlzLl9nZXRGaWVsZFZhcmlhbnRzKGNvbHVtbik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRGaWx0ZXJEZWZhdWx0T3B0aW9ucyhjb2x1bW46IHN0cmluZywgZmlsdGVyVHlwZTogRmlsdGVyVHlwZSk6ICgpID0+IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhbnRzID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5fZ2V0RmllbGRWYXJpYW50cyhjb2x1bW4pLnBpcGUodGFrZSgxKSkpO1xuXG4gICAgICAgICAgICBjb25zdCBhdmFpbGFibGVEZWZhdWx0Q29uZGl0aW9uczogU21hcnRGaWx0ZXJCYXJDb25kaXRpb25bXSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiB2YXJpYW50cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbjogU21hcnRGaWx0ZXJCYXJDb25kaXRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBvcHRpb24udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnZXF1YWxUbydcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uZGl0aW9uLmRpc3BsYXlWYWx1ZSA9IGF3YWl0IHRoaXMuZ2V0RGlzcGxheVZhbHVlKGNvbmRpdGlvbiwgZmlsdGVyVHlwZSk7XG5cbiAgICAgICAgICAgICAgICBhdmFpbGFibGVEZWZhdWx0Q29uZGl0aW9ucy5wdXNoKGNvbmRpdGlvbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBhdmFpbGFibGVEZWZhdWx0Q29uZGl0aW9ucztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEZpZWxkVmFyaWFudHMoY29sdW1uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNlbGVjdEl0ZW1bXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJqZWN0LmdldEZpZWxkVmFyaWFudHMoY29sdW1uKS5waXBlKFxuICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgIG1hcCgoZGF0YSkgPT4gZGF0YS5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiBkYXRhLmZpbmRJbmRleCgoX2l0ZW0pID0+IF9pdGVtLnZhbHVlID09PSBpdGVtLnZhbHVlKSA9PT0gaW5kZXgpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0U3ViamVjdERlZmluaXRpb25zKCk6IFNtYXJ0RmlsdGVyQmFyRmllbGREZWZpbml0aW9uW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJqZWN0Py5nZXRTdWJqZWN0RmllbGRzKCkgfHwgW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNldHMgcHJvdmlkZWQgZmlsdGVycyBkaXJlY3RseSB0byB0aGUgZGF0YSBzb3VyY2UuXG4gICAgICogQHBhcmFtIGZpbHRlcnMgYXJyYXkgb2YgZmlsdGVycy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9hcHBseUZpbHRlcmluZyhmaWx0ZXJzOiBDb2xsZWN0aW9uRmlsdGVyR3JvdXBbXSk6IHZvaWQge1xuICAgICAgICAvLyBBcHBseSBvdXRzaWRlIGZpbHRlcmluZyBhbmQgZm9yY2Ugc3ViamVjdCB0byBmZXRjaCBuZXcgZGF0YS5cbiAgICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5zdWJqZWN0LmdldERhdGFTb3VyY2UoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJCeSA9IGZpbHRlcnM7XG4gICAgICAgIHNvdXJjZS5kYXRhUHJvdmlkZXIuc2V0RmlsdGVycyhmaWx0ZXJzLCB0aGlzLnNlYXJjaCk7XG4gICAgICAgIHRoaXMuc3ViamVjdC5nZXRTdWJqZWN0KCkuZmV0Y2goKTtcbiAgICAgICAgY29uc3QgZW1pdHRlZFZhbHVlOiBTbWFydEZpbHRlckJhck1hbmFnZWRQcmVzZXQgPSB7IHNlYXJjaDogdGhpcy5zZWFyY2gsIGZpbHRlckJ5OiB0aGlzLmZpbHRlckJ5IH07XG4gICAgICAgIHRoaXMuc21hcnRGaWx0ZXJzQXBwbGllZC5lbWl0KHsgLi4uZW1pdHRlZFZhbHVlLCBzdWJqZWN0OiB0aGlzLl9zdWJqZWN0IH0pO1xuXG4gICAgICAgIGlmICghdGhpcy5faWdub3JlUHJlc2V0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnByZXNldENoYW5nZWQuZW1pdChlbWl0dGVkVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lnbm9yZVByZXNldENoYW5nZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdW5zdWJzY3JpYmVGcm9tU3ViamVjdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3ViamVjdFN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fc3ViamVjdFN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRTZWxlY3RlZEZpbHRlcnMoZmlsdGVyczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMkLnNldChmaWx0ZXJzLmZpbHRlcigoZjogc3RyaW5nLCBpOiBudW1iZXIpID0+IGZpbHRlcnMuaW5kZXhPZihmKSA9PT0gaSkpO1xuICAgICAgICB0aGlzLl9mb3JtR2VuZXJhdG9yLnJlZnJlc2hTdGVwc1Zpc2liaWxpdHkoKTtcbiAgICB9XG59XG4iLCJAaWYgKCFoaWRlVG9vbGJhcikge1xuICAgIDxmZC10b29sYmFyIGZkVHlwZT1cInRyYW5zcGFyZW50XCI+XG4gICAgICAgIEBpZiAoX3Rvb2xiYXJJdGVtcykge1xuICAgICAgICAgICAgQGZvciAodGVtcGxhdGUgb2YgX3Rvb2xiYXJJdGVtczsgdHJhY2sgdGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxmZC10b29sYmFyLXNlcGFyYXRvcj48L2ZkLXRvb2xiYXItc2VwYXJhdG9yPlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIDxmZHAtc2VhcmNoLWZpZWxkXG4gICAgICAgICAgICAoaW5wdXRDaGFuZ2UpPVwib25TZWFyY2hJbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChzZWFyY2hTdWJtaXQpPVwic3VibWl0Rm9ybSgpXCJcbiAgICAgICAgICAgIChjYW5jZWxTZWFyY2gpPVwiY2FuY2VsU2VhcmNoKClcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmdcIlxuICAgICAgICAgICAgW2Rpc2FibGVSZWZyZXNoXT1cInRydWVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidwbGF0Zm9ybVNtYXJ0RmlsdGVyQmFyLnNlYXJjaFBsYWNlaG9sZGVyJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgPjwvZmRwLXNlYXJjaC1maWVsZD5cbiAgICAgICAgPGZkLXRvb2xiYXItc3BhY2VyPjwvZmQtdG9vbGJhci1zcGFjZXI+XG4gICAgICAgIEBpZiAoIWxpdmVVcGRhdGUpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic3VibWl0Rm9ybSgpXCJcbiAgICAgICAgICAgICAgICBmZFR5cGU9XCJlbXBoYXNpemVkXCJcbiAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybVNtYXJ0RmlsdGVyQmFyLnN1Ym1pdEJ1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJzdWJtaXRGb3JtKClcIlxuICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICBnbHlwaD1cInN5bmNocm9uaXplXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nXCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiJ3BsYXRmb3JtU21hcnRGaWx0ZXJCYXIucmVmcmVzaEJ1dHRvbkFyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwic2hvd0ZpbHRlcmluZ1NldHRpbmdzKClcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIlxuICAgICAgICAgICAgICAgICdwbGF0Zm9ybVNtYXJ0RmlsdGVyQmFyLmZpbHRlcnNCdXR0b25MYWJlbCcgfCBmZFRyYW5zbGF0ZTogeyBmaWx0ZXJzQ291bnQ6IHNlbGVjdGVkRmlsdGVyc0NvdW50JCgpIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVGaWx0ZXJCYXIoKVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgKHNob3dGaWx0ZXJCYXIkKClcbiAgICAgICAgICAgICAgICAgICAgPyAncGxhdGZvcm1TbWFydEZpbHRlckJhci5oaWRlRmlsdGVyc0J1dHRvbkxhYmVsJ1xuICAgICAgICAgICAgICAgICAgICA6ICdwbGF0Zm9ybVNtYXJ0RmlsdGVyQmFyLnNob3dGaWx0ZXJzQnV0dG9uTGFiZWwnXG4gICAgICAgICAgICAgICAgKSB8IGZkVHJhbnNsYXRlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZ1wiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICA8L2ZkLXRvb2xiYXI+XG59XG5AaWYgKF9mb3JtSXRlbXMoKTsgYXMgZm9ybUl0ZW1zKSB7XG4gICAgPGRpdiBjbGFzcz1cImZkcC1zbWFydC1maWx0ZXItYmFyX19maWx0ZXJzXCIgW2hpZGRlbl09XCIhc2hvd0ZpbHRlckJhciQoKVwiPlxuICAgICAgICA8ZmRwLWZvcm0tZ2VuZXJhdG9yXG4gICAgICAgICAgICAoZm9ybUNyZWF0ZWQpPVwiX29uRm9ybUNyZWF0ZWQoKVwiXG4gICAgICAgICAgICAoZm9ybVN1Ym1pdHRlZCk9XCJfb25Gb3JtU3VibWl0dGVkKCRldmVudClcIlxuICAgICAgICAgICAgW25vQWRkaXRpb25hbENvbnRlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZm9ybUl0ZW1zXT1cImZvcm1JdGVtc1wiXG4gICAgICAgICAgICBbY29sdW1uTGF5b3V0XT1cImZpbHRlcnNDb2x1bW5MYXlvdXRcIlxuICAgICAgICA+PC9mZHAtZm9ybS1nZW5lcmF0b3I+XG4gICAgPC9kaXY+XG59XG4iXX0=
@@ -0,0 +1,31 @@
1
+ import { AsyncPipe } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation, inject } from '@angular/core';
3
+ import { ListComponent, ListItemComponent, ListLinkDirective, ListTitleDirective } from '@fundamental-ngx/core/list';
4
+ import { FdTranslatePipe } from '@fundamental-ngx/i18n';
5
+ import { Table, TableDataSourceDirective, TableService } from '@fundamental-ngx/platform/table-helpers';
6
+ import * as i0 from "@angular/core";
7
+ export class TableGrowingButtonComponent {
8
+ constructor() {
9
+ /** Whether to show items count. */
10
+ this.showItemsCount = false;
11
+ /** @hidden */
12
+ this._tableService = inject(TableService);
13
+ /** @hidden */
14
+ this._dataSourceDirective = inject(TableDataSourceDirective);
15
+ /** @hidden */
16
+ this._table = inject(Table);
17
+ }
18
+ /** @hidden */
19
+ _loadMore() {
20
+ this._table._onSpyIntersect(true);
21
+ }
22
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: TableGrowingButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
23
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.8", type: TableGrowingButtonComponent, isStandalone: true, selector: "fdp-table-growing-button", inputs: { showItemsCount: "showItemsCount" }, ngImport: i0, template: "<div fd-list role=\"none\">\n <div\n fd-list-item\n ariaRole=\"none\"\n class=\"fdp-table__growing-button\"\n [growing]=\"true\"\n style=\"height: auto\"\n [action]=\"true\"\n >\n <a fd-list-link (click)=\"_loadMore()\">\n <div fd-list-title>\n <div\n class=\"fdp-table__growing-button-content\"\n [class.fdp-table__growing-button-content--byline]=\"showItemsCount\"\n >\n @if (!showItemsCount) {\n {{ 'platformTable.loadMore' | fdTranslate }}\n } @else {\n <div class=\"fdp-table__growing-button__title\">\n {{ 'platformTable.loadMore' | fdTranslate }}\n </div>\n <div class=\"fdp-table__growing-button__subtitle\">\n [ {{ _table.loadedRows$() }} / {{ _dataSourceDirective.totalItems$() }} ]\n </div>\n }\n </div>\n </div>\n </a>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator", "role"], outputs: ["focusEscapeList"] }, { kind: "component", type: ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "ariaRole"], outputs: ["keyDown"] }, { kind: "directive", type: ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: ListLinkDirective, selector: "[fd-list-link], [fdListLink]", inputs: ["navigationIndicator", "navigated", "focusable"] }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
24
+ }
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: TableGrowingButtonComponent, decorators: [{
26
+ type: Component,
27
+ args: [{ selector: 'fdp-table-growing-button', standalone: true, imports: [ListComponent, ListItemComponent, ListTitleDirective, ListLinkDirective, AsyncPipe, FdTranslatePipe], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div fd-list role=\"none\">\n <div\n fd-list-item\n ariaRole=\"none\"\n class=\"fdp-table__growing-button\"\n [growing]=\"true\"\n style=\"height: auto\"\n [action]=\"true\"\n >\n <a fd-list-link (click)=\"_loadMore()\">\n <div fd-list-title>\n <div\n class=\"fdp-table__growing-button-content\"\n [class.fdp-table__growing-button-content--byline]=\"showItemsCount\"\n >\n @if (!showItemsCount) {\n {{ 'platformTable.loadMore' | fdTranslate }}\n } @else {\n <div class=\"fdp-table__growing-button__title\">\n {{ 'platformTable.loadMore' | fdTranslate }}\n </div>\n <div class=\"fdp-table__growing-button__subtitle\">\n [ {{ _table.loadedRows$() }} / {{ _dataSourceDirective.totalItems$() }} ]\n </div>\n }\n </div>\n </div>\n </a>\n </div>\n</div>\n" }]
28
+ }], propDecorators: { showItemsCount: [{
29
+ type: Input
30
+ }] } });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZ3Jvd2luZy1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS90YWJsZS9jb21wb25lbnRzL2dyb3dpbmctYnV0dG9uL3RhYmxlLWdyb3dpbmctYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vdGFibGUvY29tcG9uZW50cy9ncm93aW5nLWJ1dHRvbi90YWJsZS1ncm93aW5nLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNySCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFFLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxZQUFZLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7QUFVeEcsTUFBTSxPQUFPLDJCQUEyQjtJQVJ4QztRQVNJLG1DQUFtQztRQUVuQyxtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUV2QixjQUFjO1FBQ0wsa0JBQWEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFOUMsY0FBYztRQUNMLHlCQUFvQixHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBRWpFLGNBQWM7UUFDTCxXQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBTW5DO0lBSkcsY0FBYztJQUNkLFNBQVM7UUFDSixJQUFJLENBQUMsTUFBYyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDOzhHQWpCUSwyQkFBMkI7a0dBQTNCLDJCQUEyQixrSUNkeEMsMm5DQThCQSw0Q0RyQmMsYUFBYSw4UUFBRSxpQkFBaUIsOE1BQUUsa0JBQWtCLDZGQUFFLGlCQUFpQiwrSEFBYSxlQUFlOzsyRkFLcEcsMkJBQTJCO2tCQVJ2QyxTQUFTOytCQUNJLDBCQUEwQixjQUN4QixJQUFJLFdBQ1AsQ0FBQyxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxpQkFFL0YsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTTs4QkFLL0MsY0FBYztzQkFEYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBWaWV3RW5jYXBzdWxhdGlvbiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaXN0Q29tcG9uZW50LCBMaXN0SXRlbUNvbXBvbmVudCwgTGlzdExpbmtEaXJlY3RpdmUsIExpc3RUaXRsZURpcmVjdGl2ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9saXN0JztcbmltcG9ydCB7IEZkVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQgeyBUYWJsZSwgVGFibGVEYXRhU291cmNlRGlyZWN0aXZlLCBUYWJsZVNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3RhYmxlLWhlbHBlcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC10YWJsZS1ncm93aW5nLWJ1dHRvbicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTGlzdENvbXBvbmVudCwgTGlzdEl0ZW1Db21wb25lbnQsIExpc3RUaXRsZURpcmVjdGl2ZSwgTGlzdExpbmtEaXJlY3RpdmUsIEFzeW5jUGlwZSwgRmRUcmFuc2xhdGVQaXBlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtZ3Jvd2luZy1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVHcm93aW5nQnV0dG9uQ29tcG9uZW50IHtcbiAgICAvKiogV2hldGhlciB0byBzaG93IGl0ZW1zIGNvdW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0l0ZW1zQ291bnQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX3RhYmxlU2VydmljZSA9IGluamVjdChUYWJsZVNlcnZpY2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfZGF0YVNvdXJjZURpcmVjdGl2ZSA9IGluamVjdChUYWJsZURhdGFTb3VyY2VEaXJlY3RpdmUpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfdGFibGUgPSBpbmplY3QoVGFibGUpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbG9hZE1vcmUoKTogdm9pZCB7XG4gICAgICAgICh0aGlzLl90YWJsZSBhcyBhbnkpLl9vblNweUludGVyc2VjdCh0cnVlKTtcbiAgICB9XG59XG4iLCI8ZGl2IGZkLWxpc3Qgcm9sZT1cIm5vbmVcIj5cbiAgICA8ZGl2XG4gICAgICAgIGZkLWxpc3QtaXRlbVxuICAgICAgICBhcmlhUm9sZT1cIm5vbmVcIlxuICAgICAgICBjbGFzcz1cImZkcC10YWJsZV9fZ3Jvd2luZy1idXR0b25cIlxuICAgICAgICBbZ3Jvd2luZ109XCJ0cnVlXCJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IGF1dG9cIlxuICAgICAgICBbYWN0aW9uXT1cInRydWVcIlxuICAgID5cbiAgICAgICAgPGEgZmQtbGlzdC1saW5rIChjbGljayk9XCJfbG9hZE1vcmUoKVwiPlxuICAgICAgICAgICAgPGRpdiBmZC1saXN0LXRpdGxlPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZHAtdGFibGVfX2dyb3dpbmctYnV0dG9uLWNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmRwLXRhYmxlX19ncm93aW5nLWJ1dHRvbi1jb250ZW50LS1ieWxpbmVdPVwic2hvd0l0ZW1zQ291bnRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgQGlmICghc2hvd0l0ZW1zQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdwbGF0Zm9ybVRhYmxlLmxvYWRNb3JlJyB8IGZkVHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkcC10YWJsZV9fZ3Jvd2luZy1idXR0b25fX3RpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3BsYXRmb3JtVGFibGUubG9hZE1vcmUnIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkcC10YWJsZV9fZ3Jvd2luZy1idXR0b25fX3N1YnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyB7eyBfdGFibGUubG9hZGVkUm93cyQoKSB9fSAvIHt7IF9kYXRhU291cmNlRGlyZWN0aXZlLnRvdGFsSXRlbXMkKCkgfX0gXVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2E+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==