@onecx/angular-accelerator 5.25.0 → 5.26.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.
- package/esm2022/lib/angular-accelerator-primeng.module.mjs +5 -5
- package/esm2022/lib/angular-accelerator.module.mjs +5 -5
- package/esm2022/lib/components/column-group-selection/column-group-selection.component.mjs +4 -4
- package/esm2022/lib/components/custom-group-column-selector/custom-group-column-selector.component.mjs +4 -4
- package/esm2022/lib/components/data-layout-selection/data-layout-selection.component.mjs +4 -4
- package/esm2022/lib/components/data-list-grid/data-list-grid.component.mjs +4 -4
- package/esm2022/lib/components/data-list-grid-sorting/data-list-grid-sorting.component.mjs +4 -4
- package/esm2022/lib/components/data-loading-error/data-loading-error.component.mjs +4 -4
- package/esm2022/lib/components/data-table/data-table.component.mjs +4 -4
- package/esm2022/lib/components/data-view/data-view.component.mjs +4 -4
- package/esm2022/lib/components/diagram/diagram.component.mjs +4 -4
- package/esm2022/lib/components/filter-view/filter-view.component.mjs +4 -4
- package/esm2022/lib/components/group-by-count-diagram/group-by-count-diagram.component.mjs +4 -4
- package/esm2022/lib/components/interactive-data-view/interactive-data-view.component.mjs +4 -4
- package/esm2022/lib/components/page-header/page-header.component.mjs +4 -4
- package/esm2022/lib/components/search-header/search-header.component.mjs +4 -4
- package/esm2022/lib/directives/advanced.directive.mjs +4 -4
- package/esm2022/lib/directives/if-breakpoint.directive.mjs +4 -4
- package/esm2022/lib/directives/if-permission.directive.mjs +4 -4
- package/esm2022/lib/directives/src.directive.mjs +20 -14
- package/esm2022/lib/directives/tooltipOnOverflow.directive.mjs +4 -4
- package/esm2022/lib/pipes/dynamic.pipe.mjs +4 -4
- package/esm2022/lib/pipes/ocxtimeago.pipe.mjs +4 -4
- package/esm2022/lib/services/breadcrumb.service.mjs +4 -4
- package/esm2022/lib/services/translation-cache.service.mjs +4 -4
- package/esm2022/lib/utils/dateutils.mjs +4 -4
- package/fesm2022/onecx-angular-accelerator.mjs +96 -90
- package/fesm2022/onecx-angular-accelerator.mjs.map +1 -1
- package/package.json +5 -5
|
@@ -449,10 +449,10 @@ export class DataListGridComponent extends DataSortBase {
|
|
|
449
449
|
}
|
|
450
450
|
return this.templatesObservables[column.id];
|
|
451
451
|
}
|
|
452
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.
|
|
453
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: DataListGridComponent, selector: "ocx-data-list-grid", inputs: { titleLineId: "titleLineId", subtitleLineIds: "subtitleLineIds", clientSideSorting: "clientSideSorting", clientSideFiltering: "clientSideFiltering", sortStates: "sortStates", pageSizes: "pageSizes", pageSize: "pageSize", emptyResultsMessage: "emptyResultsMessage", fallbackImage: "fallbackImage", layout: "layout", viewPermission: "viewPermission", editPermission: "editPermission", deletePermission: "deletePermission", deleteActionVisibleField: "deleteActionVisibleField", deleteActionEnabledField: "deleteActionEnabledField", viewActionVisibleField: "viewActionVisibleField", viewActionEnabledField: "viewActionEnabledField", editActionVisibleField: "editActionVisibleField", editActionEnabledField: "editActionEnabledField", viewMenuItemKey: "viewMenuItemKey", editMenuItemKey: "editMenuItemKey", deleteMenuItemKey: "deleteMenuItemKey", paginator: "paginator", page: "page", columns: "columns", name: "name", totalRecordsOnServer: "totalRecordsOnServer", currentPageShowingKey: "currentPageShowingKey", currentPageShowingWithTotalOnServerKey: "currentPageShowingWithTotalOnServerKey", data: "data", filters: "filters", sortDirection: "sortDirection", sortField: "sortField", gridItemSubtitleLinesTemplate: "gridItemSubtitleLinesTemplate", listItemSubtitleLinesTemplate: "listItemSubtitleLinesTemplate", listItemTemplate: "listItemTemplate", gridItemTemplate: "gridItemTemplate", listValueTemplate: "listValueTemplate", translationKeyListValueTemplate: "translationKeyListValueTemplate", numberListValueTemplate: "numberListValueTemplate", relativeDateListValueTemplate: "relativeDateListValueTemplate", customListValueTemplate: "customListValueTemplate", stringListValueTemplate: "stringListValueTemplate", dateListValueTemplate: "dateListValueTemplate", additionalActions: "additionalActions", parentTemplates: "parentTemplates" }, outputs: { viewItem: "viewItem", editItem: "editItem", deleteItem: "deleteItem", pageChanged: "pageChanged", pageSizeChanged: "pageSizeChanged", componentStateChanged: "componentStateChanged" }, queries: [{ propertyName: "gridItemSubtitleLinesChildTemplate", first: true, predicate: ["gridItemSubtitleLines"], descendants: true }, { propertyName: "listItemSubtitleLinesChildTemplate", first: true, predicate: ["listItemSubtitleLines"], descendants: true }, { propertyName: "listItemChildTemplate", first: true, predicate: ["listItem"], descendants: true }, { propertyName: "gridItemChildTemplate", first: true, predicate: ["gridItem"], descendants: true }, { propertyName: "listValueChildTemplate", first: true, predicate: ["listValue"], descendants: true }, { propertyName: "translationKeyListValueChildTemplate", first: true, predicate: ["translationKeyListValue"], descendants: true }, { propertyName: "numberListValueChildTemplate", first: true, predicate: ["numberListValue"], descendants: true }, { propertyName: "relativeDateListValueChildTemplate", first: true, predicate: ["relativeDateListValue"], descendants: true }, { propertyName: "customListValueChildTemplate", first: true, predicate: ["customListValue"], descendants: true }, { propertyName: "stringListValueChildTemplate", first: true, predicate: ["stringListValue"], descendants: true }, { propertyName: "dateListValueChildTemplate", first: true, predicate: ["dateListValue"], descendants: true }, { propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "viewTemplates", predicate: PrimeTemplate, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"(displayedPageSize$ | async) as displayedPageSize\">\n <p-dataView\n *ngIf=\"(columnTemplates$ | async) ?? {} as columnTemplates\"\n [value]=\"(displayedItems$ | async) ?? []\"\n [paginator]=\"paginator\"\n [first]=\"page * displayedPageSize\"\n (onPage)=\"onPageChange($event)\"\n [rows]=\"displayedPageSize\"\n [layout]=\"layout\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{{ (totalRecordsOnServer ? currentPageShowingWithTotalOnServerKey : currentPageShowingKey) | translate:params }}\"\n [rowsPerPageOptions]=\"(displayedPageSizes$ | async) ?? []\"\n id=\"dataListGrid_{{name}}\"\n paginatorDropdownAppendTo=\"body\"\n >\n <ng-template #gridItem let-rows pTemplate=\"gridItem\">\n <div class=\"p-grid p-nogutter grid grid-nogutter\">\n <ng-template ngFor let-item [ngForOf]=\"rows\">\n <ng-container\n [ngTemplateOutlet]=\"_gridItem ? _gridItem : defaultGridItem\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n ></ng-container>\n </ng-template>\n </div>\n </ng-template>\n\n <ng-template #listItem let-rows pTemplate=\"listItem\">\n <div class=\"p-grid p-nogutter grid grid-nogutter\">\n <ng-template ngFor let-item [ngForOf]=\"rows\">\n @defer (on viewport; on idle){\n <ng-container\n [ngTemplateOutlet]=\"_listItem ? _listItem : defaultListItem\"\n [ngTemplateOutletContext]=\"{\n item:item,\n columnTemplates: columnTemplates\n }\"\n ></ng-container>\n } @placeholder {\n <div style=\"width: 100%; height: 80px\"></div>\n }\n </ng-template>\n </div>\n </ng-template>\n <ng-template pTemplate=\"empty\">\n <span>{{ emptyResultsMessage || (\"OCX_DATA_LIST_GRID.EMPTY_RESULT\" | translate) }}</span>\n </ng-template>\n </p-dataView>\n</ng-container>\n\n<ng-template #defaultGridItem let-item>\n <div class=\"col-12 lg:col-6 xl:col-4 flex\">\n <div class=\"data-grid-item card flex flex-column justify-content-between w-12 lg:w-11 mb-4 mt-4 align-self-stretch\">\n <div class=\"flex justify-content-center mb-3\">\n <img\n class=\"image\"\n src=\"{{ item.imagePath || (fallbackImagePath$ | async) }}\"\n (error)=\"imgError(item)\"\n alt=\"{{resolveFieldData(item, titleLineId)|| ''}}\"\n />\n </div>\n <div class=\"flex flex-row justify-content-between align-items-center\">\n <div class=\"data-grid-items flex-row\">\n <div class=\"item-name font-medium mr-3 text-2xl\">\n <a [routerLink]=\"\" (click)=\"onViewRow\">{{ resolveFieldData(item, titleLineId) || '' }}</a>\n </div>\n <ng-container\n [ngTemplateOutlet]=\"_gridItemSubtitleLines ? _gridItemSubtitleLines : defaultGridItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n ></ng-container>\n </div>\n <div>\n <p-menu #menu [model]=\"gridMenuItems\" [popup]=\"true\" appendTo=\"body\"></p-menu>\n <button\n pButton\n (click)=\"setSelectedItem(item); updateGridMenuItems(true); menu.toggle($event)\"\n icon=\"pi pi-ellipsis-v\"\n [attr.aria-label]=\"'OCX_DATA_LIST_GRID.MORE_ACTIONS_ARIA_LABEL' | translate\"\n class=\"more-actions-menu-button menu-btn\"\n [attr.name]=\"'data-grid-item-menu-button'\"\n [pTooltip]=\"'OCX_DATA_LIST_GRID.MORE_ACTIONS_TOOLTIP' | translate\"\n tooltipPosition=\"top\"\n ></button>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n<ng-template #defaultGridItemSubtitleLines let-item>\n <div *ngFor=\"let subtitleLineId of subtitleLineIds\" class=\"subtitleLine edit-time text-xl my-3\">\n {{ resolveFieldData(item, subtitleLineId) }}\n </div>\n</ng-template>\n<ng-template #defaultListItem let-item=\"item\" let-columnTemplates=\"columnTemplates\">\n <div class=\"col-12\" *ngIf=\"columnTemplates\">\n <div class=\"data-list-items p-3\">\n <div class=\"item-name-row flex flex-row justify-content-between\">\n <div class=\"item-name mr-3 text-2xl font-medium align-content-center\">\n <span *ngIf=\"titleLineId\">{{ resolveFieldData(item, titleLineId) || '' }}</span>\n </div>\n <div class=\"flex flex-row\">\n <ng-container\n *ngIf=\"viewItemObserved && (!viewActionVisibleField || fieldIsTruthy(item, viewActionVisibleField))\"\n >\n <button\n type=\"button\"\n icon=\"pi pi-eye\"\n pButton\n class=\"p-button-rounded p-button-text mb-1 mr-2 viewListItemButton\"\n [pTooltip]=\"(viewMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.VIEW') | translate\"\n tooltipPosition=\"top\"\n [attr.aria-label]=\"(viewMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.VIEW') | translate\"\n (click)=\"onViewRow(item)\"\n *ocxIfPermission=\"viewPermission\"\n [disabled]=\"!!viewActionEnabledField && !fieldIsTruthy(item, viewActionEnabledField)\"\n [attr.name]=\"'data-list-action-button'\"\n ></button>\n </ng-container>\n <ng-container\n *ngIf=\"editItemObserved && (!editActionVisibleField || fieldIsTruthy(item, editActionVisibleField))\"\n >\n <button\n type=\"button\"\n class=\"p-button-rounded p-button-text mb-1 mr-2 editListItemButton\"\n icon=\"pi pi-pencil\"\n pButton\n [pTooltip]=\"(editMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.EDIT') | translate\"\n tooltipPosition=\"top\"\n [attr.aria-label]=\"(editMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.EDIT') | translate\"\n (click)=\"onEditRow(item)\"\n *ocxIfPermission=\"editPermission\"\n [disabled]=\"!!editActionEnabledField && !fieldIsTruthy(item, editActionEnabledField)\"\n [attr.name]=\"'data-list-action-button'\"\n ></button>\n </ng-container>\n <ng-container\n *ngIf=\"deleteItemObserved && (!deleteActionVisibleField || fieldIsTruthy(item, deleteActionVisibleField))\"\n >\n <button\n type=\"button\"\n icon=\"pi pi-trash\"\n class=\"p-button-rounded p-button-text p-button-danger mb-1 mr-2 deleteListItemButton\"\n pButton\n [pTooltip]=\"(deleteMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.DELETE') | translate\"\n tooltipPosition=\"top\"\n [attr.aria-label]=\"(deleteMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.DELETE') | translate\"\n (click)=\"onDeleteRow(item)\"\n *ocxIfPermission=\"deletePermission\"\n [disabled]=\"!!deleteActionEnabledField && !fieldIsTruthy(item, deleteActionEnabledField)\"\n [attr.name]=\"'data-list-action-button'\"\n ></button>\n </ng-container>\n <ng-container *ngFor=\"let action of inlineListActions$ | async\">\n <ng-container *ngIf=\"(!action.actionVisibleField || fieldIsTruthy(item, action.actionVisibleField))\">\n <button\n *ocxIfPermission=\"action.permission\"\n pButton\n class=\"p-button-rounded p-button-text\"\n [ngClass]=\"action.classes\"\n [icon]=\"action.icon || ''\"\n (click)=\"action.callback(item)\"\n [pTooltip]=\"action.labelKey ? (action.labelKey | translate) : ''\"\n tooltipPosition=\"top\"\n [attr.aria-label]=\"action.labelKey ? (action.labelKey | translate) : ''\"\n [disabled]=\"action.disabled || (!!action.actionEnabledField && !fieldIsTruthy(item, action.actionEnabledField))\"\n ></button>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"hasVisibleOverflowMenuItems(item) | async\">\n <p-menu #menu [model]=\"(overflowMenuItems$ | async) || []\" [popup]=\"true\" appendTo=\"body\"></p-menu>\n <button\n pButton\n class=\"p-button-rounded p-button-text\"\n [icon]=\"'pi pi-ellipsis-v'\"\n (click)=\"toggleOverflowMenu($event, menu, item)\"\n [attr.aria-label]=\"'OCX_DATA_LIST_GRID.MORE_ACTIONS_ARIA_LABEL' | translate\"\n [pTooltip]=\"'OCX_DATA_LIST_GRID.MORE_ACTIONS_TOOLTIP' | translate\"\n tooltipPosition=\"top\"\n ></button>\n </ng-container>\n </div>\n </div>\n <div class=\"text-base font-light my-1\">\n <ng-container\n [ngTemplateOutlet]=\"_listItemSubtitleLines ? _listItemSubtitleLines : defaultListItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n ></ng-container>\n </div>\n <div class=\"flex flex-wrap\">\n <div *ngFor=\"let col of getFilteredColumns()\" class=\"w-12rem my-2 mr-2\">\n <div class=\"font-bold\" [ocxTooltipOnOverflow]=\"col.nameKey | translate\" tooltipPosition=\"top\">\n {{ col.nameKey | translate }}\n </div>\n <div\n [ocxTooltipOnOverflow]=\"col.columnType === columnType.TRANSLATION_KEY ? (resolveFieldData(item,col.id) | translate) : resolveFieldData(item, col.id)\"\n tooltipPosition=\"top\"\n >\n @defer(on viewport;){\n <ng-container\n [ngTemplateOutlet]=\"_listValue ? _listValue: defaultListValue\"\n [ngTemplateOutletContext]=\"{\n rowObject: item,\n column: col,\n columnTemplates: columnTemplates\n }\"\n >\n </ng-container>\n } @placeholder {\n <p-skeleton width=\"5rem\" />\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n<ng-template #defaultListItemSubtitleLines let-item=\"$implicit\">\n <div *ngFor=\"let subtitleLineId of subtitleLineIds\" class=\"subtitleLine text-xl my-3\">\n {{ resolveFieldData(item, subtitleLineId) }}\n </div>\n</ng-template>\n\n<ng-template #defaultListValue let-rowObject=\"rowObject\" let-column=\"column\" let-columnTemplates=\"columnTemplates\">\n <ng-container\n *ngIf=\"columnTemplates[column.id]\"\n [ngTemplateOutlet]=\"columnTemplates[column.id]\"\n [ngTemplateOutletContext]=\"{\n rowObject: rowObject,\n column: column\n }\"\n >\n </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultStringListValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id) }} </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultNumberListValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id) | number }} </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultCustomListValue\" let-rowObject=\"rowObject\" let-column=\"column\"> </ng-template>\n\n<ng-template pTemplate=\"defaultDateListValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id) | date: column.dateFormat ?? 'medium' }} </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultRelativeDateListValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container>\n {{ 'OCX_DATA_TABLE.EDITED' | translate }} {{ resolveFieldData(rowObject, column.id) | timeago }}\n </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultTranslationKeyListValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id) | translate }} </ng-container>\n</ng-template>\n", styles: [".image{width:100%;height:100%}.menu-btn{color:var(--primary-text-color);background-color:var(--primary-color);border:var(--button-border);border-radius:var(--border-radius);padding:var(--button-padding);cursor:pointer;min-width:4rem}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i6.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i7.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i8.DataView, selector: "p-dataView", inputs: ["paginator", "rows", "totalRecords", "pageLinks", "rowsPerPageOptions", "paginatorPosition", "paginatorStyleClass", "alwaysShowPaginator", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showFirstLastIcon", "showPageLinks", "lazy", "lazyLoadOnInit", "emptyMessage", "style", "styleClass", "gridStyleClass", "trackBy", "filterBy", "filterLocale", "loading", "loadingIcon", "first", "sortField", "sortOrder", "value", "layout"], outputs: ["onLazyLoad", "onPage", "onSort", "onChangeLayout"] }, { kind: "component", type: i9.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "component", type: i10.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "directive", type: i11.IfPermissionDirective, selector: "[ocxIfPermission], [ocxIfNotPermission]", inputs: ["ocxIfPermission", "ocxIfNotPermission", "onMissingPermission", "ocxIfPermissionPermissions", "ocxIfNotPermissionPermissions", "ocxIfPermissionElseTemplate", "ocxIfNotPermissionElseTemplate"] }, { kind: "directive", type: i12.TooltipOnOverflowDirective, selector: "[ocxTooltipOnOverflow]", inputs: ["ocxTooltipOnOverflow"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.DecimalPipe, name: "number" }, { kind: "pipe", type: i4.DatePipe, name: "date" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: i13.OcxTimeAgoPipe, name: "timeago" }], deferBlockDependencies: [() => [i4.NgTemplateOutlet], () => [i4.NgTemplateOutlet]] }); }
|
|
452
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: DataListGridComponent, deps: [{ token: LOCALE_ID }, { token: i1.TranslateService }, { token: i2.UserService }, { token: i3.Router }, { token: i0.Injector }, { token: i2.AppStateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
453
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: DataListGridComponent, selector: "ocx-data-list-grid", inputs: { titleLineId: "titleLineId", subtitleLineIds: "subtitleLineIds", clientSideSorting: "clientSideSorting", clientSideFiltering: "clientSideFiltering", sortStates: "sortStates", pageSizes: "pageSizes", pageSize: "pageSize", emptyResultsMessage: "emptyResultsMessage", fallbackImage: "fallbackImage", layout: "layout", viewPermission: "viewPermission", editPermission: "editPermission", deletePermission: "deletePermission", deleteActionVisibleField: "deleteActionVisibleField", deleteActionEnabledField: "deleteActionEnabledField", viewActionVisibleField: "viewActionVisibleField", viewActionEnabledField: "viewActionEnabledField", editActionVisibleField: "editActionVisibleField", editActionEnabledField: "editActionEnabledField", viewMenuItemKey: "viewMenuItemKey", editMenuItemKey: "editMenuItemKey", deleteMenuItemKey: "deleteMenuItemKey", paginator: "paginator", page: "page", columns: "columns", name: "name", totalRecordsOnServer: "totalRecordsOnServer", currentPageShowingKey: "currentPageShowingKey", currentPageShowingWithTotalOnServerKey: "currentPageShowingWithTotalOnServerKey", data: "data", filters: "filters", sortDirection: "sortDirection", sortField: "sortField", gridItemSubtitleLinesTemplate: "gridItemSubtitleLinesTemplate", listItemSubtitleLinesTemplate: "listItemSubtitleLinesTemplate", listItemTemplate: "listItemTemplate", gridItemTemplate: "gridItemTemplate", listValueTemplate: "listValueTemplate", translationKeyListValueTemplate: "translationKeyListValueTemplate", numberListValueTemplate: "numberListValueTemplate", relativeDateListValueTemplate: "relativeDateListValueTemplate", customListValueTemplate: "customListValueTemplate", stringListValueTemplate: "stringListValueTemplate", dateListValueTemplate: "dateListValueTemplate", additionalActions: "additionalActions", parentTemplates: "parentTemplates" }, outputs: { viewItem: "viewItem", editItem: "editItem", deleteItem: "deleteItem", pageChanged: "pageChanged", pageSizeChanged: "pageSizeChanged", componentStateChanged: "componentStateChanged" }, queries: [{ propertyName: "gridItemSubtitleLinesChildTemplate", first: true, predicate: ["gridItemSubtitleLines"], descendants: true }, { propertyName: "listItemSubtitleLinesChildTemplate", first: true, predicate: ["listItemSubtitleLines"], descendants: true }, { propertyName: "listItemChildTemplate", first: true, predicate: ["listItem"], descendants: true }, { propertyName: "gridItemChildTemplate", first: true, predicate: ["gridItem"], descendants: true }, { propertyName: "listValueChildTemplate", first: true, predicate: ["listValue"], descendants: true }, { propertyName: "translationKeyListValueChildTemplate", first: true, predicate: ["translationKeyListValue"], descendants: true }, { propertyName: "numberListValueChildTemplate", first: true, predicate: ["numberListValue"], descendants: true }, { propertyName: "relativeDateListValueChildTemplate", first: true, predicate: ["relativeDateListValue"], descendants: true }, { propertyName: "customListValueChildTemplate", first: true, predicate: ["customListValue"], descendants: true }, { propertyName: "stringListValueChildTemplate", first: true, predicate: ["stringListValue"], descendants: true }, { propertyName: "dateListValueChildTemplate", first: true, predicate: ["dateListValue"], descendants: true }, { propertyName: "templates", predicate: PrimeTemplate }], viewQueries: [{ propertyName: "viewTemplates", predicate: PrimeTemplate, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"(displayedPageSize$ | async) as displayedPageSize\">\n <p-dataView\n *ngIf=\"(columnTemplates$ | async) ?? {} as columnTemplates\"\n [value]=\"(displayedItems$ | async) ?? []\"\n [paginator]=\"paginator\"\n [first]=\"page * displayedPageSize\"\n (onPage)=\"onPageChange($event)\"\n [rows]=\"displayedPageSize\"\n [layout]=\"layout\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{{ (totalRecordsOnServer ? currentPageShowingWithTotalOnServerKey : currentPageShowingKey) | translate:params }}\"\n [rowsPerPageOptions]=\"(displayedPageSizes$ | async) ?? []\"\n id=\"dataListGrid_{{name}}\"\n paginatorDropdownAppendTo=\"body\"\n >\n <ng-template #gridItem let-rows pTemplate=\"gridItem\">\n <div class=\"p-grid p-nogutter grid grid-nogutter\">\n <ng-template ngFor let-item [ngForOf]=\"rows\">\n <ng-container\n [ngTemplateOutlet]=\"_gridItem ? _gridItem : defaultGridItem\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n ></ng-container>\n </ng-template>\n </div>\n </ng-template>\n\n <ng-template #listItem let-rows pTemplate=\"listItem\">\n <div class=\"p-grid p-nogutter grid grid-nogutter\">\n <ng-template ngFor let-item [ngForOf]=\"rows\">\n @defer (on viewport; on idle){\n <ng-container\n [ngTemplateOutlet]=\"_listItem ? _listItem : defaultListItem\"\n [ngTemplateOutletContext]=\"{\n item:item,\n columnTemplates: columnTemplates\n }\"\n ></ng-container>\n } @placeholder {\n <div style=\"width: 100%; height: 80px\"></div>\n }\n </ng-template>\n </div>\n </ng-template>\n <ng-template pTemplate=\"empty\">\n <span>{{ emptyResultsMessage || (\"OCX_DATA_LIST_GRID.EMPTY_RESULT\" | translate) }}</span>\n </ng-template>\n </p-dataView>\n</ng-container>\n\n<ng-template #defaultGridItem let-item>\n <div class=\"col-12 lg:col-6 xl:col-4 flex\">\n <div class=\"data-grid-item card flex flex-column justify-content-between w-12 lg:w-11 mb-4 mt-4 align-self-stretch\">\n <div class=\"flex justify-content-center mb-3\">\n <img\n class=\"image\"\n src=\"{{ item.imagePath || (fallbackImagePath$ | async) }}\"\n (error)=\"imgError(item)\"\n alt=\"{{resolveFieldData(item, titleLineId)|| ''}}\"\n />\n </div>\n <div class=\"flex flex-row justify-content-between align-items-center\">\n <div class=\"data-grid-items flex-row\">\n <div class=\"item-name font-medium mr-3 text-2xl\">\n <a [routerLink]=\"\" (click)=\"onViewRow\">{{ resolveFieldData(item, titleLineId) || '' }}</a>\n </div>\n <ng-container\n [ngTemplateOutlet]=\"_gridItemSubtitleLines ? _gridItemSubtitleLines : defaultGridItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n ></ng-container>\n </div>\n <div>\n <p-menu #menu [model]=\"gridMenuItems\" [popup]=\"true\" appendTo=\"body\"></p-menu>\n <button\n pButton\n (click)=\"setSelectedItem(item); updateGridMenuItems(true); menu.toggle($event)\"\n icon=\"pi pi-ellipsis-v\"\n [attr.aria-label]=\"'OCX_DATA_LIST_GRID.MORE_ACTIONS_ARIA_LABEL' | translate\"\n class=\"more-actions-menu-button menu-btn\"\n [attr.name]=\"'data-grid-item-menu-button'\"\n [pTooltip]=\"'OCX_DATA_LIST_GRID.MORE_ACTIONS_TOOLTIP' | translate\"\n tooltipPosition=\"top\"\n ></button>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n<ng-template #defaultGridItemSubtitleLines let-item>\n <div *ngFor=\"let subtitleLineId of subtitleLineIds\" class=\"subtitleLine edit-time text-xl my-3\">\n {{ resolveFieldData(item, subtitleLineId) }}\n </div>\n</ng-template>\n<ng-template #defaultListItem let-item=\"item\" let-columnTemplates=\"columnTemplates\">\n <div class=\"col-12\" *ngIf=\"columnTemplates\">\n <div class=\"data-list-items p-3\">\n <div class=\"item-name-row flex flex-row justify-content-between\">\n <div class=\"item-name mr-3 text-2xl font-medium align-content-center\">\n <span *ngIf=\"titleLineId\">{{ resolveFieldData(item, titleLineId) || '' }}</span>\n </div>\n <div class=\"flex flex-row\">\n <ng-container\n *ngIf=\"viewItemObserved && (!viewActionVisibleField || fieldIsTruthy(item, viewActionVisibleField))\"\n >\n <button\n type=\"button\"\n icon=\"pi pi-eye\"\n pButton\n class=\"p-button-rounded p-button-text mb-1 mr-2 viewListItemButton\"\n [pTooltip]=\"(viewMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.VIEW') | translate\"\n tooltipPosition=\"top\"\n [attr.aria-label]=\"(viewMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.VIEW') | translate\"\n (click)=\"onViewRow(item)\"\n *ocxIfPermission=\"viewPermission\"\n [disabled]=\"!!viewActionEnabledField && !fieldIsTruthy(item, viewActionEnabledField)\"\n [attr.name]=\"'data-list-action-button'\"\n ></button>\n </ng-container>\n <ng-container\n *ngIf=\"editItemObserved && (!editActionVisibleField || fieldIsTruthy(item, editActionVisibleField))\"\n >\n <button\n type=\"button\"\n class=\"p-button-rounded p-button-text mb-1 mr-2 editListItemButton\"\n icon=\"pi pi-pencil\"\n pButton\n [pTooltip]=\"(editMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.EDIT') | translate\"\n tooltipPosition=\"top\"\n [attr.aria-label]=\"(editMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.EDIT') | translate\"\n (click)=\"onEditRow(item)\"\n *ocxIfPermission=\"editPermission\"\n [disabled]=\"!!editActionEnabledField && !fieldIsTruthy(item, editActionEnabledField)\"\n [attr.name]=\"'data-list-action-button'\"\n ></button>\n </ng-container>\n <ng-container\n *ngIf=\"deleteItemObserved && (!deleteActionVisibleField || fieldIsTruthy(item, deleteActionVisibleField))\"\n >\n <button\n type=\"button\"\n icon=\"pi pi-trash\"\n class=\"p-button-rounded p-button-text p-button-danger mb-1 mr-2 deleteListItemButton\"\n pButton\n [pTooltip]=\"(deleteMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.DELETE') | translate\"\n tooltipPosition=\"top\"\n [attr.aria-label]=\"(deleteMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.DELETE') | translate\"\n (click)=\"onDeleteRow(item)\"\n *ocxIfPermission=\"deletePermission\"\n [disabled]=\"!!deleteActionEnabledField && !fieldIsTruthy(item, deleteActionEnabledField)\"\n [attr.name]=\"'data-list-action-button'\"\n ></button>\n </ng-container>\n <ng-container *ngFor=\"let action of inlineListActions$ | async\">\n <ng-container *ngIf=\"(!action.actionVisibleField || fieldIsTruthy(item, action.actionVisibleField))\">\n <button\n *ocxIfPermission=\"action.permission\"\n pButton\n class=\"p-button-rounded p-button-text\"\n [ngClass]=\"action.classes\"\n [icon]=\"action.icon || ''\"\n (click)=\"action.callback(item)\"\n [pTooltip]=\"action.labelKey ? (action.labelKey | translate) : ''\"\n tooltipPosition=\"top\"\n [attr.aria-label]=\"action.labelKey ? (action.labelKey | translate) : ''\"\n [disabled]=\"action.disabled || (!!action.actionEnabledField && !fieldIsTruthy(item, action.actionEnabledField))\"\n ></button>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"hasVisibleOverflowMenuItems(item) | async\">\n <p-menu #menu [model]=\"(overflowMenuItems$ | async) || []\" [popup]=\"true\" appendTo=\"body\"></p-menu>\n <button\n pButton\n class=\"p-button-rounded p-button-text\"\n [icon]=\"'pi pi-ellipsis-v'\"\n (click)=\"toggleOverflowMenu($event, menu, item)\"\n [attr.aria-label]=\"'OCX_DATA_LIST_GRID.MORE_ACTIONS_ARIA_LABEL' | translate\"\n [pTooltip]=\"'OCX_DATA_LIST_GRID.MORE_ACTIONS_TOOLTIP' | translate\"\n tooltipPosition=\"top\"\n ></button>\n </ng-container>\n </div>\n </div>\n <div class=\"text-base font-light my-1\">\n <ng-container\n [ngTemplateOutlet]=\"_listItemSubtitleLines ? _listItemSubtitleLines : defaultListItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n ></ng-container>\n </div>\n <div class=\"flex flex-wrap\">\n <div *ngFor=\"let col of getFilteredColumns()\" class=\"w-12rem my-2 mr-2\">\n <div class=\"font-bold\" [ocxTooltipOnOverflow]=\"col.nameKey | translate\" tooltipPosition=\"top\">\n {{ col.nameKey | translate }}\n </div>\n <div\n [ocxTooltipOnOverflow]=\"col.columnType === columnType.TRANSLATION_KEY ? (resolveFieldData(item,col.id) | translate) : resolveFieldData(item, col.id)\"\n tooltipPosition=\"top\"\n >\n @defer(on viewport;){\n <ng-container\n [ngTemplateOutlet]=\"_listValue ? _listValue: defaultListValue\"\n [ngTemplateOutletContext]=\"{\n rowObject: item,\n column: col,\n columnTemplates: columnTemplates\n }\"\n >\n </ng-container>\n } @placeholder {\n <p-skeleton width=\"5rem\" />\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n<ng-template #defaultListItemSubtitleLines let-item=\"$implicit\">\n <div *ngFor=\"let subtitleLineId of subtitleLineIds\" class=\"subtitleLine text-xl my-3\">\n {{ resolveFieldData(item, subtitleLineId) }}\n </div>\n</ng-template>\n\n<ng-template #defaultListValue let-rowObject=\"rowObject\" let-column=\"column\" let-columnTemplates=\"columnTemplates\">\n <ng-container\n *ngIf=\"columnTemplates[column.id]\"\n [ngTemplateOutlet]=\"columnTemplates[column.id]\"\n [ngTemplateOutletContext]=\"{\n rowObject: rowObject,\n column: column\n }\"\n >\n </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultStringListValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id) }} </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultNumberListValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id) | number }} </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultCustomListValue\" let-rowObject=\"rowObject\" let-column=\"column\"> </ng-template>\n\n<ng-template pTemplate=\"defaultDateListValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id) | date: column.dateFormat ?? 'medium' }} </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultRelativeDateListValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container>\n {{ 'OCX_DATA_TABLE.EDITED' | translate }} {{ resolveFieldData(rowObject, column.id) | timeago }}\n </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultTranslationKeyListValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id) | translate }} </ng-container>\n</ng-template>\n", styles: [".image{width:100%;height:100%}.menu-btn{color:var(--primary-text-color);background-color:var(--primary-color);border:var(--button-border);border-radius:var(--border-radius);padding:var(--button-padding);cursor:pointer;min-width:4rem}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i6.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i7.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i8.DataView, selector: "p-dataView", inputs: ["paginator", "rows", "totalRecords", "pageLinks", "rowsPerPageOptions", "paginatorPosition", "paginatorStyleClass", "alwaysShowPaginator", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showFirstLastIcon", "showPageLinks", "lazy", "lazyLoadOnInit", "emptyMessage", "style", "styleClass", "gridStyleClass", "trackBy", "filterBy", "filterLocale", "loading", "loadingIcon", "first", "sortField", "sortOrder", "value", "layout"], outputs: ["onLazyLoad", "onPage", "onSort", "onChangeLayout"] }, { kind: "component", type: i9.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "component", type: i10.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "directive", type: i11.IfPermissionDirective, selector: "[ocxIfPermission], [ocxIfNotPermission]", inputs: ["ocxIfPermission", "ocxIfNotPermission", "onMissingPermission", "ocxIfPermissionPermissions", "ocxIfNotPermissionPermissions", "ocxIfPermissionElseTemplate", "ocxIfNotPermissionElseTemplate"] }, { kind: "directive", type: i12.TooltipOnOverflowDirective, selector: "[ocxTooltipOnOverflow]", inputs: ["ocxTooltipOnOverflow"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.DecimalPipe, name: "number" }, { kind: "pipe", type: i4.DatePipe, name: "date" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: i13.OcxTimeAgoPipe, name: "timeago" }], deferBlockDependencies: [() => [i4.NgTemplateOutlet], () => [i4.NgTemplateOutlet]] }); }
|
|
454
454
|
}
|
|
455
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.
|
|
455
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: DataListGridComponent, decorators: [{
|
|
456
456
|
type: Component,
|
|
457
457
|
args: [{ selector: 'ocx-data-list-grid', template: "<ng-container *ngIf=\"(displayedPageSize$ | async) as displayedPageSize\">\n <p-dataView\n *ngIf=\"(columnTemplates$ | async) ?? {} as columnTemplates\"\n [value]=\"(displayedItems$ | async) ?? []\"\n [paginator]=\"paginator\"\n [first]=\"page * displayedPageSize\"\n (onPage)=\"onPageChange($event)\"\n [rows]=\"displayedPageSize\"\n [layout]=\"layout\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{{ (totalRecordsOnServer ? currentPageShowingWithTotalOnServerKey : currentPageShowingKey) | translate:params }}\"\n [rowsPerPageOptions]=\"(displayedPageSizes$ | async) ?? []\"\n id=\"dataListGrid_{{name}}\"\n paginatorDropdownAppendTo=\"body\"\n >\n <ng-template #gridItem let-rows pTemplate=\"gridItem\">\n <div class=\"p-grid p-nogutter grid grid-nogutter\">\n <ng-template ngFor let-item [ngForOf]=\"rows\">\n <ng-container\n [ngTemplateOutlet]=\"_gridItem ? _gridItem : defaultGridItem\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n ></ng-container>\n </ng-template>\n </div>\n </ng-template>\n\n <ng-template #listItem let-rows pTemplate=\"listItem\">\n <div class=\"p-grid p-nogutter grid grid-nogutter\">\n <ng-template ngFor let-item [ngForOf]=\"rows\">\n @defer (on viewport; on idle){\n <ng-container\n [ngTemplateOutlet]=\"_listItem ? _listItem : defaultListItem\"\n [ngTemplateOutletContext]=\"{\n item:item,\n columnTemplates: columnTemplates\n }\"\n ></ng-container>\n } @placeholder {\n <div style=\"width: 100%; height: 80px\"></div>\n }\n </ng-template>\n </div>\n </ng-template>\n <ng-template pTemplate=\"empty\">\n <span>{{ emptyResultsMessage || (\"OCX_DATA_LIST_GRID.EMPTY_RESULT\" | translate) }}</span>\n </ng-template>\n </p-dataView>\n</ng-container>\n\n<ng-template #defaultGridItem let-item>\n <div class=\"col-12 lg:col-6 xl:col-4 flex\">\n <div class=\"data-grid-item card flex flex-column justify-content-between w-12 lg:w-11 mb-4 mt-4 align-self-stretch\">\n <div class=\"flex justify-content-center mb-3\">\n <img\n class=\"image\"\n src=\"{{ item.imagePath || (fallbackImagePath$ | async) }}\"\n (error)=\"imgError(item)\"\n alt=\"{{resolveFieldData(item, titleLineId)|| ''}}\"\n />\n </div>\n <div class=\"flex flex-row justify-content-between align-items-center\">\n <div class=\"data-grid-items flex-row\">\n <div class=\"item-name font-medium mr-3 text-2xl\">\n <a [routerLink]=\"\" (click)=\"onViewRow\">{{ resolveFieldData(item, titleLineId) || '' }}</a>\n </div>\n <ng-container\n [ngTemplateOutlet]=\"_gridItemSubtitleLines ? _gridItemSubtitleLines : defaultGridItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n ></ng-container>\n </div>\n <div>\n <p-menu #menu [model]=\"gridMenuItems\" [popup]=\"true\" appendTo=\"body\"></p-menu>\n <button\n pButton\n (click)=\"setSelectedItem(item); updateGridMenuItems(true); menu.toggle($event)\"\n icon=\"pi pi-ellipsis-v\"\n [attr.aria-label]=\"'OCX_DATA_LIST_GRID.MORE_ACTIONS_ARIA_LABEL' | translate\"\n class=\"more-actions-menu-button menu-btn\"\n [attr.name]=\"'data-grid-item-menu-button'\"\n [pTooltip]=\"'OCX_DATA_LIST_GRID.MORE_ACTIONS_TOOLTIP' | translate\"\n tooltipPosition=\"top\"\n ></button>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n<ng-template #defaultGridItemSubtitleLines let-item>\n <div *ngFor=\"let subtitleLineId of subtitleLineIds\" class=\"subtitleLine edit-time text-xl my-3\">\n {{ resolveFieldData(item, subtitleLineId) }}\n </div>\n</ng-template>\n<ng-template #defaultListItem let-item=\"item\" let-columnTemplates=\"columnTemplates\">\n <div class=\"col-12\" *ngIf=\"columnTemplates\">\n <div class=\"data-list-items p-3\">\n <div class=\"item-name-row flex flex-row justify-content-between\">\n <div class=\"item-name mr-3 text-2xl font-medium align-content-center\">\n <span *ngIf=\"titleLineId\">{{ resolveFieldData(item, titleLineId) || '' }}</span>\n </div>\n <div class=\"flex flex-row\">\n <ng-container\n *ngIf=\"viewItemObserved && (!viewActionVisibleField || fieldIsTruthy(item, viewActionVisibleField))\"\n >\n <button\n type=\"button\"\n icon=\"pi pi-eye\"\n pButton\n class=\"p-button-rounded p-button-text mb-1 mr-2 viewListItemButton\"\n [pTooltip]=\"(viewMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.VIEW') | translate\"\n tooltipPosition=\"top\"\n [attr.aria-label]=\"(viewMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.VIEW') | translate\"\n (click)=\"onViewRow(item)\"\n *ocxIfPermission=\"viewPermission\"\n [disabled]=\"!!viewActionEnabledField && !fieldIsTruthy(item, viewActionEnabledField)\"\n [attr.name]=\"'data-list-action-button'\"\n ></button>\n </ng-container>\n <ng-container\n *ngIf=\"editItemObserved && (!editActionVisibleField || fieldIsTruthy(item, editActionVisibleField))\"\n >\n <button\n type=\"button\"\n class=\"p-button-rounded p-button-text mb-1 mr-2 editListItemButton\"\n icon=\"pi pi-pencil\"\n pButton\n [pTooltip]=\"(editMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.EDIT') | translate\"\n tooltipPosition=\"top\"\n [attr.aria-label]=\"(editMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.EDIT') | translate\"\n (click)=\"onEditRow(item)\"\n *ocxIfPermission=\"editPermission\"\n [disabled]=\"!!editActionEnabledField && !fieldIsTruthy(item, editActionEnabledField)\"\n [attr.name]=\"'data-list-action-button'\"\n ></button>\n </ng-container>\n <ng-container\n *ngIf=\"deleteItemObserved && (!deleteActionVisibleField || fieldIsTruthy(item, deleteActionVisibleField))\"\n >\n <button\n type=\"button\"\n icon=\"pi pi-trash\"\n class=\"p-button-rounded p-button-text p-button-danger mb-1 mr-2 deleteListItemButton\"\n pButton\n [pTooltip]=\"(deleteMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.DELETE') | translate\"\n tooltipPosition=\"top\"\n [attr.aria-label]=\"(deleteMenuItemKey || 'OCX_DATA_LIST_GRID.MENU.DELETE') | translate\"\n (click)=\"onDeleteRow(item)\"\n *ocxIfPermission=\"deletePermission\"\n [disabled]=\"!!deleteActionEnabledField && !fieldIsTruthy(item, deleteActionEnabledField)\"\n [attr.name]=\"'data-list-action-button'\"\n ></button>\n </ng-container>\n <ng-container *ngFor=\"let action of inlineListActions$ | async\">\n <ng-container *ngIf=\"(!action.actionVisibleField || fieldIsTruthy(item, action.actionVisibleField))\">\n <button\n *ocxIfPermission=\"action.permission\"\n pButton\n class=\"p-button-rounded p-button-text\"\n [ngClass]=\"action.classes\"\n [icon]=\"action.icon || ''\"\n (click)=\"action.callback(item)\"\n [pTooltip]=\"action.labelKey ? (action.labelKey | translate) : ''\"\n tooltipPosition=\"top\"\n [attr.aria-label]=\"action.labelKey ? (action.labelKey | translate) : ''\"\n [disabled]=\"action.disabled || (!!action.actionEnabledField && !fieldIsTruthy(item, action.actionEnabledField))\"\n ></button>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"hasVisibleOverflowMenuItems(item) | async\">\n <p-menu #menu [model]=\"(overflowMenuItems$ | async) || []\" [popup]=\"true\" appendTo=\"body\"></p-menu>\n <button\n pButton\n class=\"p-button-rounded p-button-text\"\n [icon]=\"'pi pi-ellipsis-v'\"\n (click)=\"toggleOverflowMenu($event, menu, item)\"\n [attr.aria-label]=\"'OCX_DATA_LIST_GRID.MORE_ACTIONS_ARIA_LABEL' | translate\"\n [pTooltip]=\"'OCX_DATA_LIST_GRID.MORE_ACTIONS_TOOLTIP' | translate\"\n tooltipPosition=\"top\"\n ></button>\n </ng-container>\n </div>\n </div>\n <div class=\"text-base font-light my-1\">\n <ng-container\n [ngTemplateOutlet]=\"_listItemSubtitleLines ? _listItemSubtitleLines : defaultListItemSubtitleLines\"\n [ngTemplateOutletContext]=\"{$implicit:item}\"\n ></ng-container>\n </div>\n <div class=\"flex flex-wrap\">\n <div *ngFor=\"let col of getFilteredColumns()\" class=\"w-12rem my-2 mr-2\">\n <div class=\"font-bold\" [ocxTooltipOnOverflow]=\"col.nameKey | translate\" tooltipPosition=\"top\">\n {{ col.nameKey | translate }}\n </div>\n <div\n [ocxTooltipOnOverflow]=\"col.columnType === columnType.TRANSLATION_KEY ? (resolveFieldData(item,col.id) | translate) : resolveFieldData(item, col.id)\"\n tooltipPosition=\"top\"\n >\n @defer(on viewport;){\n <ng-container\n [ngTemplateOutlet]=\"_listValue ? _listValue: defaultListValue\"\n [ngTemplateOutletContext]=\"{\n rowObject: item,\n column: col,\n columnTemplates: columnTemplates\n }\"\n >\n </ng-container>\n } @placeholder {\n <p-skeleton width=\"5rem\" />\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n<ng-template #defaultListItemSubtitleLines let-item=\"$implicit\">\n <div *ngFor=\"let subtitleLineId of subtitleLineIds\" class=\"subtitleLine text-xl my-3\">\n {{ resolveFieldData(item, subtitleLineId) }}\n </div>\n</ng-template>\n\n<ng-template #defaultListValue let-rowObject=\"rowObject\" let-column=\"column\" let-columnTemplates=\"columnTemplates\">\n <ng-container\n *ngIf=\"columnTemplates[column.id]\"\n [ngTemplateOutlet]=\"columnTemplates[column.id]\"\n [ngTemplateOutletContext]=\"{\n rowObject: rowObject,\n column: column\n }\"\n >\n </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultStringListValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id) }} </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultNumberListValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id) | number }} </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultCustomListValue\" let-rowObject=\"rowObject\" let-column=\"column\"> </ng-template>\n\n<ng-template pTemplate=\"defaultDateListValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id) | date: column.dateFormat ?? 'medium' }} </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultRelativeDateListValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container>\n {{ 'OCX_DATA_TABLE.EDITED' | translate }} {{ resolveFieldData(rowObject, column.id) | timeago }}\n </ng-container>\n</ng-template>\n\n<ng-template pTemplate=\"defaultTranslationKeyListValue\" let-rowObject=\"rowObject\" let-column=\"column\">\n <ng-container> {{ resolveFieldData(rowObject, column.id) | translate }} </ng-container>\n</ng-template>\n", styles: [".image{width:100%;height:100%}.menu-btn{color:var(--primary-text-color);background-color:var(--primary-color);border:var(--button-border);border-radius:var(--border-radius);padding:var(--button-padding);cursor:pointer;min-width:4rem}\n"] }]
|
|
458
458
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
@@ -602,4 +602,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
|
|
|
602
602
|
}], parentTemplates: [{
|
|
603
603
|
type: Input
|
|
604
604
|
}] } });
|
|
605
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saXN0LWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWFjY2VsZXJhdG9yL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWxpc3QtZ3JpZC9kYXRhLWxpc3QtZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtbGlzdC1ncmlkL2RhdGEtbGlzdC1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFFZixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsU0FBUyxFQUVULE1BQU0sRUFHTixZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3hDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0NBQXNDLENBQUE7QUFFbkYsT0FBTyxFQUFZLFVBQVUsRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFakUsT0FBTyxFQUFFLGVBQWUsRUFBYyxhQUFhLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ3JHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUkxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7QUEwQi9ELE1BQU0sT0FBTyxxQkFB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Q0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQWlDSCxTQUFTO3NCQURaLGVBQWU7dUJBQUMsYUFBYTtnQkFTMUIsYUFBYTtzQkFEaEIsWUFBWTt1QkFBQyxhQUFhO2dCQVN2QixlQUFlO3NCQURsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRG9DaGVjayxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgTE9DQUxFX0lELFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnXG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UsIFVzZXJTZXJ2aWNlIH0gZnJvbSAnQG9uZWN4L2FuZ3VsYXItaW50ZWdyYXRpb24taW50ZXJmYWNlJ1xuaW1wb3J0IHsgTWZlSW5mbyB9IGZyb20gJ0BvbmVjeC9pbnRlZ3JhdGlvbi1pbnRlcmZhY2UnXG5pbXBvcnQgeyBNZW51SXRlbSwgUHJpbWVJY29ucywgUHJpbWVUZW1wbGF0ZSB9IGZyb20gJ3ByaW1lbmcvYXBpJ1xuaW1wb3J0IHsgTWVudSB9IGZyb20gJ3ByaW1lbmcvbWVudSdcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lLCBmaXJzdCwgbWFwLCBtZXJnZU1hcCB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWwvY29sdW1uLXR5cGUubW9kZWwnXG5pbXBvcnQgeyBEYXRhQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGF0YS1hY3Rpb24nXG5pbXBvcnQgeyBEYXRhU29ydERpcmVjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVsL2RhdGEtc29ydC1kaXJlY3Rpb24nXG5pbXBvcnQgeyBEYXRhVGFibGVDb2x1bW4gfSBmcm9tICcuLi8uLi9tb2RlbC9kYXRhLXRhYmxlLWNvbHVtbi5tb2RlbCdcbmltcG9ydCB7IE9iamVjdFV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbHMvb2JqZWN0dXRpbHMnXG5pbXBvcnQgeyBEYXRhU29ydEJhc2UgfSBmcm9tICcuLi9kYXRhLXNvcnQtYmFzZS9kYXRhLXNvcnQtYmFzZSdcbmltcG9ydCB7IFJvdyB9IGZyb20gJy4uL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQnXG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuLi8uLi9tb2RlbC9maWx0ZXIubW9kZWwnXG5cbmV4cG9ydCB0eXBlIExpc3RHcmlkRGF0YSA9IHtcbiAgaWQ6IHN0cmluZyB8IG51bWJlclxuICBpbWFnZVBhdGg6IHN0cmluZyB8IG51bWJlclxuICBbY29sdW1uSWQ6IHN0cmluZ106IHVua25vd25cbn1cblxudHlwZSBSb3dMaXN0R3JpZERhdGEgPSBMaXN0R3JpZERhdGEgJiBSb3dcblxuZXhwb3J0IGludGVyZmFjZSBMaXN0R3JpZERhdGFNZW51SXRlbSBleHRlbmRzIE1lbnVJdGVtIHtcbiAgcGVybWlzc2lvbjogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUxpc3RHcmlkQ29tcG9uZW50U3RhdGUge1xuICBhY3RpdmVQYWdlPzogbnVtYmVyXG4gIHBhZ2VTaXplPzogbnVtYmVyXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ29jeC1kYXRhLWxpc3QtZ3JpZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLWxpc3QtZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGEtbGlzdC1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIERhdGFMaXN0R3JpZENvbXBvbmVudCBleHRlbmRzIERhdGFTb3J0QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgRG9DaGVjaywgQWZ0ZXJDb250ZW50SW5pdCB7XG4gIEBJbnB1dCgpIHRpdGxlTGluZUlkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgc3VidGl0bGVMaW5lSWRzOiBzdHJpbmdbXSA9IFtdXG4gIEBJbnB1dCgpIGNsaWVudFNpZGVTb3J0aW5nID0gdHJ1ZVxuICBASW5wdXQoKSBjbGllbnRTaWRlRmlsdGVyaW5nID0gdHJ1ZVxuICBASW5wdXQoKSBzb3J0U3RhdGVzOiBEYXRhU29ydERpcmVjdGlvbltdID0gW11cblxuICBkaXNwbGF5ZWRQYWdlU2l6ZXMkOiBPYnNlcnZhYmxlPChudW1iZXIgfCB7IHNob3dBbGw6IHN0cmluZyB9KVtdPlxuICBfcGFnZVNpemVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8KG51bWJlciB8IHsgc2hvd0FsbDogc3RyaW5nIH0pW10+KFsxMCwgMjUsIDUwXSlcbiAgQElucHV0KClcbiAgZ2V0IHBhZ2VTaXplcygpOiAobnVtYmVyIHwgeyBzaG93QWxsOiBzdHJpbmcgfSlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VTaXplcyQuZ2V0VmFsdWUoKVxuICB9XG4gIHNldCBwYWdlU2l6ZXModmFsdWU6IChudW1iZXIgfCB7IHNob3dBbGw6IHN0cmluZyB9KVtdKSB7XG4gICAgdGhpcy5fcGFnZVNpemVzJC5uZXh0KHZhbHVlKVxuICB9XG5cbiAgZGlzcGxheWVkUGFnZVNpemUkOiBPYnNlcnZhYmxlPG51bWJlcj5cbiAgX3BhZ2VTaXplJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIEBJbnB1dCgpXG4gIGdldCBwYWdlU2l6ZSgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9wYWdlU2l6ZSQuZ2V0VmFsdWUoKVxuICB9XG4gIHNldCBwYWdlU2l6ZSh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcGFnZVNpemUkLm5leHQodmFsdWUpXG4gIH1cblxuICBASW5wdXQoKSBlbXB0eVJlc3VsdHNNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZmFsbGJhY2tJbWFnZSA9ICdwbGFjZWhvbGRlci5wbmcnXG4gIEBJbnB1dCgpIGxheW91dDogJ2dyaWQnIHwgJ2xpc3QnID0gJ2dyaWQnXG4gIEBJbnB1dCgpIHZpZXdQZXJtaXNzaW9uOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBlZGl0UGVybWlzc2lvbjogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZGVsZXRlUGVybWlzc2lvbjogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZGVsZXRlQWN0aW9uVmlzaWJsZUZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZGVsZXRlQWN0aW9uRW5hYmxlZEZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgdmlld0FjdGlvblZpc2libGVGaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIHZpZXdBY3Rpb25FbmFibGVkRmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBlZGl0QWN0aW9uVmlzaWJsZUZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZWRpdEFjdGlvbkVuYWJsZWRGaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIHZpZXdNZW51SXRlbUtleTogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIGVkaXRNZW51SXRlbUtleTogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIGRlbGV0ZU1lbnVJdGVtS2V5OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgcGFnaW5hdG9yID0gdHJ1ZVxuICBASW5wdXQoKSBwYWdlID0gMFxuICBjb2x1bW5UZW1wbGF0ZXMkOiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIFRlbXBsYXRlUmVmPGFueT4gfCBudWxsPj4gfCB1bmRlZmluZWRcbiAgX2NvbHVtbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRhVGFibGVDb2x1bW5bXT4oW10pXG4gIEBJbnB1dCgpXG4gIGdldCBjb2x1bW5zKCk6IERhdGFUYWJsZUNvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucyQuZ2V0VmFsdWUoKVxuICB9XG4gIHNldCBjb2x1bW5zKHZhbHVlOiBEYXRhVGFibGVDb2x1bW5bXSkge1xuICAgIHRoaXMuX2NvbHVtbnMkLm5leHQodmFsdWUpXG4gICAgY29uc3Qgb2JzID0gdmFsdWUubWFwKChjKSA9PiB0aGlzLmdldFRlbXBsYXRlKGMpKVxuICAgIHRoaXMuY29sdW1uVGVtcGxhdGVzJCA9IGNvbWJpbmVMYXRlc3Qob2JzKS5waXBlKFxuICAgICAgbWFwKCh2YWx1ZXMpID0+IE9iamVjdC5mcm9tRW50cmllcyh2YWx1ZS5tYXAoKGMsIGkpID0+IFtjLmlkLCB2YWx1ZXNbaV1dKSkpLFxuICAgICAgZGVib3VuY2VUaW1lKDUwKVxuICAgIClcbiAgfVxuICBASW5wdXQoKSBuYW1lID0gJydcbiAgQElucHV0KClcbiAgZ2V0IHRvdGFsUmVjb3Jkc09uU2VydmVyKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zWyd0b3RhbFJlY29yZHNPblNlcnZlciddID8gTnVtYmVyKHRoaXMucGFyYW1zWyd0b3RhbFJlY29yZHNPblNlcnZlciddKSA6IHVuZGVmaW5lZFxuICB9XG4gIHNldCB0b3RhbFJlY29yZHNPblNlcnZlcih2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5wYXJhbXNbJ3RvdGFsUmVjb3Jkc09uU2VydmVyJ10gPSB2YWx1ZT8udG9TdHJpbmcoKSA/PyAnMCdcbiAgfVxuICBASW5wdXQoKSBjdXJyZW50UGFnZVNob3dpbmdLZXkgPSAnT0NYX0RBVEFfVEFCTEUuU0hPV0lORydcbiAgQElucHV0KCkgY3VycmVudFBhZ2VTaG93aW5nV2l0aFRvdGFsT25TZXJ2ZXJLZXkgPSAnT0NYX0RBVEFfVEFCTEUuU0hPV0lOR19XSVRIX1RPVEFMX09OX1NFUlZFUidcbiAgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgIGN1cnJlbnRQYWdlOiAne2N1cnJlbnRQYWdlfScsXG4gICAgdG90YWxQYWdlczogJ3t0b3RhbFBhZ2VzfScsXG4gICAgcm93czogJ3tyb3dzfScsXG4gICAgZmlyc3Q6ICd7Zmlyc3R9JyxcbiAgICBsYXN0OiAne2xhc3R9JyxcbiAgICB0b3RhbFJlY29yZHM6ICd7dG90YWxSZWNvcmRzfScsXG4gIH1cblxuICBfZGF0YSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJvd0xpc3RHcmlkRGF0YVtdPihbXSlcbiAgQElucHV0KClcbiAgZ2V0IGRhdGEoKTogUm93TGlzdEdyaWREYXRhW10ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhJC5nZXRWYWx1ZSgpXG4gIH1cbiAgc2V0IGRhdGEodmFsdWU6IFJvd0xpc3RHcmlkRGF0YVtdKSB7XG4gICAgIXRoaXMuX2RhdGEkLmdldFZhbHVlKCkubGVuZ3RoID8/IHRoaXMucmVzZXRQYWdlKClcbiAgICB0aGlzLl9vcmlnaW5hbERhdGEgPSBbLi4udmFsdWVdXG4gICAgdGhpcy5fZGF0YSQubmV4dChbLi4udmFsdWVdKVxuICB9XG4gIF9maWx0ZXJzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RmlsdGVyW10+KFtdKVxuICBASW5wdXQoKVxuICBnZXQgZmlsdGVycygpOiBGaWx0ZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMkLmdldFZhbHVlKClcbiAgfVxuICBzZXQgZmlsdGVycyh2YWx1ZTogRmlsdGVyW10pIHtcbiAgICAhdGhpcy5fZmlsdGVycyQuZ2V0VmFsdWUoKS5sZW5ndGggPz8gdGhpcy5yZXNldFBhZ2UoKVxuICAgIHRoaXMuX2ZpbHRlcnMkLm5leHQodmFsdWUpXG4gIH1cbiAgX29yaWdpbmFsRGF0YTogUm93TGlzdEdyaWREYXRhW10gPSBbXVxuICBfc29ydERpcmVjdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGFTb3J0RGlyZWN0aW9uPihEYXRhU29ydERpcmVjdGlvbi5OT05FKVxuICBASW5wdXQoKVxuICBnZXQgc29ydERpcmVjdGlvbigpOiBEYXRhU29ydERpcmVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnREaXJlY3Rpb24kLmdldFZhbHVlKClcbiAgfVxuICBzZXQgc29ydERpcmVjdGlvbih2YWx1ZTogRGF0YVNvcnREaXJlY3Rpb24pIHtcbiAgICBpZiAodmFsdWUgPT09IERhdGFTb3J0RGlyZWN0aW9uLk5PTkUpIHtcbiAgICAgIHRoaXMuX2RhdGEkLm5leHQoWy4uLnRoaXMuX29yaWdpbmFsRGF0YV0pXG4gICAgfVxuICAgIHRoaXMuX3NvcnREaXJlY3Rpb24kLm5leHQodmFsdWUpXG4gIH1cbiAgX3NvcnRGaWVsZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpXG4gIEBJbnB1dCgpXG4gIGdldCBzb3J0RmllbGQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcz8uX3NvcnRGaWVsZCQuZ2V0VmFsdWUoKVxuICB9XG4gIHNldCBzb3J0RmllbGQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3NvcnRGaWVsZCQubmV4dCh2YWx1ZSlcbiAgfVxuXG4gIEBJbnB1dCgpIGdyaWRJdGVtU3VidGl0bGVMaW5lc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ2dyaWRJdGVtU3VidGl0bGVMaW5lcycpIGdyaWRJdGVtU3VidGl0bGVMaW5lc0NoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9ncmlkSXRlbVN1YnRpdGxlTGluZXMoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzVGVtcGxhdGUgfHwgdGhpcy5ncmlkSXRlbVN1YnRpdGxlTGluZXNDaGlsZFRlbXBsYXRlXG4gIH1cblxuICBASW5wdXQoKSBsaXN0SXRlbVN1YnRpdGxlTGluZXNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdsaXN0SXRlbVN1YnRpdGxlTGluZXMnKSBsaXN0SXRlbVN1YnRpdGxlTGluZXNDaGlsZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxpc3RJdGVtU3VidGl0bGVMaW5lc1RlbXBsYXRlIHx8IHRoaXMubGlzdEl0ZW1TdWJ0aXRsZUxpbmVzQ2hpbGRUZW1wbGF0ZVxuICB9XG5cbiAgQElucHV0KCkgbGlzdEl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdsaXN0SXRlbScpIGxpc3RJdGVtQ2hpbGRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBnZXQgX2xpc3RJdGVtKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxpc3RJdGVtVGVtcGxhdGUgfHwgdGhpcy5saXN0SXRlbUNoaWxkVGVtcGxhdGVcbiAgfVxuXG4gIEBJbnB1dCgpIGdyaWRJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnZ3JpZEl0ZW0nKSBncmlkSXRlbUNoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9ncmlkSXRlbSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5ncmlkSXRlbVRlbXBsYXRlIHx8IHRoaXMuZ3JpZEl0ZW1DaGlsZFRlbXBsYXRlXG4gIH1cblxuICBASW5wdXQoKSBsaXN0VmFsdWVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdsaXN0VmFsdWUnKSBsaXN0VmFsdWVDaGlsZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfbGlzdFZhbHVlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxpc3RWYWx1ZVRlbXBsYXRlIHx8IHRoaXMubGlzdFZhbHVlQ2hpbGRUZW1wbGF0ZVxuICB9XG5cbiAgQElucHV0KCkgdHJhbnNsYXRpb25LZXlMaXN0VmFsdWVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCd0cmFuc2xhdGlvbktleUxpc3RWYWx1ZScpIHRyYW5zbGF0aW9uS2V5TGlzdFZhbHVlQ2hpbGRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBnZXQgX3RyYW5zbGF0aW9uS2V5TGlzdFZhbHVlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uS2V5TGlzdFZhbHVlVGVtcGxhdGUgfHwgdGhpcy50cmFuc2xhdGlvbktleUxpc3RWYWx1ZUNoaWxkVGVtcGxhdGVcbiAgfVxuXG4gIEBJbnB1dCgpIG51bWJlckxpc3RWYWx1ZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ251bWJlckxpc3RWYWx1ZScpIG51bWJlckxpc3RWYWx1ZUNoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9udW1iZXJMaXN0VmFsdWUoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubnVtYmVyTGlzdFZhbHVlVGVtcGxhdGUgfHwgdGhpcy5udW1iZXJMaXN0VmFsdWVDaGlsZFRlbXBsYXRlXG4gIH1cblxuICBASW5wdXQoKSByZWxhdGl2ZURhdGVMaXN0VmFsdWVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdyZWxhdGl2ZURhdGVMaXN0VmFsdWUnKSByZWxhdGl2ZURhdGVMaXN0VmFsdWVDaGlsZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfcmVsYXRpdmVEYXRlTGlzdFZhbHVlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlbGF0aXZlRGF0ZUxpc3RWYWx1ZVRlbXBsYXRlIHx8IHRoaXMucmVsYXRpdmVEYXRlTGlzdFZhbHVlQ2hpbGRUZW1wbGF0ZVxuICB9XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlbW92ZWQgYW5kIGluc3RlYWQgdG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBvZiBhIHNwZWNpZmljIGNvbHVtblxuICAgKiB1c2UgdGhlIG5ldyBhcHByb2FjaCBpbnN0ZWFkIGJ5IGZvbGxvd2luZyB0aGUgbmFtaW5nIGNvbnZlbnRpb24gY29sdW1uIGlkICsgSWRMaXN0VmFsdWVcbiAgICogZS5nLiBmb3IgYSBjb2x1bW4gd2l0aCB0aGUgaWQgJ3N0YXR1cycgdXNlIHBUZW1wbGF0ZT1cInN0YXR1c0lkTGlzdFZhbHVlXCJcbiAgICovXG4gIEBJbnB1dCgpIGN1c3RvbUxpc3RWYWx1ZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlbW92ZWQgYW5kIGluc3RlYWQgdG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBvZiBhIHNwZWNpZmljIGNvbHVtblxuICAgKiB1c2UgdGhlIG5ldyBhcHByb2FjaCBpbnN0ZWFkIGJ5IGZvbGxvd2luZyB0aGUgbmFtaW5nIGNvbnZlbnRpb24gY29sdW1uIGlkICsgSWRMaXN0VmFsdWVcbiAgICogZS5nLiBmb3IgYSBjb2x1bW4gd2l0aCB0aGUgaWQgJ3N0YXR1cycgdXNlIHBUZW1wbGF0ZT1cInN0YXR1c0lkTGlzdFZhbHVlXCJcbiAgICovXG4gIEBDb250ZW50Q2hpbGQoJ2N1c3RvbUxpc3RWYWx1ZScpIGN1c3RvbUxpc3RWYWx1ZUNoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9jdXN0b21MaXN0VmFsdWUoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tTGlzdFZhbHVlVGVtcGxhdGUgfHwgdGhpcy5jdXN0b21MaXN0VmFsdWVDaGlsZFRlbXBsYXRlXG4gIH1cblxuICBASW5wdXQoKSBzdHJpbmdMaXN0VmFsdWVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdzdHJpbmdMaXN0VmFsdWUnKSBzdHJpbmdMaXN0VmFsdWVDaGlsZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfc3RyaW5nTGlzdFZhbHVlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnN0cmluZ0xpc3RWYWx1ZVRlbXBsYXRlIHx8IHRoaXMuc3RyaW5nTGlzdFZhbHVlQ2hpbGRUZW1wbGF0ZVxuICB9XG5cbiAgQElucHV0KCkgZGF0ZUxpc3RWYWx1ZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ2RhdGVMaXN0VmFsdWUnKSBkYXRlTGlzdFZhbHVlQ2hpbGRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBnZXQgX2RhdGVMaXN0VmFsdWUoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZUxpc3RWYWx1ZVRlbXBsYXRlIHx8IHRoaXMuZGF0ZUxpc3RWYWx1ZUNoaWxkVGVtcGxhdGVcbiAgfVxuXG4gIGlubGluZUxpc3RBY3Rpb25zJDogT2JzZXJ2YWJsZTxEYXRhQWN0aW9uW10+XG4gIG92ZXJmbG93TGlzdEFjdGlvbnMkOiBPYnNlcnZhYmxlPERhdGFBY3Rpb25bXT5cbiAgb3ZlcmZsb3dNZW51SXRlbXMkOiBPYnNlcnZhYmxlPE1lbnVJdGVtW10+XG4gIGN1cnJlbnRNZW51Um93JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Um93IHwgbnVsbD4obnVsbClcbiAgX2FkZGl0aW9uYWxBY3Rpb25zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0YUFjdGlvbltdPihbXSlcbiAgQElucHV0KClcbiAgZ2V0IGFkZGl0aW9uYWxBY3Rpb25zKCk6IERhdGFBY3Rpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZGl0aW9uYWxBY3Rpb25zJC5nZXRWYWx1ZSgpXG4gIH1cbiAgc2V0IGFkZGl0aW9uYWxBY3Rpb25zKHZhbHVlOiBEYXRhQWN0aW9uW10pIHtcbiAgICB0aGlzLl9hZGRpdGlvbmFsQWN0aW9ucyQubmV4dCh2YWx1ZSlcbiAgICB0aGlzLnVwZGF0ZUdyaWRNZW51SXRlbXMoKVxuICB9XG5cbiAgQE91dHB1dCgpIHZpZXdJdGVtID0gbmV3IEV2ZW50RW1pdHRlcjxMaXN0R3JpZERhdGE+KClcbiAgQE91dHB1dCgpIGVkaXRJdGVtID0gbmV3IEV2ZW50RW1pdHRlcjxMaXN0R3JpZERhdGE+KClcbiAgQE91dHB1dCgpIGRlbGV0ZUl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPExpc3RHcmlkRGF0YT4oKVxuICBAT3V0cHV0KCkgcGFnZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKVxuICBAT3V0cHV0KCkgcGFnZVNpemVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KClcbiAgQE91dHB1dCgpIGNvbXBvbmVudFN0YXRlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YUxpc3RHcmlkQ29tcG9uZW50U3RhdGU+KClcblxuICBnZXQgdmlld0l0ZW1PYnNlcnZlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBkdiA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdEYXRhVmlld0NvbXBvbmVudCcsIG51bGwpXG4gICAgcmV0dXJuIGR2Py52aWV3SXRlbU9ic2VydmVkIHx8IGR2Py52aWV3SXRlbS5vYnNlcnZlZCB8fCB0aGlzLnZpZXdJdGVtLm9ic2VydmVkXG4gIH1cbiAgZ2V0IGVkaXRJdGVtT2JzZXJ2ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZHYgPSB0aGlzLmluamVjdG9yLmdldCgnRGF0YVZpZXdDb21wb25lbnQnLCBudWxsKVxuICAgIHJldHVybiBkdj8uZWRpdEl0ZW1PYnNlcnZlZCB8fCBkdj8uZWRpdEl0ZW0ub2JzZXJ2ZWQgfHwgdGhpcy5lZGl0SXRlbS5vYnNlcnZlZFxuICB9XG4gIGdldCBkZWxldGVJdGVtT2JzZXJ2ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZHYgPSB0aGlzLmluamVjdG9yLmdldCgnRGF0YVZpZXdDb21wb25lbnQnLCBudWxsKVxuICAgIHJldHVybiBkdj8uZGVsZXRlSXRlbU9ic2VydmVkIHx8IGR2Py5kZWxldGVJdGVtLm9ic2VydmVkIHx8IHRoaXMuZGVsZXRlSXRlbS5vYnNlcnZlZFxuICB9XG5cbiAgZ2V0IHNvcnREaXJlY3Rpb25OdW1iZXIoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5zb3J0RGlyZWN0aW9uID09PSBEYXRhU29ydERpcmVjdGlvbi5BU0NFTkRJTkcpIHJldHVybiAxXG4gICAgaWYgKHRoaXMuc29ydERpcmVjdGlvbiA9PT0gRGF0YVNvcnREaXJlY3Rpb24uREVTQ0VORElORykgcmV0dXJuIC0xXG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIHNob3dNZW51ID0gZmFsc2VcbiAgZ3JpZE1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdXG4gIHNlbGVjdGVkSXRlbTogTGlzdEdyaWREYXRhIHwgdW5kZWZpbmVkXG4gIG9ic2VydmVkT3V0cHV0cyA9IDBcblxuICBkaXNwbGF5ZWRJdGVtcyQ6IE9ic2VydmFibGU8dW5rbm93bltdPiB8IHVuZGVmaW5lZFxuICBmYWxsYmFja0ltYWdlUGF0aCQhOiBPYnNlcnZhYmxlPHN0cmluZz5cblxuICB0ZW1wbGF0ZXMkOiBCZWhhdmlvclN1YmplY3Q8UXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+IHwgdW5kZWZpbmVkPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgUXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKVxuICBAQ29udGVudENoaWxkcmVuKFByaW1lVGVtcGxhdGUpXG4gIHNldCB0ZW1wbGF0ZXModmFsdWU6IFF1ZXJ5TGlzdDxQcmltZVRlbXBsYXRlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMudGVtcGxhdGVzJC5uZXh0KHZhbHVlKVxuICB9XG5cbiAgdmlld1RlbXBsYXRlcyQ6IEJlaGF2aW9yU3ViamVjdDxRdWVyeUxpc3Q8UHJpbWVUZW1wbGF0ZT4gfCB1bmRlZmluZWQ+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBRdWVyeUxpc3Q8UHJpbWVUZW1wbGF0ZT4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpXG4gIEBWaWV3Q2hpbGRyZW4oUHJpbWVUZW1wbGF0ZSlcbiAgc2V0IHZpZXdUZW1wbGF0ZXModmFsdWU6IFF1ZXJ5TGlzdDxQcmltZVRlbXBsYXRlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMudmlld1RlbXBsYXRlcyQubmV4dCh2YWx1ZSlcbiAgfVxuXG4gIHBhcmVudFRlbXBsYXRlcyQ6IEJlaGF2aW9yU3ViamVjdDxRdWVyeUxpc3Q8UHJpbWVUZW1wbGF0ZT4gfCBudWxsIHwgdW5kZWZpbmVkPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgUXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+IHwgbnVsbCB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZClcbiAgQElucHV0KClcbiAgc2V0IHBhcmVudFRlbXBsYXRlcyh2YWx1ZTogUXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+IHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMucGFyZW50VGVtcGxhdGVzJC5uZXh0KHZhbHVlKVxuICB9XG5cbiAgY29sdW1uVHlwZSA9IENvbHVtblR5cGVcbiAgdGVtcGxhdGVzT2JzZXJ2YWJsZXM6IFJlY29yZDxzdHJpbmcsIE9ic2VydmFibGU8VGVtcGxhdGVSZWY8YW55PiB8IG51bGw+PiA9IHt9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChMT0NBTEVfSUQpIGxvY2FsZTogc3RyaW5nLFxuICAgIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGFwcFN0YXRlU2VydmljZTogQXBwU3RhdGVTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGxvY2FsZSwgdHJhbnNsYXRlU2VydmljZSlcbiAgICB0aGlzLm5hbWUgPSB0aGlzLm5hbWUgfHwgdGhpcy5yb3V0ZXIudXJsLnJlcGxhY2UoL1teQS1aYS16MC05XS8sICdfJylcbiAgICB0aGlzLmZhbGxiYWNrSW1hZ2VQYXRoJCA9IHRoaXMuYXBwU3RhdGVTZXJ2aWNlLmN1cnJlbnRNZmUkLnBpcGUoXG4gICAgICBtYXAoKGN1cnJlbnRNZmUpID0+IHRoaXMuZ2V0RmFsbGJhY2tJbWFnZVBhdGgoY3VycmVudE1mZSkpXG4gICAgKVxuICAgIHRoaXMuZGlzcGxheWVkUGFnZVNpemVzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuX3BhZ2VTaXplcyQsIHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQoJ09DWF9EQVRBX1RBQkxFLkFMTCcpXSkucGlwZShcbiAgICAgIG1hcCgoW3BhZ2VTaXplcywgdHJhbnNsYXRpb25dKSA9PiBwYWdlU2l6ZXMuY29uY2F0KHsgc2hvd0FsbDogdHJhbnNsYXRpb24gfSkpXG4gICAgKVxuICAgIHRoaXMuZGlzcGxheWVkUGFnZVNpemUkID0gY29tYmluZUxhdGVzdChbdGhpcy5fcGFnZVNpemUkLCB0aGlzLl9wYWdlU2l6ZXMkXSkucGlwZShcbiAgICAgIG1hcCgoW3BhZ2VTaXplLCBwYWdlU2l6ZXNdKSA9PiBwYWdlU2l6ZSA/PyBwYWdlU2l6ZXMuZmluZCgodmFsKTogdmFsIGlzIG51bWJlciA9PiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJykgPz8gNTApXG4gICAgKVxuICAgIHRoaXMuaW5saW5lTGlzdEFjdGlvbnMkID0gdGhpcy5fYWRkaXRpb25hbEFjdGlvbnMkLnBpcGUoXG4gICAgICBtYXAoKGFjdGlvbnMpID0+IGFjdGlvbnMuZmlsdGVyKChhY3Rpb24pID0+ICFhY3Rpb24uc2hvd0FzT3ZlcmZsb3cpKVxuICAgIClcbiAgICB0aGlzLm92ZXJmbG93TGlzdEFjdGlvbnMkID0gdGhpcy5fYWRkaXRpb25hbEFjdGlvbnMkLnBpcGUoXG4gICAgICBtYXAoKGFjdGlvbnMpID0+IGFjdGlvbnMuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbi5zaG93QXNPdmVyZmxvdykpXG4gICAgKVxuICAgIHRoaXMub3ZlcmZsb3dNZW51SXRlbXMkID0gY29tYmluZUxhdGVzdChbdGhpcy5vdmVyZmxvd0xpc3RBY3Rpb25zJCwgdGhpcy5jdXJyZW50TWVudVJvdyRdKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoKFthY3Rpb25zLCByb3ddKSA9PlxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KFsuLi5hY3Rpb25zLm1hcCgoYSkgPT4gYS5sYWJlbEtleSB8fCAnJyldKS5waXBlKFxuICAgICAgICAgIG1hcCgodHJhbnNsYXRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uc1xuICAgICAgICAgICAgICAuZmlsdGVyKChhKSA9PiB0aGlzLnVzZXJTZXJ2aWNlLmhhc1Blcm1pc3Npb24oYS5wZXJtaXNzaW9uKSlcbiAgICAgICAgICAgICAgLm1hcCgoYSkgPT4gKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogdHJhbnNsYXRpb25zW2EubGFiZWxLZXkgfHwgJyddLFxuICAgICAgICAgICAgICAgIGljb246IGEuaWNvbixcbiAgICAgICAgICAgICAgICBzdHlsZUNsYXNzOiAoYS5jbGFzc2VzIHx8IFtdKS5qb2luKCcgJyksXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGEuZGlzYWJsZWQgfHwgKCEhYS5hY3Rpb25FbmFibGVkRmllbGQgJiYgIXRoaXMuZmllbGRJc1RydXRoeShyb3csIGEuYWN0aW9uRW5hYmxlZEZpZWxkKSksXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogIWEuYWN0aW9uVmlzaWJsZUZpZWxkIHx8IHRoaXMuZmllbGRJc1RydXRoeShyb3csIGEuYWN0aW9uVmlzaWJsZUZpZWxkKSxcbiAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiBhLmNhbGxiYWNrKHJvdyksXG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIH1cblxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgY29uc3Qgb2JzZXJ2ZWRPdXRwdXRzID0gPGFueT50aGlzLnZpZXdJdGVtLm9ic2VydmVkICsgPGFueT50aGlzLmRlbGV0ZUl0ZW0ub2JzZXJ2ZWQgKyA8YW55PnRoaXMuZWRpdEl0ZW0ub2JzZXJ2ZWRcbiAgICBpZiAodGhpcy5vYnNlcnZlZE91dHB1dHMgIT09IG9ic2VydmVkT3V0cHV0cykge1xuICAgICAgdGhpcy51cGRhdGVHcmlkTWVudUl0ZW1zKClcbiAgICAgIHRoaXMub2JzZXJ2ZWRPdXRwdXRzID0gb2JzZXJ2ZWRPdXRwdXRzXG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwbGF5ZWRJdGVtcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLl9kYXRhJCwgdGhpcy5fZmlsdGVycyQsIHRoaXMuX3NvcnRGaWVsZCQsIHRoaXMuX3NvcnREaXJlY3Rpb24kXSkucGlwZShcbiAgICAgIG1lcmdlTWFwKChwYXJhbXMpID0+IHRoaXMudHJhbnNsYXRlSXRlbXMocGFyYW1zLCB0aGlzLmNvbHVtbnMsIHRoaXMuY2xpZW50U2lkZUZpbHRlcmluZywgdGhpcy5jbGllbnRTaWRlU29ydGluZykpLFxuICAgICAgbWFwKChwYXJhbXMpID0+IHRoaXMuZmlsdGVySXRlbXMocGFyYW1zLCB0aGlzLmNsaWVudFNpZGVGaWx0ZXJpbmcpKSxcbiAgICAgIG1hcCgocGFyYW1zKSA9PiB0aGlzLnNvcnRJdGVtcyhwYXJhbXMsIHRoaXMuY29sdW1ucywgdGhpcy5jbGllbnRTaWRlU29ydGluZykpLFxuICAgICAgbWFwKChbaXRlbXNdKSA9PiBpdGVtcylcbiAgICApXG5cbiAgICB0aGlzLnNob3dNZW51ID1cbiAgICAgICghIXRoaXMudmlld1Blcm1pc3Npb24gJiYgdGhpcy51c2VyU2VydmljZS5oYXNQZXJtaXNzaW9uKHRoaXMudmlld1Blcm1pc3Npb24pKSB8fFxuICAgICAgKCEhdGhpcy5lZGl0UGVybWlzc2lvbiAmJiB0aGlzLnVzZXJTZXJ2aWNlLmhhc1Blcm1pc3Npb24odGhpcy5lZGl0UGVybWlzc2lvbikpIHx8XG4gICAgICAoISF0aGlzLmRlbGV0ZVBlcm1pc3Npb24gJiYgdGhpcy51c2VyU2VydmljZS5oYXNQZXJtaXNzaW9uKHRoaXMuZGVsZXRlUGVybWlzc2lvbikpXG5cbiAgICB0aGlzLmVtaXRDb21wb25lbnRTdGF0ZUNoYW5nZWQoKVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMudGVtcGxhdGVzJC52YWx1ZT8uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgc3dpdGNoIChpdGVtLmdldFR5cGUoKSkge1xuICAgICAgICBjYXNlICdsaXN0VmFsdWUnOlxuICAgICAgICAgIHRoaXMubGlzdFZhbHVlQ2hpbGRUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd0cmFuc2xhdGlvbktleUxpc3RWYWx1ZSc6XG4gICAgICAgICAgdGhpcy50cmFuc2xhdGlvbktleUxpc3RWYWx1ZUNoaWxkVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbnVtYmVyTGlzdFZhbHVlJzpcbiAgICAgICAgICB0aGlzLm51bWJlckxpc3RWYWx1ZUNoaWxkVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAncmVsYXRpdmVEYXRlTGlzdFZhbHVlJzpcbiAgICAgICAgICB0aGlzLnJlbGF0aXZlRGF0ZUxpc3RWYWx1ZUNoaWxkVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnY3VzdG9tTGlzdFZhbHVlJzpcbiAgICAgICAgICB0aGlzLmN1c3RvbUxpc3RWYWx1ZUNoaWxkVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnc3RyaW5nTGlzdFZhbHVlJzpcbiAgICAgICAgICB0aGlzLnN0cmluZ0xpc3RWYWx1ZUNoaWxkVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnZGF0ZUxpc3RWYWx1ZSc6XG4gICAgICAgICAgdGhpcy5kYXRlTGlzdFZhbHVlQ2hpbGRUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBvbkRlbGV0ZVJvdyhlbGVtZW50OiBMaXN0R3JpZERhdGEpIHtcbiAgICB0aGlzLmRlbGV0ZUl0ZW0uZW1pdChlbGVtZW50KVxuICB9XG5cbiAgb25WaWV3Um93KGVsZW1lbnQ6IExpc3RHcmlkRGF0YSkge1xuICAgIGlmICghIXRoaXMudmlld1Blcm1pc3Npb24gJiYgdGhpcy51c2VyU2VydmljZS5oYXNQZXJtaXNzaW9uKHRoaXMudmlld1Blcm1pc3Npb24pKSB7XG4gICAgICB0aGlzLnZpZXdJdGVtLmVtaXQoZWxlbWVudClcbiAgICB9XG4gIH1cblxuICBvbkVkaXRSb3coZWxlbWVudDogTGlzdEdyaWREYXRhKSB7XG4gICAgdGhpcy5lZGl0SXRlbS5lbWl0KGVsZW1lbnQpXG4gIH1cblxuICBpbWdFcnJvcihpdGVtOiBMaXN0R3JpZERhdGEpIHtcbiAgICBpdGVtLmltYWdlUGF0aCA9ICcnXG4gIH1cblxuICBnZXRGYWxsYmFja0ltYWdlUGF0aChtZmVJbmZvOiBNZmVJbmZvKSB7XG4gICAgcmV0dXJuIG1mZUluZm8/LnJlbW90ZUJhc2VVcmxcbiAgICAgID8gYCR7bWZlSW5mby5yZW1vdGVCYXNlVXJsfS9vbmVjeC1wb3J0YWwtbGliL2Fzc2V0cy9pbWFnZXMvJHt0aGlzLmZhbGxiYWNrSW1hZ2V9YFxuICAgICAgOiBgLi9vbmVjeC1wb3J0YWwtbGliL2Fzc2V0cy9pbWFnZXMvJHt0aGlzLmZhbGxiYWNrSW1hZ2V9YFxuICB9XG5cbiAgdXBkYXRlR3JpZE1lbnVJdGVtcyh1c2VTZWxlY3RlZEl0ZW0gPSBmYWxzZSk6IHZvaWQge1xuICAgIGxldCBkZWxldGVEaXNhYmxlZCA9IGZhbHNlXG4gICAgbGV0IGVkaXREaXNhYmxlZCA9IGZhbHNlXG4gICAgbGV0IHZpZXdEaXNhYmxlZCA9IGZhbHNlXG5cbiAgICBsZXQgZGVsZXRlVmlzaWJsZSA9IHRydWVcbiAgICBsZXQgZWRpdFZpc2libGUgPSB0cnVlXG4gICAgbGV0IHZpZXdWaXNpYmxlID0gdHJ1ZVxuXG4gICAgaWYgKHVzZVNlbGVjdGVkSXRlbSAmJiB0aGlzLnNlbGVjdGVkSXRlbSkge1xuICAgICAgdmlld0Rpc2FibGVkID1cbiAgICAgICAgISF0aGlzLnZpZXdBY3Rpb25FbmFibGVkRmllbGQgJiYgIXRoaXMuZmllbGRJc1RydXRoeSh0aGlzLnNlbGVjdGVkSXRlbSwgdGhpcy52aWV3QWN0aW9uRW5hYmxlZEZpZWxkKVxuICAgICAgZWRpdERpc2FibGVkID1cbiAgICAgICAgISF0aGlzLmVkaXRBY3Rpb25FbmFibGVkRmllbGQgJiYgIXRoaXMuZmllbGRJc1RydXRoeSh0aGlzLnNlbGVjdGVkSXRlbSwgdGhpcy5lZGl0QWN0aW9uRW5hYmxlZEZpZWxkKVxuICAgICAgZGVsZXRlRGlzYWJsZWQgPVxuICAgICAgICAhIXRoaXMuZGVsZXRlQWN0aW9uRW5hYmxlZEZpZWxkICYmICF0aGlzLmZpZWxkSXNUcnV0aHkodGhpcy5zZWxlY3RlZEl0ZW0sIHRoaXMuZGVsZXRlQWN0aW9uRW5hYmxlZEZpZWxkKVxuXG4gICAgICB2aWV3VmlzaWJsZSA9ICF0aGlzLnZpZXdBY3Rpb25WaXNpYmxlRmllbGQgfHwgdGhpcy5maWVsZElzVHJ1dGh5KHRoaXMuc2VsZWN0ZWRJdGVtLCB0aGlzLnZpZXdBY3Rpb25WaXNpYmxlRmllbGQpXG4gICAgICBlZGl0VmlzaWJsZSA9ICF0aGlzLmVkaXRBY3Rpb25WaXNpYmxlRmllbGQgfHwgdGhpcy5maWVsZElzVHJ1dGh5KHRoaXMuc2VsZWN0ZWRJdGVtLCB0aGlzLmVkaXRBY3Rpb25WaXNpYmxlRmllbGQpXG4gICAgICBkZWxldGVWaXNpYmxlID1cbiAgICAgICAgIXRoaXMuZGVsZXRlQWN0aW9uVmlzaWJsZUZpZWxkIHx8IHRoaXMuZmllbGRJc1RydXRoeSh0aGlzLnNlbGVjdGVkSXRlbSwgdGhpcy5kZWxldGVBY3Rpb25WaXNpYmxlRmllbGQpXG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlXG4gICAgICAuZ2V0KFtcbiAgICAgICAgdGhpcy52aWV3TWVudUl0ZW1LZXkgfHwgJ09DWF9EQVRBX0xJU1RfR1JJRC5NRU5VLlZJRVcnLFxuICAgICAgICB0aGlzLmVkaXRNZW51SXRlbUtleSB8fCAnT0NYX0RBVEFfTElTVF9HUklELk1FTlUuRURJVCcsXG4gICAgICAgIHRoaXMuZGVsZXRlTWVudUl0ZW1LZXkgfHwgJ09DWF9EQVRBX0xJU1RfR1JJRC5NRU5VLkRFTEVURScsXG4gICAgICAgIC4uLnRoaXMuYWRkaXRpb25hbEFjdGlvbnMubWFwKChhKSA9PiBhLmxhYmVsS2V5IHx8ICcnKSxcbiAgICAgIF0pXG4gICAgICAuc3Vic2NyaWJlKCh0cmFuc2xhdGlvbnMpID0+IHtcbiAgICAgICAgbGV0IG1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdXG4gICAgICAgIGNvbnN0IGF1dG9tYXRpb25JZCA9ICdkYXRhLWdyaWQtYWN0aW9uLWJ1dHRvbidcbiAgICAgICAgY29uc3QgYXV0b21hdGlvbklkSGlkZGVuID0gJ2RhdGEtZ3JpZC1hY3Rpb24tYnV0dG9uLWhpZGRlbidcbiAgICAgICAgaWYgKHRoaXMudmlld0l0ZW0ub2JzZXJ2ZWQgJiYgdGhpcy51c2VyU2VydmljZS5oYXNQZXJtaXNzaW9uKHRoaXMudmlld1Blcm1pc3Npb24gfHwgJycpKSB7XG4gICAgICAgICAgbWVudUl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6IHRyYW5zbGF0aW9uc1t0aGlzLnZpZXdNZW51SXRlbUtleSB8fCAnT0NYX0RBVEFfTElTVF9HUklELk1FTlUuVklFVyddLFxuICAgICAgICAgICAgaWNvbjogUHJpbWVJY29ucy5FWUUsXG4gICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnZpZXdJdGVtLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW0pLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IHZpZXdEaXNhYmxlZCxcbiAgICAgICAgICAgIHZpc2libGU6IHZpZXdWaXNpYmxlLFxuICAgICAgICAgICAgYXV0b21hdGlvbklkOiB2aWV3VmlzaWJsZSA/IGF1dG9tYXRpb25JZCA6IGF1dG9tYXRpb25JZEhpZGRlbixcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVkaXRJdGVtLm9ic2VydmVkICYmIHRoaXMudXNlclNlcnZpY2UuaGFzUGVybWlzc2lvbih0aGlzLmVkaXRQZXJtaXNzaW9uIHx8ICcnKSkge1xuICAgICAgICAgIG1lbnVJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiB0cmFuc2xhdGlvbnNbdGhpcy5lZGl0TWVudUl0ZW1LZXkgfHwgJ09DWF9EQVRBX0xJU1RfR1JJRC5NRU5VLkVESVQnXSxcbiAgICAgICAgICAgIGljb246IFByaW1lSWNvbnMuUEVOQ0lMLFxuICAgICAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy5lZGl0SXRlbS5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtKSxcbiAgICAgICAgICAgIGRpc2FibGVkOiBlZGl0RGlzYWJsZWQsXG4gICAgICAgICAgICB2aXNpYmxlOiBlZGl0VmlzaWJsZSxcbiAgICAgICAgICAgIGF1dG9tYXRpb25JZDogZWRpdFZpc2libGUgPyBhdXRvbWF0aW9uSWQgOiBhdXRvbWF0aW9uSWRIaWRkZW4sXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZWxldGVJdGVtLm9ic2VydmVkICYmIHRoaXMudXNlclNlcnZpY2UuaGFzUGVybWlzc2lvbih0aGlzLmRlbGV0ZVBlcm1pc3Npb24gfHwgJycpKSB7XG4gICAgICAgICAgbWVudUl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6IHRyYW5zbGF0aW9uc1t0aGlzLmRlbGV0ZU1lbnVJdGVtS2V5IHx8ICdPQ1hfREFUQV9MSVNUX0dSSUQuTUVOVS5ERUxFVEUnXSxcbiAgICAgICAgICAgIGljb246IFByaW1lSWNvbnMuVFJBU0gsXG4gICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLmRlbGV0ZUl0ZW0uZW1pdCh0aGlzLnNlbGVjdGVkSXRlbSksXG4gICAgICAgICAgICBkaXNhYmxlZDogZGVsZXRlRGlzYWJsZWQsXG4gICAgICAgICAgICB2aXNpYmxlOiBkZWxldGVWaXNpYmxlLFxuICAgICAgICAgICAgYXV0b21hdGlvbklkOiBkZWxldGVWaXNpYmxlID8gYXV0b21hdGlvbklkIDogYXV0b21hdGlvbklkSGlkZGVuLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgbWVudUl0ZW1zID0gbWVudUl0ZW1zLmNvbmNhdChcbiAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxBY3Rpb25zXG4gICAgICAgICAgICAuZmlsdGVyKChhKSA9PiB0aGlzLnVzZXJTZXJ2aWNlLmhhc1Blcm1pc3Npb24oYS5wZXJtaXNzaW9uKSlcbiAgICAgICAgICAgIC5tYXAoKGEpID0+ICh7XG4gICAgICAgICAgICAgIGxhYmVsOiB0cmFuc2xhdGlvbnNbYS5sYWJlbEtleSB8fCAnJ10sXG4gICAgICAgICAgICAgIGljb246IGEuaWNvbixcbiAgICAgICAgICAgICAgc3R5bGVDbGFzczogKGEuY2xhc3NlcyB8fCBbXSkuam9pbignICcpLFxuICAgICAgICAgICAgICBkaXNhYmxlZDpcbiAgICAgICAgICAgICAgICBhLmRpc2FibGVkIHx8ICghIWEuYWN0aW9uRW5hYmxlZEZpZWxkICYmICF0aGlzLmZpZWxkSXNUcnV0aHkodGhpcy5zZWxlY3RlZEl0ZW0sIGEuYWN0aW9uRW5hYmxlZEZpZWxkKSksXG4gICAgICAgICAgICAgIHZpc2libGU6ICFhLmFjdGlvblZpc2libGVGaWVsZCB8fCB0aGlzLmZpZWxkSXNUcnV0aHkodGhpcy5zZWxlY3RlZEl0ZW0sIGEuYWN0aW9uVmlzaWJsZUZpZWxkKSxcbiAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4gYS5jYWxsYmFjayh0aGlzLnNlbGVjdGVkSXRlbSksXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKVxuICAgICAgICB0aGlzLmdyaWRNZW51SXRlbXMgPSBtZW51SXRlbXNcbiAgICAgIH0pXG4gIH1cblxuICBzZXRTZWxlY3RlZEl0ZW0oaXRlbTogTGlzdEdyaWREYXRhKSB7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBpdGVtXG4gIH1cblxuICByZXNvbHZlRmllbGREYXRhKG9iamVjdDogYW55LCBrZXk6IGFueSkge1xuICAgIHJldHVybiBPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKG9iamVjdCwga2V5KVxuICB9XG5cbiAgZW1pdENvbXBvbmVudFN0YXRlQ2hhbmdlZChzdGF0ZTogRGF0YUxpc3RHcmlkQ29tcG9uZW50U3RhdGUgPSB7fSkge1xuICAgIHRoaXMuZGlzcGxheWVkUGFnZVNpemUkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKChwYWdlU2l6ZSkgPT4ge1xuICAgICAgdGhpcy5jb21wb25lbnRTdGF0ZUNoYW5nZWQuZW1pdCh7XG4gICAgICAgIHBhZ2VTaXplLFxuICAgICAgICBhY3RpdmVQYWdlOiB0aGlzLnBhZ2UsXG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgb25QYWdlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBwYWdlID0gZXZlbnQuZmlyc3QgLyBldmVudC5yb3dzXG4gICAgdGhpcy5wYWdlID0gcGFnZVxuICAgIHRoaXMucGFnZVNpemUgPSBldmVudC5yb3dzXG4gICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KHBhZ2UpXG4gICAgdGhpcy5wYWdlU2l6ZUNoYW5nZWQuZW1pdChldmVudC5yb3dzKVxuICAgIHRoaXMuZW1pdENvbXBvbmVudFN0YXRlQ2hhbmdlZCh7XG4gICAgICBhY3RpdmVQYWdlOiBwYWdlLFxuICAgICAgcGFnZVNpemU6IGV2ZW50LnJvd3MsXG4gICAgfSlcbiAgfVxuXG4gIHJlc2V0UGFnZSgpIHtcbiAgICB0aGlzLnBhZ2UgPSAwXG4gICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KHRoaXMucGFnZSlcbiAgICB0aGlzLmVtaXRDb21wb25lbnRTdGF0ZUNoYW5nZWQoKVxuICB9XG5cbiAgZmllbGRJc1RydXRoeShvYmplY3Q6IGFueSwga2V5OiBhbnkpIHtcbiAgICByZXR1cm4gISF0aGlzLnJlc29sdmVGaWVsZERhdGEob2JqZWN0LCBrZXkpXG4gIH1cblxuICBoYXNWaXNpYmxlT3ZlcmZsb3dNZW51SXRlbXMoaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMub3ZlcmZsb3dMaXN0QWN0aW9ucyQucGlwZShcbiAgICAgIG1hcCgoYWN0aW9ucykgPT5cbiAgICAgICAgYWN0aW9ucy5zb21lKFxuICAgICAgICAgIChhKSA9PlxuICAgICAgICAgICAgKCFhLmFjdGlvblZpc2libGVGaWVsZCB8fCB0aGlzLmZpZWxkSXNUcnV0aHkoaXRlbSwgYS5hY3Rpb25WaXNpYmxlRmllbGQpKSAmJlxuICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5oYXNQZXJtaXNzaW9uKGEucGVybWlzc2lvbilcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIHRvZ2dsZU92ZXJmbG93TWVudShldmVudDogTW91c2VFdmVudCwgbWVudTogTWVudSwgcm93OiBSb3cpIHtcbiAgICB0aGlzLmN1cnJlbnRNZW51Um93JC5uZXh0KHJvdylcbiAgICBtZW51LnRvZ2dsZShldmVudClcbiAgfVxuXG4gIGdldEZpbHRlcmVkQ29sdW1ucygpIHtcbiAgICBsZXQgaWRzOiBzdHJpbmdbXSA9IFsuLi4odGhpcy5zdWJ0aXRsZUxpbmVJZHMgPz8gW10pXVxuICAgIGlmICh0aGlzLnRpdGxlTGluZUlkKSB7XG4gICAgICBpZHMgPSBbdGhpcy50aXRsZUxpbmVJZCwgLi4uKHRoaXMuc3VidGl0bGVMaW5lSWRzID8/IFtdKV1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maWx0ZXIoKGMpID0+ICFpZHMuaW5jbHVkZXMoYy5pZCkpXG4gIH1cblxuICBmaW5kVGVtcGxhdGUodGVtcGxhdGVzOiBQcmltZVRlbXBsYXRlW10sIG5hbWVzOiBzdHJpbmdbXSk6IFByaW1lVGVtcGxhdGUgfCB1bmRlZmluZWQge1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBuYW1lcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBuYW1lc1tpbmRleF1cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGVtcGxhdGVzLmZpbmQoKHRlbXBsYXRlKSA9PiB0ZW1wbGF0ZS5uYW1lID09PSBuYW1lKVxuICAgICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICBnZXRUZW1wbGF0ZShjb2x1bW46IERhdGFUYWJsZUNvbHVtbik6IE9ic2VydmFibGU8VGVtcGxhdGVSZWY8YW55PiB8IG51bGw+IHtcbiAgICBpZiAoIXRoaXMudGVtcGxhdGVzT2JzZXJ2YWJsZXNbY29sdW1uLmlkXSkge1xuICAgICAgdGhpcy50ZW1wbGF0ZXNPYnNlcnZhYmxlc1tjb2x1bW4uaWRdID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMudGVtcGxhdGVzJCxcbiAgICAgICAgdGhpcy52aWV3VGVtcGxhdGVzJCxcbiAgICAgICAgdGhpcy5wYXJlbnRUZW1wbGF0ZXMkLFxuICAgICAgXSkucGlwZShcbiAgICAgICAgbWFwKChbdCwgdnQsIHB0XSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IFsuLi4odCA/PyBbXSksIC4uLih2dCA/PyBbXSksIC4uLihwdCA/PyBbXSldXG4gICAgICAgICAgY29uc3QgY29sdW1uVGVtcGxhdGUgPSB0ZW1wbGF0ZXMuZmluZCgodGVtcGxhdGUpID0+IHRlbXBsYXRlLm5hbWUgPT09IGNvbHVtbi5pZCArICdJZExpc3RWYWx1ZScpPy50ZW1wbGF0ZVxuICAgICAgICAgIGlmIChjb2x1bW5UZW1wbGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbHVtblRlbXBsYXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIHN3aXRjaCAoY29sdW1uLmNvbHVtblR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZS5EQVRFOlxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVMaXN0VmFsdWUgPz9cbiAgICAgICAgICAgICAgICB0aGlzLmZpbmRUZW1wbGF0ZSh0ZW1wbGF0ZXMsIFsnZGF0ZUxpc3RWYWx1ZScsICdkZWZhdWx0RGF0ZUxpc3RWYWx1ZSddKT8udGVtcGxhdGUgPz9cbiAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZS5OVU1CRVI6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdGhpcy5fbnVtYmVyTGlzdFZhbHVlID8/XG4gICAgICAgICAgICAgICAgdGhpcy5maW5kVGVtcGxhdGUodGVtcGxhdGVzLCBbJ251bWJlckxpc3RWYWx1ZScsICdkZWZhdWx0TnVtYmVyTGlzdFZhbHVlJ10pPy50ZW1wbGF0ZSA/P1xuICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlLlJFTEFUSVZFX0RBVEU6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVsYXRpdmVEYXRlTGlzdFZhbHVlID8/XG4gICAgICAgICAgICAgICAgdGhpcy5maW5kVGVtcGxhdGUodGVtcGxhdGVzLCBbJ3JlbGF0aXZlRGF0ZUxpc3RWYWx1ZScsICdkZWZhdWx0UmVsYXRpdmVEYXRlTGlzdFZhbHVlJ10pPy50ZW1wbGF0ZSA/P1xuICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlLlRSQU5TTEFUSU9OX0tFWTpcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2xhdGlvbktleUxpc3RWYWx1ZSA/P1xuICAgICAgICAgICAgICAgIHRoaXMuZmluZFRlbXBsYXRlKHRlbXBsYXRlcywgWyd0cmFuc2xhdGlvbktleUxpc3RWYWx1ZScsICdkZWZhdWx0VHJhbnNsYXRpb25LZXlMaXN0VmFsdWUnXSk/LnRlbXBsYXRlID8/XG4gICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGUuQ1VTVE9NOlxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuX2N1c3RvbUxpc3RWYWx1ZSA/P1xuICAgICAgICAgICAgICAgIHRoaXMuZmluZFRlbXBsYXRlKHRlbXBsYXRlcywgWydjdXN0b21MaXN0VmFsdWUnLCAnZGVmYXVsdEN1c3RvbUxpc3RWYWx1ZSddKT8udGVtcGxhdGUgPz9cbiAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RyaW5nTGlzdFZhbHVlID8/XG4gICAgICAgICAgICAgICAgdGhpcy5maW5kVGVtcGxhdGUodGVtcGxhdGVzLCBbJ3N0cmluZ0xpc3RWYWx1ZScsICdkZWZhdWx0U3RyaW5nTGlzdFZhbHVlJ10pPy50ZW1wbGF0ZSA/P1xuICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVzT2JzZXJ2YWJsZXNbY29sdW1uLmlkXVxuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiKGRpc3BsYXllZFBhZ2VTaXplJCB8IGFzeW5jKSBhcyBkaXNwbGF5ZWRQYWdlU2l6ZVwiPlxuICA8cC1kYXRhVmlld1xuICAgICpuZ0lmPVwiKGNvbHVtblRlbXBsYXRlcyQgfCBhc3luYykgPz8ge30gYXMgY29sdW1uVGVtcGxhdGVzXCJcbiAgICBbdmFsdWVdPVwiKGRpc3BsYXllZEl0ZW1zJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgW3BhZ2luYXRvcl09XCJwYWdpbmF0b3JcIlxuICAgIFtmaXJzdF09XCJwYWdlICogZGlzcGxheWVkUGFnZVNpemVcIlxuICAgIChvblBhZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxuICAgIFtyb3dzXT1cImRpc3BsYXllZFBhZ2VTaXplXCJcbiAgICBbbGF5b3V0XT1cImxheW91dFwiXG4gICAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCJcbiAgICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwie3sgKHRvdGFsUmVjb3Jkc09uU2VydmVyID8gY3VycmVudFBhZ2VTaG93aW5nV2l0aFRvdGFsT25TZXJ2ZXJLZXkgOiBjdXJyZW50UGFnZVNob3dpbmdLZXkpIHwgdHJhbnNsYXRlOnBhcmFtcyB9fVwiXG4gICAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCIoZGlzcGxheWVkUGFnZVNpemVzJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgaWQ9XCJkYXRhTGlzdEdyaWRfe3tuYW1lfX1cIlxuICAgIHBhZ2luYXRvckRyb3Bkb3duQXBwZW5kVG89XCJib2R5XCJcbiAgPlxuICAgIDxuZy10ZW1wbGF0ZSAjZ3JpZEl0ZW0gbGV0LXJvd3MgcFRlbXBsYXRlPVwiZ3JpZEl0ZW1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLWdyaWQgcC1ub2d1dHRlciBncmlkIGdyaWQtbm9ndXR0ZXJcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1pdGVtIFtuZ0Zvck9mXT1cInJvd3NcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfZ3JpZEl0ZW0gPyBfZ3JpZEl0ZW0gOiBkZWZhdWx0R3JpZEl0ZW1cIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6aXRlbX1cIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgI2xpc3RJdGVtIGxldC1yb3dzIHBUZW1wbGF0ZT1cImxpc3RJdGVtXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicC1ncmlkIHAtbm9ndXR0ZXIgZ3JpZCBncmlkLW5vZ3V0dGVyXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtaXRlbSBbbmdGb3JPZl09XCJyb3dzXCI+XG4gICAgICAgICAgQGRlZmVyIChvbiB2aWV3cG9ydDsgb24gaWRsZSl7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX2xpc3RJdGVtID8gX2xpc3RJdGVtIDogZGVmYXVsdExpc3RJdGVtXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgIGl0ZW06aXRlbSxcbiAgICAgICAgICAgICAgY29sdW1uVGVtcGxhdGVzOiBjb2x1bW5UZW1wbGF0ZXNcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIH0gQHBsYWNlaG9sZGVyIHtcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogODBweFwiPjwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5XCI+XG4gICAgICA8c3Bhbj57eyBlbXB0eVJlc3VsdHNNZXNzYWdlIHx8IChcIk9DWF9EQVRBX0xJU1RfR1JJRC5FTVBUWV9SRVNVTFRcIiB8IHRyYW5zbGF0ZSkgfX08L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9wLWRhdGFWaWV3PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEdyaWRJdGVtIGxldC1pdGVtPlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyIGxnOmNvbC02IHhsOmNvbC00IGZsZXhcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0YS1ncmlkLWl0ZW0gY2FyZCBmbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHctMTIgbGc6dy0xMSBtYi00IG10LTQgYWxpZ24tc2VsZi1zdHJldGNoXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG1iLTNcIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgIGNsYXNzPVwiaW1hZ2VcIlxuICAgICAgICAgIHNyYz1cInt7IGl0ZW0uaW1hZ2VQYXRoIHx8IChmYWxsYmFja0ltYWdlUGF0aCQgfCBhc3luYykgfX1cIlxuICAgICAgICAgIChlcnJvcik9XCJpbWdFcnJvcihpdGVtKVwiXG4gICAgICAgICAgYWx0PVwie3tyZXNvbHZlRmllbGREYXRhKGl0ZW0sIHRpdGxlTGluZUlkKXx8ICcnfX1cIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGEtZ3JpZC1pdGVtcyBmbGV4LXJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLW5hbWUgZm9udC1tZWRpdW0gbXItMyB0ZXh0LTJ4bFwiPlxuICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiXCIgKGNsaWNrKT1cIm9uVmlld1Jvd1wiPnt7IHJlc29sdmVGaWVsZERhdGEoaXRlbSwgdGl0bGVMaW5lSWQpIHx8ICcnIH19PC9hPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9ncmlkSXRlbVN1YnRpdGxlTGluZXMgPyBfZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzIDogZGVmYXVsdEdyaWRJdGVtU3VidGl0bGVMaW5lc1wiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDppdGVtfVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8cC1tZW51ICNtZW51IFttb2RlbF09XCJncmlkTWVudUl0ZW1zXCIgW3BvcHVwXT1cInRydWVcIiBhcHBlbmRUbz1cImJvZHlcIj48L3AtbWVudT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwic2V0U2VsZWN0ZWRJdGVtKGl0ZW0pOyB1cGRhdGVHcmlkTWVudUl0ZW1zKHRydWUpOyBtZW51LnRvZ2dsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGljb249XCJwaSBwaS1lbGxpcHNpcy12XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ09DWF9EQVRBX0xJU1RfR1JJRC5NT1JFX0FDVElPTlNfQVJJQV9MQUJFTCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJtb3JlLWFjdGlvbnMtbWVudS1idXR0b24gbWVudS1idG5cIlxuICAgICAgICAgICAgW2F0dHIubmFtZV09XCInZGF0YS1ncmlkLWl0ZW0tbWVudS1idXR0b24nXCJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCInT0NYX0RBVEFfTElTVF9HUklELk1PUkVfQUNUSU9OU19UT09MVElQJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxuICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0R3JpZEl0ZW1TdWJ0aXRsZUxpbmVzIGxldC1pdGVtPlxuICA8ZGl2ICpuZ0Zvcj1cImxldCBzdWJ0aXRsZUxpbmVJZCBvZiBzdWJ0aXRsZUxpbmVJZHNcIiBjbGFzcz1cInN1YnRpdGxlTGluZSBlZGl0LXRpbWUgdGV4dC14bCBteS0zXCI+XG4gICAge3sgcmVzb2x2ZUZpZWxkRGF0YShpdGVtLCBzdWJ0aXRsZUxpbmVJZCkgfX1cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0TGlzdEl0ZW0gbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWNvbHVtblRlbXBsYXRlcz1cImNvbHVtblRlbXBsYXRlc1wiPlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nSWY9XCJjb2x1bW5UZW1wbGF0ZXNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0YS1saXN0LWl0ZW1zIHAtM1wiPlxuICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tbmFtZS1yb3cgZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1uYW1lIG1yLTMgdGV4dC0yeGwgZm9udC1tZWRpdW0gYWxpZ24tY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cInRpdGxlTGluZUlkXCI+e3sgcmVzb2x2ZUZpZWxkRGF0YShpdGVtLCB0aXRsZUxpbmVJZCkgfHwgJycgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvd1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwidmlld0l0ZW1PYnNlcnZlZCAmJiAoIXZpZXdBY3Rpb25WaXNpYmxlRmllbGQgfHwgZmllbGRJc1RydXRoeShpdGVtLCB2aWV3QWN0aW9uVmlzaWJsZUZpZWxkKSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGljb249XCJwaSBwaS1leWVcIlxuICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IG1iLTEgbXItMiB2aWV3TGlzdEl0ZW1CdXR0b25cIlxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiKHZpZXdNZW51SXRlbUtleSB8fCAnT0NYX0RBVEFfTElTVF9HUklELk1FTlUuVklFVycpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIodmlld01lbnVJdGVtS2V5IHx8ICdPQ1hfREFUQV9MSVNUX0dSSUQuTUVOVS5WSUVXJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25WaWV3Um93KGl0ZW0pXCJcbiAgICAgICAgICAgICAgKm9jeElmUGVybWlzc2lvbj1cInZpZXdQZXJtaXNzaW9uXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEhdmlld0FjdGlvbkVuYWJsZWRGaWVsZCAmJiAhZmllbGRJc1RydXRoeShpdGVtLCB2aWV3QWN0aW9uRW5hYmxlZEZpZWxkKVwiXG4gICAgICAgICAgICAgIFthdHRyLm5hbWVdPVwiJ2RhdGEtbGlzdC1hY3Rpb24tYnV0dG9uJ1wiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJlZGl0SXRlbU9ic2VydmVkICYmICghZWRpdEFjdGlvblZpc2libGVGaWVsZCB8fCBmaWVsZElzVHJ1dGh5KGl0ZW0sIGVkaXRBY3Rpb25WaXNpYmxlRmllbGQpKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgbWItMSBtci0yIGVkaXRMaXN0SXRlbUJ1dHRvblwiXG4gICAgICAgICAgICAgIGljb249XCJwaSBwaS1wZW5jaWxcIlxuICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCIoZWRpdE1lbnVJdGVtS2V5IHx8ICdPQ1hfREFUQV9MSVNUX0dSSUQuTUVOVS5FRElUJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihlZGl0TWVudUl0ZW1LZXkgfHwgJ09DWF9EQVRBX0xJU1RfR1JJRC5NRU5VLkVESVQnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkVkaXRSb3coaXRlbSlcIlxuICAgICAgICAgICAgICAqb2N4SWZQZXJtaXNzaW9uPVwiZWRpdFBlcm1pc3Npb25cIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiISFlZGl0QWN0aW9uRW5hYmxlZEZpZWxkICYmICFmaWVsZElzVHJ1dGh5KGl0ZW0sIGVkaXRBY3Rpb25FbmFibGVkRmllbGQpXCJcbiAgICAgICAgICAgICAgW2F0dHIubmFtZV09XCInZGF0YS1saXN0LWFjdGlvbi1idXR0b24nXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cImRlbGV0ZUl0ZW1PYnNlcnZlZCAmJiAoIWRlbGV0ZUFjdGlvblZpc2libGVGaWVsZCB8fCBmaWVsZElzVHJ1dGh5KGl0ZW0sIGRlbGV0ZUFjdGlvblZpc2libGVGaWVsZCkpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBpY29uPVwicGkgcGktdHJhc2hcIlxuICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBwLWJ1dHRvbi1kYW5nZXIgbWItMSBtci0yIGRlbGV0ZUxpc3RJdGVtQnV0dG9uXCJcbiAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiKGRlbGV0ZU1lbnVJdGVtS2V5IHx8ICdPQ1hfREFUQV9MSVNUX0dSSUQuTUVOVS5ERUxFVEUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGRlbGV0ZU1lbnVJdGVtS2V5IHx8ICdPQ1hfREFUQV9MSVNUX0dSSUQuTUVOVS5ERUxFVEUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkRlbGV0ZVJvdyhpdGVtKVwiXG4gICAgICAgICAgICAgICpvY3hJZlBlcm1pc3Npb249XCJkZWxldGVQZXJtaXNzaW9uXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEhZGVsZXRlQWN0aW9uRW5hYmxlZEZpZWxkICYmICFmaWVsZElzVHJ1dGh5KGl0ZW0sIGRlbGV0ZUFjdGlvbkVuYWJsZWRGaWVsZClcIlxuICAgICAgICAgICAgICBbYXR0ci5uYW1lXT1cIidkYXRhLWxpc3QtYWN0aW9uLWJ1dHRvbidcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBpbmxpbmVMaXN0QWN0aW9ucyQgfCBhc3luY1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIighYWN0aW9uLmFjdGlvblZpc2libGVGaWVsZCB8fCBmaWVsZElzVHJ1dGh5KGl0ZW0sIGFjdGlvbi5hY3Rpb25WaXNpYmxlRmllbGQpKVwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm9jeElmUGVybWlzc2lvbj1cImFjdGlvbi5wZXJtaXNzaW9uXCJcbiAgICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHRcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImFjdGlvbi5jbGFzc2VzXCJcbiAgICAgICAgICAgICAgICBbaWNvbl09XCJhY3Rpb24uaWNvbiB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbi5jYWxsYmFjayhpdGVtKVwiXG4gICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cImFjdGlvbi5sYWJlbEtleSA/IChhY3Rpb24ubGFiZWxLZXkgfCB0cmFuc2xhdGUpIDogJydcIlxuICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhY3Rpb24ubGFiZWxLZXkgPyAoYWN0aW9uLmxhYmVsS2V5IHwgdHJhbnNsYXRlKSA6ICcnXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkIHx8ICghIWFjdGlvbi5hY3Rpb25FbmFibGVkRmllbGQgJiYgIWZpZWxkSXNUcnV0aHkoaXRlbSwgYWN0aW9uLmFjdGlvbkVuYWJsZWRGaWVsZCkpXCJcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc1Zpc2libGVPdmVyZmxvd01lbnVJdGVtcyhpdGVtKSB8IGFzeW5jXCI+XG4gICAgICAgICAgICA8cC1tZW51ICNtZW51IFttb2RlbF09XCIob3ZlcmZsb3dNZW51SXRlbXMkIHwgYXN5bmMpIHx8IFtdXCIgW3BvcHVwXT1cInRydWVcIiBhcHBlbmRUbz1cImJvZHlcIj48L3AtbWVudT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dFwiXG4gICAgICAgICAgICAgIFtpY29uXT1cIidwaSBwaS1lbGxpcHNpcy12J1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVPdmVyZmxvd01lbnUoJGV2ZW50LCBtZW51LCBpdGVtKVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ09DWF9EQVRBX0xJU1RfR1JJRC5NT1JFX0FDVElPTlNfQVJJQV9MQUJFTCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ09DWF9EQVRBX0xJU1RfR1JJRC5NT1JFX0FDVElPTlNfVE9PTFRJUCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtYmFzZSBmb250LWxpZ2h0IG15LTFcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9saXN0SXRlbVN1YnRpdGxlTGluZXMgPyBfbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzIDogZGVmYXVsdExpc3RJdGVtU3VidGl0bGVMaW5lc1wiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6aXRlbX1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcFwiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2wgb2YgZ2V0RmlsdGVyZWRDb2x1bW5zKClcIiBjbGFzcz1cInctMTJyZW0gbXktMiBtci0yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtYm9sZFwiIFtvY3hUb29sdGlwT25PdmVyZmxvd109XCJjb2wubmFtZUtleSB8IHRyYW5zbGF0ZVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAge3sgY29sLm5hbWVLZXkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbb2N4VG9vbHRpcE9uT3ZlcmZsb3ddPVwiY29sLmNvbHVtblR5cGUgPT09IGNvbHVtblR5cGUuVFJBTlNMQVRJT05fS0VZID8gKHJlc29sdmVGaWVsZERhdGEoaXRlbSxjb2wuaWQpIHwgdHJhbnNsYXRlKSA6IHJlc29sdmVGaWVsZERhdGEoaXRlbSwgY29sLmlkKVwiXG4gICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBkZWZlcihvbiB2aWV3cG9ydDspe1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfbGlzdFZhbHVlID8gX2xpc3RWYWx1ZTogZGVmYXVsdExpc3RWYWx1ZVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgcm93T2JqZWN0OiBpdGVtLFxuICAgICAgICAgICAgICAgIGNvbHVtbjogY29sLFxuICAgICAgICAgICAgICAgIGNvbHVtblRlbXBsYXRlczogY29sdW1uVGVtcGxhdGVzXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIH0gQHBsYWNlaG9sZGVyIHtcbiAgICAgICAgICAgIDxwLXNrZWxldG9uIHdpZHRoPVwiNXJlbVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdExpc3RJdGVtU3VidGl0bGVMaW5lcyBsZXQtaXRlbT1cIiRpbXBsaWNpdFwiPlxuICA8ZGl2ICpuZ0Zvcj1cImxldCBzdWJ0aXRsZUxpbmVJZCBvZiBzdWJ0aXRsZUxpbmVJZHNcIiBjbGFzcz1cInN1YnRpdGxlTGluZSB0ZXh0LXhsIG15LTNcIj5cbiAgICB7eyByZXNvbHZlRmllbGREYXRhKGl0ZW0sIHN1YnRpdGxlTGluZUlkKSB9fVxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdExpc3RWYWx1ZSBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiIGxldC1jb2x1bW5UZW1wbGF0ZXM9XCJjb2x1bW5UZW1wbGF0ZXNcIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiY29sdW1uVGVtcGxhdGVzW2NvbHVtbi5pZF1cIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtblRlbXBsYXRlc1tjb2x1bW4uaWRdXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgIHJvd09iamVjdDogcm93T2JqZWN0LFxuICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uXG4gICAgICAgICAgICB9XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJkZWZhdWx0U3RyaW5nTGlzdFZhbHVlXCIgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lcj4ge3sgcmVzb2x2ZUZpZWxkRGF0YShyb3dPYmplY3QsIGNvbHVtbi5pZCkgfX0gPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZGVmYXVsdE51bWJlckxpc3RWYWx1ZVwiIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXI+IHt7IHJlc29sdmVGaWVsZERhdGEocm93T2JqZWN0LCBjb2x1bW4uaWQpIHwgbnVtYmVyIH19IDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImRlZmF1bHRDdXN0b21MaXN0VmFsdWVcIiBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPiA8L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZGVmYXVsdERhdGVMaXN0VmFsdWVcIiBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyPiB7eyByZXNvbHZlRmllbGREYXRhKHJvd09iamVjdCwgY29sdW1uLmlkKSB8IGRhdGU6IGNvbHVtbi5kYXRlRm9ybWF0ID8/ICdtZWRpdW0nIH19IDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImRlZmF1bHRSZWxhdGl2ZURhdGVMaXN0VmFsdWVcIiBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyPlxuICAgIHt7ICdPQ1hfREFUQV9UQUJMRS5FRElURUQnIHwgdHJhbnNsYXRlIH19IHt7IHJlc29sdmVGaWVsZERhdGEocm93T2JqZWN0LCBjb2x1bW4uaWQpIHwgdGltZWFnbyB9fVxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJkZWZhdWx0VHJhbnNsYXRpb25LZXlMaXN0VmFsdWVcIiBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyPiB7eyByZXNvbHZlRmllbGREYXRhKHJvd09iamVjdCwgY29sdW1uLmlkKSB8IHRyYW5zbGF0ZSB9fSA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
605
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saXN0LWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLWFjY2VsZXJhdG9yL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWxpc3QtZ3JpZC9kYXRhLWxpc3QtZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItYWNjZWxlcmF0b3Ivc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtbGlzdC1ncmlkL2RhdGEtbGlzdC1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFFZixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsU0FBUyxFQUVULE1BQU0sRUFHTixZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3hDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0NBQXNDLENBQUE7QUFFbkYsT0FBTyxFQUFZLFVBQVUsRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFFakUsT0FBTyxFQUFFLGVBQWUsRUFBYyxhQUFhLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ3JHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUkxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7QUEwQi9ELE1BQU0sT0FBTyxxQkFB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Q0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQWlDSCxTQUFTO3NCQURaLGVBQWU7dUJBQUMsYUFBYTtnQkFTMUIsYUFBYTtzQkFEaEIsWUFBWTt1QkFBQyxhQUFhO2dCQVN2QixlQUFlO3NCQURsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRG9DaGVjayxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgTE9DQUxFX0lELFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnXG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UsIFVzZXJTZXJ2aWNlIH0gZnJvbSAnQG9uZWN4L2FuZ3VsYXItaW50ZWdyYXRpb24taW50ZXJmYWNlJ1xuaW1wb3J0IHsgTWZlSW5mbyB9IGZyb20gJ0BvbmVjeC9pbnRlZ3JhdGlvbi1pbnRlcmZhY2UnXG5pbXBvcnQgeyBNZW51SXRlbSwgUHJpbWVJY29ucywgUHJpbWVUZW1wbGF0ZSB9IGZyb20gJ3ByaW1lbmcvYXBpJ1xuaW1wb3J0IHsgTWVudSB9IGZyb20gJ3ByaW1lbmcvbWVudSdcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgY29tYmluZUxhdGVzdCwgZGVib3VuY2VUaW1lLCBmaXJzdCwgbWFwLCBtZXJnZU1hcCB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWwvY29sdW1uLXR5cGUubW9kZWwnXG5pbXBvcnQgeyBEYXRhQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWwvZGF0YS1hY3Rpb24nXG5pbXBvcnQgeyBEYXRhU29ydERpcmVjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVsL2RhdGEtc29ydC1kaXJlY3Rpb24nXG5pbXBvcnQgeyBEYXRhVGFibGVDb2x1bW4gfSBmcm9tICcuLi8uLi9tb2RlbC9kYXRhLXRhYmxlLWNvbHVtbi5tb2RlbCdcbmltcG9ydCB7IE9iamVjdFV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbHMvb2JqZWN0dXRpbHMnXG5pbXBvcnQgeyBEYXRhU29ydEJhc2UgfSBmcm9tICcuLi9kYXRhLXNvcnQtYmFzZS9kYXRhLXNvcnQtYmFzZSdcbmltcG9ydCB7IFJvdyB9IGZyb20gJy4uL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQnXG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuLi8uLi9tb2RlbC9maWx0ZXIubW9kZWwnXG5cbmV4cG9ydCB0eXBlIExpc3RHcmlkRGF0YSA9IHtcbiAgaWQ6IHN0cmluZyB8IG51bWJlclxuICBpbWFnZVBhdGg6IHN0cmluZyB8IG51bWJlclxuICBbY29sdW1uSWQ6IHN0cmluZ106IHVua25vd25cbn1cblxudHlwZSBSb3dMaXN0R3JpZERhdGEgPSBMaXN0R3JpZERhdGEgJiBSb3dcblxuZXhwb3J0IGludGVyZmFjZSBMaXN0R3JpZERhdGFNZW51SXRlbSBleHRlbmRzIE1lbnVJdGVtIHtcbiAgcGVybWlzc2lvbjogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUxpc3RHcmlkQ29tcG9uZW50U3RhdGUge1xuICBhY3RpdmVQYWdlPzogbnVtYmVyXG4gIHBhZ2VTaXplPzogbnVtYmVyXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ29jeC1kYXRhLWxpc3QtZ3JpZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLWxpc3QtZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGEtbGlzdC1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIERhdGFMaXN0R3JpZENvbXBvbmVudCBleHRlbmRzIERhdGFTb3J0QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgRG9DaGVjaywgQWZ0ZXJDb250ZW50SW5pdCB7XG4gIEBJbnB1dCgpIHRpdGxlTGluZUlkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgc3VidGl0bGVMaW5lSWRzOiBzdHJpbmdbXSA9IFtdXG4gIEBJbnB1dCgpIGNsaWVudFNpZGVTb3J0aW5nID0gdHJ1ZVxuICBASW5wdXQoKSBjbGllbnRTaWRlRmlsdGVyaW5nID0gdHJ1ZVxuICBASW5wdXQoKSBzb3J0U3RhdGVzOiBEYXRhU29ydERpcmVjdGlvbltdID0gW11cblxuICBkaXNwbGF5ZWRQYWdlU2l6ZXMkOiBPYnNlcnZhYmxlPChudW1iZXIgfCB7IHNob3dBbGw6IHN0cmluZyB9KVtdPlxuICBfcGFnZVNpemVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8KG51bWJlciB8IHsgc2hvd0FsbDogc3RyaW5nIH0pW10+KFsxMCwgMjUsIDUwXSlcbiAgQElucHV0KClcbiAgZ2V0IHBhZ2VTaXplcygpOiAobnVtYmVyIHwgeyBzaG93QWxsOiBzdHJpbmcgfSlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VTaXplcyQuZ2V0VmFsdWUoKVxuICB9XG4gIHNldCBwYWdlU2l6ZXModmFsdWU6IChudW1iZXIgfCB7IHNob3dBbGw6IHN0cmluZyB9KVtdKSB7XG4gICAgdGhpcy5fcGFnZVNpemVzJC5uZXh0KHZhbHVlKVxuICB9XG5cbiAgZGlzcGxheWVkUGFnZVNpemUkOiBPYnNlcnZhYmxlPG51bWJlcj5cbiAgX3BhZ2VTaXplJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIEBJbnB1dCgpXG4gIGdldCBwYWdlU2l6ZSgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9wYWdlU2l6ZSQuZ2V0VmFsdWUoKVxuICB9XG4gIHNldCBwYWdlU2l6ZSh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcGFnZVNpemUkLm5leHQodmFsdWUpXG4gIH1cblxuICBASW5wdXQoKSBlbXB0eVJlc3VsdHNNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZmFsbGJhY2tJbWFnZSA9ICdwbGFjZWhvbGRlci5wbmcnXG4gIEBJbnB1dCgpIGxheW91dDogJ2dyaWQnIHwgJ2xpc3QnID0gJ2dyaWQnXG4gIEBJbnB1dCgpIHZpZXdQZXJtaXNzaW9uOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBlZGl0UGVybWlzc2lvbjogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZGVsZXRlUGVybWlzc2lvbjogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZGVsZXRlQWN0aW9uVmlzaWJsZUZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZGVsZXRlQWN0aW9uRW5hYmxlZEZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgdmlld0FjdGlvblZpc2libGVGaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIHZpZXdBY3Rpb25FbmFibGVkRmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBlZGl0QWN0aW9uVmlzaWJsZUZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgZWRpdEFjdGlvbkVuYWJsZWRGaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIHZpZXdNZW51SXRlbUtleTogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIGVkaXRNZW51SXRlbUtleTogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIEBJbnB1dCgpIGRlbGV0ZU1lbnVJdGVtS2V5OiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgcGFnaW5hdG9yID0gdHJ1ZVxuICBASW5wdXQoKSBwYWdlID0gMFxuICBjb2x1bW5UZW1wbGF0ZXMkOiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIFRlbXBsYXRlUmVmPGFueT4gfCBudWxsPj4gfCB1bmRlZmluZWRcbiAgX2NvbHVtbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRhVGFibGVDb2x1bW5bXT4oW10pXG4gIEBJbnB1dCgpXG4gIGdldCBjb2x1bW5zKCk6IERhdGFUYWJsZUNvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucyQuZ2V0VmFsdWUoKVxuICB9XG4gIHNldCBjb2x1bW5zKHZhbHVlOiBEYXRhVGFibGVDb2x1bW5bXSkge1xuICAgIHRoaXMuX2NvbHVtbnMkLm5leHQodmFsdWUpXG4gICAgY29uc3Qgb2JzID0gdmFsdWUubWFwKChjKSA9PiB0aGlzLmdldFRlbXBsYXRlKGMpKVxuICAgIHRoaXMuY29sdW1uVGVtcGxhdGVzJCA9IGNvbWJpbmVMYXRlc3Qob2JzKS5waXBlKFxuICAgICAgbWFwKCh2YWx1ZXMpID0+IE9iamVjdC5mcm9tRW50cmllcyh2YWx1ZS5tYXAoKGMsIGkpID0+IFtjLmlkLCB2YWx1ZXNbaV1dKSkpLFxuICAgICAgZGVib3VuY2VUaW1lKDUwKVxuICAgIClcbiAgfVxuICBASW5wdXQoKSBuYW1lID0gJydcbiAgQElucHV0KClcbiAgZ2V0IHRvdGFsUmVjb3Jkc09uU2VydmVyKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1zWyd0b3RhbFJlY29yZHNPblNlcnZlciddID8gTnVtYmVyKHRoaXMucGFyYW1zWyd0b3RhbFJlY29yZHNPblNlcnZlciddKSA6IHVuZGVmaW5lZFxuICB9XG4gIHNldCB0b3RhbFJlY29yZHNPblNlcnZlcih2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5wYXJhbXNbJ3RvdGFsUmVjb3Jkc09uU2VydmVyJ10gPSB2YWx1ZT8udG9TdHJpbmcoKSA/PyAnMCdcbiAgfVxuICBASW5wdXQoKSBjdXJyZW50UGFnZVNob3dpbmdLZXkgPSAnT0NYX0RBVEFfVEFCTEUuU0hPV0lORydcbiAgQElucHV0KCkgY3VycmVudFBhZ2VTaG93aW5nV2l0aFRvdGFsT25TZXJ2ZXJLZXkgPSAnT0NYX0RBVEFfVEFCTEUuU0hPV0lOR19XSVRIX1RPVEFMX09OX1NFUlZFUidcbiAgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgIGN1cnJlbnRQYWdlOiAne2N1cnJlbnRQYWdlfScsXG4gICAgdG90YWxQYWdlczogJ3t0b3RhbFBhZ2VzfScsXG4gICAgcm93czogJ3tyb3dzfScsXG4gICAgZmlyc3Q6ICd7Zmlyc3R9JyxcbiAgICBsYXN0OiAne2xhc3R9JyxcbiAgICB0b3RhbFJlY29yZHM6ICd7dG90YWxSZWNvcmRzfScsXG4gIH1cblxuICBfZGF0YSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJvd0xpc3RHcmlkRGF0YVtdPihbXSlcbiAgQElucHV0KClcbiAgZ2V0IGRhdGEoKTogUm93TGlzdEdyaWREYXRhW10ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhJC5nZXRWYWx1ZSgpXG4gIH1cbiAgc2V0IGRhdGEodmFsdWU6IFJvd0xpc3RHcmlkRGF0YVtdKSB7XG4gICAgIXRoaXMuX2RhdGEkLmdldFZhbHVlKCkubGVuZ3RoID8/IHRoaXMucmVzZXRQYWdlKClcbiAgICB0aGlzLl9vcmlnaW5hbERhdGEgPSBbLi4udmFsdWVdXG4gICAgdGhpcy5fZGF0YSQubmV4dChbLi4udmFsdWVdKVxuICB9XG4gIF9maWx0ZXJzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RmlsdGVyW10+KFtdKVxuICBASW5wdXQoKVxuICBnZXQgZmlsdGVycygpOiBGaWx0ZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnMkLmdldFZhbHVlKClcbiAgfVxuICBzZXQgZmlsdGVycyh2YWx1ZTogRmlsdGVyW10pIHtcbiAgICAhdGhpcy5fZmlsdGVycyQuZ2V0VmFsdWUoKS5sZW5ndGggPz8gdGhpcy5yZXNldFBhZ2UoKVxuICAgIHRoaXMuX2ZpbHRlcnMkLm5leHQodmFsdWUpXG4gIH1cbiAgX29yaWdpbmFsRGF0YTogUm93TGlzdEdyaWREYXRhW10gPSBbXVxuICBfc29ydERpcmVjdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGFTb3J0RGlyZWN0aW9uPihEYXRhU29ydERpcmVjdGlvbi5OT05FKVxuICBASW5wdXQoKVxuICBnZXQgc29ydERpcmVjdGlvbigpOiBEYXRhU29ydERpcmVjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnREaXJlY3Rpb24kLmdldFZhbHVlKClcbiAgfVxuICBzZXQgc29ydERpcmVjdGlvbih2YWx1ZTogRGF0YVNvcnREaXJlY3Rpb24pIHtcbiAgICBpZiAodmFsdWUgPT09IERhdGFTb3J0RGlyZWN0aW9uLk5PTkUpIHtcbiAgICAgIHRoaXMuX2RhdGEkLm5leHQoWy4uLnRoaXMuX29yaWdpbmFsRGF0YV0pXG4gICAgfVxuICAgIHRoaXMuX3NvcnREaXJlY3Rpb24kLm5leHQodmFsdWUpXG4gIH1cbiAgX3NvcnRGaWVsZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpXG4gIEBJbnB1dCgpXG4gIGdldCBzb3J0RmllbGQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcz8uX3NvcnRGaWVsZCQuZ2V0VmFsdWUoKVxuICB9XG4gIHNldCBzb3J0RmllbGQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3NvcnRGaWVsZCQubmV4dCh2YWx1ZSlcbiAgfVxuXG4gIEBJbnB1dCgpIGdyaWRJdGVtU3VidGl0bGVMaW5lc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ2dyaWRJdGVtU3VidGl0bGVMaW5lcycpIGdyaWRJdGVtU3VidGl0bGVMaW5lc0NoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9ncmlkSXRlbVN1YnRpdGxlTGluZXMoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzVGVtcGxhdGUgfHwgdGhpcy5ncmlkSXRlbVN1YnRpdGxlTGluZXNDaGlsZFRlbXBsYXRlXG4gIH1cblxuICBASW5wdXQoKSBsaXN0SXRlbVN1YnRpdGxlTGluZXNUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdsaXN0SXRlbVN1YnRpdGxlTGluZXMnKSBsaXN0SXRlbVN1YnRpdGxlTGluZXNDaGlsZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxpc3RJdGVtU3VidGl0bGVMaW5lc1RlbXBsYXRlIHx8IHRoaXMubGlzdEl0ZW1TdWJ0aXRsZUxpbmVzQ2hpbGRUZW1wbGF0ZVxuICB9XG5cbiAgQElucHV0KCkgbGlzdEl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdsaXN0SXRlbScpIGxpc3RJdGVtQ2hpbGRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBnZXQgX2xpc3RJdGVtKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxpc3RJdGVtVGVtcGxhdGUgfHwgdGhpcy5saXN0SXRlbUNoaWxkVGVtcGxhdGVcbiAgfVxuXG4gIEBJbnB1dCgpIGdyaWRJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgQENvbnRlbnRDaGlsZCgnZ3JpZEl0ZW0nKSBncmlkSXRlbUNoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9ncmlkSXRlbSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5ncmlkSXRlbVRlbXBsYXRlIHx8IHRoaXMuZ3JpZEl0ZW1DaGlsZFRlbXBsYXRlXG4gIH1cblxuICBASW5wdXQoKSBsaXN0VmFsdWVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdsaXN0VmFsdWUnKSBsaXN0VmFsdWVDaGlsZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfbGlzdFZhbHVlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxpc3RWYWx1ZVRlbXBsYXRlIHx8IHRoaXMubGlzdFZhbHVlQ2hpbGRUZW1wbGF0ZVxuICB9XG5cbiAgQElucHV0KCkgdHJhbnNsYXRpb25LZXlMaXN0VmFsdWVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCd0cmFuc2xhdGlvbktleUxpc3RWYWx1ZScpIHRyYW5zbGF0aW9uS2V5TGlzdFZhbHVlQ2hpbGRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBnZXQgX3RyYW5zbGF0aW9uS2V5TGlzdFZhbHVlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uS2V5TGlzdFZhbHVlVGVtcGxhdGUgfHwgdGhpcy50cmFuc2xhdGlvbktleUxpc3RWYWx1ZUNoaWxkVGVtcGxhdGVcbiAgfVxuXG4gIEBJbnB1dCgpIG51bWJlckxpc3RWYWx1ZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ251bWJlckxpc3RWYWx1ZScpIG51bWJlckxpc3RWYWx1ZUNoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9udW1iZXJMaXN0VmFsdWUoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubnVtYmVyTGlzdFZhbHVlVGVtcGxhdGUgfHwgdGhpcy5udW1iZXJMaXN0VmFsdWVDaGlsZFRlbXBsYXRlXG4gIH1cblxuICBASW5wdXQoKSByZWxhdGl2ZURhdGVMaXN0VmFsdWVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdyZWxhdGl2ZURhdGVMaXN0VmFsdWUnKSByZWxhdGl2ZURhdGVMaXN0VmFsdWVDaGlsZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfcmVsYXRpdmVEYXRlTGlzdFZhbHVlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlbGF0aXZlRGF0ZUxpc3RWYWx1ZVRlbXBsYXRlIHx8IHRoaXMucmVsYXRpdmVEYXRlTGlzdFZhbHVlQ2hpbGRUZW1wbGF0ZVxuICB9XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlbW92ZWQgYW5kIGluc3RlYWQgdG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBvZiBhIHNwZWNpZmljIGNvbHVtblxuICAgKiB1c2UgdGhlIG5ldyBhcHByb2FjaCBpbnN0ZWFkIGJ5IGZvbGxvd2luZyB0aGUgbmFtaW5nIGNvbnZlbnRpb24gY29sdW1uIGlkICsgSWRMaXN0VmFsdWVcbiAgICogZS5nLiBmb3IgYSBjb2x1bW4gd2l0aCB0aGUgaWQgJ3N0YXR1cycgdXNlIHBUZW1wbGF0ZT1cInN0YXR1c0lkTGlzdFZhbHVlXCJcbiAgICovXG4gIEBJbnB1dCgpIGN1c3RvbUxpc3RWYWx1ZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBXaWxsIGJlIHJlbW92ZWQgYW5kIGluc3RlYWQgdG8gY2hhbmdlIHRoZSB0ZW1wbGF0ZSBvZiBhIHNwZWNpZmljIGNvbHVtblxuICAgKiB1c2UgdGhlIG5ldyBhcHByb2FjaCBpbnN0ZWFkIGJ5IGZvbGxvd2luZyB0aGUgbmFtaW5nIGNvbnZlbnRpb24gY29sdW1uIGlkICsgSWRMaXN0VmFsdWVcbiAgICogZS5nLiBmb3IgYSBjb2x1bW4gd2l0aCB0aGUgaWQgJ3N0YXR1cycgdXNlIHBUZW1wbGF0ZT1cInN0YXR1c0lkTGlzdFZhbHVlXCJcbiAgICovXG4gIEBDb250ZW50Q2hpbGQoJ2N1c3RvbUxpc3RWYWx1ZScpIGN1c3RvbUxpc3RWYWx1ZUNoaWxkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWRcbiAgZ2V0IF9jdXN0b21MaXN0VmFsdWUoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tTGlzdFZhbHVlVGVtcGxhdGUgfHwgdGhpcy5jdXN0b21MaXN0VmFsdWVDaGlsZFRlbXBsYXRlXG4gIH1cblxuICBASW5wdXQoKSBzdHJpbmdMaXN0VmFsdWVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBAQ29udGVudENoaWxkKCdzdHJpbmdMaXN0VmFsdWUnKSBzdHJpbmdMaXN0VmFsdWVDaGlsZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIGdldCBfc3RyaW5nTGlzdFZhbHVlKCk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnN0cmluZ0xpc3RWYWx1ZVRlbXBsYXRlIHx8IHRoaXMuc3RyaW5nTGlzdFZhbHVlQ2hpbGRUZW1wbGF0ZVxuICB9XG5cbiAgQElucHV0KCkgZGF0ZUxpc3RWYWx1ZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkXG4gIEBDb250ZW50Q2hpbGQoJ2RhdGVMaXN0VmFsdWUnKSBkYXRlTGlzdFZhbHVlQ2hpbGRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZFxuICBnZXQgX2RhdGVMaXN0VmFsdWUoKTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZUxpc3RWYWx1ZVRlbXBsYXRlIHx8IHRoaXMuZGF0ZUxpc3RWYWx1ZUNoaWxkVGVtcGxhdGVcbiAgfVxuXG4gIGlubGluZUxpc3RBY3Rpb25zJDogT2JzZXJ2YWJsZTxEYXRhQWN0aW9uW10+XG4gIG92ZXJmbG93TGlzdEFjdGlvbnMkOiBPYnNlcnZhYmxlPERhdGFBY3Rpb25bXT5cbiAgb3ZlcmZsb3dNZW51SXRlbXMkOiBPYnNlcnZhYmxlPE1lbnVJdGVtW10+XG4gIGN1cnJlbnRNZW51Um93JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Um93IHwgbnVsbD4obnVsbClcbiAgX2FkZGl0aW9uYWxBY3Rpb25zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0YUFjdGlvbltdPihbXSlcbiAgQElucHV0KClcbiAgZ2V0IGFkZGl0aW9uYWxBY3Rpb25zKCk6IERhdGFBY3Rpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZGl0aW9uYWxBY3Rpb25zJC5nZXRWYWx1ZSgpXG4gIH1cbiAgc2V0IGFkZGl0aW9uYWxBY3Rpb25zKHZhbHVlOiBEYXRhQWN0aW9uW10pIHtcbiAgICB0aGlzLl9hZGRpdGlvbmFsQWN0aW9ucyQubmV4dCh2YWx1ZSlcbiAgICB0aGlzLnVwZGF0ZUdyaWRNZW51SXRlbXMoKVxuICB9XG5cbiAgQE91dHB1dCgpIHZpZXdJdGVtID0gbmV3IEV2ZW50RW1pdHRlcjxMaXN0R3JpZERhdGE+KClcbiAgQE91dHB1dCgpIGVkaXRJdGVtID0gbmV3IEV2ZW50RW1pdHRlcjxMaXN0R3JpZERhdGE+KClcbiAgQE91dHB1dCgpIGRlbGV0ZUl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyPExpc3RHcmlkRGF0YT4oKVxuICBAT3V0cHV0KCkgcGFnZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKVxuICBAT3V0cHV0KCkgcGFnZVNpemVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KClcbiAgQE91dHB1dCgpIGNvbXBvbmVudFN0YXRlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YUxpc3RHcmlkQ29tcG9uZW50U3RhdGU+KClcblxuICBnZXQgdmlld0l0ZW1PYnNlcnZlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBkdiA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdEYXRhVmlld0NvbXBvbmVudCcsIG51bGwpXG4gICAgcmV0dXJuIGR2Py52aWV3SXRlbU9ic2VydmVkIHx8IGR2Py52aWV3SXRlbS5vYnNlcnZlZCB8fCB0aGlzLnZpZXdJdGVtLm9ic2VydmVkXG4gIH1cbiAgZ2V0IGVkaXRJdGVtT2JzZXJ2ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZHYgPSB0aGlzLmluamVjdG9yLmdldCgnRGF0YVZpZXdDb21wb25lbnQnLCBudWxsKVxuICAgIHJldHVybiBkdj8uZWRpdEl0ZW1PYnNlcnZlZCB8fCBkdj8uZWRpdEl0ZW0ub2JzZXJ2ZWQgfHwgdGhpcy5lZGl0SXRlbS5vYnNlcnZlZFxuICB9XG4gIGdldCBkZWxldGVJdGVtT2JzZXJ2ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZHYgPSB0aGlzLmluamVjdG9yLmdldCgnRGF0YVZpZXdDb21wb25lbnQnLCBudWxsKVxuICAgIHJldHVybiBkdj8uZGVsZXRlSXRlbU9ic2VydmVkIHx8IGR2Py5kZWxldGVJdGVtLm9ic2VydmVkIHx8IHRoaXMuZGVsZXRlSXRlbS5vYnNlcnZlZFxuICB9XG5cbiAgZ2V0IHNvcnREaXJlY3Rpb25OdW1iZXIoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5zb3J0RGlyZWN0aW9uID09PSBEYXRhU29ydERpcmVjdGlvbi5BU0NFTkRJTkcpIHJldHVybiAxXG4gICAgaWYgKHRoaXMuc29ydERpcmVjdGlvbiA9PT0gRGF0YVNvcnREaXJlY3Rpb24uREVTQ0VORElORykgcmV0dXJuIC0xXG4gICAgcmV0dXJuIDBcbiAgfVxuXG4gIHNob3dNZW51ID0gZmFsc2VcbiAgZ3JpZE1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdXG4gIHNlbGVjdGVkSXRlbTogTGlzdEdyaWREYXRhIHwgdW5kZWZpbmVkXG4gIG9ic2VydmVkT3V0cHV0cyA9IDBcblxuICBkaXNwbGF5ZWRJdGVtcyQ6IE9ic2VydmFibGU8dW5rbm93bltdPiB8IHVuZGVmaW5lZFxuICBmYWxsYmFja0ltYWdlUGF0aCQhOiBPYnNlcnZhYmxlPHN0cmluZz5cblxuICB0ZW1wbGF0ZXMkOiBCZWhhdmlvclN1YmplY3Q8UXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+IHwgdW5kZWZpbmVkPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgUXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+IHwgdW5kZWZpbmVkXG4gID4odW5kZWZpbmVkKVxuICBAQ29udGVudENoaWxkcmVuKFByaW1lVGVtcGxhdGUpXG4gIHNldCB0ZW1wbGF0ZXModmFsdWU6IFF1ZXJ5TGlzdDxQcmltZVRlbXBsYXRlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMudGVtcGxhdGVzJC5uZXh0KHZhbHVlKVxuICB9XG5cbiAgdmlld1RlbXBsYXRlcyQ6IEJlaGF2aW9yU3ViamVjdDxRdWVyeUxpc3Q8UHJpbWVUZW1wbGF0ZT4gfCB1bmRlZmluZWQ+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxcbiAgICBRdWVyeUxpc3Q8UHJpbWVUZW1wbGF0ZT4gfCB1bmRlZmluZWRcbiAgPih1bmRlZmluZWQpXG4gIEBWaWV3Q2hpbGRyZW4oUHJpbWVUZW1wbGF0ZSlcbiAgc2V0IHZpZXdUZW1wbGF0ZXModmFsdWU6IFF1ZXJ5TGlzdDxQcmltZVRlbXBsYXRlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMudmlld1RlbXBsYXRlcyQubmV4dCh2YWx1ZSlcbiAgfVxuXG4gIHBhcmVudFRlbXBsYXRlcyQ6IEJlaGF2aW9yU3ViamVjdDxRdWVyeUxpc3Q8UHJpbWVUZW1wbGF0ZT4gfCBudWxsIHwgdW5kZWZpbmVkPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XG4gICAgUXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+IHwgbnVsbCB8IHVuZGVmaW5lZFxuICA+KHVuZGVmaW5lZClcbiAgQElucHV0KClcbiAgc2V0IHBhcmVudFRlbXBsYXRlcyh2YWx1ZTogUXVlcnlMaXN0PFByaW1lVGVtcGxhdGU+IHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMucGFyZW50VGVtcGxhdGVzJC5uZXh0KHZhbHVlKVxuICB9XG5cbiAgY29sdW1uVHlwZSA9IENvbHVtblR5cGVcbiAgdGVtcGxhdGVzT2JzZXJ2YWJsZXM6IFJlY29yZDxzdHJpbmcsIE9ic2VydmFibGU8VGVtcGxhdGVSZWY8YW55PiB8IG51bGw+PiA9IHt9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChMT0NBTEVfSUQpIGxvY2FsZTogc3RyaW5nLFxuICAgIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGFwcFN0YXRlU2VydmljZTogQXBwU3RhdGVTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGxvY2FsZSwgdHJhbnNsYXRlU2VydmljZSlcbiAgICB0aGlzLm5hbWUgPSB0aGlzLm5hbWUgfHwgdGhpcy5yb3V0ZXIudXJsLnJlcGxhY2UoL1teQS1aYS16MC05XS8sICdfJylcbiAgICB0aGlzLmZhbGxiYWNrSW1hZ2VQYXRoJCA9IHRoaXMuYXBwU3RhdGVTZXJ2aWNlLmN1cnJlbnRNZmUkLnBpcGUoXG4gICAgICBtYXAoKGN1cnJlbnRNZmUpID0+IHRoaXMuZ2V0RmFsbGJhY2tJbWFnZVBhdGgoY3VycmVudE1mZSkpXG4gICAgKVxuICAgIHRoaXMuZGlzcGxheWVkUGFnZVNpemVzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuX3BhZ2VTaXplcyQsIHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQoJ09DWF9EQVRBX1RBQkxFLkFMTCcpXSkucGlwZShcbiAgICAgIG1hcCgoW3BhZ2VTaXplcywgdHJhbnNsYXRpb25dKSA9PiBwYWdlU2l6ZXMuY29uY2F0KHsgc2hvd0FsbDogdHJhbnNsYXRpb24gfSkpXG4gICAgKVxuICAgIHRoaXMuZGlzcGxheWVkUGFnZVNpemUkID0gY29tYmluZUxhdGVzdChbdGhpcy5fcGFnZVNpemUkLCB0aGlzLl9wYWdlU2l6ZXMkXSkucGlwZShcbiAgICAgIG1hcCgoW3BhZ2VTaXplLCBwYWdlU2l6ZXNdKSA9PiBwYWdlU2l6ZSA/PyBwYWdlU2l6ZXMuZmluZCgodmFsKTogdmFsIGlzIG51bWJlciA9PiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJykgPz8gNTApXG4gICAgKVxuICAgIHRoaXMuaW5saW5lTGlzdEFjdGlvbnMkID0gdGhpcy5fYWRkaXRpb25hbEFjdGlvbnMkLnBpcGUoXG4gICAgICBtYXAoKGFjdGlvbnMpID0+IGFjdGlvbnMuZmlsdGVyKChhY3Rpb24pID0+ICFhY3Rpb24uc2hvd0FzT3ZlcmZsb3cpKVxuICAgIClcbiAgICB0aGlzLm92ZXJmbG93TGlzdEFjdGlvbnMkID0gdGhpcy5fYWRkaXRpb25hbEFjdGlvbnMkLnBpcGUoXG4gICAgICBtYXAoKGFjdGlvbnMpID0+IGFjdGlvbnMuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbi5zaG93QXNPdmVyZmxvdykpXG4gICAgKVxuICAgIHRoaXMub3ZlcmZsb3dNZW51SXRlbXMkID0gY29tYmluZUxhdGVzdChbdGhpcy5vdmVyZmxvd0xpc3RBY3Rpb25zJCwgdGhpcy5jdXJyZW50TWVudVJvdyRdKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoKFthY3Rpb25zLCByb3ddKSA9PlxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KFsuLi5hY3Rpb25zLm1hcCgoYSkgPT4gYS5sYWJlbEtleSB8fCAnJyldKS5waXBlKFxuICAgICAgICAgIG1hcCgodHJhbnNsYXRpb25zKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYWN0aW9uc1xuICAgICAgICAgICAgICAuZmlsdGVyKChhKSA9PiB0aGlzLnVzZXJTZXJ2aWNlLmhhc1Blcm1pc3Npb24oYS5wZXJtaXNzaW9uKSlcbiAgICAgICAgICAgICAgLm1hcCgoYSkgPT4gKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogdHJhbnNsYXRpb25zW2EubGFiZWxLZXkgfHwgJyddLFxuICAgICAgICAgICAgICAgIGljb246IGEuaWNvbixcbiAgICAgICAgICAgICAgICBzdHlsZUNsYXNzOiAoYS5jbGFzc2VzIHx8IFtdKS5qb2luKCcgJyksXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGEuZGlzYWJsZWQgfHwgKCEhYS5hY3Rpb25FbmFibGVkRmllbGQgJiYgIXRoaXMuZmllbGRJc1RydXRoeShyb3csIGEuYWN0aW9uRW5hYmxlZEZpZWxkKSksXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogIWEuYWN0aW9uVmlzaWJsZUZpZWxkIHx8IHRoaXMuZmllbGRJc1RydXRoeShyb3csIGEuYWN0aW9uVmlzaWJsZUZpZWxkKSxcbiAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiBhLmNhbGxiYWNrKHJvdyksXG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIH1cblxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgY29uc3Qgb2JzZXJ2ZWRPdXRwdXRzID0gPGFueT50aGlzLnZpZXdJdGVtLm9ic2VydmVkICsgPGFueT50aGlzLmRlbGV0ZUl0ZW0ub2JzZXJ2ZWQgKyA8YW55PnRoaXMuZWRpdEl0ZW0ub2JzZXJ2ZWRcbiAgICBpZiAodGhpcy5vYnNlcnZlZE91dHB1dHMgIT09IG9ic2VydmVkT3V0cHV0cykge1xuICAgICAgdGhpcy51cGRhdGVHcmlkTWVudUl0ZW1zKClcbiAgICAgIHRoaXMub2JzZXJ2ZWRPdXRwdXRzID0gb2JzZXJ2ZWRPdXRwdXRzXG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwbGF5ZWRJdGVtcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLl9kYXRhJCwgdGhpcy5fZmlsdGVycyQsIHRoaXMuX3NvcnRGaWVsZCQsIHRoaXMuX3NvcnREaXJlY3Rpb24kXSkucGlwZShcbiAgICAgIG1lcmdlTWFwKChwYXJhbXMpID0+IHRoaXMudHJhbnNsYXRlSXRlbXMocGFyYW1zLCB0aGlzLmNvbHVtbnMsIHRoaXMuY2xpZW50U2lkZUZpbHRlcmluZywgdGhpcy5jbGllbnRTaWRlU29ydGluZykpLFxuICAgICAgbWFwKChwYXJhbXMpID0+IHRoaXMuZmlsdGVySXRlbXMocGFyYW1zLCB0aGlzLmNsaWVudFNpZGVGaWx0ZXJpbmcpKSxcbiAgICAgIG1hcCgocGFyYW1zKSA9PiB0aGlzLnNvcnRJdGVtcyhwYXJhbXMsIHRoaXMuY29sdW1ucywgdGhpcy5jbGllbnRTaWRlU29ydGluZykpLFxuICAgICAgbWFwKChbaXRlbXNdKSA9PiBpdGVtcylcbiAgICApXG5cbiAgICB0aGlzLnNob3dNZW51ID1cbiAgICAgICghIXRoaXMudmlld1Blcm1pc3Npb24gJiYgdGhpcy51c2VyU2VydmljZS5oYXNQZXJtaXNzaW9uKHRoaXMudmlld1Blcm1pc3Npb24pKSB8fFxuICAgICAgKCEhdGhpcy5lZGl0UGVybWlzc2lvbiAmJiB0aGlzLnVzZXJTZXJ2aWNlLmhhc1Blcm1pc3Npb24odGhpcy5lZGl0UGVybWlzc2lvbikpIHx8XG4gICAgICAoISF0aGlzLmRlbGV0ZVBlcm1pc3Npb24gJiYgdGhpcy51c2VyU2VydmljZS5oYXNQZXJtaXNzaW9uKHRoaXMuZGVsZXRlUGVybWlzc2lvbikpXG5cbiAgICB0aGlzLmVtaXRDb21wb25lbnRTdGF0ZUNoYW5nZWQoKVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMudGVtcGxhdGVzJC52YWx1ZT8uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgc3dpdGNoIChpdGVtLmdldFR5cGUoKSkge1xuICAgICAgICBjYXNlICdsaXN0VmFsdWUnOlxuICAgICAgICAgIHRoaXMubGlzdFZhbHVlQ2hpbGRUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICd0cmFuc2xhdGlvbktleUxpc3RWYWx1ZSc6XG4gICAgICAgICAgdGhpcy50cmFuc2xhdGlvbktleUxpc3RWYWx1ZUNoaWxkVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbnVtYmVyTGlzdFZhbHVlJzpcbiAgICAgICAgICB0aGlzLm51bWJlckxpc3RWYWx1ZUNoaWxkVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAncmVsYXRpdmVEYXRlTGlzdFZhbHVlJzpcbiAgICAgICAgICB0aGlzLnJlbGF0aXZlRGF0ZUxpc3RWYWx1ZUNoaWxkVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnY3VzdG9tTGlzdFZhbHVlJzpcbiAgICAgICAgICB0aGlzLmN1c3RvbUxpc3RWYWx1ZUNoaWxkVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnc3RyaW5nTGlzdFZhbHVlJzpcbiAgICAgICAgICB0aGlzLnN0cmluZ0xpc3RWYWx1ZUNoaWxkVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnZGF0ZUxpc3RWYWx1ZSc6XG4gICAgICAgICAgdGhpcy5kYXRlTGlzdFZhbHVlQ2hpbGRUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBvbkRlbGV0ZVJvdyhlbGVtZW50OiBMaXN0R3JpZERhdGEpIHtcbiAgICB0aGlzLmRlbGV0ZUl0ZW0uZW1pdChlbGVtZW50KVxuICB9XG5cbiAgb25WaWV3Um93KGVsZW1lbnQ6IExpc3RHcmlkRGF0YSkge1xuICAgIGlmICghIXRoaXMudmlld1Blcm1pc3Npb24gJiYgdGhpcy51c2VyU2VydmljZS5oYXNQZXJtaXNzaW9uKHRoaXMudmlld1Blcm1pc3Npb24pKSB7XG4gICAgICB0aGlzLnZpZXdJdGVtLmVtaXQoZWxlbWVudClcbiAgICB9XG4gIH1cblxuICBvbkVkaXRSb3coZWxlbWVudDogTGlzdEdyaWREYXRhKSB7XG4gICAgdGhpcy5lZGl0SXRlbS5lbWl0KGVsZW1lbnQpXG4gIH1cblxuICBpbWdFcnJvcihpdGVtOiBMaXN0R3JpZERhdGEpIHtcbiAgICBpdGVtLmltYWdlUGF0aCA9ICcnXG4gIH1cblxuICBnZXRGYWxsYmFja0ltYWdlUGF0aChtZmVJbmZvOiBNZmVJbmZvKSB7XG4gICAgcmV0dXJuIG1mZUluZm8/LnJlbW90ZUJhc2VVcmxcbiAgICAgID8gYCR7bWZlSW5mby5yZW1vdGVCYXNlVXJsfS9vbmVjeC1wb3J0YWwtbGliL2Fzc2V0cy9pbWFnZXMvJHt0aGlzLmZhbGxiYWNrSW1hZ2V9YFxuICAgICAgOiBgLi9vbmVjeC1wb3J0YWwtbGliL2Fzc2V0cy9pbWFnZXMvJHt0aGlzLmZhbGxiYWNrSW1hZ2V9YFxuICB9XG5cbiAgdXBkYXRlR3JpZE1lbnVJdGVtcyh1c2VTZWxlY3RlZEl0ZW0gPSBmYWxzZSk6IHZvaWQge1xuICAgIGxldCBkZWxldGVEaXNhYmxlZCA9IGZhbHNlXG4gICAgbGV0IGVkaXREaXNhYmxlZCA9IGZhbHNlXG4gICAgbGV0IHZpZXdEaXNhYmxlZCA9IGZhbHNlXG5cbiAgICBsZXQgZGVsZXRlVmlzaWJsZSA9IHRydWVcbiAgICBsZXQgZWRpdFZpc2libGUgPSB0cnVlXG4gICAgbGV0IHZpZXdWaXNpYmxlID0gdHJ1ZVxuXG4gICAgaWYgKHVzZVNlbGVjdGVkSXRlbSAmJiB0aGlzLnNlbGVjdGVkSXRlbSkge1xuICAgICAgdmlld0Rpc2FibGVkID1cbiAgICAgICAgISF0aGlzLnZpZXdBY3Rpb25FbmFibGVkRmllbGQgJiYgIXRoaXMuZmllbGRJc1RydXRoeSh0aGlzLnNlbGVjdGVkSXRlbSwgdGhpcy52aWV3QWN0aW9uRW5hYmxlZEZpZWxkKVxuICAgICAgZWRpdERpc2FibGVkID1cbiAgICAgICAgISF0aGlzLmVkaXRBY3Rpb25FbmFibGVkRmllbGQgJiYgIXRoaXMuZmllbGRJc1RydXRoeSh0aGlzLnNlbGVjdGVkSXRlbSwgdGhpcy5lZGl0QWN0aW9uRW5hYmxlZEZpZWxkKVxuICAgICAgZGVsZXRlRGlzYWJsZWQgPVxuICAgICAgICAhIXRoaXMuZGVsZXRlQWN0aW9uRW5hYmxlZEZpZWxkICYmICF0aGlzLmZpZWxkSXNUcnV0aHkodGhpcy5zZWxlY3RlZEl0ZW0sIHRoaXMuZGVsZXRlQWN0aW9uRW5hYmxlZEZpZWxkKVxuXG4gICAgICB2aWV3VmlzaWJsZSA9ICF0aGlzLnZpZXdBY3Rpb25WaXNpYmxlRmllbGQgfHwgdGhpcy5maWVsZElzVHJ1dGh5KHRoaXMuc2VsZWN0ZWRJdGVtLCB0aGlzLnZpZXdBY3Rpb25WaXNpYmxlRmllbGQpXG4gICAgICBlZGl0VmlzaWJsZSA9ICF0aGlzLmVkaXRBY3Rpb25WaXNpYmxlRmllbGQgfHwgdGhpcy5maWVsZElzVHJ1dGh5KHRoaXMuc2VsZWN0ZWRJdGVtLCB0aGlzLmVkaXRBY3Rpb25WaXNpYmxlRmllbGQpXG4gICAgICBkZWxldGVWaXNpYmxlID1cbiAgICAgICAgIXRoaXMuZGVsZXRlQWN0aW9uVmlzaWJsZUZpZWxkIHx8IHRoaXMuZmllbGRJc1RydXRoeSh0aGlzLnNlbGVjdGVkSXRlbSwgdGhpcy5kZWxldGVBY3Rpb25WaXNpYmxlRmllbGQpXG4gICAgfVxuXG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlXG4gICAgICAuZ2V0KFtcbiAgICAgICAgdGhpcy52aWV3TWVudUl0ZW1LZXkgfHwgJ09DWF9EQVRBX0xJU1RfR1JJRC5NRU5VLlZJRVcnLFxuICAgICAgICB0aGlzLmVkaXRNZW51SXRlbUtleSB8fCAnT0NYX0RBVEFfTElTVF9HUklELk1FTlUuRURJVCcsXG4gICAgICAgIHRoaXMuZGVsZXRlTWVudUl0ZW1LZXkgfHwgJ09DWF9EQVRBX0xJU1RfR1JJRC5NRU5VLkRFTEVURScsXG4gICAgICAgIC4uLnRoaXMuYWRkaXRpb25hbEFjdGlvbnMubWFwKChhKSA9PiBhLmxhYmVsS2V5IHx8ICcnKSxcbiAgICAgIF0pXG4gICAgICAuc3Vic2NyaWJlKCh0cmFuc2xhdGlvbnMpID0+IHtcbiAgICAgICAgbGV0IG1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdXG4gICAgICAgIGNvbnN0IGF1dG9tYXRpb25JZCA9ICdkYXRhLWdyaWQtYWN0aW9uLWJ1dHRvbidcbiAgICAgICAgY29uc3QgYXV0b21hdGlvbklkSGlkZGVuID0gJ2RhdGEtZ3JpZC1hY3Rpb24tYnV0dG9uLWhpZGRlbidcbiAgICAgICAgaWYgKHRoaXMudmlld0l0ZW0ub2JzZXJ2ZWQgJiYgdGhpcy51c2VyU2VydmljZS5oYXNQZXJtaXNzaW9uKHRoaXMudmlld1Blcm1pc3Npb24gfHwgJycpKSB7XG4gICAgICAgICAgbWVudUl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6IHRyYW5zbGF0aW9uc1t0aGlzLnZpZXdNZW51SXRlbUtleSB8fCAnT0NYX0RBVEFfTElTVF9HUklELk1FTlUuVklFVyddLFxuICAgICAgICAgICAgaWNvbjogUHJpbWVJY29ucy5FWUUsXG4gICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnZpZXdJdGVtLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW0pLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IHZpZXdEaXNhYmxlZCxcbiAgICAgICAgICAgIHZpc2libGU6IHZpZXdWaXNpYmxlLFxuICAgICAgICAgICAgYXV0b21hdGlvbklkOiB2aWV3VmlzaWJsZSA/IGF1dG9tYXRpb25JZCA6IGF1dG9tYXRpb25JZEhpZGRlbixcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVkaXRJdGVtLm9ic2VydmVkICYmIHRoaXMudXNlclNlcnZpY2UuaGFzUGVybWlzc2lvbih0aGlzLmVkaXRQZXJtaXNzaW9uIHx8ICcnKSkge1xuICAgICAgICAgIG1lbnVJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiB0cmFuc2xhdGlvbnNbdGhpcy5lZGl0TWVudUl0ZW1LZXkgfHwgJ09DWF9EQVRBX0xJU1RfR1JJRC5NRU5VLkVESVQnXSxcbiAgICAgICAgICAgIGljb246IFByaW1lSWNvbnMuUEVOQ0lMLFxuICAgICAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy5lZGl0SXRlbS5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtKSxcbiAgICAgICAgICAgIGRpc2FibGVkOiBlZGl0RGlzYWJsZWQsXG4gICAgICAgICAgICB2aXNpYmxlOiBlZGl0VmlzaWJsZSxcbiAgICAgICAgICAgIGF1dG9tYXRpb25JZDogZWRpdFZpc2libGUgPyBhdXRvbWF0aW9uSWQgOiBhdXRvbWF0aW9uSWRIaWRkZW4sXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZWxldGVJdGVtLm9ic2VydmVkICYmIHRoaXMudXNlclNlcnZpY2UuaGFzUGVybWlzc2lvbih0aGlzLmRlbGV0ZVBlcm1pc3Npb24gfHwgJycpKSB7XG4gICAgICAgICAgbWVudUl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6IHRyYW5zbGF0aW9uc1t0aGlzLmRlbGV0ZU1lbnVJdGVtS2V5IHx8ICdPQ1hfREFUQV9MSVNUX0dSSUQuTUVOVS5ERUxFVEUnXSxcbiAgICAgICAgICAgIGljb246IFByaW1lSWNvbnMuVFJBU0gsXG4gICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLmRlbGV0ZUl0ZW0uZW1pdCh0aGlzLnNlbGVjdGVkSXRlbSksXG4gICAgICAgICAgICBkaXNhYmxlZDogZGVsZXRlRGlzYWJsZWQsXG4gICAgICAgICAgICB2aXNpYmxlOiBkZWxldGVWaXNpYmxlLFxuICAgICAgICAgICAgYXV0b21hdGlvbklkOiBkZWxldGVWaXNpYmxlID8gYXV0b21hdGlvbklkIDogYXV0b21hdGlvbklkSGlkZGVuLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgbWVudUl0ZW1zID0gbWVudUl0ZW1zLmNvbmNhdChcbiAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxBY3Rpb25zXG4gICAgICAgICAgICAuZmlsdGVyKChhKSA9PiB0aGlzLnVzZXJTZXJ2aWNlLmhhc1Blcm1pc3Npb24oYS5wZXJtaXNzaW9uKSlcbiAgICAgICAgICAgIC5tYXAoKGEpID0+ICh7XG4gICAgICAgICAgICAgIGxhYmVsOiB0cmFuc2xhdGlvbnNbYS5sYWJlbEtleSB8fCAnJ10sXG4gICAgICAgICAgICAgIGljb246IGEuaWNvbixcbiAgICAgICAgICAgICAgc3R5bGVDbGFzczogKGEuY2xhc3NlcyB8fCBbXSkuam9pbignICcpLFxuICAgICAgICAgICAgICBkaXNhYmxlZDpcbiAgICAgICAgICAgICAgICBhLmRpc2FibGVkIHx8ICghIWEuYWN0aW9uRW5hYmxlZEZpZWxkICYmICF0aGlzLmZpZWxkSXNUcnV0aHkodGhpcy5zZWxlY3RlZEl0ZW0sIGEuYWN0aW9uRW5hYmxlZEZpZWxkKSksXG4gICAgICAgICAgICAgIHZpc2libGU6ICFhLmFjdGlvblZpc2libGVGaWVsZCB8fCB0aGlzLmZpZWxkSXNUcnV0aHkodGhpcy5zZWxlY3RlZEl0ZW0sIGEuYWN0aW9uVmlzaWJsZUZpZWxkKSxcbiAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4gYS5jYWxsYmFjayh0aGlzLnNlbGVjdGVkSXRlbSksXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgKVxuICAgICAgICB0aGlzLmdyaWRNZW51SXRlbXMgPSBtZW51SXRlbXNcbiAgICAgIH0pXG4gIH1cblxuICBzZXRTZWxlY3RlZEl0ZW0oaXRlbTogTGlzdEdyaWREYXRhKSB7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBpdGVtXG4gIH1cblxuICByZXNvbHZlRmllbGREYXRhKG9iamVjdDogYW55LCBrZXk6IGFueSkge1xuICAgIHJldHVybiBPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKG9iamVjdCwga2V5KVxuICB9XG5cbiAgZW1pdENvbXBvbmVudFN0YXRlQ2hhbmdlZChzdGF0ZTogRGF0YUxpc3RHcmlkQ29tcG9uZW50U3RhdGUgPSB7fSkge1xuICAgIHRoaXMuZGlzcGxheWVkUGFnZVNpemUkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKChwYWdlU2l6ZSkgPT4ge1xuICAgICAgdGhpcy5jb21wb25lbnRTdGF0ZUNoYW5nZWQuZW1pdCh7XG4gICAgICAgIHBhZ2VTaXplLFxuICAgICAgICBhY3RpdmVQYWdlOiB0aGlzLnBhZ2UsXG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgb25QYWdlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBwYWdlID0gZXZlbnQuZmlyc3QgLyBldmVudC5yb3dzXG4gICAgdGhpcy5wYWdlID0gcGFnZVxuICAgIHRoaXMucGFnZVNpemUgPSBldmVudC5yb3dzXG4gICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KHBhZ2UpXG4gICAgdGhpcy5wYWdlU2l6ZUNoYW5nZWQuZW1pdChldmVudC5yb3dzKVxuICAgIHRoaXMuZW1pdENvbXBvbmVudFN0YXRlQ2hhbmdlZCh7XG4gICAgICBhY3RpdmVQYWdlOiBwYWdlLFxuICAgICAgcGFnZVNpemU6IGV2ZW50LnJvd3MsXG4gICAgfSlcbiAgfVxuXG4gIHJlc2V0UGFnZSgpIHtcbiAgICB0aGlzLnBhZ2UgPSAwXG4gICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KHRoaXMucGFnZSlcbiAgICB0aGlzLmVtaXRDb21wb25lbnRTdGF0ZUNoYW5nZWQoKVxuICB9XG5cbiAgZmllbGRJc1RydXRoeShvYmplY3Q6IGFueSwga2V5OiBhbnkpIHtcbiAgICByZXR1cm4gISF0aGlzLnJlc29sdmVGaWVsZERhdGEob2JqZWN0LCBrZXkpXG4gIH1cblxuICBoYXNWaXNpYmxlT3ZlcmZsb3dNZW51SXRlbXMoaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMub3ZlcmZsb3dMaXN0QWN0aW9ucyQucGlwZShcbiAgICAgIG1hcCgoYWN0aW9ucykgPT5cbiAgICAgICAgYWN0aW9ucy5zb21lKFxuICAgICAgICAgIChhKSA9PlxuICAgICAgICAgICAgKCFhLmFjdGlvblZpc2libGVGaWVsZCB8fCB0aGlzLmZpZWxkSXNUcnV0aHkoaXRlbSwgYS5hY3Rpb25WaXNpYmxlRmllbGQpKSAmJlxuICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5oYXNQZXJtaXNzaW9uKGEucGVybWlzc2lvbilcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIHRvZ2dsZU92ZXJmbG93TWVudShldmVudDogTW91c2VFdmVudCwgbWVudTogTWVudSwgcm93OiBSb3cpIHtcbiAgICB0aGlzLmN1cnJlbnRNZW51Um93JC5uZXh0KHJvdylcbiAgICBtZW51LnRvZ2dsZShldmVudClcbiAgfVxuXG4gIGdldEZpbHRlcmVkQ29sdW1ucygpIHtcbiAgICBsZXQgaWRzOiBzdHJpbmdbXSA9IFsuLi4odGhpcy5zdWJ0aXRsZUxpbmVJZHMgPz8gW10pXVxuICAgIGlmICh0aGlzLnRpdGxlTGluZUlkKSB7XG4gICAgICBpZHMgPSBbdGhpcy50aXRsZUxpbmVJZCwgLi4uKHRoaXMuc3VidGl0bGVMaW5lSWRzID8/IFtdKV1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maWx0ZXIoKGMpID0+ICFpZHMuaW5jbHVkZXMoYy5pZCkpXG4gIH1cblxuICBmaW5kVGVtcGxhdGUodGVtcGxhdGVzOiBQcmltZVRlbXBsYXRlW10sIG5hbWVzOiBzdHJpbmdbXSk6IFByaW1lVGVtcGxhdGUgfCB1bmRlZmluZWQge1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBuYW1lcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBuYW1lc1tpbmRleF1cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGVtcGxhdGVzLmZpbmQoKHRlbXBsYXRlKSA9PiB0ZW1wbGF0ZS5uYW1lID09PSBuYW1lKVxuICAgICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICBnZXRUZW1wbGF0ZShjb2x1bW46IERhdGFUYWJsZUNvbHVtbik6IE9ic2VydmFibGU8VGVtcGxhdGVSZWY8YW55PiB8IG51bGw+IHtcbiAgICBpZiAoIXRoaXMudGVtcGxhdGVzT2JzZXJ2YWJsZXNbY29sdW1uLmlkXSkge1xuICAgICAgdGhpcy50ZW1wbGF0ZXNPYnNlcnZhYmxlc1tjb2x1bW4uaWRdID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMudGVtcGxhdGVzJCxcbiAgICAgICAgdGhpcy52aWV3VGVtcGxhdGVzJCxcbiAgICAgICAgdGhpcy5wYXJlbnRUZW1wbGF0ZXMkLFxuICAgICAgXSkucGlwZShcbiAgICAgICAgbWFwKChbdCwgdnQsIHB0XSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IFsuLi4odCA/PyBbXSksIC4uLih2dCA/PyBbXSksIC4uLihwdCA/PyBbXSldXG4gICAgICAgICAgY29uc3QgY29sdW1uVGVtcGxhdGUgPSB0ZW1wbGF0ZXMuZmluZCgodGVtcGxhdGUpID0+IHRlbXBsYXRlLm5hbWUgPT09IGNvbHVtbi5pZCArICdJZExpc3RWYWx1ZScpPy50ZW1wbGF0ZVxuICAgICAgICAgIGlmIChjb2x1bW5UZW1wbGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbHVtblRlbXBsYXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIHN3aXRjaCAoY29sdW1uLmNvbHVtblR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZS5EQVRFOlxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVMaXN0VmFsdWUgPz9cbiAgICAgICAgICAgICAgICB0aGlzLmZpbmRUZW1wbGF0ZSh0ZW1wbGF0ZXMsIFsnZGF0ZUxpc3RWYWx1ZScsICdkZWZhdWx0RGF0ZUxpc3RWYWx1ZSddKT8udGVtcGxhdGUgPz9cbiAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNhc2UgQ29sdW1uVHlwZS5OVU1CRVI6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdGhpcy5fbnVtYmVyTGlzdFZhbHVlID8/XG4gICAgICAgICAgICAgICAgdGhpcy5maW5kVGVtcGxhdGUodGVtcGxhdGVzLCBbJ251bWJlckxpc3RWYWx1ZScsICdkZWZhdWx0TnVtYmVyTGlzdFZhbHVlJ10pPy50ZW1wbGF0ZSA/P1xuICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlLlJFTEFUSVZFX0RBVEU6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVsYXRpdmVEYXRlTGlzdFZhbHVlID8/XG4gICAgICAgICAgICAgICAgdGhpcy5maW5kVGVtcGxhdGUodGVtcGxhdGVzLCBbJ3JlbGF0aXZlRGF0ZUxpc3RWYWx1ZScsICdkZWZhdWx0UmVsYXRpdmVEYXRlTGlzdFZhbHVlJ10pPy50ZW1wbGF0ZSA/P1xuICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgY2FzZSBDb2x1bW5UeXBlLlRSQU5TTEFUSU9OX0tFWTpcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2xhdGlvbktleUxpc3RWYWx1ZSA/P1xuICAgICAgICAgICAgICAgIHRoaXMuZmluZFRlbXBsYXRlKHRlbXBsYXRlcywgWyd0cmFuc2xhdGlvbktleUxpc3RWYWx1ZScsICdkZWZhdWx0VHJhbnNsYXRpb25LZXlMaXN0VmFsdWUnXSk/LnRlbXBsYXRlID8/XG4gICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBjYXNlIENvbHVtblR5cGUuQ1VTVE9NOlxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuX2N1c3RvbUxpc3RWYWx1ZSA/P1xuICAgICAgICAgICAgICAgIHRoaXMuZmluZFRlbXBsYXRlKHRlbXBsYXRlcywgWydjdXN0b21MaXN0VmFsdWUnLCAnZGVmYXVsdEN1c3RvbUxpc3RWYWx1ZSddKT8udGVtcGxhdGUgPz9cbiAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RyaW5nTGlzdFZhbHVlID8/XG4gICAgICAgICAgICAgICAgdGhpcy5maW5kVGVtcGxhdGUodGVtcGxhdGVzLCBbJ3N0cmluZ0xpc3RWYWx1ZScsICdkZWZhdWx0U3RyaW5nTGlzdFZhbHVlJ10pPy50ZW1wbGF0ZSA/P1xuICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVzT2JzZXJ2YWJsZXNbY29sdW1uLmlkXVxuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiKGRpc3BsYXllZFBhZ2VTaXplJCB8IGFzeW5jKSBhcyBkaXNwbGF5ZWRQYWdlU2l6ZVwiPlxuICA8cC1kYXRhVmlld1xuICAgICpuZ0lmPVwiKGNvbHVtblRlbXBsYXRlcyQgfCBhc3luYykgPz8ge30gYXMgY29sdW1uVGVtcGxhdGVzXCJcbiAgICBbdmFsdWVdPVwiKGRpc3BsYXllZEl0ZW1zJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgW3BhZ2luYXRvcl09XCJwYWdpbmF0b3JcIlxuICAgIFtmaXJzdF09XCJwYWdlICogZGlzcGxheWVkUGFnZVNpemVcIlxuICAgIChvblBhZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxuICAgIFtyb3dzXT1cImRpc3BsYXllZFBhZ2VTaXplXCJcbiAgICBbbGF5b3V0XT1cImxheW91dFwiXG4gICAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCJcbiAgICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwie3sgKHRvdGFsUmVjb3Jkc09uU2VydmVyID8gY3VycmVudFBhZ2VTaG93aW5nV2l0aFRvdGFsT25TZXJ2ZXJLZXkgOiBjdXJyZW50UGFnZVNob3dpbmdLZXkpIHwgdHJhbnNsYXRlOnBhcmFtcyB9fVwiXG4gICAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCIoZGlzcGxheWVkUGFnZVNpemVzJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgaWQ9XCJkYXRhTGlzdEdyaWRfe3tuYW1lfX1cIlxuICAgIHBhZ2luYXRvckRyb3Bkb3duQXBwZW5kVG89XCJib2R5XCJcbiAgPlxuICAgIDxuZy10ZW1wbGF0ZSAjZ3JpZEl0ZW0gbGV0LXJvd3MgcFRlbXBsYXRlPVwiZ3JpZEl0ZW1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLWdyaWQgcC1ub2d1dHRlciBncmlkIGdyaWQtbm9ndXR0ZXJcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1pdGVtIFtuZ0Zvck9mXT1cInJvd3NcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfZ3JpZEl0ZW0gPyBfZ3JpZEl0ZW0gOiBkZWZhdWx0R3JpZEl0ZW1cIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6aXRlbX1cIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgI2xpc3RJdGVtIGxldC1yb3dzIHBUZW1wbGF0ZT1cImxpc3RJdGVtXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicC1ncmlkIHAtbm9ndXR0ZXIgZ3JpZCBncmlkLW5vZ3V0dGVyXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtaXRlbSBbbmdGb3JPZl09XCJyb3dzXCI+XG4gICAgICAgICAgQGRlZmVyIChvbiB2aWV3cG9ydDsgb24gaWRsZSl7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiX2xpc3RJdGVtID8gX2xpc3RJdGVtIDogZGVmYXVsdExpc3RJdGVtXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgIGl0ZW06aXRlbSxcbiAgICAgICAgICAgICAgY29sdW1uVGVtcGxhdGVzOiBjb2x1bW5UZW1wbGF0ZXNcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIH0gQHBsYWNlaG9sZGVyIHtcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogODBweFwiPjwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5XCI+XG4gICAgICA8c3Bhbj57eyBlbXB0eVJlc3VsdHNNZXNzYWdlIHx8IChcIk9DWF9EQVRBX0xJU1RfR1JJRC5FTVBUWV9SRVNVTFRcIiB8IHRyYW5zbGF0ZSkgfX08L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9wLWRhdGFWaWV3PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEdyaWRJdGVtIGxldC1pdGVtPlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyIGxnOmNvbC02IHhsOmNvbC00IGZsZXhcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0YS1ncmlkLWl0ZW0gY2FyZCBmbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHctMTIgbGc6dy0xMSBtYi00IG10LTQgYWxpZ24tc2VsZi1zdHJldGNoXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIG1iLTNcIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgIGNsYXNzPVwiaW1hZ2VcIlxuICAgICAgICAgIHNyYz1cInt7IGl0ZW0uaW1hZ2VQYXRoIHx8IChmYWxsYmFja0ltYWdlUGF0aCQgfCBhc3luYykgfX1cIlxuICAgICAgICAgIChlcnJvcik9XCJpbWdFcnJvcihpdGVtKVwiXG4gICAgICAgICAgYWx0PVwie3tyZXNvbHZlRmllbGREYXRhKGl0ZW0sIHRpdGxlTGluZUlkKXx8ICcnfX1cIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGEtZ3JpZC1pdGVtcyBmbGV4LXJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLW5hbWUgZm9udC1tZWRpdW0gbXItMyB0ZXh0LTJ4bFwiPlxuICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiXCIgKGNsaWNrKT1cIm9uVmlld1Jvd1wiPnt7IHJlc29sdmVGaWVsZERhdGEoaXRlbSwgdGl0bGVMaW5lSWQpIHx8ICcnIH19PC9hPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9ncmlkSXRlbVN1YnRpdGxlTGluZXMgPyBfZ3JpZEl0ZW1TdWJ0aXRsZUxpbmVzIDogZGVmYXVsdEdyaWRJdGVtU3VidGl0bGVMaW5lc1wiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDppdGVtfVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8cC1tZW51ICNtZW51IFttb2RlbF09XCJncmlkTWVudUl0ZW1zXCIgW3BvcHVwXT1cInRydWVcIiBhcHBlbmRUbz1cImJvZHlcIj48L3AtbWVudT5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwic2V0U2VsZWN0ZWRJdGVtKGl0ZW0pOyB1cGRhdGVHcmlkTWVudUl0ZW1zKHRydWUpOyBtZW51LnRvZ2dsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGljb249XCJwaSBwaS1lbGxpcHNpcy12XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ09DWF9EQVRBX0xJU1RfR1JJRC5NT1JFX0FDVElPTlNfQVJJQV9MQUJFTCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJtb3JlLWFjdGlvbnMtbWVudS1idXR0b24gbWVudS1idG5cIlxuICAgICAgICAgICAgW2F0dHIubmFtZV09XCInZGF0YS1ncmlkLWl0ZW0tbWVudS1idXR0b24nXCJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCInT0NYX0RBVEFfTElTVF9HUklELk1PUkVfQUNUSU9OU19UT09MVElQJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxuICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0R3JpZEl0ZW1TdWJ0aXRsZUxpbmVzIGxldC1pdGVtPlxuICA8ZGl2ICpuZ0Zvcj1cImxldCBzdWJ0aXRsZUxpbmVJZCBvZiBzdWJ0aXRsZUxpbmVJZHNcIiBjbGFzcz1cInN1YnRpdGxlTGluZSBlZGl0LXRpbWUgdGV4dC14bCBteS0zXCI+XG4gICAge3sgcmVzb2x2ZUZpZWxkRGF0YShpdGVtLCBzdWJ0aXRsZUxpbmVJZCkgfX1cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0TGlzdEl0ZW0gbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWNvbHVtblRlbXBsYXRlcz1cImNvbHVtblRlbXBsYXRlc1wiPlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nSWY9XCJjb2x1bW5UZW1wbGF0ZXNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0YS1saXN0LWl0ZW1zIHAtM1wiPlxuICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tbmFtZS1yb3cgZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1uYW1lIG1yLTMgdGV4dC0yeGwgZm9udC1tZWRpdW0gYWxpZ24tY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cInRpdGxlTGluZUlkXCI+e3sgcmVzb2x2ZUZpZWxkRGF0YShpdGVtLCB0aXRsZUxpbmVJZCkgfHwgJycgfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvd1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwidmlld0l0ZW1PYnNlcnZlZCAmJiAoIXZpZXdBY3Rpb25WaXNpYmxlRmllbGQgfHwgZmllbGRJc1RydXRoeShpdGVtLCB2aWV3QWN0aW9uVmlzaWJsZUZpZWxkKSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGljb249XCJwaSBwaS1leWVcIlxuICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IG1iLTEgbXItMiB2aWV3TGlzdEl0ZW1CdXR0b25cIlxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiKHZpZXdNZW51SXRlbUtleSB8fCAnT0NYX0RBVEFfTElTVF9HUklELk1FTlUuVklFVycpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIodmlld01lbnVJdGVtS2V5IHx8ICdPQ1hfREFUQV9MSVNUX0dSSUQuTUVOVS5WSUVXJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25WaWV3Um93KGl0ZW0pXCJcbiAgICAgICAgICAgICAgKm9jeElmUGVybWlzc2lvbj1cInZpZXdQZXJtaXNzaW9uXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEhdmlld0FjdGlvbkVuYWJsZWRGaWVsZCAmJiAhZmllbGRJc1RydXRoeShpdGVtLCB2aWV3QWN0aW9uRW5hYmxlZEZpZWxkKVwiXG4gICAgICAgICAgICAgIFthdHRyLm5hbWVdPVwiJ2RhdGEtbGlzdC1hY3Rpb24tYnV0dG9uJ1wiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJlZGl0SXRlbU9ic2VydmVkICYmICghZWRpdEFjdGlvblZpc2libGVGaWVsZCB8fCBmaWVsZElzVHJ1dGh5KGl0ZW0sIGVkaXRBY3Rpb25WaXNpYmxlRmllbGQpKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgbWItMSBtci0yIGVkaXRMaXN0SXRlbUJ1dHRvblwiXG4gICAgICAgICAgICAgIGljb249XCJwaSBwaS1wZW5jaWxcIlxuICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCIoZWRpdE1lbnVJdGVtS2V5IHx8ICdPQ1hfREFUQV9MSVNUX0dSSUQuTUVOVS5FRElUJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihlZGl0TWVudUl0ZW1LZXkgfHwgJ09DWF9EQVRBX0xJU1RfR1JJRC5NRU5VLkVESVQnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkVkaXRSb3coaXRlbSlcIlxuICAgICAgICAgICAgICAqb2N4SWZQZXJtaXNzaW9uPVwiZWRpdFBlcm1pc3Npb25cIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiISFlZGl0QWN0aW9uRW5hYmxlZEZpZWxkICYmICFmaWVsZElzVHJ1dGh5KGl0ZW0sIGVkaXRBY3Rpb25FbmFibGVkRmllbGQpXCJcbiAgICAgICAgICAgICAgW2F0dHIubmFtZV09XCInZGF0YS1saXN0LWFjdGlvbi1idXR0b24nXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cImRlbGV0ZUl0ZW1PYnNlcnZlZCAmJiAoIWRlbGV0ZUFjdGlvblZpc2libGVGaWVsZCB8fCBmaWVsZElzVHJ1dGh5KGl0ZW0sIGRlbGV0ZUFjdGlvblZpc2libGVGaWVsZCkpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBpY29uPVwicGkgcGktdHJhc2hcIlxuICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBwLWJ1dHRvbi1kYW5nZXIgbWItMSBtci0yIGRlbGV0ZUxpc3RJdGVtQnV0dG9uXCJcbiAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiKGRlbGV0ZU1lbnVJdGVtS2V5IHx8ICdPQ1hfREFUQV9MSVNUX0dSSUQuTUVOVS5ERUxFVEUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGRlbGV0ZU1lbnVJdGVtS2V5IHx8ICdPQ1hfREFUQV9MSVNUX0dSSUQuTUVOVS5ERUxFVEUnKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkRlbGV0ZVJvdyhpdGVtKVwiXG4gICAgICAgICAgICAgICpvY3hJZlBlcm1pc3Npb249XCJkZWxldGVQZXJtaXNzaW9uXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEhZGVsZXRlQWN0aW9uRW5hYmxlZEZpZWxkICYmICFmaWVsZElzVHJ1dGh5KGl0ZW0sIGRlbGV0ZUFjdGlvbkVuYWJsZWRGaWVsZClcIlxuICAgICAgICAgICAgICBbYXR0ci5uYW1lXT1cIidkYXRhLWxpc3QtYWN0aW9uLWJ1dHRvbidcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBpbmxpbmVMaXN0QWN0aW9ucyQgfCBhc3luY1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIighYWN0aW9uLmFjdGlvblZpc2libGVGaWVsZCB8fCBmaWVsZElzVHJ1dGh5KGl0ZW0sIGFjdGlvbi5hY3Rpb25WaXNpYmxlRmllbGQpKVwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm9jeElmUGVybWlzc2lvbj1cImFjdGlvbi5wZXJtaXNzaW9uXCJcbiAgICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHRcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImFjdGlvbi5jbGFzc2VzXCJcbiAgICAgICAgICAgICAgICBbaWNvbl09XCJhY3Rpb24uaWNvbiB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbi5jYWxsYmFjayhpdGVtKVwiXG4gICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cImFjdGlvbi5sYWJlbEtleSA/IChhY3Rpb24ubGFiZWxLZXkgfCB0cmFuc2xhdGUpIDogJydcIlxuICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhY3Rpb24ubGFiZWxLZXkgPyAoYWN0aW9uLmxhYmVsS2V5IHwgdHJhbnNsYXRlKSA6ICcnXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkIHx8ICghIWFjdGlvbi5hY3Rpb25FbmFibGVkRmllbGQgJiYgIWZpZWxkSXNUcnV0aHkoaXRlbSwgYWN0aW9uLmFjdGlvbkVuYWJsZWRGaWVsZCkpXCJcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc1Zpc2libGVPdmVyZmxvd01lbnVJdGVtcyhpdGVtKSB8IGFzeW5jXCI+XG4gICAgICAgICAgICA8cC1tZW51ICNtZW51IFttb2RlbF09XCIob3ZlcmZsb3dNZW51SXRlbXMkIHwgYXN5bmMpIHx8IFtdXCIgW3BvcHVwXT1cInRydWVcIiBhcHBlbmRUbz1cImJvZHlcIj48L3AtbWVudT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dFwiXG4gICAgICAgICAgICAgIFtpY29uXT1cIidwaSBwaS1lbGxpcHNpcy12J1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVPdmVyZmxvd01lbnUoJGV2ZW50LCBtZW51LCBpdGVtKVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ09DWF9EQVRBX0xJU1RfR1JJRC5NT1JFX0FDVElPTlNfQVJJQV9MQUJFTCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ09DWF9EQVRBX0xJU1RfR1JJRC5NT1JFX0FDVElPTlNfVE9PTFRJUCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtYmFzZSBmb250LWxpZ2h0IG15LTFcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIl9saXN0SXRlbVN1YnRpdGxlTGluZXMgPyBfbGlzdEl0ZW1TdWJ0aXRsZUxpbmVzIDogZGVmYXVsdExpc3RJdGVtU3VidGl0bGVMaW5lc1wiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6aXRlbX1cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcFwiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2wgb2YgZ2V0RmlsdGVyZWRDb2x1bW5zKClcIiBjbGFzcz1cInctMTJyZW0gbXktMiBtci0yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtYm9sZFwiIFtvY3hUb29sdGlwT25PdmVyZmxvd109XCJjb2wubmFtZUtleSB8IHRyYW5zbGF0ZVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAge3sgY29sLm5hbWVLZXkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbb2N4VG9vbHRpcE9uT3ZlcmZsb3ddPVwiY29sLmNvbHVtblR5cGUgPT09IGNvbHVtblR5cGUuVFJBTlNMQVRJT05fS0VZID8gKHJlc29sdmVGaWVsZERhdGEoaXRlbSxjb2wuaWQpIHwgdHJhbnNsYXRlKSA6IHJlc29sdmVGaWVsZERhdGEoaXRlbSwgY29sLmlkKVwiXG4gICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBkZWZlcihvbiB2aWV3cG9ydDspe1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJfbGlzdFZhbHVlID8gX2xpc3RWYWx1ZTogZGVmYXVsdExpc3RWYWx1ZVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgcm93T2JqZWN0OiBpdGVtLFxuICAgICAgICAgICAgICAgIGNvbHVtbjogY29sLFxuICAgICAgICAgICAgICAgIGNvbHVtblRlbXBsYXRlczogY29sdW1uVGVtcGxhdGVzXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIH0gQHBsYWNlaG9sZGVyIHtcbiAgICAgICAgICAgIDxwLXNrZWxldG9uIHdpZHRoPVwiNXJlbVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdExpc3RJdGVtU3VidGl0bGVMaW5lcyBsZXQtaXRlbT1cIiRpbXBsaWNpdFwiPlxuICA8ZGl2ICpuZ0Zvcj1cImxldCBzdWJ0aXRsZUxpbmVJZCBvZiBzdWJ0aXRsZUxpbmVJZHNcIiBjbGFzcz1cInN1YnRpdGxlTGluZSB0ZXh0LXhsIG15LTNcIj5cbiAgICB7eyByZXNvbHZlRmllbGREYXRhKGl0ZW0sIHN1YnRpdGxlTGluZUlkKSB9fVxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdExpc3RWYWx1ZSBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiIGxldC1jb2x1bW5UZW1wbGF0ZXM9XCJjb2x1bW5UZW1wbGF0ZXNcIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiY29sdW1uVGVtcGxhdGVzW2NvbHVtbi5pZF1cIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtblRlbXBsYXRlc1tjb2x1bW4uaWRdXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgIHJvd09iamVjdDogcm93T2JqZWN0LFxuICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uXG4gICAgICAgICAgICB9XCJcbiAgPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJkZWZhdWx0U3RyaW5nTGlzdFZhbHVlXCIgbGV0LXJvd09iamVjdD1cInJvd09iamVjdFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAgPG5nLWNvbnRhaW5lcj4ge3sgcmVzb2x2ZUZpZWxkRGF0YShyb3dPYmplY3QsIGNvbHVtbi5pZCkgfX0gPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZGVmYXVsdE51bWJlckxpc3RWYWx1ZVwiIGxldC1yb3dPYmplY3Q9XCJyb3dPYmplY3RcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxuZy1jb250YWluZXI+IHt7IHJlc29sdmVGaWVsZERhdGEocm93T2JqZWN0LCBjb2x1bW4uaWQpIHwgbnVtYmVyIH19IDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImRlZmF1bHRDdXN0b21MaXN0VmFsdWVcIiBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPiA8L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZGVmYXVsdERhdGVMaXN0VmFsdWVcIiBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyPiB7eyByZXNvbHZlRmllbGREYXRhKHJvd09iamVjdCwgY29sdW1uLmlkKSB8IGRhdGU6IGNvbHVtbi5kYXRlRm9ybWF0ID8/ICdtZWRpdW0nIH19IDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImRlZmF1bHRSZWxhdGl2ZURhdGVMaXN0VmFsdWVcIiBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyPlxuICAgIHt7ICdPQ1hfREFUQV9UQUJMRS5FRElURUQnIHwgdHJhbnNsYXRlIH19IHt7IHJlc29sdmVGaWVsZERhdGEocm93T2JqZWN0LCBjb2x1bW4uaWQpIHwgdGltZWFnbyB9fVxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJkZWZhdWx0VHJhbnNsYXRpb25LZXlMaXN0VmFsdWVcIiBsZXQtcm93T2JqZWN0PVwicm93T2JqZWN0XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8bmctY29udGFpbmVyPiB7eyByZXNvbHZlRmllbGREYXRhKHJvd09iamVjdCwgY29sdW1uLmlkKSB8IHRyYW5zbGF0ZSB9fSA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|