@alfresco/adf-core 7.0.0-alpha.9-13374096761 → 7.0.0-alpha.9-13385746022
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.
|
@@ -780,7 +780,7 @@ export class DataTableComponent {
|
|
|
780
780
|
return this.resizingColumnIndex >= 0;
|
|
781
781
|
}
|
|
782
782
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DataTableComponent, deps: [{ token: i0.ElementRef }, { token: i0.IterableDiffers }, { token: i1.MatIconRegistry }, { token: i2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
783
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: DataTableComponent, isStandalone: true, selector: "adf-datatable", inputs: { data: "data", rows: "rows", sorting: "sorting", columns: "columns", selectionMode: "selectionMode", multiselect: "multiselect", mainTableAction: "mainTableAction", actions: "actions", showMainDatatableActions: "showMainDatatableActions", showProvidedActions: "showProvidedActions", actionsPosition: "actionsPosition", actionsVisibleOnHover: "actionsVisibleOnHover", fallbackThumbnail: "fallbackThumbnail", contextMenu: "contextMenu", rowStyle: "rowStyle", rowStyleClass: "rowStyleClass", showHeader: "showHeader", stickyHeader: "stickyHeader", loading: "loading", noPermission: "noPermission", rowMenuCacheEnabled: "rowMenuCacheEnabled", resolverFn: "resolverFn", allowFiltering: "allowFiltering", isResizingEnabled: "isResizingEnabled", blurOnResize: "blurOnResize", displayCheckboxesOnHover: "displayCheckboxesOnHover", enableDragRows: "enableDragRows" }, outputs: { rowClick: "rowClick", rowDblClick: "rowDblClick", showRowContextMenu: "showRowContextMenu", showRowActionsMenu: "showRowActionsMenu", executeRowAction: "executeRowAction", columnOrderChanged: "columnOrderChanged", columnsWidthChanged: "columnsWidthChanged", selectedItemsCountChanged: "selectedItemsCountChanged", dragDropped: "dragDropped" }, host: { listeners: { "keyup": "onKeydown($event)" }, classAttribute: "adf-datatable" }, queries: [{ propertyName: "columnList", first: true, predicate: DataColumnListComponent, descendants: true }], viewQueries: [{ propertyName: "rowsList", predicate: DataTableRowComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n role=\"grid\"\n *ngIf=\"data\"\n class=\"adf-full-width adf-datatable-list\"\n [class.adf-sticky-header]=\"isStickyHeaderEnabled()\"\n [class.adf-datatable--empty]=\"(isEmpty() && !isHeaderVisible()) || loading\"\n [class.adf-datatable--empty--header-visible]=\"isEmpty() && isHeaderVisible()\"\n>\n <div *ngIf=\"isHeaderVisible()\" class=\"adf-datatable-header\" role=\"rowgroup\" [ngClass]=\"{ 'adf-sr-only': !isHeaderVisible() }\">\n <adf-datatable-row\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListSortPredicate]=\"filterDisabledColumns\"\n data-automation-id=\"datatable-row-header\"\n [disabled]=\"!isHeaderVisible()\"\n class=\"adf-datatable-row\"\n role=\"row\">\n\n\n <!-- Drag -->\n <div *ngIf=\"enableDragRows\" class=\"adf-datatable-cell-header adf-drag-column\">\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.DRAG' | translate }}</span>\n </div>\n\n <!-- Actions (left) -->\n <div *ngIf=\"actions && actionsPosition === 'left'\" class=\"adf-actions-column adf-datatable-cell-header\">\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.ACTIONS' | translate }}</span>\n </div>\n\n <!-- Columns -->\n <div *ngIf=\"multiselect\" class=\"adf-datatable-cell-header adf-datatable-checkbox\">\n <mat-checkbox [indeterminate]=\"isSelectAllIndeterminate\" [checked]=\"isSelectAllChecked\" (change)=\"onSelectAllClick($event)\" class=\"adf-checkbox-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.SELECT_ALL' | translate }}</mat-checkbox>\n </div>\n\n <ng-container\n *ngFor=\"\n let col of getVisibleColumns();\n let columnIndex = index\n let lastColumn = last\"\n >\n <div\n class=\"adf-datatable-cell--{{col.type || 'text'}} {{col.cssClass}} adf-datatable-cell-header adf-datatable-cell-data\"\n *ngIf=\"col.title || !showProvidedActions\"\n [attr.data-automation-id]=\"'auto_id_' + col.key\"\n [ngClass]=\"{\n 'adf-sortable': col.sortable,\n 'adf-datatable__cursor--pointer': !isResizing,\n 'adf-datatable__header--sorted-asc': isColumnSorted(col, 'asc'),\n 'adf-datatable__header--sorted-desc': isColumnSorted(col, 'desc')}\"\n [ngStyle]=\"(col.width) && !lastColumn && {'flex': getFlexValue(col)}\"\n [attr.aria-label]=\"(col.title | translate) + (col.subtitle ? ' ' + col.subtitle : '')\"\n (click)=\"onColumnHeaderClick(col, $event)\"\n (keyup.enter)=\"onColumnHeaderClick(col, $event)\"\n role=\"columnheader\"\n [attr.tabindex]=\"isHeaderVisible() ? 0 : null\"\n [attr.aria-sort]=\"col.sortable ? (getAriaSort(col) | translate) : null\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n (cdkDragStarted)=\"isDraggingHeaderColumn = true\"\n (cdkDragDropped)=\"onDropHeaderColumn($event)\"\n [cdkDragDisabled]=\"!col.draggable\"\n (mouseenter)=\"hoveredHeaderColumnIndex = columnIndex\"\n (mouseleave)=\"hoveredHeaderColumnIndex = -1\"\n adf-drop-zone dropTarget=\"header\"\n [dropColumn]=\"col\"\n >\n\n <div\n adf-resizable\n #resizableElement=\"adf-resizable\"\n [coverPadding]=\"10\"\n (resizing)=\"onResizing($event, columnIndex)\"\n (resizeStart)=\"resizingColumnIndex = columnIndex\"\n (resizeEnd)=\"onResizingEnd()\"\n [attr.data-automation-id]=\"'auto_header_content_id_' + col.key\"\n class=\"adf-datatable-cell-header-content\"\n [ngClass]=\"{ 'adf-datatable-cell-header-content--hovered':\n hoveredHeaderColumnIndex === columnIndex &&\n !isDraggingHeaderColumn &&\n !isResizing && col.sortable}\"\n >\n <ng-container *ngIf=\"!col.header\">\n <span\n *ngIf=\"col.title\"\n title=\"{{col.title | translate}}\"\n class=\"adf-datatable-cell-value\"\n >\n {{col.title | translate}}\n </span>\n\n <span\n *ngIf=\"col.subtitle\"\n title=\"{{col.subtitle | translate}}\"\n class=\"adf-datatable-cell-value adf-datatable-cell-header_subtitle\"\n >\n ({{col.subtitle | translate}})\n </span>\n\n <span *ngIf=\"col.title && col.sortable && isDraggingHeaderColumn\" class=\"adf-sr-only\" aria-live=\"polite\">\n {{ getSortLiveAnnouncement(col) | translate: { string: col.title | translate } }}\n </span>\n\n <span *ngIf=\"!col.title && !col.sortable && !headerFilterTemplate\" [attr.title]=\"'ADF-DATATABLE.ACCESSIBILITY.EMPTY_HEADER' | translate\"></span>\n </ng-container>\n\n <div *ngIf=\"col.header\" class=\"adf-datatable-cell-value\">\n <ng-template [ngTemplateOutlet]=\"col.header\" [ngTemplateOutletContext]=\"{$implicit: col}\" />\n </div>\n\n <span\n [class.adf-datatable__header--sorted-asc]=\"isColumnSorted(col, 'asc')\"\n [class.adf-datatable__header--sorted-desc]=\"isColumnSorted(col, 'desc')\">\n </span>\n\n <ng-template *ngIf=\"allowFiltering\" [ngTemplateOutlet]=\"headerFilterTemplate\" [ngTemplateOutletContext]=\"{$implicit: col}\" />\n\n <span\n *ngIf=\"col.draggable\"\n cdkDragHandle\n [ngClass]=\"{ 'adf-datatable-cell-header-drag-icon': !isResizing }\"\n >\n <adf-icon\n *ngIf=\"hoveredHeaderColumnIndex === columnIndex && !isResizing\"\n value=\"adf:drag_indicator\"\n class=\"adf-datatable-cell-header-drag-icon-visible\"\n [attr.data-automation-id]=\"'adf-datatable-cell-header-drag-icon-'+col.key\" />\n </span>\n </div>\n <div\n *ngIf=\"isResizingEnabled && col.resizable && !lastColumn\"\n [ngClass]=\"hoveredHeaderColumnIndex === columnIndex && !isResizing || resizingColumnIndex === columnIndex ? 'adf-datatable__resize-handle-visible' : 'adf-datatable__resize-handle-hidden'\"\n adf-resize-handle\n tabindex=\"0\"\n role=\"button\"\n (click)=\"$event.stopPropagation()\"\n (keyup.enter)=\"$event.stopPropagation()\"\n class=\"adf-datatable__resize-handle\"\n [resizableContainer]=\"resizableElement\">\n <div class=\"adf-datatable__resize-handle--divider\"></div>\n </div>\n <div class=\"adf-drop-header-cell-placeholder\" *cdkDragPlaceholder></div>\n </div>\n </ng-container>\n\n <!-- Header actions (right) -->\n <div\n *ngIf=\"(actions && actionsPosition === 'right') ||\n (mainActionTemplate && showMainDatatableActions)\"\n class=\"adf-actions-column adf-datatable-actions-menu adf-datatable-cell-header adf-datatable__actions-cell\"\n [class.adf-datatable-actions-menu-provided]=\"showProvidedActions\"\n >\n <ng-container *ngIf=\"mainActionTemplate\">\n <button\n data-automation-id=\"adf-datatable-main-menu-button\"\n title=\"{{ 'ADF-DATATABLE.CONTENT-ACTIONS.SELECT_COLUMNS' | translate }}\"\n mat-icon-button\n #mainMenuTrigger=\"matMenuTrigger\"\n (keydown.enter)=\"mainMenuTrigger.openMenu()\"\n [matMenuTriggerFor]=\"mainMenu\">\n <mat-icon>view_week_outline</mat-icon>\n </button>\n <mat-menu #mainMenu>\n <ng-container\n [ngTemplateOutlet]=\"mainActionTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: mainMenuTrigger\n }\" />\n </mat-menu>\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.ACTIONS' | translate }}</span>\n </ng-container>\n </div>\n\n </adf-datatable-row>\n </div>\n\n <div\n *ngIf=\"!loading; else loadingRowTemplate\"\n class=\"adf-datatable-body\"\n [ngClass]=\"{ 'adf-blur-datatable-body': blurOnResize && (isDraggingHeaderColumn || isResizing), 'adf-datatable-body__draggable': enableDragRows && !isDraggingRow, 'adf-datatable-body__dragging': isDraggingRow }\"\n cdkDropList\n [cdkDropListDisabled]=\"!enableDragRows\"\n role=\"rowgroup\">\n <ng-container *ngIf=\"!noPermission; else noPermissionsRowTemplate\">\n <adf-datatable-row *ngFor=\"let row of data.getRows(); let idx = index\"\n cdkDrag\n [cdkDragDisabled]=\"!enableDragRows\"\n (cdkDragDropped)=\"onDragDrop($event)\"\n (cdkDragStarted)=\"onDragStart()\"\n (cdkDragEnded)=\"onDragEnd()\"\n [cdkDragBoundary]=\"'.adf-datatable-body'\"\n [row]=\"row\"\n (select)=\"onEnterKeyPressed(row, $event)\"\n (keyup)=\"onRowKeyUp(row, $event)\"\n (keydown)=\"onRowEnterKeyDown(row, $event)\"\n [adf-upload]=\"rowAllowsDrop(row)\"\n [adf-upload-data]=\"row\"\n [ngStyle]=\"rowStyle\"\n [ngClass]=\"getRowStyle(row)\"\n [class.adf-datatable-row__dragging]=\"isDraggingRow\"\n [attr.data-automation-id]=\"'datatable-row-' + idx\"\n (contextmenu)=\"markRowAsContextMenuSource(row)\">\n <!-- Drag button -->\n <div *ngIf=\"enableDragRows\"\n role=\"gridcell\"\n class=\"adf-datatable-cell adf-datatable__actions-cell adf-datatable-hover-only\">\n <button mat-icon-button\n [attr.aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.DRAG' | translate\">\n <mat-icon>drag_indicator</mat-icon>\n </button>\n </div>\n\n <!-- Actions (left) -->\n <div *ngIf=\"actions && actionsPosition === 'left'\" role=\"gridcell\" class=\"adf-datatable-cell\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" #actionsMenuTrigger=\"matMenuTrigger\"\n [ngClass]=\"getHideActionsWithoutHoverClass(actionsMenuTrigger)\"\n [title]=\"'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate\"\n [attr.id]=\"'action_menu_left_' + idx\"\n [attr.data-automation-id]=\"'action_menu_' + idx\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of getRowActions(row)\"\n [attr.data-automation-id]=\"action.title\"\n [disabled]=\"action.disabled\"\n (click)=\"onExecuteRowAction(row, action)\">\n <mat-icon *ngIf=\"action.icon\">{{ action.icon }}</mat-icon>\n <span>{{ action.title | translate }}</span>\n </button>\n </mat-menu>\n </div>\n\n <label *ngIf=\"multiselect\"\n (keydown.enter)=\"onEnterKeyPressed(row, $any($event))\"\n (click)=\"onCheckboxLabelClick(row, $event)\"\n [for]=\"'select-file-' + idx\"\n class=\"adf-datatable-cell adf-datatable-checkbox adf-datatable-checkbox-single\"\n tabindex=\"0\">\n <mat-checkbox\n [id]=\"'select-file-' + idx\"\n [disabled]=\"!row?.isSelectable\"\n [class.adf-datatable-checkbox-selected]=\"row.isSelected\"\n [class.adf-datatable-hover-only]=\"displayCheckboxesOnHover\"\n [checked]=\"row.isSelected\"\n [attr.aria-checked]=\"row.isSelected\"\n [aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.SELECT_FILE' | translate\"\n role=\"checkbox\"\n data-adf-datatable-row-checkbox\n (change)=\"onCheckboxChange(row, $event)\"\n class=\"adf-checkbox-sr-only\">\n {{ 'ADF-DATATABLE.ACCESSIBILITY.SELECT_FILE' | translate }}\n </mat-checkbox>\n </label>\n\n <div\n *ngFor=\"let col of getVisibleColumns(); let lastColumn = last;\"\n role=\"gridcell\"\n class=\"adf-datatable-cell adf-datatable-cell--{{col.type || 'text'}} {{col.cssClass}} adf-datatable-cell-data\"\n [attr.title]=\"col.title | translate\"\n [attr.data-automation-id]=\"getAutomationValue(row)\"\n [attr.aria-selected]=\"row.isSelected\"\n [attr.aria-label]=\"col.title ? (col.title | translate) : null\"\n (click)=\"onRowClick(row, $event)\"\n tabindex=\"0\"\n (keydown.enter)=\"onEnterKeyPressed(row, $any($event))\"\n [adf-context-menu]=\"getContextMenuActions(row, col)\"\n [adf-context-menu-enabled]=\"contextMenu\"\n adf-drop-zone dropTarget=\"cell\" [dropColumn]=\"col\" [dropRow]=\"row\"\n [ngStyle]=\"(col.width) && !lastColumn && {'flex': getFlexValue(col)}\"\n >\n <div *ngIf=\"!col.template\" class=\"adf-datatable-cell-container\">\n <ng-container [ngSwitch]=\"data.getColumnType(row, col)\">\n <div *ngSwitchCase=\"'image'\" class=\"adf-cell-value\">\n <mat-icon *ngIf=\"isIconValue(row, col); else no_iconvalue\">{{ asIconValue(row, col) }}\n </mat-icon>\n <ng-template #no_iconvalue>\n <mat-icon class=\"adf-datatable-selected\"\n *ngIf=\"row.isSelected && !multiselect; else no_selected_row\" svgIcon=\"selected\" />\n <ng-template #no_selected_row>\n <img class=\"adf-datatable-center-img-ie\"\n [attr.aria-label]=\"(data.getValue(row, col) | fileType) === 'disable' ?\n ('ADF-DATATABLE.ACCESSIBILITY.ICON_DISABLED' | translate) :\n 'ADF-DATATABLE.ACCESSIBILITY.ICON_TEXT' | translate:{\n type: 'ADF-DATATABLE.FILE_TYPE.' + (data.getValue(row, col) | fileType | uppercase) | translate\n }\"\n [attr.alt]=\"(data.getValue(row, col) | fileType) === 'disable' ?\n ('ADF-DATATABLE.ACCESSIBILITY.ICON_DISABLED' | translate) :\n 'ADF-DATATABLE.ACCESSIBILITY.ICON_TEXT' | translate:{\n type: 'ADF-DATATABLE.FILE_TYPE.' + (data.getValue(row, col) | fileType | uppercase) | translate\n }\"\n src=\"{{ data.getValue(row, col) }}\"\n (error)=\"onImageLoadingError($event, row)\">\n </ng-template>\n </ng-template>\n </div>\n\n <div *ngSwitchCase=\"'icon'\" class=\"adf-cell-value\">\n <adf-icon-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\"\n />\n </div>\n <div\n *ngSwitchCase=\"'date'\"\n class=\"adf-cell-value adf-cell-date\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'date_' + (data.getValue(row, col, resolverFn) | adfLocalizedDate: 'medium') \"\n >\n <adf-date-cell class=\"adf-datatable-center-date-column-ie\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\"\n [dateConfig]=\"col.dateConfig\" />\n </div>\n\n <div *ngSwitchCase=\"'location'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'location' + data.getValue(row, col, resolverFn)\">\n <adf-location-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'fileSize'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'fileSize_' + data.getValue(row, col, resolverFn)\">\n <adf-filesize-cell class=\"adf-datatable-center-size-column-ie\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'text'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'text_' + data.getValue(row, col, resolverFn)\">\n <adf-datatable-cell\n [copyContent]=\"col.copyContent\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'boolean'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'boolean_' + data.getValue(row, col, resolverFn)\">\n <adf-boolean-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'json'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\">\n <adf-json-cell\n [editable]=\"col.editable\"\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\" />\n </div>\n <div *ngSwitchCase=\"'amount'\"\n class=\"adf-cell-value\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'amount_' + data.getValue(row, col, resolverFn)\">\n <adf-amount-cell\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\"\n [currencyConfig]=\"col.currencyConfig\" />\n </div>\n <div *ngSwitchCase=\"'number'\"\n class=\"adf-cell-value\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'number_' + data.getValue(row, col, resolverFn)\">\n <adf-number-cell\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\"\n [decimalConfig]=\"col.decimalConfig\" />\n </div>\n <span *ngSwitchDefault class=\"adf-cell-value\">\n <!-- empty cell for unknown column type -->\n </span>\n </ng-container>\n </div>\n <div *ngIf=\"col.template\" class=\"adf-datatable-cell-container\">\n <div class=\"adf-cell-value\" [attr.tabindex]=\"col.focus ? 0 : null\">\n <ng-container\n [ngTemplateOutlet]=\"col.template\"\n [ngTemplateOutletContext]=\"{ $implicit: { data: data, row: row, col: col }, value: data.getValue(row, col, resolverFn) }\" />\n </div>\n </div>\n </div>\n\n <!-- Row actions (right) -->\n <div *ngIf=\"\n !showProvidedActions &&\n ((actions && actionsPosition === 'right') ||\n (mainActionTemplate && showMainDatatableActions))\"\n role=\"gridcell\"\n tabindex=\"0\"\n class=\"adf-datatable-cell adf-datatable__actions-cell adf-datatable-center-actions-column-ie adf-datatable-actions-menu\">\n\n <ng-container *ngIf=\"(actions && actionsPosition === 'right')\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" #actionsMenuTrigger=\"matMenuTrigger\"\n [ngClass]=\"getHideActionsWithoutHoverClass(actionsMenuTrigger)\"\n [attr.aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.ROW_OPTION_BUTTON' | translate\"\n [title]=\"'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate\"\n [attr.id]=\"'action_menu_right_' + idx\"\n [attr.data-automation-id]=\"'action_menu_' + idx\"\n (keydown.enter)=\"actionsMenuTrigger.openMenu()\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of getRowActions(row)\"\n [attr.data-automation-id]=\"action.title\"\n [attr.aria-label]=\"action.title | translate\"\n [disabled]=\"action.disabled\"\n (click)=\"onExecuteRowAction(row, action)\">\n <mat-icon *ngIf=\"action.icon\">{{ action.icon }}</mat-icon>\n <span>{{ action.title | translate }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n </adf-datatable-row>\n <div *ngIf=\"isEmpty()\" role=\"row\" class=\"adf-datatable-row\">\n <div class=\"adf-no-content-container adf-datatable-cell\" role=\"gridcell\">\n <ng-template *ngIf=\"noContentTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"noContentTemplate\" />\n <ng-content select=\"adf-empty-list\" />\n </div>\n </div>\n </ng-container>\n\n <ng-template #noPermissionsRowTemplate>\n <div\n role=\"row\"\n class=\"adf-datatable-row adf-no-permission__row\">\n <div class=\"adf-no-permission__cell adf-no-content-container adf-datatable-cell\">\n <ng-template *ngIf=\"noPermissionTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"noPermissionTemplate\" />\n </div>\n </div>\n </ng-template>\n </div>\n <ng-template #loadingRowTemplate>\n <div class=\"adf-datatable-row\">\n <div class=\"adf-no-content-container adf-datatable-cell\">\n <ng-template *ngIf=\"loadingTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"loadingTemplate\" />\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".adf-datatable{overflow-y:scroll;height:100%}.adf-datatable .adf-full-width{width:100%}.adf-datatable__resize-handle{padding:0 2px}.adf-datatable__resize-handle-visible{visibility:visible}.adf-datatable__resize-handle-hidden{visibility:hidden}.adf-datatable__resize-handle--divider{padding:24px 0;border:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable__resize-handle:hover{cursor:col-resize}.adf-datatable__cursor--pointer:hover{cursor:pointer}.adf-datatable-list,.cdk-drag-preview{display:flex;flex-direction:column;background-color:var(--adf-theme-background-card-color);border:1px solid var(--adf-theme-foreground-text-color-007);box-sizing:border-box;overflow-x:auto}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-center-size-column-ie,.cdk-drag-preview .adf-datatable-center-size-column-ie{padding-top:17px}.adf-datatable-list .adf-datatable__actions-cell.adf-datatable-center-actions-column-ie,.cdk-drag-preview .adf-datatable__actions-cell.adf-datatable-center-actions-column-ie{padding-top:7px}.adf-datatable-list .adf-cell-date.adf-datatable-center-date-column-ie,.cdk-drag-preview .adf-cell-date.adf-datatable-center-date-column-ie{position:relative}.adf-datatable-list .adf-cell-date.adf-datatable-center-date-column-ie .adf-datatable-cell-value,.cdk-drag-preview .adf-cell-date.adf-datatable-center-date-column-ie .adf-datatable-cell-value{width:100%}.adf-datatable-list .adf-datatable-center-img-ie,.cdk-drag-preview .adf-datatable-center-img-ie{padding:0;min-width:0;width:24px;height:56px}}.adf-datatable-list .adf-datatable-header,.cdk-drag-preview .adf-datatable-header{display:flex;flex-direction:column;width:fit-content;min-width:100%;box-sizing:border-box}.adf-datatable-list .adf-datatable-header .adf-datatable-row,.cdk-drag-preview .adf-datatable-header .adf-datatable-row{padding-right:15px}.adf-datatable-list .adf-datatable-header .adf-datatable-row:hover,.adf-datatable-list .adf-datatable-header .adf-datatable-row:focus,.cdk-drag-preview .adf-datatable-header .adf-datatable-row:hover,.cdk-drag-preview .adf-datatable-header .adf-datatable-row:focus{background-color:inherit}.adf-datatable-list .adf-datatable-row:hover,.adf-datatable-list .adf-datatable-row:focus,.cdk-drag-preview .adf-datatable-row:hover,.cdk-drag-preview .adf-datatable-row:focus{background-color:var(--adf-theme-background-hover-color)}.adf-datatable-list .adf-datatable-row:focus,.cdk-drag-preview .adf-datatable-row:focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-datatable-list .adf-datatable-row .adf-cell-value:focus,.adf-datatable-list .adf-datatable-row .adf-datatable-cell-header:focus,.cdk-drag-preview .adf-datatable-row .adf-cell-value:focus,.cdk-drag-preview .adf-datatable-row .adf-datatable-cell-header:focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-datatable-list .adf-blur-datatable-body,.cdk-drag-preview .adf-blur-datatable-body{filter:blur(3px)}.adf-datatable-list .adf-datatable-body,.cdk-drag-preview .adf-datatable-body{display:flex;flex-direction:column;background-color:inherit;width:100%;min-width:100%}.adf-datatable-list .adf-datatable-body.adf-datatable-body__draggable,.cdk-drag-preview .adf-datatable-body.adf-datatable-body__draggable{cursor:grab}.adf-datatable-list .adf-datatable-body.adf-datatable-body__dragging,.cdk-drag-preview .adf-datatable-body.adf-datatable-body__dragging{cursor:grabbing}.adf-datatable-list .adf-datatable-body .adf-datatable-row,.cdk-drag-preview .adf-datatable-body .adf-datatable-row{transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-property:background-color;border-top:1px solid var(--adf-theme-foreground-text-color-007);min-height:var(--theme-display-3-font-size);cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-is-selected,.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-is-selected:hover,.cdk-drag-preview .adf-datatable-body .adf-datatable-row.adf-is-selected,.cdk-drag-preview .adf-datatable-body .adf-datatable-row.adf-is-selected:hover{background-color:var(--adf-theme-background-selected-button-color)}.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-drag-row,.cdk-drag-preview .adf-datatable-body .adf-datatable-row.adf-drag-row{cursor:grab}.adf-datatable-list .adf-datatable-body .adf-datatable-row:last-child,.cdk-drag-preview .adf-datatable-body .adf-datatable-row:last-child{border-bottom:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable-list .adf-datatable-body .adf-datatable-row label,.cdk-drag-preview .adf-datatable-body .adf-datatable-row label{cursor:inherit}.adf-datatable-list .adf-datatable-row,.cdk-drag-preview .adf-datatable-row{display:flex;align-items:center}.adf-datatable-list .adf-datatable-row:hover .adf-datatable-hover-only,.cdk-drag-preview .adf-datatable-row:hover .adf-datatable-hover-only{visibility:visible}.adf-datatable-list .adf-datatable-row .adf-datatable-hover-only,.cdk-drag-preview .adf-datatable-row .adf-datatable-hover-only{visibility:hidden}.adf-datatable-list .adf-datatable-row .adf-datatable-hover-only.adf-datatable-checkbox-selected,.cdk-drag-preview .adf-datatable-row .adf-datatable-hover-only.adf-datatable-checkbox-selected{visibility:visible}.adf-datatable-list .adf-datatable-row .adf-datatable-checkbox,.cdk-drag-preview .adf-datatable-row .adf-datatable-checkbox{max-width:65px;width:65px}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-row .adf-datatable-checkbox,.cdk-drag-preview .adf-datatable-row .adf-datatable-checkbox{padding-top:15px}}.adf-datatable-list .adf-datatable-cell,.adf-datatable-list .adf-datatable-cell-header,.cdk-drag-preview .adf-datatable-cell,.cdk-drag-preview .adf-datatable-cell-header{text-align:left;box-sizing:border-box;min-width:65px}.adf-datatable-list .adf-datatable-cell--text,.adf-datatable-list .adf-datatable-cell-header--text,.cdk-drag-preview .adf-datatable-cell--text,.cdk-drag-preview .adf-datatable-cell-header--text{text-align:left;position:relative}.adf-datatable-list .adf-datatable-cell--date,.adf-datatable-list .adf-datatable-cell-header--date,.cdk-drag-preview .adf-datatable-cell--date,.cdk-drag-preview .adf-datatable-cell-header--date{text-align:left}.adf-datatable-list .adf-datatable-cell--number,.adf-datatable-list .adf-datatable-cell-header--number,.cdk-drag-preview .adf-datatable-cell--number,.cdk-drag-preview .adf-datatable-cell-header--number{text-align:right}.adf-datatable-list .adf-datatable-cell--image,.adf-datatable-list .adf-datatable-cell--icon,.adf-datatable-list .adf-datatable-cell-header--image,.adf-datatable-list .adf-datatable-cell-header--icon,.cdk-drag-preview .adf-datatable-cell--image,.cdk-drag-preview .adf-datatable-cell--icon,.cdk-drag-preview .adf-datatable-cell-header--image,.cdk-drag-preview .adf-datatable-cell-header--icon{padding-left:24px;padding-right:24px;width:65px;min-width:65px;text-align:left}.adf-datatable-list .adf-datatable-cell--fileSize,.adf-datatable-list .adf-datatable-cell-header--fileSize,.cdk-drag-preview .adf-datatable-cell--fileSize,.cdk-drag-preview .adf-datatable-cell-header--fileSize{min-width:65px}.adf-datatable-list .adf-datatable-cell button .mat-icon,.adf-datatable-list .adf-datatable-cell-header button .mat-icon,.cdk-drag-preview .adf-datatable-cell button .mat-icon,.cdk-drag-preview .adf-datatable-cell-header button .mat-icon{margin-top:-10px}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-1,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-1,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-1,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-1{flex-grow:1}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-2,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-2,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-2,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-2{flex-grow:2}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-3,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-3,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-3,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-3{flex-grow:3}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-4,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-4,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-4,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-4{flex-grow:4}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-5,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-5,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-5,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-5{flex-grow:5}.adf-datatable-list .adf-datatable-cell-header.adf-no-grow-cell,.adf-datatable-list .adf-datatable-cell.adf-no-grow-cell,.cdk-drag-preview .adf-datatable-cell-header.adf-no-grow-cell,.cdk-drag-preview .adf-datatable-cell.adf-no-grow-cell{flex-grow:0;min-width:100px}.adf-datatable-list .adf-datatable-cell-header.adf-min-width-cell,.adf-datatable-list .adf-datatable-cell.adf-min-width-cell,.cdk-drag-preview .adf-datatable-cell-header.adf-min-width-cell,.cdk-drag-preview .adf-datatable-cell.adf-min-width-cell{min-width:110px}.adf-datatable-list .adf-datatable-cell,.cdk-drag-preview .adf-datatable-cell{color:var(--adf-theme-foreground-text-color);min-height:inherit}.adf-datatable-list .adf-datatable-cell,.adf-datatable-list .adf-datatable-cell-header,.cdk-drag-preview .adf-datatable-cell,.cdk-drag-preview .adf-datatable-cell-header{flex:1;padding:0;align-items:center;display:flex;align-self:stretch}.adf-datatable-list .adf-datatable-cell:first-child,.adf-datatable-list .adf-datatable-cell-header:first-child,.cdk-drag-preview .adf-datatable-cell:first-child,.cdk-drag-preview .adf-datatable-cell-header:first-child{margin-left:15px;box-sizing:content-box}.adf-datatable-list .adf-datatable-cell.adf-drag-column,.adf-datatable-list .adf-datatable-cell-header.adf-drag-column,.cdk-drag-preview .adf-datatable-cell.adf-drag-column,.cdk-drag-preview .adf-datatable-cell-header.adf-drag-column{flex:0}.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-container,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-container,.cdk-drag-preview .adf-datatable-cell .adf-datatable-cell-container,.cdk-drag-preview .adf-datatable-cell-header .adf-datatable-cell-container{overflow:hidden;min-height:inherit;align-items:center;display:flex;width:100%;padding:0 10px}.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-value,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell-header .adf-datatable-cell-value{word-break:break-word;display:block}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-value,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell-header .adf-datatable-cell-value{padding:17px 10px 10px}}.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu{margin-left:auto;justify-content:end;padding-right:15px}.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu:focus-visible .adf-datatable-hide-actions-without-hover,.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu:focus-within .adf-datatable-hide-actions-without-hover,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu:focus-visible .adf-datatable-hide-actions-without-hover,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu:focus-within .adf-datatable-hide-actions-without-hover{visibility:visible}.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu-provided,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu-provided{max-width:100px!important;justify-content:center;padding-right:0}.adf-datatable-list .adf-datatable-checkbox,.cdk-drag-preview .adf-datatable-checkbox{display:flex;justify-content:center}.adf-datatable-list .adf-cell-value,.cdk-drag-preview .adf-cell-value{display:flex;min-height:inherit;align-items:center;word-break:break-all;width:100%}.adf-datatable-list .adf-datatable__actions-cell,.adf-datatable-list .adf-datatable-cell--image,.cdk-drag-preview .adf-datatable__actions-cell,.cdk-drag-preview .adf-datatable-cell--image{max-width:65px;display:flex}.adf-datatable-list .adf-datatable__actions-cell .adf-cell-value,.adf-datatable-list .adf-datatable-cell--image .adf-cell-value,.cdk-drag-preview .adf-datatable__actions-cell .adf-cell-value,.cdk-drag-preview .adf-datatable-cell--image .adf-cell-value{width:unset}.adf-datatable-list .adf-datatable-row:not(:hover) .adf-datatable-hide-actions-without-hover,.cdk-drag-preview .adf-datatable-row:not(:hover) .adf-datatable-hide-actions-without-hover{visibility:hidden}.adf-datatable-list .adf-datatable-cell--image,.cdk-drag-preview .adf-datatable-cell--image{max-width:65px}.adf-datatable-list .adf-location-cell a,.cdk-drag-preview .adf-location-cell a{text-decoration:none;color:var(--adf-theme-foreground-text-color)}.adf-datatable-list .adf-location-cell a:hover,.cdk-drag-preview .adf-location-cell a:hover{color:var(--theme-accent-500);text-decoration:underline}.adf-datatable-list .adf-sr-only,.cdk-drag-preview .adf-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.adf-datatable-list .adf-is-selected,.cdk-drag-preview .adf-is-selected{background:var(--adf-theme-primary-100)}.adf-datatable-list .adf-datatable-link,.cdk-drag-preview .adf-datatable-link{text-decoration:none;color:var(--adf-theme-foreground-text-color)}.adf-datatable-list .adf-datatable-link:hover,.cdk-drag-preview .adf-datatable-link:hover{color:var(--theme-accent-500);text-decoration:underline}.adf-datatable-list .adf-dynamic-column .adf-datatable-link:hover,.cdk-drag-preview .adf-dynamic-column .adf-datatable-link:hover{text-decoration:none}.adf-datatable-list .adf-dynamic-column .adf-datatable-link:hover .adf-datatable-cell-value,.cdk-drag-preview .adf-dynamic-column .adf-datatable-link:hover .adf-datatable-cell-value{text-decoration:underline}.adf-datatable-list .adf-ellipsis-cell,.cdk-drag-preview .adf-ellipsis-cell{position:sticky;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.adf-datatable-list .adf-ellipsis-cell.adf-datatable-cell-header,.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell,.cdk-drag-preview .adf-ellipsis-cell.adf-datatable-cell-header,.cdk-drag-preview .adf-ellipsis-cell .adf-datatable-content-cell{max-width:calc(100% - .1px);overflow:hidden;text-overflow:ellipsis}.adf-datatable-list .adf-ellipsis-cell.adf-datatable-cell-header .adf-datatable-cell-value,.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell .adf-datatable-cell-value,.cdk-drag-preview .adf-ellipsis-cell.adf-datatable-cell-header .adf-datatable-cell-value,.cdk-drag-preview .adf-ellipsis-cell .adf-datatable-content-cell .adf-datatable-cell-value{overflow:hidden;text-overflow:ellipsis}.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell,.cdk-drag-preview .adf-ellipsis-cell .adf-datatable-content-cell{overflow:unset}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-ellipsis-cell .adf-cell-value,.cdk-drag-preview .adf-ellipsis-cell .adf-cell-value{top:100%}}.adf-datatable-list .adf-ellipsis-cell>div:after,.cdk-drag-preview .adf-ellipsis-cell>div:after{content:attr(title);overflow:hidden;height:0;display:block}.adf-datatable-list .adf-no-content-container.adf-datatable-cell,.cdk-drag-preview .adf-no-content-container.adf-datatable-cell{padding:0;border:none;width:100%;justify-content:center}.adf-datatable-list .adf-no-content-container.adf-datatable-cell>img,.cdk-drag-preview .adf-no-content-container.adf-datatable-cell>img{width:100%}.adf-datatable-list .adf-loading-content-container,.cdk-drag-preview .adf-loading-content-container{padding:0;width:100%}.adf-datatable-list .adf-loading-content-container>img,.cdk-drag-preview .adf-loading-content-container>img{width:100%}.adf-datatable-list .adf-no-permission__row:hover,.cdk-drag-preview .adf-no-permission__row:hover{cursor:default;background-color:inherit}.adf-datatable-list .adf-no-permission__cell.adf-datatable-cell,.cdk-drag-preview .adf-no-permission__cell.adf-datatable-cell{padding:0}.adf-datatable-list .adf-hidden,.cdk-drag-preview .adf-hidden{display:none}@media all and (width <= 768px){.adf-datatable-list .adf-desktop-only.adf-ellipsis-cell,.cdk-drag-preview .adf-desktop-only.adf-ellipsis-cell{display:none}}@media (device-width <= 768px){.adf-datatable-list .adf-desktop-only.adf-ellipsis-cell,.cdk-drag-preview .adf-desktop-only.adf-ellipsis-cell{display:none}}.adf-datatable-cell-header{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:flex;align-items:center;text-overflow:ellipsis;font-weight:700;line-height:24px;letter-spacing:0;min-height:var(--theme-display-3-font-size);font-size:var(--theme-caption-font-size);color:var(--adf-theme-foreground-text-color);box-sizing:border-box}.adf-datatable-cell-header_subtitle{margin-left:3px;opacity:.6}.adf-datatable-cell-header.adf-sortable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;align-items:center}.adf-datatable-cell-header .adf-datatable__header--sorted-asc,.adf-datatable-cell-header .adf-datatable__header--sorted-desc{color:var(--adf-theme-foreground-text-color);padding-right:.25rem}.adf-datatable-cell-header .adf-datatable__header--sorted-asc:after,.adf-datatable-cell-header .adf-datatable__header--sorted-desc:after{font-family:Material Icons;font-weight:400;font-style:normal;font-size:var(--theme-headline-font-size);line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;word-wrap:normal;font-feature-settings:\"liga\";font-size:var(--theme-subheading-2-font-size);content:\"\\e5d8\";left:5px;right:5px;position:relative;vertical-align:middle}.adf-datatable-cell-header .adf-datatable__header--sorted-desc:after{content:\"\\e5db\"}.adf-datatable-cell-header .adf-datatable-cell--fileSize.adf-datatable__header--sorted-asc:before,.adf-datatable-cell-header .adf-datatable-cell--fileSize.adf-datatable__header--sorted-desc:before{left:-3px;right:-3px}.adf-datatable-cell-header .adf-datatable-cell-header-content{display:flex;flex-grow:1;align-items:center;margin:0 2px;padding:0 8px}.adf-datatable-cell-header .adf-datatable-cell-header-content .adf-datatable-cell-header-drag-icon-placeholder{padding:0;margin:0}.adf-datatable-cell-header .adf-datatable-cell-header-content--hovered{background-color:var(--adf-theme-background-hover-color);border-radius:6px}.adf-datatable-cell-header .adf-datatable-cell-header-drag-icon{margin-left:auto;cursor:move;margin-right:-.5rem;padding-left:-.5rem}.adf-datatable-cell-header .adf-datatable-cell-header-drag-icon-visible{display:flex}.adf-datatable-cell-header .adf-datatable-cell-value{padding-top:10px;padding-bottom:10px;line-height:24px;word-break:break-word}.adf-drop-header-cell-placeholder{display:flex;flex:1;background:var(--adf-theme-background-hover-color);border:dotted 1px rgba(0,0,0,.25);min-height:55px;transition:transform .25s cubic-bezier(0,0,.2,1)}.adf-datatable-cell-header.adf-ellipsis-cell .adf-datatable-cell-header-content{white-space:nowrap;overflow:hidden}.adf-datatable-cell-header.adf-ellipsis-cell .adf-datatable-cell-header-content--hovered .adf-datatable-cell-value{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cdk-drag-preview{min-height:var(--theme-display-3-font-size);display:flex;flex-direction:row;align-items:center;box-sizing:unset;background-color:var(--theme-background-color);border-top:2px solid var(--theme-selected-background-color);opacity:1}.cdk-drag-preview.adf-datatable-cell-header{border-radius:6px;background-color:var(--theme-background-color);transition:box-shadow .28s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.adf-checkbox-sr-only .mdc-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.adf-sticky-header{border-top:0;height:100%}.adf-sticky-header .adf-datatable-header{display:block;margin-right:0;border-top:1px solid var(--adf-theme-foreground-text-color-007);border-bottom:1px solid var(--adf-theme-foreground-text-color-007)}.adf-sticky-header .adf-datatable-body{display:block;flex:1;overflow-y:scroll;margin-top:-1px}.adf-upload__dragging>div{border-top:1px dashed var(--theme-accent-color-a200);border-bottom:1px dashed var(--theme-accent-color-a200)}.adf-upload__dragging>div:first-child{border-left:1px dashed var(--theme-accent-color-a200)}.adf-upload__dragging>div:last-child{border-right:1px dashed var(--theme-accent-color-a200)}.adf-datatable--empty{display:flex;flex-direction:column;flex:1;height:100%;overflow:hidden;min-height:0;justify-content:center;align-items:center;height:inherit}.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row{height:100%;background-color:var(--adf-theme-background-card-color);border:none}.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row:hover,.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row:focus{background-color:unset;cursor:default}.adf-datatable--empty--header-visible .adf-datatable-header{border:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable--empty--header-visible .adf-datatable-body{display:flex;flex-direction:column;flex:1;height:100%;overflow:hidden;min-height:0;justify-content:center;align-items:center}.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row{height:100%;background-color:var(--adf-theme-background-card-color);border:none}.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row:hover,.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row:focus{background-color:unset;cursor:default}@media screen and (width <= 380px){.adf-datatable-header{max-height:50%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i3.UpperCasePipe, name: "uppercase" }, { kind: "component", type: DataTableRowComponent, selector: "adf-datatable-row", inputs: ["row", "disabled"], outputs: ["select"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: DropZoneDirective, selector: "[adf-drop-zone]", inputs: ["dropTarget", "dropRow", "dropColumn"] }, { kind: "directive", type: ResizableDirective, selector: "[adf-resizable]", inputs: ["coverPadding"], outputs: ["resizeStart", "resizing", "resizeEnd"], exportAs: ["adf-resizable"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: IconComponent, selector: "adf-icon", inputs: ["color", "fontSet", "value"] }, { kind: "directive", type: ResizeHandleDirective, selector: "[adf-resize-handle]", inputs: ["resizableContainer"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: UploadDirective, selector: "[adf-upload]", inputs: ["adf-upload", "adf-upload-data", "mode", "multiple", "accept", "directory"] }, { kind: "directive", type: ContextMenuDirective, selector: "[adf-context-menu]", inputs: ["adf-context-menu", "adf-context-menu-enabled"] }, { kind: "pipe", type: FileTypePipe, name: "fileType" }, { kind: "component", type: IconCellComponent, selector: "adf-icon-cell" }, { kind: "pipe", type: LocalizedDatePipe, name: "adfLocalizedDate" }, { kind: "component", type: DateCellComponent, selector: "adf-date-cell", inputs: ["dateConfig"] }, { kind: "component", type: LocationCellComponent, selector: "adf-location-cell", inputs: ["link"] }, { kind: "component", type: FileSizeCellComponent, selector: "adf-filesize-cell" }, { kind: "component", type: DataTableCellComponent, selector: "adf-datatable-cell", inputs: ["data", "column", "row", "copyContent", "tooltip", "resolverFn"] }, { kind: "component", type: BooleanCellComponent, selector: "adf-boolean-cell" }, { kind: "component", type: JsonCellComponent, selector: "adf-json-cell", inputs: ["editable"] }, { kind: "component", type: AmountCellComponent, selector: "adf-amount-cell", inputs: ["currencyConfig"] }, { kind: "component", type: NumberCellComponent, selector: "adf-number-cell", inputs: ["decimalConfig"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
783
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: DataTableComponent, isStandalone: true, selector: "adf-datatable", inputs: { data: "data", rows: "rows", sorting: "sorting", columns: "columns", selectionMode: "selectionMode", multiselect: "multiselect", mainTableAction: "mainTableAction", actions: "actions", showMainDatatableActions: "showMainDatatableActions", showProvidedActions: "showProvidedActions", actionsPosition: "actionsPosition", actionsVisibleOnHover: "actionsVisibleOnHover", fallbackThumbnail: "fallbackThumbnail", contextMenu: "contextMenu", rowStyle: "rowStyle", rowStyleClass: "rowStyleClass", showHeader: "showHeader", stickyHeader: "stickyHeader", loading: "loading", noPermission: "noPermission", rowMenuCacheEnabled: "rowMenuCacheEnabled", resolverFn: "resolverFn", allowFiltering: "allowFiltering", isResizingEnabled: "isResizingEnabled", blurOnResize: "blurOnResize", displayCheckboxesOnHover: "displayCheckboxesOnHover", enableDragRows: "enableDragRows" }, outputs: { rowClick: "rowClick", rowDblClick: "rowDblClick", showRowContextMenu: "showRowContextMenu", showRowActionsMenu: "showRowActionsMenu", executeRowAction: "executeRowAction", columnOrderChanged: "columnOrderChanged", columnsWidthChanged: "columnsWidthChanged", selectedItemsCountChanged: "selectedItemsCountChanged", dragDropped: "dragDropped" }, host: { listeners: { "keyup": "onKeydown($event)" }, classAttribute: "adf-datatable" }, queries: [{ propertyName: "columnList", first: true, predicate: DataColumnListComponent, descendants: true }], viewQueries: [{ propertyName: "rowsList", predicate: DataTableRowComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n role=\"grid\"\n *ngIf=\"data\"\n class=\"adf-full-width adf-datatable-list\"\n [class.adf-sticky-header]=\"isStickyHeaderEnabled()\"\n [class.adf-datatable--empty]=\"(isEmpty() && !isHeaderVisible()) || loading\"\n [class.adf-datatable--empty--header-visible]=\"isEmpty() && isHeaderVisible()\"\n>\n <div *ngIf=\"isHeaderVisible()\" class=\"adf-datatable-header\" role=\"rowgroup\" [ngClass]=\"{ 'adf-sr-only': !isHeaderVisible() }\">\n <adf-datatable-row\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListSortPredicate]=\"filterDisabledColumns\"\n data-automation-id=\"datatable-row-header\"\n [disabled]=\"!isHeaderVisible()\"\n class=\"adf-datatable-row\"\n role=\"row\">\n\n\n <!-- Drag -->\n <div *ngIf=\"enableDragRows\" class=\"adf-datatable-cell-header adf-drag-column\">\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.DRAG' | translate }}</span>\n </div>\n\n <!-- Actions (left) -->\n <div *ngIf=\"actions && actionsPosition === 'left'\" class=\"adf-actions-column adf-datatable-cell-header\">\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.ACTIONS' | translate }}</span>\n </div>\n\n <!-- Columns -->\n <div *ngIf=\"multiselect\" class=\"adf-datatable-cell-header adf-datatable-checkbox\">\n <mat-checkbox [indeterminate]=\"isSelectAllIndeterminate\"\n [checked]=\"isSelectAllChecked\"\n (change)=\"onSelectAllClick($event)\"\n class=\"adf-checkbox-sr-only\"\n [aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.SELECT_ALL' | translate\">\n {{ 'ADF-DATATABLE.ACCESSIBILITY.SELECT_ALL' | translate }}\n </mat-checkbox>\n </div>\n\n <ng-container\n *ngFor=\"\n let col of getVisibleColumns();\n let columnIndex = index\n let lastColumn = last\"\n >\n <div\n class=\"adf-datatable-cell--{{col.type || 'text'}} {{col.cssClass}} adf-datatable-cell-header adf-datatable-cell-data\"\n *ngIf=\"col.title || !showProvidedActions\"\n [attr.data-automation-id]=\"'auto_id_' + col.key\"\n [ngClass]=\"{\n 'adf-sortable': col.sortable,\n 'adf-datatable__cursor--pointer': !isResizing,\n 'adf-datatable__header--sorted-asc': isColumnSorted(col, 'asc'),\n 'adf-datatable__header--sorted-desc': isColumnSorted(col, 'desc')}\"\n [ngStyle]=\"(col.width) && !lastColumn && {'flex': getFlexValue(col)}\"\n [attr.aria-label]=\"(col.title | translate) + (col.subtitle ? ' ' + col.subtitle : '')\"\n (click)=\"onColumnHeaderClick(col, $event)\"\n (keyup.enter)=\"onColumnHeaderClick(col, $event)\"\n role=\"columnheader\"\n [attr.tabindex]=\"isHeaderVisible() ? 0 : null\"\n [attr.aria-sort]=\"col.sortable ? (getAriaSort(col) | translate) : null\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n (cdkDragStarted)=\"isDraggingHeaderColumn = true\"\n (cdkDragDropped)=\"onDropHeaderColumn($event)\"\n [cdkDragDisabled]=\"!col.draggable\"\n (mouseenter)=\"hoveredHeaderColumnIndex = columnIndex\"\n (mouseleave)=\"hoveredHeaderColumnIndex = -1\"\n adf-drop-zone dropTarget=\"header\"\n [dropColumn]=\"col\"\n >\n\n <div\n adf-resizable\n #resizableElement=\"adf-resizable\"\n [coverPadding]=\"10\"\n (resizing)=\"onResizing($event, columnIndex)\"\n (resizeStart)=\"resizingColumnIndex = columnIndex\"\n (resizeEnd)=\"onResizingEnd()\"\n [attr.data-automation-id]=\"'auto_header_content_id_' + col.key\"\n class=\"adf-datatable-cell-header-content\"\n [ngClass]=\"{ 'adf-datatable-cell-header-content--hovered':\n hoveredHeaderColumnIndex === columnIndex &&\n !isDraggingHeaderColumn &&\n !isResizing && col.sortable}\"\n >\n <ng-container *ngIf=\"!col.header\">\n <span\n *ngIf=\"col.title\"\n title=\"{{col.title | translate}}\"\n class=\"adf-datatable-cell-value\"\n >\n {{col.title | translate}}\n </span>\n\n <span\n *ngIf=\"col.subtitle\"\n title=\"{{col.subtitle | translate}}\"\n class=\"adf-datatable-cell-value adf-datatable-cell-header_subtitle\"\n >\n ({{col.subtitle | translate}})\n </span>\n\n <span *ngIf=\"col.title && col.sortable && isDraggingHeaderColumn\" class=\"adf-sr-only\" aria-live=\"polite\">\n {{ getSortLiveAnnouncement(col) | translate: { string: col.title | translate } }}\n </span>\n\n <span *ngIf=\"!col.title && !col.sortable && !headerFilterTemplate\" [attr.title]=\"'ADF-DATATABLE.ACCESSIBILITY.EMPTY_HEADER' | translate\"></span>\n </ng-container>\n\n <div *ngIf=\"col.header\" class=\"adf-datatable-cell-value\">\n <ng-template [ngTemplateOutlet]=\"col.header\" [ngTemplateOutletContext]=\"{$implicit: col}\" />\n </div>\n\n <span\n [class.adf-datatable__header--sorted-asc]=\"isColumnSorted(col, 'asc')\"\n [class.adf-datatable__header--sorted-desc]=\"isColumnSorted(col, 'desc')\">\n </span>\n\n <ng-template *ngIf=\"allowFiltering\" [ngTemplateOutlet]=\"headerFilterTemplate\" [ngTemplateOutletContext]=\"{$implicit: col}\" />\n\n <span\n *ngIf=\"col.draggable\"\n cdkDragHandle\n [ngClass]=\"{ 'adf-datatable-cell-header-drag-icon': !isResizing }\"\n >\n <adf-icon\n *ngIf=\"hoveredHeaderColumnIndex === columnIndex && !isResizing\"\n value=\"adf:drag_indicator\"\n class=\"adf-datatable-cell-header-drag-icon-visible\"\n [attr.data-automation-id]=\"'adf-datatable-cell-header-drag-icon-'+col.key\" />\n </span>\n </div>\n <div\n *ngIf=\"isResizingEnabled && col.resizable && !lastColumn\"\n [ngClass]=\"hoveredHeaderColumnIndex === columnIndex && !isResizing || resizingColumnIndex === columnIndex ? 'adf-datatable__resize-handle-visible' : 'adf-datatable__resize-handle-hidden'\"\n adf-resize-handle\n tabindex=\"0\"\n role=\"button\"\n (click)=\"$event.stopPropagation()\"\n (keyup.enter)=\"$event.stopPropagation()\"\n class=\"adf-datatable__resize-handle\"\n [resizableContainer]=\"resizableElement\">\n <div class=\"adf-datatable__resize-handle--divider\"></div>\n </div>\n <div class=\"adf-drop-header-cell-placeholder\" *cdkDragPlaceholder></div>\n </div>\n </ng-container>\n\n <!-- Header actions (right) -->\n <div\n *ngIf=\"(actions && actionsPosition === 'right') ||\n (mainActionTemplate && showMainDatatableActions)\"\n class=\"adf-actions-column adf-datatable-actions-menu adf-datatable-cell-header adf-datatable__actions-cell\"\n [class.adf-datatable-actions-menu-provided]=\"showProvidedActions\"\n >\n <ng-container *ngIf=\"mainActionTemplate\">\n <button\n data-automation-id=\"adf-datatable-main-menu-button\"\n title=\"{{ 'ADF-DATATABLE.CONTENT-ACTIONS.SELECT_COLUMNS' | translate }}\"\n mat-icon-button\n #mainMenuTrigger=\"matMenuTrigger\"\n (keydown.enter)=\"mainMenuTrigger.openMenu()\"\n [matMenuTriggerFor]=\"mainMenu\">\n <mat-icon>view_week_outline</mat-icon>\n </button>\n <mat-menu #mainMenu>\n <ng-container\n [ngTemplateOutlet]=\"mainActionTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: mainMenuTrigger\n }\" />\n </mat-menu>\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.ACTIONS' | translate }}</span>\n </ng-container>\n </div>\n\n </adf-datatable-row>\n </div>\n\n <div\n *ngIf=\"!loading; else loadingRowTemplate\"\n class=\"adf-datatable-body\"\n [ngClass]=\"{ 'adf-blur-datatable-body': blurOnResize && (isDraggingHeaderColumn || isResizing), 'adf-datatable-body__draggable': enableDragRows && !isDraggingRow, 'adf-datatable-body__dragging': isDraggingRow }\"\n cdkDropList\n [cdkDropListDisabled]=\"!enableDragRows\"\n role=\"rowgroup\">\n <ng-container *ngIf=\"!noPermission; else noPermissionsRowTemplate\">\n <adf-datatable-row *ngFor=\"let row of data.getRows(); let idx = index\"\n cdkDrag\n [cdkDragDisabled]=\"!enableDragRows\"\n (cdkDragDropped)=\"onDragDrop($event)\"\n (cdkDragStarted)=\"onDragStart()\"\n (cdkDragEnded)=\"onDragEnd()\"\n [cdkDragBoundary]=\"'.adf-datatable-body'\"\n [row]=\"row\"\n (select)=\"onEnterKeyPressed(row, $event)\"\n (keyup)=\"onRowKeyUp(row, $event)\"\n (keydown)=\"onRowEnterKeyDown(row, $event)\"\n [adf-upload]=\"rowAllowsDrop(row)\"\n [adf-upload-data]=\"row\"\n [ngStyle]=\"rowStyle\"\n [ngClass]=\"getRowStyle(row)\"\n [class.adf-datatable-row__dragging]=\"isDraggingRow\"\n [attr.data-automation-id]=\"'datatable-row-' + idx\"\n (contextmenu)=\"markRowAsContextMenuSource(row)\">\n <!-- Drag button -->\n <div *ngIf=\"enableDragRows\"\n role=\"gridcell\"\n class=\"adf-datatable-cell adf-datatable__actions-cell adf-datatable-hover-only\">\n <button mat-icon-button\n [attr.aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.DRAG' | translate\">\n <mat-icon>drag_indicator</mat-icon>\n </button>\n </div>\n\n <!-- Actions (left) -->\n <div *ngIf=\"actions && actionsPosition === 'left'\" role=\"gridcell\" class=\"adf-datatable-cell\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" #actionsMenuTrigger=\"matMenuTrigger\"\n [ngClass]=\"getHideActionsWithoutHoverClass(actionsMenuTrigger)\"\n [title]=\"'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate\"\n [attr.id]=\"'action_menu_left_' + idx\"\n [attr.data-automation-id]=\"'action_menu_' + idx\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of getRowActions(row)\"\n [attr.data-automation-id]=\"action.title\"\n [disabled]=\"action.disabled\"\n (click)=\"onExecuteRowAction(row, action)\">\n <mat-icon *ngIf=\"action.icon\">{{ action.icon }}</mat-icon>\n <span>{{ action.title | translate }}</span>\n </button>\n </mat-menu>\n </div>\n\n <label *ngIf=\"multiselect\"\n (keydown.enter)=\"onEnterKeyPressed(row, $any($event))\"\n (click)=\"onCheckboxLabelClick(row, $event)\"\n [for]=\"'select-file-' + idx\"\n class=\"adf-datatable-cell adf-datatable-checkbox adf-datatable-checkbox-single\"\n tabindex=\"0\">\n <mat-checkbox\n [id]=\"'select-file-' + idx\"\n [disabled]=\"!row?.isSelectable\"\n [class.adf-datatable-checkbox-selected]=\"row.isSelected\"\n [class.adf-datatable-hover-only]=\"displayCheckboxesOnHover\"\n [checked]=\"row.isSelected\"\n [attr.aria-checked]=\"row.isSelected\"\n [aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.SELECT_FILE' | translate\"\n role=\"checkbox\"\n data-adf-datatable-row-checkbox\n (change)=\"onCheckboxChange(row, $event)\"\n class=\"adf-checkbox-sr-only\">\n {{ 'ADF-DATATABLE.ACCESSIBILITY.SELECT_FILE' | translate }}\n </mat-checkbox>\n </label>\n\n <div\n *ngFor=\"let col of getVisibleColumns(); let lastColumn = last;\"\n role=\"gridcell\"\n class=\"adf-datatable-cell adf-datatable-cell--{{col.type || 'text'}} {{col.cssClass}} adf-datatable-cell-data\"\n [attr.title]=\"col.title | translate\"\n [attr.data-automation-id]=\"getAutomationValue(row)\"\n [attr.aria-selected]=\"row.isSelected\"\n [attr.aria-label]=\"col.title ? (col.title | translate) : null\"\n (click)=\"onRowClick(row, $event)\"\n tabindex=\"0\"\n (keydown.enter)=\"onEnterKeyPressed(row, $any($event))\"\n [adf-context-menu]=\"getContextMenuActions(row, col)\"\n [adf-context-menu-enabled]=\"contextMenu\"\n adf-drop-zone dropTarget=\"cell\" [dropColumn]=\"col\" [dropRow]=\"row\"\n [ngStyle]=\"(col.width) && !lastColumn && {'flex': getFlexValue(col)}\"\n >\n <div *ngIf=\"!col.template\" class=\"adf-datatable-cell-container\">\n <ng-container [ngSwitch]=\"data.getColumnType(row, col)\">\n <div *ngSwitchCase=\"'image'\" class=\"adf-cell-value\">\n <mat-icon *ngIf=\"isIconValue(row, col); else no_iconvalue\">{{ asIconValue(row, col) }}\n </mat-icon>\n <ng-template #no_iconvalue>\n <mat-icon class=\"adf-datatable-selected\"\n *ngIf=\"row.isSelected && !multiselect; else no_selected_row\" svgIcon=\"selected\" />\n <ng-template #no_selected_row>\n <img class=\"adf-datatable-center-img-ie\"\n [attr.aria-label]=\"(data.getValue(row, col) | fileType) === 'disable' ?\n ('ADF-DATATABLE.ACCESSIBILITY.ICON_DISABLED' | translate) :\n 'ADF-DATATABLE.ACCESSIBILITY.ICON_TEXT' | translate:{\n type: 'ADF-DATATABLE.FILE_TYPE.' + (data.getValue(row, col) | fileType | uppercase) | translate\n }\"\n [attr.alt]=\"(data.getValue(row, col) | fileType) === 'disable' ?\n ('ADF-DATATABLE.ACCESSIBILITY.ICON_DISABLED' | translate) :\n 'ADF-DATATABLE.ACCESSIBILITY.ICON_TEXT' | translate:{\n type: 'ADF-DATATABLE.FILE_TYPE.' + (data.getValue(row, col) | fileType | uppercase) | translate\n }\"\n src=\"{{ data.getValue(row, col) }}\"\n (error)=\"onImageLoadingError($event, row)\">\n </ng-template>\n </ng-template>\n </div>\n\n <div *ngSwitchCase=\"'icon'\" class=\"adf-cell-value\">\n <adf-icon-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\"\n />\n </div>\n <div\n *ngSwitchCase=\"'date'\"\n class=\"adf-cell-value adf-cell-date\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'date_' + (data.getValue(row, col, resolverFn) | adfLocalizedDate: 'medium') \"\n >\n <adf-date-cell class=\"adf-datatable-center-date-column-ie\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\"\n [dateConfig]=\"col.dateConfig\" />\n </div>\n\n <div *ngSwitchCase=\"'location'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'location' + data.getValue(row, col, resolverFn)\">\n <adf-location-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'fileSize'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'fileSize_' + data.getValue(row, col, resolverFn)\">\n <adf-filesize-cell class=\"adf-datatable-center-size-column-ie\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'text'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'text_' + data.getValue(row, col, resolverFn)\">\n <adf-datatable-cell\n [copyContent]=\"col.copyContent\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'boolean'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'boolean_' + data.getValue(row, col, resolverFn)\">\n <adf-boolean-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'json'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\">\n <adf-json-cell\n [editable]=\"col.editable\"\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\" />\n </div>\n <div *ngSwitchCase=\"'amount'\"\n class=\"adf-cell-value\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'amount_' + data.getValue(row, col, resolverFn)\">\n <adf-amount-cell\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\"\n [currencyConfig]=\"col.currencyConfig\" />\n </div>\n <div *ngSwitchCase=\"'number'\"\n class=\"adf-cell-value\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'number_' + data.getValue(row, col, resolverFn)\">\n <adf-number-cell\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\"\n [decimalConfig]=\"col.decimalConfig\" />\n </div>\n <span *ngSwitchDefault class=\"adf-cell-value\">\n <!-- empty cell for unknown column type -->\n </span>\n </ng-container>\n </div>\n <div *ngIf=\"col.template\" class=\"adf-datatable-cell-container\">\n <div class=\"adf-cell-value\" [attr.tabindex]=\"col.focus ? 0 : null\">\n <ng-container\n [ngTemplateOutlet]=\"col.template\"\n [ngTemplateOutletContext]=\"{ $implicit: { data: data, row: row, col: col }, value: data.getValue(row, col, resolverFn) }\" />\n </div>\n </div>\n </div>\n\n <!-- Row actions (right) -->\n <div *ngIf=\"\n !showProvidedActions &&\n ((actions && actionsPosition === 'right') ||\n (mainActionTemplate && showMainDatatableActions))\"\n role=\"gridcell\"\n tabindex=\"0\"\n class=\"adf-datatable-cell adf-datatable__actions-cell adf-datatable-center-actions-column-ie adf-datatable-actions-menu\">\n\n <ng-container *ngIf=\"(actions && actionsPosition === 'right')\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" #actionsMenuTrigger=\"matMenuTrigger\"\n [ngClass]=\"getHideActionsWithoutHoverClass(actionsMenuTrigger)\"\n [attr.aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.ROW_OPTION_BUTTON' | translate\"\n [title]=\"'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate\"\n [attr.id]=\"'action_menu_right_' + idx\"\n [attr.data-automation-id]=\"'action_menu_' + idx\"\n (keydown.enter)=\"actionsMenuTrigger.openMenu()\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of getRowActions(row)\"\n [attr.data-automation-id]=\"action.title\"\n [attr.aria-label]=\"action.title | translate\"\n [disabled]=\"action.disabled\"\n (click)=\"onExecuteRowAction(row, action)\">\n <mat-icon *ngIf=\"action.icon\">{{ action.icon }}</mat-icon>\n <span>{{ action.title | translate }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n </adf-datatable-row>\n <div *ngIf=\"isEmpty()\" role=\"row\" class=\"adf-datatable-row\">\n <div class=\"adf-no-content-container adf-datatable-cell\" role=\"gridcell\">\n <ng-template *ngIf=\"noContentTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"noContentTemplate\" />\n <ng-content select=\"adf-empty-list\" />\n </div>\n </div>\n </ng-container>\n\n <ng-template #noPermissionsRowTemplate>\n <div\n role=\"row\"\n class=\"adf-datatable-row adf-no-permission__row\">\n <div class=\"adf-no-permission__cell adf-no-content-container adf-datatable-cell\">\n <ng-template *ngIf=\"noPermissionTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"noPermissionTemplate\" />\n </div>\n </div>\n </ng-template>\n </div>\n <ng-template #loadingRowTemplate>\n <div class=\"adf-datatable-row\">\n <div class=\"adf-no-content-container adf-datatable-cell\">\n <ng-template *ngIf=\"loadingTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"loadingTemplate\" />\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".adf-datatable{overflow-y:scroll;height:100%}.adf-datatable .adf-full-width{width:100%}.adf-datatable__resize-handle{padding:0 2px}.adf-datatable__resize-handle-visible{visibility:visible}.adf-datatable__resize-handle-hidden{visibility:hidden}.adf-datatable__resize-handle--divider{padding:24px 0;border:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable__resize-handle:hover{cursor:col-resize}.adf-datatable__cursor--pointer:hover{cursor:pointer}.adf-datatable-list,.cdk-drag-preview{display:flex;flex-direction:column;background-color:var(--adf-theme-background-card-color);border:1px solid var(--adf-theme-foreground-text-color-007);box-sizing:border-box;overflow-x:auto}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-center-size-column-ie,.cdk-drag-preview .adf-datatable-center-size-column-ie{padding-top:17px}.adf-datatable-list .adf-datatable__actions-cell.adf-datatable-center-actions-column-ie,.cdk-drag-preview .adf-datatable__actions-cell.adf-datatable-center-actions-column-ie{padding-top:7px}.adf-datatable-list .adf-cell-date.adf-datatable-center-date-column-ie,.cdk-drag-preview .adf-cell-date.adf-datatable-center-date-column-ie{position:relative}.adf-datatable-list .adf-cell-date.adf-datatable-center-date-column-ie .adf-datatable-cell-value,.cdk-drag-preview .adf-cell-date.adf-datatable-center-date-column-ie .adf-datatable-cell-value{width:100%}.adf-datatable-list .adf-datatable-center-img-ie,.cdk-drag-preview .adf-datatable-center-img-ie{padding:0;min-width:0;width:24px;height:56px}}.adf-datatable-list .adf-datatable-header,.cdk-drag-preview .adf-datatable-header{display:flex;flex-direction:column;width:fit-content;min-width:100%;box-sizing:border-box}.adf-datatable-list .adf-datatable-header .adf-datatable-row,.cdk-drag-preview .adf-datatable-header .adf-datatable-row{padding-right:15px}.adf-datatable-list .adf-datatable-header .adf-datatable-row:hover,.adf-datatable-list .adf-datatable-header .adf-datatable-row:focus,.cdk-drag-preview .adf-datatable-header .adf-datatable-row:hover,.cdk-drag-preview .adf-datatable-header .adf-datatable-row:focus{background-color:inherit}.adf-datatable-list .adf-datatable-row:hover,.adf-datatable-list .adf-datatable-row:focus,.cdk-drag-preview .adf-datatable-row:hover,.cdk-drag-preview .adf-datatable-row:focus{background-color:var(--adf-theme-background-hover-color)}.adf-datatable-list .adf-datatable-row:focus,.cdk-drag-preview .adf-datatable-row:focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-datatable-list .adf-datatable-row .adf-cell-value:focus,.adf-datatable-list .adf-datatable-row .adf-datatable-cell-header:focus,.cdk-drag-preview .adf-datatable-row .adf-cell-value:focus,.cdk-drag-preview .adf-datatable-row .adf-datatable-cell-header:focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-datatable-list .adf-blur-datatable-body,.cdk-drag-preview .adf-blur-datatable-body{filter:blur(3px)}.adf-datatable-list .adf-datatable-body,.cdk-drag-preview .adf-datatable-body{display:flex;flex-direction:column;background-color:inherit;width:100%;min-width:100%}.adf-datatable-list .adf-datatable-body.adf-datatable-body__draggable,.cdk-drag-preview .adf-datatable-body.adf-datatable-body__draggable{cursor:grab}.adf-datatable-list .adf-datatable-body.adf-datatable-body__dragging,.cdk-drag-preview .adf-datatable-body.adf-datatable-body__dragging{cursor:grabbing}.adf-datatable-list .adf-datatable-body .adf-datatable-row,.cdk-drag-preview .adf-datatable-body .adf-datatable-row{transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-property:background-color;border-top:1px solid var(--adf-theme-foreground-text-color-007);min-height:var(--theme-display-3-font-size);cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-is-selected,.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-is-selected:hover,.cdk-drag-preview .adf-datatable-body .adf-datatable-row.adf-is-selected,.cdk-drag-preview .adf-datatable-body .adf-datatable-row.adf-is-selected:hover{background-color:var(--adf-theme-background-selected-button-color)}.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-drag-row,.cdk-drag-preview .adf-datatable-body .adf-datatable-row.adf-drag-row{cursor:grab}.adf-datatable-list .adf-datatable-body .adf-datatable-row:last-child,.cdk-drag-preview .adf-datatable-body .adf-datatable-row:last-child{border-bottom:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable-list .adf-datatable-body .adf-datatable-row label,.cdk-drag-preview .adf-datatable-body .adf-datatable-row label{cursor:inherit}.adf-datatable-list .adf-datatable-row,.cdk-drag-preview .adf-datatable-row{display:flex;align-items:center}.adf-datatable-list .adf-datatable-row:hover .adf-datatable-hover-only,.cdk-drag-preview .adf-datatable-row:hover .adf-datatable-hover-only{visibility:visible}.adf-datatable-list .adf-datatable-row .adf-datatable-hover-only,.cdk-drag-preview .adf-datatable-row .adf-datatable-hover-only{visibility:hidden}.adf-datatable-list .adf-datatable-row .adf-datatable-hover-only.adf-datatable-checkbox-selected,.cdk-drag-preview .adf-datatable-row .adf-datatable-hover-only.adf-datatable-checkbox-selected{visibility:visible}.adf-datatable-list .adf-datatable-row .adf-datatable-checkbox,.cdk-drag-preview .adf-datatable-row .adf-datatable-checkbox{max-width:65px;width:65px}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-row .adf-datatable-checkbox,.cdk-drag-preview .adf-datatable-row .adf-datatable-checkbox{padding-top:15px}}.adf-datatable-list .adf-datatable-cell,.adf-datatable-list .adf-datatable-cell-header,.cdk-drag-preview .adf-datatable-cell,.cdk-drag-preview .adf-datatable-cell-header{text-align:left;box-sizing:border-box;min-width:65px}.adf-datatable-list .adf-datatable-cell--text,.adf-datatable-list .adf-datatable-cell-header--text,.cdk-drag-preview .adf-datatable-cell--text,.cdk-drag-preview .adf-datatable-cell-header--text{text-align:left;position:relative}.adf-datatable-list .adf-datatable-cell--date,.adf-datatable-list .adf-datatable-cell-header--date,.cdk-drag-preview .adf-datatable-cell--date,.cdk-drag-preview .adf-datatable-cell-header--date{text-align:left}.adf-datatable-list .adf-datatable-cell--number,.adf-datatable-list .adf-datatable-cell-header--number,.cdk-drag-preview .adf-datatable-cell--number,.cdk-drag-preview .adf-datatable-cell-header--number{text-align:right}.adf-datatable-list .adf-datatable-cell--image,.adf-datatable-list .adf-datatable-cell--icon,.adf-datatable-list .adf-datatable-cell-header--image,.adf-datatable-list .adf-datatable-cell-header--icon,.cdk-drag-preview .adf-datatable-cell--image,.cdk-drag-preview .adf-datatable-cell--icon,.cdk-drag-preview .adf-datatable-cell-header--image,.cdk-drag-preview .adf-datatable-cell-header--icon{padding-left:24px;padding-right:24px;width:65px;min-width:65px;text-align:left}.adf-datatable-list .adf-datatable-cell--fileSize,.adf-datatable-list .adf-datatable-cell-header--fileSize,.cdk-drag-preview .adf-datatable-cell--fileSize,.cdk-drag-preview .adf-datatable-cell-header--fileSize{min-width:65px}.adf-datatable-list .adf-datatable-cell button .mat-icon,.adf-datatable-list .adf-datatable-cell-header button .mat-icon,.cdk-drag-preview .adf-datatable-cell button .mat-icon,.cdk-drag-preview .adf-datatable-cell-header button .mat-icon{margin-top:-10px}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-1,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-1,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-1,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-1{flex-grow:1}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-2,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-2,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-2,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-2{flex-grow:2}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-3,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-3,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-3,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-3{flex-grow:3}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-4,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-4,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-4,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-4{flex-grow:4}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-5,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-5,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-5,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-5{flex-grow:5}.adf-datatable-list .adf-datatable-cell-header.adf-no-grow-cell,.adf-datatable-list .adf-datatable-cell.adf-no-grow-cell,.cdk-drag-preview .adf-datatable-cell-header.adf-no-grow-cell,.cdk-drag-preview .adf-datatable-cell.adf-no-grow-cell{flex-grow:0;min-width:100px}.adf-datatable-list .adf-datatable-cell-header.adf-min-width-cell,.adf-datatable-list .adf-datatable-cell.adf-min-width-cell,.cdk-drag-preview .adf-datatable-cell-header.adf-min-width-cell,.cdk-drag-preview .adf-datatable-cell.adf-min-width-cell{min-width:110px}.adf-datatable-list .adf-datatable-cell,.cdk-drag-preview .adf-datatable-cell{color:var(--adf-theme-foreground-text-color);min-height:inherit}.adf-datatable-list .adf-datatable-cell,.adf-datatable-list .adf-datatable-cell-header,.cdk-drag-preview .adf-datatable-cell,.cdk-drag-preview .adf-datatable-cell-header{flex:1;padding:0;align-items:center;display:flex;align-self:stretch}.adf-datatable-list .adf-datatable-cell:first-child,.adf-datatable-list .adf-datatable-cell-header:first-child,.cdk-drag-preview .adf-datatable-cell:first-child,.cdk-drag-preview .adf-datatable-cell-header:first-child{margin-left:15px;box-sizing:content-box}.adf-datatable-list .adf-datatable-cell.adf-drag-column,.adf-datatable-list .adf-datatable-cell-header.adf-drag-column,.cdk-drag-preview .adf-datatable-cell.adf-drag-column,.cdk-drag-preview .adf-datatable-cell-header.adf-drag-column{flex:0}.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-container,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-container,.cdk-drag-preview .adf-datatable-cell .adf-datatable-cell-container,.cdk-drag-preview .adf-datatable-cell-header .adf-datatable-cell-container{overflow:hidden;min-height:inherit;align-items:center;display:flex;width:100%;padding:0 10px}.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-value,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell-header .adf-datatable-cell-value{word-break:break-word;display:block}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-value,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell-header .adf-datatable-cell-value{padding:17px 10px 10px}}.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu{margin-left:auto;justify-content:end;padding-right:15px}.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu:focus-visible .adf-datatable-hide-actions-without-hover,.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu:focus-within .adf-datatable-hide-actions-without-hover,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu:focus-visible .adf-datatable-hide-actions-without-hover,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu:focus-within .adf-datatable-hide-actions-without-hover{visibility:visible}.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu-provided,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu-provided{max-width:100px!important;justify-content:center;padding-right:0}.adf-datatable-list .adf-datatable-checkbox,.cdk-drag-preview .adf-datatable-checkbox{display:flex;justify-content:center}.adf-datatable-list .adf-cell-value,.cdk-drag-preview .adf-cell-value{display:flex;min-height:inherit;align-items:center;word-break:break-all;width:100%}.adf-datatable-list .adf-datatable__actions-cell,.adf-datatable-list .adf-datatable-cell--image,.cdk-drag-preview .adf-datatable__actions-cell,.cdk-drag-preview .adf-datatable-cell--image{max-width:65px;display:flex}.adf-datatable-list .adf-datatable__actions-cell .adf-cell-value,.adf-datatable-list .adf-datatable-cell--image .adf-cell-value,.cdk-drag-preview .adf-datatable__actions-cell .adf-cell-value,.cdk-drag-preview .adf-datatable-cell--image .adf-cell-value{width:unset}.adf-datatable-list .adf-datatable-row:not(:hover) .adf-datatable-hide-actions-without-hover,.cdk-drag-preview .adf-datatable-row:not(:hover) .adf-datatable-hide-actions-without-hover{visibility:hidden}.adf-datatable-list .adf-datatable-cell--image,.cdk-drag-preview .adf-datatable-cell--image{max-width:65px}.adf-datatable-list .adf-location-cell a,.cdk-drag-preview .adf-location-cell a{text-decoration:none;color:var(--adf-theme-foreground-text-color)}.adf-datatable-list .adf-location-cell a:hover,.cdk-drag-preview .adf-location-cell a:hover{color:var(--theme-accent-500);text-decoration:underline}.adf-datatable-list .adf-sr-only,.cdk-drag-preview .adf-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.adf-datatable-list .adf-is-selected,.cdk-drag-preview .adf-is-selected{background:var(--adf-theme-primary-100)}.adf-datatable-list .adf-datatable-link,.cdk-drag-preview .adf-datatable-link{text-decoration:none;color:var(--adf-theme-foreground-text-color)}.adf-datatable-list .adf-datatable-link:hover,.cdk-drag-preview .adf-datatable-link:hover{color:var(--theme-accent-500);text-decoration:underline}.adf-datatable-list .adf-dynamic-column .adf-datatable-link:hover,.cdk-drag-preview .adf-dynamic-column .adf-datatable-link:hover{text-decoration:none}.adf-datatable-list .adf-dynamic-column .adf-datatable-link:hover .adf-datatable-cell-value,.cdk-drag-preview .adf-dynamic-column .adf-datatable-link:hover .adf-datatable-cell-value{text-decoration:underline}.adf-datatable-list .adf-ellipsis-cell,.cdk-drag-preview .adf-ellipsis-cell{position:sticky;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.adf-datatable-list .adf-ellipsis-cell.adf-datatable-cell-header,.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell,.cdk-drag-preview .adf-ellipsis-cell.adf-datatable-cell-header,.cdk-drag-preview .adf-ellipsis-cell .adf-datatable-content-cell{max-width:calc(100% - .1px);overflow:hidden;text-overflow:ellipsis}.adf-datatable-list .adf-ellipsis-cell.adf-datatable-cell-header .adf-datatable-cell-value,.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell .adf-datatable-cell-value,.cdk-drag-preview .adf-ellipsis-cell.adf-datatable-cell-header .adf-datatable-cell-value,.cdk-drag-preview .adf-ellipsis-cell .adf-datatable-content-cell .adf-datatable-cell-value{overflow:hidden;text-overflow:ellipsis}.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell,.cdk-drag-preview .adf-ellipsis-cell .adf-datatable-content-cell{overflow:unset}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-ellipsis-cell .adf-cell-value,.cdk-drag-preview .adf-ellipsis-cell .adf-cell-value{top:100%}}.adf-datatable-list .adf-ellipsis-cell>div:after,.cdk-drag-preview .adf-ellipsis-cell>div:after{content:attr(title);overflow:hidden;height:0;display:block}.adf-datatable-list .adf-no-content-container.adf-datatable-cell,.cdk-drag-preview .adf-no-content-container.adf-datatable-cell{padding:0;border:none;width:100%;justify-content:center}.adf-datatable-list .adf-no-content-container.adf-datatable-cell>img,.cdk-drag-preview .adf-no-content-container.adf-datatable-cell>img{width:100%}.adf-datatable-list .adf-loading-content-container,.cdk-drag-preview .adf-loading-content-container{padding:0;width:100%}.adf-datatable-list .adf-loading-content-container>img,.cdk-drag-preview .adf-loading-content-container>img{width:100%}.adf-datatable-list .adf-no-permission__row:hover,.cdk-drag-preview .adf-no-permission__row:hover{cursor:default;background-color:inherit}.adf-datatable-list .adf-no-permission__cell.adf-datatable-cell,.cdk-drag-preview .adf-no-permission__cell.adf-datatable-cell{padding:0}.adf-datatable-list .adf-hidden,.cdk-drag-preview .adf-hidden{display:none}@media all and (width <= 768px){.adf-datatable-list .adf-desktop-only.adf-ellipsis-cell,.cdk-drag-preview .adf-desktop-only.adf-ellipsis-cell{display:none}}@media (device-width <= 768px){.adf-datatable-list .adf-desktop-only.adf-ellipsis-cell,.cdk-drag-preview .adf-desktop-only.adf-ellipsis-cell{display:none}}.adf-datatable-cell-header{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:flex;align-items:center;text-overflow:ellipsis;font-weight:700;line-height:24px;letter-spacing:0;min-height:var(--theme-display-3-font-size);font-size:var(--theme-caption-font-size);color:var(--adf-theme-foreground-text-color);box-sizing:border-box}.adf-datatable-cell-header_subtitle{margin-left:3px;opacity:.6}.adf-datatable-cell-header.adf-sortable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;align-items:center}.adf-datatable-cell-header .adf-datatable__header--sorted-asc,.adf-datatable-cell-header .adf-datatable__header--sorted-desc{color:var(--adf-theme-foreground-text-color);padding-right:.25rem}.adf-datatable-cell-header .adf-datatable__header--sorted-asc:after,.adf-datatable-cell-header .adf-datatable__header--sorted-desc:after{font-family:Material Icons;font-weight:400;font-style:normal;font-size:var(--theme-headline-font-size);line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;word-wrap:normal;font-feature-settings:\"liga\";font-size:var(--theme-subheading-2-font-size);content:\"\\e5d8\";left:5px;right:5px;position:relative;vertical-align:middle}.adf-datatable-cell-header .adf-datatable__header--sorted-desc:after{content:\"\\e5db\"}.adf-datatable-cell-header .adf-datatable-cell--fileSize.adf-datatable__header--sorted-asc:before,.adf-datatable-cell-header .adf-datatable-cell--fileSize.adf-datatable__header--sorted-desc:before{left:-3px;right:-3px}.adf-datatable-cell-header .adf-datatable-cell-header-content{display:flex;flex-grow:1;align-items:center;margin:0 2px;padding:0 8px}.adf-datatable-cell-header .adf-datatable-cell-header-content .adf-datatable-cell-header-drag-icon-placeholder{padding:0;margin:0}.adf-datatable-cell-header .adf-datatable-cell-header-content--hovered{background-color:var(--adf-theme-background-hover-color);border-radius:6px}.adf-datatable-cell-header .adf-datatable-cell-header-drag-icon{margin-left:auto;cursor:move;margin-right:-.5rem;padding-left:-.5rem}.adf-datatable-cell-header .adf-datatable-cell-header-drag-icon-visible{display:flex}.adf-datatable-cell-header .adf-datatable-cell-value{padding-top:10px;padding-bottom:10px;line-height:24px;word-break:break-word}.adf-drop-header-cell-placeholder{display:flex;flex:1;background:var(--adf-theme-background-hover-color);border:dotted 1px rgba(0,0,0,.25);min-height:55px;transition:transform .25s cubic-bezier(0,0,.2,1)}.adf-datatable-cell-header.adf-ellipsis-cell .adf-datatable-cell-header-content{white-space:nowrap;overflow:hidden}.adf-datatable-cell-header.adf-ellipsis-cell .adf-datatable-cell-header-content--hovered .adf-datatable-cell-value{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cdk-drag-preview{min-height:var(--theme-display-3-font-size);display:flex;flex-direction:row;align-items:center;box-sizing:unset;background-color:var(--theme-background-color);border-top:2px solid var(--theme-selected-background-color);opacity:1}.cdk-drag-preview.adf-datatable-cell-header{border-radius:6px;background-color:var(--theme-background-color);transition:box-shadow .28s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.adf-checkbox-sr-only .mdc-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.adf-sticky-header{border-top:0;height:100%}.adf-sticky-header .adf-datatable-header{display:block;margin-right:0;border-top:1px solid var(--adf-theme-foreground-text-color-007);border-bottom:1px solid var(--adf-theme-foreground-text-color-007)}.adf-sticky-header .adf-datatable-body{display:block;flex:1;overflow-y:scroll;margin-top:-1px}.adf-upload__dragging>div{border-top:1px dashed var(--theme-accent-color-a200);border-bottom:1px dashed var(--theme-accent-color-a200)}.adf-upload__dragging>div:first-child{border-left:1px dashed var(--theme-accent-color-a200)}.adf-upload__dragging>div:last-child{border-right:1px dashed var(--theme-accent-color-a200)}.adf-datatable--empty{display:flex;flex-direction:column;flex:1;height:100%;overflow:hidden;min-height:0;justify-content:center;align-items:center;height:inherit}.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row{height:100%;background-color:var(--adf-theme-background-card-color);border:none}.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row:hover,.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row:focus{background-color:unset;cursor:default}.adf-datatable--empty--header-visible .adf-datatable-header{border:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable--empty--header-visible .adf-datatable-body{display:flex;flex-direction:column;flex:1;height:100%;overflow:hidden;min-height:0;justify-content:center;align-items:center}.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row{height:100%;background-color:var(--adf-theme-background-card-color);border:none}.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row:hover,.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row:focus{background-color:unset;cursor:default}@media screen and (width <= 380px){.adf-datatable-header{max-height:50%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i3.UpperCasePipe, name: "uppercase" }, { kind: "component", type: DataTableRowComponent, selector: "adf-datatable-row", inputs: ["row", "disabled"], outputs: ["select"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: DropZoneDirective, selector: "[adf-drop-zone]", inputs: ["dropTarget", "dropRow", "dropColumn"] }, { kind: "directive", type: ResizableDirective, selector: "[adf-resizable]", inputs: ["coverPadding"], outputs: ["resizeStart", "resizing", "resizeEnd"], exportAs: ["adf-resizable"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: IconComponent, selector: "adf-icon", inputs: ["color", "fontSet", "value"] }, { kind: "directive", type: ResizeHandleDirective, selector: "[adf-resize-handle]", inputs: ["resizableContainer"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i7.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: UploadDirective, selector: "[adf-upload]", inputs: ["adf-upload", "adf-upload-data", "mode", "multiple", "accept", "directory"] }, { kind: "directive", type: ContextMenuDirective, selector: "[adf-context-menu]", inputs: ["adf-context-menu", "adf-context-menu-enabled"] }, { kind: "pipe", type: FileTypePipe, name: "fileType" }, { kind: "component", type: IconCellComponent, selector: "adf-icon-cell" }, { kind: "pipe", type: LocalizedDatePipe, name: "adfLocalizedDate" }, { kind: "component", type: DateCellComponent, selector: "adf-date-cell", inputs: ["dateConfig"] }, { kind: "component", type: LocationCellComponent, selector: "adf-location-cell", inputs: ["link"] }, { kind: "component", type: FileSizeCellComponent, selector: "adf-filesize-cell" }, { kind: "component", type: DataTableCellComponent, selector: "adf-datatable-cell", inputs: ["data", "column", "row", "copyContent", "tooltip", "resolverFn"] }, { kind: "component", type: BooleanCellComponent, selector: "adf-boolean-cell" }, { kind: "component", type: JsonCellComponent, selector: "adf-json-cell", inputs: ["editable"] }, { kind: "component", type: AmountCellComponent, selector: "adf-amount-cell", inputs: ["currencyConfig"] }, { kind: "component", type: NumberCellComponent, selector: "adf-number-cell", inputs: ["decimalConfig"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
784
784
|
}
|
|
785
785
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DataTableComponent, decorators: [{
|
|
786
786
|
type: Component,
|
|
@@ -812,7 +812,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
|
|
|
812
812
|
JsonCellComponent,
|
|
813
813
|
AmountCellComponent,
|
|
814
814
|
NumberCellComponent
|
|
815
|
-
], encapsulation: ViewEncapsulation.None, host: { class: 'adf-datatable' }, template: "<div\n role=\"grid\"\n *ngIf=\"data\"\n class=\"adf-full-width adf-datatable-list\"\n [class.adf-sticky-header]=\"isStickyHeaderEnabled()\"\n [class.adf-datatable--empty]=\"(isEmpty() && !isHeaderVisible()) || loading\"\n [class.adf-datatable--empty--header-visible]=\"isEmpty() && isHeaderVisible()\"\n>\n <div *ngIf=\"isHeaderVisible()\" class=\"adf-datatable-header\" role=\"rowgroup\" [ngClass]=\"{ 'adf-sr-only': !isHeaderVisible() }\">\n <adf-datatable-row\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListSortPredicate]=\"filterDisabledColumns\"\n data-automation-id=\"datatable-row-header\"\n [disabled]=\"!isHeaderVisible()\"\n class=\"adf-datatable-row\"\n role=\"row\">\n\n\n <!-- Drag -->\n <div *ngIf=\"enableDragRows\" class=\"adf-datatable-cell-header adf-drag-column\">\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.DRAG' | translate }}</span>\n </div>\n\n <!-- Actions (left) -->\n <div *ngIf=\"actions && actionsPosition === 'left'\" class=\"adf-actions-column adf-datatable-cell-header\">\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.ACTIONS' | translate }}</span>\n </div>\n\n <!-- Columns -->\n <div *ngIf=\"multiselect\" class=\"adf-datatable-cell-header adf-datatable-checkbox\">\n <mat-checkbox [indeterminate]=\"isSelectAllIndeterminate\" [checked]=\"isSelectAllChecked\" (change)=\"onSelectAllClick($event)\" class=\"adf-checkbox-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.SELECT_ALL' | translate }}</mat-checkbox>\n </div>\n\n <ng-container\n *ngFor=\"\n let col of getVisibleColumns();\n let columnIndex = index\n let lastColumn = last\"\n >\n <div\n class=\"adf-datatable-cell--{{col.type || 'text'}} {{col.cssClass}} adf-datatable-cell-header adf-datatable-cell-data\"\n *ngIf=\"col.title || !showProvidedActions\"\n [attr.data-automation-id]=\"'auto_id_' + col.key\"\n [ngClass]=\"{\n 'adf-sortable': col.sortable,\n 'adf-datatable__cursor--pointer': !isResizing,\n 'adf-datatable__header--sorted-asc': isColumnSorted(col, 'asc'),\n 'adf-datatable__header--sorted-desc': isColumnSorted(col, 'desc')}\"\n [ngStyle]=\"(col.width) && !lastColumn && {'flex': getFlexValue(col)}\"\n [attr.aria-label]=\"(col.title | translate) + (col.subtitle ? ' ' + col.subtitle : '')\"\n (click)=\"onColumnHeaderClick(col, $event)\"\n (keyup.enter)=\"onColumnHeaderClick(col, $event)\"\n role=\"columnheader\"\n [attr.tabindex]=\"isHeaderVisible() ? 0 : null\"\n [attr.aria-sort]=\"col.sortable ? (getAriaSort(col) | translate) : null\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n (cdkDragStarted)=\"isDraggingHeaderColumn = true\"\n (cdkDragDropped)=\"onDropHeaderColumn($event)\"\n [cdkDragDisabled]=\"!col.draggable\"\n (mouseenter)=\"hoveredHeaderColumnIndex = columnIndex\"\n (mouseleave)=\"hoveredHeaderColumnIndex = -1\"\n adf-drop-zone dropTarget=\"header\"\n [dropColumn]=\"col\"\n >\n\n <div\n adf-resizable\n #resizableElement=\"adf-resizable\"\n [coverPadding]=\"10\"\n (resizing)=\"onResizing($event, columnIndex)\"\n (resizeStart)=\"resizingColumnIndex = columnIndex\"\n (resizeEnd)=\"onResizingEnd()\"\n [attr.data-automation-id]=\"'auto_header_content_id_' + col.key\"\n class=\"adf-datatable-cell-header-content\"\n [ngClass]=\"{ 'adf-datatable-cell-header-content--hovered':\n hoveredHeaderColumnIndex === columnIndex &&\n !isDraggingHeaderColumn &&\n !isResizing && col.sortable}\"\n >\n <ng-container *ngIf=\"!col.header\">\n <span\n *ngIf=\"col.title\"\n title=\"{{col.title | translate}}\"\n class=\"adf-datatable-cell-value\"\n >\n {{col.title | translate}}\n </span>\n\n <span\n *ngIf=\"col.subtitle\"\n title=\"{{col.subtitle | translate}}\"\n class=\"adf-datatable-cell-value adf-datatable-cell-header_subtitle\"\n >\n ({{col.subtitle | translate}})\n </span>\n\n <span *ngIf=\"col.title && col.sortable && isDraggingHeaderColumn\" class=\"adf-sr-only\" aria-live=\"polite\">\n {{ getSortLiveAnnouncement(col) | translate: { string: col.title | translate } }}\n </span>\n\n <span *ngIf=\"!col.title && !col.sortable && !headerFilterTemplate\" [attr.title]=\"'ADF-DATATABLE.ACCESSIBILITY.EMPTY_HEADER' | translate\"></span>\n </ng-container>\n\n <div *ngIf=\"col.header\" class=\"adf-datatable-cell-value\">\n <ng-template [ngTemplateOutlet]=\"col.header\" [ngTemplateOutletContext]=\"{$implicit: col}\" />\n </div>\n\n <span\n [class.adf-datatable__header--sorted-asc]=\"isColumnSorted(col, 'asc')\"\n [class.adf-datatable__header--sorted-desc]=\"isColumnSorted(col, 'desc')\">\n </span>\n\n <ng-template *ngIf=\"allowFiltering\" [ngTemplateOutlet]=\"headerFilterTemplate\" [ngTemplateOutletContext]=\"{$implicit: col}\" />\n\n <span\n *ngIf=\"col.draggable\"\n cdkDragHandle\n [ngClass]=\"{ 'adf-datatable-cell-header-drag-icon': !isResizing }\"\n >\n <adf-icon\n *ngIf=\"hoveredHeaderColumnIndex === columnIndex && !isResizing\"\n value=\"adf:drag_indicator\"\n class=\"adf-datatable-cell-header-drag-icon-visible\"\n [attr.data-automation-id]=\"'adf-datatable-cell-header-drag-icon-'+col.key\" />\n </span>\n </div>\n <div\n *ngIf=\"isResizingEnabled && col.resizable && !lastColumn\"\n [ngClass]=\"hoveredHeaderColumnIndex === columnIndex && !isResizing || resizingColumnIndex === columnIndex ? 'adf-datatable__resize-handle-visible' : 'adf-datatable__resize-handle-hidden'\"\n adf-resize-handle\n tabindex=\"0\"\n role=\"button\"\n (click)=\"$event.stopPropagation()\"\n (keyup.enter)=\"$event.stopPropagation()\"\n class=\"adf-datatable__resize-handle\"\n [resizableContainer]=\"resizableElement\">\n <div class=\"adf-datatable__resize-handle--divider\"></div>\n </div>\n <div class=\"adf-drop-header-cell-placeholder\" *cdkDragPlaceholder></div>\n </div>\n </ng-container>\n\n <!-- Header actions (right) -->\n <div\n *ngIf=\"(actions && actionsPosition === 'right') ||\n (mainActionTemplate && showMainDatatableActions)\"\n class=\"adf-actions-column adf-datatable-actions-menu adf-datatable-cell-header adf-datatable__actions-cell\"\n [class.adf-datatable-actions-menu-provided]=\"showProvidedActions\"\n >\n <ng-container *ngIf=\"mainActionTemplate\">\n <button\n data-automation-id=\"adf-datatable-main-menu-button\"\n title=\"{{ 'ADF-DATATABLE.CONTENT-ACTIONS.SELECT_COLUMNS' | translate }}\"\n mat-icon-button\n #mainMenuTrigger=\"matMenuTrigger\"\n (keydown.enter)=\"mainMenuTrigger.openMenu()\"\n [matMenuTriggerFor]=\"mainMenu\">\n <mat-icon>view_week_outline</mat-icon>\n </button>\n <mat-menu #mainMenu>\n <ng-container\n [ngTemplateOutlet]=\"mainActionTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: mainMenuTrigger\n }\" />\n </mat-menu>\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.ACTIONS' | translate }}</span>\n </ng-container>\n </div>\n\n </adf-datatable-row>\n </div>\n\n <div\n *ngIf=\"!loading; else loadingRowTemplate\"\n class=\"adf-datatable-body\"\n [ngClass]=\"{ 'adf-blur-datatable-body': blurOnResize && (isDraggingHeaderColumn || isResizing), 'adf-datatable-body__draggable': enableDragRows && !isDraggingRow, 'adf-datatable-body__dragging': isDraggingRow }\"\n cdkDropList\n [cdkDropListDisabled]=\"!enableDragRows\"\n role=\"rowgroup\">\n <ng-container *ngIf=\"!noPermission; else noPermissionsRowTemplate\">\n <adf-datatable-row *ngFor=\"let row of data.getRows(); let idx = index\"\n cdkDrag\n [cdkDragDisabled]=\"!enableDragRows\"\n (cdkDragDropped)=\"onDragDrop($event)\"\n (cdkDragStarted)=\"onDragStart()\"\n (cdkDragEnded)=\"onDragEnd()\"\n [cdkDragBoundary]=\"'.adf-datatable-body'\"\n [row]=\"row\"\n (select)=\"onEnterKeyPressed(row, $event)\"\n (keyup)=\"onRowKeyUp(row, $event)\"\n (keydown)=\"onRowEnterKeyDown(row, $event)\"\n [adf-upload]=\"rowAllowsDrop(row)\"\n [adf-upload-data]=\"row\"\n [ngStyle]=\"rowStyle\"\n [ngClass]=\"getRowStyle(row)\"\n [class.adf-datatable-row__dragging]=\"isDraggingRow\"\n [attr.data-automation-id]=\"'datatable-row-' + idx\"\n (contextmenu)=\"markRowAsContextMenuSource(row)\">\n <!-- Drag button -->\n <div *ngIf=\"enableDragRows\"\n role=\"gridcell\"\n class=\"adf-datatable-cell adf-datatable__actions-cell adf-datatable-hover-only\">\n <button mat-icon-button\n [attr.aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.DRAG' | translate\">\n <mat-icon>drag_indicator</mat-icon>\n </button>\n </div>\n\n <!-- Actions (left) -->\n <div *ngIf=\"actions && actionsPosition === 'left'\" role=\"gridcell\" class=\"adf-datatable-cell\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" #actionsMenuTrigger=\"matMenuTrigger\"\n [ngClass]=\"getHideActionsWithoutHoverClass(actionsMenuTrigger)\"\n [title]=\"'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate\"\n [attr.id]=\"'action_menu_left_' + idx\"\n [attr.data-automation-id]=\"'action_menu_' + idx\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of getRowActions(row)\"\n [attr.data-automation-id]=\"action.title\"\n [disabled]=\"action.disabled\"\n (click)=\"onExecuteRowAction(row, action)\">\n <mat-icon *ngIf=\"action.icon\">{{ action.icon }}</mat-icon>\n <span>{{ action.title | translate }}</span>\n </button>\n </mat-menu>\n </div>\n\n <label *ngIf=\"multiselect\"\n (keydown.enter)=\"onEnterKeyPressed(row, $any($event))\"\n (click)=\"onCheckboxLabelClick(row, $event)\"\n [for]=\"'select-file-' + idx\"\n class=\"adf-datatable-cell adf-datatable-checkbox adf-datatable-checkbox-single\"\n tabindex=\"0\">\n <mat-checkbox\n [id]=\"'select-file-' + idx\"\n [disabled]=\"!row?.isSelectable\"\n [class.adf-datatable-checkbox-selected]=\"row.isSelected\"\n [class.adf-datatable-hover-only]=\"displayCheckboxesOnHover\"\n [checked]=\"row.isSelected\"\n [attr.aria-checked]=\"row.isSelected\"\n [aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.SELECT_FILE' | translate\"\n role=\"checkbox\"\n data-adf-datatable-row-checkbox\n (change)=\"onCheckboxChange(row, $event)\"\n class=\"adf-checkbox-sr-only\">\n {{ 'ADF-DATATABLE.ACCESSIBILITY.SELECT_FILE' | translate }}\n </mat-checkbox>\n </label>\n\n <div\n *ngFor=\"let col of getVisibleColumns(); let lastColumn = last;\"\n role=\"gridcell\"\n class=\"adf-datatable-cell adf-datatable-cell--{{col.type || 'text'}} {{col.cssClass}} adf-datatable-cell-data\"\n [attr.title]=\"col.title | translate\"\n [attr.data-automation-id]=\"getAutomationValue(row)\"\n [attr.aria-selected]=\"row.isSelected\"\n [attr.aria-label]=\"col.title ? (col.title | translate) : null\"\n (click)=\"onRowClick(row, $event)\"\n tabindex=\"0\"\n (keydown.enter)=\"onEnterKeyPressed(row, $any($event))\"\n [adf-context-menu]=\"getContextMenuActions(row, col)\"\n [adf-context-menu-enabled]=\"contextMenu\"\n adf-drop-zone dropTarget=\"cell\" [dropColumn]=\"col\" [dropRow]=\"row\"\n [ngStyle]=\"(col.width) && !lastColumn && {'flex': getFlexValue(col)}\"\n >\n <div *ngIf=\"!col.template\" class=\"adf-datatable-cell-container\">\n <ng-container [ngSwitch]=\"data.getColumnType(row, col)\">\n <div *ngSwitchCase=\"'image'\" class=\"adf-cell-value\">\n <mat-icon *ngIf=\"isIconValue(row, col); else no_iconvalue\">{{ asIconValue(row, col) }}\n </mat-icon>\n <ng-template #no_iconvalue>\n <mat-icon class=\"adf-datatable-selected\"\n *ngIf=\"row.isSelected && !multiselect; else no_selected_row\" svgIcon=\"selected\" />\n <ng-template #no_selected_row>\n <img class=\"adf-datatable-center-img-ie\"\n [attr.aria-label]=\"(data.getValue(row, col) | fileType) === 'disable' ?\n ('ADF-DATATABLE.ACCESSIBILITY.ICON_DISABLED' | translate) :\n 'ADF-DATATABLE.ACCESSIBILITY.ICON_TEXT' | translate:{\n type: 'ADF-DATATABLE.FILE_TYPE.' + (data.getValue(row, col) | fileType | uppercase) | translate\n }\"\n [attr.alt]=\"(data.getValue(row, col) | fileType) === 'disable' ?\n ('ADF-DATATABLE.ACCESSIBILITY.ICON_DISABLED' | translate) :\n 'ADF-DATATABLE.ACCESSIBILITY.ICON_TEXT' | translate:{\n type: 'ADF-DATATABLE.FILE_TYPE.' + (data.getValue(row, col) | fileType | uppercase) | translate\n }\"\n src=\"{{ data.getValue(row, col) }}\"\n (error)=\"onImageLoadingError($event, row)\">\n </ng-template>\n </ng-template>\n </div>\n\n <div *ngSwitchCase=\"'icon'\" class=\"adf-cell-value\">\n <adf-icon-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\"\n />\n </div>\n <div\n *ngSwitchCase=\"'date'\"\n class=\"adf-cell-value adf-cell-date\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'date_' + (data.getValue(row, col, resolverFn) | adfLocalizedDate: 'medium') \"\n >\n <adf-date-cell class=\"adf-datatable-center-date-column-ie\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\"\n [dateConfig]=\"col.dateConfig\" />\n </div>\n\n <div *ngSwitchCase=\"'location'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'location' + data.getValue(row, col, resolverFn)\">\n <adf-location-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'fileSize'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'fileSize_' + data.getValue(row, col, resolverFn)\">\n <adf-filesize-cell class=\"adf-datatable-center-size-column-ie\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'text'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'text_' + data.getValue(row, col, resolverFn)\">\n <adf-datatable-cell\n [copyContent]=\"col.copyContent\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'boolean'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'boolean_' + data.getValue(row, col, resolverFn)\">\n <adf-boolean-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'json'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\">\n <adf-json-cell\n [editable]=\"col.editable\"\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\" />\n </div>\n <div *ngSwitchCase=\"'amount'\"\n class=\"adf-cell-value\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'amount_' + data.getValue(row, col, resolverFn)\">\n <adf-amount-cell\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\"\n [currencyConfig]=\"col.currencyConfig\" />\n </div>\n <div *ngSwitchCase=\"'number'\"\n class=\"adf-cell-value\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'number_' + data.getValue(row, col, resolverFn)\">\n <adf-number-cell\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\"\n [decimalConfig]=\"col.decimalConfig\" />\n </div>\n <span *ngSwitchDefault class=\"adf-cell-value\">\n <!-- empty cell for unknown column type -->\n </span>\n </ng-container>\n </div>\n <div *ngIf=\"col.template\" class=\"adf-datatable-cell-container\">\n <div class=\"adf-cell-value\" [attr.tabindex]=\"col.focus ? 0 : null\">\n <ng-container\n [ngTemplateOutlet]=\"col.template\"\n [ngTemplateOutletContext]=\"{ $implicit: { data: data, row: row, col: col }, value: data.getValue(row, col, resolverFn) }\" />\n </div>\n </div>\n </div>\n\n <!-- Row actions (right) -->\n <div *ngIf=\"\n !showProvidedActions &&\n ((actions && actionsPosition === 'right') ||\n (mainActionTemplate && showMainDatatableActions))\"\n role=\"gridcell\"\n tabindex=\"0\"\n class=\"adf-datatable-cell adf-datatable__actions-cell adf-datatable-center-actions-column-ie adf-datatable-actions-menu\">\n\n <ng-container *ngIf=\"(actions && actionsPosition === 'right')\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" #actionsMenuTrigger=\"matMenuTrigger\"\n [ngClass]=\"getHideActionsWithoutHoverClass(actionsMenuTrigger)\"\n [attr.aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.ROW_OPTION_BUTTON' | translate\"\n [title]=\"'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate\"\n [attr.id]=\"'action_menu_right_' + idx\"\n [attr.data-automation-id]=\"'action_menu_' + idx\"\n (keydown.enter)=\"actionsMenuTrigger.openMenu()\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of getRowActions(row)\"\n [attr.data-automation-id]=\"action.title\"\n [attr.aria-label]=\"action.title | translate\"\n [disabled]=\"action.disabled\"\n (click)=\"onExecuteRowAction(row, action)\">\n <mat-icon *ngIf=\"action.icon\">{{ action.icon }}</mat-icon>\n <span>{{ action.title | translate }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n </adf-datatable-row>\n <div *ngIf=\"isEmpty()\" role=\"row\" class=\"adf-datatable-row\">\n <div class=\"adf-no-content-container adf-datatable-cell\" role=\"gridcell\">\n <ng-template *ngIf=\"noContentTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"noContentTemplate\" />\n <ng-content select=\"adf-empty-list\" />\n </div>\n </div>\n </ng-container>\n\n <ng-template #noPermissionsRowTemplate>\n <div\n role=\"row\"\n class=\"adf-datatable-row adf-no-permission__row\">\n <div class=\"adf-no-permission__cell adf-no-content-container adf-datatable-cell\">\n <ng-template *ngIf=\"noPermissionTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"noPermissionTemplate\" />\n </div>\n </div>\n </ng-template>\n </div>\n <ng-template #loadingRowTemplate>\n <div class=\"adf-datatable-row\">\n <div class=\"adf-no-content-container adf-datatable-cell\">\n <ng-template *ngIf=\"loadingTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"loadingTemplate\" />\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".adf-datatable{overflow-y:scroll;height:100%}.adf-datatable .adf-full-width{width:100%}.adf-datatable__resize-handle{padding:0 2px}.adf-datatable__resize-handle-visible{visibility:visible}.adf-datatable__resize-handle-hidden{visibility:hidden}.adf-datatable__resize-handle--divider{padding:24px 0;border:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable__resize-handle:hover{cursor:col-resize}.adf-datatable__cursor--pointer:hover{cursor:pointer}.adf-datatable-list,.cdk-drag-preview{display:flex;flex-direction:column;background-color:var(--adf-theme-background-card-color);border:1px solid var(--adf-theme-foreground-text-color-007);box-sizing:border-box;overflow-x:auto}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-center-size-column-ie,.cdk-drag-preview .adf-datatable-center-size-column-ie{padding-top:17px}.adf-datatable-list .adf-datatable__actions-cell.adf-datatable-center-actions-column-ie,.cdk-drag-preview .adf-datatable__actions-cell.adf-datatable-center-actions-column-ie{padding-top:7px}.adf-datatable-list .adf-cell-date.adf-datatable-center-date-column-ie,.cdk-drag-preview .adf-cell-date.adf-datatable-center-date-column-ie{position:relative}.adf-datatable-list .adf-cell-date.adf-datatable-center-date-column-ie .adf-datatable-cell-value,.cdk-drag-preview .adf-cell-date.adf-datatable-center-date-column-ie .adf-datatable-cell-value{width:100%}.adf-datatable-list .adf-datatable-center-img-ie,.cdk-drag-preview .adf-datatable-center-img-ie{padding:0;min-width:0;width:24px;height:56px}}.adf-datatable-list .adf-datatable-header,.cdk-drag-preview .adf-datatable-header{display:flex;flex-direction:column;width:fit-content;min-width:100%;box-sizing:border-box}.adf-datatable-list .adf-datatable-header .adf-datatable-row,.cdk-drag-preview .adf-datatable-header .adf-datatable-row{padding-right:15px}.adf-datatable-list .adf-datatable-header .adf-datatable-row:hover,.adf-datatable-list .adf-datatable-header .adf-datatable-row:focus,.cdk-drag-preview .adf-datatable-header .adf-datatable-row:hover,.cdk-drag-preview .adf-datatable-header .adf-datatable-row:focus{background-color:inherit}.adf-datatable-list .adf-datatable-row:hover,.adf-datatable-list .adf-datatable-row:focus,.cdk-drag-preview .adf-datatable-row:hover,.cdk-drag-preview .adf-datatable-row:focus{background-color:var(--adf-theme-background-hover-color)}.adf-datatable-list .adf-datatable-row:focus,.cdk-drag-preview .adf-datatable-row:focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-datatable-list .adf-datatable-row .adf-cell-value:focus,.adf-datatable-list .adf-datatable-row .adf-datatable-cell-header:focus,.cdk-drag-preview .adf-datatable-row .adf-cell-value:focus,.cdk-drag-preview .adf-datatable-row .adf-datatable-cell-header:focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-datatable-list .adf-blur-datatable-body,.cdk-drag-preview .adf-blur-datatable-body{filter:blur(3px)}.adf-datatable-list .adf-datatable-body,.cdk-drag-preview .adf-datatable-body{display:flex;flex-direction:column;background-color:inherit;width:100%;min-width:100%}.adf-datatable-list .adf-datatable-body.adf-datatable-body__draggable,.cdk-drag-preview .adf-datatable-body.adf-datatable-body__draggable{cursor:grab}.adf-datatable-list .adf-datatable-body.adf-datatable-body__dragging,.cdk-drag-preview .adf-datatable-body.adf-datatable-body__dragging{cursor:grabbing}.adf-datatable-list .adf-datatable-body .adf-datatable-row,.cdk-drag-preview .adf-datatable-body .adf-datatable-row{transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-property:background-color;border-top:1px solid var(--adf-theme-foreground-text-color-007);min-height:var(--theme-display-3-font-size);cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-is-selected,.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-is-selected:hover,.cdk-drag-preview .adf-datatable-body .adf-datatable-row.adf-is-selected,.cdk-drag-preview .adf-datatable-body .adf-datatable-row.adf-is-selected:hover{background-color:var(--adf-theme-background-selected-button-color)}.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-drag-row,.cdk-drag-preview .adf-datatable-body .adf-datatable-row.adf-drag-row{cursor:grab}.adf-datatable-list .adf-datatable-body .adf-datatable-row:last-child,.cdk-drag-preview .adf-datatable-body .adf-datatable-row:last-child{border-bottom:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable-list .adf-datatable-body .adf-datatable-row label,.cdk-drag-preview .adf-datatable-body .adf-datatable-row label{cursor:inherit}.adf-datatable-list .adf-datatable-row,.cdk-drag-preview .adf-datatable-row{display:flex;align-items:center}.adf-datatable-list .adf-datatable-row:hover .adf-datatable-hover-only,.cdk-drag-preview .adf-datatable-row:hover .adf-datatable-hover-only{visibility:visible}.adf-datatable-list .adf-datatable-row .adf-datatable-hover-only,.cdk-drag-preview .adf-datatable-row .adf-datatable-hover-only{visibility:hidden}.adf-datatable-list .adf-datatable-row .adf-datatable-hover-only.adf-datatable-checkbox-selected,.cdk-drag-preview .adf-datatable-row .adf-datatable-hover-only.adf-datatable-checkbox-selected{visibility:visible}.adf-datatable-list .adf-datatable-row .adf-datatable-checkbox,.cdk-drag-preview .adf-datatable-row .adf-datatable-checkbox{max-width:65px;width:65px}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-row .adf-datatable-checkbox,.cdk-drag-preview .adf-datatable-row .adf-datatable-checkbox{padding-top:15px}}.adf-datatable-list .adf-datatable-cell,.adf-datatable-list .adf-datatable-cell-header,.cdk-drag-preview .adf-datatable-cell,.cdk-drag-preview .adf-datatable-cell-header{text-align:left;box-sizing:border-box;min-width:65px}.adf-datatable-list .adf-datatable-cell--text,.adf-datatable-list .adf-datatable-cell-header--text,.cdk-drag-preview .adf-datatable-cell--text,.cdk-drag-preview .adf-datatable-cell-header--text{text-align:left;position:relative}.adf-datatable-list .adf-datatable-cell--date,.adf-datatable-list .adf-datatable-cell-header--date,.cdk-drag-preview .adf-datatable-cell--date,.cdk-drag-preview .adf-datatable-cell-header--date{text-align:left}.adf-datatable-list .adf-datatable-cell--number,.adf-datatable-list .adf-datatable-cell-header--number,.cdk-drag-preview .adf-datatable-cell--number,.cdk-drag-preview .adf-datatable-cell-header--number{text-align:right}.adf-datatable-list .adf-datatable-cell--image,.adf-datatable-list .adf-datatable-cell--icon,.adf-datatable-list .adf-datatable-cell-header--image,.adf-datatable-list .adf-datatable-cell-header--icon,.cdk-drag-preview .adf-datatable-cell--image,.cdk-drag-preview .adf-datatable-cell--icon,.cdk-drag-preview .adf-datatable-cell-header--image,.cdk-drag-preview .adf-datatable-cell-header--icon{padding-left:24px;padding-right:24px;width:65px;min-width:65px;text-align:left}.adf-datatable-list .adf-datatable-cell--fileSize,.adf-datatable-list .adf-datatable-cell-header--fileSize,.cdk-drag-preview .adf-datatable-cell--fileSize,.cdk-drag-preview .adf-datatable-cell-header--fileSize{min-width:65px}.adf-datatable-list .adf-datatable-cell button .mat-icon,.adf-datatable-list .adf-datatable-cell-header button .mat-icon,.cdk-drag-preview .adf-datatable-cell button .mat-icon,.cdk-drag-preview .adf-datatable-cell-header button .mat-icon{margin-top:-10px}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-1,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-1,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-1,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-1{flex-grow:1}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-2,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-2,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-2,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-2{flex-grow:2}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-3,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-3,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-3,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-3{flex-grow:3}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-4,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-4,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-4,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-4{flex-grow:4}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-5,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-5,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-5,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-5{flex-grow:5}.adf-datatable-list .adf-datatable-cell-header.adf-no-grow-cell,.adf-datatable-list .adf-datatable-cell.adf-no-grow-cell,.cdk-drag-preview .adf-datatable-cell-header.adf-no-grow-cell,.cdk-drag-preview .adf-datatable-cell.adf-no-grow-cell{flex-grow:0;min-width:100px}.adf-datatable-list .adf-datatable-cell-header.adf-min-width-cell,.adf-datatable-list .adf-datatable-cell.adf-min-width-cell,.cdk-drag-preview .adf-datatable-cell-header.adf-min-width-cell,.cdk-drag-preview .adf-datatable-cell.adf-min-width-cell{min-width:110px}.adf-datatable-list .adf-datatable-cell,.cdk-drag-preview .adf-datatable-cell{color:var(--adf-theme-foreground-text-color);min-height:inherit}.adf-datatable-list .adf-datatable-cell,.adf-datatable-list .adf-datatable-cell-header,.cdk-drag-preview .adf-datatable-cell,.cdk-drag-preview .adf-datatable-cell-header{flex:1;padding:0;align-items:center;display:flex;align-self:stretch}.adf-datatable-list .adf-datatable-cell:first-child,.adf-datatable-list .adf-datatable-cell-header:first-child,.cdk-drag-preview .adf-datatable-cell:first-child,.cdk-drag-preview .adf-datatable-cell-header:first-child{margin-left:15px;box-sizing:content-box}.adf-datatable-list .adf-datatable-cell.adf-drag-column,.adf-datatable-list .adf-datatable-cell-header.adf-drag-column,.cdk-drag-preview .adf-datatable-cell.adf-drag-column,.cdk-drag-preview .adf-datatable-cell-header.adf-drag-column{flex:0}.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-container,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-container,.cdk-drag-preview .adf-datatable-cell .adf-datatable-cell-container,.cdk-drag-preview .adf-datatable-cell-header .adf-datatable-cell-container{overflow:hidden;min-height:inherit;align-items:center;display:flex;width:100%;padding:0 10px}.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-value,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell-header .adf-datatable-cell-value{word-break:break-word;display:block}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-value,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell-header .adf-datatable-cell-value{padding:17px 10px 10px}}.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu{margin-left:auto;justify-content:end;padding-right:15px}.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu:focus-visible .adf-datatable-hide-actions-without-hover,.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu:focus-within .adf-datatable-hide-actions-without-hover,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu:focus-visible .adf-datatable-hide-actions-without-hover,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu:focus-within .adf-datatable-hide-actions-without-hover{visibility:visible}.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu-provided,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu-provided{max-width:100px!important;justify-content:center;padding-right:0}.adf-datatable-list .adf-datatable-checkbox,.cdk-drag-preview .adf-datatable-checkbox{display:flex;justify-content:center}.adf-datatable-list .adf-cell-value,.cdk-drag-preview .adf-cell-value{display:flex;min-height:inherit;align-items:center;word-break:break-all;width:100%}.adf-datatable-list .adf-datatable__actions-cell,.adf-datatable-list .adf-datatable-cell--image,.cdk-drag-preview .adf-datatable__actions-cell,.cdk-drag-preview .adf-datatable-cell--image{max-width:65px;display:flex}.adf-datatable-list .adf-datatable__actions-cell .adf-cell-value,.adf-datatable-list .adf-datatable-cell--image .adf-cell-value,.cdk-drag-preview .adf-datatable__actions-cell .adf-cell-value,.cdk-drag-preview .adf-datatable-cell--image .adf-cell-value{width:unset}.adf-datatable-list .adf-datatable-row:not(:hover) .adf-datatable-hide-actions-without-hover,.cdk-drag-preview .adf-datatable-row:not(:hover) .adf-datatable-hide-actions-without-hover{visibility:hidden}.adf-datatable-list .adf-datatable-cell--image,.cdk-drag-preview .adf-datatable-cell--image{max-width:65px}.adf-datatable-list .adf-location-cell a,.cdk-drag-preview .adf-location-cell a{text-decoration:none;color:var(--adf-theme-foreground-text-color)}.adf-datatable-list .adf-location-cell a:hover,.cdk-drag-preview .adf-location-cell a:hover{color:var(--theme-accent-500);text-decoration:underline}.adf-datatable-list .adf-sr-only,.cdk-drag-preview .adf-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.adf-datatable-list .adf-is-selected,.cdk-drag-preview .adf-is-selected{background:var(--adf-theme-primary-100)}.adf-datatable-list .adf-datatable-link,.cdk-drag-preview .adf-datatable-link{text-decoration:none;color:var(--adf-theme-foreground-text-color)}.adf-datatable-list .adf-datatable-link:hover,.cdk-drag-preview .adf-datatable-link:hover{color:var(--theme-accent-500);text-decoration:underline}.adf-datatable-list .adf-dynamic-column .adf-datatable-link:hover,.cdk-drag-preview .adf-dynamic-column .adf-datatable-link:hover{text-decoration:none}.adf-datatable-list .adf-dynamic-column .adf-datatable-link:hover .adf-datatable-cell-value,.cdk-drag-preview .adf-dynamic-column .adf-datatable-link:hover .adf-datatable-cell-value{text-decoration:underline}.adf-datatable-list .adf-ellipsis-cell,.cdk-drag-preview .adf-ellipsis-cell{position:sticky;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.adf-datatable-list .adf-ellipsis-cell.adf-datatable-cell-header,.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell,.cdk-drag-preview .adf-ellipsis-cell.adf-datatable-cell-header,.cdk-drag-preview .adf-ellipsis-cell .adf-datatable-content-cell{max-width:calc(100% - .1px);overflow:hidden;text-overflow:ellipsis}.adf-datatable-list .adf-ellipsis-cell.adf-datatable-cell-header .adf-datatable-cell-value,.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell .adf-datatable-cell-value,.cdk-drag-preview .adf-ellipsis-cell.adf-datatable-cell-header .adf-datatable-cell-value,.cdk-drag-preview .adf-ellipsis-cell .adf-datatable-content-cell .adf-datatable-cell-value{overflow:hidden;text-overflow:ellipsis}.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell,.cdk-drag-preview .adf-ellipsis-cell .adf-datatable-content-cell{overflow:unset}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-ellipsis-cell .adf-cell-value,.cdk-drag-preview .adf-ellipsis-cell .adf-cell-value{top:100%}}.adf-datatable-list .adf-ellipsis-cell>div:after,.cdk-drag-preview .adf-ellipsis-cell>div:after{content:attr(title);overflow:hidden;height:0;display:block}.adf-datatable-list .adf-no-content-container.adf-datatable-cell,.cdk-drag-preview .adf-no-content-container.adf-datatable-cell{padding:0;border:none;width:100%;justify-content:center}.adf-datatable-list .adf-no-content-container.adf-datatable-cell>img,.cdk-drag-preview .adf-no-content-container.adf-datatable-cell>img{width:100%}.adf-datatable-list .adf-loading-content-container,.cdk-drag-preview .adf-loading-content-container{padding:0;width:100%}.adf-datatable-list .adf-loading-content-container>img,.cdk-drag-preview .adf-loading-content-container>img{width:100%}.adf-datatable-list .adf-no-permission__row:hover,.cdk-drag-preview .adf-no-permission__row:hover{cursor:default;background-color:inherit}.adf-datatable-list .adf-no-permission__cell.adf-datatable-cell,.cdk-drag-preview .adf-no-permission__cell.adf-datatable-cell{padding:0}.adf-datatable-list .adf-hidden,.cdk-drag-preview .adf-hidden{display:none}@media all and (width <= 768px){.adf-datatable-list .adf-desktop-only.adf-ellipsis-cell,.cdk-drag-preview .adf-desktop-only.adf-ellipsis-cell{display:none}}@media (device-width <= 768px){.adf-datatable-list .adf-desktop-only.adf-ellipsis-cell,.cdk-drag-preview .adf-desktop-only.adf-ellipsis-cell{display:none}}.adf-datatable-cell-header{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:flex;align-items:center;text-overflow:ellipsis;font-weight:700;line-height:24px;letter-spacing:0;min-height:var(--theme-display-3-font-size);font-size:var(--theme-caption-font-size);color:var(--adf-theme-foreground-text-color);box-sizing:border-box}.adf-datatable-cell-header_subtitle{margin-left:3px;opacity:.6}.adf-datatable-cell-header.adf-sortable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;align-items:center}.adf-datatable-cell-header .adf-datatable__header--sorted-asc,.adf-datatable-cell-header .adf-datatable__header--sorted-desc{color:var(--adf-theme-foreground-text-color);padding-right:.25rem}.adf-datatable-cell-header .adf-datatable__header--sorted-asc:after,.adf-datatable-cell-header .adf-datatable__header--sorted-desc:after{font-family:Material Icons;font-weight:400;font-style:normal;font-size:var(--theme-headline-font-size);line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;word-wrap:normal;font-feature-settings:\"liga\";font-size:var(--theme-subheading-2-font-size);content:\"\\e5d8\";left:5px;right:5px;position:relative;vertical-align:middle}.adf-datatable-cell-header .adf-datatable__header--sorted-desc:after{content:\"\\e5db\"}.adf-datatable-cell-header .adf-datatable-cell--fileSize.adf-datatable__header--sorted-asc:before,.adf-datatable-cell-header .adf-datatable-cell--fileSize.adf-datatable__header--sorted-desc:before{left:-3px;right:-3px}.adf-datatable-cell-header .adf-datatable-cell-header-content{display:flex;flex-grow:1;align-items:center;margin:0 2px;padding:0 8px}.adf-datatable-cell-header .adf-datatable-cell-header-content .adf-datatable-cell-header-drag-icon-placeholder{padding:0;margin:0}.adf-datatable-cell-header .adf-datatable-cell-header-content--hovered{background-color:var(--adf-theme-background-hover-color);border-radius:6px}.adf-datatable-cell-header .adf-datatable-cell-header-drag-icon{margin-left:auto;cursor:move;margin-right:-.5rem;padding-left:-.5rem}.adf-datatable-cell-header .adf-datatable-cell-header-drag-icon-visible{display:flex}.adf-datatable-cell-header .adf-datatable-cell-value{padding-top:10px;padding-bottom:10px;line-height:24px;word-break:break-word}.adf-drop-header-cell-placeholder{display:flex;flex:1;background:var(--adf-theme-background-hover-color);border:dotted 1px rgba(0,0,0,.25);min-height:55px;transition:transform .25s cubic-bezier(0,0,.2,1)}.adf-datatable-cell-header.adf-ellipsis-cell .adf-datatable-cell-header-content{white-space:nowrap;overflow:hidden}.adf-datatable-cell-header.adf-ellipsis-cell .adf-datatable-cell-header-content--hovered .adf-datatable-cell-value{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cdk-drag-preview{min-height:var(--theme-display-3-font-size);display:flex;flex-direction:row;align-items:center;box-sizing:unset;background-color:var(--theme-background-color);border-top:2px solid var(--theme-selected-background-color);opacity:1}.cdk-drag-preview.adf-datatable-cell-header{border-radius:6px;background-color:var(--theme-background-color);transition:box-shadow .28s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.adf-checkbox-sr-only .mdc-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.adf-sticky-header{border-top:0;height:100%}.adf-sticky-header .adf-datatable-header{display:block;margin-right:0;border-top:1px solid var(--adf-theme-foreground-text-color-007);border-bottom:1px solid var(--adf-theme-foreground-text-color-007)}.adf-sticky-header .adf-datatable-body{display:block;flex:1;overflow-y:scroll;margin-top:-1px}.adf-upload__dragging>div{border-top:1px dashed var(--theme-accent-color-a200);border-bottom:1px dashed var(--theme-accent-color-a200)}.adf-upload__dragging>div:first-child{border-left:1px dashed var(--theme-accent-color-a200)}.adf-upload__dragging>div:last-child{border-right:1px dashed var(--theme-accent-color-a200)}.adf-datatable--empty{display:flex;flex-direction:column;flex:1;height:100%;overflow:hidden;min-height:0;justify-content:center;align-items:center;height:inherit}.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row{height:100%;background-color:var(--adf-theme-background-card-color);border:none}.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row:hover,.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row:focus{background-color:unset;cursor:default}.adf-datatable--empty--header-visible .adf-datatable-header{border:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable--empty--header-visible .adf-datatable-body{display:flex;flex-direction:column;flex:1;height:100%;overflow:hidden;min-height:0;justify-content:center;align-items:center}.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row{height:100%;background-color:var(--adf-theme-background-card-color);border:none}.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row:hover,.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row:focus{background-color:unset;cursor:default}@media screen and (width <= 380px){.adf-datatable-header{max-height:50%}}\n"] }]
|
|
815
|
+
], encapsulation: ViewEncapsulation.None, host: { class: 'adf-datatable' }, template: "<div\n role=\"grid\"\n *ngIf=\"data\"\n class=\"adf-full-width adf-datatable-list\"\n [class.adf-sticky-header]=\"isStickyHeaderEnabled()\"\n [class.adf-datatable--empty]=\"(isEmpty() && !isHeaderVisible()) || loading\"\n [class.adf-datatable--empty--header-visible]=\"isEmpty() && isHeaderVisible()\"\n>\n <div *ngIf=\"isHeaderVisible()\" class=\"adf-datatable-header\" role=\"rowgroup\" [ngClass]=\"{ 'adf-sr-only': !isHeaderVisible() }\">\n <adf-datatable-row\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListSortPredicate]=\"filterDisabledColumns\"\n data-automation-id=\"datatable-row-header\"\n [disabled]=\"!isHeaderVisible()\"\n class=\"adf-datatable-row\"\n role=\"row\">\n\n\n <!-- Drag -->\n <div *ngIf=\"enableDragRows\" class=\"adf-datatable-cell-header adf-drag-column\">\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.DRAG' | translate }}</span>\n </div>\n\n <!-- Actions (left) -->\n <div *ngIf=\"actions && actionsPosition === 'left'\" class=\"adf-actions-column adf-datatable-cell-header\">\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.ACTIONS' | translate }}</span>\n </div>\n\n <!-- Columns -->\n <div *ngIf=\"multiselect\" class=\"adf-datatable-cell-header adf-datatable-checkbox\">\n <mat-checkbox [indeterminate]=\"isSelectAllIndeterminate\"\n [checked]=\"isSelectAllChecked\"\n (change)=\"onSelectAllClick($event)\"\n class=\"adf-checkbox-sr-only\"\n [aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.SELECT_ALL' | translate\">\n {{ 'ADF-DATATABLE.ACCESSIBILITY.SELECT_ALL' | translate }}\n </mat-checkbox>\n </div>\n\n <ng-container\n *ngFor=\"\n let col of getVisibleColumns();\n let columnIndex = index\n let lastColumn = last\"\n >\n <div\n class=\"adf-datatable-cell--{{col.type || 'text'}} {{col.cssClass}} adf-datatable-cell-header adf-datatable-cell-data\"\n *ngIf=\"col.title || !showProvidedActions\"\n [attr.data-automation-id]=\"'auto_id_' + col.key\"\n [ngClass]=\"{\n 'adf-sortable': col.sortable,\n 'adf-datatable__cursor--pointer': !isResizing,\n 'adf-datatable__header--sorted-asc': isColumnSorted(col, 'asc'),\n 'adf-datatable__header--sorted-desc': isColumnSorted(col, 'desc')}\"\n [ngStyle]=\"(col.width) && !lastColumn && {'flex': getFlexValue(col)}\"\n [attr.aria-label]=\"(col.title | translate) + (col.subtitle ? ' ' + col.subtitle : '')\"\n (click)=\"onColumnHeaderClick(col, $event)\"\n (keyup.enter)=\"onColumnHeaderClick(col, $event)\"\n role=\"columnheader\"\n [attr.tabindex]=\"isHeaderVisible() ? 0 : null\"\n [attr.aria-sort]=\"col.sortable ? (getAriaSort(col) | translate) : null\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n (cdkDragStarted)=\"isDraggingHeaderColumn = true\"\n (cdkDragDropped)=\"onDropHeaderColumn($event)\"\n [cdkDragDisabled]=\"!col.draggable\"\n (mouseenter)=\"hoveredHeaderColumnIndex = columnIndex\"\n (mouseleave)=\"hoveredHeaderColumnIndex = -1\"\n adf-drop-zone dropTarget=\"header\"\n [dropColumn]=\"col\"\n >\n\n <div\n adf-resizable\n #resizableElement=\"adf-resizable\"\n [coverPadding]=\"10\"\n (resizing)=\"onResizing($event, columnIndex)\"\n (resizeStart)=\"resizingColumnIndex = columnIndex\"\n (resizeEnd)=\"onResizingEnd()\"\n [attr.data-automation-id]=\"'auto_header_content_id_' + col.key\"\n class=\"adf-datatable-cell-header-content\"\n [ngClass]=\"{ 'adf-datatable-cell-header-content--hovered':\n hoveredHeaderColumnIndex === columnIndex &&\n !isDraggingHeaderColumn &&\n !isResizing && col.sortable}\"\n >\n <ng-container *ngIf=\"!col.header\">\n <span\n *ngIf=\"col.title\"\n title=\"{{col.title | translate}}\"\n class=\"adf-datatable-cell-value\"\n >\n {{col.title | translate}}\n </span>\n\n <span\n *ngIf=\"col.subtitle\"\n title=\"{{col.subtitle | translate}}\"\n class=\"adf-datatable-cell-value adf-datatable-cell-header_subtitle\"\n >\n ({{col.subtitle | translate}})\n </span>\n\n <span *ngIf=\"col.title && col.sortable && isDraggingHeaderColumn\" class=\"adf-sr-only\" aria-live=\"polite\">\n {{ getSortLiveAnnouncement(col) | translate: { string: col.title | translate } }}\n </span>\n\n <span *ngIf=\"!col.title && !col.sortable && !headerFilterTemplate\" [attr.title]=\"'ADF-DATATABLE.ACCESSIBILITY.EMPTY_HEADER' | translate\"></span>\n </ng-container>\n\n <div *ngIf=\"col.header\" class=\"adf-datatable-cell-value\">\n <ng-template [ngTemplateOutlet]=\"col.header\" [ngTemplateOutletContext]=\"{$implicit: col}\" />\n </div>\n\n <span\n [class.adf-datatable__header--sorted-asc]=\"isColumnSorted(col, 'asc')\"\n [class.adf-datatable__header--sorted-desc]=\"isColumnSorted(col, 'desc')\">\n </span>\n\n <ng-template *ngIf=\"allowFiltering\" [ngTemplateOutlet]=\"headerFilterTemplate\" [ngTemplateOutletContext]=\"{$implicit: col}\" />\n\n <span\n *ngIf=\"col.draggable\"\n cdkDragHandle\n [ngClass]=\"{ 'adf-datatable-cell-header-drag-icon': !isResizing }\"\n >\n <adf-icon\n *ngIf=\"hoveredHeaderColumnIndex === columnIndex && !isResizing\"\n value=\"adf:drag_indicator\"\n class=\"adf-datatable-cell-header-drag-icon-visible\"\n [attr.data-automation-id]=\"'adf-datatable-cell-header-drag-icon-'+col.key\" />\n </span>\n </div>\n <div\n *ngIf=\"isResizingEnabled && col.resizable && !lastColumn\"\n [ngClass]=\"hoveredHeaderColumnIndex === columnIndex && !isResizing || resizingColumnIndex === columnIndex ? 'adf-datatable__resize-handle-visible' : 'adf-datatable__resize-handle-hidden'\"\n adf-resize-handle\n tabindex=\"0\"\n role=\"button\"\n (click)=\"$event.stopPropagation()\"\n (keyup.enter)=\"$event.stopPropagation()\"\n class=\"adf-datatable__resize-handle\"\n [resizableContainer]=\"resizableElement\">\n <div class=\"adf-datatable__resize-handle--divider\"></div>\n </div>\n <div class=\"adf-drop-header-cell-placeholder\" *cdkDragPlaceholder></div>\n </div>\n </ng-container>\n\n <!-- Header actions (right) -->\n <div\n *ngIf=\"(actions && actionsPosition === 'right') ||\n (mainActionTemplate && showMainDatatableActions)\"\n class=\"adf-actions-column adf-datatable-actions-menu adf-datatable-cell-header adf-datatable__actions-cell\"\n [class.adf-datatable-actions-menu-provided]=\"showProvidedActions\"\n >\n <ng-container *ngIf=\"mainActionTemplate\">\n <button\n data-automation-id=\"adf-datatable-main-menu-button\"\n title=\"{{ 'ADF-DATATABLE.CONTENT-ACTIONS.SELECT_COLUMNS' | translate }}\"\n mat-icon-button\n #mainMenuTrigger=\"matMenuTrigger\"\n (keydown.enter)=\"mainMenuTrigger.openMenu()\"\n [matMenuTriggerFor]=\"mainMenu\">\n <mat-icon>view_week_outline</mat-icon>\n </button>\n <mat-menu #mainMenu>\n <ng-container\n [ngTemplateOutlet]=\"mainActionTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: mainMenuTrigger\n }\" />\n </mat-menu>\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.ACTIONS' | translate }}</span>\n </ng-container>\n </div>\n\n </adf-datatable-row>\n </div>\n\n <div\n *ngIf=\"!loading; else loadingRowTemplate\"\n class=\"adf-datatable-body\"\n [ngClass]=\"{ 'adf-blur-datatable-body': blurOnResize && (isDraggingHeaderColumn || isResizing), 'adf-datatable-body__draggable': enableDragRows && !isDraggingRow, 'adf-datatable-body__dragging': isDraggingRow }\"\n cdkDropList\n [cdkDropListDisabled]=\"!enableDragRows\"\n role=\"rowgroup\">\n <ng-container *ngIf=\"!noPermission; else noPermissionsRowTemplate\">\n <adf-datatable-row *ngFor=\"let row of data.getRows(); let idx = index\"\n cdkDrag\n [cdkDragDisabled]=\"!enableDragRows\"\n (cdkDragDropped)=\"onDragDrop($event)\"\n (cdkDragStarted)=\"onDragStart()\"\n (cdkDragEnded)=\"onDragEnd()\"\n [cdkDragBoundary]=\"'.adf-datatable-body'\"\n [row]=\"row\"\n (select)=\"onEnterKeyPressed(row, $event)\"\n (keyup)=\"onRowKeyUp(row, $event)\"\n (keydown)=\"onRowEnterKeyDown(row, $event)\"\n [adf-upload]=\"rowAllowsDrop(row)\"\n [adf-upload-data]=\"row\"\n [ngStyle]=\"rowStyle\"\n [ngClass]=\"getRowStyle(row)\"\n [class.adf-datatable-row__dragging]=\"isDraggingRow\"\n [attr.data-automation-id]=\"'datatable-row-' + idx\"\n (contextmenu)=\"markRowAsContextMenuSource(row)\">\n <!-- Drag button -->\n <div *ngIf=\"enableDragRows\"\n role=\"gridcell\"\n class=\"adf-datatable-cell adf-datatable__actions-cell adf-datatable-hover-only\">\n <button mat-icon-button\n [attr.aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.DRAG' | translate\">\n <mat-icon>drag_indicator</mat-icon>\n </button>\n </div>\n\n <!-- Actions (left) -->\n <div *ngIf=\"actions && actionsPosition === 'left'\" role=\"gridcell\" class=\"adf-datatable-cell\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" #actionsMenuTrigger=\"matMenuTrigger\"\n [ngClass]=\"getHideActionsWithoutHoverClass(actionsMenuTrigger)\"\n [title]=\"'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate\"\n [attr.id]=\"'action_menu_left_' + idx\"\n [attr.data-automation-id]=\"'action_menu_' + idx\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of getRowActions(row)\"\n [attr.data-automation-id]=\"action.title\"\n [disabled]=\"action.disabled\"\n (click)=\"onExecuteRowAction(row, action)\">\n <mat-icon *ngIf=\"action.icon\">{{ action.icon }}</mat-icon>\n <span>{{ action.title | translate }}</span>\n </button>\n </mat-menu>\n </div>\n\n <label *ngIf=\"multiselect\"\n (keydown.enter)=\"onEnterKeyPressed(row, $any($event))\"\n (click)=\"onCheckboxLabelClick(row, $event)\"\n [for]=\"'select-file-' + idx\"\n class=\"adf-datatable-cell adf-datatable-checkbox adf-datatable-checkbox-single\"\n tabindex=\"0\">\n <mat-checkbox\n [id]=\"'select-file-' + idx\"\n [disabled]=\"!row?.isSelectable\"\n [class.adf-datatable-checkbox-selected]=\"row.isSelected\"\n [class.adf-datatable-hover-only]=\"displayCheckboxesOnHover\"\n [checked]=\"row.isSelected\"\n [attr.aria-checked]=\"row.isSelected\"\n [aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.SELECT_FILE' | translate\"\n role=\"checkbox\"\n data-adf-datatable-row-checkbox\n (change)=\"onCheckboxChange(row, $event)\"\n class=\"adf-checkbox-sr-only\">\n {{ 'ADF-DATATABLE.ACCESSIBILITY.SELECT_FILE' | translate }}\n </mat-checkbox>\n </label>\n\n <div\n *ngFor=\"let col of getVisibleColumns(); let lastColumn = last;\"\n role=\"gridcell\"\n class=\"adf-datatable-cell adf-datatable-cell--{{col.type || 'text'}} {{col.cssClass}} adf-datatable-cell-data\"\n [attr.title]=\"col.title | translate\"\n [attr.data-automation-id]=\"getAutomationValue(row)\"\n [attr.aria-selected]=\"row.isSelected\"\n [attr.aria-label]=\"col.title ? (col.title | translate) : null\"\n (click)=\"onRowClick(row, $event)\"\n tabindex=\"0\"\n (keydown.enter)=\"onEnterKeyPressed(row, $any($event))\"\n [adf-context-menu]=\"getContextMenuActions(row, col)\"\n [adf-context-menu-enabled]=\"contextMenu\"\n adf-drop-zone dropTarget=\"cell\" [dropColumn]=\"col\" [dropRow]=\"row\"\n [ngStyle]=\"(col.width) && !lastColumn && {'flex': getFlexValue(col)}\"\n >\n <div *ngIf=\"!col.template\" class=\"adf-datatable-cell-container\">\n <ng-container [ngSwitch]=\"data.getColumnType(row, col)\">\n <div *ngSwitchCase=\"'image'\" class=\"adf-cell-value\">\n <mat-icon *ngIf=\"isIconValue(row, col); else no_iconvalue\">{{ asIconValue(row, col) }}\n </mat-icon>\n <ng-template #no_iconvalue>\n <mat-icon class=\"adf-datatable-selected\"\n *ngIf=\"row.isSelected && !multiselect; else no_selected_row\" svgIcon=\"selected\" />\n <ng-template #no_selected_row>\n <img class=\"adf-datatable-center-img-ie\"\n [attr.aria-label]=\"(data.getValue(row, col) | fileType) === 'disable' ?\n ('ADF-DATATABLE.ACCESSIBILITY.ICON_DISABLED' | translate) :\n 'ADF-DATATABLE.ACCESSIBILITY.ICON_TEXT' | translate:{\n type: 'ADF-DATATABLE.FILE_TYPE.' + (data.getValue(row, col) | fileType | uppercase) | translate\n }\"\n [attr.alt]=\"(data.getValue(row, col) | fileType) === 'disable' ?\n ('ADF-DATATABLE.ACCESSIBILITY.ICON_DISABLED' | translate) :\n 'ADF-DATATABLE.ACCESSIBILITY.ICON_TEXT' | translate:{\n type: 'ADF-DATATABLE.FILE_TYPE.' + (data.getValue(row, col) | fileType | uppercase) | translate\n }\"\n src=\"{{ data.getValue(row, col) }}\"\n (error)=\"onImageLoadingError($event, row)\">\n </ng-template>\n </ng-template>\n </div>\n\n <div *ngSwitchCase=\"'icon'\" class=\"adf-cell-value\">\n <adf-icon-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\"\n />\n </div>\n <div\n *ngSwitchCase=\"'date'\"\n class=\"adf-cell-value adf-cell-date\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'date_' + (data.getValue(row, col, resolverFn) | adfLocalizedDate: 'medium') \"\n >\n <adf-date-cell class=\"adf-datatable-center-date-column-ie\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\"\n [dateConfig]=\"col.dateConfig\" />\n </div>\n\n <div *ngSwitchCase=\"'location'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'location' + data.getValue(row, col, resolverFn)\">\n <adf-location-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'fileSize'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'fileSize_' + data.getValue(row, col, resolverFn)\">\n <adf-filesize-cell class=\"adf-datatable-center-size-column-ie\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'text'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'text_' + data.getValue(row, col, resolverFn)\">\n <adf-datatable-cell\n [copyContent]=\"col.copyContent\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'boolean'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'boolean_' + data.getValue(row, col, resolverFn)\">\n <adf-boolean-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\" />\n </div>\n <div *ngSwitchCase=\"'json'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\">\n <adf-json-cell\n [editable]=\"col.editable\"\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\" />\n </div>\n <div *ngSwitchCase=\"'amount'\"\n class=\"adf-cell-value\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'amount_' + data.getValue(row, col, resolverFn)\">\n <adf-amount-cell\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\"\n [currencyConfig]=\"col.currencyConfig\" />\n </div>\n <div *ngSwitchCase=\"'number'\"\n class=\"adf-cell-value\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'number_' + data.getValue(row, col, resolverFn)\">\n <adf-number-cell\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\"\n [decimalConfig]=\"col.decimalConfig\" />\n </div>\n <span *ngSwitchDefault class=\"adf-cell-value\">\n <!-- empty cell for unknown column type -->\n </span>\n </ng-container>\n </div>\n <div *ngIf=\"col.template\" class=\"adf-datatable-cell-container\">\n <div class=\"adf-cell-value\" [attr.tabindex]=\"col.focus ? 0 : null\">\n <ng-container\n [ngTemplateOutlet]=\"col.template\"\n [ngTemplateOutletContext]=\"{ $implicit: { data: data, row: row, col: col }, value: data.getValue(row, col, resolverFn) }\" />\n </div>\n </div>\n </div>\n\n <!-- Row actions (right) -->\n <div *ngIf=\"\n !showProvidedActions &&\n ((actions && actionsPosition === 'right') ||\n (mainActionTemplate && showMainDatatableActions))\"\n role=\"gridcell\"\n tabindex=\"0\"\n class=\"adf-datatable-cell adf-datatable__actions-cell adf-datatable-center-actions-column-ie adf-datatable-actions-menu\">\n\n <ng-container *ngIf=\"(actions && actionsPosition === 'right')\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" #actionsMenuTrigger=\"matMenuTrigger\"\n [ngClass]=\"getHideActionsWithoutHoverClass(actionsMenuTrigger)\"\n [attr.aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.ROW_OPTION_BUTTON' | translate\"\n [title]=\"'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate\"\n [attr.id]=\"'action_menu_right_' + idx\"\n [attr.data-automation-id]=\"'action_menu_' + idx\"\n (keydown.enter)=\"actionsMenuTrigger.openMenu()\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of getRowActions(row)\"\n [attr.data-automation-id]=\"action.title\"\n [attr.aria-label]=\"action.title | translate\"\n [disabled]=\"action.disabled\"\n (click)=\"onExecuteRowAction(row, action)\">\n <mat-icon *ngIf=\"action.icon\">{{ action.icon }}</mat-icon>\n <span>{{ action.title | translate }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n </adf-datatable-row>\n <div *ngIf=\"isEmpty()\" role=\"row\" class=\"adf-datatable-row\">\n <div class=\"adf-no-content-container adf-datatable-cell\" role=\"gridcell\">\n <ng-template *ngIf=\"noContentTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"noContentTemplate\" />\n <ng-content select=\"adf-empty-list\" />\n </div>\n </div>\n </ng-container>\n\n <ng-template #noPermissionsRowTemplate>\n <div\n role=\"row\"\n class=\"adf-datatable-row adf-no-permission__row\">\n <div class=\"adf-no-permission__cell adf-no-content-container adf-datatable-cell\">\n <ng-template *ngIf=\"noPermissionTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"noPermissionTemplate\" />\n </div>\n </div>\n </ng-template>\n </div>\n <ng-template #loadingRowTemplate>\n <div class=\"adf-datatable-row\">\n <div class=\"adf-no-content-container adf-datatable-cell\">\n <ng-template *ngIf=\"loadingTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"loadingTemplate\" />\n </div>\n </div>\n </ng-template>\n</div>\n", styles: [".adf-datatable{overflow-y:scroll;height:100%}.adf-datatable .adf-full-width{width:100%}.adf-datatable__resize-handle{padding:0 2px}.adf-datatable__resize-handle-visible{visibility:visible}.adf-datatable__resize-handle-hidden{visibility:hidden}.adf-datatable__resize-handle--divider{padding:24px 0;border:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable__resize-handle:hover{cursor:col-resize}.adf-datatable__cursor--pointer:hover{cursor:pointer}.adf-datatable-list,.cdk-drag-preview{display:flex;flex-direction:column;background-color:var(--adf-theme-background-card-color);border:1px solid var(--adf-theme-foreground-text-color-007);box-sizing:border-box;overflow-x:auto}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-center-size-column-ie,.cdk-drag-preview .adf-datatable-center-size-column-ie{padding-top:17px}.adf-datatable-list .adf-datatable__actions-cell.adf-datatable-center-actions-column-ie,.cdk-drag-preview .adf-datatable__actions-cell.adf-datatable-center-actions-column-ie{padding-top:7px}.adf-datatable-list .adf-cell-date.adf-datatable-center-date-column-ie,.cdk-drag-preview .adf-cell-date.adf-datatable-center-date-column-ie{position:relative}.adf-datatable-list .adf-cell-date.adf-datatable-center-date-column-ie .adf-datatable-cell-value,.cdk-drag-preview .adf-cell-date.adf-datatable-center-date-column-ie .adf-datatable-cell-value{width:100%}.adf-datatable-list .adf-datatable-center-img-ie,.cdk-drag-preview .adf-datatable-center-img-ie{padding:0;min-width:0;width:24px;height:56px}}.adf-datatable-list .adf-datatable-header,.cdk-drag-preview .adf-datatable-header{display:flex;flex-direction:column;width:fit-content;min-width:100%;box-sizing:border-box}.adf-datatable-list .adf-datatable-header .adf-datatable-row,.cdk-drag-preview .adf-datatable-header .adf-datatable-row{padding-right:15px}.adf-datatable-list .adf-datatable-header .adf-datatable-row:hover,.adf-datatable-list .adf-datatable-header .adf-datatable-row:focus,.cdk-drag-preview .adf-datatable-header .adf-datatable-row:hover,.cdk-drag-preview .adf-datatable-header .adf-datatable-row:focus{background-color:inherit}.adf-datatable-list .adf-datatable-row:hover,.adf-datatable-list .adf-datatable-row:focus,.cdk-drag-preview .adf-datatable-row:hover,.cdk-drag-preview .adf-datatable-row:focus{background-color:var(--adf-theme-background-hover-color)}.adf-datatable-list .adf-datatable-row:focus,.cdk-drag-preview .adf-datatable-row:focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-datatable-list .adf-datatable-row .adf-cell-value:focus,.adf-datatable-list .adf-datatable-row .adf-datatable-cell-header:focus,.cdk-drag-preview .adf-datatable-row .adf-cell-value:focus,.cdk-drag-preview .adf-datatable-row .adf-datatable-cell-header:focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-datatable-list .adf-blur-datatable-body,.cdk-drag-preview .adf-blur-datatable-body{filter:blur(3px)}.adf-datatable-list .adf-datatable-body,.cdk-drag-preview .adf-datatable-body{display:flex;flex-direction:column;background-color:inherit;width:100%;min-width:100%}.adf-datatable-list .adf-datatable-body.adf-datatable-body__draggable,.cdk-drag-preview .adf-datatable-body.adf-datatable-body__draggable{cursor:grab}.adf-datatable-list .adf-datatable-body.adf-datatable-body__dragging,.cdk-drag-preview .adf-datatable-body.adf-datatable-body__dragging{cursor:grabbing}.adf-datatable-list .adf-datatable-body .adf-datatable-row,.cdk-drag-preview .adf-datatable-body .adf-datatable-row{transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-property:background-color;border-top:1px solid var(--adf-theme-foreground-text-color-007);min-height:var(--theme-display-3-font-size);cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-is-selected,.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-is-selected:hover,.cdk-drag-preview .adf-datatable-body .adf-datatable-row.adf-is-selected,.cdk-drag-preview .adf-datatable-body .adf-datatable-row.adf-is-selected:hover{background-color:var(--adf-theme-background-selected-button-color)}.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-drag-row,.cdk-drag-preview .adf-datatable-body .adf-datatable-row.adf-drag-row{cursor:grab}.adf-datatable-list .adf-datatable-body .adf-datatable-row:last-child,.cdk-drag-preview .adf-datatable-body .adf-datatable-row:last-child{border-bottom:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable-list .adf-datatable-body .adf-datatable-row label,.cdk-drag-preview .adf-datatable-body .adf-datatable-row label{cursor:inherit}.adf-datatable-list .adf-datatable-row,.cdk-drag-preview .adf-datatable-row{display:flex;align-items:center}.adf-datatable-list .adf-datatable-row:hover .adf-datatable-hover-only,.cdk-drag-preview .adf-datatable-row:hover .adf-datatable-hover-only{visibility:visible}.adf-datatable-list .adf-datatable-row .adf-datatable-hover-only,.cdk-drag-preview .adf-datatable-row .adf-datatable-hover-only{visibility:hidden}.adf-datatable-list .adf-datatable-row .adf-datatable-hover-only.adf-datatable-checkbox-selected,.cdk-drag-preview .adf-datatable-row .adf-datatable-hover-only.adf-datatable-checkbox-selected{visibility:visible}.adf-datatable-list .adf-datatable-row .adf-datatable-checkbox,.cdk-drag-preview .adf-datatable-row .adf-datatable-checkbox{max-width:65px;width:65px}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-row .adf-datatable-checkbox,.cdk-drag-preview .adf-datatable-row .adf-datatable-checkbox{padding-top:15px}}.adf-datatable-list .adf-datatable-cell,.adf-datatable-list .adf-datatable-cell-header,.cdk-drag-preview .adf-datatable-cell,.cdk-drag-preview .adf-datatable-cell-header{text-align:left;box-sizing:border-box;min-width:65px}.adf-datatable-list .adf-datatable-cell--text,.adf-datatable-list .adf-datatable-cell-header--text,.cdk-drag-preview .adf-datatable-cell--text,.cdk-drag-preview .adf-datatable-cell-header--text{text-align:left;position:relative}.adf-datatable-list .adf-datatable-cell--date,.adf-datatable-list .adf-datatable-cell-header--date,.cdk-drag-preview .adf-datatable-cell--date,.cdk-drag-preview .adf-datatable-cell-header--date{text-align:left}.adf-datatable-list .adf-datatable-cell--number,.adf-datatable-list .adf-datatable-cell-header--number,.cdk-drag-preview .adf-datatable-cell--number,.cdk-drag-preview .adf-datatable-cell-header--number{text-align:right}.adf-datatable-list .adf-datatable-cell--image,.adf-datatable-list .adf-datatable-cell--icon,.adf-datatable-list .adf-datatable-cell-header--image,.adf-datatable-list .adf-datatable-cell-header--icon,.cdk-drag-preview .adf-datatable-cell--image,.cdk-drag-preview .adf-datatable-cell--icon,.cdk-drag-preview .adf-datatable-cell-header--image,.cdk-drag-preview .adf-datatable-cell-header--icon{padding-left:24px;padding-right:24px;width:65px;min-width:65px;text-align:left}.adf-datatable-list .adf-datatable-cell--fileSize,.adf-datatable-list .adf-datatable-cell-header--fileSize,.cdk-drag-preview .adf-datatable-cell--fileSize,.cdk-drag-preview .adf-datatable-cell-header--fileSize{min-width:65px}.adf-datatable-list .adf-datatable-cell button .mat-icon,.adf-datatable-list .adf-datatable-cell-header button .mat-icon,.cdk-drag-preview .adf-datatable-cell button .mat-icon,.cdk-drag-preview .adf-datatable-cell-header button .mat-icon{margin-top:-10px}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-1,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-1,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-1,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-1{flex-grow:1}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-2,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-2,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-2,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-2{flex-grow:2}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-3,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-3,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-3,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-3{flex-grow:3}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-4,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-4,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-4,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-4{flex-grow:4}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-5,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-5,.cdk-drag-preview .adf-datatable-cell-header.adf-expand-cell-5,.cdk-drag-preview .adf-datatable-cell.adf-expand-cell-5{flex-grow:5}.adf-datatable-list .adf-datatable-cell-header.adf-no-grow-cell,.adf-datatable-list .adf-datatable-cell.adf-no-grow-cell,.cdk-drag-preview .adf-datatable-cell-header.adf-no-grow-cell,.cdk-drag-preview .adf-datatable-cell.adf-no-grow-cell{flex-grow:0;min-width:100px}.adf-datatable-list .adf-datatable-cell-header.adf-min-width-cell,.adf-datatable-list .adf-datatable-cell.adf-min-width-cell,.cdk-drag-preview .adf-datatable-cell-header.adf-min-width-cell,.cdk-drag-preview .adf-datatable-cell.adf-min-width-cell{min-width:110px}.adf-datatable-list .adf-datatable-cell,.cdk-drag-preview .adf-datatable-cell{color:var(--adf-theme-foreground-text-color);min-height:inherit}.adf-datatable-list .adf-datatable-cell,.adf-datatable-list .adf-datatable-cell-header,.cdk-drag-preview .adf-datatable-cell,.cdk-drag-preview .adf-datatable-cell-header{flex:1;padding:0;align-items:center;display:flex;align-self:stretch}.adf-datatable-list .adf-datatable-cell:first-child,.adf-datatable-list .adf-datatable-cell-header:first-child,.cdk-drag-preview .adf-datatable-cell:first-child,.cdk-drag-preview .adf-datatable-cell-header:first-child{margin-left:15px;box-sizing:content-box}.adf-datatable-list .adf-datatable-cell.adf-drag-column,.adf-datatable-list .adf-datatable-cell-header.adf-drag-column,.cdk-drag-preview .adf-datatable-cell.adf-drag-column,.cdk-drag-preview .adf-datatable-cell-header.adf-drag-column{flex:0}.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-container,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-container,.cdk-drag-preview .adf-datatable-cell .adf-datatable-cell-container,.cdk-drag-preview .adf-datatable-cell-header .adf-datatable-cell-container{overflow:hidden;min-height:inherit;align-items:center;display:flex;width:100%;padding:0 10px}.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-value,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell-header .adf-datatable-cell-value{word-break:break-word;display:block}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-value,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell .adf-datatable-cell-value,.cdk-drag-preview .adf-datatable-cell-header .adf-datatable-cell-value{padding:17px 10px 10px}}.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu{margin-left:auto;justify-content:end;padding-right:15px}.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu:focus-visible .adf-datatable-hide-actions-without-hover,.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu:focus-within .adf-datatable-hide-actions-without-hover,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu:focus-visible .adf-datatable-hide-actions-without-hover,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu:focus-within .adf-datatable-hide-actions-without-hover{visibility:visible}.adf-datatable-list .adf-datatable-row .adf-datatable-actions-menu-provided,.cdk-drag-preview .adf-datatable-row .adf-datatable-actions-menu-provided{max-width:100px!important;justify-content:center;padding-right:0}.adf-datatable-list .adf-datatable-checkbox,.cdk-drag-preview .adf-datatable-checkbox{display:flex;justify-content:center}.adf-datatable-list .adf-cell-value,.cdk-drag-preview .adf-cell-value{display:flex;min-height:inherit;align-items:center;word-break:break-all;width:100%}.adf-datatable-list .adf-datatable__actions-cell,.adf-datatable-list .adf-datatable-cell--image,.cdk-drag-preview .adf-datatable__actions-cell,.cdk-drag-preview .adf-datatable-cell--image{max-width:65px;display:flex}.adf-datatable-list .adf-datatable__actions-cell .adf-cell-value,.adf-datatable-list .adf-datatable-cell--image .adf-cell-value,.cdk-drag-preview .adf-datatable__actions-cell .adf-cell-value,.cdk-drag-preview .adf-datatable-cell--image .adf-cell-value{width:unset}.adf-datatable-list .adf-datatable-row:not(:hover) .adf-datatable-hide-actions-without-hover,.cdk-drag-preview .adf-datatable-row:not(:hover) .adf-datatable-hide-actions-without-hover{visibility:hidden}.adf-datatable-list .adf-datatable-cell--image,.cdk-drag-preview .adf-datatable-cell--image{max-width:65px}.adf-datatable-list .adf-location-cell a,.cdk-drag-preview .adf-location-cell a{text-decoration:none;color:var(--adf-theme-foreground-text-color)}.adf-datatable-list .adf-location-cell a:hover,.cdk-drag-preview .adf-location-cell a:hover{color:var(--theme-accent-500);text-decoration:underline}.adf-datatable-list .adf-sr-only,.cdk-drag-preview .adf-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.adf-datatable-list .adf-is-selected,.cdk-drag-preview .adf-is-selected{background:var(--adf-theme-primary-100)}.adf-datatable-list .adf-datatable-link,.cdk-drag-preview .adf-datatable-link{text-decoration:none;color:var(--adf-theme-foreground-text-color)}.adf-datatable-list .adf-datatable-link:hover,.cdk-drag-preview .adf-datatable-link:hover{color:var(--theme-accent-500);text-decoration:underline}.adf-datatable-list .adf-dynamic-column .adf-datatable-link:hover,.cdk-drag-preview .adf-dynamic-column .adf-datatable-link:hover{text-decoration:none}.adf-datatable-list .adf-dynamic-column .adf-datatable-link:hover .adf-datatable-cell-value,.cdk-drag-preview .adf-dynamic-column .adf-datatable-link:hover .adf-datatable-cell-value{text-decoration:underline}.adf-datatable-list .adf-ellipsis-cell,.cdk-drag-preview .adf-ellipsis-cell{position:sticky;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.adf-datatable-list .adf-ellipsis-cell.adf-datatable-cell-header,.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell,.cdk-drag-preview .adf-ellipsis-cell.adf-datatable-cell-header,.cdk-drag-preview .adf-ellipsis-cell .adf-datatable-content-cell{max-width:calc(100% - .1px);overflow:hidden;text-overflow:ellipsis}.adf-datatable-list .adf-ellipsis-cell.adf-datatable-cell-header .adf-datatable-cell-value,.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell .adf-datatable-cell-value,.cdk-drag-preview .adf-ellipsis-cell.adf-datatable-cell-header .adf-datatable-cell-value,.cdk-drag-preview .adf-ellipsis-cell .adf-datatable-content-cell .adf-datatable-cell-value{overflow:hidden;text-overflow:ellipsis}.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell,.cdk-drag-preview .adf-ellipsis-cell .adf-datatable-content-cell{overflow:unset}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-ellipsis-cell .adf-cell-value,.cdk-drag-preview .adf-ellipsis-cell .adf-cell-value{top:100%}}.adf-datatable-list .adf-ellipsis-cell>div:after,.cdk-drag-preview .adf-ellipsis-cell>div:after{content:attr(title);overflow:hidden;height:0;display:block}.adf-datatable-list .adf-no-content-container.adf-datatable-cell,.cdk-drag-preview .adf-no-content-container.adf-datatable-cell{padding:0;border:none;width:100%;justify-content:center}.adf-datatable-list .adf-no-content-container.adf-datatable-cell>img,.cdk-drag-preview .adf-no-content-container.adf-datatable-cell>img{width:100%}.adf-datatable-list .adf-loading-content-container,.cdk-drag-preview .adf-loading-content-container{padding:0;width:100%}.adf-datatable-list .adf-loading-content-container>img,.cdk-drag-preview .adf-loading-content-container>img{width:100%}.adf-datatable-list .adf-no-permission__row:hover,.cdk-drag-preview .adf-no-permission__row:hover{cursor:default;background-color:inherit}.adf-datatable-list .adf-no-permission__cell.adf-datatable-cell,.cdk-drag-preview .adf-no-permission__cell.adf-datatable-cell{padding:0}.adf-datatable-list .adf-hidden,.cdk-drag-preview .adf-hidden{display:none}@media all and (width <= 768px){.adf-datatable-list .adf-desktop-only.adf-ellipsis-cell,.cdk-drag-preview .adf-desktop-only.adf-ellipsis-cell{display:none}}@media (device-width <= 768px){.adf-datatable-list .adf-desktop-only.adf-ellipsis-cell,.cdk-drag-preview .adf-desktop-only.adf-ellipsis-cell{display:none}}.adf-datatable-cell-header{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:flex;align-items:center;text-overflow:ellipsis;font-weight:700;line-height:24px;letter-spacing:0;min-height:var(--theme-display-3-font-size);font-size:var(--theme-caption-font-size);color:var(--adf-theme-foreground-text-color);box-sizing:border-box}.adf-datatable-cell-header_subtitle{margin-left:3px;opacity:.6}.adf-datatable-cell-header.adf-sortable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:flex;align-items:center}.adf-datatable-cell-header .adf-datatable__header--sorted-asc,.adf-datatable-cell-header .adf-datatable__header--sorted-desc{color:var(--adf-theme-foreground-text-color);padding-right:.25rem}.adf-datatable-cell-header .adf-datatable__header--sorted-asc:after,.adf-datatable-cell-header .adf-datatable__header--sorted-desc:after{font-family:Material Icons;font-weight:400;font-style:normal;font-size:var(--theme-headline-font-size);line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;word-wrap:normal;font-feature-settings:\"liga\";font-size:var(--theme-subheading-2-font-size);content:\"\\e5d8\";left:5px;right:5px;position:relative;vertical-align:middle}.adf-datatable-cell-header .adf-datatable__header--sorted-desc:after{content:\"\\e5db\"}.adf-datatable-cell-header .adf-datatable-cell--fileSize.adf-datatable__header--sorted-asc:before,.adf-datatable-cell-header .adf-datatable-cell--fileSize.adf-datatable__header--sorted-desc:before{left:-3px;right:-3px}.adf-datatable-cell-header .adf-datatable-cell-header-content{display:flex;flex-grow:1;align-items:center;margin:0 2px;padding:0 8px}.adf-datatable-cell-header .adf-datatable-cell-header-content .adf-datatable-cell-header-drag-icon-placeholder{padding:0;margin:0}.adf-datatable-cell-header .adf-datatable-cell-header-content--hovered{background-color:var(--adf-theme-background-hover-color);border-radius:6px}.adf-datatable-cell-header .adf-datatable-cell-header-drag-icon{margin-left:auto;cursor:move;margin-right:-.5rem;padding-left:-.5rem}.adf-datatable-cell-header .adf-datatable-cell-header-drag-icon-visible{display:flex}.adf-datatable-cell-header .adf-datatable-cell-value{padding-top:10px;padding-bottom:10px;line-height:24px;word-break:break-word}.adf-drop-header-cell-placeholder{display:flex;flex:1;background:var(--adf-theme-background-hover-color);border:dotted 1px rgba(0,0,0,.25);min-height:55px;transition:transform .25s cubic-bezier(0,0,.2,1)}.adf-datatable-cell-header.adf-ellipsis-cell .adf-datatable-cell-header-content{white-space:nowrap;overflow:hidden}.adf-datatable-cell-header.adf-ellipsis-cell .adf-datatable-cell-header-content--hovered .adf-datatable-cell-value{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cdk-drag-preview{min-height:var(--theme-display-3-font-size);display:flex;flex-direction:row;align-items:center;box-sizing:unset;background-color:var(--theme-background-color);border-top:2px solid var(--theme-selected-background-color);opacity:1}.cdk-drag-preview.adf-datatable-cell-header{border-radius:6px;background-color:var(--theme-background-color);transition:box-shadow .28s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.adf-checkbox-sr-only .mdc-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.adf-sticky-header{border-top:0;height:100%}.adf-sticky-header .adf-datatable-header{display:block;margin-right:0;border-top:1px solid var(--adf-theme-foreground-text-color-007);border-bottom:1px solid var(--adf-theme-foreground-text-color-007)}.adf-sticky-header .adf-datatable-body{display:block;flex:1;overflow-y:scroll;margin-top:-1px}.adf-upload__dragging>div{border-top:1px dashed var(--theme-accent-color-a200);border-bottom:1px dashed var(--theme-accent-color-a200)}.adf-upload__dragging>div:first-child{border-left:1px dashed var(--theme-accent-color-a200)}.adf-upload__dragging>div:last-child{border-right:1px dashed var(--theme-accent-color-a200)}.adf-datatable--empty{display:flex;flex-direction:column;flex:1;height:100%;overflow:hidden;min-height:0;justify-content:center;align-items:center;height:inherit}.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row{height:100%;background-color:var(--adf-theme-background-card-color);border:none}.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row:hover,.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row:focus{background-color:unset;cursor:default}.adf-datatable--empty--header-visible .adf-datatable-header{border:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable--empty--header-visible .adf-datatable-body{display:flex;flex-direction:column;flex:1;height:100%;overflow:hidden;min-height:0;justify-content:center;align-items:center}.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row{height:100%;background-color:var(--adf-theme-background-card-color);border:none}.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row:hover,.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row:focus{background-color:unset;cursor:default}@media screen and (width <= 380px){.adf-datatable-header{max-height:50%}}\n"] }]
|
|
816
816
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.IterableDiffers }, { type: i1.MatIconRegistry }, { type: i2.DomSanitizer }], propDecorators: { rowsList: [{
|
|
817
817
|
type: ViewChildren,
|
|
818
818
|
args: [DataTableRowComponent]
|
|
@@ -895,4 +895,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
|
|
|
895
895
|
type: HostListener,
|
|
896
896
|
args: ['keyup', ['$event']]
|
|
897
897
|
}] } });
|
|
898
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb3JlL3NyYy9saWIvZGF0YXRhYmxlL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29yZS9zcmMvbGliL2RhdGF0YWJsZS9jb21wb25lbnRzL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsNkRBQTZEO0FBRTdELE9BQU8sRUFHSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFFVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLGVBQWUsRUFJZixNQUFNLEVBQ04sU0FBUyxFQUlULFlBQVksRUFDWixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBcUIsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRixPQUFPLEVBQUUsYUFBYSxFQUFrQixNQUFNLHdCQUF3QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxVQUFVLEVBQTBCLE1BQU0sTUFBTSxDQUFDO0FBQzFELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRXZGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUUvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFNUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFB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QUtOLHdCQUF3QjtzQkFEdkIsS0FBSztnQkFLTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBS04sZUFBZTtzQkFEZCxLQUFLO2dCQUtOLHFCQUFxQjtzQkFEcEIsS0FBSztnQkFLTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBS04sV0FBVztzQkFEVixLQUFLO2dCQVNOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixhQUFhO3NCQURaLEtBQUs7Z0JBS04sVUFBVTtzQkFEVCxLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFLTixRQUFRO3NCQURQLE1BQU07Z0JBS1AsV0FBVztzQkFEVixNQUFNO2dCQUtQLGtCQUFrQjtzQkFEakIsTUFBTTtnQkFLUCxrQkFBa0I7c0JBRGpCLE1BQU07Z0JBS1AsZ0JBQWdCO3NCQURmLE1BQU07Z0JBS1Asa0JBQWtCO3NCQURqQixNQUFNO2dCQUtQLG1CQUFtQjtzQkFEbEIsTUFBTTtnQkFLUCx5QkFBeUI7c0JBRHhCLE1BQU07Z0JBUVAsT0FBTztzQkFETixLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFRTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBUU4sVUFBVTtzQkFEVCxLQUFLO2dCQU9OLGNBQWM7c0JBRGIsS0FBSztnQkFPTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBT04sWUFBWTtzQkFEWCxLQUFLO2dCQU9OLHdCQUF3QjtzQkFEdkIsS0FBSztnQkFPTixjQUFjO3NCQURiLEtBQUs7Z0JBS04sV0FBVztzQkFEVixNQUFNO2dCQWdDUCxTQUFTO3NCQURSLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvbm8tY29uZmxpY3RpbmctbGlmZWN5Y2xlICovXG5cbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRGVzdHJveVJlZixcbiAgICBEb0NoZWNrLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgSXRlcmFibGVEaWZmZXJzLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9jdXNLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hDaGFuZ2UsIE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSwgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IE9ic2VydmFibGUsIE9ic2VydmVyLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERhdGFDb2x1bW5MaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZGF0YS1jb2x1bW4vZGF0YS1jb2x1bW4tbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YUNvbHVtbiB9IGZyb20gJy4uLy4uL2RhdGEvZGF0YS1jb2x1bW4ubW9kZWwnO1xuaW1wb3J0IHsgRGF0YVJvd0V2ZW50IH0gZnJvbSAnLi4vLi4vZGF0YS9kYXRhLXJvdy1ldmVudC5tb2RlbCc7XG5pbXBvcnQgeyBEYXRhUm93IH0gZnJvbSAnLi4vLi4vZGF0YS9kYXRhLXJvdy5tb2RlbCc7XG5pbXBvcnQgeyBEYXRhU29ydGluZyB9IGZyb20gJy4uLy4uL2RhdGEvZGF0YS1zb3J0aW5nLm1vZGVsJztcbmltcG9ydCB7IERhdGFUYWJsZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9kYXRhL2RhdGF0YWJsZS1hZGFwdGVyJztcbmltcG9ydCB7IERhdGFUYWJsZVJvd0NvbXBvbmVudCB9IGZyb20gJy4uL2RhdGF0YWJsZS1yb3cvZGF0YXRhYmxlLXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgT2JqZWN0RGF0YVJvdyB9IGZyb20gJy4uLy4uL2RhdGEvb2JqZWN0LWRhdGFyb3cubW9kZWwnO1xuaW1wb3J0IHsgT2JqZWN0RGF0YUNvbHVtbiB9IGZyb20gJy4uLy4uL2RhdGEvb2JqZWN0LWRhdGFjb2x1bW4ubW9kZWwnO1xuaW1wb3J0IHsgT2JqZWN0RGF0YVRhYmxlQWRhcHRlciB9IGZyb20gJy4uLy4uL2RhdGEvb2JqZWN0LWRhdGF0YWJsZS1hZGFwdGVyJztcbmltcG9ydCB7IERhdGFDZWxsRXZlbnQgfSBmcm9tICcuLi9kYXRhLWNlbGwuZXZlbnQnO1xuaW1wb3J0IHsgRGF0YVJvd0FjdGlvbkV2ZW50IH0gZnJvbSAnLi4vZGF0YS1yb3ctYWN0aW9uLmV2ZW50JztcbmltcG9ydCB7IGJ1ZmZlciwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1hcCwgc2hhcmUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCwgQ2RrRHJhZ0hhbmRsZSwgQ2RrRHJvcExpc3QsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSwgTWF0SWNvblJlZ2lzdHJ5IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IFJlc2l6ZUV2ZW50IH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9yZXNpemFibGUvdHlwZXMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRmlsZVR5cGVQaXBlLCBMb2NhbGl6ZWREYXRlUGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzJztcbmltcG9ydCB7IERyb3Bab25lRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9kcm9wLXpvbmUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFJlc2l6YWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcmVzaXphYmxlL3Jlc2l6YWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2ljb24nO1xuaW1wb3J0IHsgUmVzaXplSGFuZGxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9yZXNpemFibGUvcmVzaXplLWhhbmRsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IFVwbG9hZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgQ29udGV4dE1lbnVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0LW1lbnUnO1xuaW1wb3J0IHsgSWNvbkNlbGxDb21wb25lbnQgfSBmcm9tICcuLi9pY29uLWNlbGwvaWNvbi1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlQ2VsbENvbXBvbmVudCB9IGZyb20gJy4uL2RhdGUtY2VsbC9kYXRlLWNlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IExvY2F0aW9uQ2VsbENvbXBvbmVudCB9IGZyb20gJy4uL2xvY2F0aW9uLWNlbGwvbG9jYXRpb24tY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmlsZVNpemVDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vZmlsZXNpemUtY2VsbC9maWxlc2l6ZS1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhVGFibGVDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YXRhYmxlLWNlbGwvZGF0YXRhYmxlLWNlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IEJvb2xlYW5DZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vYm9vbGVhbi1jZWxsL2Jvb2xlYW4tY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSnNvbkNlbGxDb21wb25lbnQgfSBmcm9tICcuLi9qc29uLWNlbGwvanNvbi1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbW91bnRDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vYW1vdW50LWNlbGwvYW1vdW50LWNlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IE51bWJlckNlbGxDb21wb25lbnQgfSBmcm9tICcuLi9udW1iZXItY2VsbC9udW1iZXItY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG5leHBvcnQgZW51bSBTaG93SGVhZGVyTW9kZSB7XG4gICAgTmV2ZXIgPSAnbmV2ZXInLFxuICAgIEFsd2F5cyA9ICdhbHdheXMnLFxuICAgIERhdGEgPSAnZGF0YSdcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhZGYtZGF0YXRhYmxlJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBEYXRhVGFibGVSb3dDb21wb25lbnQsXG4gICAgICAgIENka0Ryb3BMaXN0LFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIE1hdENoZWNrYm94TW9kdWxlLFxuICAgICAgICBDZGtEcmFnLFxuICAgICAgICBEcm9wWm9uZURpcmVjdGl2ZSxcbiAgICAgICAgUmVzaXphYmxlRGlyZWN0aXZlLFxuICAgICAgICBDZGtEcmFnSGFuZGxlLFxuICAgICAgICBJY29uQ29tcG9uZW50LFxuICAgICAgICBSZXNpemVIYW5kbGVEaXJlY3RpdmUsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgTWF0TWVudU1vZHVsZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgVXBsb2FkRGlyZWN0aXZlLFxuICAgICAgICBDb250ZXh0TWVudURpcmVjdGl2ZSxcbiAgICAgICAgRmlsZVR5cGVQaXBlLFxuICAgICAgICBJY29uQ2VsbENvbXBvbmVudCxcbiAgICAgICAgTG9jYWxpemVkRGF0ZVBpcGUsXG4gICAgICAgIERhdGVDZWxsQ29tcG9uZW50LFxuICAgICAgICBMb2NhdGlvbkNlbGxDb21wb25lbnQsXG4gICAgICAgIEZpbGVTaXplQ2VsbENvbXBvbmVudCxcbiAgICAgICAgRGF0YVRhYmxlQ2VsbENvbXBvbmVudCxcbiAgICAgICAgQm9vbGVhbkNlbGxDb21wb25lbnQsXG4gICAgICAgIEpzb25DZWxsQ29tcG9uZW50LFxuICAgICAgICBBbW91bnRDZWxsQ29tcG9uZW50LFxuICAgICAgICBOdW1iZXJDZWxsQ29tcG9uZW50XG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGF0YXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9kYXRhdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHsgY2xhc3M6ICdhZGYtZGF0YXRhYmxlJyB9XG59KVxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25DaGFuZ2VzLCBEb0NoZWNrLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICAgIHByaXZhdGUgc3RhdGljIE1JTklNVU1fQ09MVU1OX1NJWkUgPSAxMDA7XG5cbiAgICBAVmlld0NoaWxkcmVuKERhdGFUYWJsZVJvd0NvbXBvbmVudClcbiAgICByb3dzTGlzdDogUXVlcnlMaXN0PERhdGFUYWJsZVJvd0NvbXBvbmVudD47XG5cbiAgICBAQ29udGVudENoaWxkKERhdGFDb2x1bW5MaXN0Q29tcG9uZW50KVxuICAgIGNvbHVtbkxpc3Q6IERhdGFDb2x1bW5MaXN0Q29tcG9uZW50O1xuXG4gICAgLyoqIERhdGEgc291cmNlIGZvciB0aGUgdGFibGUgKi9cbiAgICBASW5wdXQoKVxuICAgIGRhdGE6IERhdGFUYWJsZUFkYXB0ZXI7XG5cbiAgICAvKiogVGhlIHJvd3MgdGhhdCB0aGUgZGF0YXRhYmxlIHdpbGwgc2hvdy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd3M6IGFueVtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmUgdGhlIHNvcnQgb3JkZXIgb2YgdGhlIGRhdGF0YWJsZS4gUG9zc2libGUgdmFsdWVzIGFyZSA6XG4gICAgICogW2BjcmVhdGVkYCwgYGRlc2NgXSwgW2BjcmVhdGVkYCwgYGFzY2BdLCBbYGR1ZWAsIGBkZXNjYF0sIFtgZHVlYCwgYGFzY2BdXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzb3J0aW5nOiBhbnlbXSA9IFtdO1xuXG4gICAgLyoqIFRoZSBjb2x1bW5zIHRoYXQgdGhlIGRhdGF0YWJsZSB3aWxsIHNob3cuICovXG4gICAgQElucHV0KClcbiAgICBjb2x1bW5zOiBhbnlbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogUm93IHNlbGVjdGlvbiBtb2RlLiBDYW4gYmUgbm9uZSwgYHNpbmdsZWAgb3IgYG11bHRpcGxlYC4gRm9yIGBtdWx0aXBsZWAgbW9kZSxcbiAgICAgKiB5b3UgY2FuIHVzZSBDbWQgKG1hY09TKSBvciBDdHJsIChXaW4pIG1vZGlmaWVyIGtleSB0byB0b2dnbGUgc2VsZWN0aW9uIGZvciBtdWx0aXBsZSByb3dzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0aW9uTW9kZTogc3RyaW5nID0gJ3NpbmdsZSc7IC8vIG5vbmV8c2luZ2xlfG11bHRpcGxlXG5cbiAgICAvKiogVG9nZ2xlcyBtdWx0aXBsZSByb3cgc2VsZWN0aW9uLCB3aGljaCByZW5kZXJzIGNoZWNrYm94ZXMgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJvdy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG11bHRpc2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogVG9nZ2xlcyBtYWluIGRhdGEgdGFibGUgYWN0aW9uIGNvbHVtbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1haW5UYWJsZUFjdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgZGF0YSBhY3Rpb25zIGNvbHVtbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFjdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBUb2dnbGVzIHRoZSBtYWluIGRhdGF0YWJsZSBhY3Rpb24uICovXG4gICAgQElucHV0KClcbiAgICBzaG93TWFpbkRhdGF0YWJsZUFjdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBUb2dnbGVzIHRoZSBwcm92aWRlZCBhY3Rpb25zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd1Byb3ZpZGVkQWN0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIFBvc2l0aW9uIG9mIHRoZSBhY3Rpb25zIGRyb3Bkb3duIG1lbnUuIENhbiBiZSBcImxlZnRcIiBvciBcInJpZ2h0XCIuICovXG4gICAgQElucHV0KClcbiAgICBhY3Rpb25zUG9zaXRpb246IHN0cmluZyA9ICdyaWdodCc7IC8vIGxlZnR8cmlnaHRcblxuICAgIC8qKiBUb2dnbGVzIHdoZXRoZXIgdGhlIGFjdGlvbnMgZHJvcGRvd24gc2hvdWxkIG9ubHkgYmUgdmlzaWJsZSBpZiB0aGUgcm93IGlzIGhvdmVyZWQgb3ZlciBvciB0aGUgZHJvcGRvd24gbWVudSBpcyBvcGVuLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWN0aW9uc1Zpc2libGVPbkhvdmVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogRmFsbGJhY2sgaW1hZ2UgZm9yIHJvd3Mgd2hlcmUgdGhlIHRodW1ibmFpbCBpcyBtaXNzaW5nLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmFsbGJhY2tUaHVtYm5haWw6IHN0cmluZztcblxuICAgIC8qKiBUb2dnbGVzIGN1c3RvbSBjb250ZXh0IG1lbnUgZm9yIHRoZSBjb21wb25lbnQuICovXG4gICAgQElucHV0KClcbiAgICBjb250ZXh0TWVudTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGlubGluZSBzdHlsZSB0byBhcHBseSB0byBldmVyeSByb3cuIFNlZVxuICAgICAqIFtOZ1N0eWxlXShodHRwczovL2FuZ3VsYXIuaW8vZG9jcy90cy9sYXRlc3QvYXBpL2NvbW1vbi9pbmRleC9OZ1N0eWxlLWRpcmVjdGl2ZS5odG1sKVxuICAgICAqIGRvY3MgZm9yIG1vcmUgZGV0YWlscyBhbmQgdXNhZ2UgZXhhbXBsZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByb3dTdHlsZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcblxuICAgIC8qKiBUaGUgQ1NTIGNsYXNzIHRvIGFwcGx5IHRvIGV2ZXJ5IHJvdy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd1N0eWxlQ2xhc3M6IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIGhlYWRlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dIZWFkZXIgPSBTaG93SGVhZGVyTW9kZS5EYXRhO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIHN0aWNreSBoZWFkZXIgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHN0aWNreUhlYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBjbGlja3MgYSByb3cuICovXG4gICAgQE91dHB1dCgpXG4gICAgcm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFSb3dFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgZG91YmxlLWNsaWNrcyBhIHJvdy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByb3dEYmxDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YVJvd0V2ZW50PigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgYmVmb3JlIHRoZSBjb250ZXh0IG1lbnUgaXMgZGlzcGxheWVkIGZvciBhIHJvdy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBzaG93Um93Q29udGV4dE1lbnUgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFDZWxsRXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCBiZWZvcmUgdGhlIGFjdGlvbnMgbWVudSBpcyBkaXNwbGF5ZWQgZm9yIGEgcm93LiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNob3dSb3dBY3Rpb25zTWVudSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YUNlbGxFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgZXhlY3V0ZXMgYSByb3cgYWN0aW9uLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGV4ZWN1dGVSb3dBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFSb3dBY3Rpb25FdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIGNvbHVtbiBvcmRlciBpcyBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGNvbHVtbk9yZGVyQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YUNvbHVtbltdPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgY29sdW1uIHdpZHRoIGlzIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgY29sdW1uc1dpZHRoQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YUNvbHVtbltdPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgc2VsZWN0ZWQgcm93IGl0ZW1zIGNvdW50IGluIHRoZSB0YWJsZSBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNlbGVjdGVkSXRlbXNDb3VudENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIC8qKlxuICAgICAqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgaWYgdGhlIGRhdGF0YWJsZSBpcyBpbiBsb2FkaW5nIHN0YXRlIGFuZCBuZWVkcyB0byBzaG93IHRoZVxuICAgICAqIGxvYWRpbmcgdGVtcGxhdGUgKHNlZSB0aGUgZG9jcyB0byBsZWFybiBob3cgdG8gY29uZmlndXJlIGEgbG9hZGluZyB0ZW1wbGF0ZSkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogRmxhZyB0aGF0IGluZGljYXRlcyBpZiB0aGUgZGF0YXRhYmxlIHNob3VsZCBzaG93IHRoZSBcIm5vIHBlcm1pc3Npb25cIiB0ZW1wbGF0ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vUGVybWlzc2lvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBpdGVtcyBmb3IgdGhlIHJvdyBhY3Rpb25zIG1lbnUgYmUgY2FjaGVkIGZvciByZXVzZSBhZnRlciB0aGV5IGFyZSBsb2FkZWRcbiAgICAgKiB0aGUgZmlyc3QgdGltZT9cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd01lbnVDYWNoZUVuYWJsZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIHJlc29sdmVyIGZ1bmN0aW9uIHdoaWNoIGlzIHVzZWQgdG8gcGFyc2UgZHluYW1pYyBjb2x1bW4gb2JqZWN0c1xuICAgICAqIHNlZSB0aGUgZG9jcyB0byBsZWFybiBob3cgdG8gY29uZmlndXJlIGEgcmVzb2x2ZXJGbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlc29sdmVyRm46IChyb3c6IERhdGFSb3csIGNvbDogRGF0YUNvbHVtbikgPT4gYW55ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEZsYWcgdGhhdCBpbmRpY2F0ZSBpZiB0aGUgZGF0YXRhYmxlIGFsbG93IHRoZSB1c2UgZmFjZXQgd2lkZ2V0IHNlYXJjaCBmb3IgZmlsdGVyaW5nLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWxsb3dGaWx0ZXJpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgaWYgdGhlIGRhdGF0YWJsZSBhbGxvd3MgY29sdW1uIHJlc2l6aW5nLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXNSZXNpemluZ0VuYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgaWYgdGhlIGRhdGF0YWJsZSBzaG91bGQgYmUgYmx1cnJlZCB3aGVuIHJlc2l6aW5nLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYmx1ck9uUmVzaXplID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgaWYgc2VsZWN0aW9uIGNoZWNrYm94ZXMgaW5zaWRlIHJvdyBzaG91bGQgYmUgZGlzcGxheWVkIG9uIGhvdmVyIG9ubHkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5Q2hlY2tib3hlc09uSG92ZXIgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEZsYWcgdGhhdCBlbmFibGVzIGRyYWdnaW5nIHJvd3NcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGVuYWJsZURyYWdSb3dzID0gZmFsc2U7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGRyYWdnZWQgcm93IGlzIGRyb3BwZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgZHJhZ0Ryb3BwZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcHJldmlvdXNJbmRleDogbnVtYmVyOyBjdXJyZW50SW5kZXg6IG51bWJlciB9PigpO1xuXG4gICAgaGVhZGVyRmlsdGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgbm9Db250ZW50VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgbm9QZXJtaXNzaW9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgbG9hZGluZ1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIG1haW5BY3Rpb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIGlzU2VsZWN0QWxsSW5kZXRlcm1pbmF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGlzU2VsZWN0QWxsQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHNlbGVjdGlvbiA9IG5ldyBBcnJheTxEYXRhUm93PigpO1xuICAgIHNlbGVjdGVkUm93SWQ6IHN0cmluZyA9ICcnO1xuXG4gICAgaXNEcmFnZ2luZ0hlYWRlckNvbHVtbiA9IGZhbHNlO1xuICAgIGhvdmVyZWRIZWFkZXJDb2x1bW5JbmRleCA9IC0xO1xuICAgIHJlc2l6aW5nQ29sdW1uSW5kZXggPSAtMTtcbiAgICBpc0RyYWdnaW5nUm93ID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGtleU1hbmFnZXI6IEZvY3VzS2V5TWFuYWdlcjxEYXRhVGFibGVSb3dDb21wb25lbnQ+O1xuICAgIHByaXZhdGUgY2xpY2tPYnNlcnZlcjogT2JzZXJ2ZXI8RGF0YVJvd0V2ZW50PjtcbiAgICBwcml2YXRlIGNsaWNrJDogT2JzZXJ2YWJsZTxEYXRhUm93RXZlbnQ+O1xuXG4gICAgcHJpdmF0ZSBkaWZmZXI6IGFueTtcbiAgICBwcml2YXRlIHJvd01lbnVDYWNoZTogYW55ID0ge307XG5cbiAgICBwcml2YXRlIHNpbmdsZUNsaWNrU3RyZWFtU3ViOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBtdWx0aUNsaWNrU3RyZWFtU3ViOiBTdWJzY3JpcHRpb247XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXl1cCcsIFsnJGV2ZW50J10pXG4gICAgb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMua2V5TWFuYWdlci5vbktleWRvd24oZXZlbnQpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZiwgZGlmZmVyczogSXRlcmFibGVEaWZmZXJzLCBwcml2YXRlIG1hdEljb25SZWdpc3RyeTogTWF0SWNvblJlZ2lzdHJ5LCBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7XG4gICAgICAgIGlmIChkaWZmZXJzKSB7XG4gICAgICAgICAgICB0aGlzLmRpZmZlciA9IGRpZmZlcnMuZmluZChbXSkuY3JlYXRlKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbGljayQgPSBuZXcgT2JzZXJ2YWJsZTxEYXRhUm93RXZlbnQ+KChvYnNlcnZlcikgPT4gKHRoaXMuY2xpY2tPYnNlcnZlciA9IG9ic2VydmVyKSkucGlwZShzaGFyZSgpKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRyYWdIYW5kbGVJY29uKCk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW5MaXN0KSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbkxpc3QuY29sdW1ucy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJsZVNjaGVtYSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRUYWJsZVNjaGVtYSgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5rZXlNYW5hZ2VyID0gbmV3IEZvY3VzS2V5TWFuYWdlcih0aGlzLnJvd3NMaXN0KS53aXRoV3JhcCgpLnNraXBQcmVkaWNhdGUoKGl0ZW0pID0+IGl0ZW0uZGlzYWJsZWQpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5pbml0QW5kU3Vic2NyaWJlQ2xpY2tTdHJlYW0oKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dJZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRSb3dBc0NvbnRleHRTb3VyY2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGFDaGFuZ2VzID0gY2hhbmdlc1snZGF0YSddO1xuICAgICAgICBjb25zdCByb3dDaGFuZ2VzID0gY2hhbmdlc1sncm93cyddO1xuICAgICAgICBjb25zdCBjb2x1bW5DaGFuZ2VzID0gY2hhbmdlc1snY29sdW1ucyddO1xuICAgICAgICBjb25zdCBtdWx0aXNlbGVjdENoYW5nZXMgPSBjaGFuZ2VzWydtdWx0aXNlbGVjdCddO1xuXG4gICAgICAgIGlmICh0aGlzLmlzUHJvcGVydHlDaGFuZ2VkKGRhdGFDaGFuZ2VzKSB8fCB0aGlzLmlzUHJvcGVydHlDaGFuZ2VkKHJvd0NoYW5nZXMpIHx8IHRoaXMuaXNQcm9wZXJ0eUNoYW5nZWQoY29sdW1uQ2hhbmdlcykpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVGFibGVFbXB0eSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0VGFibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGFDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGNoYW5nZXNbJ2RhdGEnXS5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocm93Q2hhbmdlcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYmxlUm93cyhjaGFuZ2VzWydyb3dzJ10uY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJsZVNvcnRpbmcodGhpcy5zb3J0aW5nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uQ2hhbmdlcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYmxlQ29sdW1ucyhjaGFuZ2VzWydjb2x1bW5zJ10uY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLnNlbGVjdGlvbk1vZGUgJiYgIWNoYW5nZXMuc2VsZWN0aW9uTW9kZS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KCdyb3ctdW5zZWxlY3QnLCBudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzUHJvcGVydHlDaGFuZ2VkKGNoYW5nZXNbJ3NvcnRpbmcnXSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVTb3J0aW5nKGNoYW5nZXNbJ3NvcnRpbmcnXS5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG11bHRpc2VsZWN0Q2hhbmdlcz8uY3VycmVudFZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNDb2x1bW5Tb3J0QWN0aXZlKGNvbHVtbjogRGF0YUNvbHVtbik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWNvbHVtbiB8fCAhdGhpcy5kYXRhLmdldFNvcnRpbmcoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2x1bW4ua2V5ID09PSB0aGlzLmRhdGEuZ2V0U29ydGluZygpLmtleTtcbiAgICB9XG5cbiAgICBnZXRWaXNpYmxlQ29sdW1ucygpOiBEYXRhQ29sdW1uW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmdldENvbHVtbnMoKS5maWx0ZXIoKGNvbHVtbikgPT4gIWNvbHVtbi5pc0hpZGRlbik7XG4gICAgfVxuXG4gICAgb25Ecm9wSGVhZGVyQ29sdW1uKGV2ZW50OiBDZGtEcmFnRHJvcDx1bmtub3duPik6IHZvaWQge1xuICAgICAgICBjb25zdCBhbGxDb2x1bW5zID0gdGhpcy5kYXRhLmdldENvbHVtbnMoKTtcbiAgICAgICAgY29uc3Qgc2hvd25Db2x1bW5zID0gYWxsQ29sdW1ucy5maWx0ZXIoKGNvbHVtbikgPT4gIWNvbHVtbi5pc0hpZGRlbik7XG4gICAgICAgIGNvbnN0IGhpZGRlbkNvbHVtbnMgPSBhbGxDb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4uaXNIaWRkZW4pO1xuXG4gICAgICAgIG1vdmVJdGVtSW5BcnJheShzaG93bkNvbHVtbnMsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgICAgIGNvbnN0IGFsbENvbHVtbnNXaXRoTmV3T3JkZXIgPSBbLi4uc2hvd25Db2x1bW5zLCAuLi5oaWRkZW5Db2x1bW5zXTtcblxuICAgICAgICB0aGlzLnNldFRhYmxlQ29sdW1ucyhhbGxDb2x1bW5zV2l0aE5ld09yZGVyKTtcbiAgICAgICAgdGhpcy5jb2x1bW5PcmRlckNoYW5nZWQuZW1pdChhbGxDb2x1bW5zV2l0aE5ld09yZGVyKTtcblxuICAgICAgICB0aGlzLmlzRHJhZ2dpbmdIZWFkZXJDb2x1bW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLmRpZmZlci5kaWZmKHRoaXMucm93cyk7XG4gICAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnNldFRhYmxlUm93cyh0aGlzLnJvd3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNQcm9wZXJ0eUNoYW5nZWQocHJvcGVydHk6IFNpbXBsZUNoYW5nZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISFwcm9wZXJ0eT8uY3VycmVudFZhbHVlO1xuICAgIH1cblxuICAgIGNvbnZlcnRUb1Jvd3NEYXRhKHJvd3M6IGFueVtdKTogT2JqZWN0RGF0YVJvd1tdIHtcbiAgICAgICAgcmV0dXJuIHJvd3MubWFwKChyb3cpID0+IG5ldyBPYmplY3REYXRhUm93KHJvdywgcm93LmlzU2VsZWN0ZWQsIHJvdz8uaXNTZWxlY3RhYmxlKSk7XG4gICAgfVxuXG4gICAgY29udmVydFRvQ29sdW1uc0RhdGEoY29sdW1uczogYW55W10pOiBPYmplY3REYXRhQ29sdW1uW10ge1xuICAgICAgICByZXR1cm4gY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gbmV3IE9iamVjdERhdGFDb2x1bW4oY29sdW1uKSk7XG4gICAgfVxuXG4gICAgY29udmVydFRvRGF0YVNvcnRpbmcoc29ydGluZzogYW55W10pOiBEYXRhU29ydGluZyB8IG51bGwge1xuICAgICAgICBpZiAoc29ydGluZyAmJiBzb3J0aW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0YVNvcnRpbmcoc29ydGluZ1swXSwgc29ydGluZ1sxXSwgc29ydGluZ1syXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0QW5kU3Vic2NyaWJlQ2xpY2tTdHJlYW0oKSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVDbGlja1N0cmVhbSgpO1xuICAgICAgICBjb25zdCBzaW5nbGVDbGlja1N0cmVhbSA9IHRoaXMuY2xpY2skLnBpcGUoXG4gICAgICAgICAgICBidWZmZXIodGhpcy5jbGljayQucGlwZShkZWJvdW5jZVRpbWUoMjUwKSkpLFxuICAgICAgICAgICAgbWFwKChsaXN0KSA9PiBsaXN0KSxcbiAgICAgICAgICAgIGZpbHRlcigoeCkgPT4geC5sZW5ndGggPT09IDEpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaW5nbGVDbGlja1N0cmVhbVN1YiA9IHNpbmdsZUNsaWNrU3RyZWFtLnN1YnNjcmliZSgoZGF0YVJvd0V2ZW50czogRGF0YVJvd0V2ZW50W10pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50OiBEYXRhUm93RXZlbnQgPSBkYXRhUm93RXZlbnRzWzBdO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVSb3dTZWxlY3Rpb24oZXZlbnQudmFsdWUsIGV2ZW50LmV2ZW50IGFzIGFueSk7XG4gICAgICAgICAgICB0aGlzLnJvd0NsaWNrLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdyb3ctY2xpY2snLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IG11bHRpQ2xpY2tTdHJlYW0gPSB0aGlzLmNsaWNrJC5waXBlKFxuICAgICAgICAgICAgYnVmZmVyKHRoaXMuY2xpY2skLnBpcGUoZGVib3VuY2VUaW1lKDI1MCkpKSxcbiAgICAgICAgICAgIG1hcCgobGlzdCkgPT4gbGlzdCksXG4gICAgICAgICAgICBmaWx0ZXIoKHgpID0+IHgubGVuZ3RoID49IDIpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5tdWx0aUNsaWNrU3RyZWFtU3ViID0gbXVsdGlDbGlja1N0cmVhbS5zdWJzY3JpYmUoKGRhdGFSb3dFdmVudHM6IERhdGFSb3dFdmVudFtdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBldmVudDogRGF0YVJvd0V2ZW50ID0gZGF0YVJvd0V2ZW50c1swXTtcbiAgICAgICAgICAgIHRoaXMucm93RGJsQ2xpY2suZW1pdChldmVudCk7XG4gICAgICAgICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3Jvdy1kYmxjbGljaycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1bnN1YnNjcmliZUNsaWNrU3RyZWFtKCkge1xuICAgICAgICBpZiAodGhpcy5zaW5nbGVDbGlja1N0cmVhbVN1Yikge1xuICAgICAgICAgICAgdGhpcy5zaW5nbGVDbGlja1N0cmVhbVN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5zaW5nbGVDbGlja1N0cmVhbVN1YiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubXVsdGlDbGlja1N0cmVhbVN1Yikge1xuICAgICAgICAgICAgdGhpcy5tdWx0aUNsaWNrU3RyZWFtU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLm11bHRpQ2xpY2tTdHJlYW1TdWIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0VGFibGUoKSB7XG4gICAgICAgIGNvbnN0IHJ1bnRpbWVDb2x1bW5zID0gdGhpcy5nZXRSdW50aW1lQ29sdW1ucygpO1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgT2JqZWN0RGF0YVRhYmxlQWRhcHRlcih0aGlzLnJvd3MsIHJ1bnRpbWVDb2x1bW5zKTtcblxuICAgICAgICB0aGlzLnNldFRhYmxlU29ydGluZyh0aGlzLnNvcnRpbmcpO1xuICAgICAgICB0aGlzLnJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMucm93TWVudUNhY2hlID0ge307XG4gICAgfVxuXG4gICAgaXNUYWJsZUVtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhID09PSB1bmRlZmluZWQgfHwgdGhpcy5kYXRhID09PSBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VGFibGVSb3dzKHJvd3M6IGFueVtdKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIGNvbnN0IHJvd3NEYXRhID0gdGhpcy5jb252ZXJ0VG9Sb3dzRGF0YShyb3dzKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRSb3dzKHJvd3NEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VGFibGVDb2x1bW5zKGNvbHVtbnM6IGFueVtdKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbnNEYXRhID0gdGhpcy5jb252ZXJ0VG9Db2x1bW5zRGF0YShjb2x1bW5zKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRDb2x1bW5zKGNvbHVtbnNEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UnVudGltZUNvbHVtbnMoKTogYW55W10ge1xuICAgICAgICByZXR1cm4gWy4uLih0aGlzLmNvbHVtbnMgfHwgW10pLCAuLi50aGlzLmdldFNjaGVtYUZyb21IdG1sKCldO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VGFibGVTY2hlbWEoKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldFJ1bnRpbWVDb2x1bW5zKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZGF0YSAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRDb2x1bW5zKGNvbHVtbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUYWJsZVNvcnRpbmcoc29ydGluZzogYW55W10pIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhLnNldFNvcnRpbmcodGhpcy5jb252ZXJ0VG9EYXRhU29ydGluZyhzb3J0aW5nKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2NoZW1hRnJvbUh0bWwoKTogYW55IHtcbiAgICAgICAgbGV0IHNjaGVtYSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5jb2x1bW5MaXN0Py5jb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzY2hlbWEgPSB0aGlzLmNvbHVtbkxpc3QuY29sdW1ucy5tYXAoKGMpID0+IGMgYXMgRGF0YUNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICB9XG5cbiAgICBvblJvd0NsaWNrKHJvdzogRGF0YVJvdywgbW91c2VFdmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAobW91c2VFdmVudCkge1xuICAgICAgICAgICAgbW91c2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLmRhdGEuZ2V0Um93cygpLmluZGV4T2Yocm93KSArICh0aGlzLmlzSGVhZGVyVmlzaWJsZSgpID8gMSA6IDApO1xuICAgICAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0ocm93SW5kZXgpO1xuXG4gICAgICAgICAgICBjb25zdCBkYXRhUm93RXZlbnQgPSBuZXcgRGF0YVJvd0V2ZW50KHJvdywgbW91c2VFdmVudCwgdGhpcyk7XG4gICAgICAgICAgICB0aGlzLmNsaWNrT2JzZXJ2ZXIubmV4dChkYXRhUm93RXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25FbnRlcktleVByZXNzZWQocm93OiBEYXRhUm93LCBlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUm93U2VsZWN0aW9uKHJvdywgZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVJvd1NlbGVjdGlvbihyb3c6IERhdGFSb3csIGU6IEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5kYXRhIHx8ICFyb3c/LmlzU2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVTZWxlY3Rpb25Nb2RlKCkpIHtcbiAgICAgICAgICAgIGlmIChyb3cuaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRSb3dTZWxlY3Rpb25FdmVudCgncm93LXVuc2VsZWN0JywgbnVsbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFJvdyhyb3csIHRydWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KCdyb3ctc2VsZWN0Jywgcm93KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlTZWxlY3Rpb25Nb2RlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZGlmaWVyID0gZSAmJiAoZS5tZXRhS2V5IHx8IGUuY3RybEtleSk7XG4gICAgICAgICAgICBsZXQgbmV3VmFsdWU6IGJvb2xlYW47XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSAhcm93LmlzU2VsZWN0ZWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gbW9kaWZpZXIgPyAhcm93LmlzU2VsZWN0ZWQgOiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZG9tRXZlbnROYW1lID0gbmV3VmFsdWUgPyAncm93LXNlbGVjdCcgOiAncm93LXVuc2VsZWN0JztcblxuICAgICAgICAgICAgaWYgKCFtb2RpZmllcikge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Um93KHJvdywgbmV3VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQoZG9tRXZlbnROYW1lLCByb3cpO1xuICAgICAgICAgICAgdGhpcy5jaGVja1NlbGVjdEFsbENoZWNrYm94U3RhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0U2VsZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgICAgICBjb25zdCByb3dzID0gdGhpcy5kYXRhLmdldFJvd3MoKTtcbiAgICAgICAgICAgIGlmIChyb3dzICYmIHJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJvd3MuZm9yRWFjaCgocikgPT4gKHIuaXNTZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNTZWxlY3RBbGxDaGVja2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNTZWxlY3RBbGxJbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NvdW50Q2hhbmdlZC5lbWl0KDApO1xuICAgIH1cblxuICAgIG9uUm93RGJsQ2xpY2socm93OiBEYXRhUm93LCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhUm93RXZlbnQgPSBuZXcgRGF0YVJvd0V2ZW50KHJvdywgZXZlbnQsIHRoaXMpO1xuICAgICAgICB0aGlzLmNsaWNrT2JzZXJ2ZXIubmV4dChkYXRhUm93RXZlbnQpO1xuICAgIH1cblxuICAgIG9uUm93RW50ZXJLZXlEb3duKHJvdzogRGF0YVJvdywga2V5Ym9hcmRFdmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgIHRoaXMub25LZXlib2FyZE5hdmlnYXRlKHJvdywga2V5Ym9hcmRFdmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblJvd0tleVVwKHJvdzogRGF0YVJvdywga2V5Ym9hcmRFdmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCgncm93LWtleXVwJywge1xuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgIGtleWJvYXJkRXZlbnQsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYnViYmxlczogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcblxuICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAga2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbktleWJvYXJkTmF2aWdhdGUocm93OiBEYXRhUm93LCBrZXlib2FyZEV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChrZXlib2FyZEV2ZW50KSB7XG4gICAgICAgICAgICBrZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBEYXRhUm93RXZlbnQocm93LCBrZXlib2FyZEV2ZW50LCB0aGlzKTtcblxuICAgICAgICB0aGlzLnJvd0RibENsaWNrLmVtaXQoZXZlbnQpO1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdyb3ctZGJsY2xpY2snLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiBldmVudCxcbiAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWYWxpZENsaWNrRXZlbnQoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBldmVudC5ldmVudFBoYXNlID09PSBldmVudC5CVUJCTElOR19QSEFTRTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBldmVudC5ldmVudFBoYXNlID09PSBldmVudC5BVF9UQVJHRVQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgb25Db2x1bW5IZWFkZXJDbGljayhjb2x1bW46IERhdGFDb2x1bW4sIGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkQ2xpY2tFdmVudChldmVudCkgJiYgY29sdW1uICYmIGNvbHVtbi5zb3J0YWJsZSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuZGF0YS5nZXRTb3J0aW5nKCk7XG4gICAgICAgICAgICBsZXQgbmV3RGlyZWN0aW9uID0gJ2FzYyc7XG4gICAgICAgICAgICBpZiAoY3VycmVudCAmJiBjb2x1bW4ua2V5ID09PSBjdXJyZW50LmtleSkge1xuICAgICAgICAgICAgICAgIG5ld0RpcmVjdGlvbiA9IGN1cnJlbnQuZGlyZWN0aW9uPy50b0xvd2VyQ2FzZSgpID09PSAnYXNjJyA/ICdkZXNjJyA6ICdhc2MnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zb3J0aW5nID0gW2NvbHVtbi5rZXksIG5ld0RpcmVjdGlvbiwgeyBudW1lcmljOiB0cnVlIH1dO1xuICAgICAgICAgICAgdGhpcy5kYXRhLnNldFNvcnRpbmcobmV3IERhdGFTb3J0aW5nKGNvbHVtbi5rZXksIG5ld0RpcmVjdGlvbiwgeyBudW1lcmljOiB0cnVlIH0pKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdFNvcnRpbmdDaGFuZ2VkRXZlbnQoY29sdW1uLmtleSwgY29sdW1uLnNvcnRpbmdLZXksIG5ld0RpcmVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmtleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbSgwKTtcbiAgICB9XG5cbiAgICBvblNlbGVjdEFsbENsaWNrKG1hdENoZWNrYm94Q2hhbmdlOiBNYXRDaGVja2JveENoYW5nZSkge1xuICAgICAgICB0aGlzLmlzU2VsZWN0QWxsQ2hlY2tlZCA9IG1hdENoZWNrYm94Q2hhbmdlLmNoZWNrZWQ7XG4gICAgICAgIHRoaXMuaXNTZWxlY3RBbGxJbmRldGVybWluYXRlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGFibGVSb3dzID0gdGhpcy5kYXRhLmdldFJvd3MoKS5maWx0ZXIoKHJvdykgPT4gcm93Py5pc1NlbGVjdGFibGUpO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGFibGVSb3dzICYmIHNlbGVjdGFibGVSb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGFibGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Um93KHNlbGVjdGFibGVSb3dzW2ldLCBtYXRDaGVja2JveENoYW5nZS5jaGVja2VkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRvbUV2ZW50TmFtZSA9IG1hdENoZWNrYm94Q2hhbmdlLmNoZWNrZWQgPyAncm93LXNlbGVjdCcgOiAncm93LXVuc2VsZWN0JztcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuc2VsZWN0aW9uLmxlbmd0aCA+IDAgPyB0aGlzLnNlbGVjdGlvblswXSA6IG51bGw7XG5cbiAgICAgICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KGRvbUV2ZW50TmFtZSwgcm93KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2hlY2tib3hMYWJlbENsaWNrKHJvdzogRGF0YVJvdywgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoISh0YXJnZXQuaGFzQXR0cmlidXRlKCdkYXRhLWFkZi1kYXRhdGFibGUtcm93LWNoZWNrYm94JykgfHwgdGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWFkZi1kYXRhdGFibGUtcm93LWNoZWNrYm94XScpKSkge1xuICAgICAgICAgICAgdGhpcy5vblJvd0NsaWNrKHJvdywgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DaGVja2JveENoYW5nZShyb3c6IERhdGFSb3csIGV2ZW50OiBNYXRDaGVja2JveENoYW5nZSkge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGV2ZW50LmNoZWNrZWQ7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93LCBuZXdWYWx1ZSk7XG5cbiAgICAgICAgY29uc3QgZG9tRXZlbnROYW1lID0gbmV3VmFsdWUgPyAncm93LXNlbGVjdCcgOiAncm93LXVuc2VsZWN0JztcbiAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQoZG9tRXZlbnROYW1lLCByb3cpO1xuICAgICAgICB0aGlzLmNoZWNrU2VsZWN0QWxsQ2hlY2tib3hTdGF0ZSgpO1xuICAgIH1cblxuICAgIGNoZWNrU2VsZWN0QWxsQ2hlY2tib3hTdGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgIGxldCBudW1iZXJPZlNlbGVjdGVkUm93czogbnVtYmVyID0gMDtcbiAgICAgICAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLmRhdGEuZ2V0Um93cygpO1xuICAgICAgICAgICAgcm93cy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocm93LmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZTZWxlY3RlZFJvd3MrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChudW1iZXJPZlNlbGVjdGVkUm93cyA9PT0gcm93cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2VsZWN0QWxsQ2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1NlbGVjdEFsbEluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyT2ZTZWxlY3RlZFJvd3MgPiAwICYmIG51bWJlck9mU2VsZWN0ZWRSb3dzIDwgcm93cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2VsZWN0QWxsQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RBbGxJbmRldGVybWluYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1NlbGVjdEFsbENoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25JbWFnZUxvYWRpbmdFcnJvcihldmVudDogRXZlbnQsIHJvdzogRGF0YVJvdykge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgYW55O1xuXG4gICAgICAgICAgICBpZiAodGhpcy5mYWxsYmFja1RodW1ibmFpbCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuc3JjID0gdGhpcy5mYWxsYmFja1RodW1ibmFpbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zcmMgPSByb3cuaW1hZ2VFcnJvclJlc29sdmVyKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzSWNvblZhbHVlKHJvdzogRGF0YVJvdywgY29sOiBEYXRhQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChyb3cgJiYgY29sKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZGF0YS5nZXRWYWx1ZShyb3csIGNvbCk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU/LnN0YXJ0c1dpdGgoJ21hdGVyaWFsLWljb25zOi8vJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGFzSWNvblZhbHVlKHJvdzogRGF0YVJvdywgY29sOiBEYXRhQ29sdW1uKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJY29uVmFsdWUocm93LCBjb2wpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZGF0YS5nZXRWYWx1ZShyb3csIGNvbCkgfHwgJyc7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgnbWF0ZXJpYWwtaWNvbnM6Ly8nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaXNDb2x1bW5Tb3J0ZWQoY29sOiBEYXRhQ29sdW1uLCBkaXJlY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoY29sICYmIGRpcmVjdGlvbikge1xuICAgICAgICAgICAgY29uc3Qgc29ydGluZyA9IHRoaXMuZGF0YS5nZXRTb3J0aW5nKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1NvcnRpbmdFcXVhbChjb2wsIGRpcmVjdGlvbiwgc29ydGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGdldENvbnRleHRNZW51QWN0aW9ucyhyb3c6IERhdGFSb3csIGNvbDogRGF0YUNvbHVtbik6ICgpID0+IGFueVtdIHtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IERhdGFDZWxsRXZlbnQocm93LCBjb2wsIFtdKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd1Jvd0NvbnRleHRNZW51LmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnZhbHVlLmFjdGlvbnM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0Um93QWN0aW9ucyhyb3c6IERhdGFSb3csIGNvbD86IERhdGFDb2x1bW4pOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IGlkID0gcm93LmdldFZhbHVlKCdpZCcpO1xuXG4gICAgICAgIGlmICghdGhpcy5yb3dNZW51Q2FjaGVbaWRdKSB7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBEYXRhQ2VsbEV2ZW50KHJvdywgY29sLCBbXSk7XG4gICAgICAgICAgICB0aGlzLnNob3dSb3dBY3Rpb25zTWVudS5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIGlmICghdGhpcy5yb3dNZW51Q2FjaGVFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmlzaWJsZUFjdGlvbnMoZXZlbnQudmFsdWUuYWN0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJvd01lbnVDYWNoZVtpZF0gPSBldmVudC52YWx1ZS5hY3Rpb25zO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmlzaWJsZUFjdGlvbnModGhpcy5yb3dNZW51Q2FjaGVbaWRdKTtcbiAgICB9XG5cbiAgICBnZXRWaXNpYmxlQWN0aW9ucyhhY3Rpb25zOiBhbnlbXSk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIGFjdGlvbnMuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbi52aXNpYmxlIHx8IGFjdGlvbi52aXNpYmxlID09PSB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIG9uRXhlY3V0ZVJvd0FjdGlvbihyb3c6IERhdGFSb3csIGFjdGlvbjogYW55KSB7XG4gICAgICAgIGlmIChhY3Rpb24uZGlzYWJsZWQgfHwgYWN0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZVJvd0FjdGlvbi5lbWl0KG5ldyBEYXRhUm93QWN0aW9uRXZlbnQocm93LCBhY3Rpb24pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEhpZGVBY3Rpb25zV2l0aG91dEhvdmVyQ2xhc3MoYWN0aW9uc01lbnVUcmlnZ2VyOiBNYXRNZW51VHJpZ2dlcikge1xuICAgICAgICByZXR1cm4geyAnYWRmLWRhdGF0YWJsZS1oaWRlLWFjdGlvbnMtd2l0aG91dC1ob3Zlcic6IHRoaXMuYWN0aW9uc1Zpc2libGVPbkhvdmVyICYmICFhY3Rpb25zTWVudVRyaWdnZXIubWVudU9wZW4gfTtcbiAgICB9XG5cbiAgICByb3dBbGxvd3NEcm9wKHJvdzogRGF0YVJvdyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcm93LmlzRHJvcFRhcmdldCA9PT0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpc1NpbmdsZVNlbGVjdGlvbk1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGUgJiYgdGhpcy5zZWxlY3Rpb25Nb2RlLnRvTG93ZXJDYXNlKCkgPT09ICdzaW5nbGUnO1xuICAgIH1cblxuICAgIGlzTXVsdGlTZWxlY3Rpb25Nb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlICYmIHRoaXMuc2VsZWN0aW9uTW9kZS50b0xvd2VyQ2FzZSgpID09PSAnbXVsdGlwbGUnO1xuICAgIH1cblxuICAgIGdldFJvd1N0eWxlKHJvdzogRGF0YVJvdyk6IHN0cmluZyB7XG4gICAgICAgIHJvdy5jc3NDbGFzcyA9IHJvdy5jc3NDbGFzcyA/IHJvdy5jc3NDbGFzcyA6ICcnO1xuICAgICAgICB0aGlzLnJvd1N0eWxlQ2xhc3MgPSB0aGlzLnJvd1N0eWxlQ2xhc3MgPyB0aGlzLnJvd1N0eWxlQ2xhc3MgOiAnJztcbiAgICAgICAgY29uc3QgY29udGV4dE1lbnVTb3VyY2VDbGFzcyA9IHJvdy5pc0NvbnRleHRNZW51U291cmNlID8gJ2FkZi1jb250ZXh0LW1lbnUtc291cmNlJyA6ICcnO1xuICAgICAgICBjb25zdCBpc0RyYWdFbmFibGVkID0gdGhpcy5lbmFibGVEcmFnUm93cyA/ICdhZGYtZHJhZy1yb3cnIDogJyc7XG4gICAgICAgIHJldHVybiBgJHtyb3cuY3NzQ2xhc3N9ICR7dGhpcy5yb3dTdHlsZUNsYXNzfSAke2NvbnRleHRNZW51U291cmNlQ2xhc3N9ICR7aXNEcmFnRW5hYmxlZH1gO1xuICAgIH1cblxuICAgIG1hcmtSb3dBc0NvbnRleHRNZW51U291cmNlKHNlbGVjdGVkUm93OiBEYXRhUm93KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJZCA9IHNlbGVjdGVkUm93LmlkID8gc2VsZWN0ZWRSb3cuaWQgOiAnJztcbiAgICAgICAgdGhpcy5kYXRhLmdldFJvd3MoKS5mb3JFYWNoKChyb3cpID0+IChyb3cuaXNDb250ZXh0TWVudVNvdXJjZSA9IGZhbHNlKSk7XG4gICAgICAgIHNlbGVjdGVkUm93LmlzQ29udGV4dE1lbnVTb3VyY2UgPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Um93QXNDb250ZXh0U291cmNlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJvdyA9IHRoaXMuZGF0YS5nZXRSb3dzKCkuZmluZCgocm93KSA9PiB0aGlzLnNlbGVjdGVkUm93SWQgPT09IHJvdy5pZCk7XG4gICAgICAgIGlmIChzZWxlY3RlZFJvdykge1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3cuaXNDb250ZXh0TWVudVNvdXJjZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3RSb3cocm93OiBEYXRhUm93LCB2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICByb3cuaXNTZWxlY3RlZCA9IHZhbHVlO1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gcm93Py5pZCA/IHRoaXMuZmluZFNlbGVjdGlvbkJ5SWQocm93LmlkKSA6IHRoaXMuc2VsZWN0aW9uLmluZGV4T2Yocm93KTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChpZHggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChpZHggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NvdW50Q2hhbmdlZC5lbWl0KHRoaXMuc2VsZWN0aW9uLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmaW5kU2VsZWN0aW9uQnlJZChpZDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLmZpbmRJbmRleCgoc2VsZWN0aW9uKSA9PiBzZWxlY3Rpb24/LmlkID09PSBpZCk7XG4gICAgfVxuXG4gICAgZ2V0Q2VsbFRvb2x0aXAocm93OiBEYXRhUm93LCBjb2w6IERhdGFDb2x1bW4pOiBzdHJpbmcge1xuICAgICAgICBpZiAocm93ICYmIGNvbCAmJiBjb2wuZm9ybWF0VG9vbHRpcCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBzdHJpbmcgPSBjb2wuZm9ybWF0VG9vbHRpcChyb3csIGNvbCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRTb3J0YWJsZUNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0Q29sdW1ucygpLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4uc29ydGFibGUgPT09IHRydWUpO1xuICAgIH1cblxuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0Um93cygpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBpc0hlYWRlclZpc2libGUoKSB7XG4gICAgICAgIGxldCBoZWFkZXJWaXNpYmlsaXR5OiBib29sZWFuO1xuXG4gICAgICAgIGlmICh0aGlzLnNob3dIZWFkZXIgPT09IFNob3dIZWFkZXJNb2RlLkRhdGEpIHtcbiAgICAgICAgICAgIGhlYWRlclZpc2liaWxpdHkgPSAhdGhpcy5sb2FkaW5nICYmICF0aGlzLm5vUGVybWlzc2lvbiAmJiAhdGhpcy5pc0VtcHR5KCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG93SGVhZGVyID09PSBTaG93SGVhZGVyTW9kZS5BbHdheXMpIHtcbiAgICAgICAgICAgIGhlYWRlclZpc2liaWxpdHkgPSAhdGhpcy5sb2FkaW5nICYmICF0aGlzLm5vUGVybWlzc2lvbjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dIZWFkZXIgPT09IFNob3dIZWFkZXJNb2RlLk5ldmVyKSB7XG4gICAgICAgICAgICBoZWFkZXJWaXNpYmlsaXR5ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhlYWRlclZpc2liaWxpdHk7XG4gICAgfVxuXG4gICAgaXNTdGlja3lIZWFkZXJFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGlja3lIZWFkZXIgJiYgdGhpcy5pc0hlYWRlclZpc2libGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRSb3dTZWxlY3Rpb25FdmVudChuYW1lOiBzdHJpbmcsIHJvdzogRGF0YVJvdykge1xuICAgICAgICBjb25zdCBkb21FdmVudCA9IG5ldyBDdXN0b21FdmVudChuYW1lLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uOiB0aGlzLnNlbGVjdGlvblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoZG9tRXZlbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW1pdFNvcnRpbmdDaGFuZ2VkRXZlbnQoa2V5OiBzdHJpbmcsIHNvcnRpbmdLZXk6IHN0cmluZywgZGlyZWN0aW9uOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ3NvcnRpbmctY2hhbmdlZCcsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBzb3J0aW5nS2V5LFxuICAgICAgICAgICAgICAgIGRpcmVjdGlvblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoZG9tRXZlbnQpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlQ2xpY2tTdHJlYW0oKTtcbiAgICB9XG5cbiAgICBnZXROYW1lQ29sdW1uVmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0Q29sdW1ucygpLmZpbmQoKGVsOiBhbnkpID0+IGVsLmtleS5pbmNsdWRlcygnbmFtZScpKTtcbiAgICB9XG5cbiAgICBnZXRBdXRvbWF0aW9uVmFsdWUocm93OiBEYXRhUm93KTogYW55IHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0TmFtZUNvbHVtblZhbHVlKCk7XG4gICAgICAgIHJldHVybiBuYW1lID8gcm93LmdldFZhbHVlKG5hbWUua2V5KSA6ICcnO1xuICAgIH1cblxuICAgIGdldEFyaWFTb3J0KGNvbHVtbjogRGF0YUNvbHVtbik6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy5pc0NvbHVtblNvcnRBY3RpdmUoY29sdW1uKSkge1xuICAgICAgICAgICAgcmV0dXJuICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuU09SVF9OT05FJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmlzQ29sdW1uU29ydGVkKGNvbHVtbiwgJ2FzYycpID8gJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5TT1JUX0FTQ0VORElORycgOiAnQURGLURBVEFUQUJMRS5BQ0NFU1NJQklMSVRZLlNPUlRfREVTQ0VORElORyc7XG4gICAgfVxuXG4gICAgZ2V0U29ydExpdmVBbm5vdW5jZW1lbnQoY29sdW1uOiBEYXRhQ29sdW1uKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29sdW1uU29ydEFjdGl2ZShjb2x1bW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5TT1JUX0RFRkFVTFQnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ29sdW1uU29ydGVkKGNvbHVtbiwgJ2FzYycpXG4gICAgICAgICAgICA/ICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuU09SVF9BU0NFTkRJTkdfQlknXG4gICAgICAgICAgICA6ICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuU09SVF9ERVNDRU5ESU5HX0JZJztcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyRHJhZ0hhbmRsZUljb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGljb25VcmwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoJy4vYXNzZXRzL2ltYWdlcy9kcmFnX2luZGljYXRvcl8yNHB4LnN2ZycpO1xuXG4gICAgICAgIHRoaXMubWF0SWNvblJlZ2lzdHJ5LmFkZFN2Z0ljb25Jbk5hbWVzcGFjZSgnYWRmJywgJ2RyYWdfaW5kaWNhdG9yJywgaWNvblVybCk7XG4gICAgfVxuXG4gICAgb25SZXNpemluZyh7IHJlY3RhbmdsZTogeyB3aWR0aCB9IH06IFJlc2l6ZUV2ZW50LCBjb2xJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMuZ2V0VmlzaWJsZUNvbHVtbnMoKTtcbiAgICAgICAgICAgIGFsbENvbHVtbnNbY29sSW5kZXhdLndpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0Q29sdW1ucyhhbGxDb2x1bW5zKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzUmVzaXppbmcpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25SZXNpemluZ0VuZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNpemluZ0NvbHVtbkluZGV4ID0gLTE7XG5cbiAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5zV2lkdGhzKCk7XG4gICAgfVxuXG4gICAgZ2V0RmxleFZhbHVlKHsgd2lkdGggPSAwIH06IERhdGFDb2x1bW4pOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYDAgMSAke3dpZHRoIDwgRGF0YVRhYmxlQ29tcG9uZW50Lk1JTklNVU1fQ09MVU1OX1NJWkUgPyBEYXRhVGFibGVDb21wb25lbnQuTUlOSU1VTV9DT0xVTU5fU0laRSA6IHdpZHRofXB4YDtcbiAgICB9XG5cbiAgICBmaWx0ZXJEaXNhYmxlZENvbHVtbnMoaW5kZXg6IG51bWJlciwgX2RyYWc6IENka0RyYWcsIGRyb3A6IENka0Ryb3BMaXN0KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhZHJvcC5nZXRTb3J0ZWRJdGVtcygpW2luZGV4XS5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBvbkRyYWdEcm9wKGRyb3BwZWRFdmVudDogQ2RrRHJhZ0Ryb3A8YW55Pik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lbmFibGVEcmFnUm93cykge1xuICAgICAgICAgICAgdGhpcy5kcmFnRHJvcHBlZC5lbWl0KHsgcHJldmlvdXNJbmRleDogZHJvcHBlZEV2ZW50LnByZXZpb3VzSW5kZXgsIGN1cnJlbnRJbmRleDogZHJvcHBlZEV2ZW50LmN1cnJlbnRJbmRleCB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHJhZ1N0YXJ0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzRHJhZ2dpbmdSb3cgPSB0cnVlO1xuICAgIH1cblxuICAgIG9uRHJhZ0VuZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nUm93ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVDb2x1bW5zV2lkdGhzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhbGxDb2x1bW5zID0gdGhpcy5kYXRhLmdldENvbHVtbnMoKTtcblxuICAgICAgICBjb25zdCBoZWFkZXJDb250YWluZXI6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFkZi1kYXRhdGFibGUtaGVhZGVyJyk7XG5cbiAgICAgICAgaWYgKGhlYWRlckNvbnRhaW5lcikge1xuICAgICAgICAgICAgY29uc3QgaGVhZGVyQ29udGFpbmVyQ29sdW1ucyA9IGhlYWRlckNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcuYWRmLWRhdGF0YWJsZS1jZWxsLWhlYWRlcjpub3QoLmFkZi1kYXRhdGFibGUtY2hlY2tib3gpJyk7XG5cbiAgICAgICAgICAgIGhlYWRlckNvbnRhaW5lckNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBIVE1MRWxlbWVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhbGxDb2x1bW5zW2luZGV4XSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbENvbHVtbnNbaW5kZXhdLndpZHRoID0gY29sdW1uLmNsaWVudFdpZHRoIC0gcGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUoY29sdW1uKS5wYWRkaW5nTGVmdCwgMTApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID09PSBoZWFkZXJDb250YWluZXJDb2x1bW5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbENvbHVtbnNbaW5kZXhdLndpZHRoID0gY29sdW1uLmNsaWVudFdpZHRoIC0gcGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUoY29sdW1uKS5wYWRkaW5nUmlnaHQsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbENvbHVtbnNbaW5kZXhdLndpZHRoID0gY29sdW1uLmNsaWVudFdpZHRoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhLnNldENvbHVtbnMoYWxsQ29sdW1ucyk7XG5cbiAgICAgICAgdGhpcy5jb2x1bW5zV2lkdGhDaGFuZ2VkLmVtaXQoYWxsQ29sdW1ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1NvcnRpbmdFcXVhbChjb2w6IERhdGFDb2x1bW4sIGRpcmVjdGlvbjogc3RyaW5nLCBzb3J0aW5nOiBEYXRhU29ydGluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gc29ydGluZyAmJiAoc29ydGluZy5rZXkgPT09IGNvbC5rZXkgfHwgc29ydGluZy5rZXkgPT09IGNvbC5zb3J0aW5nS2V5KSAmJiBzb3J0aW5nLmRpcmVjdGlvbj8udG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gZGlyZWN0aW9uO1xuICAgIH1cblxuICAgIGdldCBpc1Jlc2l6aW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNpemluZ0NvbHVtbkluZGV4ID49IDA7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFUYWJsZURyb3BFdmVudCB7XG4gICAgZGV0YWlsOiB7XG4gICAgICAgIHRhcmdldDogJ2NlbGwnIHwgJ2hlYWRlcic7XG4gICAgICAgIGV2ZW50OiBFdmVudDtcbiAgICAgICAgY29sdW1uOiBEYXRhQ29sdW1uO1xuICAgICAgICByb3c/OiBEYXRhUm93O1xuICAgIH07XG5cbiAgICBwcmV2ZW50RGVmYXVsdCgpOiB2b2lkO1xufVxuIiwiPGRpdlxuICAgIHJvbGU9XCJncmlkXCJcbiAgICAqbmdJZj1cImRhdGFcIlxuICAgIGNsYXNzPVwiYWRmLWZ1bGwtd2lkdGggYWRmLWRhdGF0YWJsZS1saXN0XCJcbiAgICBbY2xhc3MuYWRmLXN0aWNreS1oZWFkZXJdPVwiaXNTdGlja3lIZWFkZXJFbmFibGVkKClcIlxuICAgIFtjbGFzcy5hZGYtZGF0YXRhYmxlLS1lbXB0eV09XCIoaXNFbXB0eSgpICYmICFpc0hlYWRlclZpc2libGUoKSkgfHwgbG9hZGluZ1wiXG4gICAgW2NsYXNzLmFkZi1kYXRhdGFibGUtLWVtcHR5LS1oZWFkZXItdmlzaWJsZV09XCJpc0VtcHR5KCkgJiYgaXNIZWFkZXJWaXNpYmxlKClcIlxuPlxuICAgIDxkaXYgKm5nSWY9XCJpc0hlYWRlclZpc2libGUoKVwiIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1oZWFkZXJcIiByb2xlPVwicm93Z3JvdXBcIiBbbmdDbGFzc109XCJ7ICdhZGYtc3Itb25seSc6ICFpc0hlYWRlclZpc2libGUoKSB9XCI+XG4gICAgICAgIDxhZGYtZGF0YXRhYmxlLXJvd1xuICAgICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICAgIGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICAgICAgICAgIFtjZGtEcm9wTGlzdFNvcnRQcmVkaWNhdGVdPVwiZmlsdGVyRGlzYWJsZWRDb2x1bW5zXCJcbiAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImRhdGF0YWJsZS1yb3ctaGVhZGVyXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNIZWFkZXJWaXNpYmxlKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLXJvd1wiXG4gICAgICAgICAgICByb2xlPVwicm93XCI+XG5cblxuICAgICAgICAgICAgPCEtLSBEcmFnIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImVuYWJsZURyYWdSb3dzXCIgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbGwtaGVhZGVyIGFkZi1kcmFnLWNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWRmLXNyLW9ubHlcIj57eyAnQURGLURBVEFUQUJMRS5BQ0NFU1NJQklMSVRZLkRSQUcnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gQWN0aW9ucyAobGVmdCkgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aW9ucyAmJiBhY3Rpb25zUG9zaXRpb24gPT09ICdsZWZ0J1wiIGNsYXNzPVwiYWRmLWFjdGlvbnMtY29sdW1uIGFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZi1zci1vbmx5XCI+e3sgJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5BQ1RJT05TJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIENvbHVtbnMgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibXVsdGlzZWxlY3RcIiBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXIgYWRmLWRhdGF0YWJsZS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggW2luZGV0ZXJtaW5hdGVdPVwiaXNTZWxlY3RBbGxJbmRldGVybWluYXRlXCIgW2NoZWNrZWRdPVwiaXNTZWxlY3RBbGxDaGVja2VkXCIgKGNoYW5nZSk9XCJvblNlbGVjdEFsbENsaWNrKCRldmVudClcIiBjbGFzcz1cImFkZi1jaGVja2JveC1zci1vbmx5XCI+e3sgJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5TRUxFQ1RfQUxMJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICBsZXQgY29sIG9mIGdldFZpc2libGVDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgbGV0IGNvbHVtbkluZGV4ID0gaW5kZXhcbiAgICAgICAgICAgICAgICBsZXQgbGFzdENvbHVtbiA9IGxhc3RcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsLS17e2NvbC50eXBlIHx8ICd0ZXh0J319IHt7Y29sLmNzc0NsYXNzfX0gYWRmLWRhdGF0YWJsZS1jZWxsLWhlYWRlciBhZGYtZGF0YXRhYmxlLWNlbGwtZGF0YVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wudGl0bGUgfHwgIXNob3dQcm92aWRlZEFjdGlvbnNcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYXV0b19pZF8nICsgY29sLmtleVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAnYWRmLXNvcnRhYmxlJzogY29sLnNvcnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAnYWRmLWRhdGF0YWJsZV9fY3Vyc29yLS1wb2ludGVyJzogIWlzUmVzaXppbmcsXG4gICAgICAgICAgICAgICAgICAgICdhZGYtZGF0YXRhYmxlX19oZWFkZXItLXNvcnRlZC1hc2MnOiBpc0NvbHVtblNvcnRlZChjb2wsICdhc2MnKSxcbiAgICAgICAgICAgICAgICAgICAgJ2FkZi1kYXRhdGFibGVfX2hlYWRlci0tc29ydGVkLWRlc2MnOiBpc0NvbHVtblNvcnRlZChjb2wsICdkZXNjJyl9XCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCIoY29sLndpZHRoKSAmJiAhbGFzdENvbHVtbiAmJiB7J2ZsZXgnOiBnZXRGbGV4VmFsdWUoY29sKX1cIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbC50aXRsZSB8IHRyYW5zbGF0ZSkgKyAoY29sLnN1YnRpdGxlID8gJyAnICsgY29sLnN1YnRpdGxlIDogJycpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Db2x1bW5IZWFkZXJDbGljayhjb2wsICRldmVudClcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkNvbHVtbkhlYWRlckNsaWNrKGNvbCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgcm9sZT1cImNvbHVtbmhlYWRlclwiXG4gICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaXNIZWFkZXJWaXNpYmxlKCkgPyAwIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zb3J0XT1cImNvbC5zb3J0YWJsZSA/IChnZXRBcmlhU29ydChjb2wpIHwgdHJhbnNsYXRlKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgICBjZGtEcmFnTG9ja0F4aXM9XCJ4XCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwiaXNEcmFnZ2luZ0hlYWRlckNvbHVtbiA9IHRydWVcIlxuICAgICAgICAgICAgICAgIChjZGtEcmFnRHJvcHBlZCk9XCJvbkRyb3BIZWFkZXJDb2x1bW4oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCIhY29sLmRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJlZEhlYWRlckNvbHVtbkluZGV4ID0gY29sdW1uSW5kZXhcIlxuICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImhvdmVyZWRIZWFkZXJDb2x1bW5JbmRleCA9IC0xXCJcbiAgICAgICAgICAgICAgICBhZGYtZHJvcC16b25lIGRyb3BUYXJnZXQ9XCJoZWFkZXJcIlxuICAgICAgICAgICAgICAgIFtkcm9wQ29sdW1uXT1cImNvbFwiXG4gICAgICAgICAgICA+XG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBhZGYtcmVzaXphYmxlXG4gICAgICAgICAgICAgICAgI3Jlc2l6YWJsZUVsZW1lbnQ9XCJhZGYtcmVzaXphYmxlXCJcbiAgICAgICAgICAgICAgICBbY292ZXJQYWRkaW5nXT1cIjEwXCJcbiAgICAgICAgICAgICAgICAocmVzaXppbmcpPVwib25SZXNpemluZygkZXZlbnQsIGNvbHVtbkluZGV4KVwiXG4gICAgICAgICAgICAgICAgKHJlc2l6ZVN0YXJ0KT1cInJlc2l6aW5nQ29sdW1uSW5kZXggPSBjb2x1bW5JbmRleFwiXG4gICAgICAgICAgICAgICAgKHJlc2l6ZUVuZCk9XCJvblJlc2l6aW5nRW5kKClcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYXV0b19oZWFkZXJfY29udGVudF9pZF8nICsgY29sLmtleVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbGwtaGVhZGVyLWNvbnRlbnRcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2FkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXItY29udGVudC0taG92ZXJlZCc6XG4gICAgICAgICAgICAgICAgICAgIGhvdmVyZWRIZWFkZXJDb2x1bW5JbmRleCA9PT0gY29sdW1uSW5kZXggJiZcbiAgICAgICAgICAgICAgICAgICAgIWlzRHJhZ2dpbmdIZWFkZXJDb2x1bW4gJiZcbiAgICAgICAgICAgICAgICAgICAgIWlzUmVzaXppbmcgJiYgY29sLnNvcnRhYmxlfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2wuaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7Y29sLnRpdGxlIHwgdHJhbnNsYXRlfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbGwtdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NvbC50aXRsZSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuc3VidGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7e2NvbC5zdWJ0aXRsZSB8IHRyYW5zbGF0ZX19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsLXZhbHVlIGFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXJfc3VidGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAoe3tjb2wuc3VidGl0bGUgfCB0cmFuc2xhdGV9fSlcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sLnRpdGxlICYmIGNvbC5zb3J0YWJsZSAmJiBpc0RyYWdnaW5nSGVhZGVyQ29sdW1uXCIgY2xhc3M9XCJhZGYtc3Itb25seVwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0U29ydExpdmVBbm5vdW5jZW1lbnQoY29sKSB8IHRyYW5zbGF0ZTogeyBzdHJpbmc6IGNvbC50aXRsZSB8IHRyYW5zbGF0ZSB9IH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjb2wudGl0bGUgJiYgIWNvbC5zb3J0YWJsZSAmJiAhaGVhZGVyRmlsdGVyVGVtcGxhdGVcIiBbYXR0ci50aXRsZV09XCInQURGLURBVEFUQUJMRS5BQ0NFU1NJQklMSVRZLkVNUFRZX0hFQURFUicgfCB0cmFuc2xhdGVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sLmhlYWRlclwiIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsLXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2wuaGVhZGVyXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IGNvbH1cIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFkZi1kYXRhdGFibGVfX2hlYWRlci0tc29ydGVkLWFzY109XCJpc0NvbHVtblNvcnRlZChjb2wsICdhc2MnKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hZGYtZGF0YXRhYmxlX19oZWFkZXItLXNvcnRlZC1kZXNjXT1cImlzQ29sdW1uU29ydGVkKGNvbCwgJ2Rlc2MnKVwiPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImFsbG93RmlsdGVyaW5nXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVhZGVyRmlsdGVyVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDogY29sfVwiIC8+XG5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5kcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgICAgICBjZGtEcmFnSGFuZGxlXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2FkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXItZHJhZy1pY29uJzogIWlzUmVzaXppbmcgfVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8YWRmLWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaG92ZXJlZEhlYWRlckNvbHVtbkluZGV4ID09PSBjb2x1bW5JbmRleCAmJiAhaXNSZXNpemluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cImFkZjpkcmFnX2luZGljYXRvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXItZHJhZy1pY29uLXZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtZGF0YXRhYmxlLWNlbGwtaGVhZGVyLWRyYWctaWNvbi0nK2NvbC5rZXlcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNSZXNpemluZ0VuYWJsZWQgJiYgY29sLnJlc2l6YWJsZSAmJiAhbGFzdENvbHVtblwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaG92ZXJlZEhlYWRlckNvbHVtbkluZGV4ID09PSBjb2x1bW5JbmRleCAmJiAhaXNSZXNpemluZyB8fCByZXNpemluZ0NvbHVtbkluZGV4ID09PSBjb2x1bW5JbmRleCA/ICdhZGYtZGF0YXRhYmxlX19yZXNpemUtaGFuZGxlLXZpc2libGUnIDogJ2FkZi1kYXRhdGFibGVfX3Jlc2l6ZS1oYW5kbGUtaGlkZGVuJ1wiXG4gICAgICAgICAgICAgICAgYWRmLXJlc2l6ZS1oYW5kbGVcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZV9fcmVzaXplLWhhbmRsZVwiXG4gICAgICAgICAgICAgICAgW3Jlc2l6YWJsZUNvbnRhaW5lcl09XCJyZXNpemFibGVFbGVtZW50XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1kYXRhdGFibGVfX3Jlc2l6ZS1oYW5kbGUtLWRpdmlkZXJcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1kcm9wLWhlYWRlci1jZWxsLXBsYWNlaG9sZGVyXCIgKmNka0RyYWdQbGFjZWhvbGRlcj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLSBIZWFkZXIgYWN0aW9ucyAocmlnaHQpIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiKGFjdGlvbnMgJiYgYWN0aW9uc1Bvc2l0aW9uID09PSAncmlnaHQnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAobWFpbkFjdGlvblRlbXBsYXRlICYmIHNob3dNYWluRGF0YXRhYmxlQWN0aW9ucylcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWFjdGlvbnMtY29sdW1uIGFkZi1kYXRhdGFibGUtYWN0aW9ucy1tZW51IGFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXIgYWRmLWRhdGF0YWJsZV9fYWN0aW9ucy1jZWxsXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWRmLWRhdGF0YWJsZS1hY3Rpb25zLW1lbnUtcHJvdmlkZWRdPVwic2hvd1Byb3ZpZGVkQWN0aW9uc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1haW5BY3Rpb25UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtZGF0YXRhYmxlLW1haW4tbWVudS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQURGLURBVEFUQUJMRS5DT05URU5ULUFDVElPTlMuU0VMRUNUX0NPTFVNTlMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgI21haW5NZW51VHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm1haW5NZW51VHJpZ2dlci5vcGVuTWVudSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJtYWluTWVudVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnZpZXdfd2Vla19vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWFpbk1lbnU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibWFpbkFjdGlvblRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IG1haW5NZW51VHJpZ2dlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZi1zci1vbmx5XCI+e3sgJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5BQ1RJT05TJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvYWRmLWRhdGF0YWJsZS1yb3c+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiIWxvYWRpbmc7IGVsc2UgbG9hZGluZ1Jvd1RlbXBsYXRlXCJcbiAgICAgICAgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWJvZHlcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdhZGYtYmx1ci1kYXRhdGFibGUtYm9keSc6IGJsdXJPblJlc2l6ZSAmJiAoaXNEcmFnZ2luZ0hlYWRlckNvbHVtbiB8fCBpc1Jlc2l6aW5nKSwgJ2FkZi1kYXRhdGFibGUtYm9keV9fZHJhZ2dhYmxlJzogZW5hYmxlRHJhZ1Jvd3MgJiYgIWlzRHJhZ2dpbmdSb3csICdhZGYtZGF0YXRhYmxlLWJvZHlfX2RyYWdnaW5nJzogaXNEcmFnZ2luZ1JvdyB9XCJcbiAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgW2Nka0Ryb3BMaXN0RGlzYWJsZWRdPVwiIWVuYWJsZURyYWdSb3dzXCJcbiAgICAgICAgcm9sZT1cInJvd2dyb3VwXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbm9QZXJtaXNzaW9uOyBlbHNlIG5vUGVybWlzc2lvbnNSb3dUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPGFkZi1kYXRhdGFibGUtcm93ICpuZ0Zvcj1cImxldCByb3cgb2YgZGF0YS5nZXRSb3dzKCk7IGxldCBpZHggPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiIWVuYWJsZURyYWdSb3dzXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ0Ryb3BwZWQpPVwib25EcmFnRHJvcCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnQoKVwiXG4gICAgICAgICAgICAgICAgKGNka0RyYWdFbmRlZCk9XCJvbkRyYWdFbmQoKVwiXG4gICAgICAgICAgICAgICAgW2Nka0RyYWdCb3VuZGFyeV09XCInLmFkZi1kYXRhdGFibGUtYm9keSdcIlxuICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAoc2VsZWN0KT1cIm9uRW50ZXJLZXlQcmVzc2VkKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGtleXVwKT1cIm9uUm93S2V5VXAocm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvblJvd0VudGVyS2V5RG93bihyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgIFthZGYtdXBsb2FkXT1cInJvd0FsbG93c0Ryb3Aocm93KVwiXG4gICAgICAgICAgICAgICAgW2FkZi11cGxvYWQtZGF0YV09XCJyb3dcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInJvd1N0eWxlXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRSb3dTdHlsZShyb3cpXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWRmLWRhdGF0YWJsZS1yb3dfX2RyYWdnaW5nXT1cImlzRHJhZ2dpbmdSb3dcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInZGF0YXRhYmxlLXJvdy0nICsgaWR4XCJcbiAgICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwibWFya1Jvd0FzQ29udGV4dE1lbnVTb3VyY2Uocm93KVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gRHJhZyBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImVuYWJsZURyYWdSb3dzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbCBhZGYtZGF0YXRhYmxlX19hY3Rpb25zLWNlbGwgYWRmLWRhdGF0YWJsZS1ob3Zlci1vbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQURGLURBVEFUQUJMRS5BQ0NFU1NJQklMSVRZLkRSQUcnIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZHJhZ19pbmRpY2F0b3I8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gQWN0aW9ucyAobGVmdCkgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGlvbnMgJiYgYWN0aW9uc1Bvc2l0aW9uID09PSAnbGVmdCdcIiByb2xlPVwiZ3JpZGNlbGxcIiBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiICNhY3Rpb25zTWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0SGlkZUFjdGlvbnNXaXRob3V0SG92ZXJDbGFzcyhhY3Rpb25zTWVudVRyaWdnZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FERi1EQVRBVEFCTEUuQ09OVEVOVC1BQ1RJT05TLlRPT0xUSVAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCInYWN0aW9uX21lbnVfbGVmdF8nICsgaWR4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2FjdGlvbl9tZW51XycgKyBpZHhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgZ2V0Um93QWN0aW9ucyhyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cImFjdGlvbi50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhY3Rpb24uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25FeGVjdXRlUm93QWN0aW9uKHJvdywgYWN0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImFjdGlvbi5pY29uXCI+e3sgYWN0aW9uLmljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGFjdGlvbi50aXRsZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwibXVsdGlzZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25FbnRlcktleVByZXNzZWQocm93LCAkYW55KCRldmVudCkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNoZWNrYm94TGFiZWxDbGljayhyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcl09XCInc2VsZWN0LWZpbGUtJyArIGlkeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbCBhZGYtZGF0YXRhYmxlLWNoZWNrYm94IGFkZi1kYXRhdGFibGUtY2hlY2tib3gtc2luZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ3NlbGVjdC1maWxlLScgKyBpZHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFyb3c/LmlzU2VsZWN0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWRmLWRhdGF0YWJsZS1jaGVja2JveC1zZWxlY3RlZF09XCJyb3cuaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWRmLWRhdGF0YWJsZS1ob3Zlci1vbmx5XT1cImRpc3BsYXlDaGVja2JveGVzT25Ib3ZlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJyb3cuaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwicm93LmlzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FyaWEtbGFiZWxdPVwiJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5TRUxFQ1RfRklMRScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYWRmLWRhdGF0YWJsZS1yb3ctY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGVja2JveENoYW5nZShyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtY2hlY2tib3gtc3Itb25seVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5TRUxFQ1RfRklMRScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBnZXRWaXNpYmxlQ29sdW1ucygpOyBsZXQgbGFzdENvbHVtbiA9IGxhc3Q7XCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbGwgYWRmLWRhdGF0YWJsZS1jZWxsLS17e2NvbC50eXBlIHx8ICd0ZXh0J319IHt7Y29sLmNzc0NsYXNzfX0gYWRmLWRhdGF0YWJsZS1jZWxsLWRhdGFcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJjb2wudGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiZ2V0QXV0b21hdGlvblZhbHVlKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cInJvdy5pc1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJjb2wudGl0bGUgPyAoY29sLnRpdGxlIHwgdHJhbnNsYXRlKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljayhyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvbkVudGVyS2V5UHJlc3NlZChyb3csICRhbnkoJGV2ZW50KSlcIlxuICAgICAgICAgICAgICAgICAgICBbYWRmLWNvbnRleHQtbWVudV09XCJnZXRDb250ZXh0TWVudUFjdGlvbnMocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgW2FkZi1jb250ZXh0LW1lbnUtZW5hYmxlZF09XCJjb250ZXh0TWVudVwiXG4gICAgICAgICAgICAgICAgICAgIGFkZi1kcm9wLXpvbmUgZHJvcFRhcmdldD1cImNlbGxcIiBbZHJvcENvbHVtbl09XCJjb2xcIiBbZHJvcFJvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCIoY29sLndpZHRoKSAmJiAhbGFzdENvbHVtbiAmJiB7J2ZsZXgnOiBnZXRGbGV4VmFsdWUoY29sKX1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFjb2wudGVtcGxhdGVcIiBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImRhdGEuZ2V0Q29sdW1uVHlwZShyb3csIGNvbClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInaW1hZ2UnXCIgY2xhc3M9XCJhZGYtY2VsbC12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJpc0ljb25WYWx1ZShyb3csIGNvbCk7IGVsc2Ugbm9faWNvbnZhbHVlXCI+e3sgYXNJY29uVmFsdWUocm93LCBjb2wpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9faWNvbnZhbHVlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJvdy5pc1NlbGVjdGVkICYmICFtdWx0aXNlbGVjdDsgZWxzZSBub19zZWxlY3RlZF9yb3dcIiBzdmdJY29uPVwic2VsZWN0ZWRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub19zZWxlY3RlZF9yb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VudGVyLWltZy1pZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGRhdGEuZ2V0VmFsdWUocm93LCBjb2wpIHwgZmlsZVR5cGUpID09PSAnZGlzYWJsZScgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuSUNPTl9ESVNBQkxFRCcgfCB0cmFuc2xhdGUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuSUNPTl9URVhUJyB8IHRyYW5zbGF0ZTp7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0FERi1EQVRBVEFCTEUuRklMRV9UWVBFLicgKyAoZGF0YS5nZXRWYWx1ZShyb3csIGNvbCkgfCBmaWxlVHlwZSB8IHVwcGVyY2FzZSkgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hbHRdPVwiKGRhdGEuZ2V0VmFsdWUocm93LCBjb2wpIHwgZmlsZVR5cGUpID09PSAnZGlzYWJsZScgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuSUNPTl9ESVNBQkxFRCcgfCB0cmFuc2xhdGUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuSUNPTl9URVhUJyB8IHRyYW5zbGF0ZTp7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdBREYtREFUQVRBQkxFLkZJTEVfVFlQRS4nICsgKGRhdGEuZ2V0VmFsdWUocm93LCBjb2wpIHwgZmlsZVR5cGUgfCB1cHBlcmNhc2UpIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3sgZGF0YS5nZXRWYWx1ZShyb3csIGNvbCkgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwib25JbWFnZUxvYWRpbmdFcnJvcigkZXZlbnQsIHJvdylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInaWNvbidcIiBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtaWNvbi1jZWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNvbHZlckZuXT1cInJlc29sdmVyRm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiZ2V0Q2VsbFRvb2x0aXAocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1jZWxsLXZhbHVlIGFkZi1jZWxsLWRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKT8gMCA6IC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidkYXRlXycgKyAoZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbikgfCBhZGZMb2NhbGl6ZWREYXRlOiAnbWVkaXVtJykgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtZGF0ZS1jZWxsIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZW50ZXItZGF0ZS1jb2x1bW4taWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzb2x2ZXJGbl09XCJyZXNvbHZlckZuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImdldENlbGxUb29sdGlwKHJvdywgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0ZUNvbmZpZ109XCJjb2wuZGF0ZUNvbmZpZ1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInbG9jYXRpb24nXCIgW2F0dHIudGFiaW5kZXhdPVwiZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbik/IDAgOiAtMVwiICBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInbG9jYXRpb24nICsgZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1sb2NhdGlvbi1jZWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNvbHZlckZuXT1cInJlc29sdmVyRm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiZ2V0Q2VsbFRvb2x0aXAocm93LCBjb2wpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInZmlsZVNpemUnXCIgW2F0dHIudGFiaW5kZXhdPVwiZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbik/IDAgOiAtMVwiIGNsYXNzPVwiYWRmLWNlbGwtdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidmaWxlU2l6ZV8nICsgZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1maWxlc2l6ZS1jZWxsIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZW50ZXItc2l6ZS1jb2x1bW4taWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzb2x2ZXJGbl09XCJyZXNvbHZlckZuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImdldENlbGxUb29sdGlwKHJvdywgY29sKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ3RleHQnXCIgW2F0dHIudGFiaW5kZXhdPVwiZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbik/IDAgOiAtMVwiIGNsYXNzPVwiYWRmLWNlbGwtdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIid0ZXh0XycgKyBkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWRhdGF0YWJsZS1jZWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29weUNvbnRlbnRdPVwiY29sLmNvcHlDb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc29sdmVyRm5dPVwicmVzb2x2ZXJGblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJnZXRDZWxsVG9vbHRpcChyb3csIGNvbClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidib29sZWFuJ1wiIFthdHRyLnRhYmluZGV4XT1cImRhdGEuZ2V0VmFsdWUocm93LCBjb2wsIHJlc29sdmVyRm4pPyAwIDogLTFcIiBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYm9vbGVhbl8nICsgZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1ib29sZWFuLWNlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc29sdmVyRm5dPVwicmVzb2x2ZXJGblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJnZXRDZWxsVG9vbHRpcChyb3csIGNvbClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidqc29uJ1wiIFthdHRyLnRhYmluZGV4XT1cImRhdGEuZ2V0VmFsdWUocm93LCBjb2wsIHJlc29sdmVyRm4pPyAwIDogLTFcIiBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtanNvbi1jZWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZWRpdGFibGVdPVwiY29sLmVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc29sdmVyRm5dPVwicmVzb2x2ZXJGblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2Ftb3VudCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbik/IDAgOiAtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYW1vdW50XycgKyBkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWFtb3VudC1jZWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNvbHZlckZuXT1cInJlc29sdmVyRm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1cnJlbmN5Q29uZmlnXT1cImNvbC5jdXJyZW5jeUNvbmZpZ1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbik/IDAgOiAtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInbnVtYmVyXycgKyBkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLW51bWJlci1jZWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNvbHZlckZuXT1cInJlc29sdmVyRm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlY2ltYWxDb25maWddPVwiY29sLmRlY2ltYWxDb25maWdcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQgY2xhc3M9XCJhZGYtY2VsbC12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIGVtcHR5IGNlbGwgZm9yIHVua25vd24gY29sdW1uIHR5cGUgLS0+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC50ZW1wbGF0ZVwiIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCIgW2F0dHIudGFiaW5kZXhdPVwiY29sLmZvY3VzID8gMCA6IG51bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbC50ZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogeyBkYXRhOiBkYXRhLCByb3c6IHJvdywgY29sOiBjb2wgfSwgdmFsdWU6IGRhdGEuZ2V0VmFsdWUocm93LCBjb2wsIHJlc29sdmVyRm4pIH1cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBSb3cgYWN0aW9ucyAocmlnaHQpIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICFzaG93UHJvdmlkZWRBY3Rpb25zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoKGFjdGlvbnMgJiYgYWN0aW9uc1Bvc2l0aW9uID09PSAncmlnaHQnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKG1haW5BY3Rpb25UZW1wbGF0ZSAmJiBzaG93TWFpbkRhdGF0YWJsZUFjdGlvbnMpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsIGFkZi1kYXRhdGFibGVfX2FjdGlvbnMtY2VsbCBhZGYtZGF0YXRhYmxlLWNlbnRlci1hY3Rpb25zLWNvbHVtbi1pZSBhZGYtZGF0YXRhYmxlLWFjdGlvbnMtbWVudVwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoYWN0aW9ucyAmJiBhY3Rpb25zUG9zaXRpb24gPT09ICdyaWdodCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiICNhY3Rpb25zTWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldEhpZGVBY3Rpb25zV2l0aG91dEhvdmVyQ2xhc3MoYWN0aW9uc01lbnVUcmlnZ2VyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5ST1dfT1BUSU9OX0JVVFRPTicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FERi1EQVRBVEFCTEUuQ09OVEVOVC1BQ1RJT05TLlRPT0xUSVAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiJ2FjdGlvbl9tZW51X3JpZ2h0XycgKyBpZHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2FjdGlvbl9tZW51XycgKyBpZHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhY3Rpb25zTWVudVRyaWdnZXIub3Blbk1lbnUoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgZ2V0Um93QWN0aW9ucyhyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCJhY3Rpb24udGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhY3Rpb24udGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFjdGlvbi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25FeGVjdXRlUm93QWN0aW9uKHJvdywgYWN0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJhY3Rpb24uaWNvblwiPnt7IGFjdGlvbi5pY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgYWN0aW9uLnRpdGxlIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2FkZi1kYXRhdGFibGUtcm93PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRW1wdHkoKVwiIHJvbGU9XCJyb3dcIiBjbGFzcz1cImFkZi1kYXRhdGFibGUtcm93XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1uby1jb250ZW50LWNvbnRhaW5lciBhZGYtZGF0YXRhYmxlLWNlbGxcIiByb2xlPVwiZ3JpZGNlbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwibm9Db250ZW50VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdGb3IgW25nRm9yT2ZdPVwiW2RhdGFdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0ZvclRlbXBsYXRlXT1cIm5vQ29udGVudFRlbXBsYXRlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYWRmLWVtcHR5LWxpc3RcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9QZXJtaXNzaW9uc1Jvd1RlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIHJvbGU9XCJyb3dcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1yb3cgYWRmLW5vLXBlcm1pc3Npb25fX3Jvd1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtbm8tcGVybWlzc2lvbl9fY2VsbCBhZGYtbm8tY29udGVudC1jb250YWluZXIgYWRmLWRhdGF0YWJsZS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIm5vUGVybWlzc2lvblRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdGb3IgW25nRm9yT2ZdPVwiW2RhdGFdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nRm9yVGVtcGxhdGVdPVwibm9QZXJtaXNzaW9uVGVtcGxhdGVcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nUm93VGVtcGxhdGU+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLXJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1uby1jb250ZW50LWNvbnRhaW5lciBhZGYtZGF0YXRhYmxlLWNlbGxcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJsb2FkaW5nVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ0ZvciBbbmdGb3JPZl09XCJbZGF0YV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdGb3JUZW1wbGF0ZV09XCJsb2FkaW5nVGVtcGxhdGVcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==
|
|
898
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb3JlL3NyYy9saWIvZGF0YXRhYmxlL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29yZS9zcmMvbGliL2RhdGF0YWJsZS9jb21wb25lbnRzL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsNkRBQTZEO0FBRTdELE9BQU8sRUFHSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFFVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLGVBQWUsRUFJZixNQUFNLEVBQ04sU0FBUyxFQUlULFlBQVksRUFDWixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBcUIsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRixPQUFPLEVBQUUsYUFBYSxFQUFrQixNQUFNLHdCQUF3QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxVQUFVLEVBQTBCLE1BQU0sTUFBTSxDQUFDO0FBQzFELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRXZGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUUvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFNUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxPQUFPLEVBQWUsYUFBYSxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRyxPQUFPLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNwRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7OztBQUVoRSxxQ0FBcUM7QUFDckMsTUFBTSxDQUFOLElBQVksY0FJWDtBQUpELFdBQVksY0FBYztJQUN0QixpQ0FBZSxDQUFBO0lBQ2YsbUNBQWlCLENBQUE7SUFDakIsK0JBQWEsQ0FBQTtBQUNqQixDQUFDLEVBSlcsY0FBYyxLQUFkLGNBQWMsUUFJekI7QUF1Q0QsTUFBTSxPQUFPLGtCQUFrQjthQUNaLHdCQUFtQixHQUFHLEdBQUcsQUFBTixDQUFPO0lBa056QyxTQUFTLENBQUMsS0FBb0I7UUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFlBQW9CLFVBQXNCLEVBQUUsT0FBd0IsRUFBVSxlQUFnQyxFQUFVLFNBQXVCO1FBQTNILGVBQVUsR0FBVixVQUFVLENBQVk7UUFBb0Msb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBYztRQTFNL0ksNkNBQTZDO1FBRTdDLFNBQUksR0FBVSxFQUFFLENBQUM7UUFFakI7OztXQUdHO1FBRUgsWUFBTyxHQUFVLEVBQUUsQ0FBQztRQUVwQixnREFBZ0Q7UUFFaEQsWUFBTyxHQUFVLEVBQUUsQ0FBQztRQUVwQjs7O1dBR0c7UUFFSCxrQkFBYSxHQUFXLFFBQVEsQ0FBQyxDQUFDLHVCQUF1QjtRQUV6RCw2RkFBNkY7UUFFN0YsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFFN0IsNkNBQTZDO1FBRTdDLG9CQUFlLEdBQVksSUFBSSxDQUFDO1FBRWhDLHVDQUF1QztRQUV2QyxZQUFPLEdBQVksS0FBSyxDQUFDO1FBRXpCLHlDQUF5QztRQUV6Qyw2QkFBd0IsR0FBWSxLQUFLLENBQUM7UUFFMUMsb0NBQW9DO1FBRXBDLHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQUVyQyx1RUFBdUU7UUFFdkUsb0JBQWUsR0FBVyxPQUFPLENBQUMsQ0FBQyxhQUFhO1FBRWhELDJIQUEySDtRQUUzSCwwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFNdkMscURBQXFEO1FBRXJELGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBVTdCLDJDQUEyQztRQUUzQyxrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQUUzQiwwQkFBMEI7UUFFMUIsZUFBVSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUM7UUFFakMsc0NBQXNDO1FBRXRDLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBRTlCLDBDQUEwQztRQUUxQyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQWdCLENBQUM7UUFFNUMsaURBQWlEO1FBRWpELGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQWdCLENBQUM7UUFFL0MsOERBQThEO1FBRTlELHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBRXZELDhEQUE4RDtRQUU5RCx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztRQUV2RCxtREFBbUQ7UUFFbkQscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQXNCLENBQUM7UUFFMUQsZ0RBQWdEO1FBRWhELHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFnQixDQUFDO1FBRXRELGdEQUFnRDtRQUVoRCx3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBZ0IsQ0FBQztRQUV2RCxzRUFBc0U7UUFFdEUsOEJBQXlCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUV2RDs7O1dBR0c7UUFFSCxZQUFPLEdBQVksS0FBSyxDQUFDO1FBRXpCLHFGQUFxRjtRQUVyRixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUU5Qjs7O1dBR0c7UUFFSCx3QkFBbUIsR0FBRyxJQUFJLENBQUM7UUFFM0I7OztXQUdHO1FBRUgsZUFBVSxHQUEyQyxJQUFJLENBQUM7UUFFMUQ7O1dBRUc7UUFFSCxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUVoQzs7V0FFRztRQUVILHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUUxQjs7V0FFRztRQUVILGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXBCOztXQUVHO1FBRUgsNkJBQXdCLEdBQUcsS0FBSyxDQUFDO1FBRWpDOztXQUVHO1FBRUgsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFdkIsMkNBQTJDO1FBRTNDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQW1ELENBQUM7UUFRbEYsNkJBQXdCLEdBQVksS0FBSyxDQUFDO1FBQzFDLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUNwQyxjQUFTLEdBQUcsSUFBSSxLQUFLLEVBQVcsQ0FBQztRQUNqQyxrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQUUzQiwyQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFDL0IsNkJBQXdCLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDOUIsd0JBQW1CLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFPZCxpQkFBWSxHQUFRLEVBQUUsQ0FBQztRQUtkLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFRN0MsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQWUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzVHLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELGtCQUFrQjtRQUNkLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDckYsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNHLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDOUIsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDbkMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDakMsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWxELElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUNySCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckIsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksV0FBVyxFQUFFLENBQUM7b0JBQ2QsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUFDO29CQUN6QyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQzFCLENBQUM7Z0JBRUQsSUFBSSxVQUFVLEVBQUUsQ0FBQztvQkFDYixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDaEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3ZDLENBQUM7Z0JBRUQsSUFBSSxhQUFhLEVBQUUsQ0FBQztvQkFDaEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzFELENBQUM7WUFDTCxDQUFDO1lBRUQsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxhQUFhLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7WUFDbEUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUVELElBQUksa0JBQWtCLEVBQUUsWUFBWSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQixDQUFDO0lBQ0wsQ0FBQztJQUVELGtCQUFrQixDQUFDLE1BQWtCO1FBQ2pDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDckMsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNyRCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQTJCO1FBQzFDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDMUMsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckUsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXJFLGVBQWUsQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkUsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLEdBQUcsWUFBWSxFQUFFLEdBQUcsYUFBYSxDQUFDLENBQUM7UUFFbkUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUVyRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxTQUFTO1FBQ0wsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQixDQUFDLFFBQXNCO1FBQ3BDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUM7SUFDcEMsQ0FBQztJQUVELGlCQUFpQixDQUFDLElBQVc7UUFDekIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRUQsb0JBQW9CLENBQUMsT0FBYztRQUMvQixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsb0JBQW9CLENBQUMsT0FBYztRQUMvQixJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVPLDJCQUEyQjtRQUMvQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUN0QyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDM0MsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFDbkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUNoQyxDQUFDO1FBRUYsSUFBSSxDQUFDLG9CQUFvQixHQUFHLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLGFBQTZCLEVBQUUsRUFBRTtZQUN0RixNQUFNLEtBQUssR0FBaUIsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFZLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FDdkMsSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFO29CQUN6QixNQUFNLEVBQUUsS0FBSztvQkFDYixPQUFPLEVBQUUsSUFBSTtpQkFDaEIsQ0FBQyxDQUNMLENBQUM7WUFDTixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNyQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDM0MsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFDbkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUMvQixDQUFDO1FBRUYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLGFBQTZCLEVBQUUsRUFBRTtZQUNwRixNQUFNLEtBQUssR0FBaUIsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUN2QyxJQUFJLFdBQVcsQ0FBQyxjQUFjLEVBQUU7b0JBQzVCLE1BQU0sRUFBRSxLQUFLO29CQUNiLE9BQU8sRUFBRSxJQUFJO2lCQUNoQixDQUFDLENBQ0wsQ0FBQztZQUNOLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxzQkFBc0I7UUFDMUIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNyQyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztRQUNwQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFNBQVM7UUFDYixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztRQUVsRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFlBQVk7UUFDUixPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDO0lBQ3pELENBQUM7SUFFTyxZQUFZLENBQUMsSUFBVztRQUM1QixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNMLENBQUM7SUFFTyxlQUFlLENBQUMsT0FBYztRQUNsQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNMLENBQUM7SUFFTyxpQkFBaUI7UUFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRU8sY0FBYztRQUNsQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUV6QyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGVBQWUsQ0FBQyxPQUFjO1FBQ2xDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDN0QsQ0FBQztJQUNMLENBQUM7SUFFTSxpQkFBaUI7UUFDcEIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQWUsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQVksRUFBRSxVQUFzQjtRQUMzQyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2IsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2hDLENBQUM7UUFFRCxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ04sTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFeEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQixDQUFDLEdBQVksRUFBRSxDQUFnQjtRQUM1QyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ04sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEdBQVksRUFBRSxDQUE2QjtRQUNsRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUNuQyxPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsQ0FBQztZQUMvQixJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3JELENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUMxQixJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2xELENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxDQUFDO1lBQzlCLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQy9DLElBQUksUUFBaUIsQ0FBQztZQUN0QixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM5QixRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO1lBQy9CLENBQUM7aUJBQU0sQ0FBQztnQkFDSixRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNqRCxDQUFDO1lBQ0QsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztZQUU5RCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ1osSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzFCLENBQUM7WUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ3ZDLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYztRQUNWLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1osTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNoRCxDQUFDO1lBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDeEIsQ0FBQztRQUNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEtBQUssQ0FBQztRQUN0QyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBWSxFQUFFLEtBQWE7UUFDckMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNSLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMzQixDQUFDO1FBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsR0FBWSxFQUFFLGFBQTRCO1FBQ3hELElBQUksYUFBYSxDQUFDLEdBQUcsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2hELENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQVksRUFBRSxhQUE0QjtRQUNqRCxNQUFNLEtBQUssR0FBRyxJQUFJLFdBQVcsQ0FBQyxXQUFXLEVBQUU7WUFDdkMsTUFBTSxFQUFFO2dCQUNKLEdBQUc7Z0JBQ0gsYUFBYTtnQkFDYixNQUFNLEVBQUUsSUFBSTthQUNmO1lBQ0QsT0FBTyxFQUFFLElBQUk7U0FDaEIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRW5ELElBQUksS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDekIsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ25DLENBQUM7SUFDTCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsR0FBWSxFQUFFLGFBQTRCO1FBQ2pFLElBQUksYUFBYSxFQUFFLENBQUM7WUFDaEIsYUFBYSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ25DLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLFlBQVksQ0FBQyxHQUFHLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXpELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FDdkMsSUFBSSxXQUFXLENBQUMsY0FBYyxFQUFFO1lBQzVCLE1BQU0sRUFBRSxLQUFLO1lBQ2IsT0FBTyxFQUFFLElBQUk7U0FDaEIsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBWTtRQUNsQyxJQUFJLEtBQUssWUFBWSxVQUFVLEVBQUUsQ0FBQztZQUM5QixPQUFPLEtBQUssQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDLGNBQWMsQ0FBQztRQUNyRCxDQUFDO2FBQU0sSUFBSSxLQUFLLFlBQVksYUFBYSxFQUFFLENBQUM7WUFDeEMsT0FBTyxLQUFLLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDaEQsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxNQUFrQixFQUFFLEtBQVk7UUFDaEQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM3RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3ZDLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztZQUN6QixJQUFJLE9BQU8sSUFBSSxNQUFNLENBQUMsR0FBRyxLQUFLLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDeEMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUMvRSxDQUFDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ25GLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDOUUsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELGdCQUFnQixDQUFDLGlCQUFvQztRQUNqRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDO1FBQ3BELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUM7UUFFdEMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUM5RSxJQUFJLGNBQWMsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUM3QyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDakUsQ0FBQztZQUNMLENBQUM7WUFFRCxNQUFNLFlBQVksR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO1lBQy9FLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBRWpFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNMLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxHQUFZLEVBQUUsS0FBaUI7UUFDaEQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQXFCLENBQUM7UUFDM0MsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxpQ0FBaUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsbUNBQW1DLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbkgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUFZLEVBQUUsS0FBd0I7UUFDbkQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUUvQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUU5QixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO1FBQzlELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVELDJCQUEyQjtRQUN2QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLG9CQUFvQixHQUFXLENBQUMsQ0FBQztZQUNyQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQ2pCLG9CQUFvQixFQUFFLENBQUM7Z0JBQzNCLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksb0JBQW9CLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO2dCQUMvQixJQUFJLENBQUMsd0JBQXdCLEdBQUcsS0FBSyxDQUFDO1lBQzFDLENBQUM7aUJBQU0sSUFBSSxvQkFBb0IsR0FBRyxDQUFDLElBQUksb0JBQW9CLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN4RSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO1lBQ3pDLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsS0FBSyxDQUFDO1lBQzFDLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQVksRUFBRSxHQUFZO1FBQzFDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDUixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBYSxDQUFDO1lBRXBDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3pCLE9BQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQ3pDLENBQUM7aUJBQU0sQ0FBQztnQkFDSixPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoRCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBWSxFQUFFLEdBQWU7UUFDckMsSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7WUFDYixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDM0MsT0FBTyxLQUFLLEVBQUUsVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBWSxFQUFFLEdBQWU7UUFDckMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakQsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsY0FBYyxDQUFDLEdBQWUsRUFBRSxTQUFpQjtRQUM3QyxJQUFJLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNuQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQscUJBQXFCLENBQUMsR0FBWSxFQUFFLEdBQWU7UUFDL0MsT0FBTyxHQUFHLEVBQUU7WUFDUixNQUFNLEtBQUssR0FBRyxJQUFJLGFBQWEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUMvQixDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsYUFBYSxDQUFDLEdBQVksRUFBRSxHQUFnQjtRQUN4QyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTlCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDekIsTUFBTSxLQUFLLEdBQUcsSUFBSSxhQUFhLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDNUIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2RCxDQUFDO1lBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUNoRCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxPQUFjO1FBQzVCLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxHQUFZLEVBQUUsTUFBVztRQUN4QyxJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM1QixDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNwRSxDQUFDO0lBQ0wsQ0FBQztJQUVELCtCQUErQixDQUFDLGtCQUFrQztRQUM5RCxPQUFPLEVBQUUsMENBQTBDLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdEgsQ0FBQztJQUVELGFBQWEsQ0FBQyxHQUFZO1FBQ3RCLE9BQU8sR0FBRyxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUM7SUFDckMsQ0FBQztJQUVELHFCQUFxQjtRQUNqQixPQUFPLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxRQUFRLENBQUM7SUFDL0UsQ0FBQztJQUVELG9CQUFvQjtRQUNoQixPQUFPLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxVQUFVLENBQUM7SUFDakYsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFZO1FBQ3BCLEdBQUcsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2xFLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hFLE9BQU8sR0FBRyxHQUFHLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksc0JBQXNCLElBQUksYUFBYSxFQUFFLENBQUM7SUFDOUYsQ0FBQztJQUVELDBCQUEwQixDQUFDLFdBQW9CO1FBQzNDLElBQUksQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzFELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLFdBQVcsQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7SUFDM0MsQ0FBQztJQUVPLHFCQUFxQjtRQUN6QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckYsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNkLFdBQVcsQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDM0MsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTLENBQUMsR0FBWSxFQUFFLEtBQWM7UUFDbEMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNOLEdBQUcsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLE1BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25GLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ1YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzdCLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDWCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xDLENBQUM7WUFDTCxDQUFDO1lBRUQsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9ELENBQUM7SUFDTCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBVTtRQUN4QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxjQUFjLENBQUMsR0FBWSxFQUFFLEdBQWU7UUFDeEMsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNsQyxNQUFNLE1BQU0sR0FBVyxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNuRCxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNULE9BQU8sTUFBTSxDQUFDO1lBQ2xCLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELGtCQUFrQjtRQUNkLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELE9BQU87UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksZ0JBQXlCLENBQUM7UUFFOUIsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxQyxnQkFBZ0IsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzlFLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25ELGdCQUFnQixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDM0QsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEQsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzdCLENBQUM7UUFDRCxPQUFPLGdCQUFnQixDQUFDO0lBQzVCLENBQUM7SUFFRCxxQkFBcUI7UUFDakIsT0FBTyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN2RCxDQUFDO0lBRU8scUJBQXFCLENBQUMsSUFBWSxFQUFFLEdBQVk7UUFDcEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFO1lBQ25DLE1BQU0sRUFBRTtnQkFDSixHQUFHO2dCQUNILFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUzthQUM1QjtZQUNELE9BQU8sRUFBRSxJQUFJO1NBQ2hCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsR0FBVyxFQUFFLFVBQWtCLEVBQUUsU0FBaUI7UUFDOUUsTUFBTSxRQUFRLEdBQUcsSUFBSSxXQUFXLENBQUMsaUJBQWlCLEVBQUU7WUFDaEQsTUFBTSxFQUFFO2dCQUNKLEdBQUc7Z0JBQ0gsVUFBVTtnQkFDVixTQUFTO2FBQ1o7WUFDRCxPQUFPLEVBQUUsSUFBSTtTQUNoQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsR0FBWTtRQUMzQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUN2QyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQWtCO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPLHVDQUF1QyxDQUFDO1FBQ25ELENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDLENBQUMsNkNBQTZDLENBQUM7SUFDN0ksQ0FBQztJQUVELHVCQUF1QixDQUFDLE1BQWtCO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPLDBDQUEwQyxDQUFDO1FBQ3RELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztZQUNyQyxDQUFDLENBQUMsK0NBQStDO1lBQ2pELENBQUMsQ0FBQyxnREFBZ0QsQ0FBQztJQUMzRCxDQUFDO0lBRU8sc0JBQXNCO1FBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUV6RyxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRUQsVUFBVSxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQWUsRUFBRSxRQUFnQjtRQUM5RCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQzlCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzVDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRWpDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ25CLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM1QixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsYUFBYTtRQUNULElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUU5QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsWUFBWSxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBYztRQUNsQyxPQUFPLE9BQU8sS0FBSyxHQUFHLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUM7SUFDdEgsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQWEsRUFBRSxLQUFjLEVBQUUsSUFBaUI7UUFDbEUsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDbEQsQ0FBQztJQUVELFVBQVUsQ0FBQyxZQUE4QjtRQUNyQyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLGFBQWEsRUFBRSxZQUFZLENBQUMsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUNsSCxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRUQsU0FBUztRQUNMLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFFTyxtQkFBbUI7UUFDdkIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUUxQyxNQUFNLGVBQWUsR0FBZ0IsUUFBUSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBRXJGLElBQUksZUFBZSxFQUFFLENBQUM7WUFDbEIsTUFBTSxzQkFBc0IsR0FBRyxlQUFlLENBQUMsZ0JBQWdCLENBQUMseURBQXlELENBQUMsQ0FBQztZQUUzSCxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFtQixFQUFFLEtBQWEsRUFBUSxFQUFFO2dCQUN4RSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUNwQixJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDZCxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQzdHLENBQUM7eUJBQU0sSUFBSSxLQUFLLEtBQUssc0JBQXNCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUNyRCxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQzlHLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7b0JBQ2pELENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWpDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVPLGNBQWMsQ0FBQyxHQUFlLEVBQUUsU0FBaUIsRUFBRSxPQUFvQjtRQUMzRSxPQUFPLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFLGlCQUFpQixFQUFFLEtBQUssU0FBUyxDQUFDO0lBQzFJLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDVixPQUFPLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQzs4R0EzNkJRLGtCQUFrQjtrR0FBbEIsa0JBQWtCLGc1Q0FNYix1QkFBdUIsNkVBSHZCLHFCQUFxQixxRUNwSXZDLHd0MkJBc2RBLDJ2c0JEdFhRLFlBQVksbTZCQUNaLHFCQUFxQixnSEFDckIsV0FBVyw4ZEFDWCxlQUFlLDJGQUNmLGlCQUFpQiw4V0FDakIsT0FBTyx3YkFDUCxpQkFBaUIsNkdBQ2pCLGtCQUFrQixzS0FDbEIsYUFBYSwrRkFDYixhQUFhLDRGQUNiLHFCQUFxQiwrRkFDckIsZUFBZSwySUFDZixhQUFhLDZ2QkFDYixhQUFhLG9MQUNiLGVBQWUsK0lBQ2Ysb0JBQW9CLG9IQUNwQixZQUFZLGlEQUNaLGlCQUFpQixxREFDakIsaUJBQWlCLHlEQUNqQixpQkFBaUIsa0ZBQ2pCLHFCQUFxQixnRkFDckIscUJBQXFCLDhEQUNyQixzQkFBc0IsMElBQ3RCLG9CQUFvQiw2REFDcEIsaUJBQWlCLGdGQUNqQixtQkFBbUIsd0ZBQ25CLG1CQUFtQjs7MkZBT2Qsa0JBQWtCO2tCQXJDOUIsU0FBUzsrQkFDSSxlQUFlLGNBQ2IsSUFBSSxXQUNQO3dCQUNMLFlBQVk7d0JBQ1oscUJBQXFCO3dCQUNyQixXQUFXO3dCQUNYLGVBQWU7d0JBQ2YsaUJBQWlCO3dCQUNqQixPQUFPO3dCQUNQLGlCQUFpQjt3QkFDakIsa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLGFBQWE7d0JBQ2IscUJBQXFCO3dCQUNyQixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixlQUFlO3dCQUNmLG9CQUFvQjt3QkFDcEIsWUFBWTt3QkFDWixpQkFBaUI7d0JBQ2pCLGlCQUFpQjt3QkFDakIsaUJBQWlCO3dCQUNqQixxQkFBcUI7d0JBQ3JCLHFCQUFxQjt3QkFDckIsc0JBQXNCO3dCQUN0QixvQkFBb0I7d0JBQ3BCLGlCQUFpQjt3QkFDakIsbUJBQW1CO3dCQUNuQixtQkFBbUI7cUJBQ3RCLGlCQUdjLGlCQUFpQixDQUFDLElBQUksUUFDL0IsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFO3NLQU1oQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMscUJBQXFCO2dCQUluQyxVQUFVO3NCQURULFlBQVk7dUJBQUMsdUJBQXVCO2dCQUtyQyxJQUFJO3NCQURILEtBQUs7Z0JBS04sSUFBSTtzQkFESCxLQUFLO2dCQVFOLE9BQU87c0JBRE4sS0FBSztnQkFLTixPQUFPO3NCQUROLEtBQUs7Z0JBUU4sYUFBYTtzQkFEWixLQUFLO2dCQUtOLFdBQVc7c0JBRFYsS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBS04sT0FBTztzQkFETixLQUFLO2dCQUtOLHdCQUF3QjtzQkFEdkIsS0FBSztnQkFLTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBS04sZUFBZTtzQkFEZCxLQUFLO2dCQUtOLHFCQUFxQjtzQkFEcEIsS0FBSztnQkFLTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBS04sV0FBVztzQkFEVixLQUFLO2dCQVNOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixhQUFhO3NCQURaLEtBQUs7Z0JBS04sVUFBVTtzQkFEVCxLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFLTixRQUFRO3NCQURQLE1BQU07Z0JBS1AsV0FBVztzQkFEVixNQUFNO2dCQUtQLGtCQUFrQjtzQkFEakIsTUFBTTtnQkFLUCxrQkFBa0I7c0JBRGpCLE1BQU07Z0JBS1AsZ0JBQWdCO3NCQURmLE1BQU07Z0JBS1Asa0JBQWtCO3NCQURqQixNQUFNO2dCQUtQLG1CQUFtQjtzQkFEbEIsTUFBTTtnQkFLUCx5QkFBeUI7c0JBRHhCLE1BQU07Z0JBUVAsT0FBTztzQkFETixLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFRTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBUU4sVUFBVTtzQkFEVCxLQUFLO2dCQU9OLGNBQWM7c0JBRGIsS0FBSztnQkFPTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBT04sWUFBWTtzQkFEWCxLQUFLO2dCQU9OLHdCQUF3QjtzQkFEdkIsS0FBSztnQkFPTixjQUFjO3NCQURiLEtBQUs7Z0JBS04sV0FBVztzQkFEVixNQUFNO2dCQWdDUCxTQUFTO3NCQURSLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvbm8tY29uZmxpY3RpbmctbGlmZWN5Y2xlICovXG5cbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRGVzdHJveVJlZixcbiAgICBEb0NoZWNrLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgSXRlcmFibGVEaWZmZXJzLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9jdXNLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hDaGFuZ2UsIE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSwgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IE9ic2VydmFibGUsIE9ic2VydmVyLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERhdGFDb2x1bW5MaXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZGF0YS1jb2x1bW4vZGF0YS1jb2x1bW4tbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0YUNvbHVtbiB9IGZyb20gJy4uLy4uL2RhdGEvZGF0YS1jb2x1bW4ubW9kZWwnO1xuaW1wb3J0IHsgRGF0YVJvd0V2ZW50IH0gZnJvbSAnLi4vLi4vZGF0YS9kYXRhLXJvdy1ldmVudC5tb2RlbCc7XG5pbXBvcnQgeyBEYXRhUm93IH0gZnJvbSAnLi4vLi4vZGF0YS9kYXRhLXJvdy5tb2RlbCc7XG5pbXBvcnQgeyBEYXRhU29ydGluZyB9IGZyb20gJy4uLy4uL2RhdGEvZGF0YS1zb3J0aW5nLm1vZGVsJztcbmltcG9ydCB7IERhdGFUYWJsZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9kYXRhL2RhdGF0YWJsZS1hZGFwdGVyJztcbmltcG9ydCB7IERhdGFUYWJsZVJvd0NvbXBvbmVudCB9IGZyb20gJy4uL2RhdGF0YWJsZS1yb3cvZGF0YXRhYmxlLXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgT2JqZWN0RGF0YVJvdyB9IGZyb20gJy4uLy4uL2RhdGEvb2JqZWN0LWRhdGFyb3cubW9kZWwnO1xuaW1wb3J0IHsgT2JqZWN0RGF0YUNvbHVtbiB9IGZyb20gJy4uLy4uL2RhdGEvb2JqZWN0LWRhdGFjb2x1bW4ubW9kZWwnO1xuaW1wb3J0IHsgT2JqZWN0RGF0YVRhYmxlQWRhcHRlciB9IGZyb20gJy4uLy4uL2RhdGEvb2JqZWN0LWRhdGF0YWJsZS1hZGFwdGVyJztcbmltcG9ydCB7IERhdGFDZWxsRXZlbnQgfSBmcm9tICcuLi9kYXRhLWNlbGwuZXZlbnQnO1xuaW1wb3J0IHsgRGF0YVJvd0FjdGlvbkV2ZW50IH0gZnJvbSAnLi4vZGF0YS1yb3ctYWN0aW9uLmV2ZW50JztcbmltcG9ydCB7IGJ1ZmZlciwgZGVib3VuY2VUaW1lLCBmaWx0ZXIsIG1hcCwgc2hhcmUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCwgQ2RrRHJhZ0hhbmRsZSwgQ2RrRHJvcExpc3QsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSwgTWF0SWNvblJlZ2lzdHJ5IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IFJlc2l6ZUV2ZW50IH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9yZXNpemFibGUvdHlwZXMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRmlsZVR5cGVQaXBlLCBMb2NhbGl6ZWREYXRlUGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzJztcbmltcG9ydCB7IERyb3Bab25lRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9kcm9wLXpvbmUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFJlc2l6YWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcmVzaXphYmxlL3Jlc2l6YWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2ljb24nO1xuaW1wb3J0IHsgUmVzaXplSGFuZGxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9yZXNpemFibGUvcmVzaXplLWhhbmRsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IFVwbG9hZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgQ29udGV4dE1lbnVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0LW1lbnUnO1xuaW1wb3J0IHsgSWNvbkNlbGxDb21wb25lbnQgfSBmcm9tICcuLi9pY29uLWNlbGwvaWNvbi1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlQ2VsbENvbXBvbmVudCB9IGZyb20gJy4uL2RhdGUtY2VsbC9kYXRlLWNlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IExvY2F0aW9uQ2VsbENvbXBvbmVudCB9IGZyb20gJy4uL2xvY2F0aW9uLWNlbGwvbG9jYXRpb24tY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmlsZVNpemVDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vZmlsZXNpemUtY2VsbC9maWxlc2l6ZS1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhVGFibGVDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YXRhYmxlLWNlbGwvZGF0YXRhYmxlLWNlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IEJvb2xlYW5DZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vYm9vbGVhbi1jZWxsL2Jvb2xlYW4tY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSnNvbkNlbGxDb21wb25lbnQgfSBmcm9tICcuLi9qc29uLWNlbGwvanNvbi1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbW91bnRDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vYW1vdW50LWNlbGwvYW1vdW50LWNlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IE51bWJlckNlbGxDb21wb25lbnQgfSBmcm9tICcuLi9udW1iZXItY2VsbC9udW1iZXItY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG5leHBvcnQgZW51bSBTaG93SGVhZGVyTW9kZSB7XG4gICAgTmV2ZXIgPSAnbmV2ZXInLFxuICAgIEFsd2F5cyA9ICdhbHdheXMnLFxuICAgIERhdGEgPSAnZGF0YSdcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhZGYtZGF0YXRhYmxlJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBEYXRhVGFibGVSb3dDb21wb25lbnQsXG4gICAgICAgIENka0Ryb3BMaXN0LFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIE1hdENoZWNrYm94TW9kdWxlLFxuICAgICAgICBDZGtEcmFnLFxuICAgICAgICBEcm9wWm9uZURpcmVjdGl2ZSxcbiAgICAgICAgUmVzaXphYmxlRGlyZWN0aXZlLFxuICAgICAgICBDZGtEcmFnSGFuZGxlLFxuICAgICAgICBJY29uQ29tcG9uZW50LFxuICAgICAgICBSZXNpemVIYW5kbGVEaXJlY3RpdmUsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgTWF0TWVudU1vZHVsZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgVXBsb2FkRGlyZWN0aXZlLFxuICAgICAgICBDb250ZXh0TWVudURpcmVjdGl2ZSxcbiAgICAgICAgRmlsZVR5cGVQaXBlLFxuICAgICAgICBJY29uQ2VsbENvbXBvbmVudCxcbiAgICAgICAgTG9jYWxpemVkRGF0ZVBpcGUsXG4gICAgICAgIERhdGVDZWxsQ29tcG9uZW50LFxuICAgICAgICBMb2NhdGlvbkNlbGxDb21wb25lbnQsXG4gICAgICAgIEZpbGVTaXplQ2VsbENvbXBvbmVudCxcbiAgICAgICAgRGF0YVRhYmxlQ2VsbENvbXBvbmVudCxcbiAgICAgICAgQm9vbGVhbkNlbGxDb21wb25lbnQsXG4gICAgICAgIEpzb25DZWxsQ29tcG9uZW50LFxuICAgICAgICBBbW91bnRDZWxsQ29tcG9uZW50LFxuICAgICAgICBOdW1iZXJDZWxsQ29tcG9uZW50XG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGF0YXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9kYXRhdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHsgY2xhc3M6ICdhZGYtZGF0YXRhYmxlJyB9XG59KVxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25DaGFuZ2VzLCBEb0NoZWNrLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICAgIHByaXZhdGUgc3RhdGljIE1JTklNVU1fQ09MVU1OX1NJWkUgPSAxMDA7XG5cbiAgICBAVmlld0NoaWxkcmVuKERhdGFUYWJsZVJvd0NvbXBvbmVudClcbiAgICByb3dzTGlzdDogUXVlcnlMaXN0PERhdGFUYWJsZVJvd0NvbXBvbmVudD47XG5cbiAgICBAQ29udGVudENoaWxkKERhdGFDb2x1bW5MaXN0Q29tcG9uZW50KVxuICAgIGNvbHVtbkxpc3Q6IERhdGFDb2x1bW5MaXN0Q29tcG9uZW50O1xuXG4gICAgLyoqIERhdGEgc291cmNlIGZvciB0aGUgdGFibGUgKi9cbiAgICBASW5wdXQoKVxuICAgIGRhdGE6IERhdGFUYWJsZUFkYXB0ZXI7XG5cbiAgICAvKiogVGhlIHJvd3MgdGhhdCB0aGUgZGF0YXRhYmxlIHdpbGwgc2hvdy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd3M6IGFueVtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmUgdGhlIHNvcnQgb3JkZXIgb2YgdGhlIGRhdGF0YWJsZS4gUG9zc2libGUgdmFsdWVzIGFyZSA6XG4gICAgICogW2BjcmVhdGVkYCwgYGRlc2NgXSwgW2BjcmVhdGVkYCwgYGFzY2BdLCBbYGR1ZWAsIGBkZXNjYF0sIFtgZHVlYCwgYGFzY2BdXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzb3J0aW5nOiBhbnlbXSA9IFtdO1xuXG4gICAgLyoqIFRoZSBjb2x1bW5zIHRoYXQgdGhlIGRhdGF0YWJsZSB3aWxsIHNob3cuICovXG4gICAgQElucHV0KClcbiAgICBjb2x1bW5zOiBhbnlbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogUm93IHNlbGVjdGlvbiBtb2RlLiBDYW4gYmUgbm9uZSwgYHNpbmdsZWAgb3IgYG11bHRpcGxlYC4gRm9yIGBtdWx0aXBsZWAgbW9kZSxcbiAgICAgKiB5b3UgY2FuIHVzZSBDbWQgKG1hY09TKSBvciBDdHJsIChXaW4pIG1vZGlmaWVyIGtleSB0byB0b2dnbGUgc2VsZWN0aW9uIGZvciBtdWx0aXBsZSByb3dzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0aW9uTW9kZTogc3RyaW5nID0gJ3NpbmdsZSc7IC8vIG5vbmV8c2luZ2xlfG11bHRpcGxlXG5cbiAgICAvKiogVG9nZ2xlcyBtdWx0aXBsZSByb3cgc2VsZWN0aW9uLCB3aGljaCByZW5kZXJzIGNoZWNrYm94ZXMgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJvdy4gKi9cbiAgICBASW5wdXQoKVxuICAgIG11bHRpc2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogVG9nZ2xlcyBtYWluIGRhdGEgdGFibGUgYWN0aW9uIGNvbHVtbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1haW5UYWJsZUFjdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgZGF0YSBhY3Rpb25zIGNvbHVtbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFjdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBUb2dnbGVzIHRoZSBtYWluIGRhdGF0YWJsZSBhY3Rpb24uICovXG4gICAgQElucHV0KClcbiAgICBzaG93TWFpbkRhdGF0YWJsZUFjdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBUb2dnbGVzIHRoZSBwcm92aWRlZCBhY3Rpb25zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd1Byb3ZpZGVkQWN0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIFBvc2l0aW9uIG9mIHRoZSBhY3Rpb25zIGRyb3Bkb3duIG1lbnUuIENhbiBiZSBcImxlZnRcIiBvciBcInJpZ2h0XCIuICovXG4gICAgQElucHV0KClcbiAgICBhY3Rpb25zUG9zaXRpb246IHN0cmluZyA9ICdyaWdodCc7IC8vIGxlZnR8cmlnaHRcblxuICAgIC8qKiBUb2dnbGVzIHdoZXRoZXIgdGhlIGFjdGlvbnMgZHJvcGRvd24gc2hvdWxkIG9ubHkgYmUgdmlzaWJsZSBpZiB0aGUgcm93IGlzIGhvdmVyZWQgb3ZlciBvciB0aGUgZHJvcGRvd24gbWVudSBpcyBvcGVuLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWN0aW9uc1Zpc2libGVPbkhvdmVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogRmFsbGJhY2sgaW1hZ2UgZm9yIHJvd3Mgd2hlcmUgdGhlIHRodW1ibmFpbCBpcyBtaXNzaW5nLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmFsbGJhY2tUaHVtYm5haWw6IHN0cmluZztcblxuICAgIC8qKiBUb2dnbGVzIGN1c3RvbSBjb250ZXh0IG1lbnUgZm9yIHRoZSBjb21wb25lbnQuICovXG4gICAgQElucHV0KClcbiAgICBjb250ZXh0TWVudTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGlubGluZSBzdHlsZSB0byBhcHBseSB0byBldmVyeSByb3cuIFNlZVxuICAgICAqIFtOZ1N0eWxlXShodHRwczovL2FuZ3VsYXIuaW8vZG9jcy90cy9sYXRlc3QvYXBpL2NvbW1vbi9pbmRleC9OZ1N0eWxlLWRpcmVjdGl2ZS5odG1sKVxuICAgICAqIGRvY3MgZm9yIG1vcmUgZGV0YWlscyBhbmQgdXNhZ2UgZXhhbXBsZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByb3dTdHlsZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcblxuICAgIC8qKiBUaGUgQ1NTIGNsYXNzIHRvIGFwcGx5IHRvIGV2ZXJ5IHJvdy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd1N0eWxlQ2xhc3M6IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIGhlYWRlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dIZWFkZXIgPSBTaG93SGVhZGVyTW9kZS5EYXRhO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIHN0aWNreSBoZWFkZXIgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHN0aWNreUhlYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBjbGlja3MgYSByb3cuICovXG4gICAgQE91dHB1dCgpXG4gICAgcm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFSb3dFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgZG91YmxlLWNsaWNrcyBhIHJvdy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByb3dEYmxDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YVJvd0V2ZW50PigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgYmVmb3JlIHRoZSBjb250ZXh0IG1lbnUgaXMgZGlzcGxheWVkIGZvciBhIHJvdy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBzaG93Um93Q29udGV4dE1lbnUgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFDZWxsRXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCBiZWZvcmUgdGhlIGFjdGlvbnMgbWVudSBpcyBkaXNwbGF5ZWQgZm9yIGEgcm93LiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNob3dSb3dBY3Rpb25zTWVudSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YUNlbGxFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgZXhlY3V0ZXMgYSByb3cgYWN0aW9uLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGV4ZWN1dGVSb3dBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFSb3dBY3Rpb25FdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIGNvbHVtbiBvcmRlciBpcyBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGNvbHVtbk9yZGVyQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YUNvbHVtbltdPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgY29sdW1uIHdpZHRoIGlzIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgY29sdW1uc1dpZHRoQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YUNvbHVtbltdPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgc2VsZWN0ZWQgcm93IGl0ZW1zIGNvdW50IGluIHRoZSB0YWJsZSBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNlbGVjdGVkSXRlbXNDb3VudENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIC8qKlxuICAgICAqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgaWYgdGhlIGRhdGF0YWJsZSBpcyBpbiBsb2FkaW5nIHN0YXRlIGFuZCBuZWVkcyB0byBzaG93IHRoZVxuICAgICAqIGxvYWRpbmcgdGVtcGxhdGUgKHNlZSB0aGUgZG9jcyB0byBsZWFybiBob3cgdG8gY29uZmlndXJlIGEgbG9hZGluZyB0ZW1wbGF0ZSkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogRmxhZyB0aGF0IGluZGljYXRlcyBpZiB0aGUgZGF0YXRhYmxlIHNob3VsZCBzaG93IHRoZSBcIm5vIHBlcm1pc3Npb25cIiB0ZW1wbGF0ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vUGVybWlzc2lvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIHRoZSBpdGVtcyBmb3IgdGhlIHJvdyBhY3Rpb25zIG1lbnUgYmUgY2FjaGVkIGZvciByZXVzZSBhZnRlciB0aGV5IGFyZSBsb2FkZWRcbiAgICAgKiB0aGUgZmlyc3QgdGltZT9cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd01lbnVDYWNoZUVuYWJsZWQgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIHJlc29sdmVyIGZ1bmN0aW9uIHdoaWNoIGlzIHVzZWQgdG8gcGFyc2UgZHluYW1pYyBjb2x1bW4gb2JqZWN0c1xuICAgICAqIHNlZSB0aGUgZG9jcyB0byBsZWFybiBob3cgdG8gY29uZmlndXJlIGEgcmVzb2x2ZXJGbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlc29sdmVyRm46IChyb3c6IERhdGFSb3csIGNvbDogRGF0YUNvbHVtbikgPT4gYW55ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEZsYWcgdGhhdCBpbmRpY2F0ZSBpZiB0aGUgZGF0YXRhYmxlIGFsbG93IHRoZSB1c2UgZmFjZXQgd2lkZ2V0IHNlYXJjaCBmb3IgZmlsdGVyaW5nLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWxsb3dGaWx0ZXJpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgaWYgdGhlIGRhdGF0YWJsZSBhbGxvd3MgY29sdW1uIHJlc2l6aW5nLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXNSZXNpemluZ0VuYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgaWYgdGhlIGRhdGF0YWJsZSBzaG91bGQgYmUgYmx1cnJlZCB3aGVuIHJlc2l6aW5nLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYmx1ck9uUmVzaXplID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgaWYgc2VsZWN0aW9uIGNoZWNrYm94ZXMgaW5zaWRlIHJvdyBzaG91bGQgYmUgZGlzcGxheWVkIG9uIGhvdmVyIG9ubHkuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5Q2hlY2tib3hlc09uSG92ZXIgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEZsYWcgdGhhdCBlbmFibGVzIGRyYWdnaW5nIHJvd3NcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGVuYWJsZURyYWdSb3dzID0gZmFsc2U7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGRyYWdnZWQgcm93IGlzIGRyb3BwZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgZHJhZ0Ryb3BwZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcHJldmlvdXNJbmRleDogbnVtYmVyOyBjdXJyZW50SW5kZXg6IG51bWJlciB9PigpO1xuXG4gICAgaGVhZGVyRmlsdGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgbm9Db250ZW50VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgbm9QZXJtaXNzaW9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgbG9hZGluZ1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIG1haW5BY3Rpb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIGlzU2VsZWN0QWxsSW5kZXRlcm1pbmF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGlzU2VsZWN0QWxsQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHNlbGVjdGlvbiA9IG5ldyBBcnJheTxEYXRhUm93PigpO1xuICAgIHNlbGVjdGVkUm93SWQ6IHN0cmluZyA9ICcnO1xuXG4gICAgaXNEcmFnZ2luZ0hlYWRlckNvbHVtbiA9IGZhbHNlO1xuICAgIGhvdmVyZWRIZWFkZXJDb2x1bW5JbmRleCA9IC0xO1xuICAgIHJlc2l6aW5nQ29sdW1uSW5kZXggPSAtMTtcbiAgICBpc0RyYWdnaW5nUm93ID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGtleU1hbmFnZXI6IEZvY3VzS2V5TWFuYWdlcjxEYXRhVGFibGVSb3dDb21wb25lbnQ+O1xuICAgIHByaXZhdGUgY2xpY2tPYnNlcnZlcjogT2JzZXJ2ZXI8RGF0YVJvd0V2ZW50PjtcbiAgICBwcml2YXRlIGNsaWNrJDogT2JzZXJ2YWJsZTxEYXRhUm93RXZlbnQ+O1xuXG4gICAgcHJpdmF0ZSBkaWZmZXI6IGFueTtcbiAgICBwcml2YXRlIHJvd01lbnVDYWNoZTogYW55ID0ge307XG5cbiAgICBwcml2YXRlIHNpbmdsZUNsaWNrU3RyZWFtU3ViOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBtdWx0aUNsaWNrU3RyZWFtU3ViOiBTdWJzY3JpcHRpb247XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXl1cCcsIFsnJGV2ZW50J10pXG4gICAgb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMua2V5TWFuYWdlci5vbktleWRvd24oZXZlbnQpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZiwgZGlmZmVyczogSXRlcmFibGVEaWZmZXJzLCBwcml2YXRlIG1hdEljb25SZWdpc3RyeTogTWF0SWNvblJlZ2lzdHJ5LCBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyKSB7XG4gICAgICAgIGlmIChkaWZmZXJzKSB7XG4gICAgICAgICAgICB0aGlzLmRpZmZlciA9IGRpZmZlcnMuZmluZChbXSkuY3JlYXRlKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbGljayQgPSBuZXcgT2JzZXJ2YWJsZTxEYXRhUm93RXZlbnQ+KChvYnNlcnZlcikgPT4gKHRoaXMuY2xpY2tPYnNlcnZlciA9IG9ic2VydmVyKSkucGlwZShzaGFyZSgpKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlckRyYWdIYW5kbGVJY29uKCk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW5MaXN0KSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbkxpc3QuY29sdW1ucy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJsZVNjaGVtYSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRUYWJsZVNjaGVtYSgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5rZXlNYW5hZ2VyID0gbmV3IEZvY3VzS2V5TWFuYWdlcih0aGlzLnJvd3NMaXN0KS53aXRoV3JhcCgpLnNraXBQcmVkaWNhdGUoKGl0ZW0pID0+IGl0ZW0uZGlzYWJsZWQpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5pbml0QW5kU3Vic2NyaWJlQ2xpY2tTdHJlYW0oKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dJZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRSb3dBc0NvbnRleHRTb3VyY2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGFDaGFuZ2VzID0gY2hhbmdlc1snZGF0YSddO1xuICAgICAgICBjb25zdCByb3dDaGFuZ2VzID0gY2hhbmdlc1sncm93cyddO1xuICAgICAgICBjb25zdCBjb2x1bW5DaGFuZ2VzID0gY2hhbmdlc1snY29sdW1ucyddO1xuICAgICAgICBjb25zdCBtdWx0aXNlbGVjdENoYW5nZXMgPSBjaGFuZ2VzWydtdWx0aXNlbGVjdCddO1xuXG4gICAgICAgIGlmICh0aGlzLmlzUHJvcGVydHlDaGFuZ2VkKGRhdGFDaGFuZ2VzKSB8fCB0aGlzLmlzUHJvcGVydHlDaGFuZ2VkKHJvd0NoYW5nZXMpIHx8IHRoaXMuaXNQcm9wZXJ0eUNoYW5nZWQoY29sdW1uQ2hhbmdlcykpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVGFibGVFbXB0eSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0VGFibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGFDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGNoYW5nZXNbJ2RhdGEnXS5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocm93Q2hhbmdlcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYmxlUm93cyhjaGFuZ2VzWydyb3dzJ10uY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJsZVNvcnRpbmcodGhpcy5zb3J0aW5nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uQ2hhbmdlcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYmxlQ29sdW1ucyhjaGFuZ2VzWydjb2x1bW5zJ10uY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLnNlbGVjdGlvbk1vZGUgJiYgIWNoYW5nZXMuc2VsZWN0aW9uTW9kZS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KCdyb3ctdW5zZWxlY3QnLCBudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzUHJvcGVydHlDaGFuZ2VkKGNoYW5nZXNbJ3NvcnRpbmcnXSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVTb3J0aW5nKGNoYW5nZXNbJ3NvcnRpbmcnXS5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG11bHRpc2VsZWN0Q2hhbmdlcz8uY3VycmVudFZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNDb2x1bW5Tb3J0QWN0aXZlKGNvbHVtbjogRGF0YUNvbHVtbik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWNvbHVtbiB8fCAhdGhpcy5kYXRhLmdldFNvcnRpbmcoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2x1bW4ua2V5ID09PSB0aGlzLmRhdGEuZ2V0U29ydGluZygpLmtleTtcbiAgICB9XG5cbiAgICBnZXRWaXNpYmxlQ29sdW1ucygpOiBEYXRhQ29sdW1uW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmdldENvbHVtbnMoKS5maWx0ZXIoKGNvbHVtbikgPT4gIWNvbHVtbi5pc0hpZGRlbik7XG4gICAgfVxuXG4gICAgb25Ecm9wSGVhZGVyQ29sdW1uKGV2ZW50OiBDZGtEcmFnRHJvcDx1bmtub3duPik6IHZvaWQge1xuICAgICAgICBjb25zdCBhbGxDb2x1bW5zID0gdGhpcy5kYXRhLmdldENvbHVtbnMoKTtcbiAgICAgICAgY29uc3Qgc2hvd25Db2x1bW5zID0gYWxsQ29sdW1ucy5maWx0ZXIoKGNvbHVtbikgPT4gIWNvbHVtbi5pc0hpZGRlbik7XG4gICAgICAgIGNvbnN0IGhpZGRlbkNvbHVtbnMgPSBhbGxDb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4uaXNIaWRkZW4pO1xuXG4gICAgICAgIG1vdmVJdGVtSW5BcnJheShzaG93bkNvbHVtbnMsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgICAgIGNvbnN0IGFsbENvbHVtbnNXaXRoTmV3T3JkZXIgPSBbLi4uc2hvd25Db2x1bW5zLCAuLi5oaWRkZW5Db2x1bW5zXTtcblxuICAgICAgICB0aGlzLnNldFRhYmxlQ29sdW1ucyhhbGxDb2x1bW5zV2l0aE5ld09yZGVyKTtcbiAgICAgICAgdGhpcy5jb2x1bW5PcmRlckNoYW5nZWQuZW1pdChhbGxDb2x1bW5zV2l0aE5ld09yZGVyKTtcblxuICAgICAgICB0aGlzLmlzRHJhZ2dpbmdIZWFkZXJDb2x1bW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLmRpZmZlci5kaWZmKHRoaXMucm93cyk7XG4gICAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnNldFRhYmxlUm93cyh0aGlzLnJvd3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNQcm9wZXJ0eUNoYW5nZWQocHJvcGVydHk6IFNpbXBsZUNoYW5nZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISFwcm9wZXJ0eT8uY3VycmVudFZhbHVlO1xuICAgIH1cblxuICAgIGNvbnZlcnRUb1Jvd3NEYXRhKHJvd3M6IGFueVtdKTogT2JqZWN0RGF0YVJvd1tdIHtcbiAgICAgICAgcmV0dXJuIHJvd3MubWFwKChyb3cpID0+IG5ldyBPYmplY3REYXRhUm93KHJvdywgcm93LmlzU2VsZWN0ZWQsIHJvdz8uaXNTZWxlY3RhYmxlKSk7XG4gICAgfVxuXG4gICAgY29udmVydFRvQ29sdW1uc0RhdGEoY29sdW1uczogYW55W10pOiBPYmplY3REYXRhQ29sdW1uW10ge1xuICAgICAgICByZXR1cm4gY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gbmV3IE9iamVjdERhdGFDb2x1bW4oY29sdW1uKSk7XG4gICAgfVxuXG4gICAgY29udmVydFRvRGF0YVNvcnRpbmcoc29ydGluZzogYW55W10pOiBEYXRhU29ydGluZyB8IG51bGwge1xuICAgICAgICBpZiAoc29ydGluZyAmJiBzb3J0aW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0YVNvcnRpbmcoc29ydGluZ1swXSwgc29ydGluZ1sxXSwgc29ydGluZ1syXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0QW5kU3Vic2NyaWJlQ2xpY2tTdHJlYW0oKSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVDbGlja1N0cmVhbSgpO1xuICAgICAgICBjb25zdCBzaW5nbGVDbGlja1N0cmVhbSA9IHRoaXMuY2xpY2skLnBpcGUoXG4gICAgICAgICAgICBidWZmZXIodGhpcy5jbGljayQucGlwZShkZWJvdW5jZVRpbWUoMjUwKSkpLFxuICAgICAgICAgICAgbWFwKChsaXN0KSA9PiBsaXN0KSxcbiAgICAgICAgICAgIGZpbHRlcigoeCkgPT4geC5sZW5ndGggPT09IDEpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5zaW5nbGVDbGlja1N0cmVhbVN1YiA9IHNpbmdsZUNsaWNrU3RyZWFtLnN1YnNjcmliZSgoZGF0YVJvd0V2ZW50czogRGF0YVJvd0V2ZW50W10pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50OiBEYXRhUm93RXZlbnQgPSBkYXRhUm93RXZlbnRzWzBdO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVSb3dTZWxlY3Rpb24oZXZlbnQudmFsdWUsIGV2ZW50LmV2ZW50IGFzIGFueSk7XG4gICAgICAgICAgICB0aGlzLnJvd0NsaWNrLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdyb3ctY2xpY2snLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IG11bHRpQ2xpY2tTdHJlYW0gPSB0aGlzLmNsaWNrJC5waXBlKFxuICAgICAgICAgICAgYnVmZmVyKHRoaXMuY2xpY2skLnBpcGUoZGVib3VuY2VUaW1lKDI1MCkpKSxcbiAgICAgICAgICAgIG1hcCgobGlzdCkgPT4gbGlzdCksXG4gICAgICAgICAgICBmaWx0ZXIoKHgpID0+IHgubGVuZ3RoID49IDIpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5tdWx0aUNsaWNrU3RyZWFtU3ViID0gbXVsdGlDbGlja1N0cmVhbS5zdWJzY3JpYmUoKGRhdGFSb3dFdmVudHM6IERhdGFSb3dFdmVudFtdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBldmVudDogRGF0YVJvd0V2ZW50ID0gZGF0YVJvd0V2ZW50c1swXTtcbiAgICAgICAgICAgIHRoaXMucm93RGJsQ2xpY2suZW1pdChldmVudCk7XG4gICAgICAgICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3Jvdy1kYmxjbGljaycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1bnN1YnNjcmliZUNsaWNrU3RyZWFtKCkge1xuICAgICAgICBpZiAodGhpcy5zaW5nbGVDbGlja1N0cmVhbVN1Yikge1xuICAgICAgICAgICAgdGhpcy5zaW5nbGVDbGlja1N0cmVhbVN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5zaW5nbGVDbGlja1N0cmVhbVN1YiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubXVsdGlDbGlja1N0cmVhbVN1Yikge1xuICAgICAgICAgICAgdGhpcy5tdWx0aUNsaWNrU3RyZWFtU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLm11bHRpQ2xpY2tTdHJlYW1TdWIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0VGFibGUoKSB7XG4gICAgICAgIGNvbnN0IHJ1bnRpbWVDb2x1bW5zID0gdGhpcy5nZXRSdW50aW1lQ29sdW1ucygpO1xuICAgICAgICB0aGlzLmRhdGEgPSBuZXcgT2JqZWN0RGF0YVRhYmxlQWRhcHRlcih0aGlzLnJvd3MsIHJ1bnRpbWVDb2x1bW5zKTtcblxuICAgICAgICB0aGlzLnNldFRhYmxlU29ydGluZyh0aGlzLnNvcnRpbmcpO1xuICAgICAgICB0aGlzLnJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMucm93TWVudUNhY2hlID0ge307XG4gICAgfVxuXG4gICAgaXNUYWJsZUVtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhID09PSB1bmRlZmluZWQgfHwgdGhpcy5kYXRhID09PSBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VGFibGVSb3dzKHJvd3M6IGFueVtdKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIGNvbnN0IHJvd3NEYXRhID0gdGhpcy5jb252ZXJ0VG9Sb3dzRGF0YShyb3dzKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRSb3dzKHJvd3NEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VGFibGVDb2x1bW5zKGNvbHVtbnM6IGFueVtdKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbnNEYXRhID0gdGhpcy5jb252ZXJ0VG9Db2x1bW5zRGF0YShjb2x1bW5zKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRDb2x1bW5zKGNvbHVtbnNEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UnVudGltZUNvbHVtbnMoKTogYW55W10ge1xuICAgICAgICByZXR1cm4gWy4uLih0aGlzLmNvbHVtbnMgfHwgW10pLCAuLi50aGlzLmdldFNjaGVtYUZyb21IdG1sKCldO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VGFibGVTY2hlbWEoKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdldFJ1bnRpbWVDb2x1bW5zKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZGF0YSAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRDb2x1bW5zKGNvbHVtbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUYWJsZVNvcnRpbmcoc29ydGluZzogYW55W10pIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhLnNldFNvcnRpbmcodGhpcy5jb252ZXJ0VG9EYXRhU29ydGluZyhzb3J0aW5nKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2NoZW1hRnJvbUh0bWwoKTogYW55IHtcbiAgICAgICAgbGV0IHNjaGVtYSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5jb2x1bW5MaXN0Py5jb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzY2hlbWEgPSB0aGlzLmNvbHVtbkxpc3QuY29sdW1ucy5tYXAoKGMpID0+IGMgYXMgRGF0YUNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICB9XG5cbiAgICBvblJvd0NsaWNrKHJvdzogRGF0YVJvdywgbW91c2VFdmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAobW91c2VFdmVudCkge1xuICAgICAgICAgICAgbW91c2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLmRhdGEuZ2V0Um93cygpLmluZGV4T2Yocm93KSArICh0aGlzLmlzSGVhZGVyVmlzaWJsZSgpID8gMSA6IDApO1xuICAgICAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0ocm93SW5kZXgpO1xuXG4gICAgICAgICAgICBjb25zdCBkYXRhUm93RXZlbnQgPSBuZXcgRGF0YVJvd0V2ZW50KHJvdywgbW91c2VFdmVudCwgdGhpcyk7XG4gICAgICAgICAgICB0aGlzLmNsaWNrT2JzZXJ2ZXIubmV4dChkYXRhUm93RXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25FbnRlcktleVByZXNzZWQocm93OiBEYXRhUm93LCBlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUm93U2VsZWN0aW9uKHJvdywgZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVJvd1NlbGVjdGlvbihyb3c6IERhdGFSb3csIGU6IEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5kYXRhIHx8ICFyb3c/LmlzU2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVTZWxlY3Rpb25Nb2RlKCkpIHtcbiAgICAgICAgICAgIGlmIChyb3cuaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRSb3dTZWxlY3Rpb25FdmVudCgncm93LXVuc2VsZWN0JywgbnVsbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFJvdyhyb3csIHRydWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KCdyb3ctc2VsZWN0Jywgcm93KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlTZWxlY3Rpb25Nb2RlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZGlmaWVyID0gZSAmJiAoZS5tZXRhS2V5IHx8IGUuY3RybEtleSk7XG4gICAgICAgICAgICBsZXQgbmV3VmFsdWU6IGJvb2xlYW47XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSAhcm93LmlzU2VsZWN0ZWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gbW9kaWZpZXIgPyAhcm93LmlzU2VsZWN0ZWQgOiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZG9tRXZlbnROYW1lID0gbmV3VmFsdWUgPyAncm93LXNlbGVjdCcgOiAncm93LXVuc2VsZWN0JztcblxuICAgICAgICAgICAgaWYgKCFtb2RpZmllcikge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Um93KHJvdywgbmV3VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQoZG9tRXZlbnROYW1lLCByb3cpO1xuICAgICAgICAgICAgdGhpcy5jaGVja1NlbGVjdEFsbENoZWNrYm94U3RhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0U2VsZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgICAgICBjb25zdCByb3dzID0gdGhpcy5kYXRhLmdldFJvd3MoKTtcbiAgICAgICAgICAgIGlmIChyb3dzICYmIHJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJvd3MuZm9yRWFjaCgocikgPT4gKHIuaXNTZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNTZWxlY3RBbGxDaGVja2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNTZWxlY3RBbGxJbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NvdW50Q2hhbmdlZC5lbWl0KDApO1xuICAgIH1cblxuICAgIG9uUm93RGJsQ2xpY2socm93OiBEYXRhUm93LCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhUm93RXZlbnQgPSBuZXcgRGF0YVJvd0V2ZW50KHJvdywgZXZlbnQsIHRoaXMpO1xuICAgICAgICB0aGlzLmNsaWNrT2JzZXJ2ZXIubmV4dChkYXRhUm93RXZlbnQpO1xuICAgIH1cblxuICAgIG9uUm93RW50ZXJLZXlEb3duKHJvdzogRGF0YVJvdywga2V5Ym9hcmRFdmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgIHRoaXMub25LZXlib2FyZE5hdmlnYXRlKHJvdywga2V5Ym9hcmRFdmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblJvd0tleVVwKHJvdzogRGF0YVJvdywga2V5Ym9hcmRFdmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCgncm93LWtleXVwJywge1xuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgIGtleWJvYXJkRXZlbnQsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYnViYmxlczogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcblxuICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAga2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbktleWJvYXJkTmF2aWdhdGUocm93OiBEYXRhUm93LCBrZXlib2FyZEV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChrZXlib2FyZEV2ZW50KSB7XG4gICAgICAgICAgICBrZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBEYXRhUm93RXZlbnQocm93LCBrZXlib2FyZEV2ZW50LCB0aGlzKTtcblxuICAgICAgICB0aGlzLnJvd0RibENsaWNrLmVtaXQoZXZlbnQpO1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdyb3ctZGJsY2xpY2snLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiBldmVudCxcbiAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWYWxpZENsaWNrRXZlbnQoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBldmVudC5ldmVudFBoYXNlID09PSBldmVudC5CVUJCTElOR19QSEFTRTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudCBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBldmVudC5ldmVudFBoYXNlID09PSBldmVudC5BVF9UQVJHRVQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgb25Db2x1bW5IZWFkZXJDbGljayhjb2x1bW46IERhdGFDb2x1bW4sIGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkQ2xpY2tFdmVudChldmVudCkgJiYgY29sdW1uICYmIGNvbHVtbi5zb3J0YWJsZSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuZGF0YS5nZXRTb3J0aW5nKCk7XG4gICAgICAgICAgICBsZXQgbmV3RGlyZWN0aW9uID0gJ2FzYyc7XG4gICAgICAgICAgICBpZiAoY3VycmVudCAmJiBjb2x1bW4ua2V5ID09PSBjdXJyZW50LmtleSkge1xuICAgICAgICAgICAgICAgIG5ld0RpcmVjdGlvbiA9IGN1cnJlbnQuZGlyZWN0aW9uPy50b0xvd2VyQ2FzZSgpID09PSAnYXNjJyA/ICdkZXNjJyA6ICdhc2MnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zb3J0aW5nID0gW2NvbHVtbi5rZXksIG5ld0RpcmVjdGlvbiwgeyBudW1lcmljOiB0cnVlIH1dO1xuICAgICAgICAgICAgdGhpcy5kYXRhLnNldFNvcnRpbmcobmV3IERhdGFTb3J0aW5nKGNvbHVtbi5rZXksIG5ld0RpcmVjdGlvbiwgeyBudW1lcmljOiB0cnVlIH0pKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdFNvcnRpbmdDaGFuZ2VkRXZlbnQoY29sdW1uLmtleSwgY29sdW1uLnNvcnRpbmdLZXksIG5ld0RpcmVjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmtleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbSgwKTtcbiAgICB9XG5cbiAgICBvblNlbGVjdEFsbENsaWNrKG1hdENoZWNrYm94Q2hhbmdlOiBNYXRDaGVja2JveENoYW5nZSkge1xuICAgICAgICB0aGlzLmlzU2VsZWN0QWxsQ2hlY2tlZCA9IG1hdENoZWNrYm94Q2hhbmdlLmNoZWNrZWQ7XG4gICAgICAgIHRoaXMuaXNTZWxlY3RBbGxJbmRldGVybWluYXRlID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGFibGVSb3dzID0gdGhpcy5kYXRhLmdldFJvd3MoKS5maWx0ZXIoKHJvdykgPT4gcm93Py5pc1NlbGVjdGFibGUpO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGFibGVSb3dzICYmIHNlbGVjdGFibGVSb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGFibGVSb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Um93KHNlbGVjdGFibGVSb3dzW2ldLCBtYXRDaGVja2JveENoYW5nZS5jaGVja2VkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRvbUV2ZW50TmFtZSA9IG1hdENoZWNrYm94Q2hhbmdlLmNoZWNrZWQgPyAncm93LXNlbGVjdCcgOiAncm93LXVuc2VsZWN0JztcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuc2VsZWN0aW9uLmxlbmd0aCA+IDAgPyB0aGlzLnNlbGVjdGlvblswXSA6IG51bGw7XG5cbiAgICAgICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KGRvbUV2ZW50TmFtZSwgcm93KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2hlY2tib3hMYWJlbENsaWNrKHJvdzogRGF0YVJvdywgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoISh0YXJnZXQuaGFzQXR0cmlidXRlKCdkYXRhLWFkZi1kYXRhdGFibGUtcm93LWNoZWNrYm94JykgfHwgdGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWFkZi1kYXRhdGFibGUtcm93LWNoZWNrYm94XScpKSkge1xuICAgICAgICAgICAgdGhpcy5vblJvd0NsaWNrKHJvdywgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DaGVja2JveENoYW5nZShyb3c6IERhdGFSb3csIGV2ZW50OiBNYXRDaGVja2JveENoYW5nZSkge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGV2ZW50LmNoZWNrZWQ7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93LCBuZXdWYWx1ZSk7XG5cbiAgICAgICAgY29uc3QgZG9tRXZlbnROYW1lID0gbmV3VmFsdWUgPyAncm93LXNlbGVjdCcgOiAncm93LXVuc2VsZWN0JztcbiAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQoZG9tRXZlbnROYW1lLCByb3cpO1xuICAgICAgICB0aGlzLmNoZWNrU2VsZWN0QWxsQ2hlY2tib3hTdGF0ZSgpO1xuICAgIH1cblxuICAgIGNoZWNrU2VsZWN0QWxsQ2hlY2tib3hTdGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgIGxldCBudW1iZXJPZlNlbGVjdGVkUm93czogbnVtYmVyID0gMDtcbiAgICAgICAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLmRhdGEuZ2V0Um93cygpO1xuICAgICAgICAgICAgcm93cy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocm93LmlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZTZWxlY3RlZFJvd3MrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChudW1iZXJPZlNlbGVjdGVkUm93cyA9PT0gcm93cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2VsZWN0QWxsQ2hlY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1NlbGVjdEFsbEluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyT2ZTZWxlY3RlZFJvd3MgPiAwICYmIG51bWJlck9mU2VsZWN0ZWRSb3dzIDwgcm93cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2VsZWN0QWxsQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RBbGxJbmRldGVybWluYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1NlbGVjdEFsbENoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25JbWFnZUxvYWRpbmdFcnJvcihldmVudDogRXZlbnQsIHJvdzogRGF0YVJvdykge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgYW55O1xuXG4gICAgICAgICAgICBpZiAodGhpcy5mYWxsYmFja1RodW1ibmFpbCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuc3JjID0gdGhpcy5mYWxsYmFja1RodW1ibmFpbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zcmMgPSByb3cuaW1hZ2VFcnJvclJlc29sdmVyKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzSWNvblZhbHVlKHJvdzogRGF0YVJvdywgY29sOiBEYXRhQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChyb3cgJiYgY29sKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZGF0YS5nZXRWYWx1ZShyb3csIGNvbCk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU/LnN0YXJ0c1dpdGgoJ21hdGVyaWFsLWljb25zOi8vJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGFzSWNvblZhbHVlKHJvdzogRGF0YVJvdywgY29sOiBEYXRhQ29sdW1uKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJY29uVmFsdWUocm93LCBjb2wpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZGF0YS5nZXRWYWx1ZShyb3csIGNvbCkgfHwgJyc7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgnbWF0ZXJpYWwtaWNvbnM6Ly8nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaXNDb2x1bW5Tb3J0ZWQoY29sOiBEYXRhQ29sdW1uLCBkaXJlY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoY29sICYmIGRpcmVjdGlvbikge1xuICAgICAgICAgICAgY29uc3Qgc29ydGluZyA9IHRoaXMuZGF0YS5nZXRTb3J0aW5nKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1NvcnRpbmdFcXVhbChjb2wsIGRpcmVjdGlvbiwgc29ydGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGdldENvbnRleHRNZW51QWN0aW9ucyhyb3c6IERhdGFSb3csIGNvbDogRGF0YUNvbHVtbik6ICgpID0+IGFueVtdIHtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IERhdGFDZWxsRXZlbnQocm93LCBjb2wsIFtdKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd1Jvd0NvbnRleHRNZW51LmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnZhbHVlLmFjdGlvbnM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0Um93QWN0aW9ucyhyb3c6IERhdGFSb3csIGNvbD86IERhdGFDb2x1bW4pOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IGlkID0gcm93LmdldFZhbHVlKCdpZCcpO1xuXG4gICAgICAgIGlmICghdGhpcy5yb3dNZW51Q2FjaGVbaWRdKSB7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBEYXRhQ2VsbEV2ZW50KHJvdywgY29sLCBbXSk7XG4gICAgICAgICAgICB0aGlzLnNob3dSb3dBY3Rpb25zTWVudS5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIGlmICghdGhpcy5yb3dNZW51Q2FjaGVFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmlzaWJsZUFjdGlvbnMoZXZlbnQudmFsdWUuYWN0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJvd01lbnVDYWNoZVtpZF0gPSBldmVudC52YWx1ZS5hY3Rpb25zO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmlzaWJsZUFjdGlvbnModGhpcy5yb3dNZW51Q2FjaGVbaWRdKTtcbiAgICB9XG5cbiAgICBnZXRWaXNpYmxlQWN0aW9ucyhhY3Rpb25zOiBhbnlbXSk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIGFjdGlvbnMuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbi52aXNpYmxlIHx8IGFjdGlvbi52aXNpYmxlID09PSB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIG9uRXhlY3V0ZVJvd0FjdGlvbihyb3c6IERhdGFSb3csIGFjdGlvbjogYW55KSB7XG4gICAgICAgIGlmIChhY3Rpb24uZGlzYWJsZWQgfHwgYWN0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZVJvd0FjdGlvbi5lbWl0KG5ldyBEYXRhUm93QWN0aW9uRXZlbnQocm93LCBhY3Rpb24pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEhpZGVBY3Rpb25zV2l0aG91dEhvdmVyQ2xhc3MoYWN0aW9uc01lbnVUcmlnZ2VyOiBNYXRNZW51VHJpZ2dlcikge1xuICAgICAgICByZXR1cm4geyAnYWRmLWRhdGF0YWJsZS1oaWRlLWFjdGlvbnMtd2l0aG91dC1ob3Zlcic6IHRoaXMuYWN0aW9uc1Zpc2libGVPbkhvdmVyICYmICFhY3Rpb25zTWVudVRyaWdnZXIubWVudU9wZW4gfTtcbiAgICB9XG5cbiAgICByb3dBbGxvd3NEcm9wKHJvdzogRGF0YVJvdyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcm93LmlzRHJvcFRhcmdldCA9PT0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpc1NpbmdsZVNlbGVjdGlvbk1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGUgJiYgdGhpcy5zZWxlY3Rpb25Nb2RlLnRvTG93ZXJDYXNlKCkgPT09ICdzaW5nbGUnO1xuICAgIH1cblxuICAgIGlzTXVsdGlTZWxlY3Rpb25Nb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlICYmIHRoaXMuc2VsZWN0aW9uTW9kZS50b0xvd2VyQ2FzZSgpID09PSAnbXVsdGlwbGUnO1xuICAgIH1cblxuICAgIGdldFJvd1N0eWxlKHJvdzogRGF0YVJvdyk6IHN0cmluZyB7XG4gICAgICAgIHJvdy5jc3NDbGFzcyA9IHJvdy5jc3NDbGFzcyA/IHJvdy5jc3NDbGFzcyA6ICcnO1xuICAgICAgICB0aGlzLnJvd1N0eWxlQ2xhc3MgPSB0aGlzLnJvd1N0eWxlQ2xhc3MgPyB0aGlzLnJvd1N0eWxlQ2xhc3MgOiAnJztcbiAgICAgICAgY29uc3QgY29udGV4dE1lbnVTb3VyY2VDbGFzcyA9IHJvdy5pc0NvbnRleHRNZW51U291cmNlID8gJ2FkZi1jb250ZXh0LW1lbnUtc291cmNlJyA6ICcnO1xuICAgICAgICBjb25zdCBpc0RyYWdFbmFibGVkID0gdGhpcy5lbmFibGVEcmFnUm93cyA/ICdhZGYtZHJhZy1yb3cnIDogJyc7XG4gICAgICAgIHJldHVybiBgJHtyb3cuY3NzQ2xhc3N9ICR7dGhpcy5yb3dTdHlsZUNsYXNzfSAke2NvbnRleHRNZW51U291cmNlQ2xhc3N9ICR7aXNEcmFnRW5hYmxlZH1gO1xuICAgIH1cblxuICAgIG1hcmtSb3dBc0NvbnRleHRNZW51U291cmNlKHNlbGVjdGVkUm93OiBEYXRhUm93KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJZCA9IHNlbGVjdGVkUm93LmlkID8gc2VsZWN0ZWRSb3cuaWQgOiAnJztcbiAgICAgICAgdGhpcy5kYXRhLmdldFJvd3MoKS5mb3JFYWNoKChyb3cpID0+IChyb3cuaXNDb250ZXh0TWVudVNvdXJjZSA9IGZhbHNlKSk7XG4gICAgICAgIHNlbGVjdGVkUm93LmlzQ29udGV4dE1lbnVTb3VyY2UgPSB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Um93QXNDb250ZXh0U291cmNlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJvdyA9IHRoaXMuZGF0YS5nZXRSb3dzKCkuZmluZCgocm93KSA9PiB0aGlzLnNlbGVjdGVkUm93SWQgPT09IHJvdy5pZCk7XG4gICAgICAgIGlmIChzZWxlY3RlZFJvdykge1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3cuaXNDb250ZXh0TWVudVNvdXJjZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3RSb3cocm93OiBEYXRhUm93LCB2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICByb3cuaXNTZWxlY3RlZCA9IHZhbHVlO1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gcm93Py5pZCA/IHRoaXMuZmluZFNlbGVjdGlvbkJ5SWQocm93LmlkKSA6IHRoaXMuc2VsZWN0aW9uLmluZGV4T2Yocm93KTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChpZHggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChpZHggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NvdW50Q2hhbmdlZC5lbWl0KHRoaXMuc2VsZWN0aW9uLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmaW5kU2VsZWN0aW9uQnlJZChpZDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLmZpbmRJbmRleCgoc2VsZWN0aW9uKSA9PiBzZWxlY3Rpb24/LmlkID09PSBpZCk7XG4gICAgfVxuXG4gICAgZ2V0Q2VsbFRvb2x0aXAocm93OiBEYXRhUm93LCBjb2w6IERhdGFDb2x1bW4pOiBzdHJpbmcge1xuICAgICAgICBpZiAocm93ICYmIGNvbCAmJiBjb2wuZm9ybWF0VG9vbHRpcCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBzdHJpbmcgPSBjb2wuZm9ybWF0VG9vbHRpcChyb3csIGNvbCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRTb3J0YWJsZUNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0Q29sdW1ucygpLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4uc29ydGFibGUgPT09IHRydWUpO1xuICAgIH1cblxuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0Um93cygpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBpc0hlYWRlclZpc2libGUoKSB7XG4gICAgICAgIGxldCBoZWFkZXJWaXNpYmlsaXR5OiBib29sZWFuO1xuXG4gICAgICAgIGlmICh0aGlzLnNob3dIZWFkZXIgPT09IFNob3dIZWFkZXJNb2RlLkRhdGEpIHtcbiAgICAgICAgICAgIGhlYWRlclZpc2liaWxpdHkgPSAhdGhpcy5sb2FkaW5nICYmICF0aGlzLm5vUGVybWlzc2lvbiAmJiAhdGhpcy5pc0VtcHR5KCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG93SGVhZGVyID09PSBTaG93SGVhZGVyTW9kZS5BbHdheXMpIHtcbiAgICAgICAgICAgIGhlYWRlclZpc2liaWxpdHkgPSAhdGhpcy5sb2FkaW5nICYmICF0aGlzLm5vUGVybWlzc2lvbjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dIZWFkZXIgPT09IFNob3dIZWFkZXJNb2RlLk5ldmVyKSB7XG4gICAgICAgICAgICBoZWFkZXJWaXNpYmlsaXR5ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhlYWRlclZpc2liaWxpdHk7XG4gICAgfVxuXG4gICAgaXNTdGlja3lIZWFkZXJFbmFibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGlja3lIZWFkZXIgJiYgdGhpcy5pc0hlYWRlclZpc2libGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRSb3dTZWxlY3Rpb25FdmVudChuYW1lOiBzdHJpbmcsIHJvdzogRGF0YVJvdykge1xuICAgICAgICBjb25zdCBkb21FdmVudCA9IG5ldyBDdXN0b21FdmVudChuYW1lLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uOiB0aGlzLnNlbGVjdGlvblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoZG9tRXZlbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW1pdFNvcnRpbmdDaGFuZ2VkRXZlbnQoa2V5OiBzdHJpbmcsIHNvcnRpbmdLZXk6IHN0cmluZywgZGlyZWN0aW9uOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ3NvcnRpbmctY2hhbmdlZCcsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICBzb3J0aW5nS2V5LFxuICAgICAgICAgICAgICAgIGRpcmVjdGlvblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoZG9tRXZlbnQpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlQ2xpY2tTdHJlYW0oKTtcbiAgICB9XG5cbiAgICBnZXROYW1lQ29sdW1uVmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0Q29sdW1ucygpLmZpbmQoKGVsOiBhbnkpID0+IGVsLmtleS5pbmNsdWRlcygnbmFtZScpKTtcbiAgICB9XG5cbiAgICBnZXRBdXRvbWF0aW9uVmFsdWUocm93OiBEYXRhUm93KTogYW55IHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0TmFtZUNvbHVtblZhbHVlKCk7XG4gICAgICAgIHJldHVybiBuYW1lID8gcm93LmdldFZhbHVlKG5hbWUua2V5KSA6ICcnO1xuICAgIH1cblxuICAgIGdldEFyaWFTb3J0KGNvbHVtbjogRGF0YUNvbHVtbik6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy5pc0NvbHVtblNvcnRBY3RpdmUoY29sdW1uKSkge1xuICAgICAgICAgICAgcmV0dXJuICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuU09SVF9OT05FJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmlzQ29sdW1uU29ydGVkKGNvbHVtbiwgJ2FzYycpID8gJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5TT1JUX0FTQ0VORElORycgOiAnQURGLURBVEFUQUJMRS5BQ0NFU1NJQklMSVRZLlNPUlRfREVTQ0VORElORyc7XG4gICAgfVxuXG4gICAgZ2V0U29ydExpdmVBbm5vdW5jZW1lbnQoY29sdW1uOiBEYXRhQ29sdW1uKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29sdW1uU29ydEFjdGl2ZShjb2x1bW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5TT1JUX0RFRkFVTFQnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ29sdW1uU29ydGVkKGNvbHVtbiwgJ2FzYycpXG4gICAgICAgICAgICA/ICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuU09SVF9BU0NFTkRJTkdfQlknXG4gICAgICAgICAgICA6ICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuU09SVF9ERVNDRU5ESU5HX0JZJztcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyRHJhZ0hhbmRsZUljb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGljb25VcmwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoJy4vYXNzZXRzL2ltYWdlcy9kcmFnX2luZGljYXRvcl8yNHB4LnN2ZycpO1xuXG4gICAgICAgIHRoaXMubWF0SWNvblJlZ2lzdHJ5LmFkZFN2Z0ljb25Jbk5hbWVzcGFjZSgnYWRmJywgJ2RyYWdfaW5kaWNhdG9yJywgaWNvblVybCk7XG4gICAgfVxuXG4gICAgb25SZXNpemluZyh7IHJlY3RhbmdsZTogeyB3aWR0aCB9IH06IFJlc2l6ZUV2ZW50LCBjb2xJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMuZ2V0VmlzaWJsZUNvbHVtbnMoKTtcbiAgICAgICAgICAgIGFsbENvbHVtbnNbY29sSW5kZXhdLndpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0Q29sdW1ucyhhbGxDb2x1bW5zKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzUmVzaXppbmcpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25SZXNpemluZ0VuZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNpemluZ0NvbHVtbkluZGV4ID0gLTE7XG5cbiAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5zV2lkdGhzKCk7XG4gICAgfVxuXG4gICAgZ2V0RmxleFZhbHVlKHsgd2lkdGggPSAwIH06IERhdGFDb2x1bW4pOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYDAgMSAke3dpZHRoIDwgRGF0YVRhYmxlQ29tcG9uZW50Lk1JTklNVU1fQ09MVU1OX1NJWkUgPyBEYXRhVGFibGVDb21wb25lbnQuTUlOSU1VTV9DT0xVTU5fU0laRSA6IHdpZHRofXB4YDtcbiAgICB9XG5cbiAgICBmaWx0ZXJEaXNhYmxlZENvbHVtbnMoaW5kZXg6IG51bWJlciwgX2RyYWc6IENka0RyYWcsIGRyb3A6IENka0Ryb3BMaXN0KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhZHJvcC5nZXRTb3J0ZWRJdGVtcygpW2luZGV4XS5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBvbkRyYWdEcm9wKGRyb3BwZWRFdmVudDogQ2RrRHJhZ0Ryb3A8YW55Pik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5lbmFibGVEcmFnUm93cykge1xuICAgICAgICAgICAgdGhpcy5kcmFnRHJvcHBlZC5lbWl0KHsgcHJldmlvdXNJbmRleDogZHJvcHBlZEV2ZW50LnByZXZpb3VzSW5kZXgsIGN1cnJlbnRJbmRleDogZHJvcHBlZEV2ZW50LmN1cnJlbnRJbmRleCB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRHJhZ1N0YXJ0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzRHJhZ2dpbmdSb3cgPSB0cnVlO1xuICAgIH1cblxuICAgIG9uRHJhZ0VuZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nUm93ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVDb2x1bW5zV2lkdGhzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhbGxDb2x1bW5zID0gdGhpcy5kYXRhLmdldENvbHVtbnMoKTtcblxuICAgICAgICBjb25zdCBoZWFkZXJDb250YWluZXI6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFkZi1kYXRhdGFibGUtaGVhZGVyJyk7XG5cbiAgICAgICAgaWYgKGhlYWRlckNvbnRhaW5lcikge1xuICAgICAgICAgICAgY29uc3QgaGVhZGVyQ29udGFpbmVyQ29sdW1ucyA9IGhlYWRlckNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcuYWRmLWRhdGF0YWJsZS1jZWxsLWhlYWRlcjpub3QoLmFkZi1kYXRhdGFibGUtY2hlY2tib3gpJyk7XG5cbiAgICAgICAgICAgIGhlYWRlckNvbnRhaW5lckNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBIVE1MRWxlbWVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhbGxDb2x1bW5zW2luZGV4XSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbENvbHVtbnNbaW5kZXhdLndpZHRoID0gY29sdW1uLmNsaWVudFdpZHRoIC0gcGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUoY29sdW1uKS5wYWRkaW5nTGVmdCwgMTApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID09PSBoZWFkZXJDb250YWluZXJDb2x1bW5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbENvbHVtbnNbaW5kZXhdLndpZHRoID0gY29sdW1uLmNsaWVudFdpZHRoIC0gcGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUoY29sdW1uKS5wYWRkaW5nUmlnaHQsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbENvbHVtbnNbaW5kZXhdLndpZHRoID0gY29sdW1uLmNsaWVudFdpZHRoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhLnNldENvbHVtbnMoYWxsQ29sdW1ucyk7XG5cbiAgICAgICAgdGhpcy5jb2x1bW5zV2lkdGhDaGFuZ2VkLmVtaXQoYWxsQ29sdW1ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1NvcnRpbmdFcXVhbChjb2w6IERhdGFDb2x1bW4sIGRpcmVjdGlvbjogc3RyaW5nLCBzb3J0aW5nOiBEYXRhU29ydGluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gc29ydGluZyAmJiAoc29ydGluZy5rZXkgPT09IGNvbC5rZXkgfHwgc29ydGluZy5rZXkgPT09IGNvbC5zb3J0aW5nS2V5KSAmJiBzb3J0aW5nLmRpcmVjdGlvbj8udG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gZGlyZWN0aW9uO1xuICAgIH1cblxuICAgIGdldCBpc1Jlc2l6aW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNpemluZ0NvbHVtbkluZGV4ID49IDA7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFUYWJsZURyb3BFdmVudCB7XG4gICAgZGV0YWlsOiB7XG4gICAgICAgIHRhcmdldDogJ2NlbGwnIHwgJ2hlYWRlcic7XG4gICAgICAgIGV2ZW50OiBFdmVudDtcbiAgICAgICAgY29sdW1uOiBEYXRhQ29sdW1uO1xuICAgICAgICByb3c/OiBEYXRhUm93O1xuICAgIH07XG5cbiAgICBwcmV2ZW50RGVmYXVsdCgpOiB2b2lkO1xufVxuIiwiPGRpdlxuICAgIHJvbGU9XCJncmlkXCJcbiAgICAqbmdJZj1cImRhdGFcIlxuICAgIGNsYXNzPVwiYWRmLWZ1bGwtd2lkdGggYWRmLWRhdGF0YWJsZS1saXN0XCJcbiAgICBbY2xhc3MuYWRmLXN0aWNreS1oZWFkZXJdPVwiaXNTdGlja3lIZWFkZXJFbmFibGVkKClcIlxuICAgIFtjbGFzcy5hZGYtZGF0YXRhYmxlLS1lbXB0eV09XCIoaXNFbXB0eSgpICYmICFpc0hlYWRlclZpc2libGUoKSkgfHwgbG9hZGluZ1wiXG4gICAgW2NsYXNzLmFkZi1kYXRhdGFibGUtLWVtcHR5LS1oZWFkZXItdmlzaWJsZV09XCJpc0VtcHR5KCkgJiYgaXNIZWFkZXJWaXNpYmxlKClcIlxuPlxuICAgIDxkaXYgKm5nSWY9XCJpc0hlYWRlclZpc2libGUoKVwiIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1oZWFkZXJcIiByb2xlPVwicm93Z3JvdXBcIiBbbmdDbGFzc109XCJ7ICdhZGYtc3Itb25seSc6ICFpc0hlYWRlclZpc2libGUoKSB9XCI+XG4gICAgICAgIDxhZGYtZGF0YXRhYmxlLXJvd1xuICAgICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICAgIGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICAgICAgICAgIFtjZGtEcm9wTGlzdFNvcnRQcmVkaWNhdGVdPVwiZmlsdGVyRGlzYWJsZWRDb2x1bW5zXCJcbiAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImRhdGF0YWJsZS1yb3ctaGVhZGVyXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNIZWFkZXJWaXNpYmxlKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLXJvd1wiXG4gICAgICAgICAgICByb2xlPVwicm93XCI+XG5cblxuICAgICAgICAgICAgPCEtLSBEcmFnIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImVuYWJsZURyYWdSb3dzXCIgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbGwtaGVhZGVyIGFkZi1kcmFnLWNvbHVtblwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWRmLXNyLW9ubHlcIj57eyAnQURGLURBVEFUQUJMRS5BQ0NFU1NJQklMSVRZLkRSQUcnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gQWN0aW9ucyAobGVmdCkgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aW9ucyAmJiBhY3Rpb25zUG9zaXRpb24gPT09ICdsZWZ0J1wiIGNsYXNzPVwiYWRmLWFjdGlvbnMtY29sdW1uIGFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZi1zci1vbmx5XCI+e3sgJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5BQ1RJT05TJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIENvbHVtbnMgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibXVsdGlzZWxlY3RcIiBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXIgYWRmLWRhdGF0YWJsZS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggW2luZGV0ZXJtaW5hdGVdPVwiaXNTZWxlY3RBbGxJbmRldGVybWluYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzU2VsZWN0QWxsQ2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2VsZWN0QWxsQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1jaGVja2JveC1zci1vbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcmlhLWxhYmVsXT1cIidBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuU0VMRUNUX0FMTCcgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5TRUxFQ1RfQUxMJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICBsZXQgY29sIG9mIGdldFZpc2libGVDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgbGV0IGNvbHVtbkluZGV4ID0gaW5kZXhcbiAgICAgICAgICAgICAgICBsZXQgbGFzdENvbHVtbiA9IGxhc3RcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsLS17e2NvbC50eXBlIHx8ICd0ZXh0J319IHt7Y29sLmNzc0NsYXNzfX0gYWRmLWRhdGF0YWJsZS1jZWxsLWhlYWRlciBhZGYtZGF0YXRhYmxlLWNlbGwtZGF0YVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wudGl0bGUgfHwgIXNob3dQcm92aWRlZEFjdGlvbnNcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYXV0b19pZF8nICsgY29sLmtleVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAnYWRmLXNvcnRhYmxlJzogY29sLnNvcnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAnYWRmLWRhdGF0YWJsZV9fY3Vyc29yLS1wb2ludGVyJzogIWlzUmVzaXppbmcsXG4gICAgICAgICAgICAgICAgICAgICdhZGYtZGF0YXRhYmxlX19oZWFkZXItLXNvcnRlZC1hc2MnOiBpc0NvbHVtblNvcnRlZChjb2wsICdhc2MnKSxcbiAgICAgICAgICAgICAgICAgICAgJ2FkZi1kYXRhdGFibGVfX2hlYWRlci0tc29ydGVkLWRlc2MnOiBpc0NvbHVtblNvcnRlZChjb2wsICdkZXNjJyl9XCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCIoY29sLndpZHRoKSAmJiAhbGFzdENvbHVtbiAmJiB7J2ZsZXgnOiBnZXRGbGV4VmFsdWUoY29sKX1cIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGNvbC50aXRsZSB8IHRyYW5zbGF0ZSkgKyAoY29sLnN1YnRpdGxlID8gJyAnICsgY29sLnN1YnRpdGxlIDogJycpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Db2x1bW5IZWFkZXJDbGljayhjb2wsICRldmVudClcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkNvbHVtbkhlYWRlckNsaWNrKGNvbCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgcm9sZT1cImNvbHVtbmhlYWRlclwiXG4gICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaXNIZWFkZXJWaXNpYmxlKCkgPyAwIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zb3J0XT1cImNvbC5zb3J0YWJsZSA/IChnZXRBcmlhU29ydChjb2wpIHwgdHJhbnNsYXRlKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgICBjZGtEcmFnTG9ja0F4aXM9XCJ4XCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwiaXNEcmFnZ2luZ0hlYWRlckNvbHVtbiA9IHRydWVcIlxuICAgICAgICAgICAgICAgIChjZGtEcmFnRHJvcHBlZCk9XCJvbkRyb3BIZWFkZXJDb2x1bW4oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCIhY29sLmRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJlZEhlYWRlckNvbHVtbkluZGV4ID0gY29sdW1uSW5kZXhcIlxuICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImhvdmVyZWRIZWFkZXJDb2x1bW5JbmRleCA9IC0xXCJcbiAgICAgICAgICAgICAgICBhZGYtZHJvcC16b25lIGRyb3BUYXJnZXQ9XCJoZWFkZXJcIlxuICAgICAgICAgICAgICAgIFtkcm9wQ29sdW1uXT1cImNvbFwiXG4gICAgICAgICAgICA+XG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBhZGYtcmVzaXphYmxlXG4gICAgICAgICAgICAgICAgI3Jlc2l6YWJsZUVsZW1lbnQ9XCJhZGYtcmVzaXphYmxlXCJcbiAgICAgICAgICAgICAgICBbY292ZXJQYWRkaW5nXT1cIjEwXCJcbiAgICAgICAgICAgICAgICAocmVzaXppbmcpPVwib25SZXNpemluZygkZXZlbnQsIGNvbHVtbkluZGV4KVwiXG4gICAgICAgICAgICAgICAgKHJlc2l6ZVN0YXJ0KT1cInJlc2l6aW5nQ29sdW1uSW5kZXggPSBjb2x1bW5JbmRleFwiXG4gICAgICAgICAgICAgICAgKHJlc2l6ZUVuZCk9XCJvblJlc2l6aW5nRW5kKClcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYXV0b19oZWFkZXJfY29udGVudF9pZF8nICsgY29sLmtleVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbGwtaGVhZGVyLWNvbnRlbnRcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2FkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXItY29udGVudC0taG92ZXJlZCc6XG4gICAgICAgICAgICAgICAgICAgIGhvdmVyZWRIZWFkZXJDb2x1bW5JbmRleCA9PT0gY29sdW1uSW5kZXggJiZcbiAgICAgICAgICAgICAgICAgICAgIWlzRHJhZ2dpbmdIZWFkZXJDb2x1bW4gJiZcbiAgICAgICAgICAgICAgICAgICAgIWlzUmVzaXppbmcgJiYgY29sLnNvcnRhYmxlfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2wuaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cInt7Y29sLnRpdGxlIHwgdHJhbnNsYXRlfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbGwtdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NvbC50aXRsZSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuc3VidGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7e2NvbC5zdWJ0aXRsZSB8IHRyYW5zbGF0ZX19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsLXZhbHVlIGFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXJfc3VidGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAoe3tjb2wuc3VidGl0bGUgfCB0cmFuc2xhdGV9fSlcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sLnRpdGxlICYmIGNvbC5zb3J0YWJsZSAmJiBpc0RyYWdnaW5nSGVhZGVyQ29sdW1uXCIgY2xhc3M9XCJhZGYtc3Itb25seVwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0U29ydExpdmVBbm5vdW5jZW1lbnQoY29sKSB8IHRyYW5zbGF0ZTogeyBzdHJpbmc6IGNvbC50aXRsZSB8IHRyYW5zbGF0ZSB9IH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjb2wudGl0bGUgJiYgIWNvbC5zb3J0YWJsZSAmJiAhaGVhZGVyRmlsdGVyVGVtcGxhdGVcIiBbYXR0ci50aXRsZV09XCInQURGLURBVEFUQUJMRS5BQ0NFU1NJQklMSVRZLkVNUFRZX0hFQURFUicgfCB0cmFuc2xhdGVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sLmhlYWRlclwiIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsLXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2wuaGVhZGVyXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IGNvbH1cIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFkZi1kYXRhdGFibGVfX2hlYWRlci0tc29ydGVkLWFzY109XCJpc0NvbHVtblNvcnRlZChjb2wsICdhc2MnKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hZGYtZGF0YXRhYmxlX19oZWFkZXItLXNvcnRlZC1kZXNjXT1cImlzQ29sdW1uU29ydGVkKGNvbCwgJ2Rlc2MnKVwiPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImFsbG93RmlsdGVyaW5nXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVhZGVyRmlsdGVyVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDogY29sfVwiIC8+XG5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5kcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgICAgICBjZGtEcmFnSGFuZGxlXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2FkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXItZHJhZy1pY29uJzogIWlzUmVzaXppbmcgfVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8YWRmLWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaG92ZXJlZEhlYWRlckNvbHVtbkluZGV4ID09PSBjb2x1bW5JbmRleCAmJiAhaXNSZXNpemluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cImFkZjpkcmFnX2luZGljYXRvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXItZHJhZy1pY29uLXZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhZGYtZGF0YXRhYmxlLWNlbGwtaGVhZGVyLWRyYWctaWNvbi0nK2NvbC5rZXlcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNSZXNpemluZ0VuYWJsZWQgJiYgY29sLnJlc2l6YWJsZSAmJiAhbGFzdENvbHVtblwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaG92ZXJlZEhlYWRlckNvbHVtbkluZGV4ID09PSBjb2x1bW5JbmRleCAmJiAhaXNSZXNpemluZyB8fCByZXNpemluZ0NvbHVtbkluZGV4ID09PSBjb2x1bW5JbmRleCA/ICdhZGYtZGF0YXRhYmxlX19yZXNpemUtaGFuZGxlLXZpc2libGUnIDogJ2FkZi1kYXRhdGFibGVfX3Jlc2l6ZS1oYW5kbGUtaGlkZGVuJ1wiXG4gICAgICAgICAgICAgICAgYWRmLXJlc2l6ZS1oYW5kbGVcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZV9fcmVzaXplLWhhbmRsZVwiXG4gICAgICAgICAgICAgICAgW3Jlc2l6YWJsZUNvbnRhaW5lcl09XCJyZXNpemFibGVFbGVtZW50XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1kYXRhdGFibGVfX3Jlc2l6ZS1oYW5kbGUtLWRpdmlkZXJcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1kcm9wLWhlYWRlci1jZWxsLXBsYWNlaG9sZGVyXCIgKmNka0RyYWdQbGFjZWhvbGRlcj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLSBIZWFkZXIgYWN0aW9ucyAocmlnaHQpIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiKGFjdGlvbnMgJiYgYWN0aW9uc1Bvc2l0aW9uID09PSAncmlnaHQnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAobWFpbkFjdGlvblRlbXBsYXRlICYmIHNob3dNYWluRGF0YXRhYmxlQWN0aW9ucylcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWFjdGlvbnMtY29sdW1uIGFkZi1kYXRhdGFibGUtYWN0aW9ucy1tZW51IGFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXIgYWRmLWRhdGF0YWJsZV9fYWN0aW9ucy1jZWxsXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWRmLWRhdGF0YWJsZS1hY3Rpb25zLW1lbnUtcHJvdmlkZWRdPVwic2hvd1Byb3ZpZGVkQWN0aW9uc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1haW5BY3Rpb25UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtZGF0YXRhYmxlLW1haW4tbWVudS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQURGLURBVEFUQUJMRS5DT05URU5ULUFDVElPTlMuU0VMRUNUX0NPTFVNTlMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgI21haW5NZW51VHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm1haW5NZW51VHJpZ2dlci5vcGVuTWVudSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJtYWluTWVudVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnZpZXdfd2Vla19vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWFpbk1lbnU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibWFpbkFjdGlvblRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IG1haW5NZW51VHJpZ2dlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZi1zci1vbmx5XCI+e3sgJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5BQ1RJT05TJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvYWRmLWRhdGF0YWJsZS1yb3c+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiIWxvYWRpbmc7IGVsc2UgbG9hZGluZ1Jvd1RlbXBsYXRlXCJcbiAgICAgICAgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWJvZHlcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdhZGYtYmx1ci1kYXRhdGFibGUtYm9keSc6IGJsdXJPblJlc2l6ZSAmJiAoaXNEcmFnZ2luZ0hlYWRlckNvbHVtbiB8fCBpc1Jlc2l6aW5nKSwgJ2FkZi1kYXRhdGFibGUtYm9keV9fZHJhZ2dhYmxlJzogZW5hYmxlRHJhZ1Jvd3MgJiYgIWlzRHJhZ2dpbmdSb3csICdhZGYtZGF0YXRhYmxlLWJvZHlfX2RyYWdnaW5nJzogaXNEcmFnZ2luZ1JvdyB9XCJcbiAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgW2Nka0Ryb3BMaXN0RGlzYWJsZWRdPVwiIWVuYWJsZURyYWdSb3dzXCJcbiAgICAgICAgcm9sZT1cInJvd2dyb3VwXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbm9QZXJtaXNzaW9uOyBlbHNlIG5vUGVybWlzc2lvbnNSb3dUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPGFkZi1kYXRhdGFibGUtcm93ICpuZ0Zvcj1cImxldCByb3cgb2YgZGF0YS5nZXRSb3dzKCk7IGxldCBpZHggPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiIWVuYWJsZURyYWdSb3dzXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ0Ryb3BwZWQpPVwib25EcmFnRHJvcCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnQoKVwiXG4gICAgICAgICAgICAgICAgKGNka0RyYWdFbmRlZCk9XCJvbkRyYWdFbmQoKVwiXG4gICAgICAgICAgICAgICAgW2Nka0RyYWdCb3VuZGFyeV09XCInLmFkZi1kYXRhdGFibGUtYm9keSdcIlxuICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAoc2VsZWN0KT1cIm9uRW50ZXJLZXlQcmVzc2VkKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGtleXVwKT1cIm9uUm93S2V5VXAocm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvblJvd0VudGVyS2V5RG93bihyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgIFthZGYtdXBsb2FkXT1cInJvd0FsbG93c0Ryb3Aocm93KVwiXG4gICAgICAgICAgICAgICAgW2FkZi11cGxvYWQtZGF0YV09XCJyb3dcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInJvd1N0eWxlXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRSb3dTdHlsZShyb3cpXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWRmLWRhdGF0YWJsZS1yb3dfX2RyYWdnaW5nXT1cImlzRHJhZ2dpbmdSb3dcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInZGF0YXRhYmxlLXJvdy0nICsgaWR4XCJcbiAgICAgICAgICAgICAgICAoY29udGV4dG1lbnUpPVwibWFya1Jvd0FzQ29udGV4dE1lbnVTb3VyY2Uocm93KVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gRHJhZyBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImVuYWJsZURyYWdSb3dzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbCBhZGYtZGF0YXRhYmxlX19hY3Rpb25zLWNlbGwgYWRmLWRhdGF0YWJsZS1ob3Zlci1vbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQURGLURBVEFUQUJMRS5BQ0NFU1NJQklMSVRZLkRSQUcnIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZHJhZ19pbmRpY2F0b3I8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gQWN0aW9ucyAobGVmdCkgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGlvbnMgJiYgYWN0aW9uc1Bvc2l0aW9uID09PSAnbGVmdCdcIiByb2xlPVwiZ3JpZGNlbGxcIiBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiICNhY3Rpb25zTWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0SGlkZUFjdGlvbnNXaXRob3V0SG92ZXJDbGFzcyhhY3Rpb25zTWVudVRyaWdnZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FERi1EQVRBVEFCTEUuQ09OVEVOVC1BQ1RJT05TLlRPT0xUSVAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCInYWN0aW9uX21lbnVfbGVmdF8nICsgaWR4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2FjdGlvbl9tZW51XycgKyBpZHhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgZ2V0Um93QWN0aW9ucyhyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cImFjdGlvbi50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhY3Rpb24uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25FeGVjdXRlUm93QWN0aW9uKHJvdywgYWN0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImFjdGlvbi5pY29uXCI+e3sgYWN0aW9uLmljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGFjdGlvbi50aXRsZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwibXVsdGlzZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25FbnRlcktleVByZXNzZWQocm93LCAkYW55KCRldmVudCkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNoZWNrYm94TGFiZWxDbGljayhyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcl09XCInc2VsZWN0LWZpbGUtJyArIGlkeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbCBhZGYtZGF0YXRhYmxlLWNoZWNrYm94IGFkZi1kYXRhdGFibGUtY2hlY2tib3gtc2luZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ3NlbGVjdC1maWxlLScgKyBpZHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFyb3c/LmlzU2VsZWN0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWRmLWRhdGF0YWJsZS1jaGVja2JveC1zZWxlY3RlZF09XCJyb3cuaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWRmLWRhdGF0YWJsZS1ob3Zlci1vbmx5XT1cImRpc3BsYXlDaGVja2JveGVzT25Ib3ZlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJyb3cuaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwicm93LmlzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FyaWEtbGFiZWxdPVwiJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5TRUxFQ1RfRklMRScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYWRmLWRhdGF0YWJsZS1yb3ctY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGVja2JveENoYW5nZShyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtY2hlY2tib3gtc3Itb25seVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5TRUxFQ1RfRklMRScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBnZXRWaXNpYmxlQ29sdW1ucygpOyBsZXQgbGFzdENvbHVtbiA9IGxhc3Q7XCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbGwgYWRmLWRhdGF0YWJsZS1jZWxsLS17e2NvbC50eXBlIHx8ICd0ZXh0J319IHt7Y29sLmNzc0NsYXNzfX0gYWRmLWRhdGF0YWJsZS1jZWxsLWRhdGFcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJjb2wudGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiZ2V0QXV0b21hdGlvblZhbHVlKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cInJvdy5pc1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJjb2wudGl0bGUgPyAoY29sLnRpdGxlIHwgdHJhbnNsYXRlKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljayhyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvbkVudGVyS2V5UHJlc3NlZChyb3csICRhbnkoJGV2ZW50KSlcIlxuICAgICAgICAgICAgICAgICAgICBbYWRmLWNvbnRleHQtbWVudV09XCJnZXRDb250ZXh0TWVudUFjdGlvbnMocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgW2FkZi1jb250ZXh0LW1lbnUtZW5hYmxlZF09XCJjb250ZXh0TWVudVwiXG4gICAgICAgICAgICAgICAgICAgIGFkZi1kcm9wLXpvbmUgZHJvcFRhcmdldD1cImNlbGxcIiBbZHJvcENvbHVtbl09XCJjb2xcIiBbZHJvcFJvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCIoY29sLndpZHRoKSAmJiAhbGFzdENvbHVtbiAmJiB7J2ZsZXgnOiBnZXRGbGV4VmFsdWUoY29sKX1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFjb2wudGVtcGxhdGVcIiBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImRhdGEuZ2V0Q29sdW1uVHlwZShyb3csIGNvbClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInaW1hZ2UnXCIgY2xhc3M9XCJhZGYtY2VsbC12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJpc0ljb25WYWx1ZShyb3csIGNvbCk7IGVsc2Ugbm9faWNvbnZhbHVlXCI+e3sgYXNJY29uVmFsdWUocm93LCBjb2wpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9faWNvbnZhbHVlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJvdy5pc1NlbGVjdGVkICYmICFtdWx0aXNlbGVjdDsgZWxzZSBub19zZWxlY3RlZF9yb3dcIiBzdmdJY29uPVwic2VsZWN0ZWRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub19zZWxlY3RlZF9yb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VudGVyLWltZy1pZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGRhdGEuZ2V0VmFsdWUocm93LCBjb2wpIHwgZmlsZVR5cGUpID09PSAnZGlzYWJsZScgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuSUNPTl9ESVNBQkxFRCcgfCB0cmFuc2xhdGUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuSUNPTl9URVhUJyB8IHRyYW5zbGF0ZTp7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0FERi1EQVRBVEFCTEUuRklMRV9UWVBFLicgKyAoZGF0YS5nZXRWYWx1ZShyb3csIGNvbCkgfCBmaWxlVHlwZSB8IHVwcGVyY2FzZSkgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hbHRdPVwiKGRhdGEuZ2V0VmFsdWUocm93LCBjb2wpIHwgZmlsZVR5cGUpID09PSAnZGlzYWJsZScgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuSUNPTl9ESVNBQkxFRCcgfCB0cmFuc2xhdGUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuSUNPTl9URVhUJyB8IHRyYW5zbGF0ZTp7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdBREYtREFUQVRBQkxFLkZJTEVfVFlQRS4nICsgKGRhdGEuZ2V0VmFsdWUocm93LCBjb2wpIHwgZmlsZVR5cGUgfCB1cHBlcmNhc2UpIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3sgZGF0YS5nZXRWYWx1ZShyb3csIGNvbCkgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwib25JbWFnZUxvYWRpbmdFcnJvcigkZXZlbnQsIHJvdylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInaWNvbidcIiBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtaWNvbi1jZWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNvbHZlckZuXT1cInJlc29sdmVyRm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiZ2V0Q2VsbFRvb2x0aXAocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1jZWxsLXZhbHVlIGFkZi1jZWxsLWRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKT8gMCA6IC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidkYXRlXycgKyAoZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbikgfCBhZGZMb2NhbGl6ZWREYXRlOiAnbWVkaXVtJykgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtZGF0ZS1jZWxsIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZW50ZXItZGF0ZS1jb2x1bW4taWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzb2x2ZXJGbl09XCJyZXNvbHZlckZuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImdldENlbGxUb29sdGlwKHJvdywgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0ZUNvbmZpZ109XCJjb2wuZGF0ZUNvbmZpZ1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInbG9jYXRpb24nXCIgW2F0dHIudGFiaW5kZXhdPVwiZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbik/IDAgOiAtMVwiICBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInbG9jYXRpb24nICsgZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1sb2NhdGlvbi1jZWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNvbHZlckZuXT1cInJlc29sdmVyRm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiZ2V0Q2VsbFRvb2x0aXAocm93LCBjb2wpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInZmlsZVNpemUnXCIgW2F0dHIudGFiaW5kZXhdPVwiZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbik/IDAgOiAtMVwiIGNsYXNzPVwiYWRmLWNlbGwtdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidmaWxlU2l6ZV8nICsgZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1maWxlc2l6ZS1jZWxsIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZW50ZXItc2l6ZS1jb2x1bW4taWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzb2x2ZXJGbl09XCJyZXNvbHZlckZuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImdldENlbGxUb29sdGlwKHJvdywgY29sKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ3RleHQnXCIgW2F0dHIudGFiaW5kZXhdPVwiZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbik/IDAgOiAtMVwiIGNsYXNzPVwiYWRmLWNlbGwtdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIid0ZXh0XycgKyBkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWRhdGF0YWJsZS1jZWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29weUNvbnRlbnRdPVwiY29sLmNvcHlDb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc29sdmVyRm5dPVwicmVzb2x2ZXJGblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJnZXRDZWxsVG9vbHRpcChyb3csIGNvbClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidib29sZWFuJ1wiIFthdHRyLnRhYmluZGV4XT1cImRhdGEuZ2V0VmFsdWUocm93LCBjb2wsIHJlc29sdmVyRm4pPyAwIDogLTFcIiBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYm9vbGVhbl8nICsgZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1ib29sZWFuLWNlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc29sdmVyRm5dPVwicmVzb2x2ZXJGblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJnZXRDZWxsVG9vbHRpcChyb3csIGNvbClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidqc29uJ1wiIFthdHRyLnRhYmluZGV4XT1cImRhdGEuZ2V0VmFsdWUocm93LCBjb2wsIHJlc29sdmVyRm4pPyAwIDogLTFcIiBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtanNvbi1jZWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZWRpdGFibGVdPVwiY29sLmVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc29sdmVyRm5dPVwicmVzb2x2ZXJGblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2Ftb3VudCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbik/IDAgOiAtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYW1vdW50XycgKyBkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWFtb3VudC1jZWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNvbHZlckZuXT1cInJlc29sdmVyRm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1cnJlbmN5Q29uZmlnXT1cImNvbC5jdXJyZW5jeUNvbmZpZ1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbik/IDAgOiAtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInbnVtYmVyXycgKyBkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLW51bWJlci1jZWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNvbHZlckZuXT1cInJlc29sdmVyRm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlY2ltYWxDb25maWddPVwiY29sLmRlY2ltYWxDb25maWdcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQgY2xhc3M9XCJhZGYtY2VsbC12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIGVtcHR5IGNlbGwgZm9yIHVua25vd24gY29sdW1uIHR5cGUgLS0+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC50ZW1wbGF0ZVwiIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCIgW2F0dHIudGFiaW5kZXhdPVwiY29sLmZvY3VzID8gMCA6IG51bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbC50ZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogeyBkYXRhOiBkYXRhLCByb3c6IHJvdywgY29sOiBjb2wgfSwgdmFsdWU6IGRhdGEuZ2V0VmFsdWUocm93LCBjb2wsIHJlc29sdmVyRm4pIH1cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBSb3cgYWN0aW9ucyAocmlnaHQpIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICFzaG93UHJvdmlkZWRBY3Rpb25zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoKGFjdGlvbnMgJiYgYWN0aW9uc1Bvc2l0aW9uID09PSAncmlnaHQnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKG1haW5BY3Rpb25UZW1wbGF0ZSAmJiBzaG93TWFpbkRhdGF0YWJsZUFjdGlvbnMpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsIGFkZi1kYXRhdGFibGVfX2FjdGlvbnMtY2VsbCBhZGYtZGF0YXRhYmxlLWNlbnRlci1hY3Rpb25zLWNvbHVtbi1pZSBhZGYtZGF0YXRhYmxlLWFjdGlvbnMtbWVudVwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoYWN0aW9ucyAmJiBhY3Rpb25zUG9zaXRpb24gPT09ICdyaWdodCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiICNhY3Rpb25zTWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldEhpZGVBY3Rpb25zV2l0aG91dEhvdmVyQ2xhc3MoYWN0aW9uc01lbnVUcmlnZ2VyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5ST1dfT1BUSU9OX0JVVFRPTicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FERi1EQVRBVEFCTEUuQ09OVEVOVC1BQ1RJT05TLlRPT0xUSVAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiJ2FjdGlvbl9tZW51X3JpZ2h0XycgKyBpZHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2FjdGlvbl9tZW51XycgKyBpZHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhY3Rpb25zTWVudVRyaWdnZXIub3Blbk1lbnUoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgZ2V0Um93QWN0aW9ucyhyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCJhY3Rpb24udGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhY3Rpb24udGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFjdGlvbi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25FeGVjdXRlUm93QWN0aW9uKHJvdywgYWN0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJhY3Rpb24uaWNvblwiPnt7IGFjdGlvbi5pY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgYWN0aW9uLnRpdGxlIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2FkZi1kYXRhdGFibGUtcm93PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRW1wdHkoKVwiIHJvbGU9XCJyb3dcIiBjbGFzcz1cImFkZi1kYXRhdGFibGUtcm93XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1uby1jb250ZW50LWNvbnRhaW5lciBhZGYtZGF0YXRhYmxlLWNlbGxcIiByb2xlPVwiZ3JpZGNlbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwibm9Db250ZW50VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdGb3IgW25nRm9yT2ZdPVwiW2RhdGFdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0ZvclRlbXBsYXRlXT1cIm5vQ29udGVudFRlbXBsYXRlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYWRmLWVtcHR5LWxpc3RcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9QZXJtaXNzaW9uc1Jvd1RlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIHJvbGU9XCJyb3dcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1yb3cgYWRmLW5vLXBlcm1pc3Npb25fX3Jvd1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtbm8tcGVybWlzc2lvbl9fY2VsbCBhZGYtbm8tY29udGVudC1jb250YWluZXIgYWRmLWRhdGF0YWJsZS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIm5vUGVybWlzc2lvblRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdGb3IgW25nRm9yT2ZdPVwiW2RhdGFdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nRm9yVGVtcGxhdGVdPVwibm9QZXJtaXNzaW9uVGVtcGxhdGVcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nUm93VGVtcGxhdGU+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLXJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1uby1jb250ZW50LWNvbnRhaW5lciBhZGYtZGF0YXRhYmxlLWNlbGxcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJsb2FkaW5nVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ0ZvciBbbmdGb3JPZl09XCJbZGF0YV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdGb3JUZW1wbGF0ZV09XCJsb2FkaW5nVGVtcGxhdGVcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==
|