@energycap/components 0.39.27-ECAP-26376-Add-Sub-Accounts-Dialog.20241001-1406 → 0.39.27-ECAP-26661-delete-site-updates-product-aware-confirm.20241001-1521

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.
@@ -110,8 +110,6 @@ export class SearchableTableComponent {
110
110
  this.overlayClasses = '';
111
111
  /** When true the overlay and table will not have flex-shrink-max but instead flex-grow */
112
112
  this.fillParentHeight = false;
113
- /** Passed to the pagination control component. Used to disable the pagination controls */
114
- this.disablePaginationControls = false;
115
113
  /**
116
114
  * Text displayed in the footer.
117
115
  * Sometimes `noDataMessage`, sometimes `noSearchResultsMessage`
@@ -256,10 +254,10 @@ export class SearchableTableComponent {
256
254
  }
257
255
  }
258
256
  SearchableTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SearchableTableComponent, deps: [{ token: i1.ErrorService }, { token: i2.TranslateService }, { token: i3.RowCountPipe }], target: i0.ɵɵFactoryTarget.Component });
259
- SearchableTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: SearchableTableComponent, selector: "ec-searchable-table", inputs: { id: "id", resizable: "resizable", sortable: "sortable", sort: "sort", autofocus: "autofocus", tableClasses: "tableClasses", searchboxPlaceholder: "searchboxPlaceholder", formModel: "formModel", noDataMessage: "noDataMessage", noSearchResultsMessage: "noSearchResultsMessage", ready: "ready", getItems: "getItems", refresh: "refresh", status: "status", tableLayoutFixed: "tableLayoutFixed", searchboxTabIndex: "searchboxTabIndex", maxItemCount: "maxItemCount", hideSearchControl: "hideSearchControl", hideHeader: "hideHeader", objectType: "objectType", hideFooter: "hideFooter", pageable: "pageable", pageSize: "pageSize", maxTabs: "maxTabs", searchboxReadonly: "searchboxReadonly", selectionContext: "selectionContext", selectionToolbarTemplate: "selectionToolbarTemplate", additionalCountText: "additionalCountText", selectable: "selectable", customContentTemplate: "customContentTemplate", removeCard: "removeCard", overlayClasses: "overlayClasses", fillParentHeight: "fillParentHeight", disablePaginationControls: "disablePaginationControls" }, outputs: { sortChange: "sortChange", pageChangeEmitter: "pageChange", itemsChange: "itemsChange" }, queries: [{ propertyName: "resizableColumns", predicate: ResizableColumnComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<header *ngIf=\"!hideHeader\"\r\n class=\"d-flex flex-shrink align-items-center mb-3\">\r\n <ec-textbox id=\"{{id}}_searchbox\"\r\n *ngIf=\"!hideSearchControl\"\r\n class=\"mb-0 flex-grow mr-2\"\r\n [autofocus]=\"autofocus\"\r\n [formModel]=\"searchModel\"\r\n [tabindex]=\"searchboxTabIndex\"\r\n [placeholder]=\"searchboxPlaceholder\"\r\n [readonly]=\"searchboxReadonly\"></ec-textbox>\r\n <div class=\"flex-grow\">\r\n <ng-content select=\".searchable-table-controls\"></ng-content>\r\n </div>\r\n</header>\r\n<section id=\"{{id}}_card\"\r\n class=\"d-flex flex-column {{overlayClasses}}\"\r\n [ngClass]=\"{'is-translucent': status.status !== 'error', 'has-mask': status.status !== 'hasData', 'card m-0 bg-content': !customContentTemplate && !removeCard}\"\r\n ecOverlay\r\n [status]=\"status.status\"\r\n [message]=\"status.message\"\r\n [displayAsMask]=\"true\">\r\n <ng-content select=\".card-header\"></ng-content>\r\n <ng-container *ngTemplateOutlet=\"customContentTemplate || defaultContentTemplate\">\r\n </ng-container>\r\n\r\n <!-- the default template is an ec-table with proxied-over searchable table inputs. \r\n If that doesn't work for you then you can specify a customContentTemplate to use instead\r\n and still retain all the event handling, header, footer pagination, etc support -->\r\n <ng-template #defaultContentTemplate>\r\n <ec-table id=\"{{id}}_table\"\r\n class=\"{{tableClasses}}\"\r\n [class.is-fixed]=\"tableLayoutFixed\"\r\n [sortable]=\"sortable\"\r\n [sort]=\"sort\"\r\n (sortChange)=\"onSortChange($event)\"\r\n [resizable]=\"resizable\"\r\n [scrollable]=\"true\"\r\n [selectable]=\"selectable\"\r\n [selectionContext]=\"selectionContext\"\r\n [selectionToolbarTemplate]=\"selectionToolbarTemplate\"\r\n [resizableColumns]=\"resizableColumns\">\r\n <ng-content></ng-content>\r\n </ec-table>\r\n </ng-template>\r\n\r\n <!-- pagination footer visible if table is page-able and there are more than one page of results -->\r\n <footer *ngIf=\"!hideFooter && pageable && searchResults.totalItemsBeforePaging! > pageSize!\"\r\n class=\"pagination-footer\"\r\n [class.border-top]=\"!customContentTemplate\">\r\n <ec-table-pagination id=\"{{id}}_pager\"\r\n class=\"font-color-primary\"\r\n [totalItems]=\"searchResults.totalItemsBeforePaging\"\r\n [pageSize]=\"pageSize\"\r\n [maxTabs]=\"maxTabs\"\r\n [pageNumber]=\"pageInfo?.pageNumber\"\r\n [disablePaginationControls]=\"disablePaginationControls\"\r\n (pageChanged)=\"onPageChange($event)\">\r\n </ec-table-pagination>\r\n <div id=\"resultsCount\"\r\n *ngIf=\"searchResults?.items?.length\"\r\n class=\"ml-auto font-color-hint text-truncate\" \r\n title=\"{{resultsCount}} {{additionalCountText}}\">{{resultsCount}} {{additionalCountText}}</div>\r\n </footer>\r\n\r\n <!-- default footer: visible if hideFooter is false and table is not page-able or there are only one page of results (always shows if there is a caption to indicate no results) -->\r\n <footer *ngIf=\"(!hideFooter && (!pageable || searchResults.totalItemsBeforePaging! <= pageSize!)) || tableCaption\"\r\n class=\"caption-footer\"\r\n [ngClass]=\"{'has-results': searchResults?.items?.length, 'border-top': searchResults?.items?.length && !customContentTemplate}\">\r\n <ng-content *ngIf=\"!tableCaption\"\r\n select=\".searchable-table-footer\"></ng-content>\r\n <div id=\"tableCaption\"\r\n *ngIf=\"tableCaption\"\r\n [innerHTML]=\"tableCaption\"></div>\r\n <div id=\"resultsCount\"\r\n *ngIf=\"searchResults?.items?.length\"\r\n class=\"ml-auto text-truncate\"\r\n title=\"{{resultsCount}} {{additionalCountText}}\">{{resultsCount}} {{additionalCountText}}</div>\r\n </footer>\r\n</section>", styles: [":host{--ec-searchable-table-flex-properties: 0 1 auto;--ec-searchable-table-flex-overlay-section: var(--ec-searchable-table-flex-properties, 0 1 auto);--ec-searchable-table-flex-ec-table: var(--ec-searchable-table-flex-properties, 0 1 auto);display:flex;flex-direction:column;flex:1 1;min-height:0}:host ::ng-deep .card-header+ec-table.is-selectable th{height:2.5rem;padding-bottom:.9375rem}:host ::ng-deep .card-header+ec-table.is-selectable th.is-resizable .handle{padding-top:.5rem}:host ::ng-deep .card-header+ec-table.is-selectable th.is-resizable .handle:before{top:.5rem}:host ::ng-deep .card-header+ec-table.is-selectable .selectable-table-toolbar{height:2.5rem;padding-bottom:.5rem}section{flex:var(--ec-searchable-table-flex-overlay-section);min-height:0}ec-table{flex:var(--ec-searchable-table-flex-ec-table);min-height:0}footer{display:flex;align-items:center;flex:none;font-size:var(--ec-font-size-label);line-height:1rem}footer.has-results{color:var(--ec-color-hint-dark);text-align:right}.pagination-footer{padding:0 .5rem 0 0}.caption-footer{padding:.5rem;height:var(--ec-searchable-table-height-caption-footer)}.card.has-mask{min-height:15rem}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.TextboxComponent, selector: "ec-textbox", inputs: ["autocomplete", "type", "placeholder", "maxlength", "minlength", "rows", "selectOnAutofocus", "upperCase"] }, { kind: "component", type: i6.ViewOverlayComponent, selector: "[ecOverlay]", inputs: ["status", "message", "action", "noDataTemplate", "displayAsMask", "overlayClassList"] }, { kind: "component", type: i7.TableComponent, selector: "ec-table", inputs: ["id", "scrollable", "resizable", "condensed", "sortable", "selectionContext", "selectionToolbarTemplate", "selectable", "isForm", "sort", "resizableColumns"], outputs: ["sortChange"] }, { kind: "component", type: i8.TablePaginationComponent, selector: "ec-table-pagination", inputs: ["id", "totalItems", "pageSize", "pageNumber", "maxTabs", "disablePaginationControls"], outputs: ["pageChanged"] }] });
257
+ SearchableTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: SearchableTableComponent, selector: "ec-searchable-table", inputs: { id: "id", resizable: "resizable", sortable: "sortable", sort: "sort", autofocus: "autofocus", tableClasses: "tableClasses", searchboxPlaceholder: "searchboxPlaceholder", formModel: "formModel", noDataMessage: "noDataMessage", noSearchResultsMessage: "noSearchResultsMessage", ready: "ready", getItems: "getItems", refresh: "refresh", status: "status", tableLayoutFixed: "tableLayoutFixed", searchboxTabIndex: "searchboxTabIndex", maxItemCount: "maxItemCount", hideSearchControl: "hideSearchControl", hideHeader: "hideHeader", objectType: "objectType", hideFooter: "hideFooter", pageable: "pageable", pageSize: "pageSize", maxTabs: "maxTabs", searchboxReadonly: "searchboxReadonly", selectionContext: "selectionContext", selectionToolbarTemplate: "selectionToolbarTemplate", additionalCountText: "additionalCountText", selectable: "selectable", customContentTemplate: "customContentTemplate", removeCard: "removeCard", overlayClasses: "overlayClasses", fillParentHeight: "fillParentHeight" }, outputs: { sortChange: "sortChange", pageChangeEmitter: "pageChange", itemsChange: "itemsChange" }, queries: [{ propertyName: "resizableColumns", predicate: ResizableColumnComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<header *ngIf=\"!hideHeader\"\r\n class=\"d-flex flex-shrink align-items-center mb-3\">\r\n <ec-textbox id=\"{{id}}_searchbox\"\r\n *ngIf=\"!hideSearchControl\"\r\n class=\"mb-0 flex-grow mr-2\"\r\n [autofocus]=\"autofocus\"\r\n [formModel]=\"searchModel\"\r\n [tabindex]=\"searchboxTabIndex\"\r\n [placeholder]=\"searchboxPlaceholder\"\r\n [readonly]=\"searchboxReadonly\"></ec-textbox>\r\n <div class=\"flex-grow\">\r\n <ng-content select=\".searchable-table-controls\"></ng-content>\r\n </div>\r\n</header>\r\n<section id=\"{{id}}_card\"\r\n class=\"d-flex flex-column {{overlayClasses}}\"\r\n [ngClass]=\"{'is-translucent': status.status !== 'error', 'has-mask': status.status !== 'hasData', 'card m-0 bg-content': !customContentTemplate && !removeCard}\"\r\n ecOverlay\r\n [status]=\"status.status\"\r\n [message]=\"status.message\"\r\n [displayAsMask]=\"true\">\r\n <ng-content select=\".card-header\"></ng-content>\r\n <ng-container *ngTemplateOutlet=\"customContentTemplate || defaultContentTemplate\">\r\n </ng-container>\r\n\r\n <!-- the default template is an ec-table with proxied-over searchable table inputs. \r\n If that doesn't work for you then you can specify a customContentTemplate to use instead\r\n and still retain all the event handling, header, footer pagination, etc support -->\r\n <ng-template #defaultContentTemplate>\r\n <ec-table id=\"{{id}}_table\"\r\n class=\"{{tableClasses}}\"\r\n [class.is-fixed]=\"tableLayoutFixed\"\r\n [sortable]=\"sortable\"\r\n [sort]=\"sort\"\r\n (sortChange)=\"onSortChange($event)\"\r\n [resizable]=\"resizable\"\r\n [scrollable]=\"true\"\r\n [selectable]=\"selectable\"\r\n [selectionContext]=\"selectionContext\"\r\n [selectionToolbarTemplate]=\"selectionToolbarTemplate\"\r\n [resizableColumns]=\"resizableColumns\">\r\n <ng-content></ng-content>\r\n </ec-table>\r\n </ng-template>\r\n\r\n <!-- pagination footer visible if table is page-able and there are more than one page of results -->\r\n <footer *ngIf=\"!hideFooter && pageable && searchResults.totalItemsBeforePaging! > pageSize!\"\r\n class=\"pagination-footer\"\r\n [class.border-top]=\"!customContentTemplate\">\r\n <ec-table-pagination id=\"{{id}}_pager\"\r\n class=\"font-color-primary\"\r\n [totalItems]=\"searchResults.totalItemsBeforePaging\"\r\n [pageSize]=\"pageSize\"\r\n [maxTabs]=\"maxTabs\"\r\n [pageNumber]=\"pageInfo?.pageNumber\"\r\n (pageChanged)=\"onPageChange($event)\">\r\n </ec-table-pagination>\r\n <div id=\"resultsCount\"\r\n *ngIf=\"searchResults?.items?.length\"\r\n class=\"ml-auto font-color-hint text-truncate\" \r\n title=\"{{resultsCount}} {{additionalCountText}}\">{{resultsCount}} {{additionalCountText}}</div>\r\n </footer>\r\n\r\n <!-- default footer: visible if hideFooter is false and table is not page-able or there are only one page of results (always shows if there is a caption to indicate no results) -->\r\n <footer *ngIf=\"(!hideFooter && (!pageable || searchResults.totalItemsBeforePaging! <= pageSize!)) || tableCaption\"\r\n class=\"caption-footer\"\r\n [ngClass]=\"{'has-results': searchResults?.items?.length, 'border-top': searchResults?.items?.length && !customContentTemplate}\">\r\n <ng-content *ngIf=\"!tableCaption\"\r\n select=\".searchable-table-footer\"></ng-content>\r\n <div id=\"tableCaption\"\r\n *ngIf=\"tableCaption\"\r\n [innerHTML]=\"tableCaption\"></div>\r\n <div id=\"resultsCount\"\r\n *ngIf=\"searchResults?.items?.length\"\r\n class=\"ml-auto text-truncate\"\r\n title=\"{{resultsCount}} {{additionalCountText}}\">{{resultsCount}} {{additionalCountText}}</div>\r\n </footer>\r\n</section>", styles: [":host{--ec-searchable-table-flex-properties: 0 1 auto;--ec-searchable-table-flex-overlay-section: var(--ec-searchable-table-flex-properties, 0 1 auto);--ec-searchable-table-flex-ec-table: var(--ec-searchable-table-flex-properties, 0 1 auto);display:flex;flex-direction:column;flex:1 1;min-height:0}:host ::ng-deep .card-header+ec-table.is-selectable th{height:2.5rem;padding-bottom:.9375rem}:host ::ng-deep .card-header+ec-table.is-selectable th.is-resizable .handle{padding-top:.5rem}:host ::ng-deep .card-header+ec-table.is-selectable th.is-resizable .handle:before{top:.5rem}:host ::ng-deep .card-header+ec-table.is-selectable .selectable-table-toolbar{height:2.5rem;padding-bottom:.5rem}section{flex:var(--ec-searchable-table-flex-overlay-section);min-height:0}ec-table{flex:var(--ec-searchable-table-flex-ec-table);min-height:0}footer{display:flex;align-items:center;flex:none;font-size:var(--ec-font-size-label);line-height:1rem}footer.has-results{color:var(--ec-color-hint-dark);text-align:right}.pagination-footer{padding:0 .5rem 0 0}.caption-footer{padding:.5rem;height:var(--ec-searchable-table-height-caption-footer)}.card.has-mask{min-height:15rem}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.TextboxComponent, selector: "ec-textbox", inputs: ["autocomplete", "type", "placeholder", "maxlength", "minlength", "rows", "selectOnAutofocus", "upperCase"] }, { kind: "component", type: i6.ViewOverlayComponent, selector: "[ecOverlay]", inputs: ["status", "message", "action", "noDataTemplate", "displayAsMask", "overlayClassList"] }, { kind: "component", type: i7.TableComponent, selector: "ec-table", inputs: ["id", "scrollable", "resizable", "condensed", "sortable", "selectionContext", "selectionToolbarTemplate", "selectable", "isForm", "sort", "resizableColumns"], outputs: ["sortChange"] }, { kind: "component", type: i8.TablePaginationComponent, selector: "ec-table-pagination", inputs: ["id", "totalItems", "pageSize", "pageNumber", "maxTabs"], outputs: ["pageChanged"] }] });
260
258
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SearchableTableComponent, decorators: [{
261
259
  type: Component,
262
- args: [{ selector: 'ec-searchable-table', template: "<header *ngIf=\"!hideHeader\"\r\n class=\"d-flex flex-shrink align-items-center mb-3\">\r\n <ec-textbox id=\"{{id}}_searchbox\"\r\n *ngIf=\"!hideSearchControl\"\r\n class=\"mb-0 flex-grow mr-2\"\r\n [autofocus]=\"autofocus\"\r\n [formModel]=\"searchModel\"\r\n [tabindex]=\"searchboxTabIndex\"\r\n [placeholder]=\"searchboxPlaceholder\"\r\n [readonly]=\"searchboxReadonly\"></ec-textbox>\r\n <div class=\"flex-grow\">\r\n <ng-content select=\".searchable-table-controls\"></ng-content>\r\n </div>\r\n</header>\r\n<section id=\"{{id}}_card\"\r\n class=\"d-flex flex-column {{overlayClasses}}\"\r\n [ngClass]=\"{'is-translucent': status.status !== 'error', 'has-mask': status.status !== 'hasData', 'card m-0 bg-content': !customContentTemplate && !removeCard}\"\r\n ecOverlay\r\n [status]=\"status.status\"\r\n [message]=\"status.message\"\r\n [displayAsMask]=\"true\">\r\n <ng-content select=\".card-header\"></ng-content>\r\n <ng-container *ngTemplateOutlet=\"customContentTemplate || defaultContentTemplate\">\r\n </ng-container>\r\n\r\n <!-- the default template is an ec-table with proxied-over searchable table inputs. \r\n If that doesn't work for you then you can specify a customContentTemplate to use instead\r\n and still retain all the event handling, header, footer pagination, etc support -->\r\n <ng-template #defaultContentTemplate>\r\n <ec-table id=\"{{id}}_table\"\r\n class=\"{{tableClasses}}\"\r\n [class.is-fixed]=\"tableLayoutFixed\"\r\n [sortable]=\"sortable\"\r\n [sort]=\"sort\"\r\n (sortChange)=\"onSortChange($event)\"\r\n [resizable]=\"resizable\"\r\n [scrollable]=\"true\"\r\n [selectable]=\"selectable\"\r\n [selectionContext]=\"selectionContext\"\r\n [selectionToolbarTemplate]=\"selectionToolbarTemplate\"\r\n [resizableColumns]=\"resizableColumns\">\r\n <ng-content></ng-content>\r\n </ec-table>\r\n </ng-template>\r\n\r\n <!-- pagination footer visible if table is page-able and there are more than one page of results -->\r\n <footer *ngIf=\"!hideFooter && pageable && searchResults.totalItemsBeforePaging! > pageSize!\"\r\n class=\"pagination-footer\"\r\n [class.border-top]=\"!customContentTemplate\">\r\n <ec-table-pagination id=\"{{id}}_pager\"\r\n class=\"font-color-primary\"\r\n [totalItems]=\"searchResults.totalItemsBeforePaging\"\r\n [pageSize]=\"pageSize\"\r\n [maxTabs]=\"maxTabs\"\r\n [pageNumber]=\"pageInfo?.pageNumber\"\r\n [disablePaginationControls]=\"disablePaginationControls\"\r\n (pageChanged)=\"onPageChange($event)\">\r\n </ec-table-pagination>\r\n <div id=\"resultsCount\"\r\n *ngIf=\"searchResults?.items?.length\"\r\n class=\"ml-auto font-color-hint text-truncate\" \r\n title=\"{{resultsCount}} {{additionalCountText}}\">{{resultsCount}} {{additionalCountText}}</div>\r\n </footer>\r\n\r\n <!-- default footer: visible if hideFooter is false and table is not page-able or there are only one page of results (always shows if there is a caption to indicate no results) -->\r\n <footer *ngIf=\"(!hideFooter && (!pageable || searchResults.totalItemsBeforePaging! <= pageSize!)) || tableCaption\"\r\n class=\"caption-footer\"\r\n [ngClass]=\"{'has-results': searchResults?.items?.length, 'border-top': searchResults?.items?.length && !customContentTemplate}\">\r\n <ng-content *ngIf=\"!tableCaption\"\r\n select=\".searchable-table-footer\"></ng-content>\r\n <div id=\"tableCaption\"\r\n *ngIf=\"tableCaption\"\r\n [innerHTML]=\"tableCaption\"></div>\r\n <div id=\"resultsCount\"\r\n *ngIf=\"searchResults?.items?.length\"\r\n class=\"ml-auto text-truncate\"\r\n title=\"{{resultsCount}} {{additionalCountText}}\">{{resultsCount}} {{additionalCountText}}</div>\r\n </footer>\r\n</section>", styles: [":host{--ec-searchable-table-flex-properties: 0 1 auto;--ec-searchable-table-flex-overlay-section: var(--ec-searchable-table-flex-properties, 0 1 auto);--ec-searchable-table-flex-ec-table: var(--ec-searchable-table-flex-properties, 0 1 auto);display:flex;flex-direction:column;flex:1 1;min-height:0}:host ::ng-deep .card-header+ec-table.is-selectable th{height:2.5rem;padding-bottom:.9375rem}:host ::ng-deep .card-header+ec-table.is-selectable th.is-resizable .handle{padding-top:.5rem}:host ::ng-deep .card-header+ec-table.is-selectable th.is-resizable .handle:before{top:.5rem}:host ::ng-deep .card-header+ec-table.is-selectable .selectable-table-toolbar{height:2.5rem;padding-bottom:.5rem}section{flex:var(--ec-searchable-table-flex-overlay-section);min-height:0}ec-table{flex:var(--ec-searchable-table-flex-ec-table);min-height:0}footer{display:flex;align-items:center;flex:none;font-size:var(--ec-font-size-label);line-height:1rem}footer.has-results{color:var(--ec-color-hint-dark);text-align:right}.pagination-footer{padding:0 .5rem 0 0}.caption-footer{padding:.5rem;height:var(--ec-searchable-table-height-caption-footer)}.card.has-mask{min-height:15rem}\n"] }]
260
+ args: [{ selector: 'ec-searchable-table', template: "<header *ngIf=\"!hideHeader\"\r\n class=\"d-flex flex-shrink align-items-center mb-3\">\r\n <ec-textbox id=\"{{id}}_searchbox\"\r\n *ngIf=\"!hideSearchControl\"\r\n class=\"mb-0 flex-grow mr-2\"\r\n [autofocus]=\"autofocus\"\r\n [formModel]=\"searchModel\"\r\n [tabindex]=\"searchboxTabIndex\"\r\n [placeholder]=\"searchboxPlaceholder\"\r\n [readonly]=\"searchboxReadonly\"></ec-textbox>\r\n <div class=\"flex-grow\">\r\n <ng-content select=\".searchable-table-controls\"></ng-content>\r\n </div>\r\n</header>\r\n<section id=\"{{id}}_card\"\r\n class=\"d-flex flex-column {{overlayClasses}}\"\r\n [ngClass]=\"{'is-translucent': status.status !== 'error', 'has-mask': status.status !== 'hasData', 'card m-0 bg-content': !customContentTemplate && !removeCard}\"\r\n ecOverlay\r\n [status]=\"status.status\"\r\n [message]=\"status.message\"\r\n [displayAsMask]=\"true\">\r\n <ng-content select=\".card-header\"></ng-content>\r\n <ng-container *ngTemplateOutlet=\"customContentTemplate || defaultContentTemplate\">\r\n </ng-container>\r\n\r\n <!-- the default template is an ec-table with proxied-over searchable table inputs. \r\n If that doesn't work for you then you can specify a customContentTemplate to use instead\r\n and still retain all the event handling, header, footer pagination, etc support -->\r\n <ng-template #defaultContentTemplate>\r\n <ec-table id=\"{{id}}_table\"\r\n class=\"{{tableClasses}}\"\r\n [class.is-fixed]=\"tableLayoutFixed\"\r\n [sortable]=\"sortable\"\r\n [sort]=\"sort\"\r\n (sortChange)=\"onSortChange($event)\"\r\n [resizable]=\"resizable\"\r\n [scrollable]=\"true\"\r\n [selectable]=\"selectable\"\r\n [selectionContext]=\"selectionContext\"\r\n [selectionToolbarTemplate]=\"selectionToolbarTemplate\"\r\n [resizableColumns]=\"resizableColumns\">\r\n <ng-content></ng-content>\r\n </ec-table>\r\n </ng-template>\r\n\r\n <!-- pagination footer visible if table is page-able and there are more than one page of results -->\r\n <footer *ngIf=\"!hideFooter && pageable && searchResults.totalItemsBeforePaging! > pageSize!\"\r\n class=\"pagination-footer\"\r\n [class.border-top]=\"!customContentTemplate\">\r\n <ec-table-pagination id=\"{{id}}_pager\"\r\n class=\"font-color-primary\"\r\n [totalItems]=\"searchResults.totalItemsBeforePaging\"\r\n [pageSize]=\"pageSize\"\r\n [maxTabs]=\"maxTabs\"\r\n [pageNumber]=\"pageInfo?.pageNumber\"\r\n (pageChanged)=\"onPageChange($event)\">\r\n </ec-table-pagination>\r\n <div id=\"resultsCount\"\r\n *ngIf=\"searchResults?.items?.length\"\r\n class=\"ml-auto font-color-hint text-truncate\" \r\n title=\"{{resultsCount}} {{additionalCountText}}\">{{resultsCount}} {{additionalCountText}}</div>\r\n </footer>\r\n\r\n <!-- default footer: visible if hideFooter is false and table is not page-able or there are only one page of results (always shows if there is a caption to indicate no results) -->\r\n <footer *ngIf=\"(!hideFooter && (!pageable || searchResults.totalItemsBeforePaging! <= pageSize!)) || tableCaption\"\r\n class=\"caption-footer\"\r\n [ngClass]=\"{'has-results': searchResults?.items?.length, 'border-top': searchResults?.items?.length && !customContentTemplate}\">\r\n <ng-content *ngIf=\"!tableCaption\"\r\n select=\".searchable-table-footer\"></ng-content>\r\n <div id=\"tableCaption\"\r\n *ngIf=\"tableCaption\"\r\n [innerHTML]=\"tableCaption\"></div>\r\n <div id=\"resultsCount\"\r\n *ngIf=\"searchResults?.items?.length\"\r\n class=\"ml-auto text-truncate\"\r\n title=\"{{resultsCount}} {{additionalCountText}}\">{{resultsCount}} {{additionalCountText}}</div>\r\n </footer>\r\n</section>", styles: [":host{--ec-searchable-table-flex-properties: 0 1 auto;--ec-searchable-table-flex-overlay-section: var(--ec-searchable-table-flex-properties, 0 1 auto);--ec-searchable-table-flex-ec-table: var(--ec-searchable-table-flex-properties, 0 1 auto);display:flex;flex-direction:column;flex:1 1;min-height:0}:host ::ng-deep .card-header+ec-table.is-selectable th{height:2.5rem;padding-bottom:.9375rem}:host ::ng-deep .card-header+ec-table.is-selectable th.is-resizable .handle{padding-top:.5rem}:host ::ng-deep .card-header+ec-table.is-selectable th.is-resizable .handle:before{top:.5rem}:host ::ng-deep .card-header+ec-table.is-selectable .selectable-table-toolbar{height:2.5rem;padding-bottom:.5rem}section{flex:var(--ec-searchable-table-flex-overlay-section);min-height:0}ec-table{flex:var(--ec-searchable-table-flex-ec-table);min-height:0}footer{display:flex;align-items:center;flex:none;font-size:var(--ec-font-size-label);line-height:1rem}footer.has-results{color:var(--ec-color-hint-dark);text-align:right}.pagination-footer{padding:0 .5rem 0 0}.caption-footer{padding:.5rem;height:var(--ec-searchable-table-height-caption-footer)}.card.has-mask{min-height:15rem}\n"] }]
263
261
  }], ctorParameters: function () { return [{ type: i1.ErrorService }, { type: i2.TranslateService }, { type: i3.RowCountPipe }]; }, propDecorators: { id: [{
264
262
  type: Input
265
263
  }], resizable: [{
@@ -336,7 +334,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
336
334
  type: Input
337
335
  }], fillParentHeight: [{
338
336
  type: Input
339
- }], disablePaginationControls: [{
340
- type: Input
341
337
  }] } });
342
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoYWJsZS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS90YWJsZS9zZWFyY2hhYmxlLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9kaXNwbGF5L3RhYmxlL3NlYXJjaGFibGUtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBZ0MsTUFBTSxFQUF5QyxNQUFNLGVBQWUsQ0FBQztBQUc3SixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc1RyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDakUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFjLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7Ozs7QUFjcEYsTUFBTSxPQUFPLHdCQUF3QjtJQTRLbkMsbUNBQW1DO0lBQ25DLElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQWlDLENBQUM7SUFDbkUsQ0FBQztJQTBCRCxZQUNVLFlBQTBCLEVBQzFCLGdCQUFrQyxFQUNsQyxZQUEwQjtRQUYxQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENB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bEIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBc0JHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csUUFBUTtzQkFBaEIsS0FBSztnQkFLRyxPQUFPO3NCQUFmLEtBQUs7Z0JBS0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUdHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBRTBELGdCQUFnQjtzQkFBL0UsZUFBZTt1QkFBQyx3QkFBd0IsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUM7Z0JBR3JELG1CQUFtQjtzQkFBM0IsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUlHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBR0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLHlCQUF5QjtzQkFBakMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEVNUFRZLCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWJvdW5jZVRpbWUsIG1hcCwgcGx1Y2ssIHNraXBVbnRpbCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRXJyb3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9lcnJvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUm93Q291bnRQaXBlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Rpc3BsYXkvcGlwZXMvcm93LWNvdW50LnBpcGUnO1xyXG5pbXBvcnQgeyBPdmVybGF5IH0gZnJvbSAnLi4vdmlldy1vdmVybGF5L3ZpZXctb3ZlcmxheS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSZXNpemFibGVDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuL3Jlc2l6YWJsZS1jb2x1bW4uY29tcG9uZW50JztcclxuaW1wb3J0IHsgUGFnaW5nSW5mbywgVGFibGVQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS1wYWdpbmF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRhYmxlU2VsZWN0YWJsZVJvd0NvbnRleHQgfSBmcm9tICcuL3RhYmxlLXNlbGVjdGFibGUtcm93LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRhYmxlU29ydCB9IGZyb20gJy4vdGFibGUuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCB0eXBlIFRhYmxlU2VhcmNoUmVzdWx0cyA9IHsgaXRlbXM6IHVua25vd25bXSwgdG90YWxJdGVtczogbnVtYmVyLCB0b3RhbEl0ZW1zQmVmb3JlUGFnaW5nPzogbnVtYmVyIH07XHJcbmV4cG9ydCB0eXBlIFNlYXJjaGFibGVUYWJsZVJlZnJlc2hPcHRpb25zID0geyBjbGVhclNlYXJjaD86IGJvb2xlYW4gfTtcclxuXHJcbnR5cGUgU2VhcmNoYWJsZVRhYmxlRm9ybU1vZGVsID0geyBzZWFyY2hNb2RlbD86IHN0cmluZyB9O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdlYy1zZWFyY2hhYmxlLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoYWJsZS10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2VhcmNoYWJsZS10YWJsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZWFyY2hhYmxlVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcclxuXHJcbiAgQElucHV0KCkgaWQgPSAnJztcclxuICBASW5wdXQoKSByZXNpemFibGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBzb3J0YWJsZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNvcnQ/OiBUYWJsZVNvcnQ7XHJcbiAgQElucHV0KCkgYXV0b2ZvY3VzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlNldCB0byBhIHNwYWNlLXNlcGFyYXRlZCBzZXQgb2Ygc3RyaW5ncyB0aGF0IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgZWMtdGFibGUgY2xhc3MgYXR0cmlidXRlXHJcbiAgICogdGhpcyBhbGxvd3MgZmluZXIgY29udHJvbCBvdmVyIHN0eWxpbmcuXHJcbiAgICovXHJcbiAgQElucHV0KCkgdGFibGVDbGFzc2VzOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIEVtaXRzIHdoZW4gdGFibGUgc29ydCBoYXMgY2hhbmdlZCAqL1xyXG4gIEBPdXRwdXQoKSBzb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8VGFibGVTb3J0PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVTb3J0PigpO1xyXG5cclxuICAvKiogRW1pdHMgd2hlbiB0aGUgdGFibGUgcGFnZSBoYXMgY2hhbmdlZCAqL1xyXG4gIEBPdXRwdXQoJ3BhZ2VDaGFuZ2UnKSBwYWdlQ2hhbmdlRW1pdHRlcjogRXZlbnRFbWl0dGVyPFBhZ2luZ0luZm8+ID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdpbmdJbmZvPigpO1xyXG5cclxuICAvKiogUGxhY2Vob2xkZXIgdGV4dCBmb3IgdGhlIHNlYXJjaGJveCAqL1xyXG4gIEBJbnB1dCgpIHNlYXJjaGJveFBsYWNlaG9sZGVyID0gJyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcm1Hcm91cCBmb3IgdGhlIHNlYXJjaGJveFxyXG4gICAqXHJcbiAgICogVGhlIHJlZmVyZW5jZWQgRm9ybUdyb3VwICoqbXVzdCoqIGNvbnRhaW4gYSBGb3JtQ29udHJvbCBjYWxsZWQgJ3NlYXJjaE1vZGVsJy5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZm9ybU1vZGVsITogVW50eXBlZEZvcm1Hcm91cDtcclxuXHJcbiAgLyoqXHJcbiAgICogRGlzcGxheWVkIGluIG92ZXJsYXkgd2hlbiBubyBkYXRhIGlzIHJldHVybmVkICh3aXRob3V0IHNlYXJjaGluZykuXHJcbiAgICpcclxuICAgKiBEZWZhdWx0cyB0byBcIlNlYXJjaGFibGVUYWJsZV9EZWZhdWx0X05vRGF0YV9TQ1wiXHJcbiAgICovXHJcbiAgQElucHV0KCkgbm9EYXRhTWVzc2FnZTogc3RyaW5nID0gJ1NlYXJjaGFibGVUYWJsZV9EZWZhdWx0X05vRGF0YV9TQyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIERpc3BsYXllZCBpbiBvdmVybGF5IHdoZW4gbm8gZGF0YSBpcyByZXR1cm5lZCAoYWZ0ZXIgc2VhcmNoaW5nKS5cclxuICAgKiBFbnN1cmUgdHJhbnNsYXRpb24gaGFzIGFuIGludGVycG9sYXRpb24gcGxhY2Vob2xkZXIgZm9yIFwic2VhcmNoVGV4dFwiLlxyXG4gICAqXHJcbiAgICogRGVmYXVsdHMgdG8gXCJTZWFyY2hhYmxlVGFibGVfRGVmYXVsdF9Ob01hdGNoZXNfU0NcIlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiAvLyA3IHJlcXVpcmVzIHNpbmdsZSBjdXJseSBicmFjZXNcclxuICAgKiBObyBpdGVtcyBmb3VuZCBtYXRjaGluZyA8c3Ryb25nPnt7c2VhcmNoVGV4dH19PC9zdHJvbmc+XHJcbiAgICovXHJcbiAgQElucHV0KCkgbm9TZWFyY2hSZXN1bHRzTWVzc2FnZTogc3RyaW5nID0gJ1NlYXJjaGFibGVUYWJsZV9EZWZhdWx0X05vTWF0Y2hlc19TQyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYXRlcyBob3N0aW5nIHBhZ2UgaXMgcmVhZHkgZm9yIHRoZSB0YWJsZSB0byBsb2FkIGRhdGEuXHJcbiAgICpcclxuICAgKiBOZXh0IGFuZCBDb21wbGV0ZSB0aGlzIG9ic2VydmFibGUgYWZ0ZXIgaG9zdGluZyBwYWdlIGhhcyBtYWRlIGFueSBwcmVsaW1pbmFyeVxyXG4gICAqIEFQSSAob3Igb3RoZXIgYXN5bmNocm9ub3VzKSBjYWxscyB0byBsb2FkIHByZXJlcXVpc2l0ZSBkYXRhIHVwb24gd2hpY2ggdGhlIGNvZGVcclxuICAgKiBpbiB0aGUgYGdldEl0ZW1zYCBmdW5jdGlvbiBkZXBlbmRzLiAgVXNlIGEgYFJlcGxheVN1YmplY3RgIHRvIGVuc3VyZSBldmVyeSBjb21wb25lbnRcclxuICAgKiB0aGF0IHVzZXMgdGhpcyBvYnNlcnZhYmxlIGdldHMgdGhlIE5leHQgYW5kIENvbXBsZXRlIG5vdGlmaWNhdGlvbnMuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcmVhZHkhOiBPYnNlcnZhYmxlPHZvaWQ+O1xyXG5cclxuICAvKipcclxuICAgKiBGdW5jdGlvbiBjYWxsZWQgdG8gZ2V0IGl0ZW1zIHRvIGRpc3BsYXkgaW4gdGhlIHRhYmxlLlxyXG4gICAqIElmIHBhZ2VhYmxlIGlzIHRydWUsIHRoZSBUYWJsZVNlYXJjaFJlc3VsdHMgbmVlZCB0byBpbmNsdWRlIHRvdGFsSXRlbXNCZWZvcmVQYWdpbmcsIHdoaWNoIGlzIHRoZVxyXG4gICAqIGNvdW50IG9mIGl0ZW1zIGJlZm9yZSB5b3UndmUgYXBwbGllZCBhbnkgcGFnaW5hdGlvbiAoaS5lLiB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FtZSBiYWNrIGZyb20gdGhlIHNlYXJjaCkuXHJcbiAgICpcclxuICAgKiBNYWtlIHN1cmUgdG8gYmluZCB0aGUgc2NvcGUgaW4gdGhlIHRlbXBsYXRlXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBbZ2V0SXRlbXNdPVwieW91ckZ1bmN0aW9uLmJpbmQodGhpcylcIlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGdldEl0ZW1zITogKHNlYXJjaD86IHN0cmluZywgcGFnZUNoYW5nZUluZm8/OiBQYWdpbmdJbmZvKSA9PiBPYnNlcnZhYmxlPFRhYmxlU2VhcmNoUmVzdWx0cz47XHJcblxyXG4gIC8qKiBPYnNlcnZhYmxlIHRoYXQgd2lsbCBmb3JjZSB0aGUgZ2V0SXRlbXMgZnVuY3Rpb24gdG8gZ2V0IGNhbGxlZCBhZ2FpbiAqL1xyXG4gIEBJbnB1dCgpIHJlZnJlc2g/OiBPYnNlcnZhYmxlPFNlYXJjaGFibGVUYWJsZVJlZnJlc2hPcHRpb25zIHwgdW5kZWZpbmVkPjtcclxuXHJcbiAgLyoqIEFsbG93IHRoZSBob3N0IGNvbXBvbmVudCB0byBzdXBwbHkgYW4gb3ZlcmxheSB0byBjb250cm9sIHRoZSBwZW5kaW5nIHN0YXRlIG9mIHRoZSB0YWJsZSAqL1xyXG4gIEBJbnB1dCgpIHN0YXR1czogT3ZlcmxheSA9IG5ldyBPdmVybGF5KCdoYXNEYXRhJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHVuZGVybHlpbmcgdGFibGUncyBsYXlvdXQgdG8gZml4ZWQuXHJcbiAgICovXHJcbiAgQElucHV0KCkgdGFibGVMYXlvdXRGaXhlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogRW1pdHMgaXRlbXMgcmV0dXJuZWQgYnkgdGhlIGdldEl0ZW1zIGZ1bmN0aW9uLCBhbG9uZyB3aXRoIHRvdGFsIGNvdW50ICovXHJcbiAgQE91dHB1dCgpIGl0ZW1zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VGFibGVTZWFyY2hSZXN1bHRzPiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVTZWFyY2hSZXN1bHRzPigpO1xyXG5cclxuICAvKiogT3B0aW9uYWwgdGFiIGluZGV4IGZvciB0aGUgc2VhcmNoYm94ICovXHJcbiAgQElucHV0KCkgc2VhcmNoYm94VGFiSW5kZXg/OiBudW1iZXI7XHJcblxyXG4gIC8qKiBNYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0byBzaG93IGluIHRoZSB0YWJsZSAoZGVmYXVsdDogMTAwKSAqL1xyXG4gIEBJbnB1dCgpIG1heEl0ZW1Db3VudDogbnVtYmVyID0gMTAwO1xyXG5cclxuICAvKiogU2V0IHRvIHRydWUgdG8gaGlkZSBzZWFyY2ggYm94IChkb2VzIG5vdCBoaWRlIHRoZSBvdGhlciBzZWFyY2hhYmxlIHRhYmxlIGNvbnRyb2xzICovXHJcbiAgQElucHV0KCkgaGlkZVNlYXJjaENvbnRyb2w6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIFNldCB0byB0cnVlIHRvIGhpZGUgdGhlIGVudGlyZSBoZWFkZXIgKi9cclxuICBASW5wdXQoKSBoaWRlSGVhZGVyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBUeXBlIG9mIG9iamVjdCBpbiB0aGUgdGFibGUuIERpc3BsYXllZCBpbiBmb290ZXIgKGRlZmF1bHQ6ICdyZXN1bHRzJykqL1xyXG4gIEBJbnB1dCgpIG9iamVjdFR5cGU6IHN0cmluZyA9ICdyZXN1bHRzJztcclxuXHJcbiAgLyoqIFNldCB0byB0cnVlIHRvIGhpZGUgdGhlIHRhYmxlIGZvb3RlciAqL1xyXG4gIEBJbnB1dCgpIGhpZGVGb290ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRvIHRydWUgdG8gZW5hYmxlIHBhZ2luZy4gSWYgcGFnaW5nIGlzIGVuYWJsZWQsIHBhZ2VTaXplIG11c3QgYmUgcHJvdmlkZWQuXHJcbiAgICogZ2V0SXRlbXMgd2lsbCBiZSBwYXNzZWQgYm90aCBhIHNlYXJjaCBhbmQgYSBQYWdpbmdJbmZvIG9iamVjdCB3aGVuIGNhbGxlZC4gSXQgbXVzdCBpbmNsdWRlIHRvdGFsSXRlbXNCZWZvcmVQYWdpbmcgaW4gdGhlIFRhYmxlU2VhcmNoUmVzdWx0cyBvdXRwdXQuXHJcbiAgICogSGVyZSBpcyBhIHNpbXBsZSBpbXBsZW1lbnRhdGlvbjogXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBnZXRJdGVtcyhzZWFyY2g/OiBzdHJpbmcsIHBhZ2VDaGFuZ2VJbmZvPzogUGFnaW5nSW5mbyk6IE9ic2VydmFibGU8VGFibGVTZWFyY2hSZXN1bHRzPiB7XHJcbiAgICAgIGxldCByZXN1bHRzOiBTaW1wbGVJdGVtW10gPSBbLi4udGhpcy5wYWdpbmF0ZWRUYWJsZUl0ZW1zXTtcclxuICAgICAgLy9hcHBseSBzZWFyY2hcclxuICAgICAgaWYoc2VhcmNoKSB7XHJcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMucGFnaW5hdGVkVGFibGVJdGVtcy5maWx0ZXIoaSA9PiBpLmEudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vZ2V0IGNvdW50IGJlZm9yZSBhcHBseWluZyBwYWdpbmdcclxuICAgICAgbGV0IGNvdW50QmVmb3JlUGFnaW5nID0gcmVzdWx0cy5sZW5ndGg7XHJcbiAgICAgIC8vYXBwbHkgcGFnaW5nXHJcbiAgICAgIGlmKHBhZ2VDaGFuZ2VJbmZvKSB7XHJcbiAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc2xpY2UocGFnZUNoYW5nZUluZm8hLnNraXAsIHBhZ2VDaGFuZ2VJbmZvIS5za2lwICsgcGFnZUNoYW5nZUluZm8hLnBhZ2VTaXplKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gb2YoeyBpdGVtczogcmVzdWx0cywgdG90YWxJdGVtczogcmVzdWx0cy5sZW5ndGgsIHRvdGFsSXRlbXNCZWZvcmVQYWdpbmc6IGNvdW50QmVmb3JlUGFnaW5nIH0pO1xyXG4gICAgfVxyXG4gICovXHJcbiAgQElucHV0KCkgcGFnZWFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogTWF4IHNpemUgb2YgYSBwYWdlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHBhZ2VTaXplPzogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICogTWF4aW11bSBudW1iZXIgb2YgcGFnZSB0YWJzIHRvIHNob3dcclxuICovXHJcbiAgQElucHV0KCkgbWF4VGFicz86IG51bWJlciA9IDEwO1xyXG5cclxuICAvKipcclxuICAgKiBNYWtlcyB0aGUgc2VhcmNoYm94IHJlYWRvbmx5IGlmIHRydWUuXHJcbiAgICovXHJcbiAgQElucHV0KCkgc2VhcmNoYm94UmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIFBhc3NlZCB0byB0aGUgaW5uZXIgVGFibGVDb21wb25lbnQgdG8gZW5hYmxlIHJvdyBzZWxlY3Rpb24gKi9cclxuICBASW5wdXQoKSBzZWxlY3Rpb25Db250ZXh0PzogVGFibGVTZWxlY3RhYmxlUm93Q29udGV4dDtcclxuXHJcbiAgLyoqIFBhc3NlZCB0byB0aGUgaW5uZXIgVGFibGVDb21wb25lbnQgdG8gZGlzcGxheSBhIHRvb2xiYXIgd2hlbiAxIG9yIG1vcmUgcm93cyBhcmUgc2VsZWN0ZWQuIFJlcXVpcmVzIGBbc2VsZWN0aW9uQ29udGV4dF1gIHRvIGJlIGRlZmluZWQuICovXHJcbiAgQElucHV0KCkgc2VsZWN0aW9uVG9vbGJhclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBcclxuICBAQ29udGVudENoaWxkcmVuKFJlc2l6YWJsZUNvbHVtbkNvbXBvbmVudCwge2Rlc2NlbmRhbnRzOiB0cnVlfSkgcmVzaXphYmxlQ29sdW1ucyE6IFF1ZXJ5TGlzdDxSZXNpemFibGVDb2x1bW5Db21wb25lbnQ+O1xyXG5cclxuICAvKiogT3B0aW9uYWwgdGV4dCB0byBhZGQgdG8gdGhlIHJlc3VsdHMgY291bnQgaW4gdGhlIHRhYmxlIGZvb3Rlci4gVGhpcyB0ZXh0IHdpbGwgYmUgYWRkZWQgYWZ0ZXIgdGhlIGNvdW50IGFuZCBvYmplY3RUeXBlLiAqL1xyXG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxDb3VudFRleHQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogRW5hYmxlcyB0YWJsZSByb3cgc2VsZWN0aW9uIGFuZCByb3cgaGlnaGxpZ2h0aW5nIHN0eWxlcyB3aGVuIHRydWUgKi9cclxuICBASW5wdXQoKSBzZWxlY3RhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKkRlZmF1bHRzIHRvIHVuZGVmaW5lZC4gU3BlY2lmeSB5b3VyIG93biB0ZW1wbGF0ZSBpZiBhbiBlYy10YWJsZSB3cmFwcGVkIGFyb3VuZCB5b3VyIHRyYW5zY2x1ZGVkIGNvbnRlbnQgd29uJ3QgbWVldCB5b3VyIG5lZWRzXHJcbiAgICovXHJcbiAgQElucHV0KCkgY3VzdG9tQ29udGVudFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLyoqIFdoZW4gdHJ1ZSwgcmVtb3ZlcyB0aGUgY2FyZCBzdHlsZXMgZnJvbSB0aGUgdGFibGUgd3JhcHBlciAqL1xyXG4gIEBJbnB1dCgpIHJlbW92ZUNhcmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIENsYXNzZXMgdG8gYWRkIHRvIHRoZSBvdmVybGF5L2NhcmQgZWxlbWVudCAqL1xyXG4gIEBJbnB1dCgpIG92ZXJsYXlDbGFzc2VzOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIFdoZW4gdHJ1ZSB0aGUgb3ZlcmxheSBhbmQgdGFibGUgd2lsbCBub3QgaGF2ZSBmbGV4LXNocmluay1tYXggYnV0IGluc3RlYWQgZmxleC1ncm93ICovXHJcbiAgQElucHV0KCkgZmlsbFBhcmVudEhlaWdodD86IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIFBhc3NlZCB0byB0aGUgcGFnaW5hdGlvbiBjb250cm9sIGNvbXBvbmVudC4gVXNlZCB0byBkaXNhYmxlIHRoZSBwYWdpbmF0aW9uIGNvbnRyb2xzICovXHJcbiAgQElucHV0KCkgZGlzYWJsZVBhZ2luYXRpb25Db250cm9scz86IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBQYWdpbmdJbmZvIGZvciB0aGUgY3VycmVudCBwYWdlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBwYWdlSW5mbz86IFBhZ2luZ0luZm87XHJcblxyXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIHNlYXJjaE1vZGVsICovXHJcbiAgcHVibGljIGdldCBzZWFyY2hNb2RlbCgpOiBVbnR5cGVkRm9ybUNvbnRyb2wge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybU1vZGVsLmNvbnRyb2xzLnNlYXJjaE1vZGVsIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRleHQgZGlzcGxheWVkIGluIHRoZSBmb290ZXIuXHJcbiAgICogU29tZXRpbWVzIGBub0RhdGFNZXNzYWdlYCwgc29tZXRpbWVzIGBub1NlYXJjaFJlc3VsdHNNZXNzYWdlYFxyXG4gICAqL1xyXG4gIHB1YmxpYyB0YWJsZUNhcHRpb246IHN0cmluZyA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMubm9EYXRhTWVzc2FnZSB8fCAnU2VhcmNoYWJsZVRhYmxlX0RlZmF1bHRfTm9EYXRhX1NDJyk7XHJcblxyXG4gIC8qKiBjb3VudCBvZiByZXN1bHRzIGRpc3BsYXllZCBpbiB0aGUgdGFibGUgKi9cclxuICBwdWJsaWMgcmVzdWx0c0NvdW50OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIEl0ZW1zIHJldHVybmVkIGJ5IHRoZSBnZXRJdGVtcyBmdW5jdGlvbiwgYWxvbmcgd2l0aCB0b3RhbCBjb3VudCAqL1xyXG4gIHB1YmxpYyBzZWFyY2hSZXN1bHRzOiBUYWJsZVNlYXJjaFJlc3VsdHMgPSB7IGl0ZW1zOiBbXSwgdG90YWxJdGVtczogMCB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiBwYXNzZWQgYW4gaW5wdXQgZm9yIHJlZnJlc2gsIHRyaWdnZXJzIHJlbG9hZGluZyBpdGVtcy5cclxuICAgKiBPdGhlcndpc2UsIGNvbXBsZXRlcyBpbW1lZGlhdGVseSAod2lsbCBuZXZlciB0cmlnZ2VyIHJlbG9hZCkuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWZyZXNoVHJpZ2dlcjogT2JzZXJ2YWJsZTxTZWFyY2hhYmxlVGFibGVGb3JtTW9kZWwgfCB1bmRlZmluZWQ+ID0gRU1QVFk7XHJcbiAgcHJpdmF0ZSBkZXN0cm95ZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBwcml2YXRlIHBhZ2VDaGFuZ2VkOiBTdWJqZWN0PFNlYXJjaGFibGVUYWJsZUZvcm1Nb2RlbD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAvKiogVHJpZ2dlcnMgdGhlIGluaXRpYWwgbG9hZCBvZiB0aGUgdGFibGUgKi9cclxuICBwcml2YXRlIGluaXRUYWJsZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVycm9yU2VydmljZTogRXJyb3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3dDb3VudFBpcGU6IFJvd0NvdW50UGlwZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzLnBhZ2VTaXplICYmICFjaGFuZ2VzLnBhZ2VTaXplLmZpcnN0Q2hhbmdlICYmIHRoaXMucGFnZWFibGUpIHtcclxuICAgICAgLy8gSWYgdGhlIHBhZ2VTaXplIGNoYW5nZXMsIHJlc2V0IHRvIHRoZSBmaXJzdCBwYWdlIGFuZCByZWZyZXNoLlxyXG4gICAgICB0aGlzLnBhZ2VJbmZvID0gVGFibGVQYWdpbmF0aW9uQ29tcG9uZW50LmdldFBhZ2luZ0luZm8oMSwgdGhpcy5wYWdlU2l6ZSEpO1xyXG4gICAgICB0aGlzLm9uUGFnZUNoYW5nZSh0aGlzLnBhZ2VJbmZvKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdGF0dXMuc2V0U3RhdHVzKCdwZW5kaW5nJywgJ0xvYWRpbmcnKTtcclxuICAgIHRoaXMuc2V0VXBSZWZyZXNoVHJpZ2dlcigpO1xyXG5cclxuICAgIC8vIFdhdGNoIGZvciBzZWFyY2hib3gvb3RoZXIgY29udHJvbCBjaGFuZ2VzIG9yIHJlZnJlc2ggcmVxdWVzdHNcclxuICAgIGNvbnN0IHNlYXJjaE9yUmVmcmVzaCA9IG1lcmdlKFxyXG4gICAgICB0aGlzLmZvcm1Nb2RlbC52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgICBza2lwVW50aWwodGhpcy5yZWFkeSksXHJcbiAgICAgICAgZGVib3VuY2VUaW1lKDMwMClcclxuICAgICAgKSxcclxuICAgICAgdGhpcy5yZWZyZXNoVHJpZ2dlcixcclxuICAgICAgdGhpcy5pbml0VGFibGVcclxuICAgICkucGlwZSh0YXAoKCk9PiB7XHJcbiAgICAgIC8vYSBjaGFuZ2UgdG8gYW55IGZvcm0gY29udHJvbCBvciBhIHJlZnJlc2ggc2hvdWxkIHJlc2V0IHRoZSBwYWdlSW5mbyB0byB0aGUgZmlyc3QgcGFnZSBpZiB0aGUgdGFibGUgaXMgcGFnZWFibGUuXHJcbiAgICAgIC8vKGlmIHdlIGRpZG50IHJlc2V0IHRoZSBwYWdlSW5mbywgd2UnZCBoYXZlIHRvIGNhbGwgZ2V0SXRlbXMgd2l0aCB0aGUgcHJldmlvdXMgcGFnZUluZm8sIHdoaWNoIG1heSBub3QgYmUgdmFsaWQgZm9yIHRoZSBuZXcgcmVzdWx0cylcclxuICAgICAgaWYodGhpcy5wYWdlYWJsZSkge1xyXG4gICAgICAgIHRoaXMucGFnZUluZm8gPSBUYWJsZVBhZ2luYXRpb25Db21wb25lbnQuZ2V0UGFnaW5nSW5mbygxLCB0aGlzLnBhZ2VTaXplISk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuXHJcbiAgICBjb25zdCB1cGRhdGVSZXN1bHRzID0gbWVyZ2UoXHJcbiAgICAgIHNlYXJjaE9yUmVmcmVzaCxcclxuICAgICAgdGhpcy5wYWdlQ2hhbmdlZC5waXBlKFxyXG4gICAgICAgIC8vIFByZXZlbnQgYSBjYWxsIHRvIGdldEl0ZW1zIHdoZW4gdGhlIHBhZ2VTaXplIGlzIHNldCBkdXJpbmcgcGFnZSBpbml0IGFuZCBiZWZvcmUgcmVhZHkgaXMgY29tcGxldGVkXHJcbiAgICAgICAgc2tpcFVudGlsKHRoaXMucmVhZHkpXHJcbiAgICAgIClcclxuICAgIClcclxuXHJcbiAgICAvLyBDYWxsIGdldEl0ZW1zIGFuZCB3YXRjaCBmb3IgZXJyb3JzXHJcbiAgICBjb25zdCBnZXREYXRhID0gdXBkYXRlUmVzdWx0cy5waXBlKFxyXG4gICAgICAvLyBQbHVjayB0aGUgc2VhcmNoTW9kZWwgdmFsdWUgb3V0IG9mIHRoZSBmb3JtTW9kZWxcclxuICAgICAgcGx1Y2soJ3NlYXJjaE1vZGVsJyksXHJcblxyXG4gICAgICAvLyBFbnN1cmUgc2VhcmNoIHN0cmluZyBpcyBkZWZpbmVkXHJcbiAgICAgIC8vIFRyaW0gYW5kIGxvd2VyY2FzZSBpdCB0byBhaWQgY2FzZS1pbnNlbnNpdGl2ZSBzZWFyY2hpbmdcclxuICAgICAgbWFwKChzZWFyY2hTdHJpbmc/OiBzdHJpbmcpID0+IHtcclxuICAgICAgICBsZXQgc2VhcmNoID0gc2VhcmNoU3RyaW5nIHx8ICcnO1xyXG4gICAgICAgIHJldHVybiBzZWFyY2gudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIH0pLFxyXG5cclxuICAgICAgLy8gU2hvdyBzdGF0dXMgb3ZlcmxheVxyXG4gICAgICB0YXAoKCkgPT4gdGhpcy5zdGF0dXMuc2V0U3RhdHVzKCdwZW5kaW5nJywgJ0xvYWRpbmcnKSksXHJcblxyXG4gICAgICAvLyBDYWxsIHBhc3NlZCBmdW5jdGlvblxyXG4gICAgICBzd2l0Y2hNYXAoKHNlYXJjaFN0cmluZzogc3RyaW5nKSA9PiBcclxuICAgICAgICAvL2lmIHRoZSB0YWJsZSBpcyBwYWdlYWJsZSwgcGFnZUluZm8gd2lsbCBiZSBkZWZpbmVkLlxyXG4gICAgICAgIHRoaXMuZ2V0SXRlbXMoc2VhcmNoU3RyaW5nLCB0aGlzLnBhZ2VJbmZvKVxyXG4gICAgICApLFxyXG5cclxuICAgICAgLy8gSWYgcGFzc2VkIGZ1bmN0aW9uIGZhaWxzLCBzaG93IGVycm9yIHN0YXR1c1xyXG4gICAgICBjYXRjaEVycm9yKChlcnIsIGNhdWdodCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RhdHVzLnNldFN0YXR1cygnZXJyb3InLCB0aGlzLmVycm9yU2VydmljZS5wYXJzZUFwaUVycm9yKGVycikpO1xyXG4gICAgICAgIC8vIHJldHVybiB0aGUgY2F1Z2h0IG9ic2VydmFibGUgc28gdGhlIHN1YnNjcmlwdGlvbiBkb2Vzbid0IGNvbXBsZXRlXHJcbiAgICAgICAgcmV0dXJuIGNhdWdodDtcclxuICAgICAgfSksXHJcblxyXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpLFxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBIYW5kbGUgcmV0dXJuZWQgZGF0YSBhbmQgbm90aWZ5IHBhcmVudFxyXG4gICAgZ2V0RGF0YS5zdWJzY3JpYmUoKHJlc3VsdHM6IFRhYmxlU2VhcmNoUmVzdWx0cykgPT4ge1xyXG4gICAgICAvLyBMaW1pdGluZyBudW1iZXIgb2YgcmVzdWx0cyB0byBzaG93IGlmIG5vdCBwYWdlYWJsZSAoaWYgcGFnZWFibGUgdGhlIG1heCBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHRhYmxlXHJcbiAgICAgIC8vIGNhbiBiZSBtb2RpZmllZCBieSBpbmNyZWFzaW5nL2RlY3JlYXNpbmcgdGhlIHBhZ2VTaXplLilcclxuICAgICAgaWYoIXRoaXMucGFnZWFibGUpIHtcclxuICAgICAgICByZXN1bHRzLml0ZW1zID0gcmVzdWx0cy5pdGVtcy5zbGljZSgwLCB0aGlzLm1heEl0ZW1Db3VudCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE5lZWQgdG8ga25vdyB0aGlzIChhbG9uZyB3aXRoIGlmIHRoZXJlJ3MgYSB2YWx1ZSBpbiB0aGUgZm9ybU1vZGVsKSB0byBkZXRlcm1pbmUgd2hhdCB0byBzaG93IGluIHRoZSBmb290ZXJcclxuICAgICAgdGhpcy5zZWFyY2hSZXN1bHRzID0gcmVzdWx0cztcclxuICAgIFxyXG4gICAgICB0aGlzLnRhYmxlQ2FwdGlvbiA9IHRoaXMuZ2V0Q2FwdGlvbihyZXN1bHRzKTtcclxuICAgICAgdGhpcy5yZXN1bHRzQ291bnQgPSB0aGlzLnBhZ2VhYmxlID8gdGhpcy5yb3dDb3VudFBpcGUudHJhbnNmb3JtKHJlc3VsdHMsIHRoaXMub2JqZWN0VHlwZSwgdW5kZWZpbmVkLCB0aGlzLnBhZ2VJbmZvKTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dDb3VudFBpcGUudHJhbnNmb3JtKHJlc3VsdHMsIHRoaXMub2JqZWN0VHlwZSwgdGhpcy5tYXhJdGVtQ291bnQpO1xyXG5cclxuICAgICAgLy8gRGlzYWJsZSBzZWFyY2hib3ggd2hlbiBpbiBuby1kYXRhIHN0YXRlXHJcbiAgICAgIGlmICghcmVzdWx0cy5pdGVtcy5sZW5ndGggJiYgIXRoaXMuc2VhcmNoTW9kZWwudmFsdWUpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaE1vZGVsLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2VhcmNoTW9kZWwuZGlzYWJsZWQpIHtcclxuICAgICAgICAvLyByZS1lbmFibGUgaWYgaXQgd2FzIGRpc2FibGVkLCBidXQgbm93IGhhcyBpdGVtc1xyXG4gICAgICAgIHRoaXMuc2VhcmNoTW9kZWwuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zdGF0dXMuc2V0U3RhdHVzKCdoYXNEYXRhJyk7XHJcbiAgICAgIC8vIFNlbmQgdGhlIHJlc3VsdHMgdG8gdGhlIHBhcmVudCBjb21wb25lbnRcclxuICAgICAgdGhpcy5pdGVtc0NoYW5nZS5lbWl0KHJlc3VsdHMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gV2hlbiAncmVhZHknIGlzIGNvbXBsZXRlZCBieSB0aGUgaG9zdCwgaW5pdGlhbGl6ZSB0aGUgdGFibGUgd2l0aCB0aGUgY3VycmVudCBmb3JtIG1vZGVsIHZhbHVlc1xyXG4gICAgdGhpcy5yZWFkeS5zdWJzY3JpYmUoe1xyXG4gICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaW5pdFRhYmxlLm5leHQodGhpcy5mb3JtTW9kZWwudmFsdWUpO1xyXG4gICAgICAgIHRoaXMuaW5pdFRhYmxlLmNvbXBsZXRlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3llZC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3llZC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFBhc3MgYWxvbmcgc29ydCB0byBwYXJlbnQgY29tcG9uZW50ICovXHJcbiAgb25Tb3J0Q2hhbmdlKHNvcnQ6IFRhYmxlU29ydCk6IHZvaWQge1xyXG4gICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQoc29ydCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIGEgcGFnZSBjaGFuZ2VzLCBzdG9yZSB0aGUgbmV3IHBhZ2luZ0luZm8gYW5kIGVtaXQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGZvcm0gdG8gdHJpZ2dlciBnZXREYXRhLlxyXG4gICAqL1xyXG4gIG9uUGFnZUNoYW5nZShwYWdpbmdJbmZvOiBQYWdpbmdJbmZvKSB7XHJcbiAgICB0aGlzLnN0YXR1cy5zZXRTdGF0dXMoJ3BlbmRpbmcnLCAnTG9hZGluZycpO1xyXG4gICAgdGhpcy5wYWdlSW5mbyA9IHBhZ2luZ0luZm87XHJcbiAgICB0aGlzLnBhZ2VDaGFuZ2VFbWl0dGVyLmVtaXQocGFnaW5nSW5mbyk7XHJcbiAgICB0aGlzLnBhZ2VDaGFuZ2VkLm5leHQodGhpcy5mb3JtTW9kZWwudmFsdWUpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFdpcmUgdXAgYSBoYW5kbGVyIHRvIHRoZSBgcmVmcmVzaGAgb2JzZXJ2YWJsZSBzbyB0aGF0IHdoZW5cclxuICAgKiB0aGUgaG9zdCBwYWdlIGNvbnRleHQgY2hhbmdlcyBpdCBjYW4gZm9yY2UgdGhlIHRhYmxlIHRvIHVwZGF0ZSBhcyB3ZWxsLlxyXG4gICAqXHJcbiAgICogSWYgdGhlIGByZWZyZXNoYCBvYnNlcnZhYmxlIHBhc3NlcyBvcHRpb25zIGFuZCB0aGUgYGNsZWFyU2VhcmNoYCBwcm9wZXJ0eVxyXG4gICAqIGlzIHNldCB0byB0cnVlLCByZXNldCB0aGUgc2VhcmNoTW9kZWwgYW5kIHBhc3MgYW4gZW1wdHkgc3RyaW5nLlxyXG4gICAqXHJcbiAgICogSWYgYHJlZnJlc2hgIG9ic2VydmFibGUgZG9lcyBub3QgcGFzcyBvcHRpb25zIG9yIHRoZSBgY2xlYXJTZWFyY2hgIHByb3BlcnR5XHJcbiAgICogaXMgc2V0IHRvIGZhbHNlLCBwYXNzIGFsb25nIHRoZSBjdXJyZW50IHNlYXJjaE1vZGVsIFZhbHVlLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0VXBSZWZyZXNoVHJpZ2dlcigpIHtcclxuICAgIGlmICh0aGlzLnJlZnJlc2gpIHtcclxuICAgICAgdGhpcy5yZWZyZXNoVHJpZ2dlciA9IHRoaXMucmVmcmVzaC5waXBlKFxyXG4gICAgICAgIG1hcChvcHRzID0+IHtcclxuICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMuY2xlYXJTZWFyY2gpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hNb2RlbC5yZXNldCgnJywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4geyAuLi50aGlzLmZvcm1Nb2RlbCwgc2VhcmNoTW9kZWw6ICcnIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtTW9kZWwudmFsdWU7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIEdldCB0ZXh0IHRvIGRpc3BsYXkgaW4gdGhlIGZvb3Rlci4gKi9cclxuICBwcml2YXRlIGdldENhcHRpb24ocmVzdWx0czogVGFibGVTZWFyY2hSZXN1bHRzKTogc3RyaW5nIHtcclxuICAgIGlmIChyZXN1bHRzLml0ZW1zLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VhcmNoTW9kZWwudmFsdWUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMubm9TZWFyY2hSZXN1bHRzTWVzc2FnZSB8fCAnU2VhcmNoYWJsZVRhYmxlX0RlZmF1bHRfTm9NYXRjaGVzX1NDJywgeyBzZWFyY2hUZXh0OiB0aGlzLnNlYXJjaE1vZGVsLnZhbHVlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLm5vRGF0YU1lc3NhZ2UgfHwgJ1NlYXJjaGFibGVUYWJsZV9EZWZhdWx0X05vRGF0YV9TQycpO1xyXG4gIH1cclxuXHJcbn0iLCI8aGVhZGVyICpuZ0lmPVwiIWhpZGVIZWFkZXJcIlxyXG4gICAgICAgIGNsYXNzPVwiZC1mbGV4IGZsZXgtc2hyaW5rIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XHJcbiAgPGVjLXRleHRib3ggaWQ9XCJ7e2lkfX1fc2VhcmNoYm94XCJcclxuICAgICAgICAgICAgICAqbmdJZj1cIiFoaWRlU2VhcmNoQ29udHJvbFwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtYi0wIGZsZXgtZ3JvdyBtci0yXCJcclxuICAgICAgICAgICAgICBbYXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXHJcbiAgICAgICAgICAgICAgW2Zvcm1Nb2RlbF09XCJzZWFyY2hNb2RlbFwiXHJcbiAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInNlYXJjaGJveFRhYkluZGV4XCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VhcmNoYm94UGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgIFtyZWFkb25seV09XCJzZWFyY2hib3hSZWFkb25seVwiPjwvZWMtdGV4dGJveD5cclxuICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93XCI+XHJcbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCIuc2VhcmNoYWJsZS10YWJsZS1jb250cm9sc1wiPjwvbmctY29udGVudD5cclxuICA8L2Rpdj5cclxuPC9oZWFkZXI+XHJcbjxzZWN0aW9uIGlkPVwie3tpZH19X2NhcmRcIlxyXG4gICAgICAgICBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiB7e292ZXJsYXlDbGFzc2VzfX1cIlxyXG4gICAgICAgICBbbmdDbGFzc109XCJ7J2lzLXRyYW5zbHVjZW50Jzogc3RhdHVzLnN0YXR1cyAhPT0gJ2Vycm9yJywgJ2hhcy1tYXNrJzogc3RhdHVzLnN0YXR1cyAhPT0gJ2hhc0RhdGEnLCAnY2FyZCBtLTAgYmctY29udGVudCc6ICFjdXN0b21Db250ZW50VGVtcGxhdGUgJiYgIXJlbW92ZUNhcmR9XCJcclxuICAgICAgICAgZWNPdmVybGF5XHJcbiAgICAgICAgIFtzdGF0dXNdPVwic3RhdHVzLnN0YXR1c1wiXHJcbiAgICAgICAgIFttZXNzYWdlXT1cInN0YXR1cy5tZXNzYWdlXCJcclxuICAgICAgICAgW2Rpc3BsYXlBc01hc2tdPVwidHJ1ZVwiPlxyXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIi5jYXJkLWhlYWRlclwiPjwvbmctY29udGVudD5cclxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tQ29udGVudFRlbXBsYXRlIHx8IGRlZmF1bHRDb250ZW50VGVtcGxhdGVcIj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPCEtLSB0aGUgZGVmYXVsdCB0ZW1wbGF0ZSBpcyBhbiBlYy10YWJsZSB3aXRoIHByb3hpZWQtb3ZlciBzZWFyY2hhYmxlIHRhYmxlIGlucHV0cy4gXHJcbiAgICBJZiB0aGF0IGRvZXNuJ3Qgd29yayBmb3IgeW91IHRoZW4geW91IGNhbiBzcGVjaWZ5IGEgY3VzdG9tQ29udGVudFRlbXBsYXRlIHRvIHVzZSBpbnN0ZWFkXHJcbiAgICBhbmQgc3RpbGwgcmV0YWluIGFsbCB0aGUgZXZlbnQgaGFuZGxpbmcsIGhlYWRlciwgZm9vdGVyIHBhZ2luYXRpb24sIGV0YyBzdXBwb3J0IC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdENvbnRlbnRUZW1wbGF0ZT5cclxuICAgIDxlYy10YWJsZSBpZD1cInt7aWR9fV90YWJsZVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ7e3RhYmxlQ2xhc3Nlc319XCJcclxuICAgICAgICAgICAgICBbY2xhc3MuaXMtZml4ZWRdPVwidGFibGVMYXlvdXRGaXhlZFwiXHJcbiAgICAgICAgICAgICAgW3NvcnRhYmxlXT1cInNvcnRhYmxlXCJcclxuICAgICAgICAgICAgICBbc29ydF09XCJzb3J0XCJcclxuICAgICAgICAgICAgICAoc29ydENoYW5nZSk9XCJvblNvcnRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgW3Jlc2l6YWJsZV09XCJyZXNpemFibGVcIlxyXG4gICAgICAgICAgICAgIFtzY3JvbGxhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgIFtzZWxlY3RhYmxlXT1cInNlbGVjdGFibGVcIlxyXG4gICAgICAgICAgICAgIFtzZWxlY3Rpb25Db250ZXh0XT1cInNlbGVjdGlvbkNvbnRleHRcIlxyXG4gICAgICAgICAgICAgIFtzZWxlY3Rpb25Ub29sYmFyVGVtcGxhdGVdPVwic2VsZWN0aW9uVG9vbGJhclRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICBbcmVzaXphYmxlQ29sdW1uc109XCJyZXNpemFibGVDb2x1bW5zXCI+XHJcbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgIDwvZWMtdGFibGU+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPCEtLSBwYWdpbmF0aW9uIGZvb3RlciB2aXNpYmxlIGlmIHRhYmxlIGlzIHBhZ2UtYWJsZSBhbmQgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgcGFnZSBvZiByZXN1bHRzIC0tPlxyXG4gIDxmb290ZXIgKm5nSWY9XCIhaGlkZUZvb3RlciAmJiBwYWdlYWJsZSAmJiBzZWFyY2hSZXN1bHRzLnRvdGFsSXRlbXNCZWZvcmVQYWdpbmchID4gcGFnZVNpemUhXCJcclxuICAgICAgICAgIGNsYXNzPVwicGFnaW5hdGlvbi1mb290ZXJcIlxyXG4gICAgICAgICAgW2NsYXNzLmJvcmRlci10b3BdPVwiIWN1c3RvbUNvbnRlbnRUZW1wbGF0ZVwiPlxyXG4gICAgPGVjLXRhYmxlLXBhZ2luYXRpb24gaWQ9XCJ7e2lkfX1fcGFnZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb250LWNvbG9yLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwic2VhcmNoUmVzdWx0cy50b3RhbEl0ZW1zQmVmb3JlUGFnaW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4VGFic109XCJtYXhUYWJzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtwYWdlTnVtYmVyXT1cInBhZ2VJbmZvPy5wYWdlTnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlUGFnaW5hdGlvbkNvbnRyb2xzXT1cImRpc2FibGVQYWdpbmF0aW9uQ29udHJvbHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2VkKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICA8L2VjLXRhYmxlLXBhZ2luYXRpb24+XHJcbiAgICA8ZGl2IGlkPVwicmVzdWx0c0NvdW50XCJcclxuICAgICAgICAgKm5nSWY9XCJzZWFyY2hSZXN1bHRzPy5pdGVtcz8ubGVuZ3RoXCJcclxuICAgICAgICAgY2xhc3M9XCJtbC1hdXRvIGZvbnQtY29sb3ItaGludCB0ZXh0LXRydW5jYXRlXCIgXHJcbiAgICAgICAgIHRpdGxlPVwie3tyZXN1bHRzQ291bnR9fSB7e2FkZGl0aW9uYWxDb3VudFRleHR9fVwiPnt7cmVzdWx0c0NvdW50fX0ge3thZGRpdGlvbmFsQ291bnRUZXh0fX08L2Rpdj5cclxuICA8L2Zvb3Rlcj5cclxuXHJcbiAgPCEtLSBkZWZhdWx0IGZvb3RlcjogdmlzaWJsZSBpZiBoaWRlRm9vdGVyIGlzIGZhbHNlIGFuZCB0YWJsZSBpcyBub3QgcGFnZS1hYmxlIG9yIHRoZXJlIGFyZSBvbmx5IG9uZSBwYWdlIG9mIHJlc3VsdHMgKGFsd2F5cyBzaG93cyBpZiB0aGVyZSBpcyBhIGNhcHRpb24gdG8gaW5kaWNhdGUgbm8gcmVzdWx0cykgLS0+XHJcbiAgPGZvb3RlciAqbmdJZj1cIighaGlkZUZvb3RlciAmJiAoIXBhZ2VhYmxlIHx8IHNlYXJjaFJlc3VsdHMudG90YWxJdGVtc0JlZm9yZVBhZ2luZyEgPD0gcGFnZVNpemUhKSkgfHwgdGFibGVDYXB0aW9uXCJcclxuICAgICAgICAgIGNsYXNzPVwiY2FwdGlvbi1mb290ZXJcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydoYXMtcmVzdWx0cyc6IHNlYXJjaFJlc3VsdHM/Lml0ZW1zPy5sZW5ndGgsICdib3JkZXItdG9wJzogc2VhcmNoUmVzdWx0cz8uaXRlbXM/Lmxlbmd0aCAmJiAhY3VzdG9tQ29udGVudFRlbXBsYXRlfVwiPlxyXG4gICAgPG5nLWNvbnRlbnQgKm5nSWY9XCIhdGFibGVDYXB0aW9uXCJcclxuICAgICAgICAgICAgICAgIHNlbGVjdD1cIi5zZWFyY2hhYmxlLXRhYmxlLWZvb3RlclwiPjwvbmctY29udGVudD5cclxuICAgIDxkaXYgaWQ9XCJ0YWJsZUNhcHRpb25cIlxyXG4gICAgICAgICAqbmdJZj1cInRhYmxlQ2FwdGlvblwiXHJcbiAgICAgICAgIFtpbm5lckhUTUxdPVwidGFibGVDYXB0aW9uXCI+PC9kaXY+XHJcbiAgICA8ZGl2IGlkPVwicmVzdWx0c0NvdW50XCJcclxuICAgICAgICAgKm5nSWY9XCJzZWFyY2hSZXN1bHRzPy5pdGVtcz8ubGVuZ3RoXCJcclxuICAgICAgICAgY2xhc3M9XCJtbC1hdXRvIHRleHQtdHJ1bmNhdGVcIlxyXG4gICAgICAgICB0aXRsZT1cInt7cmVzdWx0c0NvdW50fX0ge3thZGRpdGlvbmFsQ291bnRUZXh0fX1cIj57e3Jlc3VsdHNDb3VudH19IHt7YWRkaXRpb25hbENvdW50VGV4dH19PC9kaXY+XHJcbiAgPC9mb290ZXI+XHJcbjwvc2VjdGlvbj4iXX0=
338
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoYWJsZS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS90YWJsZS9zZWFyY2hhYmxlLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9kaXNwbGF5L3RhYmxlL3NlYXJjaGFibGUtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBZ0MsTUFBTSxFQUF5QyxNQUFNLGVBQWUsQ0FBQztBQUc3SixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc1RyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDakUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFjLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7Ozs7QUFjcEYsTUFBTSxPQUFPLHdCQUF3QjtJQTBLbkMsbUNBQW1DO0lBQ25DLElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQWlDLENBQUM7SUFDbkUsQ0FBQztJQTBCRCxZQUNVLFlBQTBCLEVBQzFCLGdCQUFrQyxFQUNsQyxZQUEwQjtRQUYxQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENB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O3NCQUFsQixLQUFLO2dCQXNCRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csT0FBTztzQkFBZixLQUFLO2dCQUtHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFHRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBR0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUUwRCxnQkFBZ0I7c0JBQS9FLGVBQWU7dUJBQUMsd0JBQXdCLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFDO2dCQUdyRCxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFJRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdHLGdCQUFnQjtzQkFBeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEVNUFRZLCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWJvdW5jZVRpbWUsIG1hcCwgcGx1Y2ssIHNraXBVbnRpbCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRXJyb3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9lcnJvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUm93Q291bnRQaXBlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Rpc3BsYXkvcGlwZXMvcm93LWNvdW50LnBpcGUnO1xyXG5pbXBvcnQgeyBPdmVybGF5IH0gZnJvbSAnLi4vdmlldy1vdmVybGF5L3ZpZXctb3ZlcmxheS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSZXNpemFibGVDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuL3Jlc2l6YWJsZS1jb2x1bW4uY29tcG9uZW50JztcclxuaW1wb3J0IHsgUGFnaW5nSW5mbywgVGFibGVQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS1wYWdpbmF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRhYmxlU2VsZWN0YWJsZVJvd0NvbnRleHQgfSBmcm9tICcuL3RhYmxlLXNlbGVjdGFibGUtcm93LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRhYmxlU29ydCB9IGZyb20gJy4vdGFibGUuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCB0eXBlIFRhYmxlU2VhcmNoUmVzdWx0cyA9IHsgaXRlbXM6IHVua25vd25bXSwgdG90YWxJdGVtczogbnVtYmVyLCB0b3RhbEl0ZW1zQmVmb3JlUGFnaW5nPzogbnVtYmVyIH07XHJcbmV4cG9ydCB0eXBlIFNlYXJjaGFibGVUYWJsZVJlZnJlc2hPcHRpb25zID0geyBjbGVhclNlYXJjaD86IGJvb2xlYW4gfTtcclxuXHJcbnR5cGUgU2VhcmNoYWJsZVRhYmxlRm9ybU1vZGVsID0geyBzZWFyY2hNb2RlbD86IHN0cmluZyB9O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdlYy1zZWFyY2hhYmxlLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoYWJsZS10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2VhcmNoYWJsZS10YWJsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZWFyY2hhYmxlVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcclxuXHJcbiAgQElucHV0KCkgaWQgPSAnJztcclxuICBASW5wdXQoKSByZXNpemFibGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBzb3J0YWJsZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNvcnQ/OiBUYWJsZVNvcnQ7XHJcbiAgQElucHV0KCkgYXV0b2ZvY3VzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlNldCB0byBhIHNwYWNlLXNlcGFyYXRlZCBzZXQgb2Ygc3RyaW5ncyB0aGF0IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgZWMtdGFibGUgY2xhc3MgYXR0cmlidXRlXHJcbiAgICogdGhpcyBhbGxvd3MgZmluZXIgY29udHJvbCBvdmVyIHN0eWxpbmcuXHJcbiAgICovXHJcbiAgQElucHV0KCkgdGFibGVDbGFzc2VzOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIEVtaXRzIHdoZW4gdGFibGUgc29ydCBoYXMgY2hhbmdlZCAqL1xyXG4gIEBPdXRwdXQoKSBzb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8VGFibGVTb3J0PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVTb3J0PigpO1xyXG5cclxuICAvKiogRW1pdHMgd2hlbiB0aGUgdGFibGUgcGFnZSBoYXMgY2hhbmdlZCAqL1xyXG4gIEBPdXRwdXQoJ3BhZ2VDaGFuZ2UnKSBwYWdlQ2hhbmdlRW1pdHRlcjogRXZlbnRFbWl0dGVyPFBhZ2luZ0luZm8+ID0gbmV3IEV2ZW50RW1pdHRlcjxQYWdpbmdJbmZvPigpO1xyXG5cclxuICAvKiogUGxhY2Vob2xkZXIgdGV4dCBmb3IgdGhlIHNlYXJjaGJveCAqL1xyXG4gIEBJbnB1dCgpIHNlYXJjaGJveFBsYWNlaG9sZGVyID0gJyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZvcm1Hcm91cCBmb3IgdGhlIHNlYXJjaGJveFxyXG4gICAqXHJcbiAgICogVGhlIHJlZmVyZW5jZWQgRm9ybUdyb3VwICoqbXVzdCoqIGNvbnRhaW4gYSBGb3JtQ29udHJvbCBjYWxsZWQgJ3NlYXJjaE1vZGVsJy5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZm9ybU1vZGVsITogVW50eXBlZEZvcm1Hcm91cDtcclxuXHJcbiAgLyoqXHJcbiAgICogRGlzcGxheWVkIGluIG92ZXJsYXkgd2hlbiBubyBkYXRhIGlzIHJldHVybmVkICh3aXRob3V0IHNlYXJjaGluZykuXHJcbiAgICpcclxuICAgKiBEZWZhdWx0cyB0byBcIlNlYXJjaGFibGVUYWJsZV9EZWZhdWx0X05vRGF0YV9TQ1wiXHJcbiAgICovXHJcbiAgQElucHV0KCkgbm9EYXRhTWVzc2FnZTogc3RyaW5nID0gJ1NlYXJjaGFibGVUYWJsZV9EZWZhdWx0X05vRGF0YV9TQyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIERpc3BsYXllZCBpbiBvdmVybGF5IHdoZW4gbm8gZGF0YSBpcyByZXR1cm5lZCAoYWZ0ZXIgc2VhcmNoaW5nKS5cclxuICAgKiBFbnN1cmUgdHJhbnNsYXRpb24gaGFzIGFuIGludGVycG9sYXRpb24gcGxhY2Vob2xkZXIgZm9yIFwic2VhcmNoVGV4dFwiLlxyXG4gICAqXHJcbiAgICogRGVmYXVsdHMgdG8gXCJTZWFyY2hhYmxlVGFibGVfRGVmYXVsdF9Ob01hdGNoZXNfU0NcIlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiAvLyA3IHJlcXVpcmVzIHNpbmdsZSBjdXJseSBicmFjZXNcclxuICAgKiBObyBpdGVtcyBmb3VuZCBtYXRjaGluZyA8c3Ryb25nPnt7c2VhcmNoVGV4dH19PC9zdHJvbmc+XHJcbiAgICovXHJcbiAgQElucHV0KCkgbm9TZWFyY2hSZXN1bHRzTWVzc2FnZTogc3RyaW5nID0gJ1NlYXJjaGFibGVUYWJsZV9EZWZhdWx0X05vTWF0Y2hlc19TQyc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEluZGljYXRlcyBob3N0aW5nIHBhZ2UgaXMgcmVhZHkgZm9yIHRoZSB0YWJsZSB0byBsb2FkIGRhdGEuXHJcbiAgICpcclxuICAgKiBOZXh0IGFuZCBDb21wbGV0ZSB0aGlzIG9ic2VydmFibGUgYWZ0ZXIgaG9zdGluZyBwYWdlIGhhcyBtYWRlIGFueSBwcmVsaW1pbmFyeVxyXG4gICAqIEFQSSAob3Igb3RoZXIgYXN5bmNocm9ub3VzKSBjYWxscyB0byBsb2FkIHByZXJlcXVpc2l0ZSBkYXRhIHVwb24gd2hpY2ggdGhlIGNvZGVcclxuICAgKiBpbiB0aGUgYGdldEl0ZW1zYCBmdW5jdGlvbiBkZXBlbmRzLiAgVXNlIGEgYFJlcGxheVN1YmplY3RgIHRvIGVuc3VyZSBldmVyeSBjb21wb25lbnRcclxuICAgKiB0aGF0IHVzZXMgdGhpcyBvYnNlcnZhYmxlIGdldHMgdGhlIE5leHQgYW5kIENvbXBsZXRlIG5vdGlmaWNhdGlvbnMuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcmVhZHkhOiBPYnNlcnZhYmxlPHZvaWQ+O1xyXG5cclxuICAvKipcclxuICAgKiBGdW5jdGlvbiBjYWxsZWQgdG8gZ2V0IGl0ZW1zIHRvIGRpc3BsYXkgaW4gdGhlIHRhYmxlLlxyXG4gICAqIElmIHBhZ2VhYmxlIGlzIHRydWUsIHRoZSBUYWJsZVNlYXJjaFJlc3VsdHMgbmVlZCB0byBpbmNsdWRlIHRvdGFsSXRlbXNCZWZvcmVQYWdpbmcsIHdoaWNoIGlzIHRoZVxyXG4gICAqIGNvdW50IG9mIGl0ZW1zIGJlZm9yZSB5b3UndmUgYXBwbGllZCBhbnkgcGFnaW5hdGlvbiAoaS5lLiB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FtZSBiYWNrIGZyb20gdGhlIHNlYXJjaCkuXHJcbiAgICpcclxuICAgKiBNYWtlIHN1cmUgdG8gYmluZCB0aGUgc2NvcGUgaW4gdGhlIHRlbXBsYXRlXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBbZ2V0SXRlbXNdPVwieW91ckZ1bmN0aW9uLmJpbmQodGhpcylcIlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGdldEl0ZW1zITogKHNlYXJjaD86IHN0cmluZywgcGFnZUNoYW5nZUluZm8/OiBQYWdpbmdJbmZvKSA9PiBPYnNlcnZhYmxlPFRhYmxlU2VhcmNoUmVzdWx0cz47XHJcblxyXG4gIC8qKiBPYnNlcnZhYmxlIHRoYXQgd2lsbCBmb3JjZSB0aGUgZ2V0SXRlbXMgZnVuY3Rpb24gdG8gZ2V0IGNhbGxlZCBhZ2FpbiAqL1xyXG4gIEBJbnB1dCgpIHJlZnJlc2g/OiBPYnNlcnZhYmxlPFNlYXJjaGFibGVUYWJsZVJlZnJlc2hPcHRpb25zIHwgdW5kZWZpbmVkPjtcclxuXHJcbiAgLyoqIEFsbG93IHRoZSBob3N0IGNvbXBvbmVudCB0byBzdXBwbHkgYW4gb3ZlcmxheSB0byBjb250cm9sIHRoZSBwZW5kaW5nIHN0YXRlIG9mIHRoZSB0YWJsZSAqL1xyXG4gIEBJbnB1dCgpIHN0YXR1czogT3ZlcmxheSA9IG5ldyBPdmVybGF5KCdoYXNEYXRhJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHVuZGVybHlpbmcgdGFibGUncyBsYXlvdXQgdG8gZml4ZWQuXHJcbiAgICovXHJcbiAgQElucHV0KCkgdGFibGVMYXlvdXRGaXhlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogRW1pdHMgaXRlbXMgcmV0dXJuZWQgYnkgdGhlIGdldEl0ZW1zIGZ1bmN0aW9uLCBhbG9uZyB3aXRoIHRvdGFsIGNvdW50ICovXHJcbiAgQE91dHB1dCgpIGl0ZW1zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VGFibGVTZWFyY2hSZXN1bHRzPiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVTZWFyY2hSZXN1bHRzPigpO1xyXG5cclxuICAvKiogT3B0aW9uYWwgdGFiIGluZGV4IGZvciB0aGUgc2VhcmNoYm94ICovXHJcbiAgQElucHV0KCkgc2VhcmNoYm94VGFiSW5kZXg/OiBudW1iZXI7XHJcblxyXG4gIC8qKiBNYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0byBzaG93IGluIHRoZSB0YWJsZSAoZGVmYXVsdDogMTAwKSAqL1xyXG4gIEBJbnB1dCgpIG1heEl0ZW1Db3VudDogbnVtYmVyID0gMTAwO1xyXG5cclxuICAvKiogU2V0IHRvIHRydWUgdG8gaGlkZSBzZWFyY2ggYm94IChkb2VzIG5vdCBoaWRlIHRoZSBvdGhlciBzZWFyY2hhYmxlIHRhYmxlIGNvbnRyb2xzICovXHJcbiAgQElucHV0KCkgaGlkZVNlYXJjaENvbnRyb2w6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIFNldCB0byB0cnVlIHRvIGhpZGUgdGhlIGVudGlyZSBoZWFkZXIgKi9cclxuICBASW5wdXQoKSBoaWRlSGVhZGVyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBUeXBlIG9mIG9iamVjdCBpbiB0aGUgdGFibGUuIERpc3BsYXllZCBpbiBmb290ZXIgKGRlZmF1bHQ6ICdyZXN1bHRzJykqL1xyXG4gIEBJbnB1dCgpIG9iamVjdFR5cGU6IHN0cmluZyA9ICdyZXN1bHRzJztcclxuXHJcbiAgLyoqIFNldCB0byB0cnVlIHRvIGhpZGUgdGhlIHRhYmxlIGZvb3RlciAqL1xyXG4gIEBJbnB1dCgpIGhpZGVGb290ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRvIHRydWUgdG8gZW5hYmxlIHBhZ2luZy4gSWYgcGFnaW5nIGlzIGVuYWJsZWQsIHBhZ2VTaXplIG11c3QgYmUgcHJvdmlkZWQuXHJcbiAgICogZ2V0SXRlbXMgd2lsbCBiZSBwYXNzZWQgYm90aCBhIHNlYXJjaCBhbmQgYSBQYWdpbmdJbmZvIG9iamVjdCB3aGVuIGNhbGxlZC4gSXQgbXVzdCBpbmNsdWRlIHRvdGFsSXRlbXNCZWZvcmVQYWdpbmcgaW4gdGhlIFRhYmxlU2VhcmNoUmVzdWx0cyBvdXRwdXQuXHJcbiAgICogSGVyZSBpcyBhIHNpbXBsZSBpbXBsZW1lbnRhdGlvbjogXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBnZXRJdGVtcyhzZWFyY2g/OiBzdHJpbmcsIHBhZ2VDaGFuZ2VJbmZvPzogUGFnaW5nSW5mbyk6IE9ic2VydmFibGU8VGFibGVTZWFyY2hSZXN1bHRzPiB7XHJcbiAgICAgIGxldCByZXN1bHRzOiBTaW1wbGVJdGVtW10gPSBbLi4udGhpcy5wYWdpbmF0ZWRUYWJsZUl0ZW1zXTtcclxuICAgICAgLy9hcHBseSBzZWFyY2hcclxuICAgICAgaWYoc2VhcmNoKSB7XHJcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMucGFnaW5hdGVkVGFibGVJdGVtcy5maWx0ZXIoaSA9PiBpLmEudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vZ2V0IGNvdW50IGJlZm9yZSBhcHBseWluZyBwYWdpbmdcclxuICAgICAgbGV0IGNvdW50QmVmb3JlUGFnaW5nID0gcmVzdWx0cy5sZW5ndGg7XHJcbiAgICAgIC8vYXBwbHkgcGFnaW5nXHJcbiAgICAgIGlmKHBhZ2VDaGFuZ2VJbmZvKSB7XHJcbiAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc2xpY2UocGFnZUNoYW5nZUluZm8hLnNraXAsIHBhZ2VDaGFuZ2VJbmZvIS5za2lwICsgcGFnZUNoYW5nZUluZm8hLnBhZ2VTaXplKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gb2YoeyBpdGVtczogcmVzdWx0cywgdG90YWxJdGVtczogcmVzdWx0cy5sZW5ndGgsIHRvdGFsSXRlbXNCZWZvcmVQYWdpbmc6IGNvdW50QmVmb3JlUGFnaW5nIH0pO1xyXG4gICAgfVxyXG4gICovXHJcbiAgQElucHV0KCkgcGFnZWFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogTWF4IHNpemUgb2YgYSBwYWdlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHBhZ2VTaXplPzogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICogTWF4aW11bSBudW1iZXIgb2YgcGFnZSB0YWJzIHRvIHNob3dcclxuICovXHJcbiAgQElucHV0KCkgbWF4VGFicz86IG51bWJlciA9IDEwO1xyXG5cclxuICAvKipcclxuICAgKiBNYWtlcyB0aGUgc2VhcmNoYm94IHJlYWRvbmx5IGlmIHRydWUuXHJcbiAgICovXHJcbiAgQElucHV0KCkgc2VhcmNoYm94UmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIFBhc3NlZCB0byB0aGUgaW5uZXIgVGFibGVDb21wb25lbnQgdG8gZW5hYmxlIHJvdyBzZWxlY3Rpb24gKi9cclxuICBASW5wdXQoKSBzZWxlY3Rpb25Db250ZXh0PzogVGFibGVTZWxlY3RhYmxlUm93Q29udGV4dDtcclxuXHJcbiAgLyoqIFBhc3NlZCB0byB0aGUgaW5uZXIgVGFibGVDb21wb25lbnQgdG8gZGlzcGxheSBhIHRvb2xiYXIgd2hlbiAxIG9yIG1vcmUgcm93cyBhcmUgc2VsZWN0ZWQuIFJlcXVpcmVzIGBbc2VsZWN0aW9uQ29udGV4dF1gIHRvIGJlIGRlZmluZWQuICovXHJcbiAgQElucHV0KCkgc2VsZWN0aW9uVG9vbGJhclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBcclxuICBAQ29udGVudENoaWxkcmVuKFJlc2l6YWJsZUNvbHVtbkNvbXBvbmVudCwge2Rlc2NlbmRhbnRzOiB0cnVlfSkgcmVzaXphYmxlQ29sdW1ucyE6IFF1ZXJ5TGlzdDxSZXNpemFibGVDb2x1bW5Db21wb25lbnQ+O1xyXG5cclxuICAvKiogT3B0aW9uYWwgdGV4dCB0byBhZGQgdG8gdGhlIHJlc3VsdHMgY291bnQgaW4gdGhlIHRhYmxlIGZvb3Rlci4gVGhpcyB0ZXh0IHdpbGwgYmUgYWRkZWQgYWZ0ZXIgdGhlIGNvdW50IGFuZCBvYmplY3RUeXBlLiAqL1xyXG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxDb3VudFRleHQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogRW5hYmxlcyB0YWJsZSByb3cgc2VsZWN0aW9uIGFuZCByb3cgaGlnaGxpZ2h0aW5nIHN0eWxlcyB3aGVuIHRydWUgKi9cclxuICBASW5wdXQoKSBzZWxlY3RhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKkRlZmF1bHRzIHRvIHVuZGVmaW5lZC4gU3BlY2lmeSB5b3VyIG93biB0ZW1wbGF0ZSBpZiBhbiBlYy10YWJsZSB3cmFwcGVkIGFyb3VuZCB5b3VyIHRyYW5zY2x1ZGVkIGNvbnRlbnQgd29uJ3QgbWVldCB5b3VyIG5lZWRzXHJcbiAgICovXHJcbiAgQElucHV0KCkgY3VzdG9tQ29udGVudFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLyoqIFdoZW4gdHJ1ZSwgcmVtb3ZlcyB0aGUgY2FyZCBzdHlsZXMgZnJvbSB0aGUgdGFibGUgd3JhcHBlciAqL1xyXG4gIEBJbnB1dCgpIHJlbW92ZUNhcmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIENsYXNzZXMgdG8gYWRkIHRvIHRoZSBvdmVybGF5L2NhcmQgZWxlbWVudCAqL1xyXG4gIEBJbnB1dCgpIG92ZXJsYXlDbGFzc2VzOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIFdoZW4gdHJ1ZSB0aGUgb3ZlcmxheSBhbmQgdGFibGUgd2lsbCBub3QgaGF2ZSBmbGV4LXNocmluay1tYXggYnV0IGluc3RlYWQgZmxleC1ncm93ICovXHJcbiAgQElucHV0KCkgZmlsbFBhcmVudEhlaWdodD86IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogUGFnaW5nSW5mbyBmb3IgdGhlIGN1cnJlbnQgcGFnZS5cclxuICAgKi9cclxuICBwdWJsaWMgcGFnZUluZm8/OiBQYWdpbmdJbmZvO1xyXG5cclxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBzZWFyY2hNb2RlbCAqL1xyXG4gIHB1YmxpYyBnZXQgc2VhcmNoTW9kZWwoKTogVW50eXBlZEZvcm1Db250cm9sIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Nb2RlbC5jb250cm9scy5zZWFyY2hNb2RlbCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUZXh0IGRpc3BsYXllZCBpbiB0aGUgZm9vdGVyLlxyXG4gICAqIFNvbWV0aW1lcyBgbm9EYXRhTWVzc2FnZWAsIHNvbWV0aW1lcyBgbm9TZWFyY2hSZXN1bHRzTWVzc2FnZWBcclxuICAgKi9cclxuICBwdWJsaWMgdGFibGVDYXB0aW9uOiBzdHJpbmcgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLm5vRGF0YU1lc3NhZ2UgfHwgJ1NlYXJjaGFibGVUYWJsZV9EZWZhdWx0X05vRGF0YV9TQycpO1xyXG5cclxuICAvKiogY291bnQgb2YgcmVzdWx0cyBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlICovXHJcbiAgcHVibGljIHJlc3VsdHNDb3VudDogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKiBJdGVtcyByZXR1cm5lZCBieSB0aGUgZ2V0SXRlbXMgZnVuY3Rpb24sIGFsb25nIHdpdGggdG90YWwgY291bnQgKi9cclxuICBwdWJsaWMgc2VhcmNoUmVzdWx0czogVGFibGVTZWFyY2hSZXN1bHRzID0geyBpdGVtczogW10sIHRvdGFsSXRlbXM6IDAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgcGFzc2VkIGFuIGlucHV0IGZvciByZWZyZXNoLCB0cmlnZ2VycyByZWxvYWRpbmcgaXRlbXMuXHJcbiAgICogT3RoZXJ3aXNlLCBjb21wbGV0ZXMgaW1tZWRpYXRlbHkgKHdpbGwgbmV2ZXIgdHJpZ2dlciByZWxvYWQpLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcmVmcmVzaFRyaWdnZXI6IE9ic2VydmFibGU8U2VhcmNoYWJsZVRhYmxlRm9ybU1vZGVsIHwgdW5kZWZpbmVkPiA9IEVNUFRZO1xyXG4gIHByaXZhdGUgZGVzdHJveWVkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHJpdmF0ZSBwYWdlQ2hhbmdlZDogU3ViamVjdDxTZWFyY2hhYmxlVGFibGVGb3JtTW9kZWw+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgLyoqIFRyaWdnZXJzIHRoZSBpbml0aWFsIGxvYWQgb2YgdGhlIHRhYmxlICovXHJcbiAgcHJpdmF0ZSBpbml0VGFibGUgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlcnJvclNlcnZpY2U6IEVycm9yU2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgcm93Q291bnRQaXBlOiBSb3dDb3VudFBpcGVcclxuICApIHsgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAoY2hhbmdlcy5wYWdlU2l6ZSAmJiAhY2hhbmdlcy5wYWdlU2l6ZS5maXJzdENoYW5nZSAmJiB0aGlzLnBhZ2VhYmxlKSB7XHJcbiAgICAgIC8vIElmIHRoZSBwYWdlU2l6ZSBjaGFuZ2VzLCByZXNldCB0byB0aGUgZmlyc3QgcGFnZSBhbmQgcmVmcmVzaC5cclxuICAgICAgdGhpcy5wYWdlSW5mbyA9IFRhYmxlUGFnaW5hdGlvbkNvbXBvbmVudC5nZXRQYWdpbmdJbmZvKDEsIHRoaXMucGFnZVNpemUhKTtcclxuICAgICAgdGhpcy5vblBhZ2VDaGFuZ2UodGhpcy5wYWdlSW5mbyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RhdHVzLnNldFN0YXR1cygncGVuZGluZycsICdMb2FkaW5nJyk7XHJcbiAgICB0aGlzLnNldFVwUmVmcmVzaFRyaWdnZXIoKTtcclxuXHJcbiAgICAvLyBXYXRjaCBmb3Igc2VhcmNoYm94L290aGVyIGNvbnRyb2wgY2hhbmdlcyBvciByZWZyZXNoIHJlcXVlc3RzXHJcbiAgICBjb25zdCBzZWFyY2hPclJlZnJlc2ggPSBtZXJnZShcclxuICAgICAgdGhpcy5mb3JtTW9kZWwudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgICAgc2tpcFVudGlsKHRoaXMucmVhZHkpLFxyXG4gICAgICAgIGRlYm91bmNlVGltZSgzMDApXHJcbiAgICAgICksXHJcbiAgICAgIHRoaXMucmVmcmVzaFRyaWdnZXIsXHJcbiAgICAgIHRoaXMuaW5pdFRhYmxlXHJcbiAgICApLnBpcGUodGFwKCgpPT4ge1xyXG4gICAgICAvL2EgY2hhbmdlIHRvIGFueSBmb3JtIGNvbnRyb2wgb3IgYSByZWZyZXNoIHNob3VsZCByZXNldCB0aGUgcGFnZUluZm8gdG8gdGhlIGZpcnN0IHBhZ2UgaWYgdGhlIHRhYmxlIGlzIHBhZ2VhYmxlLlxyXG4gICAgICAvLyhpZiB3ZSBkaWRudCByZXNldCB0aGUgcGFnZUluZm8sIHdlJ2QgaGF2ZSB0byBjYWxsIGdldEl0ZW1zIHdpdGggdGhlIHByZXZpb3VzIHBhZ2VJbmZvLCB3aGljaCBtYXkgbm90IGJlIHZhbGlkIGZvciB0aGUgbmV3IHJlc3VsdHMpXHJcbiAgICAgIGlmKHRoaXMucGFnZWFibGUpIHtcclxuICAgICAgICB0aGlzLnBhZ2VJbmZvID0gVGFibGVQYWdpbmF0aW9uQ29tcG9uZW50LmdldFBhZ2luZ0luZm8oMSwgdGhpcy5wYWdlU2l6ZSEpO1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcblxyXG4gICAgY29uc3QgdXBkYXRlUmVzdWx0cyA9IG1lcmdlKFxyXG4gICAgICBzZWFyY2hPclJlZnJlc2gsXHJcbiAgICAgIHRoaXMucGFnZUNoYW5nZWQucGlwZShcclxuICAgICAgICAvLyBQcmV2ZW50IGEgY2FsbCB0byBnZXRJdGVtcyB3aGVuIHRoZSBwYWdlU2l6ZSBpcyBzZXQgZHVyaW5nIHBhZ2UgaW5pdCBhbmQgYmVmb3JlIHJlYWR5IGlzIGNvbXBsZXRlZFxyXG4gICAgICAgIHNraXBVbnRpbCh0aGlzLnJlYWR5KVxyXG4gICAgICApXHJcbiAgICApXHJcblxyXG4gICAgLy8gQ2FsbCBnZXRJdGVtcyBhbmQgd2F0Y2ggZm9yIGVycm9yc1xyXG4gICAgY29uc3QgZ2V0RGF0YSA9IHVwZGF0ZVJlc3VsdHMucGlwZShcclxuICAgICAgLy8gUGx1Y2sgdGhlIHNlYXJjaE1vZGVsIHZhbHVlIG91dCBvZiB0aGUgZm9ybU1vZGVsXHJcbiAgICAgIHBsdWNrKCdzZWFyY2hNb2RlbCcpLFxyXG5cclxuICAgICAgLy8gRW5zdXJlIHNlYXJjaCBzdHJpbmcgaXMgZGVmaW5lZFxyXG4gICAgICAvLyBUcmltIGFuZCBsb3dlcmNhc2UgaXQgdG8gYWlkIGNhc2UtaW5zZW5zaXRpdmUgc2VhcmNoaW5nXHJcbiAgICAgIG1hcCgoc2VhcmNoU3RyaW5nPzogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgbGV0IHNlYXJjaCA9IHNlYXJjaFN0cmluZyB8fCAnJztcclxuICAgICAgICByZXR1cm4gc2VhcmNoLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICB9KSxcclxuXHJcbiAgICAgIC8vIFNob3cgc3RhdHVzIG92ZXJsYXlcclxuICAgICAgdGFwKCgpID0+IHRoaXMuc3RhdHVzLnNldFN0YXR1cygncGVuZGluZycsICdMb2FkaW5nJykpLFxyXG5cclxuICAgICAgLy8gQ2FsbCBwYXNzZWQgZnVuY3Rpb25cclxuICAgICAgc3dpdGNoTWFwKChzZWFyY2hTdHJpbmc6IHN0cmluZykgPT4gXHJcbiAgICAgICAgLy9pZiB0aGUgdGFibGUgaXMgcGFnZWFibGUsIHBhZ2VJbmZvIHdpbGwgYmUgZGVmaW5lZC5cclxuICAgICAgICB0aGlzLmdldEl0ZW1zKHNlYXJjaFN0cmluZywgdGhpcy5wYWdlSW5mbylcclxuICAgICAgKSxcclxuXHJcbiAgICAgIC8vIElmIHBhc3NlZCBmdW5jdGlvbiBmYWlscywgc2hvdyBlcnJvciBzdGF0dXNcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyLCBjYXVnaHQpID0+IHtcclxuICAgICAgICB0aGlzLnN0YXR1cy5zZXRTdGF0dXMoJ2Vycm9yJywgdGhpcy5lcnJvclNlcnZpY2UucGFyc2VBcGlFcnJvcihlcnIpKTtcclxuICAgICAgICAvLyByZXR1cm4gdGhlIGNhdWdodCBvYnNlcnZhYmxlIHNvIHRoZSBzdWJzY3JpcHRpb24gZG9lc24ndCBjb21wbGV0ZVxyXG4gICAgICAgIHJldHVybiBjYXVnaHQ7XHJcbiAgICAgIH0pLFxyXG5cclxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKSxcclxuICAgICk7XHJcblxyXG4gICAgLy8gSGFuZGxlIHJldHVybmVkIGRhdGEgYW5kIG5vdGlmeSBwYXJlbnRcclxuICAgIGdldERhdGEuc3Vic2NyaWJlKChyZXN1bHRzOiBUYWJsZVNlYXJjaFJlc3VsdHMpID0+IHtcclxuICAgICAgLy8gTGltaXRpbmcgbnVtYmVyIG9mIHJlc3VsdHMgdG8gc2hvdyBpZiBub3QgcGFnZWFibGUgKGlmIHBhZ2VhYmxlIHRoZSBtYXggbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSB0YWJsZVxyXG4gICAgICAvLyBjYW4gYmUgbW9kaWZpZWQgYnkgaW5jcmVhc2luZy9kZWNyZWFzaW5nIHRoZSBwYWdlU2l6ZS4pXHJcbiAgICAgIGlmKCF0aGlzLnBhZ2VhYmxlKSB7XHJcbiAgICAgICAgcmVzdWx0cy5pdGVtcyA9IHJlc3VsdHMuaXRlbXMuc2xpY2UoMCwgdGhpcy5tYXhJdGVtQ291bnQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBOZWVkIHRvIGtub3cgdGhpcyAoYWxvbmcgd2l0aCBpZiB0aGVyZSdzIGEgdmFsdWUgaW4gdGhlIGZvcm1Nb2RlbCkgdG8gZGV0ZXJtaW5lIHdoYXQgdG8gc2hvdyBpbiB0aGUgZm9vdGVyXHJcbiAgICAgIHRoaXMuc2VhcmNoUmVzdWx0cyA9IHJlc3VsdHM7XHJcbiAgICBcclxuICAgICAgdGhpcy50YWJsZUNhcHRpb24gPSB0aGlzLmdldENhcHRpb24ocmVzdWx0cyk7XHJcbiAgICAgIHRoaXMucmVzdWx0c0NvdW50ID0gdGhpcy5wYWdlYWJsZSA/IHRoaXMucm93Q291bnRQaXBlLnRyYW5zZm9ybShyZXN1bHRzLCB0aGlzLm9iamVjdFR5cGUsIHVuZGVmaW5lZCwgdGhpcy5wYWdlSW5mbyk6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm93Q291bnRQaXBlLnRyYW5zZm9ybShyZXN1bHRzLCB0aGlzLm9iamVjdFR5cGUsIHRoaXMubWF4SXRlbUNvdW50KTtcclxuXHJcbiAgICAgIC8vIERpc2FibGUgc2VhcmNoYm94IHdoZW4gaW4gbm8tZGF0YSBzdGF0ZVxyXG4gICAgICBpZiAoIXJlc3VsdHMuaXRlbXMubGVuZ3RoICYmICF0aGlzLnNlYXJjaE1vZGVsLnZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hNb2RlbC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNlYXJjaE1vZGVsLmRpc2FibGVkKSB7XHJcbiAgICAgICAgLy8gcmUtZW5hYmxlIGlmIGl0IHdhcyBkaXNhYmxlZCwgYnV0IG5vdyBoYXMgaXRlbXNcclxuICAgICAgICB0aGlzLnNlYXJjaE1vZGVsLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc3RhdHVzLnNldFN0YXR1cygnaGFzRGF0YScpO1xyXG4gICAgICAvLyBTZW5kIHRoZSByZXN1bHRzIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50XHJcbiAgICAgIHRoaXMuaXRlbXNDaGFuZ2UuZW1pdChyZXN1bHRzKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFdoZW4gJ3JlYWR5JyBpcyBjb21wbGV0ZWQgYnkgdGhlIGhvc3QsIGluaXRpYWxpemUgdGhlIHRhYmxlIHdpdGggdGhlIGN1cnJlbnQgZm9ybSBtb2RlbCB2YWx1ZXNcclxuICAgIHRoaXMucmVhZHkuc3Vic2NyaWJlKHtcclxuICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmluaXRUYWJsZS5uZXh0KHRoaXMuZm9ybU1vZGVsLnZhbHVlKTtcclxuICAgICAgICB0aGlzLmluaXRUYWJsZS5jb21wbGV0ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95ZWQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95ZWQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8qKiBQYXNzIGFsb25nIHNvcnQgdG8gcGFyZW50IGNvbXBvbmVudCAqL1xyXG4gIG9uU29ydENoYW5nZShzb3J0OiBUYWJsZVNvcnQpOiB2b2lkIHtcclxuICAgIHRoaXMuc29ydENoYW5nZS5lbWl0KHNvcnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiBhIHBhZ2UgY2hhbmdlcywgc3RvcmUgdGhlIG5ldyBwYWdpbmdJbmZvIGFuZCBlbWl0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmb3JtIHRvIHRyaWdnZXIgZ2V0RGF0YS5cclxuICAgKi9cclxuICBvblBhZ2VDaGFuZ2UocGFnaW5nSW5mbzogUGFnaW5nSW5mbykge1xyXG4gICAgdGhpcy5zdGF0dXMuc2V0U3RhdHVzKCdwZW5kaW5nJywgJ0xvYWRpbmcnKTtcclxuICAgIHRoaXMucGFnZUluZm8gPSBwYWdpbmdJbmZvO1xyXG4gICAgdGhpcy5wYWdlQ2hhbmdlRW1pdHRlci5lbWl0KHBhZ2luZ0luZm8pO1xyXG4gICAgdGhpcy5wYWdlQ2hhbmdlZC5uZXh0KHRoaXMuZm9ybU1vZGVsLnZhbHVlKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBXaXJlIHVwIGEgaGFuZGxlciB0byB0aGUgYHJlZnJlc2hgIG9ic2VydmFibGUgc28gdGhhdCB3aGVuXHJcbiAgICogdGhlIGhvc3QgcGFnZSBjb250ZXh0IGNoYW5nZXMgaXQgY2FuIGZvcmNlIHRoZSB0YWJsZSB0byB1cGRhdGUgYXMgd2VsbC5cclxuICAgKlxyXG4gICAqIElmIHRoZSBgcmVmcmVzaGAgb2JzZXJ2YWJsZSBwYXNzZXMgb3B0aW9ucyBhbmQgdGhlIGBjbGVhclNlYXJjaGAgcHJvcGVydHlcclxuICAgKiBpcyBzZXQgdG8gdHJ1ZSwgcmVzZXQgdGhlIHNlYXJjaE1vZGVsIGFuZCBwYXNzIGFuIGVtcHR5IHN0cmluZy5cclxuICAgKlxyXG4gICAqIElmIGByZWZyZXNoYCBvYnNlcnZhYmxlIGRvZXMgbm90IHBhc3Mgb3B0aW9ucyBvciB0aGUgYGNsZWFyU2VhcmNoYCBwcm9wZXJ0eVxyXG4gICAqIGlzIHNldCB0byBmYWxzZSwgcGFzcyBhbG9uZyB0aGUgY3VycmVudCBzZWFyY2hNb2RlbCBWYWx1ZS5cclxuICAgKi9cclxuICBwcml2YXRlIHNldFVwUmVmcmVzaFRyaWdnZXIoKSB7XHJcbiAgICBpZiAodGhpcy5yZWZyZXNoKSB7XHJcbiAgICAgIHRoaXMucmVmcmVzaFRyaWdnZXIgPSB0aGlzLnJlZnJlc2gucGlwZShcclxuICAgICAgICBtYXAob3B0cyA9PiB7XHJcbiAgICAgICAgICBpZiAob3B0cyAmJiBvcHRzLmNsZWFyU2VhcmNoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoTW9kZWwucmVzZXQoJycsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHsgLi4udGhpcy5mb3JtTW9kZWwsIHNlYXJjaE1vZGVsOiAnJyB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybU1vZGVsLnZhbHVlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZClcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBHZXQgdGV4dCB0byBkaXNwbGF5IGluIHRoZSBmb290ZXIuICovXHJcbiAgcHJpdmF0ZSBnZXRDYXB0aW9uKHJlc3VsdHM6IFRhYmxlU2VhcmNoUmVzdWx0cyk6IHN0cmluZyB7XHJcbiAgICBpZiAocmVzdWx0cy5pdGVtcy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNlYXJjaE1vZGVsLnZhbHVlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLm5vU2VhcmNoUmVzdWx0c01lc3NhZ2UgfHwgJ1NlYXJjaGFibGVUYWJsZV9EZWZhdWx0X05vTWF0Y2hlc19TQycsIHsgc2VhcmNoVGV4dDogdGhpcy5zZWFyY2hNb2RlbC52YWx1ZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5ub0RhdGFNZXNzYWdlIHx8ICdTZWFyY2hhYmxlVGFibGVfRGVmYXVsdF9Ob0RhdGFfU0MnKTtcclxuICB9XHJcblxyXG59IiwiPGhlYWRlciAqbmdJZj1cIiFoaWRlSGVhZGVyXCJcclxuICAgICAgICBjbGFzcz1cImQtZmxleCBmbGV4LXNocmluayBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiPlxyXG4gIDxlYy10ZXh0Ym94IGlkPVwie3tpZH19X3NlYXJjaGJveFwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhaGlkZVNlYXJjaENvbnRyb2xcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwibWItMCBmbGV4LWdyb3cgbXItMlwiXHJcbiAgICAgICAgICAgICAgW2F1dG9mb2N1c109XCJhdXRvZm9jdXNcIlxyXG4gICAgICAgICAgICAgIFtmb3JtTW9kZWxdPVwic2VhcmNoTW9kZWxcIlxyXG4gICAgICAgICAgICAgIFt0YWJpbmRleF09XCJzZWFyY2hib3hUYWJJbmRleFwiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlYXJjaGJveFBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICBbcmVhZG9ubHldPVwic2VhcmNoYm94UmVhZG9ubHlcIj48L2VjLXRleHRib3g+XHJcbiAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvd1wiPlxyXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLnNlYXJjaGFibGUtdGFibGUtY29udHJvbHNcIj48L25nLWNvbnRlbnQ+XHJcbiAgPC9kaXY+XHJcbjwvaGVhZGVyPlxyXG48c2VjdGlvbiBpZD1cInt7aWR9fV9jYXJkXCJcclxuICAgICAgICAgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4ge3tvdmVybGF5Q2xhc3Nlc319XCJcclxuICAgICAgICAgW25nQ2xhc3NdPVwieydpcy10cmFuc2x1Y2VudCc6IHN0YXR1cy5zdGF0dXMgIT09ICdlcnJvcicsICdoYXMtbWFzayc6IHN0YXR1cy5zdGF0dXMgIT09ICdoYXNEYXRhJywgJ2NhcmQgbS0wIGJnLWNvbnRlbnQnOiAhY3VzdG9tQ29udGVudFRlbXBsYXRlICYmICFyZW1vdmVDYXJkfVwiXHJcbiAgICAgICAgIGVjT3ZlcmxheVxyXG4gICAgICAgICBbc3RhdHVzXT1cInN0YXR1cy5zdGF0dXNcIlxyXG4gICAgICAgICBbbWVzc2FnZV09XCJzdGF0dXMubWVzc2FnZVwiXHJcbiAgICAgICAgIFtkaXNwbGF5QXNNYXNrXT1cInRydWVcIj5cclxuICA8bmctY29udGVudCBzZWxlY3Q9XCIuY2FyZC1oZWFkZXJcIj48L25nLWNvbnRlbnQ+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbUNvbnRlbnRUZW1wbGF0ZSB8fCBkZWZhdWx0Q29udGVudFRlbXBsYXRlXCI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDwhLS0gdGhlIGRlZmF1bHQgdGVtcGxhdGUgaXMgYW4gZWMtdGFibGUgd2l0aCBwcm94aWVkLW92ZXIgc2VhcmNoYWJsZSB0YWJsZSBpbnB1dHMuIFxyXG4gICAgSWYgdGhhdCBkb2Vzbid0IHdvcmsgZm9yIHlvdSB0aGVuIHlvdSBjYW4gc3BlY2lmeSBhIGN1c3RvbUNvbnRlbnRUZW1wbGF0ZSB0byB1c2UgaW5zdGVhZFxyXG4gICAgYW5kIHN0aWxsIHJldGFpbiBhbGwgdGhlIGV2ZW50IGhhbmRsaW5nLCBoZWFkZXIsIGZvb3RlciBwYWdpbmF0aW9uLCBldGMgc3VwcG9ydCAtLT5cclxuICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDb250ZW50VGVtcGxhdGU+XHJcbiAgICA8ZWMtdGFibGUgaWQ9XCJ7e2lkfX1fdGFibGVcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwie3t0YWJsZUNsYXNzZXN9fVwiXHJcbiAgICAgICAgICAgICAgW2NsYXNzLmlzLWZpeGVkXT1cInRhYmxlTGF5b3V0Rml4ZWRcIlxyXG4gICAgICAgICAgICAgIFtzb3J0YWJsZV09XCJzb3J0YWJsZVwiXHJcbiAgICAgICAgICAgICAgW3NvcnRdPVwic29ydFwiXHJcbiAgICAgICAgICAgICAgKHNvcnRDaGFuZ2UpPVwib25Tb3J0Q2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgIFtyZXNpemFibGVdPVwicmVzaXphYmxlXCJcclxuICAgICAgICAgICAgICBbc2Nyb2xsYWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJzZWxlY3RhYmxlXCJcclxuICAgICAgICAgICAgICBbc2VsZWN0aW9uQ29udGV4dF09XCJzZWxlY3Rpb25Db250ZXh0XCJcclxuICAgICAgICAgICAgICBbc2VsZWN0aW9uVG9vbGJhclRlbXBsYXRlXT1cInNlbGVjdGlvblRvb2xiYXJUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgW3Jlc2l6YWJsZUNvbHVtbnNdPVwicmVzaXphYmxlQ29sdW1uc1wiPlxyXG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICA8L2VjLXRhYmxlPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDwhLS0gcGFnaW5hdGlvbiBmb290ZXIgdmlzaWJsZSBpZiB0YWJsZSBpcyBwYWdlLWFibGUgYW5kIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHBhZ2Ugb2YgcmVzdWx0cyAtLT5cclxuICA8Zm9vdGVyICpuZ0lmPVwiIWhpZGVGb290ZXIgJiYgcGFnZWFibGUgJiYgc2VhcmNoUmVzdWx0cy50b3RhbEl0ZW1zQmVmb3JlUGFnaW5nISA+IHBhZ2VTaXplIVwiXHJcbiAgICAgICAgICBjbGFzcz1cInBhZ2luYXRpb24tZm9vdGVyXCJcclxuICAgICAgICAgIFtjbGFzcy5ib3JkZXItdG9wXT1cIiFjdXN0b21Db250ZW50VGVtcGxhdGVcIj5cclxuICAgIDxlYy10YWJsZS1wYWdpbmF0aW9uIGlkPVwie3tpZH19X3BhZ2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9udC1jb2xvci1wcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cInNlYXJjaFJlc3VsdHMudG90YWxJdGVtc0JlZm9yZVBhZ2luZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW21heFRhYnNdPVwibWF4VGFic1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcGFnZU51bWJlcl09XCJwYWdlSW5mbz8ucGFnZU51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAocGFnZUNoYW5nZWQpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIj5cclxuICAgIDwvZWMtdGFibGUtcGFnaW5hdGlvbj5cclxuICAgIDxkaXYgaWQ9XCJyZXN1bHRzQ291bnRcIlxyXG4gICAgICAgICAqbmdJZj1cInNlYXJjaFJlc3VsdHM/Lml0ZW1zPy5sZW5ndGhcIlxyXG4gICAgICAgICBjbGFzcz1cIm1sLWF1dG8gZm9udC1jb2xvci1oaW50IHRleHQtdHJ1bmNhdGVcIiBcclxuICAgICAgICAgdGl0bGU9XCJ7e3Jlc3VsdHNDb3VudH19IHt7YWRkaXRpb25hbENvdW50VGV4dH19XCI+e3tyZXN1bHRzQ291bnR9fSB7e2FkZGl0aW9uYWxDb3VudFRleHR9fTwvZGl2PlxyXG4gIDwvZm9vdGVyPlxyXG5cclxuICA8IS0tIGRlZmF1bHQgZm9vdGVyOiB2aXNpYmxlIGlmIGhpZGVGb290ZXIgaXMgZmFsc2UgYW5kIHRhYmxlIGlzIG5vdCBwYWdlLWFibGUgb3IgdGhlcmUgYXJlIG9ubHkgb25lIHBhZ2Ugb2YgcmVzdWx0cyAoYWx3YXlzIHNob3dzIGlmIHRoZXJlIGlzIGEgY2FwdGlvbiB0byBpbmRpY2F0ZSBubyByZXN1bHRzKSAtLT5cclxuICA8Zm9vdGVyICpuZ0lmPVwiKCFoaWRlRm9vdGVyICYmICghcGFnZWFibGUgfHwgc2VhcmNoUmVzdWx0cy50b3RhbEl0ZW1zQmVmb3JlUGFnaW5nISA8PSBwYWdlU2l6ZSEpKSB8fCB0YWJsZUNhcHRpb25cIlxyXG4gICAgICAgICAgY2xhc3M9XCJjYXB0aW9uLWZvb3RlclwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2hhcy1yZXN1bHRzJzogc2VhcmNoUmVzdWx0cz8uaXRlbXM/Lmxlbmd0aCwgJ2JvcmRlci10b3AnOiBzZWFyY2hSZXN1bHRzPy5pdGVtcz8ubGVuZ3RoICYmICFjdXN0b21Db250ZW50VGVtcGxhdGV9XCI+XHJcbiAgICA8bmctY29udGVudCAqbmdJZj1cIiF0YWJsZUNhcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgc2VsZWN0PVwiLnNlYXJjaGFibGUtdGFibGUtZm9vdGVyXCI+PC9uZy1jb250ZW50PlxyXG4gICAgPGRpdiBpZD1cInRhYmxlQ2FwdGlvblwiXHJcbiAgICAgICAgICpuZ0lmPVwidGFibGVDYXB0aW9uXCJcclxuICAgICAgICAgW2lubmVySFRNTF09XCJ0YWJsZUNhcHRpb25cIj48L2Rpdj5cclxuICAgIDxkaXYgaWQ9XCJyZXN1bHRzQ291bnRcIlxyXG4gICAgICAgICAqbmdJZj1cInNlYXJjaFJlc3VsdHM/Lml0ZW1zPy5sZW5ndGhcIlxyXG4gICAgICAgICBjbGFzcz1cIm1sLWF1dG8gdGV4dC10cnVuY2F0ZVwiXHJcbiAgICAgICAgIHRpdGxlPVwie3tyZXN1bHRzQ291bnR9fSB7e2FkZGl0aW9uYWxDb3VudFRleHR9fVwiPnt7cmVzdWx0c0NvdW50fX0ge3thZGRpdGlvbmFsQ291bnRUZXh0fX08L2Rpdj5cclxuICA8L2Zvb3Rlcj5cclxuPC9zZWN0aW9uPiJdfQ==
@@ -16,8 +16,6 @@ export class TablePaginationComponent {
16
16
  * Maximum number of page tabs to show
17
17
  */
18
18
  this.maxTabs = 10;
19
- /** When true the tabs and the more pages dropdown will be disabled */
20
- this.disablePaginationControls = false;
21
19
  /**
22
20
  * Emits when the page changes.
23
21
  *
@@ -85,7 +83,6 @@ export class TablePaginationComponent {
85
83
  for (let i = menuItem.value.firstPage; i <= menuItem.value.lastPage; i++) {
86
84
  tabItems.push({
87
85
  label: `${i}`,
88
- disabled: this.disablePaginationControls,
89
86
  onClick: () => { this.onPageChange(i); }
90
87
  });
91
88
  }
@@ -131,12 +128,12 @@ export class TablePaginationComponent {
131
128
  }
132
129
  }
133
130
  TablePaginationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TablePaginationComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
134
- TablePaginationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: TablePaginationComponent, selector: "ec-table-pagination", inputs: { id: "id", totalItems: "totalItems", pageSize: "pageSize", pageNumber: "pageNumber", maxTabs: "maxTabs", disablePaginationControls: "disablePaginationControls" }, outputs: { pageChanged: "pageChanged" }, host: { classAttribute: "d-flex px-2 align-items-center" }, usesOnChanges: true, ngImport: i0, template: "<ec-tabs id=\"{{id}}_pages\"\r\n class=\"my-2 is-condensed\"\r\n [tabGroup]=\"currentTabs\"\r\n tabStyle=\"pills\">\r\n</ec-tabs>\r\n<ec-dropdown id=\"{{id}}_morePages\"\r\n *ngIf=\"dropdownItems.length > 1\"\r\n class=\"my-1 ml-1\"\r\n menuTemplateType=\"label\"\r\n icon=\"icon-more\"\r\n menuPosition=\"left\"\r\n [menuMinWidth]=\"80\"\r\n [showArrow]=\"false\"\r\n [popupFixed]=\"true\"\r\n [items]=\"dropdownItems\"\r\n [disabled]=\"disablePaginationControls\"\r\n (itemSelected)=\"onItemSelected($event)\">\r\n</ec-dropdown>", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.TabsComponent, selector: "ec-tabs", inputs: ["id", "tabindex", "tabStyle", "tabGroup"] }, { kind: "component", type: i3.DropdownComponent, selector: "ec-dropdown", inputs: ["id", "autofocus", "status", "disabled", "label", "icon", "buttonType", "buttonAlignment", "buttonTitle", "tabindex", "showArrow", "items", "menuTemplateType", "menuTitle", "menuHeight", "menuWidth", "menuMinWidth", "menuPosition", "menuFooter", "popupFixed", "buttonCustomTemplate", "pending"], outputs: ["itemSelected", "popupOpened"] }] });
131
+ TablePaginationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: TablePaginationComponent, selector: "ec-table-pagination", inputs: { id: "id", totalItems: "totalItems", pageSize: "pageSize", pageNumber: "pageNumber", maxTabs: "maxTabs" }, outputs: { pageChanged: "pageChanged" }, host: { classAttribute: "d-flex px-2 align-items-center" }, usesOnChanges: true, ngImport: i0, template: "<ec-tabs id=\"{{id}}_pages\"\r\n class=\"my-2 is-condensed\"\r\n [tabGroup]=\"currentTabs\"\r\n tabStyle=\"pills\">\r\n</ec-tabs>\r\n<ec-dropdown id=\"{{id}}_morePages\"\r\n *ngIf=\"dropdownItems.length > 1\"\r\n class=\"my-1 ml-1\"\r\n menuTemplateType=\"label\"\r\n icon=\"icon-more\"\r\n menuPosition=\"left\"\r\n [menuMinWidth]=\"80\"\r\n [showArrow]=\"false\"\r\n [popupFixed]=\"true\"\r\n [items]=\"dropdownItems\"\r\n (itemSelected)=\"onItemSelected($event)\">\r\n</ec-dropdown>", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.TabsComponent, selector: "ec-tabs", inputs: ["id", "tabindex", "tabStyle", "tabGroup"] }, { kind: "component", type: i3.DropdownComponent, selector: "ec-dropdown", inputs: ["id", "autofocus", "status", "disabled", "label", "icon", "buttonType", "buttonAlignment", "buttonTitle", "tabindex", "showArrow", "items", "menuTemplateType", "menuTitle", "menuHeight", "menuWidth", "menuMinWidth", "menuPosition", "menuFooter", "popupFixed", "buttonCustomTemplate", "pending"], outputs: ["itemSelected", "popupOpened"] }] });
135
132
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TablePaginationComponent, decorators: [{
136
133
  type: Component,
137
134
  args: [{ selector: 'ec-table-pagination', host: {
138
135
  class: 'd-flex px-2 align-items-center'
139
- }, template: "<ec-tabs id=\"{{id}}_pages\"\r\n class=\"my-2 is-condensed\"\r\n [tabGroup]=\"currentTabs\"\r\n tabStyle=\"pills\">\r\n</ec-tabs>\r\n<ec-dropdown id=\"{{id}}_morePages\"\r\n *ngIf=\"dropdownItems.length > 1\"\r\n class=\"my-1 ml-1\"\r\n menuTemplateType=\"label\"\r\n icon=\"icon-more\"\r\n menuPosition=\"left\"\r\n [menuMinWidth]=\"80\"\r\n [showArrow]=\"false\"\r\n [popupFixed]=\"true\"\r\n [items]=\"dropdownItems\"\r\n [disabled]=\"disablePaginationControls\"\r\n (itemSelected)=\"onItemSelected($event)\">\r\n</ec-dropdown>" }]
136
+ }, template: "<ec-tabs id=\"{{id}}_pages\"\r\n class=\"my-2 is-condensed\"\r\n [tabGroup]=\"currentTabs\"\r\n tabStyle=\"pills\">\r\n</ec-tabs>\r\n<ec-dropdown id=\"{{id}}_morePages\"\r\n *ngIf=\"dropdownItems.length > 1\"\r\n class=\"my-1 ml-1\"\r\n menuTemplateType=\"label\"\r\n icon=\"icon-more\"\r\n menuPosition=\"left\"\r\n [menuMinWidth]=\"80\"\r\n [showArrow]=\"false\"\r\n [popupFixed]=\"true\"\r\n [items]=\"dropdownItems\"\r\n (itemSelected)=\"onItemSelected($event)\">\r\n</ec-dropdown>" }]
140
137
  }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { id: [{
141
138
  type: Input
142
139
  }], totalItems: [{
@@ -147,9 +144,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
147
144
  type: Input
148
145
  }], maxTabs: [{
149
146
  type: Input
150
- }], disablePaginationControls: [{
151
- type: Input
152
147
  }], pageChanged: [{
153
148
  type: Output
154
149
  }] } });
155
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS90YWJsZS90YWJsZS1wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9kaXNwbGF5L3RhYmxlL3RhYmxlLXBhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBeUIsTUFBTSxlQUFlLENBQUM7QUFHOUYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7OztBQXVCL0QsTUFBTSxPQUFPLHdCQUF3QjtJQTBEbkMsWUFBb0IsRUFBYztRQUFkLE9BQUUsR0FBRixFQUFFLENBQVk7UUEzQ2xDOzs7V0FHRztRQUNNLGVBQVUsR0FBVyxDQUFDLENBQUM7UUFFaEM7O1dBRUc7UUFDTSxZQUFPLEdBQVksRUFBRSxDQUFDO1FBRS9CLHNFQUFzRTtRQUM3RCw4QkFBeUIsR0FBYSxLQUFLLENBQUM7UUFFckQ7Ozs7Ozs7Ozs7Ozs7Ozs7V0FnQkc7UUFDTyxnQkFBVyxHQUE2QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXJFOztXQUVHO1FBQ0ksa0JBQWEsR0FBMEIsRUFBRSxDQUFDO1FBRWpEOztXQUVHO1FBQ0ksZ0JBQVcsR0FBYSxJQUFJLFFBQVEsRUFBRSxDQUFDO0lBRVIsQ0FBQztJQUd2QyxXQUFXO1FBQ1QsSUFBRyxJQUFJLENBQUMsVUFBVSxLQUFLLENBQUMsRUFBRTtZQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7WUFDbEMsT0FBTztTQUNS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USxFQUFFLFFBQVEsRUFBQztTQUM5QyxDQUFDLENBQUM7SUFDTCxDQUFDOztxSEF6SlUsd0JBQXdCO3lHQUF4Qix3QkFBd0IsaVdDMUJyQyxnckJBaUJjOzJGRFNELHdCQUF3QjtrQkFQcEMsU0FBUzsrQkFDRSxxQkFBcUIsUUFFekI7d0JBQ0osS0FBSyxFQUFFLGdDQUFnQztxQkFDeEM7aUdBSVEsRUFBRTtzQkFBVixLQUFLO2dCQU1HLFVBQVU7c0JBQWxCLEtBQUs7Z0JBS0csUUFBUTtzQkFBaEIsS0FBSztnQkFNRyxVQUFVO3NCQUFsQixLQUFLO2dCQUtHLE9BQU87c0JBQWYsS0FBSztnQkFHRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBbUJJLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgRWxlbWVudFJlZiwgT25DaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAnLi4vLi4vY29udHJvbHMvbWVudS9tZW51LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE5hdkl0ZW0gfSBmcm9tICcuLi8uLi9jb250cm9scy9uYXZpZ2F0aW9uL25hdi1pdGVtJztcclxuaW1wb3J0IHsgTmF2R3JvdXAgfSBmcm9tICcuLi8uLi9jb250cm9scy9uYXZpZ2F0aW9uL25hdi1ncm91cCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luZ0luZm8ge1xyXG4gIC8qKk51bWJlciBvZiBpdGVtcyB0byBza2lwIHRvIGdldCB0byB0aGlzIHBhZ2UqL1xyXG4gIHNraXA6IG51bWJlcixcclxuICAvKipOdW1iZXIgb2YgaXRlbXMgaW4gdGhpcyBwYWdlKi9cclxuICBwYWdlU2l6ZTogbnVtYmVyLFxyXG4gIC8qKlRoZSBudW1iZXIgb2YgdGhlIHBhZ2UqL1xyXG4gIHBhZ2VOdW1iZXI6IG51bWJlclxyXG59XHJcblxyXG5pbnRlcmZhY2UgUGFnZVJhbmdlIHtcclxuICBmaXJzdFBhZ2U6IG51bWJlcixcclxuICBsYXN0UGFnZTogbnVtYmVyXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWMtdGFibGUtcGFnaW5hdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLXBhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIGhvc3Q6IHtcclxuICAgIGNsYXNzOiAnZC1mbGV4IHB4LTIgYWxpZ24taXRlbXMtY2VudGVyJ1xyXG4gIH1cclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYmxlUGFnaW5hdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcblxyXG4gIEBJbnB1dCgpIGlkPzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBUb3RhbCBudW1iZXIgb2Ygcm93cyB0aGF0IHdlIG5lZWQgdG8gcGFnZSB0aHJvdWdoLlxyXG4gICAqIGkuZS4gdGhlIHN1bSBvZiBhbGwgcm93cyBvbiBhbGwgcGFnZXMuXHJcbiAgICovXHJcbiAgQElucHV0KCkgdG90YWxJdGVtcyE6IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogTWF4IHNpemUgb2YgYSBwYWdlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHBhZ2VTaXplITogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBOdW1iZXIgb2YgdGhlIGN1cnJlbnQgcGFnZS5cclxuICAgKiBJbml0aWFsIHZhbHVlIGlzIDEsIGNhbiBiZSBvdmVycmlkZGVuIHRvIGNoYW5nZSB0aGUgc3RhcnRpbmcgcGFnZSBudW1iZXIuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcGFnZU51bWJlcjogbnVtYmVyID0gMTtcclxuXHJcbiAgLyoqXHJcbiAgICogTWF4aW11bSBudW1iZXIgb2YgcGFnZSB0YWJzIHRvIHNob3dcclxuICAgKi9cclxuICBASW5wdXQoKSBtYXhUYWJzPzogbnVtYmVyID0gMTA7XHJcblxyXG4gIC8qKiBXaGVuIHRydWUgdGhlIHRhYnMgYW5kIHRoZSBtb3JlIHBhZ2VzIGRyb3Bkb3duIHdpbGwgYmUgZGlzYWJsZWQgKi9cclxuICBASW5wdXQoKSBkaXNhYmxlUGFnaW5hdGlvbkNvbnRyb2xzPzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0cyB3aGVuIHRoZSBwYWdlIGNoYW5nZXMuXHJcbiAgICogXHJcbiAgICogQmluZCB0byB0aGUgZXZlbnQgaW4gYSB0ZW1wbGF0ZSB1c2luZyBhIGZ1bmN0aW9uIHRoYXQgdXNlcyB0aGUgXCJza2lwXCIgYW5kIFwicGFnZVNpemVcIlxyXG4gICAqIHByb3BlcnRpZXMgdG8gc2xpY2UgdGhlIG5ldyBwYWdlIGZyb20geW91ciBkYXRhIHNldC5cclxuICAgKiBcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIC8vLmh0bWxcclxuICAgKiAocGFnZUNoYW5nZWQpPVwib25QYWdlQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgKiAvLy50c1xyXG4gICAqIHB1YmxpYyBvblBhZ2VDaGFuZ2VkKGV2ZW50OiBQYWdpbmdJbmZvKSB7XHJcbiAgICogIHRoaXMuY3VycmVudFBhZ2VJdGVtcyA9IHRoaXMucGFnaW5hdGVkVGFibGVJdGVtcy5zbGljZShldmVudC5za2lwLCBldmVudC5za2lwICsgZXZlbnQucGFnZVNpemUpO1xyXG4gICAqIH1cclxuICAgKiAvL1NpbmNlIHBhZ2VDaGFuZ2VkIGRvZXNuJ3QgZW1pdCBmb3IgdGhlIGluaXRpYWwgcGFnZSwgb25QYWdlQ2hhbmdlZCBzaG91bGQgYmUgbWFudWFsbHkgY2FsbGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiBcclxuICAgKiAvL3VzaW5nIGdldFBhZ2luZ0luZm86XHJcbiAgICogdGhpcy5vblBhZ2VDaGFuZ2VkKFRhYmxlUGFnaW5hdGlvbkNvbXBvbmVudC5nZXRQYWdpbmdJbmZvKHRoaXMuc3RhcnRpbmdQYWdlTnVtYmVyLCB0aGlzLnBhZ2VTaXplKSk7XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8UGFnaW5nSW5mbz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbCBwb3NzaWJsZSBpdGVtcyBpbiB0aGUgZHJvcGRvd24gbWVudS5cclxuICAgKi9cclxuICBwdWJsaWMgZHJvcGRvd25JdGVtczogTWVudUl0ZW08UGFnZVJhbmdlPltdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIEN1cnJlbnQgdGFicyBiZWluZyBkaXNwbGF5ZWQuXHJcbiAgICovXHJcbiAgcHVibGljIGN1cnJlbnRUYWJzOiBOYXZHcm91cCA9IG5ldyBOYXZHcm91cCgpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmKSB7IH1cclxuXHJcblxyXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xyXG4gICAgaWYodGhpcy50b3RhbEl0ZW1zID09PSAwKSB7XHJcbiAgICAgIHRoaXMuZHJvcGRvd25JdGVtcyA9IFtdO1xyXG4gICAgICB0aGlzLmN1cnJlbnRUYWJzID0gbmV3IE5hdkdyb3VwKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0RHJvcGRvd25JdGVtcygpO1xyXG5cclxuICAgIC8vRmluZCB0aGUgbWVudSBpdGVtIHRoYXQgdGhlIHBhZ2UgY29ycmVzcG9uZGluZyB0byB0aGlzLnBhZ2VOdW1iZXIgbGllcyBpblxyXG4gICAgbGV0IGZpcnN0TWVudUl0ZW0gPSB0aGlzLmRyb3Bkb3duSXRlbXMuZmluZChpdGVtID0+IHtcclxuICAgICAgcmV0dXJuIGl0ZW0udmFsdWUhLmZpcnN0UGFnZSA8PSB0aGlzLnBhZ2VOdW1iZXIgJiYgaXRlbS52YWx1ZSEubGFzdFBhZ2UgPj0gdGhpcy5wYWdlTnVtYmVyO1xyXG4gICAgfSk7XHJcbiAgICBpZighZmlyc3RNZW51SXRlbSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBQYWdlICR7dGhpcy5wYWdlTnVtYmVyfSBkb2VzIG5vdCBleGlzdC4gU2V0dGluZyB0aGUgc3RhcnRpbmcgcGFnZSBudW1iZXIgdG8gMS5gKTtcclxuICAgICAgZmlyc3RNZW51SXRlbSA9IHRoaXMuZHJvcGRvd25JdGVtc1swXTtcclxuICAgICAgdGhpcy5wYWdlTnVtYmVyID0gMTtcclxuICAgIH1cclxuICAgIC8vU2V0IHRoZSB0YWJzIHRvIHRob3NlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpcnN0IG1lbnUgaXRlbS5cclxuICAgIC8vTm90ZSB0aGF0IHdlIGRvbnQgZW1pdCBhIHBhZ2VDaGFuZ2VkIGV2ZW50IGhlcmUgYmVjYXVzZSB0aGUgY29uc3VtZXIgYWxyZWFkeSBrbm93cyB3aGF0IHRoZSBmaXJzdCBwYWdlIGlzLlxyXG4gICAgdGhpcy5zZXRUYWJzKGZpcnN0TWVudUl0ZW0sIHRoaXMucGFnZU51bWJlcik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHaXZlbiB0aGUgbnVtYmVyIG9mIGEgcGFnZSBhbmQgdGhlIHBhZ2VTaXplLCByZXR1cm4gdGhlIFBhZ2luZ0luZm8gb2JqZWN0IGZvciB0aGF0IHBhZ2UuXHJcbiAgICovXHJcbiAgcHVibGljIHN0YXRpYyBnZXRQYWdpbmdJbmZvKHBhZ2VOdW1iZXI6IG51bWJlciwgcGFnZVNpemU6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHsgc2tpcDogKHBhZ2VOdW1iZXIgLSAxKSpwYWdlU2l6ZSwgcGFnZVNpemU6IHBhZ2VTaXplLCBwYWdlTnVtYmVyOiBwYWdlTnVtYmVyIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25JdGVtU2VsZWN0ZWQobWVudUl0ZW06IE1lbnVJdGVtPFBhZ2VSYW5nZT4pIHsgIFxyXG4gICAgdGhpcy5zZXRUYWJzKG1lbnVJdGVtKTtcclxuICAgIHRoaXMub25QYWdlQ2hhbmdlKHBhcnNlSW50KHRoaXMuY3VycmVudFRhYnMuc2VsZWN0ZWQhLmxhYmVsISkpO1xyXG4gICAgLy9mb2N1cyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHRhYiB0byBoZWxwIGtleWJvYXJkIG5hdmlnYXRpb25cclxuICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudGFiLmFjdGl2ZScpLmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYSB0YWIgZm9yIGVhY2ggaXRlbSBpbiB0aGUgcmFuZ2UgcmVwcmVzZW50ZWQgaW4gdGhlIE1lbnVJdGVtXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRUYWJzKG1lbnVJdGVtOiBNZW51SXRlbTxQYWdlUmFuZ2U+LCBwYWdlTnVtYmVyPzogbnVtYmVyKSB7XHJcbiAgICBsZXQgdGFiSXRlbXM6IE5hdkl0ZW1bXSA9IFtdO1xyXG4gICAgZm9yKGxldCBpID0gbWVudUl0ZW0udmFsdWUhLmZpcnN0UGFnZTsgaSA8PSBtZW51SXRlbS52YWx1ZSEubGFzdFBhZ2U7IGkrKykge1xyXG4gICAgICB0YWJJdGVtcy5wdXNoKHtcclxuICAgICAgICBsYWJlbDogYCR7aX1gLFxyXG4gICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVQYWdpbmF0aW9uQ29udHJvbHMsXHJcbiAgICAgICAgb25DbGljazogKCkgPT4ge3RoaXMub25QYWdlQ2hhbmdlKGkpfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vaWYgYSBwYWdlTnVtYmVyIGlzIHByb3ZpZGVkLCBzZWxlY3QgdGhlIHRhYiB3aXRoIHRoYXQgcGFnZSBudW1iZXIuXHJcbiAgICAvL290aGVyd2lzZSwgc2VsZWN0IHRoZSBmaXJzdCB0YWIuXHJcbiAgICBsZXQgc2VsZWN0ZWRUYWI6IE5hdkl0ZW0gPSBwYWdlTnVtYmVyID8gdGFiSXRlbXMuZmluZCh0YWIgPT4ge3JldHVybiBwYXJzZUludCh0YWIubGFiZWwhKSA9PT0gcGFnZU51bWJlcn0pIVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhYkl0ZW1zWzBdO1xyXG4gICAgdGhpcy5jdXJyZW50VGFicyA9IG5ldyBOYXZHcm91cCh0YWJJdGVtcywgc2VsZWN0ZWRUYWIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblBhZ2VDaGFuZ2UocGFnZU51bWJlcjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnBhZ2VOdW1iZXIgPSBwYWdlTnVtYmVyO1xyXG4gICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KFRhYmxlUGFnaW5hdGlvbkNvbXBvbmVudC5nZXRQYWdpbmdJbmZvKHBhZ2VOdW1iZXIsIHRoaXMucGFnZVNpemUpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGFsbCB0aGUgaXRlbXMgZm9yIHRoZSBkcm9wZG93biBtZW51LlxyXG4gICAqIEEgZHJvcGRvd24gaXRlbSByZXByZXNlbnRzIGEgcGFnZSByYW5nZSAoZS5nLiAxLTEwLCAxMS0yMCwgb3IgMjEtMjUpLlxyXG4gICAqIEEgc2luZ2xlIGRyb3Bkb3duIGl0ZW0gY2FuIHJlcHJlc2VudCBhIHJhbmdlIG9mIHVwIHRvIDEwIHBhZ2VzICh0aGUgbGFzdCBpdGVtIGNvdWxkIGhhdmUgbGVzcyB0aGFuIDEwKS5cclxuICAgKi9cclxuICBwcml2YXRlIHNldERyb3Bkb3duSXRlbXMoKSB7XHJcbiAgICB0aGlzLmRyb3Bkb3duSXRlbXMgPSBbXTtcclxuICAgIC8vZmluZCB0aGUgbGFzdCBwYWdlXHJcbiAgICBsZXQgZGl2aWRlbmQgPSBNYXRoLmZsb29yKHRoaXMudG90YWxJdGVtcyAvIHRoaXMucGFnZVNpemUpO1xyXG4gICAgbGV0IHJlbWFpbmRlciA9IHRoaXMudG90YWxJdGVtcyAlIHRoaXMucGFnZVNpemU7XHJcbiAgICBjb25zdCBsYXN0UGFnZSA9IChyZW1haW5kZXIgPT09IDApID8gZGl2aWRlbmQgOiBkaXZpZGVuZCArIDE7XHJcblxyXG4gICAgLy9rZWVwIGJ1aWxkaW5nIG1lbnUgaXRlbXMgb2YgdGhlIGZvcm0gMS0xMCwgMTEtMjAsIDIxLTMwLCBldGMgdW50aWwgIFxyXG4gICAgLy9lbmQgPj0gbGFzdFBhZ2UsIHdoaWNoIG1lYW5zIHdlJ3ZlIGZvdW5kIHRoZSByYW5nZSB0aGF0IGNvbnRhaW5zIHRoZSBsYXN0IHBhZ2UuXHJcbiAgICBsZXQgc3RhcnQgPSAxO1xyXG5cclxuICAgIGxldCBtYXhUYWJzID0gdGhpcy5tYXhUYWJzIHx8IDEwO1xyXG4gICAgbGV0IGVuZCA9IG1heFRhYnM7XHJcblxyXG4gICAgd2hpbGUoZW5kIDwgbGFzdFBhZ2UpIHtcclxuICAgICAgdGhpcy5kcm9wZG93bkl0ZW1zLnB1c2goe1xyXG4gICAgICAgIGxhYmVsOiBgJHtzdGFydH0tJHtlbmR9YCxcclxuICAgICAgICB2YWx1ZToge2ZpcnN0UGFnZTogc3RhcnQsIGxhc3RQYWdlOiBlbmR9XHJcbiAgICAgIH0pO1xyXG4gICAgICBzdGFydCA9IHN0YXJ0ICsgbWF4VGFicztcclxuICAgICAgZW5kID0gZW5kICsgbWF4VGFicztcclxuICAgIH1cclxuICAgIC8vYWRkIHRoZSBtZW51IGl0ZW0gdGhhdCBjb250YWlucyB0aGUgbGFzdCBwYWdlLlxyXG4gICAgdGhpcy5kcm9wZG93bkl0ZW1zLnB1c2goe1xyXG4gICAgICBsYWJlbDogKHN0YXJ0ID09PSBsYXN0UGFnZSkgPyBgJHtzdGFydH1gOiBgJHtzdGFydH0tJHtsYXN0UGFnZX1gLFxyXG4gICAgICB2YWx1ZToge2ZpcnN0UGFnZTogc3RhcnQsIGxhc3RQYWdlOiBsYXN0UGFnZX1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbn0iLCI8ZWMtdGFicyBpZD1cInt7aWR9fV9wYWdlc1wiXHJcbiAgICAgICAgIGNsYXNzPVwibXktMiBpcy1jb25kZW5zZWRcIlxyXG4gICAgICAgICBbdGFiR3JvdXBdPVwiY3VycmVudFRhYnNcIlxyXG4gICAgICAgICB0YWJTdHlsZT1cInBpbGxzXCI+XHJcbjwvZWMtdGFicz5cclxuPGVjLWRyb3Bkb3duIGlkPVwie3tpZH19X21vcmVQYWdlc1wiXHJcbiAgICAgICAgICAgICAqbmdJZj1cImRyb3Bkb3duSXRlbXMubGVuZ3RoID4gMVwiXHJcbiAgICAgICAgICAgICBjbGFzcz1cIm15LTEgbWwtMVwiXHJcbiAgICAgICAgICAgICBtZW51VGVtcGxhdGVUeXBlPVwibGFiZWxcIlxyXG4gICAgICAgICAgICAgaWNvbj1cImljb24tbW9yZVwiXHJcbiAgICAgICAgICAgICBtZW51UG9zaXRpb249XCJsZWZ0XCJcclxuICAgICAgICAgICAgIFttZW51TWluV2lkdGhdPVwiODBcIlxyXG4gICAgICAgICAgICAgW3Nob3dBcnJvd109XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICBbcG9wdXBGaXhlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgIFtpdGVtc109XCJkcm9wZG93bkl0ZW1zXCJcclxuICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlUGFnaW5hdGlvbkNvbnRyb2xzXCJcclxuICAgICAgICAgICAgIChpdGVtU2VsZWN0ZWQpPVwib25JdGVtU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG48L2VjLWRyb3Bkb3duPiJdfQ==
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS90YWJsZS90YWJsZS1wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9kaXNwbGF5L3RhYmxlL3RhYmxlLXBhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBeUIsTUFBTSxlQUFlLENBQUM7QUFHOUYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7OztBQXVCL0QsTUFBTSxPQUFPLHdCQUF3QjtJQXVEbkMsWUFBb0IsRUFBYztRQUFkLE9BQUUsR0FBRixFQUFFLENBQVk7UUF4Q2xDOzs7V0FHRztRQUNNLGVBQVUsR0FBVyxDQUFDLENBQUM7UUFFaEM7O1dBRUc7UUFDTSxZQUFPLEdBQVksRUFBRSxDQUFDO1FBRS9COzs7Ozs7Ozs7Ozs7Ozs7O1dBZ0JHO1FBQ08sZ0JBQVcsR0FBNkIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVyRTs7V0FFRztRQUNJLGtCQUFhLEdBQTBCLEVBQUUsQ0FBQztRQUVqRDs7V0FFRztRQUNJLGdCQUFXLEdBQWEsSUFBSSxRQUFRLEVBQUUsQ0FBQztJQUVSLENBQUM7SUFHdkMsV0FBVztRQUNULElBQUcsSUFBSSxDQUFDLFVBQVUsS0FBSyxDQUFDLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2xDLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRXhCLDJF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MUJyQyx1bkJBZ0JjOzJGRFVELHdCQUF3QjtrQkFQcEMsU0FBUzsrQkFDRSxxQkFBcUIsUUFFekI7d0JBQ0osS0FBSyxFQUFFLGdDQUFnQztxQkFDeEM7aUdBSVEsRUFBRTtzQkFBVixLQUFLO2dCQU1HLFVBQVU7c0JBQWxCLEtBQUs7Z0JBS0csUUFBUTtzQkFBaEIsS0FBSztnQkFNRyxVQUFVO3NCQUFsQixLQUFLO2dCQUtHLE9BQU87c0JBQWYsS0FBSztnQkFtQkksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBFbGVtZW50UmVmLCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICcuLi8uLi9jb250cm9scy9tZW51L21lbnUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTmF2SXRlbSB9IGZyb20gJy4uLy4uL2NvbnRyb2xzL25hdmlnYXRpb24vbmF2LWl0ZW0nO1xyXG5pbXBvcnQgeyBOYXZHcm91cCB9IGZyb20gJy4uLy4uL2NvbnRyb2xzL25hdmlnYXRpb24vbmF2LWdyb3VwJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5nSW5mbyB7XHJcbiAgLyoqTnVtYmVyIG9mIGl0ZW1zIHRvIHNraXAgdG8gZ2V0IHRvIHRoaXMgcGFnZSovXHJcbiAgc2tpcDogbnVtYmVyLFxyXG4gIC8qKk51bWJlciBvZiBpdGVtcyBpbiB0aGlzIHBhZ2UqL1xyXG4gIHBhZ2VTaXplOiBudW1iZXIsXHJcbiAgLyoqVGhlIG51bWJlciBvZiB0aGUgcGFnZSovXHJcbiAgcGFnZU51bWJlcjogbnVtYmVyXHJcbn1cclxuXHJcbmludGVyZmFjZSBQYWdlUmFuZ2Uge1xyXG4gIGZpcnN0UGFnZTogbnVtYmVyLFxyXG4gIGxhc3RQYWdlOiBudW1iZXJcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdlYy10YWJsZS1wYWdpbmF0aW9uJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtcGFnaW5hdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgaG9zdDoge1xyXG4gICAgY2xhc3M6ICdkLWZsZXggcHgtMiBhbGlnbi1pdGVtcy1jZW50ZXInXHJcbiAgfVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFibGVQYWdpbmF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuXHJcbiAgQElucHV0KCkgaWQ/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRvdGFsIG51bWJlciBvZiByb3dzIHRoYXQgd2UgbmVlZCB0byBwYWdlIHRocm91Z2guXHJcbiAgICogaS5lLiB0aGUgc3VtIG9mIGFsbCByb3dzIG9uIGFsbCBwYWdlcy5cclxuICAgKi9cclxuICBASW5wdXQoKSB0b3RhbEl0ZW1zITogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBNYXggc2l6ZSBvZiBhIHBhZ2UuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcGFnZVNpemUhOiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIE51bWJlciBvZiB0aGUgY3VycmVudCBwYWdlLlxyXG4gICAqIEluaXRpYWwgdmFsdWUgaXMgMSwgY2FuIGJlIG92ZXJyaWRkZW4gdG8gY2hhbmdlIHRoZSBzdGFydGluZyBwYWdlIG51bWJlci5cclxuICAgKi9cclxuICBASW5wdXQoKSBwYWdlTnVtYmVyOiBudW1iZXIgPSAxO1xyXG5cclxuICAvKipcclxuICAgKiBNYXhpbXVtIG51bWJlciBvZiBwYWdlIHRhYnMgdG8gc2hvd1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG1heFRhYnM/OiBudW1iZXIgPSAxMDtcclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHMgd2hlbiB0aGUgcGFnZSBjaGFuZ2VzLlxyXG4gICAqIFxyXG4gICAqIEJpbmQgdG8gdGhlIGV2ZW50IGluIGEgdGVtcGxhdGUgdXNpbmcgYSBmdW5jdGlvbiB0aGF0IHVzZXMgdGhlIFwic2tpcFwiIGFuZCBcInBhZ2VTaXplXCJcclxuICAgKiBwcm9wZXJ0aWVzIHRvIHNsaWNlIHRoZSBuZXcgcGFnZSBmcm9tIHlvdXIgZGF0YSBzZXQuXHJcbiAgICogXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiAvLy5odG1sXHJcbiAgICogKHBhZ2VDaGFuZ2VkKT1cIm9uUGFnZUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICogLy8udHNcclxuICAgKiBwdWJsaWMgb25QYWdlQ2hhbmdlZChldmVudDogUGFnaW5nSW5mbykge1xyXG4gICAqICB0aGlzLmN1cnJlbnRQYWdlSXRlbXMgPSB0aGlzLnBhZ2luYXRlZFRhYmxlSXRlbXMuc2xpY2UoZXZlbnQuc2tpcCwgZXZlbnQuc2tpcCArIGV2ZW50LnBhZ2VTaXplKTtcclxuICAgKiB9XHJcbiAgICogLy9TaW5jZSBwYWdlQ2hhbmdlZCBkb2Vzbid0IGVtaXQgZm9yIHRoZSBpbml0aWFsIHBhZ2UsIG9uUGFnZUNoYW5nZWQgc2hvdWxkIGJlIG1hbnVhbGx5IGNhbGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gXHJcbiAgICogLy91c2luZyBnZXRQYWdpbmdJbmZvOlxyXG4gICAqIHRoaXMub25QYWdlQ2hhbmdlZChUYWJsZVBhZ2luYXRpb25Db21wb25lbnQuZ2V0UGFnaW5nSW5mbyh0aGlzLnN0YXJ0aW5nUGFnZU51bWJlciwgdGhpcy5wYWdlU2l6ZSkpO1xyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlZDogRXZlbnRFbWl0dGVyPFBhZ2luZ0luZm8+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvKipcclxuICAgKiBBbGwgcG9zc2libGUgaXRlbXMgaW4gdGhlIGRyb3Bkb3duIG1lbnUuXHJcbiAgICovXHJcbiAgcHVibGljIGRyb3Bkb3duSXRlbXM6IE1lbnVJdGVtPFBhZ2VSYW5nZT5bXSA9IFtdO1xyXG5cclxuICAvKipcclxuICAgKiBDdXJyZW50IHRhYnMgYmVpbmcgZGlzcGxheWVkLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBjdXJyZW50VGFiczogTmF2R3JvdXAgPSBuZXcgTmF2R3JvdXAoKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZikgeyB9XHJcblxyXG5cclxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcclxuICAgIGlmKHRoaXMudG90YWxJdGVtcyA9PT0gMCkge1xyXG4gICAgICB0aGlzLmRyb3Bkb3duSXRlbXMgPSBbXTtcclxuICAgICAgdGhpcy5jdXJyZW50VGFicyA9IG5ldyBOYXZHcm91cCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldERyb3Bkb3duSXRlbXMoKTtcclxuXHJcbiAgICAvL0ZpbmQgdGhlIG1lbnUgaXRlbSB0aGF0IHRoZSBwYWdlIGNvcnJlc3BvbmRpbmcgdG8gdGhpcy5wYWdlTnVtYmVyIGxpZXMgaW5cclxuICAgIGxldCBmaXJzdE1lbnVJdGVtID0gdGhpcy5kcm9wZG93bkl0ZW1zLmZpbmQoaXRlbSA9PiB7XHJcbiAgICAgIHJldHVybiBpdGVtLnZhbHVlIS5maXJzdFBhZ2UgPD0gdGhpcy5wYWdlTnVtYmVyICYmIGl0ZW0udmFsdWUhLmxhc3RQYWdlID49IHRoaXMucGFnZU51bWJlcjtcclxuICAgIH0pO1xyXG4gICAgaWYoIWZpcnN0TWVudUl0ZW0pIHtcclxuICAgICAgY29uc29sZS5lcnJvcihgUGFnZSAke3RoaXMucGFnZU51bWJlcn0gZG9lcyBub3QgZXhpc3QuIFNldHRpbmcgdGhlIHN0YXJ0aW5nIHBhZ2UgbnVtYmVyIHRvIDEuYCk7XHJcbiAgICAgIGZpcnN0TWVudUl0ZW0gPSB0aGlzLmRyb3Bkb3duSXRlbXNbMF07XHJcbiAgICAgIHRoaXMucGFnZU51bWJlciA9IDE7XHJcbiAgICB9XHJcbiAgICAvL1NldCB0aGUgdGFicyB0byB0aG9zZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBtZW51IGl0ZW0uXHJcbiAgICAvL05vdGUgdGhhdCB3ZSBkb250IGVtaXQgYSBwYWdlQ2hhbmdlZCBldmVudCBoZXJlIGJlY2F1c2UgdGhlIGNvbnN1bWVyIGFscmVhZHkga25vd3Mgd2hhdCB0aGUgZmlyc3QgcGFnZSBpcy5cclxuICAgIHRoaXMuc2V0VGFicyhmaXJzdE1lbnVJdGVtLCB0aGlzLnBhZ2VOdW1iZXIpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2l2ZW4gdGhlIG51bWJlciBvZiBhIHBhZ2UgYW5kIHRoZSBwYWdlU2l6ZSwgcmV0dXJuIHRoZSBQYWdpbmdJbmZvIG9iamVjdCBmb3IgdGhhdCBwYWdlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0UGFnaW5nSW5mbyhwYWdlTnVtYmVyOiBudW1iZXIsIHBhZ2VTaXplOiBudW1iZXIpIHtcclxuICAgIHJldHVybiB7IHNraXA6IChwYWdlTnVtYmVyIC0gMSkqcGFnZVNpemUsIHBhZ2VTaXplOiBwYWdlU2l6ZSwgcGFnZU51bWJlcjogcGFnZU51bWJlciB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uSXRlbVNlbGVjdGVkKG1lbnVJdGVtOiBNZW51SXRlbTxQYWdlUmFuZ2U+KSB7ICBcclxuICAgIHRoaXMuc2V0VGFicyhtZW51SXRlbSk7XHJcbiAgICB0aGlzLm9uUGFnZUNoYW5nZShwYXJzZUludCh0aGlzLmN1cnJlbnRUYWJzLnNlbGVjdGVkIS5sYWJlbCEpKTtcclxuICAgIC8vZm9jdXMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0YWIgdG8gaGVscCBrZXlib2FyZCBuYXZpZ2F0aW9uXHJcbiAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnRhYi5hY3RpdmUnKS5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgdGFiIGZvciBlYWNoIGl0ZW0gaW4gdGhlIHJhbmdlIHJlcHJlc2VudGVkIGluIHRoZSBNZW51SXRlbVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0VGFicyhtZW51SXRlbTogTWVudUl0ZW08UGFnZVJhbmdlPiwgcGFnZU51bWJlcj86IG51bWJlcikge1xyXG4gICAgbGV0IHRhYkl0ZW1zOiBOYXZJdGVtW10gPSBbXTtcclxuICAgIGZvcihsZXQgaSA9IG1lbnVJdGVtLnZhbHVlIS5maXJzdFBhZ2U7IGkgPD0gbWVudUl0ZW0udmFsdWUhLmxhc3RQYWdlOyBpKyspIHtcclxuICAgICAgdGFiSXRlbXMucHVzaCh7XHJcbiAgICAgICAgbGFiZWw6IGAke2l9YCxcclxuICAgICAgICBvbkNsaWNrOiAoKSA9PiB7dGhpcy5vblBhZ2VDaGFuZ2UoaSl9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy9pZiBhIHBhZ2VOdW1iZXIgaXMgcHJvdmlkZWQsIHNlbGVjdCB0aGUgdGFiIHdpdGggdGhhdCBwYWdlIG51bWJlci5cclxuICAgIC8vb3RoZXJ3aXNlLCBzZWxlY3QgdGhlIGZpcnN0IHRhYi5cclxuICAgIGxldCBzZWxlY3RlZFRhYjogTmF2SXRlbSA9IHBhZ2VOdW1iZXIgPyB0YWJJdGVtcy5maW5kKHRhYiA9PiB7cmV0dXJuIHBhcnNlSW50KHRhYi5sYWJlbCEpID09PSBwYWdlTnVtYmVyfSkhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFiSXRlbXNbMF07XHJcbiAgICB0aGlzLmN1cnJlbnRUYWJzID0gbmV3IE5hdkdyb3VwKHRhYkl0ZW1zLCBzZWxlY3RlZFRhYik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uUGFnZUNoYW5nZShwYWdlTnVtYmVyOiBudW1iZXIpIHtcclxuICAgIHRoaXMucGFnZU51bWJlciA9IHBhZ2VOdW1iZXI7XHJcbiAgICB0aGlzLnBhZ2VDaGFuZ2VkLmVtaXQoVGFibGVQYWdpbmF0aW9uQ29tcG9uZW50LmdldFBhZ2luZ0luZm8ocGFnZU51bWJlciwgdGhpcy5wYWdlU2l6ZSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgYWxsIHRoZSBpdGVtcyBmb3IgdGhlIGRyb3Bkb3duIG1lbnUuXHJcbiAgICogQSBkcm9wZG93biBpdGVtIHJlcHJlc2VudHMgYSBwYWdlIHJhbmdlIChlLmcuIDEtMTAsIDExLTIwLCBvciAyMS0yNSkuXHJcbiAgICogQSBzaW5nbGUgZHJvcGRvd24gaXRlbSBjYW4gcmVwcmVzZW50IGEgcmFuZ2Ugb2YgdXAgdG8gMTAgcGFnZXMgKHRoZSBsYXN0IGl0ZW0gY291bGQgaGF2ZSBsZXNzIHRoYW4gMTApLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0RHJvcGRvd25JdGVtcygpIHtcclxuICAgIHRoaXMuZHJvcGRvd25JdGVtcyA9IFtdO1xyXG4gICAgLy9maW5kIHRoZSBsYXN0IHBhZ2VcclxuICAgIGxldCBkaXZpZGVuZCA9IE1hdGguZmxvb3IodGhpcy50b3RhbEl0ZW1zIC8gdGhpcy5wYWdlU2l6ZSk7XHJcbiAgICBsZXQgcmVtYWluZGVyID0gdGhpcy50b3RhbEl0ZW1zICUgdGhpcy5wYWdlU2l6ZTtcclxuICAgIGNvbnN0IGxhc3RQYWdlID0gKHJlbWFpbmRlciA9PT0gMCkgPyBkaXZpZGVuZCA6IGRpdmlkZW5kICsgMTtcclxuXHJcbiAgICAvL2tlZXAgYnVpbGRpbmcgbWVudSBpdGVtcyBvZiB0aGUgZm9ybSAxLTEwLCAxMS0yMCwgMjEtMzAsIGV0YyB1bnRpbCAgXHJcbiAgICAvL2VuZCA+PSBsYXN0UGFnZSwgd2hpY2ggbWVhbnMgd2UndmUgZm91bmQgdGhlIHJhbmdlIHRoYXQgY29udGFpbnMgdGhlIGxhc3QgcGFnZS5cclxuICAgIGxldCBzdGFydCA9IDE7XHJcblxyXG4gICAgbGV0IG1heFRhYnMgPSB0aGlzLm1heFRhYnMgfHwgMTA7XHJcbiAgICBsZXQgZW5kID0gbWF4VGFicztcclxuXHJcbiAgICB3aGlsZShlbmQgPCBsYXN0UGFnZSkge1xyXG4gICAgICB0aGlzLmRyb3Bkb3duSXRlbXMucHVzaCh7XHJcbiAgICAgICAgbGFiZWw6IGAke3N0YXJ0fS0ke2VuZH1gLFxyXG4gICAgICAgIHZhbHVlOiB7Zmlyc3RQYWdlOiBzdGFydCwgbGFzdFBhZ2U6IGVuZH1cclxuICAgICAgfSk7XHJcbiAgICAgIHN0YXJ0ID0gc3RhcnQgKyBtYXhUYWJzO1xyXG4gICAgICBlbmQgPSBlbmQgKyBtYXhUYWJzO1xyXG4gICAgfVxyXG4gICAgLy9hZGQgdGhlIG1lbnUgaXRlbSB0aGF0IGNvbnRhaW5zIHRoZSBsYXN0IHBhZ2UuXHJcbiAgICB0aGlzLmRyb3Bkb3duSXRlbXMucHVzaCh7XHJcbiAgICAgIGxhYmVsOiAoc3RhcnQgPT09IGxhc3RQYWdlKSA/IGAke3N0YXJ0fWA6IGAke3N0YXJ0fS0ke2xhc3RQYWdlfWAsXHJcbiAgICAgIHZhbHVlOiB7Zmlyc3RQYWdlOiBzdGFydCwgbGFzdFBhZ2U6IGxhc3RQYWdlfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxufSIsIjxlYy10YWJzIGlkPVwie3tpZH19X3BhZ2VzXCJcclxuICAgICAgICAgY2xhc3M9XCJteS0yIGlzLWNvbmRlbnNlZFwiXHJcbiAgICAgICAgIFt0YWJHcm91cF09XCJjdXJyZW50VGFic1wiXHJcbiAgICAgICAgIHRhYlN0eWxlPVwicGlsbHNcIj5cclxuPC9lYy10YWJzPlxyXG48ZWMtZHJvcGRvd24gaWQ9XCJ7e2lkfX1fbW9yZVBhZ2VzXCJcclxuICAgICAgICAgICAgICpuZ0lmPVwiZHJvcGRvd25JdGVtcy5sZW5ndGggPiAxXCJcclxuICAgICAgICAgICAgIGNsYXNzPVwibXktMSBtbC0xXCJcclxuICAgICAgICAgICAgIG1lbnVUZW1wbGF0ZVR5cGU9XCJsYWJlbFwiXHJcbiAgICAgICAgICAgICBpY29uPVwiaWNvbi1tb3JlXCJcclxuICAgICAgICAgICAgIG1lbnVQb3NpdGlvbj1cImxlZnRcIlxyXG4gICAgICAgICAgICAgW21lbnVNaW5XaWR0aF09XCI4MFwiXHJcbiAgICAgICAgICAgICBbc2hvd0Fycm93XT1cImZhbHNlXCJcclxuICAgICAgICAgICAgIFtwb3B1cEZpeGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgW2l0ZW1zXT1cImRyb3Bkb3duSXRlbXNcIlxyXG4gICAgICAgICAgICAgKGl0ZW1TZWxlY3RlZCk9XCJvbkl0ZW1TZWxlY3RlZCgkZXZlbnQpXCI+XHJcbjwvZWMtZHJvcGRvd24+Il19