@eui/components 18.1.0-snapshot-1723166109355 → 18.1.0

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.
@@ -480,7 +480,7 @@ export class EuiTableV2Component {
480
480
  return prop ? prop.split('.').reduce((prev, curr) => (prev ? prev[curr] : null), obj || self) : null;
481
481
  }
482
482
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: EuiTableV2Component, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.EuiTableV2SelectableRowService }, { token: i2.EuiTableV2SortService }, { token: i3.BaseStatesDirective }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
483
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: EuiTableV2Component, selector: "eui-table-v2, table[euiTableV2]", inputs: { data: "data", propId: "propId", itemSize: "itemSize", paginator: "paginator", filter: "filter", preselectedRows: "preselectedRows", isVirtualScroll: ["isVirtualScroll", "isVirtualScroll", booleanAttribute], isVirtualScrollCache: ["isVirtualScrollCache", "isVirtualScrollCache", booleanAttribute], hasStickyHeader: ["hasStickyHeader", "hasStickyHeader", booleanAttribute], hasStickyFooter: ["hasStickyFooter", "hasStickyFooter", booleanAttribute], hasStickyCols: ["hasStickyCols", "hasStickyCols", booleanAttribute], isTableResponsive: ["isTableResponsive", "isTableResponsive", booleanAttribute], isAsync: ["isAsync", "isAsync", booleanAttribute], virtualScrollAsyncItemsLength: ["virtualScrollAsyncItemsLength", "virtualScrollAsyncItemsLength", numberAttribute], virtualScrollNbRows: ["virtualScrollNbRows", "virtualScrollNbRows", numberAttribute], isColsOrderable: ["isColsOrderable", "isColsOrderable", booleanAttribute], isLoading: ["isLoading", "isLoading", booleanAttribute], isSelectOnlyVisibleRows: ["isSelectOnlyVisibleRows", "isSelectOnlyVisibleRows", booleanAttribute], isTableBordered: ["isTableBordered", "isTableBordered", booleanAttribute], isTableCondensed: ["isTableCondensed", "isTableCondensed", booleanAttribute] }, outputs: { scrollChange: "scrollChange", rowsSelect: "rowsSelect", sortChange: "sortChange" }, host: { properties: { "class": "this.cssClasses" } }, providers: [EuiTableV2SelectableRowService, EuiTableV2SortService], queries: [{ propertyName: "templates", predicate: EuiTemplateDirective }], viewQueries: [{ propertyName: "cdkVirtualScrollViewport", first: true, predicate: ["cdkVirtualScrollViewport"], descendants: true }, { propertyName: "cdkVirtualScrollViewportElement", first: true, predicate: ["cdkVirtualScrollViewportElement"], descendants: true, read: ElementRef }, { propertyName: "theadRef", first: true, predicate: ["theadRef"], descendants: true }, { propertyName: "tbodyRef", first: true, predicate: ["tbodyRef"], descendants: true }, { propertyName: "tfootRef", first: true, predicate: ["tfootRef"], descendants: true }], usesOnChanges: true, hostDirectives: [{ directive: i3.BaseStatesDirective }], ngImport: i0, template: "<!-- <button (click)=\"test(19250)\">19250</button>\n<button (click)=\"test(7895)\">7895</button>\n<button (click)=\"test(16860)\">16860</button>\n<button (click)=\"test(16870)\">16870</button>\n<button (click)=\"test(16880)\">16880</button>\n<button (click)=\"test(16890)\">16890</button>\n<button (click)=\"test(16900)\">16900</button>\n<button (click)=\"test(26998)\">26998</button>\n<button (click)=\"test(28000)\">28000</button> -->\n@if (isVirtualScroll) {\n <cdk-virtual-scroll-viewport\n #cdkVirtualScrollViewport\n #cdkVirtualScrollViewportElement\n class=\"eui-table-v2__scroll-viewport\"\n [itemSize]=\"itemSize\"\n [style.overflow]=\"cdkVirtualScrollViewportOverflowValue\"\n tabindex=\"0\">\n <table class=\"{{ cssClasses }}\" [style.width]=\"hostWidth\">\n @if (headerTemplate) {\n <thead #theadRef [style.top]=\"stickyHeaderTopPosition\">\n <ng-template [ngTemplateOutlet]=\"headerTemplate\"></ng-template>\n </thead>\n }\n @if (bodyTemplate) {\n <tbody #tbodyRef>\n <ng-container *cdkVirtualFor=\"let row of dataRendered; let i = index; trackBy: trackByFn\">\n @if (row) {\n <ng-template\n [ngTemplateOutlet]=\"bodyTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, index: i }\">\n </ng-template>\n } @else {\n <ng-template [ngTemplateOutlet]=\"skeletonLoading\"></ng-template>\n }\n </ng-container>\n\n @if (noDataTemplate && (data?.length === 0 || dataRendered?.length === 0)) {\n <ng-template [ngTemplateOutlet]=\"noDataTemplate\"></ng-template>\n }\n </tbody>\n }\n @if (footerTemplate) {\n <tfoot #tfootRef [style.bottom]=\"stickyFooterBottomPosition\">\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"></ng-template>\n </tfoot>\n }\n </table>\n </cdk-virtual-scroll-viewport>\n} @else {\n @if (headerTemplate) {\n <thead #theadRef>\n <ng-template [ngTemplateOutlet]=\"headerTemplate\"></ng-template>\n </thead>\n }\n @if (bodyTemplate) {\n <tbody #tbodyRef>\n @for (row of dataRendered; let i = $index; track row) {\n <ng-container>\n <ng-template\n [ngTemplateOutlet]=\"bodyTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, index: i }\">\n </ng-template>\n </ng-container>\n }\n @if (noDataTemplate && (data?.length === 0 || dataRendered?.length === 0)) {\n <ng-template [ngTemplateOutlet]=\"noDataTemplate\"></ng-template>\n }\n </tbody>\n }\n @if (footerTemplate) {\n <tfoot #tfootRef>\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"></ng-template>\n </tfoot>\n }\n}\n\n<ng-template #skeletonLoading>\n <tr [style.height.px]=\"itemSize\">\n <td *ngFor=\"let __ of nbCols\"><eui-skeleton line euiRounded></eui-skeleton></td>\n </tr>\n</ng-template>\n", styles: [".eui-table-v2__scroll-viewport{min-height:100%;width:100%}.eui-table-v2__scrollable-wrapper{overflow:auto}.eui-table-v2__scrollable-wrapper::-webkit-scrollbar{display:inherit;height:8px;width:8px;background-color:var(--eui-c-neutral-bg-light)}.eui-table-v2__scrollable-wrapper::-webkit-scrollbar-thumb{background-color:var(--eui-c-neutral-lightest);border-radius:5rem}.eui-table-v2__scrollable-wrapper::-webkit-scrollbar-thumb:hover{background-color:var(--eui-c-neutral-lighter)}.eui-table-v2__scrollable-wrapper::-webkit-scrollbar-track{background-color:var(--eui-c-neutral-bg-light);border-radius:0}@-moz-document url-prefix(){.eui-table-v2__scrollable-wrapper{scrollbar-color:var(--eui-c-neutral-bg-light);scrollbar-width:thin}}.eui-table-v2__orderable-cols-preview,.eui-table-v2__orderable-rows-preview{display:none}.eui-table-v2--condensed thead tr th{padding:var(--eui-s-2xs) var(--eui-s-xs);font:var(--eui-f-s-bold)}.eui-table-v2--condensed tbody tr td,.eui-table-v2--condensed tfoot tr td{padding:var(--eui-s-2xs) var(--eui-s-xs);font:var(--eui-f-s)}.eui-table-v2--highlighted{background-color:var(--eui-c-accent);text-decoration:none}.eui-table-v2--virtual-scroll{width:100%;height:100%}.eui-table-v2--cols-orderable .cdk-drag-placeholder{background-color:var(--eui-c-white);color:var(--eui-c-info);cursor:move;opacity:1}.eui-table-v2--cols-orderable tr{display:table-row}.eui-table-v2--cols-orderable tr th.cdk-drag:not(.cdk-drag-disabled){cursor:move}.eui-table-v2--loading:before{animation:.8s linear infinite spin;border:8px solid transparent;border-radius:50%;border-top-color:var(--eui-c-primary);content:\"\";display:block;height:80px;left:50%;margin:-40px 0 0 -40px;position:absolute;top:50%;width:80px;z-index:1000001}.eui-table-v2--loading:after{background-color:#fff6;content:\"\";height:100%;left:0;position:absolute;top:0;width:100%}.eui-table-v2--sticky{max-width:none!important}.eui-table-v2--sticky-header thead{position:sticky;top:0;z-index:8}.eui-table-v2--sticky-header thead th,.eui-table-v2--sticky-header thead td{background-color:inherit}.eui-table-v2--sticky-header.eui-table-v2-sticky-col thead{z-index:9}.eui-table-v2--sticky tbody tr:nth-of-type(odd) td{background-color:inherit}.eui-table-v2--sticky tbody tr:nth-of-type(2n) td{background-color:inherit}.eui-table-v2--sticky-footer tfoot{position:sticky;bottom:-1px;z-index:8}.eui-table-v2--sticky-footer tfoot tr td{background-color:inherit}.eui-table-v2--sticky-cols .eui-table-v2__col--sticky{position:sticky;z-index:1}.eui-table-v2--sticky-cols th.eui-table-v2__col--sticky.eui-table-v2__col--sticky-shadowed-first,.eui-table-v2--sticky-cols tbody td.eui-table-v2__col--sticky.eui-table-v2__col--sticky-shadowed-first,.eui-table-v2--sticky-cols tfoot td.eui-table-v2__col--sticky.eui-table-v2__col--sticky-shadowed-first{box-shadow:inset -5px 0 8px -8px #0003}.eui-table-v2--sticky-cols th.eui-table-v2__col--sticky.eui-table-v2__col--sticky-shadowed-last,.eui-table-v2--sticky-cols tbody td.eui-table-v2__col--sticky.eui-table-v2__col--sticky-shadowed-last,.eui-table-v2--sticky-cols tfoot td.eui-table-v2__col--sticky.eui-table-v2__col--sticky-shadowed-last{box-shadow:inset 5px 0 8px -8px #0003}.eui-table-v2__row--selected td{background-color:var(--eui-c-primary-lightest)}@media screen and (max-width: 767px){.eui-table-v2.eui-table-default--responsive{width:100%!important}.eui-table-v2.eui-table-default--responsive thead,.eui-table-v2.eui-table-default--responsive tbody,.eui-table-v2.eui-table-default--responsive tfoot,.eui-table-v2.eui-table-default--responsive th,.eui-table-v2.eui-table-default--responsive td,.eui-table-v2.eui-table-default--responsive tr{display:block}.eui-table-v2.eui-table-default--responsive thead tr{left:-9999px;position:absolute;top:-9999px}.eui-table-v2.eui-table-default--responsive tr{height:auto}.eui-table-v2.eui-table-default--responsive td{border:var(--eui-bw-none);border-bottom:1px solid var(--eui-c-neutral-bg);padding-left:50%;position:relative;text-align:left!important;left:unset!important;right:unset!important}.eui-table-v2.eui-table-default--responsive td:before{color:var(--eui-c-neutral-light);content:attr(data-col-label);left:var(--eui-s-xs);padding-right:var(--eui-s-xs);position:absolute;width:45%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:var(--eui-f-m-bold)}.eui-table-v2.eui-table-default--responsive tfoot tr td:empty{display:none!important}.eui-table-v2 .actionsColumn,.eui-table-v2 .actions-column{justify-content:flex-start;text-align:left;width:100%}.eui-table-v2__sticky-container{height:auto;width:auto!important}.eui-table-v2--sticky-cols th,.eui-table-v2--sticky-cols td,.eui-table-v2--sticky-cols th .eui-table__col--sticky,.eui-table-v2--sticky-cols td .eui-table__col--sticky{width:auto;z-index:auto}.eui-table-v2--sticky-cols th .eui-table__col--sticky.eui-table__col--sticky-shadowed-first,.eui-table-v2--sticky-cols th .eui-table__col--sticky.eui-table__col--sticky-shadowed-last,.eui-table-v2--sticky-cols td .eui-table__col--sticky.eui-table__col--sticky-shadowed-first,.eui-table-v2--sticky-cols td .eui-table__col--sticky.eui-table__col--sticky-shadowed-last{box-shadow:none!important}.eui-table-v2--sticky-cols tfoot tr td:empty{display:none!important}}.eui-table-v2__filter{align-items:center;display:flex;justify-content:flex-end;position:relative}.eui-table-v2__filter--responsive{width:100%}.eui-table-v2__filter-input{padding-left:var(--eui-s-3xl)!important}.eui-table-v2__filter-search-icon{left:var(--eui-s-xs);position:absolute;top:var(--eui-s-xs)}.eui-table-v2__sortable-col-multisort-index{font:var(--eui-f-s)}.eui-table-v2__sortable-col .eui-table-v2__sortable-col-content{align-items:center;display:flex;vertical-align:middle;white-space:nowrap;justify-content:space-between}.eui-table-v2__sortable-col .eui-table-v2__sortable-col-content .eui-table-v2__sortable-col-content-label{align-items:center;display:flex;-webkit-user-select:none;-ms-user-select:none;user-select:none}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i5.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i5.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i6.EuiSkeletonComponent, selector: "eui-skeleton", inputs: ["circle", "line", "square", "rectangle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
483
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: EuiTableV2Component, selector: "eui-table-v2, table[euiTableV2]", inputs: { data: "data", propId: "propId", itemSize: "itemSize", paginator: "paginator", filter: "filter", preselectedRows: "preselectedRows", isVirtualScroll: ["isVirtualScroll", "isVirtualScroll", booleanAttribute], isVirtualScrollCache: ["isVirtualScrollCache", "isVirtualScrollCache", booleanAttribute], hasStickyHeader: ["hasStickyHeader", "hasStickyHeader", booleanAttribute], hasStickyFooter: ["hasStickyFooter", "hasStickyFooter", booleanAttribute], hasStickyCols: ["hasStickyCols", "hasStickyCols", booleanAttribute], isTableResponsive: ["isTableResponsive", "isTableResponsive", booleanAttribute], isAsync: ["isAsync", "isAsync", booleanAttribute], virtualScrollAsyncItemsLength: ["virtualScrollAsyncItemsLength", "virtualScrollAsyncItemsLength", numberAttribute], virtualScrollNbRows: ["virtualScrollNbRows", "virtualScrollNbRows", numberAttribute], isColsOrderable: ["isColsOrderable", "isColsOrderable", booleanAttribute], isLoading: ["isLoading", "isLoading", booleanAttribute], isSelectOnlyVisibleRows: ["isSelectOnlyVisibleRows", "isSelectOnlyVisibleRows", booleanAttribute], isTableBordered: ["isTableBordered", "isTableBordered", booleanAttribute], isTableCondensed: ["isTableCondensed", "isTableCondensed", booleanAttribute] }, outputs: { scrollChange: "scrollChange", rowsSelect: "rowsSelect", sortChange: "sortChange" }, host: { properties: { "class": "this.cssClasses" } }, providers: [EuiTableV2SelectableRowService, EuiTableV2SortService], queries: [{ propertyName: "templates", predicate: EuiTemplateDirective }], viewQueries: [{ propertyName: "cdkVirtualScrollViewport", first: true, predicate: ["cdkVirtualScrollViewport"], descendants: true }, { propertyName: "cdkVirtualScrollViewportElement", first: true, predicate: ["cdkVirtualScrollViewportElement"], descendants: true, read: ElementRef }, { propertyName: "theadRef", first: true, predicate: ["theadRef"], descendants: true }, { propertyName: "tbodyRef", first: true, predicate: ["tbodyRef"], descendants: true }, { propertyName: "tfootRef", first: true, predicate: ["tfootRef"], descendants: true }], usesOnChanges: true, hostDirectives: [{ directive: i3.BaseStatesDirective }], ngImport: i0, template: "<!-- <button (click)=\"test(19250)\">19250</button>\n<button (click)=\"test(7895)\">7895</button>\n<button (click)=\"test(16860)\">16860</button>\n<button (click)=\"test(16870)\">16870</button>\n<button (click)=\"test(16880)\">16880</button>\n<button (click)=\"test(16890)\">16890</button>\n<button (click)=\"test(16900)\">16900</button>\n<button (click)=\"test(26998)\">26998</button>\n<button (click)=\"test(28000)\">28000</button> -->\n@if (isVirtualScroll) {\n <cdk-virtual-scroll-viewport\n #cdkVirtualScrollViewport\n #cdkVirtualScrollViewportElement\n class=\"eui-table-v2__scroll-viewport\"\n [itemSize]=\"itemSize\"\n [style.overflow]=\"cdkVirtualScrollViewportOverflowValue\"\n tabindex=\"0\">\n <table class=\"{{ cssClasses }}\" [style.width]=\"hostWidth\">\n @if (headerTemplate) {\n <thead #theadRef [style.top]=\"stickyHeaderTopPosition\">\n <ng-template [ngTemplateOutlet]=\"headerTemplate\"></ng-template>\n </thead>\n }\n @if (bodyTemplate) {\n <tbody #tbodyRef>\n <ng-container *cdkVirtualFor=\"let row of dataRendered; let i = index; trackBy: trackByFn\">\n @if (row) {\n <ng-template\n [ngTemplateOutlet]=\"bodyTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, index: i }\">\n </ng-template>\n } @else {\n <ng-template [ngTemplateOutlet]=\"skeletonLoading\"></ng-template>\n }\n </ng-container>\n\n @if (noDataTemplate && (data?.length === 0 || dataRendered?.length === 0)) {\n <ng-template [ngTemplateOutlet]=\"noDataTemplate\"></ng-template>\n }\n </tbody>\n }\n @if (footerTemplate) {\n <tfoot #tfootRef [style.bottom]=\"stickyFooterBottomPosition\">\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"></ng-template>\n </tfoot>\n }\n </table>\n </cdk-virtual-scroll-viewport>\n} @else {\n @if (headerTemplate) {\n <thead #theadRef>\n <ng-template [ngTemplateOutlet]=\"headerTemplate\"></ng-template>\n </thead>\n }\n @if (bodyTemplate) {\n <tbody #tbodyRef>\n @for (row of dataRendered; let i = $index; track $index) {\n <ng-container>\n <ng-template\n [ngTemplateOutlet]=\"bodyTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, index: i }\">\n </ng-template>\n </ng-container>\n }\n @if (noDataTemplate && (data?.length === 0 || dataRendered?.length === 0)) {\n <ng-template [ngTemplateOutlet]=\"noDataTemplate\"></ng-template>\n }\n </tbody>\n }\n @if (footerTemplate) {\n <tfoot #tfootRef>\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"></ng-template>\n </tfoot>\n }\n}\n\n<ng-template #skeletonLoading>\n <tr [style.height.px]=\"itemSize\">\n <td *ngFor=\"let __ of nbCols\"><eui-skeleton line euiRounded></eui-skeleton></td>\n </tr>\n</ng-template>\n", styles: [".eui-table-v2__scroll-viewport{min-height:100%;width:100%}.eui-table-v2__scrollable-wrapper{overflow:auto}.eui-table-v2__scrollable-wrapper::-webkit-scrollbar{display:inherit;height:8px;width:8px;background-color:var(--eui-c-neutral-bg-light)}.eui-table-v2__scrollable-wrapper::-webkit-scrollbar-thumb{background-color:var(--eui-c-neutral-lightest);border-radius:5rem}.eui-table-v2__scrollable-wrapper::-webkit-scrollbar-thumb:hover{background-color:var(--eui-c-neutral-lighter)}.eui-table-v2__scrollable-wrapper::-webkit-scrollbar-track{background-color:var(--eui-c-neutral-bg-light);border-radius:0}@-moz-document url-prefix(){.eui-table-v2__scrollable-wrapper{scrollbar-color:var(--eui-c-neutral-bg-light);scrollbar-width:thin}}.eui-table-v2__orderable-cols-preview,.eui-table-v2__orderable-rows-preview{display:none}.eui-table-v2--condensed thead tr th{padding:var(--eui-s-2xs) var(--eui-s-xs);font:var(--eui-f-s-bold)}.eui-table-v2--condensed tbody tr td,.eui-table-v2--condensed tfoot tr td{padding:var(--eui-s-2xs) var(--eui-s-xs);font:var(--eui-f-s)}.eui-table-v2--highlighted{background-color:var(--eui-c-accent);text-decoration:none}.eui-table-v2--virtual-scroll{width:100%;height:100%}.eui-table-v2--cols-orderable .cdk-drag-placeholder{background-color:var(--eui-c-white);color:var(--eui-c-info);cursor:move;opacity:1}.eui-table-v2--cols-orderable tr{display:table-row}.eui-table-v2--cols-orderable tr th.cdk-drag:not(.cdk-drag-disabled){cursor:move}.eui-table-v2--loading:before{animation:.8s linear infinite spin;border:8px solid transparent;border-radius:50%;border-top-color:var(--eui-c-primary);content:\"\";display:block;height:80px;left:50%;margin:-40px 0 0 -40px;position:absolute;top:50%;width:80px;z-index:1000001}.eui-table-v2--loading:after{background-color:#fff6;content:\"\";height:100%;left:0;position:absolute;top:0;width:100%}.eui-table-v2--sticky{max-width:none!important}.eui-table-v2--sticky-header thead{position:sticky;top:0;z-index:8}.eui-table-v2--sticky-header thead th,.eui-table-v2--sticky-header thead td{background-color:inherit}.eui-table-v2--sticky-header.eui-table-v2-sticky-col thead{z-index:9}.eui-table-v2--sticky tbody tr:nth-of-type(odd) td{background-color:inherit}.eui-table-v2--sticky tbody tr:nth-of-type(2n) td{background-color:inherit}.eui-table-v2--sticky-footer tfoot{position:sticky;bottom:-1px;z-index:8}.eui-table-v2--sticky-footer tfoot tr td{background-color:inherit}.eui-table-v2--sticky-cols .eui-table-v2__col--sticky{position:sticky;z-index:1}.eui-table-v2--sticky-cols th.eui-table-v2__col--sticky.eui-table-v2__col--sticky-shadowed-first,.eui-table-v2--sticky-cols tbody td.eui-table-v2__col--sticky.eui-table-v2__col--sticky-shadowed-first,.eui-table-v2--sticky-cols tfoot td.eui-table-v2__col--sticky.eui-table-v2__col--sticky-shadowed-first{box-shadow:inset -5px 0 8px -8px #0003}.eui-table-v2--sticky-cols th.eui-table-v2__col--sticky.eui-table-v2__col--sticky-shadowed-last,.eui-table-v2--sticky-cols tbody td.eui-table-v2__col--sticky.eui-table-v2__col--sticky-shadowed-last,.eui-table-v2--sticky-cols tfoot td.eui-table-v2__col--sticky.eui-table-v2__col--sticky-shadowed-last{box-shadow:inset 5px 0 8px -8px #0003}.eui-table-v2__row--selected td{background-color:var(--eui-c-primary-lightest)}@media screen and (max-width: 767px){.eui-table-v2.eui-table-default--responsive{width:100%!important}.eui-table-v2.eui-table-default--responsive thead,.eui-table-v2.eui-table-default--responsive tbody,.eui-table-v2.eui-table-default--responsive tfoot,.eui-table-v2.eui-table-default--responsive th,.eui-table-v2.eui-table-default--responsive td,.eui-table-v2.eui-table-default--responsive tr{display:block}.eui-table-v2.eui-table-default--responsive thead tr{left:-9999px;position:absolute;top:-9999px}.eui-table-v2.eui-table-default--responsive tr{height:auto}.eui-table-v2.eui-table-default--responsive td{border:var(--eui-bw-none);border-bottom:1px solid var(--eui-c-neutral-bg);padding-left:50%;position:relative;text-align:left!important;left:unset!important;right:unset!important}.eui-table-v2.eui-table-default--responsive td:before{color:var(--eui-c-neutral-light);content:attr(data-col-label);left:var(--eui-s-xs);padding-right:var(--eui-s-xs);position:absolute;width:45%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:var(--eui-f-m-bold)}.eui-table-v2.eui-table-default--responsive tfoot tr td:empty{display:none!important}.eui-table-v2 .actionsColumn,.eui-table-v2 .actions-column{justify-content:flex-start;text-align:left;width:100%}.eui-table-v2__sticky-container{height:auto;width:auto!important}.eui-table-v2--sticky-cols th,.eui-table-v2--sticky-cols td,.eui-table-v2--sticky-cols th .eui-table__col--sticky,.eui-table-v2--sticky-cols td .eui-table__col--sticky{width:auto;z-index:auto}.eui-table-v2--sticky-cols th .eui-table__col--sticky.eui-table__col--sticky-shadowed-first,.eui-table-v2--sticky-cols th .eui-table__col--sticky.eui-table__col--sticky-shadowed-last,.eui-table-v2--sticky-cols td .eui-table__col--sticky.eui-table__col--sticky-shadowed-first,.eui-table-v2--sticky-cols td .eui-table__col--sticky.eui-table__col--sticky-shadowed-last{box-shadow:none!important}.eui-table-v2--sticky-cols tfoot tr td:empty{display:none!important}}.eui-table-v2__filter{align-items:center;display:flex;justify-content:flex-end;position:relative}.eui-table-v2__filter--responsive{width:100%}.eui-table-v2__filter-input{padding-left:var(--eui-s-3xl)!important}.eui-table-v2__filter-search-icon{left:var(--eui-s-xs);position:absolute;top:var(--eui-s-xs)}.eui-table-v2__sortable-col-multisort-index{font:var(--eui-f-s)}.eui-table-v2__sortable-col .eui-table-v2__sortable-col-content{align-items:center;display:flex;vertical-align:middle;white-space:nowrap;justify-content:space-between}.eui-table-v2__sortable-col .eui-table-v2__sortable-col-content .eui-table-v2__sortable-col-content-label{align-items:center;display:flex;-webkit-user-select:none;-ms-user-select:none;user-select:none}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i5.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i5.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i6.EuiSkeletonComponent, selector: "eui-skeleton", inputs: ["circle", "line", "square", "rectangle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
484
484
  }
485
485
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: EuiTableV2Component, decorators: [{
486
486
  type: Component,
@@ -489,7 +489,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
489
489
  directive: BaseStatesDirective,
490
490
  inputs: [],
491
491
  },
492
- ], template: "<!-- <button (click)=\"test(19250)\">19250</button>\n<button (click)=\"test(7895)\">7895</button>\n<button (click)=\"test(16860)\">16860</button>\n<button (click)=\"test(16870)\">16870</button>\n<button (click)=\"test(16880)\">16880</button>\n<button (click)=\"test(16890)\">16890</button>\n<button (click)=\"test(16900)\">16900</button>\n<button (click)=\"test(26998)\">26998</button>\n<button (click)=\"test(28000)\">28000</button> -->\n@if (isVirtualScroll) {\n <cdk-virtual-scroll-viewport\n #cdkVirtualScrollViewport\n #cdkVirtualScrollViewportElement\n class=\"eui-table-v2__scroll-viewport\"\n [itemSize]=\"itemSize\"\n [style.overflow]=\"cdkVirtualScrollViewportOverflowValue\"\n tabindex=\"0\">\n <table class=\"{{ cssClasses }}\" [style.width]=\"hostWidth\">\n @if (headerTemplate) {\n <thead #theadRef [style.top]=\"stickyHeaderTopPosition\">\n <ng-template [ngTemplateOutlet]=\"headerTemplate\"></ng-template>\n </thead>\n }\n @if (bodyTemplate) {\n <tbody #tbodyRef>\n <ng-container *cdkVirtualFor=\"let row of dataRendered; let i = index; trackBy: trackByFn\">\n @if (row) {\n <ng-template\n [ngTemplateOutlet]=\"bodyTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, index: i }\">\n </ng-template>\n } @else {\n <ng-template [ngTemplateOutlet]=\"skeletonLoading\"></ng-template>\n }\n </ng-container>\n\n @if (noDataTemplate && (data?.length === 0 || dataRendered?.length === 0)) {\n <ng-template [ngTemplateOutlet]=\"noDataTemplate\"></ng-template>\n }\n </tbody>\n }\n @if (footerTemplate) {\n <tfoot #tfootRef [style.bottom]=\"stickyFooterBottomPosition\">\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"></ng-template>\n </tfoot>\n }\n </table>\n </cdk-virtual-scroll-viewport>\n} @else {\n @if (headerTemplate) {\n <thead #theadRef>\n <ng-template [ngTemplateOutlet]=\"headerTemplate\"></ng-template>\n </thead>\n }\n @if (bodyTemplate) {\n <tbody #tbodyRef>\n @for (row of dataRendered; let i = $index; track row) {\n <ng-container>\n <ng-template\n [ngTemplateOutlet]=\"bodyTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, index: i }\">\n </ng-template>\n </ng-container>\n }\n @if (noDataTemplate && (data?.length === 0 || dataRendered?.length === 0)) {\n <ng-template [ngTemplateOutlet]=\"noDataTemplate\"></ng-template>\n }\n </tbody>\n }\n @if (footerTemplate) {\n <tfoot #tfootRef>\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"></ng-template>\n </tfoot>\n }\n}\n\n<ng-template #skeletonLoading>\n <tr [style.height.px]=\"itemSize\">\n <td *ngFor=\"let __ of nbCols\"><eui-skeleton line euiRounded></eui-skeleton></td>\n </tr>\n</ng-template>\n", styles: [".eui-table-v2__scroll-viewport{min-height:100%;width:100%}.eui-table-v2__scrollable-wrapper{overflow:auto}.eui-table-v2__scrollable-wrapper::-webkit-scrollbar{display:inherit;height:8px;width:8px;background-color:var(--eui-c-neutral-bg-light)}.eui-table-v2__scrollable-wrapper::-webkit-scrollbar-thumb{background-color:var(--eui-c-neutral-lightest);border-radius:5rem}.eui-table-v2__scrollable-wrapper::-webkit-scrollbar-thumb:hover{background-color:var(--eui-c-neutral-lighter)}.eui-table-v2__scrollable-wrapper::-webkit-scrollbar-track{background-color:var(--eui-c-neutral-bg-light);border-radius:0}@-moz-document url-prefix(){.eui-table-v2__scrollable-wrapper{scrollbar-color:var(--eui-c-neutral-bg-light);scrollbar-width:thin}}.eui-table-v2__orderable-cols-preview,.eui-table-v2__orderable-rows-preview{display:none}.eui-table-v2--condensed thead tr th{padding:var(--eui-s-2xs) var(--eui-s-xs);font:var(--eui-f-s-bold)}.eui-table-v2--condensed tbody tr td,.eui-table-v2--condensed tfoot tr td{padding:var(--eui-s-2xs) var(--eui-s-xs);font:var(--eui-f-s)}.eui-table-v2--highlighted{background-color:var(--eui-c-accent);text-decoration:none}.eui-table-v2--virtual-scroll{width:100%;height:100%}.eui-table-v2--cols-orderable .cdk-drag-placeholder{background-color:var(--eui-c-white);color:var(--eui-c-info);cursor:move;opacity:1}.eui-table-v2--cols-orderable tr{display:table-row}.eui-table-v2--cols-orderable tr th.cdk-drag:not(.cdk-drag-disabled){cursor:move}.eui-table-v2--loading:before{animation:.8s linear infinite spin;border:8px solid transparent;border-radius:50%;border-top-color:var(--eui-c-primary);content:\"\";display:block;height:80px;left:50%;margin:-40px 0 0 -40px;position:absolute;top:50%;width:80px;z-index:1000001}.eui-table-v2--loading:after{background-color:#fff6;content:\"\";height:100%;left:0;position:absolute;top:0;width:100%}.eui-table-v2--sticky{max-width:none!important}.eui-table-v2--sticky-header thead{position:sticky;top:0;z-index:8}.eui-table-v2--sticky-header thead th,.eui-table-v2--sticky-header thead td{background-color:inherit}.eui-table-v2--sticky-header.eui-table-v2-sticky-col thead{z-index:9}.eui-table-v2--sticky tbody tr:nth-of-type(odd) td{background-color:inherit}.eui-table-v2--sticky tbody tr:nth-of-type(2n) td{background-color:inherit}.eui-table-v2--sticky-footer tfoot{position:sticky;bottom:-1px;z-index:8}.eui-table-v2--sticky-footer tfoot tr td{background-color:inherit}.eui-table-v2--sticky-cols .eui-table-v2__col--sticky{position:sticky;z-index:1}.eui-table-v2--sticky-cols th.eui-table-v2__col--sticky.eui-table-v2__col--sticky-shadowed-first,.eui-table-v2--sticky-cols tbody td.eui-table-v2__col--sticky.eui-table-v2__col--sticky-shadowed-first,.eui-table-v2--sticky-cols tfoot td.eui-table-v2__col--sticky.eui-table-v2__col--sticky-shadowed-first{box-shadow:inset -5px 0 8px -8px #0003}.eui-table-v2--sticky-cols th.eui-table-v2__col--sticky.eui-table-v2__col--sticky-shadowed-last,.eui-table-v2--sticky-cols tbody td.eui-table-v2__col--sticky.eui-table-v2__col--sticky-shadowed-last,.eui-table-v2--sticky-cols tfoot td.eui-table-v2__col--sticky.eui-table-v2__col--sticky-shadowed-last{box-shadow:inset 5px 0 8px -8px #0003}.eui-table-v2__row--selected td{background-color:var(--eui-c-primary-lightest)}@media screen and (max-width: 767px){.eui-table-v2.eui-table-default--responsive{width:100%!important}.eui-table-v2.eui-table-default--responsive thead,.eui-table-v2.eui-table-default--responsive tbody,.eui-table-v2.eui-table-default--responsive tfoot,.eui-table-v2.eui-table-default--responsive th,.eui-table-v2.eui-table-default--responsive td,.eui-table-v2.eui-table-default--responsive tr{display:block}.eui-table-v2.eui-table-default--responsive thead tr{left:-9999px;position:absolute;top:-9999px}.eui-table-v2.eui-table-default--responsive tr{height:auto}.eui-table-v2.eui-table-default--responsive td{border:var(--eui-bw-none);border-bottom:1px solid var(--eui-c-neutral-bg);padding-left:50%;position:relative;text-align:left!important;left:unset!important;right:unset!important}.eui-table-v2.eui-table-default--responsive td:before{color:var(--eui-c-neutral-light);content:attr(data-col-label);left:var(--eui-s-xs);padding-right:var(--eui-s-xs);position:absolute;width:45%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:var(--eui-f-m-bold)}.eui-table-v2.eui-table-default--responsive tfoot tr td:empty{display:none!important}.eui-table-v2 .actionsColumn,.eui-table-v2 .actions-column{justify-content:flex-start;text-align:left;width:100%}.eui-table-v2__sticky-container{height:auto;width:auto!important}.eui-table-v2--sticky-cols th,.eui-table-v2--sticky-cols td,.eui-table-v2--sticky-cols th .eui-table__col--sticky,.eui-table-v2--sticky-cols td .eui-table__col--sticky{width:auto;z-index:auto}.eui-table-v2--sticky-cols th .eui-table__col--sticky.eui-table__col--sticky-shadowed-first,.eui-table-v2--sticky-cols th .eui-table__col--sticky.eui-table__col--sticky-shadowed-last,.eui-table-v2--sticky-cols td .eui-table__col--sticky.eui-table__col--sticky-shadowed-first,.eui-table-v2--sticky-cols td .eui-table__col--sticky.eui-table__col--sticky-shadowed-last{box-shadow:none!important}.eui-table-v2--sticky-cols tfoot tr td:empty{display:none!important}}.eui-table-v2__filter{align-items:center;display:flex;justify-content:flex-end;position:relative}.eui-table-v2__filter--responsive{width:100%}.eui-table-v2__filter-input{padding-left:var(--eui-s-3xl)!important}.eui-table-v2__filter-search-icon{left:var(--eui-s-xs);position:absolute;top:var(--eui-s-xs)}.eui-table-v2__sortable-col-multisort-index{font:var(--eui-f-s)}.eui-table-v2__sortable-col .eui-table-v2__sortable-col-content{align-items:center;display:flex;vertical-align:middle;white-space:nowrap;justify-content:space-between}.eui-table-v2__sortable-col .eui-table-v2__sortable-col-content .eui-table-v2__sortable-col-content-label{align-items:center;display:flex;-webkit-user-select:none;-ms-user-select:none;user-select:none}\n"] }]
492
+ ], template: "<!-- <button (click)=\"test(19250)\">19250</button>\n<button (click)=\"test(7895)\">7895</button>\n<button (click)=\"test(16860)\">16860</button>\n<button (click)=\"test(16870)\">16870</button>\n<button (click)=\"test(16880)\">16880</button>\n<button (click)=\"test(16890)\">16890</button>\n<button (click)=\"test(16900)\">16900</button>\n<button (click)=\"test(26998)\">26998</button>\n<button (click)=\"test(28000)\">28000</button> -->\n@if (isVirtualScroll) {\n <cdk-virtual-scroll-viewport\n #cdkVirtualScrollViewport\n #cdkVirtualScrollViewportElement\n class=\"eui-table-v2__scroll-viewport\"\n [itemSize]=\"itemSize\"\n [style.overflow]=\"cdkVirtualScrollViewportOverflowValue\"\n tabindex=\"0\">\n <table class=\"{{ cssClasses }}\" [style.width]=\"hostWidth\">\n @if (headerTemplate) {\n <thead #theadRef [style.top]=\"stickyHeaderTopPosition\">\n <ng-template [ngTemplateOutlet]=\"headerTemplate\"></ng-template>\n </thead>\n }\n @if (bodyTemplate) {\n <tbody #tbodyRef>\n <ng-container *cdkVirtualFor=\"let row of dataRendered; let i = index; trackBy: trackByFn\">\n @if (row) {\n <ng-template\n [ngTemplateOutlet]=\"bodyTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, index: i }\">\n </ng-template>\n } @else {\n <ng-template [ngTemplateOutlet]=\"skeletonLoading\"></ng-template>\n }\n </ng-container>\n\n @if (noDataTemplate && (data?.length === 0 || dataRendered?.length === 0)) {\n <ng-template [ngTemplateOutlet]=\"noDataTemplate\"></ng-template>\n }\n </tbody>\n }\n @if (footerTemplate) {\n <tfoot #tfootRef [style.bottom]=\"stickyFooterBottomPosition\">\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"></ng-template>\n </tfoot>\n }\n </table>\n </cdk-virtual-scroll-viewport>\n} @else {\n @if (headerTemplate) {\n <thead #theadRef>\n <ng-template [ngTemplateOutlet]=\"headerTemplate\"></ng-template>\n </thead>\n }\n @if (bodyTemplate) {\n <tbody #tbodyRef>\n @for (row of dataRendered; let i = $index; track $index) {\n <ng-container>\n <ng-template\n [ngTemplateOutlet]=\"bodyTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, index: i }\">\n </ng-template>\n </ng-container>\n }\n @if (noDataTemplate && (data?.length === 0 || dataRendered?.length === 0)) {\n <ng-template [ngTemplateOutlet]=\"noDataTemplate\"></ng-template>\n }\n </tbody>\n }\n @if (footerTemplate) {\n <tfoot #tfootRef>\n <ng-template [ngTemplateOutlet]=\"footerTemplate\"></ng-template>\n </tfoot>\n }\n}\n\n<ng-template #skeletonLoading>\n <tr [style.height.px]=\"itemSize\">\n <td *ngFor=\"let __ of nbCols\"><eui-skeleton line euiRounded></eui-skeleton></td>\n </tr>\n</ng-template>\n", styles: [".eui-table-v2__scroll-viewport{min-height:100%;width:100%}.eui-table-v2__scrollable-wrapper{overflow:auto}.eui-table-v2__scrollable-wrapper::-webkit-scrollbar{display:inherit;height:8px;width:8px;background-color:var(--eui-c-neutral-bg-light)}.eui-table-v2__scrollable-wrapper::-webkit-scrollbar-thumb{background-color:var(--eui-c-neutral-lightest);border-radius:5rem}.eui-table-v2__scrollable-wrapper::-webkit-scrollbar-thumb:hover{background-color:var(--eui-c-neutral-lighter)}.eui-table-v2__scrollable-wrapper::-webkit-scrollbar-track{background-color:var(--eui-c-neutral-bg-light);border-radius:0}@-moz-document url-prefix(){.eui-table-v2__scrollable-wrapper{scrollbar-color:var(--eui-c-neutral-bg-light);scrollbar-width:thin}}.eui-table-v2__orderable-cols-preview,.eui-table-v2__orderable-rows-preview{display:none}.eui-table-v2--condensed thead tr th{padding:var(--eui-s-2xs) var(--eui-s-xs);font:var(--eui-f-s-bold)}.eui-table-v2--condensed tbody tr td,.eui-table-v2--condensed tfoot tr td{padding:var(--eui-s-2xs) var(--eui-s-xs);font:var(--eui-f-s)}.eui-table-v2--highlighted{background-color:var(--eui-c-accent);text-decoration:none}.eui-table-v2--virtual-scroll{width:100%;height:100%}.eui-table-v2--cols-orderable .cdk-drag-placeholder{background-color:var(--eui-c-white);color:var(--eui-c-info);cursor:move;opacity:1}.eui-table-v2--cols-orderable tr{display:table-row}.eui-table-v2--cols-orderable tr th.cdk-drag:not(.cdk-drag-disabled){cursor:move}.eui-table-v2--loading:before{animation:.8s linear infinite spin;border:8px solid transparent;border-radius:50%;border-top-color:var(--eui-c-primary);content:\"\";display:block;height:80px;left:50%;margin:-40px 0 0 -40px;position:absolute;top:50%;width:80px;z-index:1000001}.eui-table-v2--loading:after{background-color:#fff6;content:\"\";height:100%;left:0;position:absolute;top:0;width:100%}.eui-table-v2--sticky{max-width:none!important}.eui-table-v2--sticky-header thead{position:sticky;top:0;z-index:8}.eui-table-v2--sticky-header thead th,.eui-table-v2--sticky-header thead td{background-color:inherit}.eui-table-v2--sticky-header.eui-table-v2-sticky-col thead{z-index:9}.eui-table-v2--sticky tbody tr:nth-of-type(odd) td{background-color:inherit}.eui-table-v2--sticky tbody tr:nth-of-type(2n) td{background-color:inherit}.eui-table-v2--sticky-footer tfoot{position:sticky;bottom:-1px;z-index:8}.eui-table-v2--sticky-footer tfoot tr td{background-color:inherit}.eui-table-v2--sticky-cols .eui-table-v2__col--sticky{position:sticky;z-index:1}.eui-table-v2--sticky-cols th.eui-table-v2__col--sticky.eui-table-v2__col--sticky-shadowed-first,.eui-table-v2--sticky-cols tbody td.eui-table-v2__col--sticky.eui-table-v2__col--sticky-shadowed-first,.eui-table-v2--sticky-cols tfoot td.eui-table-v2__col--sticky.eui-table-v2__col--sticky-shadowed-first{box-shadow:inset -5px 0 8px -8px #0003}.eui-table-v2--sticky-cols th.eui-table-v2__col--sticky.eui-table-v2__col--sticky-shadowed-last,.eui-table-v2--sticky-cols tbody td.eui-table-v2__col--sticky.eui-table-v2__col--sticky-shadowed-last,.eui-table-v2--sticky-cols tfoot td.eui-table-v2__col--sticky.eui-table-v2__col--sticky-shadowed-last{box-shadow:inset 5px 0 8px -8px #0003}.eui-table-v2__row--selected td{background-color:var(--eui-c-primary-lightest)}@media screen and (max-width: 767px){.eui-table-v2.eui-table-default--responsive{width:100%!important}.eui-table-v2.eui-table-default--responsive thead,.eui-table-v2.eui-table-default--responsive tbody,.eui-table-v2.eui-table-default--responsive tfoot,.eui-table-v2.eui-table-default--responsive th,.eui-table-v2.eui-table-default--responsive td,.eui-table-v2.eui-table-default--responsive tr{display:block}.eui-table-v2.eui-table-default--responsive thead tr{left:-9999px;position:absolute;top:-9999px}.eui-table-v2.eui-table-default--responsive tr{height:auto}.eui-table-v2.eui-table-default--responsive td{border:var(--eui-bw-none);border-bottom:1px solid var(--eui-c-neutral-bg);padding-left:50%;position:relative;text-align:left!important;left:unset!important;right:unset!important}.eui-table-v2.eui-table-default--responsive td:before{color:var(--eui-c-neutral-light);content:attr(data-col-label);left:var(--eui-s-xs);padding-right:var(--eui-s-xs);position:absolute;width:45%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:var(--eui-f-m-bold)}.eui-table-v2.eui-table-default--responsive tfoot tr td:empty{display:none!important}.eui-table-v2 .actionsColumn,.eui-table-v2 .actions-column{justify-content:flex-start;text-align:left;width:100%}.eui-table-v2__sticky-container{height:auto;width:auto!important}.eui-table-v2--sticky-cols th,.eui-table-v2--sticky-cols td,.eui-table-v2--sticky-cols th .eui-table__col--sticky,.eui-table-v2--sticky-cols td .eui-table__col--sticky{width:auto;z-index:auto}.eui-table-v2--sticky-cols th .eui-table__col--sticky.eui-table__col--sticky-shadowed-first,.eui-table-v2--sticky-cols th .eui-table__col--sticky.eui-table__col--sticky-shadowed-last,.eui-table-v2--sticky-cols td .eui-table__col--sticky.eui-table__col--sticky-shadowed-first,.eui-table-v2--sticky-cols td .eui-table__col--sticky.eui-table__col--sticky-shadowed-last{box-shadow:none!important}.eui-table-v2--sticky-cols tfoot tr td:empty{display:none!important}}.eui-table-v2__filter{align-items:center;display:flex;justify-content:flex-end;position:relative}.eui-table-v2__filter--responsive{width:100%}.eui-table-v2__filter-input{padding-left:var(--eui-s-3xl)!important}.eui-table-v2__filter-search-icon{left:var(--eui-s-xs);position:absolute;top:var(--eui-s-xs)}.eui-table-v2__sortable-col-multisort-index{font:var(--eui-f-s)}.eui-table-v2__sortable-col .eui-table-v2__sortable-col-content{align-items:center;display:flex;vertical-align:middle;white-space:nowrap;justify-content:space-between}.eui-table-v2__sortable-col .eui-table-v2__sortable-col-content .eui-table-v2__sortable-col-content-label{align-items:center;display:flex;-webkit-user-select:none;-ms-user-select:none;user-select:none}\n"] }]
493
493
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.EuiTableV2SelectableRowService }, { type: i2.EuiTableV2SortService }, { type: i3.BaseStatesDirective }, { type: i0.Renderer2 }], propDecorators: { cssClasses: [{
494
494
  type: HostBinding,
495
495
  args: ['class']
@@ -572,4 +572,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
572
572
  }], sortChange: [{
573
573
  type: Output
574
574
  }] } });
575
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXRhYmxlLXYyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2V1aS10YWJsZS12Mi9ldWktdGFibGUtdjIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLXRhYmxlLXYyL2V1aS10YWJsZS12Mi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQTRDLFNBQVMsRUFBaUIsVUFBVSxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFDckosaUJBQWlCLEVBQUUsdUJBQXVCLEVBQXFCLE1BQU0sRUFBRSxZQUFZLEVBQTRCLGVBQWUsRUFDbkgsTUFBTSxlQUFlLENBQUM7QUFFckMsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJeEgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFN0QsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFaEcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7O0FBRzdFLE1BQU0sQ0FBTixJQUFZLGlCQUdYO0FBSEQsV0FBWSxpQkFBaUI7SUFDekIsOEJBQVMsQ0FBQTtJQUNULGtDQUFhLENBQUE7QUFDakIsQ0FBQyxFQUhXLGlCQUFpQixLQUFqQixpQkFBaUIsUUFHNUI7QUFnQkQsTUFBTSxPQUFPLG1CQUFtQjtJQUM1QixJQUNXLFVBQVU7UUFDakIsT0FBTztZQUNILElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsZ0NBQWdDLENBQUM7WUFDeEUsSUFBSSxDQUFDLGVBQWUs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QixFQUFFO2dCQVdDLFNBQVM7c0JBQS9DLGVBQWU7dUJBQUMsb0JBQW9CO2dCQUUrQix3QkFBd0I7c0JBQTNGLFNBQVM7dUJBQUMsMEJBQTBCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNxQywrQkFBK0I7c0JBQTNILFNBQVM7dUJBQUMsaUNBQWlDLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQzFELFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFDRSxRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBQ0UsUUFBUTtzQkFBOUIsU0FBUzt1QkFBQyxVQUFVO2dCQUVYLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgQ29udGVudENoaWxkcmVuLCBRdWVyeUxpc3QsIEFmdGVyQ29udGVudEluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIEFmdGVyVmlld0luaXQsIEVsZW1lbnRSZWYsIGJvb2xlYW5BdHRyaWJ1dGUsIEhvc3RCaW5kaW5nLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXMsIG51bWJlckF0dHJpYnV0ZSwgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBjb21iaW5lTGF0ZXN0LCBkZWJvdW5jZVRpbWUsIHNraXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTGlzdFJhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcblxuaW1wb3J0IHsgRXVpUGFnaW5hdGlvbkV2ZW50LCBFdWlQYWdpbmF0b3JDb21wb25lbnQgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLXBhZ2luYXRvcic7XG5pbXBvcnQgeyBFdWlUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9kaXJlY3RpdmVzJztcbmltcG9ydCB7IEJhc2VTdGF0ZXNEaXJlY3RpdmUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvc2hhcmVkJztcblxuaW1wb3J0IHsgRXVpVGFibGVWMlNlbGVjdGFibGVSb3dTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9ldWktdGFibGUtdjItc2VsZWN0YWJsZS1yb3cuc2VydmljZSc7XG5pbXBvcnQgeyBFdWlUYWJsZVYyRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi9maWx0ZXIvZXVpLXRhYmxlLXYyLWZpbHRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRXVpVGFibGVWMlNvcnRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9ldWktdGFibGUtdjItc29ydC5zZXJ2aWNlJztcbmltcG9ydCB7IFNvcnQsIFNvcnRPcmRlciB9IGZyb20gJy4vbW9kZWxzL3NvcnQubW9kZWwnO1xuXG5leHBvcnQgZW51bSBTY3JvbGxpbkRpcmVjdGlvbiB7XG4gICAgVVAgPSAnVVAnLFxuICAgIERPV04gPSAnRE9XTicsXG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZXVpLXRhYmxlLXYyLCB0YWJsZVtldWlUYWJsZVYyXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V1aS10YWJsZS12Mi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc3R5bGVzL19pbmRleC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtFdWlUYWJsZVYyU2VsZWN0YWJsZVJvd1NlcnZpY2UsIEV1aVRhYmxlVjJTb3J0U2VydmljZV0sXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgZGlyZWN0aXZlOiBCYXNlU3RhdGVzRGlyZWN0aXZlLFxuICAgICAgICAgICAgaW5wdXRzOiBbXSxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBFdWlUYWJsZVYyQ29tcG9uZW50PERBVEEgPSB1bmtub3duPiBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25Jbml0LCBPbkNoYW5nZXMge1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICAgIHB1YmxpYyBnZXQgY3NzQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGhpcy5iYXNlU3RhdGVzRGlyZWN0aXZlLmdldENzc0NsYXNzZXMoJ2V1aS10YWJsZS1kZWZhdWx0IGV1aS10YWJsZS12MicpLFxuICAgICAgICAgICAgdGhpcy5pc1ZpcnR1YWxTY3JvbGwgPyAnZXVpLXRhYmxlLXYyLS12aXJ0dWFsLXNjcm9sbCcgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuaGFzU3RpY2t5SGVhZGVyID8gJ2V1aS10YWJsZS12Mi0tc3RpY2t5IGV1aS10YWJsZS12Mi0tc3RpY2t5LWhlYWRlcicgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuaGFzU3RpY2t5Rm9vdGVyID8gJ2V1aS10YWJsZS12Mi0tc3RpY2t5IGV1aS10YWJsZS12Mi0tc3RpY2t5LWZvb3RlcicgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuaGFzU3RpY2t5Q29scyA/ICdldWktdGFibGUtdjItLXN0aWNreSBldWktdGFibGUtdjItLXN0aWNreS1jb2xzJyA6ICcnLFxuICAgICAgICAgICAgdGhpcy5pc1RhYmxlUmVzcG9uc2l2ZSA/ICdldWktdGFibGUtZGVmYXVsdC0tcmVzcG9uc2l2ZScgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuaXNDb2xzT3JkZXJhYmxlID8gJ2V1aS10YWJsZS12Mi0tY29scy1vcmRlcmFibGUnIDogJycsXG4gICAgICAgICAgICB0aGlzLmlzVGFibGVDb25kZW5zZWQgPyAnZXVpLXRhYmxlLXYyLS1jb25kZW5zZWQnIDogJycsXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA/ICdldWktdGFibGUtdjItLWxvYWRpbmcnIDogJycsXG4gICAgICAgIF1cbiAgICAgICAgICAgIC5qb2luKCcgJylcbiAgICAgICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgZGF0YTogREFUQVtdID0gW107XG4gICAgQElucHV0KCkgcHJvcElkID0gJ2lkJztcbiAgICBASW5wdXQoKSBpdGVtU2l6ZSA9IDQxO1xuICAgIEBJbnB1dCgpIHBhZ2luYXRvcjogRXVpUGFnaW5hdG9yQ29tcG9uZW50O1xuICAgIEBJbnB1dCgpIGZpbHRlcjogRXVpVGFibGVWMkZpbHRlckNvbXBvbmVudDtcbiAgICBASW5wdXQoKSBwcmVzZWxlY3RlZFJvd3M6IERBVEFbXSA9IFtdO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzVmlydHVhbFNjcm9sbCA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc1ZpcnR1YWxTY3JvbGxDYWNoZSA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoYXNTdGlja3lIZWFkZXIgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaGFzU3RpY2t5Rm9vdGVyID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGhhc1N0aWNreUNvbHMgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNUYWJsZVJlc3BvbnNpdmUgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNBc3luYyA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIHZpcnR1YWxTY3JvbGxBc3luY0l0ZW1zTGVuZ3RoID0gMDtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSB2aXJ0dWFsU2Nyb2xsTmJSb3dzID0gNTA7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzQ29sc09yZGVyYWJsZSA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNTZWxlY3RPbmx5VmlzaWJsZVJvd3MgPSB0cnVlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc1RhYmxlQm9yZGVyZWQgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNUYWJsZUNvbmRlbnNlZCA9IGZhbHNlO1xuXG4gICAgcHJvdGVjdGVkIGhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD47XG4gICAgcHJvdGVjdGVkIGJvZHlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8eyAkaW1wbGljaXQ6IERBVEE7IGluZGV4OiBudW1iZXIgfT47XG4gICAgcHJvdGVjdGVkIGZvb3RlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD47XG4gICAgcHJvdGVjdGVkIG5vRGF0YVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD47XG4gICAgcHJvdGVjdGVkIGxvYWRpbmcgPSBbXTtcbiAgICBwcm90ZWN0ZWQgbmJDb2xzOiBIVE1MVGFibGVDZWxsRWxlbWVudFtdID0gW107XG4gICAgcHJvdGVjdGVkIGRhdGFSZW5kZXJlZDogREFUQVtdID0gW107XG4gICAgcHJvdGVjdGVkIGNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydE92ZXJmbG93VmFsdWU6ICgnaGlkZGVuJyB8ICdhdXRvJykgPSAnYXV0byc7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKEV1aVRlbXBsYXRlRGlyZWN0aXZlKSB0ZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxFdWlUZW1wbGF0ZURpcmVjdGl2ZT47XG5cbiAgICBAVmlld0NoaWxkKCdjZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgcHJvdGVjdGVkIGNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuICAgIEBWaWV3Q2hpbGQoJ2Nka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydEVsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IEVsZW1lbnRSZWYgfSkgcHJvdGVjdGVkIGNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgndGhlYWRSZWYnKSB0aGVhZFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gICAgQFZpZXdDaGlsZCgndGJvZHlSZWYnKSB0Ym9keVJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gICAgQFZpZXdDaGlsZCgndGZvb3RSZWYnKSB0Zm9vdFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICBAT3V0cHV0KCkgc2Nyb2xsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSByb3dzU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxEQVRBW10+KCk7XG4gICAgQE91dHB1dCgpIHNvcnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNvcnRbXT4oKTtcblxuICAgIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICAgIHByaXZhdGUgdmlydHVhbFNjcm9sbExhc3RNdWx0aXBsZSA9IDA7XG4gICAgcHJpdmF0ZSB2aXJ0dWFsU2Nyb2xsU3BsaWNlRnJvbSA9IDA7XG4gICAgcHJpdmF0ZSBzY3JvbGxlZEluZGV4ID0gMDtcbiAgICBwcml2YXRlIG5iSXRlbURpc3BsYXllZCA9IDA7XG4gICAgcHJpdmF0ZSBzY3JvbGxpbmdEaXJlY3Rpb246IFNjcm9sbGluRGlyZWN0aW9uO1xuICAgIHByaXZhdGUgbXV0YXRpb25PYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcjtcbiAgICBwcml2YXRlIGRhdGFTcmM6IERBVEFbXSA9IFtdO1xuICAgIHByaXZhdGUgcGFnZSA9IDA7XG4gICAgcHJpdmF0ZSBwYWdlU2l6ZSA9IDA7XG4gICAgcHJpdmF0ZSB0YWJsZUZlYXR1cmVzSGFuZGxlclN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBwcml2YXRlIGZpbHRlcmVkRGF0YTogREFUQVtdID0gW107XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBldWlUYWJsZVYyU2VsZWN0YWJsZVJvd1NlcnZpY2U6IEV1aVRhYmxlVjJTZWxlY3RhYmxlUm93U2VydmljZTxEQVRBPixcbiAgICAgICAgICAgICAgICBwcml2YXRlIGV1aVRhYmxlVjJTb3J0U2VydmljZTogRXVpVGFibGVWMlNvcnRTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgYmFzZVN0YXRlc0RpcmVjdGl2ZTogQmFzZVN0YXRlc0RpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgICAgICAgICAgKSB7fVxuXG4gICAgbmdPbkNoYW5nZXMoYzogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gW107XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV1aVRhYmxlVjJTZWxlY3RhYmxlUm93U2VydmljZS5zZXRQcm9wSWQodGhpcy5wcm9wSWQpO1xuICAgICAgICBpZiAodGhpcy5pc1ZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAgIGlmIChjLmRhdGEgJiYgYy5kYXRhLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVJlbmRlcmVkID0gWy4uLmMuZGF0YS5jdXJyZW50VmFsdWUsIC4uLkFycmF5LmZyb20oeyBsZW5ndGg6IHRoaXMudmlydHVhbFNjcm9sbEFzeW5jSXRlbXNMZW5ndGggLSBjLmRhdGEuY3VycmVudFZhbHVlLmxlbmd0aCB9KV07XG5cbiAgICAgICAgICAgICAgICB0aGlzLmV1aVRhYmxlVjJTZWxlY3RhYmxlUm93U2VydmljZS51bnJlZ2lzdGVyUm93cygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZXVpVGFibGVWMlNlbGVjdGFibGVSb3dTZXJ2aWNlLnJlZ2lzdGVyUm93cyh0aGlzLmRhdGFSZW5kZXJlZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjLmRhdGEgJiYgIWMuZGF0YS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0FzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IFsuLi50aGlzLmRhdGFSZW5kZXJlZF07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVmlydHVhbFNjcm9sbENhY2hlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFSZW5kZXJlZCA9IFsuLi5zb3VyY2Uuc2xpY2UoMCwgdGhpcy52aXJ0dWFsU2Nyb2xsU3BsaWNlRnJvbSksIC4uLmMuZGF0YS5jdXJyZW50VmFsdWUsIC4uLnNvdXJjZS5zbGljZSh0aGlzLnZpcnR1YWxTY3JvbGxTcGxpY2VGcm9tICsgdGhpcy52aXJ0dWFsU2Nyb2xsTmJSb3dzKV07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFSZW5kZXJlZCA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5BcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLnZpcnR1YWxTY3JvbGxTcGxpY2VGcm9tIC0gdGhpcy5uYkl0ZW1EaXNwbGF5ZWQgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uc291cmNlLnNsaWNlKHRoaXMudmlydHVhbFNjcm9sbFNwbGljZUZyb20gLSB0aGlzLm5iSXRlbURpc3BsYXllZCwgdGhpcy52aXJ0dWFsU2Nyb2xsU3BsaWNlRnJvbSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5kYXRhLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5zb3VyY2Uuc2xpY2UodGhpcy52aXJ0dWFsU2Nyb2xsU3BsaWNlRnJvbSArIHRoaXMudmlydHVhbFNjcm9sbE5iUm93cywgdGhpcy52aXJ0dWFsU2Nyb2xsU3BsaWNlRnJvbSArIHRoaXMudmlydHVhbFNjcm9sbE5iUm93cyArIHRoaXMubmJJdGVtRGlzcGxheWVkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5BcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLnZpcnR1YWxTY3JvbGxBc3luY0l0ZW1zTGVuZ3RoIC0gKHRoaXMudmlydHVhbFNjcm9sbFNwbGljZUZyb20gKyB0aGlzLnZpcnR1YWxTY3JvbGxOYlJvd3MgKyB0aGlzLm5iSXRlbURpc3BsYXllZCkgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGMgJiYgYy52aXJ0dWFsU2Nyb2xsQXN5bmNJdGVtc0xlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMudmlydHVhbFNjcm9sbEFzeW5jSXRlbXNMZW5ndGgucHJldmlvdXNWYWx1ZSA+IGMudmlydHVhbFNjcm9sbEFzeW5jSXRlbXNMZW5ndGguY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhUmVuZGVyZWQgPSB0aGlzLmRhdGFSZW5kZXJlZC5zbGljZSgwLCBjLnZpcnR1YWxTY3JvbGxBc3luY0l0ZW1zTGVuZ3RoLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVJlbmRlcmVkID0gWy4uLmMuZGF0YS5jdXJyZW50VmFsdWUsIC4uLkFycmF5LmZyb20oeyBsZW5ndGg6IHRoaXMudmlydHVhbFNjcm9sbEFzeW5jSXRlbXNMZW5ndGggLSBjLmRhdGEuY3VycmVudFZhbHVlLmxlbmd0aCB9KV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV1aVRhYmxlVjJTZWxlY3RhYmxlUm93U2VydmljZS51bnJlZ2lzdGVyUm93cygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV1aVRhYmxlVjJTZWxlY3RhYmxlUm93U2VydmljZS5yZWdpc3RlclJvd3ModGhpcy5kYXRhUmVuZGVyZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNjcm9sbGluZ0RpcmVjdGlvbiA9PT0gU2Nyb2xsaW5EaXJlY3Rpb24uRE9XTikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLmhhc1VuZGVmaW5lZEluUmFuZ2UodGhpcy5zY3JvbGxlZEluZGV4LCB0aGlzLm5iSXRlbURpc3BsYXllZCwgdGhpcy5kYXRhUmVuZGVyZWQpICE9PSAtMSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsZWRJbmRleCA9PT0gdGhpcy52aXJ0dWFsU2Nyb2xsU3BsaWNlRnJvbSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmRhdGFSZW5kZXJlZFt0aGlzLnNjcm9sbGVkSW5kZXggLSAxXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc1VuZGVmaW5lZEluUmFuZ2UodGhpcy5zY3JvbGxlZEluZGV4LCB0aGlzLm5iSXRlbURpc3BsYXllZCwgdGhpcy5kYXRhUmVuZGVyZWQpICE9PSB0aGlzLmRhdGFSZW5kZXJlZC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygncmVwb3NpdGlvbiBkb3duJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5zY3JvbGxUb0luZGV4KHRoaXMudmlydHVhbFNjcm9sbFNwbGljZUZyb20gKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNjcm9sbGluZ0RpcmVjdGlvbiA9PT0gU2Nyb2xsaW5EaXJlY3Rpb24uVVApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc1VuZGVmaW5lZEluUmFuZ2UodGhpcy5zY3JvbGxlZEluZGV4LCB0aGlzLm5iSXRlbURpc3BsYXllZCwgdGhpcy5kYXRhUmVuZGVyZWQpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdyZXBvc2l0aW9uIHVwJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5zY3JvbGxUb0luZGV4KHRoaXMudmlydHVhbFNjcm9sbFNwbGljZUZyb20gKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RpY2t5RmVhdHVyZUhhbmRsZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoYyAmJiBjLmRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGhDaGFuZ2VkID0gdGhpcy5kYXRhU3JjLmxlbmd0aCAhPT0gYy5kYXRhLmN1cnJlbnRWYWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU3JjID0gYy5kYXRhLmN1cnJlbnRWYWx1ZSA/IFsuLi5jLmRhdGEuY3VycmVudFZhbHVlXSA6IFtdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5hdG9yICYmIGxlbmd0aENoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0b3IuZ29GaXJzdFBhZ2UoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNBc3luYyAmJiAhYy5kYXRhLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRmVhdHVyZXNIYW5kbGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVGZWF0dXJlc0hhbmRsZXIoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmV1aVRhYmxlVjJTZWxlY3RhYmxlUm93U2VydmljZS5yZWdpc3RlclJvd3ModGhpcy5kYXRhU3JjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjICYmIGMucGFnaW5hdG9yPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRvci5zZXRMZW5ndGgodGhpcy5kYXRhLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgaWYgKCFjLnBhZ2luYXRvcj8uaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdG9yLmdvRmlyc3RQYWdlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmRhdGEgY2FuIGJlIGNoYW5nZWQgYW55dGltZSwgdGhlbiB0aGlzIGVsc2UgY2FuIGJlIGV4ZWN1dGVkIGF0IHRoYXQgdGltZSwgdGVzdGluZyB0aGlzLnBhZ2luYXRvciBhbGxvd3MgdG8gbWFrZSBzdXJlXG4gICAgICAgICAgICAgICAgLy8gdGhlIHVzZXIgd2FudHMgdG8gZGlzYWJsZSBwYWdpbmF0aW9uIG9yIGNoYW5nZSB0aGUgZGF0YXNvdXJjZVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhUmVuZGVyZWQgPSB0aGlzLmRhdGFTcmM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZSA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgJiYgYy5wcmVzZWxlY3RlZFJvd3MgJiYgIWMucHJlc2VsZWN0ZWRSb3dzLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5ldWlUYWJsZVYyU2VsZWN0YWJsZVJvd1NlcnZpY2Uuc2VsZWN0Um93cyhjLnByZXNlbGVjdGVkUm93cy5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0YVNyYyA9IFsuLi50aGlzLmRhdGFdO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0uZ2V0VHlwZSgpID09PSAnaGVhZGVyJykge1xuICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0uZ2V0VHlwZSgpID09PSAnYm9keScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvZHlUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbS5nZXRUeXBlKCkgPT09ICdmb290ZXInKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb290ZXJUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbS5nZXRUeXBlKCkgPT09ICdub0RhdGEnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub0RhdGFUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRlc3QoaW5kZXgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQuc2Nyb2xsVG9JbmRleChpbmRleClcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RpY2t5RmVhdHVyZUhhbmRsZXIoKTtcblxuICAgICAgICBpZiAodGhpcy5pc1ZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0Py5yZW5kZXJlZFJhbmdlU3RyZWFtXG4gICAgICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDUwMCksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0UmFuZ2U6IExpc3RSYW5nZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0aWNreUZlYXR1cmVIYW5kbGVyKCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHRoZWFkRWxlbWVudHMgPSBBcnJheS5mcm9tKHRoaXMudGhlYWRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCd0aCcpKTtcbiAgICAgICAgICAgIHRoaXMubmJDb2xzID0gbmV3IEFycmF5KHRoZWFkRWxlbWVudHMubGVuZ3RoKTtcblxuICAgICAgICAgICAgdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQuc2Nyb2xsZWRJbmRleENoYW5nZVxuICAgICAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoc2Nyb2xsZWRJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsaW5nRGlyZWN0aW9uID0gc2Nyb2xsZWRJbmRleCA+IHRoaXMuc2Nyb2xsZWRJbmRleCA/IFNjcm9sbGluRGlyZWN0aW9uLkRPV04gOiBTY3JvbGxpbkRpcmVjdGlvbi5VUDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsZWRJbmRleCA9IHNjcm9sbGVkSW5kZXg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LnNldFRvdGFsQ29udGVudFNpemUodGhpcy52aXJ0dWFsU2Nyb2xsQXN5bmNJdGVtc0xlbmd0aCAqIHRoaXMuaXRlbVNpemUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxPZmZzZXQgPSB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCd0b3AnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZEluZGV4ID0gTWF0aC5jZWlsKChzY3JvbGxPZmZzZXQgKyB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5nZXRWaWV3cG9ydFNpemUoKSkgLyB0aGlzLml0ZW1TaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmJJdGVtRGlzcGxheWVkID0gZW5kSW5kZXggLSBzY3JvbGxlZEluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmlydHVhbFNjcm9sbEN1cnJlbnRNdWx0aXBsZSA9IE1hdGguZmxvb3IoKHNjcm9sbGVkSW5kZXggKyB0aGlzLm5iSXRlbURpc3BsYXllZCkgLyB0aGlzLnZpcnR1YWxTY3JvbGxOYlJvd3MpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsZWRJbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhUmVuZGVyZWRbc2Nyb2xsZWRJbmRleF0gfHwgKHRoaXMuc2Nyb2xsaW5nRGlyZWN0aW9uID09PSBTY3JvbGxpbkRpcmVjdGlvbi5VUCAmJiB0aGlzLmRhdGFSZW5kZXJlZFtzY3JvbGxlZEluZGV4IC0gMV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd2aXJ0dWFsU2Nyb2xsQ3VycmVudE11bHRpcGxlJywgdmlydHVhbFNjcm9sbEN1cnJlbnRNdWx0aXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ3RoaXMudmlydHVhbFNjcm9sbExhc3RNdWx0aXBsZScsIHRoaXMudmlydHVhbFNjcm9sbExhc3RNdWx0aXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ3ZpcnR1YWxTY3JvbGxDdXJyZW50TXVsdGlwbGUgPiB0aGlzLnZpcnR1YWxTY3JvbGxMYXN0TXVsdGlwbGUnLCB2aXJ0dWFsU2Nyb2xsQ3VycmVudE11bHRpcGxlID4gdGhpcy52aXJ0dWFsU2Nyb2xsTGFzdE11bHRpcGxlKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2aXJ0dWFsU2Nyb2xsQ3VycmVudE11bHRpcGxlID4gdGhpcy52aXJ0dWFsU2Nyb2xsTGFzdE11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGxTcGxpY2VGcm9tID0gdmlydHVhbFNjcm9sbEN1cnJlbnRNdWx0aXBsZSAqIHRoaXMudmlydHVhbFNjcm9sbE5iUm93cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ2hhbmdlLmVtaXQoeyBzdGFydDogdmlydHVhbFNjcm9sbEN1cnJlbnRNdWx0aXBsZSAqIHRoaXMudmlydHVhbFNjcm9sbE5iUm93cywgZW5kOiB0aGlzLnZpcnR1YWxTY3JvbGxOYlJvd3MgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsU3BsaWNlRnJvbSA9IHRoaXMucm91bmREb3duKHNjcm9sbGVkSW5kZXgsIHRoaXMudmlydHVhbFNjcm9sbE5iUm93cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbENoYW5nZS5lbWl0KHsgc3RhcnQ6IHRoaXMudmlydHVhbFNjcm9sbFNwbGljZUZyb20sIGVuZDogdGhpcy52aXJ0dWFsU2Nyb2xsTmJSb3dzIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsTGFzdE11bHRpcGxlID0gdmlydHVhbFNjcm9sbEN1cnJlbnRNdWx0aXBsZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0RWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQuY2xpZW50SGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG11dGF0aW9uT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPE11dGF0aW9uUmVjb3JkW10+KChvYnNlcnZlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkTXV0YXRpb25zID0gbXV0YXRpb25zLmZpbHRlcigobXV0YXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0aW9uLnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbi50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAndGgnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lID09PSAnc3R5bGUnXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRNdXRhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGZpbHRlcmVkTXV0YXRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgY29uZmlnID0geyBhdHRyaWJ1dGVzOiB0cnVlLCBzdWJ0cmVlOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsnc3R5bGUnXSB9O1xuICAgICAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy50aGVhZFJlZi5uYXRpdmVFbGVtZW50LCBjb25maWcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBtdXRhdGlvbk9ic2VydmFibGUucGlwZShkZWJvdW5jZVRpbWUoMjUwKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKG11dGF0aW9ucykgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdGlja3lGZWF0dXJlSGFuZGxlcigpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNBc3luYyAmJiAhdGhpcy5pc1ZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMudGFibGVGZWF0dXJlc0hhbmRsZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMudGFibGVGZWF0dXJlc0hhbmRsZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VsZWN0Um93c0ZlYXR1cmVIYW5kbGVyKCk7XG4gICAgICAgIHRoaXMuc29ydEZlYXR1cmVIYW5kbGVyKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgdGhpcy50YWJsZUZlYXR1cmVzSGFuZGxlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vdmVzIGFuIGVsZW1lbnQgd2l0aGluIHRoZSByZW5kZXJlZCBkYXRhIGFycmF5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW1JZCAtIFRoZSBpZGVudGlmaWVyIChkZWZhdWx0OiBpZCkgb2YgdGhlIGVsZW1lbnQgdG8gbW92ZS5cbiAgICAgKiBAcGFyYW0gZnJvbUluZGV4IC0gVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gbW92ZS5cbiAgICAgKiBAcGFyYW0gdG9JbmRleCAtIFRoZSBuZXcgZGVzaXJlZCBwb3NpdGlvbiBmb3IgdGhlIGVsZW1lbnQuXG4gICAgICovXG4gICAgcHVibGljIG1vdmVJdGVtKGl0ZW1JZDogbnVtYmVyIHwgc3RyaW5nLCBmcm9tSW5kZXg6IG51bWJlciwgdG9JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW1Qb3NpdGlvbiA9IHRoaXMuZGF0YVJlbmRlcmVkLmZpbmRJbmRleChkID0+IGQgJiYgZFt0aGlzLnByb3BJZF0gPT09IGl0ZW1JZCk7XG4gICAgICAgIGNvbnN0IG1vdmUgPSB0b0luZGV4IC0gZnJvbUluZGV4O1xuXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IFsuLi50aGlzLmRhdGFSZW5kZXJlZF07XG4gICAgICAgIGNvbnN0IFtlbGVtZW50VG9Nb3ZlXSA9IHNvdXJjZS5zcGxpY2UoaXRlbVBvc2l0aW9uLCAxKTtcblxuICAgICAgICBzb3VyY2Uuc3BsaWNlKGl0ZW1Qb3NpdGlvbiArIG1vdmUsIDAsIGVsZW1lbnRUb01vdmUpO1xuXG4gICAgICAgIHRoaXMuZGF0YVJlbmRlcmVkID0gc291cmNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdCBhbGwgcm93c1xuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RBbGxSb3dzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmV1aVRhYmxlVjJTZWxlY3RhYmxlUm93U2VydmljZS5zZWxlY3RBbGxSb3dzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVW5zZWxlY3QgYWxsIHJvd3NcbiAgICAgKi9cbiAgICBwdWJsaWMgdW5zZWxlY3RBbGxSb3dzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmV1aVRhYmxlVjJTZWxlY3RhYmxlUm93U2VydmljZS51bnNlbGVjdEFsbFJvd3MoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgd2l0aCB0aGUgZGF0YSBtYXRjaGluZyB0aGUgc3RyaW5nIGZpbHRlclxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHVibGljIGdldEZpbHRlcmVkRGF0YSgpOiBEQVRBW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJlZERhdGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU29ydCB0aGUgdGFibGUncyBkYXRhLlxuICAgICAqIEBwYXJhbSBzb3J0cyBBbiBhcnJheSBvZiBTb3J0T3JkZXIuIFNlZSB7QGxpbmsgU29ydE9yZGVyfVxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRTb3J0KHNvcnRzOiBTb3J0W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ldWlUYWJsZVYyU29ydFNlcnZpY2Uuc2V0U29ydHMoc29ydHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaWx0ZXJEYXRhKGZpbHRlcjogc3RyaW5nLCByOiBEQVRBW10pOiBEQVRBW10ge1xuICAgICAgICBjb25zdCByb3dzID0gZmlsdGVyID9cbiAgICAgICAgICAgIHIuZmlsdGVyKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nID0gdGhpcy5nZXRQcm9wcyhyb3csIGZpbHRlcikuZmlsdGVyKChwKSA9PiBwLm1hdGNoID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGluZz8ubGVuZ3RoID4gMDtcbiAgICAgICAgICAgIH0pIDogcjtcblxuICAgICAgICB0aGlzLmV1aVRhYmxlVjJTZWxlY3RhYmxlUm93U2VydmljZS51bnJlZ2lzdGVyUm93cygpO1xuICAgICAgICB0aGlzLmV1aVRhYmxlVjJTZWxlY3RhYmxlUm93U2VydmljZS5yZWdpc3RlclJvd3Mocm93cyk7XG5cbiAgICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSByb3dzO1xuXG4gICAgICAgIHJldHVybiByb3dzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgc3RpY2t5SGVhZGVyVG9wUG9zaXRpb24oKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCB8fCAhdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnRbJ19yZW5kZXJlZENvbnRlbnRPZmZzZXQnXSkge1xuICAgICAgICAgICAgcmV0dXJuICcwJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoLXRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0WydfcmVuZGVyZWRDb250ZW50T2Zmc2V0J10gLSAxKSArICdweCc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBzdGlja3lGb290ZXJCb3R0b21Qb3NpdGlvbigpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IHx8ICF0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydFsnX3JlbmRlcmVkQ29udGVudE9mZnNldCddKSB7XG4gICAgICAgICAgICByZXR1cm4gJy0xcHgnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0WydfcmVuZGVyZWRDb250ZW50T2Zmc2V0J10gLSAxICsgJ3B4JztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydFdpZHRoKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ/LmNsaWVudFdpZHRoIHx8IDApICsgJ3B4JztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGhvc3RXaWR0aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGg7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHRyYWNrQnlGbihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIHByaXZhdGUgdGFibGVGZWF0dXJlc0hhbmRsZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFibGVGZWF0dXJlc0hhbmRsZXJTdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFxuICAgICAgICAgICAgdGhpcy5wYWdpbmF0b3IgPyB0aGlzLnBhZ2luYXRvci5wYWdlJCA6IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCksXG4gICAgICAgICAgICB0aGlzLmZpbHRlciA/IHRoaXMuZmlsdGVyLmZpbHRlciQgOiBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpLFxuICAgICAgICAgICAgdGhpcy5ldWlUYWJsZVYyU29ydFNlcnZpY2Uuc29ydHMsXG4gICAgICAgICkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoW3BhZ2luYXRpb24sIGZpbHRlciwgc29ydHNdOiBbRXVpUGFnaW5hdGlvbkV2ZW50LCBzdHJpbmcsIFNvcnRbXV0pID0+IHtcbiAgICAgICAgICAgIGxldCByID0gWy4uLnRoaXMuZGF0YVNyY107XG5cbiAgICAgICAgICAgIGlmIChzb3J0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgciA9IHRoaXMuc29ydERhdGEoc29ydHMsIHIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByID0gdGhpcy5maWx0ZXJEYXRhKGZpbHRlciwgcik7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2luYXRvcikge1xuICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdG9yLnNldExlbmd0aChyLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgciA9IHRoaXMucGFnaW5hdGVSb3dzKHBhZ2luYXRpb24sIHIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRhdGFSZW5kZXJlZCA9IHI7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1NlbGVjdE9ubHlWaXNpYmxlUm93cykge1xuICAgICAgICAgICAgICAgIHRoaXMuZXVpVGFibGVWMlNlbGVjdGFibGVSb3dTZXJ2aWNlLnVuc2VsZWN0QWxsUm93cygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZXVpVGFibGVWMlNlbGVjdGFibGVSb3dTZXJ2aWNlLnVucmVnaXN0ZXJSb3dzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ldWlUYWJsZVYyU2VsZWN0YWJsZVJvd1NlcnZpY2UucmVnaXN0ZXJSb3dzKHRoaXMuZGF0YVJlbmRlcmVkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMucHJlc2VsZWN0ZWRSb3dzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldWlUYWJsZVYyU2VsZWN0YWJsZVJvd1NlcnZpY2Uuc2VsZWN0Um93cyh0aGlzLnByZXNlbGVjdGVkUm93cyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5oYXNTdGlja3lDb2xzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGlja3lGZWF0dXJlSGFuZGxlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNvcnREYXRhKHNvcnRDcml0ZXJpYXM6IHsgc29ydDogc3RyaW5nLCBvcmRlcjogU29ydE9yZGVyIH1bXSwgcjogREFUQVtdKTogREFUQVtdIHtcbiAgICAgICAgaWYgKHNvcnRDcml0ZXJpYXMuZXZlcnkoY3JpdGVyaWEgPT4gY3JpdGVyaWEub3JkZXIgPT09IG51bGwpKSB7XG4gICAgICAgICAgICByZXR1cm4gci5zbGljZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHIuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjcml0ZXJpYSBvZiBzb3J0Q3JpdGVyaWFzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYVZhbHVlID0gdGhpcy5nZXRPYmpQcm9wKGEsIGNyaXRlcmlhLnNvcnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJWYWx1ZSA9IHRoaXMuZ2V0T2JqUHJvcChiLCBjcml0ZXJpYS5zb3J0KTtcblxuICAgICAgICAgICAgICAgIGlmIChhVmFsdWUgPT09IGJWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoYVZhbHVlID09PSBudWxsIHx8IGFWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcml0ZXJpYS5vcmRlciA9PT0gJ2FzYycgPyAtMSA6IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChiVmFsdWUgPT09IG51bGwgfHwgYlZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyaXRlcmlhLm9yZGVyID09PSAnYXNjJyA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFWYWx1ZSA9PT0gJ2Jvb2xlYW4nICYmIHR5cGVvZiBiVmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JpdGVyaWEub3JkZXIgPT09ICdhc2MnID8gKGFWYWx1ZSA/IC0xIDogMSkgOiAoYlZhbHVlID8gLTEgOiAxKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFWYWx1ZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGJWYWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyaXRlcmlhLm9yZGVyID09PSAnYXNjJyA/IGFWYWx1ZSAtIGJWYWx1ZSA6IGJWYWx1ZSAtIGFWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBhVmFsdWVTdHIgPSB0eXBlb2YgYVZhbHVlID09PSAnc3RyaW5nJyA/IGFWYWx1ZS50b0xvd2VyQ2FzZSgpIDogYVZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJWYWx1ZVN0ciA9IHR5cGVvZiBiVmFsdWUgPT09ICdzdHJpbmcnID8gYlZhbHVlLnRvTG93ZXJDYXNlKCkgOiBiVmFsdWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjb21wYXJpc29uID0gY3JpdGVyaWEub3JkZXIgPT09ICdhc2MnID8gYVZhbHVlU3RyLmxvY2FsZUNvbXBhcmUoYlZhbHVlU3RyKSA6IGJWYWx1ZVN0ci5sb2NhbGVDb21wYXJlKGFWYWx1ZVN0cik7XG5cbiAgICAgICAgICAgICAgICBpZiAoY29tcGFyaXNvbiAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFyaXNvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhZ2luYXRlUm93cyhwYWdpbmF0aW9uOiBFdWlQYWdpbmF0aW9uRXZlbnQsIHI6IERBVEFbXSk6IERBVEFbXSB7XG4gICAgICAgIHRoaXMucGFnZSA9IHBhZ2luYXRpb24ucGFnZTtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IHBhZ2luYXRpb24ucGFnZVNpemU7XG5cbiAgICAgICAgcmV0dXJuIHIuc2xpY2UodGhpcy5wYWdlICogdGhpcy5wYWdlU2l6ZSwgdGhpcy5wYWdlICogdGhpcy5wYWdlU2l6ZSArIHRoaXMucGFnZVNpemUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcm91bmREb3duKGluZGV4OiBudW1iZXIsIG5iUm93czogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoaW5kZXggLyBuYlJvd3MpICogbmJSb3dzO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzVW5kZWZpbmVkSW5SYW5nZShzdGFydEluZGV4OiBudW1iZXIsIGxpbWl0OiBudW1iZXIsIGRhdGFSZW5kZXJlZDogREFUQVtdKTogbnVtYmVyIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBzdGFydEluZGV4ICsgbGltaXQ7IGkgKyspIHtcbiAgICAgICAgICAgIGlmIChkYXRhUmVuZGVyZWRbaV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RpY2t5RmVhdHVyZUhhbmRsZXIoKTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudD8ucGFyZW50RWxlbWVudD8uY2xpZW50V2lkdGggfHwgMDtcblxuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc1N0aWNreUl0ZW1zID0gKGl0ZW1zOiBIVE1MVGFibGVDZWxsRWxlbWVudFtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1N0aWNreUZpcnN0Q29sID0gaXRlbS5vZmZzZXRMZWZ0ICsgaXRlbS5jbGllbnRXaWR0aCA8IGNvbnRhaW5lcldpZHRoO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1N0aWNreUxhc3RDb2wgPSBpdGVtLm9mZnNldExlZnQgKyBpdGVtLmNsaWVudFdpZHRoID4gY29udGFpbmVyV2lkdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbXNTdGlja3kgPSBpc1N0aWNreUZpcnN0Q29sXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGl0ZW1zLmZpbHRlcigoaXQpID0+IGl0Lm9mZnNldExlZnQgKyBpdC5jbGllbnRXaWR0aCA8IGNvbnRhaW5lcldpZHRoKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBpc1N0aWNreUxhc3RDb2xcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaXRlbXMuZmlsdGVyKChpdCkgPT4gaXQub2Zmc2V0TGVmdCArIGl0LmNsaWVudFdpZHRoID4gY29udGFpbmVyV2lkdGgpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zU3RpY2t5LmZvckVhY2goKGl0LCBqKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3ID0gaXRlbXNTdGlja3lbaiAtIDFdPy5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGlzU3RpY2t5Rmlyc3RDb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHBhcnNlSW50KGl0ZW1zU3RpY2t5W2ogLSAxXT8uc3R5bGUubGVmdCwgMTApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwYXJzZUludChpdGVtc1N0aWNreVtqIC0gMV0/LnN0eWxlLnJpZ2h0LCAxMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1N0aWNreUZpcnN0Q29sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQuc3R5bGUubGVmdCA9IChqID09PSAwID8gMCA6IHcgKyBvZmZzZXQpICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdGlja3lMYXN0Q29sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQuc3R5bGUucmlnaHQgPSAoaiA9PT0gMCA/IDAgOiB3ICsgb2Zmc2V0KSArICdweCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqICsgMSA9PT0gaXRlbXNTdGlja3kubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhpdCwgYGV1aS10YWJsZS12Ml9fY29sLS1zdGlja3ktc2hhZG93ZWQtJHtpc1N0aWNreUZpcnN0Q29sID8gJ2ZpcnN0JyA6ICdsYXN0J31gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAodGhpcy50aGVhZFJlZikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRoSXRlbXM6IEhUTUxUYWJsZUNlbGxFbGVtZW50W10gPSBBcnJheS5mcm9tKHRoaXMudGhlYWRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZXVpLXRhYmxlLXYyX19jb2wtLXN0aWNreScpKTtcbiAgICAgICAgICAgICAgICBwcm9jZXNzU3RpY2t5SXRlbXModGhJdGVtcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGJvZHlUckl0ZW1zID0gQXJyYXkuZnJvbSh0aGlzLnRib2R5UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgndHInKSk7XG4gICAgICAgICAgICBib2R5VHJJdGVtcy5mb3JFYWNoKCh0cikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRkSXRlbXM6IEhUTUxUYWJsZUNlbGxFbGVtZW50W10gPSBBcnJheS5mcm9tKHRyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5ldWktdGFibGUtdjJfX2NvbC0tc3RpY2t5JykpO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NTdGlja3lJdGVtcyh0ZEl0ZW1zKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50Zm9vdFJlZikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRkSXRlbXM6IEhUTUxUYWJsZUNlbGxFbGVtZW50W10gPSBBcnJheS5mcm9tKHRoaXMudGZvb3RSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZXVpLXRhYmxlLXYyX19jb2wtLXN0aWNreScpKTtcbiAgICAgICAgICAgICAgICBwcm9jZXNzU3RpY2t5SXRlbXModGRJdGVtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDI1MCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWxlY3RSb3dzRmVhdHVyZUhhbmRsZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXVpVGFibGVWMlNlbGVjdGFibGVSb3dTZXJ2aWNlLnNlbGVjdGVkUm93cy5waXBlKHNraXAoMSksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChzZWxlY3RlZCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yb3dzU2VsZWN0LmVtaXQoc2VsZWN0ZWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNvcnRGZWF0dXJlSGFuZGxlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ldWlUYWJsZVYyU29ydFNlcnZpY2Uuc29ydHMucGlwZShza2lwKDEpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoc29ydHM6IFNvcnRbXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQoc29ydHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByb3BzKHJvdzogREFUQSwgZmlsdGVyOiBzdHJpbmcpOiB7IGtleTogc3RyaW5nOyBtYXRjaDogYm9vbGVhbjsgdmFsdWU6IHN0cmluZyB8IG51bWJlciB9W10ge1xuICAgICAgICBjb25zdCBpc09iamVjdCA9ICh2YWw6IHN0cmluZyB8IG51bWJlcik6IGJvb2xlYW4gPT4gdmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnO1xuICAgICAgICBjb25zdCBhZGREZWxpbWl0ZXIgPSAoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBzdHJpbmcgPT4gKGEgJiYgYSAhPT0gJzAnID8gYCR7YX0uJHtifWAgOiBiKTtcbiAgICAgICAgY29uc3QgcHJvcHM6IHsga2V5OiBzdHJpbmcsIG1hdGNoOiBib29sZWFuLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIH1bXSA9IFtdO1xuICAgICAgICBjb25zdCBwYXRocyA9IChwYXRoT2JqOiBEQVRBLCBoZWFkID0gJycpOiBzdHJpbmdbXSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMocGF0aE9iaikucmVkdWNlKChwcm9kdWN0LCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmdWxsUGF0aCA9IGFkZERlbGltaXRlcihoZWFkLCBrZXkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gKHY6IHN0cmluZyB8IG51bWJlcik6IGJvb2xlYW4gPT4gdiAmJiB0eXBlb2YgdiAhPT0gJ29iamVjdCcgJiYgdj8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZmlsdGVyPy50cmltKCkudG9Mb3dlckNhc2UoKSkgIT09IC0xO1xuXG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJzAnICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMucHVzaCh7IGtleTogYWRkRGVsaW1pdGVyKGhlYWQsIGtleSksIG1hdGNoOiBtYXRjaCh2YWx1ZSksIHZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBpc09iamVjdCh2YWx1ZSkgPyBwcm9kdWN0LmNvbmNhdChwYXRocyh2YWx1ZSwgZnVsbFBhdGgpKSA6IHByb2R1Y3QuY29uY2F0KGZ1bGxQYXRoKTtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgfTtcblxuICAgICAgICBwYXRocyhyb3cpO1xuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPYmpQcm9wKG9iajogREFUQSwgcHJvcDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHByb3AgPyBwcm9wLnNwbGl0KCcuJykucmVkdWNlKChwcmV2LCBjdXJyKSA9PiAocHJldiA/IHByZXZbY3Vycl0gOiBudWxsKSwgb2JqIHx8IHNlbGYpIDogbnVsbDtcbiAgICB9XG59XG4iLCI8IS0tIDxidXR0b24gKGNsaWNrKT1cInRlc3QoMTkyNTApXCI+MTkyNTA8L2J1dHRvbj5cbjxidXR0b24gKGNsaWNrKT1cInRlc3QoNzg5NSlcIj43ODk1PC9idXR0b24+XG48YnV0dG9uIChjbGljayk9XCJ0ZXN0KDE2ODYwKVwiPjE2ODYwPC9idXR0b24+XG48YnV0dG9uIChjbGljayk9XCJ0ZXN0KDE2ODcwKVwiPjE2ODcwPC9idXR0b24+XG48YnV0dG9uIChjbGljayk9XCJ0ZXN0KDE2ODgwKVwiPjE2ODgwPC9idXR0b24+XG48YnV0dG9uIChjbGljayk9XCJ0ZXN0KDE2ODkwKVwiPjE2ODkwPC9idXR0b24+XG48YnV0dG9uIChjbGljayk9XCJ0ZXN0KDE2OTAwKVwiPjE2OTAwPC9idXR0b24+XG48YnV0dG9uIChjbGljayk9XCJ0ZXN0KDI2OTk4KVwiPjI2OTk4PC9idXR0b24+XG48YnV0dG9uIChjbGljayk9XCJ0ZXN0KDI4MDAwKVwiPjI4MDAwPC9idXR0b24+IC0tPlxuQGlmIChpc1ZpcnR1YWxTY3JvbGwpIHtcbiAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgICAgICNjZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnRcbiAgICAgICAgI2Nka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydEVsZW1lbnRcbiAgICAgICAgY2xhc3M9XCJldWktdGFibGUtdjJfX3Njcm9sbC12aWV3cG9ydFwiXG4gICAgICAgIFtpdGVtU2l6ZV09XCJpdGVtU2l6ZVwiXG4gICAgICAgIFtzdHlsZS5vdmVyZmxvd109XCJjZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnRPdmVyZmxvd1ZhbHVlXCJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInt7IGNzc0NsYXNzZXMgfX1cIiBbc3R5bGUud2lkdGhdPVwiaG9zdFdpZHRoXCI+XG4gICAgICAgICAgICBAaWYgKGhlYWRlclRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgPHRoZWFkICN0aGVhZFJlZiBbc3R5bGUudG9wXT1cInN0aWNreUhlYWRlclRvcFBvc2l0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJoZWFkZXJUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoYm9keVRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgPHRib2R5ICN0Ym9keVJlZj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqY2RrVmlydHVhbEZvcj1cImxldCByb3cgb2YgZGF0YVJlbmRlcmVkOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5Rm5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAocm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJvZHlUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93LCBpbmRleDogaSB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJza2VsZXRvbkxvYWRpbmdcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICBAaWYgKG5vRGF0YVRlbXBsYXRlICYmIChkYXRhPy5sZW5ndGggPT09IDAgfHwgZGF0YVJlbmRlcmVkPy5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9EYXRhVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoZm9vdGVyVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICA8dGZvb3QgI3Rmb290UmVmIFtzdHlsZS5ib3R0b21dPVwic3RpY2t5Rm9vdGVyQm90dG9tUG9zaXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZvb3RlclRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L3Rmb290PlxuICAgICAgICAgICAgfVxuICAgICAgICA8L3RhYmxlPlxuICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxufSBAZWxzZSB7XG4gICAgQGlmIChoZWFkZXJUZW1wbGF0ZSkge1xuICAgICAgICA8dGhlYWQgI3RoZWFkUmVmPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhlYWRlclRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90aGVhZD5cbiAgICB9XG4gICAgQGlmIChib2R5VGVtcGxhdGUpIHtcbiAgICAgICAgPHRib2R5ICN0Ym9keVJlZj5cbiAgICAgICAgICAgIEBmb3IgKHJvdyBvZiBkYXRhUmVuZGVyZWQ7IGxldCBpID0gJGluZGV4OyB0cmFjayByb3cpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJvZHlUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHJvdywgaW5kZXg6IGkgfVwiPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChub0RhdGFUZW1wbGF0ZSAmJiAoZGF0YT8ubGVuZ3RoID09PSAwIHx8IGRhdGFSZW5kZXJlZD8ubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJub0RhdGFUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvdGJvZHk+XG4gICAgfVxuICAgIEBpZiAoZm9vdGVyVGVtcGxhdGUpIHtcbiAgICAgICAgPHRmb290ICN0Zm9vdFJlZj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJmb290ZXJUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvdGZvb3Q+XG4gICAgfVxufVxuXG48bmctdGVtcGxhdGUgI3NrZWxldG9uTG9hZGluZz5cbiAgICA8dHIgW3N0eWxlLmhlaWdodC5weF09XCJpdGVtU2l6ZVwiPlxuICAgICAgICA8dGQgKm5nRm9yPVwibGV0IF9fIG9mIG5iQ29sc1wiPjxldWktc2tlbGV0b24gbGluZSBldWlSb3VuZGVkPjwvZXVpLXNrZWxldG9uPjwvdGQ+XG4gICAgPC90cj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
575
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXRhYmxlLXYyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2V1aS10YWJsZS12Mi9ldWktdGFibGUtdjIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLXRhYmxlLXYyL2V1aS10YWJsZS12Mi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQTRDLFNBQVMsRUFBaUIsVUFBVSxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFDckosaUJBQWlCLEVBQUUsdUJBQXVCLEVBQXFCLE1BQU0sRUFBRSxZQUFZLEVBQTRCLGVBQWUsRUFDbkgsTUFBTSxlQUFlLENBQUM7QUFFckMsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJeEgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFN0QsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFaEcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7O0FBRzdFLE1BQU0sQ0FBTixJQUFZLGlCQUdYO0FBSEQsV0FBWSxpQkFBaUI7SUFDekIsOEJBQVMsQ0FBQTtJQUNULGtDQUFhLENBQUE7QUFDakIsQ0FBQyxFQUhXLGlCQUFpQixLQUFqQixpQkFBaUIsUUFHNUI7QUFnQkQsTUFBTSxPQUFPLG1CQUFtQjtJQUM1QixJQUNXLFVBQVU7UUFDakIsT0FBTztZQUNILElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsZ0NBQWdDLENBQUM7WUFDeEUsSUFBSSxDQUFDLGVBQWUs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QixFQUFFO2dCQVdDLFNBQVM7c0JBQS9DLGVBQWU7dUJBQUMsb0JBQW9CO2dCQUUrQix3QkFBd0I7c0JBQTNGLFNBQVM7dUJBQUMsMEJBQTBCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNxQywrQkFBK0I7c0JBQTNILFNBQVM7dUJBQUMsaUNBQWlDLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQzFELFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFDRSxRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBQ0UsUUFBUTtzQkFBOUIsU0FBUzt1QkFBQyxVQUFVO2dCQUVYLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgQ29udGVudENoaWxkcmVuLCBRdWVyeUxpc3QsIEFmdGVyQ29udGVudEluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIEFmdGVyVmlld0luaXQsIEVsZW1lbnRSZWYsIGJvb2xlYW5BdHRyaWJ1dGUsIEhvc3RCaW5kaW5nLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXMsIG51bWJlckF0dHJpYnV0ZSwgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBjb21iaW5lTGF0ZXN0LCBkZWJvdW5jZVRpbWUsIHNraXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTGlzdFJhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcblxuaW1wb3J0IHsgRXVpUGFnaW5hdGlvbkV2ZW50LCBFdWlQYWdpbmF0b3JDb21wb25lbnQgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvZXVpLXBhZ2luYXRvcic7XG5pbXBvcnQgeyBFdWlUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9kaXJlY3RpdmVzJztcbmltcG9ydCB7IEJhc2VTdGF0ZXNEaXJlY3RpdmUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvc2hhcmVkJztcblxuaW1wb3J0IHsgRXVpVGFibGVWMlNlbGVjdGFibGVSb3dTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9ldWktdGFibGUtdjItc2VsZWN0YWJsZS1yb3cuc2VydmljZSc7XG5pbXBvcnQgeyBFdWlUYWJsZVYyRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi9maWx0ZXIvZXVpLXRhYmxlLXYyLWZpbHRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRXVpVGFibGVWMlNvcnRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9ldWktdGFibGUtdjItc29ydC5zZXJ2aWNlJztcbmltcG9ydCB7IFNvcnQsIFNvcnRPcmRlciB9IGZyb20gJy4vbW9kZWxzL3NvcnQubW9kZWwnO1xuXG5leHBvcnQgZW51bSBTY3JvbGxpbkRpcmVjdGlvbiB7XG4gICAgVVAgPSAnVVAnLFxuICAgIERPV04gPSAnRE9XTicsXG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZXVpLXRhYmxlLXYyLCB0YWJsZVtldWlUYWJsZVYyXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V1aS10YWJsZS12Mi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc3R5bGVzL19pbmRleC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtFdWlUYWJsZVYyU2VsZWN0YWJsZVJvd1NlcnZpY2UsIEV1aVRhYmxlVjJTb3J0U2VydmljZV0sXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgZGlyZWN0aXZlOiBCYXNlU3RhdGVzRGlyZWN0aXZlLFxuICAgICAgICAgICAgaW5wdXRzOiBbXSxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBFdWlUYWJsZVYyQ29tcG9uZW50PERBVEEgPSB1bmtub3duPiBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25Jbml0LCBPbkNoYW5nZXMge1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICAgIHB1YmxpYyBnZXQgY3NzQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgdGhpcy5iYXNlU3RhdGVzRGlyZWN0aXZlLmdldENzc0NsYXNzZXMoJ2V1aS10YWJsZS1kZWZhdWx0IGV1aS10YWJsZS12MicpLFxuICAgICAgICAgICAgdGhpcy5pc1ZpcnR1YWxTY3JvbGwgPyAnZXVpLXRhYmxlLXYyLS12aXJ0dWFsLXNjcm9sbCcgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuaGFzU3RpY2t5SGVhZGVyID8gJ2V1aS10YWJsZS12Mi0tc3RpY2t5IGV1aS10YWJsZS12Mi0tc3RpY2t5LWhlYWRlcicgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuaGFzU3RpY2t5Rm9vdGVyID8gJ2V1aS10YWJsZS12Mi0tc3RpY2t5IGV1aS10YWJsZS12Mi0tc3RpY2t5LWZvb3RlcicgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuaGFzU3RpY2t5Q29scyA/ICdldWktdGFibGUtdjItLXN0aWNreSBldWktdGFibGUtdjItLXN0aWNreS1jb2xzJyA6ICcnLFxuICAgICAgICAgICAgdGhpcy5pc1RhYmxlUmVzcG9uc2l2ZSA/ICdldWktdGFibGUtZGVmYXVsdC0tcmVzcG9uc2l2ZScgOiAnJyxcbiAgICAgICAgICAgIHRoaXMuaXNDb2xzT3JkZXJhYmxlID8gJ2V1aS10YWJsZS12Mi0tY29scy1vcmRlcmFibGUnIDogJycsXG4gICAgICAgICAgICB0aGlzLmlzVGFibGVDb25kZW5zZWQgPyAnZXVpLXRhYmxlLXYyLS1jb25kZW5zZWQnIDogJycsXG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA/ICdldWktdGFibGUtdjItLWxvYWRpbmcnIDogJycsXG4gICAgICAgIF1cbiAgICAgICAgICAgIC5qb2luKCcgJylcbiAgICAgICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgZGF0YTogREFUQVtdID0gW107XG4gICAgQElucHV0KCkgcHJvcElkID0gJ2lkJztcbiAgICBASW5wdXQoKSBpdGVtU2l6ZSA9IDQxO1xuICAgIEBJbnB1dCgpIHBhZ2luYXRvcjogRXVpUGFnaW5hdG9yQ29tcG9uZW50O1xuICAgIEBJbnB1dCgpIGZpbHRlcjogRXVpVGFibGVWMkZpbHRlckNvbXBvbmVudDtcbiAgICBASW5wdXQoKSBwcmVzZWxlY3RlZFJvd3M6IERBVEFbXSA9IFtdO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzVmlydHVhbFNjcm9sbCA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc1ZpcnR1YWxTY3JvbGxDYWNoZSA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoYXNTdGlja3lIZWFkZXIgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaGFzU3RpY2t5Rm9vdGVyID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGhhc1N0aWNreUNvbHMgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNUYWJsZVJlc3BvbnNpdmUgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNBc3luYyA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIHZpcnR1YWxTY3JvbGxBc3luY0l0ZW1zTGVuZ3RoID0gMDtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSB2aXJ0dWFsU2Nyb2xsTmJSb3dzID0gNTA7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzQ29sc09yZGVyYWJsZSA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNTZWxlY3RPbmx5VmlzaWJsZVJvd3MgPSB0cnVlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc1RhYmxlQm9yZGVyZWQgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNUYWJsZUNvbmRlbnNlZCA9IGZhbHNlO1xuXG4gICAgcHJvdGVjdGVkIGhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD47XG4gICAgcHJvdGVjdGVkIGJvZHlUZW1wbGF0ZTogVGVtcGxhdGVSZWY8eyAkaW1wbGljaXQ6IERBVEE7IGluZGV4OiBudW1iZXIgfT47XG4gICAgcHJvdGVjdGVkIGZvb3RlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD47XG4gICAgcHJvdGVjdGVkIG5vRGF0YVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD47XG4gICAgcHJvdGVjdGVkIGxvYWRpbmcgPSBbXTtcbiAgICBwcm90ZWN0ZWQgbmJDb2xzOiBIVE1MVGFibGVDZWxsRWxlbWVudFtdID0gW107XG4gICAgcHJvdGVjdGVkIGRhdGFSZW5kZXJlZDogREFUQVtdID0gW107XG4gICAgcHJvdGVjdGVkIGNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydE92ZXJmbG93VmFsdWU6ICgnaGlkZGVuJyB8ICdhdXRvJykgPSAnYXV0byc7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKEV1aVRlbXBsYXRlRGlyZWN0aXZlKSB0ZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxFdWlUZW1wbGF0ZURpcmVjdGl2ZT47XG5cbiAgICBAVmlld0NoaWxkKCdjZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgcHJvdGVjdGVkIGNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuICAgIEBWaWV3Q2hpbGQoJ2Nka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydEVsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IEVsZW1lbnRSZWYgfSkgcHJvdGVjdGVkIGNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgndGhlYWRSZWYnKSB0aGVhZFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gICAgQFZpZXdDaGlsZCgndGJvZHlSZWYnKSB0Ym9keVJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gICAgQFZpZXdDaGlsZCgndGZvb3RSZWYnKSB0Zm9vdFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICBAT3V0cHV0KCkgc2Nyb2xsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSByb3dzU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxEQVRBW10+KCk7XG4gICAgQE91dHB1dCgpIHNvcnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFNvcnRbXT4oKTtcblxuICAgIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICAgIHByaXZhdGUgdmlydHVhbFNjcm9sbExhc3RNdWx0aXBsZSA9IDA7XG4gICAgcHJpdmF0ZSB2aXJ0dWFsU2Nyb2xsU3BsaWNlRnJvbSA9IDA7XG4gICAgcHJpdmF0ZSBzY3JvbGxlZEluZGV4ID0gMDtcbiAgICBwcml2YXRlIG5iSXRlbURpc3BsYXllZCA9IDA7XG4gICAgcHJpdmF0ZSBzY3JvbGxpbmdEaXJlY3Rpb246IFNjcm9sbGluRGlyZWN0aW9uO1xuICAgIHByaXZhdGUgbXV0YXRpb25PYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcjtcbiAgICBwcml2YXRlIGRhdGFTcmM6IERBVEFbXSA9IFtdO1xuICAgIHByaXZhdGUgcGFnZSA9IDA7XG4gICAgcHJpdmF0ZSBwYWdlU2l6ZSA9IDA7XG4gICAgcHJpdmF0ZSB0YWJsZUZlYXR1cmVzSGFuZGxlclN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBwcml2YXRlIGZpbHRlcmVkRGF0YTogREFUQVtdID0gW107XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBldWlUYWJsZVYyU2VsZWN0YWJsZVJvd1NlcnZpY2U6IEV1aVRhYmxlVjJTZWxlY3RhYmxlUm93U2VydmljZTxEQVRBPixcbiAgICAgICAgICAgICAgICBwcml2YXRlIGV1aVRhYmxlVjJTb3J0U2VydmljZTogRXVpVGFibGVWMlNvcnRTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgYmFzZVN0YXRlc0RpcmVjdGl2ZTogQmFzZVN0YXRlc0RpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgICAgICAgICAgKSB7fVxuXG4gICAgbmdPbkNoYW5nZXMoYzogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gW107XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV1aVRhYmxlVjJTZWxlY3RhYmxlUm93U2VydmljZS5zZXRQcm9wSWQodGhpcy5wcm9wSWQpO1xuICAgICAgICBpZiAodGhpcy5pc1ZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAgIGlmIChjLmRhdGEgJiYgYy5kYXRhLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVJlbmRlcmVkID0gWy4uLmMuZGF0YS5jdXJyZW50VmFsdWUsIC4uLkFycmF5LmZyb20oeyBsZW5ndGg6IHRoaXMudmlydHVhbFNjcm9sbEFzeW5jSXRlbXNMZW5ndGggLSBjLmRhdGEuY3VycmVudFZhbHVlLmxlbmd0aCB9KV07XG5cbiAgICAgICAgICAgICAgICB0aGlzLmV1aVRhYmxlVjJTZWxlY3RhYmxlUm93U2VydmljZS51bnJlZ2lzdGVyUm93cygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZXVpVGFibGVWMlNlbGVjdGFibGVSb3dTZXJ2aWNlLnJlZ2lzdGVyUm93cyh0aGlzLmRhdGFSZW5kZXJlZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjLmRhdGEgJiYgIWMuZGF0YS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0FzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IFsuLi50aGlzLmRhdGFSZW5kZXJlZF07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVmlydHVhbFNjcm9sbENhY2hlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFSZW5kZXJlZCA9IFsuLi5zb3VyY2Uuc2xpY2UoMCwgdGhpcy52aXJ0dWFsU2Nyb2xsU3BsaWNlRnJvbSksIC4uLmMuZGF0YS5jdXJyZW50VmFsdWUsIC4uLnNvdXJjZS5zbGljZSh0aGlzLnZpcnR1YWxTY3JvbGxTcGxpY2VGcm9tICsgdGhpcy52aXJ0dWFsU2Nyb2xsTmJSb3dzKV07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFSZW5kZXJlZCA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5BcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLnZpcnR1YWxTY3JvbGxTcGxpY2VGcm9tIC0gdGhpcy5uYkl0ZW1EaXNwbGF5ZWQgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uc291cmNlLnNsaWNlKHRoaXMudmlydHVhbFNjcm9sbFNwbGljZUZyb20gLSB0aGlzLm5iSXRlbURpc3BsYXllZCwgdGhpcy52aXJ0dWFsU2Nyb2xsU3BsaWNlRnJvbSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYy5kYXRhLmN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5zb3VyY2Uuc2xpY2UodGhpcy52aXJ0dWFsU2Nyb2xsU3BsaWNlRnJvbSArIHRoaXMudmlydHVhbFNjcm9sbE5iUm93cywgdGhpcy52aXJ0dWFsU2Nyb2xsU3BsaWNlRnJvbSArIHRoaXMudmlydHVhbFNjcm9sbE5iUm93cyArIHRoaXMubmJJdGVtRGlzcGxheWVkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5BcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLnZpcnR1YWxTY3JvbGxBc3luY0l0ZW1zTGVuZ3RoIC0gKHRoaXMudmlydHVhbFNjcm9sbFNwbGljZUZyb20gKyB0aGlzLnZpcnR1YWxTY3JvbGxOYlJvd3MgKyB0aGlzLm5iSXRlbURpc3BsYXllZCkgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGMgJiYgYy52aXJ0dWFsU2Nyb2xsQXN5bmNJdGVtc0xlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMudmlydHVhbFNjcm9sbEFzeW5jSXRlbXNMZW5ndGgucHJldmlvdXNWYWx1ZSA+IGMudmlydHVhbFNjcm9sbEFzeW5jSXRlbXNMZW5ndGguY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhUmVuZGVyZWQgPSB0aGlzLmRhdGFSZW5kZXJlZC5zbGljZSgwLCBjLnZpcnR1YWxTY3JvbGxBc3luY0l0ZW1zTGVuZ3RoLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVJlbmRlcmVkID0gWy4uLmMuZGF0YS5jdXJyZW50VmFsdWUsIC4uLkFycmF5LmZyb20oeyBsZW5ndGg6IHRoaXMudmlydHVhbFNjcm9sbEFzeW5jSXRlbXNMZW5ndGggLSBjLmRhdGEuY3VycmVudFZhbHVlLmxlbmd0aCB9KV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV1aVRhYmxlVjJTZWxlY3RhYmxlUm93U2VydmljZS51bnJlZ2lzdGVyUm93cygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV1aVRhYmxlVjJTZWxlY3RhYmxlUm93U2VydmljZS5yZWdpc3RlclJvd3ModGhpcy5kYXRhUmVuZGVyZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNjcm9sbGluZ0RpcmVjdGlvbiA9PT0gU2Nyb2xsaW5EaXJlY3Rpb24uRE9XTikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLmhhc1VuZGVmaW5lZEluUmFuZ2UodGhpcy5zY3JvbGxlZEluZGV4LCB0aGlzLm5iSXRlbURpc3BsYXllZCwgdGhpcy5kYXRhUmVuZGVyZWQpICE9PSAtMSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsZWRJbmRleCA9PT0gdGhpcy52aXJ0dWFsU2Nyb2xsU3BsaWNlRnJvbSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmRhdGFSZW5kZXJlZFt0aGlzLnNjcm9sbGVkSW5kZXggLSAxXSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc1VuZGVmaW5lZEluUmFuZ2UodGhpcy5zY3JvbGxlZEluZGV4LCB0aGlzLm5iSXRlbURpc3BsYXllZCwgdGhpcy5kYXRhUmVuZGVyZWQpICE9PSB0aGlzLmRhdGFSZW5kZXJlZC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygncmVwb3NpdGlvbiBkb3duJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5zY3JvbGxUb0luZGV4KHRoaXMudmlydHVhbFNjcm9sbFNwbGljZUZyb20gKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNjcm9sbGluZ0RpcmVjdGlvbiA9PT0gU2Nyb2xsaW5EaXJlY3Rpb24uVVApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc1VuZGVmaW5lZEluUmFuZ2UodGhpcy5zY3JvbGxlZEluZGV4LCB0aGlzLm5iSXRlbURpc3BsYXllZCwgdGhpcy5kYXRhUmVuZGVyZWQpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdyZXBvc2l0aW9uIHVwJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5zY3JvbGxUb0luZGV4KHRoaXMudmlydHVhbFNjcm9sbFNwbGljZUZyb20gKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RpY2t5RmVhdHVyZUhhbmRsZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoYyAmJiBjLmRhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGhDaGFuZ2VkID0gdGhpcy5kYXRhU3JjLmxlbmd0aCAhPT0gYy5kYXRhLmN1cnJlbnRWYWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU3JjID0gYy5kYXRhLmN1cnJlbnRWYWx1ZSA/IFsuLi5jLmRhdGEuY3VycmVudFZhbHVlXSA6IFtdO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5hdG9yICYmIGxlbmd0aENoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0b3IuZ29GaXJzdFBhZ2UoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNBc3luYyAmJiAhYy5kYXRhLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRmVhdHVyZXNIYW5kbGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVGZWF0dXJlc0hhbmRsZXIoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmV1aVRhYmxlVjJTZWxlY3RhYmxlUm93U2VydmljZS5yZWdpc3RlclJvd3ModGhpcy5kYXRhU3JjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjICYmIGMucGFnaW5hdG9yPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRvci5zZXRMZW5ndGgodGhpcy5kYXRhLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgaWYgKCFjLnBhZ2luYXRvcj8uaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdG9yLmdvRmlyc3RQYWdlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLmRhdGEgY2FuIGJlIGNoYW5nZWQgYW55dGltZSwgdGhlbiB0aGlzIGVsc2UgY2FuIGJlIGV4ZWN1dGVkIGF0IHRoYXQgdGltZSwgdGVzdGluZyB0aGlzLnBhZ2luYXRvciBhbGxvd3MgdG8gbWFrZSBzdXJlXG4gICAgICAgICAgICAgICAgLy8gdGhlIHVzZXIgd2FudHMgdG8gZGlzYWJsZSBwYWdpbmF0aW9uIG9yIGNoYW5nZSB0aGUgZGF0YXNvdXJjZVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhUmVuZGVyZWQgPSB0aGlzLmRhdGFTcmM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZSA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGMgJiYgYy5wcmVzZWxlY3RlZFJvd3MgJiYgIWMucHJlc2VsZWN0ZWRSb3dzLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5ldWlUYWJsZVYyU2VsZWN0YWJsZVJvd1NlcnZpY2Uuc2VsZWN0Um93cyhjLnByZXNlbGVjdGVkUm93cy5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0YVNyYyA9IFsuLi50aGlzLmRhdGFdO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0uZ2V0VHlwZSgpID09PSAnaGVhZGVyJykge1xuICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0uZ2V0VHlwZSgpID09PSAnYm9keScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvZHlUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbS5nZXRUeXBlKCkgPT09ICdmb290ZXInKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb290ZXJUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbS5nZXRUeXBlKCkgPT09ICdub0RhdGEnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub0RhdGFUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRlc3QoaW5kZXgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQuc2Nyb2xsVG9JbmRleChpbmRleClcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RpY2t5RmVhdHVyZUhhbmRsZXIoKTtcblxuICAgICAgICBpZiAodGhpcy5pc1ZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0Py5yZW5kZXJlZFJhbmdlU3RyZWFtXG4gICAgICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDUwMCksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChsaXN0UmFuZ2U6IExpc3RSYW5nZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0aWNreUZlYXR1cmVIYW5kbGVyKCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHRoZWFkRWxlbWVudHMgPSBBcnJheS5mcm9tKHRoaXMudGhlYWRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCd0aCcpKTtcbiAgICAgICAgICAgIHRoaXMubmJDb2xzID0gbmV3IEFycmF5KHRoZWFkRWxlbWVudHMubGVuZ3RoKTtcblxuICAgICAgICAgICAgdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQuc2Nyb2xsZWRJbmRleENoYW5nZVxuICAgICAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoc2Nyb2xsZWRJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsaW5nRGlyZWN0aW9uID0gc2Nyb2xsZWRJbmRleCA+IHRoaXMuc2Nyb2xsZWRJbmRleCA/IFNjcm9sbGluRGlyZWN0aW9uLkRPV04gOiBTY3JvbGxpbkRpcmVjdGlvbi5VUDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsZWRJbmRleCA9IHNjcm9sbGVkSW5kZXg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LnNldFRvdGFsQ29udGVudFNpemUodGhpcy52aXJ0dWFsU2Nyb2xsQXN5bmNJdGVtc0xlbmd0aCAqIHRoaXMuaXRlbVNpemUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxPZmZzZXQgPSB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCd0b3AnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZEluZGV4ID0gTWF0aC5jZWlsKChzY3JvbGxPZmZzZXQgKyB0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydC5nZXRWaWV3cG9ydFNpemUoKSkgLyB0aGlzLml0ZW1TaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmJJdGVtRGlzcGxheWVkID0gZW5kSW5kZXggLSBzY3JvbGxlZEluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmlydHVhbFNjcm9sbEN1cnJlbnRNdWx0aXBsZSA9IE1hdGguZmxvb3IoKHNjcm9sbGVkSW5kZXggKyB0aGlzLm5iSXRlbURpc3BsYXllZCkgLyB0aGlzLnZpcnR1YWxTY3JvbGxOYlJvd3MpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsZWRJbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhUmVuZGVyZWRbc2Nyb2xsZWRJbmRleF0gfHwgKHRoaXMuc2Nyb2xsaW5nRGlyZWN0aW9uID09PSBTY3JvbGxpbkRpcmVjdGlvbi5VUCAmJiB0aGlzLmRhdGFSZW5kZXJlZFtzY3JvbGxlZEluZGV4IC0gMV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd2aXJ0dWFsU2Nyb2xsQ3VycmVudE11bHRpcGxlJywgdmlydHVhbFNjcm9sbEN1cnJlbnRNdWx0aXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ3RoaXMudmlydHVhbFNjcm9sbExhc3RNdWx0aXBsZScsIHRoaXMudmlydHVhbFNjcm9sbExhc3RNdWx0aXBsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ3ZpcnR1YWxTY3JvbGxDdXJyZW50TXVsdGlwbGUgPiB0aGlzLnZpcnR1YWxTY3JvbGxMYXN0TXVsdGlwbGUnLCB2aXJ0dWFsU2Nyb2xsQ3VycmVudE11bHRpcGxlID4gdGhpcy52aXJ0dWFsU2Nyb2xsTGFzdE11bHRpcGxlKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2aXJ0dWFsU2Nyb2xsQ3VycmVudE11bHRpcGxlID4gdGhpcy52aXJ0dWFsU2Nyb2xsTGFzdE11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGxTcGxpY2VGcm9tID0gdmlydHVhbFNjcm9sbEN1cnJlbnRNdWx0aXBsZSAqIHRoaXMudmlydHVhbFNjcm9sbE5iUm93cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ2hhbmdlLmVtaXQoeyBzdGFydDogdmlydHVhbFNjcm9sbEN1cnJlbnRNdWx0aXBsZSAqIHRoaXMudmlydHVhbFNjcm9sbE5iUm93cywgZW5kOiB0aGlzLnZpcnR1YWxTY3JvbGxOYlJvd3MgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsU3BsaWNlRnJvbSA9IHRoaXMucm91bmREb3duKHNjcm9sbGVkSW5kZXgsIHRoaXMudmlydHVhbFNjcm9sbE5iUm93cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbENoYW5nZS5lbWl0KHsgc3RhcnQ6IHRoaXMudmlydHVhbFNjcm9sbFNwbGljZUZyb20sIGVuZDogdGhpcy52aXJ0dWFsU2Nyb2xsTmJSb3dzIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsTGFzdE11bHRpcGxlID0gdmlydHVhbFNjcm9sbEN1cnJlbnRNdWx0aXBsZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0RWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQuY2xpZW50SGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG11dGF0aW9uT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlPE11dGF0aW9uUmVjb3JkW10+KChvYnNlcnZlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkTXV0YXRpb25zID0gbXV0YXRpb25zLmZpbHRlcigobXV0YXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0aW9uLnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbi50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAndGgnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lID09PSAnc3R5bGUnXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRNdXRhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGZpbHRlcmVkTXV0YXRpb25zKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgY29uZmlnID0geyBhdHRyaWJ1dGVzOiB0cnVlLCBzdWJ0cmVlOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsnc3R5bGUnXSB9O1xuICAgICAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy50aGVhZFJlZi5uYXRpdmVFbGVtZW50LCBjb25maWcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBtdXRhdGlvbk9ic2VydmFibGUucGlwZShkZWJvdW5jZVRpbWUoMjUwKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKG11dGF0aW9ucykgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdGlja3lGZWF0dXJlSGFuZGxlcigpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXRoaXMuaXNBc3luYyAmJiAhdGhpcy5pc1ZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMudGFibGVGZWF0dXJlc0hhbmRsZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMudGFibGVGZWF0dXJlc0hhbmRsZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VsZWN0Um93c0ZlYXR1cmVIYW5kbGVyKCk7XG4gICAgICAgIHRoaXMuc29ydEZlYXR1cmVIYW5kbGVyKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgdGhpcy50YWJsZUZlYXR1cmVzSGFuZGxlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vdmVzIGFuIGVsZW1lbnQgd2l0aGluIHRoZSByZW5kZXJlZCBkYXRhIGFycmF5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW1JZCAtIFRoZSBpZGVudGlmaWVyIChkZWZhdWx0OiBpZCkgb2YgdGhlIGVsZW1lbnQgdG8gbW92ZS5cbiAgICAgKiBAcGFyYW0gZnJvbUluZGV4IC0gVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gbW92ZS5cbiAgICAgKiBAcGFyYW0gdG9JbmRleCAtIFRoZSBuZXcgZGVzaXJlZCBwb3NpdGlvbiBmb3IgdGhlIGVsZW1lbnQuXG4gICAgICovXG4gICAgcHVibGljIG1vdmVJdGVtKGl0ZW1JZDogbnVtYmVyIHwgc3RyaW5nLCBmcm9tSW5kZXg6IG51bWJlciwgdG9JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW1Qb3NpdGlvbiA9IHRoaXMuZGF0YVJlbmRlcmVkLmZpbmRJbmRleChkID0+IGQgJiYgZFt0aGlzLnByb3BJZF0gPT09IGl0ZW1JZCk7XG4gICAgICAgIGNvbnN0IG1vdmUgPSB0b0luZGV4IC0gZnJvbUluZGV4O1xuXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IFsuLi50aGlzLmRhdGFSZW5kZXJlZF07XG4gICAgICAgIGNvbnN0IFtlbGVtZW50VG9Nb3ZlXSA9IHNvdXJjZS5zcGxpY2UoaXRlbVBvc2l0aW9uLCAxKTtcblxuICAgICAgICBzb3VyY2Uuc3BsaWNlKGl0ZW1Qb3NpdGlvbiArIG1vdmUsIDAsIGVsZW1lbnRUb01vdmUpO1xuXG4gICAgICAgIHRoaXMuZGF0YVJlbmRlcmVkID0gc291cmNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdCBhbGwgcm93c1xuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RBbGxSb3dzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmV1aVRhYmxlVjJTZWxlY3RhYmxlUm93U2VydmljZS5zZWxlY3RBbGxSb3dzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVW5zZWxlY3QgYWxsIHJvd3NcbiAgICAgKi9cbiAgICBwdWJsaWMgdW5zZWxlY3RBbGxSb3dzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmV1aVRhYmxlVjJTZWxlY3RhYmxlUm93U2VydmljZS51bnNlbGVjdEFsbFJvd3MoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYW4gYXJyYXkgd2l0aCB0aGUgZGF0YSBtYXRjaGluZyB0aGUgc3RyaW5nIGZpbHRlclxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHVibGljIGdldEZpbHRlcmVkRGF0YSgpOiBEQVRBW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJlZERhdGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU29ydCB0aGUgdGFibGUncyBkYXRhLlxuICAgICAqIEBwYXJhbSBzb3J0cyBBbiBhcnJheSBvZiBTb3J0T3JkZXIuIFNlZSB7QGxpbmsgU29ydE9yZGVyfVxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRTb3J0KHNvcnRzOiBTb3J0W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ldWlUYWJsZVYyU29ydFNlcnZpY2Uuc2V0U29ydHMoc29ydHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaWx0ZXJEYXRhKGZpbHRlcjogc3RyaW5nLCByOiBEQVRBW10pOiBEQVRBW10ge1xuICAgICAgICBjb25zdCByb3dzID0gZmlsdGVyID9cbiAgICAgICAgICAgIHIuZmlsdGVyKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nID0gdGhpcy5nZXRQcm9wcyhyb3csIGZpbHRlcikuZmlsdGVyKChwKSA9PiBwLm1hdGNoID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGluZz8ubGVuZ3RoID4gMDtcbiAgICAgICAgICAgIH0pIDogcjtcblxuICAgICAgICB0aGlzLmV1aVRhYmxlVjJTZWxlY3RhYmxlUm93U2VydmljZS51bnJlZ2lzdGVyUm93cygpO1xuICAgICAgICB0aGlzLmV1aVRhYmxlVjJTZWxlY3RhYmxlUm93U2VydmljZS5yZWdpc3RlclJvd3Mocm93cyk7XG5cbiAgICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSByb3dzO1xuXG4gICAgICAgIHJldHVybiByb3dzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgc3RpY2t5SGVhZGVyVG9wUG9zaXRpb24oKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCB8fCAhdGhpcy5jZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnRbJ19yZW5kZXJlZENvbnRlbnRPZmZzZXQnXSkge1xuICAgICAgICAgICAgcmV0dXJuICcwJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoLXRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0WydfcmVuZGVyZWRDb250ZW50T2Zmc2V0J10gLSAxKSArICdweCc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBzdGlja3lGb290ZXJCb3R0b21Qb3NpdGlvbigpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IHx8ICF0aGlzLmNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydFsnX3JlbmRlcmVkQ29udGVudE9mZnNldCddKSB7XG4gICAgICAgICAgICByZXR1cm4gJy0xcHgnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0WydfcmVuZGVyZWRDb250ZW50T2Zmc2V0J10gLSAxICsgJ3B4JztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydFdpZHRoKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ/LnBhcmVudEVsZW1lbnQ/LmNsaWVudFdpZHRoIHx8IDApICsgJ3B4JztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGhvc3RXaWR0aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGg7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHRyYWNrQnlGbihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIHByaXZhdGUgdGFibGVGZWF0dXJlc0hhbmRsZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFibGVGZWF0dXJlc0hhbmRsZXJTdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFxuICAgICAgICAgICAgdGhpcy5wYWdpbmF0b3IgPyB0aGlzLnBhZ2luYXRvci5wYWdlJCA6IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCksXG4gICAgICAgICAgICB0aGlzLmZpbHRlciA/IHRoaXMuZmlsdGVyLmZpbHRlciQgOiBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpLFxuICAgICAgICAgICAgdGhpcy5ldWlUYWJsZVYyU29ydFNlcnZpY2Uuc29ydHMsXG4gICAgICAgICkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoW3BhZ2luYXRpb24sIGZpbHRlciwgc29ydHNdOiBbRXVpUGFnaW5hdGlvbkV2ZW50LCBzdHJpbmcsIFNvcnRbXV0pID0+IHtcbiAgICAgICAgICAgIGxldCByID0gWy4uLnRoaXMuZGF0YVNyY107XG5cbiAgICAgICAgICAgIGlmIChzb3J0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgciA9IHRoaXMuc29ydERhdGEoc29ydHMsIHIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByID0gdGhpcy5maWx0ZXJEYXRhKGZpbHRlciwgcik7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2luYXRvcikge1xuICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdG9yLnNldExlbmd0aChyLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgciA9IHRoaXMucGFnaW5hdGVSb3dzKHBhZ2luYXRpb24sIHIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRhdGFSZW5kZXJlZCA9IHI7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1NlbGVjdE9ubHlWaXNpYmxlUm93cykge1xuICAgICAgICAgICAgICAgIHRoaXMuZXVpVGFibGVWMlNlbGVjdGFibGVSb3dTZXJ2aWNlLnVuc2VsZWN0QWxsUm93cygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZXVpVGFibGVWMlNlbGVjdGFibGVSb3dTZXJ2aWNlLnVucmVnaXN0ZXJSb3dzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ldWlUYWJsZVYyU2VsZWN0YWJsZVJvd1NlcnZpY2UucmVnaXN0ZXJSb3dzKHRoaXMuZGF0YVJlbmRlcmVkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMucHJlc2VsZWN0ZWRSb3dzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldWlUYWJsZVYyU2VsZWN0YWJsZVJvd1NlcnZpY2Uuc2VsZWN0Um93cyh0aGlzLnByZXNlbGVjdGVkUm93cyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5oYXNTdGlja3lDb2xzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGlja3lGZWF0dXJlSGFuZGxlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNvcnREYXRhKHNvcnRDcml0ZXJpYXM6IHsgc29ydDogc3RyaW5nLCBvcmRlcjogU29ydE9yZGVyIH1bXSwgcjogREFUQVtdKTogREFUQVtdIHtcbiAgICAgICAgaWYgKHNvcnRDcml0ZXJpYXMuZXZlcnkoY3JpdGVyaWEgPT4gY3JpdGVyaWEub3JkZXIgPT09IG51bGwpKSB7XG4gICAgICAgICAgICByZXR1cm4gci5zbGljZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHIuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjcml0ZXJpYSBvZiBzb3J0Q3JpdGVyaWFzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYVZhbHVlID0gdGhpcy5nZXRPYmpQcm9wKGEsIGNyaXRlcmlhLnNvcnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJWYWx1ZSA9IHRoaXMuZ2V0T2JqUHJvcChiLCBjcml0ZXJpYS5zb3J0KTtcblxuICAgICAgICAgICAgICAgIGlmIChhVmFsdWUgPT09IGJWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoYVZhbHVlID09PSBudWxsIHx8IGFWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcml0ZXJpYS5vcmRlciA9PT0gJ2FzYycgPyAtMSA6IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChiVmFsdWUgPT09IG51bGwgfHwgYlZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyaXRlcmlhLm9yZGVyID09PSAnYXNjJyA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFWYWx1ZSA9PT0gJ2Jvb2xlYW4nICYmIHR5cGVvZiBiVmFsdWUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JpdGVyaWEub3JkZXIgPT09ICdhc2MnID8gKGFWYWx1ZSA/IC0xIDogMSkgOiAoYlZhbHVlID8gLTEgOiAxKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFWYWx1ZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGJWYWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyaXRlcmlhLm9yZGVyID09PSAnYXNjJyA/IGFWYWx1ZSAtIGJWYWx1ZSA6IGJWYWx1ZSAtIGFWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBhVmFsdWVTdHIgPSB0eXBlb2YgYVZhbHVlID09PSAnc3RyaW5nJyA/IGFWYWx1ZS50b0xvd2VyQ2FzZSgpIDogYVZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJWYWx1ZVN0ciA9IHR5cGVvZiBiVmFsdWUgPT09ICdzdHJpbmcnID8gYlZhbHVlLnRvTG93ZXJDYXNlKCkgOiBiVmFsdWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjb21wYXJpc29uID0gY3JpdGVyaWEub3JkZXIgPT09ICdhc2MnID8gYVZhbHVlU3RyLmxvY2FsZUNvbXBhcmUoYlZhbHVlU3RyKSA6IGJWYWx1ZVN0ci5sb2NhbGVDb21wYXJlKGFWYWx1ZVN0cik7XG5cbiAgICAgICAgICAgICAgICBpZiAoY29tcGFyaXNvbiAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFyaXNvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhZ2luYXRlUm93cyhwYWdpbmF0aW9uOiBFdWlQYWdpbmF0aW9uRXZlbnQsIHI6IERBVEFbXSk6IERBVEFbXSB7XG4gICAgICAgIHRoaXMucGFnZSA9IHBhZ2luYXRpb24ucGFnZTtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IHBhZ2luYXRpb24ucGFnZVNpemU7XG5cbiAgICAgICAgcmV0dXJuIHIuc2xpY2UodGhpcy5wYWdlICogdGhpcy5wYWdlU2l6ZSwgdGhpcy5wYWdlICogdGhpcy5wYWdlU2l6ZSArIHRoaXMucGFnZVNpemUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcm91bmREb3duKGluZGV4OiBudW1iZXIsIG5iUm93czogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoaW5kZXggLyBuYlJvd3MpICogbmJSb3dzO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzVW5kZWZpbmVkSW5SYW5nZShzdGFydEluZGV4OiBudW1iZXIsIGxpbWl0OiBudW1iZXIsIGRhdGFSZW5kZXJlZDogREFUQVtdKTogbnVtYmVyIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBzdGFydEluZGV4ICsgbGltaXQ7IGkgKyspIHtcbiAgICAgICAgICAgIGlmIChkYXRhUmVuZGVyZWRbaV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RpY2t5RmVhdHVyZUhhbmRsZXIoKTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudD8ucGFyZW50RWxlbWVudD8uY2xpZW50V2lkdGggfHwgMDtcblxuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc1N0aWNreUl0ZW1zID0gKGl0ZW1zOiBIVE1MVGFibGVDZWxsRWxlbWVudFtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1N0aWNreUZpcnN0Q29sID0gaXRlbS5vZmZzZXRMZWZ0ICsgaXRlbS5jbGllbnRXaWR0aCA8IGNvbnRhaW5lcldpZHRoO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1N0aWNreUxhc3RDb2wgPSBpdGVtLm9mZnNldExlZnQgKyBpdGVtLmNsaWVudFdpZHRoID4gY29udGFpbmVyV2lkdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbXNTdGlja3kgPSBpc1N0aWNreUZpcnN0Q29sXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGl0ZW1zLmZpbHRlcigoaXQpID0+IGl0Lm9mZnNldExlZnQgKyBpdC5jbGllbnRXaWR0aCA8IGNvbnRhaW5lcldpZHRoKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBpc1N0aWNreUxhc3RDb2xcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaXRlbXMuZmlsdGVyKChpdCkgPT4gaXQub2Zmc2V0TGVmdCArIGl0LmNsaWVudFdpZHRoID4gY29udGFpbmVyV2lkdGgpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zU3RpY2t5LmZvckVhY2goKGl0LCBqKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3ID0gaXRlbXNTdGlja3lbaiAtIDFdPy5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGlzU3RpY2t5Rmlyc3RDb2xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHBhcnNlSW50KGl0ZW1zU3RpY2t5W2ogLSAxXT8uc3R5bGUubGVmdCwgMTApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBwYXJzZUludChpdGVtc1N0aWNreVtqIC0gMV0/LnN0eWxlLnJpZ2h0LCAxMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1N0aWNreUZpcnN0Q29sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQuc3R5bGUubGVmdCA9IChqID09PSAwID8gMCA6IHcgKyBvZmZzZXQpICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTdGlja3lMYXN0Q29sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQuc3R5bGUucmlnaHQgPSAoaiA9PT0gMCA/IDAgOiB3ICsgb2Zmc2V0KSArICdweCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqICsgMSA9PT0gaXRlbXNTdGlja3kubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhpdCwgYGV1aS10YWJsZS12Ml9fY29sLS1zdGlja3ktc2hhZG93ZWQtJHtpc1N0aWNreUZpcnN0Q29sID8gJ2ZpcnN0JyA6ICdsYXN0J31gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAodGhpcy50aGVhZFJlZikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRoSXRlbXM6IEhUTUxUYWJsZUNlbGxFbGVtZW50W10gPSBBcnJheS5mcm9tKHRoaXMudGhlYWRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZXVpLXRhYmxlLXYyX19jb2wtLXN0aWNreScpKTtcbiAgICAgICAgICAgICAgICBwcm9jZXNzU3RpY2t5SXRlbXModGhJdGVtcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGJvZHlUckl0ZW1zID0gQXJyYXkuZnJvbSh0aGlzLnRib2R5UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgndHInKSk7XG4gICAgICAgICAgICBib2R5VHJJdGVtcy5mb3JFYWNoKCh0cikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRkSXRlbXM6IEhUTUxUYWJsZUNlbGxFbGVtZW50W10gPSBBcnJheS5mcm9tKHRyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5ldWktdGFibGUtdjJfX2NvbC0tc3RpY2t5JykpO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NTdGlja3lJdGVtcyh0ZEl0ZW1zKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50Zm9vdFJlZikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRkSXRlbXM6IEhUTUxUYWJsZUNlbGxFbGVtZW50W10gPSBBcnJheS5mcm9tKHRoaXMudGZvb3RSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZXVpLXRhYmxlLXYyX19jb2wtLXN0aWNreScpKTtcbiAgICAgICAgICAgICAgICBwcm9jZXNzU3RpY2t5SXRlbXModGRJdGVtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDI1MCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWxlY3RSb3dzRmVhdHVyZUhhbmRsZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXVpVGFibGVWMlNlbGVjdGFibGVSb3dTZXJ2aWNlLnNlbGVjdGVkUm93cy5waXBlKHNraXAoMSksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChzZWxlY3RlZCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yb3dzU2VsZWN0LmVtaXQoc2VsZWN0ZWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNvcnRGZWF0dXJlSGFuZGxlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ldWlUYWJsZVYyU29ydFNlcnZpY2Uuc29ydHMucGlwZShza2lwKDEpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoc29ydHM6IFNvcnRbXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQoc29ydHMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByb3BzKHJvdzogREFUQSwgZmlsdGVyOiBzdHJpbmcpOiB7IGtleTogc3RyaW5nOyBtYXRjaDogYm9vbGVhbjsgdmFsdWU6IHN0cmluZyB8IG51bWJlciB9W10ge1xuICAgICAgICBjb25zdCBpc09iamVjdCA9ICh2YWw6IHN0cmluZyB8IG51bWJlcik6IGJvb2xlYW4gPT4gdmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnO1xuICAgICAgICBjb25zdCBhZGREZWxpbWl0ZXIgPSAoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBzdHJpbmcgPT4gKGEgJiYgYSAhPT0gJzAnID8gYCR7YX0uJHtifWAgOiBiKTtcbiAgICAgICAgY29uc3QgcHJvcHM6IHsga2V5OiBzdHJpbmcsIG1hdGNoOiBib29sZWFuLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIH1bXSA9IFtdO1xuICAgICAgICBjb25zdCBwYXRocyA9IChwYXRoT2JqOiBEQVRBLCBoZWFkID0gJycpOiBzdHJpbmdbXSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMocGF0aE9iaikucmVkdWNlKChwcm9kdWN0LCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmdWxsUGF0aCA9IGFkZERlbGltaXRlcihoZWFkLCBrZXkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gKHY6IHN0cmluZyB8IG51bWJlcik6IGJvb2xlYW4gPT4gdiAmJiB0eXBlb2YgdiAhPT0gJ29iamVjdCcgJiYgdj8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZmlsdGVyPy50cmltKCkudG9Mb3dlckNhc2UoKSkgIT09IC0xO1xuXG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gJzAnICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHMucHVzaCh7IGtleTogYWRkRGVsaW1pdGVyKGhlYWQsIGtleSksIG1hdGNoOiBtYXRjaCh2YWx1ZSksIHZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBpc09iamVjdCh2YWx1ZSkgPyBwcm9kdWN0LmNvbmNhdChwYXRocyh2YWx1ZSwgZnVsbFBhdGgpKSA6IHByb2R1Y3QuY29uY2F0KGZ1bGxQYXRoKTtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgfTtcblxuICAgICAgICBwYXRocyhyb3cpO1xuICAgICAgICByZXR1cm4gcHJvcHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPYmpQcm9wKG9iajogREFUQSwgcHJvcDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHByb3AgPyBwcm9wLnNwbGl0KCcuJykucmVkdWNlKChwcmV2LCBjdXJyKSA9PiAocHJldiA/IHByZXZbY3Vycl0gOiBudWxsKSwgb2JqIHx8IHNlbGYpIDogbnVsbDtcbiAgICB9XG59XG4iLCI8IS0tIDxidXR0b24gKGNsaWNrKT1cInRlc3QoMTkyNTApXCI+MTkyNTA8L2J1dHRvbj5cbjxidXR0b24gKGNsaWNrKT1cInRlc3QoNzg5NSlcIj43ODk1PC9idXR0b24+XG48YnV0dG9uIChjbGljayk9XCJ0ZXN0KDE2ODYwKVwiPjE2ODYwPC9idXR0b24+XG48YnV0dG9uIChjbGljayk9XCJ0ZXN0KDE2ODcwKVwiPjE2ODcwPC9idXR0b24+XG48YnV0dG9uIChjbGljayk9XCJ0ZXN0KDE2ODgwKVwiPjE2ODgwPC9idXR0b24+XG48YnV0dG9uIChjbGljayk9XCJ0ZXN0KDE2ODkwKVwiPjE2ODkwPC9idXR0b24+XG48YnV0dG9uIChjbGljayk9XCJ0ZXN0KDE2OTAwKVwiPjE2OTAwPC9idXR0b24+XG48YnV0dG9uIChjbGljayk9XCJ0ZXN0KDI2OTk4KVwiPjI2OTk4PC9idXR0b24+XG48YnV0dG9uIChjbGljayk9XCJ0ZXN0KDI4MDAwKVwiPjI4MDAwPC9idXR0b24+IC0tPlxuQGlmIChpc1ZpcnR1YWxTY3JvbGwpIHtcbiAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgICAgICNjZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnRcbiAgICAgICAgI2Nka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydEVsZW1lbnRcbiAgICAgICAgY2xhc3M9XCJldWktdGFibGUtdjJfX3Njcm9sbC12aWV3cG9ydFwiXG4gICAgICAgIFtpdGVtU2l6ZV09XCJpdGVtU2l6ZVwiXG4gICAgICAgIFtzdHlsZS5vdmVyZmxvd109XCJjZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnRPdmVyZmxvd1ZhbHVlXCJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInt7IGNzc0NsYXNzZXMgfX1cIiBbc3R5bGUud2lkdGhdPVwiaG9zdFdpZHRoXCI+XG4gICAgICAgICAgICBAaWYgKGhlYWRlclRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgPHRoZWFkICN0aGVhZFJlZiBbc3R5bGUudG9wXT1cInN0aWNreUhlYWRlclRvcFBvc2l0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJoZWFkZXJUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoYm9keVRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgPHRib2R5ICN0Ym9keVJlZj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqY2RrVmlydHVhbEZvcj1cImxldCByb3cgb2YgZGF0YVJlbmRlcmVkOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5Rm5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAocm93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJvZHlUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93LCBpbmRleDogaSB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJza2VsZXRvbkxvYWRpbmdcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICBAaWYgKG5vRGF0YVRlbXBsYXRlICYmIChkYXRhPy5sZW5ndGggPT09IDAgfHwgZGF0YVJlbmRlcmVkPy5sZW5ndGggPT09IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9EYXRhVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoZm9vdGVyVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICA8dGZvb3QgI3Rmb290UmVmIFtzdHlsZS5ib3R0b21dPVwic3RpY2t5Rm9vdGVyQm90dG9tUG9zaXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZvb3RlclRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L3Rmb290PlxuICAgICAgICAgICAgfVxuICAgICAgICA8L3RhYmxlPlxuICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxufSBAZWxzZSB7XG4gICAgQGlmIChoZWFkZXJUZW1wbGF0ZSkge1xuICAgICAgICA8dGhlYWQgI3RoZWFkUmVmPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImhlYWRlclRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90aGVhZD5cbiAgICB9XG4gICAgQGlmIChib2R5VGVtcGxhdGUpIHtcbiAgICAgICAgPHRib2R5ICN0Ym9keVJlZj5cbiAgICAgICAgICAgIEBmb3IgKHJvdyBvZiBkYXRhUmVuZGVyZWQ7IGxldCBpID0gJGluZGV4OyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImJvZHlUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHJvdywgaW5kZXg6IGkgfVwiPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChub0RhdGFUZW1wbGF0ZSAmJiAoZGF0YT8ubGVuZ3RoID09PSAwIHx8IGRhdGFSZW5kZXJlZD8ubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJub0RhdGFUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvdGJvZHk+XG4gICAgfVxuICAgIEBpZiAoZm9vdGVyVGVtcGxhdGUpIHtcbiAgICAgICAgPHRmb290ICN0Zm9vdFJlZj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJmb290ZXJUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvdGZvb3Q+XG4gICAgfVxufVxuXG48bmctdGVtcGxhdGUgI3NrZWxldG9uTG9hZGluZz5cbiAgICA8dHIgW3N0eWxlLmhlaWdodC5weF09XCJpdGVtU2l6ZVwiPlxuICAgICAgICA8dGQgKm5nRm9yPVwibGV0IF9fIG9mIG5iQ29sc1wiPjxldWktc2tlbGV0b24gbGluZSBldWlSb3VuZGVkPjwvZXVpLXNrZWxldG9uPjwvdGQ+XG4gICAgPC90cj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=