@energycap/components 0.39.24-ECAP-26539-Item-Picker-Select-All.20240912-1128 → 0.39.24-ECAP-26539-Item-Picker-Select-All.20240912-1453
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.
@@ -235,10 +235,10 @@ export class ItemPickerComponent {
|
|
235
235
|
}
|
236
236
|
}
|
237
237
|
ItemPickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ItemPickerComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
|
238
|
-
ItemPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ItemPickerComponent, selector: "ec-item-picker", inputs: { id: "id", availableTitle: "availableTitle", selectedTitle: "selectedTitle", itemName: "itemName", formModel: "formModel", customAvailableHeaderTemplate: "customAvailableHeaderTemplate", customAvailableItemTemplate: "customAvailableItemTemplate", customSelectedItemTemplate: "customSelectedItemTemplate", ready: "ready", getItems: "getItems", selectionContext: "selectionContext", noDataMessage: "noDataMessage", noSelectedItemsMessage: "noSelectedItemsMessage", selectAllEnabled: "selectAllEnabled", allSelectedItemsMessage: "allSelectedItemsMessage" }, viewQueries: [{ propertyName: "defaultAvailableHeaderTemplate", first: true, predicate: ["defaultAvailableHeaderTemplate"], descendants: true, static: true }, { propertyName: "defaultAvailableSelectAllHeaderTemplate", first: true, predicate: ["defaultAvailableSelectAllHeaderTemplate"], descendants: true, static: true }, { propertyName: "defaultAvailableItemTemplate", first: true, predicate: ["defaultAvailableItemTemplate"], descendants: true, static: true }, { propertyName: "defaultSelectedItemTemplate", first: true, predicate: ["defaultSelectedItemTemplate"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div ecOverlay\r\n class=\"d-flex flex-grow card\"\r\n [status]=\"tableStatus?.status\"\r\n [message]=\"tableStatus?.message\"\r\n [displayAsMask]=\"true\">\r\n <ec-searchable-table id=\"{{id}}_searchableTable\"\r\n class=\"flex-grow\"\r\n [fillParentHeight]=\"true\"\r\n [hideHeader]=\"true\"\r\n [hideSearchControl]=\"true\"\r\n [removeCard]=\"true\"\r\n [pageable]=\"true\"\r\n [pageSize]=\"50\"\r\n [objectType]=\"itemName\"\r\n [formModel]=\"formModel\"\r\n [ready]=\"ready\"\r\n [getItems]=\"getItems\"\r\n [selectable]=\"true\"\r\n [noDataMessage]=\"noDataMessage\"\r\n [selectionContext]=\"selectionContext\"\r\n [status]=\"tableStatus\"\r\n (itemsChange)=\"onItemsChange($event)\"\r\n [style.--ec-searchable-table-flex-properties]=\"(availableItems.length || tableStatus.status === 'pending' || tableStatus.status === 'error' ) ? '1 1 auto' : '0 1 auto'\"\r\n [style.--ec-searchable-table-height-caption-footer]=\"'calc(2.5rem + 1px)'\"\r\n [tableLayoutFixed]=\"true\">\r\n <header *ngIf=\"customAvailableHeaderTemplate\"\r\n class=\"card-header flex-shrink\"\r\n style=\"height: 3rem;\">\r\n <h3 class=\"card-title\">{{availableTitle | translate}}</h3>\r\n </header>\r\n <thead>\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\"\r\n class=\"border-bottom-0\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableHeaderTemplate;\"></ng-container>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <ng-container *ngFor=\"let item of availableItems; index as rowIndex; trackBy: trackByIndex\">\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\"\r\n [rowIndex]=\"rowIndex\"\r\n [isCheckboxDisabled]=\"item.preventRemove\"\r\n [isSelected]=\"selectionContext?.selectedItemsMap.has(item.id)\"\r\n [style.--ec-table-selectable-row-vertical-align-checkbox-td]=\"'middle'\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableItemTemplate; context: {$implicit: item}\">\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </ec-searchable-table>\r\n\r\n <section id=\"{{id}}_selectedItems\" class=\"selected-items flex-grow d-flex flex-column\">\r\n <ec-table [scrollable]=\"true\"\r\n class=\"d-flex flex-grow is-fixed\">\r\n <colgroup>\r\n <col>\r\n <col style=\"width: 2rem;\">\r\n </colgroup>\r\n <thead>\r\n <tr style=\"height: 3rem;\">\r\n <th colspan=\"2\"\r\n class=\"p-2 border-bottom-0\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"text-heading-2 font-color-primary flex-grow text-truncate\">{{selectedTitle | translate}}</span>\r\n <a *ngIf=\"selectedItemsClearable\"\r\n id=\"{{id}}_clearSelection\"\r\n class=\"pl-2 ml-auto font-size-base\"\r\n href=\"javascript:void(0)\"\r\n (click)=\"onClearSelectionClick()\"\r\n translate>ClearSelection_TC</a>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <ng-container *ngIf=\"selectionContext.isSelectingAllItems\">\r\n <tr>\r\n <td colspan=\"2\" translate>{{allSelectedItemsMessage}}</td>\r\n </tr>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"selectedItems.length && !selectionContext.isSelectingAllItems\">\r\n <tr *ngFor=\"let item of selectedItems; last as isLast\"\r\n id=\"selected_row_{{item.id}}\"\r\n [class.border-bottom]=\"!isLast\">\r\n <td class=\"p-2\">\r\n <ng-container\r\n *ngTemplateOutlet=\"internalizedSelectedItemTemplate; context: {$implicit: item}\">\r\n </ng-container>\r\n </td>\r\n\r\n <td class=\"actions-col text-right\"\r\n style=\"vertical-align: middle;\">\r\n <ec-button id=\"{{id}}_removeSelected_{{item.id}}\"\r\n *ngIf=\"!item.preventRemove\"\r\n type=\"icon\"\r\n icon=\"ec-icon icon-cancel\"\r\n (clicked)=\"removeSelectedItem(item)\">\r\n </ec-button>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n <tr *ngIf=\"!selectedItems.length\">\r\n <td *ngIf=\"!noSelectedItemsMessage\"\r\n colspan=\"2\"\r\n class=\"p-2 no-data-message\"\r\n translate\r\n [translateParams]=\"{itemName: itemName | translate}\">ItemPickerNoItemsSelected_SC</td>\r\n <td *ngIf=\"noSelectedItemsMessage\"\r\n colspan=\"2\"\r\n class=\"p-2 no-data-message\"\r\n translate>{{noSelectedItemsMessage}}</td>\r\n </tr>\r\n </tbody>\r\n </ec-table>\r\n\r\n <footer id=\"selectedItemsFooter\"\r\n *ngIf=\"selectedItems.length && !selectionContext.isSelectingAllItems\"\r\n class=\"d-flex flex-shrink px-2 border-top align-items-center\"\r\n style=\"height: calc(2.5rem + 1px);\">\r\n <span class=\"ml-auto text-caption-1 font-color-hint\">\r\n {{selectedItems.length}} {{itemName | translate}}\r\n </span>\r\n </footer>\r\n </section>\r\n</div>\r\n\r\n<ng-template #defaultAvailableHeaderTemplate>\r\n <th class=\"text-heading-2 font-color-primary border-bottom-0\">{{availableTitle | translate}}</th>\r\n</ng-template>\r\n\r\n<ng-template #defaultAvailableSelectAllHeaderTemplate>\r\n <th class=\"text-heading-2 font-color-primary border-bottom-0\">\r\n <div class=\"d-flex align-items-center \">\r\n <span *ngIf=\"!masterCheckboxText\"\r\n class=\"text-truncate\">{{availableTitle | translate}}</span>\r\n <span *ngIf=\"masterCheckboxText\"\r\n id=\"selectedCount\">{{masterCheckboxText}}</span>\r\n <button *ngIf=\"showSelectAllItemsLink\"\r\n ecLinkButton\r\n id=\"selectAllItemsLink\"\r\n (click)=\"selectAllItems()\"\r\n class=\"ml-2\">\r\n {{ ('SelectAllItemPickerItems_TC') | translate:{ count: totalCount, itemName: itemName } }}\r\n </button>\r\n </div>\r\n </th>\r\n</ng-template>\r\n\r\n<ng-template #defaultAvailableItemTemplate\r\n let-item>\r\n <td>{{item.label}}</td>\r\n</ng-template>\r\n\r\n<ng-template #defaultSelectedItemTemplate\r\n let-item>\r\n {{item.label}}\r\n</ng-template>", styles: [":host{display:flex}ec-searchable-table{border-right:2px solid var(--ec-border-color)}.selected-items{max-width:var(--ec-item-picker-max-width-selected-items, 50%)}.no-data-message{white-space:normal}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i3.ButtonComponent, selector: "ec-button", inputs: ["id", "disabled", "icon", "label", "badge", "tabindex", "type", "pending", "pendingIcon", "customTemplate", "isSubmit", "autofocus"], outputs: ["clicked"] }, { kind: "component", type: i4.ViewOverlayComponent, selector: "[ecOverlay]", inputs: ["status", "message", "action", "noDataTemplate", "displayAsMask", "overlayClassList"] }, { kind: "component", type: i5.TableComponent, selector: "ec-table", inputs: ["id", "scrollable", "resizable", "condensed", "sortable", "selectionContext", "selectionToolbarTemplate", "selectable", "isForm", "sort", "resizableColumns"], outputs: ["sortChange"] }, { kind: "component", type: i6.SearchableTableComponent, selector: "ec-searchable-table", inputs: ["id", "resizable", "sortable", "sort", "autofocus", "tableClasses", "searchboxPlaceholder", "formModel", "noDataMessage", "noSearchResultsMessage", "ready", "getItems", "refresh", "status", "tableLayoutFixed", "searchboxTabIndex", "maxItemCount", "hideSearchControl", "hideHeader", "objectType", "hideFooter", "pageable", "pageSize", "maxTabs", "searchboxReadonly", "selectionContext", "selectionToolbarTemplate", "additionalCountText", "selectable", "customContentTemplate", "removeCard", "overlayClasses", "fillParentHeight"], outputs: ["sortChange", "pageChange", "itemsChange"] }, { kind: "component", type: i7.TableSelectableRowComponent, selector: "[ecTableSelectableRow]", inputs: ["id", "ecTableSelectableRow", "selectionContext", "rowIndex", "lockedColOptions", "isSelected", "isCheckboxDisabled"] }, { kind: "component", type: i8.LinkButtonComponent, selector: "button[ecLinkButton]" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
|
238
|
+
ItemPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ItemPickerComponent, selector: "ec-item-picker", inputs: { id: "id", availableTitle: "availableTitle", selectedTitle: "selectedTitle", itemName: "itemName", formModel: "formModel", customAvailableHeaderTemplate: "customAvailableHeaderTemplate", customAvailableItemTemplate: "customAvailableItemTemplate", customSelectedItemTemplate: "customSelectedItemTemplate", ready: "ready", getItems: "getItems", selectionContext: "selectionContext", noDataMessage: "noDataMessage", noSelectedItemsMessage: "noSelectedItemsMessage", selectAllEnabled: "selectAllEnabled", allSelectedItemsMessage: "allSelectedItemsMessage" }, viewQueries: [{ propertyName: "defaultAvailableHeaderTemplate", first: true, predicate: ["defaultAvailableHeaderTemplate"], descendants: true, static: true }, { propertyName: "defaultAvailableSelectAllHeaderTemplate", first: true, predicate: ["defaultAvailableSelectAllHeaderTemplate"], descendants: true, static: true }, { propertyName: "defaultAvailableItemTemplate", first: true, predicate: ["defaultAvailableItemTemplate"], descendants: true, static: true }, { propertyName: "defaultSelectedItemTemplate", first: true, predicate: ["defaultSelectedItemTemplate"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div ecOverlay\r\n class=\"d-flex flex-grow card\"\r\n [status]=\"tableStatus?.status\"\r\n [message]=\"tableStatus?.message\"\r\n [displayAsMask]=\"true\">\r\n <ec-searchable-table id=\"{{id}}_searchableTable\"\r\n class=\"flex-grow\"\r\n [fillParentHeight]=\"true\"\r\n [hideHeader]=\"true\"\r\n [hideSearchControl]=\"true\"\r\n [removeCard]=\"true\"\r\n [pageable]=\"true\"\r\n [pageSize]=\"50\"\r\n [objectType]=\"itemName\"\r\n [formModel]=\"formModel\"\r\n [ready]=\"ready\"\r\n [getItems]=\"getItems\"\r\n [selectable]=\"true\"\r\n [noDataMessage]=\"noDataMessage\"\r\n [selectionContext]=\"selectionContext\"\r\n [status]=\"tableStatus\"\r\n (itemsChange)=\"onItemsChange($event)\"\r\n [style.--ec-searchable-table-flex-properties]=\"(availableItems.length || tableStatus.status === 'pending' || tableStatus.status === 'error' ) ? '1 1 auto' : '0 1 auto'\"\r\n [style.--ec-searchable-table-height-caption-footer]=\"'calc(2.5rem + 1px)'\"\r\n [tableLayoutFixed]=\"true\">\r\n <header *ngIf=\"customAvailableHeaderTemplate\"\r\n class=\"card-header flex-shrink\"\r\n style=\"height: 3rem;\">\r\n <h3 class=\"card-title\">{{availableTitle | translate}}</h3>\r\n </header>\r\n <thead>\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\"\r\n class=\"border-bottom-0\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableHeaderTemplate;\"></ng-container>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <ng-container *ngFor=\"let item of availableItems; index as rowIndex; trackBy: trackByIndex\">\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\"\r\n [rowIndex]=\"rowIndex\"\r\n [isCheckboxDisabled]=\"item.preventRemove\"\r\n [isSelected]=\"selectionContext?.selectedItemsMap.has(item.id)\"\r\n [style.--ec-table-selectable-row-vertical-align-checkbox-td]=\"'middle'\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableItemTemplate; context: {$implicit: item}\">\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </ec-searchable-table>\r\n\r\n <section id=\"{{id}}_selectedItems\" class=\"selected-items flex-grow d-flex flex-column\">\r\n <ec-table [scrollable]=\"true\"\r\n class=\"d-flex flex-grow is-fixed\">\r\n <colgroup>\r\n <col>\r\n <col style=\"width: 2rem;\">\r\n </colgroup>\r\n <thead>\r\n <tr style=\"height: 3rem;\">\r\n <th colspan=\"2\"\r\n class=\"p-2 border-bottom-0\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"text-heading-2 font-color-primary flex-grow text-truncate\">{{selectedTitle | translate}}</span>\r\n <a *ngIf=\"selectedItemsClearable\"\r\n id=\"{{id}}_clearSelection\"\r\n class=\"pl-2 ml-auto font-size-base\"\r\n href=\"javascript:void(0)\"\r\n (click)=\"onClearSelectionClick()\"\r\n translate>ClearSelection_TC</a>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <ng-container *ngIf=\"selectionContext.isSelectingAllItems\">\r\n <tr>\r\n <td colspan=\"2\" translate innerHtml=\"allSelectedItemsMessage | translate\"></td>\r\n </tr>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"selectedItems.length && !selectionContext.isSelectingAllItems\">\r\n <tr *ngFor=\"let item of selectedItems; last as isLast\"\r\n id=\"selected_row_{{item.id}}\"\r\n [class.border-bottom]=\"!isLast\">\r\n <td class=\"p-2\">\r\n <ng-container\r\n *ngTemplateOutlet=\"internalizedSelectedItemTemplate; context: {$implicit: item}\">\r\n </ng-container>\r\n </td>\r\n\r\n <td class=\"actions-col text-right\"\r\n style=\"vertical-align: middle;\">\r\n <ec-button id=\"{{id}}_removeSelected_{{item.id}}\"\r\n *ngIf=\"!item.preventRemove\"\r\n type=\"icon\"\r\n icon=\"ec-icon icon-cancel\"\r\n (clicked)=\"removeSelectedItem(item)\">\r\n </ec-button>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n <tr *ngIf=\"!selectedItems.length\">\r\n <td *ngIf=\"!noSelectedItemsMessage\"\r\n colspan=\"2\"\r\n class=\"p-2 no-data-message\"\r\n translate\r\n [translateParams]=\"{itemName: itemName | translate}\">ItemPickerNoItemsSelected_SC</td>\r\n <td *ngIf=\"noSelectedItemsMessage\"\r\n colspan=\"2\"\r\n class=\"p-2 no-data-message\"\r\n translate>{{noSelectedItemsMessage}}</td>\r\n </tr>\r\n </tbody>\r\n </ec-table>\r\n\r\n <footer id=\"selectedItemsFooter\"\r\n *ngIf=\"selectedItems.length && !selectionContext.isSelectingAllItems\"\r\n class=\"d-flex flex-shrink px-2 border-top align-items-center\"\r\n style=\"height: calc(2.5rem + 1px);\">\r\n <span class=\"ml-auto text-caption-1 font-color-hint\">\r\n {{selectedItems.length}} {{itemName | translate}}\r\n </span>\r\n </footer>\r\n </section>\r\n</div>\r\n\r\n<ng-template #defaultAvailableHeaderTemplate>\r\n <th class=\"text-heading-2 font-color-primary border-bottom-0\">{{availableTitle | translate}}</th>\r\n</ng-template>\r\n\r\n<ng-template #defaultAvailableSelectAllHeaderTemplate>\r\n <th class=\"text-heading-2 font-color-primary border-bottom-0\">\r\n <div class=\"d-flex align-items-center \">\r\n <span *ngIf=\"!masterCheckboxText\"\r\n class=\"text-truncate\">{{availableTitle | translate}}</span>\r\n <span *ngIf=\"masterCheckboxText\"\r\n id=\"selectedCount\">{{masterCheckboxText}}</span>\r\n <button *ngIf=\"showSelectAllItemsLink\"\r\n ecLinkButton\r\n id=\"selectAllItemsLink\"\r\n (click)=\"selectAllItems()\"\r\n class=\"ml-2\">\r\n {{ ('SelectAllItemPickerItems_TC') | translate:{ count: totalCount, itemName: itemName } }}\r\n </button>\r\n </div>\r\n </th>\r\n</ng-template>\r\n\r\n<ng-template #defaultAvailableItemTemplate\r\n let-item>\r\n <td>{{item.label}}</td>\r\n</ng-template>\r\n\r\n<ng-template #defaultSelectedItemTemplate\r\n let-item>\r\n {{item.label}}\r\n</ng-template>", styles: [":host{display:flex}ec-searchable-table{border-right:2px solid var(--ec-border-color)}.selected-items{max-width:var(--ec-item-picker-max-width-selected-items, 50%)}.no-data-message{white-space:normal}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i3.ButtonComponent, selector: "ec-button", inputs: ["id", "disabled", "icon", "label", "badge", "tabindex", "type", "pending", "pendingIcon", "customTemplate", "isSubmit", "autofocus"], outputs: ["clicked"] }, { kind: "component", type: i4.ViewOverlayComponent, selector: "[ecOverlay]", inputs: ["status", "message", "action", "noDataTemplate", "displayAsMask", "overlayClassList"] }, { kind: "component", type: i5.TableComponent, selector: "ec-table", inputs: ["id", "scrollable", "resizable", "condensed", "sortable", "selectionContext", "selectionToolbarTemplate", "selectable", "isForm", "sort", "resizableColumns"], outputs: ["sortChange"] }, { kind: "component", type: i6.SearchableTableComponent, selector: "ec-searchable-table", inputs: ["id", "resizable", "sortable", "sort", "autofocus", "tableClasses", "searchboxPlaceholder", "formModel", "noDataMessage", "noSearchResultsMessage", "ready", "getItems", "refresh", "status", "tableLayoutFixed", "searchboxTabIndex", "maxItemCount", "hideSearchControl", "hideHeader", "objectType", "hideFooter", "pageable", "pageSize", "maxTabs", "searchboxReadonly", "selectionContext", "selectionToolbarTemplate", "additionalCountText", "selectable", "customContentTemplate", "removeCard", "overlayClasses", "fillParentHeight"], outputs: ["sortChange", "pageChange", "itemsChange"] }, { kind: "component", type: i7.TableSelectableRowComponent, selector: "[ecTableSelectableRow]", inputs: ["id", "ecTableSelectableRow", "selectionContext", "rowIndex", "lockedColOptions", "isSelected", "isCheckboxDisabled"] }, { kind: "component", type: i8.LinkButtonComponent, selector: "button[ecLinkButton]" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
|
239
239
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ItemPickerComponent, decorators: [{
|
240
240
|
type: Component,
|
241
|
-
args: [{ selector: 'ec-item-picker', template: "<div ecOverlay\r\n class=\"d-flex flex-grow card\"\r\n [status]=\"tableStatus?.status\"\r\n [message]=\"tableStatus?.message\"\r\n [displayAsMask]=\"true\">\r\n <ec-searchable-table id=\"{{id}}_searchableTable\"\r\n class=\"flex-grow\"\r\n [fillParentHeight]=\"true\"\r\n [hideHeader]=\"true\"\r\n [hideSearchControl]=\"true\"\r\n [removeCard]=\"true\"\r\n [pageable]=\"true\"\r\n [pageSize]=\"50\"\r\n [objectType]=\"itemName\"\r\n [formModel]=\"formModel\"\r\n [ready]=\"ready\"\r\n [getItems]=\"getItems\"\r\n [selectable]=\"true\"\r\n [noDataMessage]=\"noDataMessage\"\r\n [selectionContext]=\"selectionContext\"\r\n [status]=\"tableStatus\"\r\n (itemsChange)=\"onItemsChange($event)\"\r\n [style.--ec-searchable-table-flex-properties]=\"(availableItems.length || tableStatus.status === 'pending' || tableStatus.status === 'error' ) ? '1 1 auto' : '0 1 auto'\"\r\n [style.--ec-searchable-table-height-caption-footer]=\"'calc(2.5rem + 1px)'\"\r\n [tableLayoutFixed]=\"true\">\r\n <header *ngIf=\"customAvailableHeaderTemplate\"\r\n class=\"card-header flex-shrink\"\r\n style=\"height: 3rem;\">\r\n <h3 class=\"card-title\">{{availableTitle | translate}}</h3>\r\n </header>\r\n <thead>\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\"\r\n class=\"border-bottom-0\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableHeaderTemplate;\"></ng-container>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <ng-container *ngFor=\"let item of availableItems; index as rowIndex; trackBy: trackByIndex\">\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\"\r\n [rowIndex]=\"rowIndex\"\r\n [isCheckboxDisabled]=\"item.preventRemove\"\r\n [isSelected]=\"selectionContext?.selectedItemsMap.has(item.id)\"\r\n [style.--ec-table-selectable-row-vertical-align-checkbox-td]=\"'middle'\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableItemTemplate; context: {$implicit: item}\">\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </ec-searchable-table>\r\n\r\n <section id=\"{{id}}_selectedItems\" class=\"selected-items flex-grow d-flex flex-column\">\r\n <ec-table [scrollable]=\"true\"\r\n class=\"d-flex flex-grow is-fixed\">\r\n <colgroup>\r\n <col>\r\n <col style=\"width: 2rem;\">\r\n </colgroup>\r\n <thead>\r\n <tr style=\"height: 3rem;\">\r\n <th colspan=\"2\"\r\n class=\"p-2 border-bottom-0\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"text-heading-2 font-color-primary flex-grow text-truncate\">{{selectedTitle | translate}}</span>\r\n <a *ngIf=\"selectedItemsClearable\"\r\n id=\"{{id}}_clearSelection\"\r\n class=\"pl-2 ml-auto font-size-base\"\r\n href=\"javascript:void(0)\"\r\n (click)=\"onClearSelectionClick()\"\r\n translate>ClearSelection_TC</a>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <ng-container *ngIf=\"selectionContext.isSelectingAllItems\">\r\n <tr>\r\n <td colspan=\"2\" translate
|
241
|
+
args: [{ selector: 'ec-item-picker', template: "<div ecOverlay\r\n class=\"d-flex flex-grow card\"\r\n [status]=\"tableStatus?.status\"\r\n [message]=\"tableStatus?.message\"\r\n [displayAsMask]=\"true\">\r\n <ec-searchable-table id=\"{{id}}_searchableTable\"\r\n class=\"flex-grow\"\r\n [fillParentHeight]=\"true\"\r\n [hideHeader]=\"true\"\r\n [hideSearchControl]=\"true\"\r\n [removeCard]=\"true\"\r\n [pageable]=\"true\"\r\n [pageSize]=\"50\"\r\n [objectType]=\"itemName\"\r\n [formModel]=\"formModel\"\r\n [ready]=\"ready\"\r\n [getItems]=\"getItems\"\r\n [selectable]=\"true\"\r\n [noDataMessage]=\"noDataMessage\"\r\n [selectionContext]=\"selectionContext\"\r\n [status]=\"tableStatus\"\r\n (itemsChange)=\"onItemsChange($event)\"\r\n [style.--ec-searchable-table-flex-properties]=\"(availableItems.length || tableStatus.status === 'pending' || tableStatus.status === 'error' ) ? '1 1 auto' : '0 1 auto'\"\r\n [style.--ec-searchable-table-height-caption-footer]=\"'calc(2.5rem + 1px)'\"\r\n [tableLayoutFixed]=\"true\">\r\n <header *ngIf=\"customAvailableHeaderTemplate\"\r\n class=\"card-header flex-shrink\"\r\n style=\"height: 3rem;\">\r\n <h3 class=\"card-title\">{{availableTitle | translate}}</h3>\r\n </header>\r\n <thead>\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\"\r\n class=\"border-bottom-0\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableHeaderTemplate;\"></ng-container>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <ng-container *ngFor=\"let item of availableItems; index as rowIndex; trackBy: trackByIndex\">\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\"\r\n [rowIndex]=\"rowIndex\"\r\n [isCheckboxDisabled]=\"item.preventRemove\"\r\n [isSelected]=\"selectionContext?.selectedItemsMap.has(item.id)\"\r\n [style.--ec-table-selectable-row-vertical-align-checkbox-td]=\"'middle'\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableItemTemplate; context: {$implicit: item}\">\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </ec-searchable-table>\r\n\r\n <section id=\"{{id}}_selectedItems\" class=\"selected-items flex-grow d-flex flex-column\">\r\n <ec-table [scrollable]=\"true\"\r\n class=\"d-flex flex-grow is-fixed\">\r\n <colgroup>\r\n <col>\r\n <col style=\"width: 2rem;\">\r\n </colgroup>\r\n <thead>\r\n <tr style=\"height: 3rem;\">\r\n <th colspan=\"2\"\r\n class=\"p-2 border-bottom-0\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"text-heading-2 font-color-primary flex-grow text-truncate\">{{selectedTitle | translate}}</span>\r\n <a *ngIf=\"selectedItemsClearable\"\r\n id=\"{{id}}_clearSelection\"\r\n class=\"pl-2 ml-auto font-size-base\"\r\n href=\"javascript:void(0)\"\r\n (click)=\"onClearSelectionClick()\"\r\n translate>ClearSelection_TC</a>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <ng-container *ngIf=\"selectionContext.isSelectingAllItems\">\r\n <tr>\r\n <td colspan=\"2\" translate innerHtml=\"allSelectedItemsMessage | translate\"></td>\r\n </tr>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"selectedItems.length && !selectionContext.isSelectingAllItems\">\r\n <tr *ngFor=\"let item of selectedItems; last as isLast\"\r\n id=\"selected_row_{{item.id}}\"\r\n [class.border-bottom]=\"!isLast\">\r\n <td class=\"p-2\">\r\n <ng-container\r\n *ngTemplateOutlet=\"internalizedSelectedItemTemplate; context: {$implicit: item}\">\r\n </ng-container>\r\n </td>\r\n\r\n <td class=\"actions-col text-right\"\r\n style=\"vertical-align: middle;\">\r\n <ec-button id=\"{{id}}_removeSelected_{{item.id}}\"\r\n *ngIf=\"!item.preventRemove\"\r\n type=\"icon\"\r\n icon=\"ec-icon icon-cancel\"\r\n (clicked)=\"removeSelectedItem(item)\">\r\n </ec-button>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n <tr *ngIf=\"!selectedItems.length\">\r\n <td *ngIf=\"!noSelectedItemsMessage\"\r\n colspan=\"2\"\r\n class=\"p-2 no-data-message\"\r\n translate\r\n [translateParams]=\"{itemName: itemName | translate}\">ItemPickerNoItemsSelected_SC</td>\r\n <td *ngIf=\"noSelectedItemsMessage\"\r\n colspan=\"2\"\r\n class=\"p-2 no-data-message\"\r\n translate>{{noSelectedItemsMessage}}</td>\r\n </tr>\r\n </tbody>\r\n </ec-table>\r\n\r\n <footer id=\"selectedItemsFooter\"\r\n *ngIf=\"selectedItems.length && !selectionContext.isSelectingAllItems\"\r\n class=\"d-flex flex-shrink px-2 border-top align-items-center\"\r\n style=\"height: calc(2.5rem + 1px);\">\r\n <span class=\"ml-auto text-caption-1 font-color-hint\">\r\n {{selectedItems.length}} {{itemName | translate}}\r\n </span>\r\n </footer>\r\n </section>\r\n</div>\r\n\r\n<ng-template #defaultAvailableHeaderTemplate>\r\n <th class=\"text-heading-2 font-color-primary border-bottom-0\">{{availableTitle | translate}}</th>\r\n</ng-template>\r\n\r\n<ng-template #defaultAvailableSelectAllHeaderTemplate>\r\n <th class=\"text-heading-2 font-color-primary border-bottom-0\">\r\n <div class=\"d-flex align-items-center \">\r\n <span *ngIf=\"!masterCheckboxText\"\r\n class=\"text-truncate\">{{availableTitle | translate}}</span>\r\n <span *ngIf=\"masterCheckboxText\"\r\n id=\"selectedCount\">{{masterCheckboxText}}</span>\r\n <button *ngIf=\"showSelectAllItemsLink\"\r\n ecLinkButton\r\n id=\"selectAllItemsLink\"\r\n (click)=\"selectAllItems()\"\r\n class=\"ml-2\">\r\n {{ ('SelectAllItemPickerItems_TC') | translate:{ count: totalCount, itemName: itemName } }}\r\n </button>\r\n </div>\r\n </th>\r\n</ng-template>\r\n\r\n<ng-template #defaultAvailableItemTemplate\r\n let-item>\r\n <td>{{item.label}}</td>\r\n</ng-template>\r\n\r\n<ng-template #defaultSelectedItemTemplate\r\n let-item>\r\n {{item.label}}\r\n</ng-template>", styles: [":host{display:flex}ec-searchable-table{border-right:2px solid var(--ec-border-color)}.selected-items{max-width:var(--ec-item-picker-max-width-selected-items, 50%)}.no-data-message{white-space:normal}\n"] }]
|
242
242
|
}], ctorParameters: function () { return [{ type: i1.TranslateService }]; }, propDecorators: { id: [{
|
243
243
|
type: Input
|
244
244
|
}], availableTitle: [{
|
@@ -282,4 +282,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
282
282
|
type: ViewChild,
|
283
283
|
args: ['defaultSelectedItemTemplate', { static: true }]
|
284
284
|
}] } });
|
285
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2l0ZW0tcGlja2VyL2l0ZW0tcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9pdGVtLXBpY2tlci9pdGVtLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBNkMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZHLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUl6RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbURBQW1ELENBQUM7Ozs7Ozs7Ozs7QUFlM0UsQ0FBQztBQUVGLE1BQU0sT0FBTywyQkFBK0IsU0FBUSx5QkFBeUI7SUFBN0U7O1FBQ0UscUZBQXFGO1FBQzlFLHFCQUFnQixHQUErQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRWhFOzs7V0FHRztRQUNJLDRCQUF1QixHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRTlEOztXQUVHO1FBQ2Esb0NBQStCLEdBQVksSUFBSSxDQUFDO1FBRXpELHdCQUFtQixHQUFZLEtBQUssQ0FBQztJQUM5QyxDQUFDO0NBQUE7QUFPRCxNQUFNLE9BQU8sbUJBQW1CO0lBNEY5QixZQUNVLGdCQUFrQztRQUFsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBM0Y1Qyx3R0FBd0c7UUFDeEYsT0FBRSxHQUFZLEVBQUUsQ0FBQztRQUVqQyxzREFB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O3NCQUFwQixLQUFLO2dCQUdVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBR1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUtVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBTVUsc0JBQXNCO3NCQUFyQyxLQUFLO2dCQUVVLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFFVSx1QkFBdUI7c0JBQXRDLEtBQUs7Z0JBbUNpRSw4QkFBOEI7c0JBQXBHLFNBQVM7dUJBQUMsZ0NBQWdDLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNtQix1Q0FBdUM7c0JBQXRILFNBQVM7dUJBQUMseUNBQXlDLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUVELDRCQUE0QjtzQkFBaEcsU0FBUzt1QkFBQyw4QkFBOEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ1MsMkJBQTJCO3NCQUE5RixTQUFTO3VCQUFDLDZCQUE2QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IFRhYmxlU2VhcmNoUmVzdWx0cyB9IGZyb20gJy4uLy4uL2Rpc3BsYXkvdGFibGUvc2VhcmNoYWJsZS10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQYWdpbmdJbmZvIH0gZnJvbSAnLi4vLi4vZGlzcGxheS90YWJsZS90YWJsZS1wYWdpbmF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRhYmxlU2VsZWN0YWJsZVJvd0NvbnRleHQgfSBmcm9tICcuLi8uLi9kaXNwbGF5L3RhYmxlL3RhYmxlLXNlbGVjdGFibGUtcm93LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICcuLi8uLi9kaXNwbGF5L3ZpZXctb3ZlcmxheS92aWV3LW92ZXJsYXkuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICcuLi9tZW51L21lbnUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQaWNrZXJJdGVtPFRWYWx1ZSA9IGFueSwgU0l0ZW1zID0gYW55PiBleHRlbmRzIE1lbnVJdGVtIHtcclxuICBpZDogc3RyaW5nO1xyXG5cclxuICAvKiogV2hlbiBzZXQgdG8gdHJ1ZSB0aGUgYXZhaWxhYmxlIGl0ZW0gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBsaXN0ICovXHJcbiAgZGVmYXVsdFNlbGVjdGVkPzogYm9vbGVhbjtcclxuXHJcbiAgLyoqIFdoZW4gc2V0IHRvIHRydWUsIHRoZSBpdGVtIHdpbGwgbm90IGJlIGFsbG93ZWQgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZWxlY3RlZCBsaXN0ICovXHJcbiAgcHJldmVudFJlbW92ZT86IGJvb2xlYW47XHJcblxyXG4gIC8qKiBSZWRlZmluaW5nIHRvIGdldCB0aGUgdHlwaW5nICovXHJcbiAgdmFsdWU6IFRWYWx1ZTtcclxufTtcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtUGlja2VyU2VsZWN0YWJsZUNvbnRleHQ8VD4gZXh0ZW5kcyBUYWJsZVNlbGVjdGFibGVSb3dDb250ZXh0IHtcclxuICAvKiogaWQvdmFsdWUgbWFwIG9mIHRoZSBzZWxlY3RlZCBpdGVtcy4gVXNlZCBmb3Iga2VlcGluZyB0cmFjayBvZiB3aGF0IGlzIHNlbGVjdGVkICovXHJcbiAgcHVibGljIHNlbGVjdGVkSXRlbXNNYXA6IE1hcDxzdHJpbmcsIFBpY2tlckl0ZW08VD4+ID0gbmV3IE1hcCgpO1xyXG5cclxuICAvKipcclxuICAgKiBHaXZlcyBhIHdheSB0byB0ZWxsIHRoZSBwaWNrZXIgY29tcG9uZW50IHRoYXQgdGhlIG1hcCB3YXMgbW9kaWZpZWQgZXh0ZXJuYWxseSBhbmQgdG8gdXBkYXRlXHJcbiAgICogdGhlIGF2YWlsYWJsZS9zZWxlY3RlZCBsaXN0c1xyXG4gICAqL1xyXG4gIHB1YmxpYyBzZWxlY3RlZEl0ZW1zTWFwQ2hhbmdlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkdmFuY2VkUm93Q2xpY2tCZWhhdmlvciBpcyBkaXNhYmxlZCBmb3IgSXRlbVBpY2tlci5cclxuICAgKi9cclxuICBwdWJsaWMgcmVhZG9ubHkgZGlzYWJsZUFkdmFuY2VkUm93Q2xpY2tCZWhhdmlvcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHB1YmxpYyBpc1NlbGVjdGluZ0FsbEl0ZW1zOiBib29sZWFuID0gZmFsc2U7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWMtaXRlbS1waWNrZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pdGVtLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaXRlbS1waWNrZXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSXRlbVBpY2tlckNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG5cclxuICAvKiogSWRlbnRpZmllciBmb3IgdGhlIGNvbXBvbmVudC4gVGhpcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBiZWdpbm5pbmcgb2YgYWxsIGludGVybmFsIGFjdGlvbiBlbGVtZW50cyAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpZD86IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogVGl0bGUgZGlzcGxheWVkIGFib3ZlIHRoZSBhdmFpbGFibGUgaXRlbXMgdGFibGUgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgYXZhaWxhYmxlVGl0bGU6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogVGl0bGUgZGlzcGxheWVkIGFib3ZlIHRoZSBzZWxlY3RlZCBpdGVtcyBsaXN0ICovXHJcbiAgQElucHV0KCkgcHVibGljIHNlbGVjdGVkVGl0bGU6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogVGhlIHR5cGUgb2YgaXRlbSBiZWluZyBzZWxlY3RlZC4gRXguIE1ldGVycywgQWRkcmVzc2VzICovXHJcbiAgQElucHV0KCkgcHVibGljIGl0ZW1OYW1lOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIEZvcm0gZ3JvdXAgdGhhdCBpcyBnaXZlbiB0byB0aGUgaW50ZXJuYWwgU2VhcmNoYWJsZSBUYWJsZSAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBmb3JtTW9kZWw/OiBVbnR5cGVkRm9ybUdyb3VwO1xyXG5cclxuICAvKiogVGVtcGxhdGUgZm9yIHdoZW4gYSBjdXN0b20gaGVhZGVyIGlzIG5lZWRlZCBmb3IgdGhlIGF2YWlsYWJsZSBpdGVtcyB0YWJsZSAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21BdmFpbGFibGVIZWFkZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8qKiBUZW1wbGF0ZSBmb3Igd2hlbiBhIGN1c3RvbSBhdmFpbGFibGUgaXRlbSBpcyBuZWVkZWQuIERlZmF1bHQgdGVtcGxhdGUgaXMgYSBsYWJlbCBvbmx5ICovXHJcbiAgQElucHV0KCkgcHVibGljIGN1c3RvbUF2YWlsYWJsZUl0ZW1UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8qKiBUZW1wbGF0ZSBmb3Igd2hlbiBhIGN1c3RvbSBzZWxlY3RlZCBpdGVtIGlzIG5lZWRlZC4gRGVmYXVsdCB0ZW1wbGF0ZSBpcyBhIGxhYmVsIG9ubHkgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tU2VsZWN0ZWRJdGVtVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAvKiogVXNlZCBieSB0aGUgaW50ZXJuYWwgU2VhcmNoYWJsZSBUYWJsZSB0byBrbm93IHdoZW4gdGhlIHBhZ2UgaXMgcmVhZHkgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgcmVhZHk/OiBPYnNlcnZhYmxlPHZvaWQ+O1xyXG5cclxuICAvKiogVXNlZCBieSBTZWFyY2hhYmxlIFRhYmxlIHRvIHJldHJpZXZlIHRoZSBhdmFpbGFibGUgaXRlbXMgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZ2V0SXRlbXM/OiAoc2VhcmNoPzogc3RyaW5nLCBwYWdlQ2hhbmdlSW5mbz86IFBhZ2luZ0luZm8pID0+IE9ic2VydmFibGU8VGFibGVTZWFyY2hSZXN1bHRzPjtcclxuXHJcbiAgLyoqIFVzZWQgdG8gbWFpbnRhaW4gdGhlIGF2YWlsYWJsZSBpdGVtcyBjaGVja2JveCBzZWxlY3Rpb24gYXMgd2VsbCBhcyB0aGUgc2VsZWN0ZWQgaXRlbXMgbGlzdCAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3Rpb25Db250ZXh0ITogSXRlbVBpY2tlclNlbGVjdGFibGVDb250ZXh0PFQ+O1xyXG5cclxuICAvKiogVXNlZCBieSB0aGUgaW50ZXJuYWwgU2VhcmNoYWJsZSBUYWJsZSB3aGVuIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBpdGVtcyB0byBjaG9vc2UgZnJvbSBiYXNlZCBvbiB0aGUgZ2V0SXRlbXMgcmVzdWx0cy4gRG8gbm90IHN1cHBseVxyXG4gICAqICB0byBpbmhlcml0IHRoZSBkZWZhdWx0IG1lc3NhZ2UuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIG5vRGF0YU1lc3NhZ2U6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBVc2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG5vIHNlbGVjdGVkIGl0ZW1zIG1lc3NhZ2UuIElmIHByb3ZpZGVkIHRoaXMgd2lsbCBiZSB1c2VkLCBvdGhlcndpc2UgdGhlIGRlZmF1bHQgbWVzc2FnZSB3aXRoIHRoZSBpdGVtIG5hbWVcclxuICAgKiBpbnRlcnBvbGF0aW9uIHdpbGwgYmUgdXNlZC5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgbm9TZWxlY3RlZEl0ZW1zTWVzc2FnZT86IHN0cmluZztcclxuXHJcbiAgQElucHV0KCkgcHVibGljIHNlbGVjdEFsbEVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgcHVibGljIGFsbFNlbGVjdGVkSXRlbXNNZXNzYWdlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIExpc3Qgb2YgYXZhaWxhYmxlIGl0ZW1zIHRvIHBpY2sgZnJvbSAqL1xyXG4gIHB1YmxpYyBhdmFpbGFibGVJdGVtczogUGlja2VySXRlbVtdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdGVkIGl0ZW1zIGFycmF5LiBDcmVhdGVkIGZyb20gdGhlIHNlbGVjdGVkIGl0ZW1zIG1hcC4gQmluZGluZyB0byB0aGVcclxuICAgKiBtYXAgaXRlcmF0ZSB2YWx1ZXMgY2F1c2VkIGFuZ3VsYXIgXCJleHByZXNzaW9uIGNoYW5nZWRcIiBlcnJvcnMgc28gYWZ0ZXIgYSBtYXBcclxuICAgKiB1cGRhdGUgdGhpcyBnZXRzIHNldCB0byB0aGUgdmFsdWVzXHJcbiAgICovXHJcbiAgcHVibGljIHNlbGVjdGVkSXRlbXM6IFBpY2tlckl0ZW1bXSA9IFtdO1xyXG5cclxuICAvKiogVHJ1ZSBpZiB0aGVyZSBhcmUgc2VsZWN0ZWQgaXRlbXMgYW5kIGF0IGxlYXN0IG9uZSBjYW4gYmUgcmVtb3ZlZCAqL1xyXG4gIHB1YmxpYyBzZWxlY3RlZEl0ZW1zQ2xlYXJhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBUcmFjayBieSB1c2VkIGZvciB0aGUgc2VhcmNoYWJsZSB0YWJsZSByb3dzICovXHJcbiAgcHVibGljIHRyYWNrQnlJbmRleCA9IChpbmRleDogbnVtYmVyKSA9PiBpbmRleDtcclxuXHJcbiAgcHVibGljIHRhYmxlU3RhdHVzOiBPdmVybGF5ID0gbmV3IE92ZXJsYXkoJ3BlbmRpbmcnKTtcclxuXHJcbiAgcHVibGljIG1hc3RlckNoZWNrYm94VGV4dDogc3RyaW5nID0gJyc7XHJcblxyXG4gIHB1YmxpYyBzaG93U2VsZWN0QWxsSXRlbXNMaW5rOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyB0b3RhbENvdW50PzogbnVtYmVyID0gMDtcclxuXHJcbiAgLyoqXHJcbiAgICogVGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IHRoZSBhdmFpbGFibGUgYW5kIHNlbGVjdGVkIGl0ZW1zIGFzIHdlbGwgYXMgdGhlIGF2YWlsYWJsZSBpdGVtIGhlYWRlci5cclxuICAgKiBUaGlzIHdpbGwgYmUgc2V0IHRvIHRoZSBkZWZhdWx0IHRlbXBsYXRlIGlmIGEgY3VzdG9tIGlzIG5vdCBwcm92aWRlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBpbnRlcm5hbGl6ZWRBdmFpbGFibGVIZWFkZXJUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgcHVibGljIGludGVybmFsaXplZEF2YWlsYWJsZUl0ZW1UZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgcHVibGljIGludGVybmFsaXplZFNlbGVjdGVkSXRlbVRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLyoqIERlZmF1bHQgdGVtcGxhdGVzIHVzZWQgaWYgYSBjdXN0b20gdGVtcGxhdGUgaXMgbm90IHByb3ZpZGVkICovXHJcbiAgQFZpZXdDaGlsZCgnZGVmYXVsdEF2YWlsYWJsZUhlYWRlclRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSBkZWZhdWx0QXZhaWxhYmxlSGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ2RlZmF1bHRBdmFpbGFibGVTZWxlY3RBbGxIZWFkZXJUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgZGVmYXVsdEF2YWlsYWJsZVNlbGVjdEFsbEhlYWRlclRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZGVmYXVsdEF2YWlsYWJsZUl0ZW1UZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgZGVmYXVsdEF2YWlsYWJsZUl0ZW1UZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnZGVmYXVsdFNlbGVjdGVkSXRlbVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSBkZWZhdWx0U2VsZWN0ZWRJdGVtVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAvKiogVXNlZCB0byBzaHV0IGRvd24gb3VyIHN1YnNjcmlwdGlvbnMgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZCAqL1xyXG4gIHByaXZhdGUgZGVzdHJveWVkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldHVwUm93Q2hlY2tib3hlc1dhdGNoZXIoKTtcclxuICAgIHRoaXMuc2V0dXBTZWxlY3RlZEl0ZW1zQ2hhbmdlZFdhdGNoZXIoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RBbGxJdGVtcygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dC5pc1NlbGVjdGluZ0FsbEl0ZW1zID0gdHJ1ZTtcclxuICAgIHRoaXMuc2hvd1NlbGVjdEFsbEl0ZW1zTGluayA9IGZhbHNlO1xyXG4gICAgdGhpcy51cGRhdGVNYXN0ZXJDaGVja2JveFRleHQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdhdGNoIGZvciBjaGFuZ2VzIGFuZCByZWFjdCBpZiB0aGUgY3VzdG9tIGl0ZW0gdGVtcGxhdGUgdmFsdWUgY2hhbmdlc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0SW50ZXJuYWxpemVkVGVtcGxhdGVzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3llZC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3llZC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIGJ5IHRoZSBzZWFyY2hhYmxlIHRhYmxlIHdoZW4gYSBuZXcgc2V0IG9mIGl0ZW1zIGFyZSByZXR1cm5lZCBmcm9tIHRoZSBnZXRJdGVtcyBjYWxsLlxyXG4gICAqIElmIGFueSBvZiB0aGUgaXRlbXMgaGF2ZSBgcHJldmVudFJlbW92ZWAgc2V0LCB0aGVpciBpbmRpY2VzIGFyZSBhZGRlZCB0byB0aGUgY29udGV4dC5cclxuICAgKi9cclxuICBwdWJsaWMgb25JdGVtc0NoYW5nZShyZXN1bHRzOiBUYWJsZVNlYXJjaFJlc3VsdHMpIHtcclxuICAgIGxldCBuZXdOb25EZXBlbmRlbnRDaGVja2JveGVzOiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICAgICg8UGlja2VySXRlbVtdPnJlc3VsdHMuaXRlbXMpLmZvckVhY2goKGl0ZW0sIGluZGV4KSAgPT4ge1xyXG4gICAgICAvLyBDaGVjayB0byBzZWUgaWYgYW55IG9mIHRoZSBpdGVtcyBhcmUgbWFya2VkIHRvIGJlIHNlbGVjdGVkIGJ5IGRlZmF1bHQgYW5kIGlmIHNvXHJcbiAgICAgIC8vIGFkZCB0aGVtIHRvIHRoZSBtYXAuXHJcbiAgICAgIGlmIChpdGVtLmRlZmF1bHRTZWxlY3RlZCAmJiAhdGhpcy5zZWxlY3Rpb25Db250ZXh0Py5zZWxlY3RlZEl0ZW1zTWFwLmhhcyhpdGVtLmlkKSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dD8uc2VsZWN0ZWRJdGVtc01hcC5zZXQoaXRlbS5pZCwgaXRlbSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBhbnkgb2YgdGhlIGl0ZW1zIGFyZSBtYXJrZWQgdG8gcHJldmVudCBSZW1vdmFsLCBhbmQgaWYgc29cclxuICAgICAgLy8gYWRkIHRoZW0gdG8gdGhlIG5vbi1kZXBlbmRlbnQgY2hlY2tib3hlcyBhcnJheS4gIFRoaXMgd2lsbCBwcmV2ZW50IHRoZSBtYXN0ZXJcclxuICAgICAgLy8gY2hlY2tib3ggZnJvbSB0b2dnbGluZyB0aGVtLlxyXG4gICAgICBpZiAoaXRlbS5wcmV2ZW50UmVtb3ZlKSB7XHJcbiAgICAgICAgbmV3Tm9uRGVwZW5kZW50Q2hlY2tib3hlcy5wdXNoKGluZGV4KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3Rpb25Db250ZXh0Lm5vbkRlcGVuZGVudENoZWNrYm94ZXMgPSBuZXdOb25EZXBlbmRlbnRDaGVja2JveGVzO1xyXG5cclxuICAgIC8vIFdoZW4gdGhlIHVzZXIgZmlsdGVycyB0aGUgbGlzdCB3ZSBzaG91bGQgcmVzZXQgdGhlIHNlbGVjdCBhbGwgaXRlbXNcclxuICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dC5pc1NlbGVjdGluZ0FsbEl0ZW1zID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5hdmFpbGFibGVJdGVtcyA9ICg8UGlja2VySXRlbVtdPnJlc3VsdHMuaXRlbXMpO1xyXG4gICAgdGhpcy50b3RhbENvdW50ID0gcmVzdWx0cy50b3RhbEl0ZW1zQmVmb3JlUGFnaW5nO1xyXG5cclxuICAgIHRoaXMudXBkYXRlTWFzdGVyQ2hlY2tib3hUZXh0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY2xlYXIgc2VsZWN0aW9uIGxpbmsgYnV0dG9uIGlzIGNsaWNrZWRcclxuICAgKi9cclxuICBwdWJsaWMgb25DbGVhclNlbGVjdGlvbkNsaWNrKCkge1xyXG4gICAgLy8gUmVtb3ZlIHJlbW92YWJsZSBpdGVtcyBmcm9tIG1hcFxyXG4gICAgLy8gVGhpcyBpcyBzYWZlLiAgU2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM1OTQwMjE2L2VzNi1pcy1pdC1kYW5nZXJvdXMtdG8tZGVsZXRlLWVsZW1lbnRzLWZyb20tc2V0LW1hcC1kdXJpbmctc2V0LW1hcC1pdGVyYXRpb25cclxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiB0aGlzLnNlbGVjdGlvbkNvbnRleHQuc2VsZWN0ZWRJdGVtc01hcCkge1xyXG4gICAgICBpZiAoIXZhbC5wcmV2ZW50UmVtb3ZlKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Db250ZXh0LnNlbGVjdGVkSXRlbXNNYXAuZGVsZXRlKGtleSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGlvbkNvbnRleHQucm93Q2hlY2tib3hlcy5jb250cm9scy5mb3JFYWNoKChjb250cm9sLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmKCF0aGlzLmF2YWlsYWJsZUl0ZW1zW2luZGV4XS5wcmV2ZW50UmVtb3ZlKXtcclxuICAgICAgICBjb250cm9sLnNldFZhbHVlKGZhbHNlKVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBBcnJheS5mcm9tKHRoaXMuc2VsZWN0aW9uQ29udGV4dC5zZWxlY3RlZEl0ZW1zTWFwLnZhbHVlcygpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxlZCB3aGVuIHRoZSByZW1vdmUgaXRlbSBidXR0b24gaXMgY2xpY2tlZCBmb3IgYSBzZWxlY3RlZCBpdGVtXHJcbiAgICogQHBhcmFtIHJlbW92ZUl0ZW1cclxuICAgKi9cclxuICBwdWJsaWMgcmVtb3ZlU2VsZWN0ZWRJdGVtKHJlbW92ZUl0ZW06IFBpY2tlckl0ZW0pOiB2b2lkIHtcclxuICAgIGxldCBmb3VuZEluZGV4ID0gdGhpcy5hdmFpbGFibGVJdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSByZW1vdmVJdGVtLmlkKTtcclxuICAgIGlmIChmb3VuZEluZGV4ID4gLTEpIHtcclxuICAgICAgLy8gVXBkYXRlIHRoZSByb3cgY2hlY2tib3ggc2luY2UgdGhlIGl0ZW0gZXhpc3RzIGluIHRoZSBwYWdlIGJlaW5nIHZpZXdlZFxyXG4gICAgICAvLyBUaGUgdmFsdWUgY2hhbmdlIGhhbmRsZXIgZm9yIHJvdyBjaGVja2JveGVzIHdpbGwgdXBkYXRlIHRoZSBtYXAvc2VsZWN0ZWQgaXRlbXNcclxuICAgICAgdGhpcy5zZWxlY3Rpb25Db250ZXh0LnJvd0NoZWNrYm94ZXMuYXQoZm91bmRJbmRleCkuc2V0VmFsdWUoZmFsc2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gVGhlIGl0ZW0gYmVpbmcgcmVtb3ZlZCBpcyBub3Qgb24gdGhlIGN1cnJlbnQgcGFnZSBzbyBqdXN0IHVwZGF0ZSB0aGVcclxuICAgICAgLy8gbWFwL3NlbGVjdGVkIGl0ZW1zXHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dC5zZWxlY3RlZEl0ZW1zTWFwLmRlbGV0ZShyZW1vdmVJdGVtLmlkKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGlvbkNvbnRleHQuc2VsZWN0ZWRJdGVtc01hcC52YWx1ZXMoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXYXRjaCBmb3IgY2hhbmdlcyB0byB0aGUgcm93IGNoZWNrYm94ZXMgZm9ybSBhcnJheSBhbmQgdXBkYXRlIHRoZSBzZWxlY3RlZCBpdGVtc1xyXG4gICAqIGxpc3RcclxuICAgKi9cclxuICBwcml2YXRlIHNldHVwUm93Q2hlY2tib3hlc1dhdGNoZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkNvbnRleHQ/LnJvd0NoZWNrYm94ZXMudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgIC8vIERlYm91bmNlIDEwIGlzIHNpbXBseSB0byBub3Qgc3BhbSB0aGUgY2hhbmdlIGhhbmRsZXIgb24gbG9hZC9wYWdlIGNoYW5nZVxyXG4gICAgICAvLyBPdGhlcndpc2UgdGhpcyB3aWxsIGdldCBjYWxsZWQgZXZlcnkgdGltZSBhIG5ldyByb3cgaXMgYWRkZWQgdG8gdGhlIHRhYmxlXHJcbiAgICAgIGRlYm91bmNlVGltZSgxMCksXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZClcclxuICAgICkuc3Vic2NyaWJlKChyb3dWYWx1ZXM6IGJvb2xlYW5bXSkgPT4ge1xyXG4gICAgICByb3dWYWx1ZXMuZm9yRWFjaCgoc2VsZWN0ZWQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgbGV0IGF2YWlsYWJsZUl0ZW0gPSB0aGlzLmF2YWlsYWJsZUl0ZW1zW2luZGV4XTtcclxuXHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZCAmJiB0aGlzLnNlbGVjdGlvbkNvbnRleHQ/LnNlbGVjdGVkSXRlbXNNYXAuaGFzKGF2YWlsYWJsZUl0ZW0uaWQpKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNvbnRleHQ/LnNlbGVjdGVkSXRlbXNNYXAuZGVsZXRlKGF2YWlsYWJsZUl0ZW0uaWQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWQgJiYgIXRoaXMuc2VsZWN0aW9uQ29udGV4dD8uc2VsZWN0ZWRJdGVtc01hcC5oYXMoYXZhaWxhYmxlSXRlbS5pZCkpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dD8uc2VsZWN0ZWRJdGVtc01hcC5zZXQoYXZhaWxhYmxlSXRlbS5pZCwgYXZhaWxhYmxlSXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3Rpb25Db250ZXh0Py5zZWxlY3RlZEl0ZW1zTWFwLnZhbHVlcygpKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2xlYXJhYmxlID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDAgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLnNvbWUoaSA9PiAhaS5wcmV2ZW50UmVtb3ZlKTtcclxuICAgICAgdGhpcy51cGRhdGVNYXN0ZXJDaGVja2JveFRleHQoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dC5zZWxlY3RBbGxDaGVja2JveC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoMTApLCB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgY29uc3Qgb25lUGFnZU9mRGF0YSA9IHRoaXMuYXZhaWxhYmxlSXRlbXMubGVuZ3RoID09PSB0aGlzLnRvdGFsQ291bnQ7XHJcbiAgICAgIGlmIChjaGVja2VkICYmICFvbmVQYWdlT2ZEYXRhKSB7XHJcbiAgICAgICAgdGhpcy5zaG93U2VsZWN0QWxsSXRlbXNMaW5rID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmICghY2hlY2tlZCkge1xyXG4gICAgICAgIHRoaXMuc2hvd1NlbGVjdEFsbEl0ZW1zTGluayA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dC5pc1NlbGVjdGluZ0FsbEl0ZW1zID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVNYXN0ZXJDaGVja2JveFRleHQoKSB7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0aW9uQ29udGV4dC5pc1NlbGVjdGluZ0FsbEl0ZW1zKSB7XHJcbiAgICAgIGNvbnN0IGNoZWNrZWRDb3VudCA9IHRoaXMuc2VsZWN0aW9uQ29udGV4dC5yb3dDaGVja2JveGVzLmNvbnRyb2xzLm1hcChjID0+IGMudmFsdWUpLmZpbHRlcih2ID0+IHYpLmxlbmd0aDtcclxuICAgICAgaWYgKGNoZWNrZWRDb3VudCA+IDApIHtcclxuICAgICAgICB0aGlzLm1hc3RlckNoZWNrYm94VGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdDb3VudFNlbGVjdGVkX1RDJywgeyBjb3VudDogY2hlY2tlZENvdW50IH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubWFzdGVyQ2hlY2tib3hUZXh0ID0gJyc7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWFzdGVyQ2hlY2tib3hUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0FsbEl0ZW1QaWNrZXJJdGVtc1NlbGVjdGVkX1NDJywgeyBjb3VudDogdGhpcy50b3RhbENvdW50LCBpdGVtTmFtZTogdGhpcy5pdGVtTmFtZSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdhdGNoIHRvIGJlIHRvbGQgaWYgY2hhbmdlcyB0byB0aGUgbWFwIHdlcmUgbWFkZSBvdXRzaWRlIG9mIHRoZSBjb21wb25lbnQgYW5kIGlmIHNvIHVwZGF0ZVxyXG4gICAqIHRoZSBhcnJheSBkaXNwbGF5ZWQgaW4gdGhlIHNlbGVjdGVkIGxpc3QgYW5kIHNlbGVjdCBjaGVja2JveGVzIGZvciB2aXNpYmxlIGF2YWlsYWJsZSBpdGVtc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0dXBTZWxlY3RlZEl0ZW1zQ2hhbmdlZFdhdGNoZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkNvbnRleHQuc2VsZWN0ZWRJdGVtc01hcENoYW5nZWQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKVxyXG4gICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25Db250ZXh0KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGlvbkNvbnRleHQ/LnNlbGVjdGVkSXRlbXNNYXAudmFsdWVzKCkpO1xyXG5cclxuICAgICAgICB0aGlzLmF2YWlsYWJsZUl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Db250ZXh0LnNlbGVjdGVkSXRlbXNNYXAuaGFzKGl0ZW0uaWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dC5yb3dDaGVja2JveGVzLmF0KGluZGV4KS5zZXRWYWx1ZSh0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEludGVybmFsaXplZFRlbXBsYXRlcygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmN1c3RvbUF2YWlsYWJsZUhlYWRlclRlbXBsYXRlKSB7XHJcbiAgICAgIHRoaXMuaW50ZXJuYWxpemVkQXZhaWxhYmxlSGVhZGVyVGVtcGxhdGUgPSB0aGlzLmN1c3RvbUF2YWlsYWJsZUhlYWRlclRlbXBsYXRlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdEFsbEVuYWJsZWQpIHtcclxuICAgICAgdGhpcy5pbnRlcm5hbGl6ZWRBdmFpbGFibGVIZWFkZXJUZW1wbGF0ZSA9IHRoaXMuZGVmYXVsdEF2YWlsYWJsZVNlbGVjdEFsbEhlYWRlclRlbXBsYXRlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbnRlcm5hbGl6ZWRBdmFpbGFibGVIZWFkZXJUZW1wbGF0ZSA9IHRoaXMuZGVmYXVsdEF2YWlsYWJsZUhlYWRlclRlbXBsYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmN1c3RvbUF2YWlsYWJsZUl0ZW1UZW1wbGF0ZSkge1xyXG4gICAgICB0aGlzLmludGVybmFsaXplZEF2YWlsYWJsZUl0ZW1UZW1wbGF0ZSA9IHRoaXMuY3VzdG9tQXZhaWxhYmxlSXRlbVRlbXBsYXRlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbnRlcm5hbGl6ZWRBdmFpbGFibGVJdGVtVGVtcGxhdGUgPSB0aGlzLmRlZmF1bHRBdmFpbGFibGVJdGVtVGVtcGxhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ZWRJdGVtVGVtcGxhdGUpIHtcclxuICAgICAgdGhpcy5pbnRlcm5hbGl6ZWRTZWxlY3RlZEl0ZW1UZW1wbGF0ZSA9IHRoaXMuY3VzdG9tU2VsZWN0ZWRJdGVtVGVtcGxhdGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmludGVybmFsaXplZFNlbGVjdGVkSXRlbVRlbXBsYXRlID0gdGhpcy5kZWZhdWx0U2VsZWN0ZWRJdGVtVGVtcGxhdGU7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgZWNPdmVybGF5XHJcbiAgICAgY2xhc3M9XCJkLWZsZXggZmxleC1ncm93IGNhcmRcIlxyXG4gICAgIFtzdGF0dXNdPVwidGFibGVTdGF0dXM/LnN0YXR1c1wiXHJcbiAgICAgW21lc3NhZ2VdPVwidGFibGVTdGF0dXM/Lm1lc3NhZ2VcIlxyXG4gICAgIFtkaXNwbGF5QXNNYXNrXT1cInRydWVcIj5cclxuICAgIDxlYy1zZWFyY2hhYmxlLXRhYmxlIGlkPVwie3tpZH19X3NlYXJjaGFibGVUYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXgtZ3Jvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsbFBhcmVudEhlaWdodF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlSGVhZGVyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVTZWFyY2hDb250cm9sXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3JlbW92ZUNhcmRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcGFnZWFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcGFnZVNpemVdPVwiNTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW29iamVjdFR5cGVdPVwiaXRlbU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Nb2RlbF09XCJmb3JtTW9kZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWR5XT1cInJlYWR5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtnZXRJdGVtc109XCJnZXRJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtub0RhdGFNZXNzYWdlXT1cIm5vRGF0YU1lc3NhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvbkNvbnRleHRdPVwic2VsZWN0aW9uQ29udGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbc3RhdHVzXT1cInRhYmxlU3RhdHVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtc0NoYW5nZSk9XCJvbkl0ZW1zQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLi0tZWMtc2VhcmNoYWJsZS10YWJsZS1mbGV4LXByb3BlcnRpZXNdPVwiKGF2YWlsYWJsZUl0ZW1zLmxlbmd0aCB8fCB0YWJsZVN0YXR1cy5zdGF0dXMgPT09ICdwZW5kaW5nJyB8fCB0YWJsZVN0YXR1cy5zdGF0dXMgPT09ICdlcnJvcicgKSA/ICcxIDEgYXV0bycgOiAnMCAxIGF1dG8nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS4tLWVjLXNlYXJjaGFibGUtdGFibGUtaGVpZ2h0LWNhcHRpb24tZm9vdGVyXT1cIidjYWxjKDIuNXJlbSArIDFweCknXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJsZUxheW91dEZpeGVkXT1cInRydWVcIj5cclxuICAgICAgICA8aGVhZGVyICpuZ0lmPVwiY3VzdG9tQXZhaWxhYmxlSGVhZGVyVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjYXJkLWhlYWRlciBmbGV4LXNocmlua1wiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogM3JlbTtcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZVwiPnt7YXZhaWxhYmxlVGl0bGUgfCB0cmFuc2xhdGV9fTwvaDM+XHJcbiAgICAgICAgPC9oZWFkZXI+XHJcbiAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICA8dHIgZWNUYWJsZVNlbGVjdGFibGVSb3dcclxuICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25Db250ZXh0XT1cInNlbGVjdGlvbkNvbnRleHRcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJib3JkZXItYm90dG9tLTBcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnRlcm5hbGl6ZWRBdmFpbGFibGVIZWFkZXJUZW1wbGF0ZTtcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RoZWFkPlxyXG5cclxuICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYXZhaWxhYmxlSXRlbXM7IGluZGV4IGFzIHJvd0luZGV4OyB0cmFja0J5OiB0cmFja0J5SW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDx0ciBlY1RhYmxlU2VsZWN0YWJsZVJvd1xyXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25Db250ZXh0XT1cInNlbGVjdGlvbkNvbnRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyb3dJbmRleF09XCJyb3dJbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2lzQ2hlY2tib3hEaXNhYmxlZF09XCJpdGVtLnByZXZlbnRSZW1vdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpc1NlbGVjdGVkXT1cInNlbGVjdGlvbkNvbnRleHQ/LnNlbGVjdGVkSXRlbXNNYXAuaGFzKGl0ZW0uaWQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuLS1lYy10YWJsZS1zZWxlY3RhYmxlLXJvdy12ZXJ0aWNhbC1hbGlnbi1jaGVja2JveC10ZF09XCInbWlkZGxlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnRlcm5hbGl6ZWRBdmFpbGFibGVJdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGl0ZW19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3Rib2R5PlxyXG4gICAgPC9lYy1zZWFyY2hhYmxlLXRhYmxlPlxyXG5cclxuICAgIDxzZWN0aW9uIGlkPVwie3tpZH19X3NlbGVjdGVkSXRlbXNcIiBjbGFzcz1cInNlbGVjdGVkLWl0ZW1zIGZsZXgtZ3JvdyBkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICA8ZWMtdGFibGUgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGZsZXgtZ3JvdyBpcy1maXhlZFwiPlxyXG4gICAgICAgICAgICA8Y29sZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICA8Y29sPlxyXG4gICAgICAgICAgICAgICAgPGNvbCBzdHlsZT1cIndpZHRoOiAycmVtO1wiPlxyXG4gICAgICAgICAgICA8L2NvbGdyb3VwPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dHIgc3R5bGU9XCJoZWlnaHQ6IDNyZW07XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIGNvbHNwYW49XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLTIgYm9yZGVyLWJvdHRvbS0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtaGVhZGluZy0yIGZvbnQtY29sb3ItcHJpbWFyeSBmbGV4LWdyb3cgdGV4dC10cnVuY2F0ZVwiPnt7c2VsZWN0ZWRUaXRsZSB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJzZWxlY3RlZEl0ZW1zQ2xlYXJhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwie3tpZH19X2NsZWFyU2VsZWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGwtMiBtbC1hdXRvIGZvbnQtc2l6ZS1iYXNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xlYXJTZWxlY3Rpb25DbGljaygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZT5DbGVhclNlbGVjdGlvbl9UQzwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcblxyXG4gICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uQ29udGV4dC5pc1NlbGVjdGluZ0FsbEl0ZW1zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjJcIiB0cmFuc2xhdGU+e3thbGxTZWxlY3RlZEl0ZW1zTWVzc2FnZX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkSXRlbXMubGVuZ3RoICYmICFzZWxlY3Rpb25Db250ZXh0LmlzU2VsZWN0aW5nQWxsSXRlbXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc2VsZWN0ZWRJdGVtczsgbGFzdCBhcyBpc0xhc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cInNlbGVjdGVkX3Jvd197e2l0ZW0uaWR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItYm90dG9tXT1cIiFpc0xhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW50ZXJuYWxpemVkU2VsZWN0ZWRJdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGl0ZW19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFjdGlvbnMtY29sIHRleHQtcmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVjLWJ1dHRvbiBpZD1cInt7aWR9fV9yZW1vdmVTZWxlY3RlZF97e2l0ZW0uaWR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWl0ZW0ucHJldmVudFJlbW92ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJpY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cImVjLWljb24gaWNvbi1jYW5jZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJyZW1vdmVTZWxlY3RlZEl0ZW0oaXRlbSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZWMtYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDx0ciAqbmdJZj1cIiFzZWxlY3RlZEl0ZW1zLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cIiFub1NlbGVjdGVkSXRlbXNNZXNzYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sc3Bhbj1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtMiBuby1kYXRhLW1lc3NhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RyYW5zbGF0ZVBhcmFtc109XCJ7aXRlbU5hbWU6IGl0ZW1OYW1lIHwgdHJhbnNsYXRlfVwiPkl0ZW1QaWNrZXJOb0l0ZW1zU2VsZWN0ZWRfU0M8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cIm5vU2VsZWN0ZWRJdGVtc01lc3NhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xzcGFuPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC0yIG5vLWRhdGEtbWVzc2FnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZT57e25vU2VsZWN0ZWRJdGVtc01lc3NhZ2V9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvZWMtdGFibGU+XHJcblxyXG4gICAgICAgIDxmb290ZXIgaWQ9XCJzZWxlY3RlZEl0ZW1zRm9vdGVyXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRJdGVtcy5sZW5ndGggJiYgIXNlbGVjdGlvbkNvbnRleHQuaXNTZWxlY3RpbmdBbGxJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBmbGV4LXNocmluayBweC0yIGJvcmRlci10b3AgYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiBjYWxjKDIuNXJlbSArIDFweCk7XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtYXV0byB0ZXh0LWNhcHRpb24tMSBmb250LWNvbG9yLWhpbnRcIj5cclxuICAgICAgICAgICAgICAgIHt7c2VsZWN0ZWRJdGVtcy5sZW5ndGh9fSB7e2l0ZW1OYW1lIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZm9vdGVyPlxyXG4gICAgPC9zZWN0aW9uPlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEF2YWlsYWJsZUhlYWRlclRlbXBsYXRlPlxyXG4gICAgPHRoIGNsYXNzPVwidGV4dC1oZWFkaW5nLTIgZm9udC1jb2xvci1wcmltYXJ5IGJvcmRlci1ib3R0b20tMFwiPnt7YXZhaWxhYmxlVGl0bGUgfCB0cmFuc2xhdGV9fTwvdGg+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2RlZmF1bHRBdmFpbGFibGVTZWxlY3RBbGxIZWFkZXJUZW1wbGF0ZT5cclxuICAgIDx0aCBjbGFzcz1cInRleHQtaGVhZGluZy0yIGZvbnQtY29sb3ItcHJpbWFyeSBib3JkZXItYm90dG9tLTBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhbWFzdGVyQ2hlY2tib3hUZXh0XCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+e3thdmFpbGFibGVUaXRsZSB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm1hc3RlckNoZWNrYm94VGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgIGlkPVwic2VsZWN0ZWRDb3VudFwiPnt7bWFzdGVyQ2hlY2tib3hUZXh0fX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93U2VsZWN0QWxsSXRlbXNMaW5rXCJcclxuICAgICAgICAgICAgICAgICAgICBlY0xpbmtCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICBpZD1cInNlbGVjdEFsbEl0ZW1zTGlua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEFsbEl0ZW1zKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtMlwiPlxyXG4gICAgICAgICAgICAgICAge3sgKCdTZWxlY3RBbGxJdGVtUGlja2VySXRlbXNfVEMnKSB8IHRyYW5zbGF0ZTp7IGNvdW50OiB0b3RhbENvdW50LCBpdGVtTmFtZTogaXRlbU5hbWUgfSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvdGg+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2RlZmF1bHRBdmFpbGFibGVJdGVtVGVtcGxhdGVcclxuICAgICAgICAgICAgIGxldC1pdGVtPlxyXG4gICAgPHRkPnt7aXRlbS5sYWJlbH19PC90ZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdFNlbGVjdGVkSXRlbVRlbXBsYXRlXHJcbiAgICAgICAgICAgICBsZXQtaXRlbT5cclxuICAgIHt7aXRlbS5sYWJlbH19XHJcbjwvbmctdGVtcGxhdGU+Il19
|
285
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2l0ZW0tcGlja2VyL2l0ZW0tcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9pdGVtLXBpY2tlci9pdGVtLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBNkMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZHLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUl6RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbURBQW1ELENBQUM7Ozs7Ozs7Ozs7QUFlM0UsQ0FBQztBQUVGLE1BQU0sT0FBTywyQkFBK0IsU0FBUSx5QkFBeUI7SUFBN0U7O1FBQ0UscUZBQXFGO1FBQzlFLHFCQUFnQixHQUErQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRWhFOzs7V0FHRztRQUNJLDRCQUF1QixHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRTlEOztXQUVHO1FBQ2Esb0NBQStCLEdBQVksSUFBSSxDQUFDO1FBRXpELHdCQUFtQixHQUFZLEtBQUssQ0FBQztJQUM5QyxDQUFDO0NBQUE7QUFPRCxNQUFNLE9BQU8sbUJBQW1CO0lBNEY5QixZQUNVLGdCQUFrQztRQUFsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBM0Y1Qyx3R0FBd0c7UUFDeEYsT0FBRSxHQUFZLEVBQUUsQ0FBQztRQUVqQyxzREFB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O3NCQUFwQixLQUFLO2dCQUdVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBR1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUtVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBTVUsc0JBQXNCO3NCQUFyQyxLQUFLO2dCQUVVLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFFVSx1QkFBdUI7c0JBQXRDLEtBQUs7Z0JBbUNpRSw4QkFBOEI7c0JBQXBHLFNBQVM7dUJBQUMsZ0NBQWdDLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNtQix1Q0FBdUM7c0JBQXRILFNBQVM7dUJBQUMseUNBQXlDLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUVELDRCQUE0QjtzQkFBaEcsU0FBUzt1QkFBQyw4QkFBOEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ1MsMkJBQTJCO3NCQUE5RixTQUFTO3VCQUFDLDZCQUE2QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IFRhYmxlU2VhcmNoUmVzdWx0cyB9IGZyb20gJy4uLy4uL2Rpc3BsYXkvdGFibGUvc2VhcmNoYWJsZS10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQYWdpbmdJbmZvIH0gZnJvbSAnLi4vLi4vZGlzcGxheS90YWJsZS90YWJsZS1wYWdpbmF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRhYmxlU2VsZWN0YWJsZVJvd0NvbnRleHQgfSBmcm9tICcuLi8uLi9kaXNwbGF5L3RhYmxlL3RhYmxlLXNlbGVjdGFibGUtcm93LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICcuLi8uLi9kaXNwbGF5L3ZpZXctb3ZlcmxheS92aWV3LW92ZXJsYXkuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICcuLi9tZW51L21lbnUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQaWNrZXJJdGVtPFRWYWx1ZSA9IGFueSwgU0l0ZW1zID0gYW55PiBleHRlbmRzIE1lbnVJdGVtIHtcclxuICBpZDogc3RyaW5nO1xyXG5cclxuICAvKiogV2hlbiBzZXQgdG8gdHJ1ZSB0aGUgYXZhaWxhYmxlIGl0ZW0gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoZSBzZWxlY3RlZCBsaXN0ICovXHJcbiAgZGVmYXVsdFNlbGVjdGVkPzogYm9vbGVhbjtcclxuXHJcbiAgLyoqIFdoZW4gc2V0IHRvIHRydWUsIHRoZSBpdGVtIHdpbGwgbm90IGJlIGFsbG93ZWQgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZWxlY3RlZCBsaXN0ICovXHJcbiAgcHJldmVudFJlbW92ZT86IGJvb2xlYW47XHJcblxyXG4gIC8qKiBSZWRlZmluaW5nIHRvIGdldCB0aGUgdHlwaW5nICovXHJcbiAgdmFsdWU6IFRWYWx1ZTtcclxufTtcclxuXHJcbmV4cG9ydCBjbGFzcyBJdGVtUGlja2VyU2VsZWN0YWJsZUNvbnRleHQ8VD4gZXh0ZW5kcyBUYWJsZVNlbGVjdGFibGVSb3dDb250ZXh0IHtcclxuICAvKiogaWQvdmFsdWUgbWFwIG9mIHRoZSBzZWxlY3RlZCBpdGVtcy4gVXNlZCBmb3Iga2VlcGluZyB0cmFjayBvZiB3aGF0IGlzIHNlbGVjdGVkICovXHJcbiAgcHVibGljIHNlbGVjdGVkSXRlbXNNYXA6IE1hcDxzdHJpbmcsIFBpY2tlckl0ZW08VD4+ID0gbmV3IE1hcCgpO1xyXG5cclxuICAvKipcclxuICAgKiBHaXZlcyBhIHdheSB0byB0ZWxsIHRoZSBwaWNrZXIgY29tcG9uZW50IHRoYXQgdGhlIG1hcCB3YXMgbW9kaWZpZWQgZXh0ZXJuYWxseSBhbmQgdG8gdXBkYXRlXHJcbiAgICogdGhlIGF2YWlsYWJsZS9zZWxlY3RlZCBsaXN0c1xyXG4gICAqL1xyXG4gIHB1YmxpYyBzZWxlY3RlZEl0ZW1zTWFwQ2hhbmdlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkdmFuY2VkUm93Q2xpY2tCZWhhdmlvciBpcyBkaXNhYmxlZCBmb3IgSXRlbVBpY2tlci5cclxuICAgKi9cclxuICBwdWJsaWMgcmVhZG9ubHkgZGlzYWJsZUFkdmFuY2VkUm93Q2xpY2tCZWhhdmlvcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHB1YmxpYyBpc1NlbGVjdGluZ0FsbEl0ZW1zOiBib29sZWFuID0gZmFsc2U7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWMtaXRlbS1waWNrZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pdGVtLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaXRlbS1waWNrZXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSXRlbVBpY2tlckNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG5cclxuICAvKiogSWRlbnRpZmllciBmb3IgdGhlIGNvbXBvbmVudC4gVGhpcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBiZWdpbm5pbmcgb2YgYWxsIGludGVybmFsIGFjdGlvbiBlbGVtZW50cyAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpZD86IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogVGl0bGUgZGlzcGxheWVkIGFib3ZlIHRoZSBhdmFpbGFibGUgaXRlbXMgdGFibGUgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgYXZhaWxhYmxlVGl0bGU6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogVGl0bGUgZGlzcGxheWVkIGFib3ZlIHRoZSBzZWxlY3RlZCBpdGVtcyBsaXN0ICovXHJcbiAgQElucHV0KCkgcHVibGljIHNlbGVjdGVkVGl0bGU6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogVGhlIHR5cGUgb2YgaXRlbSBiZWluZyBzZWxlY3RlZC4gRXguIE1ldGVycywgQWRkcmVzc2VzICovXHJcbiAgQElucHV0KCkgcHVibGljIGl0ZW1OYW1lOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIEZvcm0gZ3JvdXAgdGhhdCBpcyBnaXZlbiB0byB0aGUgaW50ZXJuYWwgU2VhcmNoYWJsZSBUYWJsZSAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBmb3JtTW9kZWw/OiBVbnR5cGVkRm9ybUdyb3VwO1xyXG5cclxuICAvKiogVGVtcGxhdGUgZm9yIHdoZW4gYSBjdXN0b20gaGVhZGVyIGlzIG5lZWRlZCBmb3IgdGhlIGF2YWlsYWJsZSBpdGVtcyB0YWJsZSAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21BdmFpbGFibGVIZWFkZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8qKiBUZW1wbGF0ZSBmb3Igd2hlbiBhIGN1c3RvbSBhdmFpbGFibGUgaXRlbSBpcyBuZWVkZWQuIERlZmF1bHQgdGVtcGxhdGUgaXMgYSBsYWJlbCBvbmx5ICovXHJcbiAgQElucHV0KCkgcHVibGljIGN1c3RvbUF2YWlsYWJsZUl0ZW1UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8qKiBUZW1wbGF0ZSBmb3Igd2hlbiBhIGN1c3RvbSBzZWxlY3RlZCBpdGVtIGlzIG5lZWRlZC4gRGVmYXVsdCB0ZW1wbGF0ZSBpcyBhIGxhYmVsIG9ubHkgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tU2VsZWN0ZWRJdGVtVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAvKiogVXNlZCBieSB0aGUgaW50ZXJuYWwgU2VhcmNoYWJsZSBUYWJsZSB0byBrbm93IHdoZW4gdGhlIHBhZ2UgaXMgcmVhZHkgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgcmVhZHk/OiBPYnNlcnZhYmxlPHZvaWQ+O1xyXG5cclxuICAvKiogVXNlZCBieSBTZWFyY2hhYmxlIFRhYmxlIHRvIHJldHJpZXZlIHRoZSBhdmFpbGFibGUgaXRlbXMgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZ2V0SXRlbXM/OiAoc2VhcmNoPzogc3RyaW5nLCBwYWdlQ2hhbmdlSW5mbz86IFBhZ2luZ0luZm8pID0+IE9ic2VydmFibGU8VGFibGVTZWFyY2hSZXN1bHRzPjtcclxuXHJcbiAgLyoqIFVzZWQgdG8gbWFpbnRhaW4gdGhlIGF2YWlsYWJsZSBpdGVtcyBjaGVja2JveCBzZWxlY3Rpb24gYXMgd2VsbCBhcyB0aGUgc2VsZWN0ZWQgaXRlbXMgbGlzdCAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3Rpb25Db250ZXh0ITogSXRlbVBpY2tlclNlbGVjdGFibGVDb250ZXh0PFQ+O1xyXG5cclxuICAvKiogVXNlZCBieSB0aGUgaW50ZXJuYWwgU2VhcmNoYWJsZSBUYWJsZSB3aGVuIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBpdGVtcyB0byBjaG9vc2UgZnJvbSBiYXNlZCBvbiB0aGUgZ2V0SXRlbXMgcmVzdWx0cy4gRG8gbm90IHN1cHBseVxyXG4gICAqICB0byBpbmhlcml0IHRoZSBkZWZhdWx0IG1lc3NhZ2UuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIG5vRGF0YU1lc3NhZ2U6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBVc2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG5vIHNlbGVjdGVkIGl0ZW1zIG1lc3NhZ2UuIElmIHByb3ZpZGVkIHRoaXMgd2lsbCBiZSB1c2VkLCBvdGhlcndpc2UgdGhlIGRlZmF1bHQgbWVzc2FnZSB3aXRoIHRoZSBpdGVtIG5hbWVcclxuICAgKiBpbnRlcnBvbGF0aW9uIHdpbGwgYmUgdXNlZC5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgbm9TZWxlY3RlZEl0ZW1zTWVzc2FnZT86IHN0cmluZztcclxuXHJcbiAgQElucHV0KCkgcHVibGljIHNlbGVjdEFsbEVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgcHVibGljIGFsbFNlbGVjdGVkSXRlbXNNZXNzYWdlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIExpc3Qgb2YgYXZhaWxhYmxlIGl0ZW1zIHRvIHBpY2sgZnJvbSAqL1xyXG4gIHB1YmxpYyBhdmFpbGFibGVJdGVtczogUGlja2VySXRlbVtdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdGVkIGl0ZW1zIGFycmF5LiBDcmVhdGVkIGZyb20gdGhlIHNlbGVjdGVkIGl0ZW1zIG1hcC4gQmluZGluZyB0byB0aGVcclxuICAgKiBtYXAgaXRlcmF0ZSB2YWx1ZXMgY2F1c2VkIGFuZ3VsYXIgXCJleHByZXNzaW9uIGNoYW5nZWRcIiBlcnJvcnMgc28gYWZ0ZXIgYSBtYXBcclxuICAgKiB1cGRhdGUgdGhpcyBnZXRzIHNldCB0byB0aGUgdmFsdWVzXHJcbiAgICovXHJcbiAgcHVibGljIHNlbGVjdGVkSXRlbXM6IFBpY2tlckl0ZW1bXSA9IFtdO1xyXG5cclxuICAvKiogVHJ1ZSBpZiB0aGVyZSBhcmUgc2VsZWN0ZWQgaXRlbXMgYW5kIGF0IGxlYXN0IG9uZSBjYW4gYmUgcmVtb3ZlZCAqL1xyXG4gIHB1YmxpYyBzZWxlY3RlZEl0ZW1zQ2xlYXJhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBUcmFjayBieSB1c2VkIGZvciB0aGUgc2VhcmNoYWJsZSB0YWJsZSByb3dzICovXHJcbiAgcHVibGljIHRyYWNrQnlJbmRleCA9IChpbmRleDogbnVtYmVyKSA9PiBpbmRleDtcclxuXHJcbiAgcHVibGljIHRhYmxlU3RhdHVzOiBPdmVybGF5ID0gbmV3IE92ZXJsYXkoJ3BlbmRpbmcnKTtcclxuXHJcbiAgcHVibGljIG1hc3RlckNoZWNrYm94VGV4dDogc3RyaW5nID0gJyc7XHJcblxyXG4gIHB1YmxpYyBzaG93U2VsZWN0QWxsSXRlbXNMaW5rOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyB0b3RhbENvdW50PzogbnVtYmVyID0gMDtcclxuXHJcbiAgLyoqXHJcbiAgICogVGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IHRoZSBhdmFpbGFibGUgYW5kIHNlbGVjdGVkIGl0ZW1zIGFzIHdlbGwgYXMgdGhlIGF2YWlsYWJsZSBpdGVtIGhlYWRlci5cclxuICAgKiBUaGlzIHdpbGwgYmUgc2V0IHRvIHRoZSBkZWZhdWx0IHRlbXBsYXRlIGlmIGEgY3VzdG9tIGlzIG5vdCBwcm92aWRlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBpbnRlcm5hbGl6ZWRBdmFpbGFibGVIZWFkZXJUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgcHVibGljIGludGVybmFsaXplZEF2YWlsYWJsZUl0ZW1UZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgcHVibGljIGludGVybmFsaXplZFNlbGVjdGVkSXRlbVRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLyoqIERlZmF1bHQgdGVtcGxhdGVzIHVzZWQgaWYgYSBjdXN0b20gdGVtcGxhdGUgaXMgbm90IHByb3ZpZGVkICovXHJcbiAgQFZpZXdDaGlsZCgnZGVmYXVsdEF2YWlsYWJsZUhlYWRlclRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSBkZWZhdWx0QXZhaWxhYmxlSGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ2RlZmF1bHRBdmFpbGFibGVTZWxlY3RBbGxIZWFkZXJUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgZGVmYXVsdEF2YWlsYWJsZVNlbGVjdEFsbEhlYWRlclRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZGVmYXVsdEF2YWlsYWJsZUl0ZW1UZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgZGVmYXVsdEF2YWlsYWJsZUl0ZW1UZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnZGVmYXVsdFNlbGVjdGVkSXRlbVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSBkZWZhdWx0U2VsZWN0ZWRJdGVtVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAvKiogVXNlZCB0byBzaHV0IGRvd24gb3VyIHN1YnNjcmlwdGlvbnMgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZCAqL1xyXG4gIHByaXZhdGUgZGVzdHJveWVkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldHVwUm93Q2hlY2tib3hlc1dhdGNoZXIoKTtcclxuICAgIHRoaXMuc2V0dXBTZWxlY3RlZEl0ZW1zQ2hhbmdlZFdhdGNoZXIoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RBbGxJdGVtcygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dC5pc1NlbGVjdGluZ0FsbEl0ZW1zID0gdHJ1ZTtcclxuICAgIHRoaXMuc2hvd1NlbGVjdEFsbEl0ZW1zTGluayA9IGZhbHNlO1xyXG4gICAgdGhpcy51cGRhdGVNYXN0ZXJDaGVja2JveFRleHQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdhdGNoIGZvciBjaGFuZ2VzIGFuZCByZWFjdCBpZiB0aGUgY3VzdG9tIGl0ZW0gdGVtcGxhdGUgdmFsdWUgY2hhbmdlc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0SW50ZXJuYWxpemVkVGVtcGxhdGVzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3llZC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3llZC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIGJ5IHRoZSBzZWFyY2hhYmxlIHRhYmxlIHdoZW4gYSBuZXcgc2V0IG9mIGl0ZW1zIGFyZSByZXR1cm5lZCBmcm9tIHRoZSBnZXRJdGVtcyBjYWxsLlxyXG4gICAqIElmIGFueSBvZiB0aGUgaXRlbXMgaGF2ZSBgcHJldmVudFJlbW92ZWAgc2V0LCB0aGVpciBpbmRpY2VzIGFyZSBhZGRlZCB0byB0aGUgY29udGV4dC5cclxuICAgKi9cclxuICBwdWJsaWMgb25JdGVtc0NoYW5nZShyZXN1bHRzOiBUYWJsZVNlYXJjaFJlc3VsdHMpIHtcclxuICAgIGxldCBuZXdOb25EZXBlbmRlbnRDaGVja2JveGVzOiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICAgICg8UGlja2VySXRlbVtdPnJlc3VsdHMuaXRlbXMpLmZvckVhY2goKGl0ZW0sIGluZGV4KSAgPT4ge1xyXG4gICAgICAvLyBDaGVjayB0byBzZWUgaWYgYW55IG9mIHRoZSBpdGVtcyBhcmUgbWFya2VkIHRvIGJlIHNlbGVjdGVkIGJ5IGRlZmF1bHQgYW5kIGlmIHNvXHJcbiAgICAgIC8vIGFkZCB0aGVtIHRvIHRoZSBtYXAuXHJcbiAgICAgIGlmIChpdGVtLmRlZmF1bHRTZWxlY3RlZCAmJiAhdGhpcy5zZWxlY3Rpb25Db250ZXh0Py5zZWxlY3RlZEl0ZW1zTWFwLmhhcyhpdGVtLmlkKSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dD8uc2VsZWN0ZWRJdGVtc01hcC5zZXQoaXRlbS5pZCwgaXRlbSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBhbnkgb2YgdGhlIGl0ZW1zIGFyZSBtYXJrZWQgdG8gcHJldmVudCBSZW1vdmFsLCBhbmQgaWYgc29cclxuICAgICAgLy8gYWRkIHRoZW0gdG8gdGhlIG5vbi1kZXBlbmRlbnQgY2hlY2tib3hlcyBhcnJheS4gIFRoaXMgd2lsbCBwcmV2ZW50IHRoZSBtYXN0ZXJcclxuICAgICAgLy8gY2hlY2tib3ggZnJvbSB0b2dnbGluZyB0aGVtLlxyXG4gICAgICBpZiAoaXRlbS5wcmV2ZW50UmVtb3ZlKSB7XHJcbiAgICAgICAgbmV3Tm9uRGVwZW5kZW50Q2hlY2tib3hlcy5wdXNoKGluZGV4KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3Rpb25Db250ZXh0Lm5vbkRlcGVuZGVudENoZWNrYm94ZXMgPSBuZXdOb25EZXBlbmRlbnRDaGVja2JveGVzO1xyXG5cclxuICAgIC8vIFdoZW4gdGhlIHVzZXIgZmlsdGVycyB0aGUgbGlzdCB3ZSBzaG91bGQgcmVzZXQgdGhlIHNlbGVjdCBhbGwgaXRlbXNcclxuICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dC5pc1NlbGVjdGluZ0FsbEl0ZW1zID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5hdmFpbGFibGVJdGVtcyA9ICg8UGlja2VySXRlbVtdPnJlc3VsdHMuaXRlbXMpO1xyXG4gICAgdGhpcy50b3RhbENvdW50ID0gcmVzdWx0cy50b3RhbEl0ZW1zQmVmb3JlUGFnaW5nO1xyXG5cclxuICAgIHRoaXMudXBkYXRlTWFzdGVyQ2hlY2tib3hUZXh0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY2xlYXIgc2VsZWN0aW9uIGxpbmsgYnV0dG9uIGlzIGNsaWNrZWRcclxuICAgKi9cclxuICBwdWJsaWMgb25DbGVhclNlbGVjdGlvbkNsaWNrKCkge1xyXG4gICAgLy8gUmVtb3ZlIHJlbW92YWJsZSBpdGVtcyBmcm9tIG1hcFxyXG4gICAgLy8gVGhpcyBpcyBzYWZlLiAgU2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM1OTQwMjE2L2VzNi1pcy1pdC1kYW5nZXJvdXMtdG8tZGVsZXRlLWVsZW1lbnRzLWZyb20tc2V0LW1hcC1kdXJpbmctc2V0LW1hcC1pdGVyYXRpb25cclxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiB0aGlzLnNlbGVjdGlvbkNvbnRleHQuc2VsZWN0ZWRJdGVtc01hcCkge1xyXG4gICAgICBpZiAoIXZhbC5wcmV2ZW50UmVtb3ZlKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Db250ZXh0LnNlbGVjdGVkSXRlbXNNYXAuZGVsZXRlKGtleSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGlvbkNvbnRleHQucm93Q2hlY2tib3hlcy5jb250cm9scy5mb3JFYWNoKChjb250cm9sLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmKCF0aGlzLmF2YWlsYWJsZUl0ZW1zW2luZGV4XS5wcmV2ZW50UmVtb3ZlKXtcclxuICAgICAgICBjb250cm9sLnNldFZhbHVlKGZhbHNlKVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBBcnJheS5mcm9tKHRoaXMuc2VsZWN0aW9uQ29udGV4dC5zZWxlY3RlZEl0ZW1zTWFwLnZhbHVlcygpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxlZCB3aGVuIHRoZSByZW1vdmUgaXRlbSBidXR0b24gaXMgY2xpY2tlZCBmb3IgYSBzZWxlY3RlZCBpdGVtXHJcbiAgICogQHBhcmFtIHJlbW92ZUl0ZW1cclxuICAgKi9cclxuICBwdWJsaWMgcmVtb3ZlU2VsZWN0ZWRJdGVtKHJlbW92ZUl0ZW06IFBpY2tlckl0ZW0pOiB2b2lkIHtcclxuICAgIGxldCBmb3VuZEluZGV4ID0gdGhpcy5hdmFpbGFibGVJdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSByZW1vdmVJdGVtLmlkKTtcclxuICAgIGlmIChmb3VuZEluZGV4ID4gLTEpIHtcclxuICAgICAgLy8gVXBkYXRlIHRoZSByb3cgY2hlY2tib3ggc2luY2UgdGhlIGl0ZW0gZXhpc3RzIGluIHRoZSBwYWdlIGJlaW5nIHZpZXdlZFxyXG4gICAgICAvLyBUaGUgdmFsdWUgY2hhbmdlIGhhbmRsZXIgZm9yIHJvdyBjaGVja2JveGVzIHdpbGwgdXBkYXRlIHRoZSBtYXAvc2VsZWN0ZWQgaXRlbXNcclxuICAgICAgdGhpcy5zZWxlY3Rpb25Db250ZXh0LnJvd0NoZWNrYm94ZXMuYXQoZm91bmRJbmRleCkuc2V0VmFsdWUoZmFsc2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gVGhlIGl0ZW0gYmVpbmcgcmVtb3ZlZCBpcyBub3Qgb24gdGhlIGN1cnJlbnQgcGFnZSBzbyBqdXN0IHVwZGF0ZSB0aGVcclxuICAgICAgLy8gbWFwL3NlbGVjdGVkIGl0ZW1zXHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dC5zZWxlY3RlZEl0ZW1zTWFwLmRlbGV0ZShyZW1vdmVJdGVtLmlkKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGlvbkNvbnRleHQuc2VsZWN0ZWRJdGVtc01hcC52YWx1ZXMoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXYXRjaCBmb3IgY2hhbmdlcyB0byB0aGUgcm93IGNoZWNrYm94ZXMgZm9ybSBhcnJheSBhbmQgdXBkYXRlIHRoZSBzZWxlY3RlZCBpdGVtc1xyXG4gICAqIGxpc3RcclxuICAgKi9cclxuICBwcml2YXRlIHNldHVwUm93Q2hlY2tib3hlc1dhdGNoZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkNvbnRleHQ/LnJvd0NoZWNrYm94ZXMudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgIC8vIERlYm91bmNlIDEwIGlzIHNpbXBseSB0byBub3Qgc3BhbSB0aGUgY2hhbmdlIGhhbmRsZXIgb24gbG9hZC9wYWdlIGNoYW5nZVxyXG4gICAgICAvLyBPdGhlcndpc2UgdGhpcyB3aWxsIGdldCBjYWxsZWQgZXZlcnkgdGltZSBhIG5ldyByb3cgaXMgYWRkZWQgdG8gdGhlIHRhYmxlXHJcbiAgICAgIGRlYm91bmNlVGltZSgxMCksXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZClcclxuICAgICkuc3Vic2NyaWJlKChyb3dWYWx1ZXM6IGJvb2xlYW5bXSkgPT4ge1xyXG4gICAgICByb3dWYWx1ZXMuZm9yRWFjaCgoc2VsZWN0ZWQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgbGV0IGF2YWlsYWJsZUl0ZW0gPSB0aGlzLmF2YWlsYWJsZUl0ZW1zW2luZGV4XTtcclxuXHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZCAmJiB0aGlzLnNlbGVjdGlvbkNvbnRleHQ/LnNlbGVjdGVkSXRlbXNNYXAuaGFzKGF2YWlsYWJsZUl0ZW0uaWQpKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNvbnRleHQ/LnNlbGVjdGVkSXRlbXNNYXAuZGVsZXRlKGF2YWlsYWJsZUl0ZW0uaWQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWQgJiYgIXRoaXMuc2VsZWN0aW9uQ29udGV4dD8uc2VsZWN0ZWRJdGVtc01hcC5oYXMoYXZhaWxhYmxlSXRlbS5pZCkpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dD8uc2VsZWN0ZWRJdGVtc01hcC5zZXQoYXZhaWxhYmxlSXRlbS5pZCwgYXZhaWxhYmxlSXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3Rpb25Db250ZXh0Py5zZWxlY3RlZEl0ZW1zTWFwLnZhbHVlcygpKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2xlYXJhYmxlID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDAgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLnNvbWUoaSA9PiAhaS5wcmV2ZW50UmVtb3ZlKTtcclxuICAgICAgdGhpcy51cGRhdGVNYXN0ZXJDaGVja2JveFRleHQoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dC5zZWxlY3RBbGxDaGVja2JveC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoMTApLCB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgY29uc3Qgb25lUGFnZU9mRGF0YSA9IHRoaXMuYXZhaWxhYmxlSXRlbXMubGVuZ3RoID09PSB0aGlzLnRvdGFsQ291bnQ7XHJcbiAgICAgIGlmIChjaGVja2VkICYmICFvbmVQYWdlT2ZEYXRhKSB7XHJcbiAgICAgICAgdGhpcy5zaG93U2VsZWN0QWxsSXRlbXNMaW5rID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmICghY2hlY2tlZCkge1xyXG4gICAgICAgIHRoaXMuc2hvd1NlbGVjdEFsbEl0ZW1zTGluayA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dC5pc1NlbGVjdGluZ0FsbEl0ZW1zID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVNYXN0ZXJDaGVja2JveFRleHQoKSB7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0aW9uQ29udGV4dC5pc1NlbGVjdGluZ0FsbEl0ZW1zKSB7XHJcbiAgICAgIGNvbnN0IGNoZWNrZWRDb3VudCA9IHRoaXMuc2VsZWN0aW9uQ29udGV4dC5yb3dDaGVja2JveGVzLmNvbnRyb2xzLm1hcChjID0+IGMudmFsdWUpLmZpbHRlcih2ID0+IHYpLmxlbmd0aDtcclxuICAgICAgaWYgKGNoZWNrZWRDb3VudCA+IDApIHtcclxuICAgICAgICB0aGlzLm1hc3RlckNoZWNrYm94VGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdDb3VudFNlbGVjdGVkX1RDJywgeyBjb3VudDogY2hlY2tlZENvdW50IH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubWFzdGVyQ2hlY2tib3hUZXh0ID0gJyc7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWFzdGVyQ2hlY2tib3hUZXh0ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0FsbEl0ZW1QaWNrZXJJdGVtc1NlbGVjdGVkX1NDJywgeyBjb3VudDogdGhpcy50b3RhbENvdW50LCBpdGVtTmFtZTogdGhpcy5pdGVtTmFtZSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdhdGNoIHRvIGJlIHRvbGQgaWYgY2hhbmdlcyB0byB0aGUgbWFwIHdlcmUgbWFkZSBvdXRzaWRlIG9mIHRoZSBjb21wb25lbnQgYW5kIGlmIHNvIHVwZGF0ZVxyXG4gICAqIHRoZSBhcnJheSBkaXNwbGF5ZWQgaW4gdGhlIHNlbGVjdGVkIGxpc3QgYW5kIHNlbGVjdCBjaGVja2JveGVzIGZvciB2aXNpYmxlIGF2YWlsYWJsZSBpdGVtc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0dXBTZWxlY3RlZEl0ZW1zQ2hhbmdlZFdhdGNoZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkNvbnRleHQuc2VsZWN0ZWRJdGVtc01hcENoYW5nZWQucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKVxyXG4gICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25Db250ZXh0KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGlvbkNvbnRleHQ/LnNlbGVjdGVkSXRlbXNNYXAudmFsdWVzKCkpO1xyXG5cclxuICAgICAgICB0aGlzLmF2YWlsYWJsZUl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Db250ZXh0LnNlbGVjdGVkSXRlbXNNYXAuaGFzKGl0ZW0uaWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dC5yb3dDaGVja2JveGVzLmF0KGluZGV4KS5zZXRWYWx1ZSh0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEludGVybmFsaXplZFRlbXBsYXRlcygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmN1c3RvbUF2YWlsYWJsZUhlYWRlclRlbXBsYXRlKSB7XHJcbiAgICAgIHRoaXMuaW50ZXJuYWxpemVkQXZhaWxhYmxlSGVhZGVyVGVtcGxhdGUgPSB0aGlzLmN1c3RvbUF2YWlsYWJsZUhlYWRlclRlbXBsYXRlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdEFsbEVuYWJsZWQpIHtcclxuICAgICAgdGhpcy5pbnRlcm5hbGl6ZWRBdmFpbGFibGVIZWFkZXJUZW1wbGF0ZSA9IHRoaXMuZGVmYXVsdEF2YWlsYWJsZVNlbGVjdEFsbEhlYWRlclRlbXBsYXRlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbnRlcm5hbGl6ZWRBdmFpbGFibGVIZWFkZXJUZW1wbGF0ZSA9IHRoaXMuZGVmYXVsdEF2YWlsYWJsZUhlYWRlclRlbXBsYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmN1c3RvbUF2YWlsYWJsZUl0ZW1UZW1wbGF0ZSkge1xyXG4gICAgICB0aGlzLmludGVybmFsaXplZEF2YWlsYWJsZUl0ZW1UZW1wbGF0ZSA9IHRoaXMuY3VzdG9tQXZhaWxhYmxlSXRlbVRlbXBsYXRlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pbnRlcm5hbGl6ZWRBdmFpbGFibGVJdGVtVGVtcGxhdGUgPSB0aGlzLmRlZmF1bHRBdmFpbGFibGVJdGVtVGVtcGxhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ZWRJdGVtVGVtcGxhdGUpIHtcclxuICAgICAgdGhpcy5pbnRlcm5hbGl6ZWRTZWxlY3RlZEl0ZW1UZW1wbGF0ZSA9IHRoaXMuY3VzdG9tU2VsZWN0ZWRJdGVtVGVtcGxhdGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmludGVybmFsaXplZFNlbGVjdGVkSXRlbVRlbXBsYXRlID0gdGhpcy5kZWZhdWx0U2VsZWN0ZWRJdGVtVGVtcGxhdGU7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgZWNPdmVybGF5XHJcbiAgICAgY2xhc3M9XCJkLWZsZXggZmxleC1ncm93IGNhcmRcIlxyXG4gICAgIFtzdGF0dXNdPVwidGFibGVTdGF0dXM/LnN0YXR1c1wiXHJcbiAgICAgW21lc3NhZ2VdPVwidGFibGVTdGF0dXM/Lm1lc3NhZ2VcIlxyXG4gICAgIFtkaXNwbGF5QXNNYXNrXT1cInRydWVcIj5cclxuICAgIDxlYy1zZWFyY2hhYmxlLXRhYmxlIGlkPVwie3tpZH19X3NlYXJjaGFibGVUYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXgtZ3Jvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsbFBhcmVudEhlaWdodF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlSGVhZGVyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVTZWFyY2hDb250cm9sXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3JlbW92ZUNhcmRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcGFnZWFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcGFnZVNpemVdPVwiNTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW29iamVjdFR5cGVdPVwiaXRlbU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Nb2RlbF09XCJmb3JtTW9kZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWR5XT1cInJlYWR5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtnZXRJdGVtc109XCJnZXRJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtub0RhdGFNZXNzYWdlXT1cIm5vRGF0YU1lc3NhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvbkNvbnRleHRdPVwic2VsZWN0aW9uQ29udGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbc3RhdHVzXT1cInRhYmxlU3RhdHVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtc0NoYW5nZSk9XCJvbkl0ZW1zQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLi0tZWMtc2VhcmNoYWJsZS10YWJsZS1mbGV4LXByb3BlcnRpZXNdPVwiKGF2YWlsYWJsZUl0ZW1zLmxlbmd0aCB8fCB0YWJsZVN0YXR1cy5zdGF0dXMgPT09ICdwZW5kaW5nJyB8fCB0YWJsZVN0YXR1cy5zdGF0dXMgPT09ICdlcnJvcicgKSA/ICcxIDEgYXV0bycgOiAnMCAxIGF1dG8nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS4tLWVjLXNlYXJjaGFibGUtdGFibGUtaGVpZ2h0LWNhcHRpb24tZm9vdGVyXT1cIidjYWxjKDIuNXJlbSArIDFweCknXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJsZUxheW91dEZpeGVkXT1cInRydWVcIj5cclxuICAgICAgICA8aGVhZGVyICpuZ0lmPVwiY3VzdG9tQXZhaWxhYmxlSGVhZGVyVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjYXJkLWhlYWRlciBmbGV4LXNocmlua1wiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogM3JlbTtcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZVwiPnt7YXZhaWxhYmxlVGl0bGUgfCB0cmFuc2xhdGV9fTwvaDM+XHJcbiAgICAgICAgPC9oZWFkZXI+XHJcbiAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICA8dHIgZWNUYWJsZVNlbGVjdGFibGVSb3dcclxuICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25Db250ZXh0XT1cInNlbGVjdGlvbkNvbnRleHRcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJib3JkZXItYm90dG9tLTBcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnRlcm5hbGl6ZWRBdmFpbGFibGVIZWFkZXJUZW1wbGF0ZTtcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RoZWFkPlxyXG5cclxuICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYXZhaWxhYmxlSXRlbXM7IGluZGV4IGFzIHJvd0luZGV4OyB0cmFja0J5OiB0cmFja0J5SW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDx0ciBlY1RhYmxlU2VsZWN0YWJsZVJvd1xyXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25Db250ZXh0XT1cInNlbGVjdGlvbkNvbnRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyb3dJbmRleF09XCJyb3dJbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2lzQ2hlY2tib3hEaXNhYmxlZF09XCJpdGVtLnByZXZlbnRSZW1vdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpc1NlbGVjdGVkXT1cInNlbGVjdGlvbkNvbnRleHQ/LnNlbGVjdGVkSXRlbXNNYXAuaGFzKGl0ZW0uaWQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuLS1lYy10YWJsZS1zZWxlY3RhYmxlLXJvdy12ZXJ0aWNhbC1hbGlnbi1jaGVja2JveC10ZF09XCInbWlkZGxlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnRlcm5hbGl6ZWRBdmFpbGFibGVJdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGl0ZW19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3Rib2R5PlxyXG4gICAgPC9lYy1zZWFyY2hhYmxlLXRhYmxlPlxyXG5cclxuICAgIDxzZWN0aW9uIGlkPVwie3tpZH19X3NlbGVjdGVkSXRlbXNcIiBjbGFzcz1cInNlbGVjdGVkLWl0ZW1zIGZsZXgtZ3JvdyBkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICA8ZWMtdGFibGUgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGZsZXgtZ3JvdyBpcy1maXhlZFwiPlxyXG4gICAgICAgICAgICA8Y29sZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICA8Y29sPlxyXG4gICAgICAgICAgICAgICAgPGNvbCBzdHlsZT1cIndpZHRoOiAycmVtO1wiPlxyXG4gICAgICAgICAgICA8L2NvbGdyb3VwPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dHIgc3R5bGU9XCJoZWlnaHQ6IDNyZW07XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIGNvbHNwYW49XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLTIgYm9yZGVyLWJvdHRvbS0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtaGVhZGluZy0yIGZvbnQtY29sb3ItcHJpbWFyeSBmbGV4LWdyb3cgdGV4dC10cnVuY2F0ZVwiPnt7c2VsZWN0ZWRUaXRsZSB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJzZWxlY3RlZEl0ZW1zQ2xlYXJhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwie3tpZH19X2NsZWFyU2VsZWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGwtMiBtbC1hdXRvIGZvbnQtc2l6ZS1iYXNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xlYXJTZWxlY3Rpb25DbGljaygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZT5DbGVhclNlbGVjdGlvbl9UQzwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcblxyXG4gICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uQ29udGV4dC5pc1NlbGVjdGluZ0FsbEl0ZW1zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjJcIiB0cmFuc2xhdGUgaW5uZXJIdG1sPVwiYWxsU2VsZWN0ZWRJdGVtc01lc3NhZ2UgfCB0cmFuc2xhdGVcIj48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRJdGVtcy5sZW5ndGggJiYgIXNlbGVjdGlvbkNvbnRleHQuaXNTZWxlY3RpbmdBbGxJdGVtc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzZWxlY3RlZEl0ZW1zOyBsYXN0IGFzIGlzTGFzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwic2VsZWN0ZWRfcm93X3t7aXRlbS5pZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1ib3R0b21dPVwiIWlzTGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnRlcm5hbGl6ZWRTZWxlY3RlZEl0ZW1UZW1wbGF0ZTsgY29udGV4dDogeyRpbXBsaWNpdDogaXRlbX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWN0aW9ucy1jb2wgdGV4dC1yaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZWMtYnV0dG9uIGlkPVwie3tpZH19X3JlbW92ZVNlbGVjdGVkX3t7aXRlbS5pZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaXRlbS5wcmV2ZW50UmVtb3ZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwiZWMtaWNvbiBpY29uLWNhbmNlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInJlbW92ZVNlbGVjdGVkSXRlbShpdGVtKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lYy1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPHRyICpuZ0lmPVwiIXNlbGVjdGVkSXRlbXMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiIW5vU2VsZWN0ZWRJdGVtc01lc3NhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xzcGFuPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC0yIG5vLWRhdGEtbWVzc2FnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdHJhbnNsYXRlUGFyYW1zXT1cIntpdGVtTmFtZTogaXRlbU5hbWUgfCB0cmFuc2xhdGV9XCI+SXRlbVBpY2tlck5vSXRlbXNTZWxlY3RlZF9TQzwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwibm9TZWxlY3RlZEl0ZW1zTWVzc2FnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHNwYW49XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLTIgbm8tZGF0YS1tZXNzYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlPnt7bm9TZWxlY3RlZEl0ZW1zTWVzc2FnZX19PC90ZD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC9lYy10YWJsZT5cclxuXHJcbiAgICAgICAgPGZvb3RlciBpZD1cInNlbGVjdGVkSXRlbXNGb290ZXJcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZEl0ZW1zLmxlbmd0aCAmJiAhc2VsZWN0aW9uQ29udGV4dC5pc1NlbGVjdGluZ0FsbEl0ZW1zXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGZsZXgtc2hyaW5rIHB4LTIgYm9yZGVyLXRvcCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IGNhbGMoMi41cmVtICsgMXB4KTtcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC1hdXRvIHRleHQtY2FwdGlvbi0xIGZvbnQtY29sb3ItaGludFwiPlxyXG4gICAgICAgICAgICAgICAge3tzZWxlY3RlZEl0ZW1zLmxlbmd0aH19IHt7aXRlbU5hbWUgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9mb290ZXI+XHJcbiAgICA8L3NlY3Rpb24+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0QXZhaWxhYmxlSGVhZGVyVGVtcGxhdGU+XHJcbiAgICA8dGggY2xhc3M9XCJ0ZXh0LWhlYWRpbmctMiBmb250LWNvbG9yLXByaW1hcnkgYm9yZGVyLWJvdHRvbS0wXCI+e3thdmFpbGFibGVUaXRsZSB8IHRyYW5zbGF0ZX19PC90aD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEF2YWlsYWJsZVNlbGVjdEFsbEhlYWRlclRlbXBsYXRlPlxyXG4gICAgPHRoIGNsYXNzPVwidGV4dC1oZWFkaW5nLTIgZm9udC1jb2xvci1wcmltYXJ5IGJvcmRlci1ib3R0b20tMFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIFwiPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFtYXN0ZXJDaGVja2JveFRleHRcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIj57e2F2YWlsYWJsZVRpdGxlIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibWFzdGVyQ2hlY2tib3hUZXh0XCJcclxuICAgICAgICAgICAgICAgICAgaWQ9XCJzZWxlY3RlZENvdW50XCI+e3ttYXN0ZXJDaGVja2JveFRleHR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dTZWxlY3RBbGxJdGVtc0xpbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgIGVjTGlua0J1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwic2VsZWN0QWxsSXRlbXNMaW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0QWxsSXRlbXMoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbC0yXCI+XHJcbiAgICAgICAgICAgICAgICB7eyAoJ1NlbGVjdEFsbEl0ZW1QaWNrZXJJdGVtc19UQycpIHwgdHJhbnNsYXRlOnsgY291bnQ6IHRvdGFsQ291bnQsIGl0ZW1OYW1lOiBpdGVtTmFtZSB9IH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC90aD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEF2YWlsYWJsZUl0ZW1UZW1wbGF0ZVxyXG4gICAgICAgICAgICAgbGV0LWl0ZW0+XHJcbiAgICA8dGQ+e3tpdGVtLmxhYmVsfX08L3RkPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0U2VsZWN0ZWRJdGVtVGVtcGxhdGVcclxuICAgICAgICAgICAgIGxldC1pdGVtPlxyXG4gICAge3tpdGVtLmxhYmVsfX1cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
@@ -9369,10 +9369,10 @@ class ItemPickerComponent {
|
|
9369
9369
|
}
|
9370
9370
|
}
|
9371
9371
|
ItemPickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ItemPickerComponent, deps: [{ token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
|
9372
|
-
ItemPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ItemPickerComponent, selector: "ec-item-picker", inputs: { id: "id", availableTitle: "availableTitle", selectedTitle: "selectedTitle", itemName: "itemName", formModel: "formModel", customAvailableHeaderTemplate: "customAvailableHeaderTemplate", customAvailableItemTemplate: "customAvailableItemTemplate", customSelectedItemTemplate: "customSelectedItemTemplate", ready: "ready", getItems: "getItems", selectionContext: "selectionContext", noDataMessage: "noDataMessage", noSelectedItemsMessage: "noSelectedItemsMessage", selectAllEnabled: "selectAllEnabled", allSelectedItemsMessage: "allSelectedItemsMessage" }, viewQueries: [{ propertyName: "defaultAvailableHeaderTemplate", first: true, predicate: ["defaultAvailableHeaderTemplate"], descendants: true, static: true }, { propertyName: "defaultAvailableSelectAllHeaderTemplate", first: true, predicate: ["defaultAvailableSelectAllHeaderTemplate"], descendants: true, static: true }, { propertyName: "defaultAvailableItemTemplate", first: true, predicate: ["defaultAvailableItemTemplate"], descendants: true, static: true }, { propertyName: "defaultSelectedItemTemplate", first: true, predicate: ["defaultSelectedItemTemplate"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div ecOverlay\r\n class=\"d-flex flex-grow card\"\r\n [status]=\"tableStatus?.status\"\r\n [message]=\"tableStatus?.message\"\r\n [displayAsMask]=\"true\">\r\n <ec-searchable-table id=\"{{id}}_searchableTable\"\r\n class=\"flex-grow\"\r\n [fillParentHeight]=\"true\"\r\n [hideHeader]=\"true\"\r\n [hideSearchControl]=\"true\"\r\n [removeCard]=\"true\"\r\n [pageable]=\"true\"\r\n [pageSize]=\"50\"\r\n [objectType]=\"itemName\"\r\n [formModel]=\"formModel\"\r\n [ready]=\"ready\"\r\n [getItems]=\"getItems\"\r\n [selectable]=\"true\"\r\n [noDataMessage]=\"noDataMessage\"\r\n [selectionContext]=\"selectionContext\"\r\n [status]=\"tableStatus\"\r\n (itemsChange)=\"onItemsChange($event)\"\r\n [style.--ec-searchable-table-flex-properties]=\"(availableItems.length || tableStatus.status === 'pending' || tableStatus.status === 'error' ) ? '1 1 auto' : '0 1 auto'\"\r\n [style.--ec-searchable-table-height-caption-footer]=\"'calc(2.5rem + 1px)'\"\r\n [tableLayoutFixed]=\"true\">\r\n <header *ngIf=\"customAvailableHeaderTemplate\"\r\n class=\"card-header flex-shrink\"\r\n style=\"height: 3rem;\">\r\n <h3 class=\"card-title\">{{availableTitle | translate}}</h3>\r\n </header>\r\n <thead>\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\"\r\n class=\"border-bottom-0\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableHeaderTemplate;\"></ng-container>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <ng-container *ngFor=\"let item of availableItems; index as rowIndex; trackBy: trackByIndex\">\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\"\r\n [rowIndex]=\"rowIndex\"\r\n [isCheckboxDisabled]=\"item.preventRemove\"\r\n [isSelected]=\"selectionContext?.selectedItemsMap.has(item.id)\"\r\n [style.--ec-table-selectable-row-vertical-align-checkbox-td]=\"'middle'\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableItemTemplate; context: {$implicit: item}\">\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </ec-searchable-table>\r\n\r\n <section id=\"{{id}}_selectedItems\" class=\"selected-items flex-grow d-flex flex-column\">\r\n <ec-table [scrollable]=\"true\"\r\n class=\"d-flex flex-grow is-fixed\">\r\n <colgroup>\r\n <col>\r\n <col style=\"width: 2rem;\">\r\n </colgroup>\r\n <thead>\r\n <tr style=\"height: 3rem;\">\r\n <th colspan=\"2\"\r\n class=\"p-2 border-bottom-0\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"text-heading-2 font-color-primary flex-grow text-truncate\">{{selectedTitle | translate}}</span>\r\n <a *ngIf=\"selectedItemsClearable\"\r\n id=\"{{id}}_clearSelection\"\r\n class=\"pl-2 ml-auto font-size-base\"\r\n href=\"javascript:void(0)\"\r\n (click)=\"onClearSelectionClick()\"\r\n translate>ClearSelection_TC</a>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <ng-container *ngIf=\"selectionContext.isSelectingAllItems\">\r\n <tr>\r\n <td colspan=\"2\" translate>{{allSelectedItemsMessage}}</td>\r\n </tr>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"selectedItems.length && !selectionContext.isSelectingAllItems\">\r\n <tr *ngFor=\"let item of selectedItems; last as isLast\"\r\n id=\"selected_row_{{item.id}}\"\r\n [class.border-bottom]=\"!isLast\">\r\n <td class=\"p-2\">\r\n <ng-container\r\n *ngTemplateOutlet=\"internalizedSelectedItemTemplate; context: {$implicit: item}\">\r\n </ng-container>\r\n </td>\r\n\r\n <td class=\"actions-col text-right\"\r\n style=\"vertical-align: middle;\">\r\n <ec-button id=\"{{id}}_removeSelected_{{item.id}}\"\r\n *ngIf=\"!item.preventRemove\"\r\n type=\"icon\"\r\n icon=\"ec-icon icon-cancel\"\r\n (clicked)=\"removeSelectedItem(item)\">\r\n </ec-button>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n <tr *ngIf=\"!selectedItems.length\">\r\n <td *ngIf=\"!noSelectedItemsMessage\"\r\n colspan=\"2\"\r\n class=\"p-2 no-data-message\"\r\n translate\r\n [translateParams]=\"{itemName: itemName | translate}\">ItemPickerNoItemsSelected_SC</td>\r\n <td *ngIf=\"noSelectedItemsMessage\"\r\n colspan=\"2\"\r\n class=\"p-2 no-data-message\"\r\n translate>{{noSelectedItemsMessage}}</td>\r\n </tr>\r\n </tbody>\r\n </ec-table>\r\n\r\n <footer id=\"selectedItemsFooter\"\r\n *ngIf=\"selectedItems.length && !selectionContext.isSelectingAllItems\"\r\n class=\"d-flex flex-shrink px-2 border-top align-items-center\"\r\n style=\"height: calc(2.5rem + 1px);\">\r\n <span class=\"ml-auto text-caption-1 font-color-hint\">\r\n {{selectedItems.length}} {{itemName | translate}}\r\n </span>\r\n </footer>\r\n </section>\r\n</div>\r\n\r\n<ng-template #defaultAvailableHeaderTemplate>\r\n <th class=\"text-heading-2 font-color-primary border-bottom-0\">{{availableTitle | translate}}</th>\r\n</ng-template>\r\n\r\n<ng-template #defaultAvailableSelectAllHeaderTemplate>\r\n <th class=\"text-heading-2 font-color-primary border-bottom-0\">\r\n <div class=\"d-flex align-items-center \">\r\n <span *ngIf=\"!masterCheckboxText\"\r\n class=\"text-truncate\">{{availableTitle | translate}}</span>\r\n <span *ngIf=\"masterCheckboxText\"\r\n id=\"selectedCount\">{{masterCheckboxText}}</span>\r\n <button *ngIf=\"showSelectAllItemsLink\"\r\n ecLinkButton\r\n id=\"selectAllItemsLink\"\r\n (click)=\"selectAllItems()\"\r\n class=\"ml-2\">\r\n {{ ('SelectAllItemPickerItems_TC') | translate:{ count: totalCount, itemName: itemName } }}\r\n </button>\r\n </div>\r\n </th>\r\n</ng-template>\r\n\r\n<ng-template #defaultAvailableItemTemplate\r\n let-item>\r\n <td>{{item.label}}</td>\r\n</ng-template>\r\n\r\n<ng-template #defaultSelectedItemTemplate\r\n let-item>\r\n {{item.label}}\r\n</ng-template>", styles: [":host{display:flex}ec-searchable-table{border-right:2px solid var(--ec-border-color)}.selected-items{max-width:var(--ec-item-picker-max-width-selected-items, 50%)}.no-data-message{white-space:normal}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "ec-button", inputs: ["id", "disabled", "icon", "label", "badge", "tabindex", "type", "pending", "pendingIcon", "customTemplate", "isSubmit", "autofocus"], outputs: ["clicked"] }, { kind: "component", type: ViewOverlayComponent, selector: "[ecOverlay]", inputs: ["status", "message", "action", "noDataTemplate", "displayAsMask", "overlayClassList"] }, { kind: "component", type: TableComponent, selector: "ec-table", inputs: ["id", "scrollable", "resizable", "condensed", "sortable", "selectionContext", "selectionToolbarTemplate", "selectable", "isForm", "sort", "resizableColumns"], outputs: ["sortChange"] }, { kind: "component", type: SearchableTableComponent, selector: "ec-searchable-table", inputs: ["id", "resizable", "sortable", "sort", "autofocus", "tableClasses", "searchboxPlaceholder", "formModel", "noDataMessage", "noSearchResultsMessage", "ready", "getItems", "refresh", "status", "tableLayoutFixed", "searchboxTabIndex", "maxItemCount", "hideSearchControl", "hideHeader", "objectType", "hideFooter", "pageable", "pageSize", "maxTabs", "searchboxReadonly", "selectionContext", "selectionToolbarTemplate", "additionalCountText", "selectable", "customContentTemplate", "removeCard", "overlayClasses", "fillParentHeight"], outputs: ["sortChange", "pageChange", "itemsChange"] }, { kind: "component", type: TableSelectableRowComponent, selector: "[ecTableSelectableRow]", inputs: ["id", "ecTableSelectableRow", "selectionContext", "rowIndex", "lockedColOptions", "isSelected", "isCheckboxDisabled"] }, { kind: "component", type: LinkButtonComponent, selector: "button[ecLinkButton]" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
|
9372
|
+
ItemPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ItemPickerComponent, selector: "ec-item-picker", inputs: { id: "id", availableTitle: "availableTitle", selectedTitle: "selectedTitle", itemName: "itemName", formModel: "formModel", customAvailableHeaderTemplate: "customAvailableHeaderTemplate", customAvailableItemTemplate: "customAvailableItemTemplate", customSelectedItemTemplate: "customSelectedItemTemplate", ready: "ready", getItems: "getItems", selectionContext: "selectionContext", noDataMessage: "noDataMessage", noSelectedItemsMessage: "noSelectedItemsMessage", selectAllEnabled: "selectAllEnabled", allSelectedItemsMessage: "allSelectedItemsMessage" }, viewQueries: [{ propertyName: "defaultAvailableHeaderTemplate", first: true, predicate: ["defaultAvailableHeaderTemplate"], descendants: true, static: true }, { propertyName: "defaultAvailableSelectAllHeaderTemplate", first: true, predicate: ["defaultAvailableSelectAllHeaderTemplate"], descendants: true, static: true }, { propertyName: "defaultAvailableItemTemplate", first: true, predicate: ["defaultAvailableItemTemplate"], descendants: true, static: true }, { propertyName: "defaultSelectedItemTemplate", first: true, predicate: ["defaultSelectedItemTemplate"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div ecOverlay\r\n class=\"d-flex flex-grow card\"\r\n [status]=\"tableStatus?.status\"\r\n [message]=\"tableStatus?.message\"\r\n [displayAsMask]=\"true\">\r\n <ec-searchable-table id=\"{{id}}_searchableTable\"\r\n class=\"flex-grow\"\r\n [fillParentHeight]=\"true\"\r\n [hideHeader]=\"true\"\r\n [hideSearchControl]=\"true\"\r\n [removeCard]=\"true\"\r\n [pageable]=\"true\"\r\n [pageSize]=\"50\"\r\n [objectType]=\"itemName\"\r\n [formModel]=\"formModel\"\r\n [ready]=\"ready\"\r\n [getItems]=\"getItems\"\r\n [selectable]=\"true\"\r\n [noDataMessage]=\"noDataMessage\"\r\n [selectionContext]=\"selectionContext\"\r\n [status]=\"tableStatus\"\r\n (itemsChange)=\"onItemsChange($event)\"\r\n [style.--ec-searchable-table-flex-properties]=\"(availableItems.length || tableStatus.status === 'pending' || tableStatus.status === 'error' ) ? '1 1 auto' : '0 1 auto'\"\r\n [style.--ec-searchable-table-height-caption-footer]=\"'calc(2.5rem + 1px)'\"\r\n [tableLayoutFixed]=\"true\">\r\n <header *ngIf=\"customAvailableHeaderTemplate\"\r\n class=\"card-header flex-shrink\"\r\n style=\"height: 3rem;\">\r\n <h3 class=\"card-title\">{{availableTitle | translate}}</h3>\r\n </header>\r\n <thead>\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\"\r\n class=\"border-bottom-0\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableHeaderTemplate;\"></ng-container>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <ng-container *ngFor=\"let item of availableItems; index as rowIndex; trackBy: trackByIndex\">\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\"\r\n [rowIndex]=\"rowIndex\"\r\n [isCheckboxDisabled]=\"item.preventRemove\"\r\n [isSelected]=\"selectionContext?.selectedItemsMap.has(item.id)\"\r\n [style.--ec-table-selectable-row-vertical-align-checkbox-td]=\"'middle'\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableItemTemplate; context: {$implicit: item}\">\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </ec-searchable-table>\r\n\r\n <section id=\"{{id}}_selectedItems\" class=\"selected-items flex-grow d-flex flex-column\">\r\n <ec-table [scrollable]=\"true\"\r\n class=\"d-flex flex-grow is-fixed\">\r\n <colgroup>\r\n <col>\r\n <col style=\"width: 2rem;\">\r\n </colgroup>\r\n <thead>\r\n <tr style=\"height: 3rem;\">\r\n <th colspan=\"2\"\r\n class=\"p-2 border-bottom-0\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"text-heading-2 font-color-primary flex-grow text-truncate\">{{selectedTitle | translate}}</span>\r\n <a *ngIf=\"selectedItemsClearable\"\r\n id=\"{{id}}_clearSelection\"\r\n class=\"pl-2 ml-auto font-size-base\"\r\n href=\"javascript:void(0)\"\r\n (click)=\"onClearSelectionClick()\"\r\n translate>ClearSelection_TC</a>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <ng-container *ngIf=\"selectionContext.isSelectingAllItems\">\r\n <tr>\r\n <td colspan=\"2\" translate innerHtml=\"allSelectedItemsMessage | translate\"></td>\r\n </tr>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"selectedItems.length && !selectionContext.isSelectingAllItems\">\r\n <tr *ngFor=\"let item of selectedItems; last as isLast\"\r\n id=\"selected_row_{{item.id}}\"\r\n [class.border-bottom]=\"!isLast\">\r\n <td class=\"p-2\">\r\n <ng-container\r\n *ngTemplateOutlet=\"internalizedSelectedItemTemplate; context: {$implicit: item}\">\r\n </ng-container>\r\n </td>\r\n\r\n <td class=\"actions-col text-right\"\r\n style=\"vertical-align: middle;\">\r\n <ec-button id=\"{{id}}_removeSelected_{{item.id}}\"\r\n *ngIf=\"!item.preventRemove\"\r\n type=\"icon\"\r\n icon=\"ec-icon icon-cancel\"\r\n (clicked)=\"removeSelectedItem(item)\">\r\n </ec-button>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n <tr *ngIf=\"!selectedItems.length\">\r\n <td *ngIf=\"!noSelectedItemsMessage\"\r\n colspan=\"2\"\r\n class=\"p-2 no-data-message\"\r\n translate\r\n [translateParams]=\"{itemName: itemName | translate}\">ItemPickerNoItemsSelected_SC</td>\r\n <td *ngIf=\"noSelectedItemsMessage\"\r\n colspan=\"2\"\r\n class=\"p-2 no-data-message\"\r\n translate>{{noSelectedItemsMessage}}</td>\r\n </tr>\r\n </tbody>\r\n </ec-table>\r\n\r\n <footer id=\"selectedItemsFooter\"\r\n *ngIf=\"selectedItems.length && !selectionContext.isSelectingAllItems\"\r\n class=\"d-flex flex-shrink px-2 border-top align-items-center\"\r\n style=\"height: calc(2.5rem + 1px);\">\r\n <span class=\"ml-auto text-caption-1 font-color-hint\">\r\n {{selectedItems.length}} {{itemName | translate}}\r\n </span>\r\n </footer>\r\n </section>\r\n</div>\r\n\r\n<ng-template #defaultAvailableHeaderTemplate>\r\n <th class=\"text-heading-2 font-color-primary border-bottom-0\">{{availableTitle | translate}}</th>\r\n</ng-template>\r\n\r\n<ng-template #defaultAvailableSelectAllHeaderTemplate>\r\n <th class=\"text-heading-2 font-color-primary border-bottom-0\">\r\n <div class=\"d-flex align-items-center \">\r\n <span *ngIf=\"!masterCheckboxText\"\r\n class=\"text-truncate\">{{availableTitle | translate}}</span>\r\n <span *ngIf=\"masterCheckboxText\"\r\n id=\"selectedCount\">{{masterCheckboxText}}</span>\r\n <button *ngIf=\"showSelectAllItemsLink\"\r\n ecLinkButton\r\n id=\"selectAllItemsLink\"\r\n (click)=\"selectAllItems()\"\r\n class=\"ml-2\">\r\n {{ ('SelectAllItemPickerItems_TC') | translate:{ count: totalCount, itemName: itemName } }}\r\n </button>\r\n </div>\r\n </th>\r\n</ng-template>\r\n\r\n<ng-template #defaultAvailableItemTemplate\r\n let-item>\r\n <td>{{item.label}}</td>\r\n</ng-template>\r\n\r\n<ng-template #defaultSelectedItemTemplate\r\n let-item>\r\n {{item.label}}\r\n</ng-template>", styles: [":host{display:flex}ec-searchable-table{border-right:2px solid var(--ec-border-color)}.selected-items{max-width:var(--ec-item-picker-max-width-selected-items, 50%)}.no-data-message{white-space:normal}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "ec-button", inputs: ["id", "disabled", "icon", "label", "badge", "tabindex", "type", "pending", "pendingIcon", "customTemplate", "isSubmit", "autofocus"], outputs: ["clicked"] }, { kind: "component", type: ViewOverlayComponent, selector: "[ecOverlay]", inputs: ["status", "message", "action", "noDataTemplate", "displayAsMask", "overlayClassList"] }, { kind: "component", type: TableComponent, selector: "ec-table", inputs: ["id", "scrollable", "resizable", "condensed", "sortable", "selectionContext", "selectionToolbarTemplate", "selectable", "isForm", "sort", "resizableColumns"], outputs: ["sortChange"] }, { kind: "component", type: SearchableTableComponent, selector: "ec-searchable-table", inputs: ["id", "resizable", "sortable", "sort", "autofocus", "tableClasses", "searchboxPlaceholder", "formModel", "noDataMessage", "noSearchResultsMessage", "ready", "getItems", "refresh", "status", "tableLayoutFixed", "searchboxTabIndex", "maxItemCount", "hideSearchControl", "hideHeader", "objectType", "hideFooter", "pageable", "pageSize", "maxTabs", "searchboxReadonly", "selectionContext", "selectionToolbarTemplate", "additionalCountText", "selectable", "customContentTemplate", "removeCard", "overlayClasses", "fillParentHeight"], outputs: ["sortChange", "pageChange", "itemsChange"] }, { kind: "component", type: TableSelectableRowComponent, selector: "[ecTableSelectableRow]", inputs: ["id", "ecTableSelectableRow", "selectionContext", "rowIndex", "lockedColOptions", "isSelected", "isCheckboxDisabled"] }, { kind: "component", type: LinkButtonComponent, selector: "button[ecLinkButton]" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] });
|
9373
9373
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ItemPickerComponent, decorators: [{
|
9374
9374
|
type: Component,
|
9375
|
-
args: [{ selector: 'ec-item-picker', template: "<div ecOverlay\r\n class=\"d-flex flex-grow card\"\r\n [status]=\"tableStatus?.status\"\r\n [message]=\"tableStatus?.message\"\r\n [displayAsMask]=\"true\">\r\n <ec-searchable-table id=\"{{id}}_searchableTable\"\r\n class=\"flex-grow\"\r\n [fillParentHeight]=\"true\"\r\n [hideHeader]=\"true\"\r\n [hideSearchControl]=\"true\"\r\n [removeCard]=\"true\"\r\n [pageable]=\"true\"\r\n [pageSize]=\"50\"\r\n [objectType]=\"itemName\"\r\n [formModel]=\"formModel\"\r\n [ready]=\"ready\"\r\n [getItems]=\"getItems\"\r\n [selectable]=\"true\"\r\n [noDataMessage]=\"noDataMessage\"\r\n [selectionContext]=\"selectionContext\"\r\n [status]=\"tableStatus\"\r\n (itemsChange)=\"onItemsChange($event)\"\r\n [style.--ec-searchable-table-flex-properties]=\"(availableItems.length || tableStatus.status === 'pending' || tableStatus.status === 'error' ) ? '1 1 auto' : '0 1 auto'\"\r\n [style.--ec-searchable-table-height-caption-footer]=\"'calc(2.5rem + 1px)'\"\r\n [tableLayoutFixed]=\"true\">\r\n <header *ngIf=\"customAvailableHeaderTemplate\"\r\n class=\"card-header flex-shrink\"\r\n style=\"height: 3rem;\">\r\n <h3 class=\"card-title\">{{availableTitle | translate}}</h3>\r\n </header>\r\n <thead>\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\"\r\n class=\"border-bottom-0\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableHeaderTemplate;\"></ng-container>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <ng-container *ngFor=\"let item of availableItems; index as rowIndex; trackBy: trackByIndex\">\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\"\r\n [rowIndex]=\"rowIndex\"\r\n [isCheckboxDisabled]=\"item.preventRemove\"\r\n [isSelected]=\"selectionContext?.selectedItemsMap.has(item.id)\"\r\n [style.--ec-table-selectable-row-vertical-align-checkbox-td]=\"'middle'\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableItemTemplate; context: {$implicit: item}\">\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </ec-searchable-table>\r\n\r\n <section id=\"{{id}}_selectedItems\" class=\"selected-items flex-grow d-flex flex-column\">\r\n <ec-table [scrollable]=\"true\"\r\n class=\"d-flex flex-grow is-fixed\">\r\n <colgroup>\r\n <col>\r\n <col style=\"width: 2rem;\">\r\n </colgroup>\r\n <thead>\r\n <tr style=\"height: 3rem;\">\r\n <th colspan=\"2\"\r\n class=\"p-2 border-bottom-0\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"text-heading-2 font-color-primary flex-grow text-truncate\">{{selectedTitle | translate}}</span>\r\n <a *ngIf=\"selectedItemsClearable\"\r\n id=\"{{id}}_clearSelection\"\r\n class=\"pl-2 ml-auto font-size-base\"\r\n href=\"javascript:void(0)\"\r\n (click)=\"onClearSelectionClick()\"\r\n translate>ClearSelection_TC</a>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <ng-container *ngIf=\"selectionContext.isSelectingAllItems\">\r\n <tr>\r\n <td colspan=\"2\" translate
|
9375
|
+
args: [{ selector: 'ec-item-picker', template: "<div ecOverlay\r\n class=\"d-flex flex-grow card\"\r\n [status]=\"tableStatus?.status\"\r\n [message]=\"tableStatus?.message\"\r\n [displayAsMask]=\"true\">\r\n <ec-searchable-table id=\"{{id}}_searchableTable\"\r\n class=\"flex-grow\"\r\n [fillParentHeight]=\"true\"\r\n [hideHeader]=\"true\"\r\n [hideSearchControl]=\"true\"\r\n [removeCard]=\"true\"\r\n [pageable]=\"true\"\r\n [pageSize]=\"50\"\r\n [objectType]=\"itemName\"\r\n [formModel]=\"formModel\"\r\n [ready]=\"ready\"\r\n [getItems]=\"getItems\"\r\n [selectable]=\"true\"\r\n [noDataMessage]=\"noDataMessage\"\r\n [selectionContext]=\"selectionContext\"\r\n [status]=\"tableStatus\"\r\n (itemsChange)=\"onItemsChange($event)\"\r\n [style.--ec-searchable-table-flex-properties]=\"(availableItems.length || tableStatus.status === 'pending' || tableStatus.status === 'error' ) ? '1 1 auto' : '0 1 auto'\"\r\n [style.--ec-searchable-table-height-caption-footer]=\"'calc(2.5rem + 1px)'\"\r\n [tableLayoutFixed]=\"true\">\r\n <header *ngIf=\"customAvailableHeaderTemplate\"\r\n class=\"card-header flex-shrink\"\r\n style=\"height: 3rem;\">\r\n <h3 class=\"card-title\">{{availableTitle | translate}}</h3>\r\n </header>\r\n <thead>\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\"\r\n class=\"border-bottom-0\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableHeaderTemplate;\"></ng-container>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <ng-container *ngFor=\"let item of availableItems; index as rowIndex; trackBy: trackByIndex\">\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\"\r\n [rowIndex]=\"rowIndex\"\r\n [isCheckboxDisabled]=\"item.preventRemove\"\r\n [isSelected]=\"selectionContext?.selectedItemsMap.has(item.id)\"\r\n [style.--ec-table-selectable-row-vertical-align-checkbox-td]=\"'middle'\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableItemTemplate; context: {$implicit: item}\">\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </ec-searchable-table>\r\n\r\n <section id=\"{{id}}_selectedItems\" class=\"selected-items flex-grow d-flex flex-column\">\r\n <ec-table [scrollable]=\"true\"\r\n class=\"d-flex flex-grow is-fixed\">\r\n <colgroup>\r\n <col>\r\n <col style=\"width: 2rem;\">\r\n </colgroup>\r\n <thead>\r\n <tr style=\"height: 3rem;\">\r\n <th colspan=\"2\"\r\n class=\"p-2 border-bottom-0\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"text-heading-2 font-color-primary flex-grow text-truncate\">{{selectedTitle | translate}}</span>\r\n <a *ngIf=\"selectedItemsClearable\"\r\n id=\"{{id}}_clearSelection\"\r\n class=\"pl-2 ml-auto font-size-base\"\r\n href=\"javascript:void(0)\"\r\n (click)=\"onClearSelectionClick()\"\r\n translate>ClearSelection_TC</a>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <ng-container *ngIf=\"selectionContext.isSelectingAllItems\">\r\n <tr>\r\n <td colspan=\"2\" translate innerHtml=\"allSelectedItemsMessage | translate\"></td>\r\n </tr>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"selectedItems.length && !selectionContext.isSelectingAllItems\">\r\n <tr *ngFor=\"let item of selectedItems; last as isLast\"\r\n id=\"selected_row_{{item.id}}\"\r\n [class.border-bottom]=\"!isLast\">\r\n <td class=\"p-2\">\r\n <ng-container\r\n *ngTemplateOutlet=\"internalizedSelectedItemTemplate; context: {$implicit: item}\">\r\n </ng-container>\r\n </td>\r\n\r\n <td class=\"actions-col text-right\"\r\n style=\"vertical-align: middle;\">\r\n <ec-button id=\"{{id}}_removeSelected_{{item.id}}\"\r\n *ngIf=\"!item.preventRemove\"\r\n type=\"icon\"\r\n icon=\"ec-icon icon-cancel\"\r\n (clicked)=\"removeSelectedItem(item)\">\r\n </ec-button>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n <tr *ngIf=\"!selectedItems.length\">\r\n <td *ngIf=\"!noSelectedItemsMessage\"\r\n colspan=\"2\"\r\n class=\"p-2 no-data-message\"\r\n translate\r\n [translateParams]=\"{itemName: itemName | translate}\">ItemPickerNoItemsSelected_SC</td>\r\n <td *ngIf=\"noSelectedItemsMessage\"\r\n colspan=\"2\"\r\n class=\"p-2 no-data-message\"\r\n translate>{{noSelectedItemsMessage}}</td>\r\n </tr>\r\n </tbody>\r\n </ec-table>\r\n\r\n <footer id=\"selectedItemsFooter\"\r\n *ngIf=\"selectedItems.length && !selectionContext.isSelectingAllItems\"\r\n class=\"d-flex flex-shrink px-2 border-top align-items-center\"\r\n style=\"height: calc(2.5rem + 1px);\">\r\n <span class=\"ml-auto text-caption-1 font-color-hint\">\r\n {{selectedItems.length}} {{itemName | translate}}\r\n </span>\r\n </footer>\r\n </section>\r\n</div>\r\n\r\n<ng-template #defaultAvailableHeaderTemplate>\r\n <th class=\"text-heading-2 font-color-primary border-bottom-0\">{{availableTitle | translate}}</th>\r\n</ng-template>\r\n\r\n<ng-template #defaultAvailableSelectAllHeaderTemplate>\r\n <th class=\"text-heading-2 font-color-primary border-bottom-0\">\r\n <div class=\"d-flex align-items-center \">\r\n <span *ngIf=\"!masterCheckboxText\"\r\n class=\"text-truncate\">{{availableTitle | translate}}</span>\r\n <span *ngIf=\"masterCheckboxText\"\r\n id=\"selectedCount\">{{masterCheckboxText}}</span>\r\n <button *ngIf=\"showSelectAllItemsLink\"\r\n ecLinkButton\r\n id=\"selectAllItemsLink\"\r\n (click)=\"selectAllItems()\"\r\n class=\"ml-2\">\r\n {{ ('SelectAllItemPickerItems_TC') | translate:{ count: totalCount, itemName: itemName } }}\r\n </button>\r\n </div>\r\n </th>\r\n</ng-template>\r\n\r\n<ng-template #defaultAvailableItemTemplate\r\n let-item>\r\n <td>{{item.label}}</td>\r\n</ng-template>\r\n\r\n<ng-template #defaultSelectedItemTemplate\r\n let-item>\r\n {{item.label}}\r\n</ng-template>", styles: [":host{display:flex}ec-searchable-table{border-right:2px solid var(--ec-border-color)}.selected-items{max-width:var(--ec-item-picker-max-width-selected-items, 50%)}.no-data-message{white-space:normal}\n"] }]
|
9376
9376
|
}], ctorParameters: function () { return [{ type: i3.TranslateService }]; }, propDecorators: { id: [{
|
9377
9377
|
type: Input
|
9378
9378
|
}], availableTitle: [{
|