@annalib/anna-core 21.0.6 → 21.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.mjs +3 -3
- package/fesm2015/annalib-anna-core.mjs +2 -2
- package/fesm2015/annalib-anna-core.mjs.map +1 -1
- package/fesm2020/annalib-anna-core.mjs +2 -2
- package/fesm2020/annalib-anna-core.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -684,10 +684,10 @@ export class AnnaNonEditableGenericTableComponent {
|
|
|
684
684
|
}
|
|
685
685
|
}
|
|
686
686
|
AnnaNonEditableGenericTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AnnaNonEditableGenericTableComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.AnnaSortService }, { token: i2.AnnaDateTimeFormatService }, { token: i3.AnnaFilterService }], target: i0.ɵɵFactoryTarget.Component });
|
|
687
|
-
AnnaNonEditableGenericTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AnnaNonEditableGenericTableComponent, selector: "anna-core-non-editable-generic-table-lib", inputs: { showSkeletonLoading: "showSkeletonLoading", tableHeaders: "tableHeaders", tableData: "tableData", clonedTableData: "clonedTableData", gtGeneralConfig: "gtGeneralConfig", totalRowInfo: "totalRowInfo", gtDimension: "gtDimension", tableClass: "tableClass", maximumRowsWhichCanBeRenderedWithoutScroll: "maximumRowsWhichCanBeRenderedWithoutScroll", fixNumberOfRowsForPopup: "fixNumberOfRowsForPopup", limit: "limit", includeBorderInTableHeight: "includeBorderInTableHeight", downloadInProgress: "downloadInProgress", percentDone: "percentDone", starredInProgress: "starredInProgress", clickableRow: "clickableRow", setTableHeightWhenRowSizeIsFixed: "setTableHeightWhenRowSizeIsFixed", tableBorderBottomClassRequired: "tableBorderBottomClassRequired", hideSomeTds: "hideSomeTds", tdsHaveRowSpan: "tdsHaveRowSpan", multipleTablesPresent: "multipleTablesPresent" }, outputs: { toggleCheckbox: "toggleCheckbox", toggleRowCheckbox: "toggleRowCheckbox", toggleHeaderCheckbox: "toggleHeaderCheckbox", undoIconClicked: "undoIconClicked", filterAppliedToTable: "filterAppliedToTable", sortingAppliedToTable: "sortingAppliedToTable", rowClicked: "rowClicked", radioButtonSelected: "radioButtonSelected", columnFilterOpened: "columnFilterOpened", columnFilterClosed: "columnFilterClosed", gtIconClicked: "gtIconClicked", gtSVGIconClicked: "gtSVGIconClicked", gtTextActionClicked: "gtTextActionClicked", gtViewDetailClicked: "gtViewDetailClicked", gtInnerHTMLClicked: "gtInnerHTMLClicked", downloadSpotDetails: "downloadSpotDetails", clickableDataClicked: "clickableDataClicked", totalRowIconClicked: "totalRowIconClicked", notificationIconHover: "notificationIconHover", notificationIconHoverLeave: "notificationIconHoverLeave", editableInputEdited: "editableInputEdited", radioButtonMessageIconClicked: "radioButtonMessageIconClicked" }, viewQueries: [{ propertyName: "viewChildTableHeaders", predicate: ["tableHeader"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"table-container {{gtGeneralConfig?.tableOuterContainerName}} {{tableBottomBorderClass}}\"\r\n [ngClass]=\"{ 'scroll-left-shadow-effect': isScrolledLeft, 'clickable-row': clickableRow, 'no-data-table': (isNoDataToDisplaySubject$ | async) }\"\r\n (scroll)=\"onTableContainerScroll($event)\">\r\n <div [class]=\"gtGeneralConfig.tableContainerName\" class=\"horizontal-scroll-for-table-container\" [ngStyle]=\"{\r\n height:\r\n tableData.length < maximumRowsWhichCanBeRenderedWithoutScroll\r\n ? 'calc(' +\r\n ((gtDimension.rowHeight) * tableData.length +\r\n (!tableData.length || !gtGeneralConfig.totalRow\r\n ? gtDimension.headerHeight\r\n : gtDimension.headerHeight + gtDimension.rowHeight)) +\r\n 'px)'\r\n : gtDimension.tableHeight\r\n }\">\r\n <table class=\"gt\" [ngClass]=\"tableClass\" mat-table [dataSource]=\"renderedData\">\r\n <tr class=\"header-row\" mat-header-row *matHeaderRowDef=\"tableColumns; sticky: true\"\r\n [style.height.px]=\"gtDimension.headerHeight\"></tr>\r\n <tr class=\"total-row\" mat-header-row [style.height.px]=\"gtDimension.rowHeight\"\r\n *matHeaderRowDef=\"totalRowColumns; sticky: true\" [class.hidden]=\"\r\n showSkeletonLoading ||\r\n (!showSkeletonLoading && !tableData.length ) ||\r\n (isNoDataToDisplaySubject$ | async) || \r\n (!showSkeletonLoading && !gtGeneralConfig.totalRow)\r\n \"></tr>\r\n <tr [class]=\"rowData.gtClass\" [ngClass]=\"{'no-border-tr': (isNoDataToDisplaySubject$ | async)}\" mat-row\r\n *matRowDef=\"let rowData; columns: tableColumns\" [style.height.px]=\"gtDimension.rowHeight\"\r\n (click)=\"dataRowClicked(rowData)\"></tr>\r\n\r\n <!-- TOTAL ROW -->\r\n <ng-container [matColumnDef]=\"column.colName\" *ngFor=\"let column of totalRowInfo; trackBy: trackByFn\">\r\n <td mat-header-cell *matHeaderCellDef [attr.colspan]=\"column.colspan\" class=\"{{column.class}}\">\r\n\r\n <ng-container *ngIf=\"column['isActionColumn']\">\r\n <a *ngFor=\"let data of column.actionData\" [class]=\"data.class\"\r\n (click)=\"onClickableDataClicked({}, data.id)\">\r\n {{ data.name }}\r\n </a>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column['isIconColumn']\">\r\n <i class=\"{{column?.iconData?.class}}\" (click)=\"iconClickedInTotalRow(column?.colName)\">\r\n </i>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!column['isActionColumn']\">\r\n <strong class=\"upper-label\">{{ column.data }}</strong>\r\n <ng-container *ngIf=\"column.lowerData\">\r\n <br>\r\n <span *ngIf=\"column.colName == 'total-potential-booked-unit' && gtGeneralConfig.component == 'RATING';\r\n else columnLowerData\" class=\"clickable-data\"\r\n (click)=\"spotDetailsDownloadClicked('TOTALROW')\"\r\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\">{{ column.lowerData }}\r\n <span class=\"material-icons spot-details-download-icons\">get_app</span>\r\n <ng-container *ngIf=\"downloadInProgress \r\n && selectedRowTypeForDownload == 'TOTALROW' \">\r\n <ng-container [ngTemplateOutlet]=\"circularProgressBar\"></ng-container>\r\n </ng-container>\r\n </span>\r\n <ng-template #columnLowerData>\r\n <span class=\"lower-label\">{{ column.lowerData }}</span>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.tooltipMessage && gtGeneralConfig.component != 'LUR_VIOLATIONS'\">\r\n <i class=\"{{column.tooltipIconClass}}\" container=\"body\" [ngbTooltip]=\"column.tooltipMessage\"\r\n tooltipClass=\"gt-total-row-tooltip\" placement=\"bottom\"></i>\r\n </ng-container>\r\n <ng-container *ngIf=\"gtGeneralConfig.component == 'LUR_VIOLATIONS' && column.tooltipMessage\">\r\n <i class=\"mi mdi-info-outline info-label\" container=\"body\"\r\n [ngbTooltip]=\"lurViolationTotalRowToolTip\" tooltipClass=\"gt-total-row-tooltip\"\r\n placement=\"bottom\"></i>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <!-- MAIN ROW -->\r\n <ng-container [matColumnDef]=\"columnDef.headerInfo[0].objectKey\"\r\n *ngFor=\"let columnDef of tableHeaders; trackBy: trackByFn\">\r\n <th #tableHeader nowrap mat-header-cell *matHeaderCellDef [style.width]=\"columnDef.width\">\r\n <div class=\"row mx-0\" *ngFor=\"let header of columnDef.headerInfo; let j = index;\">\r\n <p *ngIf=\"header.typeOfHeaderData === 'STRING'\"\r\n [ngClass]=\"{ 'upper-label': j === 0, 'lower-label': j === 1 }\">\r\n <ngx-skeleton-loader *ngIf=\"header.name == null\" count=\"1\"\r\n [theme]=\"{ height: '10px', display: 'block', width: columnDef.width, 'max-width':'calc(100% - 20px)' }\">\r\n </ngx-skeleton-loader>\r\n <ng-container *ngIf=\"header.name\">\r\n {{ header.name }}\r\n </ng-container>\r\n\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'impsInfoTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"impsInfoTooltip\" container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'spotsColumnEquivalizationMessageTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" container=\"body\" #t=\"ngbTooltip\"\r\n container=\"body\" [ngbTooltip]=\"spotsColumnEquivalizationMessageTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'underDeliveryTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" container=\"body\" #t=\"ngbTooltip\"\r\n container=\"body\" [ngbTooltip]=\"underDeliveryTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'overDeliveryTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" container=\"body\" #t=\"ngbTooltip\"\r\n container=\"body\" [ngbTooltip]=\"overDeliveryTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'ratingInfoTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"ratingInfoTooltip\" container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'rateInfoTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"rateInfoTooltip\" container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'ongoingRevBookedColumnTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"ongoingRevBookedColumnTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'completedRevBookedColumnTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"completedRevBookedColumnTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedRate'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"avgBookedRate\" placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedRtg'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"avgBookedRtg\" placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedImps'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"avgBookedImps\" placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'automationTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"automationTooltip\" placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'rebateImpact'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"rebateImpact\" placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n </p>\r\n\r\n <ng-container *ngIf=\"header.typeOfHeaderData === 'CHECKBOX'\">\r\n <span *ngIf=\"gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\" (click)=\"selectUnselectAllRows()\">\r\n check_box\r\n </span>\r\n <span *ngIf=\"!gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{ 'disable-checkbox': gtGeneralConfig.disableHeaderCheckbox }\"\r\n (click)=\"selectUnselectAllRows()\">\r\n check_box_outline_blank\r\n </span>\r\n </ng-container>\r\n\r\n <div *ngIf=\"gtGeneralConfig.showAllColumnFilter\" class=\"sort-filter-container\">\r\n <ng-container *ngIf=\"header.showTooltipIcon\">\r\n <!-- Active tooltip Functionality -->\r\n <ng-container *ngIf=\"header.filter === 'CHECKBOX'\">\r\n\r\n <span class=\"mdi mdi-filter-variant\" [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys], \r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\" [ngbTooltip]=\"filterTooltip\" placement=\"{{filterAlignment}}\"\r\n container=\"body\" tooltipClass=\"non-edit-checkbox-tooltip\"\r\n [autoClose]=\"'outside'\" triggers=\"manual\" #t=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t, header)\" (hidden)=\"closeTooltip()\">\r\n </span><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'SLIDER'\">\r\n <span class=\"mdi mdi-filter-variant\" [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\" [ngbTooltip]=\"sliderToolTip\" placement=\"bottom left-top\" container=\"body\"\r\n tooltipClass=\"non-edit-slider-tooltip\" [autoClose]=\"'outside'\" triggers=\"manual\"\r\n #t1=\"ngbTooltip\" (click)=\"bindTheValueToToolTip(t1, header)\"\r\n (hidden)=\"closeTooltip()\">\r\n </span><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'DATE'\">\r\n <span class=\"mdi mdi-filter-variant\" [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\" [ngbTooltip]=\"datePickerTooltip\" placement=\"bottom auto\" container=\"body\"\r\n tooltipClass=\"non-edit-datepicker-tooltip\" [autoClose]=\"'outside'\"\r\n triggers=\"manual\" #t2=\"ngbTooltip\" (click)=\"bindTheValueToToolTip(t2, header)\"\r\n (hidden)=\"closeTooltip()\">\r\n </span><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'WEEK'\">\r\n <span class=\"mdi mdi-filter-variant\" [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\" [ngbTooltip]=\"weekPickerToolTip\" placement=\"bottom left-top\"\r\n container=\"body\" [autoClose]=\"'outside'\" triggers=\"manual\" #t3=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t3, header)\" (hidden)=\"closeTooltip()\">\r\n </span><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'TIME'\">\r\n <span class=\"mdi mdi-filter-variant\" [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\" [ngbTooltip]=\"timeFilterToolTip\" placement=\"bottom left-top auto\"\r\n container=\"body\" tooltipClass=\"non-edit-time-tooltip\" [autoClose]=\"'outside'\"\r\n triggers=\"manual\" #t4=\"ngbTooltip\" (click)=\"bindTheValueToToolTip(t4, header)\"\r\n (hidden)=\"closeTooltip()\">\r\n </span><br />\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!header.showTooltipIcon\">\r\n <span id=\"no-filter-space\"></span><br />\r\n </ng-container>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'lurViolationInfoTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"lurViolationInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n\r\n </div>\r\n </div>\r\n </th>\r\n\r\n <ng-container *matCellDef=\"let ROW_DATA\">\r\n <td mat-cell [style.background]=\"ROW_DATA.backgroundColor\" [style.border]=\"ROW_DATA.border\"\r\n class=\"{{ROW_DATA.rowClass}}\"\r\n [attr.rowspan]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'Rowspan']\"\r\n *ngIf=\"!hideSomeTds ||( hideSomeTds && !ROW_DATA['hide' + columnDef.headerInfo[0].objectKey + 'Td'])\">\r\n <ngx-skeleton-loader *ngIf=\"showSkeletonLoading\" count=\"1\"\r\n [theme]=\"{ height: '10px', display: 'block' }\">\r\n </ngx-skeleton-loader>\r\n\r\n <ng-container *ngIf=\"!showSkeletonLoading\">\r\n <ng-container *ngIf=\"tableData.length > 0 && !(isNoDataToDisplaySubject$ | async)\">\r\n <ng-container\r\n *ngFor=\"let subline of columnDef.headerInfo; let subLineIndex = index; trackBy: trackByFn\">\r\n <div showEllipsisTextOnHover>\r\n <ng-container [ngSwitch]=\"columnDef.headerInfo[subLineIndex].typeOfBodyData\">\r\n <ng-container *ngSwitchCase=\"'ICON'\">\r\n <i *ngIf=\"!(starredInProgress && ROW_DATA.orderId == selectedStarredOrderId)\"\r\n [class]=\"ROW_DATA.iconClass\"\r\n (click)=\"iconClicked(ROW_DATA,ROW_DATA.iconClass)\"\r\n ngbTooltip=\"{{ ROW_DATA.iconTitleText }}\" placement=\"bottom\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"></i>\r\n <ng-container\r\n *ngIf=\"starredInProgress && ROW_DATA.orderId == selectedStarredOrderId\">\r\n <div class=\"spinner-for-button-directive\"></div>\r\n </ng-container>\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'ICON_CELL'\">\r\n <ng-container\r\n *ngFor=\"let action of ROW_DATA[columnDef.headerInfo[subLineIndex].actionKey]\">\r\n\r\n <i *ngIf=\"action.showIcon\" [class]=\"action.iconClass\"\r\n (mouseenter)=\"mouseEnterOnStringTextActionType(ROW_DATA, columnDef.headerInfo[subLineIndex].tooltipKey)\"\r\n placement=\"bottom auto\" container=\"body\" [autoClose]=\"true\"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"action.showTooltip ? userLoggedInDetails : null\"\r\n (click)=\"textActionClicked(ROW_DATA, action.id, columnDef.headerInfo[subLineIndex])\"\r\n [disableTooltip]=\"!action.showTooltip\">\r\n </i>\r\n\r\n <ng-container *ngIf=\"action.showObjectKey\">\r\n {{ ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey] }}\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'HTML_STRING'\">\r\n <p [innerHTML]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n (click)=\"innerHTMLCellClicked($event,ROW_DATA)\"></p>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'SVG_ICON'\">\r\n <anna-core-anna-icon-column [componentName]=\"gtGeneralConfig.component\"\r\n [dataObject]=\"ROW_DATA\"\r\n [iconToShow]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey] \"\r\n (onColumnIconClicked)=\"svgIconClicked($event)\"></anna-core-anna-icon-column>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'TEXT_ACTIONS'\">\r\n <ng-container\r\n *ngFor=\"let text of ROW_DATA[columnDef.headerInfo[subLineIndex].actionKey]\">\r\n <button *ngIf=\"text.showTooltip\"\r\n (click)=\"textActionClicked(ROW_DATA,text.id, columnDef.headerInfo[subLineIndex])\"\r\n [disabled]=\"text.isDisabled\" class=\"{{text.class}}\"\r\n (mouseenter)=\"mouseEnterOnTextActionType(ROW_DATA, columnDef.headerInfo[subLineIndex].tooltipKey)\"\r\n [ngbTooltip]=\"textActionTooltipTemplate\" placement=\"auto\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\">\r\n {{ text.name}}\r\n </button>\r\n\r\n <button *ngIf=\"!text.showTooltip\"\r\n (click)=\"textActionClicked(ROW_DATA,text.id, columnDef.headerInfo[subLineIndex])\"\r\n [disabled]=\"text.isDisabled\" class=\"{{text.class}}\">\r\n {{text.name}}\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CHECKBOX'\">\r\n <span *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n [ngClass]=\"{\r\n 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\" class=\"material-icons custom-column-checkbox-checked\" (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n false\r\n )\r\n \">\r\n check_box\r\n </span>\r\n <span *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n class=\"material-icons custom-column-checkbox-unchecked\" [ngClass]=\"{\r\n 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\" (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n true\r\n )\r\n \">\r\n check_box_outline_blank\r\n </span>\r\n\r\n <ng-container\r\n *ngFor=\"let action of ROW_DATA[columnDef.headerInfo[subLineIndex].actionKey]\">\r\n <i *ngIf=\"action.showIcon\" [class]=\"action.iconClass\"\r\n [ngClass]=\"{'disabled': action.disabledIcon}\"\r\n (mouseenter)=\"mouseEnterOnStringTextActionTypeContainingTable(ROW_DATA, columnDef.headerInfo[subLineIndex].tooltipKey)\"\r\n placement=\"bottom auto\" container=\"body\" [autoClose]=\"true\"\r\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\r\n [ngbTooltip]=\"tooltipContainingTableTemplate\">\r\n </i>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CLICKABLE_DATA'\">\r\n <a *ngFor=\"let text of ROW_DATA[columnDef.headerInfo[subLineIndex].actionKey]\"\r\n [class]=\"text.class\"\r\n (click)=\"onClickableDataClicked(ROW_DATA, text.id)\">\r\n {{ text.name }}\r\n </a>\r\n <span\r\n *ngIf=\"subline.objectKey == 'displayBookedUnits' && gtGeneralConfig.component == 'RATING'\"\r\n class=\"clickable-data\"\r\n (click)=\"spotDetailsDownloadClicked('DATAROW', ROW_DATA)\"\r\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\">{{\r\n ROW_DATA.displayBookedUnits}}\r\n <span\r\n class=\"material-icons spot-details-download-icons\">get_app</span>\r\n <ng-container *ngIf=\"downloadInProgress \r\n && ROW_DATA.inventoryCodeId == selectedInventoryIdForDownload \r\n && ROW_DATA.demographic == selectedDemographicForDownload \">\r\n <ng-container\r\n [ngTemplateOutlet]=\"circularProgressBar\"></ng-container>\r\n </ng-container>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING___ICON_OR_TEXT_ACTION'\">\r\n <ng-container\r\n *ngFor=\"let action of ROW_DATA[columnDef.headerInfo[subLineIndex].actionKey]\">\r\n <span [class]=\"action.additionalTextBeforeLinkClass\"\r\n [innerHtml]=\"action.additionalTextBeforeLink\"\r\n ngbTooltip=\"{{ action.additionalTextBeforeLink }}\"\r\n placement=\"bottom\" container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"!action.enableTooltipForAdditionalText\"></span>\r\n\r\n <ng-container *ngIf=\"action && action.typeOfData== 'STRING'\">\r\n {{ action.data }}\r\n </ng-container>\r\n\r\n <a [id]=\"action.id\" *ngIf=\"action.showLink\"\r\n (click)=\"textActionClicked(ROW_DATA, action.id, columnDef.headerInfo[subLineIndex])\"\r\n [class]=\"action.linkClass\"\r\n [ngClass]=\"{'disabled': action.disabledLink}\">{{action.data}}</a>\r\n <span ngbTooltip=\"{{ action.additionalTextAfterLink }}\"\r\n placement=\"bottom\" container=\"body\"\r\n [class]=\"action.additionalTextAfterLinkClass\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"!action.enableTooltipForAdditionalAfterText\">\r\n {{ action.additionalTextAfterLink }}\r\n </span>\r\n\r\n <ng-container *ngIf=\"action.showTooltip\">\r\n <ng-container *ngIf=\"action.tooltipData.innerHtml\">\r\n\r\n <i *ngIf=\"action.showIcon\" [class]=\"action.iconClass\"\r\n [ngClass]=\"{'disabled': action.disabledIcon}\"\r\n (mouseenter)=\"mouseEnterOnStringTextActionTypeContainingTable(ROW_DATA, columnDef.headerInfo[subLineIndex].tooltipKey)\"\r\n placement=\"bottom auto\" container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\r\n [ngbTooltip]=\"tooltipContainingTableTemplate\">\r\n </i>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!action.tooltipData.tooltipTableBody\">\r\n <i *ngIf=\"action.showIcon\" [class]=\"action.iconClass\"\r\n [ngClass]=\"{'disabled': action.disabledIcon}\"\r\n (click)=\"iconClickedOnStringIconActionType(ROW_DATA, action.id, columnDef.headerInfo[subLineIndex])\"\r\n (mouseleave)=\"mouseLeaveTextActionType(ROW_DATA)\"\r\n (mouseenter)=\"mouseEnterOnStringTextActionType(ROW_DATA, columnDef.headerInfo[subLineIndex].tooltipKey)\"\r\n [placement]=\"action.tooltipPlacement ? action.tooltipPlacement : 'bottom auto'\"\r\n container=\"body\" [autoClose]=\"true\"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class {{ action.tooltipClass }}\"\r\n [ngbTooltip]=\"markAsReadTip\">\r\n </i>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!action.showTooltip\">\r\n <i *ngIf=\"action.showIcon\" [class]=\"action.iconClass\"\r\n [ngClass]=\"{'disabled': action.disabledIcon}\"\r\n (click)=\"iconClickedOnStringIconActionType(ROW_DATA, action.id, columnDef.headerInfo[subLineIndex])\">\r\n </i>\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING_OR_INPUT'\">\r\n <ng-container *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]?.type == 'STRING';\r\n else inputBox\">\r\n <span\r\n [innerHtml]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]?.value\"></span>\r\n </ng-container>\r\n <ng-template #inputBox>\r\n <input\r\n placeholder=\"{{ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]?.placeholder}}\"\r\n showEllipsisTextOnHover\r\n class=\"{{ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].className}}\"\r\n (keydown)=\"changesMadeInEditableInputBox($event,ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey], false)\"\r\n (paste)=\"changesMadeInEditableInputBox($event, ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey], true)\"\r\n (ngModelChange)=\"editableInputValueChanged($event, ROW_DATA, columnDef.headerInfo[subLineIndex].objectKey)\"\r\n [ngModel]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].value\"\r\n [disabled]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].disabled\"\r\n [ngClass]=\"{'red-border': ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].hasError }\">\r\n\r\n <i *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].showIcon\"\r\n container=\"body\"\r\n [ngbTooltip]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].iconTooltip\"\r\n tooltipClass=\"gt-total-row-tooltip\" placement=\"bottom\"\r\n class=\"{{ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].iconClass}}\">\r\n </i>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'HTML'\">\r\n <span\r\n [innerHtml]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"></span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'SINGLE_RADIO'\">\r\n <span *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n [ngClass]=\"{\r\n 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n class=\"mdi mdi-radiobox-marked\" (click)=\"\r\n null\r\n \">\r\n\r\n </span>\r\n <span *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n class=\"mdi mdi-radiobox-blank\" [ngClass]=\"{\r\n 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\" (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n true\r\n )\r\n \">\r\n\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'RADIO'\">\r\n <mat-radio-group *ngIf=\"ROW_DATA['RadioButtonConfig']\"\r\n [ngModel]=\"ROW_DATA[subline.objectKey]\"\r\n [disabled]=\"ROW_DATA['RadioButtonConfig'][0].isDisabled\">\r\n <ng-container\r\n *ngFor=\"let radioButton of ROW_DATA['RadioButtonConfig']; let last = last\">\r\n <mat-radio-button value=\"{{ radioButton.value }}\"\r\n class=\"{{ radioButton.class }}\" (click)=\"\r\n radioButtonClicked(\r\n ROW_DATA,\r\n radioButton.value,\r\n ROW_DATA['RadioButtonConfig'][0].isDisabled\r\n )\r\n \">{{ radioButton.label }}\r\n </mat-radio-button>\r\n <i class=\" {{radioButton.iconClass}}\"\r\n (click)=\"radioButtonIconClicked(ROW_DATA)\"></i>\r\n <br *ngIf=\"!last\" />\r\n </ng-container>\r\n </mat-radio-group>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING_WITH_TOOLTIP'\">\r\n <ng-container\r\n *ngFor=\"let action of ROW_DATA[columnDef.headerInfo[subLineIndex].actionKey]\">\r\n <span> {{ action?.dataToDisplay }}</span>\r\n <span *ngIf=\"action?.showTooltip\"\r\n [ngbTooltip]=\"textActionTooltipTemplate\"\r\n (mouseenter)=\"mouseEnterOnStringTextActionType(ROW_DATA, columnDef.headerInfo[subLineIndex].tooltipKey)\"\r\n [placement]=\"action?.tooltipPosition\" container=\"body\"\r\n [class]=\"action?.tooltipIconClass\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"action?.disableTooltip\">\r\n </span>\r\n <span> {{ action?.dataToDisplayAfterTooltip }}</span>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n <ng-container *ngIf=\"subline.objectKey != 'description'\">\r\n <span>{{ ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n }}</span>\r\n <i *ngIf=\"subline.objectKey == 'inventoryCode' && ROW_DATA['isSellerGroup'] && gtGeneralConfig.component == 'RATING' \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n [ngbTooltip]=\"sellerHierarchyTooltip\" placement=\"bottom auto\"\r\n container=\"body\" [autoClose]=\"true\" triggers=\"manual\"\r\n (hidden)=\"closeTooltip()\" #info=\"ngbTooltip\"\r\n tooltipClass=\"hierarchy-tooltip remove-on-scroll-class\"\r\n (mouseenter)=\"bindTheValueToSellerGroupTooltip(ROW_DATA.sellerGroupHierarchy, info)\">\r\n </i>\r\n\r\n <i *ngIf=\"subline.objectKey == 'displayBookedAverageRating' && gtGeneralConfig.component == 'RATING' && ROW_DATA['showRatingAverageIcon'] \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n placement=\"bottom auto\" container=\"body\" [autoClose]=\"true\"\r\n (mouseenter)=\"setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\"\r\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"postedRatingDifference\">\r\n </i>\r\n\r\n <i *ngIf=\"subline.objectKey == 'displayBookedAverageImpression' && gtGeneralConfig.component == 'RATING' && ROW_DATA['showImpressionAverageIcon'] \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n placement=\"bottom auto\" container=\"body\" [autoClose]=\"true\"\r\n (mouseenter)=\"setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\"\r\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"postedImpDifference\">\r\n </i>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"subline.objectKey == 'description'\">\r\n <p\r\n *ngIf=\"ROW_DATA.descriptionMessage || ROW_DATA.descriptionEmailReferenceNum\">\r\n <ng-container *ngIf=\"ROW_DATA.descriptionMessage\">\r\n {{ ROW_DATA.descriptionMessage }}\r\n <br />\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"ROW_DATA.descriptionEmailReferenceNum != '-' && ROW_DATA.descriptionEmailReferenceNum != ''\">\r\n Email Ref: {{ ROW_DATA.descriptionEmailReferenceNum }}\r\n <br />\r\n </ng-container>\r\n </p>\r\n <a href=\"{{ ROW_DATA.descriptionDetailsUrl }}\" target=\"_blank\"\r\n *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'PDF' || ROW_DATA.descriptionDetailsUrlType === 'EXCEL'\">\r\n <button class=\"btn viewDetailsAndEmailBtn\">Download</button>\r\n </a>\r\n <ng-container\r\n *ngIf=\"ROW_DATA.activityname.toLowerCase() == 'order onboarded'\">\r\n <a *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'LINK'\"\r\n (click)=\"viewDetailsClicked(ROW_DATA)\">\r\n <button\r\n class=\"btn viewDetailsAndEmailBtn order-onboarded\">View\r\n details</button>\r\n </a>\r\n </ng-container>\r\n\r\n <a href=\"{{ ROW_DATA.descriptionEmailUrl }}\" target=\"_blank\"\r\n *ngIf=\"ROW_DATA.descriptionEmailUrl != '-' && ROW_DATA.descriptionEmailUrl != ''\">\r\n <button class=\"btn viewDetailsAndEmailBtn\">View email</button>\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"(isNoDataToDisplaySubject$ | async)\">\r\n <div>\r\n {{null}}\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </table>\r\n </div>\r\n <anna-core-no-data-lib [width]=\"noDataWidth\" [marginTop]=\"marginTop\" *ngIf=\"(isNoDataToDisplaySubject$ | async)\">\r\n </anna-core-no-data-lib>\r\n</div>\r\n\r\n<!-- Checkbox template -->\r\n<ng-template #filterTooltip>\r\n <anna-core-anna-column-checkbox-filter [tableData]=\"tableData\" [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\" [clonedTableData]=\"clonedTableData\" [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\" (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\">\r\n </anna-core-anna-column-checkbox-filter>\r\n</ng-template>\r\n\r\n<!-- Slider template -->\r\n<ng-template #sliderToolTip>\r\n <anna-core-anna-column-slider-filter [tableData]=\"tableData\" [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\" [clonedTableData]=\"clonedTableData\" [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\" (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\">\r\n </anna-core-anna-column-slider-filter>\r\n</ng-template>\r\n\r\n<!-- Date Picker Template -->\r\n<ng-template #datePickerTooltip>\r\n <anna-core-anna-column-date-range-filter [tableData]=\"tableData\" [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\" [clonedTableData]=\"clonedTableData\" [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\" (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\">\r\n </anna-core-anna-column-date-range-filter>\r\n</ng-template>\r\n\r\n<!-- Week Picker Template -->\r\n<ng-template #weekPickerToolTip>\r\n <!-- <div class=\"weekpicker-container\">\r\n <anna-core-week-calendar-filter-lib\r\n [week-calendar-config]=\"gtGeneralConfig.multiWeekPickerConfig\"\r\n (apply)=\"applyWeekFilter($event)\"\r\n [from-date]=\"calendarMinEnabledDate\"\r\n [to-date]=\"calendarMaxEnabledDate\"\r\n >\r\n </anna-core-week-calendar-filter-lib>\r\n </div> -->\r\n</ng-template>\r\n\r\n<!-- Time Filter Template -->\r\n<ng-template #timeFilterToolTip>\r\n <anna-core-anna-column-time-filter [tableData]=\"tableData\" [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\" [showAllTimeRangeCheckboxes]=\"showCheckboxesForTimeFilter\"\r\n [clonedTableData]=\"clonedTableData\" [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\" (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\">\r\n </anna-core-anna-column-time-filter>\r\n</ng-template>\r\n\r\n<ng-template #columnInfoTooltip>\r\n <p style=\"color: black;white-space: nowrap;\">This preemption is rejected and not marked for credit.</p>\r\n</ng-template>\r\n\r\n<ng-template #ratingInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked Rating' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected Rating' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #impsInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked IMPS' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected IMPS' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #spotsColumnEquivalizationMessageTooltip>\r\n <p class=\"spot-column-tooltip-message\">This consists of equivalized spots and un-equivalized Paid Programs &\r\n un-equivalized Non-spots.</p>\r\n</ng-template>\r\n\r\n<ng-template #underDeliveryTooltip>\r\n <p class=\"spot-column-tooltip-message\">Indicates the Under-delivery percentage based on booked and posted RTG/IMPS.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #overDeliveryTooltip>\r\n <p class=\"spot-column-tooltip-message\">Indicates the Over-delivery percentage based on booked and posted RTG/IMPS.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #rateInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked Rate' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected $ Value' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #sellerHierarchyTooltip>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length > 0\">\r\n <section class=\"hierarchy-table-container\">\r\n <table class=\"seller-hierarchy-table\">\r\n <thead>\r\n <tr>\r\n <th>#</th>\r\n <th>Inventory Codes</th>\r\n <th>Program/Description</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of sellerGroupHierarchy; let tooltipIndex = index\">\r\n <td>{{ tooltipIndex + 1 }}</td>\r\n <td>\r\n <span showEllipsisTextOnHover>{{ data.InventoryCode }}</span>\r\n </td>\r\n <td>\r\n <span showEllipsisTextOnHover>{{ data.Program }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </section>\r\n </ng-container>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length == 0\">\r\n <span style=\"color: #000\">Seller group not available for this inventory code</span>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #lurViolationInfoTooltip>\r\n <p class=\"first-row\">The values are for the entire week.</p>\r\n</ng-template>\r\n\r\n<ng-template #postedRatingDifference>\r\n <p class=\"difference-text\">The difference between posted and booked average rating is\r\n {{isDifferenceLessThan25Percent ? 'less' : 'more'}} than 25%.</p>\r\n</ng-template>\r\n\r\n<ng-template #postedImpDifference>\r\n <p class=\"difference-text\">The difference between posted and booked average impression is\r\n {{isDifferenceLessThan25Percent ? 'less' : 'more'}} than 25%.</p>\r\n</ng-template>\r\n\r\n<ng-template #ongoingRevBookedColumnTooltip>\r\n <p>The Booked $ value, Spots, GRP, CPP, IMPS, CPM corresponds on the last permanent revision generated</p>\r\n</ng-template>\r\n\r\n<ng-template #completedRevBookedColumnTooltip>\r\n <p>The Booked $ value corresponds on the last permanent revision generated</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedRate>\r\n <p>This is the booked average Rate</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedRtg>\r\n <p>This is the booked average RTG</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedImps>\r\n <p>This is the booked average IMP(\u2019000)</p>\r\n</ng-template>\r\n\r\n<ng-template #automationTooltip>\r\n <p>Please get the order business rules approved to activate the order for automation. Only for the\r\n automation-activated orders, any approved MGs, ADUs, or credited spots on ANNA will be fed into the traffic\r\n system i.e. ANNA revisions. Additionally, ANNA will only enter buyer revisions into traffic for the selected\r\n Medialine/WOC orders.</p>\r\n</ng-template>\r\n\r\n<ng-template #rebateImpact>\r\n <p>\r\n Rebate impact value is for the originally ordered spot length and is not equivalized.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #lurViolationTotalRowToolTip>\r\n <ul>\r\n <li>\r\n <strong>POLITICAL RATE VIOLATIONS:</strong>\r\n Violations flagged when non-political spots are booked at a rate lower than the minimum booked rate for\r\n political candidates for the same week, Inventory Code and Revenue Class.\r\n\r\n </li>\r\n <li>\r\n <strong>CANDIDATE TO CANDIDATE VIOLATION:</strong>\r\n Violations flagged when political spots are booked at different rates to other political spots for the same\r\n week, Inventory Code and Revenue Class.\r\n </li>\r\n </ul>\r\n\r\n</ng-template>\r\n\r\n<ng-template #circularProgressBar>\r\n <circle-progress [percent]=\"percentDone\" [radius]=\"5\" [showTitle]=\"false\" [showUnits]=\"false\" [showSubtitle]=\"false\"\r\n [outerStrokeWidth]=\"3\" [innerStrokeWidth]=\"3\" [space]=\"-3\" [outerStrokeColor]=\"'#268bff'\"\r\n [innerStrokeColor]=\"'#d5d5d5'\" [animationDuration]=\"10\"></circle-progress>\r\n</ng-template>\r\n\r\n\r\n<ng-template #userLoggedInDetails>\r\n <div class=\"tooltip-div-container\">\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n <span *ngIf=\"data.key != 'read'\">\r\n {{ data.key }} <b> {{data.value}}</b>\r\n </span>\r\n <span *ngIf=\"data.key == 'read'\">\r\n <b> {{data.value}}</b>\r\n </span>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #markAsReadTip>\r\n <div class=\"notification-tooltip-div-container\">\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{data.value}}\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #textActionTooltipTemplate>\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.key }} <b> {{data.value}}</b>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #tooltipContainingTableTemplate>\r\n <div *ngIf=\"tooltipContainingTable\" [innerHTML]=\"tooltipContainingTable.innerHtml\" class=\"notification-tooltip-div-container\">\r\n <!-- <ul>\r\n <li *ngFor=\"let headerMsg of tooltipContainingTable.tableHeaderMsg\">\r\n <b> {{headerMsg}} </b>\r\n </li>\r\n </ul>\r\n\r\n <table class=\"tooltip-table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let header of tooltipContainingTable.tooltipTableHeader\">\r\n {{ header}}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let rows of tooltipContainingTable.tooltipTableBody\">\r\n <td *ngFor=\"let data of rows\">\r\n {{ data }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <ul>\r\n <li style=\"margin-top:10px; padding:0\" *ngFor=\"let footerMsg of tooltipContainingTable.tableFooterMsg\">\r\n {{ footerMsg }} \r\n </li>\r\n </ul> -->\r\n\r\n </div>\r\n</ng-template>\r\n<!-- <ng-template #textActionTooltipTemplate>\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.key }} <b> {{data.value}}</b>\r\n </ng-container>\r\n</ng-template> -->", styles: [".sort-btn{background:white;border:none;border-right:1px solid #1b88ff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.07;letter-spacing:normal;color:#1b88ff;cursor:pointer;flex:1;text-align:center}.sort-btn:last-of-type{border-right:none}.sort-btn.active{color:#202b47;text-decoration:none}p.sort-container{margin-top:8px;padding-bottom:8px;border-bottom:1px solid #e6e6e6;margin-bottom:0;display:flex}::ng-deep .tooltip-inner{max-height:22rem;background-color:#fff;border:1px solid white;border-radius:5px;box-shadow:0 2px 2px #0000003d,0 0 2px #0000001f;max-width:251px;width:100%;padding:0!important}::ng-deep .tooltip-inner div.radio-container{flex-wrap:wrap}::ng-deep .md-drppicker{box-shadow:unset!important}::ng-deep .available{color:#999}::ng-deep .bs-tooltip-bottom .arrow:before{border-bottom-color:#fff!important}::ng-deep .bs-tooltip-left .arrow:before{border-left-color:#fff!important}::ng-deep .tooltip.show{opacity:1}.input{text-align:left;margin:5px 10px 5px 5px;display:flex;align-items:center;width:230px;white-space:nowrap}.data{color:#000;font-weight:700;margin-left:5px;margin-right:5px}span.data{display:inline-block;text-overflow:ellipsis;white-space:pre;width:100%;overflow:hidden}.check-box{font-size:14px;cursor:pointer;position:relative;top:-1px}span.mdi-filter.active{color:#000;opacity:1!important;pointer-events:all!important}p{margin-bottom:0;line-height:initial}span.mdi-filter{color:#cbcbcb}::ng-deep .ngx-slider-pointer{top:-5px!important;width:12px!important;height:12px!important;background:#bdbdbd!important;border:1px solid #ffffff!important;box-shadow:0 1px 3px #0000004d!important;border-radius:16px!important}input:focus{outline:none}input::placeholder{color:#c8c8c8}.cancel-btn{background:#c7e1ff;color:#268bff}.apply-btn{background:#268bff;color:#fff;margin-left:.3125rem}div.radio-container{display:flex;white-space:nowrap;justify-content:space-between;background-color:#f4f4f4;border-radius:.125rem;margin:.4375rem .4375rem .25rem}div.radio-container div{flex:1;width:50%}div.radio-container div.full-width{width:100%}div.radio-container input{position:relative;top:.125rem;margin-right:.25rem}div.radio-container label{font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:0;color:#4a4a4a;margin:0;padding-left:.125rem}div.radio-container label:first-of-type{margin-right:.188rem}div.radio-container input[type=radio]{appearance:none;display:inline-block;width:.9375rem;height:.9375rem;padding:.125rem;background-clip:content-box;border:.125rem solid #268bff;background-color:transparent;border-radius:50%}div.radio-container input[type=radio]:checked{background-color:#268bff}.checkbox-filter-buttons-container{padding:0 8px!important}.buttons-container{display:flex;margin:0px auto .4375rem;justify-content:center;padding:0 12px}.buttons-container .button{padding:0 10px;width:100%;margin:8px 0 0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.buttons-container button:last-of-type{background-color:#268bff;color:#fff;margin-left:.5rem}.buttons-container button.disabled{background:#bdbdbd;opacity:.5;color:#4a4a4a}.button{display:inline-block;margin:8px 4px 0 8px;padding:0 16px;border-radius:4px;text-align:center;outline:none;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;border:none;color:#268bff;background-color:#e5f1ff}.search-box{display:flex;align-items:center;color:#c8c8c8;border:1px solid #e6e6e6;border-radius:.125rem;margin:.25rem .4375rem .188rem;height:1.5rem;padding:.188rem 8px .188rem .5rem}.search-box .search-bar-close{margin-left:auto;float:right}.search-icon{margin:0 4px 0 0;font-size:1.125rem;color:#9b9b9b}.filter-icon{justify-content:right;margin-left:auto;color:#d4d4d4;color:#a1a1a1;font-size:16px;cursor:pointer}.data{margin:0 13px 0 8px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.86;letter-spacing:\"\";color:#4a4a4a}.search-input{margin:1px 0 1px 4px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#c8c8c8;width:calc(100% - 38px)}.check-box{color:#268bff}.tooltip-data-container{overflow-y:scroll;max-height:8rem}.searchbar{width:100%;display:flex;justify-content:flex-end;align-items:flex-end}.clear-button{opacity:.5;font-family:Roboto;font-size:.9375rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;text-decoration:underline;border:none;background-color:#fff;color:#4a4a4a;margin-left:.625rem;padding:0}.clear-button:focus{outline:none;box-shadow:none}.unchecked{color:#268bff}cdk-virtual-scroll-viewport.dropdown-data-container{max-height:12.3rem;width:100%;overflow-y:auto;overflow-x:hidden}cdk-virtual-scroll-viewport.dropdown-data-container p.input{margin-left:0}cdk-virtual-scroll-viewport.dropdown-data-container p.input span.mi{padding-left:.4375rem}cdk-virtual-scroll-viewport.dropdown-data-container p.input:hover{background-color:#ebebeb;cursor:pointer}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar{width:.188rem}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar-thumb{color:#d3d3d3;background:lightgray}section.min-maxContainer{display:flex;justify-content:center;margin-bottom:-.125rem;margin-top:.5rem;width:100%}section.min-maxContainer input{width:30%;height:1.875rem;border:1px solid lightgray;color:gray}section.min-maxContainer span{display:inline-block;padding-left:.5rem;padding-right:.5rem;position:relative;top:.3125rem;color:#666}.time-container{width:100%;display:flex;padding:0 .75rem}.time-container input.form-control:disabled{background-color:#fff;width:2.813rem}.time-container input.numberInput:focus{box-shadow:none;border-color:#c2cfd6}.time-container .dot{color:#cbcbcb;position:relative;left:-7px;font-size:17px}.time-container div.arrow-container{flex-direction:column;display:flex;margin-top:.375rem;width:9px;height:18px;margin-right:1.1875rem}.time-container div.arrow-container i{color:#000;cursor:pointer;max-height:9px;font-size:25px;width:10px}.time-container div.arrow-container i:before{width:0;height:0;pointer-events:none;position:relative;left:-9px;top:-11px}.mdi-filter{cursor:pointer}.time-label-container{display:flex;justify-content:flex-start}.time-label-container label{margin-bottom:0;color:#4a4a4a;margin-top:.125rem;margin-left:.625rem;font-weight:700}.time-heading{color:#000;font-size:.8125rem;text-align:left;padding-left:.625rem;margin-top:.625rem;font-weight:700}.column-clear-all{width:94%;text-align:center;border:none;font-size:14px;background:none;text-decoration:underline;color:#268bff}.checkbox-container{display:flex;padding-inline:.625rem}.checkbox-container .data{text-align:left}.checkbox-container:first-of-type{margin-top:.625rem;font-weight:500}.column-clear-all{width:94%;text-align:center;border:none;background:none;text-decoration:underline;color:#268bff}.column-clear-all:disabled{opacity:.5;color:#4a4a4a;font-weight:400}.column-clear-all.align-center{text-align:center}span.mdi-filter-variant.disabled{pointer-events:none;opacity:.5}.datepicker-container{width:100%}span.mdi-filter-variant{color:#cbcbcb;cursor:pointer;font-size:.875rem}span.mdi-filter-variant.active{color:#000}p.filter-tab{font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:normal;color:#1b88ff;border-radius:5px;background-color:#f4f4f4;padding-inline:8px;cursor:pointer;overflow:hidden;text-align:center;text-overflow:ellipsis}p.filter-tab.active{color:#fff;background-color:#1b88ff}button.filter-text-btn{background:white;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;border:none;color:#268bff;margin-inline:4px;margin-top:2px}button.filter-text-btn:disabled{color:#b1b1b1;cursor:not-allowed}::ng-deep .non-edit-datepicker-tooltip .tooltip-inner{max-width:310px!important;width:283px!important;overflow-y:initial!important;padding:0!important}input.slider-text::-webkit-outer-spin-button,input.slider-text::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input.slider-text{-moz-appearance:textfield}input.slider-text.red-border{border:1px solid #f44336!important}::ng-deep .checkbox-sort p.sort-container{margin-top:8px!important;padding-bottom:8px!important}i.mdi-close{cursor:pointer}i.mdi-close.disable-close-icon{pointer-events:none;cursor:not-allowed}input.error-border{border:1px solid #f44336!important}::ng-deep .non-edit-checkbox-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-slider-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-time-tooltip .tooltip-inner{width:250px!important;padding:0!important}::ng-deep .non-edit-time-tooltip.bs-tooltip-start{padding:.4rem}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow{right:0;top:5px!important;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow:before{border-left-color:#fff;left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height)}::ng-deep .no-bottom-border p.sort-container{border-bottom:none!important}::ng-deep .ngx-slider-pointer-min:after{display:none}::ng-deep .ngx-slider-pointer-max:after{display:none}::ng-deep .ngx-slider span.ngx-slider-pointer{width:12px;height:12px;top:-5px;background-color:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bar{height:3px;background:#ededed}::ng-deep .ngx-slider span.ngx-slider-selection{background:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bubble{bottom:-22px;font-size:12px;color:#333}::ng-deep .show-min.ngx-slider span.ngx-slider-model-value{background:white;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .show-max.ngx-slider span.ngx-slider-model-high{background:white;box-shadow:none}::ng-deep .ngx-slider span.ngx-slider-combined{background:white;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .ngx-slider{top:10px!important;margin:5px 0 2px!important}::ng-deep .ngx-slider-animate{top:0!important}.sidebar-slider{margin-bottom:35px!important;margin-left:5px;margin-right:5px}.slider-placeholder{height:14px}::ng-deep .filter-calendar select.form-select:focus{border-color:#c2cfd6;box-shadow:none}::ng-deep .filter-calendar select.form-select{background-color:#fff}.no-data-case{padding-left:.4375rem!important;font-size:.875rem!important;margin-top:10px!important;cursor:pointer}.check-mark,.unread-mark{cursor:pointer}.on-hover:hover .unread-mark,.notificationHover .check-mark{opacity:0;cursor:pointer}.on-hover:hover .check-mark{opacity:1;cursor:pointer}:host ::ng-deep .gt{table-layout:fixed;margin-bottom:0;width:100%}:host ::ng-deep .gt th,:host ::ng-deep .gt td{padding:2px 8px;line-height:normal}:host ::ng-deep .gt thead tr th .upper-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#4a4a4a;margin-bottom:0}:host ::ng-deep .gt thead tr th .lower-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#a7a7a7;margin-bottom:0}:host ::ng-deep .gt thead tr th{background-color:#ededed;position:sticky;position:-webkit-sticky;top:0;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .gt thead tr th br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt thead tr th div.row{display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;width:max-content}:host ::ng-deep .gt thead tr th div.sort-filter-container{display:flex;flex-wrap:nowrap;align-items:center;margin-left:.25rem;margin-right:auto}:host ::ng-deep .gt thead tr th span.mdi-filter-variant{font-size:13px!important;top:-1px!important;position:relative}:host ::ng-deep .gt thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4}:host ::ng-deep .gt tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td:nth-of-type(n + 2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td .upper-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#000;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr td .lower-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#a7a7a7;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt tbody tr:nth-of-type(1) td{border-top:none!important}:host ::ng-deep .gt .custom-column-checkbox-checked,:host ::ng-deep .gt .custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}:host ::ng-deep .gt .custom-column-checkbox-checked{color:#268bff}:host ::ng-deep .gt .custom-column-checkbox-unchecked{color:#4a4a4a}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:nth-of-type(n + 2){box-shadow:inset -1px 0 #d4d4d4}.table-container{overflow-x:auto;overflow-y:auto}.rowSelectCheckbox,#selectAllRowsCheckbox{cursor:pointer}.disable-checkbox{color:#dedede!important;pointer-events:none!important}.mdi-warning{color:#f3c639;font-size:16px;line-height:28px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{opacity:1}.redcolor-status{color:#c62a2a}#no-filter-space{width:.875rem}::ng-deep .mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:1.875rem!important;width:2.625rem;padding:0 .625rem}input.numberInput{margin-right:-.8125rem;padding:0 0 0 .625rem;height:1.875rem}::ng-deep .mat-button-toggle-checked{background-color:#268bff!important;color:#fff!important}::ng-deep .mat-button-toggle-group-appearance-standard{border-radius:0}.hidden{display:none}.no-data-div{margin-top:2.5px}.no-data-div label{margin:0;width:auto;font-weight:500;background-color:#d3d3d3;padding:.3125rem 1.125rem;border-radius:.25rem}.column-values:nth-of-type(2){color:#a7a7a7!important}.custom-column-checkbox-checked,.custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}.custom-column-checkbox-checked{color:#268bff}.custom-column-checkbox-unchecked{color:#4a4a4a}.time-filter-checkboxes>div>p{color:#151b1e}::ng-deep .margin-bottom-zero .mat-radio-label{margin-bottom:0}:host ::ng-deep mat-radio-group br{margin-top:0!important}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__background{width:var(--mat-radio-size);height:var(--mat-radio-size)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__inner-circle{border-width:calc(var(--mat-radio-size) / 2)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{margin:0 0 0 4px;padding:0;top:-2px;position:relative}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio--disabled+label{color:var(--primary-text-color-dark)!important}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{left:-94px;font-size:12px;color:#4a4a4a;position:relative}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:red}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:red}::ng-deep .mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:#00000061!important}::ng-deep .mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-inner-circle{background-color:#00000061!important}::ng-deep tr.white-background-row{background:white}::ng-deep tr.gray-background-row{background:rgba(233,233,233,.5)!important}.remarks-tooltip,.mdi-information,.mdi-information-outline,.seller-tooltip{font-size:.875rem;color:#268bff;position:relative;top:.1875rem;cursor:pointer}.seller-tooltip{top:-1px;float:right}::ng-deep .remarks-info-tooltip .tooltip-inner{max-width:19.25rem!important}.rating-icon,.lur-violation-icon{color:#268bff;cursor:pointer;position:relative;left:-2px}::ng-deep .rating-info-tooltip .tooltip-inner{max-width:800px!important}.spots-info-icon{color:#268bff;cursor:pointer;margin:1px 0 0 -13px}.spots-info-icon-ol{color:#268bff;cursor:pointer;margin:1px 4px 0 -14px}::ng-deep .spot-info-tooltip .tooltip-inner{position:relative;max-width:220px!important;background:#fff;word-break:break-word;display:flex}::ng-deep .spot-info-tooltip-for-orderlisting-table .tooltip-inner{max-width:220px!important;background:#fff;word-break:break-word;display:flex}p.first-row{padding:.5rem .5rem 0;color:#000;white-space:nowrap;text-align:left}p.second-row{padding:2px .5rem .5rem;color:#000;white-space:nowrap;text-align:left}::ng-deep .gt-total-row-tooltip{opacity:1!important}::ng-deep .gt-total-row-tooltip .tooltip-inner{color:#000;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;background-color:#fff;padding:4px!important;width:100%;border-radius:2px!important}::ng-deep .gt-total-row-tooltip .arrow:before{border-top-color:#fff!important}.info-label{margin-left:4px;color:#268bff;vertical-align:text-top}::ng-deep .hierarchy-tooltip{max-width:-moz-fit-content;max-width:fit-content;width:310px!important}::ng-deep .hierarchy-tooltip .tooltip-inner{padding:4px!important;max-width:22.75rem;max-height:11.25rem}table.seller-hierarchy-table{table-layout:fixed}table.seller-hierarchy-table tr th{font-family:Roboto;font-size:.75rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;color:#5e5e5e;white-space:nowrap;background:#ededed;position:sticky;box-shadow:inset 0 1px #d4d4d4;top:0;z-index:1}table.seller-hierarchy-table tr th:nth-child(1){width:20px}table.seller-hierarchy-table tr th:first-of-type,table.seller-hierarchy-table tr td:first-of-type{width:20px;border-left:1px solid #d4d4d4}table.seller-hierarchy-table tr th:last-of-type,table.seller-hierarchy-table tr td:last-of-type{border-right:1px solid #d4d4d4;width:7.875rem!important}table.seller-hierarchy-table tr th:nth-of-type(2){width:7.75rem!important}table.seller-hierarchy-table tr td{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#4a4a4a;box-shadow:none!important;border-top:1px solid #d4d4d4;border-bottom:1px solid #d4d4d4}table.seller-hierarchy-table tr td:nth-of-type(2),table.seller-hierarchy-table tr td:nth-of-type(3){padding-top:.25rem}table.seller-hierarchy-table tr td span{display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}section.hierarchy-table-container{max-height:8.75rem;overflow:auto}section.hierarchy-table-container::-webkit-scrollbar-track{margin-top:1.5rem}.difference-text{padding:.5rem;color:#000;text-align:left}::ng-deep .posted-avg-tooltip .tooltip-inner{width:13.8125rem!important}::ng-deep .drrBooked-info-tooltip{transform:translate(26px,6px)}::ng-deep .drrBooked-info-tooltip .tooltip-inner{max-width:307px!important;width:242px!important;background:#fff;word-break:break-word;display:flex;padding:4px!important;text-align:left}::ng-deep .drrBooked-info-tooltip .tooltip-inner p{color:#000}::ng-deep .drrBooked-info-tooltip .arrow:before{border-right-color:#fff!important}.clickable-data{cursor:pointer;color:#268bff!important;display:flex!important;align-items:center}.clickable-data .spot-details-download-icons{font-size:12px}.disabled-clickable-data{pointer-events:none;color:#d4d4d4!important}.spot-column-tooltip-message{color:#000;width:max-content;text-align:left}div.spinner-for-button-directive{position:relative;left:-1px}.clickable-row table tr.mat-row td{cursor:pointer!important}.tooltip-div-container{text-align:left!important;padding:12px 4px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.notification-tooltip-div-container{text-align:left!important;padding:6px 8px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.mdi-information,.mdi-information-outline{left:3px;top:1px}.mdi-information-outline{position:static}::ng-deep .team-user-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .team-user-tooltip .tooltip-inner{opacity:1!important;width:-moz-fit-content!important;width:fit-content!important;max-width:520px;border-radius:2px;padding:0 4px!important}::ng-deep .team-user-tooltip .tooltip-inner .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:white!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip{opacity:1!important}::ng-deep .gt-icon-column-tooltip .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:white!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .gt-icon-column-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip .tooltip-inner{width:100%}::ng-deep .tooltip-containing-table{opacity:1!important}::ng-deep .tooltip-containing-table .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:white!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .tooltip-containing-table.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .tooltip-containing-table li{margin:0!important;padding:0!important}::ng-deep .tooltip-containing-table ul{margin:0!important;padding-left:8px!important}::ng-deep .tooltip-containing-table .tooltip-inner{width:100%;max-width:230px}table.tooltip-table{table-layout:fixed;margin:4px 0 0;width:100%}table.tooltip-table th,table.tooltip-table td{padding:2px 8px;line-height:normal}table.tooltip-table thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4!important;border:none}table.tooltip-table thead tr th{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67;background-color:#ededed;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}table.tooltip-table thead tr th div.row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}table.tooltip-table tbody tr td{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67}table.tooltip-table tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}table.tooltip-table tbody tr td:nth-of-type(n + 2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}.bottom-border{border-bottom:1px solid #d4d4d4!important}i.disabled{pointer-events:none!important}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i5.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i7.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "component", type: i8.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i8.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i8.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i8.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i8.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i8.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i8.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i8.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i8.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i8.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i9.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["appearance", "animation", "theme", "loadingText", "count", "ariaLabel"] }, { kind: "component", type: i10.CircleProgressComponent, selector: "circle-progress", inputs: ["name", "class", "backgroundGradient", "backgroundColor", "backgroundGradientStopColor", "backgroundOpacity", "backgroundStroke", "backgroundStrokeWidth", "backgroundPadding", "radius", "space", "percent", "toFixed", "maxPercent", "renderOnClick", "units", "unitsFontSize", "unitsFontWeight", "unitsColor", "outerStrokeGradient", "outerStrokeWidth", "outerStrokeColor", "outerStrokeGradientStopColor", "outerStrokeLinecap", "innerStrokeColor", "innerStrokeWidth", "titleFormat", "title", "titleColor", "titleFontSize", "titleFontWeight", "subtitleFormat", "subtitle", "subtitleColor", "subtitleFontSize", "subtitleFontWeight", "imageSrc", "imageHeight", "imageWidth", "animation", "animateTitle", "animateSubtitle", "animationDuration", "showTitle", "showSubtitle", "showUnits", "showImage", "showBackground", "showInnerStroke", "clockwise", "responsive", "startFromZero", "showZeroOuterStroke", "lazy", "options"], outputs: ["onClick"] }, { kind: "component", type: i11.AnnaNoDataComponent, selector: "anna-core-no-data-lib", inputs: ["width", "marginTop"] }, { kind: "directive", type: i12.showEllipsisTextOnHoverDirective, selector: "[showEllipsisTextOnHover]" }, { kind: "component", type: i13.AnnaIconColumnComponent, selector: "anna-core-anna-icon-column", inputs: ["componentName", "iconToShow", "dataObject"], outputs: ["onColumnIconClicked"] }, { kind: "component", type: i14.AnnaColumnDateRangeFilterComponent, selector: "anna-core-anna-column-date-range-filter", inputs: ["tableData", "clonedTableData", "filterTabObjects", "isLurAndCsrComponent", "showFilterHeaderTabs"], outputs: ["filterAppliedToTable", "sortingAppliedToTable", "getSortType", "closeTooltip"] }, { kind: "component", type: i15.AnnaColumnTimeFilterComponent, selector: "anna-core-anna-column-time-filter", inputs: ["tableData", "clonedTableData", "filterTabObjects", "showFilterHeaderTabs", "showAllTimeRangeCheckboxes", "isLurAndCsrComponent", "gtGeneralConfig", "showClearAllFilter", "startFromText", "endToText", "isSortAndFilterAbsent"], outputs: ["timeChanges", "filterAppliedToTable", "sortingAppliedToTable", "getSortType", "closeTooltip"] }, { kind: "component", type: i16.AnnaColumnCheckboxFilterComponent, selector: "anna-core-anna-column-checkbox-filter", inputs: ["showFilterHeaderTabs", "isLurAndCsrComponent", "tableData", "clonedTableData", "filterTabObjects"], outputs: ["filterAppliedToTable", "sortingAppliedToTable", "getSortType", "closeTooltip"] }, { kind: "component", type: i17.AnnaColumnSliderFilterComponent, selector: "anna-core-anna-column-slider-filter", inputs: ["filterTabObjects", "isLurAndCsrComponent", "tableData", "showFilterHeaderTabs", "clonedTableData"], outputs: ["closeTooltip", "filterAppliedToTable", "getSortType", "sortingAppliedToTable"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
687
|
+
AnnaNonEditableGenericTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AnnaNonEditableGenericTableComponent, selector: "anna-core-non-editable-generic-table-lib", inputs: { showSkeletonLoading: "showSkeletonLoading", tableHeaders: "tableHeaders", tableData: "tableData", clonedTableData: "clonedTableData", gtGeneralConfig: "gtGeneralConfig", totalRowInfo: "totalRowInfo", gtDimension: "gtDimension", tableClass: "tableClass", maximumRowsWhichCanBeRenderedWithoutScroll: "maximumRowsWhichCanBeRenderedWithoutScroll", fixNumberOfRowsForPopup: "fixNumberOfRowsForPopup", limit: "limit", includeBorderInTableHeight: "includeBorderInTableHeight", downloadInProgress: "downloadInProgress", percentDone: "percentDone", starredInProgress: "starredInProgress", clickableRow: "clickableRow", setTableHeightWhenRowSizeIsFixed: "setTableHeightWhenRowSizeIsFixed", tableBorderBottomClassRequired: "tableBorderBottomClassRequired", hideSomeTds: "hideSomeTds", tdsHaveRowSpan: "tdsHaveRowSpan", multipleTablesPresent: "multipleTablesPresent" }, outputs: { toggleCheckbox: "toggleCheckbox", toggleRowCheckbox: "toggleRowCheckbox", toggleHeaderCheckbox: "toggleHeaderCheckbox", undoIconClicked: "undoIconClicked", filterAppliedToTable: "filterAppliedToTable", sortingAppliedToTable: "sortingAppliedToTable", rowClicked: "rowClicked", radioButtonSelected: "radioButtonSelected", columnFilterOpened: "columnFilterOpened", columnFilterClosed: "columnFilterClosed", gtIconClicked: "gtIconClicked", gtSVGIconClicked: "gtSVGIconClicked", gtTextActionClicked: "gtTextActionClicked", gtViewDetailClicked: "gtViewDetailClicked", gtInnerHTMLClicked: "gtInnerHTMLClicked", downloadSpotDetails: "downloadSpotDetails", clickableDataClicked: "clickableDataClicked", totalRowIconClicked: "totalRowIconClicked", notificationIconHover: "notificationIconHover", notificationIconHoverLeave: "notificationIconHoverLeave", editableInputEdited: "editableInputEdited", radioButtonMessageIconClicked: "radioButtonMessageIconClicked" }, viewQueries: [{ propertyName: "viewChildTableHeaders", predicate: ["tableHeader"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"table-container {{gtGeneralConfig?.tableOuterContainerName}} {{tableBottomBorderClass}}\"\r\n [ngClass]=\"{ 'scroll-left-shadow-effect': isScrolledLeft, 'clickable-row': clickableRow, 'no-data-table': (isNoDataToDisplaySubject$ | async) }\"\r\n (scroll)=\"onTableContainerScroll($event)\">\r\n <div [class]=\"gtGeneralConfig.tableContainerName\" class=\"horizontal-scroll-for-table-container\" [ngStyle]=\"{\r\n height:\r\n tableData.length < maximumRowsWhichCanBeRenderedWithoutScroll\r\n ? 'calc(' +\r\n ((gtDimension.rowHeight) * tableData.length +\r\n (!tableData.length || !gtGeneralConfig.totalRow\r\n ? gtDimension.headerHeight\r\n : gtDimension.headerHeight + gtDimension.rowHeight)) +\r\n 'px)'\r\n : gtDimension.tableHeight\r\n }\">\r\n <table class=\"gt\" [ngClass]=\"tableClass\" mat-table [dataSource]=\"renderedData\">\r\n <tr class=\"header-row\" mat-header-row *matHeaderRowDef=\"tableColumns; sticky: true\"\r\n [style.height.px]=\"gtDimension.headerHeight\"></tr>\r\n <tr class=\"total-row\" mat-header-row [style.height.px]=\"gtDimension.rowHeight\"\r\n *matHeaderRowDef=\"totalRowColumns; sticky: true\" [class.hidden]=\"\r\n showSkeletonLoading ||\r\n (!showSkeletonLoading && !tableData.length ) ||\r\n (isNoDataToDisplaySubject$ | async) || \r\n (!showSkeletonLoading && !gtGeneralConfig.totalRow)\r\n \"></tr>\r\n <tr [class]=\"rowData.gtClass\" [ngClass]=\"{'no-border-tr': (isNoDataToDisplaySubject$ | async)}\" mat-row\r\n *matRowDef=\"let rowData; columns: tableColumns\" [style.height.px]=\"gtDimension.rowHeight\"\r\n (click)=\"dataRowClicked(rowData)\"></tr>\r\n\r\n <!-- TOTAL ROW -->\r\n <ng-container [matColumnDef]=\"column.colName\" *ngFor=\"let column of totalRowInfo; trackBy: trackByFn\">\r\n <td mat-header-cell *matHeaderCellDef [attr.colspan]=\"column.colspan\" class=\"{{column.class}}\">\r\n\r\n <ng-container *ngIf=\"column['isActionColumn']\">\r\n <a *ngFor=\"let data of column.actionData\" [class]=\"data.class\"\r\n (click)=\"onClickableDataClicked({}, data.id)\">\r\n {{ data.name }}\r\n </a>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column['isIconColumn']\">\r\n <i class=\"{{column?.iconData?.class}}\" (click)=\"iconClickedInTotalRow(column?.colName)\">\r\n </i>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!column['isActionColumn']\">\r\n <strong class=\"upper-label\">{{ column.data }}</strong>\r\n <ng-container *ngIf=\"column.lowerData\">\r\n <br>\r\n <span *ngIf=\"column.colName == 'total-potential-booked-unit' && gtGeneralConfig.component == 'RATING';\r\n else columnLowerData\" class=\"clickable-data\"\r\n (click)=\"spotDetailsDownloadClicked('TOTALROW')\"\r\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\">{{ column.lowerData }}\r\n <span class=\"material-icons spot-details-download-icons\">get_app</span>\r\n <ng-container *ngIf=\"downloadInProgress \r\n && selectedRowTypeForDownload == 'TOTALROW' \">\r\n <ng-container [ngTemplateOutlet]=\"circularProgressBar\"></ng-container>\r\n </ng-container>\r\n </span>\r\n <ng-template #columnLowerData>\r\n <span class=\"lower-label\">{{ column.lowerData }}</span>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.tooltipMessage && gtGeneralConfig.component != 'LUR_VIOLATIONS'\">\r\n <i class=\"{{column.tooltipIconClass}}\" container=\"body\" [ngbTooltip]=\"column.tooltipMessage\"\r\n tooltipClass=\"gt-total-row-tooltip\" placement=\"bottom\"></i>\r\n </ng-container>\r\n <ng-container *ngIf=\"gtGeneralConfig.component == 'LUR_VIOLATIONS' && column.tooltipMessage\">\r\n <i class=\"mi mdi-info-outline info-label\" container=\"body\"\r\n [ngbTooltip]=\"lurViolationTotalRowToolTip\" tooltipClass=\"gt-total-row-tooltip\"\r\n placement=\"bottom\"></i>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <!-- MAIN ROW -->\r\n <ng-container [matColumnDef]=\"columnDef.headerInfo[0].objectKey\"\r\n *ngFor=\"let columnDef of tableHeaders; trackBy: trackByFn\">\r\n <th #tableHeader nowrap mat-header-cell *matHeaderCellDef [style.width]=\"columnDef.width\">\r\n <div class=\"row mx-0\" *ngFor=\"let header of columnDef.headerInfo; let j = index;\">\r\n <p *ngIf=\"header.typeOfHeaderData === 'STRING'\"\r\n [ngClass]=\"{ 'upper-label': j === 0, 'lower-label': j === 1 }\">\r\n <ngx-skeleton-loader *ngIf=\"header.name == null\" count=\"1\"\r\n [theme]=\"{ height: '10px', display: 'block', width: columnDef.width, 'max-width':'calc(100% - 20px)' }\">\r\n </ngx-skeleton-loader>\r\n <ng-container *ngIf=\"header.name\">\r\n {{ header.name }}\r\n </ng-container>\r\n\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'impsInfoTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"impsInfoTooltip\" container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'spotsColumnEquivalizationMessageTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" container=\"body\" #t=\"ngbTooltip\"\r\n container=\"body\" [ngbTooltip]=\"spotsColumnEquivalizationMessageTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'underDeliveryTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" container=\"body\" #t=\"ngbTooltip\"\r\n container=\"body\" [ngbTooltip]=\"underDeliveryTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'overDeliveryTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" container=\"body\" #t=\"ngbTooltip\"\r\n container=\"body\" [ngbTooltip]=\"overDeliveryTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'ratingInfoTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"ratingInfoTooltip\" container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'rateInfoTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"rateInfoTooltip\" container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'ongoingRevBookedColumnTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"ongoingRevBookedColumnTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'completedRevBookedColumnTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"completedRevBookedColumnTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedRate'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"avgBookedRate\" placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedRtg'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"avgBookedRtg\" placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedImps'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"avgBookedImps\" placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'automationTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"automationTooltip\" placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'rebateImpact'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"rebateImpact\" placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n </p>\r\n\r\n <ng-container *ngIf=\"header.typeOfHeaderData === 'CHECKBOX'\">\r\n <span *ngIf=\"gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\" (click)=\"selectUnselectAllRows()\">\r\n check_box\r\n </span>\r\n <span *ngIf=\"!gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{ 'disable-checkbox': gtGeneralConfig.disableHeaderCheckbox }\"\r\n (click)=\"selectUnselectAllRows()\">\r\n check_box_outline_blank\r\n </span>\r\n </ng-container>\r\n\r\n <div *ngIf=\"gtGeneralConfig.showAllColumnFilter\" class=\"sort-filter-container\">\r\n <ng-container *ngIf=\"header.showTooltipIcon\">\r\n <!-- Active tooltip Functionality -->\r\n <ng-container *ngIf=\"header.filter === 'CHECKBOX'\">\r\n\r\n <span class=\"mdi mdi-filter-variant\" [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys], \r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\" [ngbTooltip]=\"filterTooltip\" placement=\"{{filterAlignment}}\"\r\n container=\"body\" tooltipClass=\"non-edit-checkbox-tooltip\"\r\n [autoClose]=\"'outside'\" triggers=\"manual\" #t=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t, header)\" (hidden)=\"closeTooltip()\">\r\n </span><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'SLIDER'\">\r\n <span class=\"mdi mdi-filter-variant\" [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\" [ngbTooltip]=\"sliderToolTip\" placement=\"bottom left-top\" container=\"body\"\r\n tooltipClass=\"non-edit-slider-tooltip\" [autoClose]=\"'outside'\" triggers=\"manual\"\r\n #t1=\"ngbTooltip\" (click)=\"bindTheValueToToolTip(t1, header)\"\r\n (hidden)=\"closeTooltip()\">\r\n </span><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'DATE'\">\r\n <span class=\"mdi mdi-filter-variant\" [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\" [ngbTooltip]=\"datePickerTooltip\" placement=\"bottom auto\" container=\"body\"\r\n tooltipClass=\"non-edit-datepicker-tooltip\" [autoClose]=\"'outside'\"\r\n triggers=\"manual\" #t2=\"ngbTooltip\" (click)=\"bindTheValueToToolTip(t2, header)\"\r\n (hidden)=\"closeTooltip()\">\r\n </span><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'WEEK'\">\r\n <span class=\"mdi mdi-filter-variant\" [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\" [ngbTooltip]=\"weekPickerToolTip\" placement=\"bottom left-top\"\r\n container=\"body\" [autoClose]=\"'outside'\" triggers=\"manual\" #t3=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t3, header)\" (hidden)=\"closeTooltip()\">\r\n </span><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'TIME'\">\r\n <span class=\"mdi mdi-filter-variant\" [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\" [ngbTooltip]=\"timeFilterToolTip\" placement=\"bottom left-top auto\"\r\n container=\"body\" tooltipClass=\"non-edit-time-tooltip\" [autoClose]=\"'outside'\"\r\n triggers=\"manual\" #t4=\"ngbTooltip\" (click)=\"bindTheValueToToolTip(t4, header)\"\r\n (hidden)=\"closeTooltip()\">\r\n </span><br />\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!header.showTooltipIcon\">\r\n <span id=\"no-filter-space\"></span><br />\r\n </ng-container>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'lurViolationInfoTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"lurViolationInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n\r\n </div>\r\n </div>\r\n </th>\r\n\r\n <ng-container *matCellDef=\"let ROW_DATA\">\r\n <td mat-cell [style.background]=\"ROW_DATA.backgroundColor\" \r\n [style.border]=\"ROW_DATA.border\"\r\n class=\"{{ROW_DATA.rowClass}}\"\r\n [ngClass]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'TdClass']\"\r\n [attr.rowspan]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'Rowspan']\"\r\n *ngIf=\"!hideSomeTds ||( hideSomeTds && !ROW_DATA['hide' + columnDef.headerInfo[0].objectKey + 'Td'])\"\r\n >\r\n <ngx-skeleton-loader *ngIf=\"showSkeletonLoading\" count=\"1\" [theme]=\"{ height: '10px', display: 'block' }\">\r\n </ngx-skeleton-loader>\r\n\r\n <ng-container *ngIf=\"!showSkeletonLoading\">\r\n <ng-container *ngIf=\"tableData.length > 0 && !(isNoDataToDisplaySubject$ | async)\">\r\n <ng-container\r\n *ngFor=\"let subline of columnDef.headerInfo; let subLineIndex = index; trackBy: trackByFn\">\r\n <div showEllipsisTextOnHover>\r\n <ng-container [ngSwitch]=\"columnDef.headerInfo[subLineIndex].typeOfBodyData\">\r\n <ng-container *ngSwitchCase=\"'ICON'\">\r\n <i *ngIf=\"!(starredInProgress && ROW_DATA.orderId == selectedStarredOrderId)\"\r\n [class]=\"ROW_DATA.iconClass\"\r\n (click)=\"iconClicked(ROW_DATA,ROW_DATA.iconClass)\"\r\n ngbTooltip=\"{{ ROW_DATA.iconTitleText }}\" placement=\"bottom\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"></i>\r\n <ng-container\r\n *ngIf=\"starredInProgress && ROW_DATA.orderId == selectedStarredOrderId\">\r\n <div class=\"spinner-for-button-directive\"></div>\r\n </ng-container>\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'ICON_CELL'\">\r\n <ng-container\r\n *ngFor=\"let action of ROW_DATA[columnDef.headerInfo[subLineIndex].actionKey]\">\r\n\r\n <i *ngIf=\"action.showIcon\" [class]=\"action.iconClass\"\r\n (mouseenter)=\"mouseEnterOnStringTextActionType(ROW_DATA, columnDef.headerInfo[subLineIndex].tooltipKey)\"\r\n placement=\"bottom auto\" container=\"body\" [autoClose]=\"true\"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"action.showTooltip ? userLoggedInDetails : null\"\r\n (click)=\"textActionClicked(ROW_DATA, action.id, columnDef.headerInfo[subLineIndex])\"\r\n [disableTooltip]=\"!action.showTooltip\">\r\n </i>\r\n\r\n <ng-container *ngIf=\"action.showObjectKey\">\r\n {{ ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey] }}\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'HTML_STRING'\">\r\n <p [innerHTML]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n (click)=\"innerHTMLCellClicked($event,ROW_DATA)\"></p>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'SVG_ICON'\">\r\n <anna-core-anna-icon-column [componentName]=\"gtGeneralConfig.component\"\r\n [dataObject]=\"ROW_DATA\"\r\n [iconToShow]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey] \"\r\n (onColumnIconClicked)=\"svgIconClicked($event)\"></anna-core-anna-icon-column>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'TEXT_ACTIONS'\">\r\n <ng-container\r\n *ngFor=\"let text of ROW_DATA[columnDef.headerInfo[subLineIndex].actionKey]\">\r\n <button *ngIf=\"text.showTooltip\"\r\n (click)=\"textActionClicked(ROW_DATA,text.id, columnDef.headerInfo[subLineIndex])\"\r\n [disabled]=\"text.isDisabled\" class=\"{{text.class}}\"\r\n (mouseenter)=\"mouseEnterOnTextActionType(ROW_DATA, columnDef.headerInfo[subLineIndex].tooltipKey)\"\r\n [ngbTooltip]=\"textActionTooltipTemplate\" placement=\"auto\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\">\r\n {{ text.name}}\r\n </button>\r\n\r\n <button *ngIf=\"!text.showTooltip\"\r\n (click)=\"textActionClicked(ROW_DATA,text.id, columnDef.headerInfo[subLineIndex])\"\r\n [disabled]=\"text.isDisabled\" class=\"{{text.class}}\">\r\n {{text.name}}\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CHECKBOX'\">\r\n <span *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n [ngClass]=\"{\r\n 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\" class=\"material-icons custom-column-checkbox-checked\" (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n false\r\n )\r\n \">\r\n check_box\r\n </span>\r\n <span *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n class=\"material-icons custom-column-checkbox-unchecked\" [ngClass]=\"{\r\n 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\" (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n true\r\n )\r\n \">\r\n check_box_outline_blank\r\n </span>\r\n\r\n <ng-container\r\n *ngFor=\"let action of ROW_DATA[columnDef.headerInfo[subLineIndex].actionKey]\">\r\n <i *ngIf=\"action.showIcon\" [class]=\"action.iconClass\"\r\n [ngClass]=\"{'disabled': action.disabledIcon}\"\r\n (mouseenter)=\"mouseEnterOnStringTextActionTypeContainingTable(ROW_DATA, columnDef.headerInfo[subLineIndex].tooltipKey)\"\r\n placement=\"bottom auto\" container=\"body\" [autoClose]=\"true\"\r\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\r\n [ngbTooltip]=\"tooltipContainingTableTemplate\">\r\n </i>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CLICKABLE_DATA'\">\r\n <a *ngFor=\"let text of ROW_DATA[columnDef.headerInfo[subLineIndex].actionKey]\"\r\n [class]=\"text.class\"\r\n (click)=\"onClickableDataClicked(ROW_DATA, text.id)\">\r\n {{ text.name }}\r\n </a>\r\n <span\r\n *ngIf=\"subline.objectKey == 'displayBookedUnits' && gtGeneralConfig.component == 'RATING'\"\r\n class=\"clickable-data\"\r\n (click)=\"spotDetailsDownloadClicked('DATAROW', ROW_DATA)\"\r\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\">{{\r\n ROW_DATA.displayBookedUnits}}\r\n <span\r\n class=\"material-icons spot-details-download-icons\">get_app</span>\r\n <ng-container *ngIf=\"downloadInProgress \r\n && ROW_DATA.inventoryCodeId == selectedInventoryIdForDownload \r\n && ROW_DATA.demographic == selectedDemographicForDownload \">\r\n <ng-container\r\n [ngTemplateOutlet]=\"circularProgressBar\"></ng-container>\r\n </ng-container>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING___ICON_OR_TEXT_ACTION'\">\r\n <ng-container\r\n *ngFor=\"let action of ROW_DATA[columnDef.headerInfo[subLineIndex].actionKey]\">\r\n <span [class]=\"action.additionalTextBeforeLinkClass\"\r\n [innerHtml]=\"action.additionalTextBeforeLink\"\r\n ngbTooltip=\"{{ action.additionalTextBeforeLink }}\"\r\n placement=\"bottom\" container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"!action.enableTooltipForAdditionalText\"></span>\r\n\r\n <ng-container *ngIf=\"action && action.typeOfData== 'STRING'\">\r\n {{ action.data }}\r\n </ng-container>\r\n\r\n <a [id]=\"action.id\" *ngIf=\"action.showLink\"\r\n (click)=\"textActionClicked(ROW_DATA, action.id, columnDef.headerInfo[subLineIndex])\"\r\n [class]=\"action.linkClass\"\r\n [ngClass]=\"{'disabled': action.disabledLink}\">{{action.data}}</a>\r\n <span ngbTooltip=\"{{ action.additionalTextAfterLink }}\"\r\n placement=\"bottom\" container=\"body\"\r\n [class]=\"action.additionalTextAfterLinkClass\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"!action.enableTooltipForAdditionalAfterText\">\r\n {{ action.additionalTextAfterLink }}\r\n </span>\r\n\r\n <ng-container *ngIf=\"action.showTooltip\">\r\n <ng-container *ngIf=\"action.tooltipData.innerHtml\">\r\n\r\n <i *ngIf=\"action.showIcon\" [class]=\"action.iconClass\"\r\n [ngClass]=\"{'disabled': action.disabledIcon}\"\r\n (mouseenter)=\"mouseEnterOnStringTextActionTypeContainingTable(ROW_DATA, columnDef.headerInfo[subLineIndex].tooltipKey)\"\r\n placement=\"bottom auto\" container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\r\n [ngbTooltip]=\"tooltipContainingTableTemplate\">\r\n </i>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!action.tooltipData.tooltipTableBody\">\r\n <i *ngIf=\"action.showIcon\" [class]=\"action.iconClass\"\r\n [ngClass]=\"{'disabled': action.disabledIcon}\"\r\n (click)=\"iconClickedOnStringIconActionType(ROW_DATA, action.id, columnDef.headerInfo[subLineIndex])\"\r\n (mouseleave)=\"mouseLeaveTextActionType(ROW_DATA)\"\r\n (mouseenter)=\"mouseEnterOnStringTextActionType(ROW_DATA, columnDef.headerInfo[subLineIndex].tooltipKey)\"\r\n [placement]=\"action.tooltipPlacement ? action.tooltipPlacement : 'bottom auto'\"\r\n container=\"body\" [autoClose]=\"true\"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class {{ action.tooltipClass }}\"\r\n [ngbTooltip]=\"userLoggedInDetails\">\r\n </i>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!action.showTooltip\">\r\n <i *ngIf=\"action.showIcon\" [class]=\"action.iconClass\"\r\n [ngClass]=\"{'disabled': action.disabledIcon}\"\r\n (click)=\"iconClickedOnStringIconActionType(ROW_DATA, action.id, columnDef.headerInfo[subLineIndex])\">\r\n </i>\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING_OR_INPUT'\">\r\n <ng-container *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]?.type == 'STRING';\r\n else inputBox\">\r\n <span\r\n [innerHtml]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]?.value\"></span>\r\n </ng-container>\r\n <ng-template #inputBox>\r\n <input\r\n placeholder=\"{{ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]?.placeholder}}\"\r\n showEllipsisTextOnHover\r\n class=\"{{ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].className}}\"\r\n (keydown)=\"changesMadeInEditableInputBox($event,ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey], false)\"\r\n (paste)=\"changesMadeInEditableInputBox($event, ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey], true)\"\r\n (ngModelChange)=\"editableInputValueChanged($event, ROW_DATA, columnDef.headerInfo[subLineIndex].objectKey)\"\r\n [ngModel]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].value\"\r\n [disabled]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].disabled\"\r\n [ngClass]=\"{'red-border': ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].hasError }\">\r\n\r\n <i *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].showIcon\"\r\n container=\"body\"\r\n [ngbTooltip]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].iconTooltip\"\r\n tooltipClass=\"gt-total-row-tooltip\" placement=\"bottom\"\r\n class=\"{{ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].iconClass}}\">\r\n </i>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'HTML'\">\r\n <span\r\n [innerHtml]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"></span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'SINGLE_RADIO'\">\r\n <span *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n [ngClass]=\"{\r\n 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n class=\"mdi mdi-radiobox-marked\" (click)=\"\r\n null\r\n \">\r\n\r\n </span>\r\n <span *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n class=\"mdi mdi-radiobox-blank\" [ngClass]=\"{\r\n 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\" (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n true\r\n )\r\n \">\r\n\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'RADIO'\">\r\n <mat-radio-group *ngIf=\"ROW_DATA['RadioButtonConfig']\"\r\n [ngModel]=\"ROW_DATA[subline.objectKey]\"\r\n [disabled]=\"ROW_DATA['RadioButtonConfig'][0].isDisabled\">\r\n <ng-container\r\n *ngFor=\"let radioButton of ROW_DATA['RadioButtonConfig']; let last = last\">\r\n <mat-radio-button value=\"{{ radioButton.value }}\"\r\n class=\"{{ radioButton.class }}\" (click)=\"\r\n radioButtonClicked(\r\n ROW_DATA,\r\n radioButton.value,\r\n ROW_DATA['RadioButtonConfig'][0].isDisabled\r\n )\r\n \">{{ radioButton.label }}\r\n </mat-radio-button>\r\n <i class=\" {{radioButton.iconClass}}\"\r\n (click)=\"radioButtonIconClicked(ROW_DATA)\"></i>\r\n <br *ngIf=\"!last\" />\r\n </ng-container>\r\n </mat-radio-group>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING_WITH_TOOLTIP'\">\r\n <ng-container\r\n *ngFor=\"let action of ROW_DATA[columnDef.headerInfo[subLineIndex].actionKey]\">\r\n <span> {{ action?.dataToDisplay }}</span>\r\n <span *ngIf=\"action?.showTooltip\"\r\n [ngbTooltip]=\"textActionTooltipTemplate\"\r\n (mouseenter)=\"mouseEnterOnStringTextActionType(ROW_DATA, columnDef.headerInfo[subLineIndex].tooltipKey)\"\r\n [placement]=\"action?.tooltipPosition\" container=\"body\"\r\n [class]=\"action?.tooltipIconClass\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"action?.disableTooltip\">\r\n </span>\r\n <span> {{ action?.dataToDisplayAfterTooltip }}</span>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n <ng-container *ngIf=\"subline.objectKey != 'description'\">\r\n <span>{{ ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n }}</span>\r\n <i *ngIf=\"subline.objectKey == 'inventoryCode' && ROW_DATA['isSellerGroup'] && gtGeneralConfig.component == 'RATING' \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n [ngbTooltip]=\"sellerHierarchyTooltip\" placement=\"bottom auto\"\r\n container=\"body\" [autoClose]=\"true\" triggers=\"manual\"\r\n (hidden)=\"closeTooltip()\" #info=\"ngbTooltip\"\r\n tooltipClass=\"hierarchy-tooltip remove-on-scroll-class\"\r\n (mouseenter)=\"bindTheValueToSellerGroupTooltip(ROW_DATA.sellerGroupHierarchy, info)\">\r\n </i>\r\n\r\n <i *ngIf=\"subline.objectKey == 'displayBookedAverageRating' && gtGeneralConfig.component == 'RATING' && ROW_DATA['showRatingAverageIcon'] \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n placement=\"bottom auto\" container=\"body\" [autoClose]=\"true\"\r\n (mouseenter)=\"setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\"\r\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"postedRatingDifference\">\r\n </i>\r\n\r\n <i *ngIf=\"subline.objectKey == 'displayBookedAverageImpression' && gtGeneralConfig.component == 'RATING' && ROW_DATA['showImpressionAverageIcon'] \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n placement=\"bottom auto\" container=\"body\" [autoClose]=\"true\"\r\n (mouseenter)=\"setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\"\r\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"postedImpDifference\">\r\n </i>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"subline.objectKey == 'description'\">\r\n <p\r\n *ngIf=\"ROW_DATA.descriptionMessage || ROW_DATA.descriptionEmailReferenceNum\">\r\n <ng-container *ngIf=\"ROW_DATA.descriptionMessage\">\r\n {{ ROW_DATA.descriptionMessage }}\r\n <br />\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"ROW_DATA.descriptionEmailReferenceNum != '-' && ROW_DATA.descriptionEmailReferenceNum != ''\">\r\n Email Ref: {{ ROW_DATA.descriptionEmailReferenceNum }}\r\n <br />\r\n </ng-container>\r\n </p>\r\n <a href=\"{{ ROW_DATA.descriptionDetailsUrl }}\" target=\"_blank\"\r\n *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'PDF' || ROW_DATA.descriptionDetailsUrlType === 'EXCEL'\">\r\n <button class=\"btn viewDetailsAndEmailBtn\">Download</button>\r\n </a>\r\n <ng-container\r\n *ngIf=\"ROW_DATA.activityname.toLowerCase() == 'order onboarded'\">\r\n <a *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'LINK'\"\r\n (click)=\"viewDetailsClicked(ROW_DATA)\">\r\n <button\r\n class=\"btn viewDetailsAndEmailBtn order-onboarded\">View\r\n details</button>\r\n </a>\r\n </ng-container>\r\n\r\n <a href=\"{{ ROW_DATA.descriptionEmailUrl }}\" target=\"_blank\"\r\n *ngIf=\"ROW_DATA.descriptionEmailUrl != '-' && ROW_DATA.descriptionEmailUrl != ''\">\r\n <button class=\"btn viewDetailsAndEmailBtn\">View email</button>\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"(isNoDataToDisplaySubject$ | async)\">\r\n <div>\r\n {{null}}\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </table>\r\n </div>\r\n <anna-core-no-data-lib [width]=\"noDataWidth\" [marginTop]=\"marginTop\" *ngIf=\"(isNoDataToDisplaySubject$ | async)\">\r\n </anna-core-no-data-lib>\r\n</div>\r\n\r\n<!-- Checkbox template -->\r\n<ng-template #filterTooltip>\r\n <anna-core-anna-column-checkbox-filter [tableData]=\"tableData\" [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\" [clonedTableData]=\"clonedTableData\" [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\" (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\">\r\n </anna-core-anna-column-checkbox-filter>\r\n</ng-template>\r\n\r\n<!-- Slider template -->\r\n<ng-template #sliderToolTip>\r\n <anna-core-anna-column-slider-filter [tableData]=\"tableData\" [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\" [clonedTableData]=\"clonedTableData\" [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\" (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\">\r\n </anna-core-anna-column-slider-filter>\r\n</ng-template>\r\n\r\n<!-- Date Picker Template -->\r\n<ng-template #datePickerTooltip>\r\n <anna-core-anna-column-date-range-filter [tableData]=\"tableData\" [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\" [clonedTableData]=\"clonedTableData\" [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\" (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\">\r\n </anna-core-anna-column-date-range-filter>\r\n</ng-template>\r\n\r\n<!-- Week Picker Template -->\r\n<ng-template #weekPickerToolTip>\r\n <!-- <div class=\"weekpicker-container\">\r\n <anna-core-week-calendar-filter-lib\r\n [week-calendar-config]=\"gtGeneralConfig.multiWeekPickerConfig\"\r\n (apply)=\"applyWeekFilter($event)\"\r\n [from-date]=\"calendarMinEnabledDate\"\r\n [to-date]=\"calendarMaxEnabledDate\"\r\n >\r\n </anna-core-week-calendar-filter-lib>\r\n </div> -->\r\n</ng-template>\r\n\r\n<!-- Time Filter Template -->\r\n<ng-template #timeFilterToolTip>\r\n <anna-core-anna-column-time-filter [tableData]=\"tableData\" [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\" [showAllTimeRangeCheckboxes]=\"showCheckboxesForTimeFilter\"\r\n [clonedTableData]=\"clonedTableData\" [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\" (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\">\r\n </anna-core-anna-column-time-filter>\r\n</ng-template>\r\n\r\n<ng-template #columnInfoTooltip>\r\n <p style=\"color: black;white-space: nowrap;\">This preemption is rejected and not marked for credit.</p>\r\n</ng-template>\r\n\r\n<ng-template #ratingInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked Rating' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected Rating' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #impsInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked IMPS' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected IMPS' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #spotsColumnEquivalizationMessageTooltip>\r\n <p class=\"spot-column-tooltip-message\">This consists of equivalized spots and un-equivalized Paid Programs &\r\n un-equivalized Non-spots.</p>\r\n</ng-template>\r\n\r\n<ng-template #underDeliveryTooltip>\r\n <p class=\"spot-column-tooltip-message\">Indicates the Under-delivery percentage based on booked and posted RTG/IMPS.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #overDeliveryTooltip>\r\n <p class=\"spot-column-tooltip-message\">Indicates the Over-delivery percentage based on booked and posted RTG/IMPS.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #rateInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked Rate' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected $ Value' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #sellerHierarchyTooltip>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length > 0\">\r\n <section class=\"hierarchy-table-container\">\r\n <table class=\"seller-hierarchy-table\">\r\n <thead>\r\n <tr>\r\n <th>#</th>\r\n <th>Inventory Codes</th>\r\n <th>Program/Description</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of sellerGroupHierarchy; let tooltipIndex = index\">\r\n <td>{{ tooltipIndex + 1 }}</td>\r\n <td>\r\n <span showEllipsisTextOnHover>{{ data.InventoryCode }}</span>\r\n </td>\r\n <td>\r\n <span showEllipsisTextOnHover>{{ data.Program }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </section>\r\n </ng-container>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length == 0\">\r\n <span style=\"color: #000\">Seller group not available for this inventory code</span>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #lurViolationInfoTooltip>\r\n <p class=\"first-row\">The values are for the entire week.</p>\r\n</ng-template>\r\n\r\n<ng-template #postedRatingDifference>\r\n <p class=\"difference-text\">The difference between posted and booked average rating is\r\n {{isDifferenceLessThan25Percent ? 'less' : 'more'}} than 25%.</p>\r\n</ng-template>\r\n\r\n<ng-template #postedImpDifference>\r\n <p class=\"difference-text\">The difference between posted and booked average impression is\r\n {{isDifferenceLessThan25Percent ? 'less' : 'more'}} than 25%.</p>\r\n</ng-template>\r\n\r\n<ng-template #ongoingRevBookedColumnTooltip>\r\n <p>The Booked $ value, Spots, GRP, CPP, IMPS, CPM corresponds on the last permanent revision generated</p>\r\n</ng-template>\r\n\r\n<ng-template #completedRevBookedColumnTooltip>\r\n <p>The Booked $ value corresponds on the last permanent revision generated</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedRate>\r\n <p>This is the booked average Rate</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedRtg>\r\n <p>This is the booked average RTG</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedImps>\r\n <p>This is the booked average IMP(\u2019000)</p>\r\n</ng-template>\r\n\r\n<ng-template #automationTooltip>\r\n <p>Please get the order business rules approved to activate the order for automation. Only for the\r\n automation-activated orders, any approved MGs, ADUs, or credited spots on ANNA will be fed into the traffic\r\n system i.e. ANNA revisions. Additionally, ANNA will only enter buyer revisions into traffic for the selected\r\n Medialine/WOC orders.</p>\r\n</ng-template>\r\n\r\n<ng-template #rebateImpact>\r\n <p>\r\n Rebate impact value is for the originally ordered spot length and is not equivalized.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #lurViolationTotalRowToolTip>\r\n <ul>\r\n <li>\r\n <strong>POLITICAL RATE VIOLATIONS:</strong>\r\n Violations flagged when non-political spots are booked at a rate lower than the minimum booked rate for\r\n political candidates for the same week, Inventory Code and Revenue Class.\r\n\r\n </li>\r\n <li>\r\n <strong>CANDIDATE TO CANDIDATE VIOLATION:</strong>\r\n Violations flagged when political spots are booked at different rates to other political spots for the same\r\n week, Inventory Code and Revenue Class.\r\n </li>\r\n </ul>\r\n\r\n</ng-template>\r\n\r\n<ng-template #circularProgressBar>\r\n <circle-progress [percent]=\"percentDone\" [radius]=\"5\" [showTitle]=\"false\" [showUnits]=\"false\" [showSubtitle]=\"false\"\r\n [outerStrokeWidth]=\"3\" [innerStrokeWidth]=\"3\" [space]=\"-3\" [outerStrokeColor]=\"'#268bff'\"\r\n [innerStrokeColor]=\"'#d5d5d5'\" [animationDuration]=\"10\"></circle-progress>\r\n</ng-template>\r\n\r\n\r\n<ng-template #userLoggedInDetails>\r\n <div class=\"tooltip-div-container\">\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n <span *ngIf=\"data.key != 'read'\">\r\n {{ data.key }} <b> {{data.value}}</b>\r\n </span>\r\n <span *ngIf=\"data.key == 'read'\">\r\n {{data.value}}\r\n </span>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #markAsReadTip>\r\n <div class=\"notification-tooltip-div-container\">\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{data.value}}\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #textActionTooltipTemplate>\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.key }} <b> {{data.value}}</b>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #tooltipContainingTableTemplate>\r\n <div *ngIf=\"tooltipContainingTable\" [innerHTML]=\"tooltipContainingTable.innerHtml\" class=\"notification-tooltip-div-container\">\r\n <!-- <ul>\r\n <li *ngFor=\"let headerMsg of tooltipContainingTable.tableHeaderMsg\">\r\n <b> {{headerMsg}} </b>\r\n </li>\r\n </ul>\r\n\r\n <table class=\"tooltip-table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let header of tooltipContainingTable.tooltipTableHeader\">\r\n {{ header}}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let rows of tooltipContainingTable.tooltipTableBody\">\r\n <td *ngFor=\"let data of rows\">\r\n {{ data }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <ul>\r\n <li style=\"margin-top:10px; padding:0\" *ngFor=\"let footerMsg of tooltipContainingTable.tableFooterMsg\">\r\n {{ footerMsg }} \r\n </li>\r\n </ul> -->\r\n\r\n </div>\r\n</ng-template>\r\n<!-- <ng-template #textActionTooltipTemplate>\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.key }} <b> {{data.value}}</b>\r\n </ng-container>\r\n</ng-template> -->", styles: [".sort-btn{background:white;border:none;border-right:1px solid #1b88ff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.07;letter-spacing:normal;color:#1b88ff;cursor:pointer;flex:1;text-align:center}.sort-btn:last-of-type{border-right:none}.sort-btn.active{color:#202b47;text-decoration:none}p.sort-container{margin-top:8px;padding-bottom:8px;border-bottom:1px solid #e6e6e6;margin-bottom:0;display:flex}::ng-deep .tooltip-inner{max-height:22rem;background-color:#fff;border:1px solid white;border-radius:5px;box-shadow:0 2px 2px #0000003d,0 0 2px #0000001f;max-width:251px;width:100%;padding:0!important}::ng-deep .tooltip-inner div.radio-container{flex-wrap:wrap}::ng-deep .md-drppicker{box-shadow:unset!important}::ng-deep .available{color:#999}::ng-deep .bs-tooltip-bottom .arrow:before{border-bottom-color:#fff!important}::ng-deep .bs-tooltip-left .arrow:before{border-left-color:#fff!important}::ng-deep .tooltip.show{opacity:1}.input{text-align:left;margin:5px 10px 5px 5px;display:flex;align-items:center;width:230px;white-space:nowrap}.data{color:#000;font-weight:700;margin-left:5px;margin-right:5px}span.data{display:inline-block;text-overflow:ellipsis;white-space:pre;width:100%;overflow:hidden}.check-box{font-size:14px;cursor:pointer;position:relative;top:-1px}span.mdi-filter.active{color:#000;opacity:1!important;pointer-events:all!important}p{margin-bottom:0;line-height:initial}span.mdi-filter{color:#cbcbcb}::ng-deep .ngx-slider-pointer{top:-5px!important;width:12px!important;height:12px!important;background:#bdbdbd!important;border:1px solid #ffffff!important;box-shadow:0 1px 3px #0000004d!important;border-radius:16px!important}input:focus{outline:none}input::placeholder{color:#c8c8c8}.cancel-btn{background:#c7e1ff;color:#268bff}.apply-btn{background:#268bff;color:#fff;margin-left:.3125rem}div.radio-container{display:flex;white-space:nowrap;justify-content:space-between;background-color:#f4f4f4;border-radius:.125rem;margin:.4375rem .4375rem .25rem}div.radio-container div{flex:1;width:50%}div.radio-container div.full-width{width:100%}div.radio-container input{position:relative;top:.125rem;margin-right:.25rem}div.radio-container label{font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:0;color:#4a4a4a;margin:0;padding-left:.125rem}div.radio-container label:first-of-type{margin-right:.188rem}div.radio-container input[type=radio]{appearance:none;display:inline-block;width:.9375rem;height:.9375rem;padding:.125rem;background-clip:content-box;border:.125rem solid #268bff;background-color:transparent;border-radius:50%}div.radio-container input[type=radio]:checked{background-color:#268bff}.checkbox-filter-buttons-container{padding:0 8px!important}.buttons-container{display:flex;margin:0px auto .4375rem;justify-content:center;padding:0 12px}.buttons-container .button{padding:0 10px;width:100%;margin:8px 0 0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.buttons-container button:last-of-type{background-color:#268bff;color:#fff;margin-left:.5rem}.buttons-container button.disabled{background:#bdbdbd;opacity:.5;color:#4a4a4a}.button{display:inline-block;margin:8px 4px 0 8px;padding:0 16px;border-radius:4px;text-align:center;outline:none;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;border:none;color:#268bff;background-color:#e5f1ff}.search-box{display:flex;align-items:center;color:#c8c8c8;border:1px solid #e6e6e6;border-radius:.125rem;margin:.25rem .4375rem .188rem;height:1.5rem;padding:.188rem 8px .188rem .5rem}.search-box .search-bar-close{margin-left:auto;float:right}.search-icon{margin:0 4px 0 0;font-size:1.125rem;color:#9b9b9b}.filter-icon{justify-content:right;margin-left:auto;color:#d4d4d4;color:#a1a1a1;font-size:16px;cursor:pointer}.data{margin:0 13px 0 8px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.86;letter-spacing:\"\";color:#4a4a4a}.search-input{margin:1px 0 1px 4px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#c8c8c8;width:calc(100% - 38px)}.check-box{color:#268bff}.tooltip-data-container{overflow-y:scroll;max-height:8rem}.searchbar{width:100%;display:flex;justify-content:flex-end;align-items:flex-end}.clear-button{opacity:.5;font-family:Roboto;font-size:.9375rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;text-decoration:underline;border:none;background-color:#fff;color:#4a4a4a;margin-left:.625rem;padding:0}.clear-button:focus{outline:none;box-shadow:none}.unchecked{color:#268bff}cdk-virtual-scroll-viewport.dropdown-data-container{max-height:12.3rem;width:100%;overflow-y:auto;overflow-x:hidden}cdk-virtual-scroll-viewport.dropdown-data-container p.input{margin-left:0}cdk-virtual-scroll-viewport.dropdown-data-container p.input span.mi{padding-left:.4375rem}cdk-virtual-scroll-viewport.dropdown-data-container p.input:hover{background-color:#ebebeb;cursor:pointer}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar{width:.188rem}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar-thumb{color:#d3d3d3;background:lightgray}section.min-maxContainer{display:flex;justify-content:center;margin-bottom:-.125rem;margin-top:.5rem;width:100%}section.min-maxContainer input{width:30%;height:1.875rem;border:1px solid lightgray;color:gray}section.min-maxContainer span{display:inline-block;padding-left:.5rem;padding-right:.5rem;position:relative;top:.3125rem;color:#666}.time-container{width:100%;display:flex;padding:0 .75rem}.time-container input.form-control:disabled{background-color:#fff;width:2.813rem}.time-container input.numberInput:focus{box-shadow:none;border-color:#c2cfd6}.time-container .dot{color:#cbcbcb;position:relative;left:-7px;font-size:17px}.time-container div.arrow-container{flex-direction:column;display:flex;margin-top:.375rem;width:9px;height:18px;margin-right:1.1875rem}.time-container div.arrow-container i{color:#000;cursor:pointer;max-height:9px;font-size:25px;width:10px}.time-container div.arrow-container i:before{width:0;height:0;pointer-events:none;position:relative;left:-9px;top:-11px}.mdi-filter{cursor:pointer}.time-label-container{display:flex;justify-content:flex-start}.time-label-container label{margin-bottom:0;color:#4a4a4a;margin-top:.125rem;margin-left:.625rem;font-weight:700}.time-heading{color:#000;font-size:.8125rem;text-align:left;padding-left:.625rem;margin-top:.625rem;font-weight:700}.column-clear-all{width:94%;text-align:center;border:none;font-size:14px;background:none;text-decoration:underline;color:#268bff}.checkbox-container{display:flex;padding-inline:.625rem}.checkbox-container .data{text-align:left}.checkbox-container:first-of-type{margin-top:.625rem;font-weight:500}.column-clear-all{width:94%;text-align:center;border:none;background:none;text-decoration:underline;color:#268bff}.column-clear-all:disabled{opacity:.5;color:#4a4a4a;font-weight:400}.column-clear-all.align-center{text-align:center}span.mdi-filter-variant.disabled{pointer-events:none;opacity:.5}.datepicker-container{width:100%}span.mdi-filter-variant{color:#cbcbcb;cursor:pointer;font-size:.875rem}span.mdi-filter-variant.active{color:#000}p.filter-tab{font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:normal;color:#1b88ff;border-radius:5px;background-color:#f4f4f4;padding-inline:8px;cursor:pointer;overflow:hidden;text-align:center;text-overflow:ellipsis}p.filter-tab.active{color:#fff;background-color:#1b88ff}button.filter-text-btn{background:white;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;border:none;color:#268bff;margin-inline:4px;margin-top:2px}button.filter-text-btn:disabled{color:#b1b1b1;cursor:not-allowed}::ng-deep .non-edit-datepicker-tooltip .tooltip-inner{max-width:310px!important;width:283px!important;overflow-y:initial!important;padding:0!important}input.slider-text::-webkit-outer-spin-button,input.slider-text::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input.slider-text{-moz-appearance:textfield}input.slider-text.red-border{border:1px solid #f44336!important}::ng-deep .checkbox-sort p.sort-container{margin-top:8px!important;padding-bottom:8px!important}i.mdi-close{cursor:pointer}i.mdi-close.disable-close-icon{pointer-events:none;cursor:not-allowed}input.error-border{border:1px solid #f44336!important}::ng-deep .non-edit-checkbox-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-slider-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-time-tooltip .tooltip-inner{width:250px!important;padding:0!important}::ng-deep .non-edit-time-tooltip.bs-tooltip-start{padding:.4rem}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow{right:0;top:5px!important;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow:before{border-left-color:#fff;left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height)}::ng-deep .no-bottom-border p.sort-container{border-bottom:none!important}::ng-deep .ngx-slider-pointer-min:after{display:none}::ng-deep .ngx-slider-pointer-max:after{display:none}::ng-deep .ngx-slider span.ngx-slider-pointer{width:12px;height:12px;top:-5px;background-color:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bar{height:3px;background:#ededed}::ng-deep .ngx-slider span.ngx-slider-selection{background:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bubble{bottom:-22px;font-size:12px;color:#333}::ng-deep .show-min.ngx-slider span.ngx-slider-model-value{background:white;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .show-max.ngx-slider span.ngx-slider-model-high{background:white;box-shadow:none}::ng-deep .ngx-slider span.ngx-slider-combined{background:white;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .ngx-slider{top:10px!important;margin:5px 0 2px!important}::ng-deep .ngx-slider-animate{top:0!important}.sidebar-slider{margin-bottom:35px!important;margin-left:5px;margin-right:5px}.slider-placeholder{height:14px}::ng-deep .filter-calendar select.form-select:focus{border-color:#c2cfd6;box-shadow:none}::ng-deep .filter-calendar select.form-select{background-color:#fff}.no-data-case{padding-left:.4375rem!important;font-size:.875rem!important;margin-top:10px!important;cursor:pointer}.check-mark,.unread-mark{cursor:pointer}.on-hover:hover .unread-mark,.notificationHover .check-mark{opacity:0;cursor:pointer}.on-hover:hover .check-mark{opacity:1;cursor:pointer}:host ::ng-deep .gt{table-layout:fixed;margin-bottom:0;width:100%}:host ::ng-deep .gt th,:host ::ng-deep .gt td{padding:2px 8px;line-height:normal}:host ::ng-deep .gt thead tr th .upper-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#4a4a4a;margin-bottom:0}:host ::ng-deep .gt thead tr th .lower-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#a7a7a7;margin-bottom:0}:host ::ng-deep .gt thead tr th{background-color:#ededed;position:sticky;position:-webkit-sticky;top:0;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .gt thead tr th br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt thead tr th div.row{display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;width:max-content}:host ::ng-deep .gt thead tr th div.sort-filter-container{display:flex;flex-wrap:nowrap;align-items:center;margin-left:.25rem;margin-right:auto}:host ::ng-deep .gt thead tr th span.mdi-filter-variant{font-size:13px!important;top:-1px!important;position:relative}:host ::ng-deep .gt thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4}:host ::ng-deep .gt tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td:nth-of-type(n + 2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td .upper-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#000;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr td .lower-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#a7a7a7;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt tbody tr:nth-of-type(1) td{border-top:none!important}:host ::ng-deep .gt .custom-column-checkbox-checked,:host ::ng-deep .gt .custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}:host ::ng-deep .gt .custom-column-checkbox-checked{color:#268bff}:host ::ng-deep .gt .custom-column-checkbox-unchecked{color:#4a4a4a}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:nth-of-type(n + 2){box-shadow:inset -1px 0 #d4d4d4}.table-container{overflow-x:auto;overflow-y:auto}.rowSelectCheckbox,#selectAllRowsCheckbox{cursor:pointer}.disable-checkbox{color:#dedede!important;pointer-events:none!important}.mdi-warning{color:#f3c639;font-size:16px;line-height:28px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{opacity:1}.redcolor-status{color:#c62a2a}#no-filter-space{width:.875rem}::ng-deep .mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:1.875rem!important;width:2.625rem;padding:0 .625rem}input.numberInput{margin-right:-.8125rem;padding:0 0 0 .625rem;height:1.875rem}::ng-deep .mat-button-toggle-checked{background-color:#268bff!important;color:#fff!important}::ng-deep .mat-button-toggle-group-appearance-standard{border-radius:0}.hidden{display:none}.no-data-div{margin-top:2.5px}.no-data-div label{margin:0;width:auto;font-weight:500;background-color:#d3d3d3;padding:.3125rem 1.125rem;border-radius:.25rem}.column-values:nth-of-type(2){color:#a7a7a7!important}.custom-column-checkbox-checked,.custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}.custom-column-checkbox-checked{color:#268bff}.custom-column-checkbox-unchecked{color:#4a4a4a}.time-filter-checkboxes>div>p{color:#151b1e}::ng-deep .margin-bottom-zero .mat-radio-label{margin-bottom:0}:host ::ng-deep mat-radio-group br{margin-top:0!important}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__background{width:var(--mat-radio-size);height:var(--mat-radio-size)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__inner-circle{border-width:calc(var(--mat-radio-size) / 2)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{margin:0 0 0 4px;padding:0;top:-2px;position:relative}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio--disabled+label{color:var(--primary-text-color-dark)!important}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{left:-94px;font-size:12px;color:#4a4a4a;position:relative}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:red}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:red}::ng-deep .mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:#00000061!important}::ng-deep .mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-inner-circle{background-color:#00000061!important}::ng-deep tr.white-background-row{background:white}::ng-deep tr.gray-background-row{background:rgba(233,233,233,.5)!important}.remarks-tooltip,.mdi-information,.mdi-information-outline,.seller-tooltip{font-size:.875rem;color:#268bff;position:relative;top:.1875rem;cursor:pointer}.seller-tooltip{top:-1px;float:right}::ng-deep .remarks-info-tooltip .tooltip-inner{max-width:19.25rem!important}.rating-icon,.lur-violation-icon{color:#268bff;cursor:pointer;position:relative;left:-2px}::ng-deep .rating-info-tooltip .tooltip-inner{max-width:800px!important}.spots-info-icon{color:#268bff;cursor:pointer;margin:1px 0 0 -13px}.spots-info-icon-ol{color:#268bff;cursor:pointer;margin:1px 4px 0 -14px}::ng-deep .spot-info-tooltip .tooltip-inner{position:relative;max-width:220px!important;background:#fff;word-break:break-word;display:flex}::ng-deep .spot-info-tooltip-for-orderlisting-table .tooltip-inner{max-width:220px!important;background:#fff;word-break:break-word;display:flex}p.first-row{padding:.5rem .5rem 0;color:#000;white-space:nowrap;text-align:left}p.second-row{padding:2px .5rem .5rem;color:#000;white-space:nowrap;text-align:left}::ng-deep .gt-total-row-tooltip{opacity:1!important}::ng-deep .gt-total-row-tooltip .tooltip-inner{color:#000;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;background-color:#fff;padding:4px!important;width:100%;border-radius:2px!important}::ng-deep .gt-total-row-tooltip .arrow:before{border-top-color:#fff!important}.info-label{margin-left:4px;color:#268bff;vertical-align:text-top}::ng-deep .hierarchy-tooltip{max-width:-moz-fit-content;max-width:fit-content;width:310px!important}::ng-deep .hierarchy-tooltip .tooltip-inner{padding:4px!important;max-width:22.75rem;max-height:11.25rem}table.seller-hierarchy-table{table-layout:fixed}table.seller-hierarchy-table tr th{font-family:Roboto;font-size:.75rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;color:#5e5e5e;white-space:nowrap;background:#ededed;position:sticky;box-shadow:inset 0 1px #d4d4d4;top:0;z-index:1}table.seller-hierarchy-table tr th:nth-child(1){width:20px}table.seller-hierarchy-table tr th:first-of-type,table.seller-hierarchy-table tr td:first-of-type{width:20px;border-left:1px solid #d4d4d4}table.seller-hierarchy-table tr th:last-of-type,table.seller-hierarchy-table tr td:last-of-type{border-right:1px solid #d4d4d4;width:7.875rem!important}table.seller-hierarchy-table tr th:nth-of-type(2){width:7.75rem!important}table.seller-hierarchy-table tr td{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#4a4a4a;box-shadow:none!important;border-top:1px solid #d4d4d4;border-bottom:1px solid #d4d4d4}table.seller-hierarchy-table tr td:nth-of-type(2),table.seller-hierarchy-table tr td:nth-of-type(3){padding-top:.25rem}table.seller-hierarchy-table tr td span{display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}section.hierarchy-table-container{max-height:8.75rem;overflow:auto}section.hierarchy-table-container::-webkit-scrollbar-track{margin-top:1.5rem}.difference-text{padding:.5rem;color:#000;text-align:left}::ng-deep .posted-avg-tooltip .tooltip-inner{width:13.8125rem!important}::ng-deep .drrBooked-info-tooltip{transform:translate(26px,6px)}::ng-deep .drrBooked-info-tooltip .tooltip-inner{max-width:307px!important;width:242px!important;background:#fff;word-break:break-word;display:flex;padding:4px!important;text-align:left}::ng-deep .drrBooked-info-tooltip .tooltip-inner p{color:#000}::ng-deep .drrBooked-info-tooltip .arrow:before{border-right-color:#fff!important}.clickable-data{cursor:pointer;color:#268bff!important;display:flex!important;align-items:center}.clickable-data .spot-details-download-icons{font-size:12px}.disabled-clickable-data{pointer-events:none;color:#d4d4d4!important}.spot-column-tooltip-message{color:#000;width:max-content;text-align:left}div.spinner-for-button-directive{position:relative;left:-1px}.clickable-row table tr.mat-row td{cursor:pointer!important}.tooltip-div-container{text-align:left!important;padding:12px 4px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.notification-tooltip-div-container{text-align:left!important;padding:6px 8px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.mdi-information,.mdi-information-outline{left:3px;top:1px}.mdi-information-outline{position:static}::ng-deep .team-user-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .team-user-tooltip .tooltip-inner{opacity:1!important;width:-moz-fit-content!important;width:fit-content!important;max-width:520px;border-radius:2px;padding:0 4px!important}::ng-deep .team-user-tooltip .tooltip-inner .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:white!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip{opacity:1!important}::ng-deep .gt-icon-column-tooltip .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:white!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .gt-icon-column-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip .tooltip-inner{width:100%}::ng-deep .tooltip-containing-table{opacity:1!important}::ng-deep .tooltip-containing-table .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:white!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .tooltip-containing-table.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .tooltip-containing-table li{margin:0!important;padding:0!important}::ng-deep .tooltip-containing-table ul{margin:0!important;padding-left:8px!important}::ng-deep .tooltip-containing-table .tooltip-inner{width:100%;max-width:230px}table.tooltip-table{table-layout:fixed;margin:4px 0 0;width:100%}table.tooltip-table th,table.tooltip-table td{padding:2px 8px;line-height:normal}table.tooltip-table thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4!important;border:none}table.tooltip-table thead tr th{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67;background-color:#ededed;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}table.tooltip-table thead tr th div.row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}table.tooltip-table tbody tr td{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67}table.tooltip-table tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}table.tooltip-table tbody tr td:nth-of-type(n + 2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}.bottom-border{border-bottom:1px solid #d4d4d4!important}i.disabled{pointer-events:none!important}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i5.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i7.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "component", type: i8.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i8.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i8.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i8.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i8.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i8.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i8.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i8.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i8.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i8.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i9.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["appearance", "animation", "theme", "loadingText", "count", "ariaLabel"] }, { kind: "component", type: i10.CircleProgressComponent, selector: "circle-progress", inputs: ["name", "class", "backgroundGradient", "backgroundColor", "backgroundGradientStopColor", "backgroundOpacity", "backgroundStroke", "backgroundStrokeWidth", "backgroundPadding", "radius", "space", "percent", "toFixed", "maxPercent", "renderOnClick", "units", "unitsFontSize", "unitsFontWeight", "unitsColor", "outerStrokeGradient", "outerStrokeWidth", "outerStrokeColor", "outerStrokeGradientStopColor", "outerStrokeLinecap", "innerStrokeColor", "innerStrokeWidth", "titleFormat", "title", "titleColor", "titleFontSize", "titleFontWeight", "subtitleFormat", "subtitle", "subtitleColor", "subtitleFontSize", "subtitleFontWeight", "imageSrc", "imageHeight", "imageWidth", "animation", "animateTitle", "animateSubtitle", "animationDuration", "showTitle", "showSubtitle", "showUnits", "showImage", "showBackground", "showInnerStroke", "clockwise", "responsive", "startFromZero", "showZeroOuterStroke", "lazy", "options"], outputs: ["onClick"] }, { kind: "component", type: i11.AnnaNoDataComponent, selector: "anna-core-no-data-lib", inputs: ["width", "marginTop"] }, { kind: "directive", type: i12.showEllipsisTextOnHoverDirective, selector: "[showEllipsisTextOnHover]" }, { kind: "component", type: i13.AnnaIconColumnComponent, selector: "anna-core-anna-icon-column", inputs: ["componentName", "iconToShow", "dataObject"], outputs: ["onColumnIconClicked"] }, { kind: "component", type: i14.AnnaColumnDateRangeFilterComponent, selector: "anna-core-anna-column-date-range-filter", inputs: ["tableData", "clonedTableData", "filterTabObjects", "isLurAndCsrComponent", "showFilterHeaderTabs"], outputs: ["filterAppliedToTable", "sortingAppliedToTable", "getSortType", "closeTooltip"] }, { kind: "component", type: i15.AnnaColumnTimeFilterComponent, selector: "anna-core-anna-column-time-filter", inputs: ["tableData", "clonedTableData", "filterTabObjects", "showFilterHeaderTabs", "showAllTimeRangeCheckboxes", "isLurAndCsrComponent", "gtGeneralConfig", "showClearAllFilter", "startFromText", "endToText", "isSortAndFilterAbsent"], outputs: ["timeChanges", "filterAppliedToTable", "sortingAppliedToTable", "getSortType", "closeTooltip"] }, { kind: "component", type: i16.AnnaColumnCheckboxFilterComponent, selector: "anna-core-anna-column-checkbox-filter", inputs: ["showFilterHeaderTabs", "isLurAndCsrComponent", "tableData", "clonedTableData", "filterTabObjects"], outputs: ["filterAppliedToTable", "sortingAppliedToTable", "getSortType", "closeTooltip"] }, { kind: "component", type: i17.AnnaColumnSliderFilterComponent, selector: "anna-core-anna-column-slider-filter", inputs: ["filterTabObjects", "isLurAndCsrComponent", "tableData", "showFilterHeaderTabs", "clonedTableData"], outputs: ["closeTooltip", "filterAppliedToTable", "getSortType", "sortingAppliedToTable"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
688
688
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AnnaNonEditableGenericTableComponent, decorators: [{
|
|
689
689
|
type: Component,
|
|
690
|
-
args: [{ selector: 'anna-core-non-editable-generic-table-lib', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"table-container {{gtGeneralConfig?.tableOuterContainerName}} {{tableBottomBorderClass}}\"\r\n [ngClass]=\"{ 'scroll-left-shadow-effect': isScrolledLeft, 'clickable-row': clickableRow, 'no-data-table': (isNoDataToDisplaySubject$ | async) }\"\r\n (scroll)=\"onTableContainerScroll($event)\">\r\n <div [class]=\"gtGeneralConfig.tableContainerName\" class=\"horizontal-scroll-for-table-container\" [ngStyle]=\"{\r\n height:\r\n tableData.length < maximumRowsWhichCanBeRenderedWithoutScroll\r\n ? 'calc(' +\r\n ((gtDimension.rowHeight) * tableData.length +\r\n (!tableData.length || !gtGeneralConfig.totalRow\r\n ? gtDimension.headerHeight\r\n : gtDimension.headerHeight + gtDimension.rowHeight)) +\r\n 'px)'\r\n : gtDimension.tableHeight\r\n }\">\r\n <table class=\"gt\" [ngClass]=\"tableClass\" mat-table [dataSource]=\"renderedData\">\r\n <tr class=\"header-row\" mat-header-row *matHeaderRowDef=\"tableColumns; sticky: true\"\r\n [style.height.px]=\"gtDimension.headerHeight\"></tr>\r\n <tr class=\"total-row\" mat-header-row [style.height.px]=\"gtDimension.rowHeight\"\r\n *matHeaderRowDef=\"totalRowColumns; sticky: true\" [class.hidden]=\"\r\n showSkeletonLoading ||\r\n (!showSkeletonLoading && !tableData.length ) ||\r\n (isNoDataToDisplaySubject$ | async) || \r\n (!showSkeletonLoading && !gtGeneralConfig.totalRow)\r\n \"></tr>\r\n <tr [class]=\"rowData.gtClass\" [ngClass]=\"{'no-border-tr': (isNoDataToDisplaySubject$ | async)}\" mat-row\r\n *matRowDef=\"let rowData; columns: tableColumns\" [style.height.px]=\"gtDimension.rowHeight\"\r\n (click)=\"dataRowClicked(rowData)\"></tr>\r\n\r\n <!-- TOTAL ROW -->\r\n <ng-container [matColumnDef]=\"column.colName\" *ngFor=\"let column of totalRowInfo; trackBy: trackByFn\">\r\n <td mat-header-cell *matHeaderCellDef [attr.colspan]=\"column.colspan\" class=\"{{column.class}}\">\r\n\r\n <ng-container *ngIf=\"column['isActionColumn']\">\r\n <a *ngFor=\"let data of column.actionData\" [class]=\"data.class\"\r\n (click)=\"onClickableDataClicked({}, data.id)\">\r\n {{ data.name }}\r\n </a>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column['isIconColumn']\">\r\n <i class=\"{{column?.iconData?.class}}\" (click)=\"iconClickedInTotalRow(column?.colName)\">\r\n </i>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!column['isActionColumn']\">\r\n <strong class=\"upper-label\">{{ column.data }}</strong>\r\n <ng-container *ngIf=\"column.lowerData\">\r\n <br>\r\n <span *ngIf=\"column.colName == 'total-potential-booked-unit' && gtGeneralConfig.component == 'RATING';\r\n else columnLowerData\" class=\"clickable-data\"\r\n (click)=\"spotDetailsDownloadClicked('TOTALROW')\"\r\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\">{{ column.lowerData }}\r\n <span class=\"material-icons spot-details-download-icons\">get_app</span>\r\n <ng-container *ngIf=\"downloadInProgress \r\n && selectedRowTypeForDownload == 'TOTALROW' \">\r\n <ng-container [ngTemplateOutlet]=\"circularProgressBar\"></ng-container>\r\n </ng-container>\r\n </span>\r\n <ng-template #columnLowerData>\r\n <span class=\"lower-label\">{{ column.lowerData }}</span>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.tooltipMessage && gtGeneralConfig.component != 'LUR_VIOLATIONS'\">\r\n <i class=\"{{column.tooltipIconClass}}\" container=\"body\" [ngbTooltip]=\"column.tooltipMessage\"\r\n tooltipClass=\"gt-total-row-tooltip\" placement=\"bottom\"></i>\r\n </ng-container>\r\n <ng-container *ngIf=\"gtGeneralConfig.component == 'LUR_VIOLATIONS' && column.tooltipMessage\">\r\n <i class=\"mi mdi-info-outline info-label\" container=\"body\"\r\n [ngbTooltip]=\"lurViolationTotalRowToolTip\" tooltipClass=\"gt-total-row-tooltip\"\r\n placement=\"bottom\"></i>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <!-- MAIN ROW -->\r\n <ng-container [matColumnDef]=\"columnDef.headerInfo[0].objectKey\"\r\n *ngFor=\"let columnDef of tableHeaders; trackBy: trackByFn\">\r\n <th #tableHeader nowrap mat-header-cell *matHeaderCellDef [style.width]=\"columnDef.width\">\r\n <div class=\"row mx-0\" *ngFor=\"let header of columnDef.headerInfo; let j = index;\">\r\n <p *ngIf=\"header.typeOfHeaderData === 'STRING'\"\r\n [ngClass]=\"{ 'upper-label': j === 0, 'lower-label': j === 1 }\">\r\n <ngx-skeleton-loader *ngIf=\"header.name == null\" count=\"1\"\r\n [theme]=\"{ height: '10px', display: 'block', width: columnDef.width, 'max-width':'calc(100% - 20px)' }\">\r\n </ngx-skeleton-loader>\r\n <ng-container *ngIf=\"header.name\">\r\n {{ header.name }}\r\n </ng-container>\r\n\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'impsInfoTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"impsInfoTooltip\" container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'spotsColumnEquivalizationMessageTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" container=\"body\" #t=\"ngbTooltip\"\r\n container=\"body\" [ngbTooltip]=\"spotsColumnEquivalizationMessageTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'underDeliveryTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" container=\"body\" #t=\"ngbTooltip\"\r\n container=\"body\" [ngbTooltip]=\"underDeliveryTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'overDeliveryTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" container=\"body\" #t=\"ngbTooltip\"\r\n container=\"body\" [ngbTooltip]=\"overDeliveryTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'ratingInfoTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"ratingInfoTooltip\" container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'rateInfoTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"rateInfoTooltip\" container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'ongoingRevBookedColumnTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"ongoingRevBookedColumnTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'completedRevBookedColumnTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"completedRevBookedColumnTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedRate'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"avgBookedRate\" placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedRtg'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"avgBookedRtg\" placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedImps'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"avgBookedImps\" placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'automationTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"automationTooltip\" placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'rebateImpact'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"rebateImpact\" placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n </p>\r\n\r\n <ng-container *ngIf=\"header.typeOfHeaderData === 'CHECKBOX'\">\r\n <span *ngIf=\"gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\" (click)=\"selectUnselectAllRows()\">\r\n check_box\r\n </span>\r\n <span *ngIf=\"!gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{ 'disable-checkbox': gtGeneralConfig.disableHeaderCheckbox }\"\r\n (click)=\"selectUnselectAllRows()\">\r\n check_box_outline_blank\r\n </span>\r\n </ng-container>\r\n\r\n <div *ngIf=\"gtGeneralConfig.showAllColumnFilter\" class=\"sort-filter-container\">\r\n <ng-container *ngIf=\"header.showTooltipIcon\">\r\n <!-- Active tooltip Functionality -->\r\n <ng-container *ngIf=\"header.filter === 'CHECKBOX'\">\r\n\r\n <span class=\"mdi mdi-filter-variant\" [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys], \r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\" [ngbTooltip]=\"filterTooltip\" placement=\"{{filterAlignment}}\"\r\n container=\"body\" tooltipClass=\"non-edit-checkbox-tooltip\"\r\n [autoClose]=\"'outside'\" triggers=\"manual\" #t=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t, header)\" (hidden)=\"closeTooltip()\">\r\n </span><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'SLIDER'\">\r\n <span class=\"mdi mdi-filter-variant\" [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\" [ngbTooltip]=\"sliderToolTip\" placement=\"bottom left-top\" container=\"body\"\r\n tooltipClass=\"non-edit-slider-tooltip\" [autoClose]=\"'outside'\" triggers=\"manual\"\r\n #t1=\"ngbTooltip\" (click)=\"bindTheValueToToolTip(t1, header)\"\r\n (hidden)=\"closeTooltip()\">\r\n </span><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'DATE'\">\r\n <span class=\"mdi mdi-filter-variant\" [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\" [ngbTooltip]=\"datePickerTooltip\" placement=\"bottom auto\" container=\"body\"\r\n tooltipClass=\"non-edit-datepicker-tooltip\" [autoClose]=\"'outside'\"\r\n triggers=\"manual\" #t2=\"ngbTooltip\" (click)=\"bindTheValueToToolTip(t2, header)\"\r\n (hidden)=\"closeTooltip()\">\r\n </span><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'WEEK'\">\r\n <span class=\"mdi mdi-filter-variant\" [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\" [ngbTooltip]=\"weekPickerToolTip\" placement=\"bottom left-top\"\r\n container=\"body\" [autoClose]=\"'outside'\" triggers=\"manual\" #t3=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t3, header)\" (hidden)=\"closeTooltip()\">\r\n </span><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'TIME'\">\r\n <span class=\"mdi mdi-filter-variant\" [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\" [ngbTooltip]=\"timeFilterToolTip\" placement=\"bottom left-top auto\"\r\n container=\"body\" tooltipClass=\"non-edit-time-tooltip\" [autoClose]=\"'outside'\"\r\n triggers=\"manual\" #t4=\"ngbTooltip\" (click)=\"bindTheValueToToolTip(t4, header)\"\r\n (hidden)=\"closeTooltip()\">\r\n </span><br />\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!header.showTooltipIcon\">\r\n <span id=\"no-filter-space\"></span><br />\r\n </ng-container>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'lurViolationInfoTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"lurViolationInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n\r\n </div>\r\n </div>\r\n </th>\r\n\r\n <ng-container *matCellDef=\"let ROW_DATA\">\r\n <td mat-cell [style.background]=\"ROW_DATA.backgroundColor\" [style.border]=\"ROW_DATA.border\"\r\n class=\"{{ROW_DATA.rowClass}}\"\r\n [attr.rowspan]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'Rowspan']\"\r\n *ngIf=\"!hideSomeTds ||( hideSomeTds && !ROW_DATA['hide' + columnDef.headerInfo[0].objectKey + 'Td'])\">\r\n <ngx-skeleton-loader *ngIf=\"showSkeletonLoading\" count=\"1\"\r\n [theme]=\"{ height: '10px', display: 'block' }\">\r\n </ngx-skeleton-loader>\r\n\r\n <ng-container *ngIf=\"!showSkeletonLoading\">\r\n <ng-container *ngIf=\"tableData.length > 0 && !(isNoDataToDisplaySubject$ | async)\">\r\n <ng-container\r\n *ngFor=\"let subline of columnDef.headerInfo; let subLineIndex = index; trackBy: trackByFn\">\r\n <div showEllipsisTextOnHover>\r\n <ng-container [ngSwitch]=\"columnDef.headerInfo[subLineIndex].typeOfBodyData\">\r\n <ng-container *ngSwitchCase=\"'ICON'\">\r\n <i *ngIf=\"!(starredInProgress && ROW_DATA.orderId == selectedStarredOrderId)\"\r\n [class]=\"ROW_DATA.iconClass\"\r\n (click)=\"iconClicked(ROW_DATA,ROW_DATA.iconClass)\"\r\n ngbTooltip=\"{{ ROW_DATA.iconTitleText }}\" placement=\"bottom\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"></i>\r\n <ng-container\r\n *ngIf=\"starredInProgress && ROW_DATA.orderId == selectedStarredOrderId\">\r\n <div class=\"spinner-for-button-directive\"></div>\r\n </ng-container>\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'ICON_CELL'\">\r\n <ng-container\r\n *ngFor=\"let action of ROW_DATA[columnDef.headerInfo[subLineIndex].actionKey]\">\r\n\r\n <i *ngIf=\"action.showIcon\" [class]=\"action.iconClass\"\r\n (mouseenter)=\"mouseEnterOnStringTextActionType(ROW_DATA, columnDef.headerInfo[subLineIndex].tooltipKey)\"\r\n placement=\"bottom auto\" container=\"body\" [autoClose]=\"true\"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"action.showTooltip ? userLoggedInDetails : null\"\r\n (click)=\"textActionClicked(ROW_DATA, action.id, columnDef.headerInfo[subLineIndex])\"\r\n [disableTooltip]=\"!action.showTooltip\">\r\n </i>\r\n\r\n <ng-container *ngIf=\"action.showObjectKey\">\r\n {{ ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey] }}\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'HTML_STRING'\">\r\n <p [innerHTML]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n (click)=\"innerHTMLCellClicked($event,ROW_DATA)\"></p>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'SVG_ICON'\">\r\n <anna-core-anna-icon-column [componentName]=\"gtGeneralConfig.component\"\r\n [dataObject]=\"ROW_DATA\"\r\n [iconToShow]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey] \"\r\n (onColumnIconClicked)=\"svgIconClicked($event)\"></anna-core-anna-icon-column>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'TEXT_ACTIONS'\">\r\n <ng-container\r\n *ngFor=\"let text of ROW_DATA[columnDef.headerInfo[subLineIndex].actionKey]\">\r\n <button *ngIf=\"text.showTooltip\"\r\n (click)=\"textActionClicked(ROW_DATA,text.id, columnDef.headerInfo[subLineIndex])\"\r\n [disabled]=\"text.isDisabled\" class=\"{{text.class}}\"\r\n (mouseenter)=\"mouseEnterOnTextActionType(ROW_DATA, columnDef.headerInfo[subLineIndex].tooltipKey)\"\r\n [ngbTooltip]=\"textActionTooltipTemplate\" placement=\"auto\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\">\r\n {{ text.name}}\r\n </button>\r\n\r\n <button *ngIf=\"!text.showTooltip\"\r\n (click)=\"textActionClicked(ROW_DATA,text.id, columnDef.headerInfo[subLineIndex])\"\r\n [disabled]=\"text.isDisabled\" class=\"{{text.class}}\">\r\n {{text.name}}\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CHECKBOX'\">\r\n <span *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n [ngClass]=\"{\r\n 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\" class=\"material-icons custom-column-checkbox-checked\" (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n false\r\n )\r\n \">\r\n check_box\r\n </span>\r\n <span *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n class=\"material-icons custom-column-checkbox-unchecked\" [ngClass]=\"{\r\n 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\" (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n true\r\n )\r\n \">\r\n check_box_outline_blank\r\n </span>\r\n\r\n <ng-container\r\n *ngFor=\"let action of ROW_DATA[columnDef.headerInfo[subLineIndex].actionKey]\">\r\n <i *ngIf=\"action.showIcon\" [class]=\"action.iconClass\"\r\n [ngClass]=\"{'disabled': action.disabledIcon}\"\r\n (mouseenter)=\"mouseEnterOnStringTextActionTypeContainingTable(ROW_DATA, columnDef.headerInfo[subLineIndex].tooltipKey)\"\r\n placement=\"bottom auto\" container=\"body\" [autoClose]=\"true\"\r\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\r\n [ngbTooltip]=\"tooltipContainingTableTemplate\">\r\n </i>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CLICKABLE_DATA'\">\r\n <a *ngFor=\"let text of ROW_DATA[columnDef.headerInfo[subLineIndex].actionKey]\"\r\n [class]=\"text.class\"\r\n (click)=\"onClickableDataClicked(ROW_DATA, text.id)\">\r\n {{ text.name }}\r\n </a>\r\n <span\r\n *ngIf=\"subline.objectKey == 'displayBookedUnits' && gtGeneralConfig.component == 'RATING'\"\r\n class=\"clickable-data\"\r\n (click)=\"spotDetailsDownloadClicked('DATAROW', ROW_DATA)\"\r\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\">{{\r\n ROW_DATA.displayBookedUnits}}\r\n <span\r\n class=\"material-icons spot-details-download-icons\">get_app</span>\r\n <ng-container *ngIf=\"downloadInProgress \r\n && ROW_DATA.inventoryCodeId == selectedInventoryIdForDownload \r\n && ROW_DATA.demographic == selectedDemographicForDownload \">\r\n <ng-container\r\n [ngTemplateOutlet]=\"circularProgressBar\"></ng-container>\r\n </ng-container>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING___ICON_OR_TEXT_ACTION'\">\r\n <ng-container\r\n *ngFor=\"let action of ROW_DATA[columnDef.headerInfo[subLineIndex].actionKey]\">\r\n <span [class]=\"action.additionalTextBeforeLinkClass\"\r\n [innerHtml]=\"action.additionalTextBeforeLink\"\r\n ngbTooltip=\"{{ action.additionalTextBeforeLink }}\"\r\n placement=\"bottom\" container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"!action.enableTooltipForAdditionalText\"></span>\r\n\r\n <ng-container *ngIf=\"action && action.typeOfData== 'STRING'\">\r\n {{ action.data }}\r\n </ng-container>\r\n\r\n <a [id]=\"action.id\" *ngIf=\"action.showLink\"\r\n (click)=\"textActionClicked(ROW_DATA, action.id, columnDef.headerInfo[subLineIndex])\"\r\n [class]=\"action.linkClass\"\r\n [ngClass]=\"{'disabled': action.disabledLink}\">{{action.data}}</a>\r\n <span ngbTooltip=\"{{ action.additionalTextAfterLink }}\"\r\n placement=\"bottom\" container=\"body\"\r\n [class]=\"action.additionalTextAfterLinkClass\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"!action.enableTooltipForAdditionalAfterText\">\r\n {{ action.additionalTextAfterLink }}\r\n </span>\r\n\r\n <ng-container *ngIf=\"action.showTooltip\">\r\n <ng-container *ngIf=\"action.tooltipData.innerHtml\">\r\n\r\n <i *ngIf=\"action.showIcon\" [class]=\"action.iconClass\"\r\n [ngClass]=\"{'disabled': action.disabledIcon}\"\r\n (mouseenter)=\"mouseEnterOnStringTextActionTypeContainingTable(ROW_DATA, columnDef.headerInfo[subLineIndex].tooltipKey)\"\r\n placement=\"bottom auto\" container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\r\n [ngbTooltip]=\"tooltipContainingTableTemplate\">\r\n </i>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!action.tooltipData.tooltipTableBody\">\r\n <i *ngIf=\"action.showIcon\" [class]=\"action.iconClass\"\r\n [ngClass]=\"{'disabled': action.disabledIcon}\"\r\n (click)=\"iconClickedOnStringIconActionType(ROW_DATA, action.id, columnDef.headerInfo[subLineIndex])\"\r\n (mouseleave)=\"mouseLeaveTextActionType(ROW_DATA)\"\r\n (mouseenter)=\"mouseEnterOnStringTextActionType(ROW_DATA, columnDef.headerInfo[subLineIndex].tooltipKey)\"\r\n [placement]=\"action.tooltipPlacement ? action.tooltipPlacement : 'bottom auto'\"\r\n container=\"body\" [autoClose]=\"true\"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class {{ action.tooltipClass }}\"\r\n [ngbTooltip]=\"markAsReadTip\">\r\n </i>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!action.showTooltip\">\r\n <i *ngIf=\"action.showIcon\" [class]=\"action.iconClass\"\r\n [ngClass]=\"{'disabled': action.disabledIcon}\"\r\n (click)=\"iconClickedOnStringIconActionType(ROW_DATA, action.id, columnDef.headerInfo[subLineIndex])\">\r\n </i>\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING_OR_INPUT'\">\r\n <ng-container *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]?.type == 'STRING';\r\n else inputBox\">\r\n <span\r\n [innerHtml]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]?.value\"></span>\r\n </ng-container>\r\n <ng-template #inputBox>\r\n <input\r\n placeholder=\"{{ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]?.placeholder}}\"\r\n showEllipsisTextOnHover\r\n class=\"{{ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].className}}\"\r\n (keydown)=\"changesMadeInEditableInputBox($event,ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey], false)\"\r\n (paste)=\"changesMadeInEditableInputBox($event, ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey], true)\"\r\n (ngModelChange)=\"editableInputValueChanged($event, ROW_DATA, columnDef.headerInfo[subLineIndex].objectKey)\"\r\n [ngModel]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].value\"\r\n [disabled]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].disabled\"\r\n [ngClass]=\"{'red-border': ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].hasError }\">\r\n\r\n <i *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].showIcon\"\r\n container=\"body\"\r\n [ngbTooltip]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].iconTooltip\"\r\n tooltipClass=\"gt-total-row-tooltip\" placement=\"bottom\"\r\n class=\"{{ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].iconClass}}\">\r\n </i>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'HTML'\">\r\n <span\r\n [innerHtml]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"></span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'SINGLE_RADIO'\">\r\n <span *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n [ngClass]=\"{\r\n 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n class=\"mdi mdi-radiobox-marked\" (click)=\"\r\n null\r\n \">\r\n\r\n </span>\r\n <span *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n class=\"mdi mdi-radiobox-blank\" [ngClass]=\"{\r\n 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\" (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n true\r\n )\r\n \">\r\n\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'RADIO'\">\r\n <mat-radio-group *ngIf=\"ROW_DATA['RadioButtonConfig']\"\r\n [ngModel]=\"ROW_DATA[subline.objectKey]\"\r\n [disabled]=\"ROW_DATA['RadioButtonConfig'][0].isDisabled\">\r\n <ng-container\r\n *ngFor=\"let radioButton of ROW_DATA['RadioButtonConfig']; let last = last\">\r\n <mat-radio-button value=\"{{ radioButton.value }}\"\r\n class=\"{{ radioButton.class }}\" (click)=\"\r\n radioButtonClicked(\r\n ROW_DATA,\r\n radioButton.value,\r\n ROW_DATA['RadioButtonConfig'][0].isDisabled\r\n )\r\n \">{{ radioButton.label }}\r\n </mat-radio-button>\r\n <i class=\" {{radioButton.iconClass}}\"\r\n (click)=\"radioButtonIconClicked(ROW_DATA)\"></i>\r\n <br *ngIf=\"!last\" />\r\n </ng-container>\r\n </mat-radio-group>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING_WITH_TOOLTIP'\">\r\n <ng-container\r\n *ngFor=\"let action of ROW_DATA[columnDef.headerInfo[subLineIndex].actionKey]\">\r\n <span> {{ action?.dataToDisplay }}</span>\r\n <span *ngIf=\"action?.showTooltip\"\r\n [ngbTooltip]=\"textActionTooltipTemplate\"\r\n (mouseenter)=\"mouseEnterOnStringTextActionType(ROW_DATA, columnDef.headerInfo[subLineIndex].tooltipKey)\"\r\n [placement]=\"action?.tooltipPosition\" container=\"body\"\r\n [class]=\"action?.tooltipIconClass\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"action?.disableTooltip\">\r\n </span>\r\n <span> {{ action?.dataToDisplayAfterTooltip }}</span>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n <ng-container *ngIf=\"subline.objectKey != 'description'\">\r\n <span>{{ ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n }}</span>\r\n <i *ngIf=\"subline.objectKey == 'inventoryCode' && ROW_DATA['isSellerGroup'] && gtGeneralConfig.component == 'RATING' \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n [ngbTooltip]=\"sellerHierarchyTooltip\" placement=\"bottom auto\"\r\n container=\"body\" [autoClose]=\"true\" triggers=\"manual\"\r\n (hidden)=\"closeTooltip()\" #info=\"ngbTooltip\"\r\n tooltipClass=\"hierarchy-tooltip remove-on-scroll-class\"\r\n (mouseenter)=\"bindTheValueToSellerGroupTooltip(ROW_DATA.sellerGroupHierarchy, info)\">\r\n </i>\r\n\r\n <i *ngIf=\"subline.objectKey == 'displayBookedAverageRating' && gtGeneralConfig.component == 'RATING' && ROW_DATA['showRatingAverageIcon'] \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n placement=\"bottom auto\" container=\"body\" [autoClose]=\"true\"\r\n (mouseenter)=\"setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\"\r\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"postedRatingDifference\">\r\n </i>\r\n\r\n <i *ngIf=\"subline.objectKey == 'displayBookedAverageImpression' && gtGeneralConfig.component == 'RATING' && ROW_DATA['showImpressionAverageIcon'] \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n placement=\"bottom auto\" container=\"body\" [autoClose]=\"true\"\r\n (mouseenter)=\"setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\"\r\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"postedImpDifference\">\r\n </i>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"subline.objectKey == 'description'\">\r\n <p\r\n *ngIf=\"ROW_DATA.descriptionMessage || ROW_DATA.descriptionEmailReferenceNum\">\r\n <ng-container *ngIf=\"ROW_DATA.descriptionMessage\">\r\n {{ ROW_DATA.descriptionMessage }}\r\n <br />\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"ROW_DATA.descriptionEmailReferenceNum != '-' && ROW_DATA.descriptionEmailReferenceNum != ''\">\r\n Email Ref: {{ ROW_DATA.descriptionEmailReferenceNum }}\r\n <br />\r\n </ng-container>\r\n </p>\r\n <a href=\"{{ ROW_DATA.descriptionDetailsUrl }}\" target=\"_blank\"\r\n *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'PDF' || ROW_DATA.descriptionDetailsUrlType === 'EXCEL'\">\r\n <button class=\"btn viewDetailsAndEmailBtn\">Download</button>\r\n </a>\r\n <ng-container\r\n *ngIf=\"ROW_DATA.activityname.toLowerCase() == 'order onboarded'\">\r\n <a *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'LINK'\"\r\n (click)=\"viewDetailsClicked(ROW_DATA)\">\r\n <button\r\n class=\"btn viewDetailsAndEmailBtn order-onboarded\">View\r\n details</button>\r\n </a>\r\n </ng-container>\r\n\r\n <a href=\"{{ ROW_DATA.descriptionEmailUrl }}\" target=\"_blank\"\r\n *ngIf=\"ROW_DATA.descriptionEmailUrl != '-' && ROW_DATA.descriptionEmailUrl != ''\">\r\n <button class=\"btn viewDetailsAndEmailBtn\">View email</button>\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"(isNoDataToDisplaySubject$ | async)\">\r\n <div>\r\n {{null}}\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </table>\r\n </div>\r\n <anna-core-no-data-lib [width]=\"noDataWidth\" [marginTop]=\"marginTop\" *ngIf=\"(isNoDataToDisplaySubject$ | async)\">\r\n </anna-core-no-data-lib>\r\n</div>\r\n\r\n<!-- Checkbox template -->\r\n<ng-template #filterTooltip>\r\n <anna-core-anna-column-checkbox-filter [tableData]=\"tableData\" [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\" [clonedTableData]=\"clonedTableData\" [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\" (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\">\r\n </anna-core-anna-column-checkbox-filter>\r\n</ng-template>\r\n\r\n<!-- Slider template -->\r\n<ng-template #sliderToolTip>\r\n <anna-core-anna-column-slider-filter [tableData]=\"tableData\" [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\" [clonedTableData]=\"clonedTableData\" [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\" (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\">\r\n </anna-core-anna-column-slider-filter>\r\n</ng-template>\r\n\r\n<!-- Date Picker Template -->\r\n<ng-template #datePickerTooltip>\r\n <anna-core-anna-column-date-range-filter [tableData]=\"tableData\" [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\" [clonedTableData]=\"clonedTableData\" [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\" (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\">\r\n </anna-core-anna-column-date-range-filter>\r\n</ng-template>\r\n\r\n<!-- Week Picker Template -->\r\n<ng-template #weekPickerToolTip>\r\n <!-- <div class=\"weekpicker-container\">\r\n <anna-core-week-calendar-filter-lib\r\n [week-calendar-config]=\"gtGeneralConfig.multiWeekPickerConfig\"\r\n (apply)=\"applyWeekFilter($event)\"\r\n [from-date]=\"calendarMinEnabledDate\"\r\n [to-date]=\"calendarMaxEnabledDate\"\r\n >\r\n </anna-core-week-calendar-filter-lib>\r\n </div> -->\r\n</ng-template>\r\n\r\n<!-- Time Filter Template -->\r\n<ng-template #timeFilterToolTip>\r\n <anna-core-anna-column-time-filter [tableData]=\"tableData\" [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\" [showAllTimeRangeCheckboxes]=\"showCheckboxesForTimeFilter\"\r\n [clonedTableData]=\"clonedTableData\" [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\" (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\">\r\n </anna-core-anna-column-time-filter>\r\n</ng-template>\r\n\r\n<ng-template #columnInfoTooltip>\r\n <p style=\"color: black;white-space: nowrap;\">This preemption is rejected and not marked for credit.</p>\r\n</ng-template>\r\n\r\n<ng-template #ratingInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked Rating' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected Rating' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #impsInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked IMPS' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected IMPS' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #spotsColumnEquivalizationMessageTooltip>\r\n <p class=\"spot-column-tooltip-message\">This consists of equivalized spots and un-equivalized Paid Programs &\r\n un-equivalized Non-spots.</p>\r\n</ng-template>\r\n\r\n<ng-template #underDeliveryTooltip>\r\n <p class=\"spot-column-tooltip-message\">Indicates the Under-delivery percentage based on booked and posted RTG/IMPS.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #overDeliveryTooltip>\r\n <p class=\"spot-column-tooltip-message\">Indicates the Over-delivery percentage based on booked and posted RTG/IMPS.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #rateInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked Rate' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected $ Value' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #sellerHierarchyTooltip>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length > 0\">\r\n <section class=\"hierarchy-table-container\">\r\n <table class=\"seller-hierarchy-table\">\r\n <thead>\r\n <tr>\r\n <th>#</th>\r\n <th>Inventory Codes</th>\r\n <th>Program/Description</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of sellerGroupHierarchy; let tooltipIndex = index\">\r\n <td>{{ tooltipIndex + 1 }}</td>\r\n <td>\r\n <span showEllipsisTextOnHover>{{ data.InventoryCode }}</span>\r\n </td>\r\n <td>\r\n <span showEllipsisTextOnHover>{{ data.Program }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </section>\r\n </ng-container>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length == 0\">\r\n <span style=\"color: #000\">Seller group not available for this inventory code</span>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #lurViolationInfoTooltip>\r\n <p class=\"first-row\">The values are for the entire week.</p>\r\n</ng-template>\r\n\r\n<ng-template #postedRatingDifference>\r\n <p class=\"difference-text\">The difference between posted and booked average rating is\r\n {{isDifferenceLessThan25Percent ? 'less' : 'more'}} than 25%.</p>\r\n</ng-template>\r\n\r\n<ng-template #postedImpDifference>\r\n <p class=\"difference-text\">The difference between posted and booked average impression is\r\n {{isDifferenceLessThan25Percent ? 'less' : 'more'}} than 25%.</p>\r\n</ng-template>\r\n\r\n<ng-template #ongoingRevBookedColumnTooltip>\r\n <p>The Booked $ value, Spots, GRP, CPP, IMPS, CPM corresponds on the last permanent revision generated</p>\r\n</ng-template>\r\n\r\n<ng-template #completedRevBookedColumnTooltip>\r\n <p>The Booked $ value corresponds on the last permanent revision generated</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedRate>\r\n <p>This is the booked average Rate</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedRtg>\r\n <p>This is the booked average RTG</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedImps>\r\n <p>This is the booked average IMP(\u2019000)</p>\r\n</ng-template>\r\n\r\n<ng-template #automationTooltip>\r\n <p>Please get the order business rules approved to activate the order for automation. Only for the\r\n automation-activated orders, any approved MGs, ADUs, or credited spots on ANNA will be fed into the traffic\r\n system i.e. ANNA revisions. Additionally, ANNA will only enter buyer revisions into traffic for the selected\r\n Medialine/WOC orders.</p>\r\n</ng-template>\r\n\r\n<ng-template #rebateImpact>\r\n <p>\r\n Rebate impact value is for the originally ordered spot length and is not equivalized.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #lurViolationTotalRowToolTip>\r\n <ul>\r\n <li>\r\n <strong>POLITICAL RATE VIOLATIONS:</strong>\r\n Violations flagged when non-political spots are booked at a rate lower than the minimum booked rate for\r\n political candidates for the same week, Inventory Code and Revenue Class.\r\n\r\n </li>\r\n <li>\r\n <strong>CANDIDATE TO CANDIDATE VIOLATION:</strong>\r\n Violations flagged when political spots are booked at different rates to other political spots for the same\r\n week, Inventory Code and Revenue Class.\r\n </li>\r\n </ul>\r\n\r\n</ng-template>\r\n\r\n<ng-template #circularProgressBar>\r\n <circle-progress [percent]=\"percentDone\" [radius]=\"5\" [showTitle]=\"false\" [showUnits]=\"false\" [showSubtitle]=\"false\"\r\n [outerStrokeWidth]=\"3\" [innerStrokeWidth]=\"3\" [space]=\"-3\" [outerStrokeColor]=\"'#268bff'\"\r\n [innerStrokeColor]=\"'#d5d5d5'\" [animationDuration]=\"10\"></circle-progress>\r\n</ng-template>\r\n\r\n\r\n<ng-template #userLoggedInDetails>\r\n <div class=\"tooltip-div-container\">\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n <span *ngIf=\"data.key != 'read'\">\r\n {{ data.key }} <b> {{data.value}}</b>\r\n </span>\r\n <span *ngIf=\"data.key == 'read'\">\r\n <b> {{data.value}}</b>\r\n </span>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #markAsReadTip>\r\n <div class=\"notification-tooltip-div-container\">\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{data.value}}\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #textActionTooltipTemplate>\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.key }} <b> {{data.value}}</b>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #tooltipContainingTableTemplate>\r\n <div *ngIf=\"tooltipContainingTable\" [innerHTML]=\"tooltipContainingTable.innerHtml\" class=\"notification-tooltip-div-container\">\r\n <!-- <ul>\r\n <li *ngFor=\"let headerMsg of tooltipContainingTable.tableHeaderMsg\">\r\n <b> {{headerMsg}} </b>\r\n </li>\r\n </ul>\r\n\r\n <table class=\"tooltip-table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let header of tooltipContainingTable.tooltipTableHeader\">\r\n {{ header}}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let rows of tooltipContainingTable.tooltipTableBody\">\r\n <td *ngFor=\"let data of rows\">\r\n {{ data }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <ul>\r\n <li style=\"margin-top:10px; padding:0\" *ngFor=\"let footerMsg of tooltipContainingTable.tableFooterMsg\">\r\n {{ footerMsg }} \r\n </li>\r\n </ul> -->\r\n\r\n </div>\r\n</ng-template>\r\n<!-- <ng-template #textActionTooltipTemplate>\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.key }} <b> {{data.value}}</b>\r\n </ng-container>\r\n</ng-template> -->", styles: [".sort-btn{background:white;border:none;border-right:1px solid #1b88ff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.07;letter-spacing:normal;color:#1b88ff;cursor:pointer;flex:1;text-align:center}.sort-btn:last-of-type{border-right:none}.sort-btn.active{color:#202b47;text-decoration:none}p.sort-container{margin-top:8px;padding-bottom:8px;border-bottom:1px solid #e6e6e6;margin-bottom:0;display:flex}::ng-deep .tooltip-inner{max-height:22rem;background-color:#fff;border:1px solid white;border-radius:5px;box-shadow:0 2px 2px #0000003d,0 0 2px #0000001f;max-width:251px;width:100%;padding:0!important}::ng-deep .tooltip-inner div.radio-container{flex-wrap:wrap}::ng-deep .md-drppicker{box-shadow:unset!important}::ng-deep .available{color:#999}::ng-deep .bs-tooltip-bottom .arrow:before{border-bottom-color:#fff!important}::ng-deep .bs-tooltip-left .arrow:before{border-left-color:#fff!important}::ng-deep .tooltip.show{opacity:1}.input{text-align:left;margin:5px 10px 5px 5px;display:flex;align-items:center;width:230px;white-space:nowrap}.data{color:#000;font-weight:700;margin-left:5px;margin-right:5px}span.data{display:inline-block;text-overflow:ellipsis;white-space:pre;width:100%;overflow:hidden}.check-box{font-size:14px;cursor:pointer;position:relative;top:-1px}span.mdi-filter.active{color:#000;opacity:1!important;pointer-events:all!important}p{margin-bottom:0;line-height:initial}span.mdi-filter{color:#cbcbcb}::ng-deep .ngx-slider-pointer{top:-5px!important;width:12px!important;height:12px!important;background:#bdbdbd!important;border:1px solid #ffffff!important;box-shadow:0 1px 3px #0000004d!important;border-radius:16px!important}input:focus{outline:none}input::placeholder{color:#c8c8c8}.cancel-btn{background:#c7e1ff;color:#268bff}.apply-btn{background:#268bff;color:#fff;margin-left:.3125rem}div.radio-container{display:flex;white-space:nowrap;justify-content:space-between;background-color:#f4f4f4;border-radius:.125rem;margin:.4375rem .4375rem .25rem}div.radio-container div{flex:1;width:50%}div.radio-container div.full-width{width:100%}div.radio-container input{position:relative;top:.125rem;margin-right:.25rem}div.radio-container label{font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:0;color:#4a4a4a;margin:0;padding-left:.125rem}div.radio-container label:first-of-type{margin-right:.188rem}div.radio-container input[type=radio]{appearance:none;display:inline-block;width:.9375rem;height:.9375rem;padding:.125rem;background-clip:content-box;border:.125rem solid #268bff;background-color:transparent;border-radius:50%}div.radio-container input[type=radio]:checked{background-color:#268bff}.checkbox-filter-buttons-container{padding:0 8px!important}.buttons-container{display:flex;margin:0px auto .4375rem;justify-content:center;padding:0 12px}.buttons-container .button{padding:0 10px;width:100%;margin:8px 0 0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.buttons-container button:last-of-type{background-color:#268bff;color:#fff;margin-left:.5rem}.buttons-container button.disabled{background:#bdbdbd;opacity:.5;color:#4a4a4a}.button{display:inline-block;margin:8px 4px 0 8px;padding:0 16px;border-radius:4px;text-align:center;outline:none;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;border:none;color:#268bff;background-color:#e5f1ff}.search-box{display:flex;align-items:center;color:#c8c8c8;border:1px solid #e6e6e6;border-radius:.125rem;margin:.25rem .4375rem .188rem;height:1.5rem;padding:.188rem 8px .188rem .5rem}.search-box .search-bar-close{margin-left:auto;float:right}.search-icon{margin:0 4px 0 0;font-size:1.125rem;color:#9b9b9b}.filter-icon{justify-content:right;margin-left:auto;color:#d4d4d4;color:#a1a1a1;font-size:16px;cursor:pointer}.data{margin:0 13px 0 8px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.86;letter-spacing:\"\";color:#4a4a4a}.search-input{margin:1px 0 1px 4px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#c8c8c8;width:calc(100% - 38px)}.check-box{color:#268bff}.tooltip-data-container{overflow-y:scroll;max-height:8rem}.searchbar{width:100%;display:flex;justify-content:flex-end;align-items:flex-end}.clear-button{opacity:.5;font-family:Roboto;font-size:.9375rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;text-decoration:underline;border:none;background-color:#fff;color:#4a4a4a;margin-left:.625rem;padding:0}.clear-button:focus{outline:none;box-shadow:none}.unchecked{color:#268bff}cdk-virtual-scroll-viewport.dropdown-data-container{max-height:12.3rem;width:100%;overflow-y:auto;overflow-x:hidden}cdk-virtual-scroll-viewport.dropdown-data-container p.input{margin-left:0}cdk-virtual-scroll-viewport.dropdown-data-container p.input span.mi{padding-left:.4375rem}cdk-virtual-scroll-viewport.dropdown-data-container p.input:hover{background-color:#ebebeb;cursor:pointer}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar{width:.188rem}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar-thumb{color:#d3d3d3;background:lightgray}section.min-maxContainer{display:flex;justify-content:center;margin-bottom:-.125rem;margin-top:.5rem;width:100%}section.min-maxContainer input{width:30%;height:1.875rem;border:1px solid lightgray;color:gray}section.min-maxContainer span{display:inline-block;padding-left:.5rem;padding-right:.5rem;position:relative;top:.3125rem;color:#666}.time-container{width:100%;display:flex;padding:0 .75rem}.time-container input.form-control:disabled{background-color:#fff;width:2.813rem}.time-container input.numberInput:focus{box-shadow:none;border-color:#c2cfd6}.time-container .dot{color:#cbcbcb;position:relative;left:-7px;font-size:17px}.time-container div.arrow-container{flex-direction:column;display:flex;margin-top:.375rem;width:9px;height:18px;margin-right:1.1875rem}.time-container div.arrow-container i{color:#000;cursor:pointer;max-height:9px;font-size:25px;width:10px}.time-container div.arrow-container i:before{width:0;height:0;pointer-events:none;position:relative;left:-9px;top:-11px}.mdi-filter{cursor:pointer}.time-label-container{display:flex;justify-content:flex-start}.time-label-container label{margin-bottom:0;color:#4a4a4a;margin-top:.125rem;margin-left:.625rem;font-weight:700}.time-heading{color:#000;font-size:.8125rem;text-align:left;padding-left:.625rem;margin-top:.625rem;font-weight:700}.column-clear-all{width:94%;text-align:center;border:none;font-size:14px;background:none;text-decoration:underline;color:#268bff}.checkbox-container{display:flex;padding-inline:.625rem}.checkbox-container .data{text-align:left}.checkbox-container:first-of-type{margin-top:.625rem;font-weight:500}.column-clear-all{width:94%;text-align:center;border:none;background:none;text-decoration:underline;color:#268bff}.column-clear-all:disabled{opacity:.5;color:#4a4a4a;font-weight:400}.column-clear-all.align-center{text-align:center}span.mdi-filter-variant.disabled{pointer-events:none;opacity:.5}.datepicker-container{width:100%}span.mdi-filter-variant{color:#cbcbcb;cursor:pointer;font-size:.875rem}span.mdi-filter-variant.active{color:#000}p.filter-tab{font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:normal;color:#1b88ff;border-radius:5px;background-color:#f4f4f4;padding-inline:8px;cursor:pointer;overflow:hidden;text-align:center;text-overflow:ellipsis}p.filter-tab.active{color:#fff;background-color:#1b88ff}button.filter-text-btn{background:white;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;border:none;color:#268bff;margin-inline:4px;margin-top:2px}button.filter-text-btn:disabled{color:#b1b1b1;cursor:not-allowed}::ng-deep .non-edit-datepicker-tooltip .tooltip-inner{max-width:310px!important;width:283px!important;overflow-y:initial!important;padding:0!important}input.slider-text::-webkit-outer-spin-button,input.slider-text::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input.slider-text{-moz-appearance:textfield}input.slider-text.red-border{border:1px solid #f44336!important}::ng-deep .checkbox-sort p.sort-container{margin-top:8px!important;padding-bottom:8px!important}i.mdi-close{cursor:pointer}i.mdi-close.disable-close-icon{pointer-events:none;cursor:not-allowed}input.error-border{border:1px solid #f44336!important}::ng-deep .non-edit-checkbox-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-slider-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-time-tooltip .tooltip-inner{width:250px!important;padding:0!important}::ng-deep .non-edit-time-tooltip.bs-tooltip-start{padding:.4rem}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow{right:0;top:5px!important;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow:before{border-left-color:#fff;left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height)}::ng-deep .no-bottom-border p.sort-container{border-bottom:none!important}::ng-deep .ngx-slider-pointer-min:after{display:none}::ng-deep .ngx-slider-pointer-max:after{display:none}::ng-deep .ngx-slider span.ngx-slider-pointer{width:12px;height:12px;top:-5px;background-color:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bar{height:3px;background:#ededed}::ng-deep .ngx-slider span.ngx-slider-selection{background:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bubble{bottom:-22px;font-size:12px;color:#333}::ng-deep .show-min.ngx-slider span.ngx-slider-model-value{background:white;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .show-max.ngx-slider span.ngx-slider-model-high{background:white;box-shadow:none}::ng-deep .ngx-slider span.ngx-slider-combined{background:white;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .ngx-slider{top:10px!important;margin:5px 0 2px!important}::ng-deep .ngx-slider-animate{top:0!important}.sidebar-slider{margin-bottom:35px!important;margin-left:5px;margin-right:5px}.slider-placeholder{height:14px}::ng-deep .filter-calendar select.form-select:focus{border-color:#c2cfd6;box-shadow:none}::ng-deep .filter-calendar select.form-select{background-color:#fff}.no-data-case{padding-left:.4375rem!important;font-size:.875rem!important;margin-top:10px!important;cursor:pointer}.check-mark,.unread-mark{cursor:pointer}.on-hover:hover .unread-mark,.notificationHover .check-mark{opacity:0;cursor:pointer}.on-hover:hover .check-mark{opacity:1;cursor:pointer}:host ::ng-deep .gt{table-layout:fixed;margin-bottom:0;width:100%}:host ::ng-deep .gt th,:host ::ng-deep .gt td{padding:2px 8px;line-height:normal}:host ::ng-deep .gt thead tr th .upper-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#4a4a4a;margin-bottom:0}:host ::ng-deep .gt thead tr th .lower-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#a7a7a7;margin-bottom:0}:host ::ng-deep .gt thead tr th{background-color:#ededed;position:sticky;position:-webkit-sticky;top:0;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .gt thead tr th br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt thead tr th div.row{display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;width:max-content}:host ::ng-deep .gt thead tr th div.sort-filter-container{display:flex;flex-wrap:nowrap;align-items:center;margin-left:.25rem;margin-right:auto}:host ::ng-deep .gt thead tr th span.mdi-filter-variant{font-size:13px!important;top:-1px!important;position:relative}:host ::ng-deep .gt thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4}:host ::ng-deep .gt tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td:nth-of-type(n + 2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td .upper-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#000;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr td .lower-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#a7a7a7;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt tbody tr:nth-of-type(1) td{border-top:none!important}:host ::ng-deep .gt .custom-column-checkbox-checked,:host ::ng-deep .gt .custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}:host ::ng-deep .gt .custom-column-checkbox-checked{color:#268bff}:host ::ng-deep .gt .custom-column-checkbox-unchecked{color:#4a4a4a}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:nth-of-type(n + 2){box-shadow:inset -1px 0 #d4d4d4}.table-container{overflow-x:auto;overflow-y:auto}.rowSelectCheckbox,#selectAllRowsCheckbox{cursor:pointer}.disable-checkbox{color:#dedede!important;pointer-events:none!important}.mdi-warning{color:#f3c639;font-size:16px;line-height:28px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{opacity:1}.redcolor-status{color:#c62a2a}#no-filter-space{width:.875rem}::ng-deep .mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:1.875rem!important;width:2.625rem;padding:0 .625rem}input.numberInput{margin-right:-.8125rem;padding:0 0 0 .625rem;height:1.875rem}::ng-deep .mat-button-toggle-checked{background-color:#268bff!important;color:#fff!important}::ng-deep .mat-button-toggle-group-appearance-standard{border-radius:0}.hidden{display:none}.no-data-div{margin-top:2.5px}.no-data-div label{margin:0;width:auto;font-weight:500;background-color:#d3d3d3;padding:.3125rem 1.125rem;border-radius:.25rem}.column-values:nth-of-type(2){color:#a7a7a7!important}.custom-column-checkbox-checked,.custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}.custom-column-checkbox-checked{color:#268bff}.custom-column-checkbox-unchecked{color:#4a4a4a}.time-filter-checkboxes>div>p{color:#151b1e}::ng-deep .margin-bottom-zero .mat-radio-label{margin-bottom:0}:host ::ng-deep mat-radio-group br{margin-top:0!important}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__background{width:var(--mat-radio-size);height:var(--mat-radio-size)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__inner-circle{border-width:calc(var(--mat-radio-size) / 2)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{margin:0 0 0 4px;padding:0;top:-2px;position:relative}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio--disabled+label{color:var(--primary-text-color-dark)!important}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{left:-94px;font-size:12px;color:#4a4a4a;position:relative}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:red}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:red}::ng-deep .mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:#00000061!important}::ng-deep .mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-inner-circle{background-color:#00000061!important}::ng-deep tr.white-background-row{background:white}::ng-deep tr.gray-background-row{background:rgba(233,233,233,.5)!important}.remarks-tooltip,.mdi-information,.mdi-information-outline,.seller-tooltip{font-size:.875rem;color:#268bff;position:relative;top:.1875rem;cursor:pointer}.seller-tooltip{top:-1px;float:right}::ng-deep .remarks-info-tooltip .tooltip-inner{max-width:19.25rem!important}.rating-icon,.lur-violation-icon{color:#268bff;cursor:pointer;position:relative;left:-2px}::ng-deep .rating-info-tooltip .tooltip-inner{max-width:800px!important}.spots-info-icon{color:#268bff;cursor:pointer;margin:1px 0 0 -13px}.spots-info-icon-ol{color:#268bff;cursor:pointer;margin:1px 4px 0 -14px}::ng-deep .spot-info-tooltip .tooltip-inner{position:relative;max-width:220px!important;background:#fff;word-break:break-word;display:flex}::ng-deep .spot-info-tooltip-for-orderlisting-table .tooltip-inner{max-width:220px!important;background:#fff;word-break:break-word;display:flex}p.first-row{padding:.5rem .5rem 0;color:#000;white-space:nowrap;text-align:left}p.second-row{padding:2px .5rem .5rem;color:#000;white-space:nowrap;text-align:left}::ng-deep .gt-total-row-tooltip{opacity:1!important}::ng-deep .gt-total-row-tooltip .tooltip-inner{color:#000;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;background-color:#fff;padding:4px!important;width:100%;border-radius:2px!important}::ng-deep .gt-total-row-tooltip .arrow:before{border-top-color:#fff!important}.info-label{margin-left:4px;color:#268bff;vertical-align:text-top}::ng-deep .hierarchy-tooltip{max-width:-moz-fit-content;max-width:fit-content;width:310px!important}::ng-deep .hierarchy-tooltip .tooltip-inner{padding:4px!important;max-width:22.75rem;max-height:11.25rem}table.seller-hierarchy-table{table-layout:fixed}table.seller-hierarchy-table tr th{font-family:Roboto;font-size:.75rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;color:#5e5e5e;white-space:nowrap;background:#ededed;position:sticky;box-shadow:inset 0 1px #d4d4d4;top:0;z-index:1}table.seller-hierarchy-table tr th:nth-child(1){width:20px}table.seller-hierarchy-table tr th:first-of-type,table.seller-hierarchy-table tr td:first-of-type{width:20px;border-left:1px solid #d4d4d4}table.seller-hierarchy-table tr th:last-of-type,table.seller-hierarchy-table tr td:last-of-type{border-right:1px solid #d4d4d4;width:7.875rem!important}table.seller-hierarchy-table tr th:nth-of-type(2){width:7.75rem!important}table.seller-hierarchy-table tr td{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#4a4a4a;box-shadow:none!important;border-top:1px solid #d4d4d4;border-bottom:1px solid #d4d4d4}table.seller-hierarchy-table tr td:nth-of-type(2),table.seller-hierarchy-table tr td:nth-of-type(3){padding-top:.25rem}table.seller-hierarchy-table tr td span{display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}section.hierarchy-table-container{max-height:8.75rem;overflow:auto}section.hierarchy-table-container::-webkit-scrollbar-track{margin-top:1.5rem}.difference-text{padding:.5rem;color:#000;text-align:left}::ng-deep .posted-avg-tooltip .tooltip-inner{width:13.8125rem!important}::ng-deep .drrBooked-info-tooltip{transform:translate(26px,6px)}::ng-deep .drrBooked-info-tooltip .tooltip-inner{max-width:307px!important;width:242px!important;background:#fff;word-break:break-word;display:flex;padding:4px!important;text-align:left}::ng-deep .drrBooked-info-tooltip .tooltip-inner p{color:#000}::ng-deep .drrBooked-info-tooltip .arrow:before{border-right-color:#fff!important}.clickable-data{cursor:pointer;color:#268bff!important;display:flex!important;align-items:center}.clickable-data .spot-details-download-icons{font-size:12px}.disabled-clickable-data{pointer-events:none;color:#d4d4d4!important}.spot-column-tooltip-message{color:#000;width:max-content;text-align:left}div.spinner-for-button-directive{position:relative;left:-1px}.clickable-row table tr.mat-row td{cursor:pointer!important}.tooltip-div-container{text-align:left!important;padding:12px 4px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.notification-tooltip-div-container{text-align:left!important;padding:6px 8px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.mdi-information,.mdi-information-outline{left:3px;top:1px}.mdi-information-outline{position:static}::ng-deep .team-user-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .team-user-tooltip .tooltip-inner{opacity:1!important;width:-moz-fit-content!important;width:fit-content!important;max-width:520px;border-radius:2px;padding:0 4px!important}::ng-deep .team-user-tooltip .tooltip-inner .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:white!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip{opacity:1!important}::ng-deep .gt-icon-column-tooltip .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:white!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .gt-icon-column-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip .tooltip-inner{width:100%}::ng-deep .tooltip-containing-table{opacity:1!important}::ng-deep .tooltip-containing-table .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:white!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .tooltip-containing-table.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .tooltip-containing-table li{margin:0!important;padding:0!important}::ng-deep .tooltip-containing-table ul{margin:0!important;padding-left:8px!important}::ng-deep .tooltip-containing-table .tooltip-inner{width:100%;max-width:230px}table.tooltip-table{table-layout:fixed;margin:4px 0 0;width:100%}table.tooltip-table th,table.tooltip-table td{padding:2px 8px;line-height:normal}table.tooltip-table thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4!important;border:none}table.tooltip-table thead tr th{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67;background-color:#ededed;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}table.tooltip-table thead tr th div.row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}table.tooltip-table tbody tr td{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67}table.tooltip-table tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}table.tooltip-table tbody tr td:nth-of-type(n + 2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}.bottom-border{border-bottom:1px solid #d4d4d4!important}i.disabled{pointer-events:none!important}\n"] }]
|
|
690
|
+
args: [{ selector: 'anna-core-non-editable-generic-table-lib', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"table-container {{gtGeneralConfig?.tableOuterContainerName}} {{tableBottomBorderClass}}\"\r\n [ngClass]=\"{ 'scroll-left-shadow-effect': isScrolledLeft, 'clickable-row': clickableRow, 'no-data-table': (isNoDataToDisplaySubject$ | async) }\"\r\n (scroll)=\"onTableContainerScroll($event)\">\r\n <div [class]=\"gtGeneralConfig.tableContainerName\" class=\"horizontal-scroll-for-table-container\" [ngStyle]=\"{\r\n height:\r\n tableData.length < maximumRowsWhichCanBeRenderedWithoutScroll\r\n ? 'calc(' +\r\n ((gtDimension.rowHeight) * tableData.length +\r\n (!tableData.length || !gtGeneralConfig.totalRow\r\n ? gtDimension.headerHeight\r\n : gtDimension.headerHeight + gtDimension.rowHeight)) +\r\n 'px)'\r\n : gtDimension.tableHeight\r\n }\">\r\n <table class=\"gt\" [ngClass]=\"tableClass\" mat-table [dataSource]=\"renderedData\">\r\n <tr class=\"header-row\" mat-header-row *matHeaderRowDef=\"tableColumns; sticky: true\"\r\n [style.height.px]=\"gtDimension.headerHeight\"></tr>\r\n <tr class=\"total-row\" mat-header-row [style.height.px]=\"gtDimension.rowHeight\"\r\n *matHeaderRowDef=\"totalRowColumns; sticky: true\" [class.hidden]=\"\r\n showSkeletonLoading ||\r\n (!showSkeletonLoading && !tableData.length ) ||\r\n (isNoDataToDisplaySubject$ | async) || \r\n (!showSkeletonLoading && !gtGeneralConfig.totalRow)\r\n \"></tr>\r\n <tr [class]=\"rowData.gtClass\" [ngClass]=\"{'no-border-tr': (isNoDataToDisplaySubject$ | async)}\" mat-row\r\n *matRowDef=\"let rowData; columns: tableColumns\" [style.height.px]=\"gtDimension.rowHeight\"\r\n (click)=\"dataRowClicked(rowData)\"></tr>\r\n\r\n <!-- TOTAL ROW -->\r\n <ng-container [matColumnDef]=\"column.colName\" *ngFor=\"let column of totalRowInfo; trackBy: trackByFn\">\r\n <td mat-header-cell *matHeaderCellDef [attr.colspan]=\"column.colspan\" class=\"{{column.class}}\">\r\n\r\n <ng-container *ngIf=\"column['isActionColumn']\">\r\n <a *ngFor=\"let data of column.actionData\" [class]=\"data.class\"\r\n (click)=\"onClickableDataClicked({}, data.id)\">\r\n {{ data.name }}\r\n </a>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column['isIconColumn']\">\r\n <i class=\"{{column?.iconData?.class}}\" (click)=\"iconClickedInTotalRow(column?.colName)\">\r\n </i>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!column['isActionColumn']\">\r\n <strong class=\"upper-label\">{{ column.data }}</strong>\r\n <ng-container *ngIf=\"column.lowerData\">\r\n <br>\r\n <span *ngIf=\"column.colName == 'total-potential-booked-unit' && gtGeneralConfig.component == 'RATING';\r\n else columnLowerData\" class=\"clickable-data\"\r\n (click)=\"spotDetailsDownloadClicked('TOTALROW')\"\r\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\">{{ column.lowerData }}\r\n <span class=\"material-icons spot-details-download-icons\">get_app</span>\r\n <ng-container *ngIf=\"downloadInProgress \r\n && selectedRowTypeForDownload == 'TOTALROW' \">\r\n <ng-container [ngTemplateOutlet]=\"circularProgressBar\"></ng-container>\r\n </ng-container>\r\n </span>\r\n <ng-template #columnLowerData>\r\n <span class=\"lower-label\">{{ column.lowerData }}</span>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.tooltipMessage && gtGeneralConfig.component != 'LUR_VIOLATIONS'\">\r\n <i class=\"{{column.tooltipIconClass}}\" container=\"body\" [ngbTooltip]=\"column.tooltipMessage\"\r\n tooltipClass=\"gt-total-row-tooltip\" placement=\"bottom\"></i>\r\n </ng-container>\r\n <ng-container *ngIf=\"gtGeneralConfig.component == 'LUR_VIOLATIONS' && column.tooltipMessage\">\r\n <i class=\"mi mdi-info-outline info-label\" container=\"body\"\r\n [ngbTooltip]=\"lurViolationTotalRowToolTip\" tooltipClass=\"gt-total-row-tooltip\"\r\n placement=\"bottom\"></i>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <!-- MAIN ROW -->\r\n <ng-container [matColumnDef]=\"columnDef.headerInfo[0].objectKey\"\r\n *ngFor=\"let columnDef of tableHeaders; trackBy: trackByFn\">\r\n <th #tableHeader nowrap mat-header-cell *matHeaderCellDef [style.width]=\"columnDef.width\">\r\n <div class=\"row mx-0\" *ngFor=\"let header of columnDef.headerInfo; let j = index;\">\r\n <p *ngIf=\"header.typeOfHeaderData === 'STRING'\"\r\n [ngClass]=\"{ 'upper-label': j === 0, 'lower-label': j === 1 }\">\r\n <ngx-skeleton-loader *ngIf=\"header.name == null\" count=\"1\"\r\n [theme]=\"{ height: '10px', display: 'block', width: columnDef.width, 'max-width':'calc(100% - 20px)' }\">\r\n </ngx-skeleton-loader>\r\n <ng-container *ngIf=\"header.name\">\r\n {{ header.name }}\r\n </ng-container>\r\n\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'impsInfoTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"impsInfoTooltip\" container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'spotsColumnEquivalizationMessageTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" container=\"body\" #t=\"ngbTooltip\"\r\n container=\"body\" [ngbTooltip]=\"spotsColumnEquivalizationMessageTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'underDeliveryTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" container=\"body\" #t=\"ngbTooltip\"\r\n container=\"body\" [ngbTooltip]=\"underDeliveryTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'overDeliveryTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" container=\"body\" #t=\"ngbTooltip\"\r\n container=\"body\" [ngbTooltip]=\"overDeliveryTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'ratingInfoTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"ratingInfoTooltip\" container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'rateInfoTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"rateInfoTooltip\" container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'ongoingRevBookedColumnTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"ongoingRevBookedColumnTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'completedRevBookedColumnTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"completedRevBookedColumnTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedRate'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"avgBookedRate\" placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedRtg'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"avgBookedRtg\" placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedImps'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"avgBookedImps\" placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'automationTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"automationTooltip\" placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'rebateImpact'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"rebateImpact\" placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n </p>\r\n\r\n <ng-container *ngIf=\"header.typeOfHeaderData === 'CHECKBOX'\">\r\n <span *ngIf=\"gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\" (click)=\"selectUnselectAllRows()\">\r\n check_box\r\n </span>\r\n <span *ngIf=\"!gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{ 'disable-checkbox': gtGeneralConfig.disableHeaderCheckbox }\"\r\n (click)=\"selectUnselectAllRows()\">\r\n check_box_outline_blank\r\n </span>\r\n </ng-container>\r\n\r\n <div *ngIf=\"gtGeneralConfig.showAllColumnFilter\" class=\"sort-filter-container\">\r\n <ng-container *ngIf=\"header.showTooltipIcon\">\r\n <!-- Active tooltip Functionality -->\r\n <ng-container *ngIf=\"header.filter === 'CHECKBOX'\">\r\n\r\n <span class=\"mdi mdi-filter-variant\" [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys], \r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\" [ngbTooltip]=\"filterTooltip\" placement=\"{{filterAlignment}}\"\r\n container=\"body\" tooltipClass=\"non-edit-checkbox-tooltip\"\r\n [autoClose]=\"'outside'\" triggers=\"manual\" #t=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t, header)\" (hidden)=\"closeTooltip()\">\r\n </span><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'SLIDER'\">\r\n <span class=\"mdi mdi-filter-variant\" [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\" [ngbTooltip]=\"sliderToolTip\" placement=\"bottom left-top\" container=\"body\"\r\n tooltipClass=\"non-edit-slider-tooltip\" [autoClose]=\"'outside'\" triggers=\"manual\"\r\n #t1=\"ngbTooltip\" (click)=\"bindTheValueToToolTip(t1, header)\"\r\n (hidden)=\"closeTooltip()\">\r\n </span><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'DATE'\">\r\n <span class=\"mdi mdi-filter-variant\" [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\" [ngbTooltip]=\"datePickerTooltip\" placement=\"bottom auto\" container=\"body\"\r\n tooltipClass=\"non-edit-datepicker-tooltip\" [autoClose]=\"'outside'\"\r\n triggers=\"manual\" #t2=\"ngbTooltip\" (click)=\"bindTheValueToToolTip(t2, header)\"\r\n (hidden)=\"closeTooltip()\">\r\n </span><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'WEEK'\">\r\n <span class=\"mdi mdi-filter-variant\" [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\" [ngbTooltip]=\"weekPickerToolTip\" placement=\"bottom left-top\"\r\n container=\"body\" [autoClose]=\"'outside'\" triggers=\"manual\" #t3=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t3, header)\" (hidden)=\"closeTooltip()\">\r\n </span><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'TIME'\">\r\n <span class=\"mdi mdi-filter-variant\" [ngClass]=\"{\r\n active: annaFilterService.isFilterSortActive && annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\" [ngbTooltip]=\"timeFilterToolTip\" placement=\"bottom left-top auto\"\r\n container=\"body\" tooltipClass=\"non-edit-time-tooltip\" [autoClose]=\"'outside'\"\r\n triggers=\"manual\" #t4=\"ngbTooltip\" (click)=\"bindTheValueToToolTip(t4, header)\"\r\n (hidden)=\"closeTooltip()\">\r\n </span><br />\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!header.showTooltipIcon\">\r\n <span id=\"no-filter-space\"></span><br />\r\n </ng-container>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'lurViolationInfoTooltip'\"\r\n class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\" #t=\"ngbTooltip\" container=\"body\"\r\n [ngbTooltip]=\"lurViolationInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\">\r\n </i>\r\n\r\n </div>\r\n </div>\r\n </th>\r\n\r\n <ng-container *matCellDef=\"let ROW_DATA\">\r\n <td mat-cell [style.background]=\"ROW_DATA.backgroundColor\" \r\n [style.border]=\"ROW_DATA.border\"\r\n class=\"{{ROW_DATA.rowClass}}\"\r\n [ngClass]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'TdClass']\"\r\n [attr.rowspan]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'Rowspan']\"\r\n *ngIf=\"!hideSomeTds ||( hideSomeTds && !ROW_DATA['hide' + columnDef.headerInfo[0].objectKey + 'Td'])\"\r\n >\r\n <ngx-skeleton-loader *ngIf=\"showSkeletonLoading\" count=\"1\" [theme]=\"{ height: '10px', display: 'block' }\">\r\n </ngx-skeleton-loader>\r\n\r\n <ng-container *ngIf=\"!showSkeletonLoading\">\r\n <ng-container *ngIf=\"tableData.length > 0 && !(isNoDataToDisplaySubject$ | async)\">\r\n <ng-container\r\n *ngFor=\"let subline of columnDef.headerInfo; let subLineIndex = index; trackBy: trackByFn\">\r\n <div showEllipsisTextOnHover>\r\n <ng-container [ngSwitch]=\"columnDef.headerInfo[subLineIndex].typeOfBodyData\">\r\n <ng-container *ngSwitchCase=\"'ICON'\">\r\n <i *ngIf=\"!(starredInProgress && ROW_DATA.orderId == selectedStarredOrderId)\"\r\n [class]=\"ROW_DATA.iconClass\"\r\n (click)=\"iconClicked(ROW_DATA,ROW_DATA.iconClass)\"\r\n ngbTooltip=\"{{ ROW_DATA.iconTitleText }}\" placement=\"bottom\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"></i>\r\n <ng-container\r\n *ngIf=\"starredInProgress && ROW_DATA.orderId == selectedStarredOrderId\">\r\n <div class=\"spinner-for-button-directive\"></div>\r\n </ng-container>\r\n\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'ICON_CELL'\">\r\n <ng-container\r\n *ngFor=\"let action of ROW_DATA[columnDef.headerInfo[subLineIndex].actionKey]\">\r\n\r\n <i *ngIf=\"action.showIcon\" [class]=\"action.iconClass\"\r\n (mouseenter)=\"mouseEnterOnStringTextActionType(ROW_DATA, columnDef.headerInfo[subLineIndex].tooltipKey)\"\r\n placement=\"bottom auto\" container=\"body\" [autoClose]=\"true\"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"action.showTooltip ? userLoggedInDetails : null\"\r\n (click)=\"textActionClicked(ROW_DATA, action.id, columnDef.headerInfo[subLineIndex])\"\r\n [disableTooltip]=\"!action.showTooltip\">\r\n </i>\r\n\r\n <ng-container *ngIf=\"action.showObjectKey\">\r\n {{ ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey] }}\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'HTML_STRING'\">\r\n <p [innerHTML]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n (click)=\"innerHTMLCellClicked($event,ROW_DATA)\"></p>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'SVG_ICON'\">\r\n <anna-core-anna-icon-column [componentName]=\"gtGeneralConfig.component\"\r\n [dataObject]=\"ROW_DATA\"\r\n [iconToShow]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey] \"\r\n (onColumnIconClicked)=\"svgIconClicked($event)\"></anna-core-anna-icon-column>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'TEXT_ACTIONS'\">\r\n <ng-container\r\n *ngFor=\"let text of ROW_DATA[columnDef.headerInfo[subLineIndex].actionKey]\">\r\n <button *ngIf=\"text.showTooltip\"\r\n (click)=\"textActionClicked(ROW_DATA,text.id, columnDef.headerInfo[subLineIndex])\"\r\n [disabled]=\"text.isDisabled\" class=\"{{text.class}}\"\r\n (mouseenter)=\"mouseEnterOnTextActionType(ROW_DATA, columnDef.headerInfo[subLineIndex].tooltipKey)\"\r\n [ngbTooltip]=\"textActionTooltipTemplate\" placement=\"auto\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\">\r\n {{ text.name}}\r\n </button>\r\n\r\n <button *ngIf=\"!text.showTooltip\"\r\n (click)=\"textActionClicked(ROW_DATA,text.id, columnDef.headerInfo[subLineIndex])\"\r\n [disabled]=\"text.isDisabled\" class=\"{{text.class}}\">\r\n {{text.name}}\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CHECKBOX'\">\r\n <span *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n [ngClass]=\"{\r\n 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\" class=\"material-icons custom-column-checkbox-checked\" (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n false\r\n )\r\n \">\r\n check_box\r\n </span>\r\n <span *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n class=\"material-icons custom-column-checkbox-unchecked\" [ngClass]=\"{\r\n 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\" (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n true\r\n )\r\n \">\r\n check_box_outline_blank\r\n </span>\r\n\r\n <ng-container\r\n *ngFor=\"let action of ROW_DATA[columnDef.headerInfo[subLineIndex].actionKey]\">\r\n <i *ngIf=\"action.showIcon\" [class]=\"action.iconClass\"\r\n [ngClass]=\"{'disabled': action.disabledIcon}\"\r\n (mouseenter)=\"mouseEnterOnStringTextActionTypeContainingTable(ROW_DATA, columnDef.headerInfo[subLineIndex].tooltipKey)\"\r\n placement=\"bottom auto\" container=\"body\" [autoClose]=\"true\"\r\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\r\n [ngbTooltip]=\"tooltipContainingTableTemplate\">\r\n </i>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CLICKABLE_DATA'\">\r\n <a *ngFor=\"let text of ROW_DATA[columnDef.headerInfo[subLineIndex].actionKey]\"\r\n [class]=\"text.class\"\r\n (click)=\"onClickableDataClicked(ROW_DATA, text.id)\">\r\n {{ text.name }}\r\n </a>\r\n <span\r\n *ngIf=\"subline.objectKey == 'displayBookedUnits' && gtGeneralConfig.component == 'RATING'\"\r\n class=\"clickable-data\"\r\n (click)=\"spotDetailsDownloadClicked('DATAROW', ROW_DATA)\"\r\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\">{{\r\n ROW_DATA.displayBookedUnits}}\r\n <span\r\n class=\"material-icons spot-details-download-icons\">get_app</span>\r\n <ng-container *ngIf=\"downloadInProgress \r\n && ROW_DATA.inventoryCodeId == selectedInventoryIdForDownload \r\n && ROW_DATA.demographic == selectedDemographicForDownload \">\r\n <ng-container\r\n [ngTemplateOutlet]=\"circularProgressBar\"></ng-container>\r\n </ng-container>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING___ICON_OR_TEXT_ACTION'\">\r\n <ng-container\r\n *ngFor=\"let action of ROW_DATA[columnDef.headerInfo[subLineIndex].actionKey]\">\r\n <span [class]=\"action.additionalTextBeforeLinkClass\"\r\n [innerHtml]=\"action.additionalTextBeforeLink\"\r\n ngbTooltip=\"{{ action.additionalTextBeforeLink }}\"\r\n placement=\"bottom\" container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"!action.enableTooltipForAdditionalText\"></span>\r\n\r\n <ng-container *ngIf=\"action && action.typeOfData== 'STRING'\">\r\n {{ action.data }}\r\n </ng-container>\r\n\r\n <a [id]=\"action.id\" *ngIf=\"action.showLink\"\r\n (click)=\"textActionClicked(ROW_DATA, action.id, columnDef.headerInfo[subLineIndex])\"\r\n [class]=\"action.linkClass\"\r\n [ngClass]=\"{'disabled': action.disabledLink}\">{{action.data}}</a>\r\n <span ngbTooltip=\"{{ action.additionalTextAfterLink }}\"\r\n placement=\"bottom\" container=\"body\"\r\n [class]=\"action.additionalTextAfterLinkClass\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"!action.enableTooltipForAdditionalAfterText\">\r\n {{ action.additionalTextAfterLink }}\r\n </span>\r\n\r\n <ng-container *ngIf=\"action.showTooltip\">\r\n <ng-container *ngIf=\"action.tooltipData.innerHtml\">\r\n\r\n <i *ngIf=\"action.showIcon\" [class]=\"action.iconClass\"\r\n [ngClass]=\"{'disabled': action.disabledIcon}\"\r\n (mouseenter)=\"mouseEnterOnStringTextActionTypeContainingTable(ROW_DATA, columnDef.headerInfo[subLineIndex].tooltipKey)\"\r\n placement=\"bottom auto\" container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\r\n [ngbTooltip]=\"tooltipContainingTableTemplate\">\r\n </i>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!action.tooltipData.tooltipTableBody\">\r\n <i *ngIf=\"action.showIcon\" [class]=\"action.iconClass\"\r\n [ngClass]=\"{'disabled': action.disabledIcon}\"\r\n (click)=\"iconClickedOnStringIconActionType(ROW_DATA, action.id, columnDef.headerInfo[subLineIndex])\"\r\n (mouseleave)=\"mouseLeaveTextActionType(ROW_DATA)\"\r\n (mouseenter)=\"mouseEnterOnStringTextActionType(ROW_DATA, columnDef.headerInfo[subLineIndex].tooltipKey)\"\r\n [placement]=\"action.tooltipPlacement ? action.tooltipPlacement : 'bottom auto'\"\r\n container=\"body\" [autoClose]=\"true\"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class {{ action.tooltipClass }}\"\r\n [ngbTooltip]=\"userLoggedInDetails\">\r\n </i>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!action.showTooltip\">\r\n <i *ngIf=\"action.showIcon\" [class]=\"action.iconClass\"\r\n [ngClass]=\"{'disabled': action.disabledIcon}\"\r\n (click)=\"iconClickedOnStringIconActionType(ROW_DATA, action.id, columnDef.headerInfo[subLineIndex])\">\r\n </i>\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING_OR_INPUT'\">\r\n <ng-container *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]?.type == 'STRING';\r\n else inputBox\">\r\n <span\r\n [innerHtml]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]?.value\"></span>\r\n </ng-container>\r\n <ng-template #inputBox>\r\n <input\r\n placeholder=\"{{ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]?.placeholder}}\"\r\n showEllipsisTextOnHover\r\n class=\"{{ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].className}}\"\r\n (keydown)=\"changesMadeInEditableInputBox($event,ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey], false)\"\r\n (paste)=\"changesMadeInEditableInputBox($event, ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey], true)\"\r\n (ngModelChange)=\"editableInputValueChanged($event, ROW_DATA, columnDef.headerInfo[subLineIndex].objectKey)\"\r\n [ngModel]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].value\"\r\n [disabled]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].disabled\"\r\n [ngClass]=\"{'red-border': ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].hasError }\">\r\n\r\n <i *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].showIcon\"\r\n container=\"body\"\r\n [ngbTooltip]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].iconTooltip\"\r\n tooltipClass=\"gt-total-row-tooltip\" placement=\"bottom\"\r\n class=\"{{ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].iconClass}}\">\r\n </i>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'HTML'\">\r\n <span\r\n [innerHtml]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"></span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'SINGLE_RADIO'\">\r\n <span *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n [ngClass]=\"{\r\n 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n class=\"mdi mdi-radiobox-marked\" (click)=\"\r\n null\r\n \">\r\n\r\n </span>\r\n <span *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n class=\"mdi mdi-radiobox-blank\" [ngClass]=\"{\r\n 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\" (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n true\r\n )\r\n \">\r\n\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'RADIO'\">\r\n <mat-radio-group *ngIf=\"ROW_DATA['RadioButtonConfig']\"\r\n [ngModel]=\"ROW_DATA[subline.objectKey]\"\r\n [disabled]=\"ROW_DATA['RadioButtonConfig'][0].isDisabled\">\r\n <ng-container\r\n *ngFor=\"let radioButton of ROW_DATA['RadioButtonConfig']; let last = last\">\r\n <mat-radio-button value=\"{{ radioButton.value }}\"\r\n class=\"{{ radioButton.class }}\" (click)=\"\r\n radioButtonClicked(\r\n ROW_DATA,\r\n radioButton.value,\r\n ROW_DATA['RadioButtonConfig'][0].isDisabled\r\n )\r\n \">{{ radioButton.label }}\r\n </mat-radio-button>\r\n <i class=\" {{radioButton.iconClass}}\"\r\n (click)=\"radioButtonIconClicked(ROW_DATA)\"></i>\r\n <br *ngIf=\"!last\" />\r\n </ng-container>\r\n </mat-radio-group>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING_WITH_TOOLTIP'\">\r\n <ng-container\r\n *ngFor=\"let action of ROW_DATA[columnDef.headerInfo[subLineIndex].actionKey]\">\r\n <span> {{ action?.dataToDisplay }}</span>\r\n <span *ngIf=\"action?.showTooltip\"\r\n [ngbTooltip]=\"textActionTooltipTemplate\"\r\n (mouseenter)=\"mouseEnterOnStringTextActionType(ROW_DATA, columnDef.headerInfo[subLineIndex].tooltipKey)\"\r\n [placement]=\"action?.tooltipPosition\" container=\"body\"\r\n [class]=\"action?.tooltipIconClass\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"action?.disableTooltip\">\r\n </span>\r\n <span> {{ action?.dataToDisplayAfterTooltip }}</span>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n <ng-container *ngIf=\"subline.objectKey != 'description'\">\r\n <span>{{ ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n }}</span>\r\n <i *ngIf=\"subline.objectKey == 'inventoryCode' && ROW_DATA['isSellerGroup'] && gtGeneralConfig.component == 'RATING' \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n [ngbTooltip]=\"sellerHierarchyTooltip\" placement=\"bottom auto\"\r\n container=\"body\" [autoClose]=\"true\" triggers=\"manual\"\r\n (hidden)=\"closeTooltip()\" #info=\"ngbTooltip\"\r\n tooltipClass=\"hierarchy-tooltip remove-on-scroll-class\"\r\n (mouseenter)=\"bindTheValueToSellerGroupTooltip(ROW_DATA.sellerGroupHierarchy, info)\">\r\n </i>\r\n\r\n <i *ngIf=\"subline.objectKey == 'displayBookedAverageRating' && gtGeneralConfig.component == 'RATING' && ROW_DATA['showRatingAverageIcon'] \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n placement=\"bottom auto\" container=\"body\" [autoClose]=\"true\"\r\n (mouseenter)=\"setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\"\r\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"postedRatingDifference\">\r\n </i>\r\n\r\n <i *ngIf=\"subline.objectKey == 'displayBookedAverageImpression' && gtGeneralConfig.component == 'RATING' && ROW_DATA['showImpressionAverageIcon'] \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n placement=\"bottom auto\" container=\"body\" [autoClose]=\"true\"\r\n (mouseenter)=\"setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\"\r\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"postedImpDifference\">\r\n </i>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"subline.objectKey == 'description'\">\r\n <p\r\n *ngIf=\"ROW_DATA.descriptionMessage || ROW_DATA.descriptionEmailReferenceNum\">\r\n <ng-container *ngIf=\"ROW_DATA.descriptionMessage\">\r\n {{ ROW_DATA.descriptionMessage }}\r\n <br />\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"ROW_DATA.descriptionEmailReferenceNum != '-' && ROW_DATA.descriptionEmailReferenceNum != ''\">\r\n Email Ref: {{ ROW_DATA.descriptionEmailReferenceNum }}\r\n <br />\r\n </ng-container>\r\n </p>\r\n <a href=\"{{ ROW_DATA.descriptionDetailsUrl }}\" target=\"_blank\"\r\n *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'PDF' || ROW_DATA.descriptionDetailsUrlType === 'EXCEL'\">\r\n <button class=\"btn viewDetailsAndEmailBtn\">Download</button>\r\n </a>\r\n <ng-container\r\n *ngIf=\"ROW_DATA.activityname.toLowerCase() == 'order onboarded'\">\r\n <a *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'LINK'\"\r\n (click)=\"viewDetailsClicked(ROW_DATA)\">\r\n <button\r\n class=\"btn viewDetailsAndEmailBtn order-onboarded\">View\r\n details</button>\r\n </a>\r\n </ng-container>\r\n\r\n <a href=\"{{ ROW_DATA.descriptionEmailUrl }}\" target=\"_blank\"\r\n *ngIf=\"ROW_DATA.descriptionEmailUrl != '-' && ROW_DATA.descriptionEmailUrl != ''\">\r\n <button class=\"btn viewDetailsAndEmailBtn\">View email</button>\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"(isNoDataToDisplaySubject$ | async)\">\r\n <div>\r\n {{null}}\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </table>\r\n </div>\r\n <anna-core-no-data-lib [width]=\"noDataWidth\" [marginTop]=\"marginTop\" *ngIf=\"(isNoDataToDisplaySubject$ | async)\">\r\n </anna-core-no-data-lib>\r\n</div>\r\n\r\n<!-- Checkbox template -->\r\n<ng-template #filterTooltip>\r\n <anna-core-anna-column-checkbox-filter [tableData]=\"tableData\" [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\" [clonedTableData]=\"clonedTableData\" [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\" (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\">\r\n </anna-core-anna-column-checkbox-filter>\r\n</ng-template>\r\n\r\n<!-- Slider template -->\r\n<ng-template #sliderToolTip>\r\n <anna-core-anna-column-slider-filter [tableData]=\"tableData\" [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\" [clonedTableData]=\"clonedTableData\" [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\" (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\">\r\n </anna-core-anna-column-slider-filter>\r\n</ng-template>\r\n\r\n<!-- Date Picker Template -->\r\n<ng-template #datePickerTooltip>\r\n <anna-core-anna-column-date-range-filter [tableData]=\"tableData\" [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\" [clonedTableData]=\"clonedTableData\" [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\" (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\">\r\n </anna-core-anna-column-date-range-filter>\r\n</ng-template>\r\n\r\n<!-- Week Picker Template -->\r\n<ng-template #weekPickerToolTip>\r\n <!-- <div class=\"weekpicker-container\">\r\n <anna-core-week-calendar-filter-lib\r\n [week-calendar-config]=\"gtGeneralConfig.multiWeekPickerConfig\"\r\n (apply)=\"applyWeekFilter($event)\"\r\n [from-date]=\"calendarMinEnabledDate\"\r\n [to-date]=\"calendarMaxEnabledDate\"\r\n >\r\n </anna-core-week-calendar-filter-lib>\r\n </div> -->\r\n</ng-template>\r\n\r\n<!-- Time Filter Template -->\r\n<ng-template #timeFilterToolTip>\r\n <anna-core-anna-column-time-filter [tableData]=\"tableData\" [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\" [showAllTimeRangeCheckboxes]=\"showCheckboxesForTimeFilter\"\r\n [clonedTableData]=\"clonedTableData\" [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\" (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\">\r\n </anna-core-anna-column-time-filter>\r\n</ng-template>\r\n\r\n<ng-template #columnInfoTooltip>\r\n <p style=\"color: black;white-space: nowrap;\">This preemption is rejected and not marked for credit.</p>\r\n</ng-template>\r\n\r\n<ng-template #ratingInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked Rating' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected Rating' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #impsInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked IMPS' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected IMPS' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #spotsColumnEquivalizationMessageTooltip>\r\n <p class=\"spot-column-tooltip-message\">This consists of equivalized spots and un-equivalized Paid Programs &\r\n un-equivalized Non-spots.</p>\r\n</ng-template>\r\n\r\n<ng-template #underDeliveryTooltip>\r\n <p class=\"spot-column-tooltip-message\">Indicates the Under-delivery percentage based on booked and posted RTG/IMPS.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #overDeliveryTooltip>\r\n <p class=\"spot-column-tooltip-message\">Indicates the Over-delivery percentage based on booked and posted RTG/IMPS.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #rateInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked Rate' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected $ Value' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #sellerHierarchyTooltip>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length > 0\">\r\n <section class=\"hierarchy-table-container\">\r\n <table class=\"seller-hierarchy-table\">\r\n <thead>\r\n <tr>\r\n <th>#</th>\r\n <th>Inventory Codes</th>\r\n <th>Program/Description</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of sellerGroupHierarchy; let tooltipIndex = index\">\r\n <td>{{ tooltipIndex + 1 }}</td>\r\n <td>\r\n <span showEllipsisTextOnHover>{{ data.InventoryCode }}</span>\r\n </td>\r\n <td>\r\n <span showEllipsisTextOnHover>{{ data.Program }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </section>\r\n </ng-container>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length == 0\">\r\n <span style=\"color: #000\">Seller group not available for this inventory code</span>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #lurViolationInfoTooltip>\r\n <p class=\"first-row\">The values are for the entire week.</p>\r\n</ng-template>\r\n\r\n<ng-template #postedRatingDifference>\r\n <p class=\"difference-text\">The difference between posted and booked average rating is\r\n {{isDifferenceLessThan25Percent ? 'less' : 'more'}} than 25%.</p>\r\n</ng-template>\r\n\r\n<ng-template #postedImpDifference>\r\n <p class=\"difference-text\">The difference between posted and booked average impression is\r\n {{isDifferenceLessThan25Percent ? 'less' : 'more'}} than 25%.</p>\r\n</ng-template>\r\n\r\n<ng-template #ongoingRevBookedColumnTooltip>\r\n <p>The Booked $ value, Spots, GRP, CPP, IMPS, CPM corresponds on the last permanent revision generated</p>\r\n</ng-template>\r\n\r\n<ng-template #completedRevBookedColumnTooltip>\r\n <p>The Booked $ value corresponds on the last permanent revision generated</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedRate>\r\n <p>This is the booked average Rate</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedRtg>\r\n <p>This is the booked average RTG</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedImps>\r\n <p>This is the booked average IMP(\u2019000)</p>\r\n</ng-template>\r\n\r\n<ng-template #automationTooltip>\r\n <p>Please get the order business rules approved to activate the order for automation. Only for the\r\n automation-activated orders, any approved MGs, ADUs, or credited spots on ANNA will be fed into the traffic\r\n system i.e. ANNA revisions. Additionally, ANNA will only enter buyer revisions into traffic for the selected\r\n Medialine/WOC orders.</p>\r\n</ng-template>\r\n\r\n<ng-template #rebateImpact>\r\n <p>\r\n Rebate impact value is for the originally ordered spot length and is not equivalized.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #lurViolationTotalRowToolTip>\r\n <ul>\r\n <li>\r\n <strong>POLITICAL RATE VIOLATIONS:</strong>\r\n Violations flagged when non-political spots are booked at a rate lower than the minimum booked rate for\r\n political candidates for the same week, Inventory Code and Revenue Class.\r\n\r\n </li>\r\n <li>\r\n <strong>CANDIDATE TO CANDIDATE VIOLATION:</strong>\r\n Violations flagged when political spots are booked at different rates to other political spots for the same\r\n week, Inventory Code and Revenue Class.\r\n </li>\r\n </ul>\r\n\r\n</ng-template>\r\n\r\n<ng-template #circularProgressBar>\r\n <circle-progress [percent]=\"percentDone\" [radius]=\"5\" [showTitle]=\"false\" [showUnits]=\"false\" [showSubtitle]=\"false\"\r\n [outerStrokeWidth]=\"3\" [innerStrokeWidth]=\"3\" [space]=\"-3\" [outerStrokeColor]=\"'#268bff'\"\r\n [innerStrokeColor]=\"'#d5d5d5'\" [animationDuration]=\"10\"></circle-progress>\r\n</ng-template>\r\n\r\n\r\n<ng-template #userLoggedInDetails>\r\n <div class=\"tooltip-div-container\">\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n <span *ngIf=\"data.key != 'read'\">\r\n {{ data.key }} <b> {{data.value}}</b>\r\n </span>\r\n <span *ngIf=\"data.key == 'read'\">\r\n {{data.value}}\r\n </span>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #markAsReadTip>\r\n <div class=\"notification-tooltip-div-container\">\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{data.value}}\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #textActionTooltipTemplate>\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.key }} <b> {{data.value}}</b>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #tooltipContainingTableTemplate>\r\n <div *ngIf=\"tooltipContainingTable\" [innerHTML]=\"tooltipContainingTable.innerHtml\" class=\"notification-tooltip-div-container\">\r\n <!-- <ul>\r\n <li *ngFor=\"let headerMsg of tooltipContainingTable.tableHeaderMsg\">\r\n <b> {{headerMsg}} </b>\r\n </li>\r\n </ul>\r\n\r\n <table class=\"tooltip-table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let header of tooltipContainingTable.tooltipTableHeader\">\r\n {{ header}}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let rows of tooltipContainingTable.tooltipTableBody\">\r\n <td *ngFor=\"let data of rows\">\r\n {{ data }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <ul>\r\n <li style=\"margin-top:10px; padding:0\" *ngFor=\"let footerMsg of tooltipContainingTable.tableFooterMsg\">\r\n {{ footerMsg }} \r\n </li>\r\n </ul> -->\r\n\r\n </div>\r\n</ng-template>\r\n<!-- <ng-template #textActionTooltipTemplate>\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.key }} <b> {{data.value}}</b>\r\n </ng-container>\r\n</ng-template> -->", styles: [".sort-btn{background:white;border:none;border-right:1px solid #1b88ff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.07;letter-spacing:normal;color:#1b88ff;cursor:pointer;flex:1;text-align:center}.sort-btn:last-of-type{border-right:none}.sort-btn.active{color:#202b47;text-decoration:none}p.sort-container{margin-top:8px;padding-bottom:8px;border-bottom:1px solid #e6e6e6;margin-bottom:0;display:flex}::ng-deep .tooltip-inner{max-height:22rem;background-color:#fff;border:1px solid white;border-radius:5px;box-shadow:0 2px 2px #0000003d,0 0 2px #0000001f;max-width:251px;width:100%;padding:0!important}::ng-deep .tooltip-inner div.radio-container{flex-wrap:wrap}::ng-deep .md-drppicker{box-shadow:unset!important}::ng-deep .available{color:#999}::ng-deep .bs-tooltip-bottom .arrow:before{border-bottom-color:#fff!important}::ng-deep .bs-tooltip-left .arrow:before{border-left-color:#fff!important}::ng-deep .tooltip.show{opacity:1}.input{text-align:left;margin:5px 10px 5px 5px;display:flex;align-items:center;width:230px;white-space:nowrap}.data{color:#000;font-weight:700;margin-left:5px;margin-right:5px}span.data{display:inline-block;text-overflow:ellipsis;white-space:pre;width:100%;overflow:hidden}.check-box{font-size:14px;cursor:pointer;position:relative;top:-1px}span.mdi-filter.active{color:#000;opacity:1!important;pointer-events:all!important}p{margin-bottom:0;line-height:initial}span.mdi-filter{color:#cbcbcb}::ng-deep .ngx-slider-pointer{top:-5px!important;width:12px!important;height:12px!important;background:#bdbdbd!important;border:1px solid #ffffff!important;box-shadow:0 1px 3px #0000004d!important;border-radius:16px!important}input:focus{outline:none}input::placeholder{color:#c8c8c8}.cancel-btn{background:#c7e1ff;color:#268bff}.apply-btn{background:#268bff;color:#fff;margin-left:.3125rem}div.radio-container{display:flex;white-space:nowrap;justify-content:space-between;background-color:#f4f4f4;border-radius:.125rem;margin:.4375rem .4375rem .25rem}div.radio-container div{flex:1;width:50%}div.radio-container div.full-width{width:100%}div.radio-container input{position:relative;top:.125rem;margin-right:.25rem}div.radio-container label{font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:0;color:#4a4a4a;margin:0;padding-left:.125rem}div.radio-container label:first-of-type{margin-right:.188rem}div.radio-container input[type=radio]{appearance:none;display:inline-block;width:.9375rem;height:.9375rem;padding:.125rem;background-clip:content-box;border:.125rem solid #268bff;background-color:transparent;border-radius:50%}div.radio-container input[type=radio]:checked{background-color:#268bff}.checkbox-filter-buttons-container{padding:0 8px!important}.buttons-container{display:flex;margin:0px auto .4375rem;justify-content:center;padding:0 12px}.buttons-container .button{padding:0 10px;width:100%;margin:8px 0 0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.buttons-container button:last-of-type{background-color:#268bff;color:#fff;margin-left:.5rem}.buttons-container button.disabled{background:#bdbdbd;opacity:.5;color:#4a4a4a}.button{display:inline-block;margin:8px 4px 0 8px;padding:0 16px;border-radius:4px;text-align:center;outline:none;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;border:none;color:#268bff;background-color:#e5f1ff}.search-box{display:flex;align-items:center;color:#c8c8c8;border:1px solid #e6e6e6;border-radius:.125rem;margin:.25rem .4375rem .188rem;height:1.5rem;padding:.188rem 8px .188rem .5rem}.search-box .search-bar-close{margin-left:auto;float:right}.search-icon{margin:0 4px 0 0;font-size:1.125rem;color:#9b9b9b}.filter-icon{justify-content:right;margin-left:auto;color:#d4d4d4;color:#a1a1a1;font-size:16px;cursor:pointer}.data{margin:0 13px 0 8px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.86;letter-spacing:\"\";color:#4a4a4a}.search-input{margin:1px 0 1px 4px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#c8c8c8;width:calc(100% - 38px)}.check-box{color:#268bff}.tooltip-data-container{overflow-y:scroll;max-height:8rem}.searchbar{width:100%;display:flex;justify-content:flex-end;align-items:flex-end}.clear-button{opacity:.5;font-family:Roboto;font-size:.9375rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;text-decoration:underline;border:none;background-color:#fff;color:#4a4a4a;margin-left:.625rem;padding:0}.clear-button:focus{outline:none;box-shadow:none}.unchecked{color:#268bff}cdk-virtual-scroll-viewport.dropdown-data-container{max-height:12.3rem;width:100%;overflow-y:auto;overflow-x:hidden}cdk-virtual-scroll-viewport.dropdown-data-container p.input{margin-left:0}cdk-virtual-scroll-viewport.dropdown-data-container p.input span.mi{padding-left:.4375rem}cdk-virtual-scroll-viewport.dropdown-data-container p.input:hover{background-color:#ebebeb;cursor:pointer}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar{width:.188rem}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar-thumb{color:#d3d3d3;background:lightgray}section.min-maxContainer{display:flex;justify-content:center;margin-bottom:-.125rem;margin-top:.5rem;width:100%}section.min-maxContainer input{width:30%;height:1.875rem;border:1px solid lightgray;color:gray}section.min-maxContainer span{display:inline-block;padding-left:.5rem;padding-right:.5rem;position:relative;top:.3125rem;color:#666}.time-container{width:100%;display:flex;padding:0 .75rem}.time-container input.form-control:disabled{background-color:#fff;width:2.813rem}.time-container input.numberInput:focus{box-shadow:none;border-color:#c2cfd6}.time-container .dot{color:#cbcbcb;position:relative;left:-7px;font-size:17px}.time-container div.arrow-container{flex-direction:column;display:flex;margin-top:.375rem;width:9px;height:18px;margin-right:1.1875rem}.time-container div.arrow-container i{color:#000;cursor:pointer;max-height:9px;font-size:25px;width:10px}.time-container div.arrow-container i:before{width:0;height:0;pointer-events:none;position:relative;left:-9px;top:-11px}.mdi-filter{cursor:pointer}.time-label-container{display:flex;justify-content:flex-start}.time-label-container label{margin-bottom:0;color:#4a4a4a;margin-top:.125rem;margin-left:.625rem;font-weight:700}.time-heading{color:#000;font-size:.8125rem;text-align:left;padding-left:.625rem;margin-top:.625rem;font-weight:700}.column-clear-all{width:94%;text-align:center;border:none;font-size:14px;background:none;text-decoration:underline;color:#268bff}.checkbox-container{display:flex;padding-inline:.625rem}.checkbox-container .data{text-align:left}.checkbox-container:first-of-type{margin-top:.625rem;font-weight:500}.column-clear-all{width:94%;text-align:center;border:none;background:none;text-decoration:underline;color:#268bff}.column-clear-all:disabled{opacity:.5;color:#4a4a4a;font-weight:400}.column-clear-all.align-center{text-align:center}span.mdi-filter-variant.disabled{pointer-events:none;opacity:.5}.datepicker-container{width:100%}span.mdi-filter-variant{color:#cbcbcb;cursor:pointer;font-size:.875rem}span.mdi-filter-variant.active{color:#000}p.filter-tab{font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:normal;color:#1b88ff;border-radius:5px;background-color:#f4f4f4;padding-inline:8px;cursor:pointer;overflow:hidden;text-align:center;text-overflow:ellipsis}p.filter-tab.active{color:#fff;background-color:#1b88ff}button.filter-text-btn{background:white;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;border:none;color:#268bff;margin-inline:4px;margin-top:2px}button.filter-text-btn:disabled{color:#b1b1b1;cursor:not-allowed}::ng-deep .non-edit-datepicker-tooltip .tooltip-inner{max-width:310px!important;width:283px!important;overflow-y:initial!important;padding:0!important}input.slider-text::-webkit-outer-spin-button,input.slider-text::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input.slider-text{-moz-appearance:textfield}input.slider-text.red-border{border:1px solid #f44336!important}::ng-deep .checkbox-sort p.sort-container{margin-top:8px!important;padding-bottom:8px!important}i.mdi-close{cursor:pointer}i.mdi-close.disable-close-icon{pointer-events:none;cursor:not-allowed}input.error-border{border:1px solid #f44336!important}::ng-deep .non-edit-checkbox-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-slider-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-time-tooltip .tooltip-inner{width:250px!important;padding:0!important}::ng-deep .non-edit-time-tooltip.bs-tooltip-start{padding:.4rem}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow{right:0;top:5px!important;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow:before{border-left-color:#fff;left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height)}::ng-deep .no-bottom-border p.sort-container{border-bottom:none!important}::ng-deep .ngx-slider-pointer-min:after{display:none}::ng-deep .ngx-slider-pointer-max:after{display:none}::ng-deep .ngx-slider span.ngx-slider-pointer{width:12px;height:12px;top:-5px;background-color:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bar{height:3px;background:#ededed}::ng-deep .ngx-slider span.ngx-slider-selection{background:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bubble{bottom:-22px;font-size:12px;color:#333}::ng-deep .show-min.ngx-slider span.ngx-slider-model-value{background:white;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .show-max.ngx-slider span.ngx-slider-model-high{background:white;box-shadow:none}::ng-deep .ngx-slider span.ngx-slider-combined{background:white;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .ngx-slider{top:10px!important;margin:5px 0 2px!important}::ng-deep .ngx-slider-animate{top:0!important}.sidebar-slider{margin-bottom:35px!important;margin-left:5px;margin-right:5px}.slider-placeholder{height:14px}::ng-deep .filter-calendar select.form-select:focus{border-color:#c2cfd6;box-shadow:none}::ng-deep .filter-calendar select.form-select{background-color:#fff}.no-data-case{padding-left:.4375rem!important;font-size:.875rem!important;margin-top:10px!important;cursor:pointer}.check-mark,.unread-mark{cursor:pointer}.on-hover:hover .unread-mark,.notificationHover .check-mark{opacity:0;cursor:pointer}.on-hover:hover .check-mark{opacity:1;cursor:pointer}:host ::ng-deep .gt{table-layout:fixed;margin-bottom:0;width:100%}:host ::ng-deep .gt th,:host ::ng-deep .gt td{padding:2px 8px;line-height:normal}:host ::ng-deep .gt thead tr th .upper-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#4a4a4a;margin-bottom:0}:host ::ng-deep .gt thead tr th .lower-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#a7a7a7;margin-bottom:0}:host ::ng-deep .gt thead tr th{background-color:#ededed;position:sticky;position:-webkit-sticky;top:0;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .gt thead tr th br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt thead tr th div.row{display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;width:max-content}:host ::ng-deep .gt thead tr th div.sort-filter-container{display:flex;flex-wrap:nowrap;align-items:center;margin-left:.25rem;margin-right:auto}:host ::ng-deep .gt thead tr th span.mdi-filter-variant{font-size:13px!important;top:-1px!important;position:relative}:host ::ng-deep .gt thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4}:host ::ng-deep .gt tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td:nth-of-type(n + 2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td .upper-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#000;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr td .lower-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#a7a7a7;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt tbody tr:nth-of-type(1) td{border-top:none!important}:host ::ng-deep .gt .custom-column-checkbox-checked,:host ::ng-deep .gt .custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}:host ::ng-deep .gt .custom-column-checkbox-checked{color:#268bff}:host ::ng-deep .gt .custom-column-checkbox-unchecked{color:#4a4a4a}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:nth-of-type(n + 2){box-shadow:inset -1px 0 #d4d4d4}.table-container{overflow-x:auto;overflow-y:auto}.rowSelectCheckbox,#selectAllRowsCheckbox{cursor:pointer}.disable-checkbox{color:#dedede!important;pointer-events:none!important}.mdi-warning{color:#f3c639;font-size:16px;line-height:28px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{opacity:1}.redcolor-status{color:#c62a2a}#no-filter-space{width:.875rem}::ng-deep .mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:1.875rem!important;width:2.625rem;padding:0 .625rem}input.numberInput{margin-right:-.8125rem;padding:0 0 0 .625rem;height:1.875rem}::ng-deep .mat-button-toggle-checked{background-color:#268bff!important;color:#fff!important}::ng-deep .mat-button-toggle-group-appearance-standard{border-radius:0}.hidden{display:none}.no-data-div{margin-top:2.5px}.no-data-div label{margin:0;width:auto;font-weight:500;background-color:#d3d3d3;padding:.3125rem 1.125rem;border-radius:.25rem}.column-values:nth-of-type(2){color:#a7a7a7!important}.custom-column-checkbox-checked,.custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}.custom-column-checkbox-checked{color:#268bff}.custom-column-checkbox-unchecked{color:#4a4a4a}.time-filter-checkboxes>div>p{color:#151b1e}::ng-deep .margin-bottom-zero .mat-radio-label{margin-bottom:0}:host ::ng-deep mat-radio-group br{margin-top:0!important}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__background{width:var(--mat-radio-size);height:var(--mat-radio-size)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__inner-circle{border-width:calc(var(--mat-radio-size) / 2)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{margin:0 0 0 4px;padding:0;top:-2px;position:relative}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio--disabled+label{color:var(--primary-text-color-dark)!important}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{left:-94px;font-size:12px;color:#4a4a4a;position:relative}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:red}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:red}::ng-deep .mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:#00000061!important}::ng-deep .mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-inner-circle{background-color:#00000061!important}::ng-deep tr.white-background-row{background:white}::ng-deep tr.gray-background-row{background:rgba(233,233,233,.5)!important}.remarks-tooltip,.mdi-information,.mdi-information-outline,.seller-tooltip{font-size:.875rem;color:#268bff;position:relative;top:.1875rem;cursor:pointer}.seller-tooltip{top:-1px;float:right}::ng-deep .remarks-info-tooltip .tooltip-inner{max-width:19.25rem!important}.rating-icon,.lur-violation-icon{color:#268bff;cursor:pointer;position:relative;left:-2px}::ng-deep .rating-info-tooltip .tooltip-inner{max-width:800px!important}.spots-info-icon{color:#268bff;cursor:pointer;margin:1px 0 0 -13px}.spots-info-icon-ol{color:#268bff;cursor:pointer;margin:1px 4px 0 -14px}::ng-deep .spot-info-tooltip .tooltip-inner{position:relative;max-width:220px!important;background:#fff;word-break:break-word;display:flex}::ng-deep .spot-info-tooltip-for-orderlisting-table .tooltip-inner{max-width:220px!important;background:#fff;word-break:break-word;display:flex}p.first-row{padding:.5rem .5rem 0;color:#000;white-space:nowrap;text-align:left}p.second-row{padding:2px .5rem .5rem;color:#000;white-space:nowrap;text-align:left}::ng-deep .gt-total-row-tooltip{opacity:1!important}::ng-deep .gt-total-row-tooltip .tooltip-inner{color:#000;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;background-color:#fff;padding:4px!important;width:100%;border-radius:2px!important}::ng-deep .gt-total-row-tooltip .arrow:before{border-top-color:#fff!important}.info-label{margin-left:4px;color:#268bff;vertical-align:text-top}::ng-deep .hierarchy-tooltip{max-width:-moz-fit-content;max-width:fit-content;width:310px!important}::ng-deep .hierarchy-tooltip .tooltip-inner{padding:4px!important;max-width:22.75rem;max-height:11.25rem}table.seller-hierarchy-table{table-layout:fixed}table.seller-hierarchy-table tr th{font-family:Roboto;font-size:.75rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;color:#5e5e5e;white-space:nowrap;background:#ededed;position:sticky;box-shadow:inset 0 1px #d4d4d4;top:0;z-index:1}table.seller-hierarchy-table tr th:nth-child(1){width:20px}table.seller-hierarchy-table tr th:first-of-type,table.seller-hierarchy-table tr td:first-of-type{width:20px;border-left:1px solid #d4d4d4}table.seller-hierarchy-table tr th:last-of-type,table.seller-hierarchy-table tr td:last-of-type{border-right:1px solid #d4d4d4;width:7.875rem!important}table.seller-hierarchy-table tr th:nth-of-type(2){width:7.75rem!important}table.seller-hierarchy-table tr td{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#4a4a4a;box-shadow:none!important;border-top:1px solid #d4d4d4;border-bottom:1px solid #d4d4d4}table.seller-hierarchy-table tr td:nth-of-type(2),table.seller-hierarchy-table tr td:nth-of-type(3){padding-top:.25rem}table.seller-hierarchy-table tr td span{display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}section.hierarchy-table-container{max-height:8.75rem;overflow:auto}section.hierarchy-table-container::-webkit-scrollbar-track{margin-top:1.5rem}.difference-text{padding:.5rem;color:#000;text-align:left}::ng-deep .posted-avg-tooltip .tooltip-inner{width:13.8125rem!important}::ng-deep .drrBooked-info-tooltip{transform:translate(26px,6px)}::ng-deep .drrBooked-info-tooltip .tooltip-inner{max-width:307px!important;width:242px!important;background:#fff;word-break:break-word;display:flex;padding:4px!important;text-align:left}::ng-deep .drrBooked-info-tooltip .tooltip-inner p{color:#000}::ng-deep .drrBooked-info-tooltip .arrow:before{border-right-color:#fff!important}.clickable-data{cursor:pointer;color:#268bff!important;display:flex!important;align-items:center}.clickable-data .spot-details-download-icons{font-size:12px}.disabled-clickable-data{pointer-events:none;color:#d4d4d4!important}.spot-column-tooltip-message{color:#000;width:max-content;text-align:left}div.spinner-for-button-directive{position:relative;left:-1px}.clickable-row table tr.mat-row td{cursor:pointer!important}.tooltip-div-container{text-align:left!important;padding:12px 4px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.notification-tooltip-div-container{text-align:left!important;padding:6px 8px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.mdi-information,.mdi-information-outline{left:3px;top:1px}.mdi-information-outline{position:static}::ng-deep .team-user-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .team-user-tooltip .tooltip-inner{opacity:1!important;width:-moz-fit-content!important;width:fit-content!important;max-width:520px;border-radius:2px;padding:0 4px!important}::ng-deep .team-user-tooltip .tooltip-inner .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:white!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip{opacity:1!important}::ng-deep .gt-icon-column-tooltip .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:white!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .gt-icon-column-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip .tooltip-inner{width:100%}::ng-deep .tooltip-containing-table{opacity:1!important}::ng-deep .tooltip-containing-table .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:white!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .tooltip-containing-table.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .tooltip-containing-table li{margin:0!important;padding:0!important}::ng-deep .tooltip-containing-table ul{margin:0!important;padding-left:8px!important}::ng-deep .tooltip-containing-table .tooltip-inner{width:100%;max-width:230px}table.tooltip-table{table-layout:fixed;margin:4px 0 0;width:100%}table.tooltip-table th,table.tooltip-table td{padding:2px 8px;line-height:normal}table.tooltip-table thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4!important;border:none}table.tooltip-table thead tr th{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67;background-color:#ededed;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}table.tooltip-table thead tr th div.row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}table.tooltip-table tbody tr td{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67}table.tooltip-table tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}table.tooltip-table tbody tr td:nth-of-type(n + 2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}.bottom-border{border-bottom:1px solid #d4d4d4!important}i.disabled{pointer-events:none!important}\n"] }]
|
|
691
691
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.AnnaSortService }, { type: i2.AnnaDateTimeFormatService }, { type: i3.AnnaFilterService }]; }, propDecorators: { showSkeletonLoading: [{
|
|
692
692
|
type: Input
|
|
693
693
|
}], tableHeaders: [{
|
|
@@ -778,4 +778,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
778
778
|
type: ViewChildren,
|
|
779
779
|
args: ['tableHeader']
|
|
780
780
|
}] } });
|
|
781
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1ub24tZWRpdGFibGUtZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWdlbmVyaWMtdGFibGUtbGliL2NvbXBvbmVudHMvYW5uYS1ub24tZWRpdGFibGUtZ2VuZXJpYy10YWJsZS9hbm5hLW5vbi1lZGl0YWJsZS1nZW5lcmljLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtZ2VuZXJpYy10YWJsZS1saWIvY29tcG9uZW50cy9hbm5hLW5vbi1lZGl0YWJsZS1nZW5lcmljLXRhYmxlL2FubmEtbm9uLWVkaXRhYmxlLWdlbmVyaWMtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsNEJBQTRCO0FBQzVCLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBNEIsaUJBQWlCLEVBQWdDLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVNLGdDQUFnQztBQUNoQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFLckQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFHakgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDM0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFcUIsQ0FBQztBQVM3RCxN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LGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csMEJBQTBCO3NCQUFuQyxNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyw2QkFBNkI7c0JBQXRDLE1BQU07Z0JBa0NzQixxQkFBcUI7c0JBQWpELFlBQVk7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbIlxyXG4vLyBBbmd1bGFyIGltcG9ydCBzdGF0ZW1lbnRzXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVmlld0NoaWxkcmVuLCBRdWVyeUxpc3QsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXMsIENoYW5nZURldGVjdG9yUmVmLCBFbGVtZW50UmVmLCBBZnRlclZpZXdDaGVja2VkLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLy8gVGhpcmQgcGFydHkgaW1wb3J0IHN0YXRlbWVudHNcclxuaW1wb3J0IHsgY2xvbmVEZWVwLCBpc0VxdWFsLCB1bmlxIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xyXG5cclxuXHJcbi8vc3ViLWVudHJpZXMgb2YgYW5uYSBsaWIgaW1wb3J0IHN0YXRlbWVudFxyXG5pbXBvcnQgeyBJR3RHZW5lcmFsQ29uZmlnLCBJR3RUYWJsZUhlYWRlciwgSUhlYWRlckluZm8sIElUb3RhbFJvd0luZm8gfSBmcm9tICcuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9tb2RlbHMvYW5uYS1ub24tZWRpdGFibGUtZ3QtbW9kZWxzJztcclxuaW1wb3J0IHsgQW5uYURhdGVUaW1lRm9ybWF0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL3NlcnZpY2VzL2FubmEtZGF0ZS10aW1lLWZvcm1hdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSVdlZWtDYWxlbmRhciB9IGZyb20gJy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLWdsb2JhbC1kcm9wZG93bi1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBHdENvbHVtbkljb25FbWl0dGVkRGF0YSwgUmF0aW5nU2VsbGVyR3JvdXBIaWVyYXJjaHksICB9IGZyb20gJy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLWdlbmVyaWMtZGF0YS10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgcmFkaW9CdXR0b25Nb2RlbCB9IGZyb20gJy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLXRvb2x0aXAubW9kZWwnO1xyXG5pbXBvcnQgeyBBbm5hU29ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9zZXJ2aWNlcy9hbm5hLXNvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEFubmFGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvc2VydmljZXMvYW5uYS1maWx0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW50ZXJmYWNlIGtleVZhbHVlVG9vbHRpcFR5cGUgeyBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9O1xyXG5pbnRlcmZhY2UgdGFibGVUb29sdGlwVHlwZSB7IHRvb2x0aXBUYWJsZUhlYWRlcjogc3RyaW5nW10sIHRvb2x0aXBUYWJsZUJvZHk6IHN0cmluZ1tdW10sIHRhYmxlSGVhZGVyTXNnOiBzdHJpbmdbXSwgdGFibGVGb290ZXJNc2c6IHN0cmluZ1tdLCBpbm5lckh0bWw6IHN0cmluZ31cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYW5uYS1jb3JlLW5vbi1lZGl0YWJsZS1nZW5lcmljLXRhYmxlLWxpYicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FubmEtbm9uLWVkaXRhYmxlLWdlbmVyaWMtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FubmEtbm9uLWVkaXRhYmxlLWdlbmVyaWMtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQW5uYU5vbkVkaXRhYmxlR2VuZXJpY1RhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0NoZWNrZWQge1xyXG5cclxuICBASW5wdXQoKSBzaG93U2tlbGV0b25Mb2FkaW5nOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHRhYmxlSGVhZGVyczogSUd0VGFibGVIZWFkZXJbXTtcclxuICBASW5wdXQoKSB0YWJsZURhdGE6IGFueVtdO1xyXG4gIEBJbnB1dCgpIGNsb25lZFRhYmxlRGF0YTogYW55W107XHJcbiAgQElucHV0KCkgZ3RHZW5lcmFsQ29uZmlnOiBJR3RHZW5lcmFsQ29uZmlnO1xyXG4gIEBJbnB1dCgpIHRvdGFsUm93SW5mbz86IElUb3RhbFJvd0luZm9bXTtcclxuICBASW5wdXQoKSBndERpbWVuc2lvbjogeyByb3dIZWlnaHQ6IG51bWJlciwgaGVhZGVySGVpZ2h0OiBudW1iZXIsIGRhdGFPblRvcEhlaWdodDogbnVtYmVyLCBtYXJnaW5Gcm9tQm90dG9tOiBudW1iZXIsIHRhYmxlSGVpZ2h0Pzogc3RyaW5nfTtcclxuICBASW5wdXQoKSB0YWJsZUNsYXNzOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbWF4aW11bVJvd3NXaGljaENhbkJlUmVuZGVyZWRXaXRob3V0U2Nyb2xsOiBudW1iZXIgPSA1O1xyXG4gIEBJbnB1dCgpIGZpeE51bWJlck9mUm93c0ZvclBvcHVwOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbGltaXQ6IG51bWJlciA9IDMwOyBcclxuICBASW5wdXQoKSBpbmNsdWRlQm9yZGVySW5UYWJsZUhlaWdodDogYm9vbGVhbiA9IHRydWU7IFxyXG4gIEBJbnB1dCgpIGRvd25sb2FkSW5Qcm9ncmVzczogYm9vbGVhbjtcclxuICBASW5wdXQoKSBwZXJjZW50RG9uZTogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHN0YXJyZWRJblByb2dyZXNzOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGNsaWNrYWJsZVJvdzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNldFRhYmxlSGVpZ2h0V2hlblJvd1NpemVJc0ZpeGVkOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSB0YWJsZUJvcmRlckJvdHRvbUNsYXNzUmVxdWlyZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGhpZGVTb21lVGRzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdGRzSGF2ZVJvd1NwYW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBtdWx0aXBsZVRhYmxlc1ByZXNlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIHRvZ2dsZUNoZWNrYm94ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSB0b2dnbGVSb3dDaGVja2JveCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgdG9nZ2xlSGVhZGVyQ2hlY2tib3ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHVuZG9JY29uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZmlsdGVyQXBwbGllZFRvVGFibGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHNvcnRpbmdBcHBsaWVkVG9UYWJsZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcm93Q2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcmFkaW9CdXR0b25TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY29sdW1uRmlsdGVyT3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjb2x1bW5GaWx0ZXJDbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGd0SWNvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGd0U1ZHSWNvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGd0VGV4dEFjdGlvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGd0Vmlld0RldGFpbENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGd0SW5uZXJIVE1MQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZG93bmxvYWRTcG90RGV0YWlscyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2xpY2thYmxlRGF0YUNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHRvdGFsUm93SWNvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG5vdGlmaWNhdGlvbkljb25Ib3ZlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgbm90aWZpY2F0aW9uSWNvbkhvdmVyTGVhdmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGVkaXRhYmxlSW5wdXRFZGl0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHJhZGlvQnV0dG9uTWVzc2FnZUljb25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBudW1iZXJPZlNrZWxldG9uUm93czogbnVtYmVyW11bXSA9IEFycmF5KDIwKS5maWxsKDApO1xyXG4gIHRhYmxlRGF0YVdyYXBwZXI6IGFueVtdO1xyXG4gIHJvd0NoZWNrZWQ6IGJvb2xlYW47XHJcbiAgaXNBbGxSb3dzQ2hlY2tlZDogYm9vbGVhbjtcclxuICBub0RhdGFXaWR0aDogc3RyaW5nID0gXCI1MCVcIjtcclxuICBtYXJrZWRGb3JDcmVkaXRTdGF0dXM6IHN0cmluZztcclxuICBtYXJrZWRGb3JNR1N0YXR1czogc3RyaW5nO1xyXG4gIGZpbHRlckFsaWdubWVudDogc3RyaW5nID0gXCJib3R0b20gYXV0b1wiO1xyXG5cclxuICAvL1NvcnQgYW5kIEZpbHRlclxyXG4gIHRvb2x0aXBSYWRpb1RleHRNYXA6IE1hcDxhbnksIGFueT47XHJcbiAgZmlsdGVyVGFiT2JqZWN0czogYW55W107XHJcbiAgdG9vbHRpcDogYW55O1xyXG4gIGRpc2FibGVDb2x1bW5DbGVhckFsbEJ0bjogYm9vbGVhbiA9IHRydWU7XHJcbiAgbWFyZ2luID0gNTtcclxuXHJcbiAgLy9XZWVrIEZpbHRlclxyXG4gIG11bHRpV2Vla1BpY2tlckNvbmZpZzogSVdlZWtDYWxlbmRhcjtcclxuXHJcbiAgdGFibGVDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHRvdGFsUm93Q29sdW1uczogc3RyaW5nW10gPSBudWxsO1xyXG4gIGJpbmRWYWx1ZUZ1bmNDYWxsZWQ6IGJvb2xlYW47XHJcblxyXG4gIGhpZXJhcmNoeVRvb2x0aXA6IHsgb3BlbjogKCkgPT4gdm9pZDsgY2xvc2U6ICgpID0+IHZvaWQ7IH07XHJcbiAgc2VsbGVyR3JvdXBIaWVyYXJjaHk6IFJhdGluZ1NlbGxlckdyb3VwSGllcmFyY2h5W107XHJcbiAgc2hvd0ZpbHRlclRvb2x0aXBUYWJzOiBib29sZWFuOyAvL0NoYW5nZSB0aGUgTmFtZVxyXG5cclxuICBpc1Njcm9sbGVkTGVmdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHJvd0JvcmRlcldpZHRoOiBudW1iZXIgPSAyO1xyXG5cclxuICBzYW1lVG9vbHRpcENsaWNrZWQ6IGJvb2xlYW47XHJcbiAgbWFyZ2luVG9wOiBzdHJpbmcgPSBcIlwiO1xyXG4gIEBWaWV3Q2hpbGRyZW4oJ3RhYmxlSGVhZGVyJykgdmlld0NoaWxkVGFibGVIZWFkZXJzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcblxyXG4gIGlzRGlmZmVyZW5jZUxlc3NUaGFuMjVQZXJjZW50OiBib29sZWFuO1xyXG4gIHN0YXJ0OiBudW1iZXIgPSAwO1xyXG4gIGVuZDogbnVtYmVyID0gdGhpcy5saW1pdCArIHRoaXMuc3RhcnQ7XHJcbiAgcmVuZGVyZWREYXRhOiBhbnlbXTsgXHJcbiAgc2VsZWN0ZWRJbnZlbnRvcnlJZEZvckRvd25sb2FkOiBudW1iZXI7XHJcbiAgc2VsZWN0ZWREZW1vZ3JhcGhpY0ZvckRvd25sb2FkOiBhbnk7XHJcbiAgc2VsZWN0ZWRSb3dUeXBlRm9yRG93bmxvYWQ6IHN0cmluZztcclxuICBoZWlnaHRPZkNoZWNrYm94VG9vbHRpcEZpbHRlcjogbnVtYmVyO1xyXG4gIGlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBzZWxlY3RlZFN0YXJyZWRPcmRlcklkOiBzdHJpbmc7XHJcblxyXG4gIHRleHRBY3Rpb25Ub29sdGlwOiBrZXlWYWx1ZVRvb2x0aXBUeXBlW10gPSBbXTtcclxuICB0b29sdGlwQ29udGFpbmluZ1RhYmxlOiB0YWJsZVRvb2x0aXBUeXBlID0gbnVsbDtcclxuICB0YWJsZUJvdHRvbUJvcmRlckNsYXNzOiBzdHJpbmcgPSBudWxsO1xyXG4gIHNob3dDaGVja2JveGVzRm9yVGltZUZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBhbm5hU29ydFNlcnZpY2U6IEFubmFTb3J0U2VydmljZSxcclxuICAgIHB1YmxpYyBhbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlOiBBbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLFxyXG4gICAgcHVibGljIGFubmFGaWx0ZXJTZXJ2aWNlOiBBbm5hRmlsdGVyU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5zZXRUb29sdGlwUmFkaW9OYW1lcygpO1xyXG4gIH1cclxuICBcclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldE1hcmdpbkxlZnRGb3JGaWx0ZXJJY29uKCk7ICAgIFxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNldEZpbHRlckFsaWdubWVudEJhc2VkT25TY3JlZW5SZXNvbHV0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBkZXRlY3RDaGFuZ2VzKCl7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmKGNoYW5nZXMgJiYgY2hhbmdlc1tcImd0RGltZW5zaW9uXCJdICYmIGNoYW5nZXNbXCJndERpbWVuc2lvblwiXS5jdXJyZW50VmFsdWUgJiYgdGhpcy5zZXRUYWJsZUhlaWdodFdoZW5Sb3dTaXplSXNGaXhlZCl7XHJcbiAgICAgIHRoaXMuc2V0VGFibGVIZWlnaHQoKTtcclxuICAgICAgdGhpcy5zZXRUYWJsZUJvdHRvbUJvcmRlcigpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2hvd1NrZWxldG9uTG9hZGluZykge1xyXG4gICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMubnVtYmVyT2ZTa2VsZXRvblJvd3M7XHJcbiAgICAgIHRoaXMucmVuZGVyZWREYXRhID0gdGhpcy5udW1iZXJPZlNrZWxldG9uUm93cztcclxuICAgICAgdGhpcy5pc05vRGF0YVRvRGlzcGxheVN1YmplY3QkLm5leHQoZmFsc2UpO1xyXG4gICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmluaXRpYWxWYWx1ZU1hcCA9IG5ldyBNYXAoKTtcclxuICAgICAgdGhpcy5zZXRUYWJsZUJvdHRvbUJvcmRlcigpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZihjaGFuZ2VzW1wicGVyY2VudERvbmVcIl0gfHwgY2hhbmdlc1tcImRvd25sb2FkSW5Qcm9ncmVzc1wiXSB8fCAoIGNoYW5nZXNbXCJzdGFycmVkSW5Qcm9ncmVzc1wiXSAmJiBjaGFuZ2VzW1wic3RhcnJlZEluUHJvZ3Jlc3NcIl0uY3VycmVudFZhbHVlICE9IHVuZGVmaW5lZCApKXtcclxuICAgICAgLy9ubyB0YXNrIHdpbGwgYmUgcGVyZm9ybWVkXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRJbml0aWFsUm93c0ZvclRhYmxlKCk7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUVuYWJsZUVhY2hDb2x1bW5Ub29sdGlwSWNvbigpO1xyXG4gICAgICB0aGlzLnRhYmxlQ29sdW1ucyA9IHRoaXMudGFibGVIZWFkZXJzLmZpbHRlcih4ID0+IHgudmlzaWJsZSkubWFwKHggPT4geC5oZWFkZXJJbmZvWzBdLm9iamVjdEtleSk7XHJcbiAgICAgIGlmKCAodGhpcy50YWJsZURhdGEgJiYgdGhpcy50YWJsZURhdGEubGVuZ3RoID09IDApIHx8ICh0aGlzLnRhYmxlRGF0YS5sZW5ndGggPT0gMiAmJiB0aGlzLmNoZWNrSWZBbGxUaGVFbGVtZW50c0FyZVplcm8oKSkpe1xyXG4gICAgICAgIHRoaXMudGFibGVEYXRhID0gQXJyYXkoMikuZmlsbCgwKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVkRGF0YSA9IGNsb25lRGVlcCh0aGlzLnRhYmxlRGF0YSk7XHJcbiAgICAgICAgdGhpcy5tYXJnaW5Ub3AgPSAoLSB0aGlzLmd0RGltZW5zaW9uLnJvd0hlaWdodCAtICh0aGlzLmd0RGltZW5zaW9uLnJvd0hlaWdodC8yKSkgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuaXNOb0RhdGFUb0Rpc3BsYXlTdWJqZWN0JC5uZXh0KHRydWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2V7XHJcbiAgICAgICAgdGhpcy5pc05vRGF0YVRvRGlzcGxheVN1YmplY3QkLm5leHQoZmFsc2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNob3dTa2VsZXRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZXRUYWJsZUJvdHRvbUJvcmRlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vc2V0dGluZyB0YWJsZSBjb2x1bW4gaGVyZSBhcyB3ZWxsIGJlY2F1c2Ugd2hpbGUgc2hvd2luZyBza2VsZXRvbiBsb2FkZXIsIHdlIHNob3VsZCBzaG93IHRhYmxlIGhlYWRlcnMuXHJcbiAgICBpZiAoY2hhbmdlc1sndGFibGVIZWFkZXJzJ10gJiYgIWlzRXF1YWwoY2hhbmdlc1sndGFibGVIZWFkZXJzJ10uY3VycmVudFZhbHVlLCBjaGFuZ2VzWyd0YWJsZUhlYWRlcnMnXS5wcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLnRhYmxlQ29sdW1ucyA9IHRoaXMudGFibGVIZWFkZXJzLmZpbHRlcih4ID0+IHgudmlzaWJsZSkubWFwKHggPT4geC5oZWFkZXJJbmZvWzBdLm9iamVjdEtleSk7XHJcbiAgICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZSA9IG5ldyBNYXAoKTtcclxuICAgICAgLy8gdGhpcy5zZXRDb2x1bW5Tb3J0U3RhdGVNYXAoKTtcclxuICAgICAgdGhpcy5zZXRBY3RpdmVTdGF0ZU9iamVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzWyd0b3RhbFJvd0luZm8nXSAmJiBjaGFuZ2VzWyd0b3RhbFJvd0luZm8nXS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgdGhpcy50b3RhbFJvd0NvbHVtbnMgPSB0aGlzLnRvdGFsUm93SW5mby5tYXAoeCA9PiB4LmNvbE5hbWUpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBzZXRGaWx0ZXJBbGlnbm1lbnRCYXNlZE9uU2NyZWVuUmVzb2x1dGlvbigpIHtcclxuICAgIGxldCB2aWV3cG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcclxuICAgIGlmKHZpZXdwb3J0SGVpZ2h0PDc0MCkge1xyXG4gICAgICB0aGlzLmZpbHRlckFsaWdubWVudCA9IFwibGVmdCByaWdodFwiO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyQWxpZ25tZW50ID0gXCJib3R0b20gbGVmdCByaWdodFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGFibGVCb3R0b21Cb3JkZXIoKXtcclxuICAgIGlmKHRoaXMudGFibGVCb3JkZXJCb3R0b21DbGFzc1JlcXVpcmVkICYmIHRoaXMudGFibGVEYXRhICYmIHRoaXMudGFibGVEYXRhLmxlbmd0aCAmJiB0aGlzLm1heGltdW1Sb3dzV2hpY2hDYW5CZVJlbmRlcmVkV2l0aG91dFNjcm9sbCA8IHRoaXMudGFibGVEYXRhLmxlbmd0aCl7XHJcbiAgICAgIHRoaXMudGFibGVCb3R0b21Cb3JkZXJDbGFzcyA9ICdib3R0b20tYm9yZGVyJztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnRhYmxlQm90dG9tQm9yZGVyQ2xhc3MgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tJZkFsbFRoZUVsZW1lbnRzQXJlWmVybygpe1xyXG4gICAgIHJldHVybiAhdGhpcy50YWJsZURhdGEuc29tZShpdGVtID0+IGl0ZW0gIT0gMCk7XHJcbiAgfVxyXG5cclxuICBzZXRUYWJsZUhlaWdodCgpe1xyXG4gICAgbGV0IHZpZXdwb3J0SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xyXG4gICAgbGV0IHJvd0hlaWdodCA9IHRoaXMuZ3REaW1lbnNpb24ucm93SGVpZ2h0O1xyXG4gICAgbGV0IGhlYWRlckhlaWdodCA9IHRoaXMuZ3REaW1lbnNpb24uaGVhZGVySGVpZ2h0O1xyXG4gICAgbGV0IGRhdGFPblRvcEhlaWdodCA9IHRoaXMuZ3REaW1lbnNpb24uZGF0YU9uVG9wSGVpZ2h0O1xyXG4gICAgbGV0IG1hcmdpbkZyb21Cb3R0b20gPSB0aGlzLmd0RGltZW5zaW9uLm1hcmdpbkZyb21Cb3R0b207XHJcbiAgICBsZXQgYWN0dWFsVGFibGVIZWlnaHQ7XHJcblxyXG4gICAgaWYodGhpcy5maXhOdW1iZXJPZlJvd3NGb3JQb3B1cCl7XHJcbiAgICAgIGxldCBtYXhOb09mUm93c1RvRGlzcGxheSA9IHZpZXdwb3J0SGVpZ2h0IDwgNzQwID8gNSA6IDEwO1xyXG4gICAgICB0aGlzLm1heGltdW1Sb3dzV2hpY2hDYW5CZVJlbmRlcmVkV2l0aG91dFNjcm9sbCA9IG1heE5vT2ZSb3dzVG9EaXNwbGF5O1xyXG4gICAgICBhY3R1YWxUYWJsZUhlaWdodCA9IHRoaXMubWF4aW11bVJvd3NXaGljaENhbkJlUmVuZGVyZWRXaXRob3V0U2Nyb2xsICogcm93SGVpZ2h0ICsgaGVhZGVySGVpZ2h0O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBoZWlnaHRMZWZ0Rm9yVGFibGUgPSB2aWV3cG9ydEhlaWdodCAtIGRhdGFPblRvcEhlaWdodCAtIG1hcmdpbkZyb21Cb3R0b207XHJcbiAgICAgIHRoaXMubWF4aW11bVJvd3NXaGljaENhbkJlUmVuZGVyZWRXaXRob3V0U2Nyb2xsID1cclxuICAgICAgTWF0aC5jZWlsKChoZWlnaHRMZWZ0Rm9yVGFibGUgLSBoZWFkZXJIZWlnaHQgLSByb3dIZWlnaHQpIC8gcm93SGVpZ2h0KSArIDE7XHJcbiAgICAgIGFjdHVhbFRhYmxlSGVpZ2h0ID0gdmlld3BvcnRIZWlnaHQgLSBkYXRhT25Ub3BIZWlnaHQgLSBtYXJnaW5Gcm9tQm90dG9tO1xyXG4gICAgfVxyXG4gICBcclxuICAgIC8vIGxldCBhY3R1YWxUYWJsZUhlaWdodCA9IGhlaWdodExlZnRGb3JUYWJsZSAtICgoaGVpZ2h0TGVmdEZvclRhYmxlIC0gaGVhZGVySGVpZ2h0IC0gcm93SGVpZ2h0KSAlIHJvd0hlaWdodCk7XHJcbiAgICBcclxuICAgIHRoaXMuZ3REaW1lbnNpb24udGFibGVIZWlnaHQgPSBgJHthY3R1YWxUYWJsZUhlaWdodH1weGA7XHJcblxyXG4gICAgXHJcbiAgICB0aGlzLm51bWJlck9mU2tlbGV0b25Sb3dzID0gQXJyYXkodGhpcy5tYXhpbXVtUm93c1doaWNoQ2FuQmVSZW5kZXJlZFdpdGhvdXRTY3JvbGwpLmZpbGwoMCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHJldHVybiBpbmRleDtcclxuICB9XHJcblxyXG4gIHNldFRvb2x0aXBSYWRpb05hbWVzKCkge1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwID0gbmV3IE1hcCgpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlN0YXJ0VGltZUZvckZpbHRlclwiLCBcIlN0YXJ0IFRpbWVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiRW5kVGltZUZvckZpbHRlclwiLCBcIkVuZCBUaW1lXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInN0YXJ0VGltZUZvckZpbHRlclwiLCBcIlN0YXJ0IFRpbWVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZW5kVGltZUZvckZpbHRlclwiLCBcIkVuZCBUaW1lXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInN0YXJ0X3RpbWVfZm9yX2ZpbHRlclwiLCBcIlN0YXJ0IFRpbWVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZW5kX3RpbWVfZm9yX2ZpbHRlclwiLCBcIkVuZCBUaW1lXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInByaW1hcnlBRU5hbWVcIiwgXCJQcmltYXJ5IEFFXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJlZ2lvblwiLCBcIlJlZ2lvblwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhZ2VuY3lOYW1lXCIsIFwiQWdlbmN5XCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImxvY2F0aW9uXCIsIFwiTG9jYXRpb25cIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYWR2ZXJ0aXNlck5hbWVcIiwgXCJBZHZlcnRpc2VyXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInByb2R1Y3RDb2RlXCIsIFwiUHJvZHVjdCBDb2RlXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImZsaWdodFN0YXJ0RGF0ZVwiLCBcIlN0YXJ0IERhdGVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZmxpZ2h0RW5kRGF0ZVwiLCBcIkVuZCBEYXRlXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9yZGVySWRBbmRSZXZOdW1iZXJcIiwgXCJTVE4gT3JkZXIjLVJldiNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYWx0ZXJuYXRlT3JkZXJJZFwiLCBcIkFsdC9SZXAgT3JkZXIgI1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJncnBcIiwgXCJHUlBcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiY3BwXCIsIFwiQ1BQXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImltcHNcIiwgXCJJTVBTXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImNwbVwiLCBcIkNQTVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvZmZlcmVkTUdzXCIsIFwiT2ZmZXJlZCBNR1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvdXRzdGFuZGluZ1BFXCIsIFwiTy9TIFBFXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9mZmVyZWRBRFVzXCIsIFwiT2ZmZXJlZCBBRFVzXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInVkRGVmaWNpdFZhbHVlXCIsIFwiTy9TIEF1ZCBEZWx0YVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzdGFydEVuZFRpbWVNdWx0aVwiLCBcIlRpbWVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkVmFsdWVcIiwgXCJCb29rZWRcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkU3BvdHNcIiwgXCJTcG90c1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJVc2VyQ3JlZGl0ZWRWYWx1ZVwiLCBcIlVzZXIgQ3JlZGl0ZWRcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiVXNlclVucmVzb2x2ZWRWYWx1ZVwiLCBcIlVzZXIgVW5yZXNvbHZlZFwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCdXllckFkZGVkVmFsdWVcIiwgXCJCdXllciBBZGRlZFwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCdXllckRlbGV0ZWRWYWx1ZVwiLCBcIkJ1eWVyIERlbGV0ZWRcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwidXNlckNoYW5nZXNcIiwgXCJVc2VyIENoYW5nZXNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYnV5ZXJDaGFuZ2VzXCIsIFwiQnV5ZXIgQ2hhbmdlc1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ1c2VyTUdcIiwgXCJVc2VyIE1HXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInVzZXJBRFVzXCIsIFwiVXNlciBBRFVzXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImludmVudG9yeUNvZGVcIiwgXCJJbnZlbnRvcnkgQ29kZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwcm9ncmFtXCIsIFwiUHJvZ3JhbVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhZ2VuY3lcIiwgXCJBZ2VuY3lcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYWR2ZXJ0aXNlclwiLCBcIkFkdmVydGlzZXJcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwic3RhcnREYXRlXCIsIFwiU3RhcnQgRGF0ZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJlbmREYXRlXCIsIFwiRW5kIERhdGVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZGF0ZVwiLCBcIkRhdGVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicmN2UHJlZW1wdFwiLCBcIiQgTWFkZWdvb2QgUEVzXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9zUHJlZW1wdFwiLCBcIiQgTy9TIFBFc1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyY3ZVbmRlckRseVwiLCBcIlJlY292ZXJlZCBVRFwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvc1VuZGVyRGx5XCIsIFwiTy9zIFVuZGVyIERseVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwcmltYXJ5QWVcIiwgXCJQcmltYXJ5IEFFXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJlZ2lvblwiLCBcIlJlZ2lvblwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyZXZDb2RlMVwiLCBcIlJldiBjb2RlIDFcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib3JkZXJOb1Jldk5vXCIsIFwiU1ROIE9yZGVyIy1SZXYjXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJldkNvZGUyXCIsIFwiUmV2IGNvZGUgMlwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyZXZDb2RlM1wiLCBcIlJldiBjb2RlIDNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkXCIsIFwiJCBCb29rZWRcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwic3BvdHNcIiwgXCJTcG90c1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwb3N0ZWRBdWRQZXJjZW50XCIsIFwiUG9zdGVkICVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicmV2aXNpb25cIiwgXCJSZXZpc2lvblwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJidXllck9yZGVySWRcIiwgXCJBTFQvUkVQIE9yZGVyI1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJkZW1vXCIsXCJEZW1vXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInBvc3RlZEFkdVwiLFwiJCBQb3N0ZWQgQURVc1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzY2hlZHVsZWRBZHVcIixcIiQgU2NoZWR1bGVkIEFEVXNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXVkaWVuY2VEZWZpY2l0XCIsXCIkIE8vUyBBdWRpZW5jZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwb3N0ZWRBdWRQZXJjZW50XCIsXCJQb3N0ZWQgQXVkaWVuY2UgJVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwb3RlbnRpYWxVbml0c1ZhbHVlXCIsXCJQT1QgVW5pdHNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkVW5pdHNWYWx1ZVwiLFwiQm9va2VkIEVxIFVuaXRzXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZEFtb3VudFdpdGhaZXJvUmF0aW5nVmFsdWVcIixcIlRvdGFsICQgQm9va2VkXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZEFtb3VudFBlcmNlbnRhZ2VXaXRoWmVyb1JhdGluZ1ZhbHVlXCIsXCIlIEFnYWluc3QgQWxsIERlbW9zXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZEFtb3VudFdpdGhvdXRaZXJvUmF0aW5nVmFsdWVcIixcIiRCb29rZWQgV2l0aCBJbXBzKOKAmTAwMClcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkQW1vdW50UGVyY2VudGFnZVdpdGhvdXRaZXJvUmF0aW5nVmFsdWVcIiwgXCIlIEFnYWluc3QgQWxsIERlbW9zXCIpO1xyXG4gICAgXHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwidG90YWxCb29rZWRBbW91bnRWYWx1ZVwiLFwiVG90YWwgJEJvb2tlZFwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhdmVyYWdlVW5pdFJhdGVWYWx1ZVwiLFwiIEFVUlwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ0b3RhbEJvb2tlZEFtb3VudFdpdGhSYXRpbmdWYWx1ZVwiLCBcIiRCb29rZWQgV2l0aCBSYXRpbmdcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXZlcmFnZVVuaXRSYXRlV2l0aFJhdGluZ1ZhbHVlXCIsIFwiQVVSIFdpdGggUmF0aW5nXCIpO1xyXG4gICAgXHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwidG90YWxCb29rZWRBbW91bnRXaXRoSW1wcmVzc2lvblZhbHVlXCIsIFwiJEJvb2tlZCBXaXRoIElNUFNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXZlcmFnZVVuaXRSYXRlV2l0aEltcHJlc3Npb25WYWx1ZVwiLCBcIkFVUiBXaXRoIElNUFNcIik7XHJcbiAgICBcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRVbml0c1dpdGhSYXRpbmdWYWx1ZVwiLCBcIkJvb2tlZCBVbml0cyBXaXRoIFJhdGluZ1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwb3N0ZWRVbml0c1dpdGhSYXRpbmdWYWx1ZVwiLCBcIlBvc3RlZCBVbml0cyBXaXRoIFJhdGluZ1wiKTtcclxuICAgIFxyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZFVuaXRzV2l0aEltcHJlc3Npb25WYWx1ZVwiLCBcIkJvb2tlZCBVbml0cyBXaXRoIElNUFNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicG9zdGVkVW5pdHNXaXRoSW1wcmVzc2lvblZhbHVlXCIsIFwiUG9zdGVkIFVuaXRzIFdpdGggSU1QU1wiKTtcclxuICAgIFxyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZFJhdGluZ3NcIiwgXCJCb29rZWQgUmF0aW5nXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInBvc3RlZFJhdGluZ3NcIiwgXCJQT1NURUQgUmF0aW5nXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlBvc3RlZFJhdGluZ1wiLCBcIlBvc3RlZCBSVEdcIik7XHJcblxyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZEltcHJlc3Npb25zXCIsIFwiQm9va2VkIElNUFNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicG9zdGVkSW1wcmVzc2lvbnNcIiwgXCJQb3N0ZWQgSU1QU1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJQb3N0ZWRJbXByZXNzaW9uc1wiLCBcIlBvc3RlZCBJTVAoJzAwMClcIik7XHJcbiAgICBcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRBdmVyYWdlUmF0aW5nXCIsIFwiQm9va2VkIEFVIFJhdGluZ1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwb3N0ZWRBdmVyYWdlUmF0aW5nXCIsIFwiUG9zdGVkIEFVIFJhdGluZ1wiKTtcclxuICAgIFxyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZEF2ZXJhZ2VJbXByZXNzaW9uXCIsIFwiQm9va2VkIEFVIElNUFNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicG9zdGVkQXZlcmFnZUltcHJlc3Npb25cIiwgXCJQb3N0ZWQgQVUgSU1QU1wiKTtcclxuICAgIFxyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZENwcFZhbHVlXCIsIFwiQm9va2VkIENQUFwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRFZmZlY3RpdmVDcHBWYWx1ZVwiLCBcIkVmZmVjdGl2ZSBDUFBcIik7XHJcbiAgICBcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRDcG1WYWx1ZVwiLCBcIkJvb2tlZCBDUE1cIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkRWZmZWN0aXZlQ3BtVmFsdWVcIiwgXCJFZmZlY3RpdmUgQ1BNXCIpO1xyXG4gICAgXHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib3JkZXJTb3VyY2VcIixcIk9yZGVyIFJvdXRlXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9yZGVyQ2F0ZWdvcnlcIixcIlJldiBDYXRlZ29yeVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJjYXNoT3JUcmFkZVwiLFwiQy9UXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJldmlzaW9uU3RhcnREYXRlXCIsIFwiUmV2aXNpb24gU3RhcnQgRGF0ZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJuYW1lXCIsIFwibmFtZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyb2xlXCIsIFwicm9sZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzdGF0aW9uQ291bnRcIiwgXCJzdGF0aW9uQ291bnRcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwic3RhdGlvbkxpc3RcIiwgXCJzdGF0aW9uTGlzdFwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhcHByb3ZlZE9uXCIsIFwiQXBwcm92ZWQgT25cIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXBwcm92ZWRCeVwiLCBcIkFwcHJvdmVkIEJ5XCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk9ESW1wc1wiLFwiT0QgSU1QU1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJVREltcHNcIixcIlVEIElNUFNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT0RHcnBcIixcIk9EIEdSUFwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJVREdycFwiLFwiVUQgR1JQXCIpOyBcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ1ZEltcHNQZXJjZW50XCIsXCJVRCAlXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInVkR3JwUGVyY2VudFwiLFwiVUQgR1JQICVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib2RJbXBzUGVyY2VudFwiLFwiT0QgJVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvZEdycFBlcmNlbnRcIixcIk9EIEdSUCAlXCIpO1xyXG5cclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJSZXZpc2lvbk51bWJlclwiLFwiUmV2aXNpb24gI1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJSZXZpc2lvblR5cGVcIixcIlJldmlzaW9uIFR5cGVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiR2VuZXJhdGVkT25cIixcIkdlbmVyYXRlZCBPblwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCb29rZWRWYWx1ZUZvckRpc3BsYXlcIixcIiQgQk9PS0VEXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJvb2tlZFZhbHVlXCIsXCIkIEJvb2tlZFwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCb29rZWRTcG90c1wiLFwiU3BvdHNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQm9va2VkR1JQXCIsXCJHUlBcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQm9va2VkSU1QU1JldlRhYlwiLFwiSU1QUycoMDAwKVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCb29rZWRDUFBcIixcIkNQUFwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCb29rZWRDUE1cIixcIkNQTVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJNR3NWYWx1ZUZvckRpc3BsYXlcIixcIiQgTUdTXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk1Hc1ZhbHVlXCIsXCIkIE1HU1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJBRFVzVmFsdWVGb3JEaXNwbGF5XCIsXCIkIEFEVVNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQURVc1ZhbHVlXCIsXCIkIEFEVVNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQnV5ZXJDaGFuZ2VzVmFsdWVGb3JEaXNwbGF5XCIsXCIkIEJ1eWVyIENoYW5nZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCdXllckNoYW5nZXNWYWx1ZVwiLFwiJCBCdXllciBDaGFuZ2VcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiVXNlckNoYW5nZXNWYWx1ZUZvckRpc3BsYXlcIixcIiQgU2VsbGVyIFVzZXIgQ2hhbmdlXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlVzZXJDaGFuZ2VzVmFsdWVcIixcIiQgU2VsbGVyIFVzZXIgQ2hhbmdlXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlNlbGxlckxpbmVcIixcIlNlbGxlciBMaW5lICNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQnV5ZXJMaW5lXCIsXCJCdXkgTGluZSAjXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlNwb3RTdGF0dXNcIixcIlNwb3QgU3RhdHVzXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkludmVudG9yeUNvZGVcIixcIkludmVudG9yeSBDb2RlXCIpOyBcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCdXllclByb2dyYW1OYW1lXCIsXCJCdXllciBQcm9ncmFtIE5hbWVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiUmV2ZW51ZUNsYXNzXCIsXCJSZXZlbnVlIENsYXNzXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIldlZWtseUFVUlwiLFwiQm9va2VkIEF2Zy4gUmF0ZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCb29rZWRSYXRlXCIsXCJCb29rZWQgUmF0ZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCb29rZWRSVEdcIixcIkJvb2tlZCBSVEdcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQm9va2VkSU1QU1wiLFwiQm9va2VkIElNUCgnMDAwKVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJJTVBTXCIsXCJJTVAoJzAwMClcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQVVSVEdcIixcIkF2ZyBSVEdcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQVVJTVBTXCIsXCJBdmcgSU1QKCcwMDApXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlBvc3RlZFJhdGluZ3NPckltcHJlc3Npb25zXCIsXCJQb3N0ZWQgUlRHXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlNjaGVkdWxlRmxpZ2h0V2Vla1wiLFwiU2NoZWR1bGUgV2Vla1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJTY2hlZHVsZWREYXlcIixcIlNjaGVkdWxlZCBEYXlcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQWlyU3RhdHVzXCIsXCJBaXIgU3RhdHVzXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkFpckRhdGVBbmRUaW1lXCIsXCJBaXIgRGF0ZSAmIFRpbWVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQWlyRGF0ZVwiLCBcIkFpciBEYXRlXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk5vcm1hbGl6ZWRPcmRlcmVkUmF0aW5nXCIsXCJOb3JtYWxpemVkIEJvb2tlZCBSVEdcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiTm9ybWFsaXplZE9yZGVyZWRJbXByZXNzaW9uc1wiLFwiTm9ybWFsaXplZCBCb29rZWQgSU1QKCcwMDApXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk5vcm1hbGl6ZWRQb3N0ZWRSYXRpbmdcIixcIk5vcm1hbGl6ZWQgUG9zdGVkIFJUR1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJOb3JtYWxpemVkUG9zdGVkSW1wcmVzc2lvbnNcIixcIk5vcm1hbGl6ZWQgUG9zdGVkIElNUCgnMDAwKVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJBZElkXCIsXCJBZC1JZFwiKTtcclxuXHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZGlzcGxheWltcHNcIixcIklNUFNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZGlzcGxheUdycFwiLFwiR1JQXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZFNwb3RzRm9yRGlzcGxheVwiLFwiU3BvdHNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZGlzcGxheVNwb3RzXCIsXCJTcG90c1wiKTtcclxuXHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZXN0aW1hdGVOb1wiLCBcIkVzdGltYXRlI1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwcmltYXJ5QnV5ZXJcIiwgXCJQcmltYXJ5IEJ1eWVyXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInByaW1hcnlCdXllck5hbWVcIiwgXCJQcmltYXJ5IEJ1eWVyXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInNlY29uZGFyeUJ1eWVyTmFtZVwiLCBcIlNlY29uZGFyeSBCdXllclwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzZWNvbmRhcnlCdXllclwiLCBcIlNlY29uZGFyeSBCdXllclwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ0aW1lb3V0RGF0ZVwiLCBcIlRpbWVvdXQgRGF0ZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJEaXNwbGF5dFNwb3RTdGF0dXNCSVwiLCBcIlNwb3QgU3RhdHVzXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkxpbmVTcG90XCIsIFwiTGluZS5TcG90XCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkx1cldpbmRvd05hbWVcIiwgXCJQb2xpdGljYWwgV2luZG93XCIpO1xyXG5cclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ1ZFZhbHVlXCIsIFwiJCBVRFwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvZFZhbHVlXCIsIFwiJCBPRFwiKTtcclxuXHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlSW52ZW50b3J5Q29kZVwiLCBcIkludmVudG9yeSBDb2RlXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk90aGVyQXZhaWxhYmxlU3BvdHNUYWJsZUJ1eWVyUHJvZ3JhbU5hbWVcIiwgXCJCdXllciBQcm9ncmFtIE5hbWVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlU3RhcnRUaW1lXCIsIFwiU3RhcnQgVGltZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJPdGhlckF2YWlsYWJsZVNwb3RzVGFibGVFbmRUaW1lXCIsIFwiRW5kIFRpbWVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlV2Vla2x5QVVSXCIsIFwiQm9va2VkIEF2Zy4gUmF0ZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJPdGhlckF2YWlsYWJsZVNwb3RzVGFibGVEaXNwbGF5UmV2ZW51ZUNsYXNzXCIsIFwiUmV2IENsYXNzXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk90aGVyQXZhaWxhYmxlU3BvdHNUYWJsZUFjdHVhbFdlZWtTdGFydERhdGVcIiwgXCJXZWVrXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk90aGVyQXZhaWxhYmxlU3BvdHNUYWJsZVdlZWtEYXlcIiwgXCJEYXlcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlRGlzcGxheUxlbmd0aFwiLCBcIkxlbmd0aFwiKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdE9yVW5zZWxlY3RDaGVja2JveChyb3dEYXRhOiBhbnksIGNvbHVtbktleXM6IGFueSwgaXNDaGVja2JveFNlbGVjdGVkOiBhbnkpIHtcclxuICAgIHJvd0RhdGFbY29sdW1uS2V5c10gPSAhcm93RGF0YVtjb2x1bW5LZXlzXTtcclxuICAgIHRoaXMudG9nZ2xlQ2hlY2tib3guZW1pdCh7IHJvd0RhdGEsIGNvbHVtbktleXMsIGlzQ2hlY2tib3hTZWxlY3RlZCB9KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdE9yVW5zZWxlY3RSYWRpb2JveChyb3dEYXRhOiBhbnksIGNvbHVtbktleXM6IGFueSwgaXNDaGVja2JveFNlbGVjdGVkOiBib29sZWFuKSB7XHJcbiAgICBpZihyb3dEYXRhW2NvbHVtbktleXNdID09IGlzQ2hlY2tib3hTZWxlY3RlZCkgcmV0dXJuO1xyXG4gICAgcm93RGF0YVtjb2x1bW5LZXlzXSA9IGlzQ2hlY2tib3hTZWxlY3RlZDtcclxuICAgIHRoaXMudG9nZ2xlQ2hlY2tib3guZW1pdCh7IHJvd0RhdGEsIGNvbHVtbktleXMsIGlzQ2hlY2tib3hTZWxlY3RlZCB9KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdFVuc2VsZWN0QWxsUm93cygpIHtcclxuICAgIHRoaXMudG9nZ2xlSGVhZGVyQ2hlY2tib3guZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0VW5zZWxlY3RSb3cocm93RGF0YTogYW55KSB7XHJcbiAgICB0aGlzLnRvZ2dsZVJvd0NoZWNrYm94LmVtaXQocm93RGF0YSk7XHJcbiAgfVxyXG5cclxuICB1bmRvQ3JlZGl0ZWRTcG90KGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy51bmRvSWNvbkNsaWNrZWQuZW1pdCh7IGRhdGEsIG1nT3JDcmVkaXQ6IFwiQ3JlZGl0XCIgfSk7XHJcbiAgfVxyXG5cclxuICB1bmRvTWdTcG90KGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy51bmRvSWNvbkNsaWNrZWQuZW1pdCh7IGRhdGEsIG1nT3JDcmVkaXQ6IFwiTWFrZUdvb2RcIiB9KTtcclxuICB9XHJcblxyXG4gIC8vU29ydCBhbmQgRmlsdGVyIExvZ2ljIGJlZ2lucyFcclxuICBjbG9zZVRvb2x0aXAoKSB7XHJcblxyXG4gICAgaWYgKHRoaXMudG9vbHRpcCAmJiB0aGlzLnRvb2x0aXAuaXNPcGVuKCkpIHtcclxuICAgICAgdGhpcy50b29sdGlwLmNsb3NlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xyXG4gICAgaWYgKCF0aGlzLmJpbmRWYWx1ZUZ1bmNDYWxsZWQpIHtcclxuICAgICAgdGhpcy5jb2x1bW5GaWx0ZXJDbG9zZWQuZW1pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNUb29sdGlwQWN0aXZlKGhlYWRlcjogYW55W10pIHtcclxuICAgIHJldHVybiB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmlzVG9vbHRpcEFjdGl2ZShoZWFkZXIsdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlKTtcclxuICB9XHJcblxyXG4gIGJpbmRUaGVWYWx1ZVRvVG9vbFRpcCh0b29sdGlwOiBhbnksIGhlYWRlcjogSUhlYWRlckluZm8pIHtcclxuXHJcbiAgICB0aGlzLmJpbmRWYWx1ZUZ1bmNDYWxsZWQgPSB0cnVlO1xyXG4gICAgLy8gaWYgc2FtZSB0b29sdGlwIG9wZW5lZCBjbG9zZSBpdFxyXG4gICAgaWYgKHRvb2x0aXAgPT0gdGhpcy50b29sdGlwKSB7XHJcbiAgICAgIHRoaXMuYmluZFZhbHVlRnVuY0NhbGxlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNsb3NlVG9vbHRpcCgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBlbmFibGVkSGVhZGVyczogYW55W10gPSBbXTtcclxuICAgICAgdGhpcy5jaGVja0lmVW5pcXVlVmFsdWVQcmVzZW50Rm9yVGhlSGVhZGVyKGhlYWRlcixlbmFibGVkSGVhZGVycyk7XHJcbiAgICAgIHRoaXMub3BlblRvb2x0aXAodG9vbHRpcCwgZW5hYmxlZEhlYWRlcnMsaGVhZGVyKTtcclxuXHJcbiAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDE1MDAgJiYgd2luZG93LmlubmVySGVpZ2h0IDwgNzY4ICYmICF0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNsaWRlclNldC5oYXMoaGVhZGVyLmZpbHRlclNvcnRPYmplY3RLZXlzWzBdKSkge1xyXG4gICAgICAgIHRoaXMuY29sdW1uRmlsdGVyT3BlbmVkLmVtaXQoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zaG93Q2hlY2tib3hlc0ZvclRpbWVGaWx0ZXIgPSB0aGlzLmd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gJ1NQT1RERVRBSUxTJyB8fCB0aGlzLmd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gJ0VYQ0xVREVJTlZFTlRPUllQT1BVUCcgfHwgdGhpcy5ndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09ICdSQVRJTkcnO1xyXG4gICAgICB0aGlzLnNob3dGaWx0ZXJUb29sdGlwVGFicyA9IGhlYWRlci5maWx0ZXJTb3J0T2JqZWN0S2V5cy5sZW5ndGggPiAxO1xyXG4gICAgICB0aGlzLmJpbmRWYWx1ZUZ1bmNDYWxsZWQgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrSWZVbmlxdWVWYWx1ZVByZXNlbnRGb3JUaGVIZWFkZXIoaGVhZGVyOiBJSGVhZGVySW5mbywgZW5hYmxlZEhlYWRlcnM6IGFueVtdKXtcclxuICAgIGhlYWRlci5maWx0ZXJTb3J0T2JqZWN0S2V5cy5mb3JFYWNoKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgbGV0IGRhdGFUb0NoZWNrID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5nZXRGaWx0ZXJPcHRpb25zRGF0YSh0aGlzLnRhYmxlRGF0YSwgdGhpcy5jbG9uZWRUYWJsZURhdGEsIGl0ZW0pO1xyXG4gICAgICBpZihpdGVtID09IFwicGVyaW9kXCIpe1xyXG4gICAgICAgICAgbGV0IHVuaXFTdGFydERhdGUgPSB1bmlxKGRhdGFUb0NoZWNrLm1hcCgodTogeyBbeDogc3RyaW5nXTogYW55OyB9KSA9PiB1W1wic3RhcnREYXRlXCJdKSk7XHJcbiAgICAgICAgICBsZXQgdW5pcUVuZERhdGUgPSB1bmlxKGRhdGFUb0NoZWNrLm1hcCgodTp7IFt4OiBzdHJpbmddOiBhbnk7IH0pID0+IHVbXCJlbmREYXRlXCJdKSk7XHJcbiAgICAgICAgICBpZih1bmlxU3RhcnREYXRlLmxlbmd0aCA+IDEgfHwgdW5pcUVuZERhdGUubGVuZ3RoID4gMSB8fCB0aGlzLmlzVG9vbHRpcEFjdGl2ZShbaXRlbV0pKXtcclxuICAgICAgICAgICAgZW5hYmxlZEhlYWRlcnMucHVzaChpdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgZWxzZXtcclxuICAgICAgICAgIGxldCB2YWx1ZXMgPSBkYXRhVG9DaGVjay5tYXAoKHU6IHsgW3g6IHN0cmluZ106IGFueTsgfSkgPT4gdVtpdGVtXSk7XHJcbiAgICAgICAgLy8gaWYgbGFzdCBhcHBsaWVkIGZpbHRlciBpcyB0aGlzIGhlYWRlciwgcHVzaCBpdCBhbG9zIGFzIGVuYWJsZWRIZWFkZXJcclxuICAgICAgICBsZXQgYWN0aXZlQW5kTGFzdGx5QXBwbGllZEhlYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIGlmKHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuYXBwbGllZEZpbHRlcnNBcnJheS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmFwcGxpZWRGaWx0ZXJzQXJyYXlbdGhpcy5hbm5hRmlsdGVyU2VydmljZS5hcHBsaWVkRmlsdGVyc0FycmF5Lmxlbmd0aC0xXSA9PSBpdGVtKXtcclxuICAgICAgICAgICAgYWN0aXZlQW5kTGFzdGx5QXBwbGllZEhlYWRlciA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgaWYoaGVhZGVyLmZpbHRlciA9PSBcIkNIRUNLQk9YXCIgJiYgKHVuaXEodmFsdWVzKS5maWx0ZXIobiA9PiBuIT1udWxsKS5sZW5ndGggPiAxIHx8IGFjdGl2ZUFuZExhc3RseUFwcGxpZWRIZWFkZXIpKXtcclxuICAgICAgICAgICAgZW5hYmxlZEhlYWRlcnMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZihoZWFkZXIuZmlsdGVyICE9IFwiQ0hFQ0tCT1hcIiAmJiAodW5pcSh2YWx1ZXMpLmZpbHRlcihuID0+IG4hPW51bGwgJiYgbiE9XCItXCIpLmxlbmd0aCA+IDEgfHwgYWN0aXZlQW5kTGFzdGx5QXBwbGllZEhlYWRlcikpe1xyXG4gICAgICAgICAgZW5hYmxlZEhlYWRlcnMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9wZW5Ub29sdGlwKHRvb2x0aXA6IGFueSxoZWFkZXI6IGFueSwgY29sdW1uSGVhZGVyOiBJSGVhZGVySW5mbykge1xyXG4gICAgdGhpcy5jbG9zZVRvb2x0aXAoKTtcclxuICAgIHRoaXMudG9vbHRpcCA9IHRvb2x0aXA7XHJcbiAgICB0aGlzLnRvb2x0aXAub3BlbigpO1xyXG4gICAgLy9jb252ZXJ0IGtleSBpbnRvIHRoZSBoZWFkZXJcclxuICAgIHRoaXMuZmlsdGVyVGFiT2JqZWN0cyA9IGhlYWRlci5tYXAoKGtleTogc3RyaW5nLGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgbGV0IHZhbHVlID0gdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLmhhcyhrZXkpXHJcbiAgICAgICAgPyB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuZ2V0KGtleSlcclxuICAgICAgICA6IGtleTsgLy9jaGFuZ2UgdG8gZGlzcGxheSBuYW1lXHJcbiAgICAgIHJldHVybiBuZXcgcmFkaW9CdXR0b25Nb2RlbChrZXksIHZhbHVlLCBjb2x1bW5IZWFkZXIuaXNTb3J0UmVxdWlyZWRbaW5kZXhdLCBjb2x1bW5IZWFkZXIuaXNGaWx0ZXJSZXF1aXJlZFtpbmRleF0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlRW5hYmxlRWFjaENvbHVtblRvb2x0aXBJY29uKCkge1xyXG4gICAgdGhpcy50YWJsZUhlYWRlcnMuZm9yRWFjaChoZWFkZXIgPT4ge1xyXG4gICAgICBcclxuICAgICAgaGVhZGVyLmhlYWRlckluZm8uZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5zaG93VG9vbHRpcEljb24pIHtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgbGV0IHZhbHVlcyA9IFtdO1xyXG4gICAgICAgICAgaXRlbS5kaXNhYmxlVG9vbHRpcEljb24gPSB0cnVlO1xyXG5cclxuICAgICAgICAgIGl0ZW0uZmlsdGVyU29ydE9iamVjdEtleXMuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgbGV0IGxhdGVzdEZpbHRlcnMgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmFwcGxpZWRGaWx0ZXJzQXJyYXk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZihsYXRlc3RGaWx0ZXJzLmxlbmd0aCA+IDAgJiYgaXRlbS5kaXNhYmxlVG9vbHRpcEljb24gJiYgbGF0ZXN0RmlsdGVyc1tsYXRlc3RGaWx0ZXJzLmxlbmd0aCAtIDFdID09IGtleSl7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmRpc2FibGVUb29sdGlwSWNvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9IFxyXG5cclxuICAgICAgICAgICAgaWYoaXRlbS5kaXNhYmxlVG9vbHRpcEljb24pe1xyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIGlmKGtleSA9PSBcInBlcmlvZFwiKXtcclxuICAgICAgICAgICAgICAgIGxldCB1bmlxU3RhcnREYXRlID0gdW5pcSh0aGlzLnRhYmxlRGF0YS5tYXAoKHU6IHsgW3g6IHN0cmluZ106IGFueTsgfSkgPT4gdVtcInN0YXJ0RGF0ZVwiXSkpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHVuaXFFbmREYXRlID0gdW5pcSh0aGlzLnRhYmxlRGF0YS5tYXAoKHU6IHsgW3g6IHN0cmluZ106IGFueTsgfSkgPT4gdVtcImVuZERhdGVcIl0pKTtcclxuICBcclxuICAgICAgICAgICAgICAgIGl0ZW0uZGlzYWJsZVRvb2x0aXBJY29uID0gKHVuaXFTdGFydERhdGUubGVuZ3RoID4gMSB8fCB1bmlxRW5kRGF0ZS5sZW5ndGggPiAxKSA/IGZhbHNlIDogdHJ1ZTsgXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZXMgPSB0aGlzLnRhYmxlRGF0YS5tYXAoKHU6IHsgW3g6IHN0cmluZ106IGFueTsgfSkgPT4gdVtrZXldKTtcclxuICAgICAgICAgICAgICAgIGlmKCAoaXRlbS5maWx0ZXIgPT0gXCJDSEVDS0JPWFwiICYmIHVuaXEodmFsdWVzKS5maWx0ZXIobiA9PiBuIT1udWxsKS5sZW5ndGggPiAxKSB8fCAoaXRlbS5maWx0ZXIgIT0gXCJDSEVDS0JPWFwiICYmIHVuaXEodmFsdWVzKS5maWx0ZXIobiA9PiBuIT1udWxsICYmIG4hPVwiLVwiKS5sZW5ndGggPiAxKSl7XHJcbiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICBpdGVtLmRpc2FibGVUb29sdGlwSWNvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICBcclxuICB9XHJcblxyXG4gIHNldE1hcmdpbkxlZnRGb3JGaWx0ZXJJY29uKCl7XHJcbiAgICBsZXQgZWxlbWVudEFyciA9IHRoaXMudmlld0NoaWxkVGFibGVIZWFkZXJzLnRvQXJyYXkoKTtcclxuICAgIGVsZW1lbnRBcnIuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBsZXQgY2hpbGREaXZFbGVtZW50cyA9IGl0ZW0ubmF0aXZlRWxlbWVudC5jaGlsZHJlbjtcclxuICAgICAgXHJcbiAgICAgIGlmIChjaGlsZERpdkVsZW1lbnRzLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgbGV0IGZpcnN0UGFyYWdyYXBoV2lkdGggPSBjaGlsZERpdkVsZW1lbnRzWzBdLmNoaWxkcmVuWzBdO1xyXG4gICAgICAgIGxldCBzZWNvbmRQYXJhZ3JhcGhXaWR0aCA9IGNoaWxkRGl2RWxlbWVudHNbMV0uY2hpbGRyZW5bMF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoZmlyc3RQYXJhZ3JhcGhXaWR0aD8ub2Zmc2V0V2lkdGggPiBzZWNvbmRQYXJhZ3JhcGhXaWR0aC5vZmZzZXRXaWR0aCl7XHJcbiAgICAgICAgICBsZXQgZGlmZiA9IGZpcnN0UGFyYWdyYXBoV2lkdGg/Lm9mZnNldFdpZHRoIC0gc2Vjb25kUGFyYWdyYXBoV2lkdGgub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICBpZihjaGlsZERpdkVsZW1lbnRzWzBdLmNoaWxkcmVuLmxlbmd0aCA9PSAyKXtcclxuICAgICAgICAgICAgY2hpbGREaXZFbGVtZW50c1swXS5jaGlsZHJlblsxXS5zdHlsZS5tYXJnaW5MZWZ0ID0gNCArICdweCc7XHJcbiAgICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgICBpZihjaGlsZERpdkVsZW1lbnRzWzFdLmNoaWxkcmVuLmxlbmd0aCA9PSAyKXtcclxuXHJcbiAgICAgICAgICAgIGNoaWxkRGl2RWxlbWVudHNbMV0uY2hpbGRyZW5bMV0uc3R5bGUubWFyZ2luTGVmdCA9IGRpZmYgKyA0ICsgJ3B4JztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgIGxldCBkaWZmID0gc2Vjb25kUGFyYWdyYXBoV2lkdGg/Lm9mZnNldFdpZHRoIC0gZmlyc3RQYXJhZ3JhcGhXaWR0aD8ub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICBpZihjaGlsZERpdkVsZW1lbnRzWzBdLmNoaWxkcmVuLmxlbmd0aCA9PSAyKXtcclxuICAgICAgICAgICAgY2hpbGREaXZFbGVtZW50c1swXS5jaGlsZHJlblsxXS5zdHlsZS5tYXJnaW5MZWZ0ID0gZGlmZiArIDQgKyAncHgnO1xyXG4gICAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgICAgaWYoY2hpbGREaXZFbGVtZW50c1sxXS5jaGlsZHJlbi5sZW5ndGggPT0gMil7XHJcblxyXG4gICAgICAgICAgICBjaGlsZERpdkVsZW1lbnRzWzFdLmNoaWxkcmVuWzFdLnN0eWxlLm1hcmdpbkxlZnQgPSA0ICsgJ3B4JztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGF0YVJvd0NsaWNrZWQocm93RGF0YTogYW55KSB7XHJcbiAgICB0aGlzLnJvd0NsaWNrZWQuZW1pdChyb3dEYXRhKTtcclxuICB9XHJcblxyXG4gIHJhZGlvQnV0dG9uQ2xpY2tlZChkYXRhOiBhbnksIGFjdGlvbjogc3RyaW5nLCBpc0Rpc2FibGVkOiBib29sZWFuKSB7XHJcbiAgICBpZiAoIWlzRGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5yYWRpb0J1dHRvblNlbGVjdGVkLmVtaXQoeyBkYXRhLCBhY3Rpb24gfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBiaW5kVGhlVmFsdWVUb1NlbGxlckdyb3VwVG9vbHRpcChzZWxsZXJHcm91cEhpZXJhcmNoeTogUmF0aW5nU2VsbGVyR3JvdXBIaWVyYXJjaHlbXSwgdG9vbHRpcDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5oaWVyYXJjaHlUb29sdGlwICYmIHRoaXMuaGllcmFyY2h5VG9vbHRpcC5vcGVuKSB7XHJcbiAgICAgIHRoaXMuaGllcmFyY2h5VG9vbHRpcC5jbG9zZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxsZXJHcm91cEhpZXJhcmNoeSA9IHNlbGxlckdyb3VwSGllcmFyY2h5O1xyXG4gICAgdGhpcy5oaWVyYXJjaHlUb29sdGlwID0gdG9vbHRpcDtcclxuICAgIHRoaXMuaGllcmFyY2h5VG9vbHRpcC5vcGVuKCk7XHJcbiAgfVxyXG5cclxuICBpY29uQ2xpY2tlZChyb3dEYXRhOiBhbnksaWNvbkNsYXNzOiBzdHJpbmcpe1xyXG4gICAgXHJcbiAgICBpZihcIm9yZGVySWRcIiBpbiByb3dEYXRhICYmIGljb25DbGFzcy5pbmNsdWRlcyhcIm1kaS1zdGFyXCIpICl7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdGFycmVkT3JkZXJJZCA9IHJvd0RhdGEub3JkZXJJZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmd0SWNvbkNsaWNrZWQuZW1pdCh7ZGF0YTogcm93RGF0YSxpY29uQ2xhc3M6IGljb25DbGFzc30pO1xyXG4gIH1cclxuXHJcbiAgc3ZnSWNvbkNsaWNrZWQoZGF0YTogR3RDb2x1bW5JY29uRW1pdHRlZERhdGEpe1xyXG4gICAgdGhpcy5ndFNWR0ljb25DbGlja2VkLmVtaXQoZGF0YSk7XHJcbiAgfVxyXG5cclxuICB0ZXh0QWN0aW9uQ2xpY2tlZChyb3dEYXRhOiBhbnksaWQ6IGFueSwgY29sdW1uSGVhZGVyOiBJSGVhZGVySW5mbyl7XHJcbiAgICB0aGlzLmd0VGV4dEFjdGlvbkNsaWNrZWQuZW1pdCh7ZGF0YTpyb3dEYXRhLCBpZDogaWQsIGNvbHVtbkhlYWRlcjogY29sdW1uSGVhZGVyLGlzSWNvbkNsaWNrZWQ6ZmFsc2V9KTtcclxuICB9XHJcblxyXG4gIGljb25DbGlja2VkT25TdHJpbmdJY29uQWN0aW9uVHlwZShyb3dEYXRhOiBhbnksIGlkOiBhbnksIGNvbHVtbkhlYWRlcjogSUhlYWRlckluZm8pe1xyXG4gICAgdGhpcy5ndFRleHRBY3Rpb25DbGlja2VkLmVtaXQoe2RhdGE6cm93RGF0YSwgaWQ6IGlkLCBjb2x1bW5IZWFkZXI6IGNvbHVtbkhlYWRlcixpc0ljb25DbGlja2VkOnRydWV9KTtcclxuICB9XHJcblxyXG4gIGlubmVySFRNTENlbGxDbGlja2VkKGV2ZW50OiBhbnksIHJvd0RhdGE6IGFueSl7XHJcbiAgICB0aGlzLmd0SW5uZXJIVE1MQ2xpY2tlZC5lbWl0KHtldmVudCwgcm93RGF0YX0pO1xyXG4gIH1cclxuXHJcbiAgdmlld0RldGFpbHNDbGlja2VkKHJvd0RhdGE6IGFueSl7XHJcbiAgICB0aGlzLmd0Vmlld0RldGFpbENsaWNrZWQuZW1pdCh7ZGF0YTpyb3dEYXRhfSk7XHJcbiAgfVxyXG5cclxuICAgIHNldEFjdGl2ZVN0YXRlT2JqZWN0KCl7XHJcbiAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlID0gIXRoaXMuYW5uYUZpbHRlclNlcnZpY2UucmVzZXRGaWx0ZXJTb3J0QWN0aXZlU3RhdHVzIHx8IHRoaXMubXVsdGlwbGVUYWJsZXNQcmVzZW50XHJcbiAgICAgID8gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmVcclxuICAgICAgOiB7fTtcclxuICAgICAgdGhpcy50YWJsZUhlYWRlcnMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLmhlYWRlckluZm8uZm9yRWFjaChoZWFkZXIgPT4ge1xyXG4gICAgICAgICAgICBpZihoZWFkZXIuc2hvd1Rvb2x0aXBJY29uKXtcclxuICAgICAgICAgICAgICBsZXQga2V5ID0gaGVhZGVyLmZpbHRlclNvcnRPYmplY3RLZXlzLmpvaW4oJywnKTtcclxuICAgICAgICAgICAgICBoZWFkZXIuam9pbmVkRmlsdGVyU29ydE9iamVjdEtleXMgPSBrZXk7XHJcbiAgICAgICAgICAgICAgLy8gQU5OQS00MTEzIGZpeFxyXG4gICAgICAgICAgICAgIGlmKHRoaXMuYW5uYUZpbHRlclNlcnZpY2UucmVzZXRGaWx0ZXJTb3J0QWN0aXZlU3RhdHVzKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlW2tleV0gPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5yZXNldEZpbHRlclNvcnRBY3RpdmVTdGF0dXMgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldElzRGlmZmVyZW5jZSh2YWx1ZTogYm9vbGVhbil7XHJcbiAgICAgIHRoaXMuaXNEaWZmZXJlbmNlTGVzc1RoYW4yNVBlcmNlbnQgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXNldEluZGV4KCl7XHJcbiAgICAgIHRoaXMuc3RhcnQgPSAwO1xyXG4gICAgICB0aGlzLmVuZCA9IHRoaXMubGltaXQgKyB0aGlzLnN0YXJ0O1xyXG4gICAgfVxyXG5cclxuICAgIG9uVGFibGVDb250YWluZXJTY3JvbGwoZTogYW55KSB7XHJcbiAgICAgICAgY29uc3QgdGFibGVWaWV3SGVpZ2h0ID0gZS50YXJnZXQub2Zmc2V0SGVpZ2h0OyAvLyB2aWV3cG9ydFxyXG4gICAgICAgIGNvbnN0IHRhYmxlU2Nyb2xsSGVpZ2h0ID0gZS50YXJnZXQuc2Nyb2xsSGVpZ2h0OyAvLyBsZW5ndGggb2YgYWxsIHRhYmxlXHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsTG9jYXRpb24gPSBlLnRhcmdldC5zY3JvbGxUb3A7IC8vIGhvdyBmYXIgdXNlciBzY3JvbGxlZFxyXG5cclxuICAgICAgICB0aGlzLnJlbW92ZVRvb2x0aXBPblNjcm9sbCgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIElmIHRoZSB1c2VyIGhhcyBzY3JvbGxlZCB3aXRoaW4gMTUwcHggb2YgdGhlIGJvdHRvbSwgYWRkIG1vcmUgZGF0YVxyXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IDE1MDtcclxuICAgICAgICBjb25zdCBsaW1pdCA9IHRhYmxlU2Nyb2xsSGVpZ2h0IC0gdGFibGVWaWV3SGVpZ2h0IC0gYnVmZmVyO1xyXG4gICAgICAgIGlmIChzY3JvbGxMb2NhdGlvbiA+IGxpbWl0KSB7XHJcbiAgICAgICAgICAgIGxldCBkYXRhID0gdGhpcy5nZXRUYWJsZURhdGEodGhpcy5zdGFydCwgdGhpcy5lbmQpO1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVkRGF0YSA9IHRoaXMucmVuZGVyZWREYXRhLmNvbmNhdChkYXRhKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVJbmRleCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRhYmxlQ29udGFpbmVyU2Nyb2xsZWQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGFibGVEYXRhKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVEYXRhLmZpbHRlcigodmFsdWUsIGluZGV4KSA9PiBpbmRleCA+PSBzdGFydCAmJiBpbmRleCA8IGVuZCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlSW5kZXgoKSB7XHJcbiAgICAgICAgdGhpcy5zdGFydCA9IHRoaXMuZW5kO1xyXG4gICAgICAgIHRoaXMuZW5kID0gdGhpcy5saW1pdCArIHRoaXMuc3RhcnQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SW5pdGlhbFJvd3NGb3JUYWJsZSgpe1xyXG4gICAgICB0aGlzLnJlc2V0SW5kZXgoKTtcclxuICAgICAgdGhpcy5yZW5kZXJlZERhdGEgPSB0aGlzLmdldFRhYmxlRGF0YSh0aGlzLnN0YXJ0LHRoaXMuZW5kKTtcclxuICAgICAgdGhpcy51cGRhdGVJbmRleCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNwb3REZXRhaWxzRG93bmxvYWRDbGlja2VkKHBhcmVudENoaWxkT3JUb3RhbFJvdzogXCJEQVRBUk9XXCIgfCBcIlRPVEFMUk9XXCIsIHJvd2RhdGE/OiBhbnkgKSB7XHJcbiAgICAgIGlmKHJvd2RhdGEpe1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbnZlbnRvcnlJZEZvckRvd25sb2FkID0gcm93ZGF0YS5pbnZlbnRvcnlDb2RlSWQ7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERlbW9ncmFwaGljRm9yRG93bmxvYWQgPSByb3dkYXRhLmRlbW9ncmFwaGljO1xyXG4gICAgICB9IGVsc2V7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEludmVudG9yeUlkRm9yRG93bmxvYWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREZW1vZ3JhcGhpY0ZvckRvd25sb2FkID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93VHlwZUZvckRvd25sb2FkID0gcGFyZW50Q2hpbGRPclRvdGFsUm93O1xyXG4gICAgICB0aGlzLmRvd25sb2FkU3BvdERldGFpbHMuZW1pdCh7XHJcbiAgICAgICAgcGFyZW50Q2hpbGRPclRvdGFsUm93OiBwYXJlbnRDaGlsZE9yVG90YWxSb3csXHJcbiAgICAgICAgaW52ZW50b3J5Q29kZUlkOiB0aGlzLnNlbGVjdGVkSW52ZW50b3J5SWRGb3JEb3dubG9hZCxcclxuICAgICAgICBkZW1vZ3JhcGhpYzogdGhpcy5zZWxlY3RlZERlbW9ncmFwaGljRm9yRG93bmxvYWR9KVxyXG4gIH1cclxuXHJcbiAgdGFibGVDb250YWluZXJTY3JvbGxlZChldmVudDogYW55KXtcclxuICAgICAgdGhpcy5pc1Njcm9sbGVkTGVmdCA9IGV2ZW50LnRhcmdldC5zY3JvbGxMZWZ0ID4gMDtcclxuICAgICAgdGhpcy5yZW1vdmVUb29sdGlwT25TY3JvbGwoKTtcclxuICAgIH1cclxuICBcclxuICBtb3VzZUVudGVyT25TdHJpbmdUZXh0QWN0aW9uVHlwZShyb3dEYXRhOiBhbnksIHRvb2x0aXBLZXk6IHN0cmluZyApe1xyXG4gICAgdGhpcy50ZXh0QWN0aW9uVG9vbHRpcCA9IHJvd0RhdGFbdG9vbHRpcEtleV07IFxyXG4gICAgdGhpcy5ub3RpZmljYXRpb25JY29uSG92ZXIuZW1pdCh7cm93RGF0YTpyb3dEYXRhLCB0eXBlOiBcIm9uLWVudGVyXCJ9KVxyXG4gIH1cclxuXHJcbiAgbW91c2VFbnRlck9uU3RyaW5nVGV4dEFjdGlvblR5cGVDb250YWluaW5nVGFibGUocm93RGF0YTogYW55LCB0b29sdGlwS2V5OiBzdHJpbmcgKXtcclxuICAgIHRoaXMudG9vbHRpcENvbnRhaW5pbmdUYWJsZSA9IHJvd0RhdGFbdG9vbHRpcEtleV07XHJcbiAgfVxyXG5cclxuICBtb3VzZUxlYXZlVGV4dEFjdGlvblR5cGUocm93RGF0YTogYW55KXtcclxuICAgIHRoaXMubm90aWZpY2F0aW9uSWNvbkhvdmVyTGVhdmUuZW1pdCh7cm93RGF0YTpyb3dEYXRhLCB0eXBlOiBcIm9uLWxlYXZlXCJ9KSAgXHJcbiAgfVxyXG5cclxuICBtb3VzZUVudGVyT25UZXh0QWN0aW9uVHlwZShyb3dEYXRhOiBhbnksIHRvb2x0aXBLZXk6IHN0cmluZyApe1xyXG4gICAgdGhpcy50ZXh0QWN0aW9uVG9vbHRpcCA9IHJvd0RhdGFbdG9vbHRpcEtleV07XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrYWJsZURhdGFDbGlja2VkKFJvd2RhdGE6IGFueSwgaWQ6IG51bWJlcil7XHJcbiAgICAgIHRoaXMuY2xpY2thYmxlRGF0YUNsaWNrZWQuZW1pdCh7ZGF0YTogUm93ZGF0YSwgaWQ6IGlkfSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVUb29sdGlwT25TY3JvbGwoKXtcclxuICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInJlbWFya3MtaW5mby10b29sdGlwXCIpO1xyXG4gICAgLy8gY29uc3QgdG9vbHRpcEVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInRvb2x0aXBcIik7XHJcbiAgICBjb25zdCBndFRvb2x0aXAgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwicmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiKTtcclxuICAgIGNvbnN0IHRvb2x0aXBFbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJ0b29sdGlwXCIpO1xyXG5cclxuICAgIHdoaWxlIChlbGVtZW50cyAmJiBlbGVtZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGVsZW1lbnRzWzBdLnJlbW92ZSgpO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKHRvb2x0aXBFbGVtZW50cyAmJiB0b29sdGlwRWxlbWVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0b29sdGlwRWxlbWVudHNbMF0ucmVtb3ZlKCk7XHJcbiAgICAgIHRoaXMudG9vbHRpcCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB3aGlsZSAoZ3RUb29sdGlwICYmIGd0VG9vbHRpcC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGd0VG9vbHRpcFswXS5yZW1vdmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGljb25DbGlja2VkSW5Ub3RhbFJvdyhjb2xOYW1lOiBzdHJpbmcpe1xyXG4gICAgdGhpcy50b3RhbFJvd0ljb25DbGlja2VkLmVtaXQoY29sTmFtZSk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VzTWFkZUluRWRpdGFibGVJbnB1dEJveChldmVudDogYW55LCBlZGl0ZWRPYmplY3Q6IGFueSwgcGFzdGVFdmVudDogYm9vbGVhbikge1xyXG4gICAgbGV0IGVudGVyZWRWYWx1ZSA9IHBhc3RlRXZlbnQgPyBldmVudC5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKSA6IGV2ZW50LmtleTtcclxuICAgIGlmIChldmVudC5rZXlDb2RlICE9IDggJiYgIShldmVudC5rZXlDb2RlID49IDM3ICYmIGV2ZW50LmtleUNvZGUgPD0gNDApICYmXHJcbiAgICAgICghZWRpdGVkT2JqZWN0Py5hbGxvd1NwZWNpYWxDaGFyYWN0ZXJzICYmICEoL1tgMC05Ll0vLnRlc3QoZW50ZXJlZFZhbHVlKSkgfHxcclxuICAgICAgICAoZWRpdGVkT2JqZWN0LmlzRGVjaW1hbFBvaW50Q2hlY2tSZXF1aXJlZCAmJiBlZGl0ZWRPYmplY3QudmFsdWUuaW5kZXhPZihcIi5cIikgPj0gMFxyXG4gICAgICAgICAgJiYgKChlZGl0ZWRPYmplY3QudmFsdWUubGVuZ3RoIC0gKChlZGl0ZWRPYmplY3QudmFsdWUuaW5kZXhPZihcIi5cIikpICsgMSkpID49IGVkaXRlZE9iamVjdC5tYXhEZWNpbWFsUG9pbnRzQWxsb3dlZCkpKSkge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZWRpdGFibGVJbnB1dFZhbHVlQ2hhbmdlZCggdmFsdWU6IGFueSwgcm93OiBhbnksIGtleUVkaXRlZDogc3RyaW5nKXtcclxuICAgIHRoaXMuZWRpdGFibGVJbnB1dEVkaXRlZC5lbWl0KHtyb3c6cm93LCB2YWx1ZTogdmFsdWUsIGtleUVkaXRlZDoga2V5RWRpdGVkfSk7XHJcbiAgfVxyXG5cclxuICByYWRpb0J1dHRvbkljb25DbGlja2VkKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5yYWRpb0J1dHRvbk1lc3NhZ2VJY29uQ2xpY2tlZC5lbWl0KGRhdGEpXHJcbiAgfVxyXG5cclxuICBmaWx0ZXJBcHBsaWVkKHRhYmxlRGF0YTogYW55W10pe1xyXG4gICAgdGhpcy50YWJsZURhdGEgPSB0YWJsZURhdGE7XHJcbiAgICB0aGlzLnNldEluaXRpYWxSb3dzRm9yVGFibGUoKTtcclxuICAgIHRoaXMuZGlzYWJsZUVuYWJsZUVhY2hDb2x1bW5Ub29sdGlwSWNvbigpO1xyXG4gICAgdGhpcy5maWx0ZXJBcHBsaWVkVG9UYWJsZS5lbWl0KHRhYmxlRGF0YSk7XHJcbiAgICB0aGlzLmNsb3NlVG9vbHRpcCgpO1xyXG4gIH1cclxuXHJcbiAgc29ydGluZ0FwcGxpZWQodGFibGVEYXRhOiBhbnlbXSl7XHJcbiAgICB0aGlzLnRhYmxlRGF0YSA9IHRhYmxlRGF0YTtcclxuICAgIHRoaXMuc2V0SW5pdGlhbFJvd3NGb3JUYWJsZSgpO1xyXG4gICAgdGhpcy5kaXNhYmxlRW5hYmxlRWFjaENvbHVtblRvb2x0aXBJY29uKCk7XHJcbiAgICB0aGlzLnNvcnRpbmdBcHBsaWVkVG9UYWJsZS5lbWl0KHRhYmxlRGF0YSk7XHJcbiAgICB0aGlzLmNsb3NlVG9vbHRpcCgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyIHt7Z3RHZW5lcmFsQ29uZmlnPy50YWJsZU91dGVyQ29udGFpbmVyTmFtZX19IHt7dGFibGVCb3R0b21Cb3JkZXJDbGFzc319XCJcclxuICAgIFtuZ0NsYXNzXT1cInsgJ3Njcm9sbC1sZWZ0LXNoYWRvdy1lZmZlY3QnOiBpc1Njcm9sbGVkTGVmdCwgJ2NsaWNrYWJsZS1yb3cnOiBjbGlja2FibGVSb3csICduby1kYXRhLXRhYmxlJzogKGlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQgfCBhc3luYykgfVwiXHJcbiAgICAoc2Nyb2xsKT1cIm9uVGFibGVDb250YWluZXJTY3JvbGwoJGV2ZW50KVwiPlxyXG4gICAgPGRpdiBbY2xhc3NdPVwiZ3RHZW5lcmFsQ29uZmlnLnRhYmxlQ29udGFpbmVyTmFtZVwiIGNsYXNzPVwiaG9yaXpvbnRhbC1zY3JvbGwtZm9yLXRhYmxlLWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgaGVpZ2h0OlxyXG4gICAgICAgICAgICAgICAgdGFibGVEYXRhLmxlbmd0aCA8IG1heGltdW1Sb3dzV2hpY2hDYW5CZVJlbmRlcmVkV2l0aG91dFNjcm9sbFxyXG4gICAgICAgICAgICAgICAgICAgID8gJ2NhbGMoJyArXHJcbiAgICAgICAgICAgICAgICAgICAgKChndERpbWVuc2lvbi5yb3dIZWlnaHQpICogdGFibGVEYXRhLmxlbmd0aCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICghdGFibGVEYXRhLmxlbmd0aCB8fCAhZ3RHZW5lcmFsQ29uZmlnLnRvdGFsUm93XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGd0RGltZW5zaW9uLmhlYWRlckhlaWdodFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBndERpbWVuc2lvbi5oZWFkZXJIZWlnaHQgKyBndERpbWVuc2lvbi5yb3dIZWlnaHQpKSArXHJcbiAgICAgICAgICAgICAgICAgICAgJ3B4KSdcclxuICAgICAgICAgICAgICAgICAgICA6IGd0RGltZW5zaW9uLnRhYmxlSGVpZ2h0XHJcbiAgICAgICAgfVwiPlxyXG4gICAgICAgIDx0YWJsZSBjbGFzcz1cImd0XCIgW25nQ2xhc3NdPVwidGFibGVDbGFzc1wiIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJyZW5kZXJlZERhdGFcIj5cclxuICAgICAgICAgICAgPHRyIGNsYXNzPVwiaGVhZGVyLXJvd1wiIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJ0YWJsZUNvbHVtbnM7IHN0aWNreTogdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImd0RGltZW5zaW9uLmhlYWRlckhlaWdodFwiPjwvdHI+XHJcbiAgICAgICAgICAgIDx0ciBjbGFzcz1cInRvdGFsLXJvd1wiIG1hdC1oZWFkZXItcm93IFtzdHlsZS5oZWlnaHQucHhdPVwiZ3REaW1lbnNpb24ucm93SGVpZ2h0XCJcclxuICAgICAgICAgICAgICAgICptYXRIZWFkZXJSb3dEZWY9XCJ0b3RhbFJvd0NvbHVtbnM7IHN0aWNreTogdHJ1ZVwiIFtjbGFzcy5oaWRkZW5dPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd1NrZWxldG9uTG9hZGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICghc2hvd1NrZWxldG9uTG9hZGluZyAmJiAhdGFibGVEYXRhLmxlbmd0aCApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKGlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQgfCBhc3luYykgfHwgXHJcbiAgICAgICAgICAgICAgICAgICAgKCFzaG93U2tlbGV0b25Mb2FkaW5nICYmICFndEdlbmVyYWxDb25maWcudG90YWxSb3cpXHJcbiAgICAgICAgICAgICAgICBcIj48L3RyPlxyXG4gICAgICAgICAgICA8dHIgW2NsYXNzXT1cInJvd0RhdGEuZ3RDbGFzc1wiIFtuZ0NsYXNzXT1cInsnbm8tYm9yZGVyLXRyJzogKGlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQgfCBhc3luYyl9XCIgbWF0LXJvd1xyXG4gICAgICAgICAgICAgICAgKm1hdFJvd0RlZj1cImxldCByb3dEYXRhOyBjb2x1bW5zOiB0YWJsZUNvbHVtbnNcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cImd0RGltZW5zaW9uLnJvd0hlaWdodFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGF0YVJvd0NsaWNrZWQocm93RGF0YSlcIj48L3RyPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBUT1RBTCBST1cgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4uY29sTmFtZVwiICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdG90YWxSb3dJbmZvOyB0cmFja0J5OiB0cmFja0J5Rm5cIj5cclxuICAgICAgICAgICAgICAgIDx0ZCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW4uY29sc3BhblwiIGNsYXNzPVwie3tjb2x1bW4uY2xhc3N9fVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uWydpc0FjdGlvbkNvbHVtbiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhICpuZ0Zvcj1cImxldCBkYXRhIG9mIGNvbHVtbi5hY3Rpb25EYXRhXCIgW2NsYXNzXT1cImRhdGEuY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2thYmxlRGF0YUNsaWNrZWQoe30sIGRhdGEuaWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uWydpc0ljb25Db2x1bW4nXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInt7Y29sdW1uPy5pY29uRGF0YT8uY2xhc3N9fVwiIChjbGljayk9XCJpY29uQ2xpY2tlZEluVG90YWxSb3coY29sdW1uPy5jb2xOYW1lKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uWydpc0FjdGlvbkNvbHVtbiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmcgY2xhc3M9XCJ1cHBlci1sYWJlbFwiPnt7IGNvbHVtbi5kYXRhIH19PC9zdHJvbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ubG93ZXJEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi5jb2xOYW1lID09ICd0b3RhbC1wb3RlbnRpYWwtYm9va2VkLXVuaXQnICYmIGd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gJ1JBVElORyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBjb2x1bW5Mb3dlckRhdGFcIiBjbGFzcz1cImNsaWNrYWJsZS1kYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3BvdERldGFpbHNEb3dubG9hZENsaWNrZWQoJ1RPVEFMUk9XJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2Rpc2FibGVkLWNsaWNrYWJsZS1kYXRhJzogZG93bmxvYWRJblByb2dyZXNzIH1cIj57eyBjb2x1bW4ubG93ZXJEYXRhIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBzcG90LWRldGFpbHMtZG93bmxvYWQtaWNvbnNcIj5nZXRfYXBwPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkb3dubG9hZEluUHJvZ3Jlc3MgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzZWxlY3RlZFJvd1R5cGVGb3JEb3dubG9hZCA9PSAnVE9UQUxST1cnIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNpcmN1bGFyUHJvZ3Jlc3NCYXJcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY29sdW1uTG93ZXJEYXRhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibG93ZXItbGFiZWxcIj57eyBjb2x1bW4ubG93ZXJEYXRhIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4udG9vbHRpcE1lc3NhZ2UgJiYgZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCAhPSAnTFVSX1ZJT0xBVElPTlMnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInt7Y29sdW1uLnRvb2x0aXBJY29uQ2xhc3N9fVwiIGNvbnRhaW5lcj1cImJvZHlcIiBbbmdiVG9vbHRpcF09XCJjb2x1bW4udG9vbHRpcE1lc3NhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImd0LXRvdGFsLXJvdy10b29sdGlwXCIgcGxhY2VtZW50PVwiYm90dG9tXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gJ0xVUl9WSU9MQVRJT05TJyAmJiBjb2x1bW4udG9vbHRpcE1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWkgbWRpLWluZm8tb3V0bGluZSBpbmZvLWxhYmVsXCIgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwibHVyVmlvbGF0aW9uVG90YWxSb3dUb29sVGlwXCIgdG9vbHRpcENsYXNzPVwiZ3QtdG90YWwtcm93LXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8IS0tIE1BSU4gUk9XIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uRGVmLmhlYWRlckluZm9bMF0ub2JqZWN0S2V5XCJcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW5EZWYgb2YgdGFibGVIZWFkZXJzOyAgdHJhY2tCeTogdHJhY2tCeUZuXCI+XHJcbiAgICAgICAgICAgICAgICA8dGggI3RhYmxlSGVhZGVyIG5vd3JhcCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgW3N0eWxlLndpZHRoXT1cImNvbHVtbkRlZi53aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXgtMFwiICpuZ0Zvcj1cImxldCBoZWFkZXIgb2YgY29sdW1uRGVmLmhlYWRlckluZm87IGxldCBqID0gaW5kZXg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiaGVhZGVyLnR5cGVPZkhlYWRlckRhdGEgPT09ICdTVFJJTkcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3VwcGVyLWxhYmVsJzogaiA9PT0gMCwgJ2xvd2VyLWxhYmVsJzogaiA9PT0gMSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNrZWxldG9uLWxvYWRlciAqbmdJZj1cImhlYWRlci5uYW1lID09IG51bGxcIiBjb3VudD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGVtZV09XCJ7IGhlaWdodDogJzEwcHgnLCBkaXNwbGF5OiAnYmxvY2snLCB3aWR0aDogY29sdW1uRGVmLndpZHRoLCAnbWF4LXdpZHRoJzonY2FsYygxMDAlIC0gMjBweCknIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNrZWxldG9uLWxvYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIubmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGhlYWRlci5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ2ltcHNJbmZvVG9vbHRpcCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3toZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydmbG9hdCc6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbn1cIiAjdD1cIm5nYlRvb2x0aXBcIiBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJpbXBzSW5mb1Rvb2x0aXBcIiBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdzcG90c0NvbHVtbkVxdWl2YWxpemF0aW9uTWVzc2FnZVRvb2x0aXAnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7aGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnZmxvYXQnOiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb259XCIgY29udGFpbmVyPVwiYm9keVwiICN0PVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiIFtuZ2JUb29sdGlwXT1cInNwb3RzQ29sdW1uRXF1aXZhbGl6YXRpb25NZXNzYWdlVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAndW5kZXJEZWxpdmVyeVRvb2x0aXAnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7aGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnZmxvYXQnOiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb259XCIgY29udGFpbmVyPVwiYm9keVwiICN0PVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiIFtuZ2JUb29sdGlwXT1cInVuZGVyRGVsaXZlcnlUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdvdmVyRGVsaXZlcnlUb29sdGlwJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e2hlYWRlclsndG9vbHRpcCddLmljb25DbGFzc319XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2Zsb2F0JzogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9ufVwiIGNvbnRhaW5lcj1cImJvZHlcIiAjdD1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIiBbbmdiVG9vbHRpcF09XCJvdmVyRGVsaXZlcnlUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdyYXRpbmdJbmZvVG9vbHRpcCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3toZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydmbG9hdCc6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbn1cIiAjdD1cIm5nYlRvb2x0aXBcIiBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJyYXRpbmdJbmZvVG9vbHRpcFwiIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ3JhdGVJbmZvVG9vbHRpcCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3toZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydmbG9hdCc6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbn1cIiAjdD1cIm5nYlRvb2x0aXBcIiBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJyYXRlSW5mb1Rvb2x0aXBcIiBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdvbmdvaW5nUmV2Qm9va2VkQ29sdW1uVG9vbHRpcCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3toZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydmbG9hdCc6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbn1cIiAjdD1cIm5nYlRvb2x0aXBcIiBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJvbmdvaW5nUmV2Qm9va2VkQ29sdW1uVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAnY29tcGxldGVkUmV2Qm9va2VkQ29sdW1uVG9vbHRpcCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3toZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydmbG9hdCc6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbn1cIiAjdD1cIm5nYlRvb2x0aXBcIiBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJjb21wbGV0ZWRSZXZCb29rZWRDb2x1bW5Ub29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdhdmdCb29rZWRSYXRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e2hlYWRlclsndG9vbHRpcCddLmljb25DbGFzc319XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2Zsb2F0JzogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9ufVwiICN0PVwibmdiVG9vbHRpcFwiIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImF2Z0Jvb2tlZFJhdGVcIiBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdhdmdCb29rZWRSdGcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7aGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnZmxvYXQnOiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb259XCIgI3Q9XCJuZ2JUb29sdGlwXCIgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiYXZnQm9va2VkUnRnXCIgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAnYXZnQm9va2VkSW1wcydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3toZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydmbG9hdCc6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbn1cIiAjdD1cIm5nYlRvb2x0aXBcIiBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJhdmdCb29rZWRJbXBzXCIgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ2F1dG9tYXRpb25Ub29sdGlwJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e2hlYWRlclsndG9vbHRpcCddLmljb25DbGFzc319XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2Zsb2F0JzogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9ufVwiICN0PVwibmdiVG9vbHRpcFwiIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImF1dG9tYXRpb25Ub29sdGlwXCIgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ3JlYmF0ZUltcGFjdCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3toZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydmbG9hdCc6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbn1cIiAjdD1cIm5nYlRvb2x0aXBcIiBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJyZWJhdGVJbXBhY3RcIiBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLnR5cGVPZkhlYWRlckRhdGEgPT09ICdDSEVDS0JPWCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ3RHZW5lcmFsQ29uZmlnLmlzSGVhZGVyQ2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBjdXN0b20tY29sdW1uLWNoZWNrYm94LWNoZWNrZWRcIiAoY2xpY2spPVwic2VsZWN0VW5zZWxlY3RBbGxSb3dzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19ib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWd0R2VuZXJhbENvbmZpZy5pc0hlYWRlckNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgY3VzdG9tLWNvbHVtbi1jaGVja2JveC11bmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2Rpc2FibGUtY2hlY2tib3gnOiBndEdlbmVyYWxDb25maWcuZGlzYWJsZUhlYWRlckNoZWNrYm94IH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RVbnNlbGVjdEFsbFJvd3MoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2JveF9vdXRsaW5lX2JsYW5rXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImd0R2VuZXJhbENvbmZpZy5zaG93QWxsQ29sdW1uRmlsdGVyXCIgY2xhc3M9XCJzb3J0LWZpbHRlci1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIuc2hvd1Rvb2x0aXBJY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBY3RpdmUgdG9vbHRpcCBGdW5jdGlvbmFsaXR5IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIuZmlsdGVyID09PSAnQ0hFQ0tCT1gnXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1kaSBtZGktZmlsdGVyLXZhcmlhbnRcIiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmUgJiYgYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlW2hlYWRlci5qb2luZWRGaWx0ZXJTb3J0T2JqZWN0S2V5c10sICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBoZWFkZXIuZGlzYWJsZVRvb2x0aXBJY29uIHx8IHNob3dTa2VsZXRvbkxvYWRpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIiBbbmdiVG9vbHRpcF09XCJmaWx0ZXJUb29sdGlwXCIgcGxhY2VtZW50PVwie3tmaWx0ZXJBbGlnbm1lbnR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCIgdG9vbHRpcENsYXNzPVwibm9uLWVkaXQtY2hlY2tib3gtdG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiIHRyaWdnZXJzPVwibWFudWFsXCIgI3Q9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJiaW5kVGhlVmFsdWVUb1Rvb2xUaXAodCwgaGVhZGVyKVwiIChoaWRkZW4pPVwiY2xvc2VUb29sdGlwKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIuZmlsdGVyID09PSAnU0xJREVSJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1kaSBtZGktZmlsdGVyLXZhcmlhbnRcIiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmUgJiYgYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlW2hlYWRlci5qb2luZWRGaWx0ZXJTb3J0T2JqZWN0S2V5c10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGhlYWRlci5kaXNhYmxlVG9vbHRpcEljb24gfHwgc2hvd1NrZWxldG9uTG9hZGluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiIFtuZ2JUb29sdGlwXT1cInNsaWRlclRvb2xUaXBcIiBwbGFjZW1lbnQ9XCJib3R0b20gbGVmdC10b3BcIiBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cIm5vbi1lZGl0LXNsaWRlci10b29sdGlwXCIgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIiB0cmlnZ2Vycz1cIm1hbnVhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdDE9XCJuZ2JUb29sdGlwXCIgKGNsaWNrKT1cImJpbmRUaGVWYWx1ZVRvVG9vbFRpcCh0MSwgaGVhZGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlkZGVuKT1cImNsb3NlVG9vbHRpcCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLmZpbHRlciA9PT0gJ0RBVEUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWRpIG1kaS1maWx0ZXItdmFyaWFudFwiIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IGFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZSAmJiBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmVbaGVhZGVyLmpvaW5lZEZpbHRlclNvcnRPYmplY3RLZXlzXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaGVhZGVyLmRpc2FibGVUb29sdGlwSWNvbiB8fCBzaG93U2tlbGV0b25Mb2FkaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgW25nYlRvb2x0aXBdPVwiZGF0ZVBpY2tlclRvb2x0aXBcIiBwbGFjZW1lbnQ9XCJib3R0b20gYXV0b1wiIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwibm9uLWVkaXQtZGF0ZXBpY2tlci10b29sdGlwXCIgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJtYW51YWxcIiAjdDI9XCJuZ2JUb29sdGlwXCIgKGNsaWNrKT1cImJpbmRUaGVWYWx1ZVRvVG9vbFRpcCh0MiwgaGVhZGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlkZGVuKT1cImNsb3NlVG9vbHRpcCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLmZpbHRlciA9PT0gJ1dFRUsnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWRpIG1kaS1maWx0ZXItdmFyaWFudFwiIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IGFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZSAmJiBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmVbaGVhZGVyLmpvaW5lZEZpbHRlclNvcnRPYmplY3RLZXlzXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaGVhZGVyLmRpc2FibGVUb29sdGlwSWNvbiB8fCBzaG93U2tlbGV0b25Mb2FkaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgW25nYlRvb2x0aXBdPVwid2Vla1BpY2tlclRvb2xUaXBcIiBwbGFjZW1lbnQ9XCJib3R0b20gbGVmdC10b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiIFthdXRvQ2xvc2VdPVwiJ291dHNpZGUnXCIgdHJpZ2dlcnM9XCJtYW51YWxcIiAjdDM9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJiaW5kVGhlVmFsdWVUb1Rvb2xUaXAodDMsIGhlYWRlcilcIiAoaGlkZGVuKT1cImNsb3NlVG9vbHRpcCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLmZpbHRlciA9PT0gJ1RJTUUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWRpIG1kaS1maWx0ZXItdmFyaWFudFwiIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IGFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZSAmJiBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmVbaGVhZGVyLmpvaW5lZEZpbHRlclNvcnRPYmplY3RLZXlzXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaGVhZGVyLmRpc2FibGVUb29sdGlwSWNvbiB8fCBzaG93U2tlbGV0b25Mb2FkaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgW25nYlRvb2x0aXBdPVwidGltZUZpbHRlclRvb2xUaXBcIiBwbGFjZW1lbnQ9XCJib3R0b20gbGVmdC10b3AgYXV0b1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCIgdG9vbHRpcENsYXNzPVwibm9uLWVkaXQtdGltZS10b29sdGlwXCIgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJtYW51YWxcIiAjdDQ9XCJuZ2JUb29sdGlwXCIgKGNsaWNrKT1cImJpbmRUaGVWYWx1ZVRvVG9vbFRpcCh0NCwgaGVhZGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlkZGVuKT1cImNsb3NlVG9vbHRpcCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFoZWFkZXIuc2hvd1Rvb2x0aXBJY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJuby1maWx0ZXItc3BhY2VcIj48L3NwYW4+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAnbHVyVmlvbGF0aW9uSW5mb1Rvb2x0aXAnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7aGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnZmxvYXQnOiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb259XCIgI3Q9XCJuZ2JUb29sdGlwXCIgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwibHVyVmlvbGF0aW9uSW5mb1Rvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGg+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbWF0Q2VsbERlZj1cImxldCBST1dfREFUQVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCBbc3R5bGUuYmFja2dyb3VuZF09XCJST1dfREFUQS5iYWNrZ3JvdW5kQ29sb3JcIiBbc3R5bGUuYm9yZGVyXT1cIlJPV19EQVRBLmJvcmRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tST1dfREFUQS5yb3dDbGFzc319XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIucm93c3Bhbl09XCJST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1swXS5vYmplY3RLZXkgKyAnUm93c3BhbiddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaGlkZVNvbWVUZHMgfHwoIGhpZGVTb21lVGRzICYmICFST1dfREFUQVsnaGlkZScgKyBjb2x1bW5EZWYuaGVhZGVySW5mb1swXS5vYmplY3RLZXkgKyAnVGQnXSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1za2VsZXRvbi1sb2FkZXIgKm5nSWY9XCJzaG93U2tlbGV0b25Mb2FkaW5nXCIgY291bnQ9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGVtZV09XCJ7IGhlaWdodDogJzEwcHgnLCBkaXNwbGF5OiAnYmxvY2snIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzaG93U2tlbGV0b25Mb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFibGVEYXRhLmxlbmd0aCA+IDAgJiYgIShpc05vRGF0YVRvRGlzcGxheVN1YmplY3QkIHwgYXN5bmMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc3VibGluZSBvZiBjb2x1bW5EZWYuaGVhZGVySW5mbzsgbGV0IHN1YkxpbmVJbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5Rm5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzaG93RWxsaXBzaXNUZXh0T25Ib3Zlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0udHlwZU9mQm9keURhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInSUNPTidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIhKHN0YXJyZWRJblByb2dyZXNzICYmIFJPV19EQVRBLm9yZGVySWQgPT0gc2VsZWN0ZWRTdGFycmVkT3JkZXJJZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIlJPV19EQVRBLmljb25DbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaWNvbkNsaWNrZWQoUk9XX0RBVEEsUk9XX0RBVEEuaWNvbkNsYXNzKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwie3sgUk9XX0RBVEEuaWNvblRpdGxlVGV4dCB9fVwiIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImd0LWljb24tY29sdW1uLXRvb2x0aXAgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdGFycmVkSW5Qcm9ncmVzcyAmJiBST1dfREFUQS5vcmRlcklkID09IHNlbGVjdGVkU3RhcnJlZE9yZGVySWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWZvci1idXR0b24tZGlyZWN0aXZlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidJQ09OX0NFTEwnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5hY3Rpb25LZXldXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJhY3Rpb24uc2hvd0ljb25cIiBbY2xhc3NdPVwiYWN0aW9uLmljb25DbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwibW91c2VFbnRlck9uU3RyaW5nVGV4dEFjdGlvblR5cGUoUk9XX0RBVEEsIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0udG9vbHRpcEtleSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBhdXRvXCIgY29udGFpbmVyPVwiYm9keVwiIFthdXRvQ2xvc2VdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwidGVhbS11c2VyLXRvb2x0aXAgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiYWN0aW9uLnNob3dUb29sdGlwID8gdXNlckxvZ2dlZEluRGV0YWlscyA6IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0ZXh0QWN0aW9uQ2xpY2tlZChST1dfREFUQSwgYWN0aW9uLmlkLCAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlVG9vbHRpcF09XCIhYWN0aW9uLnNob3dUb29sdGlwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGlvbi5zaG93T2JqZWN0S2V5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInSFRNTF9TVFJJTkcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIFtpbm5lckhUTUxdPVwiUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpbm5lckhUTUxDZWxsQ2xpY2tlZCgkZXZlbnQsUk9XX0RBVEEpXCI+PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInU1ZHX0lDT04nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbm5hLWNvcmUtYW5uYS1pY29uLWNvbHVtbiBbY29tcG9uZW50TmFtZV09XCJndEdlbmVyYWxDb25maWcuY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhT2JqZWN0XT1cIlJPV19EQVRBXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uVG9TaG93XT1cIlJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XSBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ29sdW1uSWNvbkNsaWNrZWQpPVwic3ZnSWNvbkNsaWNrZWQoJGV2ZW50KVwiPjwvYW5uYS1jb3JlLWFubmEtaWNvbi1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidURVhUX0FDVElPTlMnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB0ZXh0IG9mIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0uYWN0aW9uS2V5XVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInRleHQuc2hvd1Rvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0ZXh0QWN0aW9uQ2xpY2tlZChST1dfREFUQSx0ZXh0LmlkLCBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRleHQuaXNEaXNhYmxlZFwiIGNsYXNzPVwie3t0ZXh0LmNsYXNzfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIm1vdXNlRW50ZXJPblRleHRBY3Rpb25UeXBlKFJPV19EQVRBLCBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLnRvb2x0aXBLZXkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ0ZXh0QWN0aW9uVG9vbHRpcFRlbXBsYXRlXCIgcGxhY2VtZW50PVwiYXV0b1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwiZ3QtaWNvbi1jb2x1bW4tdG9vbHRpcCByZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdGV4dC5uYW1lfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhdGV4dC5zaG93VG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRleHRBY3Rpb25DbGlja2VkKFJPV19EQVRBLHRleHQuaWQsIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidGV4dC5pc0Rpc2FibGVkXCIgY2xhc3M9XCJ7e3RleHQuY2xhc3N9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGV4dC5uYW1lfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0NIRUNLQk9YJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIlJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlzYWJsZS1jaGVja2JveCc6IFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0uaXNEaXNhYmxlZEtleV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgY3VzdG9tLWNvbHVtbi1jaGVja2JveC1jaGVja2VkXCIgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0T3JVbnNlbGVjdENoZWNrYm94KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgY3VzdG9tLWNvbHVtbi1jaGVja2JveC11bmNoZWNrZWRcIiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlzYWJsZS1jaGVja2JveCc6IFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0uaXNEaXNhYmxlZEtleV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdE9yVW5zZWxlY3RDaGVja2JveChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfYm94X291dGxpbmVfYmxhbmtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmFjdGlvbktleV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiYWN0aW9uLnNob3dJY29uXCIgW2NsYXNzXT1cImFjdGlvbi5pY29uQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOiBhY3Rpb24uZGlzYWJsZWRJY29ufVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwibW91c2VFbnRlck9uU3RyaW5nVGV4dEFjdGlvblR5cGVDb250YWluaW5nVGFibGUoUk9XX0RBVEEsIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0udG9vbHRpcEtleSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBhdXRvXCIgY29udGFpbmVyPVwiYm9keVwiIFthdXRvQ2xvc2VdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwidG9vbHRpcC1jb250YWluaW5nLXRhYmxlIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInRvb2x0aXBDb250YWluaW5nVGFibGVUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidDTElDS0FCTEVfREFUQSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nRm9yPVwibGV0IHRleHQgb2YgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5hY3Rpb25LZXldXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ0ZXh0LmNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrYWJsZURhdGFDbGlja2VkKFJPV19EQVRBLCB0ZXh0LmlkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdGV4dC5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3VibGluZS5vYmplY3RLZXkgPT0gJ2Rpc3BsYXlCb29rZWRVbml0cycgJiYgZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCA9PSAnUkFUSU5HJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNsaWNrYWJsZS1kYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzcG90RGV0YWlsc0Rvd25sb2FkQ2xpY2tlZCgnREFUQVJPVycsIFJPV19EQVRBKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdkaXNhYmxlZC1jbGlja2FibGUtZGF0YSc6IGRvd25sb2FkSW5Qcm9ncmVzcyB9XCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLmRpc3BsYXlCb29rZWRVbml0c319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgc3BvdC1kZXRhaWxzLWRvd25sb2FkLWljb25zXCI+Z2V0X2FwcDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkb3dubG9hZEluUHJvZ3Jlc3MgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIFJPV19EQVRBLmludmVudG9yeUNvZGVJZCA9PSBzZWxlY3RlZEludmVudG9yeUlkRm9yRG93bmxvYWQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIFJPV19EQVRBLmRlbW9ncmFwaGljID09IHNlbGVjdGVkRGVtb2dyYXBoaWNGb3JEb3dubG9hZCBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNpcmN1bGFyUHJvZ3Jlc3NCYXJcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidTVFJJTkdfX19JQ09OX09SX1RFWFRfQUNUSU9OJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0uYWN0aW9uS2V5XVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImFjdGlvbi5hZGRpdGlvbmFsVGV4dEJlZm9yZUxpbmtDbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySHRtbF09XCJhY3Rpb24uYWRkaXRpb25hbFRleHRCZWZvcmVMaW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwie3sgYWN0aW9uLmFkZGl0aW9uYWxUZXh0QmVmb3JlTGluayB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCIgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwiZ3QtaWNvbi1jb2x1bW4tdG9vbHRpcCByZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVRvb2x0aXBdPVwiIWFjdGlvbi5lbmFibGVUb29sdGlwRm9yQWRkaXRpb25hbFRleHRcIj48L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGlvbiAmJiBhY3Rpb24udHlwZU9mRGF0YT09ICdTVFJJTkcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYWN0aW9uLmRhdGEgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIFtpZF09XCJhY3Rpb24uaWRcIiAqbmdJZj1cImFjdGlvbi5zaG93TGlua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRleHRBY3Rpb25DbGlja2VkKFJPV19EQVRBLCBhY3Rpb24uaWQsIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWN0aW9uLmxpbmtDbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6IGFjdGlvbi5kaXNhYmxlZExpbmt9XCI+e3thY3Rpb24uZGF0YX19PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gbmdiVG9vbHRpcD1cInt7IGFjdGlvbi5hZGRpdGlvbmFsVGV4dEFmdGVyTGluayB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCIgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImFjdGlvbi5hZGRpdGlvbmFsVGV4dEFmdGVyTGlua0NsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJndC1pY29uLWNvbHVtbi10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlVG9vbHRpcF09XCIhYWN0aW9uLmVuYWJsZVRvb2x0aXBGb3JBZGRpdGlvbmFsQWZ0ZXJUZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYWN0aW9uLmFkZGl0aW9uYWxUZXh0QWZ0ZXJMaW5rIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGlvbi5zaG93VG9vbHRpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3Rpb24udG9vbHRpcERhdGEuaW5uZXJIdG1sXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImFjdGlvbi5zaG93SWNvblwiIFtjbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOiBhY3Rpb24uZGlzYWJsZWRJY29ufVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJtb3VzZUVudGVyT25TdHJpbmdUZXh0QWN0aW9uVHlwZUNvbnRhaW5pbmdUYWJsZShST1dfREFUQSwgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS50b29sdGlwS2V5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20gYXV0b1wiIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInRvb2x0aXAtY29udGFpbmluZy10YWJsZSByZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInRvb2x0aXBDb250YWluaW5nVGFibGVUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYWN0aW9uLnRvb2x0aXBEYXRhLnRvb2x0aXBUYWJsZUJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJhY3Rpb24uc2hvd0ljb25cIiBbY2xhc3NdPVwiYWN0aW9uLmljb25DbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzogYWN0aW9uLmRpc2FibGVkSWNvbn1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImljb25DbGlja2VkT25TdHJpbmdJY29uQWN0aW9uVHlwZShST1dfREFUQSwgYWN0aW9uLmlkLCBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJtb3VzZUxlYXZlVGV4dEFjdGlvblR5cGUoUk9XX0RBVEEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIm1vdXNlRW50ZXJPblN0cmluZ1RleHRBY3Rpb25UeXBlKFJPV19EQVRBLCBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLnRvb2x0aXBLZXkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZW1lbnRdPVwiYWN0aW9uLnRvb2x0aXBQbGFjZW1lbnQgPyBhY3Rpb24udG9vbHRpcFBsYWNlbWVudCA6ICdib3R0b20gYXV0bydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiIFthdXRvQ2xvc2VdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ0ZWFtLXVzZXItdG9vbHRpcCByZW1vdmUtb24tc2Nyb2xsLWNsYXNzIHt7IGFjdGlvbi50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwibWFya0FzUmVhZFRpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFhY3Rpb24uc2hvd1Rvb2x0aXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImFjdGlvbi5zaG93SWNvblwiIFtjbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6IGFjdGlvbi5kaXNhYmxlZEljb259XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImljb25DbGlja2VkT25TdHJpbmdJY29uQWN0aW9uVHlwZShST1dfREFUQSwgYWN0aW9uLmlkLCAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInU1RSSU5HX09SX0lOUFVUJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldPy50eXBlID09ICdTVFJJTkcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaW5wdXRCb3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySHRtbF09XCJST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV0/LnZhbHVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpbnB1dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3tST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV0/LnBsYWNlaG9sZGVyfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dFbGxpcHNpc1RleHRPbkhvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e1JPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XS5jbGFzc05hbWV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiY2hhbmdlc01hZGVJbkVkaXRhYmxlSW5wdXRCb3goJGV2ZW50LFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XSwgZmFsc2UpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFzdGUpPVwiY2hhbmdlc01hZGVJbkVkaXRhYmxlSW5wdXRCb3goJGV2ZW50LCBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV0sIHRydWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJlZGl0YWJsZUlucHV0VmFsdWVDaGFuZ2VkKCRldmVudCwgUk9XX0RBVEEsIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3JlZC1ib3JkZXInOiAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldLmhhc0Vycm9yIH1cIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIlJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XS5zaG93SWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldLmljb25Ub29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJndC10b3RhbC1yb3ctdG9vbHRpcFwiIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e1JPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XS5pY29uQ2xhc3N9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInSFRNTCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckh0bWxdPVwiUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInU0lOR0xFX1JBRElPJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIlJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXNhYmxlLWNoZWNrYm94JzogUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5pc0Rpc2FibGVkS2V5XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLXJhZGlvYm94LW1hcmtlZFwiIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIVJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktcmFkaW9ib3gtYmxhbmtcIiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXNhYmxlLWNoZWNrYm94JzogUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5pc0Rpc2FibGVkS2V5XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIiAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdE9yVW5zZWxlY3RDaGVja2JveChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1JBRElPJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWdyb3VwICpuZ0lmPVwiUk9XX0RBVEFbJ1JhZGlvQnV0dG9uQ29uZmlnJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiUk9XX0RBVEFbc3VibGluZS5vYmplY3RLZXldXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJST1dfREFUQVsnUmFkaW9CdXR0b25Db25maWcnXVswXS5pc0Rpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJhZGlvQnV0dG9uIG9mIFJPV19EQVRBWydSYWRpb0J1dHRvbkNvbmZpZyddOyBsZXQgbGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiB2YWx1ZT1cInt7IHJhZGlvQnV0dG9uLnZhbHVlIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyByYWRpb0J1dHRvbi5jbGFzcyB9fVwiIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaW9CdXR0b25DbGlja2VkKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpb0J1dHRvbi52YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBWydSYWRpb0J1dHRvbkNvbmZpZyddWzBdLmlzRGlzYWJsZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPnt7IHJhZGlvQnV0dG9uLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiIHt7cmFkaW9CdXR0b24uaWNvbkNsYXNzfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmFkaW9CdXR0b25JY29uQ2xpY2tlZChST1dfREFUQSlcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyICpuZ0lmPVwiIWxhc3RcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInU1RSSU5HX1dJVEhfVE9PTFRJUCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmFjdGlvbktleV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiB7eyBhY3Rpb24/LmRhdGFUb0Rpc3BsYXkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImFjdGlvbj8uc2hvd1Rvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInRleHRBY3Rpb25Ub29sdGlwVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIm1vdXNlRW50ZXJPblN0cmluZ1RleHRBY3Rpb25UeXBlKFJPV19EQVRBLCBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLnRvb2x0aXBLZXkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2VtZW50XT1cImFjdGlvbj8udG9vbHRpcFBvc2l0aW9uXCIgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImFjdGlvbj8udG9vbHRpcEljb25DbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwiZ3QtaWNvbi1jb2x1bW4tdG9vbHRpcCByZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVRvb2x0aXBdPVwiYWN0aW9uPy5kaXNhYmxlVG9vbHRpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+IHt7IGFjdGlvbj8uZGF0YVRvRGlzcGxheUFmdGVyVG9vbHRpcCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN1YmxpbmUub2JqZWN0S2V5ICE9ICdkZXNjcmlwdGlvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJzdWJsaW5lLm9iamVjdEtleSA9PSAnaW52ZW50b3J5Q29kZScgJiYgUk9XX0RBVEFbJ2lzU2VsbGVyR3JvdXAnXSAmJiBndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09ICdSQVRJTkcnIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtaSBtZGktaW5mby1vdXRsaW5lIHNlbGxlci10b29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJzZWxsZXJIaWVyYXJjaHlUb29sdGlwXCIgcGxhY2VtZW50PVwiYm90dG9tIGF1dG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIiBbYXV0b0Nsb3NlXT1cInRydWVcIiB0cmlnZ2Vycz1cIm1hbnVhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhpZGRlbik9XCJjbG9zZVRvb2x0aXAoKVwiICNpbmZvPVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwiaGllcmFyY2h5LXRvb2x0aXAgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiYmluZFRoZVZhbHVlVG9TZWxsZXJHcm91cFRvb2x0aXAoUk9XX0RBVEEuc2VsbGVyR3JvdXBIaWVyYXJjaHksIGluZm8pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJzdWJsaW5lLm9iamVjdEtleSA9PSAnZGlzcGxheUJvb2tlZEF2ZXJhZ2VSYXRpbmcnICYmIGd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gJ1JBVElORycgJiYgUk9XX0RBVEFbJ3Nob3dSYXRpbmdBdmVyYWdlSWNvbiddIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtaSBtZGktaW5mby1vdXRsaW5lIHNlbGxlci10b29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20gYXV0b1wiIGNvbnRhaW5lcj1cImJvZHlcIiBbYXV0b0Nsb3NlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cInNldElzRGlmZmVyZW5jZShST1dfREFUQS5pc0RpZmZlcmVuY2VMZXNzVGhhbjI1UGVyY2VudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInBvc3RlZC1hdmctdG9vbHRpcCByZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJwb3N0ZWRSYXRpbmdEaWZmZXJlbmNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJzdWJsaW5lLm9iamVjdEtleSA9PSAnZGlzcGxheUJvb2tlZEF2ZXJhZ2VJbXByZXNzaW9uJyAmJiBndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09ICdSQVRJTkcnICYmIFJPV19EQVRBWydzaG93SW1wcmVzc2lvbkF2ZXJhZ2VJY29uJ10gXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1pIG1kaS1pbmZvLW91dGxpbmUgc2VsbGVyLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBhdXRvXCIgY29udGFpbmVyPVwiYm9keVwiIFthdXRvQ2xvc2VdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwic2V0SXNEaWZmZXJlbmNlKFJPV19EQVRBLmlzRGlmZmVyZW5jZUxlc3NUaGFuMjVQZXJjZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwicG9zdGVkLWF2Zy10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInBvc3RlZEltcERpZmZlcmVuY2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3VibGluZS5vYmplY3RLZXkgPT0gJ2Rlc2NyaXB0aW9uJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlJPV19EQVRBLmRlc2NyaXB0aW9uTWVzc2FnZSB8fCBST1dfREFUQS5kZXNjcmlwdGlvbkVtYWlsUmVmZXJlbmNlTnVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlJPV19EQVRBLmRlc2NyaXB0aW9uTWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBST1dfREFUQS5kZXNjcmlwdGlvbk1lc3NhZ2UgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlJPV19EQVRBLmRlc2NyaXB0aW9uRW1haWxSZWZlcmVuY2VOdW0gIT0gJy0nICYmIFJPV19EQVRBLmRlc2NyaXB0aW9uRW1haWxSZWZlcmVuY2VOdW0gIT0gJydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW1haWwgUmVmOiB7eyBST1dfREFUQS5kZXNjcmlwdGlvbkVtYWlsUmVmZXJlbmNlTnVtIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cInt7IFJPV19EQVRBLmRlc2NyaXB0aW9uRGV0YWlsc1VybCB9fVwiIHRhcmdldD1cIl9ibGFua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJST1dfREFUQS5kZXNjcmlwdGlvbkRldGFpbHNVcmxUeXBlID09PSAnUERGJyB8fCBST1dfREFUQS5kZXNjcmlwdGlvbkRldGFpbHNVcmxUeXBlID09PSAnRVhDRUwnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biB2aWV3RGV0YWlsc0FuZEVtYWlsQnRuXCI+RG93bmxvYWQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlJPV19EQVRBLmFjdGl2aXR5bmFtZS50b0xvd2VyQ2FzZSgpID09ICdvcmRlciBvbmJvYXJkZWQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJST1dfREFUQS5kZXNjcmlwdGlvbkRldGFpbHNVcmxUeXBlID09PSAnTElOSydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidmlld0RldGFpbHNDbGlja2VkKFJPV19EQVRBKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biB2aWV3RGV0YWlsc0FuZEVtYWlsQnRuIG9yZGVyLW9uYm9hcmRlZFwiPlZpZXdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHM8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwie3sgUk9XX0RBVEEuZGVzY3JpcHRpb25FbWFpbFVybCB9fVwiIHRhcmdldD1cIl9ibGFua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJST1dfREFUQS5kZXNjcmlwdGlvbkVtYWlsVXJsICE9ICctJyAmJiBST1dfREFUQS5kZXNjcmlwdGlvbkVtYWlsVXJsICE9ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biB2aWV3RGV0YWlsc0FuZEVtYWlsQnRuXCI+VmlldyBlbWFpbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoaXNOb0RhdGFUb0Rpc3BsYXlTdWJqZWN0JCB8IGFzeW5jKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bnVsbH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8YW5uYS1jb3JlLW5vLWRhdGEtbGliIFt3aWR0aF09XCJub0RhdGFXaWR0aFwiIFttYXJnaW5Ub3BdPVwibWFyZ2luVG9wXCIgKm5nSWY9XCIoaXNOb0RhdGFUb0Rpc3BsYXlTdWJqZWN0JCB8IGFzeW5jKVwiPlxyXG4gICAgPC9hbm5hLWNvcmUtbm8tZGF0YS1saWI+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBDaGVja2JveCB0ZW1wbGF0ZSAtLT5cclxuPG5nLXRlbXBsYXRlICNmaWx0ZXJUb29sdGlwPlxyXG4gICAgPGFubmEtY29yZS1hbm5hLWNvbHVtbi1jaGVja2JveC1maWx0ZXIgW3RhYmxlRGF0YV09XCJ0YWJsZURhdGFcIiBbc2hvd0ZpbHRlckhlYWRlclRhYnNdPVwic2hvd0ZpbHRlclRvb2x0aXBUYWJzXCJcclxuICAgICAgICBbaXNMdXJBbmRDc3JDb21wb25lbnRdPVwiZmFsc2VcIiBbY2xvbmVkVGFibGVEYXRhXT1cImNsb25lZFRhYmxlRGF0YVwiIFtmaWx0ZXJUYWJPYmplY3RzXT1cImZpbHRlclRhYk9iamVjdHNcIlxyXG4gICAgICAgIChmaWx0ZXJBcHBsaWVkVG9UYWJsZSk9XCJmaWx0ZXJBcHBsaWVkKCRldmVudClcIiAoc29ydGluZ0FwcGxpZWRUb1RhYmxlKT1cInNvcnRpbmdBcHBsaWVkKCRldmVudClcIlxyXG4gICAgICAgIChjbG9zZVRvb2x0aXApPVwiY2xvc2VUb29sdGlwKClcIj5cclxuICAgIDwvYW5uYS1jb3JlLWFubmEtY29sdW1uLWNoZWNrYm94LWZpbHRlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gU2xpZGVyIHRlbXBsYXRlIC0tPlxyXG48bmctdGVtcGxhdGUgI3NsaWRlclRvb2xUaXA+XHJcbiAgICA8YW5uYS1jb3JlLWFubmEtY29sdW1uLXNsaWRlci1maWx0ZXIgW3RhYmxlRGF0YV09XCJ0YWJsZURhdGFcIiBbc2hvd0ZpbHRlckhlYWRlclRhYnNdPVwic2hvd0ZpbHRlclRvb2x0aXBUYWJzXCJcclxuICAgICAgICBbaXNMdXJBbmRDc3JDb21wb25lbnRdPVwiZmFsc2VcIiBbY2xvbmVkVGFibGVEYXRhXT1cImNsb25lZFRhYmxlRGF0YVwiIFtmaWx0ZXJUYWJPYmplY3RzXT1cImZpbHRlclRhYk9iamVjdHNcIlxyXG4gICAgICAgIChmaWx0ZXJBcHBsaWVkVG9UYWJsZSk9XCJmaWx0ZXJBcHBsaWVkKCRldmVudClcIiAoc29ydGluZ0FwcGxpZWRUb1RhYmxlKT1cInNvcnRpbmdBcHBsaWVkKCRldmVudClcIlxyXG4gICAgICAgIChjbG9zZVRvb2x0aXApPVwiY2xvc2VUb29sdGlwKClcIj5cclxuICAgIDwvYW5uYS1jb3JlLWFubmEtY29sdW1uLXNsaWRlci1maWx0ZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIERhdGUgUGlja2VyIFRlbXBsYXRlIC0tPlxyXG48bmctdGVtcGxhdGUgI2RhdGVQaWNrZXJUb29sdGlwPlxyXG4gICAgPGFubmEtY29yZS1hbm5hLWNvbHVtbi1kYXRlLXJhbmdlLWZpbHRlciBbdGFibGVEYXRhXT1cInRhYmxlRGF0YVwiIFtzaG93RmlsdGVySGVhZGVyVGFic109XCJzaG93RmlsdGVyVG9vbHRpcFRhYnNcIlxyXG4gICAgICAgIFtpc0x1ckFuZENzckNvbXBvbmVudF09XCJmYWxzZVwiIFtjbG9uZWRUYWJsZURhdGFdPVwiY2xvbmVkVGFibGVEYXRhXCIgW2ZpbHRlclRhYk9iamVjdHNdPVwiZmlsdGVyVGFiT2JqZWN0c1wiXHJcbiAgICAgICAgKGZpbHRlckFwcGxpZWRUb1RhYmxlKT1cImZpbHRlckFwcGxpZWQoJGV2ZW50KVwiIChzb3J0aW5nQXBwbGllZFRvVGFibGUpPVwic29ydGluZ0FwcGxpZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGNsb3NlVG9vbHRpcCk9XCJjbG9zZVRvb2x0aXAoKVwiPlxyXG4gICAgPC9hbm5hLWNvcmUtYW5uYS1jb2x1bW4tZGF0ZS1yYW5nZS1maWx0ZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFdlZWsgUGlja2VyIFRlbXBsYXRlIC0tPlxyXG48bmctdGVtcGxhdGUgI3dlZWtQaWNrZXJUb29sVGlwPlxyXG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwid2Vla3BpY2tlci1jb250YWluZXJcIj5cclxuICAgICAgICA8YW5uYS1jb3JlLXdlZWstY2FsZW5kYXItZmlsdGVyLWxpYlxyXG4gICAgICAgICAgICBbd2Vlay1jYWxlbmRhci1jb25maWddPVwiZ3RHZW5lcmFsQ29uZmlnLm11bHRpV2Vla1BpY2tlckNvbmZpZ1wiXHJcbiAgICAgICAgICAgIChhcHBseSk9XCJhcHBseVdlZWtGaWx0ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFtmcm9tLWRhdGVdPVwiY2FsZW5kYXJNaW5FbmFibGVkRGF0ZVwiXHJcbiAgICAgICAgICAgIFt0by1kYXRlXT1cImNhbGVuZGFyTWF4RW5hYmxlZERhdGVcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L2FubmEtY29yZS13ZWVrLWNhbGVuZGFyLWZpbHRlci1saWI+XHJcbiAgICA8L2Rpdj4gLS0+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFRpbWUgRmlsdGVyIFRlbXBsYXRlIC0tPlxyXG48bmctdGVtcGxhdGUgI3RpbWVGaWx0ZXJUb29sVGlwPlxyXG4gICAgPGFubmEtY29yZS1hbm5hLWNvbHVtbi10aW1lLWZpbHRlciBbdGFibGVEYXRhXT1cInRhYmxlRGF0YVwiIFtzaG93RmlsdGVySGVhZGVyVGFic109XCJzaG93RmlsdGVyVG9vbHRpcFRhYnNcIlxyXG4gICAgICAgIFtpc0x1ckFuZENzckNvbXBvbmVudF09XCJmYWxzZVwiIFtzaG93QWxsVGltZVJhbmdlQ2hlY2tib3hlc109XCJzaG93Q2hlY2tib3hlc0ZvclRpbWVGaWx0ZXJcIlxyXG4gICAgICAgIFtjbG9uZWRUYWJsZURhdGFdPVwiY2xvbmVkVGFibGVEYXRhXCIgW2ZpbHRlclRhYk9iamVjdHNdPVwiZmlsdGVyVGFiT2JqZWN0c1wiXHJcbiAgICAgICAgKGZpbHRlckFwcGxpZWRUb1RhYmxlKT1cImZpbHRlckFwcGxpZWQoJGV2ZW50KVwiIChzb3J0aW5nQXBwbGllZFRvVGFibGUpPVwic29ydGluZ0FwcGxpZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGNsb3NlVG9vbHRpcCk9XCJjbG9zZVRvb2x0aXAoKVwiPlxyXG4gICAgPC9hbm5hLWNvcmUtYW5uYS1jb2x1bW4tdGltZS1maWx0ZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2NvbHVtbkluZm9Ub29sdGlwPlxyXG4gICAgPHAgc3R5bGU9XCJjb2xvcjogYmxhY2s7d2hpdGUtc3BhY2U6IG5vd3JhcDtcIj5UaGlzIHByZWVtcHRpb24gaXMgcmVqZWN0ZWQgYW5kIG5vdCBtYXJrZWQgZm9yIGNyZWRpdC48L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3JhdGluZ0luZm9Ub29sdGlwPlxyXG4gICAgPHAgY2xhc3M9XCJmaXJzdC1yb3dcIj5TaG93cyAnQm9va2VkIFJhdGluZycgZm9yIFByZWVtcHRpb25zICYgTWFrZUdvb2QgT2ZmZXJlZCBzcG90KHMpLjwvcD5cclxuICAgIDxwIGNsYXNzPVwic2Vjb25kLXJvd1wiPlNob3dzICdQcm9qZWN0ZWQgUmF0aW5nJyBmb3IgQURVIE9mZmVyZWQgc3BvdChzKS48L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2ltcHNJbmZvVG9vbHRpcD5cclxuICAgIDxwIGNsYXNzPVwiZmlyc3Qtcm93XCI+U2hvd3MgJ0Jvb2tlZCBJTVBTJyBmb3IgUHJlZW1wdGlvbnMgJiBNYWtlR29vZCBPZmZlcmVkIHNwb3QocykuPC9wPlxyXG4gICAgPHAgY2xhc3M9XCJzZWNvbmQtcm93XCI+U2hvd3MgJ1Byb2plY3RlZCBJTVBTJyBmb3IgQURVIE9mZmVyZWQgc3BvdChzKS48L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3Nwb3RzQ29sdW1uRXF1aXZhbGl6YXRpb25NZXNzYWdlVG9vbHRpcD5cclxuICAgIDxwIGNsYXNzPVwic3BvdC1jb2x1bW4tdG9vbHRpcC1tZXNzYWdlXCI+VGhpcyBjb25zaXN0cyBvZiBlcXVpdmFsaXplZCBzcG90cyBhbmQgdW4tZXF1aXZhbGl6ZWQgUGFpZCBQcm9ncmFtcyAmXHJcbiAgICAgICAgdW4tZXF1aXZhbGl6ZWQgTm9uLXNwb3RzLjwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjdW5kZXJEZWxpdmVyeVRvb2x0aXA+XHJcbiAgICA8cCBjbGFzcz1cInNwb3QtY29sdW1uLXRvb2x0aXAtbWVzc2FnZVwiPkluZGljYXRlcyB0aGUgVW5kZXItZGVsaXZlcnkgcGVyY2VudGFnZSBiYXNlZCBvbiBib29rZWQgYW5kIHBvc3RlZCBSVEcvSU1QUy5cclxuICAgIDwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjb3ZlckRlbGl2ZXJ5VG9vbHRpcD5cclxuICAgIDxwIGNsYXNzPVwic3BvdC1jb2x1bW4tdG9vbHRpcC1tZXNzYWdlXCI+SW5kaWNhdGVzIHRoZSBPdmVyLWRlbGl2ZXJ5IHBlcmNlbnRhZ2UgYmFzZWQgb24gYm9va2VkIGFuZCBwb3N0ZWQgUlRHL0lNUFMuXHJcbiAgICA8L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3JhdGVJbmZvVG9vbHRpcD5cclxuICAgIDxwIGNsYXNzPVwiZmlyc3Qtcm93XCI+U2hvd3MgJ0Jvb2tlZCBSYXRlJyBmb3IgUHJlZW1wdGlvbnMgJiBNYWtlR29vZCBPZmZlcmVkIHNwb3QocykuPC9wPlxyXG4gICAgPHAgY2xhc3M9XCJzZWNvbmQtcm93XCI+U2hvd3MgJ1Byb2plY3RlZCAkIFZhbHVlJyBmb3IgQURVIE9mZmVyZWQgc3BvdChzKS48L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3NlbGxlckhpZXJhcmNoeVRvb2x0aXA+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsbGVyR3JvdXBIaWVyYXJjaHkubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiaGllcmFyY2h5LXRhYmxlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJzZWxsZXItaGllcmFyY2h5LXRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+IzwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5JbnZlbnRvcnkgQ29kZXM8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+UHJvZ3JhbS9EZXNjcmlwdGlvbjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBkYXRhIG9mIHNlbGxlckdyb3VwSGllcmFyY2h5OyBsZXQgdG9vbHRpcEluZGV4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IHRvb2x0aXBJbmRleCArIDEgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzaG93RWxsaXBzaXNUZXh0T25Ib3Zlcj57eyBkYXRhLkludmVudG9yeUNvZGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHNob3dFbGxpcHNpc1RleHRPbkhvdmVyPnt7IGRhdGEuUHJvZ3JhbSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxsZXJHcm91cEhpZXJhcmNoeS5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6ICMwMDBcIj5TZWxsZXIgZ3JvdXAgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyBpbnZlbnRvcnkgY29kZTwvc3Bhbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNsdXJWaW9sYXRpb25JbmZvVG9vbHRpcD5cclxuICAgIDxwIGNsYXNzPVwiZmlyc3Qtcm93XCI+VGhlIHZhbHVlcyBhcmUgZm9yIHRoZSBlbnRpcmUgd2Vlay48L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3Bvc3RlZFJhdGluZ0RpZmZlcmVuY2U+XHJcbiAgICA8cCBjbGFzcz1cImRpZmZlcmVuY2UtdGV4dFwiPlRoZSBkaWZmZXJlbmNlIGJldHdlZW4gcG9zdGVkIGFuZCBib29rZWQgYXZlcmFnZSByYXRpbmcgaXNcclxuICAgICAgICB7e2lzRGlmZmVyZW5jZUxlc3NUaGFuMjVQZXJjZW50ID8gJ2xlc3MnIDogJ21vcmUnfX0gdGhhbiAyNSUuPC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNwb3N0ZWRJbXBEaWZmZXJlbmNlPlxyXG4gICAgPHAgY2xhc3M9XCJkaWZmZXJlbmNlLXRleHRcIj5UaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHBvc3RlZCBhbmQgYm9va2VkIGF2ZXJhZ2UgaW1wcmVzc2lvbiBpc1xyXG4gICAgICAgIHt7aXNEaWZmZXJlbmNlTGVzc1RoYW4yNVBlcmNlbnQgPyAnbGVzcycgOiAnbW9yZSd9fSB0aGFuIDI1JS48L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI29uZ29pbmdSZXZCb29rZWRDb2x1bW5Ub29sdGlwPlxyXG4gICAgPHA+VGhlIEJvb2tlZCAkIHZhbHVlLCBTcG90cywgR1JQLCBDUFAsIElNUFMsIENQTSBjb3JyZXNwb25kcyBvbiB0aGUgbGFzdCBwZXJtYW5lbnQgcmV2aXNpb24gZ2VuZXJhdGVkPC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb21wbGV0ZWRSZXZCb29rZWRDb2x1bW5Ub29sdGlwPlxyXG4gICAgPHA+VGhlIEJvb2tlZCAkIHZhbHVlIGNvcnJlc3BvbmRzIG9uIHRoZSBsYXN0IHBlcm1hbmVudCByZXZpc2lvbiBnZW5lcmF0ZWQ8L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2F2Z0Jvb2tlZFJhdGU+XHJcbiAgICA8cD5UaGlzIGlzIHRoZSBib29rZWQgYXZlcmFnZSBSYXRlPC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNhdmdCb29rZWRSdGc+XHJcbiAgICA8cD5UaGlzIGlzIHRoZSBib29rZWQgYXZlcmFnZSBSVEc8L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2F2Z0Jvb2tlZEltcHM+XHJcbiAgICA8cD5UaGlzIGlzIHRoZSBib29rZWQgYXZlcmFnZSBJTVAo4oCZMDAwKTwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYXV0b21hdGlvblRvb2x0aXA+XHJcbiAgICA8cD5QbGVhc2UgZ2V0IHRoZSBvcmRlciBidXNpbmVzcyBydWxlcyBhcHByb3ZlZCB0byBhY3RpdmF0ZSB0aGUgb3JkZXIgZm9yIGF1dG9tYXRpb24uIE9ubHkgZm9yIHRoZVxyXG4gICAgICAgIGF1dG9tYXRpb24tYWN0aXZhdGVkIG9yZGVycywgYW55IGFwcHJvdmVkIE1HcywgQURVcywgb3IgY3JlZGl0ZWQgc3BvdHMgb24gQU5OQSB3aWxsIGJlIGZlZCBpbnRvIHRoZSB0cmFmZmljXHJcbiAgICAgICAgc3lzdGVtIGkuZS4gQU5OQSByZXZpc2lvbnMuIEFkZGl0aW9uYWxseSwgQU5OQSB3aWxsIG9ubHkgZW50ZXIgYnV5ZXIgcmV2aXNpb25zIGludG8gdHJhZmZpYyBmb3IgdGhlIHNlbGVjdGVkXHJcbiAgICAgICAgTWVkaWFsaW5lL1dPQyBvcmRlcnMuPC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNyZWJhdGVJbXBhY3Q+XHJcbiAgICA8cD5cclxuICAgICAgICBSZWJhdGUgaW1wYWN0IHZhbHVlIGlzIGZvciB0aGUgb3JpZ2luYWxseSBvcmRlcmVkIHNwb3QgbGVuZ3RoIGFuZCBpcyBub3QgZXF1aXZhbGl6ZWQuXHJcbiAgICA8L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2x1clZpb2xhdGlvblRvdGFsUm93VG9vbFRpcD5cclxuICAgIDx1bD5cclxuICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgIDxzdHJvbmc+UE9MSVRJQ0FMIFJBVEUgVklPTEFUSU9OUzo8L3N0cm9uZz5cclxuICAgICAgICAgICAgVmlvbGF0aW9ucyBmbGFnZ2VkIHdoZW4gbm9uLXBvbGl0aWNhbCBzcG90cyBhcmUgYm9va2VkIGF0IGEgcmF0ZSBsb3dlciB0aGFuIHRoZSBtaW5pbXVtIGJvb2tlZCByYXRlIGZvclxyXG4gICAgICAgICAgICBwb2xpdGljYWwgY2FuZGlkYXRlcyBmb3IgdGhlIHNhbWUgd2VlaywgSW52ZW50b3J5IENvZGUgYW5kIFJldmVudWUgQ2xhc3MuXHJcblxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICA8c3Ryb25nPkNBTkRJREFURSBUTyBDQU5ESURBVEUgVklPTEFUSU9OOjwvc3Ryb25nPlxyXG4gICAgICAgICAgICBWaW9sYXRpb25zIGZsYWdnZWQgd2hlbiBwb2xpdGljYWwgc3BvdHMgYXJlIGJvb2tlZCBhdCBkaWZmZXJlbnQgcmF0ZXMgdG8gb3RoZXIgcG9saXRpY2FsIHNwb3RzIGZvciB0aGUgc2FtZVxyXG4gICAgICAgICAgICB3ZWVrLCBJbnZlbnRvcnkgQ29kZSBhbmQgUmV2ZW51ZSBDbGFzcy5cclxuICAgICAgICA8L2xpPlxyXG4gICAgPC91bD5cclxuXHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2NpcmN1bGFyUHJvZ3Jlc3NCYXI+XHJcbiAgICA8Y2lyY2xlLXByb2dyZXNzIFtwZXJjZW50XT1cInBlcmNlbnREb25lXCIgW3JhZGl1c109XCI1XCIgW3Nob3dUaXRsZV09XCJmYWxzZVwiIFtzaG93VW5pdHNdPVwiZmFsc2VcIiBbc2hvd1N1YnRpdGxlXT1cImZhbHNlXCJcclxuICAgICAgICBbb3V0ZXJTdHJva2VXaWR0aF09XCIzXCIgW2lubmVyU3Ryb2tlV2lkdGhdPVwiM1wiIFtzcGFjZV09XCItM1wiIFtvdXRlclN0cm9rZUNvbG9yXT1cIicjMjY4YmZmJ1wiXHJcbiAgICAgICAgW2lubmVyU3Ryb2tlQ29sb3JdPVwiJyNkNWQ1ZDUnXCIgW2FuaW1hdGlvbkR1cmF0aW9uXT1cIjEwXCI+PC9jaXJjbGUtcHJvZ3Jlc3M+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuPG5nLXRlbXBsYXRlICN1c2VyTG9nZ2VkSW5EZXRhaWxzPlxyXG4gICAgPGRpdiBjbGFzcz1cInRvb2x0aXAtZGl2LWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGV4dEFjdGlvblRvb2x0aXBcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkYXRhLmtleSAhPSAncmVhZCdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGEua2V5IH19IDxiPiB7e2RhdGEudmFsdWV9fTwvYj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGEua2V5ID09ICdyZWFkJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGI+IHt7ZGF0YS52YWx1ZX19PC9iPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbWFya0FzUmVhZFRpcD5cclxuICAgIDxkaXYgY2xhc3M9XCJub3RpZmljYXRpb24tdG9vbHRpcC1kaXYtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZGF0YSBvZiB0ZXh0QWN0aW9uVG9vbHRpcFwiPlxyXG4gICAgICAgICAgICB7e2RhdGEudmFsdWV9fVxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3RleHRBY3Rpb25Ub29sdGlwVGVtcGxhdGU+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXRhIG9mIHRleHRBY3Rpb25Ub29sdGlwXCI+XHJcbiAgICAgICAge3sgZGF0YS5rZXkgfX0gPGI+IHt7ZGF0YS52YWx1ZX19PC9iPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3Rvb2x0aXBDb250YWluaW5nVGFibGVUZW1wbGF0ZT5cclxuICAgIDxkaXYgKm5nSWY9XCJ0b29sdGlwQ29udGFpbmluZ1RhYmxlXCIgW2lubmVySFRNTF09XCJ0b29sdGlwQ29udGFpbmluZ1RhYmxlLmlubmVySHRtbFwiIGNsYXNzPVwibm90aWZpY2F0aW9uLXRvb2x0aXAtZGl2LWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDwhLS0gPHVsPlxyXG4gICAgICA8bGkgKm5nRm9yPVwibGV0IGhlYWRlck1zZyBvZiB0b29sdGlwQ29udGFpbmluZ1RhYmxlLnRhYmxlSGVhZGVyTXNnXCI+XHJcbiAgICAgICAgPGI+IHt7aGVhZGVyTXNnfX0gIDwvYj5cclxuICAgICAgPC9saT5cclxuICAgIDwvdWw+XHJcblxyXG4gICAgPHRhYmxlIGNsYXNzPVwidG9vbHRpcC10YWJsZVwiPlxyXG4gICAgICA8dGhlYWQ+XHJcbiAgICAgICAgPHRyPlxyXG4gICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBoZWFkZXIgb2YgdG9vbHRpcENvbnRhaW5pbmdUYWJsZS50b29sdGlwVGFibGVIZWFkZXJcIj5cclxuICAgICAgICAgICAge3sgaGVhZGVyfX1cclxuICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC90aGVhZD5cclxuICAgICAgPHRib2R5PlxyXG4gICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93cyBvZiB0b29sdGlwQ29udGFpbmluZ1RhYmxlLnRvb2x0aXBUYWJsZUJvZHlcIj5cclxuICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgZGF0YSBvZiByb3dzXCI+XHJcbiAgICAgICAgICAgIHt7IGRhdGEgfX1cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC90Ym9keT5cclxuICAgIDwvdGFibGU+XHJcblxyXG4gICAgPHVsPlxyXG4gICAgICA8bGkgc3R5bGU9XCJtYXJnaW4tdG9wOjEwcHg7IHBhZGRpbmc6MFwiICpuZ0Zvcj1cImxldCBmb290ZXJNc2cgb2YgdG9vbHRpcENvbnRhaW5pbmdUYWJsZS50YWJsZUZvb3Rlck1zZ1wiPlxyXG4gICAgICAgIHt7IGZvb3Rlck1zZyB9fSBcclxuICAgICAgPC9saT5cclxuICAgIDwvdWw+IC0tPlxyXG5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tIDxuZy10ZW1wbGF0ZSAjdGV4dEFjdGlvblRvb2x0aXBUZW1wbGF0ZT5cclxuICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZGF0YSBvZiB0ZXh0QWN0aW9uVG9vbHRpcFwiPlxyXG4gICAgICB7eyBkYXRhLmtleSB9fSA8Yj4ge3tkYXRhLnZhbHVlfX08L2I+XHJcbiAgIDwvbmctY29udGFpbmVyPlxyXG48L25nLXRlbXBsYXRlPiAtLT4iXX0=
|
|
781
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1ub24tZWRpdGFibGUtZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWdlbmVyaWMtdGFibGUtbGliL2NvbXBvbmVudHMvYW5uYS1ub24tZWRpdGFibGUtZ2VuZXJpYy10YWJsZS9hbm5hLW5vbi1lZGl0YWJsZS1nZW5lcmljLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtZ2VuZXJpYy10YWJsZS1saWIvY29tcG9uZW50cy9hbm5hLW5vbi1lZGl0YWJsZS1nZW5lcmljLXRhYmxlL2FubmEtbm9uLWVkaXRhYmxlLWdlbmVyaWMtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsNEJBQTRCO0FBQzVCLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBNEIsaUJBQWlCLEVBQWdDLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVNLGdDQUFnQztBQUNoQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFLckQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFHakgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDM0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFcUIsQ0FBQztBQVM3RCxNQUFNLE9BQU8sb0NBQW9DO0lBaUcvQyxZQUNVLEtBQXdCLEVBQ3hCLGVBQWdDLEVBQ2pDLHlCQUFvRCxFQUNwRCxpQkFBb0M7UUFIbkMsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFDeEIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2pDLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUFDcEQsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQTNGcEMsK0NBQTBDLEdBQVcsQ0FBQyxDQUFDO1FBQ3ZELDRCQUF1QixHQUFZLEtBQUssQ0FBQztRQUN6QyxVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLCtCQUEwQixHQUFZLElBQUksQ0FBQztRQUkzQyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5QixxQ0FBZ0MsR0FBWSxJQUFJLENBQUM7UUFDakQsbUNBQThCLEdBQVksSUFBSSxDQUFDO1FBQy9DLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLDBCQUFxQixHQUFZLEtBQUssQ0FBQztRQUV0QyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDcEMsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN2Qyx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzFDLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNyQyx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzFDLDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDM0MsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDaEMsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN6Qyx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3hDLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDeEMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25DLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdEMsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN6Qyx3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3pDLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDeEMsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN6Qyx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzFDLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDekMsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMzQywrQkFBMEIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2hELHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDekMsa0NBQTZCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUU3RCx5QkFBb0IsR0FBZSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBSXJELGdCQUFXLEdBQVcsS0FBSyxDQUFDO1FBRzVCLG9CQUFlLEdBQVcsYUFBYSxDQUFDO1FBTXhDLDZCQUF3QixHQUFZLElBQUksQ0FBQztRQUN6QyxXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBS1gsaUJBQVksR0FBYSxFQUFFLENBQUM7UUFDNUIsb0JBQWUsR0FBYSxJQUFJLENBQUM7UUFPakMsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFHM0IsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUl2QixVQUFLLEdBQVcsQ0FBQyxDQUFDO1FBQ2xCLFFBQUcsR0FBVyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFNdEMsOEJBQXlCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFHaEUsc0JBQWlCLEdBQTBCLEVBQUUsQ0FBQztRQUM5QywyQkFBc0IsR0FBcUIsSUFBSSxDQUFDO1FBQ2hELDJCQUFzQixHQUFXLElBQUksQ0FBQztRQUN0QyxnQ0FBMkIsR0FBWSxLQUFLLENBQUM7UUFRM0MsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyx5Q0FBeUMsRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxnQ0FBZ0MsRUFBQztZQUNuSCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7U0FDN0I7UUFDRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztZQUMzQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztZQUM5QyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztTQUM3QjthQUNJLElBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDLElBQUksT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsWUFBWSxJQUFJLFNBQVMsQ0FBRSxFQUFDO1lBQzVKLDJCQUEyQjtTQUM1QjthQUNJO1lBQ0gsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLGtDQUFrQyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDLEVBQUM7Z0JBQ3hILElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUN4RixJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzNDO2lCQUNHO2dCQUNGLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDNUM7WUFFRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1NBQzdCO1FBRUQsd0dBQXdHO1FBQ3hHLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ3BILElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNqRyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2pELGdDQUFnQztZQUNoQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztTQUM3QjtRQUVELElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxZQUFZLEVBQUU7WUFDbkUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM5RDtRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELHlDQUF5QztRQUN2QyxJQUFJLGNBQWMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ3hDLElBQUcsY0FBYyxHQUFDLEdBQUcsRUFBRTtZQUNyQixJQUFJLENBQUMsZUFBZSxHQUFHLFlBQVksQ0FBQztTQUNyQzthQUNJO1lBQ0gsSUFBSSxDQUFDLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQztTQUM1QztJQUNILENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsSUFBRyxJQUFJLENBQUMsOEJBQThCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsMENBQTBDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUM7WUFDM0osSUFBSSxDQUFDLHNCQUFzQixHQUFHLGVBQWUsQ0FBQztTQUMvQzthQUNJO1lBQ0gsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztTQUNwQztJQUNILENBQUM7SUFFRCw0QkFBNEI7UUFDekIsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxjQUFjLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN4QyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUMzQyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQztRQUNqRCxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQztRQUN2RCxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7UUFDekQsSUFBSSxpQkFBaUIsQ0FBQztRQUV0QixJQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBQztZQUM5QixJQUFJLG9CQUFvQixHQUFHLGNBQWMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pELElBQUksQ0FBQywwQ0FBMEMsR0FBRyxvQkFBb0IsQ0FBQztZQUN2RSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsMENBQTBDLEdBQUcsU0FBUyxHQUFHLFlBQVksQ0FBQztTQUNoRzthQUNJO1lBQ0gsSUFBSSxrQkFBa0IsR0FBRyxjQUFjLEdBQUcsZUFBZSxHQUFHLGdCQUFnQixDQUFDO1lBQzdFLElBQUksQ0FBQywwQ0FBMEM7Z0JBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxZQUFZLEdBQUcsU0FBUyxDQUFDLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNFLGlCQUFpQixHQUFHLGNBQWMsR0FBRyxlQUFlLEdBQUcsZ0JBQWdCLENBQUM7U0FDekU7UUFFRCw4R0FBOEc7UUFFOUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsR0FBRyxpQkFBaUIsSUFBSSxDQUFDO1FBR3hELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLDBDQUEwQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFHRCxTQUFTLENBQUMsS0FBYTtRQUNyQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsaUNBQWlDLEVBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNqRixJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxFQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsRUFBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsOENBQThDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztRQUVwRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLHdCQUF3QixFQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUVsRixJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDMUYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUVwRixJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLDRCQUE0QixFQUFFLDBCQUEwQixDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO1FBRXZGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztRQUN6RixJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxFQUFFLHdCQUF3QixDQUFDLENBQUM7UUFFekYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFM0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUV0RSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBRXhFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMseUJBQXlCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLHlCQUF5QixFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFMUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLHlCQUF5QixFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBRXpFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUV6RSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBQyxhQUFhLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBQyxjQUFjLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUMsU0FBUyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUMsU0FBUyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUMsVUFBVSxDQUFDLENBQUM7UUFFeEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBQyxZQUFZLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBQyxlQUFlLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBQyxjQUFjLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBQyxPQUFPLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBQyxPQUFPLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsNkJBQTZCLEVBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM3RSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsRUFBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBQyxlQUFlLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBQyxZQUFZLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBQyxhQUFhLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBQyxlQUFlLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUMsV0FBVyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUMsZUFBZSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsRUFBQyxZQUFZLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLHlCQUF5QixFQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsRUFBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQzNGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLDZCQUE2QixFQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDMUYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFFN0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsRUFBQyxPQUFPLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBQyxPQUFPLENBQUMsQ0FBQztRQUVyRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBRWxFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRWhELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsdUNBQXVDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLDBDQUEwQyxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDL0YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsbUNBQW1DLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUN0RixJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLDZDQUE2QyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsNkNBQTZDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLHVDQUF1QyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxPQUFZLEVBQUUsVUFBZSxFQUFFLGtCQUF1QjtRQUM3RSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsd0JBQXdCLENBQUMsT0FBWSxFQUFFLFVBQWUsRUFBRSxrQkFBMkI7UUFDakYsSUFBRyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksa0JBQWtCO1lBQUUsT0FBTztRQUNyRCxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsa0JBQWtCLENBQUM7UUFDekMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsT0FBWTtRQUM1QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFTO1FBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxVQUFVLENBQUMsSUFBUztRQUNsQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsK0JBQStCO0lBQy9CLFlBQVk7UUFFVixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN6QyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ3RCO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUM3QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQWE7UUFDM0IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzdGLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxPQUFZLEVBQUUsTUFBbUI7UUFFckQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztRQUNoQyxrQ0FBa0M7UUFDbEMsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUMzQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQjthQUNJO1lBQ0gsSUFBSSxjQUFjLEdBQVUsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxNQUFNLEVBQUMsY0FBYyxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRWpELElBQUksTUFBTSxDQUFDLFVBQVUsR0FBRyxJQUFJLElBQUksTUFBTSxDQUFDLFdBQVcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDakksSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDO2FBQ2hDO1lBRUQsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxJQUFJLGFBQWEsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsSUFBSSx1QkFBdUIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUM7WUFDOUwsSUFBSSxDQUFDLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7U0FDbEM7SUFDSCxDQUFDO0lBRUQscUNBQXFDLENBQUMsTUFBbUIsRUFBRSxjQUFxQjtRQUM5RSxNQUFNLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUU7WUFDbkQsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMxRyxJQUFHLElBQUksSUFBSSxRQUFRLEVBQUM7Z0JBQ2hCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBd0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEYsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUF1QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuRixJQUFHLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFDO29CQUNwRixjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMzQjthQUNKO2lCQUVHO2dCQUNBLElBQUksTUFBTSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUF3QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDdEUsdUVBQXVFO2dCQUN2RSxJQUFJLDRCQUE0QixHQUFHLEtBQUssQ0FBQztnQkFDekMsSUFBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUM7b0JBQ3RELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBQztvQkFDdEcsNEJBQTRCLEdBQUcsSUFBSSxDQUFDO2lCQUNyQztnQkFDSCxJQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLDRCQUE0QixDQUFDLEVBQUM7b0JBQzdHLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzdCO3FCQUNJLElBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFFLElBQUksSUFBSSxDQUFDLElBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSw0QkFBNEIsQ0FBQyxFQUFDO29CQUM5SCxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMzQjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQVksRUFBQyxNQUFXLEVBQUUsWUFBeUI7UUFDN0QsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEIsNkJBQTZCO1FBQzdCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBVyxFQUFDLEtBQWEsRUFBRSxFQUFFO1lBQy9ELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO2dCQUMzQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7Z0JBQ25DLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyx3QkFBd0I7WUFDakMsT0FBTyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRSxZQUFZLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNwSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxrQ0FBa0M7UUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFFakMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQy9CLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtvQkFFeEIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO29CQUNoQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO29CQUUvQixJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO3dCQUV0QyxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLENBQUM7d0JBRS9ELElBQUcsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLGFBQWEsQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBQzs0QkFDckcsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQzt5QkFDbkM7d0JBRUQsSUFBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUM7NEJBRXpCLElBQUcsR0FBRyxJQUFJLFFBQVEsRUFBQztnQ0FDakIsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBd0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FDM0YsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBd0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQ0FFdkYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7NkJBQy9GO2lDQUNHO2dDQUNGLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQXdCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dDQUNsRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLFVBQVUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFFLElBQUksSUFBSSxDQUFDLElBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFDO29DQUV2SyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO2lDQUNqQzs2QkFFRjt5QkFDRjtvQkFFSCxDQUFDLENBQUMsQ0FBQTtpQkFDSDtZQUVILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFHTCxDQUFDO0lBRUQsMEJBQTBCO1FBQ3hCLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN0RCxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDMUIsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQztZQUVuRCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7Z0JBQ2hDLElBQUksbUJBQW1CLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxRCxJQUFJLG9CQUFvQixHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFM0QsSUFBRyxtQkFBbUIsRUFBRSxXQUFXLEdBQUcsb0JBQW9CLENBQUMsV0FBVyxFQUFDO29CQUNyRSxJQUFJLElBQUksR0FBRyxtQkFBbUIsRUFBRSxXQUFXLEdBQUcsb0JBQW9CLENBQUMsV0FBVyxDQUFDO29CQUMvRSxJQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFDO3dCQUMxQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO3FCQUM3RDtvQkFFRCxJQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFDO3dCQUUxQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztxQkFDcEU7aUJBQ0Y7cUJBQ0c7b0JBQ0YsSUFBSSxJQUFJLEdBQUcsb0JBQW9CLEVBQUUsV0FBVyxHQUFHLG1CQUFtQixFQUFFLFdBQVcsQ0FBQztvQkFDaEYsSUFBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBQzt3QkFDMUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7cUJBQ3BFO29CQUVELElBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUM7d0JBRTFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7cUJBQzdEO2lCQUNGO2FBRUY7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjLENBQUMsT0FBWTtRQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBUyxFQUFFLE1BQWMsRUFBRSxVQUFtQjtRQUMvRCxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQ2pEO0lBQ0gsQ0FBQztJQUVELGdDQUFnQyxDQUFDLG9CQUFrRCxFQUFFLE9BQVk7UUFDL0YsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRTtZQUN2RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDL0I7UUFDRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsb0JBQW9CLENBQUM7UUFDakQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQztRQUNoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFZLEVBQUMsU0FBaUI7UUFFeEMsSUFBRyxTQUFTLElBQUksT0FBTyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDekQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7U0FDL0M7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUE2QjtRQUMxQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxPQUFZLEVBQUMsRUFBTyxFQUFFLFlBQXlCO1FBQy9ELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBQyxhQUFhLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQztJQUN4RyxDQUFDO0lBRUQsaUNBQWlDLENBQUMsT0FBWSxFQUFFLEVBQU8sRUFBRSxZQUF5QjtRQUNoRixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUMsSUFBSSxFQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUMsYUFBYSxFQUFDLElBQUksRUFBQyxDQUFDLENBQUM7SUFDdkcsQ0FBQztJQUVELG9CQUFvQixDQUFDLEtBQVUsRUFBRSxPQUFZO1FBQzNDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsT0FBWTtRQUM3QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUMsSUFBSSxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVDLG9CQUFvQjtRQUNsQixJQUFJLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsMkJBQTJCLElBQUksSUFBSSxDQUFDLHFCQUFxQjtZQUM3SCxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQjtZQUMzQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzdCLElBQUcsTUFBTSxDQUFDLGVBQWUsRUFBQztvQkFDeEIsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDaEQsTUFBTSxDQUFDLDBCQUEwQixHQUFHLEdBQUcsQ0FBQztvQkFDeEMsZ0JBQWdCO29CQUNoQixJQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQywyQkFBMkIsRUFBQzt3QkFDcEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztxQkFDeEQ7aUJBQ0Y7WUFDTCxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQztJQUM1RCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWM7UUFDNUIsSUFBSSxDQUFDLDZCQUE2QixHQUFHLEtBQUssQ0FBQztJQUM3QyxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDckMsQ0FBQztJQUVELHNCQUFzQixDQUFDLENBQU07UUFDekIsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxXQUFXO1FBQzFELE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxzQkFBc0I7UUFDdkUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyx3QkFBd0I7UUFFbkUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFN0IscUVBQXFFO1FBQ3JFLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUNuQixNQUFNLEtBQUssR0FBRyxpQkFBaUIsR0FBRyxlQUFlLEdBQUcsTUFBTSxDQUFDO1FBQzNELElBQUksY0FBYyxHQUFHLEtBQUssRUFBRTtZQUN4QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3RCO1FBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYSxFQUFFLEdBQVc7UUFDbkMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxLQUFLLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELDBCQUEwQixDQUFDLHFCQUE2QyxFQUFFLE9BQWE7UUFDckYsSUFBRyxPQUFPLEVBQUM7WUFDVCxJQUFJLENBQUMsOEJBQThCLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUM5RCxJQUFJLENBQUMsOEJBQThCLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztTQUMzRDthQUFLO1lBQ0osSUFBSSxDQUFDLDhCQUE4QixHQUFHLElBQUksQ0FBQztZQUMzQyxJQUFJLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDO1NBQzVDO1FBQ0QsSUFBSSxDQUFDLDBCQUEwQixHQUFHLHFCQUFxQixDQUFDO1FBQ3hELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUM7WUFDNUIscUJBQXFCLEVBQUUscUJBQXFCO1lBQzVDLGVBQWUsRUFBRSxJQUFJLENBQUMsOEJBQThCO1lBQ3BELFdBQVcsRUFBRSxJQUFJLENBQUMsOEJBQThCO1NBQUMsQ0FBQyxDQUFBO0lBQ3hELENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxLQUFVO1FBQzdCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFSCxnQ0FBZ0MsQ0FBQyxPQUFZLEVBQUUsVUFBa0I7UUFDL0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUMsT0FBTyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQTtJQUN0RSxDQUFDO0lBRUQsK0NBQStDLENBQUMsT0FBWSxFQUFFLFVBQWtCO1FBQzlFLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELHdCQUF3QixDQUFDLE9BQVk7UUFDbkMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxFQUFDLE9BQU8sRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUE7SUFDM0UsQ0FBQztJQUVELDBCQUEwQixDQUFDLE9BQVksRUFBRSxVQUFrQjtRQUN6RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxPQUFZLEVBQUUsRUFBVTtRQUMzQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3pFLHNFQUFzRTtRQUN0RSxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsc0JBQXNCLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUM1RSxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFbkUsT0FBTyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3RCO1FBQ0QsT0FBTyxlQUFlLElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDcEQsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1NBQ3JCO1FBQ0QsT0FBTyxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDeEMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3ZCO0lBQ0gsQ0FBQztJQUVELHFCQUFxQixDQUFDLE9BQWU7UUFDbkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsNkJBQTZCLENBQUMsS0FBVSxFQUFFLFlBQWlCLEVBQUUsVUFBbUI7UUFDOUUsSUFBSSxZQUFZLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUNoRixJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUNyRSxDQUFDLENBQUMsWUFBWSxFQUFFLHNCQUFzQixJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUN2RSxDQUFDLFlBQVksQ0FBQywyQkFBMkIsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO3VCQUM1RSxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxZQUFZLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDMUgsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVELHlCQUF5QixDQUFFLEtBQVUsRUFBRSxHQUFRLEVBQUUsU0FBaUI7UUFDaEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFDLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsc0JBQXNCLENBQUMsSUFBUztRQUM5QixJQUFJLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQy9DLENBQUM7SUFFRCxhQUFhLENBQUMsU0FBZ0I7UUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLGtDQUFrQyxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELGNBQWMsQ0FBQyxTQUFnQjtRQUM3QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsa0NBQWtDLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDOztrSUF6eUJVLG9DQUFvQztzSEFBcEMsb0NBQW9DLHUvREMzQmpELDRnaEVBbTRCa0I7NEZEeDJCTCxvQ0FBb0M7a0JBTmhELFNBQVM7K0JBQ0UsMENBQTBDLG1CQUduQyx1QkFBdUIsQ0FBQyxNQUFNOzhNQUl0QyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRywwQ0FBMEM7c0JBQWxELEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csZ0NBQWdDO3NCQUF4QyxLQUFLO2dCQUNHLDhCQUE4QjtzQkFBdEMsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUVJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csMEJBQTBCO3NCQUFuQyxNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyw2QkFBNkI7c0JBQXRDLE1BQU07Z0JBa0NzQixxQkFBcUI7c0JBQWpELFlBQVk7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbIlxyXG4vLyBBbmd1bGFyIGltcG9ydCBzdGF0ZW1lbnRzXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVmlld0NoaWxkcmVuLCBRdWVyeUxpc3QsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXMsIENoYW5nZURldGVjdG9yUmVmLCBFbGVtZW50UmVmLCBBZnRlclZpZXdDaGVja2VkLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLy8gVGhpcmQgcGFydHkgaW1wb3J0IHN0YXRlbWVudHNcclxuaW1wb3J0IHsgY2xvbmVEZWVwLCBpc0VxdWFsLCB1bmlxIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xyXG5cclxuXHJcbi8vc3ViLWVudHJpZXMgb2YgYW5uYSBsaWIgaW1wb3J0IHN0YXRlbWVudFxyXG5pbXBvcnQgeyBJR3RHZW5lcmFsQ29uZmlnLCBJR3RUYWJsZUhlYWRlciwgSUhlYWRlckluZm8sIElUb3RhbFJvd0luZm8gfSBmcm9tICcuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9tb2RlbHMvYW5uYS1ub24tZWRpdGFibGUtZ3QtbW9kZWxzJztcclxuaW1wb3J0IHsgQW5uYURhdGVUaW1lRm9ybWF0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL3NlcnZpY2VzL2FubmEtZGF0ZS10aW1lLWZvcm1hdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSVdlZWtDYWxlbmRhciB9IGZyb20gJy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLWdsb2JhbC1kcm9wZG93bi1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBHdENvbHVtbkljb25FbWl0dGVkRGF0YSwgUmF0aW5nU2VsbGVyR3JvdXBIaWVyYXJjaHksICB9IGZyb20gJy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLWdlbmVyaWMtZGF0YS10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgcmFkaW9CdXR0b25Nb2RlbCB9IGZyb20gJy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLXRvb2x0aXAubW9kZWwnO1xyXG5pbXBvcnQgeyBBbm5hU29ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9zZXJ2aWNlcy9hbm5hLXNvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEFubmFGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvc2VydmljZXMvYW5uYS1maWx0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW50ZXJmYWNlIGtleVZhbHVlVG9vbHRpcFR5cGUgeyBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB9O1xyXG5pbnRlcmZhY2UgdGFibGVUb29sdGlwVHlwZSB7IHRvb2x0aXBUYWJsZUhlYWRlcjogc3RyaW5nW10sIHRvb2x0aXBUYWJsZUJvZHk6IHN0cmluZ1tdW10sIHRhYmxlSGVhZGVyTXNnOiBzdHJpbmdbXSwgdGFibGVGb290ZXJNc2c6IHN0cmluZ1tdLCBpbm5lckh0bWw6IHN0cmluZ31cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYW5uYS1jb3JlLW5vbi1lZGl0YWJsZS1nZW5lcmljLXRhYmxlLWxpYicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FubmEtbm9uLWVkaXRhYmxlLWdlbmVyaWMtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FubmEtbm9uLWVkaXRhYmxlLWdlbmVyaWMtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQW5uYU5vbkVkaXRhYmxlR2VuZXJpY1RhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0NoZWNrZWQge1xyXG5cclxuICBASW5wdXQoKSBzaG93U2tlbGV0b25Mb2FkaW5nOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHRhYmxlSGVhZGVyczogSUd0VGFibGVIZWFkZXJbXTtcclxuICBASW5wdXQoKSB0YWJsZURhdGE6IGFueVtdO1xyXG4gIEBJbnB1dCgpIGNsb25lZFRhYmxlRGF0YTogYW55W107XHJcbiAgQElucHV0KCkgZ3RHZW5lcmFsQ29uZmlnOiBJR3RHZW5lcmFsQ29uZmlnO1xyXG4gIEBJbnB1dCgpIHRvdGFsUm93SW5mbz86IElUb3RhbFJvd0luZm9bXTtcclxuICBASW5wdXQoKSBndERpbWVuc2lvbjogeyByb3dIZWlnaHQ6IG51bWJlciwgaGVhZGVySGVpZ2h0OiBudW1iZXIsIGRhdGFPblRvcEhlaWdodDogbnVtYmVyLCBtYXJnaW5Gcm9tQm90dG9tOiBudW1iZXIsIHRhYmxlSGVpZ2h0Pzogc3RyaW5nfTtcclxuICBASW5wdXQoKSB0YWJsZUNsYXNzOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbWF4aW11bVJvd3NXaGljaENhbkJlUmVuZGVyZWRXaXRob3V0U2Nyb2xsOiBudW1iZXIgPSA1O1xyXG4gIEBJbnB1dCgpIGZpeE51bWJlck9mUm93c0ZvclBvcHVwOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbGltaXQ6IG51bWJlciA9IDMwOyBcclxuICBASW5wdXQoKSBpbmNsdWRlQm9yZGVySW5UYWJsZUhlaWdodDogYm9vbGVhbiA9IHRydWU7IFxyXG4gIEBJbnB1dCgpIGRvd25sb2FkSW5Qcm9ncmVzczogYm9vbGVhbjtcclxuICBASW5wdXQoKSBwZXJjZW50RG9uZTogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHN0YXJyZWRJblByb2dyZXNzOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGNsaWNrYWJsZVJvdzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNldFRhYmxlSGVpZ2h0V2hlblJvd1NpemVJc0ZpeGVkOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSB0YWJsZUJvcmRlckJvdHRvbUNsYXNzUmVxdWlyZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGhpZGVTb21lVGRzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdGRzSGF2ZVJvd1NwYW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBtdWx0aXBsZVRhYmxlc1ByZXNlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIHRvZ2dsZUNoZWNrYm94ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSB0b2dnbGVSb3dDaGVja2JveCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgdG9nZ2xlSGVhZGVyQ2hlY2tib3ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHVuZG9JY29uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZmlsdGVyQXBwbGllZFRvVGFibGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHNvcnRpbmdBcHBsaWVkVG9UYWJsZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcm93Q2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcmFkaW9CdXR0b25TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY29sdW1uRmlsdGVyT3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjb2x1bW5GaWx0ZXJDbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGd0SWNvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGd0U1ZHSWNvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGd0VGV4dEFjdGlvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGd0Vmlld0RldGFpbENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGd0SW5uZXJIVE1MQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZG93bmxvYWRTcG90RGV0YWlscyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2xpY2thYmxlRGF0YUNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHRvdGFsUm93SWNvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG5vdGlmaWNhdGlvbkljb25Ib3ZlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgbm90aWZpY2F0aW9uSWNvbkhvdmVyTGVhdmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGVkaXRhYmxlSW5wdXRFZGl0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHJhZGlvQnV0dG9uTWVzc2FnZUljb25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBudW1iZXJPZlNrZWxldG9uUm93czogbnVtYmVyW11bXSA9IEFycmF5KDIwKS5maWxsKDApO1xyXG4gIHRhYmxlRGF0YVdyYXBwZXI6IGFueVtdO1xyXG4gIHJvd0NoZWNrZWQ6IGJvb2xlYW47XHJcbiAgaXNBbGxSb3dzQ2hlY2tlZDogYm9vbGVhbjtcclxuICBub0RhdGFXaWR0aDogc3RyaW5nID0gXCI1MCVcIjtcclxuICBtYXJrZWRGb3JDcmVkaXRTdGF0dXM6IHN0cmluZztcclxuICBtYXJrZWRGb3JNR1N0YXR1czogc3RyaW5nO1xyXG4gIGZpbHRlckFsaWdubWVudDogc3RyaW5nID0gXCJib3R0b20gYXV0b1wiO1xyXG5cclxuICAvL1NvcnQgYW5kIEZpbHRlclxyXG4gIHRvb2x0aXBSYWRpb1RleHRNYXA6IE1hcDxhbnksIGFueT47XHJcbiAgZmlsdGVyVGFiT2JqZWN0czogYW55W107XHJcbiAgdG9vbHRpcDogYW55O1xyXG4gIGRpc2FibGVDb2x1bW5DbGVhckFsbEJ0bjogYm9vbGVhbiA9IHRydWU7XHJcbiAgbWFyZ2luID0gNTtcclxuXHJcbiAgLy9XZWVrIEZpbHRlclxyXG4gIG11bHRpV2Vla1BpY2tlckNvbmZpZzogSVdlZWtDYWxlbmRhcjtcclxuXHJcbiAgdGFibGVDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHRvdGFsUm93Q29sdW1uczogc3RyaW5nW10gPSBudWxsO1xyXG4gIGJpbmRWYWx1ZUZ1bmNDYWxsZWQ6IGJvb2xlYW47XHJcblxyXG4gIGhpZXJhcmNoeVRvb2x0aXA6IHsgb3BlbjogKCkgPT4gdm9pZDsgY2xvc2U6ICgpID0+IHZvaWQ7IH07XHJcbiAgc2VsbGVyR3JvdXBIaWVyYXJjaHk6IFJhdGluZ1NlbGxlckdyb3VwSGllcmFyY2h5W107XHJcbiAgc2hvd0ZpbHRlclRvb2x0aXBUYWJzOiBib29sZWFuOyAvL0NoYW5nZSB0aGUgTmFtZVxyXG5cclxuICBpc1Njcm9sbGVkTGVmdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHJvd0JvcmRlcldpZHRoOiBudW1iZXIgPSAyO1xyXG5cclxuICBzYW1lVG9vbHRpcENsaWNrZWQ6IGJvb2xlYW47XHJcbiAgbWFyZ2luVG9wOiBzdHJpbmcgPSBcIlwiO1xyXG4gIEBWaWV3Q2hpbGRyZW4oJ3RhYmxlSGVhZGVyJykgdmlld0NoaWxkVGFibGVIZWFkZXJzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcblxyXG4gIGlzRGlmZmVyZW5jZUxlc3NUaGFuMjVQZXJjZW50OiBib29sZWFuO1xyXG4gIHN0YXJ0OiBudW1iZXIgPSAwO1xyXG4gIGVuZDogbnVtYmVyID0gdGhpcy5saW1pdCArIHRoaXMuc3RhcnQ7XHJcbiAgcmVuZGVyZWREYXRhOiBhbnlbXTsgXHJcbiAgc2VsZWN0ZWRJbnZlbnRvcnlJZEZvckRvd25sb2FkOiBudW1iZXI7XHJcbiAgc2VsZWN0ZWREZW1vZ3JhcGhpY0ZvckRvd25sb2FkOiBhbnk7XHJcbiAgc2VsZWN0ZWRSb3dUeXBlRm9yRG93bmxvYWQ6IHN0cmluZztcclxuICBoZWlnaHRPZkNoZWNrYm94VG9vbHRpcEZpbHRlcjogbnVtYmVyO1xyXG4gIGlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBzZWxlY3RlZFN0YXJyZWRPcmRlcklkOiBzdHJpbmc7XHJcblxyXG4gIHRleHRBY3Rpb25Ub29sdGlwOiBrZXlWYWx1ZVRvb2x0aXBUeXBlW10gPSBbXTtcclxuICB0b29sdGlwQ29udGFpbmluZ1RhYmxlOiB0YWJsZVRvb2x0aXBUeXBlID0gbnVsbDtcclxuICB0YWJsZUJvdHRvbUJvcmRlckNsYXNzOiBzdHJpbmcgPSBudWxsO1xyXG4gIHNob3dDaGVja2JveGVzRm9yVGltZUZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBhbm5hU29ydFNlcnZpY2U6IEFubmFTb3J0U2VydmljZSxcclxuICAgIHB1YmxpYyBhbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlOiBBbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLFxyXG4gICAgcHVibGljIGFubmFGaWx0ZXJTZXJ2aWNlOiBBbm5hRmlsdGVyU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5zZXRUb29sdGlwUmFkaW9OYW1lcygpO1xyXG4gIH1cclxuICBcclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldE1hcmdpbkxlZnRGb3JGaWx0ZXJJY29uKCk7ICAgIFxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNldEZpbHRlckFsaWdubWVudEJhc2VkT25TY3JlZW5SZXNvbHV0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBkZXRlY3RDaGFuZ2VzKCl7XHJcbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmKGNoYW5nZXMgJiYgY2hhbmdlc1tcImd0RGltZW5zaW9uXCJdICYmIGNoYW5nZXNbXCJndERpbWVuc2lvblwiXS5jdXJyZW50VmFsdWUgJiYgdGhpcy5zZXRUYWJsZUhlaWdodFdoZW5Sb3dTaXplSXNGaXhlZCl7XHJcbiAgICAgIHRoaXMuc2V0VGFibGVIZWlnaHQoKTtcclxuICAgICAgdGhpcy5zZXRUYWJsZUJvdHRvbUJvcmRlcigpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2hvd1NrZWxldG9uTG9hZGluZykge1xyXG4gICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMubnVtYmVyT2ZTa2VsZXRvblJvd3M7XHJcbiAgICAgIHRoaXMucmVuZGVyZWREYXRhID0gdGhpcy5udW1iZXJPZlNrZWxldG9uUm93cztcclxuICAgICAgdGhpcy5pc05vRGF0YVRvRGlzcGxheVN1YmplY3QkLm5leHQoZmFsc2UpO1xyXG4gICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmluaXRpYWxWYWx1ZU1hcCA9IG5ldyBNYXAoKTtcclxuICAgICAgdGhpcy5zZXRUYWJsZUJvdHRvbUJvcmRlcigpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZihjaGFuZ2VzW1wicGVyY2VudERvbmVcIl0gfHwgY2hhbmdlc1tcImRvd25sb2FkSW5Qcm9ncmVzc1wiXSB8fCAoIGNoYW5nZXNbXCJzdGFycmVkSW5Qcm9ncmVzc1wiXSAmJiBjaGFuZ2VzW1wic3RhcnJlZEluUHJvZ3Jlc3NcIl0uY3VycmVudFZhbHVlICE9IHVuZGVmaW5lZCApKXtcclxuICAgICAgLy9ubyB0YXNrIHdpbGwgYmUgcGVyZm9ybWVkXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRJbml0aWFsUm93c0ZvclRhYmxlKCk7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUVuYWJsZUVhY2hDb2x1bW5Ub29sdGlwSWNvbigpO1xyXG4gICAgICB0aGlzLnRhYmxlQ29sdW1ucyA9IHRoaXMudGFibGVIZWFkZXJzLmZpbHRlcih4ID0+IHgudmlzaWJsZSkubWFwKHggPT4geC5oZWFkZXJJbmZvWzBdLm9iamVjdEtleSk7XHJcbiAgICAgIGlmKCAodGhpcy50YWJsZURhdGEgJiYgdGhpcy50YWJsZURhdGEubGVuZ3RoID09IDApIHx8ICh0aGlzLnRhYmxlRGF0YS5sZW5ndGggPT0gMiAmJiB0aGlzLmNoZWNrSWZBbGxUaGVFbGVtZW50c0FyZVplcm8oKSkpe1xyXG4gICAgICAgIHRoaXMudGFibGVEYXRhID0gQXJyYXkoMikuZmlsbCgwKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVkRGF0YSA9IGNsb25lRGVlcCh0aGlzLnRhYmxlRGF0YSk7XHJcbiAgICAgICAgdGhpcy5tYXJnaW5Ub3AgPSAoLSB0aGlzLmd0RGltZW5zaW9uLnJvd0hlaWdodCAtICh0aGlzLmd0RGltZW5zaW9uLnJvd0hlaWdodC8yKSkgKyAncHgnO1xyXG4gICAgICAgIHRoaXMuaXNOb0RhdGFUb0Rpc3BsYXlTdWJqZWN0JC5uZXh0KHRydWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2V7XHJcbiAgICAgICAgdGhpcy5pc05vRGF0YVRvRGlzcGxheVN1YmplY3QkLm5leHQoZmFsc2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNob3dTa2VsZXRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZXRUYWJsZUJvdHRvbUJvcmRlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vc2V0dGluZyB0YWJsZSBjb2x1bW4gaGVyZSBhcyB3ZWxsIGJlY2F1c2Ugd2hpbGUgc2hvd2luZyBza2VsZXRvbiBsb2FkZXIsIHdlIHNob3VsZCBzaG93IHRhYmxlIGhlYWRlcnMuXHJcbiAgICBpZiAoY2hhbmdlc1sndGFibGVIZWFkZXJzJ10gJiYgIWlzRXF1YWwoY2hhbmdlc1sndGFibGVIZWFkZXJzJ10uY3VycmVudFZhbHVlLCBjaGFuZ2VzWyd0YWJsZUhlYWRlcnMnXS5wcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLnRhYmxlQ29sdW1ucyA9IHRoaXMudGFibGVIZWFkZXJzLmZpbHRlcih4ID0+IHgudmlzaWJsZSkubWFwKHggPT4geC5oZWFkZXJJbmZvWzBdLm9iamVjdEtleSk7XHJcbiAgICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZSA9IG5ldyBNYXAoKTtcclxuICAgICAgLy8gdGhpcy5zZXRDb2x1bW5Tb3J0U3RhdGVNYXAoKTtcclxuICAgICAgdGhpcy5zZXRBY3RpdmVTdGF0ZU9iamVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzWyd0b3RhbFJvd0luZm8nXSAmJiBjaGFuZ2VzWyd0b3RhbFJvd0luZm8nXS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgdGhpcy50b3RhbFJvd0NvbHVtbnMgPSB0aGlzLnRvdGFsUm93SW5mby5tYXAoeCA9PiB4LmNvbE5hbWUpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBzZXRGaWx0ZXJBbGlnbm1lbnRCYXNlZE9uU2NyZWVuUmVzb2x1dGlvbigpIHtcclxuICAgIGxldCB2aWV3cG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcclxuICAgIGlmKHZpZXdwb3J0SGVpZ2h0PDc0MCkge1xyXG4gICAgICB0aGlzLmZpbHRlckFsaWdubWVudCA9IFwibGVmdCByaWdodFwiO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyQWxpZ25tZW50ID0gXCJib3R0b20gbGVmdCByaWdodFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGFibGVCb3R0b21Cb3JkZXIoKXtcclxuICAgIGlmKHRoaXMudGFibGVCb3JkZXJCb3R0b21DbGFzc1JlcXVpcmVkICYmIHRoaXMudGFibGVEYXRhICYmIHRoaXMudGFibGVEYXRhLmxlbmd0aCAmJiB0aGlzLm1heGltdW1Sb3dzV2hpY2hDYW5CZVJlbmRlcmVkV2l0aG91dFNjcm9sbCA8IHRoaXMudGFibGVEYXRhLmxlbmd0aCl7XHJcbiAgICAgIHRoaXMudGFibGVCb3R0b21Cb3JkZXJDbGFzcyA9ICdib3R0b20tYm9yZGVyJztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnRhYmxlQm90dG9tQm9yZGVyQ2xhc3MgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tJZkFsbFRoZUVsZW1lbnRzQXJlWmVybygpe1xyXG4gICAgIHJldHVybiAhdGhpcy50YWJsZURhdGEuc29tZShpdGVtID0+IGl0ZW0gIT0gMCk7XHJcbiAgfVxyXG5cclxuICBzZXRUYWJsZUhlaWdodCgpe1xyXG4gICAgbGV0IHZpZXdwb3J0SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xyXG4gICAgbGV0IHJvd0hlaWdodCA9IHRoaXMuZ3REaW1lbnNpb24ucm93SGVpZ2h0O1xyXG4gICAgbGV0IGhlYWRlckhlaWdodCA9IHRoaXMuZ3REaW1lbnNpb24uaGVhZGVySGVpZ2h0O1xyXG4gICAgbGV0IGRhdGFPblRvcEhlaWdodCA9IHRoaXMuZ3REaW1lbnNpb24uZGF0YU9uVG9wSGVpZ2h0O1xyXG4gICAgbGV0IG1hcmdpbkZyb21Cb3R0b20gPSB0aGlzLmd0RGltZW5zaW9uLm1hcmdpbkZyb21Cb3R0b207XHJcbiAgICBsZXQgYWN0dWFsVGFibGVIZWlnaHQ7XHJcblxyXG4gICAgaWYodGhpcy5maXhOdW1iZXJPZlJvd3NGb3JQb3B1cCl7XHJcbiAgICAgIGxldCBtYXhOb09mUm93c1RvRGlzcGxheSA9IHZpZXdwb3J0SGVpZ2h0IDwgNzQwID8gNSA6IDEwO1xyXG4gICAgICB0aGlzLm1heGltdW1Sb3dzV2hpY2hDYW5CZVJlbmRlcmVkV2l0aG91dFNjcm9sbCA9IG1heE5vT2ZSb3dzVG9EaXNwbGF5O1xyXG4gICAgICBhY3R1YWxUYWJsZUhlaWdodCA9IHRoaXMubWF4aW11bVJvd3NXaGljaENhbkJlUmVuZGVyZWRXaXRob3V0U2Nyb2xsICogcm93SGVpZ2h0ICsgaGVhZGVySGVpZ2h0O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBoZWlnaHRMZWZ0Rm9yVGFibGUgPSB2aWV3cG9ydEhlaWdodCAtIGRhdGFPblRvcEhlaWdodCAtIG1hcmdpbkZyb21Cb3R0b207XHJcbiAgICAgIHRoaXMubWF4aW11bVJvd3NXaGljaENhbkJlUmVuZGVyZWRXaXRob3V0U2Nyb2xsID1cclxuICAgICAgTWF0aC5jZWlsKChoZWlnaHRMZWZ0Rm9yVGFibGUgLSBoZWFkZXJIZWlnaHQgLSByb3dIZWlnaHQpIC8gcm93SGVpZ2h0KSArIDE7XHJcbiAgICAgIGFjdHVhbFRhYmxlSGVpZ2h0ID0gdmlld3BvcnRIZWlnaHQgLSBkYXRhT25Ub3BIZWlnaHQgLSBtYXJnaW5Gcm9tQm90dG9tO1xyXG4gICAgfVxyXG4gICBcclxuICAgIC8vIGxldCBhY3R1YWxUYWJsZUhlaWdodCA9IGhlaWdodExlZnRGb3JUYWJsZSAtICgoaGVpZ2h0TGVmdEZvclRhYmxlIC0gaGVhZGVySGVpZ2h0IC0gcm93SGVpZ2h0KSAlIHJvd0hlaWdodCk7XHJcbiAgICBcclxuICAgIHRoaXMuZ3REaW1lbnNpb24udGFibGVIZWlnaHQgPSBgJHthY3R1YWxUYWJsZUhlaWdodH1weGA7XHJcblxyXG4gICAgXHJcbiAgICB0aGlzLm51bWJlck9mU2tlbGV0b25Sb3dzID0gQXJyYXkodGhpcy5tYXhpbXVtUm93c1doaWNoQ2FuQmVSZW5kZXJlZFdpdGhvdXRTY3JvbGwpLmZpbGwoMCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHJldHVybiBpbmRleDtcclxuICB9XHJcblxyXG4gIHNldFRvb2x0aXBSYWRpb05hbWVzKCkge1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwID0gbmV3IE1hcCgpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlN0YXJ0VGltZUZvckZpbHRlclwiLCBcIlN0YXJ0IFRpbWVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiRW5kVGltZUZvckZpbHRlclwiLCBcIkVuZCBUaW1lXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInN0YXJ0VGltZUZvckZpbHRlclwiLCBcIlN0YXJ0IFRpbWVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZW5kVGltZUZvckZpbHRlclwiLCBcIkVuZCBUaW1lXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInN0YXJ0X3RpbWVfZm9yX2ZpbHRlclwiLCBcIlN0YXJ0IFRpbWVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZW5kX3RpbWVfZm9yX2ZpbHRlclwiLCBcIkVuZCBUaW1lXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInByaW1hcnlBRU5hbWVcIiwgXCJQcmltYXJ5IEFFXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJlZ2lvblwiLCBcIlJlZ2lvblwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhZ2VuY3lOYW1lXCIsIFwiQWdlbmN5XCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImxvY2F0aW9uXCIsIFwiTG9jYXRpb25cIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYWR2ZXJ0aXNlck5hbWVcIiwgXCJBZHZlcnRpc2VyXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInByb2R1Y3RDb2RlXCIsIFwiUHJvZHVjdCBDb2RlXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImZsaWdodFN0YXJ0RGF0ZVwiLCBcIlN0YXJ0IERhdGVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZmxpZ2h0RW5kRGF0ZVwiLCBcIkVuZCBEYXRlXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9yZGVySWRBbmRSZXZOdW1iZXJcIiwgXCJTVE4gT3JkZXIjLVJldiNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYWx0ZXJuYXRlT3JkZXJJZFwiLCBcIkFsdC9SZXAgT3JkZXIgI1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJncnBcIiwgXCJHUlBcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiY3BwXCIsIFwiQ1BQXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImltcHNcIiwgXCJJTVBTXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImNwbVwiLCBcIkNQTVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvZmZlcmVkTUdzXCIsIFwiT2ZmZXJlZCBNR1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvdXRzdGFuZGluZ1BFXCIsIFwiTy9TIFBFXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9mZmVyZWRBRFVzXCIsIFwiT2ZmZXJlZCBBRFVzXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInVkRGVmaWNpdFZhbHVlXCIsIFwiTy9TIEF1ZCBEZWx0YVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzdGFydEVuZFRpbWVNdWx0aVwiLCBcIlRpbWVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkVmFsdWVcIiwgXCJCb29rZWRcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkU3BvdHNcIiwgXCJTcG90c1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJVc2VyQ3JlZGl0ZWRWYWx1ZVwiLCBcIlVzZXIgQ3JlZGl0ZWRcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiVXNlclVucmVzb2x2ZWRWYWx1ZVwiLCBcIlVzZXIgVW5yZXNvbHZlZFwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCdXllckFkZGVkVmFsdWVcIiwgXCJCdXllciBBZGRlZFwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCdXllckRlbGV0ZWRWYWx1ZVwiLCBcIkJ1eWVyIERlbGV0ZWRcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwidXNlckNoYW5nZXNcIiwgXCJVc2VyIENoYW5nZXNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYnV5ZXJDaGFuZ2VzXCIsIFwiQnV5ZXIgQ2hhbmdlc1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ1c2VyTUdcIiwgXCJVc2VyIE1HXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInVzZXJBRFVzXCIsIFwiVXNlciBBRFVzXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImludmVudG9yeUNvZGVcIiwgXCJJbnZlbnRvcnkgQ29kZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwcm9ncmFtXCIsIFwiUHJvZ3JhbVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhZ2VuY3lcIiwgXCJBZ2VuY3lcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYWR2ZXJ0aXNlclwiLCBcIkFkdmVydGlzZXJcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwic3RhcnREYXRlXCIsIFwiU3RhcnQgRGF0ZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJlbmREYXRlXCIsIFwiRW5kIERhdGVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZGF0ZVwiLCBcIkRhdGVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicmN2UHJlZW1wdFwiLCBcIiQgTWFkZWdvb2QgUEVzXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9zUHJlZW1wdFwiLCBcIiQgTy9TIFBFc1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyY3ZVbmRlckRseVwiLCBcIlJlY292ZXJlZCBVRFwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvc1VuZGVyRGx5XCIsIFwiTy9zIFVuZGVyIERseVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwcmltYXJ5QWVcIiwgXCJQcmltYXJ5IEFFXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJlZ2lvblwiLCBcIlJlZ2lvblwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyZXZDb2RlMVwiLCBcIlJldiBjb2RlIDFcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib3JkZXJOb1Jldk5vXCIsIFwiU1ROIE9yZGVyIy1SZXYjXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJldkNvZGUyXCIsIFwiUmV2IGNvZGUgMlwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyZXZDb2RlM1wiLCBcIlJldiBjb2RlIDNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkXCIsIFwiJCBCb29rZWRcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwic3BvdHNcIiwgXCJTcG90c1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwb3N0ZWRBdWRQZXJjZW50XCIsIFwiUG9zdGVkICVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicmV2aXNpb25cIiwgXCJSZXZpc2lvblwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJidXllck9yZGVySWRcIiwgXCJBTFQvUkVQIE9yZGVyI1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJkZW1vXCIsXCJEZW1vXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInBvc3RlZEFkdVwiLFwiJCBQb3N0ZWQgQURVc1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzY2hlZHVsZWRBZHVcIixcIiQgU2NoZWR1bGVkIEFEVXNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXVkaWVuY2VEZWZpY2l0XCIsXCIkIE8vUyBBdWRpZW5jZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwb3N0ZWRBdWRQZXJjZW50XCIsXCJQb3N0ZWQgQXVkaWVuY2UgJVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwb3RlbnRpYWxVbml0c1ZhbHVlXCIsXCJQT1QgVW5pdHNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkVW5pdHNWYWx1ZVwiLFwiQm9va2VkIEVxIFVuaXRzXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZEFtb3VudFdpdGhaZXJvUmF0aW5nVmFsdWVcIixcIlRvdGFsICQgQm9va2VkXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZEFtb3VudFBlcmNlbnRhZ2VXaXRoWmVyb1JhdGluZ1ZhbHVlXCIsXCIlIEFnYWluc3QgQWxsIERlbW9zXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZEFtb3VudFdpdGhvdXRaZXJvUmF0aW5nVmFsdWVcIixcIiRCb29rZWQgV2l0aCBJbXBzKOKAmTAwMClcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkQW1vdW50UGVyY2VudGFnZVdpdGhvdXRaZXJvUmF0aW5nVmFsdWVcIiwgXCIlIEFnYWluc3QgQWxsIERlbW9zXCIpO1xyXG4gICAgXHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwidG90YWxCb29rZWRBbW91bnRWYWx1ZVwiLFwiVG90YWwgJEJvb2tlZFwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhdmVyYWdlVW5pdFJhdGVWYWx1ZVwiLFwiIEFVUlwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ0b3RhbEJvb2tlZEFtb3VudFdpdGhSYXRpbmdWYWx1ZVwiLCBcIiRCb29rZWQgV2l0aCBSYXRpbmdcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXZlcmFnZVVuaXRSYXRlV2l0aFJhdGluZ1ZhbHVlXCIsIFwiQVVSIFdpdGggUmF0aW5nXCIpO1xyXG4gICAgXHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwidG90YWxCb29rZWRBbW91bnRXaXRoSW1wcmVzc2lvblZhbHVlXCIsIFwiJEJvb2tlZCBXaXRoIElNUFNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXZlcmFnZVVuaXRSYXRlV2l0aEltcHJlc3Npb25WYWx1ZVwiLCBcIkFVUiBXaXRoIElNUFNcIik7XHJcbiAgICBcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRVbml0c1dpdGhSYXRpbmdWYWx1ZVwiLCBcIkJvb2tlZCBVbml0cyBXaXRoIFJhdGluZ1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwb3N0ZWRVbml0c1dpdGhSYXRpbmdWYWx1ZVwiLCBcIlBvc3RlZCBVbml0cyBXaXRoIFJhdGluZ1wiKTtcclxuICAgIFxyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZFVuaXRzV2l0aEltcHJlc3Npb25WYWx1ZVwiLCBcIkJvb2tlZCBVbml0cyBXaXRoIElNUFNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicG9zdGVkVW5pdHNXaXRoSW1wcmVzc2lvblZhbHVlXCIsIFwiUG9zdGVkIFVuaXRzIFdpdGggSU1QU1wiKTtcclxuICAgIFxyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZFJhdGluZ3NcIiwgXCJCb29rZWQgUmF0aW5nXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInBvc3RlZFJhdGluZ3NcIiwgXCJQT1NURUQgUmF0aW5nXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlBvc3RlZFJhdGluZ1wiLCBcIlBvc3RlZCBSVEdcIik7XHJcblxyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZEltcHJlc3Npb25zXCIsIFwiQm9va2VkIElNUFNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicG9zdGVkSW1wcmVzc2lvbnNcIiwgXCJQb3N0ZWQgSU1QU1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJQb3N0ZWRJbXByZXNzaW9uc1wiLCBcIlBvc3RlZCBJTVAoJzAwMClcIik7XHJcbiAgICBcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRBdmVyYWdlUmF0aW5nXCIsIFwiQm9va2VkIEFVIFJhdGluZ1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwb3N0ZWRBdmVyYWdlUmF0aW5nXCIsIFwiUG9zdGVkIEFVIFJhdGluZ1wiKTtcclxuICAgIFxyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZEF2ZXJhZ2VJbXByZXNzaW9uXCIsIFwiQm9va2VkIEFVIElNUFNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicG9zdGVkQXZlcmFnZUltcHJlc3Npb25cIiwgXCJQb3N0ZWQgQVUgSU1QU1wiKTtcclxuICAgIFxyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZENwcFZhbHVlXCIsIFwiQm9va2VkIENQUFwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRFZmZlY3RpdmVDcHBWYWx1ZVwiLCBcIkVmZmVjdGl2ZSBDUFBcIik7XHJcbiAgICBcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRDcG1WYWx1ZVwiLCBcIkJvb2tlZCBDUE1cIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkRWZmZWN0aXZlQ3BtVmFsdWVcIiwgXCJFZmZlY3RpdmUgQ1BNXCIpO1xyXG4gICAgXHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib3JkZXJTb3VyY2VcIixcIk9yZGVyIFJvdXRlXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9yZGVyQ2F0ZWdvcnlcIixcIlJldiBDYXRlZ29yeVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJjYXNoT3JUcmFkZVwiLFwiQy9UXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJldmlzaW9uU3RhcnREYXRlXCIsIFwiUmV2aXNpb24gU3RhcnQgRGF0ZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJuYW1lXCIsIFwibmFtZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyb2xlXCIsIFwicm9sZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzdGF0aW9uQ291bnRcIiwgXCJzdGF0aW9uQ291bnRcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwic3RhdGlvbkxpc3RcIiwgXCJzdGF0aW9uTGlzdFwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhcHByb3ZlZE9uXCIsIFwiQXBwcm92ZWQgT25cIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXBwcm92ZWRCeVwiLCBcIkFwcHJvdmVkIEJ5XCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk9ESW1wc1wiLFwiT0QgSU1QU1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJVREltcHNcIixcIlVEIElNUFNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT0RHcnBcIixcIk9EIEdSUFwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJVREdycFwiLFwiVUQgR1JQXCIpOyBcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ1ZEltcHNQZXJjZW50XCIsXCJVRCAlXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInVkR3JwUGVyY2VudFwiLFwiVUQgR1JQICVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib2RJbXBzUGVyY2VudFwiLFwiT0QgJVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvZEdycFBlcmNlbnRcIixcIk9EIEdSUCAlXCIpO1xyXG5cclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJSZXZpc2lvbk51bWJlclwiLFwiUmV2aXNpb24gI1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJSZXZpc2lvblR5cGVcIixcIlJldmlzaW9uIFR5cGVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiR2VuZXJhdGVkT25cIixcIkdlbmVyYXRlZCBPblwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCb29rZWRWYWx1ZUZvckRpc3BsYXlcIixcIiQgQk9PS0VEXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJvb2tlZFZhbHVlXCIsXCIkIEJvb2tlZFwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCb29rZWRTcG90c1wiLFwiU3BvdHNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQm9va2VkR1JQXCIsXCJHUlBcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQm9va2VkSU1QU1JldlRhYlwiLFwiSU1QUycoMDAwKVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCb29rZWRDUFBcIixcIkNQUFwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCb29rZWRDUE1cIixcIkNQTVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJNR3NWYWx1ZUZvckRpc3BsYXlcIixcIiQgTUdTXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk1Hc1ZhbHVlXCIsXCIkIE1HU1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJBRFVzVmFsdWVGb3JEaXNwbGF5XCIsXCIkIEFEVVNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQURVc1ZhbHVlXCIsXCIkIEFEVVNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQnV5ZXJDaGFuZ2VzVmFsdWVGb3JEaXNwbGF5XCIsXCIkIEJ1eWVyIENoYW5nZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCdXllckNoYW5nZXNWYWx1ZVwiLFwiJCBCdXllciBDaGFuZ2VcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiVXNlckNoYW5nZXNWYWx1ZUZvckRpc3BsYXlcIixcIiQgU2VsbGVyIFVzZXIgQ2hhbmdlXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlVzZXJDaGFuZ2VzVmFsdWVcIixcIiQgU2VsbGVyIFVzZXIgQ2hhbmdlXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlNlbGxlckxpbmVcIixcIlNlbGxlciBMaW5lICNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQnV5ZXJMaW5lXCIsXCJCdXkgTGluZSAjXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlNwb3RTdGF0dXNcIixcIlNwb3QgU3RhdHVzXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkludmVudG9yeUNvZGVcIixcIkludmVudG9yeSBDb2RlXCIpOyBcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCdXllclByb2dyYW1OYW1lXCIsXCJCdXllciBQcm9ncmFtIE5hbWVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiUmV2ZW51ZUNsYXNzXCIsXCJSZXZlbnVlIENsYXNzXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIldlZWtseUFVUlwiLFwiQm9va2VkIEF2Zy4gUmF0ZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCb29rZWRSYXRlXCIsXCJCb29rZWQgUmF0ZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCb29rZWRSVEdcIixcIkJvb2tlZCBSVEdcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQm9va2VkSU1QU1wiLFwiQm9va2VkIElNUCgnMDAwKVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJJTVBTXCIsXCJJTVAoJzAwMClcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQVVSVEdcIixcIkF2ZyBSVEdcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQVVJTVBTXCIsXCJBdmcgSU1QKCcwMDApXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlBvc3RlZFJhdGluZ3NPckltcHJlc3Npb25zXCIsXCJQb3N0ZWQgUlRHXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlNjaGVkdWxlRmxpZ2h0V2Vla1wiLFwiU2NoZWR1bGUgV2Vla1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJTY2hlZHVsZWREYXlcIixcIlNjaGVkdWxlZCBEYXlcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQWlyU3RhdHVzXCIsXCJBaXIgU3RhdHVzXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkFpckRhdGVBbmRUaW1lXCIsXCJBaXIgRGF0ZSAmIFRpbWVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQWlyRGF0ZVwiLCBcIkFpciBEYXRlXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk5vcm1hbGl6ZWRPcmRlcmVkUmF0aW5nXCIsXCJOb3JtYWxpemVkIEJvb2tlZCBSVEdcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiTm9ybWFsaXplZE9yZGVyZWRJbXByZXNzaW9uc1wiLFwiTm9ybWFsaXplZCBCb29rZWQgSU1QKCcwMDApXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk5vcm1hbGl6ZWRQb3N0ZWRSYXRpbmdcIixcIk5vcm1hbGl6ZWQgUG9zdGVkIFJUR1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJOb3JtYWxpemVkUG9zdGVkSW1wcmVzc2lvbnNcIixcIk5vcm1hbGl6ZWQgUG9zdGVkIElNUCgnMDAwKVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJBZElkXCIsXCJBZC1JZFwiKTtcclxuXHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZGlzcGxheWltcHNcIixcIklNUFNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZGlzcGxheUdycFwiLFwiR1JQXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZFNwb3RzRm9yRGlzcGxheVwiLFwiU3BvdHNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZGlzcGxheVNwb3RzXCIsXCJTcG90c1wiKTtcclxuXHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZXN0aW1hdGVOb1wiLCBcIkVzdGltYXRlI1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwcmltYXJ5QnV5ZXJcIiwgXCJQcmltYXJ5IEJ1eWVyXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInByaW1hcnlCdXllck5hbWVcIiwgXCJQcmltYXJ5IEJ1eWVyXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInNlY29uZGFyeUJ1eWVyTmFtZVwiLCBcIlNlY29uZGFyeSBCdXllclwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzZWNvbmRhcnlCdXllclwiLCBcIlNlY29uZGFyeSBCdXllclwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ0aW1lb3V0RGF0ZVwiLCBcIlRpbWVvdXQgRGF0ZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJEaXNwbGF5dFNwb3RTdGF0dXNCSVwiLCBcIlNwb3QgU3RhdHVzXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkxpbmVTcG90XCIsIFwiTGluZS5TcG90XCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkx1cldpbmRvd05hbWVcIiwgXCJQb2xpdGljYWwgV2luZG93XCIpO1xyXG5cclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ1ZFZhbHVlXCIsIFwiJCBVRFwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvZFZhbHVlXCIsIFwiJCBPRFwiKTtcclxuXHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlSW52ZW50b3J5Q29kZVwiLCBcIkludmVudG9yeSBDb2RlXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk90aGVyQXZhaWxhYmxlU3BvdHNUYWJsZUJ1eWVyUHJvZ3JhbU5hbWVcIiwgXCJCdXllciBQcm9ncmFtIE5hbWVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlU3RhcnRUaW1lXCIsIFwiU3RhcnQgVGltZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJPdGhlckF2YWlsYWJsZVNwb3RzVGFibGVFbmRUaW1lXCIsIFwiRW5kIFRpbWVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlV2Vla2x5QVVSXCIsIFwiQm9va2VkIEF2Zy4gUmF0ZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJPdGhlckF2YWlsYWJsZVNwb3RzVGFibGVEaXNwbGF5UmV2ZW51ZUNsYXNzXCIsIFwiUmV2IENsYXNzXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk90aGVyQXZhaWxhYmxlU3BvdHNUYWJsZUFjdHVhbFdlZWtTdGFydERhdGVcIiwgXCJXZWVrXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk90aGVyQXZhaWxhYmxlU3BvdHNUYWJsZVdlZWtEYXlcIiwgXCJEYXlcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlRGlzcGxheUxlbmd0aFwiLCBcIkxlbmd0aFwiKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdE9yVW5zZWxlY3RDaGVja2JveChyb3dEYXRhOiBhbnksIGNvbHVtbktleXM6IGFueSwgaXNDaGVja2JveFNlbGVjdGVkOiBhbnkpIHtcclxuICAgIHJvd0RhdGFbY29sdW1uS2V5c10gPSAhcm93RGF0YVtjb2x1bW5LZXlzXTtcclxuICAgIHRoaXMudG9nZ2xlQ2hlY2tib3guZW1pdCh7IHJvd0RhdGEsIGNvbHVtbktleXMsIGlzQ2hlY2tib3hTZWxlY3RlZCB9KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdE9yVW5zZWxlY3RSYWRpb2JveChyb3dEYXRhOiBhbnksIGNvbHVtbktleXM6IGFueSwgaXNDaGVja2JveFNlbGVjdGVkOiBib29sZWFuKSB7XHJcbiAgICBpZihyb3dEYXRhW2NvbHVtbktleXNdID09IGlzQ2hlY2tib3hTZWxlY3RlZCkgcmV0dXJuO1xyXG4gICAgcm93RGF0YVtjb2x1bW5LZXlzXSA9IGlzQ2hlY2tib3hTZWxlY3RlZDtcclxuICAgIHRoaXMudG9nZ2xlQ2hlY2tib3guZW1pdCh7IHJvd0RhdGEsIGNvbHVtbktleXMsIGlzQ2hlY2tib3hTZWxlY3RlZCB9KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdFVuc2VsZWN0QWxsUm93cygpIHtcclxuICAgIHRoaXMudG9nZ2xlSGVhZGVyQ2hlY2tib3guZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0VW5zZWxlY3RSb3cocm93RGF0YTogYW55KSB7XHJcbiAgICB0aGlzLnRvZ2dsZVJvd0NoZWNrYm94LmVtaXQocm93RGF0YSk7XHJcbiAgfVxyXG5cclxuICB1bmRvQ3JlZGl0ZWRTcG90KGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy51bmRvSWNvbkNsaWNrZWQuZW1pdCh7IGRhdGEsIG1nT3JDcmVkaXQ6IFwiQ3JlZGl0XCIgfSk7XHJcbiAgfVxyXG5cclxuICB1bmRvTWdTcG90KGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy51bmRvSWNvbkNsaWNrZWQuZW1pdCh7IGRhdGEsIG1nT3JDcmVkaXQ6IFwiTWFrZUdvb2RcIiB9KTtcclxuICB9XHJcblxyXG4gIC8vU29ydCBhbmQgRmlsdGVyIExvZ2ljIGJlZ2lucyFcclxuICBjbG9zZVRvb2x0aXAoKSB7XHJcblxyXG4gICAgaWYgKHRoaXMudG9vbHRpcCAmJiB0aGlzLnRvb2x0aXAuaXNPcGVuKCkpIHtcclxuICAgICAgdGhpcy50b29sdGlwLmNsb3NlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xyXG4gICAgaWYgKCF0aGlzLmJpbmRWYWx1ZUZ1bmNDYWxsZWQpIHtcclxuICAgICAgdGhpcy5jb2x1bW5GaWx0ZXJDbG9zZWQuZW1pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNUb29sdGlwQWN0aXZlKGhlYWRlcjogYW55W10pIHtcclxuICAgIHJldHVybiB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmlzVG9vbHRpcEFjdGl2ZShoZWFkZXIsdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlKTtcclxuICB9XHJcblxyXG4gIGJpbmRUaGVWYWx1ZVRvVG9vbFRpcCh0b29sdGlwOiBhbnksIGhlYWRlcjogSUhlYWRlckluZm8pIHtcclxuXHJcbiAgICB0aGlzLmJpbmRWYWx1ZUZ1bmNDYWxsZWQgPSB0cnVlO1xyXG4gICAgLy8gaWYgc2FtZSB0b29sdGlwIG9wZW5lZCBjbG9zZSBpdFxyXG4gICAgaWYgKHRvb2x0aXAgPT0gdGhpcy50b29sdGlwKSB7XHJcbiAgICAgIHRoaXMuYmluZFZhbHVlRnVuY0NhbGxlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNsb3NlVG9vbHRpcCgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBlbmFibGVkSGVhZGVyczogYW55W10gPSBbXTtcclxuICAgICAgdGhpcy5jaGVja0lmVW5pcXVlVmFsdWVQcmVzZW50Rm9yVGhlSGVhZGVyKGhlYWRlcixlbmFibGVkSGVhZGVycyk7XHJcbiAgICAgIHRoaXMub3BlblRvb2x0aXAodG9vbHRpcCwgZW5hYmxlZEhlYWRlcnMsaGVhZGVyKTtcclxuXHJcbiAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDE1MDAgJiYgd2luZG93LmlubmVySGVpZ2h0IDwgNzY4ICYmICF0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNsaWRlclNldC5oYXMoaGVhZGVyLmZpbHRlclNvcnRPYmplY3RLZXlzWzBdKSkge1xyXG4gICAgICAgIHRoaXMuY29sdW1uRmlsdGVyT3BlbmVkLmVtaXQoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zaG93Q2hlY2tib3hlc0ZvclRpbWVGaWx0ZXIgPSB0aGlzLmd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gJ1NQT1RERVRBSUxTJyB8fCB0aGlzLmd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gJ0VYQ0xVREVJTlZFTlRPUllQT1BVUCcgfHwgdGhpcy5ndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09ICdSQVRJTkcnO1xyXG4gICAgICB0aGlzLnNob3dGaWx0ZXJUb29sdGlwVGFicyA9IGhlYWRlci5maWx0ZXJTb3J0T2JqZWN0S2V5cy5sZW5ndGggPiAxO1xyXG4gICAgICB0aGlzLmJpbmRWYWx1ZUZ1bmNDYWxsZWQgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrSWZVbmlxdWVWYWx1ZVByZXNlbnRGb3JUaGVIZWFkZXIoaGVhZGVyOiBJSGVhZGVySW5mbywgZW5hYmxlZEhlYWRlcnM6IGFueVtdKXtcclxuICAgIGhlYWRlci5maWx0ZXJTb3J0T2JqZWN0S2V5cy5mb3JFYWNoKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgbGV0IGRhdGFUb0NoZWNrID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5nZXRGaWx0ZXJPcHRpb25zRGF0YSh0aGlzLnRhYmxlRGF0YSwgdGhpcy5jbG9uZWRUYWJsZURhdGEsIGl0ZW0pO1xyXG4gICAgICBpZihpdGVtID09IFwicGVyaW9kXCIpe1xyXG4gICAgICAgICAgbGV0IHVuaXFTdGFydERhdGUgPSB1bmlxKGRhdGFUb0NoZWNrLm1hcCgodTogeyBbeDogc3RyaW5nXTogYW55OyB9KSA9PiB1W1wic3RhcnREYXRlXCJdKSk7XHJcbiAgICAgICAgICBsZXQgdW5pcUVuZERhdGUgPSB1bmlxKGRhdGFUb0NoZWNrLm1hcCgodTp7IFt4OiBzdHJpbmddOiBhbnk7IH0pID0+IHVbXCJlbmREYXRlXCJdKSk7XHJcbiAgICAgICAgICBpZih1bmlxU3RhcnREYXRlLmxlbmd0aCA+IDEgfHwgdW5pcUVuZERhdGUubGVuZ3RoID4gMSB8fCB0aGlzLmlzVG9vbHRpcEFjdGl2ZShbaXRlbV0pKXtcclxuICAgICAgICAgICAgZW5hYmxlZEhlYWRlcnMucHVzaChpdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgZWxzZXtcclxuICAgICAgICAgIGxldCB2YWx1ZXMgPSBkYXRhVG9DaGVjay5tYXAoKHU6IHsgW3g6IHN0cmluZ106IGFueTsgfSkgPT4gdVtpdGVtXSk7XHJcbiAgICAgICAgLy8gaWYgbGFzdCBhcHBsaWVkIGZpbHRlciBpcyB0aGlzIGhlYWRlciwgcHVzaCBpdCBhbG9zIGFzIGVuYWJsZWRIZWFkZXJcclxuICAgICAgICBsZXQgYWN0aXZlQW5kTGFzdGx5QXBwbGllZEhlYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIGlmKHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuYXBwbGllZEZpbHRlcnNBcnJheS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmFwcGxpZWRGaWx0ZXJzQXJyYXlbdGhpcy5hbm5hRmlsdGVyU2VydmljZS5hcHBsaWVkRmlsdGVyc0FycmF5Lmxlbmd0aC0xXSA9PSBpdGVtKXtcclxuICAgICAgICAgICAgYWN0aXZlQW5kTGFzdGx5QXBwbGllZEhlYWRlciA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgaWYoaGVhZGVyLmZpbHRlciA9PSBcIkNIRUNLQk9YXCIgJiYgKHVuaXEodmFsdWVzKS5maWx0ZXIobiA9PiBuIT1udWxsKS5sZW5ndGggPiAxIHx8IGFjdGl2ZUFuZExhc3RseUFwcGxpZWRIZWFkZXIpKXtcclxuICAgICAgICAgICAgZW5hYmxlZEhlYWRlcnMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZihoZWFkZXIuZmlsdGVyICE9IFwiQ0hFQ0tCT1hcIiAmJiAodW5pcSh2YWx1ZXMpLmZpbHRlcihuID0+IG4hPW51bGwgJiYgbiE9XCItXCIpLmxlbmd0aCA+IDEgfHwgYWN0aXZlQW5kTGFzdGx5QXBwbGllZEhlYWRlcikpe1xyXG4gICAgICAgICAgZW5hYmxlZEhlYWRlcnMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9wZW5Ub29sdGlwKHRvb2x0aXA6IGFueSxoZWFkZXI6IGFueSwgY29sdW1uSGVhZGVyOiBJSGVhZGVySW5mbykge1xyXG4gICAgdGhpcy5jbG9zZVRvb2x0aXAoKTtcclxuICAgIHRoaXMudG9vbHRpcCA9IHRvb2x0aXA7XHJcbiAgICB0aGlzLnRvb2x0aXAub3BlbigpO1xyXG4gICAgLy9jb252ZXJ0IGtleSBpbnRvIHRoZSBoZWFkZXJcclxuICAgIHRoaXMuZmlsdGVyVGFiT2JqZWN0cyA9IGhlYWRlci5tYXAoKGtleTogc3RyaW5nLGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgbGV0IHZhbHVlID0gdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLmhhcyhrZXkpXHJcbiAgICAgICAgPyB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuZ2V0KGtleSlcclxuICAgICAgICA6IGtleTsgLy9jaGFuZ2UgdG8gZGlzcGxheSBuYW1lXHJcbiAgICAgIHJldHVybiBuZXcgcmFkaW9CdXR0b25Nb2RlbChrZXksIHZhbHVlLCBjb2x1bW5IZWFkZXIuaXNTb3J0UmVxdWlyZWRbaW5kZXhdLCBjb2x1bW5IZWFkZXIuaXNGaWx0ZXJSZXF1aXJlZFtpbmRleF0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlRW5hYmxlRWFjaENvbHVtblRvb2x0aXBJY29uKCkge1xyXG4gICAgdGhpcy50YWJsZUhlYWRlcnMuZm9yRWFjaChoZWFkZXIgPT4ge1xyXG4gICAgICBcclxuICAgICAgaGVhZGVyLmhlYWRlckluZm8uZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpZiAoaXRlbS5zaG93VG9vbHRpcEljb24pIHtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgbGV0IHZhbHVlcyA9IFtdO1xyXG4gICAgICAgICAgaXRlbS5kaXNhYmxlVG9vbHRpcEljb24gPSB0cnVlO1xyXG5cclxuICAgICAgICAgIGl0ZW0uZmlsdGVyU29ydE9iamVjdEtleXMuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgbGV0IGxhdGVzdEZpbHRlcnMgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmFwcGxpZWRGaWx0ZXJzQXJyYXk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZihsYXRlc3RGaWx0ZXJzLmxlbmd0aCA+IDAgJiYgaXRlbS5kaXNhYmxlVG9vbHRpcEljb24gJiYgbGF0ZXN0RmlsdGVyc1tsYXRlc3RGaWx0ZXJzLmxlbmd0aCAtIDFdID09IGtleSl7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmRpc2FibGVUb29sdGlwSWNvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9IFxyXG5cclxuICAgICAgICAgICAgaWYoaXRlbS5kaXNhYmxlVG9vbHRpcEljb24pe1xyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIGlmKGtleSA9PSBcInBlcmlvZFwiKXtcclxuICAgICAgICAgICAgICAgIGxldCB1bmlxU3RhcnREYXRlID0gdW5pcSh0aGlzLnRhYmxlRGF0YS5tYXAoKHU6IHsgW3g6IHN0cmluZ106IGFueTsgfSkgPT4gdVtcInN0YXJ0RGF0ZVwiXSkpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHVuaXFFbmREYXRlID0gdW5pcSh0aGlzLnRhYmxlRGF0YS5tYXAoKHU6IHsgW3g6IHN0cmluZ106IGFueTsgfSkgPT4gdVtcImVuZERhdGVcIl0pKTtcclxuICBcclxuICAgICAgICAgICAgICAgIGl0ZW0uZGlzYWJsZVRvb2x0aXBJY29uID0gKHVuaXFTdGFydERhdGUubGVuZ3RoID4gMSB8fCB1bmlxRW5kRGF0ZS5sZW5ndGggPiAxKSA/IGZhbHNlIDogdHJ1ZTsgXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZXMgPSB0aGlzLnRhYmxlRGF0YS5tYXAoKHU6IHsgW3g6IHN0cmluZ106IGFueTsgfSkgPT4gdVtrZXldKTtcclxuICAgICAgICAgICAgICAgIGlmKCAoaXRlbS5maWx0ZXIgPT0gXCJDSEVDS0JPWFwiICYmIHVuaXEodmFsdWVzKS5maWx0ZXIobiA9PiBuIT1udWxsKS5sZW5ndGggPiAxKSB8fCAoaXRlbS5maWx0ZXIgIT0gXCJDSEVDS0JPWFwiICYmIHVuaXEodmFsdWVzKS5maWx0ZXIobiA9PiBuIT1udWxsICYmIG4hPVwiLVwiKS5sZW5ndGggPiAxKSl7XHJcbiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICBpdGVtLmRpc2FibGVUb29sdGlwSWNvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICBcclxuICB9XHJcblxyXG4gIHNldE1hcmdpbkxlZnRGb3JGaWx0ZXJJY29uKCl7XHJcbiAgICBsZXQgZWxlbWVudEFyciA9IHRoaXMudmlld0NoaWxkVGFibGVIZWFkZXJzLnRvQXJyYXkoKTtcclxuICAgIGVsZW1lbnRBcnIuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBsZXQgY2hpbGREaXZFbGVtZW50cyA9IGl0ZW0ubmF0aXZlRWxlbWVudC5jaGlsZHJlbjtcclxuICAgICAgXHJcbiAgICAgIGlmIChjaGlsZERpdkVsZW1lbnRzLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgbGV0IGZpcnN0UGFyYWdyYXBoV2lkdGggPSBjaGlsZERpdkVsZW1lbnRzWzBdLmNoaWxkcmVuWzBdO1xyXG4gICAgICAgIGxldCBzZWNvbmRQYXJhZ3JhcGhXaWR0aCA9IGNoaWxkRGl2RWxlbWVudHNbMV0uY2hpbGRyZW5bMF07XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoZmlyc3RQYXJhZ3JhcGhXaWR0aD8ub2Zmc2V0V2lkdGggPiBzZWNvbmRQYXJhZ3JhcGhXaWR0aC5vZmZzZXRXaWR0aCl7XHJcbiAgICAgICAgICBsZXQgZGlmZiA9IGZpcnN0UGFyYWdyYXBoV2lkdGg/Lm9mZnNldFdpZHRoIC0gc2Vjb25kUGFyYWdyYXBoV2lkdGgub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICBpZihjaGlsZERpdkVsZW1lbnRzWzBdLmNoaWxkcmVuLmxlbmd0aCA9PSAyKXtcclxuICAgICAgICAgICAgY2hpbGREaXZFbGVtZW50c1swXS5jaGlsZHJlblsxXS5zdHlsZS5tYXJnaW5MZWZ0ID0gNCArICdweCc7XHJcbiAgICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgICBpZihjaGlsZERpdkVsZW1lbnRzWzFdLmNoaWxkcmVuLmxlbmd0aCA9PSAyKXtcclxuXHJcbiAgICAgICAgICAgIGNoaWxkRGl2RWxlbWVudHNbMV0uY2hpbGRyZW5bMV0uc3R5bGUubWFyZ2luTGVmdCA9IGRpZmYgKyA0ICsgJ3B4JztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgIGxldCBkaWZmID0gc2Vjb25kUGFyYWdyYXBoV2lkdGg/Lm9mZnNldFdpZHRoIC0gZmlyc3RQYXJhZ3JhcGhXaWR0aD8ub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICBpZihjaGlsZERpdkVsZW1lbnRzWzBdLmNoaWxkcmVuLmxlbmd0aCA9PSAyKXtcclxuICAgICAgICAgICAgY2hpbGREaXZFbGVtZW50c1swXS5jaGlsZHJlblsxXS5zdHlsZS5tYXJnaW5MZWZ0ID0gZGlmZiArIDQgKyAncHgnO1xyXG4gICAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgICAgaWYoY2hpbGREaXZFbGVtZW50c1sxXS5jaGlsZHJlbi5sZW5ndGggPT0gMil7XHJcblxyXG4gICAgICAgICAgICBjaGlsZERpdkVsZW1lbnRzWzFdLmNoaWxkcmVuWzFdLnN0eWxlLm1hcmdpbkxlZnQgPSA0ICsgJ3B4JztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGF0YVJvd0NsaWNrZWQocm93RGF0YTogYW55KSB7XHJcbiAgICB0aGlzLnJvd0NsaWNrZWQuZW1pdChyb3dEYXRhKTtcclxuICB9XHJcblxyXG4gIHJhZGlvQnV0dG9uQ2xpY2tlZChkYXRhOiBhbnksIGFjdGlvbjogc3RyaW5nLCBpc0Rpc2FibGVkOiBib29sZWFuKSB7XHJcbiAgICBpZiAoIWlzRGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5yYWRpb0J1dHRvblNlbGVjdGVkLmVtaXQoeyBkYXRhLCBhY3Rpb24gfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBiaW5kVGhlVmFsdWVUb1NlbGxlckdyb3VwVG9vbHRpcChzZWxsZXJHcm91cEhpZXJhcmNoeTogUmF0aW5nU2VsbGVyR3JvdXBIaWVyYXJjaHlbXSwgdG9vbHRpcDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5oaWVyYXJjaHlUb29sdGlwICYmIHRoaXMuaGllcmFyY2h5VG9vbHRpcC5vcGVuKSB7XHJcbiAgICAgIHRoaXMuaGllcmFyY2h5VG9vbHRpcC5jbG9zZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxsZXJHcm91cEhpZXJhcmNoeSA9IHNlbGxlckdyb3VwSGllcmFyY2h5O1xyXG4gICAgdGhpcy5oaWVyYXJjaHlUb29sdGlwID0gdG9vbHRpcDtcclxuICAgIHRoaXMuaGllcmFyY2h5VG9vbHRpcC5vcGVuKCk7XHJcbiAgfVxyXG5cclxuICBpY29uQ2xpY2tlZChyb3dEYXRhOiBhbnksaWNvbkNsYXNzOiBzdHJpbmcpe1xyXG4gICAgXHJcbiAgICBpZihcIm9yZGVySWRcIiBpbiByb3dEYXRhICYmIGljb25DbGFzcy5pbmNsdWRlcyhcIm1kaS1zdGFyXCIpICl7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdGFycmVkT3JkZXJJZCA9IHJvd0RhdGEub3JkZXJJZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmd0SWNvbkNsaWNrZWQuZW1pdCh7ZGF0YTogcm93RGF0YSxpY29uQ2xhc3M6IGljb25DbGFzc30pO1xyXG4gIH1cclxuXHJcbiAgc3ZnSWNvbkNsaWNrZWQoZGF0YTogR3RDb2x1bW5JY29uRW1pdHRlZERhdGEpe1xyXG4gICAgdGhpcy5ndFNWR0ljb25DbGlja2VkLmVtaXQoZGF0YSk7XHJcbiAgfVxyXG5cclxuICB0ZXh0QWN0aW9uQ2xpY2tlZChyb3dEYXRhOiBhbnksaWQ6IGFueSwgY29sdW1uSGVhZGVyOiBJSGVhZGVySW5mbyl7XHJcbiAgICB0aGlzLmd0VGV4dEFjdGlvbkNsaWNrZWQuZW1pdCh7ZGF0YTpyb3dEYXRhLCBpZDogaWQsIGNvbHVtbkhlYWRlcjogY29sdW1uSGVhZGVyLGlzSWNvbkNsaWNrZWQ6ZmFsc2V9KTtcclxuICB9XHJcblxyXG4gIGljb25DbGlja2VkT25TdHJpbmdJY29uQWN0aW9uVHlwZShyb3dEYXRhOiBhbnksIGlkOiBhbnksIGNvbHVtbkhlYWRlcjogSUhlYWRlckluZm8pe1xyXG4gICAgdGhpcy5ndFRleHRBY3Rpb25DbGlja2VkLmVtaXQoe2RhdGE6cm93RGF0YSwgaWQ6IGlkLCBjb2x1bW5IZWFkZXI6IGNvbHVtbkhlYWRlcixpc0ljb25DbGlja2VkOnRydWV9KTtcclxuICB9XHJcblxyXG4gIGlubmVySFRNTENlbGxDbGlja2VkKGV2ZW50OiBhbnksIHJvd0RhdGE6IGFueSl7XHJcbiAgICB0aGlzLmd0SW5uZXJIVE1MQ2xpY2tlZC5lbWl0KHtldmVudCwgcm93RGF0YX0pO1xyXG4gIH1cclxuXHJcbiAgdmlld0RldGFpbHNDbGlja2VkKHJvd0RhdGE6IGFueSl7XHJcbiAgICB0aGlzLmd0Vmlld0RldGFpbENsaWNrZWQuZW1pdCh7ZGF0YTpyb3dEYXRhfSk7XHJcbiAgfVxyXG5cclxuICAgIHNldEFjdGl2ZVN0YXRlT2JqZWN0KCl7XHJcbiAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlID0gIXRoaXMuYW5uYUZpbHRlclNlcnZpY2UucmVzZXRGaWx0ZXJTb3J0QWN0aXZlU3RhdHVzIHx8IHRoaXMubXVsdGlwbGVUYWJsZXNQcmVzZW50XHJcbiAgICAgID8gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmVcclxuICAgICAgOiB7fTtcclxuICAgICAgdGhpcy50YWJsZUhlYWRlcnMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLmhlYWRlckluZm8uZm9yRWFjaChoZWFkZXIgPT4ge1xyXG4gICAgICAgICAgICBpZihoZWFkZXIuc2hvd1Rvb2x0aXBJY29uKXtcclxuICAgICAgICAgICAgICBsZXQga2V5ID0gaGVhZGVyLmZpbHRlclNvcnRPYmplY3RLZXlzLmpvaW4oJywnKTtcclxuICAgICAgICAgICAgICBoZWFkZXIuam9pbmVkRmlsdGVyU29ydE9iamVjdEtleXMgPSBrZXk7XHJcbiAgICAgICAgICAgICAgLy8gQU5OQS00MTEzIGZpeFxyXG4gICAgICAgICAgICAgIGlmKHRoaXMuYW5uYUZpbHRlclNlcnZpY2UucmVzZXRGaWx0ZXJTb3J0QWN0aXZlU3RhdHVzKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlW2tleV0gPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5yZXNldEZpbHRlclNvcnRBY3RpdmVTdGF0dXMgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldElzRGlmZmVyZW5jZSh2YWx1ZTogYm9vbGVhbil7XHJcbiAgICAgIHRoaXMuaXNEaWZmZXJlbmNlTGVzc1RoYW4yNVBlcmNlbnQgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXNldEluZGV4KCl7XHJcbiAgICAgIHRoaXMuc3RhcnQgPSAwO1xyXG4gICAgICB0aGlzLmVuZCA9IHRoaXMubGltaXQgKyB0aGlzLnN0YXJ0O1xyXG4gICAgfVxyXG5cclxuICAgIG9uVGFibGVDb250YWluZXJTY3JvbGwoZTogYW55KSB7XHJcbiAgICAgICAgY29uc3QgdGFibGVWaWV3SGVpZ2h0ID0gZS50YXJnZXQub2Zmc2V0SGVpZ2h0OyAvLyB2aWV3cG9ydFxyXG4gICAgICAgIGNvbnN0IHRhYmxlU2Nyb2xsSGVpZ2h0ID0gZS50YXJnZXQuc2Nyb2xsSGVpZ2h0OyAvLyBsZW5ndGggb2YgYWxsIHRhYmxlXHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsTG9jYXRpb24gPSBlLnRhcmdldC5zY3JvbGxUb3A7IC8vIGhvdyBmYXIgdXNlciBzY3JvbGxlZFxyXG5cclxuICAgICAgICB0aGlzLnJlbW92ZVRvb2x0aXBPblNjcm9sbCgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIElmIHRoZSB1c2VyIGhhcyBzY3JvbGxlZCB3aXRoaW4gMTUwcHggb2YgdGhlIGJvdHRvbSwgYWRkIG1vcmUgZGF0YVxyXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IDE1MDtcclxuICAgICAgICBjb25zdCBsaW1pdCA9IHRhYmxlU2Nyb2xsSGVpZ2h0IC0gdGFibGVWaWV3SGVpZ2h0IC0gYnVmZmVyO1xyXG4gICAgICAgIGlmIChzY3JvbGxMb2NhdGlvbiA+IGxpbWl0KSB7XHJcbiAgICAgICAgICAgIGxldCBkYXRhID0gdGhpcy5nZXRUYWJsZURhdGEodGhpcy5zdGFydCwgdGhpcy5lbmQpO1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVkRGF0YSA9IHRoaXMucmVuZGVyZWREYXRhLmNvbmNhdChkYXRhKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVJbmRleCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRhYmxlQ29udGFpbmVyU2Nyb2xsZWQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGFibGVEYXRhKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVEYXRhLmZpbHRlcigodmFsdWUsIGluZGV4KSA9PiBpbmRleCA+PSBzdGFydCAmJiBpbmRleCA8IGVuZCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlSW5kZXgoKSB7XHJcbiAgICAgICAgdGhpcy5zdGFydCA9IHRoaXMuZW5kO1xyXG4gICAgICAgIHRoaXMuZW5kID0gdGhpcy5saW1pdCArIHRoaXMuc3RhcnQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SW5pdGlhbFJvd3NGb3JUYWJsZSgpe1xyXG4gICAgICB0aGlzLnJlc2V0SW5kZXgoKTtcclxuICAgICAgdGhpcy5yZW5kZXJlZERhdGEgPSB0aGlzLmdldFRhYmxlRGF0YSh0aGlzLnN0YXJ0LHRoaXMuZW5kKTtcclxuICAgICAgdGhpcy51cGRhdGVJbmRleCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNwb3REZXRhaWxzRG93bmxvYWRDbGlja2VkKHBhcmVudENoaWxkT3JUb3RhbFJvdzogXCJEQVRBUk9XXCIgfCBcIlRPVEFMUk9XXCIsIHJvd2RhdGE/OiBhbnkgKSB7XHJcbiAgICAgIGlmKHJvd2RhdGEpe1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbnZlbnRvcnlJZEZvckRvd25sb2FkID0gcm93ZGF0YS5pbnZlbnRvcnlDb2RlSWQ7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERlbW9ncmFwaGljRm9yRG93bmxvYWQgPSByb3dkYXRhLmRlbW9ncmFwaGljO1xyXG4gICAgICB9IGVsc2V7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEludmVudG9yeUlkRm9yRG93bmxvYWQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREZW1vZ3JhcGhpY0ZvckRvd25sb2FkID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93VHlwZUZvckRvd25sb2FkID0gcGFyZW50Q2hpbGRPclRvdGFsUm93O1xyXG4gICAgICB0aGlzLmRvd25sb2FkU3BvdERldGFpbHMuZW1pdCh7XHJcbiAgICAgICAgcGFyZW50Q2hpbGRPclRvdGFsUm93OiBwYXJlbnRDaGlsZE9yVG90YWxSb3csXHJcbiAgICAgICAgaW52ZW50b3J5Q29kZUlkOiB0aGlzLnNlbGVjdGVkSW52ZW50b3J5SWRGb3JEb3dubG9hZCxcclxuICAgICAgICBkZW1vZ3JhcGhpYzogdGhpcy5zZWxlY3RlZERlbW9ncmFwaGljRm9yRG93bmxvYWR9KVxyXG4gIH1cclxuXHJcbiAgdGFibGVDb250YWluZXJTY3JvbGxlZChldmVudDogYW55KXtcclxuICAgICAgdGhpcy5pc1Njcm9sbGVkTGVmdCA9IGV2ZW50LnRhcmdldC5zY3JvbGxMZWZ0ID4gMDtcclxuICAgICAgdGhpcy5yZW1vdmVUb29sdGlwT25TY3JvbGwoKTtcclxuICAgIH1cclxuICBcclxuICBtb3VzZUVudGVyT25TdHJpbmdUZXh0QWN0aW9uVHlwZShyb3dEYXRhOiBhbnksIHRvb2x0aXBLZXk6IHN0cmluZyApe1xyXG4gICAgdGhpcy50ZXh0QWN0aW9uVG9vbHRpcCA9IHJvd0RhdGFbdG9vbHRpcEtleV07IFxyXG4gICAgdGhpcy5ub3RpZmljYXRpb25JY29uSG92ZXIuZW1pdCh7cm93RGF0YTpyb3dEYXRhLCB0eXBlOiBcIm9uLWVudGVyXCJ9KVxyXG4gIH1cclxuXHJcbiAgbW91c2VFbnRlck9uU3RyaW5nVGV4dEFjdGlvblR5cGVDb250YWluaW5nVGFibGUocm93RGF0YTogYW55LCB0b29sdGlwS2V5OiBzdHJpbmcgKXtcclxuICAgIHRoaXMudG9vbHRpcENvbnRhaW5pbmdUYWJsZSA9IHJvd0RhdGFbdG9vbHRpcEtleV07XHJcbiAgfVxyXG5cclxuICBtb3VzZUxlYXZlVGV4dEFjdGlvblR5cGUocm93RGF0YTogYW55KXtcclxuICAgIHRoaXMubm90aWZpY2F0aW9uSWNvbkhvdmVyTGVhdmUuZW1pdCh7cm93RGF0YTpyb3dEYXRhLCB0eXBlOiBcIm9uLWxlYXZlXCJ9KSAgXHJcbiAgfVxyXG5cclxuICBtb3VzZUVudGVyT25UZXh0QWN0aW9uVHlwZShyb3dEYXRhOiBhbnksIHRvb2x0aXBLZXk6IHN0cmluZyApe1xyXG4gICAgdGhpcy50ZXh0QWN0aW9uVG9vbHRpcCA9IHJvd0RhdGFbdG9vbHRpcEtleV07XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrYWJsZURhdGFDbGlja2VkKFJvd2RhdGE6IGFueSwgaWQ6IG51bWJlcil7XHJcbiAgICAgIHRoaXMuY2xpY2thYmxlRGF0YUNsaWNrZWQuZW1pdCh7ZGF0YTogUm93ZGF0YSwgaWQ6IGlkfSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVUb29sdGlwT25TY3JvbGwoKXtcclxuICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInJlbWFya3MtaW5mby10b29sdGlwXCIpO1xyXG4gICAgLy8gY29uc3QgdG9vbHRpcEVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInRvb2x0aXBcIik7XHJcbiAgICBjb25zdCBndFRvb2x0aXAgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwicmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiKTtcclxuICAgIGNvbnN0IHRvb2x0aXBFbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJ0b29sdGlwXCIpO1xyXG5cclxuICAgIHdoaWxlIChlbGVtZW50cyAmJiBlbGVtZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGVsZW1lbnRzWzBdLnJlbW92ZSgpO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKHRvb2x0aXBFbGVtZW50cyAmJiB0b29sdGlwRWxlbWVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0b29sdGlwRWxlbWVudHNbMF0ucmVtb3ZlKCk7XHJcbiAgICAgIHRoaXMudG9vbHRpcCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICB3aGlsZSAoZ3RUb29sdGlwICYmIGd0VG9vbHRpcC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGd0VG9vbHRpcFswXS5yZW1vdmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGljb25DbGlja2VkSW5Ub3RhbFJvdyhjb2xOYW1lOiBzdHJpbmcpe1xyXG4gICAgdGhpcy50b3RhbFJvd0ljb25DbGlja2VkLmVtaXQoY29sTmFtZSk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VzTWFkZUluRWRpdGFibGVJbnB1dEJveChldmVudDogYW55LCBlZGl0ZWRPYmplY3Q6IGFueSwgcGFzdGVFdmVudDogYm9vbGVhbikge1xyXG4gICAgbGV0IGVudGVyZWRWYWx1ZSA9IHBhc3RlRXZlbnQgPyBldmVudC5jbGlwYm9hcmREYXRhLmdldERhdGEoJ3RleHQnKSA6IGV2ZW50LmtleTtcclxuICAgIGlmIChldmVudC5rZXlDb2RlICE9IDggJiYgIShldmVudC5rZXlDb2RlID49IDM3ICYmIGV2ZW50LmtleUNvZGUgPD0gNDApICYmXHJcbiAgICAgICghZWRpdGVkT2JqZWN0Py5hbGxvd1NwZWNpYWxDaGFyYWN0ZXJzICYmICEoL1tgMC05Ll0vLnRlc3QoZW50ZXJlZFZhbHVlKSkgfHxcclxuICAgICAgICAoZWRpdGVkT2JqZWN0LmlzRGVjaW1hbFBvaW50Q2hlY2tSZXF1aXJlZCAmJiBlZGl0ZWRPYmplY3QudmFsdWUuaW5kZXhPZihcIi5cIikgPj0gMFxyXG4gICAgICAgICAgJiYgKChlZGl0ZWRPYmplY3QudmFsdWUubGVuZ3RoIC0gKChlZGl0ZWRPYmplY3QudmFsdWUuaW5kZXhPZihcIi5cIikpICsgMSkpID49IGVkaXRlZE9iamVjdC5tYXhEZWNpbWFsUG9pbnRzQWxsb3dlZCkpKSkge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZWRpdGFibGVJbnB1dFZhbHVlQ2hhbmdlZCggdmFsdWU6IGFueSwgcm93OiBhbnksIGtleUVkaXRlZDogc3RyaW5nKXtcclxuICAgIHRoaXMuZWRpdGFibGVJbnB1dEVkaXRlZC5lbWl0KHtyb3c6cm93LCB2YWx1ZTogdmFsdWUsIGtleUVkaXRlZDoga2V5RWRpdGVkfSk7XHJcbiAgfVxyXG5cclxuICByYWRpb0J1dHRvbkljb25DbGlja2VkKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5yYWRpb0J1dHRvbk1lc3NhZ2VJY29uQ2xpY2tlZC5lbWl0KGRhdGEpXHJcbiAgfVxyXG5cclxuICBmaWx0ZXJBcHBsaWVkKHRhYmxlRGF0YTogYW55W10pe1xyXG4gICAgdGhpcy50YWJsZURhdGEgPSB0YWJsZURhdGE7XHJcbiAgICB0aGlzLnNldEluaXRpYWxSb3dzRm9yVGFibGUoKTtcclxuICAgIHRoaXMuZGlzYWJsZUVuYWJsZUVhY2hDb2x1bW5Ub29sdGlwSWNvbigpO1xyXG4gICAgdGhpcy5maWx0ZXJBcHBsaWVkVG9UYWJsZS5lbWl0KHRhYmxlRGF0YSk7XHJcbiAgICB0aGlzLmNsb3NlVG9vbHRpcCgpO1xyXG4gIH1cclxuXHJcbiAgc29ydGluZ0FwcGxpZWQodGFibGVEYXRhOiBhbnlbXSl7XHJcbiAgICB0aGlzLnRhYmxlRGF0YSA9IHRhYmxlRGF0YTtcclxuICAgIHRoaXMuc2V0SW5pdGlhbFJvd3NGb3JUYWJsZSgpO1xyXG4gICAgdGhpcy5kaXNhYmxlRW5hYmxlRWFjaENvbHVtblRvb2x0aXBJY29uKCk7XHJcbiAgICB0aGlzLnNvcnRpbmdBcHBsaWVkVG9UYWJsZS5lbWl0KHRhYmxlRGF0YSk7XHJcbiAgICB0aGlzLmNsb3NlVG9vbHRpcCgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyIHt7Z3RHZW5lcmFsQ29uZmlnPy50YWJsZU91dGVyQ29udGFpbmVyTmFtZX19IHt7dGFibGVCb3R0b21Cb3JkZXJDbGFzc319XCJcclxuICAgIFtuZ0NsYXNzXT1cInsgJ3Njcm9sbC1sZWZ0LXNoYWRvdy1lZmZlY3QnOiBpc1Njcm9sbGVkTGVmdCwgJ2NsaWNrYWJsZS1yb3cnOiBjbGlja2FibGVSb3csICduby1kYXRhLXRhYmxlJzogKGlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQgfCBhc3luYykgfVwiXHJcbiAgICAoc2Nyb2xsKT1cIm9uVGFibGVDb250YWluZXJTY3JvbGwoJGV2ZW50KVwiPlxyXG4gICAgPGRpdiBbY2xhc3NdPVwiZ3RHZW5lcmFsQ29uZmlnLnRhYmxlQ29udGFpbmVyTmFtZVwiIGNsYXNzPVwiaG9yaXpvbnRhbC1zY3JvbGwtZm9yLXRhYmxlLWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgaGVpZ2h0OlxyXG4gICAgICAgICAgICAgICAgdGFibGVEYXRhLmxlbmd0aCA8IG1heGltdW1Sb3dzV2hpY2hDYW5CZVJlbmRlcmVkV2l0aG91dFNjcm9sbFxyXG4gICAgICAgICAgICAgICAgICAgID8gJ2NhbGMoJyArXHJcbiAgICAgICAgICAgICAgICAgICAgKChndERpbWVuc2lvbi5yb3dIZWlnaHQpICogdGFibGVEYXRhLmxlbmd0aCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICghdGFibGVEYXRhLmxlbmd0aCB8fCAhZ3RHZW5lcmFsQ29uZmlnLnRvdGFsUm93XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGd0RGltZW5zaW9uLmhlYWRlckhlaWdodFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBndERpbWVuc2lvbi5oZWFkZXJIZWlnaHQgKyBndERpbWVuc2lvbi5yb3dIZWlnaHQpKSArXHJcbiAgICAgICAgICAgICAgICAgICAgJ3B4KSdcclxuICAgICAgICAgICAgICAgICAgICA6IGd0RGltZW5zaW9uLnRhYmxlSGVpZ2h0XHJcbiAgICAgICAgfVwiPlxyXG4gICAgICAgIDx0YWJsZSBjbGFzcz1cImd0XCIgW25nQ2xhc3NdPVwidGFibGVDbGFzc1wiIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJyZW5kZXJlZERhdGFcIj5cclxuICAgICAgICAgICAgPHRyIGNsYXNzPVwiaGVhZGVyLXJvd1wiIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJ0YWJsZUNvbHVtbnM7IHN0aWNreTogdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImd0RGltZW5zaW9uLmhlYWRlckhlaWdodFwiPjwvdHI+XHJcbiAgICAgICAgICAgIDx0ciBjbGFzcz1cInRvdGFsLXJvd1wiIG1hdC1oZWFkZXItcm93IFtzdHlsZS5oZWlnaHQucHhdPVwiZ3REaW1lbnNpb24ucm93SGVpZ2h0XCJcclxuICAgICAgICAgICAgICAgICptYXRIZWFkZXJSb3dEZWY9XCJ0b3RhbFJvd0NvbHVtbnM7IHN0aWNreTogdHJ1ZVwiIFtjbGFzcy5oaWRkZW5dPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd1NrZWxldG9uTG9hZGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICghc2hvd1NrZWxldG9uTG9hZGluZyAmJiAhdGFibGVEYXRhLmxlbmd0aCApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKGlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQgfCBhc3luYykgfHwgXHJcbiAgICAgICAgICAgICAgICAgICAgKCFzaG93U2tlbGV0b25Mb2FkaW5nICYmICFndEdlbmVyYWxDb25maWcudG90YWxSb3cpXHJcbiAgICAgICAgICAgICAgICBcIj48L3RyPlxyXG4gICAgICAgICAgICA8dHIgW2NsYXNzXT1cInJvd0RhdGEuZ3RDbGFzc1wiIFtuZ0NsYXNzXT1cInsnbm8tYm9yZGVyLXRyJzogKGlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQgfCBhc3luYyl9XCIgbWF0LXJvd1xyXG4gICAgICAgICAgICAgICAgKm1hdFJvd0RlZj1cImxldCByb3dEYXRhOyBjb2x1bW5zOiB0YWJsZUNvbHVtbnNcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cImd0RGltZW5zaW9uLnJvd0hlaWdodFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGF0YVJvd0NsaWNrZWQocm93RGF0YSlcIj48L3RyPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBUT1RBTCBST1cgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4uY29sTmFtZVwiICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdG90YWxSb3dJbmZvOyB0cmFja0J5OiB0cmFja0J5Rm5cIj5cclxuICAgICAgICAgICAgICAgIDx0ZCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW4uY29sc3BhblwiIGNsYXNzPVwie3tjb2x1bW4uY2xhc3N9fVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uWydpc0FjdGlvbkNvbHVtbiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhICpuZ0Zvcj1cImxldCBkYXRhIG9mIGNvbHVtbi5hY3Rpb25EYXRhXCIgW2NsYXNzXT1cImRhdGEuY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2thYmxlRGF0YUNsaWNrZWQoe30sIGRhdGEuaWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uWydpc0ljb25Db2x1bW4nXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInt7Y29sdW1uPy5pY29uRGF0YT8uY2xhc3N9fVwiIChjbGljayk9XCJpY29uQ2xpY2tlZEluVG90YWxSb3coY29sdW1uPy5jb2xOYW1lKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uWydpc0FjdGlvbkNvbHVtbiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmcgY2xhc3M9XCJ1cHBlci1sYWJlbFwiPnt7IGNvbHVtbi5kYXRhIH19PC9zdHJvbmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4ubG93ZXJEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi5jb2xOYW1lID09ICd0b3RhbC1wb3RlbnRpYWwtYm9va2VkLXVuaXQnICYmIGd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gJ1JBVElORyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBjb2x1bW5Mb3dlckRhdGFcIiBjbGFzcz1cImNsaWNrYWJsZS1kYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3BvdERldGFpbHNEb3dubG9hZENsaWNrZWQoJ1RPVEFMUk9XJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2Rpc2FibGVkLWNsaWNrYWJsZS1kYXRhJzogZG93bmxvYWRJblByb2dyZXNzIH1cIj57eyBjb2x1bW4ubG93ZXJEYXRhIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBzcG90LWRldGFpbHMtZG93bmxvYWQtaWNvbnNcIj5nZXRfYXBwPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkb3dubG9hZEluUHJvZ3Jlc3MgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzZWxlY3RlZFJvd1R5cGVGb3JEb3dubG9hZCA9PSAnVE9UQUxST1cnIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNpcmN1bGFyUHJvZ3Jlc3NCYXJcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY29sdW1uTG93ZXJEYXRhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibG93ZXItbGFiZWxcIj57eyBjb2x1bW4ubG93ZXJEYXRhIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4udG9vbHRpcE1lc3NhZ2UgJiYgZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCAhPSAnTFVSX1ZJT0xBVElPTlMnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInt7Y29sdW1uLnRvb2x0aXBJY29uQ2xhc3N9fVwiIGNvbnRhaW5lcj1cImJvZHlcIiBbbmdiVG9vbHRpcF09XCJjb2x1bW4udG9vbHRpcE1lc3NhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImd0LXRvdGFsLXJvdy10b29sdGlwXCIgcGxhY2VtZW50PVwiYm90dG9tXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gJ0xVUl9WSU9MQVRJT05TJyAmJiBjb2x1bW4udG9vbHRpcE1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWkgbWRpLWluZm8tb3V0bGluZSBpbmZvLWxhYmVsXCIgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwibHVyVmlvbGF0aW9uVG90YWxSb3dUb29sVGlwXCIgdG9vbHRpcENsYXNzPVwiZ3QtdG90YWwtcm93LXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8IS0tIE1BSU4gUk9XIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uRGVmLmhlYWRlckluZm9bMF0ub2JqZWN0S2V5XCJcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW5EZWYgb2YgdGFibGVIZWFkZXJzOyAgdHJhY2tCeTogdHJhY2tCeUZuXCI+XHJcbiAgICAgICAgICAgICAgICA8dGggI3RhYmxlSGVhZGVyIG5vd3JhcCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgW3N0eWxlLndpZHRoXT1cImNvbHVtbkRlZi53aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXgtMFwiICpuZ0Zvcj1cImxldCBoZWFkZXIgb2YgY29sdW1uRGVmLmhlYWRlckluZm87IGxldCBqID0gaW5kZXg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiaGVhZGVyLnR5cGVPZkhlYWRlckRhdGEgPT09ICdTVFJJTkcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3VwcGVyLWxhYmVsJzogaiA9PT0gMCwgJ2xvd2VyLWxhYmVsJzogaiA9PT0gMSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNrZWxldG9uLWxvYWRlciAqbmdJZj1cImhlYWRlci5uYW1lID09IG51bGxcIiBjb3VudD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGVtZV09XCJ7IGhlaWdodDogJzEwcHgnLCBkaXNwbGF5OiAnYmxvY2snLCB3aWR0aDogY29sdW1uRGVmLndpZHRoLCAnbWF4LXdpZHRoJzonY2FsYygxMDAlIC0gMjBweCknIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNrZWxldG9uLWxvYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIubmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGhlYWRlci5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ2ltcHNJbmZvVG9vbHRpcCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3toZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydmbG9hdCc6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbn1cIiAjdD1cIm5nYlRvb2x0aXBcIiBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJpbXBzSW5mb1Rvb2x0aXBcIiBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdzcG90c0NvbHVtbkVxdWl2YWxpemF0aW9uTWVzc2FnZVRvb2x0aXAnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7aGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnZmxvYXQnOiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb259XCIgY29udGFpbmVyPVwiYm9keVwiICN0PVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiIFtuZ2JUb29sdGlwXT1cInNwb3RzQ29sdW1uRXF1aXZhbGl6YXRpb25NZXNzYWdlVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAndW5kZXJEZWxpdmVyeVRvb2x0aXAnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7aGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnZmxvYXQnOiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb259XCIgY29udGFpbmVyPVwiYm9keVwiICN0PVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiIFtuZ2JUb29sdGlwXT1cInVuZGVyRGVsaXZlcnlUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdvdmVyRGVsaXZlcnlUb29sdGlwJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e2hlYWRlclsndG9vbHRpcCddLmljb25DbGFzc319XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2Zsb2F0JzogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9ufVwiIGNvbnRhaW5lcj1cImJvZHlcIiAjdD1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIiBbbmdiVG9vbHRpcF09XCJvdmVyRGVsaXZlcnlUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdyYXRpbmdJbmZvVG9vbHRpcCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3toZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydmbG9hdCc6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbn1cIiAjdD1cIm5nYlRvb2x0aXBcIiBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJyYXRpbmdJbmZvVG9vbHRpcFwiIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ3JhdGVJbmZvVG9vbHRpcCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3toZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydmbG9hdCc6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbn1cIiAjdD1cIm5nYlRvb2x0aXBcIiBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJyYXRlSW5mb1Rvb2x0aXBcIiBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdvbmdvaW5nUmV2Qm9va2VkQ29sdW1uVG9vbHRpcCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3toZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydmbG9hdCc6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbn1cIiAjdD1cIm5nYlRvb2x0aXBcIiBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJvbmdvaW5nUmV2Qm9va2VkQ29sdW1uVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAnY29tcGxldGVkUmV2Qm9va2VkQ29sdW1uVG9vbHRpcCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3toZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydmbG9hdCc6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbn1cIiAjdD1cIm5nYlRvb2x0aXBcIiBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJjb21wbGV0ZWRSZXZCb29rZWRDb2x1bW5Ub29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdhdmdCb29rZWRSYXRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e2hlYWRlclsndG9vbHRpcCddLmljb25DbGFzc319XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2Zsb2F0JzogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9ufVwiICN0PVwibmdiVG9vbHRpcFwiIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImF2Z0Jvb2tlZFJhdGVcIiBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdhdmdCb29rZWRSdGcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7aGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnZmxvYXQnOiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb259XCIgI3Q9XCJuZ2JUb29sdGlwXCIgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiYXZnQm9va2VkUnRnXCIgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAnYXZnQm9va2VkSW1wcydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3toZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydmbG9hdCc6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbn1cIiAjdD1cIm5nYlRvb2x0aXBcIiBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJhdmdCb29rZWRJbXBzXCIgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ2F1dG9tYXRpb25Ub29sdGlwJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e2hlYWRlclsndG9vbHRpcCddLmljb25DbGFzc319XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2Zsb2F0JzogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9ufVwiICN0PVwibmdiVG9vbHRpcFwiIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImF1dG9tYXRpb25Ub29sdGlwXCIgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ3JlYmF0ZUltcGFjdCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3toZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydmbG9hdCc6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbn1cIiAjdD1cIm5nYlRvb2x0aXBcIiBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJyZWJhdGVJbXBhY3RcIiBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLnR5cGVPZkhlYWRlckRhdGEgPT09ICdDSEVDS0JPWCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZ3RHZW5lcmFsQ29uZmlnLmlzSGVhZGVyQ2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBjdXN0b20tY29sdW1uLWNoZWNrYm94LWNoZWNrZWRcIiAoY2xpY2spPVwic2VsZWN0VW5zZWxlY3RBbGxSb3dzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19ib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWd0R2VuZXJhbENvbmZpZy5pc0hlYWRlckNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgY3VzdG9tLWNvbHVtbi1jaGVja2JveC11bmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2Rpc2FibGUtY2hlY2tib3gnOiBndEdlbmVyYWxDb25maWcuZGlzYWJsZUhlYWRlckNoZWNrYm94IH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RVbnNlbGVjdEFsbFJvd3MoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2JveF9vdXRsaW5lX2JsYW5rXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImd0R2VuZXJhbENvbmZpZy5zaG93QWxsQ29sdW1uRmlsdGVyXCIgY2xhc3M9XCJzb3J0LWZpbHRlci1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIuc2hvd1Rvb2x0aXBJY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBY3RpdmUgdG9vbHRpcCBGdW5jdGlvbmFsaXR5IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIuZmlsdGVyID09PSAnQ0hFQ0tCT1gnXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1kaSBtZGktZmlsdGVyLXZhcmlhbnRcIiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmUgJiYgYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlW2hlYWRlci5qb2luZWRGaWx0ZXJTb3J0T2JqZWN0S2V5c10sICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBoZWFkZXIuZGlzYWJsZVRvb2x0aXBJY29uIHx8IHNob3dTa2VsZXRvbkxvYWRpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIiBbbmdiVG9vbHRpcF09XCJmaWx0ZXJUb29sdGlwXCIgcGxhY2VtZW50PVwie3tmaWx0ZXJBbGlnbm1lbnR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCIgdG9vbHRpcENsYXNzPVwibm9uLWVkaXQtY2hlY2tib3gtdG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiIHRyaWdnZXJzPVwibWFudWFsXCIgI3Q9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJiaW5kVGhlVmFsdWVUb1Rvb2xUaXAodCwgaGVhZGVyKVwiIChoaWRkZW4pPVwiY2xvc2VUb29sdGlwKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIuZmlsdGVyID09PSAnU0xJREVSJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1kaSBtZGktZmlsdGVyLXZhcmlhbnRcIiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmUgJiYgYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlW2hlYWRlci5qb2luZWRGaWx0ZXJTb3J0T2JqZWN0S2V5c10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGhlYWRlci5kaXNhYmxlVG9vbHRpcEljb24gfHwgc2hvd1NrZWxldG9uTG9hZGluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiIFtuZ2JUb29sdGlwXT1cInNsaWRlclRvb2xUaXBcIiBwbGFjZW1lbnQ9XCJib3R0b20gbGVmdC10b3BcIiBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cIm5vbi1lZGl0LXNsaWRlci10b29sdGlwXCIgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIiB0cmlnZ2Vycz1cIm1hbnVhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdDE9XCJuZ2JUb29sdGlwXCIgKGNsaWNrKT1cImJpbmRUaGVWYWx1ZVRvVG9vbFRpcCh0MSwgaGVhZGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlkZGVuKT1cImNsb3NlVG9vbHRpcCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLmZpbHRlciA9PT0gJ0RBVEUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWRpIG1kaS1maWx0ZXItdmFyaWFudFwiIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IGFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZSAmJiBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmVbaGVhZGVyLmpvaW5lZEZpbHRlclNvcnRPYmplY3RLZXlzXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaGVhZGVyLmRpc2FibGVUb29sdGlwSWNvbiB8fCBzaG93U2tlbGV0b25Mb2FkaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgW25nYlRvb2x0aXBdPVwiZGF0ZVBpY2tlclRvb2x0aXBcIiBwbGFjZW1lbnQ9XCJib3R0b20gYXV0b1wiIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwibm9uLWVkaXQtZGF0ZXBpY2tlci10b29sdGlwXCIgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJtYW51YWxcIiAjdDI9XCJuZ2JUb29sdGlwXCIgKGNsaWNrKT1cImJpbmRUaGVWYWx1ZVRvVG9vbFRpcCh0MiwgaGVhZGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlkZGVuKT1cImNsb3NlVG9vbHRpcCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLmZpbHRlciA9PT0gJ1dFRUsnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWRpIG1kaS1maWx0ZXItdmFyaWFudFwiIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IGFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZSAmJiBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmVbaGVhZGVyLmpvaW5lZEZpbHRlclNvcnRPYmplY3RLZXlzXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaGVhZGVyLmRpc2FibGVUb29sdGlwSWNvbiB8fCBzaG93U2tlbGV0b25Mb2FkaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgW25nYlRvb2x0aXBdPVwid2Vla1BpY2tlclRvb2xUaXBcIiBwbGFjZW1lbnQ9XCJib3R0b20gbGVmdC10b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiIFthdXRvQ2xvc2VdPVwiJ291dHNpZGUnXCIgdHJpZ2dlcnM9XCJtYW51YWxcIiAjdDM9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJiaW5kVGhlVmFsdWVUb1Rvb2xUaXAodDMsIGhlYWRlcilcIiAoaGlkZGVuKT1cImNsb3NlVG9vbHRpcCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLmZpbHRlciA9PT0gJ1RJTUUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWRpIG1kaS1maWx0ZXItdmFyaWFudFwiIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IGFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZSAmJiBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmVbaGVhZGVyLmpvaW5lZEZpbHRlclNvcnRPYmplY3RLZXlzXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaGVhZGVyLmRpc2FibGVUb29sdGlwSWNvbiB8fCBzaG93U2tlbGV0b25Mb2FkaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgW25nYlRvb2x0aXBdPVwidGltZUZpbHRlclRvb2xUaXBcIiBwbGFjZW1lbnQ9XCJib3R0b20gbGVmdC10b3AgYXV0b1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCIgdG9vbHRpcENsYXNzPVwibm9uLWVkaXQtdGltZS10b29sdGlwXCIgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJtYW51YWxcIiAjdDQ9XCJuZ2JUb29sdGlwXCIgKGNsaWNrKT1cImJpbmRUaGVWYWx1ZVRvVG9vbFRpcCh0NCwgaGVhZGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlkZGVuKT1cImNsb3NlVG9vbHRpcCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFoZWFkZXIuc2hvd1Rvb2x0aXBJY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJuby1maWx0ZXItc3BhY2VcIj48L3NwYW4+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAnbHVyVmlvbGF0aW9uSW5mb1Rvb2x0aXAnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7aGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnZmxvYXQnOiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb259XCIgI3Q9XCJuZ2JUb29sdGlwXCIgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwibHVyVmlvbGF0aW9uSW5mb1Rvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGg+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbWF0Q2VsbERlZj1cImxldCBST1dfREFUQVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCBbc3R5bGUuYmFja2dyb3VuZF09XCJST1dfREFUQS5iYWNrZ3JvdW5kQ29sb3JcIiBcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cIlJPV19EQVRBLmJvcmRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e1JPV19EQVRBLnJvd0NsYXNzfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvWzBdLm9iamVjdEtleSArICdUZENsYXNzJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnJvd3NwYW5dPVwiUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bMF0ub2JqZWN0S2V5ICsgJ1Jvd3NwYW4nXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaGlkZVNvbWVUZHMgfHwoIGhpZGVTb21lVGRzICYmICFST1dfREFUQVsnaGlkZScgKyBjb2x1bW5EZWYuaGVhZGVySW5mb1swXS5vYmplY3RLZXkgKyAnVGQnXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1za2VsZXRvbi1sb2FkZXIgKm5nSWY9XCJzaG93U2tlbGV0b25Mb2FkaW5nXCIgY291bnQ9XCIxXCIgW3RoZW1lXT1cInsgaGVpZ2h0OiAnMTBweCcsIGRpc3BsYXk6ICdibG9jaycgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25neC1za2VsZXRvbi1sb2FkZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNob3dTa2VsZXRvbkxvYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJsZURhdGEubGVuZ3RoID4gMCAmJiAhKGlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQgfCBhc3luYylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzdWJsaW5lIG9mIGNvbHVtbkRlZi5oZWFkZXJJbmZvOyBsZXQgc3ViTGluZUluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlGblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHNob3dFbGxpcHNpc1RleHRPbkhvdmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS50eXBlT2ZCb2R5RGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidJQ09OJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIiEoc3RhcnJlZEluUHJvZ3Jlc3MgJiYgUk9XX0RBVEEub3JkZXJJZCA9PSBzZWxlY3RlZFN0YXJyZWRPcmRlcklkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiUk9XX0RBVEEuaWNvbkNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpY29uQ2xpY2tlZChST1dfREFUQSxST1dfREFUQS5pY29uQ2xhc3MpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJ7eyBST1dfREFUQS5pY29uVGl0bGVUZXh0IH19XCIgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwiZ3QtaWNvbi1jb2x1bW4tdG9vbHRpcCByZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInN0YXJyZWRJblByb2dyZXNzICYmIFJPV19EQVRBLm9yZGVySWQgPT0gc2VsZWN0ZWRTdGFycmVkT3JkZXJJZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItZm9yLWJ1dHRvbi1kaXJlY3RpdmVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0lDT05fQ0VMTCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmFjdGlvbktleV1cIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImFjdGlvbi5zaG93SWNvblwiIFtjbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJtb3VzZUVudGVyT25TdHJpbmdUZXh0QWN0aW9uVHlwZShST1dfREFUQSwgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS50b29sdGlwS2V5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tIGF1dG9cIiBjb250YWluZXI9XCJib2R5XCIgW2F1dG9DbG9zZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ0ZWFtLXVzZXItdG9vbHRpcCByZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJhY3Rpb24uc2hvd1Rvb2x0aXAgPyB1c2VyTG9nZ2VkSW5EZXRhaWxzIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRleHRBY3Rpb25DbGlja2VkKFJPV19EQVRBLCBhY3Rpb24uaWQsICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVUb29sdGlwXT1cIiFhY3Rpb24uc2hvd1Rvb2x0aXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aW9uLnNob3dPYmplY3RLZXlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV0gfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidIVE1MX1NUUklORydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgW2lubmVySFRNTF09XCJST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImlubmVySFRNTENlbGxDbGlja2VkKCRldmVudCxST1dfREFUQSlcIj48L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidTVkdfSUNPTidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFubmEtY29yZS1hbm5hLWljb24tY29sdW1uIFtjb21wb25lbnROYW1lXT1cImd0R2VuZXJhbENvbmZpZy5jb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFPYmplY3RdPVwiUk9XX0RBVEFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25Ub1Nob3ddPVwiUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25Db2x1bW5JY29uQ2xpY2tlZCk9XCJzdmdJY29uQ2xpY2tlZCgkZXZlbnQpXCI+PC9hbm5hLWNvcmUtYW5uYS1pY29uLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1RFWFRfQUNUSU9OUydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHRleHQgb2YgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5hY3Rpb25LZXldXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwidGV4dC5zaG93VG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRleHRBY3Rpb25DbGlja2VkKFJPV19EQVRBLHRleHQuaWQsIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidGV4dC5pc0Rpc2FibGVkXCIgY2xhc3M9XCJ7e3RleHQuY2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwibW91c2VFbnRlck9uVGV4dEFjdGlvblR5cGUoUk9XX0RBVEEsIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0udG9vbHRpcEtleSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInRleHRBY3Rpb25Ub29sdGlwVGVtcGxhdGVcIiBwbGFjZW1lbnQ9XCJhdXRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJndC1pY29uLWNvbHVtbi10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZXh0Lm5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiF0ZXh0LnNob3dUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidGV4dEFjdGlvbkNsaWNrZWQoUk9XX0RBVEEsdGV4dC5pZCwgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0ZXh0LmlzRGlzYWJsZWRcIiBjbGFzcz1cInt7dGV4dC5jbGFzc319XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t0ZXh0Lm5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInQ0hFQ0tCT1gnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXNhYmxlLWNoZWNrYm94JzogUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5pc0Rpc2FibGVkS2V5XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBjdXN0b20tY29sdW1uLWNoZWNrYm94LWNoZWNrZWRcIiAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RPclVuc2VsZWN0Q2hlY2tib3goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19ib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBjdXN0b20tY29sdW1uLWNoZWNrYm94LXVuY2hlY2tlZFwiIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXNhYmxlLWNoZWNrYm94JzogUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5pc0Rpc2FibGVkS2V5XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0T3JVbnNlbGVjdENoZWNrYm94KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19ib3hfb3V0bGluZV9ibGFua1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0uYWN0aW9uS2V5XVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJhY3Rpb24uc2hvd0ljb25cIiBbY2xhc3NdPVwiYWN0aW9uLmljb25DbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6IGFjdGlvbi5kaXNhYmxlZEljb259XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJtb3VzZUVudGVyT25TdHJpbmdUZXh0QWN0aW9uVHlwZUNvbnRhaW5pbmdUYWJsZShST1dfREFUQSwgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS50b29sdGlwS2V5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tIGF1dG9cIiBjb250YWluZXI9XCJib2R5XCIgW2F1dG9DbG9zZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ0b29sdGlwLWNvbnRhaW5pbmctdGFibGUgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwidG9vbHRpcENvbnRhaW5pbmdUYWJsZVRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0NMSUNLQUJMRV9EQVRBJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSAqbmdGb3I9XCJsZXQgdGV4dCBvZiBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmFjdGlvbktleV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInRleHQuY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2thYmxlRGF0YUNsaWNrZWQoUk9XX0RBVEEsIHRleHQuaWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZXh0Lm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdWJsaW5lLm9iamVjdEtleSA9PSAnZGlzcGxheUJvb2tlZFVuaXRzJyAmJiBndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09ICdSQVRJTkcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2xpY2thYmxlLWRhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNwb3REZXRhaWxzRG93bmxvYWRDbGlja2VkKCdEQVRBUk9XJywgUk9XX0RBVEEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2Rpc2FibGVkLWNsaWNrYWJsZS1kYXRhJzogZG93bmxvYWRJblByb2dyZXNzIH1cIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEuZGlzcGxheUJvb2tlZFVuaXRzfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBzcG90LWRldGFpbHMtZG93bmxvYWQtaWNvbnNcIj5nZXRfYXBwPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRvd25sb2FkSW5Qcm9ncmVzcyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgUk9XX0RBVEEuaW52ZW50b3J5Q29kZUlkID09IHNlbGVjdGVkSW52ZW50b3J5SWRGb3JEb3dubG9hZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgUk9XX0RBVEEuZGVtb2dyYXBoaWMgPT0gc2VsZWN0ZWREZW1vZ3JhcGhpY0ZvckRvd25sb2FkIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2lyY3VsYXJQcm9ncmVzc0JhclwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1NUUklOR19fX0lDT05fT1JfVEVYVF9BQ1RJT04nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5hY3Rpb25LZXldXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiYWN0aW9uLmFkZGl0aW9uYWxUZXh0QmVmb3JlTGlua0NsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIdG1sXT1cImFjdGlvbi5hZGRpdGlvbmFsVGV4dEJlZm9yZUxpbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJ7eyBhY3Rpb24uYWRkaXRpb25hbFRleHRCZWZvcmVMaW5rIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIiBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJndC1pY29uLWNvbHVtbi10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlVG9vbHRpcF09XCIhYWN0aW9uLmVuYWJsZVRvb2x0aXBGb3JBZGRpdGlvbmFsVGV4dFwiPjwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aW9uICYmIGFjdGlvbi50eXBlT2ZEYXRhPT0gJ1NUUklORydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhY3Rpb24uZGF0YSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgW2lkXT1cImFjdGlvbi5pZFwiICpuZ0lmPVwiYWN0aW9uLnNob3dMaW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidGV4dEFjdGlvbkNsaWNrZWQoUk9XX0RBVEEsIGFjdGlvbi5pZCwgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJhY3Rpb24ubGlua0NsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzogYWN0aW9uLmRpc2FibGVkTGlua31cIj57e2FjdGlvbi5kYXRhfX08L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBuZ2JUb29sdGlwPVwie3sgYWN0aW9uLmFkZGl0aW9uYWxUZXh0QWZ0ZXJMaW5rIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIiBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWN0aW9uLmFkZGl0aW9uYWxUZXh0QWZ0ZXJMaW5rQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImd0LWljb24tY29sdW1uLXRvb2x0aXAgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVUb29sdGlwXT1cIiFhY3Rpb24uZW5hYmxlVG9vbHRpcEZvckFkZGl0aW9uYWxBZnRlclRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhY3Rpb24uYWRkaXRpb25hbFRleHRBZnRlckxpbmsgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aW9uLnNob3dUb29sdGlwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGlvbi50b29sdGlwRGF0YS5pbm5lckh0bWxcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiYWN0aW9uLnNob3dJY29uXCIgW2NsYXNzXT1cImFjdGlvbi5pY29uQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6IGFjdGlvbi5kaXNhYmxlZEljb259XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIm1vdXNlRW50ZXJPblN0cmluZ1RleHRBY3Rpb25UeXBlQ29udGFpbmluZ1RhYmxlKFJPV19EQVRBLCBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLnRvb2x0aXBLZXkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBhdXRvXCIgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwidG9vbHRpcC1jb250YWluaW5nLXRhYmxlIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwidG9vbHRpcENvbnRhaW5pbmdUYWJsZVRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFhY3Rpb24udG9vbHRpcERhdGEudG9vbHRpcFRhYmxlQm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImFjdGlvbi5zaG93SWNvblwiIFtjbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOiBhY3Rpb24uZGlzYWJsZWRJY29ufVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaWNvbkNsaWNrZWRPblN0cmluZ0ljb25BY3Rpb25UeXBlKFJPV19EQVRBLCBhY3Rpb24uaWQsIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm1vdXNlTGVhdmVUZXh0QWN0aW9uVHlwZShST1dfREFUQSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwibW91c2VFbnRlck9uU3RyaW5nVGV4dEFjdGlvblR5cGUoUk9XX0RBVEEsIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0udG9vbHRpcEtleSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlbWVudF09XCJhY3Rpb24udG9vbHRpcFBsYWNlbWVudCA/IGFjdGlvbi50b29sdGlwUGxhY2VtZW50IDogJ2JvdHRvbSBhdXRvJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCIgW2F1dG9DbG9zZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInRlYW0tdXNlci10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3Mge3sgYWN0aW9uLnRvb2x0aXBDbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ1c2VyTG9nZ2VkSW5EZXRhaWxzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWFjdGlvbi5zaG93VG9vbHRpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiYWN0aW9uLnNob3dJY29uXCIgW2NsYXNzXT1cImFjdGlvbi5pY29uQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzogYWN0aW9uLmRpc2FibGVkSWNvbn1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaWNvbkNsaWNrZWRPblN0cmluZ0ljb25BY3Rpb25UeXBlKFJPV19EQVRBLCBhY3Rpb24uaWQsICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidTVFJJTkdfT1JfSU5QVVQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV0/LnR5cGUgPT0gJ1NUUklORyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpbnB1dEJveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIdG1sXT1cIlJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XT8udmFsdWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lucHV0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e1JPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XT8ucGxhY2Vob2xkZXJ9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0VsbGlwc2lzVGV4dE9uSG92ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7Uk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldLmNsYXNzTmFtZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJjaGFuZ2VzTWFkZUluRWRpdGFibGVJbnB1dEJveCgkZXZlbnQsUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldLCBmYWxzZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXN0ZSk9XCJjaGFuZ2VzTWFkZUluRWRpdGFibGVJbnB1dEJveCgkZXZlbnQsIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XSwgdHJ1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImVkaXRhYmxlSW5wdXRWYWx1ZUNoYW5nZWQoJGV2ZW50LCBST1dfREFUQSwgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV0udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV0uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsncmVkLWJvcmRlcic6ICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV0uaGFzRXJyb3IgfVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldLnNob3dJY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV0uaWNvblRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImd0LXRvdGFsLXJvdy10b29sdGlwXCIgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7Uk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldLmljb25DbGFzc319XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidIVE1MJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySHRtbF09XCJST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidTSU5HTEVfUkFESU8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGUtY2hlY2tib3gnOiBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmlzRGlzYWJsZWRLZXldXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktcmFkaW9ib3gtbWFya2VkXCIgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1yYWRpb2JveC1ibGFua1wiIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGUtY2hlY2tib3gnOiBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmlzRGlzYWJsZWRLZXldXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0T3JVbnNlbGVjdENoZWNrYm94KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInUkFESU8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgKm5nSWY9XCJST1dfREFUQVsnUmFkaW9CdXR0b25Db25maWcnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJST1dfREFUQVtzdWJsaW5lLm9iamVjdEtleV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlJPV19EQVRBWydSYWRpb0J1dHRvbkNvbmZpZyddWzBdLmlzRGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcmFkaW9CdXR0b24gb2YgUk9XX0RBVEFbJ1JhZGlvQnV0dG9uQ29uZmlnJ107IGxldCBsYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIHZhbHVlPVwie3sgcmFkaW9CdXR0b24udmFsdWUgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IHJhZGlvQnV0dG9uLmNsYXNzIH19XCIgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpb0J1dHRvbkNsaWNrZWQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGlvQnV0dG9uLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbJ1JhZGlvQnV0dG9uQ29uZmlnJ11bMF0uaXNEaXNhYmxlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+e3sgcmFkaW9CdXR0b24ubGFiZWwgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCIge3tyYWRpb0J1dHRvbi5pY29uQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyYWRpb0J1dHRvbkljb25DbGlja2VkKFJPV19EQVRBKVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgKm5nSWY9XCIhbGFzdFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidTVFJJTkdfV0lUSF9UT09MVElQJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0uYWN0aW9uS2V5XVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+IHt7IGFjdGlvbj8uZGF0YVRvRGlzcGxheSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiYWN0aW9uPy5zaG93VG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwidGV4dEFjdGlvblRvb2x0aXBUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwibW91c2VFbnRlck9uU3RyaW5nVGV4dEFjdGlvblR5cGUoUk9XX0RBVEEsIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0udG9vbHRpcEtleSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZW1lbnRdPVwiYWN0aW9uPy50b29sdGlwUG9zaXRpb25cIiBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWN0aW9uPy50b29sdGlwSWNvbkNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJndC1pY29uLWNvbHVtbi10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlVG9vbHRpcF09XCJhY3Rpb24/LmRpc2FibGVUb29sdGlwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgYWN0aW9uPy5kYXRhVG9EaXNwbGF5QWZ0ZXJUb29sdGlwIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3VibGluZS5vYmplY3RLZXkgIT0gJ2Rlc2NyaXB0aW9uJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cInN1YmxpbmUub2JqZWN0S2V5ID09ICdpbnZlbnRvcnlDb2RlJyAmJiBST1dfREFUQVsnaXNTZWxsZXJHcm91cCddICYmIGd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gJ1JBVElORycgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1pIG1kaS1pbmZvLW91dGxpbmUgc2VsbGVyLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInNlbGxlckhpZXJhcmNoeVRvb2x0aXBcIiBwbGFjZW1lbnQ9XCJib3R0b20gYXV0b1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiIFthdXRvQ2xvc2VdPVwidHJ1ZVwiIHRyaWdnZXJzPVwibWFudWFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlkZGVuKT1cImNsb3NlVG9vbHRpcCgpXCIgI2luZm89XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJoaWVyYXJjaHktdG9vbHRpcCByZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJiaW5kVGhlVmFsdWVUb1NlbGxlckdyb3VwVG9vbHRpcChST1dfREFUQS5zZWxsZXJHcm91cEhpZXJhcmNoeSwgaW5mbylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cInN1YmxpbmUub2JqZWN0S2V5ID09ICdkaXNwbGF5Qm9va2VkQXZlcmFnZVJhdGluZycgJiYgZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCA9PSAnUkFUSU5HJyAmJiBST1dfREFUQVsnc2hvd1JhdGluZ0F2ZXJhZ2VJY29uJ10gXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1pIG1kaS1pbmZvLW91dGxpbmUgc2VsbGVyLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBhdXRvXCIgY29udGFpbmVyPVwiYm9keVwiIFthdXRvQ2xvc2VdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwic2V0SXNEaWZmZXJlbmNlKFJPV19EQVRBLmlzRGlmZmVyZW5jZUxlc3NUaGFuMjVQZXJjZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwicG9zdGVkLWF2Zy10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInBvc3RlZFJhdGluZ0RpZmZlcmVuY2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cInN1YmxpbmUub2JqZWN0S2V5ID09ICdkaXNwbGF5Qm9va2VkQXZlcmFnZUltcHJlc3Npb24nICYmIGd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gJ1JBVElORycgJiYgUk9XX0RBVEFbJ3Nob3dJbXByZXNzaW9uQXZlcmFnZUljb24nXSBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWkgbWRpLWluZm8tb3V0bGluZSBzZWxsZXItdG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tIGF1dG9cIiBjb250YWluZXI9XCJib2R5XCIgW2F1dG9DbG9zZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJzZXRJc0RpZmZlcmVuY2UoUk9XX0RBVEEuaXNEaWZmZXJlbmNlTGVzc1RoYW4yNVBlcmNlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJwb3N0ZWQtYXZnLXRvb2x0aXAgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwicG9zdGVkSW1wRGlmZmVyZW5jZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdWJsaW5lLm9iamVjdEtleSA9PSAnZGVzY3JpcHRpb24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiUk9XX0RBVEEuZGVzY3JpcHRpb25NZXNzYWdlIHx8IFJPV19EQVRBLmRlc2NyaXB0aW9uRW1haWxSZWZlcmVuY2VOdW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiUk9XX0RBVEEuZGVzY3JpcHRpb25NZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFJPV19EQVRBLmRlc2NyaXB0aW9uTWVzc2FnZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiUk9XX0RBVEEuZGVzY3JpcHRpb25FbWFpbFJlZmVyZW5jZU51bSAhPSAnLScgJiYgUk9XX0RBVEEuZGVzY3JpcHRpb25FbWFpbFJlZmVyZW5jZU51bSAhPSAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbWFpbCBSZWY6IHt7IFJPV19EQVRBLmRlc2NyaXB0aW9uRW1haWxSZWZlcmVuY2VOdW0gfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwie3sgUk9XX0RBVEEuZGVzY3JpcHRpb25EZXRhaWxzVXJsIH19XCIgdGFyZ2V0PVwiX2JsYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlJPV19EQVRBLmRlc2NyaXB0aW9uRGV0YWlsc1VybFR5cGUgPT09ICdQREYnIHx8IFJPV19EQVRBLmRlc2NyaXB0aW9uRGV0YWlsc1VybFR5cGUgPT09ICdFWENFTCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIHZpZXdEZXRhaWxzQW5kRW1haWxCdG5cIj5Eb3dubG9hZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiUk9XX0RBVEEuYWN0aXZpdHluYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ29yZGVyIG9uYm9hcmRlZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSAqbmdJZj1cIlJPV19EQVRBLmRlc2NyaXB0aW9uRGV0YWlsc1VybFR5cGUgPT09ICdMSU5LJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ2aWV3RGV0YWlsc0NsaWNrZWQoUk9XX0RBVEEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIHZpZXdEZXRhaWxzQW5kRW1haWxCdG4gb3JkZXItb25ib2FyZGVkXCI+Vmlld1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsczwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJ7eyBST1dfREFUQS5kZXNjcmlwdGlvbkVtYWlsVXJsIH19XCIgdGFyZ2V0PVwiX2JsYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlJPV19EQVRBLmRlc2NyaXB0aW9uRW1haWxVcmwgIT0gJy0nICYmIFJPV19EQVRBLmRlc2NyaXB0aW9uRW1haWxVcmwgIT0gJydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIHZpZXdEZXRhaWxzQW5kRW1haWxCdG5cIj5WaWV3IGVtYWlsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihpc05vRGF0YVRvRGlzcGxheVN1YmplY3QkIHwgYXN5bmMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tudWxsfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxhbm5hLWNvcmUtbm8tZGF0YS1saWIgW3dpZHRoXT1cIm5vRGF0YVdpZHRoXCIgW21hcmdpblRvcF09XCJtYXJnaW5Ub3BcIiAqbmdJZj1cIihpc05vRGF0YVRvRGlzcGxheVN1YmplY3QkIHwgYXN5bmMpXCI+XHJcbiAgICA8L2FubmEtY29yZS1uby1kYXRhLWxpYj5cclxuPC9kaXY+XHJcblxyXG48IS0tIENoZWNrYm94IHRlbXBsYXRlIC0tPlxyXG48bmctdGVtcGxhdGUgI2ZpbHRlclRvb2x0aXA+XHJcbiAgICA8YW5uYS1jb3JlLWFubmEtY29sdW1uLWNoZWNrYm94LWZpbHRlciBbdGFibGVEYXRhXT1cInRhYmxlRGF0YVwiIFtzaG93RmlsdGVySGVhZGVyVGFic109XCJzaG93RmlsdGVyVG9vbHRpcFRhYnNcIlxyXG4gICAgICAgIFtpc0x1ckFuZENzckNvbXBvbmVudF09XCJmYWxzZVwiIFtjbG9uZWRUYWJsZURhdGFdPVwiY2xvbmVkVGFibGVEYXRhXCIgW2ZpbHRlclRhYk9iamVjdHNdPVwiZmlsdGVyVGFiT2JqZWN0c1wiXHJcbiAgICAgICAgKGZpbHRlckFwcGxpZWRUb1RhYmxlKT1cImZpbHRlckFwcGxpZWQoJGV2ZW50KVwiIChzb3J0aW5nQXBwbGllZFRvVGFibGUpPVwic29ydGluZ0FwcGxpZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGNsb3NlVG9vbHRpcCk9XCJjbG9zZVRvb2x0aXAoKVwiPlxyXG4gICAgPC9hbm5hLWNvcmUtYW5uYS1jb2x1bW4tY2hlY2tib3gtZmlsdGVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBTbGlkZXIgdGVtcGxhdGUgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjc2xpZGVyVG9vbFRpcD5cclxuICAgIDxhbm5hLWNvcmUtYW5uYS1jb2x1bW4tc2xpZGVyLWZpbHRlciBbdGFibGVEYXRhXT1cInRhYmxlRGF0YVwiIFtzaG93RmlsdGVySGVhZGVyVGFic109XCJzaG93RmlsdGVyVG9vbHRpcFRhYnNcIlxyXG4gICAgICAgIFtpc0x1ckFuZENzckNvbXBvbmVudF09XCJmYWxzZVwiIFtjbG9uZWRUYWJsZURhdGFdPVwiY2xvbmVkVGFibGVEYXRhXCIgW2ZpbHRlclRhYk9iamVjdHNdPVwiZmlsdGVyVGFiT2JqZWN0c1wiXHJcbiAgICAgICAgKGZpbHRlckFwcGxpZWRUb1RhYmxlKT1cImZpbHRlckFwcGxpZWQoJGV2ZW50KVwiIChzb3J0aW5nQXBwbGllZFRvVGFibGUpPVwic29ydGluZ0FwcGxpZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGNsb3NlVG9vbHRpcCk9XCJjbG9zZVRvb2x0aXAoKVwiPlxyXG4gICAgPC9hbm5hLWNvcmUtYW5uYS1jb2x1bW4tc2xpZGVyLWZpbHRlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gRGF0ZSBQaWNrZXIgVGVtcGxhdGUgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGF0ZVBpY2tlclRvb2x0aXA+XHJcbiAgICA8YW5uYS1jb3JlLWFubmEtY29sdW1uLWRhdGUtcmFuZ2UtZmlsdGVyIFt0YWJsZURhdGFdPVwidGFibGVEYXRhXCIgW3Nob3dGaWx0ZXJIZWFkZXJUYWJzXT1cInNob3dGaWx0ZXJUb29sdGlwVGFic1wiXHJcbiAgICAgICAgW2lzTHVyQW5kQ3NyQ29tcG9uZW50XT1cImZhbHNlXCIgW2Nsb25lZFRhYmxlRGF0YV09XCJjbG9uZWRUYWJsZURhdGFcIiBbZmlsdGVyVGFiT2JqZWN0c109XCJmaWx0ZXJUYWJPYmplY3RzXCJcclxuICAgICAgICAoZmlsdGVyQXBwbGllZFRvVGFibGUpPVwiZmlsdGVyQXBwbGllZCgkZXZlbnQpXCIgKHNvcnRpbmdBcHBsaWVkVG9UYWJsZSk9XCJzb3J0aW5nQXBwbGllZCgkZXZlbnQpXCJcclxuICAgICAgICAoY2xvc2VUb29sdGlwKT1cImNsb3NlVG9vbHRpcCgpXCI+XHJcbiAgICA8L2FubmEtY29yZS1hbm5hLWNvbHVtbi1kYXRlLXJhbmdlLWZpbHRlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gV2VlayBQaWNrZXIgVGVtcGxhdGUgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjd2Vla1BpY2tlclRvb2xUaXA+XHJcbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJ3ZWVrcGlja2VyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxhbm5hLWNvcmUtd2Vlay1jYWxlbmRhci1maWx0ZXItbGliXHJcbiAgICAgICAgICAgIFt3ZWVrLWNhbGVuZGFyLWNvbmZpZ109XCJndEdlbmVyYWxDb25maWcubXVsdGlXZWVrUGlja2VyQ29uZmlnXCJcclxuICAgICAgICAgICAgKGFwcGx5KT1cImFwcGx5V2Vla0ZpbHRlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgW2Zyb20tZGF0ZV09XCJjYWxlbmRhck1pbkVuYWJsZWREYXRlXCJcclxuICAgICAgICAgICAgW3RvLWRhdGVdPVwiY2FsZW5kYXJNYXhFbmFibGVkRGF0ZVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvYW5uYS1jb3JlLXdlZWstY2FsZW5kYXItZmlsdGVyLWxpYj5cclxuICAgIDwvZGl2PiAtLT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gVGltZSBGaWx0ZXIgVGVtcGxhdGUgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjdGltZUZpbHRlclRvb2xUaXA+XHJcbiAgICA8YW5uYS1jb3JlLWFubmEtY29sdW1uLXRpbWUtZmlsdGVyIFt0YWJsZURhdGFdPVwidGFibGVEYXRhXCIgW3Nob3dGaWx0ZXJIZWFkZXJUYWJzXT1cInNob3dGaWx0ZXJUb29sdGlwVGFic1wiXHJcbiAgICAgICAgW2lzTHVyQW5kQ3NyQ29tcG9uZW50XT1cImZhbHNlXCIgW3Nob3dBbGxUaW1lUmFuZ2VDaGVja2JveGVzXT1cInNob3dDaGVja2JveGVzRm9yVGltZUZpbHRlclwiXHJcbiAgICAgICAgW2Nsb25lZFRhYmxlRGF0YV09XCJjbG9uZWRUYWJsZURhdGFcIiBbZmlsdGVyVGFiT2JqZWN0c109XCJmaWx0ZXJUYWJPYmplY3RzXCJcclxuICAgICAgICAoZmlsdGVyQXBwbGllZFRvVGFibGUpPVwiZmlsdGVyQXBwbGllZCgkZXZlbnQpXCIgKHNvcnRpbmdBcHBsaWVkVG9UYWJsZSk9XCJzb3J0aW5nQXBwbGllZCgkZXZlbnQpXCJcclxuICAgICAgICAoY2xvc2VUb29sdGlwKT1cImNsb3NlVG9vbHRpcCgpXCI+XHJcbiAgICA8L2FubmEtY29yZS1hbm5hLWNvbHVtbi10aW1lLWZpbHRlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY29sdW1uSW5mb1Rvb2x0aXA+XHJcbiAgICA8cCBzdHlsZT1cImNvbG9yOiBibGFjazt3aGl0ZS1zcGFjZTogbm93cmFwO1wiPlRoaXMgcHJlZW1wdGlvbiBpcyByZWplY3RlZCBhbmQgbm90IG1hcmtlZCBmb3IgY3JlZGl0LjwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjcmF0aW5nSW5mb1Rvb2x0aXA+XHJcbiAgICA8cCBjbGFzcz1cImZpcnN0LXJvd1wiPlNob3dzICdCb29rZWQgUmF0aW5nJyBmb3IgUHJlZW1wdGlvbnMgJiBNYWtlR29vZCBPZmZlcmVkIHNwb3QocykuPC9wPlxyXG4gICAgPHAgY2xhc3M9XCJzZWNvbmQtcm93XCI+U2hvd3MgJ1Byb2plY3RlZCBSYXRpbmcnIGZvciBBRFUgT2ZmZXJlZCBzcG90KHMpLjwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjaW1wc0luZm9Ub29sdGlwPlxyXG4gICAgPHAgY2xhc3M9XCJmaXJzdC1yb3dcIj5TaG93cyAnQm9va2VkIElNUFMnIGZvciBQcmVlbXB0aW9ucyAmIE1ha2VHb29kIE9mZmVyZWQgc3BvdChzKS48L3A+XHJcbiAgICA8cCBjbGFzcz1cInNlY29uZC1yb3dcIj5TaG93cyAnUHJvamVjdGVkIElNUFMnIGZvciBBRFUgT2ZmZXJlZCBzcG90KHMpLjwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjc3BvdHNDb2x1bW5FcXVpdmFsaXphdGlvbk1lc3NhZ2VUb29sdGlwPlxyXG4gICAgPHAgY2xhc3M9XCJzcG90LWNvbHVtbi10b29sdGlwLW1lc3NhZ2VcIj5UaGlzIGNvbnNpc3RzIG9mIGVxdWl2YWxpemVkIHNwb3RzIGFuZCB1bi1lcXVpdmFsaXplZCBQYWlkIFByb2dyYW1zICZcclxuICAgICAgICB1bi1lcXVpdmFsaXplZCBOb24tc3BvdHMuPC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICN1bmRlckRlbGl2ZXJ5VG9vbHRpcD5cclxuICAgIDxwIGNsYXNzPVwic3BvdC1jb2x1bW4tdG9vbHRpcC1tZXNzYWdlXCI+SW5kaWNhdGVzIHRoZSBVbmRlci1kZWxpdmVyeSBwZXJjZW50YWdlIGJhc2VkIG9uIGJvb2tlZCBhbmQgcG9zdGVkIFJURy9JTVBTLlxyXG4gICAgPC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNvdmVyRGVsaXZlcnlUb29sdGlwPlxyXG4gICAgPHAgY2xhc3M9XCJzcG90LWNvbHVtbi10b29sdGlwLW1lc3NhZ2VcIj5JbmRpY2F0ZXMgdGhlIE92ZXItZGVsaXZlcnkgcGVyY2VudGFnZSBiYXNlZCBvbiBib29rZWQgYW5kIHBvc3RlZCBSVEcvSU1QUy5cclxuICAgIDwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjcmF0ZUluZm9Ub29sdGlwPlxyXG4gICAgPHAgY2xhc3M9XCJmaXJzdC1yb3dcIj5TaG93cyAnQm9va2VkIFJhdGUnIGZvciBQcmVlbXB0aW9ucyAmIE1ha2VHb29kIE9mZmVyZWQgc3BvdChzKS48L3A+XHJcbiAgICA8cCBjbGFzcz1cInNlY29uZC1yb3dcIj5TaG93cyAnUHJvamVjdGVkICQgVmFsdWUnIGZvciBBRFUgT2ZmZXJlZCBzcG90KHMpLjwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjc2VsbGVySGllcmFyY2h5VG9vbHRpcD5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxsZXJHcm91cEhpZXJhcmNoeS5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJoaWVyYXJjaHktdGFibGUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInNlbGxlci1oaWVyYXJjaHktdGFibGVcIj5cclxuICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4jPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkludmVudG9yeSBDb2RlczwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5Qcm9ncmFtL0Rlc2NyaXB0aW9uPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGRhdGEgb2Ygc2VsbGVyR3JvdXBIaWVyYXJjaHk7IGxldCB0b29sdGlwSW5kZXggPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgdG9vbHRpcEluZGV4ICsgMSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHNob3dFbGxpcHNpc1RleHRPbkhvdmVyPnt7IGRhdGEuSW52ZW50b3J5Q29kZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc2hvd0VsbGlwc2lzVGV4dE9uSG92ZXI+e3sgZGF0YS5Qcm9ncmFtIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgIDwvc2VjdGlvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGxlckdyb3VwSGllcmFyY2h5Lmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJjb2xvcjogIzAwMFwiPlNlbGxlciBncm91cCBub3QgYXZhaWxhYmxlIGZvciB0aGlzIGludmVudG9yeSBjb2RlPC9zcGFuPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2x1clZpb2xhdGlvbkluZm9Ub29sdGlwPlxyXG4gICAgPHAgY2xhc3M9XCJmaXJzdC1yb3dcIj5UaGUgdmFsdWVzIGFyZSBmb3IgdGhlIGVudGlyZSB3ZWVrLjwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjcG9zdGVkUmF0aW5nRGlmZmVyZW5jZT5cclxuICAgIDxwIGNsYXNzPVwiZGlmZmVyZW5jZS10ZXh0XCI+VGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBwb3N0ZWQgYW5kIGJvb2tlZCBhdmVyYWdlIHJhdGluZyBpc1xyXG4gICAgICAgIHt7aXNEaWZmZXJlbmNlTGVzc1RoYW4yNVBlcmNlbnQgPyAnbGVzcycgOiAnbW9yZSd9fSB0aGFuIDI1JS48L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3Bvc3RlZEltcERpZmZlcmVuY2U+XHJcbiAgICA8cCBjbGFzcz1cImRpZmZlcmVuY2UtdGV4dFwiPlRoZSBkaWZmZXJlbmNlIGJldHdlZW4gcG9zdGVkIGFuZCBib29rZWQgYXZlcmFnZSBpbXByZXNzaW9uIGlzXHJcbiAgICAgICAge3tpc0RpZmZlcmVuY2VMZXNzVGhhbjI1UGVyY2VudCA/ICdsZXNzJyA6ICdtb3JlJ319IHRoYW4gMjUlLjwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjb25nb2luZ1JldkJvb2tlZENvbHVtblRvb2x0aXA+XHJcbiAgICA8cD5UaGUgQm9va2VkICQgdmFsdWUsIFNwb3RzLCBHUlAsIENQUCwgSU1QUywgQ1BNIGNvcnJlc3BvbmRzIG9uIHRoZSBsYXN0IHBlcm1hbmVudCByZXZpc2lvbiBnZW5lcmF0ZWQ8L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2NvbXBsZXRlZFJldkJvb2tlZENvbHVtblRvb2x0aXA+XHJcbiAgICA8cD5UaGUgQm9va2VkICQgdmFsdWUgY29ycmVzcG9uZHMgb24gdGhlIGxhc3QgcGVybWFuZW50IHJldmlzaW9uIGdlbmVyYXRlZDwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYXZnQm9va2VkUmF0ZT5cclxuICAgIDxwPlRoaXMgaXMgdGhlIGJvb2tlZCBhdmVyYWdlIFJhdGU8L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2F2Z0Jvb2tlZFJ0Zz5cclxuICAgIDxwPlRoaXMgaXMgdGhlIGJvb2tlZCBhdmVyYWdlIFJURzwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYXZnQm9va2VkSW1wcz5cclxuICAgIDxwPlRoaXMgaXMgdGhlIGJvb2tlZCBhdmVyYWdlIElNUCjigJkwMDApPC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNhdXRvbWF0aW9uVG9vbHRpcD5cclxuICAgIDxwPlBsZWFzZSBnZXQgdGhlIG9yZGVyIGJ1c2luZXNzIHJ1bGVzIGFwcHJvdmVkIHRvIGFjdGl2YXRlIHRoZSBvcmRlciBmb3IgYXV0b21hdGlvbi4gT25seSBmb3IgdGhlXHJcbiAgICAgICAgYXV0b21hdGlvbi1hY3RpdmF0ZWQgb3JkZXJzLCBhbnkgYXBwcm92ZWQgTUdzLCBBRFVzLCBvciBjcmVkaXRlZCBzcG90cyBvbiBBTk5BIHdpbGwgYmUgZmVkIGludG8gdGhlIHRyYWZmaWNcclxuICAgICAgICBzeXN0ZW0gaS5lLiBBTk5BIHJldmlzaW9ucy4gQWRkaXRpb25hbGx5LCBBTk5BIHdpbGwgb25seSBlbnRlciBidXllciByZXZpc2lvbnMgaW50byB0cmFmZmljIGZvciB0aGUgc2VsZWN0ZWRcclxuICAgICAgICBNZWRpYWxpbmUvV09DIG9yZGVycy48L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3JlYmF0ZUltcGFjdD5cclxuICAgIDxwPlxyXG4gICAgICAgIFJlYmF0ZSBpbXBhY3QgdmFsdWUgaXMgZm9yIHRoZSBvcmlnaW5hbGx5IG9yZGVyZWQgc3BvdCBsZW5ndGggYW5kIGlzIG5vdCBlcXVpdmFsaXplZC5cclxuICAgIDwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbHVyVmlvbGF0aW9uVG90YWxSb3dUb29sVGlwPlxyXG4gICAgPHVsPlxyXG4gICAgICAgIDxsaT5cclxuICAgICAgICAgICAgPHN0cm9uZz5QT0xJVElDQUwgUkFURSBWSU9MQVRJT05TOjwvc3Ryb25nPlxyXG4gICAgICAgICAgICBWaW9sYXRpb25zIGZsYWdnZWQgd2hlbiBub24tcG9saXRpY2FsIHNwb3RzIGFyZSBib29rZWQgYXQgYSByYXRlIGxvd2VyIHRoYW4gdGhlIG1pbmltdW0gYm9va2VkIHJhdGUgZm9yXHJcbiAgICAgICAgICAgIHBvbGl0aWNhbCBjYW5kaWRhdGVzIGZvciB0aGUgc2FtZSB3ZWVrLCBJbnZlbnRvcnkgQ29kZSBhbmQgUmV2ZW51ZSBDbGFzcy5cclxuXHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgIDxzdHJvbmc+Q0FORElEQVRFIFRPIENBTkRJREFURSBWSU9MQVRJT046PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIFZpb2xhdGlvbnMgZmxhZ2dlZCB3aGVuIHBvbGl0aWNhbCBzcG90cyBhcmUgYm9va2VkIGF0IGRpZmZlcmVudCByYXRlcyB0byBvdGhlciBwb2xpdGljYWwgc3BvdHMgZm9yIHRoZSBzYW1lXHJcbiAgICAgICAgICAgIHdlZWssIEludmVudG9yeSBDb2RlIGFuZCBSZXZlbnVlIENsYXNzLlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICA8L3VsPlxyXG5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY2lyY3VsYXJQcm9ncmVzc0Jhcj5cclxuICAgIDxjaXJjbGUtcHJvZ3Jlc3MgW3BlcmNlbnRdPVwicGVyY2VudERvbmVcIiBbcmFkaXVzXT1cIjVcIiBbc2hvd1RpdGxlXT1cImZhbHNlXCIgW3Nob3dVbml0c109XCJmYWxzZVwiIFtzaG93U3VidGl0bGVdPVwiZmFsc2VcIlxyXG4gICAgICAgIFtvdXRlclN0cm9rZVdpZHRoXT1cIjNcIiBbaW5uZXJTdHJva2VXaWR0aF09XCIzXCIgW3NwYWNlXT1cIi0zXCIgW291dGVyU3Ryb2tlQ29sb3JdPVwiJyMyNjhiZmYnXCJcclxuICAgICAgICBbaW5uZXJTdHJva2VDb2xvcl09XCInI2Q1ZDVkNSdcIiBbYW5pbWF0aW9uRHVyYXRpb25dPVwiMTBcIj48L2NpcmNsZS1wcm9ncmVzcz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG48bmctdGVtcGxhdGUgI3VzZXJMb2dnZWRJbkRldGFpbHM+XHJcbiAgICA8ZGl2IGNsYXNzPVwidG9vbHRpcC1kaXYtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZGF0YSBvZiB0ZXh0QWN0aW9uVG9vbHRpcFwiPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGEua2V5ICE9ICdyZWFkJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YS5rZXkgfX0gPGI+IHt7ZGF0YS52YWx1ZX19PC9iPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF0YS5rZXkgPT0gJ3JlYWQnXCI+XHJcbiAgICAgICAgICAgICAgICAge3tkYXRhLnZhbHVlfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI21hcmtBc1JlYWRUaXA+XHJcbiAgICA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9uLXRvb2x0aXAtZGl2LWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGV4dEFjdGlvblRvb2x0aXBcIj5cclxuICAgICAgICAgICAge3tkYXRhLnZhbHVlfX1cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICN0ZXh0QWN0aW9uVG9vbHRpcFRlbXBsYXRlPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZGF0YSBvZiB0ZXh0QWN0aW9uVG9vbHRpcFwiPlxyXG4gICAgICAgIHt7IGRhdGEua2V5IH19IDxiPiB7e2RhdGEudmFsdWV9fTwvYj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICN0b29sdGlwQ29udGFpbmluZ1RhYmxlVGVtcGxhdGU+XHJcbiAgICA8ZGl2ICpuZ0lmPVwidG9vbHRpcENvbnRhaW5pbmdUYWJsZVwiIFtpbm5lckhUTUxdPVwidG9vbHRpcENvbnRhaW5pbmdUYWJsZS5pbm5lckh0bWxcIiBjbGFzcz1cIm5vdGlmaWNhdGlvbi10b29sdGlwLWRpdi1jb250YWluZXJcIj5cclxuICAgICAgICA8IS0tIDx1bD5cclxuICAgICAgPGxpICpuZ0Zvcj1cImxldCBoZWFkZXJNc2cgb2YgdG9vbHRpcENvbnRhaW5pbmdUYWJsZS50YWJsZUhlYWRlck1zZ1wiPlxyXG4gICAgICAgIDxiPiB7e2hlYWRlck1zZ319ICA8L2I+XHJcbiAgICAgIDwvbGk+XHJcbiAgICA8L3VsPlxyXG5cclxuICAgIDx0YWJsZSBjbGFzcz1cInRvb2x0aXAtdGFibGVcIj5cclxuICAgICAgPHRoZWFkPlxyXG4gICAgICAgIDx0cj5cclxuICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgaGVhZGVyIG9mIHRvb2x0aXBDb250YWluaW5nVGFibGUudG9vbHRpcFRhYmxlSGVhZGVyXCI+XHJcbiAgICAgICAgICAgIHt7IGhlYWRlcn19XHJcbiAgICAgICAgICA8L3RoPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvdGhlYWQ+XHJcbiAgICAgIDx0Ym9keT5cclxuICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHJvd3Mgb2YgdG9vbHRpcENvbnRhaW5pbmdUYWJsZS50b29sdGlwVGFibGVCb2R5XCI+XHJcbiAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGRhdGEgb2Ygcm93c1wiPlxyXG4gICAgICAgICAgICB7eyBkYXRhIH19XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvdGJvZHk+XHJcbiAgICA8L3RhYmxlPlxyXG5cclxuICAgIDx1bD5cclxuICAgICAgPGxpIHN0eWxlPVwibWFyZ2luLXRvcDoxMHB4OyBwYWRkaW5nOjBcIiAqbmdGb3I9XCJsZXQgZm9vdGVyTXNnIG9mIHRvb2x0aXBDb250YWluaW5nVGFibGUudGFibGVGb290ZXJNc2dcIj5cclxuICAgICAgICB7eyBmb290ZXJNc2cgfX0gXHJcbiAgICAgIDwvbGk+XHJcbiAgICA8L3VsPiAtLT5cclxuXHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSA8bmctdGVtcGxhdGUgI3RleHRBY3Rpb25Ub29sdGlwVGVtcGxhdGU+XHJcbiAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGV4dEFjdGlvblRvb2x0aXBcIj5cclxuICAgICAge3sgZGF0YS5rZXkgfX0gPGI+IHt7ZGF0YS52YWx1ZX19PC9iPlxyXG4gICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy10ZW1wbGF0ZT4gLS0+Il19
|