verben-authentication-ui 0.9.5 → 0.9.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/role-control/role-control.component.mjs +5 -4
- package/esm2022/lib/components/user-management/services/user-management.service.mjs +1 -1
- package/esm2022/lib/components/user-management/user-management-form/use-management-form.component.mjs +1 -1
- package/esm2022/lib/components/user-management/user-management.columns.mjs +1 -1
- package/esm2022/lib/components/user-management/user-management.component.mjs +5 -5
- package/esm2022/lib/components/user-management/user-management.module.mjs +4 -3
- package/esm2022/lib/components/user-management/user-status-badge/user-status-badge.component.mjs +26 -0
- package/esm2022/lib/components/user-request-approval/facades/user-access-request.facade.mjs +3 -1
- package/esm2022/lib/components/user-request-approval/helper.mjs +26 -29
- package/esm2022/lib/components/user-request-approval/user-request-approval.module.mjs +9 -6
- package/esm2022/lib/models/user.mjs +1 -1
- package/esm2022/lib/services/http-web-request.service.mjs +2 -2
- package/esm2022/lib/shared/shared.module.mjs +4 -8
- package/esm2022/public-api.mjs +1 -2
- package/fesm2022/verben-authentication-ui.mjs +81 -94
- package/fesm2022/verben-authentication-ui.mjs.map +1 -1
- package/lib/components/user-management/services/user-management.service.d.ts +5 -5
- package/lib/components/user-management/user-management-form/use-management-form.component.d.ts +2 -2
- package/lib/components/user-management/user-management.columns.d.ts +2 -2
- package/lib/components/user-management/user-management.component.d.ts +7 -7
- package/lib/components/user-management/user-management.module.d.ts +7 -6
- package/lib/components/user-management/user-status-badge/user-status-badge.component.d.ts +12 -0
- package/lib/components/user-request-approval/helper.d.ts +0 -2
- package/lib/models/user.d.ts +4 -10
- package/lib/shared/shared.module.d.ts +1 -2
- package/package.json +2 -3
- package/public-api.d.ts +0 -1
- package/esm2022/lib/components/user-management/helper.mjs +0 -34
- package/esm2022/lib/components/user-request-approval/user-request-approval.service.mjs +0 -32
- package/esm2022/lib/models/user-management.mjs +0 -2
- package/lib/components/user-management/helper.d.ts +0 -2
- package/lib/components/user-request-approval/user-request-approval.service.d.ts +0 -18
- package/lib/models/user-management.d.ts +0 -8
|
@@ -453,6 +453,7 @@ export class RoleControlComponent {
|
|
|
453
453
|
console.log({ Data: data });
|
|
454
454
|
console.log({ CardData: this.cardData });
|
|
455
455
|
if (cardData) {
|
|
456
|
+
this.dataView.isTableView = false;
|
|
456
457
|
this.viewDetails(cardData);
|
|
457
458
|
}
|
|
458
459
|
this.closePopUp();
|
|
@@ -497,7 +498,7 @@ export class RoleControlComponent {
|
|
|
497
498
|
return;
|
|
498
499
|
}
|
|
499
500
|
this.dataView.toggleView();
|
|
500
|
-
const id = this.currentData.data ? this.currentData.data.
|
|
501
|
+
const id = this.currentData.data ? this.currentData.data.Id : '';
|
|
501
502
|
if (id.trim().length > 0 && !this.tableView.isRowEditing(id)) {
|
|
502
503
|
this.tableView.toggleRowEdit(id);
|
|
503
504
|
}
|
|
@@ -1297,11 +1298,11 @@ export class RoleControlComponent {
|
|
|
1297
1298
|
}
|
|
1298
1299
|
}
|
|
1299
1300
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RoleControlComponent, deps: [{ token: i1.AuthorizationService }, { token: i2.RoleControlService }, { token: i3.UtilService }, { token: i4.HttpWebRequestService }, { token: i0.ChangeDetectorRef }, { token: i5.FormBuilder }, { token: i6.EnvironmentService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1300
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RoleControlComponent, selector: "lib-role-control", inputs: { isGlobal: "isGlobal", serviceName: "serviceName", application: "application", pageSize: "pageSize", searchDebounceTime: "searchDebounceTime" }, viewQueries: [{ propertyName: "cardDataView", first: true, predicate: ["vdcv"], descendants: true }, { propertyName: "dataView", first: true, predicate: ["vdv"], descendants: true }, { propertyName: "tableView", first: true, predicate: ["dt"], descendants: true }, { propertyName: "popUps", predicate: ["popup"], descendants: true }], ngImport: i0, template: "<div #messageLog class=\"flex flex-col gap-4 message-log-container\">\n <div *ngIf=\"this.cardContextHistory.length > 0\"\n class=\"context-banner py-3 px-4 rounded-xl flex item-center justify-space-between gap-3\">\n <div class=\"flex gap-2 flex-1 context-banner-content\">\n <div class=\"context-content items-center flex gap-2\" *ngFor=\"let context of this.cardContextHistory; index as i\">\n <div class=\"context-main-content-container flex gap-4\">\n <span class=\"context-caption font-bold text-[#404040]\">{{context.data.ChildrenType &&\n context.data.ChildrenType == childPermissionRef? context.data.Name: context.title}}</span>\n <span *ngIf=\"i == this.cardContextHistory.length -1\"\n class=\"context-subcaption\">{{this.getCardSubCaption(context)}}</span>\n </div>\n <div *ngIf=\"i < this.cardContextHistory.length -1\">/</div>\n </div>\n </div>\n <div class=\"flex justify-end\">\n <verben-svg (click)=\"closeDetails()\" class=\"cursor-pointer\" icon=\"close-circle-full\" [width]=\"20\"\n [height]=\"20\"></verben-svg>\n </div>\n </div>\n <verben-data-view #vdv [viewState]=\"{\n isSearch: this.cardContextHistory.length == 0,\n isColumn: this.cardContextHistory.length == 0,\n isFilter: this.cardContextHistory.length == 0,\n isSort: this.cardContextHistory.length == 0,\n isExport: this.cardContextHistory.length == 0,\n isSelect: this.cardContextHistory.length == 0,\n isCreate: this.cardContextHistory.length == 0,\n isToggle:this.cardContextHistory.length == 0,\n }\" [buttonClass]=\"'my-custom-button-class'\" [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\" [isTableView]=\"false\"\n [selectedColumnCount]=\"0\" [selectedSortCount]=\"0\" [selectedFilterTableCount]=\"0\" (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\" (onSearchChange)=\"handleSearch($event)\">\n <div class=\"mt-2\" table-content>\n <lib-data-table #dt [data]=\"data\" [columns]=\"visibleColumnDef\" [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\">\n <ng-container libColumn=\"select\">\n <ng-template #cell let-isSelected=\"isSelected\" let-toggleRowSelection=\"toggleRowSelection\">\n <input type=\"checkbox\" [checked]=\"isSelected\" (change)=\"toggleRowSelection()\" />\n </ng-template>\n <ng-template #header let-allRowsSelected=\"allRowsSelected\" let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\">\n <input type=\"checkbox\" [checked]=\"allRowsSelected()\" [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\" />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"createdAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"updatedAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"name\">\n <ng-template #cell let-row=\"row\" let-value>\n {{value.Name}}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-updateData=\"updateData\" let-value>\n <div class=\"width-max\">\n <verbena-input [(ngModel)]=\"value.Name\"></verbena-input>\n </div>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-isEditing=\"isEditing\" let-toggleRowEdit=\"toggleRowEdit\" let-row=\"row\" let-value>\n <verben-pop-Up #popup [customStyles]=\"{'z-index': '99'}\" [enableMouseLeave]=\"false\">\n <verben-svg class=\"cursor-pointer actions-icon\" dropdown-trigger icon=\"list\"></verben-svg>\n <div class=\"pop-up-content flex flex-col\" dropdown-content>\n <div (click)=\"toggleRowEdit(); closePopUp(); \" class=\"pop-up-value cursor-pointer\">Edit</div>\n <div (click)=\"viewDetailsFromTable(value)\" class=\"pop-up-value cursor-pointer\">View Details</div>\n <div class=\"pop-up-value cursor-pointer\">View Users</div>\n </div>\n </verben-pop-Up>\n <!-- <div class=\"flex gap-4 items-center\">\n <verben-svg (click)=\"editValue(value)\" icon=\"edit\" [width]=\"15\" [height]=\"15\"\n class=\"cursor-pointer\"></verben-svg>\n <span (click)=\"viewDetailsFromTable(value)\" class=\"view-links view-details\">view details</span>\n <span class=\"view-links view-users\">view users</span>\n </div> -->\n </ng-template>\n <ng-template #cellEdit let-isEditing=\"isEditing\" let-toggleRowEdit=\"toggleRowEdit\" let-row=\"row\" let-value>\n <div class=\"flex gap-2 items-center\">\n <verben-svg icon=\"tick\" [width]=\"15\" [height]=\"15\"\n (click)=\"tableSaveRole(value, toggleRowEdit)\"></verben-svg>\n <verben-svg icon=\"delete\" [width]=\"15\" [height]=\"15\"></verben-svg>\n <verben-svg icon=\"cardViewAlt\" [width]=\"15\" [height]=\"15\" (click)=\"editValue(value)\"></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view borderRadius=\"12px\" #vdcv dataId=\"Id\" border=\"5px\" [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\" mg=\"0px\">\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data #vlcd [parent]=\"vdcv\" dataId=\"MailAddress\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\" [cardDataList]=\"cardData\">\n <ng-template #card let-item>\n <div (click)=\"roleCardClicked(item)\"\n *ngIf=\"item.data.ChildrenType && item.data.ChildrenType == childPermissionRef\"\n class=\"flex cursor-pointer h-[max-content]\">\n <verben-svg [width]=\"15\" [height]=\"15\" (click)=\"toggleChildren(item); $event.stopPropagation()\"\n [ngClass]=\"item.children && item.children.length?'visible':'invisible'\"\n class=\"items-center flex pr-1 cursor-pointer\" [icon]=\"item.isChildrenExpanded?'minus':'plus'\" />\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 h-[100%]\">\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 card-min-height justify-between h-[100%]\">\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">{{\n item.data.Name\n }}</h3>\n <span class=\"!text-[10px] font-light text-[#404040] leading-[12.1px]\"\n *ngIf=\"item.children && item.children.length > 0\">\n {{getCardSubCaption(item)}}\n </span>\n </div>\n\n <div *ngIf=\"item.children && item.children.length > 0\" class=\"flex items-end h-[100%]\">\n <p (click)=\"viewDetails(item); $event.stopPropagation()\"\n class=\"my-0 underline text-[#3479E9] text-[12px] leading-[16.6px] cursor-pointer font-medium\">\n view details</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!item.data.ChildrenType || item.data.ChildrenType !== childPermissionRef\"\n class=\"flex h-[max-content]\">\n <verben-svg [ngClass]=\"item.children && item.children.length?'visible':'invisible'\" [width]=\"15\"\n [height]=\"15\" (click)=\"toggleChildren(item)\" class=\"items-center flex pr-1 cursor-pointer\"\n [icon]=\"item.isChildrenExpanded?'minus':'plus'\" />\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 flex gap-2 h-[100%] items-start\">\n <input *ngIf=\"item.data?.Selected != undefined\" [disabled]=\"this.isCheckboxDisabled(item)\"\n type=\"checkbox\" class=\"mt-1 cursor-pointer\" [(ngModel)]=\"item.data.Selected\"\n (click)=\"$event.preventDefault(); this.saveRoleDynamic(item)\" />\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 card-min-height justify-between h-[100%]\">\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">{{\n item.title\n }}</h3>\n <span class=\"!text-[10px] font-light text-[#404040] leading-[12.1px]\"\n *ngIf=\"item.children && item.children.length > 0\">\n {{getCardSubCaption(item)}}\n </span>\n </div>\n\n <div *ngIf=\"item.children && item.children.length > 0\" class=\"flex items-end h-[100%]\">\n <p (click)=\"viewDetails(item)\"\n class=\"my-0 underline text-[#3479E9] text-[12px] leading-[16.6px] cursor-pointer font-medium\">\n view details</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n <ng-template #cardChild let-item>\n <div class=\"flex h-[max-content]\">\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 flex gap-2 h-[100%] items-start\">\n <input *ngIf=\"item.data?.Selected != undefined\" [disabled]=\"this.isCheckboxDisabled(item)\"\n type=\"checkbox\" class=\"mt-1 cursor-pointer\" [(ngModel)]=\"item.data.Selected\"\n (click)=\"$event.preventDefault(); this.saveRoleDynamic(item)\" />\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 card-min-height justify-between h-[100%]\">\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">{{\n item.title\n }}</h3>\n <span class=\"!text-[10px] font-light text-[#404040] leading-[12.1px]\"\n *ngIf=\"item.children && item.children.length > 0\">\n {{getCardSubCaption(item)}}\n </span>\n </div>\n\n <div *ngIf=\"item.children && item.children.length > 0\" class=\"flex items-end h-[100%]\">\n <p (click)=\"viewDetailsChild(item)\"\n class=\"my-0 underline text-[#3479E9] text-[12px] leading-[16.6px] cursor-pointer font-medium\">\n view details</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n <verben-right-card-data-view *ngIf=\"this.cardContextHistory.length == 0\">\n <ng-template #parent>\n <div *ngIf=\"this.currentData\"\n class=\"flex flex-col rounded-xl h-full w-full justify-between relative space-y-4\">\n <verbena-input name=\"Name\" label=\"Name\" (ngModelChange)=\"updateTable()\"\n [(ngModel)]=\"this.currentData.data.Name\" />\n\n <!-- buttons -->\n <div class=\"flex justify-between bottom-8 left-0 right-0\">\n <verbena-button class=\"verben-delete-button\" text=\"Delete\"></verbena-button>\n <div class=\"flex gap-3\">\n <verbena-button class=\"verben-switch-button\" (click)=\"goToTableView()\"\n text=\"Switch To Table\"></verbena-button>\n <verbena-button class=\"verben-primary-button\" (click)=\"this.saveRole()\" text=\"Save\"></verbena-button>\n </div>\n </div>\n </div>\n\n </ng-template>\n </verben-right-card-data-view>\n <!-- <verben-right-card-data-view>\n yeshhhhhh\n </verben-right-card-data-view> -->\n\n <verben-card-data-view-footer *ngIf=\"this.cardContextHistory.length == 0\">\n <div class=\"flex gap-2 justify-between\">\n <div *ngIf=\"!vdcv.hasCurrentItem() && this.cardContextHistory.length == 0\"\n class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n <div class=\"flex {{vdcv.hasCurrentItem()?'flex-1':''}} justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links\">Load more</button>\n </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <verben-visible-column (columnsUpdated)=\"onColumnsUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"400px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter (filtersApplied)=\"onFilterUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"420px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"></verben-table-filter>\n </div>\n <div sort-content>\n <verben-sort-table (selectedOptions)=\"onSortUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"400px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-export [data]=\"data\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-between\">\n <div class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links\">Load more</button>\n </div>\n </div>\n</div>\n", styles: [".view-links{font-size:14px!important;color:#00f;font-weight:600;cursor:pointer}.view-links:hover{text-decoration:underline;text-underline-offset:3px}.context-banner{background-color:#d4a00773}.card-min-height{gap:10px}::ng-deep .childrenPadding{max-height:300px;overflow-y:auto}.pop-up-content{border-radius:4px;background-color:#fff;border:1px solid rgba(212,161,7,.5)}.pop-up-value{padding:10px 20px}.pop-up-content>div:nth-child(1){border-bottom:4px solid #FFE681}.width-max{min-width:max-content}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "dataKey", "formGroupConfig", "groupBy", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowDelete", "selectionChange"] }, { kind: "directive", type: i8.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i8.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i8.DataViewComponent, selector: "verben-data-view", inputs: ["buttonClass", "iconClass", "activeIconClass", "columnCustomClass", "filterCustomClass", "sortCustomClass", "extendCustomClass", "exportCustomClass", "selectCustomClass", "importCustomClass", "zIndex", "createCustomClass", "tableIcon", "cardIcon", "cardClass", "tableClass", "searchKey", "searchValue", "viewState", "searchTemplate", "importTemplate", "columnTemplate", "extendTemplate", "filterTemplate", "sortTemplate", "children", "exportTemplate", "createTemplate", "selectedColumnCount", "selectedSortCount", "selectedFilterTableCount", "inputWidth", "milliseconds", "showColumnChild", "showSortChild", "showFilterChild", "showImportChild", "showExportChild", "showExtendChild", "create", "showSelected", "isTableView"], outputs: ["viewChange", "stateChange", "onSearchChange"] }, { kind: "component", type: i8.CardDataViewComponent, selector: "verben-card-data-view", inputs: ["pd", "mg", "lHeight", "rHeight", "rWidth", "lWidth", "textColor", "lbgColor", "rbgColor", "border", "display", "borderRadius", "activeCss", "inActiveCss", "displayAsRow", "cardDataList", "dataId", "totalRecords", "footer", "noOfVisibleChildren", "onItemClick", "onCardChildClick"], outputs: ["loadMoreClick"] }, { kind: "component", type: i8.LeftCardDataComponent, selector: "verben-left-card-data", inputs: ["pd", "mg", "height", "weight", "activeCss", "inActiveCss", "cardDataList", "iconCollapse", "iconExpanded", "parent", "dataId"] }, { kind: "component", type: i8.LeftCardDataViewComponent, selector: "verben-left-card-data-view", inputs: ["cardDataList"] }, { kind: "component", type: i8.RightCardDataViewComponent, selector: "verben-right-card-data-view", inputs: ["parentData", "chilData", "meth"] }, { kind: "component", type: i8.CardDataViewFooterComponent, selector: "verben-card-data-view-footer" }, { kind: "component", type: i8.SortTableComponent, selector: "verben-sort-table", inputs: ["enableDragAndDrop", "sortOptions", "resetText", "displayedOptions", "propertyText", "showMoreText", "sortButtonText", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "containerHeight"], outputs: ["selectedOptions", "resetSortData"] }, { kind: "component", type: i8.VisibleColumnComponent, selector: "verben-visible-column", inputs: ["columns", "items", "enableDragAndDrop", "displayedColumns", "showMore", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "closeColumn"], outputs: ["columnsUpdated", "resetFilter"] }, { kind: "component", type: i8.TableFilterComponent, selector: "verben-table-filter", inputs: ["filterOptions", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "maxFilterLength", "tooltip"], outputs: ["filtersApplied", "resetSortData"] }, { kind: "component", type: i8.DataExportComponent, selector: "lib-data-export", inputs: ["columns", "data"], outputs: ["exportDataEvent"] }, { kind: "directive", type: i5.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i8.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "useIcon", "svgPosition", "iconPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "svgSize", "weight", "variant", "styleType", "svg", "svgWidth", "svgHeight", "iconColor", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i8.VerbenPopUpComponent, selector: "verben-pop-Up", inputs: ["dropdownOpen", "dropdownWidth", "color", "customStyles", "popUpClass", "border", "borderRadius", "enableMouseLeave", "cdkPosition"], outputs: ["dropdownOpenChange", "close"] }, { kind: "pipe", type: i7.DatePipe, name: "date" }] });
|
|
1301
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RoleControlComponent, selector: "lib-role-control", inputs: { isGlobal: "isGlobal", serviceName: "serviceName", application: "application", pageSize: "pageSize", searchDebounceTime: "searchDebounceTime" }, viewQueries: [{ propertyName: "cardDataView", first: true, predicate: ["vdcv"], descendants: true }, { propertyName: "dataView", first: true, predicate: ["vdv"], descendants: true }, { propertyName: "tableView", first: true, predicate: ["dt"], descendants: true }, { propertyName: "popUps", predicate: ["popup"], descendants: true }], ngImport: i0, template: "<div #messageLog class=\"flex flex-col gap-4 message-log-container\">\n <div *ngIf=\"this.cardContextHistory.length > 0\"\n class=\"context-banner py-3 px-4 rounded-xl flex item-center justify-space-between gap-3\">\n <div class=\"flex gap-2 flex-1 context-banner-content\">\n <div class=\"context-content items-center flex gap-2\" *ngFor=\"let context of this.cardContextHistory; index as i\">\n <div class=\"context-main-content-container flex gap-4\">\n <span class=\"context-caption font-bold text-[#404040]\">{{context.data.ChildrenType &&\n context.data.ChildrenType == childPermissionRef? context.data.Name: context.title}}</span>\n <span *ngIf=\"i == this.cardContextHistory.length -1\"\n class=\"context-subcaption\">{{this.getCardSubCaption(context)}}</span>\n </div>\n <div *ngIf=\"i < this.cardContextHistory.length -1\">/</div>\n </div>\n </div>\n <div class=\"flex justify-end\">\n <verben-svg (click)=\"closeDetails()\" class=\"cursor-pointer\" icon=\"close-circle-full\" [width]=\"20\"\n [height]=\"20\"></verben-svg>\n </div>\n </div>\n <verben-data-view #vdv [viewState]=\"{\n isSearch: this.cardContextHistory.length == 0,\n isColumn: this.cardContextHistory.length == 0,\n isFilter: this.cardContextHistory.length == 0,\n isSort: this.cardContextHistory.length == 0,\n isExport: this.cardContextHistory.length == 0,\n isSelect: this.cardContextHistory.length == 0,\n isCreate: this.cardContextHistory.length == 0,\n isToggle:this.cardContextHistory.length == 0,\n }\" [buttonClass]=\"'my-custom-button-class'\" [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\" [isTableView]=\"false\"\n [selectedColumnCount]=\"0\" [selectedSortCount]=\"0\" [selectedFilterTableCount]=\"0\" (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\" (onSearchChange)=\"handleSearch($event)\">\n <div class=\"mt-2\" table-content>\n <lib-data-table [dataKey]=\"'Id'\" #dt [data]=\"data\" [columns]=\"visibleColumnDef\" [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\">\n <ng-container libColumn=\"select\">\n <ng-template #cell let-isSelected=\"isSelected\" let-toggleRowSelection=\"toggleRowSelection\">\n <input type=\"checkbox\" [checked]=\"isSelected\" (change)=\"toggleRowSelection()\" />\n </ng-template>\n <ng-template #header let-allRowsSelected=\"allRowsSelected\" let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\">\n <input type=\"checkbox\" [checked]=\"allRowsSelected()\" [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\" />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"createdAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"updatedAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"name\">\n <ng-template #cell let-row=\"row\" let-value>\n {{value.Name}}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-updateData=\"updateData\" let-value>\n <div class=\"width-max\">\n <verbena-input [(ngModel)]=\"value.Name\"></verbena-input>\n </div>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-isEditing=\"isEditing\" let-toggleRowEdit=\"toggleRowEdit\" let-row=\"row\" let-value>\n <verben-pop-Up #popup [customStyles]=\"{'z-index': '99'}\" [enableMouseLeave]=\"false\">\n <verben-svg class=\"cursor-pointer actions-icon\" dropdown-trigger icon=\"list\"></verben-svg>\n <div class=\"pop-up-content flex flex-col\" dropdown-content>\n <div (click)=\"toggleRowEdit(); closePopUp(); \" class=\"pop-up-value cursor-pointer\">Edit</div>\n <div (click)=\"viewDetailsFromTable(value)\" class=\"pop-up-value cursor-pointer\">View Details</div>\n <div class=\"pop-up-value cursor-pointer\">View Users</div>\n </div>\n </verben-pop-Up>\n <!-- <div class=\"flex gap-4 items-center\">\n <verben-svg (click)=\"editValue(value)\" icon=\"edit\" [width]=\"15\" [height]=\"15\"\n class=\"cursor-pointer\"></verben-svg>\n <span (click)=\"viewDetailsFromTable(value)\" class=\"view-links view-details\">view details</span>\n <span class=\"view-links view-users\">view users</span>\n </div> -->\n </ng-template>\n <ng-template #cellEdit let-isEditing=\"isEditing\" let-toggleRowEdit=\"toggleRowEdit\" let-row=\"row\" let-value>\n <div class=\"flex gap-2 items-center\">\n <verben-svg icon=\"tick\" [width]=\"15\" [height]=\"15\"\n (click)=\"tableSaveRole(value, toggleRowEdit)\"></verben-svg>\n <verben-svg icon=\"delete\" [width]=\"15\" [height]=\"15\"></verben-svg>\n <verben-svg icon=\"cardViewAlt\" [width]=\"15\" [height]=\"15\" (click)=\"editValue(value)\"></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view borderRadius=\"12px\" #vdcv dataId=\"Id\" border=\"5px\" [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\" mg=\"0px\">\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data #vlcd [parent]=\"vdcv\" dataId=\"MailAddress\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\" [cardDataList]=\"cardData\">\n <ng-template #card let-item>\n <div (click)=\"roleCardClicked(item)\"\n *ngIf=\"item.data.ChildrenType && item.data.ChildrenType == childPermissionRef\"\n class=\"flex cursor-pointer h-[max-content]\">\n <verben-svg [width]=\"15\" [height]=\"15\" (click)=\"toggleChildren(item); $event.stopPropagation()\"\n [ngClass]=\"item.children && item.children.length?'visible':'invisible'\"\n class=\"items-center flex pr-1 cursor-pointer\" [icon]=\"item.isChildrenExpanded?'minus':'plus'\" />\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 h-[100%]\">\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 card-min-height justify-between h-[100%]\">\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">{{\n item.data.Name\n }}</h3>\n <span class=\"!text-[10px] font-light text-[#404040] leading-[12.1px]\"\n *ngIf=\"item.children && item.children.length > 0\">\n {{getCardSubCaption(item)}}\n </span>\n </div>\n\n <div *ngIf=\"item.children && item.children.length > 0\" class=\"flex items-end h-[100%]\">\n <p (click)=\"viewDetails(item); $event.stopPropagation()\"\n class=\"my-0 underline text-[#3479E9] text-[12px] leading-[16.6px] cursor-pointer font-medium\">\n view details</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!item.data.ChildrenType || item.data.ChildrenType !== childPermissionRef\"\n class=\"flex h-[max-content]\">\n <verben-svg [ngClass]=\"item.children && item.children.length?'visible':'invisible'\" [width]=\"15\"\n [height]=\"15\" (click)=\"toggleChildren(item)\" class=\"items-center flex pr-1 cursor-pointer\"\n [icon]=\"item.isChildrenExpanded?'minus':'plus'\" />\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 flex gap-2 h-[100%] items-start\">\n <input *ngIf=\"item.data?.Selected != undefined\" [disabled]=\"this.isCheckboxDisabled(item)\"\n type=\"checkbox\" class=\"mt-1 cursor-pointer\" [(ngModel)]=\"item.data.Selected\"\n (click)=\"$event.preventDefault(); this.saveRoleDynamic(item)\" />\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 card-min-height justify-between h-[100%]\">\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">{{\n item.title\n }}</h3>\n <span class=\"!text-[10px] font-light text-[#404040] leading-[12.1px]\"\n *ngIf=\"item.children && item.children.length > 0\">\n {{getCardSubCaption(item)}}\n </span>\n </div>\n\n <div *ngIf=\"item.children && item.children.length > 0\" class=\"flex items-end h-[100%]\">\n <p (click)=\"viewDetails(item)\"\n class=\"my-0 underline text-[#3479E9] text-[12px] leading-[16.6px] cursor-pointer font-medium\">\n view details</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n <ng-template #cardChild let-item>\n <div class=\"flex h-[max-content]\">\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 flex gap-2 h-[100%] items-start\">\n <input *ngIf=\"item.data?.Selected != undefined\" [disabled]=\"this.isCheckboxDisabled(item)\"\n type=\"checkbox\" class=\"mt-1 cursor-pointer\" [(ngModel)]=\"item.data.Selected\"\n (click)=\"$event.preventDefault(); this.saveRoleDynamic(item)\" />\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 card-min-height justify-between h-[100%]\">\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">{{\n item.title\n }}</h3>\n <span class=\"!text-[10px] font-light text-[#404040] leading-[12.1px]\"\n *ngIf=\"item.children && item.children.length > 0\">\n {{getCardSubCaption(item)}}\n </span>\n </div>\n\n <div *ngIf=\"item.children && item.children.length > 0\" class=\"flex items-end h-[100%]\">\n <p (click)=\"viewDetailsChild(item)\"\n class=\"my-0 underline text-[#3479E9] text-[12px] leading-[16.6px] cursor-pointer font-medium\">\n view details</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n <verben-right-card-data-view *ngIf=\"this.cardContextHistory.length == 0\">\n <ng-template #parent>\n <div *ngIf=\"this.currentData\"\n class=\"flex flex-col rounded-xl h-full w-full justify-between relative space-y-4\">\n <verbena-input name=\"Name\" label=\"Name\" (ngModelChange)=\"updateTable()\"\n [(ngModel)]=\"this.currentData.data.Name\" />\n\n <!-- buttons -->\n <div class=\"flex justify-between bottom-8 left-0 right-0\">\n <verbena-button class=\"verben-delete-button\" text=\"Delete\"></verbena-button>\n <div class=\"flex gap-3\">\n <verbena-button class=\"verben-switch-button\" (click)=\"goToTableView()\"\n text=\"Switch To Table\"></verbena-button>\n <verbena-button class=\"verben-primary-button\" (click)=\"this.saveRole()\" text=\"Save\"></verbena-button>\n </div>\n </div>\n </div>\n\n </ng-template>\n </verben-right-card-data-view>\n <!-- <verben-right-card-data-view>\n yeshhhhhh\n </verben-right-card-data-view> -->\n\n <verben-card-data-view-footer *ngIf=\"this.cardContextHistory.length == 0\">\n <div class=\"flex gap-2 justify-between\">\n <div *ngIf=\"!vdcv.hasCurrentItem() && this.cardContextHistory.length == 0\"\n class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n <div class=\"flex {{vdcv.hasCurrentItem()?'flex-1':''}} justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links\">Load more</button>\n </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <verben-visible-column (columnsUpdated)=\"onColumnsUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"400px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter (filtersApplied)=\"onFilterUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"420px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"></verben-table-filter>\n </div>\n <div sort-content>\n <verben-sort-table (selectedOptions)=\"onSortUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"400px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-export [data]=\"data\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-between\">\n <div class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links\">Load more</button>\n </div>\n </div>\n</div>\n", styles: [".view-links{font-size:14px!important;color:#00f;font-weight:600;cursor:pointer}.view-links:hover{text-decoration:underline;text-underline-offset:3px}.context-banner{background-color:#d4a00773}.card-min-height{gap:10px}::ng-deep .childrenPadding{max-height:300px;overflow-y:auto}.pop-up-content{border-radius:4px;background-color:#fff;border:1px solid rgba(212,161,7,.5)}.pop-up-value{padding:10px 20px}.pop-up-content>div:nth-child(1){border-bottom:4px solid #FFE681}.width-max{min-width:max-content}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "dataKey", "formGroupConfig", "groupBy", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowDelete", "selectionChange"] }, { kind: "directive", type: i8.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i8.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i8.DataViewComponent, selector: "verben-data-view", inputs: ["buttonClass", "iconClass", "activeIconClass", "columnCustomClass", "filterCustomClass", "sortCustomClass", "extendCustomClass", "exportCustomClass", "selectCustomClass", "importCustomClass", "zIndex", "createCustomClass", "tableIcon", "cardIcon", "cardClass", "tableClass", "searchKey", "searchValue", "viewState", "searchTemplate", "importTemplate", "columnTemplate", "extendTemplate", "filterTemplate", "sortTemplate", "children", "exportTemplate", "createTemplate", "selectedColumnCount", "selectedSortCount", "selectedFilterTableCount", "inputWidth", "milliseconds", "showColumnChild", "showSortChild", "showFilterChild", "showImportChild", "showExportChild", "showExtendChild", "create", "showSelected", "isTableView"], outputs: ["viewChange", "stateChange", "onSearchChange"] }, { kind: "component", type: i8.CardDataViewComponent, selector: "verben-card-data-view", inputs: ["pd", "mg", "lHeight", "rHeight", "rWidth", "lWidth", "textColor", "lbgColor", "rbgColor", "border", "display", "borderRadius", "activeCss", "inActiveCss", "displayAsRow", "cardDataList", "dataId", "totalRecords", "footer", "noOfVisibleChildren", "onItemClick", "onCardChildClick"], outputs: ["loadMoreClick"] }, { kind: "component", type: i8.LeftCardDataComponent, selector: "verben-left-card-data", inputs: ["pd", "mg", "height", "weight", "activeCss", "inActiveCss", "cardDataList", "iconCollapse", "iconExpanded", "parent", "dataId"] }, { kind: "component", type: i8.LeftCardDataViewComponent, selector: "verben-left-card-data-view", inputs: ["cardDataList"] }, { kind: "component", type: i8.RightCardDataViewComponent, selector: "verben-right-card-data-view", inputs: ["parentData", "chilData", "meth"] }, { kind: "component", type: i8.CardDataViewFooterComponent, selector: "verben-card-data-view-footer" }, { kind: "component", type: i8.SortTableComponent, selector: "verben-sort-table", inputs: ["enableDragAndDrop", "sortOptions", "resetText", "displayedOptions", "propertyText", "showMoreText", "sortButtonText", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "containerHeight"], outputs: ["selectedOptions", "resetSortData"] }, { kind: "component", type: i8.VisibleColumnComponent, selector: "verben-visible-column", inputs: ["columns", "items", "enableDragAndDrop", "displayedColumns", "showMore", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "closeColumn"], outputs: ["columnsUpdated", "resetFilter"] }, { kind: "component", type: i8.TableFilterComponent, selector: "verben-table-filter", inputs: ["filterOptions", "pd", "mg", "height", "width", "bgColor", "boxShadow", "textColor", "primaryColor", "secondaryColor", "tertiaryColor", "border", "borderRadius", "selectWidth", "maxFilterLength", "tooltip"], outputs: ["filtersApplied", "resetSortData"] }, { kind: "component", type: i8.DataExportComponent, selector: "lib-data-export", inputs: ["columns", "data"], outputs: ["exportDataEvent"] }, { kind: "directive", type: i5.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i8.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "useIcon", "svgPosition", "iconPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "svgSize", "weight", "variant", "styleType", "svg", "svgWidth", "svgHeight", "iconColor", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i8.VerbenPopUpComponent, selector: "verben-pop-Up", inputs: ["dropdownOpen", "dropdownWidth", "color", "customStyles", "popUpClass", "border", "borderRadius", "enableMouseLeave", "cdkPosition"], outputs: ["dropdownOpenChange", "close"] }, { kind: "pipe", type: i7.DatePipe, name: "date" }] });
|
|
1301
1302
|
}
|
|
1302
1303
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RoleControlComponent, decorators: [{
|
|
1303
1304
|
type: Component,
|
|
1304
|
-
args: [{ selector: 'lib-role-control', template: "<div #messageLog class=\"flex flex-col gap-4 message-log-container\">\n <div *ngIf=\"this.cardContextHistory.length > 0\"\n class=\"context-banner py-3 px-4 rounded-xl flex item-center justify-space-between gap-3\">\n <div class=\"flex gap-2 flex-1 context-banner-content\">\n <div class=\"context-content items-center flex gap-2\" *ngFor=\"let context of this.cardContextHistory; index as i\">\n <div class=\"context-main-content-container flex gap-4\">\n <span class=\"context-caption font-bold text-[#404040]\">{{context.data.ChildrenType &&\n context.data.ChildrenType == childPermissionRef? context.data.Name: context.title}}</span>\n <span *ngIf=\"i == this.cardContextHistory.length -1\"\n class=\"context-subcaption\">{{this.getCardSubCaption(context)}}</span>\n </div>\n <div *ngIf=\"i < this.cardContextHistory.length -1\">/</div>\n </div>\n </div>\n <div class=\"flex justify-end\">\n <verben-svg (click)=\"closeDetails()\" class=\"cursor-pointer\" icon=\"close-circle-full\" [width]=\"20\"\n [height]=\"20\"></verben-svg>\n </div>\n </div>\n <verben-data-view #vdv [viewState]=\"{\n isSearch: this.cardContextHistory.length == 0,\n isColumn: this.cardContextHistory.length == 0,\n isFilter: this.cardContextHistory.length == 0,\n isSort: this.cardContextHistory.length == 0,\n isExport: this.cardContextHistory.length == 0,\n isSelect: this.cardContextHistory.length == 0,\n isCreate: this.cardContextHistory.length == 0,\n isToggle:this.cardContextHistory.length == 0,\n }\" [buttonClass]=\"'my-custom-button-class'\" [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\" [isTableView]=\"false\"\n [selectedColumnCount]=\"0\" [selectedSortCount]=\"0\" [selectedFilterTableCount]=\"0\" (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\" (onSearchChange)=\"handleSearch($event)\">\n <div class=\"mt-2\" table-content>\n <lib-data-table #dt [data]=\"data\" [columns]=\"visibleColumnDef\" [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\">\n <ng-container libColumn=\"select\">\n <ng-template #cell let-isSelected=\"isSelected\" let-toggleRowSelection=\"toggleRowSelection\">\n <input type=\"checkbox\" [checked]=\"isSelected\" (change)=\"toggleRowSelection()\" />\n </ng-template>\n <ng-template #header let-allRowsSelected=\"allRowsSelected\" let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\">\n <input type=\"checkbox\" [checked]=\"allRowsSelected()\" [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\" />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"createdAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"updatedAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"name\">\n <ng-template #cell let-row=\"row\" let-value>\n {{value.Name}}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-updateData=\"updateData\" let-value>\n <div class=\"width-max\">\n <verbena-input [(ngModel)]=\"value.Name\"></verbena-input>\n </div>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-isEditing=\"isEditing\" let-toggleRowEdit=\"toggleRowEdit\" let-row=\"row\" let-value>\n <verben-pop-Up #popup [customStyles]=\"{'z-index': '99'}\" [enableMouseLeave]=\"false\">\n <verben-svg class=\"cursor-pointer actions-icon\" dropdown-trigger icon=\"list\"></verben-svg>\n <div class=\"pop-up-content flex flex-col\" dropdown-content>\n <div (click)=\"toggleRowEdit(); closePopUp(); \" class=\"pop-up-value cursor-pointer\">Edit</div>\n <div (click)=\"viewDetailsFromTable(value)\" class=\"pop-up-value cursor-pointer\">View Details</div>\n <div class=\"pop-up-value cursor-pointer\">View Users</div>\n </div>\n </verben-pop-Up>\n <!-- <div class=\"flex gap-4 items-center\">\n <verben-svg (click)=\"editValue(value)\" icon=\"edit\" [width]=\"15\" [height]=\"15\"\n class=\"cursor-pointer\"></verben-svg>\n <span (click)=\"viewDetailsFromTable(value)\" class=\"view-links view-details\">view details</span>\n <span class=\"view-links view-users\">view users</span>\n </div> -->\n </ng-template>\n <ng-template #cellEdit let-isEditing=\"isEditing\" let-toggleRowEdit=\"toggleRowEdit\" let-row=\"row\" let-value>\n <div class=\"flex gap-2 items-center\">\n <verben-svg icon=\"tick\" [width]=\"15\" [height]=\"15\"\n (click)=\"tableSaveRole(value, toggleRowEdit)\"></verben-svg>\n <verben-svg icon=\"delete\" [width]=\"15\" [height]=\"15\"></verben-svg>\n <verben-svg icon=\"cardViewAlt\" [width]=\"15\" [height]=\"15\" (click)=\"editValue(value)\"></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view borderRadius=\"12px\" #vdcv dataId=\"Id\" border=\"5px\" [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\" mg=\"0px\">\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data #vlcd [parent]=\"vdcv\" dataId=\"MailAddress\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\" [cardDataList]=\"cardData\">\n <ng-template #card let-item>\n <div (click)=\"roleCardClicked(item)\"\n *ngIf=\"item.data.ChildrenType && item.data.ChildrenType == childPermissionRef\"\n class=\"flex cursor-pointer h-[max-content]\">\n <verben-svg [width]=\"15\" [height]=\"15\" (click)=\"toggleChildren(item); $event.stopPropagation()\"\n [ngClass]=\"item.children && item.children.length?'visible':'invisible'\"\n class=\"items-center flex pr-1 cursor-pointer\" [icon]=\"item.isChildrenExpanded?'minus':'plus'\" />\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 h-[100%]\">\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 card-min-height justify-between h-[100%]\">\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">{{\n item.data.Name\n }}</h3>\n <span class=\"!text-[10px] font-light text-[#404040] leading-[12.1px]\"\n *ngIf=\"item.children && item.children.length > 0\">\n {{getCardSubCaption(item)}}\n </span>\n </div>\n\n <div *ngIf=\"item.children && item.children.length > 0\" class=\"flex items-end h-[100%]\">\n <p (click)=\"viewDetails(item); $event.stopPropagation()\"\n class=\"my-0 underline text-[#3479E9] text-[12px] leading-[16.6px] cursor-pointer font-medium\">\n view details</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!item.data.ChildrenType || item.data.ChildrenType !== childPermissionRef\"\n class=\"flex h-[max-content]\">\n <verben-svg [ngClass]=\"item.children && item.children.length?'visible':'invisible'\" [width]=\"15\"\n [height]=\"15\" (click)=\"toggleChildren(item)\" class=\"items-center flex pr-1 cursor-pointer\"\n [icon]=\"item.isChildrenExpanded?'minus':'plus'\" />\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 flex gap-2 h-[100%] items-start\">\n <input *ngIf=\"item.data?.Selected != undefined\" [disabled]=\"this.isCheckboxDisabled(item)\"\n type=\"checkbox\" class=\"mt-1 cursor-pointer\" [(ngModel)]=\"item.data.Selected\"\n (click)=\"$event.preventDefault(); this.saveRoleDynamic(item)\" />\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 card-min-height justify-between h-[100%]\">\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">{{\n item.title\n }}</h3>\n <span class=\"!text-[10px] font-light text-[#404040] leading-[12.1px]\"\n *ngIf=\"item.children && item.children.length > 0\">\n {{getCardSubCaption(item)}}\n </span>\n </div>\n\n <div *ngIf=\"item.children && item.children.length > 0\" class=\"flex items-end h-[100%]\">\n <p (click)=\"viewDetails(item)\"\n class=\"my-0 underline text-[#3479E9] text-[12px] leading-[16.6px] cursor-pointer font-medium\">\n view details</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n <ng-template #cardChild let-item>\n <div class=\"flex h-[max-content]\">\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 flex gap-2 h-[100%] items-start\">\n <input *ngIf=\"item.data?.Selected != undefined\" [disabled]=\"this.isCheckboxDisabled(item)\"\n type=\"checkbox\" class=\"mt-1 cursor-pointer\" [(ngModel)]=\"item.data.Selected\"\n (click)=\"$event.preventDefault(); this.saveRoleDynamic(item)\" />\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 card-min-height justify-between h-[100%]\">\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">{{\n item.title\n }}</h3>\n <span class=\"!text-[10px] font-light text-[#404040] leading-[12.1px]\"\n *ngIf=\"item.children && item.children.length > 0\">\n {{getCardSubCaption(item)}}\n </span>\n </div>\n\n <div *ngIf=\"item.children && item.children.length > 0\" class=\"flex items-end h-[100%]\">\n <p (click)=\"viewDetailsChild(item)\"\n class=\"my-0 underline text-[#3479E9] text-[12px] leading-[16.6px] cursor-pointer font-medium\">\n view details</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n <verben-right-card-data-view *ngIf=\"this.cardContextHistory.length == 0\">\n <ng-template #parent>\n <div *ngIf=\"this.currentData\"\n class=\"flex flex-col rounded-xl h-full w-full justify-between relative space-y-4\">\n <verbena-input name=\"Name\" label=\"Name\" (ngModelChange)=\"updateTable()\"\n [(ngModel)]=\"this.currentData.data.Name\" />\n\n <!-- buttons -->\n <div class=\"flex justify-between bottom-8 left-0 right-0\">\n <verbena-button class=\"verben-delete-button\" text=\"Delete\"></verbena-button>\n <div class=\"flex gap-3\">\n <verbena-button class=\"verben-switch-button\" (click)=\"goToTableView()\"\n text=\"Switch To Table\"></verbena-button>\n <verbena-button class=\"verben-primary-button\" (click)=\"this.saveRole()\" text=\"Save\"></verbena-button>\n </div>\n </div>\n </div>\n\n </ng-template>\n </verben-right-card-data-view>\n <!-- <verben-right-card-data-view>\n yeshhhhhh\n </verben-right-card-data-view> -->\n\n <verben-card-data-view-footer *ngIf=\"this.cardContextHistory.length == 0\">\n <div class=\"flex gap-2 justify-between\">\n <div *ngIf=\"!vdcv.hasCurrentItem() && this.cardContextHistory.length == 0\"\n class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n <div class=\"flex {{vdcv.hasCurrentItem()?'flex-1':''}} justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links\">Load more</button>\n </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <verben-visible-column (columnsUpdated)=\"onColumnsUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"400px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter (filtersApplied)=\"onFilterUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"420px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"></verben-table-filter>\n </div>\n <div sort-content>\n <verben-sort-table (selectedOptions)=\"onSortUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"400px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-export [data]=\"data\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-between\">\n <div class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links\">Load more</button>\n </div>\n </div>\n</div>\n", styles: [".view-links{font-size:14px!important;color:#00f;font-weight:600;cursor:pointer}.view-links:hover{text-decoration:underline;text-underline-offset:3px}.context-banner{background-color:#d4a00773}.card-min-height{gap:10px}::ng-deep .childrenPadding{max-height:300px;overflow-y:auto}.pop-up-content{border-radius:4px;background-color:#fff;border:1px solid rgba(212,161,7,.5)}.pop-up-value{padding:10px 20px}.pop-up-content>div:nth-child(1){border-bottom:4px solid #FFE681}.width-max{min-width:max-content}\n"] }]
|
|
1305
|
+
args: [{ selector: 'lib-role-control', template: "<div #messageLog class=\"flex flex-col gap-4 message-log-container\">\n <div *ngIf=\"this.cardContextHistory.length > 0\"\n class=\"context-banner py-3 px-4 rounded-xl flex item-center justify-space-between gap-3\">\n <div class=\"flex gap-2 flex-1 context-banner-content\">\n <div class=\"context-content items-center flex gap-2\" *ngFor=\"let context of this.cardContextHistory; index as i\">\n <div class=\"context-main-content-container flex gap-4\">\n <span class=\"context-caption font-bold text-[#404040]\">{{context.data.ChildrenType &&\n context.data.ChildrenType == childPermissionRef? context.data.Name: context.title}}</span>\n <span *ngIf=\"i == this.cardContextHistory.length -1\"\n class=\"context-subcaption\">{{this.getCardSubCaption(context)}}</span>\n </div>\n <div *ngIf=\"i < this.cardContextHistory.length -1\">/</div>\n </div>\n </div>\n <div class=\"flex justify-end\">\n <verben-svg (click)=\"closeDetails()\" class=\"cursor-pointer\" icon=\"close-circle-full\" [width]=\"20\"\n [height]=\"20\"></verben-svg>\n </div>\n </div>\n <verben-data-view #vdv [viewState]=\"{\n isSearch: this.cardContextHistory.length == 0,\n isColumn: this.cardContextHistory.length == 0,\n isFilter: this.cardContextHistory.length == 0,\n isSort: this.cardContextHistory.length == 0,\n isExport: this.cardContextHistory.length == 0,\n isSelect: this.cardContextHistory.length == 0,\n isCreate: this.cardContextHistory.length == 0,\n isToggle:this.cardContextHistory.length == 0,\n }\" [buttonClass]=\"'my-custom-button-class'\" [iconClass]=\"'my-icon-class'\"\n [activeIconClass]=\"'my-active-icon-class'\" [isTableView]=\"false\"\n [selectedColumnCount]=\"0\" [selectedSortCount]=\"0\" [selectedFilterTableCount]=\"0\" (viewChange)=\"onViewChange($event)\"\n (stateChange)=\"onStateChange($event)\" (onSearchChange)=\"handleSearch($event)\">\n <div class=\"mt-2\" table-content>\n <lib-data-table [dataKey]=\"'Id'\" #dt [data]=\"data\" [columns]=\"visibleColumnDef\" [styleConfig]=\"styles\"\n (selectionChange)=\"onSelectionChange($event)\">\n <ng-container libColumn=\"select\">\n <ng-template #cell let-isSelected=\"isSelected\" let-toggleRowSelection=\"toggleRowSelection\">\n <input type=\"checkbox\" [checked]=\"isSelected\" (change)=\"toggleRowSelection()\" />\n </ng-template>\n <ng-template #header let-allRowsSelected=\"allRowsSelected\" let-someRowsSelected=\"someRowsSelected\"\n let-toggleAllRows=\"toggleAllRows\">\n <input type=\"checkbox\" [checked]=\"allRowsSelected()\" [indeterminate]=\"someRowsSelected()\"\n (change)=\"toggleAllRows()\" />\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"createdAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"updatedAt\">\n <ng-template #cell let-value>\n {{ value | date }}\n </ng-template>\n </ng-container>\n <ng-container libColumn=\"name\">\n <ng-template #cell let-row=\"row\" let-value>\n {{value.Name}}\n </ng-template>\n <ng-template #cellEdit let-row=\"row\" let-updateValue=\"updateValue\" let-updateData=\"updateData\" let-value>\n <div class=\"width-max\">\n <verbena-input [(ngModel)]=\"value.Name\"></verbena-input>\n </div>\n </ng-template>\n </ng-container>\n\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-isEditing=\"isEditing\" let-toggleRowEdit=\"toggleRowEdit\" let-row=\"row\" let-value>\n <verben-pop-Up #popup [customStyles]=\"{'z-index': '99'}\" [enableMouseLeave]=\"false\">\n <verben-svg class=\"cursor-pointer actions-icon\" dropdown-trigger icon=\"list\"></verben-svg>\n <div class=\"pop-up-content flex flex-col\" dropdown-content>\n <div (click)=\"toggleRowEdit(); closePopUp(); \" class=\"pop-up-value cursor-pointer\">Edit</div>\n <div (click)=\"viewDetailsFromTable(value)\" class=\"pop-up-value cursor-pointer\">View Details</div>\n <div class=\"pop-up-value cursor-pointer\">View Users</div>\n </div>\n </verben-pop-Up>\n <!-- <div class=\"flex gap-4 items-center\">\n <verben-svg (click)=\"editValue(value)\" icon=\"edit\" [width]=\"15\" [height]=\"15\"\n class=\"cursor-pointer\"></verben-svg>\n <span (click)=\"viewDetailsFromTable(value)\" class=\"view-links view-details\">view details</span>\n <span class=\"view-links view-users\">view users</span>\n </div> -->\n </ng-template>\n <ng-template #cellEdit let-isEditing=\"isEditing\" let-toggleRowEdit=\"toggleRowEdit\" let-row=\"row\" let-value>\n <div class=\"flex gap-2 items-center\">\n <verben-svg icon=\"tick\" [width]=\"15\" [height]=\"15\"\n (click)=\"tableSaveRole(value, toggleRowEdit)\"></verben-svg>\n <verben-svg icon=\"delete\" [width]=\"15\" [height]=\"15\"></verben-svg>\n <verben-svg icon=\"cardViewAlt\" [width]=\"15\" [height]=\"15\" (click)=\"editValue(value)\"></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n <div card-content>\n <verben-card-data-view borderRadius=\"12px\" #vdcv dataId=\"Id\" border=\"5px\" [cardDataList]=\"cardData\"\n rbgColor=\"#f5f6f9\" mg=\"0px\">\n <verben-left-card-data-view class=\"space-y-7\">\n <verben-left-card-data #vlcd [parent]=\"vdcv\" dataId=\"MailAddress\"\n class=\"bg-secondary-100 rounded-xl border-primary border-[1px]\" [cardDataList]=\"cardData\">\n <ng-template #card let-item>\n <div (click)=\"roleCardClicked(item)\"\n *ngIf=\"item.data.ChildrenType && item.data.ChildrenType == childPermissionRef\"\n class=\"flex cursor-pointer h-[max-content]\">\n <verben-svg [width]=\"15\" [height]=\"15\" (click)=\"toggleChildren(item); $event.stopPropagation()\"\n [ngClass]=\"item.children && item.children.length?'visible':'invisible'\"\n class=\"items-center flex pr-1 cursor-pointer\" [icon]=\"item.isChildrenExpanded?'minus':'plus'\" />\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 h-[100%]\">\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 card-min-height justify-between h-[100%]\">\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">{{\n item.data.Name\n }}</h3>\n <span class=\"!text-[10px] font-light text-[#404040] leading-[12.1px]\"\n *ngIf=\"item.children && item.children.length > 0\">\n {{getCardSubCaption(item)}}\n </span>\n </div>\n\n <div *ngIf=\"item.children && item.children.length > 0\" class=\"flex items-end h-[100%]\">\n <p (click)=\"viewDetails(item); $event.stopPropagation()\"\n class=\"my-0 underline text-[#3479E9] text-[12px] leading-[16.6px] cursor-pointer font-medium\">\n view details</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"!item.data.ChildrenType || item.data.ChildrenType !== childPermissionRef\"\n class=\"flex h-[max-content]\">\n <verben-svg [ngClass]=\"item.children && item.children.length?'visible':'invisible'\" [width]=\"15\"\n [height]=\"15\" (click)=\"toggleChildren(item)\" class=\"items-center flex pr-1 cursor-pointer\"\n [icon]=\"item.isChildrenExpanded?'minus':'plus'\" />\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 flex gap-2 h-[100%] items-start\">\n <input *ngIf=\"item.data?.Selected != undefined\" [disabled]=\"this.isCheckboxDisabled(item)\"\n type=\"checkbox\" class=\"mt-1 cursor-pointer\" [(ngModel)]=\"item.data.Selected\"\n (click)=\"$event.preventDefault(); this.saveRoleDynamic(item)\" />\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 card-min-height justify-between h-[100%]\">\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">{{\n item.title\n }}</h3>\n <span class=\"!text-[10px] font-light text-[#404040] leading-[12.1px]\"\n *ngIf=\"item.children && item.children.length > 0\">\n {{getCardSubCaption(item)}}\n </span>\n </div>\n\n <div *ngIf=\"item.children && item.children.length > 0\" class=\"flex items-end h-[100%]\">\n <p (click)=\"viewDetails(item)\"\n class=\"my-0 underline text-[#3479E9] text-[12px] leading-[16.6px] cursor-pointer font-medium\">\n view details</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n <ng-template #cardChild let-item>\n <div class=\"flex h-[max-content]\">\n <div class=\"flex w-full bg-secondary rounded-xl\">\n <div class=\"w-3 rounded-xl rounded-tr-none rounded-br-none\" [ngClass]=\"\n item.selected ? 'bg-primary' : 'bg-secondary-200'\n \"></div>\n <div class=\"py-3 px-4 flex-1 flex gap-2 h-[100%] items-start\">\n <input *ngIf=\"item.data?.Selected != undefined\" [disabled]=\"this.isCheckboxDisabled(item)\"\n type=\"checkbox\" class=\"mt-1 cursor-pointer\" [(ngModel)]=\"item.data.Selected\"\n (click)=\"$event.preventDefault(); this.saveRoleDynamic(item)\" />\n <div class=\"flex items-start flex-1 gap-1 justify-between h-[100%]\">\n <div class=\"flex flex-col flex-1 card-min-height justify-between h-[100%]\">\n <h3 class=\"my-0 font-bold text-[#404040] leading-[19.5px]\">{{\n item.title\n }}</h3>\n <span class=\"!text-[10px] font-light text-[#404040] leading-[12.1px]\"\n *ngIf=\"item.children && item.children.length > 0\">\n {{getCardSubCaption(item)}}\n </span>\n </div>\n\n <div *ngIf=\"item.children && item.children.length > 0\" class=\"flex items-end h-[100%]\">\n <p (click)=\"viewDetailsChild(item)\"\n class=\"my-0 underline text-[#3479E9] text-[12px] leading-[16.6px] cursor-pointer font-medium\">\n view details</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </verben-left-card-data>\n </verben-left-card-data-view>\n <verben-right-card-data-view *ngIf=\"this.cardContextHistory.length == 0\">\n <ng-template #parent>\n <div *ngIf=\"this.currentData\"\n class=\"flex flex-col rounded-xl h-full w-full justify-between relative space-y-4\">\n <verbena-input name=\"Name\" label=\"Name\" (ngModelChange)=\"updateTable()\"\n [(ngModel)]=\"this.currentData.data.Name\" />\n\n <!-- buttons -->\n <div class=\"flex justify-between bottom-8 left-0 right-0\">\n <verbena-button class=\"verben-delete-button\" text=\"Delete\"></verbena-button>\n <div class=\"flex gap-3\">\n <verbena-button class=\"verben-switch-button\" (click)=\"goToTableView()\"\n text=\"Switch To Table\"></verbena-button>\n <verbena-button class=\"verben-primary-button\" (click)=\"this.saveRole()\" text=\"Save\"></verbena-button>\n </div>\n </div>\n </div>\n\n </ng-template>\n </verben-right-card-data-view>\n <!-- <verben-right-card-data-view>\n yeshhhhhh\n </verben-right-card-data-view> -->\n\n <verben-card-data-view-footer *ngIf=\"this.cardContextHistory.length == 0\">\n <div class=\"flex gap-2 justify-between\">\n <div *ngIf=\"!vdcv.hasCurrentItem() && this.cardContextHistory.length == 0\"\n class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n <div class=\"flex {{vdcv.hasCurrentItem()?'flex-1':''}} justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links\">Load more</button>\n </div>\n </div>\n </verben-card-data-view-footer>\n </verben-card-data-view>\n </div>\n <div column-content>\n <verben-visible-column (columnsUpdated)=\"onColumnsUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"400px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" [columns]=\"visibleColumns\"\n [displayedColumns]=\"5\"></verben-visible-column>\n </div>\n <div filter-content>\n <verben-table-filter (filtersApplied)=\"onFilterUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"420px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [filterOptions]=\"filterArray\"\n [maxFilterLength]=\"3\"></verben-table-filter>\n </div>\n <div sort-content>\n <verben-sort-table (selectedOptions)=\"onSortUpdated($event)\" [border]=\"'1px solid rgba(212, 160, 7, 1)'\"\n borderRadius=\"10px\" boxShadow=\"2px 2px 2px 0px silver\" bgColor=\"white\" width=\"400px\" textColor=\"black\" pd=\"1rem\"\n primaryColor=\"#FFE681\" secondaryColor=\"#3479E9\" tertiaryColor=\"#404040\" [enableDragAndDrop]=\"true\"\n [sortOptions]=\"sortOptions\"></verben-sort-table>\n </div>\n <div export-content>\n <lib-data-export [data]=\"data\" (exportDataEvent)=\"handleExport($event)\">\n </lib-data-export>\n </div>\n </verben-data-view>\n <div *ngIf=\"vdv.isTableView\" class=\"flex gap-2 justify-between\">\n <div class=\"message-log-button-container flex justify-between\">\n <verbena-button [fontWeight]=\"'bold'\" [bgColor]=\"'#8E8D87'\" [borderRadius]=\"'4px'\" [textColor]=\"'#fff'\"\n [text]=\"'Delete'\">\n </verbena-button>\n </div>\n <div class=\"flex justify-end items-center gap-5\">\n <span class=\"paginator-text\">{{ cardData.length }} records loaded</span>\n <button (click)=\"loadMore()\" class=\"load-more view-links\">Load more</button>\n </div>\n </div>\n</div>\n", styles: [".view-links{font-size:14px!important;color:#00f;font-weight:600;cursor:pointer}.view-links:hover{text-decoration:underline;text-underline-offset:3px}.context-banner{background-color:#d4a00773}.card-min-height{gap:10px}::ng-deep .childrenPadding{max-height:300px;overflow-y:auto}.pop-up-content{border-radius:4px;background-color:#fff;border:1px solid rgba(212,161,7,.5)}.pop-up-value{padding:10px 20px}.pop-up-content>div:nth-child(1){border-bottom:4px solid #FFE681}.width-max{min-width:max-content}\n"] }]
|
|
1305
1306
|
}], ctorParameters: () => [{ type: i1.AuthorizationService }, { type: i2.RoleControlService }, { type: i3.UtilService }, { type: i4.HttpWebRequestService }, { type: i0.ChangeDetectorRef }, { type: i5.FormBuilder }, { type: i6.EnvironmentService }], propDecorators: { cardDataView: [{
|
|
1306
1307
|
type: ViewChild,
|
|
1307
1308
|
args: ['vdcv']
|
|
@@ -1325,4 +1326,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1325
1326
|
}], searchDebounceTime: [{
|
|
1326
1327
|
type: Input
|
|
1327
1328
|
}] } });
|
|
1328
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1jb250cm9sLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1hdXRoZW50aWNhdGlvbi11aS9zcmMvbGliL2NvbXBvbmVudHMvcm9sZS1jb250cm9sL3JvbGUtY29udHJvbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tYXV0aGVudGljYXRpb24tdWkvc3JjL2xpYi9jb21wb25lbnRzL3JvbGUtY29udHJvbC9yb2xlLWNvbnRyb2wuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBR0wsU0FBUyxFQUNULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBSUwsY0FBYyxHQUtmLE1BQU0sY0FBYyxDQUFDO0FBRXRCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFeEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUU1QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBUXhDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSXJFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUs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ZW50LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvbGVDb250cm9sU2VydmljZSB9IGZyb20gJy4vcm9sZS1jb250cm9sLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ2FyZERhdGEsXG4gIENhcmREYXRhVmlld0NvbXBvbmVudCxcbiAgQ29sdW1uRGVmaW5pdGlvbixcbiAgRGF0YUZpbHRlclR5cGUsXG4gIERhdGFUYWJsZUNvbXBvbmVudCxcbiAgRGF0YVZpZXdDb21wb25lbnQsXG4gIElEYXRhRmlsdGVyLFxuICBWZXJiZW5Qb3BVcENvbXBvbmVudCxcbn0gZnJvbSAndmVyYmVuLW5nLXVpJztcbmltcG9ydCB7IFJvbGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvUm9sZSc7XG5pbXBvcnQgeyBiYXNlU3R5bGUgfSBmcm9tICcuL2Jhc2UtdGFibGUtc3R5bGUnO1xuaW1wb3J0IHsgT2JqZWN0U3RhdGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvb2JqZWN0LXN0YXRlJztcbmltcG9ydCB7IFJvbGVDb250ZXh0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL1JvbGVDb250ZXh0JztcbmltcG9ydCB7IFVJcyB9IGZyb20gJy4vVUlzJztcbmltcG9ydCB7IFJvbGVBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvUm9sZUFjdGlvbic7XG5pbXBvcnQgeyBVSUFjdGlvbnMgfSBmcm9tICcuL1VJQWN0aW9ucyc7XG5pbXBvcnQgeyBNYXBwZWRSb2xlIH0gZnJvbSAnLi9NYXBwZWRSb2xlJztcbmltcG9ydCB7XG4gIEF1dGhvcml6YXRpb25Db25maWcsXG4gIEF1dGhvcml6YXRpb25TZXJ2aWNlLFxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRob3JpemF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWFwcGVkUm9sZUNvbnRleHQgfSBmcm9tICcuL01hcHBlZFJvbGVDb250ZXh0JztcbmltcG9ydCB7IE1hcHBlZFJvbGVBY3Rpb24gfSBmcm9tICcuL01hcHBlZFJvbGVBY3Rpb24nO1xuaW1wb3J0IHsgQ2hpbGRyZW5UeXBlIH0gZnJvbSAnLi9DaGlsZHJlblR5cGUnO1xuaW1wb3J0IHtcbiAgRm9ybUJ1aWxkZXIsXG4gIEZvcm1Db250cm9sLFxuICBGb3JtR3JvdXAsXG4gIFZhbGlkYXRvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFV0aWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXRpbC5zZXJ2aWNlJztcbmltcG9ydCB7IEh0dHBXZWJSZXF1ZXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAtd2ViLXJlcXVlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL0Vycm9yUmVzcG9uc2UnO1xuaW1wb3J0IHsgUGFnZWRSZXN1bHQgfSBmcm9tICcuLi8uLi9tb2RlbHMvUGFnZWRSZXN1bHQnO1xuaW1wb3J0IHsgU2VhcmNoUHJvcGVydHlWYWx1ZSB9IGZyb20gJy4uLy4uL21vZGVscy9TZWFyY2hQcm9wZXJ0eVZhbHVlJztcbmltcG9ydCB7IFNlYXJjaE9wZXJhdG9yIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1NlYXJjaE9wZXJhdG9yJztcbmltcG9ydCB7IFNlYXJjaFByb3BlcnR5U2lnbiB9IGZyb20gJy4uLy4uL21vZGVscy9TZWFyY2hQcm9wZXJ0eVNpZ24nO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW52aXJvbm1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblJvbGVDb250ZXh0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL0FwcGxpY2F0aW9uUm9sZUNvbnRleHQnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25Sb2xlQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL0FwcGxpY2F0aW9uUm9sZUFjdGlvbic7XG5pbXBvcnQgeyBTZWFyY2hQcm9wZXJ0eVZhbHVlVHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9TZWFyY2hQcm9wZXJ0eVZhbHVlVHlwZSc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNvcnREaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvU29ydERpcmVjdGlvbic7XG5cbmVudW0gRGF0ZUZpbHRlclR5cGVzIHtcbiAgQmVmb3JlID0gU2VhcmNoUHJvcGVydHlTaWduLkxULFxuICBPbiA9IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgQWZ0ZXIgPSBTZWFyY2hQcm9wZXJ0eVNpZ24uR1QsXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1yb2xlLWNvbnRyb2wnLFxuICB0ZW1wbGF0ZVVybDogJy4vcm9sZS1jb250cm9sLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3JvbGUtY29udHJvbC5jb21wb25lbnQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgUm9sZUNvbnRyb2xDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICB2aXNpYmxlQ29sdW1uRGVmOiBDb2x1bW5EZWZpbml0aW9uPE1hcHBlZFJvbGU+W10gPSBbXTtcbiAgc3R5bGVzID0gYmFzZVN0eWxlO1xuICBkYXRhOiBNYXBwZWRSb2xlW10gPSBbXTtcbiAgY2FyZERhdGE6IENhcmREYXRhW10gPSBbXTtcbiAgY3VycmVudERhdGE6IENhcmREYXRhIHwgbnVsbCA9IG51bGw7XG4gIGN1cnJlbnRFeHBhbmRlZENhcmQ6IENhcmREYXRhIHwgbnVsbCA9IG51bGw7XG4gIGNhcmRDb250ZXh0OiBDYXJkRGF0YSB8IG51bGwgPSBudWxsO1xuICBjYXJkQ29udGV4dEhpc3Rvcnk6IENhcmREYXRhW10gPSBbXTtcbiAgY2FyZENvbnRleHRIaXN0b3J5RGF0YTogQ2FyZERhdGFbXVtdID0gW107XG4gIEBWaWV3Q2hpbGQoJ3ZkY3YnKSBjYXJkRGF0YVZpZXchOiBDYXJkRGF0YVZpZXdDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3ZkdicpIGRhdGFWaWV3ITogRGF0YVZpZXdDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGRyZW4oJ3BvcHVwJykgcG9wVXBzITogUXVlcnlMaXN0PFZlcmJlblBvcFVwQ29tcG9uZW50PjtcbiAgQFZpZXdDaGlsZCgnZHQnKSB0YWJsZVZpZXchOiBEYXRhVGFibGVDb21wb25lbnQ8TWFwcGVkUm9sZT47XG4gIEBJbnB1dCgpIGlzR2xvYmFsOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc2VydmljZU5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBhcHBsaWNhdGlvbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXIgPSAxMDtcbiAgQElucHV0KCkgc2VhcmNoRGVib3VuY2VUaW1lOiBudW1iZXIgPSA1MDA7XG4gIHBhZ2VTdGF0ZTogUGFnZWRSZXN1bHQ8Um9sZT4gfCBudWxsID0gbnVsbDtcbiAgc291cmNlRGF0YTogQXV0aG9yaXphdGlvbkNvbmZpZ1tdID0gW107XG4gIGlzT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBvcGVuRHJvcGRvd25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGN1cnJlbnRGaWx0ZXJzOiBJRGF0YUZpbHRlcltdID0gW107XG4gIGN1cnJlbnRTb3J0czogSURhdGFGaWx0ZXJbXSA9IFtdO1xuICBzZWFyY2hUZXJtJCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICB2aXNpYmxlQ29sdW1uczogSURhdGFGaWx0ZXJbXSA9IFtdO1xuXG4gIGZpbHRlckFycmF5OiBJRGF0YUZpbHRlcltdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdDcmVhdGVkQXQnLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuRGF0ZSxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ1VwZGF0ZWRBdCcsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5EYXRlLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcbiAgXTtcblxuICBzb3J0T3B0aW9uczogSURhdGFGaWx0ZXJbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnQ3JlYXRlZEF0JyxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLkRhdGUsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdVcGRhdGVkQXQnLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuRGF0ZSxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gIF07XG5cbiAgLy8gcHJpdmF0ZSBfc2VhcmNoSXRlbTogc3RyaW5nID0gJyc7XG4gIC8vIGdldCBzZWFyY2hJdGVtKCk6IHN0cmluZyB7XG4gIC8vICAgcmV0dXJuIHRoaXMuX3NlYXJjaEl0ZW1cbiAgLy8gfVxuICAvLyBzZXQgc2VhcmNoSXRlbSh2YWx1ZTogc3RyaW5nKSB7XG4gIC8vICAgdGhpcy5fc2VhcmNoSXRlbSA9IHZhbHVlO1xuICAvLyAgIHRoaXMuc2VhcmNoVGVybSQubmV4dCh2YWx1ZSk7XG4gIC8vIH1cblxuICAvLyBmb3JtOiBGb3JtR3JvdXA7XG4gIGNoaWxkUGVybWlzc2lvblJlZjogQ2hpbGRyZW5UeXBlID0gQ2hpbGRyZW5UeXBlLlBlcm1pc3Npb247XG5cbiAgcm9sZUNvbnRleHRzU3RvcmU6IEFwcGxpY2F0aW9uUm9sZUNvbnRleHRbXSA9IFtdO1xuICByb2xlQWN0aW9uc1N0b3JlOiBBcHBsaWNhdGlvblJvbGVBY3Rpb25bXSA9IFtdO1xuICBwcml2YXRlIGN1cnJlbnRTZWFyY2hUZXJtOiBzdHJpbmcgPSAnJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRob3JpemF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJvbGVDb250cm9sU3ZjOiBSb2xlQ29udHJvbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1dGlsU2VydmljZTogVXRpbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZXJ2ZXI6IEh0dHBXZWJSZXF1ZXN0U2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBlbnZTdmM6IEVudmlyb25tZW50U2VydmljZVxuICApIHtcbiAgICB0aGlzLnZpc2libGVDb2x1bW5EZWYgPSByb2xlQ29udHJvbFN2Yy5yb2xlQ29sdW1ucztcbiAgICB0aGlzLnZpc2libGVDb2x1bW5zID0gcm9sZUNvbnRyb2xTdmMucm9sZUNvbHVtbnMubWFwKChjb2wpID0+ICh7XG4gICAgICBjaGVja2VkOiB0cnVlLFxuICAgICAgbmFtZTogdHlwZW9mIGNvbC5oZWFkZXIgPT09ICdzdHJpbmcnID8gY29sLmhlYWRlciA6IGNvbC5pZCxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLkJvb2wsXG4gICAgfSkpO1xuICAgIC8vIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgIC8vICAgTmFtZTogbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxuICAgIC8vIH0pO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbW9ja0RhdGEgPSB0aGlzLmdldE1vY2tSb2xlcygpO1xuICAgIGNvbnN0IHJvbGVzID0gYXdhaXQgdGhpcy5nZXRBbGxSb2xlcygpO1xuICAgIGlmICh0aGlzLmlzR2xvYmFsKSB7XG4gICAgICBjb25zdCBjb250ZXh0c1JlcyA9IGF3YWl0IHRoaXMuZ2V0U2F2ZWRDb250ZXh0cygpO1xuICAgICAgaWYgKGNvbnRleHRzUmVzKSB7XG4gICAgICAgIHRoaXMucm9sZUNvbnRleHRzU3RvcmUgPSBjb250ZXh0c1JlcztcbiAgICAgICAgdGhpcy5yb2xlQWN0aW9uc1N0b3JlID0gY29udGV4dHNSZXMuZmxhdE1hcCgoeCkgPT4geC5Sb2xlQWN0aW9ucyk7XG4gICAgICAgIGNvbnN0IGF1dGhDb25maWc6IEF1dGhvcml6YXRpb25Db25maWdbXSA9IGNvbnRleHRzUmVzLm1hcCgoeCkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBOYW1lOiB4Lk5hbWUsXG4gICAgICAgICAgICBBY3Rpb25zOiB4LlJvbGVBY3Rpb25zLm1hcCgoeSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4geS5OYW1lO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc291cmNlRGF0YSA9IGF1dGhDb25maWc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc291cmNlRGF0YSA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkNvbmZpZztcbiAgICB9XG4gICAgaWYgKHJvbGVzKSB7XG4gICAgICB0aGlzLnNldFVwTWFwcGVkRGF0YShyb2xlcyk7XG4gICAgICB0aGlzLnNldFVwQ2FyZERhdGEoKTtcbiAgICB9XG4gICAgdGhpcy5zZWFyY2hUZXJtJFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuc2VhcmNoRGVib3VuY2VUaW1lKSkgLy8gQWRqdXN0IGRlYm91bmNlIHRpbWUgaGVyZSAoaW4gbXMpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChzZWFyY2hUZXJtKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudFNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlcnNBbmRTb3J0cyh0cnVlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0U2F2ZWRDb250ZXh0cygpOiBQcm9taXNlPEFwcGxpY2F0aW9uUm9sZUNvbnRleHRbXSB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICghdGhpcy5pc0dsb2JhbCB8fCAhdGhpcy5hcHBsaWNhdGlvbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdmFyIHBheWxvYWQ6IFNlYXJjaFByb3BlcnR5VmFsdWVbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgUHJvcGVydHlOYW1lOiAnQXBwbGljYXRpb24nLFxuICAgICAgICBFbnRpdHlWYWx1ZTogdGhpcy5hcHBsaWNhdGlvbixcbiAgICAgICAgT3BlcmF0b3I6IFNlYXJjaE9wZXJhdG9yLkFuZCxcbiAgICAgICAgU2lnbjogU2VhcmNoUHJvcGVydHlTaWduLkVRLFxuICAgICAgfSxcbiAgICAgIC8vIHtcbiAgICAgIC8vICAgUHJvcGVydHlOYW1lOiAnQVBJS2V5JyxcbiAgICAgIC8vICAgRW50aXR5VmFsdWU6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgIC8vICAgT3BlcmF0b3I6IFNlYXJjaE9wZXJhdG9yLkFuZCxcbiAgICAgIC8vICAgU2lnbjogU2VhcmNoUHJvcGVydHlTaWduLkVRLFxuICAgICAgLy8gfSxcbiAgICBdO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoXG4gICAgICBgQXBwbGljYXRpb24vU2VhcmNoQXBwbGljYXRpb25Sb2xlQ29udGV4dHMvMC8wYCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHJlc3VsdCA9IChyZXMgYXMgUGFnZWRSZXN1bHQ8QXBwbGljYXRpb25Sb2xlQ29udGV4dD4pLlJlc3VsdDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG4gIGFzeW5jIGdldEFsbFJvbGVzKCk6IFByb21pc2U8Um9sZVtdIHwgdW5kZWZpbmVkPiB7XG4gICAgLy8gICB2YXIgcGF5bG9hZDogU2VhcmNoUHJvcGVydHlWYWx1ZVtdID0gW1xuICAgIC8vICAgICB7XG4gICAgLy8gICAgICAgUHJvcGVydHlOYW1lOiAnQVBJS2V5JyxcbiAgICAvLyAgICAgICBFbnRpdHlWYWx1ZTogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgIC8vICAgICAgIE9wZXJhdG9yOiBTZWFyY2hPcGVyYXRvci5BbmQsXG4gICAgLy8gICAgICAgU2lnbjogU2VhcmNoUHJvcGVydHlTaWduLkVRXG4gICAgLy8gICAgIH1cbiAgICAvLyBdXG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KGBSb2xlL0dldFJvbGVzLzAvJHt0aGlzLnBhZ2VTaXplfWApO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYWdlU3RhdGUgPSByZXMgYXMgUGFnZWRSZXN1bHQ8Um9sZT47XG4gICAgICB2YXIgcmVzdWx0ID0gKHJlcyBhcyBQYWdlZFJlc3VsdDxSb2xlPikuUmVzdWx0O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkTW9yZSgpIHtcbiAgICBpZiAoIXRoaXMucGFnZVN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzLmxlbmd0aCA+IDAgfHxcbiAgICAgIHRoaXMuY3VycmVudFNvcnRzLmxlbmd0aCA+IDAgfHxcbiAgICAgIHRoaXMuY3VycmVudFNlYXJjaFRlcm0udHJpbSgpLmxlbmd0aCA+IDBcbiAgICAgICAgPyBhd2FpdCB0aGlzLmxvYWRNb3JlRmlsdGVyc0FuZFNvcnRzKClcbiAgICAgICAgOiBhd2FpdCB0aGlzLnNlcnZlci5nZXQoXG4gICAgICAgICAgICBgUm9sZS9HZXRSb2xlcy8ke3RoaXMucGFnZVN0YXRlLlNraXB9LyR7dGhpcy5wYWdlU2l6ZX1gXG4gICAgICAgICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYWdlU3RhdGUgPSByZXMgYXMgUGFnZWRSZXN1bHQ8Um9sZT47XG4gICAgICB2YXIgcmVzdWx0ID0gKHJlcyBhcyBQYWdlZFJlc3VsdDxSb2xlPikuUmVzdWx0O1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuc2V0VXBNYXBwZWREYXRhRXh0cmEocmVzdWx0KTtcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5jb25jYXQoZGF0YSk7XG4gICAgICB0aGlzLnNldFVwQ2FyZERhdGFFeHRyYShkYXRhKTtcbiAgICB9XG4gIH1cblxuICBnZXRBcHBsaWNhdGlvbkNvbnRleHRDb2RlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMucm9sZUNvbnRleHRzU3RvcmUuZmluZCgoeCkgPT4geC5OYW1lID09IG5hbWUpO1xuICAgIHJldHVybiBpdGVtID8gaXRlbS5Db2RlIDogJyc7XG4gIH1cbiAgZ2V0QXBwbGljYXRpb25BY3Rpb25Db2RlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMucm9sZUFjdGlvbnNTdG9yZS5maW5kKCh4KSA9PiB4Lk5hbWUgPT0gbmFtZSk7XG4gICAgcmV0dXJuIGl0ZW0gPyBpdGVtLkNvZGUgOiAnJztcbiAgfVxuXG4gIGZpbmRQYXJlbnQoY2FyZERhdGE6IENhcmREYXRhW10sIHRhcmdldDogQ2FyZERhdGEpOiBDYXJkRGF0YSB8IG51bGwge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBjYXJkRGF0YSkge1xuICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4uaW5jbHVkZXModGFyZ2V0KSkge1xuICAgICAgICByZXR1cm4gaXRlbTsgLy8gSW1tZWRpYXRlIHBhcmVudCBmb3VuZFxuICAgICAgfVxuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5maW5kUGFyZW50KGl0ZW0uY2hpbGRyZW4sIHRhcmdldCk7XG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsOyAvLyBOb3QgZm91bmRcbiAgfVxuXG4gIGlzQ2hlY2tib3hEaXNhYmxlZChpdGVtOiBDYXJkRGF0YSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBhcmVudCA9XG4gICAgICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeURhdGEubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMuZmluZFBhcmVudCh0aGlzLmNhcmRDb250ZXh0SGlzdG9yeURhdGFbMF0sIGl0ZW0pXG4gICAgICAgIDogdGhpcy5maW5kUGFyZW50KHRoaXMuY2FyZERhdGEsIGl0ZW0pO1xuICAgIGlmIChcbiAgICAgIHBhcmVudCAmJlxuICAgICAgcGFyZW50LmRhdGEuQ2hpbGRyZW5UeXBlICYmXG4gICAgICBwYXJlbnQuZGF0YS5DaGlsZHJlblR5cGUgPT0gQ2hpbGRyZW5UeXBlLkFjdGlvbiAmJlxuICAgICAgcGFyZW50LmRhdGEuU2VsZWN0ZWQgPT0gZmFsc2VcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzZXRVcE1hcHBlZERhdGEoZGF0YTogUm9sZVtdKSB7XG4gICAgdGhpcy5kYXRhID0gZGF0YS5tYXAoKHgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLngsXG4gICAgICAgIElkOiB4LkNvZGUsXG4gICAgICAgIENoaWxkcmVuVHlwZTogQ2hpbGRyZW5UeXBlLlBlcm1pc3Npb24sXG4gICAgICAgIFJvbGVDb250ZXh0czogdGhpcy5zb3VyY2VEYXRhLm1hcCgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdJZCA9IHguUm9sZUNvbnRleHRzLmZpbmRJbmRleChcbiAgICAgICAgICAgICh5KSA9PiB5Lk5hbWUgPT0gY29uZmlnLk5hbWVcbiAgICAgICAgICApO1xuICAgICAgICAgIHZhciBjb250ZXh0OiBNYXBwZWRSb2xlQ29udGV4dCA9IHtcbiAgICAgICAgICAgIENoaWxkcmVuVHlwZTogQ2hpbGRyZW5UeXBlLkFjdGlvbixcbiAgICAgICAgICAgIFNlbGVjdGVkOiBleGlzdGluZ0lkID4gLTEgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICBSb2xlQWN0aW9uczogY29uZmlnLkFjdGlvbnMubWFwKChhY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdBY3Rpb24gPVxuICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKGMpID0+IGMuTmFtZSA9PSBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICAgICAgICB2YXIgYWN0OiBNYXBwZWRSb2xlQWN0aW9uID0ge1xuICAgICAgICAgICAgICAgIFNlbGVjdGVkOiBleGlzdGluZ0FjdGlvbiA+IC0xID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIE5hbWU6IGFjdGlvbixcbiAgICAgICAgICAgICAgICBSb2xlOiB4LkNvZGUsXG4gICAgICAgICAgICAgICAgQ29udGV4dDogJycsXG4gICAgICAgICAgICAgICAgaWQ6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbZXhpc3RpbmdBY3Rpb25dLkNvZGVcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICBJZDpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tleGlzdGluZ0FjdGlvbl0uQ29kZVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgICAgICAgICAgVGVuYW50SWQ6IHguVGVuYW50SWQsXG4gICAgICAgICAgICAgICAgQ29kZTpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tleGlzdGluZ0FjdGlvbl1cbiAgICAgICAgICAgICAgICAgICAgICAgIC5Db2RlXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgU2VydmljZU5hbWU6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbZXhpc3RpbmdBY3Rpb25dXG4gICAgICAgICAgICAgICAgICAgICAgICAuU2VydmljZU5hbWVcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICBBUElLZXk6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbZXhpc3RpbmdBY3Rpb25dXG4gICAgICAgICAgICAgICAgICAgICAgICAuQVBJS2V5XG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uUm9sZUFjdGlvbjogdGhpcy5nZXRBcHBsaWNhdGlvbkFjdGlvbkNvZGUoYWN0aW9uKSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgcmV0dXJuIGFjdDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgTmFtZTogY29uZmlnLk5hbWUsXG4gICAgICAgICAgICBSb2xlOiB4LkNvZGUsXG4gICAgICAgICAgICBpZDogZXhpc3RpbmdJZCA+IC0xID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uQ29kZSA6ICcnLFxuICAgICAgICAgICAgSWQ6IGV4aXN0aW5nSWQgPiAtMSA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLkNvZGUgOiAnJyxcbiAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgVGVuYW50SWQ6IHguVGVuYW50SWQsXG4gICAgICAgICAgICBDb2RlOiBleGlzdGluZ0lkID4gLTEgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Db2RlIDogJycsXG4gICAgICAgICAgICBTZXJ2aWNlTmFtZTpcbiAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uU2VydmljZU5hbWUgOiAnJyxcbiAgICAgICAgICAgIEFQSUtleTpcbiAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xXG4gICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5BUElLZXlcbiAgICAgICAgICAgICAgICA6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgICAgIEFwcGxpY2F0aW9uUm9sZUNvbnRleHQ6IHRoaXMuZ2V0QXBwbGljYXRpb25Db250ZXh0Q29kZShjb25maWcuTmFtZSksXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgc2V0VXBNYXBwZWREYXRhRXh0cmEoZGF0YTogUm9sZVtdKTogTWFwcGVkUm9sZVtdIHtcbiAgICByZXR1cm4gZGF0YS5tYXAoKHgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLngsXG4gICAgICAgIElkOiB4LkNvZGUsXG4gICAgICAgIENoaWxkcmVuVHlwZTogQ2hpbGRyZW5UeXBlLlBlcm1pc3Npb24sXG4gICAgICAgIFJvbGVDb250ZXh0czogdGhpcy5zb3VyY2VEYXRhLm1hcCgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdJZCA9IHguUm9sZUNvbnRleHRzLmZpbmRJbmRleChcbiAgICAgICAgICAgICh5KSA9PiB5Lk5hbWUgPT0gY29uZmlnLk5hbWVcbiAgICAgICAgICApO1xuICAgICAgICAgIHZhciBjb250ZXh0OiBNYXBwZWRSb2xlQ29udGV4dCA9IHtcbiAgICAgICAgICAgIENoaWxkcmVuVHlwZTogQ2hpbGRyZW5UeXBlLkFjdGlvbixcbiAgICAgICAgICAgIFNlbGVjdGVkOiBleGlzdGluZ0lkID4gLTEgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICBSb2xlQWN0aW9uczogY29uZmlnLkFjdGlvbnMubWFwKChhY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdBY3Rpb24gPVxuICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKGMpID0+IGMuTmFtZSA9PSBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICAgICAgICB2YXIgYWN0OiBNYXBwZWRSb2xlQWN0aW9uID0ge1xuICAgICAgICAgICAgICAgIFNlbGVjdGVkOiBleGlzdGluZ0FjdGlvbiA+IC0xID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIE5hbWU6IGFjdGlvbixcbiAgICAgICAgICAgICAgICBSb2xlOiB4LkNvZGUsXG4gICAgICAgICAgICAgICAgQ29udGV4dDogJycsXG4gICAgICAgICAgICAgICAgaWQ6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbZXhpc3RpbmdBY3Rpb25dLkNvZGVcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICBJZDpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tleGlzdGluZ0FjdGlvbl0uQ29kZVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgICAgICAgICAgVGVuYW50SWQ6IHguVGVuYW50SWQsXG4gICAgICAgICAgICAgICAgQ29kZTpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tleGlzdGluZ0FjdGlvbl1cbiAgICAgICAgICAgICAgICAgICAgICAgIC5Db2RlXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgU2VydmljZU5hbWU6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbZXhpc3RpbmdBY3Rpb25dXG4gICAgICAgICAgICAgICAgICAgICAgICAuU2VydmljZU5hbWVcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICBBUElLZXk6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbZXhpc3RpbmdBY3Rpb25dXG4gICAgICAgICAgICAgICAgICAgICAgICAuQVBJS2V5XG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uUm9sZUFjdGlvbjogdGhpcy5nZXRBcHBsaWNhdGlvbkFjdGlvbkNvZGUoYWN0aW9uKSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgcmV0dXJuIGFjdDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgTmFtZTogY29uZmlnLk5hbWUsXG4gICAgICAgICAgICBSb2xlOiB4LkNvZGUsXG4gICAgICAgICAgICBpZDogZXhpc3RpbmdJZCA+IC0xID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uQ29kZSA6ICcnLFxuICAgICAgICAgICAgSWQ6IGV4aXN0aW5nSWQgPiAtMSA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLkNvZGUgOiAnJyxcbiAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgVGVuYW50SWQ6IHguVGVuYW50SWQsXG4gICAgICAgICAgICBDb2RlOiBleGlzdGluZ0lkID4gLTEgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Db2RlIDogJycsXG4gICAgICAgICAgICBTZXJ2aWNlTmFtZTpcbiAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uU2VydmljZU5hbWUgOiAnJyxcbiAgICAgICAgICAgIEFQSUtleTpcbiAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xXG4gICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5BUElLZXlcbiAgICAgICAgICAgICAgICA6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgICAgIEFwcGxpY2F0aW9uUm9sZUNvbnRleHQ6IHRoaXMuZ2V0QXBwbGljYXRpb25Db250ZXh0Q29kZShjb25maWcuTmFtZSksXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBzZXRVcENhcmREYXRhKCkge1xuICAgIGNvbnN0IGNhcmREYXRhOiBDYXJkRGF0YVtdID0gdGhpcy5kYXRhLm1hcCgoeCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICB0aXRsZTogeC5OYW1lLFxuICAgICAgICBkYXRhOiB4LFxuICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgY2hpbGRyZW46IHguUm9sZUNvbnRleHRzLm1hcCgoYykgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRGb3JtYXR0ZWROYW1lKGMuTmFtZSksXG4gICAgICAgICAgICBkYXRhOiBjLFxuICAgICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgICBjaGlsZHJlbjogYy5Sb2xlQWN0aW9ucy5tYXAoKGEpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0Rm9ybWF0dGVkTmFtZShhLk5hbWUpLFxuICAgICAgICAgICAgICAgIGRhdGE6IGEsXG4gICAgICAgICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMuY2FyZERhdGEgPSBjYXJkRGF0YTtcbiAgfVxuICBzZXRVcENhcmREYXRhRXh0cmEoYmFzZURhdGE6IE1hcHBlZFJvbGVbXSkge1xuICAgIGNvbnN0IGNhcmREYXRhOiBDYXJkRGF0YVtdID0gYmFzZURhdGEubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIHRpdGxlOiB4Lk5hbWUsXG4gICAgICAgIGRhdGE6IHgsXG4gICAgICAgIGJvZHk6IFtdLFxuICAgICAgICBjaGlsZHJlbjogeC5Sb2xlQ29udGV4dHMubWFwKChjKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLmdldEZvcm1hdHRlZE5hbWUoYy5OYW1lKSxcbiAgICAgICAgICAgIGRhdGE6IGMsXG4gICAgICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBjLlJvbGVBY3Rpb25zLm1hcCgoYSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRGb3JtYXR0ZWROYW1lKGEuTmFtZSksXG4gICAgICAgICAgICAgICAgZGF0YTogYSxcbiAgICAgICAgICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5jYXJkRGF0YSA9IHRoaXMuY2FyZERhdGEuY29uY2F0KGNhcmREYXRhKTtcbiAgfVxuXG4gIGdldEZvcm1hdHRlZE5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBTcGxpdCB0aGUga2V5IG9uIGNhcGl0YWwgbGV0dGVycywgaGFuZGxpbmcgXCJBbmRcIiBhcyBsb3dlcmNhc2VcbiAgICBjb25zdCB3b3JkcyA9IG5hbWVcbiAgICAgIC5zcGxpdCgvKD89W0EtWl0pLylcbiAgICAgIC5tYXAoKHdvcmQpID0+ICh3b3JkID09PSAnQW5kJyA/ICdhbmQnIDogd29yZCkpO1xuICAgIC8vIEpvaW4gdGhlIHdvcmRzIHdpdGggc3BhY2VzXG4gICAgcmV0dXJuIHdvcmRzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHZpZXdEZXRhaWxzRnJvbVRhYmxlKGRhdGE6IE1hcHBlZFJvbGUpIHtcbiAgICBjb25zdCBjYXJkRGF0YSA9IHRoaXMuY2FyZERhdGEuZmluZCgoeCkgPT4geC5kYXRhID09IGRhdGEpO1xuICAgIGNvbnNvbGUubG9nKHtEYXRhOiBkYXRhfSk7XG4gICAgY29uc29sZS5sb2coe0NhcmREYXRhOiB0aGlzLmNhcmREYXRhfSlcbiAgICBpZiAoY2FyZERhdGEpIHtcbiAgICAgIHRoaXMudmlld0RldGFpbHMoY2FyZERhdGEpO1xuICAgIH1cbiAgICB0aGlzLmNsb3NlUG9wVXAoKTtcbiAgfVxuXG4gIHZpZXdEZXRhaWxzKGNvbnRleHQ6IENhcmREYXRhKSB7XG4gICAgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkucHVzaChjb250ZXh0KTtcbiAgICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeURhdGEucHVzaCh0aGlzLmNhcmREYXRhKTtcbiAgICB0aGlzLmNhcmREYXRhID0gY29udGV4dC5jaGlsZHJlbjtcbiAgICB0aGlzLmNhcmREYXRhVmlldy5jbGVhckRhdGEoKTtcbiAgfVxuICB2aWV3RGV0YWlsc0NoaWxkKGNvbnRleHQ6IENhcmREYXRhKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudEV4cGFuZGVkQ2FyZCkge1xuICAgICAgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkucHVzaCh0aGlzLmN1cnJlbnRFeHBhbmRlZENhcmQpO1xuICAgICAgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkucHVzaChjb250ZXh0KTtcbiAgICAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5RGF0YS5wdXNoKHRoaXMuY2FyZERhdGEpO1xuICAgICAgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnlEYXRhLnB1c2godGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkLmNoaWxkcmVuKTtcbiAgICAgIHRoaXMuY2FyZERhdGEgPSBjb250ZXh0LmNoaWxkcmVuO1xuICAgICAgdGhpcy5jYXJkRGF0YVZpZXcuY2xlYXJEYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgcm9sZUNhcmRDbGlja2VkKGl0ZW06IENhcmREYXRhKSB7XG4gICAgdGhpcy5jdXJyZW50RGF0YSA9IHRoaXMuY2FyZERhdGFWaWV3Lm9uSXRlbUNsaWNrKGl0ZW0pO1xuICAgIC8vIGlmICh0aGlzLmN1cnJlbnREYXRhKSB7XG4gICAgLy8gICB0aGlzLmZvcm0uY29udHJvbHNbJ05hbWUnXS5zZXRWYWx1ZSh0aGlzLmN1cnJlbnREYXRhLmRhdGE/Lk5hbWUpO1xuICAgIC8vIH1cbiAgfVxuXG4gIHRvZ2dsZUNoaWxkcmVuKGl0ZW06IENhcmREYXRhKSB7XG4gICAgdmFyIGN1cnJUb2dnbGVTdGF0ZSA9IGl0ZW0uaXNDaGlsZHJlbkV4cGFuZGVkO1xuICAgIHRoaXMuY2FyZERhdGEuZm9yRWFjaCgoXykgPT4ge1xuICAgICAgXy5pc0NoaWxkcmVuRXhwYW5kZWQgPSBmYWxzZTtcbiAgICB9KTtcbiAgICBpdGVtLmlzQ2hpbGRyZW5FeHBhbmRlZCA9ICFjdXJyVG9nZ2xlU3RhdGU7XG4gICAgaWYgKGl0ZW0uaXNDaGlsZHJlbkV4cGFuZGVkKSB7XG4gICAgICB0aGlzLmN1cnJlbnRFeHBhbmRlZENhcmQgPSBpdGVtO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRFeHBhbmRlZENhcmQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdvVG9UYWJsZVZpZXcoKSB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnREYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGF0YVZpZXcudG9nZ2xlVmlldygpO1xuICAgIGNvbnN0IGlkID0gdGhpcy5jdXJyZW50RGF0YS5kYXRhID8gdGhpcy5jdXJyZW50RGF0YS5kYXRhLkNvZGUgOiAnJztcbiAgICBpZiAoaWQudHJpbSgpLmxlbmd0aCA+IDAgJiYgIXRoaXMudGFibGVWaWV3LmlzUm93RWRpdGluZyhpZCkpIHtcbiAgICAgIHRoaXMudGFibGVWaWV3LnRvZ2dsZVJvd0VkaXQoaWQpO1xuICAgIH1cbiAgfVxuICBjbG9zZURldGFpbHMoKSB7XG4gICAgdGhpcy5jYXJkRGF0YSA9XG4gICAgICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeURhdGFbdGhpcy5jYXJkQ29udGV4dEhpc3RvcnlEYXRhLmxlbmd0aCAtIDFdO1xuICAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5RGF0YS5wb3AoKTtcbiAgICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5wb3AoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmRhdGFWaWV3LmlzVGFibGVWaWV3KSB7XG4gICAgICAgIHRoaXMuZGF0YVZpZXcudG9nZ2xlVmlldygpO1xuICAgICAgfVxuICAgIH0sIDIwMCk7XG4gIH1cblxuICBnZXRDYXJkU3ViQ2FwdGlvbihpdGVtOiBDYXJkRGF0YSkge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gaXRlbS5jaGlsZHJlbi5maWx0ZXIoKHgpID0+IHguZGF0YS5TZWxlY3RlZCkubGVuZ3RoO1xuICAgIGNvbnN0IHRvdGFsID0gaXRlbS5jaGlsZHJlbi5sZW5ndGg7XG4gICAgcmV0dXJuIGAke3NlbGVjdGVkfSBvZiAke3RvdGFsfSAke1xuICAgICAgdG90YWwgPiAxID8gaXRlbS5kYXRhLkNoaWxkcmVuVHlwZSArICdzJyA6IGl0ZW0uZGF0YS5DaGlsZHJlblR5cGVcbiAgICB9YDtcbiAgfVxuXG4gIGdldFVwZGF0ZWRSb2xlKHJvbGU6IE1hcHBlZFJvbGUpOiBSb2xlIHtcbiAgICBjb25zdCBuZXdSb2xlID0gcm9sZTtcbiAgICBuZXdSb2xlLlJvbGVDb250ZXh0cyA9IHJvbGUuUm9sZUNvbnRleHRzLmZpbHRlcigoeCkgPT4geC5TZWxlY3RlZCkubWFwKFxuICAgICAgKHkpID0+IHtcbiAgICAgICAgeS5Sb2xlQWN0aW9ucyA9IHkuUm9sZUFjdGlvbnMuZmlsdGVyKCh6KSA9PiB6LlNlbGVjdGVkKTtcbiAgICAgICAgcmV0dXJuIHk7XG4gICAgICB9XG4gICAgKTtcbiAgICBuZXdSb2xlLkRhdGFTdGF0ZSA9XG4gICAgICBuZXdSb2xlLkRhdGFTdGF0ZSA9PSBPYmplY3RTdGF0ZS5OZXdcbiAgICAgICAgPyBPYmplY3RTdGF0ZS5OZXdcbiAgICAgICAgOiBPYmplY3RTdGF0ZS5DaGFuZ2VkO1xuICAgIG5ld1JvbGUuSWQgPSAnJztcbiAgICByZXR1cm4gbmV3Um9sZSBhcyBSb2xlO1xuICB9XG4gIGFzeW5jIHNhdmVSb2xlKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnREYXRhKSB7XG4gICAgICB2YXIgcm9sZTogTWFwcGVkUm9sZSA9IHRoaXMuY3VycmVudERhdGEuZGF0YSBhcyBNYXBwZWRSb2xlO1xuICAgICAgLy8gcm9sZS5OYW1lID0gdGhpcy5mb3JtLmNvbnRyb2xzWydOYW1lJ10udmFsdWU7XG4gICAgICBpZiAodGhpcy5jdXJyZW50RGF0YS5kYXRhLk5hbWUudHJpbSgpLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0luZm8oJ1JvbGUgbmFtZSBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbWFwcGVkUm9sZSA9IHRoaXMuZ2V0VXBkYXRlZFJvbGUoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyb2xlKSkpO1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KGBSb2xlL1NhdmVSb2xlc2AsIFttYXBwZWRSb2xlXSk7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93U3VjY2VzcygnUm9sZSBzYXZlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzIGFzIFJvbGVbXTtcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdmFyIHJvbGVSZXN1bHQgPSByZXN1bHRbMF07XG4gICAgICAgICAgdmFyIG1hcHBlZFJvbGVTYXZlOiBNYXBwZWRSb2xlID0ge1xuICAgICAgICAgICAgLi4ucm9sZVJlc3VsdCxcbiAgICAgICAgICAgIENoaWxkcmVuVHlwZTogQ2hpbGRyZW5UeXBlLlBlcm1pc3Npb24sXG4gICAgICAgICAgICBSb2xlQ29udGV4dHM6IHRoaXMuc291cmNlRGF0YS5tYXAoKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0lkID0gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICh5KSA9PiB5Lk5hbWUgPT0gY29uZmlnLk5hbWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgdmFyIGNvbnRleHQ6IE1hcHBlZFJvbGVDb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgIENoaWxkcmVuVHlwZTogQ2hpbGRyZW5UeXBlLkFjdGlvbixcbiAgICAgICAgICAgICAgICBTZWxlY3RlZDogZXhpc3RpbmdJZCA+IC0xID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIFJvbGVBY3Rpb25zOiBjb25maWcuQWN0aW9ucy5tYXAoKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdBY3Rpb24gPVxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0lkID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0lkXG4gICAgICAgICAgICAgICAgICAgICAgICBdLlJvbGVBY3Rpb25zLmZpbmRJbmRleCgoYykgPT4gYy5OYW1lID09IGFjdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICA6IC0xO1xuXG4gICAgICAgICAgICAgICAgICB2YXIgYWN0OiBNYXBwZWRSb2xlQWN0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICBTZWxlY3RlZDogZXhpc3RpbmdBY3Rpb24gPiAtMSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgTmFtZTogYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBSb2xlOiByb2xlUmVzdWx0LkNvZGUsXG4gICAgICAgICAgICAgICAgICAgIENvbnRleHQ6ICcnLFxuICAgICAgICAgICAgICAgICAgICBpZDpcbiAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0uQ29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgSWQ6XG4gICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBdLkNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICAgICAgICAgICAgVGVuYW50SWQ6IHJvbGVSZXN1bHQuVGVuYW50SWQsXG4gICAgICAgICAgICAgICAgICAgIENvZGU6XG4gICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBdLkNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgIFNlcnZpY2VOYW1lOlxuICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgXS5TZXJ2aWNlTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgQVBJS2V5OlxuICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgXS5BUElLZXlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVBY3Rpb246XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBcHBsaWNhdGlvbkFjdGlvbkNvZGUoYWN0aW9uKSxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYWN0O1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIE5hbWU6IGNvbmZpZy5OYW1lLFxuICAgICAgICAgICAgICAgIFJvbGU6IHJvbGVSZXN1bHQuQ29kZSxcbiAgICAgICAgICAgICAgICBpZDpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMSA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLkNvZGUgOiAnJyxcbiAgICAgICAgICAgICAgICBJZDpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMSA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLkNvZGUgOiAnJyxcbiAgICAgICAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICAgIFRlbmFudElkOiByb2xlUmVzdWx0LlRlbmFudElkLFxuICAgICAgICAgICAgICAgIENvZGU6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0lkID4gLTFcbiAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Db2RlXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgU2VydmljZU5hbWU6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0lkID4gLTFcbiAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5TZXJ2aWNlTmFtZVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgIEFQSUtleTpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLkFQSUtleVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVDb250ZXh0OiB0aGlzLmdldEFwcGxpY2F0aW9uQ29udGV4dENvZGUoXG4gICAgICAgICAgICAgICAgICBjb25maWcuTmFtZVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5kYXRhLmZpbmRJbmRleChcbiAgICAgICAgICAgICh4KSA9PiB4ID09IHRoaXMuY3VycmVudERhdGE/LmRhdGFcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChpdGVtSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uQ29kZSA9IG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5JZCA9IG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5EYXRhU3RhdGUgPSBtYXBwZWRSb2xlU2F2ZS5EYXRhU3RhdGU7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5UZW5hbnRJZCA9IG1hcHBlZFJvbGVTYXZlLlRlbmFudElkO1xuICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uU2VydmljZU5hbWUgPSBtYXBwZWRSb2xlU2F2ZS5TZXJ2aWNlTmFtZTtcbiAgICAgICAgICAgIG1hcHBlZFJvbGVTYXZlLlJvbGVDb250ZXh0cy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5Sb2xlID0gbWFwcGVkUm9sZVNhdmUuQ29kZTtcbiAgICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uUm9sZUNvbnRleHRzW2ldLkNvZGUgPSB4LkNvZGU7XG4gICAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5TZXJ2aWNlTmFtZSA9IHguU2VydmljZU5hbWU7XG4gICAgICAgICAgICAgIHguUm9sZUFjdGlvbnMuZm9yRWFjaCgoeSwgaikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5Sb2xlQWN0aW9uc1tqXS5Sb2xlID1cbiAgICAgICAgICAgICAgICAgIG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uUm9sZUNvbnRleHRzW2ldLlJvbGVBY3Rpb25zW2pdLkNvZGUgPVxuICAgICAgICAgICAgICAgICAgeS5Db2RlO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5Sb2xlQWN0aW9uc1tcbiAgICAgICAgICAgICAgICAgIGpcbiAgICAgICAgICAgICAgICBdLlNlcnZpY2VOYW1lID0geS5TZXJ2aWNlTmFtZTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5tYXAoKHgpID0+IHgpO1xuICAgICAgICAgICAgLy8gdGhpcy5jdXJyZW50RGF0YSA9IHtcbiAgICAgICAgICAgIC8vICAgc2VsZWN0ZWQ6IHRydWUsXG4gICAgICAgICAgICAvLyAgIHRpdGxlOiBtYXBwZWRSb2xlU2F2ZS5OYW1lLFxuICAgICAgICAgICAgLy8gICBkYXRhOiBtYXBwZWRSb2xlU2F2ZSxcbiAgICAgICAgICAgIC8vICAgaXNDaGlsZHJlbkV4cGFuZGVkOiB0aGlzLmN1cnJlbnREYXRhLmlzQ2hpbGRyZW5FeHBhbmRlZCxcbiAgICAgICAgICAgIC8vICAgYm9keTogW10sXG4gICAgICAgICAgICAvLyAgIGNoaWxkcmVuOiBtYXBwZWRSb2xlU2F2ZS5Sb2xlQ29udGV4dHMubWFwKChjKSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8vICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIC8vICAgICAgIHRpdGxlOiB0aGlzLmdldEZvcm1hdHRlZE5hbWUoYy5OYW1lKSxcbiAgICAgICAgICAgIC8vICAgICAgIGRhdGE6IGMsXG4gICAgICAgICAgICAvLyAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAgIC8vICAgICAgIGNoaWxkcmVuOiBjLlJvbGVBY3Rpb25zLm1hcCgoYSkgPT4ge1xuICAgICAgICAgICAgLy8gICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLy8gICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRGb3JtYXR0ZWROYW1lKGEuTmFtZSksXG4gICAgICAgICAgICAvLyAgICAgICAgICAgZGF0YTogYSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICAvLyAgICAgICAgIH07XG4gICAgICAgICAgICAvLyAgICAgICB9KSxcbiAgICAgICAgICAgIC8vICAgICB9O1xuICAgICAgICAgICAgLy8gICB9KSxcbiAgICAgICAgICAgIC8vIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGFzeW5jIHRhYmxlU2F2ZVJvbGUocm9sZTogTWFwcGVkUm9sZSwgY2FsbEJhY2s6ICgpID0+IGFueSkge1xuICAgIGlmIChyb2xlLk5hbWUudHJpbSgpLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dJbmZvKCdSb2xlIG5hbWUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1hcHBlZFJvbGUgPSB0aGlzLmdldFVwZGF0ZWRSb2xlKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocm9sZSkpKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KGBSb2xlL1NhdmVSb2xlc2AsIFttYXBwZWRSb2xlXSk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ1JvbGUgc2F2ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXMgYXMgUm9sZVtdO1xuICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciByb2xlUmVzdWx0ID0gcmVzdWx0WzBdO1xuICAgICAgICB2YXIgbWFwcGVkUm9sZVNhdmU6IE1hcHBlZFJvbGUgPSB7XG4gICAgICAgICAgLi4ucm9sZVJlc3VsdCxcbiAgICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5QZXJtaXNzaW9uLFxuICAgICAgICAgIFJvbGVDb250ZXh0czogdGhpcy5zb3VyY2VEYXRhLm1hcCgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ0lkID0gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAoeSkgPT4geS5OYW1lID09IGNvbmZpZy5OYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdmFyIGNvbnRleHQ6IE1hcHBlZFJvbGVDb250ZXh0ID0ge1xuICAgICAgICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5BY3Rpb24sXG4gICAgICAgICAgICAgIFNlbGVjdGVkOiBleGlzdGluZ0lkID4gLTEgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgIFJvbGVBY3Rpb25zOiBjb25maWcuQWN0aW9ucy5tYXAoKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQWN0aW9uID1cbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgICAgIChjKSA9PiBjLk5hbWUgPT0gYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IC0xO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFjdDogTWFwcGVkUm9sZUFjdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgIFNlbGVjdGVkOiBleGlzdGluZ0FjdGlvbiA+IC0xID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgTmFtZTogYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgUm9sZTogcm9sZVJlc3VsdC5Db2RlLFxuICAgICAgICAgICAgICAgICAgQ29udGV4dDogJycsXG4gICAgICAgICAgICAgICAgICBpZDpcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBdLkNvZGVcbiAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgSWQ6XG4gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgXS5Db2RlXG4gICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICAgICAgVGVuYW50SWQ6IHJvbGVSZXN1bHQuVGVuYW50SWQsXG4gICAgICAgICAgICAgICAgICBDb2RlOlxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIF0uQ29kZVxuICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICBTZXJ2aWNlTmFtZTpcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBdLlNlcnZpY2VOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIEFQSUtleTpcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBdLkFQSUtleVxuICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25Sb2xlQWN0aW9uOiB0aGlzLmdldEFwcGxpY2F0aW9uQWN0aW9uQ29kZShhY3Rpb24pLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdDtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIE5hbWU6IGNvbmZpZy5OYW1lLFxuICAgICAgICAgICAgICBSb2xlOiByb2xlUmVzdWx0LkNvZGUsXG4gICAgICAgICAgICAgIGlkOiBleGlzdGluZ0lkID4gLTEgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Db2RlIDogJycsXG4gICAgICAgICAgICAgIElkOiBleGlzdGluZ0lkID4gLTEgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Db2RlIDogJycsXG4gICAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICAgICAgVGVuYW50SWQ6IHJvbGVSZXN1bHQuVGVuYW50SWQsXG4gICAgICAgICAgICAgIENvZGU6XG4gICAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uQ29kZSA6ICcnLFxuICAgICAgICAgICAgICBTZXJ2aWNlTmFtZTpcbiAgICAgICAgICAgICAgICBleGlzdGluZ0lkID4gLTFcbiAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uU2VydmljZU5hbWVcbiAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgIEFQSUtleTpcbiAgICAgICAgICAgICAgICBleGlzdGluZ0lkID4gLTFcbiAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uQVBJS2V5XG4gICAgICAgICAgICAgICAgICA6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgICAgICAgQXBwbGljYXRpb25Sb2xlQ29udGV4dDogdGhpcy5nZXRBcHBsaWNhdGlvbkNvbnRleHRDb2RlKFxuICAgICAgICAgICAgICAgIGNvbmZpZy5OYW1lXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLmRhdGEuZmluZEluZGV4KFxuICAgICAgICAgICh4KSA9PiB4ID09IHRoaXMuY3VycmVudERhdGE/LmRhdGFcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGl0ZW1JbmRleCA+IC0xKSB7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uQ29kZSA9IG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uSWQgPSBtYXBwZWRSb2xlU2F2ZS5Db2RlO1xuICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLkRhdGFTdGF0ZSA9IG1hcHBlZFJvbGVTYXZlLkRhdGFTdGF0ZTtcbiAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5UZW5hbnRJZCA9IG1hcHBlZFJvbGVTYXZlLlRlbmFudElkO1xuICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlNlcnZpY2VOYW1lID0gbWFwcGVkUm9sZVNhdmUuU2VydmljZU5hbWU7XG4gICAgICAgICAgbWFwcGVkUm9sZVNhdmUuUm9sZUNvbnRleHRzLmZvckVhY2goKHgsIGkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5Sb2xlID0gbWFwcGVkUm9sZVNhdmUuQ29kZTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5Db2RlID0geC5Db2RlO1xuICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uUm9sZUNvbnRleHRzW2ldLlNlcnZpY2VOYW1lID0geC5TZXJ2aWNlTmFtZTtcbiAgICAgICAgICAgIHguUm9sZUFjdGlvbnMuZm9yRWFjaCgoeSwgaikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uUm9sZUFjdGlvbnNbal0uUm9sZSA9XG4gICAgICAgICAgICAgICAgbWFwcGVkUm9sZVNhdmUuQ29kZTtcbiAgICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uUm9sZUNvbnRleHRzW2ldLlJvbGVBY3Rpb25zW2pdLkNvZGUgPSB5LkNvZGU7XG4gICAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5Sb2xlQWN0aW9uc1tqXS5TZXJ2aWNlTmFtZSA9XG4gICAgICAgICAgICAgICAgeS5TZXJ2aWNlTmFtZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5tYXAoKHgpID0+IHgpO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxCYWNrKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2F2ZVJvbGVEeW5hbWljKGl0ZW06IENhcmREYXRhKSB7XG4gICAgaWYgKHRoaXMuaXNDaGVja2JveERpc2FibGVkKGl0ZW0pKSB7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dJbmZvKCdQYXJlbnQgVUkgbm90IHNlbGVjdGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHJvbGU6IENhcmREYXRhIHwgbnVsbCA9XG4gICAgICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5jYXJkQ29udGV4dEhpc3RvcnlbMF1cbiAgICAgICAgOiB0aGlzLmN1cnJlbnRFeHBhbmRlZENhcmRcbiAgICAgICAgPyB0aGlzLmN1cnJlbnRFeHBhbmRlZENhcmRcbiAgICAgICAgOiBudWxsO1xuICAgIHZhciBjYXJkRGF0YVJlZjogQ2FyZERhdGFbXSB8IG51bGwgPVxuICAgICAgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnlEYXRhLmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeURhdGFbMF1cbiAgICAgICAgOiB0aGlzLmN1cnJlbnRFeHBhbmRlZENhcmRcbiAgICAgICAgPyB0aGlzLmNhcmREYXRhXG4gICAgICAgIDogbnVsbDtcbiAgICAvLyBjb25zdCBpc0V4cGFuZGVkQ2FyZDogYm9vbGVhbiA9XG4gICAgLy8gICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPiAwXG4gICAgLy8gICAgID8gZmFsc2VcbiAgICAvLyAgICAgOiB0aGlzLmN1cnJlbnRFeHBhbmRlZENhcmRcbiAgICAvLyAgICAgPyB0cnVlXG4gICAgLy8gICAgIDogZmFsc2U7XG4gICAgaWYgKCFyb2xlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyb2xlLmRhdGEuTmFtZS50cmltKCkubGVuZ3RoID09IDApIHtcbiAgICAgIGl0ZW0uZGF0YS5TZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93SW5mbygnUm9sZSBuYW1lIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpdGVtLmRhdGEuU2VsZWN0ZWQgPSAhaXRlbS5kYXRhLlNlbGVjdGVkO1xuICAgIGNvbnN0IG1hcHBlZFJvbGUgPSB0aGlzLmdldFVwZGF0ZWRSb2xlKFxuICAgICAgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyb2xlLmRhdGEpKVxuICAgICk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZXJ2ZXIucG9zdChgUm9sZS9TYXZlUm9sZXNgLCBbbWFwcGVkUm9sZV0pO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgaXRlbS5kYXRhLlNlbGVjdGVkID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ1JvbGUgc2F2ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXMgYXMgUm9sZVtdO1xuICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciByb2xlUmVzdWx0ID0gcmVzdWx0WzBdO1xuICAgICAgICB2YXIgbWFwcGVkUm9sZVNhdmU6IE1hcHBlZFJvbGUgPSB7XG4gICAgICAgICAgLi4ucm9sZVJlc3VsdCxcbiAgICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5QZXJtaXNzaW9uLFxuICAgICAgICAgIFJvbGVDb250ZXh0czogdGhpcy5zb3VyY2VEYXRhLm1hcCgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ0lkID0gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAoeSkgPT4geS5OYW1lID09IGNvbmZpZy5OYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdmFyIGNvbnRleHQ6IE1hcHBlZFJvbGVDb250ZXh0ID0ge1xuICAgICAgICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5BY3Rpb24sXG4gICAgICAgICAgICAgIFNlbGVjdGVkOiBleGlzdGluZ0lkID4gLTEgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgIFJvbGVBY3Rpb25zOiBjb25maWcuQWN0aW9ucy5tYXAoKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQWN0aW9uID1cbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgICAgIChjKSA9PiBjLk5hbWUgPT0gYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IC0xO1xuICAgICAgICAgICAgICAgIHZhciBhY3Q6IE1hcHBlZFJvbGVBY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgICBTZWxlY3RlZDogZXhpc3RpbmdBY3Rpb24gPiAtMSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIE5hbWU6IGFjdGlvbixcbiAgICAgICAgICAgICAgICAgIFJvbGU6IHJvbGVSZXN1bHQuQ29kZSxcbiAgICAgICAgICAgICAgICAgIENvbnRleHQ6ICcnLFxuICAgICAgICAgICAgICAgICAgaWQ6XG4gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgXS5Db2RlXG4gICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIElkOlxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIF0uQ29kZVxuICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICAgICAgICAgIFRlbmFudElkOiByb2xlUmVzdWx0LlRlbmFudElkLFxuICAgICAgICAgICAgICAgICAgQ29kZTpcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBdLkNvZGVcbiAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgU2VydmljZU5hbWU6XG4gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgXS5TZXJ2aWNlTmFtZVxuICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICBBUElLZXk6XG4gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgXS5BUElLZXlcbiAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uUm9sZUFjdGlvbjogdGhpcy5nZXRBcHBsaWNhdGlvbkFjdGlvbkNvZGUoYWN0aW9uKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBhY3Q7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBOYW1lOiBjb25maWcuTmFtZSxcbiAgICAgICAgICAgICAgUm9sZTogcm9sZVJlc3VsdC5Db2RlLFxuICAgICAgICAgICAgICBpZDogZXhpc3RpbmdJZCA+IC0xID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uQ29kZSA6ICcnLFxuICAgICAgICAgICAgICBJZDogZXhpc3RpbmdJZCA+IC0xID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uQ29kZSA6ICcnLFxuICAgICAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgICAgICAgIFRlbmFudElkOiByb2xlUmVzdWx0LlRlbmFudElkLFxuICAgICAgICAgICAgICBDb2RlOlxuICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMSA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLkNvZGUgOiAnJyxcbiAgICAgICAgICAgICAgU2VydmljZU5hbWU6XG4gICAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xXG4gICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlNlcnZpY2VOYW1lXG4gICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICBBUElLZXk6XG4gICAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xXG4gICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLkFQSUtleVxuICAgICAgICAgICAgICAgICAgOiB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5BUElLZXksXG4gICAgICAgICAgICAgIEFwcGxpY2F0aW9uUm9sZUNvbnRleHQ6IHRoaXMuZ2V0QXBwbGljYXRpb25Db250ZXh0Q29kZShcbiAgICAgICAgICAgICAgICBjb25maWcuTmFtZVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpdGVtSW5kZXggPSBjYXJkRGF0YVJlZlxuICAgICAgICAgID8gY2FyZERhdGFSZWYuZmluZEluZGV4KCh4KSA9PiB4LmRhdGEgPT0gcm9sZT8uZGF0YSlcbiAgICAgICAgICA6IC0xO1xuICAgICAgICBpZiAoaXRlbUluZGV4ID4gLTEpIHtcbiAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Db2RlID0gbWFwcGVkUm9sZVNhdmUuQ29kZTtcbiAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5JZCA9IG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uRGF0YVN0YXRlID0gbWFwcGVkUm9sZVNhdmUuRGF0YVN0YXRlO1xuICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlRlbmFudElkID0gbWFwcGVkUm9sZVNhdmUuVGVuYW50SWQ7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uU2VydmljZU5hbWUgPSBtYXBwZWRSb2xlU2F2ZS5TZXJ2aWNlTmFtZTtcbiAgICAgICAgICBtYXBwZWRSb2xlU2F2ZS5Sb2xlQ29udGV4dHMuZm9yRWFjaCgoeCwgaSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uUm9sZUNvbnRleHRzW2ldLlJvbGUgPSBtYXBwZWRSb2xlU2F2ZS5Db2RlO1xuICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uUm9sZUNvbnRleHRzW2ldLkNvZGUgPSB4LkNvZGU7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uU2VydmljZU5hbWUgPSB4LlNlcnZpY2VOYW1lO1xuICAgICAgICAgICAgeC5Sb2xlQWN0aW9ucy5mb3JFYWNoKCh5LCBqKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5Sb2xlQWN0aW9uc1tqXS5Sb2xlID1cbiAgICAgICAgICAgICAgICBtYXBwZWRSb2xlU2F2ZS5Db2RlO1xuICAgICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uUm9sZUFjdGlvbnNbal0uQ29kZSA9IHkuQ29kZTtcbiAgICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uUm9sZUNvbnRleHRzW2ldLlJvbGVBY3Rpb25zW2pdLlNlcnZpY2VOYW1lID1cbiAgICAgICAgICAgICAgICB5LlNlcnZpY2VOYW1lO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gdGhpcy5kYXRhW2l0ZW1JbmRleF0uUm9sZUNvbnRleHRzID0gbWFwcGVkUm9sZVNhdmUuUm9sZUNvbnRleHRzO1xuXG4gICAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLm1hcCgoeCkgPT4geCk7XG4gICAgICAgICAgLy8gaWYgKGNhcmREYXRhUmVmKSB7XG4gICAgICAgICAgLy8gICBjb25zb2xlLmxvZyh7XG4gICAgICAgICAgLy8gICAgIFhEYXRhSXNIZXJlOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNhcmREYXRhUmVmKSksXG4gICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgICAvLyAgIGNhcmREYXRhUmVmW2l0ZW1JbmRleF0gPSB7XG4gICAgICAgICAgLy8gICAgIHNlbGVjdGVkOiBjYXJkRGF0YVJlZltpdGVtSW5kZXhdLnNlbGVjdGVkLFxuICAgICAgICAgIC8vICAgICBpc0NoaWxkcmVuRXhwYW5kZWQ6IGNhcmREYXRhUmVmW2l0ZW1JbmRleF0uaXNDaGlsZHJlbkV4cGFuZGVkLFxuICAgICAgICAgIC8vICAgICB0aXRsZTogbWFwcGVkUm9sZVNhdmUuTmFtZSxcbiAgICAgICAgICAvLyAgICAgZGF0YTogbWFwcGVkUm9sZVNhdmUsXG4gICAgICAgICAgLy8gICAgIGJvZHk6IFtdLFxuICAgICAgICAgIC8vICAgICBjaGlsZHJlbjogbWFwcGVkUm9sZVNhdmUuUm9sZUNvbnRleHRzLm1hcCgoYykgPT4ge1xuICAgICAgICAgIC8vICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLy8gICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgLy8gICAgICAgICB0aXRsZTogdGhpcy5nZXRGb3JtYXR0ZWROYW1lKGMuTmFtZSksXG4gICAgICAgICAgLy8gICAgICAgICBkYXRhOiBjLFxuICAgICAgICAgIC8vICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgLy8gICAgICAgICBjaGlsZHJlbjogYy5Sb2xlQWN0aW9ucy5tYXAoKGEpID0+IHtcbiAgICAgICAgICAvLyAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAvLyAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0Rm9ybWF0dGVkTmFtZShhLk5hbWUpLFxuICAgICAgICAgIC8vICAgICAgICAgICAgIGRhdGE6IGEsXG4gICAgICAgICAgLy8gICAgICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgLy8gICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgIC8vICAgICAgICAgICB9O1xuICAgICAgICAgIC8vICAgICAgICAgfSksXG4gICAgICAgICAgLy8gICAgICAgfTtcbiAgICAgICAgICAvLyAgICAgfSksXG4gICAgICAgICAgLy8gICB9O1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNhdmVEYXRhQWxsKCkge1xuICAgIGNvbnN0IHJvbGVzOiBSb2xlW10gPSB0aGlzLmRhdGEubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi54LFxuICAgICAgICBSb2xlQ29udGV4dHM6IHguUm9sZUNvbnRleHRzLmZpbHRlcigoeSkgPT4geS5TZWxlY3RlZCkubWFwKCh6KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnosXG4gICAgICAgICAgICBSb2xlQWN0aW9uczogei5Sb2xlQWN0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAgIChhKSA9PiBhLlNlbGVjdGVkXG4gICAgICAgICAgICApIGFzIFJvbGVBY3Rpb25bXSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSBhcyBSb2xlQ29udGV4dFtdLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZVRhYmxlKCkge1xuICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5tYXAoKHgpID0+IHgpO1xuICB9XG5cbiAgb25WaWV3Q2hhbmdlKGlzR3JpZFZpZXc6IGJvb2xlYW4pOiB2b2lkIHt9XG4gIG9uU3RhdGVDaGFuZ2UoZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnY3JlYXRlJzpcbiAgICAgICAgdmFyIG5ld01hcHBlZFJvbGU6IE1hcHBlZFJvbGUgPSB7XG4gICAgICAgICAgUm9sZUNvbnRleHRzOiB0aGlzLnNvdXJjZURhdGEubWFwKChjb25maWcpID0+IHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0OiBNYXBwZWRSb2xlQ29udGV4dCA9IHtcbiAgICAgICAgICAgICAgQ2hpbGRyZW5UeXBlOiBDaGlsZHJlblR5cGUuQWN0aW9uLFxuICAgICAgICAgICAgICBTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgIFJvbGVBY3Rpb25zOiBjb25maWcuQWN0aW9ucy5tYXAoKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBhY3Q6IE1hcHBlZFJvbGVBY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgICBTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBOYW1lOiBhY3Rpb24sXG4gICAgICAgICAgICAgICAgICBSb2xlOiAnJyxcbiAgICAgICAgICAgICAgICAgIENvbnRleHQ6ICcnLFxuICAgICAgICAgICAgICAgICAgaWQ6ICcnLFxuICAgICAgICAgICAgICAgICAgSWQ6ICcnLFxuICAgICAgICAgICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgICAgICAgICAgICBUZW5hbnRJZDogJycsXG4gICAgICAgICAgICAgICAgICBDb2RlOiAnJyxcbiAgICAgICAgICAgICAgICAgIFNlcnZpY2VOYW1lOiAnJyxcbiAgICAgICAgICAgICAgICAgIEFQSUtleTogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25Sb2xlQWN0aW9uOiB0aGlzLmdldEFwcGxpY2F0aW9uQWN0aW9uQ29kZShhY3Rpb24pLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdDtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIE5hbWU6IGNvbmZpZy5OYW1lLFxuICAgICAgICAgICAgICBSb2xlOiAnJyxcbiAgICAgICAgICAgICAgaWQ6ICcnLFxuICAgICAgICAgICAgICBJZDogJycsXG4gICAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICAgICAgVGVuYW50SWQ6ICcnLFxuICAgICAgICAgICAgICBDb2RlOiAnJyxcbiAgICAgICAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICAgICAgICBBUElLZXk6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgICAgICAgQXBwbGljYXRpb25Sb2xlQ29udGV4dDogdGhpcy5nZXRBcHBsaWNhdGlvbkNvbnRleHRDb2RlKFxuICAgICAgICAgICAgICAgIGNvbmZpZy5OYW1lXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5QZXJtaXNzaW9uLFxuICAgICAgICAgIE5hbWU6ICcnLFxuICAgICAgICAgIGlkOiAodGhpcy5jYXJkRGF0YS5sZW5ndGggKyAxKS50b1N0cmluZygpLFxuICAgICAgICAgIElkOiAodGhpcy5jYXJkRGF0YS5sZW5ndGggKyAxKS50b1N0cmluZygpLFxuICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgICAgVGVuYW50SWQ6ICcnLFxuICAgICAgICAgIENvZGU6ICcnLFxuICAgICAgICAgIFNlcnZpY2VOYW1lOiAnJyxcbiAgICAgICAgICBBcHBsaWNhdGlvbjogdGhpcy5hcHBsaWNhdGlvbiA/IHRoaXMuYXBwbGljYXRpb24gOiB1bmRlZmluZWQsXG4gICAgICAgICAgQVBJS2V5OiB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5BUElLZXksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGNhcmREYXRhOiBDYXJkRGF0YSA9IHtcbiAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgdGl0bGU6IG5ld01hcHBlZFJvbGUuTmFtZSxcbiAgICAgICAgICBkYXRhOiBuZXdNYXBwZWRSb2xlLFxuICAgICAgICAgIGJvZHk6IFtdLFxuICAgICAgICAgIGNoaWxkcmVuOiBuZXdNYXBwZWRSb2xlLlJvbGVDb250ZXh0cy5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0Rm9ybWF0dGVkTmFtZShjLk5hbWUpLFxuICAgICAgICAgICAgICBkYXRhOiBjLFxuICAgICAgICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAgICAgY2hpbGRyZW46IGMuUm9sZUFjdGlvbnMubWFwKChhKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmdldEZvcm1hdHRlZE5hbWUoYS5OYW1lKSxcbiAgICAgICAgICAgICAgICAgIGRhdGE6IGEsXG4gICAgICAgICAgICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5jb25jYXQoW25ld01hcHBlZFJvbGVdKTtcbiAgICAgICAgdGhpcy5jYXJkRGF0YS5wdXNoKGNhcmREYXRhKTtcbiAgICAgICAgdGhpcy5yb2xlQ2FyZENsaWNrZWQoY2FyZERhdGEpO1xuICAgICAgICB0aGlzLmRhdGFWaWV3LmlzVGFibGVWaWV3ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgc2hvd1RhYmxlVmlldzogYm9vbGVhbiA9IGZhbHNlO1xuICBvblNlbGVjdGlvbkNoYW5nZShzZWxlY3RlZFJvd3M6IFJvbGVbXSkge31cbiAgcmV0cnlNZXNzYWdlKCkge31cbiAgb25Db2x1bW5zVXBkYXRlZCh1cGRhdGVkQ29sdW1uczogSURhdGFGaWx0ZXJbXSkge1xuICAgIGNvbnN0IHVwZGF0ZWRDb2x1bW5EZWY6IENvbHVtbkRlZmluaXRpb248TWFwcGVkUm9sZT5bXSA9IFtdO1xuICAgIHVwZGF0ZWRDb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hpbmdDb2wgPSB0aGlzLnJvbGVDb250cm9sU3ZjLnJvbGVDb2x1bW5zLmZpbmQoXG4gICAgICAgIChjb2x1bW4pID0+IGNvbHVtbi5oZWFkZXIgPT09IGNvbC5uYW1lIHx8IGNvbHVtbi5pZCA9PT0gY29sLm5hbWVcbiAgICAgICk7XG4gICAgICBpZiAobWF0Y2hpbmdDb2wpIHtcbiAgICAgICAgdXBkYXRlZENvbHVtbkRlZi5wdXNoKG1hdGNoaW5nQ29sKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMudmlzaWJsZUNvbHVtbkRlZiA9IFsuLi51cGRhdGVkQ29sdW1uRGVmXTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUZpbHRlcnNBbmRTb3J0cyhpc1NlYXJjaDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKCFpc1NlYXJjaCkge1xuICAgICAgdGhpcy5kYXRhVmlldy5vbkNsZWFyU2VhcmNoKCk7XG4gICAgICB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtID0gJyc7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICBjb25zdCBjbGlja0V2ZW50ID0gbmV3IE1vdXNlRXZlbnQoJ2NsaWNrJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjYW5jZWxhYmxlOiB0cnVlLFxuICAgICAgICB2aWV3OiB3aW5kb3csXG4gICAgICB9KTtcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY2xpY2tFdmVudCk7XG4gICAgfVxuICAgIHZhciBwYXlsb2FkOiBTZWFyY2hQcm9wZXJ0eVZhbHVlW10gPSB0aGlzLmN1cnJlbnRGaWx0ZXJzLm1hcCgoeCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgUHJvcGVydHlOYW1lOiB4Lm5hbWUsXG4gICAgICAgIEVudGl0eVZhbHVlOiB4LnZhbHVlLFxuICAgICAgICBPcGVyYXRvcjogU2VhcmNoT3BlcmF0b3IuQW5kLFxuICAgICAgICBTaWduOlxuICAgICAgICAgIHguY29uZGl0aW9uICYmIE9iamVjdC5rZXlzKERhdGVGaWx0ZXJUeXBlcykuaW5jbHVkZXMoeC5jb25kaXRpb24pXG4gICAgICAgICAgICA/IChEYXRlRmlsdGVyVHlwZXNbXG4gICAgICAgICAgICAgICAgeC5jb25kaXRpb24gYXMga2V5b2YgdHlwZW9mIERhdGVGaWx0ZXJUeXBlc1xuICAgICAgICAgICAgICBdIGFzIHVua25vd24gYXMgU2VhcmNoUHJvcGVydHlTaWduKVxuICAgICAgICAgICAgOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgICAgIFR5cGU6IFNlYXJjaFByb3BlcnR5VmFsdWVUeXBlLkRhdGUsXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHBheWxvYWQucHVzaCh7XG4gICAgICBQcm9wZXJ0eU5hbWU6ICdBUElLZXknLFxuICAgICAgRW50aXR5VmFsdWU6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgIE9wZXJhdG9yOiBTZWFyY2hPcGVyYXRvci5BbmQsXG4gICAgICBTaWduOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgfSk7XG4gICAgZm9yIChsZXQgc29ydCBvZiB0aGlzLmN1cnJlbnRTb3J0cykge1xuICAgICAgcGF5bG9hZC5wdXNoKHtcbiAgICAgICAgUHJvcGVydHlOYW1lOiBzb3J0Lm5hbWUsXG4gICAgICAgIEVudGl0eVZhbHVlOiAnJyxcbiAgICAgICAgT3BlcmF0b3I6IFNlYXJjaE9wZXJhdG9yLkFuZCxcbiAgICAgICAgU2lnbjogU2VhcmNoUHJvcGVydHlTaWduLkVRLFxuICAgICAgICBTb3J0OlxuICAgICAgICAgIHNvcnQudmFsdWUudG9Mb3dlckNhc2UoKSA9PSBTb3J0RGlyZWN0aW9uLkFzYy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICA/IFNvcnREaXJlY3Rpb24uQXNjXG4gICAgICAgICAgICA6IHNvcnQudmFsdWUudG9Mb3dlckNhc2UoKSA9PSBTb3J0RGlyZWN0aW9uLkRlc2MudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgPyBTb3J0RGlyZWN0aW9uLkRlc2NcbiAgICAgICAgICAgIDogU29ydERpcmVjdGlvbi5Ob25lLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHNlYXJjaFRlcm1FeGlzdHMgPSB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtLnRyaW0oKS5sZW5ndGggPiAwO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IHNlYXJjaFRlcm1FeGlzdHNcbiAgICAgID8gYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KFxuICAgICAgICAgIGBSb2xlL0dldFJvbGVzV2l0aFBhcmFtLyR7dGhpcy5jdXJyZW50U2VhcmNoVGVybS50cmltKCl9LzAvJHtcbiAgICAgICAgICAgIHRoaXMucGFnZVNpemVcbiAgICAgICAgICB9YFxuICAgICAgICApXG4gICAgICA6IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoYFJvbGUvU2VhcmNoUm9sZXMvMC8ke3RoaXMucGFnZVNpemV9YCwgcGF5bG9hZCk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzID0gW107XG4gICAgICB0aGlzLmN1cnJlbnRTb3J0cyA9IFtdO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYXJkRGF0YVZpZXcuY2xlYXJEYXRhKCk7XG4gICAgICB0aGlzLmN1cnJlbnREYXRhID0gbnVsbDtcbiAgICAgIHRoaXMucGFnZVN0YXRlID0gcmVzIGFzIFBhZ2VkUmVzdWx0PFJvbGU+O1xuICAgICAgdmFyIHJlc3VsdCA9IChyZXMgYXMgUGFnZWRSZXN1bHQ8Um9sZT4pLlJlc3VsdDtcbiAgICAgIHRoaXMuc2V0VXBNYXBwZWREYXRhKHJlc3VsdCk7XG4gICAgICB0aGlzLnNldFVwQ2FyZERhdGEoKTtcbiAgICB9XG4gIH1cbiAgYXN5bmMgbG9hZE1vcmVGaWx0ZXJzQW5kU29ydHMoKTogUHJvbWlzZTxQYWdlZFJlc3VsdDxSb2xlPiB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICghdGhpcy5wYWdlU3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHBheWxvYWQ6IFNlYXJjaFByb3BlcnR5VmFsdWVbXSA9IHRoaXMuY3VycmVudEZpbHRlcnMubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBQcm9wZXJ0eU5hbWU6IHgubmFtZSxcbiAgICAgICAgRW50aXR5VmFsdWU6IHgudmFsdWUsXG4gICAgICAgIE9wZXJhdG9yOiBTZWFyY2hPcGVyYXRvci5BbmQsXG4gICAgICAgIFNpZ246XG4gICAgICAgICAgeC5jb25kaXRpb24gJiYgT2JqZWN0LmtleXMoRGF0ZUZpbHRlclR5cGVzKS5pbmNsdWRlcyh4LmNvbmRpdGlvbilcbiAgICAgICAgICAgID8gKERhdGVGaWx0ZXJUeXBlc1tcbiAgICAgICAgICAgICAgICB4LmNvbmRpdGlvbiBhcyBrZXlvZiB0eXBlb2YgRGF0ZUZpbHRlclR5cGVzXG4gICAgICAgICAgICAgIF0gYXMgdW5rbm93biBhcyBTZWFyY2hQcm9wZXJ0eVNpZ24pXG4gICAgICAgICAgICA6IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgICAgICAgVHlwZTogU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUuRGF0ZSxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcGF5bG9hZC5wdXNoKHtcbiAgICAgIFByb3BlcnR5TmFtZTogJ0FQSUtleScsXG4gICAgICBFbnRpdHlWYWx1ZTogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgT3BlcmF0b3I6IFNlYXJjaE9wZXJhdG9yLkFuZCxcbiAgICAgIFNpZ246IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgICB9KTtcbiAgICBmb3IgKGxldCBzb3J0IG9mIHRoaXMuY3VycmVudFNvcnRzKSB7XG4gICAgICBwYXlsb2FkLnB1c2goe1xuICAgICAgICBQcm9wZXJ0eU5hbWU6IHNvcnQubmFtZSxcbiAgICAgICAgRW50aXR5VmFsdWU6ICcnLFxuICAgICAgICBPcGVyYXRvcjogU2VhcmNoT3BlcmF0b3IuQW5kLFxuICAgICAgICBTaWduOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgICAgIFNvcnQ6XG4gICAgICAgICAgc29ydC52YWx1ZS50b0xvd2VyQ2FzZSgpID09IFNvcnREaXJlY3Rpb24uQXNjLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgID8gU29ydERpcmVjdGlvbi5Bc2NcbiAgICAgICAgICAgIDogc29ydC52YWx1ZS50b0xvd2VyQ2FzZSgpID09IFNvcnREaXJlY3Rpb24uRGVzYy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICA/IFNvcnREaXJlY3Rpb24uRGVzY1xuICAgICAgICAgICAgOiBTb3J0RGlyZWN0aW9uLk5vbmUsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3Qgc2VhcmNoVGVybUV4aXN0cyA9IHRoaXMuY3VycmVudFNlYXJjaFRlcm0udHJpbSgpLmxlbmd0aCA+IDA7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gICAgY29uc3QgcmVzID0gc2VhcmNoVGVybUV4aXN0c1xuICAgICAgPyBhd2FpdCB0aGlzLnNlcnZlci5nZXQoXG4gICAgICAgICAgYFJvbGUvR2V0Um9sZXNXaXRoUGFyYW0vJHt0aGlzLmN1cnJlbnRTZWFyY2hUZXJtLnRyaW0oKX0vJHtcbiAgICAgICAgICAgIHRoaXMucGFnZVN0YXRlLlNraXBcbiAgICAgICAgICB9LyR7dGhpcy5wYWdlU2l6ZX1gXG4gICAgICAgIClcbiAgICAgIDogYXdhaXQgdGhpcy5zZXJ2ZXIucG9zdChcbiAgICAgICAgICBgUm9sZS9TZWFyY2hSb2xlcy8ke3RoaXMucGFnZVN0YXRlLlNraXB9LyR7dGhpcy5wYWdlU2l6ZX1gLFxuICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByZXN1bHQgPSByZXMgYXMgUGFnZWRSZXN1bHQ8Um9sZT47XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuICBvbkZpbHRlclVwZGF0ZWQodXBkYXRlZEZpbHRlcnM6IElEYXRhRmlsdGVyW10gfCBzdHJpbmcpIHtcbiAgICAvLyBFbnN1cmUgdXBkYXRlZEZpbHRlcnMgaXMgYW4gYXJyYXlcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh1cGRhdGVkRmlsdGVycykpIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlcnMgPSB1cGRhdGVkRmlsdGVycztcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyc0FuZFNvcnRzKCk7XG4gICAgfVxuICB9XG4gIG9uU29ydFVwZGF0ZWQodXBkYXRlZFNvcnRzOiBJRGF0YUZpbHRlcltdKSB7XG4gICAgdGhpcy5jdXJyZW50U29ydHMgPSB1cGRhdGVkU29ydHM7XG4gICAgY29uc29sZS5sb2coeyBDdXJyU29ydHM6IHRoaXMuY3VycmVudFNvcnRzIH0pO1xuICAgIHRoaXMudXBkYXRlRmlsdGVyc0FuZFNvcnRzKCk7XG4gIH1cblxuICBoYW5kbGVTZWFyY2goZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSkge1xuICAgIHRoaXMuc2VhcmNoVGVybSQubmV4dChldmVudC52YWx1ZSk7XG4gIH1cblxuICBoYW5kbGVFeHBvcnQoZXhwb3J0ZWREYXRhOiBQYXJ0aWFsPGFueT5bXSkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdFeHBvcnRlZCBkYXRhOicsIGV4cG9ydGVkRGF0YSk7XG4gICAgdGhpcy5kb3dubG9hZENTVihleHBvcnRlZERhdGEpO1xuICB9XG4gIHByaXZhdGUgZG93bmxvYWRDU1YoZGF0YTogUGFydGlhbDxhbnk+W10pIHtcbiAgICBjb25zdCBoZWFkZXJzID0gT2JqZWN0LmtleXMoZGF0YVswXSk7XG4gICAgY29uc3QgY3N2Q29udGVudCA9IFtcbiAgICAgIGhlYWRlcnMuam9pbignLCcpLFxuICAgICAgLi4uZGF0YS5tYXAoKHJvdykgPT4gaGVhZGVycy5tYXAoKGhlYWRlcikgPT4gcm93W2hlYWRlcl0pLmpvaW4oJywnKSksXG4gICAgXS5qb2luKCdcXG4nKTtcblxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbY3N2Q29udGVudF0sIHsgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7JyB9KTtcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGlmIChsaW5rLmRvd25sb2FkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHVybCk7XG4gICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCAnZXhwb3J0LmNzdicpO1xuICAgICAgbGluay5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgbGluay5jbGljaygpO1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbiAgICB9XG4gIH1cblxuICBnZXRNb2NrUm9sZXMoKTogUm9sZVtdIHtcbiAgICByZXR1cm4gbmV3IEFycmF5KDEwKS5maWxsKDEpLm1hcCgoaWQsIGkpID0+ICh7XG4gICAgICBJZDogaWQgKyBpLFxuICAgICAgaWQ6IChpZCArIGkpLnRvU3RyaW5nKCksXG4gICAgICBOYW1lOiB0aGlzLm1vY2tOYW1lc1tpXSB8fCAnJyxcbiAgICAgIFJvbGVDb250ZXh0czogdGhpcy5yYW5kb21Db250ZXh0cygpLFxuICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICBUZW5hbnRJZDogYFRlbmFudCR7aWQgKyBpfWAsXG4gICAgICBDb2RlOiAnJyxcbiAgICAgIFNlcnZpY2VOYW1lOiAnJyxcbiAgICAgIEFQSUtleTogJycsXG4gICAgfSkpO1xuICB9XG5cbiAgbW9ja05hbWVzOiBzdHJpbmdbXSA9IFtcbiAgICAnQWRtaW4nLFxuICAgICdTdXBlciBBZG1pbicsXG4gICAgJ01hbmFnZXInLFxuICAgICdJbnRlcm4nLFxuICAgICdQcm9kdWN0aW9uIE1hbmFnZXInLFxuICAgICdDRU8nLFxuICAgICdDVE8nLFxuICAgICdDT08nLFxuICAgICdEZXZlbG9wZXInLFxuICAgICdFbmdpbmVlcicsXG4gIF07XG5cbiAgcmFuZG9tTmFtZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy5tb2NrTmFtZXMubGVuZ3RoKTtcbiAgICByZXR1cm4gdGhpcy5tb2NrTmFtZXNbcmFuZG9tSW5kZXhdO1xuICB9XG5cbiAgcmFuZG9tQ29udGV4dHMoKTogUm9sZUNvbnRleHRbXSB7XG4gICAgY29uc3QgcmFuZG9tTnVtYmVyID0gTWF0aC5mbG9vcihcbiAgICAgIE1hdGgucmFuZG9tKCkgKiBPYmplY3Qua2V5cyhVSXMpLmxlbmd0aCArIDFcbiAgICApO1xuICAgIHZhciByZXR1cm5BcnJheTogUm9sZUNvbnRleHRbXSA9IFtdO1xuICAgIGNvbnN0IHVzZWRMaXN0OiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZG9tTnVtYmVyOyBpKyspIHtcbiAgICAgIGxldCByYW5kb21JbmRleDtcbiAgICAgIGRvIHtcbiAgICAgICAgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBPYmplY3Qua2V5cyhVSXMpLmxlbmd0aCk7XG4gICAgICB9IHdoaWxlICh1c2VkTGlzdC5pbmNsdWRlcyhyYW5kb21JbmRleCkpO1xuXG4gICAgICByZXR1cm5BcnJheS5wdXNoKHtcbiAgICAgICAgSWQ6ICdjb250ZXh0JyArIGksXG4gICAgICAgIGlkOiAoJ2NvbnRleHQnICsgaSkudG9TdHJpbmcoKSxcbiAgICAgICAgTmFtZTogT2JqZWN0LmtleXMoVUlzKVtyYW5kb21JbmRleF0sXG4gICAgICAgIFJvbGU6ICcnLFxuICAgICAgICBSb2xlQWN0aW9uczogdGhpcy5yYW5kb21BY3Rpb25zKCksXG4gICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgVGVuYW50SWQ6IGBUZW5hbnQkeydjb250ZXh0JyArIGl9YCxcbiAgICAgICAgQ29kZTogJycsXG4gICAgICAgIFNlcnZpY2VOYW1lOiAnJyxcbiAgICAgICAgQVBJS2V5OiAnJyxcbiAgICAgICAgQXBwbGljYXRpb25Sb2xlQ29udGV4dDogJycsXG4gICAgICB9KTtcbiAgICAgIHVzZWRMaXN0LnB1c2gocmFuZG9tSW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuQXJyYXk7XG4gIH1cblxuICByYW5kb21BY3Rpb25zKCk6IFJvbGVBY3Rpb25bXSB7XG4gICAgY29uc3QgcmFuZG9tTnVtYmVyID0gTWF0aC5mbG9vcihcbiAgICAgIE1hdGgucmFuZG9tKCkgKiBPYmplY3Qua2V5cyhVSUFjdGlvbnMpLmxlbmd0aCArIDFcbiAgICApO1xuICAgIHZhciByZXR1cm5BcnJheTogUm9sZUFjdGlvbltdID0gW107XG4gICAgY29uc3QgdXNlZExpc3Q6IG51bWJlcltdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5kb21OdW1iZXI7IGkrKykge1xuICAgICAgbGV0IHJhbmRvbUluZGV4O1xuICAgICAgZG8ge1xuICAgICAgICByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIE9iamVjdC5rZXlzKFVJQWN0aW9ucykubGVuZ3RoKTtcbiAgICAgIH0gd2hpbGUgKHVzZWRMaXN0LmluY2x1ZGVzKHJhbmRvbUluZGV4KSk7XG5cbiAgICAgIHJldHVybkFycmF5LnB1c2goe1xuICAgICAgICBJZDogJ2FjdGlvbicgKyBpLFxuICAgICAgICBpZDogKCdhY3Rpb24nICsgaSkudG9TdHJpbmcoKSxcbiAgICAgICAgTmFtZTogT2JqZWN0LmtleXMoVUlBY3Rpb25zKVtyYW5kb21JbmRleF0sXG4gICAgICAgIFJvbGU6ICcnLFxuICAgICAgICBDb250ZXh0OiAnJyxcbiAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICBUZW5hbnRJZDogYFRlbmFudCR7J2FjdGlvbicgKyBpfWAsXG4gICAgICAgIENvZGU6ICcnLFxuICAgICAgICBTZXJ2aWNlTmFtZTogJycsXG4gICAgICAgIEFQSUtleTogJycsXG4gICAgICAgIEFwcGxpY2F0aW9uUm9sZUFjdGlvbjogJycsXG4gICAgICB9KTtcbiAgICAgIHVzZWRMaXN0LnB1c2gocmFuZG9tSW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuQXJyYXk7XG4gIH1cblxuICBjbG9zZVBvcFVwKCkge1xuICAgIHRoaXMub3BlbkRyb3Bkb3duSWQgPSBudWxsO1xuICAgIHRoaXMucG9wVXBzLmZvckVhY2goKHBvcFVwKSA9PiB7XG4gICAgICBpZiAocG9wVXAuZHJvcGRvd25PcGVuKSB7XG4gICAgICAgIHBvcFVwLnRvZ2dsZURyb3Bkb3duKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVJdGVtKHZhbHVlOiBhbnksIGtleTogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgW2tleV06IHZhbHVlLFxuICAgIH07XG4gIH1cblxuICBlZGl0VmFsdWUodmFsdWU6IE1hcHBlZFJvbGUpIHtcbiAgICBjb25zdCBjYXJkID0gdGhpcy5jYXJkRGF0YS5maW5kKCh4KSA9PiB4LmRhdGEuSWQgPT0gdmFsdWUuSWQpO1xuICAgIGlmIChjYXJkICYmIHRoaXMuY2FyZERhdGFWaWV3KSB7XG4gICAgICB0aGlzLmRhdGFWaWV3LnRvZ2dsZVZpZXcoKTtcbiAgICAgIGNhcmQuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5jdXJyZW50RGF0YSA9IHRoaXMuY2FyZERhdGFWaWV3Lm9uSXRlbUNsaWNrKGNhcmQpO1xuICAgICAgdGhpcy5jbG9zZVBvcFVwKCk7XG4gICAgICAvLyBpZiAodGhpcy5jdXJyZW50RGF0YSkge1xuICAgICAgLy8gICB0aGlzLmZvcm0uY29udHJvbHNbJ05hbWUnXS5zZXRWYWx1ZSh0aGlzLmN1cnJlbnREYXRhLmRhdGE/Lk5hbWUpO1xuICAgICAgLy8gfVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiAjbWVzc2FnZUxvZyBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTQgbWVzc2FnZS1sb2ctY29udGFpbmVyXCI+XG4gIDxkaXYgKm5nSWY9XCJ0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPiAwXCJcbiAgICBjbGFzcz1cImNvbnRleHQtYmFubmVyIHB5LTMgcHgtNCByb3VuZGVkLXhsIGZsZXggaXRlbS1jZW50ZXIganVzdGlmeS1zcGFjZS1iZXR3ZWVuIGdhcC0zXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTIgZmxleC0xIGNvbnRleHQtYmFubmVyLWNvbnRlbnRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250ZXh0LWNvbnRlbnQgaXRlbXMtY2VudGVyIGZsZXggZ2FwLTJcIiAqbmdGb3I9XCJsZXQgY29udGV4dCBvZiB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeTsgaW5kZXggYXMgaVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGV4dC1tYWluLWNvbnRlbnQtY29udGFpbmVyIGZsZXggZ2FwLTRcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbnRleHQtY2FwdGlvbiBmb250LWJvbGQgdGV4dC1bIzQwNDA0MF1cIj57e2NvbnRleHQuZGF0YS5DaGlsZHJlblR5cGUgJiZcbiAgICAgICAgICAgIGNvbnRleHQuZGF0YS5DaGlsZHJlblR5cGUgPT0gY2hpbGRQZXJtaXNzaW9uUmVmPyBjb250ZXh0LmRhdGEuTmFtZTogY29udGV4dC50aXRsZX19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaSA9PSB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggLTFcIlxuICAgICAgICAgICAgY2xhc3M9XCJjb250ZXh0LXN1YmNhcHRpb25cIj57e3RoaXMuZ2V0Q2FyZFN1YkNhcHRpb24oY29udGV4dCl9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpIDwgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoIC0xXCI+LzwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmRcIj5cbiAgICAgIDx2ZXJiZW4tc3ZnIChjbGljayk9XCJjbG9zZURldGFpbHMoKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBpY29uPVwiY2xvc2UtY2lyY2xlLWZ1bGxcIiBbd2lkdGhdPVwiMjBcIlxuICAgICAgICBbaGVpZ2h0XT1cIjIwXCI+PC92ZXJiZW4tc3ZnPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPHZlcmJlbi1kYXRhLXZpZXcgI3ZkdiBbdmlld1N0YXRlXT1cIntcbiAgICAgIGlzU2VhcmNoOiB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPT0gMCxcbiAgICAgIGlzQ29sdW1uOiB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPT0gMCxcbiAgICAgIGlzRmlsdGVyOiB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPT0gMCxcbiAgICAgIGlzU29ydDogdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID09IDAsXG4gICAgICBpc0V4cG9ydDogdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID09IDAsXG4gICAgICBpc1NlbGVjdDogdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID09IDAsXG4gICAgICBpc0NyZWF0ZTogdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID09IDAsXG4gICAgICBpc1RvZ2dsZTp0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPT0gMCxcbiAgICB9XCIgW2J1dHRvbkNsYXNzXT1cIidteS1jdXN0b20tYnV0dG9uLWNsYXNzJ1wiIFtpY29uQ2xhc3NdPVwiJ215LWljb24tY2xhc3MnXCJcbiAgICBbYWN0aXZlSWNvbkNsYXNzXT1cIidteS1hY3RpdmUtaWNvbi1jbGFzcydcIiBbaXNUYWJsZVZpZXddPVwiZmFsc2VcIlxuICAgIFtzZWxlY3RlZENvbHVtbkNvdW50XT1cIjBcIiBbc2VsZWN0ZWRTb3J0Q291bnRdPVwiMFwiIFtzZWxlY3RlZEZpbHRlclRhYmxlQ291bnRdPVwiMFwiICh2aWV3Q2hhbmdlKT1cIm9uVmlld0NoYW5nZSgkZXZlbnQpXCJcbiAgICAoc3RhdGVDaGFuZ2UpPVwib25TdGF0ZUNoYW5nZSgkZXZlbnQpXCIgKG9uU2VhcmNoQ2hhbmdlKT1cImhhbmRsZVNlYXJjaCgkZXZlbnQpXCI+XG4gICAgPGRpdiBjbGFzcz1cIm10LTJcIiB0YWJsZS1jb250ZW50PlxuICAgICAgPGxpYi1kYXRhLXRhYmxlICNkdCBbZGF0YV09XCJkYXRhXCIgW2NvbHVtbnNdPVwidmlzaWJsZUNvbHVtbkRlZlwiIFtzdHlsZUNvbmZpZ109XCJzdHlsZXNcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJzZWxlY3RcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LWlzU2VsZWN0ZWQ9XCJpc1NlbGVjdGVkXCIgbGV0LXRvZ2dsZVJvd1NlbGVjdGlvbj1cInRvZ2dsZVJvd1NlbGVjdGlvblwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImlzU2VsZWN0ZWRcIiAoY2hhbmdlKT1cInRvZ2dsZVJvd1NlbGVjdGlvbigpXCIgLz5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGVyIGxldC1hbGxSb3dzU2VsZWN0ZWQ9XCJhbGxSb3dzU2VsZWN0ZWRcIiBsZXQtc29tZVJvd3NTZWxlY3RlZD1cInNvbWVSb3dzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgbGV0LXRvZ2dsZUFsbFJvd3M9XCJ0b2dnbGVBbGxSb3dzXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiYWxsUm93c1NlbGVjdGVkKClcIiBbaW5kZXRlcm1pbmF0ZV09XCJzb21lUm93c1NlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUFsbFJvd3MoKVwiIC8+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiY3JlYXRlZEF0XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC12YWx1ZT5cbiAgICAgICAgICAgIHt7IHZhbHVlIHwgZGF0ZSB9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cInVwZGF0ZWRBdFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtdmFsdWU+XG4gICAgICAgICAgICB7eyB2YWx1ZSB8IGRhdGUgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJuYW1lXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICB7e3ZhbHVlLk5hbWV9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsRWRpdCBsZXQtcm93PVwicm93XCIgbGV0LXVwZGF0ZVZhbHVlPVwidXBkYXRlVmFsdWVcIiBsZXQtdXBkYXRlRGF0YT1cInVwZGF0ZURhdGFcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2lkdGgtbWF4XCI+XG4gICAgICAgICAgICAgIDx2ZXJiZW5hLWlucHV0IFsobmdNb2RlbCldPVwidmFsdWUuTmFtZVwiPjwvdmVyYmVuYS1pbnB1dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiYWN0aW9uc1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtaXNFZGl0aW5nPVwiaXNFZGl0aW5nXCIgbGV0LXRvZ2dsZVJvd0VkaXQ9XCJ0b2dnbGVSb3dFZGl0XCIgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT5cbiAgICAgICAgICAgIDx2ZXJiZW4tcG9wLVVwICNwb3B1cCBbY3VzdG9tU3R5bGVzXT1cInsnei1pbmRleCc6ICc5OSd9XCIgW2VuYWJsZU1vdXNlTGVhdmVdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgPHZlcmJlbi1zdmcgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBhY3Rpb25zLWljb25cIiBkcm9wZG93bi10cmlnZ2VyIGljb249XCJsaXN0XCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wLXVwLWNvbnRlbnQgZmxleCBmbGV4LWNvbFwiIGRyb3Bkb3duLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwidG9nZ2xlUm93RWRpdCgpOyBjbG9zZVBvcFVwKCk7IFwiIGNsYXNzPVwicG9wLXVwLXZhbHVlIGN1cnNvci1wb2ludGVyXCI+RWRpdDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cInZpZXdEZXRhaWxzRnJvbVRhYmxlKHZhbHVlKVwiIGNsYXNzPVwicG9wLXVwLXZhbHVlIGN1cnNvci1wb2ludGVyXCI+VmlldyBEZXRhaWxzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcC11cC12YWx1ZSBjdXJzb3ItcG9pbnRlclwiPlZpZXcgVXNlcnM8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3ZlcmJlbi1wb3AtVXA+XG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC00IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8dmVyYmVuLXN2ZyAoY2xpY2spPVwiZWRpdFZhbHVlKHZhbHVlKVwiIGljb249XCJlZGl0XCIgW3dpZHRoXT1cIjE1XCIgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cInZpZXdEZXRhaWxzRnJvbVRhYmxlKHZhbHVlKVwiIGNsYXNzPVwidmlldy1saW5rcyB2aWV3LWRldGFpbHNcIj52aWV3IGRldGFpbHM8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlldy1saW5rcyB2aWV3LXVzZXJzXCI+dmlldyB1c2Vyczwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbEVkaXQgbGV0LWlzRWRpdGluZz1cImlzRWRpdGluZ1wiIGxldC10b2dnbGVSb3dFZGl0PVwidG9nZ2xlUm93RWRpdFwiIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMiBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPHZlcmJlbi1zdmcgaWNvbj1cInRpY2tcIiBbd2lkdGhdPVwiMTVcIiBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidGFibGVTYXZlUm9sZSh2YWx1ZSwgdG9nZ2xlUm93RWRpdClcIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnIGljb249XCJkZWxldGVcIiBbd2lkdGhdPVwiMTVcIiBbaGVpZ2h0XT1cIjE1XCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgICA8dmVyYmVuLXN2ZyBpY29uPVwiY2FyZFZpZXdBbHRcIiBbd2lkdGhdPVwiMTVcIiBbaGVpZ2h0XT1cIjE1XCIgKGNsaWNrKT1cImVkaXRWYWx1ZSh2YWx1ZSlcIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbGliLWRhdGEtdGFibGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjYXJkLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLWNhcmQtZGF0YS12aWV3IGJvcmRlclJhZGl1cz1cIjEycHhcIiAjdmRjdiBkYXRhSWQ9XCJJZFwiIGJvcmRlcj1cIjVweFwiIFtjYXJkRGF0YUxpc3RdPVwiY2FyZERhdGFcIlxuICAgICAgICByYmdDb2xvcj1cIiNmNWY2ZjlcIiBtZz1cIjBweFwiPlxuICAgICAgICA8dmVyYmVuLWxlZnQtY2FyZC1kYXRhLXZpZXcgY2xhc3M9XCJzcGFjZS15LTdcIj5cbiAgICAgICAgICA8dmVyYmVuLWxlZnQtY2FyZC1kYXRhICN2bGNkIFtwYXJlbnRdPVwidmRjdlwiIGRhdGFJZD1cIk1haWxBZGRyZXNzXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYmctc2Vjb25kYXJ5LTEwMCByb3VuZGVkLXhsIGJvcmRlci1wcmltYXJ5IGJvcmRlci1bMXB4XVwiIFtjYXJkRGF0YUxpc3RdPVwiY2FyZERhdGFcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2FyZCBsZXQtaXRlbT5cbiAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwicm9sZUNhcmRDbGlja2VkKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0uZGF0YS5DaGlsZHJlblR5cGUgJiYgaXRlbS5kYXRhLkNoaWxkcmVuVHlwZSA9PSBjaGlsZFBlcm1pc3Npb25SZWZcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBjdXJzb3ItcG9pbnRlciBoLVttYXgtY29udGVudF1cIj5cbiAgICAgICAgICAgICAgICA8dmVyYmVuLXN2ZyBbd2lkdGhdPVwiMTVcIiBbaGVpZ2h0XT1cIjE1XCIgKGNsaWNrKT1cInRvZ2dsZUNoaWxkcmVuKGl0ZW0pOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aD8ndmlzaWJsZSc6J2ludmlzaWJsZSdcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpdGVtcy1jZW50ZXIgZmxleCAgcHItMSBjdXJzb3ItcG9pbnRlclwiIFtpY29uXT1cIml0ZW0uaXNDaGlsZHJlbkV4cGFuZGVkPydtaW51cyc6J3BsdXMnXCIgLz5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCAgdy1mdWxsIGJnLXNlY29uZGFyeSByb3VuZGVkLXhsXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0zIHJvdW5kZWQteGwgcm91bmRlZC10ci1ub25lIHJvdW5kZWQtYnItbm9uZVwiIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWQgPyAnYmctcHJpbWFyeScgOiAnYmctc2Vjb25kYXJ5LTIwMCdcbiAgICAgICAgICAgICAgICAgICAgXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktMyBweC00IGZsZXgtMSBoLVsxMDAlXVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1zdGFydCBmbGV4LTEgZ2FwLTEganVzdGlmeS1iZXR3ZWVuIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZmxleC0xIGNhcmQtbWluLWhlaWdodCBqdXN0aWZ5LWJldHdlZW4gaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cIm15LTAgZm9udC1ib2xkIHRleHQtWyM0MDQwNDBdIGxlYWRpbmctWzE5LjVweF1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRhdGEuTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvaDM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiF0ZXh0LVsxMHB4XSBmb250LWxpZ2h0IHRleHQtWyM0MDQwNDBdIGxlYWRpbmctWzEyLjFweF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7Z2V0Q2FyZFN1YkNhcHRpb24oaXRlbSl9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwXCIgY2xhc3M9XCJmbGV4IGl0ZW1zLWVuZCBoLVsxMDAlXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgKGNsaWNrKT1cInZpZXdEZXRhaWxzKGl0ZW0pOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm15LTAgdW5kZXJsaW5lIHRleHQtWyMzNDc5RTldIHRleHQtWzEycHhdIGxlYWRpbmctWzE2LjZweF0gY3Vyc29yLXBvaW50ZXIgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldyBkZXRhaWxzPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFpdGVtLmRhdGEuQ2hpbGRyZW5UeXBlIHx8IGl0ZW0uZGF0YS5DaGlsZHJlblR5cGUgIT09IGNoaWxkUGVybWlzc2lvblJlZlwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGgtW21heC1jb250ZW50XVwiPlxuICAgICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnIFtuZ0NsYXNzXT1cIml0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGg/J3Zpc2libGUnOidpbnZpc2libGUnXCIgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIiAoY2xpY2spPVwidG9nZ2xlQ2hpbGRyZW4oaXRlbSlcIiBjbGFzcz1cIml0ZW1zLWNlbnRlciBmbGV4ICBwci0xIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgIFtpY29uXT1cIml0ZW0uaXNDaGlsZHJlbkV4cGFuZGVkPydtaW51cyc6J3BsdXMnXCIgLz5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCAgdy1mdWxsIGJnLXNlY29uZGFyeSByb3VuZGVkLXhsXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0zIHJvdW5kZWQteGwgcm91bmRlZC10ci1ub25lIHJvdW5kZWQtYnItbm9uZVwiIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWQgPyAnYmctcHJpbWFyeScgOiAnYmctc2Vjb25kYXJ5LTIwMCdcbiAgICAgICAgICAgICAgICAgICAgXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktMyBweC00IGZsZXgtMSBmbGV4IGdhcC0yIGgtWzEwMCVdIGl0ZW1zLXN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIml0ZW0uZGF0YT8uU2VsZWN0ZWQgIT0gdW5kZWZpbmVkXCIgW2Rpc2FibGVkXT1cInRoaXMuaXNDaGVja2JveERpc2FibGVkKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cIm10LTEgY3Vyc29yLXBvaW50ZXJcIiBbKG5nTW9kZWwpXT1cIml0ZW0uZGF0YS5TZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyB0aGlzLnNhdmVSb2xlRHluYW1pYyhpdGVtKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLXN0YXJ0IGZsZXgtMSBnYXAtMSBqdXN0aWZ5LWJldHdlZW4gaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LTEgY2FyZC1taW4taGVpZ2h0IGp1c3RpZnktYmV0d2VlbiBoLVsxMDAlXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwibXktMCBmb250LWJvbGQgdGV4dC1bIzQwNDA0MF0gbGVhZGluZy1bMTkuNXB4XVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0udGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIhdGV4dC1bMTBweF0gZm9udC1saWdodCB0ZXh0LVsjNDA0MDQwXSBsZWFkaW5nLVsxMi4xcHhdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dldENhcmRTdWJDYXB0aW9uKGl0ZW0pfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMFwiIGNsYXNzPVwiZmxleCBpdGVtcy1lbmQgaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIChjbGljayk9XCJ2aWV3RGV0YWlscyhpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXktMCB1bmRlcmxpbmUgdGV4dC1bIzM0NzlFOV0gdGV4dC1bMTJweF0gbGVhZGluZy1bMTYuNnB4XSBjdXJzb3ItcG9pbnRlciBmb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3IGRldGFpbHM8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2FyZENoaWxkIGxldC1pdGVtPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBoLVttYXgtY29udGVudF1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCAgdy1mdWxsIGJnLXNlY29uZGFyeSByb3VuZGVkLXhsXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0zIHJvdW5kZWQteGwgcm91bmRlZC10ci1ub25lIHJvdW5kZWQtYnItbm9uZVwiIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWQgPyAnYmctcHJpbWFyeScgOiAnYmctc2Vjb25kYXJ5LTIwMCdcbiAgICAgICAgICAgICAgICAgICAgXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktMyBweC00IGZsZXgtMSBmbGV4IGdhcC0yIGgtWzEwMCVdIGl0ZW1zLXN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIml0ZW0uZGF0YT8uU2VsZWN0ZWQgIT0gdW5kZWZpbmVkXCIgW2Rpc2FibGVkXT1cInRoaXMuaXNDaGVja2JveERpc2FibGVkKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cIm10LTEgY3Vyc29yLXBvaW50ZXJcIiBbKG5nTW9kZWwpXT1cIml0ZW0uZGF0YS5TZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyB0aGlzLnNhdmVSb2xlRHluYW1pYyhpdGVtKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLXN0YXJ0IGZsZXgtMSBnYXAtMSBqdXN0aWZ5LWJldHdlZW4gaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LTEgY2FyZC1taW4taGVpZ2h0IGp1c3RpZnktYmV0d2VlbiBoLVsxMDAlXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwibXktMCBmb250LWJvbGQgdGV4dC1bIzQwNDA0MF0gbGVhZGluZy1bMTkuNXB4XVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0udGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIhdGV4dC1bMTBweF0gZm9udC1saWdodCB0ZXh0LVsjNDA0MDQwXSBsZWFkaW5nLVsxMi4xcHhdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dldENhcmRTdWJDYXB0aW9uKGl0ZW0pfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMFwiIGNsYXNzPVwiZmxleCBpdGVtcy1lbmQgaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIChjbGljayk9XCJ2aWV3RGV0YWlsc0NoaWxkKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJteS0wIHVuZGVybGluZSB0ZXh0LVsjMzQ3OUU5XSB0ZXh0LVsxMnB4XSBsZWFkaW5nLVsxNi42cHhdIGN1cnNvci1wb2ludGVyIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcgZGV0YWlsczwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdmVyYmVuLWxlZnQtY2FyZC1kYXRhPlxuICAgICAgICA8L3ZlcmJlbi1sZWZ0LWNhcmQtZGF0YS12aWV3PlxuICAgICAgICA8dmVyYmVuLXJpZ2h0LWNhcmQtZGF0YS12aWV3ICpuZ0lmPVwidGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID09IDBcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3BhcmVudD5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0aGlzLmN1cnJlbnREYXRhXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHJvdW5kZWQteGwgaC1mdWxsIHctZnVsbCBqdXN0aWZ5LWJldHdlZW4gcmVsYXRpdmUgc3BhY2UteS00XCI+XG4gICAgICAgICAgICAgIDx2ZXJiZW5hLWlucHV0IG5hbWU9XCJOYW1lXCIgbGFiZWw9XCJOYW1lXCIgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlVGFibGUoKVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0aGlzLmN1cnJlbnREYXRhLmRhdGEuTmFtZVwiIC8+XG5cbiAgICAgICAgICAgICAgPCEtLSBidXR0b25zIC0tPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gYm90dG9tLTggbGVmdC0wIHJpZ2h0LTBcIj5cbiAgICAgICAgICAgICAgICA8dmVyYmVuYS1idXR0b24gY2xhc3M9XCJ2ZXJiZW4tZGVsZXRlLWJ1dHRvblwiIHRleHQ9XCJEZWxldGVcIj48L3ZlcmJlbmEtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgICA8dmVyYmVuYS1idXR0b24gY2xhc3M9XCJ2ZXJiZW4tc3dpdGNoLWJ1dHRvblwiIChjbGljayk9XCJnb1RvVGFibGVWaWV3KClcIlxuICAgICAgICAgICAgICAgICAgICB0ZXh0PVwiU3dpdGNoIFRvIFRhYmxlXCI+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDx2ZXJiZW5hLWJ1dHRvbiBjbGFzcz1cInZlcmJlbi1wcmltYXJ5LWJ1dHRvblwiIChjbGljayk9XCJ0aGlzLnNhdmVSb2xlKClcIiB0ZXh0PVwiU2F2ZVwiPjwvdmVyYmVuYS1idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3ZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldz5cbiAgICAgICAgPCEtLSA8dmVyYmVuLXJpZ2h0LWNhcmQtZGF0YS12aWV3PlxuICAgICAgICAgIHllc2hoaGhoaFxuICAgICAgICA8L3ZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldz4gLS0+XG5cbiAgICAgICAgPHZlcmJlbi1jYXJkLWRhdGEtdmlldy1mb290ZXIgKm5nSWY9XCJ0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPT0gMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiF2ZGN2Lmhhc0N1cnJlbnRJdGVtKCkgJiYgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID09IDBcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm1lc3NhZ2UtbG9nLWJ1dHRvbi1jb250YWluZXIgZmxleCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uIFtmb250V2VpZ2h0XT1cIidib2xkJ1wiIFtiZ0NvbG9yXT1cIicjOEU4RDg3J1wiIFtib3JkZXJSYWRpdXNdPVwiJzRweCdcIiBbdGV4dENvbG9yXT1cIicjZmZmJ1wiXG4gICAgICAgICAgICAgICAgW3RleHRdPVwiJ0RlbGV0ZSdcIj5cbiAgICAgICAgICAgICAgPC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgge3t2ZGN2Lmhhc0N1cnJlbnRJdGVtKCk/J2ZsZXgtMSc6Jyd9fSBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXIgZ2FwLTVcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdpbmF0b3ItdGV4dFwiPnt7IGNhcmREYXRhLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9hZE1vcmUoKVwiIGNsYXNzPVwibG9hZC1tb3JlIHZpZXctbGlua3NcIj5Mb2FkIG1vcmU8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3ZlcmJlbi1jYXJkLWRhdGEtdmlldy1mb290ZXI+XG4gICAgICA8L3ZlcmJlbi1jYXJkLWRhdGEtdmlldz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNvbHVtbi1jb250ZW50PlxuICAgICAgPHZlcmJlbi12aXNpYmxlLWNvbHVtbiAoY29sdW1uc1VwZGF0ZWQpPVwib25Db2x1bW5zVXBkYXRlZCgkZXZlbnQpXCIgW2JvcmRlcl09XCInMXB4IHNvbGlkIHJnYmEoMjEyLCAxNjAsIDcsIDEpJ1wiXG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjEwcHhcIiBib3hTaGFkb3c9XCIycHggMnB4IDJweCAwcHggc2lsdmVyXCIgYmdDb2xvcj1cIndoaXRlXCIgd2lkdGg9XCI0MDBweFwiIHRleHRDb2xvcj1cImJsYWNrXCIgcGQ9XCIxcmVtXCJcbiAgICAgICAgcHJpbWFyeUNvbG9yPVwiI0ZGRTY4MVwiIHNlY29uZGFyeUNvbG9yPVwiIzM0NzlFOVwiIFtjb2x1bW5zXT1cInZpc2libGVDb2x1bW5zXCJcbiAgICAgICAgW2Rpc3BsYXllZENvbHVtbnNdPVwiNVwiPjwvdmVyYmVuLXZpc2libGUtY29sdW1uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZmlsdGVyLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLXRhYmxlLWZpbHRlciAoZmlsdGVyc0FwcGxpZWQpPVwib25GaWx0ZXJVcGRhdGVkKCRldmVudClcIiBbYm9yZGVyXT1cIicxcHggc29saWQgcmdiYSgyMTIsIDE2MCwgNywgMSknXCJcbiAgICAgICAgYm9yZGVyUmFkaXVzPVwiMTBweFwiIGJveFNoYWRvdz1cIjJweCAycHggMnB4IDBweCBzaWx2ZXJcIiBiZ0NvbG9yPVwid2hpdGVcIiB3aWR0aD1cIjQyMHB4XCIgdGV4dENvbG9yPVwiYmxhY2tcIiBwZD1cIjFyZW1cIlxuICAgICAgICBwcmltYXJ5Q29sb3I9XCIjRkZFNjgxXCIgc2Vjb25kYXJ5Q29sb3I9XCIjMzQ3OUU5XCIgdGVydGlhcnlDb2xvcj1cIiM0MDQwNDBcIiBbZmlsdGVyT3B0aW9uc109XCJmaWx0ZXJBcnJheVwiXG4gICAgICAgIFttYXhGaWx0ZXJMZW5ndGhdPVwiM1wiPjwvdmVyYmVuLXRhYmxlLWZpbHRlcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHNvcnQtY29udGVudD5cbiAgICAgIDx2ZXJiZW4tc29ydC10YWJsZSAoc2VsZWN0ZWRPcHRpb25zKT1cIm9uU29ydFVwZGF0ZWQoJGV2ZW50KVwiIFtib3JkZXJdPVwiJzFweCBzb2xpZCByZ2JhKDIxMiwgMTYwLCA3LCAxKSdcIlxuICAgICAgICBib3JkZXJSYWRpdXM9XCIxMHB4XCIgYm94U2hhZG93PVwiMnB4IDJweCAycHggMHB4IHNpbHZlclwiIGJnQ29sb3I9XCJ3aGl0ZVwiIHdpZHRoPVwiNDAwcHhcIiB0ZXh0Q29sb3I9XCJibGFja1wiIHBkPVwiMXJlbVwiXG4gICAgICAgIHByaW1hcnlDb2xvcj1cIiNGRkU2ODFcIiBzZWNvbmRhcnlDb2xvcj1cIiMzNDc5RTlcIiB0ZXJ0aWFyeUNvbG9yPVwiIzQwNDA0MFwiIFtlbmFibGVEcmFnQW5kRHJvcF09XCJ0cnVlXCJcbiAgICAgICAgW3NvcnRPcHRpb25zXT1cInNvcnRPcHRpb25zXCI+PC92ZXJiZW4tc29ydC10YWJsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGV4cG9ydC1jb250ZW50PlxuICAgICAgPGxpYi1kYXRhLWV4cG9ydCBbZGF0YV09XCJkYXRhXCIgKGV4cG9ydERhdGFFdmVudCk9XCJoYW5kbGVFeHBvcnQoJGV2ZW50KVwiPlxuICAgICAgPC9saWItZGF0YS1leHBvcnQ+XG4gICAgPC9kaXY+XG4gIDwvdmVyYmVuLWRhdGEtdmlldz5cbiAgPGRpdiAqbmdJZj1cInZkdi5pc1RhYmxlVmlld1wiIGNsYXNzPVwiZmxleCBnYXAtMiBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZS1sb2ctYnV0dG9uLWNvbnRhaW5lciBmbGV4IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgPHZlcmJlbmEtYnV0dG9uIFtmb250V2VpZ2h0XT1cIidib2xkJ1wiIFtiZ0NvbG9yXT1cIicjOEU4RDg3J1wiIFtib3JkZXJSYWRpdXNdPVwiJzRweCdcIiBbdGV4dENvbG9yXT1cIicjZmZmJ1wiXG4gICAgICAgIFt0ZXh0XT1cIidEZWxldGUnXCI+XG4gICAgICA8L3ZlcmJlbmEtYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIGl0ZW1zLWNlbnRlciBnYXAtNVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJwYWdpbmF0b3ItdGV4dFwiPnt7IGNhcmREYXRhLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3Bhbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cImxvYWRNb3JlKClcIiBjbGFzcz1cImxvYWQtbW9yZSB2aWV3LWxpbmtzXCI+TG9hZCBtb3JlPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
1329
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1jb250cm9sLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1hdXRoZW50aWNhdGlvbi11aS9zcmMvbGliL2NvbXBvbmVudHMvcm9sZS1jb250cm9sL3JvbGUtY29udHJvbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tYXV0aGVudGljYXRpb24tdWkvc3JjL2xpYi9jb21wb25lbnRzL3JvbGUtY29udHJvbC9yb2xlLWNvbnRyb2wuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBR0wsU0FBUyxFQUNULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBSUwsY0FBYyxHQUtmLE1BQU0sY0FBYyxDQUFDO0FBRXRCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFeEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUU1QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBUXhDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSXJFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUs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bnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb2xlQ29udHJvbFNlcnZpY2UgfSBmcm9tICcuL3JvbGUtY29udHJvbC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENhcmREYXRhLFxuICBDYXJkRGF0YVZpZXdDb21wb25lbnQsXG4gIENvbHVtbkRlZmluaXRpb24sXG4gIERhdGFGaWx0ZXJUeXBlLFxuICBEYXRhVGFibGVDb21wb25lbnQsXG4gIERhdGFWaWV3Q29tcG9uZW50LFxuICBJRGF0YUZpbHRlcixcbiAgVmVyYmVuUG9wVXBDb21wb25lbnQsXG59IGZyb20gJ3ZlcmJlbi1uZy11aSc7XG5pbXBvcnQgeyBSb2xlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1JvbGUnO1xuaW1wb3J0IHsgYmFzZVN0eWxlIH0gZnJvbSAnLi9iYXNlLXRhYmxlLXN0eWxlJztcbmltcG9ydCB7IE9iamVjdFN0YXRlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL29iamVjdC1zdGF0ZSc7XG5pbXBvcnQgeyBSb2xlQ29udGV4dCB9IGZyb20gJy4uLy4uL21vZGVscy9Sb2xlQ29udGV4dCc7XG5pbXBvcnQgeyBVSXMgfSBmcm9tICcuL1VJcyc7XG5pbXBvcnQgeyBSb2xlQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1JvbGVBY3Rpb24nO1xuaW1wb3J0IHsgVUlBY3Rpb25zIH0gZnJvbSAnLi9VSUFjdGlvbnMnO1xuaW1wb3J0IHsgTWFwcGVkUm9sZSB9IGZyb20gJy4vTWFwcGVkUm9sZSc7XG5pbXBvcnQge1xuICBBdXRob3JpemF0aW9uQ29uZmlnLFxuICBBdXRob3JpemF0aW9uU2VydmljZSxcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aG9yaXphdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE1hcHBlZFJvbGVDb250ZXh0IH0gZnJvbSAnLi9NYXBwZWRSb2xlQ29udGV4dCc7XG5pbXBvcnQgeyBNYXBwZWRSb2xlQWN0aW9uIH0gZnJvbSAnLi9NYXBwZWRSb2xlQWN0aW9uJztcbmltcG9ydCB7IENoaWxkcmVuVHlwZSB9IGZyb20gJy4vQ2hpbGRyZW5UeXBlJztcbmltcG9ydCB7XG4gIEZvcm1CdWlsZGVyLFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUdyb3VwLFxuICBWYWxpZGF0b3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBVdGlsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3V0aWwuc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwV2ViUmVxdWVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9odHRwLXdlYi1yZXF1ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRXJyb3JSZXNwb25zZSB9IGZyb20gJy4uLy4uL21vZGVscy9FcnJvclJlc3BvbnNlJztcbmltcG9ydCB7IFBhZ2VkUmVzdWx0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL1BhZ2VkUmVzdWx0JztcbmltcG9ydCB7IFNlYXJjaFByb3BlcnR5VmFsdWUgfSBmcm9tICcuLi8uLi9tb2RlbHMvU2VhcmNoUHJvcGVydHlWYWx1ZSc7XG5pbXBvcnQgeyBTZWFyY2hPcGVyYXRvciB9IGZyb20gJy4uLy4uL21vZGVscy9TZWFyY2hPcGVyYXRvcic7XG5pbXBvcnQgeyBTZWFyY2hQcm9wZXJ0eVNpZ24gfSBmcm9tICcuLi8uLi9tb2RlbHMvU2VhcmNoUHJvcGVydHlTaWduJztcbmltcG9ydCB7IEVudmlyb25tZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Vudmlyb25tZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25Sb2xlQ29udGV4dCB9IGZyb20gJy4uLy4uL21vZGVscy9BcHBsaWNhdGlvblJvbGVDb250ZXh0JztcbmltcG9ydCB7IEFwcGxpY2F0aW9uUm9sZUFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9BcHBsaWNhdGlvblJvbGVBY3Rpb24nO1xuaW1wb3J0IHsgU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1NvcnREaXJlY3Rpb24nO1xuXG5lbnVtIERhdGVGaWx0ZXJUeXBlcyB7XG4gIEJlZm9yZSA9IFNlYXJjaFByb3BlcnR5U2lnbi5MVCxcbiAgT24gPSBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gIEFmdGVyID0gU2VhcmNoUHJvcGVydHlTaWduLkdULFxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItcm9sZS1jb250cm9sJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JvbGUtY29udHJvbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9yb2xlLWNvbnRyb2wuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIFJvbGVDb250cm9sQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgdmlzaWJsZUNvbHVtbkRlZjogQ29sdW1uRGVmaW5pdGlvbjxNYXBwZWRSb2xlPltdID0gW107XG4gIHN0eWxlcyA9IGJhc2VTdHlsZTtcbiAgZGF0YTogTWFwcGVkUm9sZVtdID0gW107XG4gIGNhcmREYXRhOiBDYXJkRGF0YVtdID0gW107XG4gIGN1cnJlbnREYXRhOiBDYXJkRGF0YSB8IG51bGwgPSBudWxsO1xuICBjdXJyZW50RXhwYW5kZWRDYXJkOiBDYXJkRGF0YSB8IG51bGwgPSBudWxsO1xuICBjYXJkQ29udGV4dDogQ2FyZERhdGEgfCBudWxsID0gbnVsbDtcbiAgY2FyZENvbnRleHRIaXN0b3J5OiBDYXJkRGF0YVtdID0gW107XG4gIGNhcmRDb250ZXh0SGlzdG9yeURhdGE6IENhcmREYXRhW11bXSA9IFtdO1xuICBAVmlld0NoaWxkKCd2ZGN2JykgY2FyZERhdGFWaWV3ITogQ2FyZERhdGFWaWV3Q29tcG9uZW50O1xuICBAVmlld0NoaWxkKCd2ZHYnKSBkYXRhVmlldyE6IERhdGFWaWV3Q29tcG9uZW50O1xuICBAVmlld0NoaWxkcmVuKCdwb3B1cCcpIHBvcFVwcyE6IFF1ZXJ5TGlzdDxWZXJiZW5Qb3BVcENvbXBvbmVudD47XG4gIEBWaWV3Q2hpbGQoJ2R0JykgdGFibGVWaWV3ITogRGF0YVRhYmxlQ29tcG9uZW50PE1hcHBlZFJvbGU+O1xuICBASW5wdXQoKSBpc0dsb2JhbDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHNlcnZpY2VOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgYXBwbGljYXRpb246IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBwYWdlU2l6ZTogbnVtYmVyID0gMTA7XG4gIEBJbnB1dCgpIHNlYXJjaERlYm91bmNlVGltZTogbnVtYmVyID0gNTAwO1xuICBwYWdlU3RhdGU6IFBhZ2VkUmVzdWx0PFJvbGU+IHwgbnVsbCA9IG51bGw7XG4gIHNvdXJjZURhdGE6IEF1dGhvcml6YXRpb25Db25maWdbXSA9IFtdO1xuICBpc09wZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgb3BlbkRyb3Bkb3duSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBjdXJyZW50RmlsdGVyczogSURhdGFGaWx0ZXJbXSA9IFtdO1xuICBjdXJyZW50U29ydHM6IElEYXRhRmlsdGVyW10gPSBbXTtcbiAgc2VhcmNoVGVybSQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG5cbiAgdmlzaWJsZUNvbHVtbnM6IElEYXRhRmlsdGVyW10gPSBbXTtcblxuICBmaWx0ZXJBcnJheTogSURhdGFGaWx0ZXJbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnQ3JlYXRlZEF0JyxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLkRhdGUsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdVcGRhdGVkQXQnLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuRGF0ZSxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gIF07XG5cbiAgc29ydE9wdGlvbnM6IElEYXRhRmlsdGVyW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ0NyZWF0ZWRBdCcsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5EYXRlLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnVXBkYXRlZEF0JyxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLkRhdGUsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICBdO1xuXG4gIC8vIHByaXZhdGUgX3NlYXJjaEl0ZW06IHN0cmluZyA9ICcnO1xuICAvLyBnZXQgc2VhcmNoSXRlbSgpOiBzdHJpbmcge1xuICAvLyAgIHJldHVybiB0aGlzLl9zZWFyY2hJdGVtXG4gIC8vIH1cbiAgLy8gc2V0IHNlYXJjaEl0ZW0odmFsdWU6IHN0cmluZykge1xuICAvLyAgIHRoaXMuX3NlYXJjaEl0ZW0gPSB2YWx1ZTtcbiAgLy8gICB0aGlzLnNlYXJjaFRlcm0kLm5leHQodmFsdWUpO1xuICAvLyB9XG5cbiAgLy8gZm9ybTogRm9ybUdyb3VwO1xuICBjaGlsZFBlcm1pc3Npb25SZWY6IENoaWxkcmVuVHlwZSA9IENoaWxkcmVuVHlwZS5QZXJtaXNzaW9uO1xuXG4gIHJvbGVDb250ZXh0c1N0b3JlOiBBcHBsaWNhdGlvblJvbGVDb250ZXh0W10gPSBbXTtcbiAgcm9sZUFjdGlvbnNTdG9yZTogQXBwbGljYXRpb25Sb2xlQWN0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBjdXJyZW50U2VhcmNoVGVybTogc3RyaW5nID0gJyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aG9yaXphdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb2xlQ29udHJvbFN2YzogUm9sZUNvbnRyb2xTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXRpbFNlcnZpY2U6IFV0aWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VydmVyOiBIdHRwV2ViUmVxdWVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZW52U3ZjOiBFbnZpcm9ubWVudFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1uRGVmID0gcm9sZUNvbnRyb2xTdmMucm9sZUNvbHVtbnM7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IHJvbGVDb250cm9sU3ZjLnJvbGVDb2x1bW5zLm1hcCgoY29sKSA9PiAoe1xuICAgICAgY2hlY2tlZDogdHJ1ZSxcbiAgICAgIG5hbWU6IHR5cGVvZiBjb2wuaGVhZGVyID09PSAnc3RyaW5nJyA/IGNvbC5oZWFkZXIgOiBjb2wuaWQsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5Cb29sLFxuICAgIH0pKTtcbiAgICAvLyB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAvLyAgIE5hbWU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAvLyB9KTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1vY2tEYXRhID0gdGhpcy5nZXRNb2NrUm9sZXMoKTtcbiAgICBjb25zdCByb2xlcyA9IGF3YWl0IHRoaXMuZ2V0QWxsUm9sZXMoKTtcbiAgICBpZiAodGhpcy5pc0dsb2JhbCkge1xuICAgICAgY29uc3QgY29udGV4dHNSZXMgPSBhd2FpdCB0aGlzLmdldFNhdmVkQ29udGV4dHMoKTtcbiAgICAgIGlmIChjb250ZXh0c1Jlcykge1xuICAgICAgICB0aGlzLnJvbGVDb250ZXh0c1N0b3JlID0gY29udGV4dHNSZXM7XG4gICAgICAgIHRoaXMucm9sZUFjdGlvbnNTdG9yZSA9IGNvbnRleHRzUmVzLmZsYXRNYXAoKHgpID0+IHguUm9sZUFjdGlvbnMpO1xuICAgICAgICBjb25zdCBhdXRoQ29uZmlnOiBBdXRob3JpemF0aW9uQ29uZmlnW10gPSBjb250ZXh0c1Jlcy5tYXAoKHgpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgTmFtZTogeC5OYW1lLFxuICAgICAgICAgICAgQWN0aW9uczogeC5Sb2xlQWN0aW9ucy5tYXAoKHkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHkuTmFtZTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNvdXJjZURhdGEgPSBhdXRoQ29uZmlnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNvdXJjZURhdGEgPSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25Db25maWc7XG4gICAgfVxuICAgIGlmIChyb2xlcykge1xuICAgICAgdGhpcy5zZXRVcE1hcHBlZERhdGEocm9sZXMpO1xuICAgICAgdGhpcy5zZXRVcENhcmREYXRhKCk7XG4gICAgfVxuICAgIHRoaXMuc2VhcmNoVGVybSRcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLnNlYXJjaERlYm91bmNlVGltZSkpIC8vIEFkanVzdCBkZWJvdW5jZSB0aW1lIGhlcmUgKGluIG1zKVxuICAgICAgLnN1YnNjcmliZShhc3luYyAoc2VhcmNoVGVybSkgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtID0gc2VhcmNoVGVybTtcbiAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXJzQW5kU29ydHModHJ1ZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldFNhdmVkQ29udGV4dHMoKTogUHJvbWlzZTxBcHBsaWNhdGlvblJvbGVDb250ZXh0W10gfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIXRoaXMuaXNHbG9iYWwgfHwgIXRoaXMuYXBwbGljYXRpb24pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBwYXlsb2FkOiBTZWFyY2hQcm9wZXJ0eVZhbHVlW10gPSBbXG4gICAgICB7XG4gICAgICAgIFByb3BlcnR5TmFtZTogJ0FwcGxpY2F0aW9uJyxcbiAgICAgICAgRW50aXR5VmFsdWU6IHRoaXMuYXBwbGljYXRpb24sXG4gICAgICAgIE9wZXJhdG9yOiBTZWFyY2hPcGVyYXRvci5BbmQsXG4gICAgICAgIFNpZ246IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgICAgIH0sXG4gICAgICAvLyB7XG4gICAgICAvLyAgIFByb3BlcnR5TmFtZTogJ0FQSUtleScsXG4gICAgICAvLyAgIEVudGl0eVZhbHVlOiB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5BUElLZXksXG4gICAgICAvLyAgIE9wZXJhdG9yOiBTZWFyY2hPcGVyYXRvci5BbmQsXG4gICAgICAvLyAgIFNpZ246IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgICAgIC8vIH0sXG4gICAgXTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KFxuICAgICAgYEFwcGxpY2F0aW9uL1NlYXJjaEFwcGxpY2F0aW9uUm9sZUNvbnRleHRzLzAvMGAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByZXN1bHQgPSAocmVzIGFzIFBhZ2VkUmVzdWx0PEFwcGxpY2F0aW9uUm9sZUNvbnRleHQ+KS5SZXN1bHQ7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuICBhc3luYyBnZXRBbGxSb2xlcygpOiBQcm9taXNlPFJvbGVbXSB8IHVuZGVmaW5lZD4ge1xuICAgIC8vICAgdmFyIHBheWxvYWQ6IFNlYXJjaFByb3BlcnR5VmFsdWVbXSA9IFtcbiAgICAvLyAgICAge1xuICAgIC8vICAgICAgIFByb3BlcnR5TmFtZTogJ0FQSUtleScsXG4gICAgLy8gICAgICAgRW50aXR5VmFsdWU6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAvLyAgICAgICBPcGVyYXRvcjogU2VhcmNoT3BlcmF0b3IuQW5kLFxuICAgIC8vICAgICAgIFNpZ246IFNlYXJjaFByb3BlcnR5U2lnbi5FUVxuICAgIC8vICAgICB9XG4gICAgLy8gXVxuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLmdldChgUm9sZS9HZXRSb2xlcy8wLyR7dGhpcy5wYWdlU2l6ZX1gKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFnZVN0YXRlID0gcmVzIGFzIFBhZ2VkUmVzdWx0PFJvbGU+O1xuICAgICAgdmFyIHJlc3VsdCA9IChyZXMgYXMgUGFnZWRSZXN1bHQ8Um9sZT4pLlJlc3VsdDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9hZE1vcmUoKSB7XG4gICAgaWYgKCF0aGlzLnBhZ2VTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPVxuICAgICAgdGhpcy5jdXJyZW50RmlsdGVycy5sZW5ndGggPiAwIHx8XG4gICAgICB0aGlzLmN1cnJlbnRTb3J0cy5sZW5ndGggPiAwIHx8XG4gICAgICB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtLnRyaW0oKS5sZW5ndGggPiAwXG4gICAgICAgID8gYXdhaXQgdGhpcy5sb2FkTW9yZUZpbHRlcnNBbmRTb3J0cygpXG4gICAgICAgIDogYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KFxuICAgICAgICAgICAgYFJvbGUvR2V0Um9sZXMvJHt0aGlzLnBhZ2VTdGF0ZS5Ta2lwfS8ke3RoaXMucGFnZVNpemV9YFxuICAgICAgICAgICk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFnZVN0YXRlID0gcmVzIGFzIFBhZ2VkUmVzdWx0PFJvbGU+O1xuICAgICAgdmFyIHJlc3VsdCA9IChyZXMgYXMgUGFnZWRSZXN1bHQ8Um9sZT4pLlJlc3VsdDtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNldFVwTWFwcGVkRGF0YUV4dHJhKHJlc3VsdCk7XG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuY29uY2F0KGRhdGEpO1xuICAgICAgdGhpcy5zZXRVcENhcmREYXRhRXh0cmEoZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXBwbGljYXRpb25Db250ZXh0Q29kZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnJvbGVDb250ZXh0c1N0b3JlLmZpbmQoKHgpID0+IHguTmFtZSA9PSBuYW1lKTtcbiAgICByZXR1cm4gaXRlbSA/IGl0ZW0uQ29kZSA6ICcnO1xuICB9XG4gIGdldEFwcGxpY2F0aW9uQWN0aW9uQ29kZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnJvbGVBY3Rpb25zU3RvcmUuZmluZCgoeCkgPT4geC5OYW1lID09IG5hbWUpO1xuICAgIHJldHVybiBpdGVtID8gaXRlbS5Db2RlIDogJyc7XG4gIH1cblxuICBmaW5kUGFyZW50KGNhcmREYXRhOiBDYXJkRGF0YVtdLCB0YXJnZXQ6IENhcmREYXRhKTogQ2FyZERhdGEgfCBudWxsIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY2FyZERhdGEpIHtcbiAgICAgIGlmIChpdGVtLmNoaWxkcmVuLmluY2x1ZGVzKHRhcmdldCkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW07IC8vIEltbWVkaWF0ZSBwYXJlbnQgZm91bmRcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZmluZFBhcmVudChpdGVtLmNoaWxkcmVuLCB0YXJnZXQpO1xuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDsgLy8gTm90IGZvdW5kXG4gIH1cblxuICBpc0NoZWNrYm94RGlzYWJsZWQoaXRlbTogQ2FyZERhdGEpOiBib29sZWFuIHtcbiAgICBjb25zdCBwYXJlbnQgPVxuICAgICAgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnlEYXRhLmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLmZpbmRQYXJlbnQodGhpcy5jYXJkQ29udGV4dEhpc3RvcnlEYXRhWzBdLCBpdGVtKVxuICAgICAgICA6IHRoaXMuZmluZFBhcmVudCh0aGlzLmNhcmREYXRhLCBpdGVtKTtcbiAgICBpZiAoXG4gICAgICBwYXJlbnQgJiZcbiAgICAgIHBhcmVudC5kYXRhLkNoaWxkcmVuVHlwZSAmJlxuICAgICAgcGFyZW50LmRhdGEuQ2hpbGRyZW5UeXBlID09IENoaWxkcmVuVHlwZS5BY3Rpb24gJiZcbiAgICAgIHBhcmVudC5kYXRhLlNlbGVjdGVkID09IGZhbHNlXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc2V0VXBNYXBwZWREYXRhKGRhdGE6IFJvbGVbXSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGEubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi54LFxuICAgICAgICBJZDogeC5Db2RlLFxuICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5QZXJtaXNzaW9uLFxuICAgICAgICBSb2xlQ29udGV4dHM6IHRoaXMuc291cmNlRGF0YS5tYXAoKGNvbmZpZykgPT4ge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWQgPSB4LlJvbGVDb250ZXh0cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoeSkgPT4geS5OYW1lID09IGNvbmZpZy5OYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgICB2YXIgY29udGV4dDogTWFwcGVkUm9sZUNvbnRleHQgPSB7XG4gICAgICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5BY3Rpb24sXG4gICAgICAgICAgICBTZWxlY3RlZDogZXhpc3RpbmdJZCA+IC0xID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgUm9sZUFjdGlvbnM6IGNvbmZpZy5BY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQWN0aW9uID1cbiAgICAgICAgICAgICAgICBleGlzdGluZ0lkID4gLTFcbiAgICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgIChjKSA9PiBjLk5hbWUgPT0gYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogLTE7XG5cbiAgICAgICAgICAgICAgdmFyIGFjdDogTWFwcGVkUm9sZUFjdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBTZWxlY3RlZDogZXhpc3RpbmdBY3Rpb24gPiAtMSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBOYW1lOiBhY3Rpb24sXG4gICAgICAgICAgICAgICAgUm9sZTogeC5Db2RlLFxuICAgICAgICAgICAgICAgIENvbnRleHQ6ICcnLFxuICAgICAgICAgICAgICAgIGlkOlxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW2V4aXN0aW5nQWN0aW9uXS5Db2RlXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgSWQ6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbZXhpc3RpbmdBY3Rpb25dLkNvZGVcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICAgIFRlbmFudElkOiB4LlRlbmFudElkLFxuICAgICAgICAgICAgICAgIENvZGU6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbZXhpc3RpbmdBY3Rpb25dXG4gICAgICAgICAgICAgICAgICAgICAgICAuQ29kZVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgIFNlcnZpY2VOYW1lOlxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW2V4aXN0aW5nQWN0aW9uXVxuICAgICAgICAgICAgICAgICAgICAgICAgLlNlcnZpY2VOYW1lXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgQVBJS2V5OlxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW2V4aXN0aW5nQWN0aW9uXVxuICAgICAgICAgICAgICAgICAgICAgICAgLkFQSUtleVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVBY3Rpb246IHRoaXMuZ2V0QXBwbGljYXRpb25BY3Rpb25Db2RlKGFjdGlvbiksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHJldHVybiBhY3Q7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIE5hbWU6IGNvbmZpZy5OYW1lLFxuICAgICAgICAgICAgUm9sZTogeC5Db2RlLFxuICAgICAgICAgICAgaWQ6IGV4aXN0aW5nSWQgPiAtMSA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLkNvZGUgOiAnJyxcbiAgICAgICAgICAgIElkOiBleGlzdGluZ0lkID4gLTEgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Db2RlIDogJycsXG4gICAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICAgIFRlbmFudElkOiB4LlRlbmFudElkLFxuICAgICAgICAgICAgQ29kZTogZXhpc3RpbmdJZCA+IC0xID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uQ29kZSA6ICcnLFxuICAgICAgICAgICAgU2VydmljZU5hbWU6XG4gICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMSA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlNlcnZpY2VOYW1lIDogJycsXG4gICAgICAgICAgICBBUElLZXk6XG4gICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uQVBJS2V5XG4gICAgICAgICAgICAgICAgOiB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5BUElLZXksXG4gICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVDb250ZXh0OiB0aGlzLmdldEFwcGxpY2F0aW9uQ29udGV4dENvZGUoY29uZmlnLk5hbWUpLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIHNldFVwTWFwcGVkRGF0YUV4dHJhKGRhdGE6IFJvbGVbXSk6IE1hcHBlZFJvbGVbXSB7XG4gICAgcmV0dXJuIGRhdGEubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi54LFxuICAgICAgICBJZDogeC5Db2RlLFxuICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5QZXJtaXNzaW9uLFxuICAgICAgICBSb2xlQ29udGV4dHM6IHRoaXMuc291cmNlRGF0YS5tYXAoKGNvbmZpZykgPT4ge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWQgPSB4LlJvbGVDb250ZXh0cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoeSkgPT4geS5OYW1lID09IGNvbmZpZy5OYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgICB2YXIgY29udGV4dDogTWFwcGVkUm9sZUNvbnRleHQgPSB7XG4gICAgICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5BY3Rpb24sXG4gICAgICAgICAgICBTZWxlY3RlZDogZXhpc3RpbmdJZCA+IC0xID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgUm9sZUFjdGlvbnM6IGNvbmZpZy5BY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQWN0aW9uID1cbiAgICAgICAgICAgICAgICBleGlzdGluZ0lkID4gLTFcbiAgICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgIChjKSA9PiBjLk5hbWUgPT0gYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogLTE7XG5cbiAgICAgICAgICAgICAgdmFyIGFjdDogTWFwcGVkUm9sZUFjdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBTZWxlY3RlZDogZXhpc3RpbmdBY3Rpb24gPiAtMSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBOYW1lOiBhY3Rpb24sXG4gICAgICAgICAgICAgICAgUm9sZTogeC5Db2RlLFxuICAgICAgICAgICAgICAgIENvbnRleHQ6ICcnLFxuICAgICAgICAgICAgICAgIGlkOlxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW2V4aXN0aW5nQWN0aW9uXS5Db2RlXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgSWQ6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbZXhpc3RpbmdBY3Rpb25dLkNvZGVcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICAgIFRlbmFudElkOiB4LlRlbmFudElkLFxuICAgICAgICAgICAgICAgIENvZGU6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbZXhpc3RpbmdBY3Rpb25dXG4gICAgICAgICAgICAgICAgICAgICAgICAuQ29kZVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgIFNlcnZpY2VOYW1lOlxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW2V4aXN0aW5nQWN0aW9uXVxuICAgICAgICAgICAgICAgICAgICAgICAgLlNlcnZpY2VOYW1lXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgQVBJS2V5OlxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW2V4aXN0aW5nQWN0aW9uXVxuICAgICAgICAgICAgICAgICAgICAgICAgLkFQSUtleVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVBY3Rpb246IHRoaXMuZ2V0QXBwbGljYXRpb25BY3Rpb25Db2RlKGFjdGlvbiksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHJldHVybiBhY3Q7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIE5hbWU6IGNvbmZpZy5OYW1lLFxuICAgICAgICAgICAgUm9sZTogeC5Db2RlLFxuICAgICAgICAgICAgaWQ6IGV4aXN0aW5nSWQgPiAtMSA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLkNvZGUgOiAnJyxcbiAgICAgICAgICAgIElkOiBleGlzdGluZ0lkID4gLTEgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Db2RlIDogJycsXG4gICAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICAgIFRlbmFudElkOiB4LlRlbmFudElkLFxuICAgICAgICAgICAgQ29kZTogZXhpc3RpbmdJZCA+IC0xID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uQ29kZSA6ICcnLFxuICAgICAgICAgICAgU2VydmljZU5hbWU6XG4gICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMSA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlNlcnZpY2VOYW1lIDogJycsXG4gICAgICAgICAgICBBUElLZXk6XG4gICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uQVBJS2V5XG4gICAgICAgICAgICAgICAgOiB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5BUElLZXksXG4gICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVDb250ZXh0OiB0aGlzLmdldEFwcGxpY2F0aW9uQ29udGV4dENvZGUoY29uZmlnLk5hbWUpLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgc2V0VXBDYXJkRGF0YSgpIHtcbiAgICBjb25zdCBjYXJkRGF0YTogQ2FyZERhdGFbXSA9IHRoaXMuZGF0YS5tYXAoKHgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgdGl0bGU6IHguTmFtZSxcbiAgICAgICAgZGF0YTogeCxcbiAgICAgICAgYm9keTogW10sXG4gICAgICAgIGNoaWxkcmVuOiB4LlJvbGVDb250ZXh0cy5tYXAoKGMpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0Rm9ybWF0dGVkTmFtZShjLk5hbWUpLFxuICAgICAgICAgICAgZGF0YTogYyxcbiAgICAgICAgICAgIGJvZHk6IFtdLFxuICAgICAgICAgICAgY2hpbGRyZW46IGMuUm9sZUFjdGlvbnMubWFwKChhKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmdldEZvcm1hdHRlZE5hbWUoYS5OYW1lKSxcbiAgICAgICAgICAgICAgICBkYXRhOiBhLFxuICAgICAgICAgICAgICAgIGJvZHk6IFtdLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLmNhcmREYXRhID0gY2FyZERhdGE7XG4gIH1cbiAgc2V0VXBDYXJkRGF0YUV4dHJhKGJhc2VEYXRhOiBNYXBwZWRSb2xlW10pIHtcbiAgICBjb25zdCBjYXJkRGF0YTogQ2FyZERhdGFbXSA9IGJhc2VEYXRhLm1hcCgoeCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICB0aXRsZTogeC5OYW1lLFxuICAgICAgICBkYXRhOiB4LFxuICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgY2hpbGRyZW46IHguUm9sZUNvbnRleHRzLm1hcCgoYykgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRGb3JtYXR0ZWROYW1lKGMuTmFtZSksXG4gICAgICAgICAgICBkYXRhOiBjLFxuICAgICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgICBjaGlsZHJlbjogYy5Sb2xlQWN0aW9ucy5tYXAoKGEpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0Rm9ybWF0dGVkTmFtZShhLk5hbWUpLFxuICAgICAgICAgICAgICAgIGRhdGE6IGEsXG4gICAgICAgICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMuY2FyZERhdGEgPSB0aGlzLmNhcmREYXRhLmNvbmNhdChjYXJkRGF0YSk7XG4gIH1cblxuICBnZXRGb3JtYXR0ZWROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gU3BsaXQgdGhlIGtleSBvbiBjYXBpdGFsIGxldHRlcnMsIGhhbmRsaW5nIFwiQW5kXCIgYXMgbG93ZXJjYXNlXG4gICAgY29uc3Qgd29yZHMgPSBuYW1lXG4gICAgICAuc3BsaXQoLyg/PVtBLVpdKS8pXG4gICAgICAubWFwKCh3b3JkKSA9PiAod29yZCA9PT0gJ0FuZCcgPyAnYW5kJyA6IHdvcmQpKTtcbiAgICAvLyBKb2luIHRoZSB3b3JkcyB3aXRoIHNwYWNlc1xuICAgIHJldHVybiB3b3Jkcy5qb2luKCcgJyk7XG4gIH1cblxuICB2aWV3RGV0YWlsc0Zyb21UYWJsZShkYXRhOiBNYXBwZWRSb2xlKSB7XG4gICAgY29uc3QgY2FyZERhdGEgPSB0aGlzLmNhcmREYXRhLmZpbmQoKHgpID0+IHguZGF0YSA9PSBkYXRhKTtcbiAgICBjb25zb2xlLmxvZyh7RGF0YTogZGF0YX0pO1xuICAgIGNvbnNvbGUubG9nKHtDYXJkRGF0YTogdGhpcy5jYXJkRGF0YX0pXG4gICAgaWYgKGNhcmREYXRhKSB7XG4gICAgICB0aGlzLmRhdGFWaWV3LmlzVGFibGVWaWV3ID0gZmFsc2U7XG4gICAgICB0aGlzLnZpZXdEZXRhaWxzKGNhcmREYXRhKTtcbiAgICB9XG4gICAgdGhpcy5jbG9zZVBvcFVwKCk7XG4gIH1cblxuICB2aWV3RGV0YWlscyhjb250ZXh0OiBDYXJkRGF0YSkge1xuICAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5LnB1c2goY29udGV4dCk7XG4gICAgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnlEYXRhLnB1c2godGhpcy5jYXJkRGF0YSk7XG4gICAgdGhpcy5jYXJkRGF0YSA9IGNvbnRleHQuY2hpbGRyZW47XG4gICAgdGhpcy5jYXJkRGF0YVZpZXcuY2xlYXJEYXRhKCk7XG4gIH1cbiAgdmlld0RldGFpbHNDaGlsZChjb250ZXh0OiBDYXJkRGF0YSkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRFeHBhbmRlZENhcmQpIHtcbiAgICAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5LnB1c2godGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkKTtcbiAgICAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5LnB1c2goY29udGV4dCk7XG4gICAgICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeURhdGEucHVzaCh0aGlzLmNhcmREYXRhKTtcbiAgICAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5RGF0YS5wdXNoKHRoaXMuY3VycmVudEV4cGFuZGVkQ2FyZC5jaGlsZHJlbik7XG4gICAgICB0aGlzLmNhcmREYXRhID0gY29udGV4dC5jaGlsZHJlbjtcbiAgICAgIHRoaXMuY2FyZERhdGFWaWV3LmNsZWFyRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIHJvbGVDYXJkQ2xpY2tlZChpdGVtOiBDYXJkRGF0YSkge1xuICAgIHRoaXMuY3VycmVudERhdGEgPSB0aGlzLmNhcmREYXRhVmlldy5vbkl0ZW1DbGljayhpdGVtKTtcbiAgICAvLyBpZiAodGhpcy5jdXJyZW50RGF0YSkge1xuICAgIC8vICAgdGhpcy5mb3JtLmNvbnRyb2xzWydOYW1lJ10uc2V0VmFsdWUodGhpcy5jdXJyZW50RGF0YS5kYXRhPy5OYW1lKTtcbiAgICAvLyB9XG4gIH1cblxuICB0b2dnbGVDaGlsZHJlbihpdGVtOiBDYXJkRGF0YSkge1xuICAgIHZhciBjdXJyVG9nZ2xlU3RhdGUgPSBpdGVtLmlzQ2hpbGRyZW5FeHBhbmRlZDtcbiAgICB0aGlzLmNhcmREYXRhLmZvckVhY2goKF8pID0+IHtcbiAgICAgIF8uaXNDaGlsZHJlbkV4cGFuZGVkID0gZmFsc2U7XG4gICAgfSk7XG4gICAgaXRlbS5pc0NoaWxkcmVuRXhwYW5kZWQgPSAhY3VyclRvZ2dsZVN0YXRlO1xuICAgIGlmIChpdGVtLmlzQ2hpbGRyZW5FeHBhbmRlZCkge1xuICAgICAgdGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkID0gaXRlbTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnb1RvVGFibGVWaWV3KCkge1xuICAgIGlmICghdGhpcy5jdXJyZW50RGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRhdGFWaWV3LnRvZ2dsZVZpZXcoKTtcbiAgICBjb25zdCBpZCA9IHRoaXMuY3VycmVudERhdGEuZGF0YSA/IHRoaXMuY3VycmVudERhdGEuZGF0YS5JZCA6ICcnO1xuICAgIGlmIChpZC50cmltKCkubGVuZ3RoID4gMCAmJiAhdGhpcy50YWJsZVZpZXcuaXNSb3dFZGl0aW5nKGlkKSkge1xuICAgICAgdGhpcy50YWJsZVZpZXcudG9nZ2xlUm93RWRpdChpZCk7XG4gICAgfVxuICB9XG4gIGNsb3NlRGV0YWlscygpIHtcbiAgICB0aGlzLmNhcmREYXRhID1cbiAgICAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5RGF0YVt0aGlzLmNhcmRDb250ZXh0SGlzdG9yeURhdGEubGVuZ3RoIC0gMV07XG4gICAgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnlEYXRhLnBvcCgpO1xuICAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5LnBvcCgpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGF0YVZpZXcuaXNUYWJsZVZpZXcpIHtcbiAgICAgICAgdGhpcy5kYXRhVmlldy50b2dnbGVWaWV3KCk7XG4gICAgICB9XG4gICAgfSwgMjAwKTtcbiAgfVxuXG4gIGdldENhcmRTdWJDYXB0aW9uKGl0ZW06IENhcmREYXRhKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBpdGVtLmNoaWxkcmVuLmZpbHRlcigoeCkgPT4geC5kYXRhLlNlbGVjdGVkKS5sZW5ndGg7XG4gICAgY29uc3QgdG90YWwgPSBpdGVtLmNoaWxkcmVuLmxlbmd0aDtcbiAgICByZXR1cm4gYCR7c2VsZWN0ZWR9IG9mICR7dG90YWx9ICR7XG4gICAgICB0b3RhbCA+IDEgPyBpdGVtLmRhdGEuQ2hpbGRyZW5UeXBlICsgJ3MnIDogaXRlbS5kYXRhLkNoaWxkcmVuVHlwZVxuICAgIH1gO1xuICB9XG5cbiAgZ2V0VXBkYXRlZFJvbGUocm9sZTogTWFwcGVkUm9sZSk6IFJvbGUge1xuICAgIGNvbnN0IG5ld1JvbGUgPSByb2xlO1xuICAgIG5ld1JvbGUuUm9sZUNvbnRleHRzID0gcm9sZS5Sb2xlQ29udGV4dHMuZmlsdGVyKCh4KSA9PiB4LlNlbGVjdGVkKS5tYXAoXG4gICAgICAoeSkgPT4ge1xuICAgICAgICB5LlJvbGVBY3Rpb25zID0geS5Sb2xlQWN0aW9ucy5maWx0ZXIoKHopID0+IHouU2VsZWN0ZWQpO1xuICAgICAgICByZXR1cm4geTtcbiAgICAgIH1cbiAgICApO1xuICAgIG5ld1JvbGUuRGF0YVN0YXRlID1cbiAgICAgIG5ld1JvbGUuRGF0YVN0YXRlID09IE9iamVjdFN0YXRlLk5ld1xuICAgICAgICA/IE9iamVjdFN0YXRlLk5ld1xuICAgICAgICA6IE9iamVjdFN0YXRlLkNoYW5nZWQ7XG4gICAgbmV3Um9sZS5JZCA9ICcnO1xuICAgIHJldHVybiBuZXdSb2xlIGFzIFJvbGU7XG4gIH1cbiAgYXN5bmMgc2F2ZVJvbGUoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudERhdGEpIHtcbiAgICAgIHZhciByb2xlOiBNYXBwZWRSb2xlID0gdGhpcy5jdXJyZW50RGF0YS5kYXRhIGFzIE1hcHBlZFJvbGU7XG4gICAgICAvLyByb2xlLk5hbWUgPSB0aGlzLmZvcm0uY29udHJvbHNbJ05hbWUnXS52YWx1ZTtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnREYXRhLmRhdGEuTmFtZS50cmltKCkubGVuZ3RoID09IDApIHtcbiAgICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93SW5mbygnUm9sZSBuYW1lIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBtYXBwZWRSb2xlID0gdGhpcy5nZXRVcGRhdGVkUm9sZShKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJvbGUpKSk7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoYFJvbGUvU2F2ZVJvbGVzYCwgW21hcHBlZFJvbGVdKTtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dTdWNjZXNzKCdSb2xlIHNhdmVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSByZXMgYXMgUm9sZVtdO1xuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB2YXIgcm9sZVJlc3VsdCA9IHJlc3VsdFswXTtcbiAgICAgICAgICB2YXIgbWFwcGVkUm9sZVNhdmU6IE1hcHBlZFJvbGUgPSB7XG4gICAgICAgICAgICAuLi5yb2xlUmVzdWx0LFxuICAgICAgICAgICAgQ2hpbGRyZW5UeXBlOiBDaGlsZHJlblR5cGUuUGVybWlzc2lvbixcbiAgICAgICAgICAgIFJvbGVDb250ZXh0czogdGhpcy5zb3VyY2VEYXRhLm1hcCgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWQgPSByb2xlUmVzdWx0LlJvbGVDb250ZXh0cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgKHkpID0+IHkuTmFtZSA9PSBjb25maWcuTmFtZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB2YXIgY29udGV4dDogTWFwcGVkUm9sZUNvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgQ2hpbGRyZW5UeXBlOiBDaGlsZHJlblR5cGUuQWN0aW9uLFxuICAgICAgICAgICAgICAgIFNlbGVjdGVkOiBleGlzdGluZ0lkID4gLTEgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgUm9sZUFjdGlvbnM6IGNvbmZpZy5BY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0FjdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nSWRcbiAgICAgICAgICAgICAgICAgICAgICAgIF0uUm9sZUFjdGlvbnMuZmluZEluZGV4KChjKSA9PiBjLk5hbWUgPT0gYWN0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgIDogLTE7XG5cbiAgICAgICAgICAgICAgICAgIHZhciBhY3Q6IE1hcHBlZFJvbGVBY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIFNlbGVjdGVkOiBleGlzdGluZ0FjdGlvbiA+IC0xID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBOYW1lOiBhY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIFJvbGU6IHJvbGVSZXN1bHQuQ29kZSxcbiAgICAgICAgICAgICAgICAgICAgQ29udGV4dDogJycsXG4gICAgICAgICAgICAgICAgICAgIGlkOlxuICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgXS5Db2RlXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgICBJZDpcbiAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0uQ29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICAgICAgICBUZW5hbnRJZDogcm9sZVJlc3VsdC5UZW5hbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgQ29kZTpcbiAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0uQ29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgU2VydmljZU5hbWU6XG4gICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBdLlNlcnZpY2VOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgICBBUElLZXk6XG4gICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBdLkFQSUtleVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5BUElLZXksXG4gICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uUm9sZUFjdGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFwcGxpY2F0aW9uQWN0aW9uQ29kZShhY3Rpb24pLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhY3Q7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgTmFtZTogY29uZmlnLk5hbWUsXG4gICAgICAgICAgICAgICAgUm9sZTogcm9sZVJlc3VsdC5Db2RlLFxuICAgICAgICAgICAgICAgIGlkOlxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uQ29kZSA6ICcnLFxuICAgICAgICAgICAgICAgIElkOlxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uQ29kZSA6ICcnLFxuICAgICAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgICAgICAgICAgVGVuYW50SWQ6IHJvbGVSZXN1bHQuVGVuYW50SWQsXG4gICAgICAgICAgICAgICAgQ29kZTpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLkNvZGVcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICBTZXJ2aWNlTmFtZTpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlNlcnZpY2VOYW1lXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgQVBJS2V5OlxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uQVBJS2V5XG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uUm9sZUNvbnRleHQ6IHRoaXMuZ2V0QXBwbGljYXRpb25Db250ZXh0Q29kZShcbiAgICAgICAgICAgICAgICAgIGNvbmZpZy5OYW1lXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLmRhdGEuZmluZEluZGV4KFxuICAgICAgICAgICAgKHgpID0+IHggPT0gdGhpcy5jdXJyZW50RGF0YT8uZGF0YVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGl0ZW1JbmRleCA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Db2RlID0gbWFwcGVkUm9sZVNhdmUuQ29kZTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLklkID0gbWFwcGVkUm9sZVNhdmUuQ29kZTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLkRhdGFTdGF0ZSA9IG1hcHBlZFJvbGVTYXZlLkRhdGFTdGF0ZTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlRlbmFudElkID0gbWFwcGVkUm9sZVNhdmUuVGVuYW50SWQ7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5TZXJ2aWNlTmFtZSA9IG1hcHBlZFJvbGVTYXZlLlNlcnZpY2VOYW1lO1xuICAgICAgICAgICAgbWFwcGVkUm9sZVNhdmUuUm9sZUNvbnRleHRzLmZvckVhY2goKHgsIGkpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uUm9sZUNvbnRleHRzW2ldLlJvbGUgPSBtYXBwZWRSb2xlU2F2ZS5Db2RlO1xuICAgICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uQ29kZSA9IHguQ29kZTtcbiAgICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uUm9sZUNvbnRleHRzW2ldLlNlcnZpY2VOYW1lID0geC5TZXJ2aWNlTmFtZTtcbiAgICAgICAgICAgICAgeC5Sb2xlQWN0aW9ucy5mb3JFYWNoKCh5LCBqKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uUm9sZUNvbnRleHRzW2ldLlJvbGVBY3Rpb25zW2pdLlJvbGUgPVxuICAgICAgICAgICAgICAgICAgbWFwcGVkUm9sZVNhdmUuQ29kZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uUm9sZUFjdGlvbnNbal0uQ29kZSA9XG4gICAgICAgICAgICAgICAgICB5LkNvZGU7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uUm9sZUNvbnRleHRzW2ldLlJvbGVBY3Rpb25zW1xuICAgICAgICAgICAgICAgICAgalxuICAgICAgICAgICAgICAgIF0uU2VydmljZU5hbWUgPSB5LlNlcnZpY2VOYW1lO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLm1hcCgoeCkgPT4geCk7XG4gICAgICAgICAgICAvLyB0aGlzLmN1cnJlbnREYXRhID0ge1xuICAgICAgICAgICAgLy8gICBzZWxlY3RlZDogdHJ1ZSxcbiAgICAgICAgICAgIC8vICAgdGl0bGU6IG1hcHBlZFJvbGVTYXZlLk5hbWUsXG4gICAgICAgICAgICAvLyAgIGRhdGE6IG1hcHBlZFJvbGVTYXZlLFxuICAgICAgICAgICAgLy8gICBpc0NoaWxkcmVuRXhwYW5kZWQ6IHRoaXMuY3VycmVudERhdGEuaXNDaGlsZHJlbkV4cGFuZGVkLFxuICAgICAgICAgICAgLy8gICBib2R5OiBbXSxcbiAgICAgICAgICAgIC8vICAgY2hpbGRyZW46IG1hcHBlZFJvbGVTYXZlLlJvbGVDb250ZXh0cy5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLy8gICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgLy8gICAgICAgdGl0bGU6IHRoaXMuZ2V0Rm9ybWF0dGVkTmFtZShjLk5hbWUpLFxuICAgICAgICAgICAgLy8gICAgICAgZGF0YTogYyxcbiAgICAgICAgICAgIC8vICAgICAgIGJvZHk6IFtdLFxuICAgICAgICAgICAgLy8gICAgICAgY2hpbGRyZW46IGMuUm9sZUFjdGlvbnMubWFwKChhKSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgLy8gICAgICAgICAgIHRpdGxlOiB0aGlzLmdldEZvcm1hdHRlZE5hbWUoYS5OYW1lKSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICBkYXRhOiBhLFxuICAgICAgICAgICAgLy8gICAgICAgICAgIGJvZHk6IFtdLFxuICAgICAgICAgICAgLy8gICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgICAgIC8vICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vICAgICAgIH0pLFxuICAgICAgICAgICAgLy8gICAgIH07XG4gICAgICAgICAgICAvLyAgIH0pLFxuICAgICAgICAgICAgLy8gfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgYXN5bmMgdGFibGVTYXZlUm9sZShyb2xlOiBNYXBwZWRSb2xlLCBjYWxsQmFjazogKCkgPT4gYW55KSB7XG4gICAgaWYgKHJvbGUuTmFtZS50cmltKCkubGVuZ3RoID09IDApIHtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0luZm8oJ1JvbGUgbmFtZSBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWFwcGVkUm9sZSA9IHRoaXMuZ2V0VXBkYXRlZFJvbGUoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyb2xlKSkpO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoYFJvbGUvU2F2ZVJvbGVzYCwgW21hcHBlZFJvbGVdKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93U3VjY2VzcygnUm9sZSBzYXZlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlcyBhcyBSb2xlW107XG4gICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIHJvbGVSZXN1bHQgPSByZXN1bHRbMF07XG4gICAgICAgIHZhciBtYXBwZWRSb2xlU2F2ZTogTWFwcGVkUm9sZSA9IHtcbiAgICAgICAgICAuLi5yb2xlUmVzdWx0LFxuICAgICAgICAgIENoaWxkcmVuVHlwZTogQ2hpbGRyZW5UeXBlLlBlcm1pc3Npb24sXG4gICAgICAgICAgUm9sZUNvbnRleHRzOiB0aGlzLnNvdXJjZURhdGEubWFwKChjb25maWcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWQgPSByb2xlUmVzdWx0LlJvbGVDb250ZXh0cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICh5KSA9PiB5Lk5hbWUgPT0gY29uZmlnLk5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB2YXIgY29udGV4dDogTWFwcGVkUm9sZUNvbnRleHQgPSB7XG4gICAgICAgICAgICAgIENoaWxkcmVuVHlwZTogQ2hpbGRyZW5UeXBlLkFjdGlvbixcbiAgICAgICAgICAgICAgU2VsZWN0ZWQ6IGV4aXN0aW5nSWQgPiAtMSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgUm9sZUFjdGlvbnM6IGNvbmZpZy5BY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdBY3Rpb24gPVxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgICAgKGMpID0+IGMuTmFtZSA9PSBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogLTE7XG5cbiAgICAgICAgICAgICAgICB2YXIgYWN0OiBNYXBwZWRSb2xlQWN0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgU2VsZWN0ZWQ6IGV4aXN0aW5nQWN0aW9uID4gLTEgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBOYW1lOiBhY3Rpb24sXG4gICAgICAgICAgICAgICAgICBSb2xlOiByb2xlUmVzdWx0LkNvZGUsXG4gICAgICAgICAgICAgICAgICBDb250ZXh0OiAnJyxcbiAgICAgICAgICAgICAgICAgIGlkOlxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIF0uQ29kZVxuICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICBJZDpcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBdLkNvZGVcbiAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgICAgICAgICAgICBUZW5hbnRJZDogcm9sZVJlc3VsdC5UZW5hbnRJZCxcbiAgICAgICAgICAgICAgICAgIENvZGU6XG4gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgXS5Db2RlXG4gICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIFNlcnZpY2VOYW1lOlxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIF0uU2VydmljZU5hbWVcbiAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgQVBJS2V5OlxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIF0uQVBJS2V5XG4gICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5BUElLZXksXG4gICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVBY3Rpb246IHRoaXMuZ2V0QXBwbGljYXRpb25BY3Rpb25Db2RlKGFjdGlvbiksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWN0O1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgTmFtZTogY29uZmlnLk5hbWUsXG4gICAgICAgICAgICAgIFJvbGU6IHJvbGVSZXN1bHQuQ29kZSxcbiAgICAgICAgICAgICAgaWQ6IGV4aXN0aW5nSWQgPiAtMSA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLkNvZGUgOiAnJyxcbiAgICAgICAgICAgICAgSWQ6IGV4aXN0aW5nSWQgPiAtMSA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLkNvZGUgOiAnJyxcbiAgICAgICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICBUZW5hbnRJZDogcm9sZVJlc3VsdC5UZW5hbnRJZCxcbiAgICAgICAgICAgICAgQ29kZTpcbiAgICAgICAgICAgICAgICBleGlzdGluZ0lkID4gLTEgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Db2RlIDogJycsXG4gICAgICAgICAgICAgIFNlcnZpY2VOYW1lOlxuICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5TZXJ2aWNlTmFtZVxuICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgQVBJS2V5OlxuICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5BUElLZXlcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVDb250ZXh0OiB0aGlzLmdldEFwcGxpY2F0aW9uQ29udGV4dENvZGUoXG4gICAgICAgICAgICAgICAgY29uZmlnLk5hbWVcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMuZGF0YS5maW5kSW5kZXgoXG4gICAgICAgICAgKHgpID0+IHggPT0gdGhpcy5jdXJyZW50RGF0YT8uZGF0YVxuICAgICAgICApO1xuICAgICAgICBpZiAoaXRlbUluZGV4ID4gLTEpIHtcbiAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Db2RlID0gbWFwcGVkUm9sZVNhdmUuQ29kZTtcbiAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5JZCA9IG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uRGF0YVN0YXRlID0gbWFwcGVkUm9sZVNhdmUuRGF0YVN0YXRlO1xuICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlRlbmFudElkID0gbWFwcGVkUm9sZVNhdmUuVGVuYW50SWQ7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uU2VydmljZU5hbWUgPSBtYXBwZWRSb2xlU2F2ZS5TZXJ2aWNlTmFtZTtcbiAgICAgICAgICBtYXBwZWRSb2xlU2F2ZS5Sb2xlQ29udGV4dHMuZm9yRWFjaCgoeCwgaSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uUm9sZUNvbnRleHRzW2ldLlJvbGUgPSBtYXBwZWRSb2xlU2F2ZS5Db2RlO1xuICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uUm9sZUNvbnRleHRzW2ldLkNvZGUgPSB4LkNvZGU7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uU2VydmljZU5hbWUgPSB4LlNlcnZpY2VOYW1lO1xuICAgICAgICAgICAgeC5Sb2xlQWN0aW9ucy5mb3JFYWNoKCh5LCBqKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5Sb2xlQWN0aW9uc1tqXS5Sb2xlID1cbiAgICAgICAgICAgICAgICBtYXBwZWRSb2xlU2F2ZS5Db2RlO1xuICAgICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uUm9sZUFjdGlvbnNbal0uQ29kZSA9IHkuQ29kZTtcbiAgICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uUm9sZUNvbnRleHRzW2ldLlJvbGVBY3Rpb25zW2pdLlNlcnZpY2VOYW1lID1cbiAgICAgICAgICAgICAgICB5LlNlcnZpY2VOYW1lO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLm1hcCgoeCkgPT4geCk7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbEJhY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzYXZlUm9sZUR5bmFtaWMoaXRlbTogQ2FyZERhdGEpIHtcbiAgICBpZiAodGhpcy5pc0NoZWNrYm94RGlzYWJsZWQoaXRlbSkpIHtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0luZm8oJ1BhcmVudCBVSSBub3Qgc2VsZWN0ZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcm9sZTogQ2FyZERhdGEgfCBudWxsID1cbiAgICAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeVswXVxuICAgICAgICA6IHRoaXMuY3VycmVudEV4cGFuZGVkQ2FyZFxuICAgICAgICA/IHRoaXMuY3VycmVudEV4cGFuZGVkQ2FyZFxuICAgICAgICA6IG51bGw7XG4gICAgdmFyIGNhcmREYXRhUmVmOiBDYXJkRGF0YVtdIHwgbnVsbCA9XG4gICAgICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeURhdGEubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5RGF0YVswXVxuICAgICAgICA6IHRoaXMuY3VycmVudEV4cGFuZGVkQ2FyZFxuICAgICAgICA/IHRoaXMuY2FyZERhdGFcbiAgICAgICAgOiBudWxsO1xuICAgIC8vIGNvbnN0IGlzRXhwYW5kZWRDYXJkOiBib29sZWFuID1cbiAgICAvLyAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA+IDBcbiAgICAvLyAgICAgPyBmYWxzZVxuICAgIC8vICAgICA6IHRoaXMuY3VycmVudEV4cGFuZGVkQ2FyZFxuICAgIC8vICAgICA/IHRydWVcbiAgICAvLyAgICAgOiBmYWxzZTtcbiAgICBpZiAoIXJvbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJvbGUuZGF0YS5OYW1lLnRyaW0oKS5sZW5ndGggPT0gMCkge1xuICAgICAgaXRlbS5kYXRhLlNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dJbmZvKCdSb2xlIG5hbWUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGl0ZW0uZGF0YS5TZWxlY3RlZCA9ICFpdGVtLmRhdGEuU2VsZWN0ZWQ7XG4gICAgY29uc3QgbWFwcGVkUm9sZSA9IHRoaXMuZ2V0VXBkYXRlZFJvbGUoXG4gICAgICBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJvbGUuZGF0YSkpXG4gICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KGBSb2xlL1NhdmVSb2xlc2AsIFttYXBwZWRSb2xlXSk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICBpdGVtLmRhdGEuU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93U3VjY2VzcygnUm9sZSBzYXZlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlcyBhcyBSb2xlW107XG4gICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIHJvbGVSZXN1bHQgPSByZXN1bHRbMF07XG4gICAgICAgIHZhciBtYXBwZWRSb2xlU2F2ZTogTWFwcGVkUm9sZSA9IHtcbiAgICAgICAgICAuLi5yb2xlUmVzdWx0LFxuICAgICAgICAgIENoaWxkcmVuVHlwZTogQ2hpbGRyZW5UeXBlLlBlcm1pc3Npb24sXG4gICAgICAgICAgUm9sZUNvbnRleHRzOiB0aGlzLnNvdXJjZURhdGEubWFwKChjb25maWcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWQgPSByb2xlUmVzdWx0LlJvbGVDb250ZXh0cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICh5KSA9PiB5Lk5hbWUgPT0gY29uZmlnLk5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB2YXIgY29udGV4dDogTWFwcGVkUm9sZUNvbnRleHQgPSB7XG4gICAgICAgICAgICAgIENoaWxkcmVuVHlwZTogQ2hpbGRyZW5UeXBlLkFjdGlvbixcbiAgICAgICAgICAgICAgU2VsZWN0ZWQ6IGV4aXN0aW5nSWQgPiAtMSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgUm9sZUFjdGlvbnM6IGNvbmZpZy5BY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdBY3Rpb24gPVxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgICAgKGMpID0+IGMuTmFtZSA9PSBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogLTE7XG4gICAgICAgICAgICAgICAgdmFyIGFjdDogTWFwcGVkUm9sZUFjdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgIFNlbGVjdGVkOiBleGlzdGluZ0FjdGlvbiA+IC0xID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgTmFtZTogYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgUm9sZTogcm9sZVJlc3VsdC5Db2RlLFxuICAgICAgICAgICAgICAgICAgQ29udGV4dDogJycsXG4gICAgICAgICAgICAgICAgICBpZDpcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBdLkNvZGVcbiAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgSWQ6XG4gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgXS5Db2RlXG4gICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICAgICAgVGVuYW50SWQ6IHJvbGVSZXN1bHQuVGVuYW50SWQsXG4gICAgICAgICAgICAgICAgICBDb2RlOlxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIF0uQ29kZVxuICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICBTZXJ2aWNlTmFtZTpcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBdLlNlcnZpY2VOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIEFQSUtleTpcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBdLkFQSUtleVxuICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25Sb2xlQWN0aW9uOiB0aGlzLmdldEFwcGxpY2F0aW9uQWN0aW9uQ29kZShhY3Rpb24pLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdDtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIE5hbWU6IGNvbmZpZy5OYW1lLFxuICAgICAgICAgICAgICBSb2xlOiByb2xlUmVzdWx0LkNvZGUsXG4gICAgICAgICAgICAgIGlkOiBleGlzdGluZ0lkID4gLTEgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Db2RlIDogJycsXG4gICAgICAgICAgICAgIElkOiBleGlzdGluZ0lkID4gLTEgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Db2RlIDogJycsXG4gICAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICAgICAgVGVuYW50SWQ6IHJvbGVSZXN1bHQuVGVuYW50SWQsXG4gICAgICAgICAgICAgIENvZGU6XG4gICAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uQ29kZSA6ICcnLFxuICAgICAgICAgICAgICBTZXJ2aWNlTmFtZTpcbiAgICAgICAgICAgICAgICBleGlzdGluZ0lkID4gLTFcbiAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uU2VydmljZU5hbWVcbiAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgIEFQSUtleTpcbiAgICAgICAgICAgICAgICBleGlzdGluZ0lkID4gLTFcbiAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uQVBJS2V5XG4gICAgICAgICAgICAgICAgICA6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgICAgICAgQXBwbGljYXRpb25Sb2xlQ29udGV4dDogdGhpcy5nZXRBcHBsaWNhdGlvbkNvbnRleHRDb2RlKFxuICAgICAgICAgICAgICAgIGNvbmZpZy5OYW1lXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IGNhcmREYXRhUmVmXG4gICAgICAgICAgPyBjYXJkRGF0YVJlZi5maW5kSW5kZXgoKHgpID0+IHguZGF0YSA9PSByb2xlPy5kYXRhKVxuICAgICAgICAgIDogLTE7XG4gICAgICAgIGlmIChpdGVtSW5kZXggPiAtMSkge1xuICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLkNvZGUgPSBtYXBwZWRSb2xlU2F2ZS5Db2RlO1xuICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLklkID0gbWFwcGVkUm9sZVNhdmUuQ29kZTtcbiAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5EYXRhU3RhdGUgPSBtYXBwZWRSb2xlU2F2ZS5EYXRhU3RhdGU7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uVGVuYW50SWQgPSBtYXBwZWRSb2xlU2F2ZS5UZW5hbnRJZDtcbiAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5TZXJ2aWNlTmFtZSA9IG1hcHBlZFJvbGVTYXZlLlNlcnZpY2VOYW1lO1xuICAgICAgICAgIG1hcHBlZFJvbGVTYXZlLlJvbGVDb250ZXh0cy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uUm9sZSA9IG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uQ29kZSA9IHguQ29kZTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5TZXJ2aWNlTmFtZSA9IHguU2VydmljZU5hbWU7XG4gICAgICAgICAgICB4LlJvbGVBY3Rpb25zLmZvckVhY2goKHksIGopID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uUm9sZUNvbnRleHRzW2ldLlJvbGVBY3Rpb25zW2pdLlJvbGUgPVxuICAgICAgICAgICAgICAgIG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5Sb2xlQWN0aW9uc1tqXS5Db2RlID0geS5Db2RlO1xuICAgICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uUm9sZUFjdGlvbnNbal0uU2VydmljZU5hbWUgPVxuICAgICAgICAgICAgICAgIHkuU2VydmljZU5hbWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHMgPSBtYXBwZWRSb2xlU2F2ZS5Sb2xlQ29udGV4dHM7XG5cbiAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEubWFwKCh4KSA9PiB4KTtcbiAgICAgICAgICAvLyBpZiAoY2FyZERhdGFSZWYpIHtcbiAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHtcbiAgICAgICAgICAvLyAgICAgWERhdGFJc0hlcmU6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2FyZERhdGFSZWYpKSxcbiAgICAgICAgICAvLyAgIH0pO1xuICAgICAgICAgIC8vICAgY2FyZERhdGFSZWZbaXRlbUluZGV4XSA9IHtcbiAgICAgICAgICAvLyAgICAgc2VsZWN0ZWQ6IGNhcmREYXRhUmVmW2l0ZW1JbmRleF0uc2VsZWN0ZWQsXG4gICAgICAgICAgLy8gICAgIGlzQ2hpbGRyZW5FeHBhbmRlZDogY2FyZERhdGFSZWZbaXRlbUluZGV4XS5pc0NoaWxkcmVuRXhwYW5kZWQsXG4gICAgICAgICAgLy8gICAgIHRpdGxlOiBtYXBwZWRSb2xlU2F2ZS5OYW1lLFxuICAgICAgICAgIC8vICAgICBkYXRhOiBtYXBwZWRSb2xlU2F2ZSxcbiAgICAgICAgICAvLyAgICAgYm9keTogW10sXG4gICAgICAgICAgLy8gICAgIGNoaWxkcmVuOiBtYXBwZWRSb2xlU2F2ZS5Sb2xlQ29udGV4dHMubWFwKChjKSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAvLyAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAvLyAgICAgICAgIHRpdGxlOiB0aGlzLmdldEZvcm1hdHRlZE5hbWUoYy5OYW1lKSxcbiAgICAgICAgICAvLyAgICAgICAgIGRhdGE6IGMsXG4gICAgICAgICAgLy8gICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAvLyAgICAgICAgIGNoaWxkcmVuOiBjLlJvbGVBY3Rpb25zLm1hcCgoYSkgPT4ge1xuICAgICAgICAgIC8vICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRGb3JtYXR0ZWROYW1lKGEuTmFtZSksXG4gICAgICAgICAgLy8gICAgICAgICAgICAgZGF0YTogYSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgLy8gICAgICAgICAgIH07XG4gICAgICAgICAgLy8gICAgICAgICB9KSxcbiAgICAgICAgICAvLyAgICAgICB9O1xuICAgICAgICAgIC8vICAgICB9KSxcbiAgICAgICAgICAvLyAgIH07XG4gICAgICAgICAgLy8gfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2F2ZURhdGFBbGwoKSB7XG4gICAgY29uc3Qgcm9sZXM6IFJvbGVbXSA9IHRoaXMuZGF0YS5tYXAoKHgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLngsXG4gICAgICAgIFJvbGVDb250ZXh0czogeC5Sb2xlQ29udGV4dHMuZmlsdGVyKCh5KSA9PiB5LlNlbGVjdGVkKS5tYXAoKHopID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ueixcbiAgICAgICAgICAgIFJvbGVBY3Rpb25zOiB6LlJvbGVBY3Rpb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgKGEpID0+IGEuU2VsZWN0ZWRcbiAgICAgICAgICAgICkgYXMgUm9sZUFjdGlvbltdLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pIGFzIFJvbGVDb250ZXh0W10sXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlVGFibGUoKSB7XG4gICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLm1hcCgoeCkgPT4geCk7XG4gIH1cblxuICBvblZpZXdDaGFuZ2UoaXNHcmlkVmlldzogYm9vbGVhbik6IHZvaWQge31cbiAgb25TdGF0ZUNoYW5nZShldmVudDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IGJvb2xlYW4gfSk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdjcmVhdGUnOlxuICAgICAgICB2YXIgbmV3TWFwcGVkUm9sZTogTWFwcGVkUm9sZSA9IHtcbiAgICAgICAgICBSb2xlQ29udGV4dHM6IHRoaXMuc291cmNlRGF0YS5tYXAoKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQ6IE1hcHBlZFJvbGVDb250ZXh0ID0ge1xuICAgICAgICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5BY3Rpb24sXG4gICAgICAgICAgICAgIFNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgUm9sZUFjdGlvbnM6IGNvbmZpZy5BY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIGFjdDogTWFwcGVkUm9sZUFjdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgIFNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIE5hbWU6IGFjdGlvbixcbiAgICAgICAgICAgICAgICAgIFJvbGU6ICcnLFxuICAgICAgICAgICAgICAgICAgQ29udGV4dDogJycsXG4gICAgICAgICAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgICAgICAgICBJZDogJycsXG4gICAgICAgICAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICAgICAgICAgIFRlbmFudElkOiAnJyxcbiAgICAgICAgICAgICAgICAgIENvZGU6ICcnLFxuICAgICAgICAgICAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICAgICAgICAgICAgQVBJS2V5OiB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5BUElLZXksXG4gICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVBY3Rpb246IHRoaXMuZ2V0QXBwbGljYXRpb25BY3Rpb25Db2RlKGFjdGlvbiksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWN0O1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgTmFtZTogY29uZmlnLk5hbWUsXG4gICAgICAgICAgICAgIFJvbGU6ICcnLFxuICAgICAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgICAgIElkOiAnJyxcbiAgICAgICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICBUZW5hbnRJZDogJycsXG4gICAgICAgICAgICAgIENvZGU6ICcnLFxuICAgICAgICAgICAgICBTZXJ2aWNlTmFtZTogJycsXG4gICAgICAgICAgICAgIEFQSUtleTogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVDb250ZXh0OiB0aGlzLmdldEFwcGxpY2F0aW9uQ29udGV4dENvZGUoXG4gICAgICAgICAgICAgICAgY29uZmlnLk5hbWVcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIENoaWxkcmVuVHlwZTogQ2hpbGRyZW5UeXBlLlBlcm1pc3Npb24sXG4gICAgICAgICAgTmFtZTogJycsXG4gICAgICAgICAgaWQ6ICh0aGlzLmNhcmREYXRhLmxlbmd0aCArIDEpLnRvU3RyaW5nKCksXG4gICAgICAgICAgSWQ6ICh0aGlzLmNhcmREYXRhLmxlbmd0aCArIDEpLnRvU3RyaW5nKCksXG4gICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICBUZW5hbnRJZDogJycsXG4gICAgICAgICAgQ29kZTogJycsXG4gICAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICAgIEFwcGxpY2F0aW9uOiB0aGlzLmFwcGxpY2F0aW9uID8gdGhpcy5hcHBsaWNhdGlvbiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBBUElLZXk6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2FyZERhdGE6IENhcmREYXRhID0ge1xuICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICB0aXRsZTogbmV3TWFwcGVkUm9sZS5OYW1lLFxuICAgICAgICAgIGRhdGE6IG5ld01hcHBlZFJvbGUsXG4gICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgY2hpbGRyZW46IG5ld01hcHBlZFJvbGUuUm9sZUNvbnRleHRzLm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRGb3JtYXR0ZWROYW1lKGMuTmFtZSksXG4gICAgICAgICAgICAgIGRhdGE6IGMsXG4gICAgICAgICAgICAgIGJvZHk6IFtdLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogYy5Sb2xlQWN0aW9ucy5tYXAoKGEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0Rm9ybWF0dGVkTmFtZShhLk5hbWUpLFxuICAgICAgICAgICAgICAgICAgZGF0YTogYSxcbiAgICAgICAgICAgICAgICAgIGJvZHk6IFtdLFxuICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLmNvbmNhdChbbmV3TWFwcGVkUm9sZV0pO1xuICAgICAgICB0aGlzLmNhcmREYXRhLnB1c2goY2FyZERhdGEpO1xuICAgICAgICB0aGlzLnJvbGVDYXJkQ2xpY2tlZChjYXJkRGF0YSk7XG4gICAgICAgIHRoaXMuZGF0YVZpZXcuaXNUYWJsZVZpZXcgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzaG93VGFibGVWaWV3OiBib29sZWFuID0gZmFsc2U7XG4gIG9uU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGVkUm93czogUm9sZVtdKSB7fVxuICByZXRyeU1lc3NhZ2UoKSB7fVxuICBvbkNvbHVtbnNVcGRhdGVkKHVwZGF0ZWRDb2x1bW5zOiBJRGF0YUZpbHRlcltdKSB7XG4gICAgY29uc3QgdXBkYXRlZENvbHVtbkRlZjogQ29sdW1uRGVmaW5pdGlvbjxNYXBwZWRSb2xlPltdID0gW107XG4gICAgdXBkYXRlZENvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGluZ0NvbCA9IHRoaXMucm9sZUNvbnRyb2xTdmMucm9sZUNvbHVtbnMuZmluZChcbiAgICAgICAgKGNvbHVtbikgPT4gY29sdW1uLmhlYWRlciA9PT0gY29sLm5hbWUgfHwgY29sdW1uLmlkID09PSBjb2wubmFtZVxuICAgICAgKTtcbiAgICAgIGlmIChtYXRjaGluZ0NvbCkge1xuICAgICAgICB1cGRhdGVkQ29sdW1uRGVmLnB1c2gobWF0Y2hpbmdDb2wpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy52aXNpYmxlQ29sdW1uRGVmID0gWy4uLnVwZGF0ZWRDb2x1bW5EZWZdO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRmlsdGVyc0FuZFNvcnRzKGlzU2VhcmNoOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAoIWlzU2VhcmNoKSB7XG4gICAgICB0aGlzLmRhdGFWaWV3Lm9uQ2xlYXJTZWFyY2goKTtcbiAgICAgIHRoaXMuY3VycmVudFNlYXJjaFRlcm0gPSAnJztcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIGNvbnN0IGNsaWNrRXZlbnQgPSBuZXcgTW91c2VFdmVudCgnY2xpY2snLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICAgIHZpZXc6IHdpbmRvdyxcbiAgICAgIH0pO1xuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjbGlja0V2ZW50KTtcbiAgICB9XG4gICAgdmFyIHBheWxvYWQ6IFNlYXJjaFByb3BlcnR5VmFsdWVbXSA9IHRoaXMuY3VycmVudEZpbHRlcnMubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBQcm9wZXJ0eU5hbWU6IHgubmFtZSxcbiAgICAgICAgRW50aXR5VmFsdWU6IHgudmFsdWUsXG4gICAgICAgIE9wZXJhdG9yOiBTZWFyY2hPcGVyYXRvci5BbmQsXG4gICAgICAgIFNpZ246XG4gICAgICAgICAgeC5jb25kaXRpb24gJiYgT2JqZWN0LmtleXMoRGF0ZUZpbHRlclR5cGVzKS5pbmNsdWRlcyh4LmNvbmRpdGlvbilcbiAgICAgICAgICAgID8gKERhdGVGaWx0ZXJUeXBlc1tcbiAgICAgICAgICAgICAgICB4LmNvbmRpdGlvbiBhcyBrZXlvZiB0eXBlb2YgRGF0ZUZpbHRlclR5cGVzXG4gICAgICAgICAgICAgIF0gYXMgdW5rbm93biBhcyBTZWFyY2hQcm9wZXJ0eVNpZ24pXG4gICAgICAgICAgICA6IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgICAgICAgVHlwZTogU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUuRGF0ZSxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcGF5bG9hZC5wdXNoKHtcbiAgICAgIFByb3BlcnR5TmFtZTogJ0FQSUtleScsXG4gICAgICBFbnRpdHlWYWx1ZTogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgT3BlcmF0b3I6IFNlYXJjaE9wZXJhdG9yLkFuZCxcbiAgICAgIFNpZ246IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgICB9KTtcbiAgICBmb3IgKGxldCBzb3J0IG9mIHRoaXMuY3VycmVudFNvcnRzKSB7XG4gICAgICBwYXlsb2FkLnB1c2goe1xuICAgICAgICBQcm9wZXJ0eU5hbWU6IHNvcnQubmFtZSxcbiAgICAgICAgRW50aXR5VmFsdWU6ICcnLFxuICAgICAgICBPcGVyYXRvcjogU2VhcmNoT3BlcmF0b3IuQW5kLFxuICAgICAgICBTaWduOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgICAgIFNvcnQ6XG4gICAgICAgICAgc29ydC52YWx1ZS50b0xvd2VyQ2FzZSgpID09IFNvcnREaXJlY3Rpb24uQXNjLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgID8gU29ydERpcmVjdGlvbi5Bc2NcbiAgICAgICAgICAgIDogc29ydC52YWx1ZS50b0xvd2VyQ2FzZSgpID09IFNvcnREaXJlY3Rpb24uRGVzYy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICA/IFNvcnREaXJlY3Rpb24uRGVzY1xuICAgICAgICAgICAgOiBTb3J0RGlyZWN0aW9uLk5vbmUsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3Qgc2VhcmNoVGVybUV4aXN0cyA9IHRoaXMuY3VycmVudFNlYXJjaFRlcm0udHJpbSgpLmxlbmd0aCA+IDA7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gICAgY29uc3QgcmVzID0gc2VhcmNoVGVybUV4aXN0c1xuICAgICAgPyBhd2FpdCB0aGlzLnNlcnZlci5nZXQoXG4gICAgICAgICAgYFJvbGUvR2V0Um9sZXNXaXRoUGFyYW0vJHt0aGlzLmN1cnJlbnRTZWFyY2hUZXJtLnRyaW0oKX0vMC8ke1xuICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZVxuICAgICAgICAgIH1gXG4gICAgICAgIClcbiAgICAgIDogYXdhaXQgdGhpcy5zZXJ2ZXIucG9zdChgUm9sZS9TZWFyY2hSb2xlcy8wLyR7dGhpcy5wYWdlU2l6ZX1gLCBwYXlsb2FkKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlcnMgPSBbXTtcbiAgICAgIHRoaXMuY3VycmVudFNvcnRzID0gW107XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhcmREYXRhVmlldy5jbGVhckRhdGEoKTtcbiAgICAgIHRoaXMuY3VycmVudERhdGEgPSBudWxsO1xuICAgICAgdGhpcy5wYWdlU3RhdGUgPSByZXMgYXMgUGFnZWRSZXN1bHQ8Um9sZT47XG4gICAgICB2YXIgcmVzdWx0ID0gKHJlcyBhcyBQYWdlZFJlc3VsdDxSb2xlPikuUmVzdWx0O1xuICAgICAgdGhpcy5zZXRVcE1hcHBlZERhdGEocmVzdWx0KTtcbiAgICAgIHRoaXMuc2V0VXBDYXJkRGF0YSgpO1xuICAgIH1cbiAgfVxuICBhc3luYyBsb2FkTW9yZUZpbHRlcnNBbmRTb3J0cygpOiBQcm9taXNlPFBhZ2VkUmVzdWx0PFJvbGU+IHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCF0aGlzLnBhZ2VTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcGF5bG9hZDogU2VhcmNoUHJvcGVydHlWYWx1ZVtdID0gdGhpcy5jdXJyZW50RmlsdGVycy5tYXAoKHgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFByb3BlcnR5TmFtZTogeC5uYW1lLFxuICAgICAgICBFbnRpdHlWYWx1ZTogeC52YWx1ZSxcbiAgICAgICAgT3BlcmF0b3I6IFNlYXJjaE9wZXJhdG9yLkFuZCxcbiAgICAgICAgU2lnbjpcbiAgICAgICAgICB4LmNvbmRpdGlvbiAmJiBPYmplY3Qua2V5cyhEYXRlRmlsdGVyVHlwZXMpLmluY2x1ZGVzKHguY29uZGl0aW9uKVxuICAgICAgICAgICAgPyAoRGF0ZUZpbHRlclR5cGVzW1xuICAgICAgICAgICAgICAgIHguY29uZGl0aW9uIGFzIGtleW9mIHR5cGVvZiBEYXRlRmlsdGVyVHlwZXNcbiAgICAgICAgICAgICAgXSBhcyB1bmtub3duIGFzIFNlYXJjaFByb3BlcnR5U2lnbilcbiAgICAgICAgICAgIDogU2VhcmNoUHJvcGVydHlTaWduLkVRLFxuICAgICAgICBUeXBlOiBTZWFyY2hQcm9wZXJ0eVZhbHVlVHlwZS5EYXRlLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICBwYXlsb2FkLnB1c2goe1xuICAgICAgUHJvcGVydHlOYW1lOiAnQVBJS2V5JyxcbiAgICAgIEVudGl0eVZhbHVlOiB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5BUElLZXksXG4gICAgICBPcGVyYXRvcjogU2VhcmNoT3BlcmF0b3IuQW5kLFxuICAgICAgU2lnbjogU2VhcmNoUHJvcGVydHlTaWduLkVRLFxuICAgIH0pO1xuICAgIGZvciAobGV0IHNvcnQgb2YgdGhpcy5jdXJyZW50U29ydHMpIHtcbiAgICAgIHBheWxvYWQucHVzaCh7XG4gICAgICAgIFByb3BlcnR5TmFtZTogc29ydC5uYW1lLFxuICAgICAgICBFbnRpdHlWYWx1ZTogJycsXG4gICAgICAgIE9wZXJhdG9yOiBTZWFyY2hPcGVyYXRvci5BbmQsXG4gICAgICAgIFNpZ246IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgICAgICAgU29ydDpcbiAgICAgICAgICBzb3J0LnZhbHVlLnRvTG93ZXJDYXNlKCkgPT0gU29ydERpcmVjdGlvbi5Bc2MudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgPyBTb3J0RGlyZWN0aW9uLkFzY1xuICAgICAgICAgICAgOiBzb3J0LnZhbHVlLnRvTG93ZXJDYXNlKCkgPT0gU29ydERpcmVjdGlvbi5EZXNjLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgID8gU29ydERpcmVjdGlvbi5EZXNjXG4gICAgICAgICAgICA6IFNvcnREaXJlY3Rpb24uTm9uZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBzZWFyY2hUZXJtRXhpc3RzID0gdGhpcy5jdXJyZW50U2VhcmNoVGVybS50cmltKCkubGVuZ3RoID4gMDtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPSBzZWFyY2hUZXJtRXhpc3RzXG4gICAgICA/IGF3YWl0IHRoaXMuc2VydmVyLmdldChcbiAgICAgICAgICBgUm9sZS9HZXRSb2xlc1dpdGhQYXJhbS8ke3RoaXMuY3VycmVudFNlYXJjaFRlcm0udHJpbSgpfS8ke1xuICAgICAgICAgICAgdGhpcy5wYWdlU3RhdGUuU2tpcFxuICAgICAgICAgIH0vJHt0aGlzLnBhZ2VTaXplfWBcbiAgICAgICAgKVxuICAgICAgOiBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KFxuICAgICAgICAgIGBSb2xlL1NlYXJjaFJvbGVzLyR7dGhpcy5wYWdlU3RhdGUuU2tpcH0vJHt0aGlzLnBhZ2VTaXplfWAsXG4gICAgICAgICAgcGF5bG9hZFxuICAgICAgICApO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHJlc3VsdCA9IHJlcyBhcyBQYWdlZFJlc3VsdDxSb2xlPjtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG4gIG9uRmlsdGVyVXBkYXRlZCh1cGRhdGVkRmlsdGVyczogSURhdGFGaWx0ZXJbXSB8IHN0cmluZykge1xuICAgIC8vIEVuc3VyZSB1cGRhdGVkRmlsdGVycyBpcyBhbiBhcnJheVxuICAgIGlmIChBcnJheS5pc0FycmF5KHVwZGF0ZWRGaWx0ZXJzKSkge1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVycyA9IHVwZGF0ZWRGaWx0ZXJzO1xuICAgICAgdGhpcy51cGRhdGVGaWx0ZXJzQW5kU29ydHMoKTtcbiAgICB9XG4gIH1cbiAgb25Tb3J0VXBkYXRlZCh1cGRhdGVkU29ydHM6IElEYXRhRmlsdGVyW10pIHtcbiAgICB0aGlzLmN1cnJlbnRTb3J0cyA9IHVwZGF0ZWRTb3J0cztcbiAgICBjb25zb2xlLmxvZyh7IEN1cnJTb3J0czogdGhpcy5jdXJyZW50U29ydHMgfSk7XG4gICAgdGhpcy51cGRhdGVGaWx0ZXJzQW5kU29ydHMoKTtcbiAgfVxuXG4gIGhhbmRsZVNlYXJjaChldmVudDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9KSB7XG4gICAgdGhpcy5zZWFyY2hUZXJtJC5uZXh0KGV2ZW50LnZhbHVlKTtcbiAgfVxuXG4gIGhhbmRsZUV4cG9ydChleHBvcnRlZERhdGE6IFBhcnRpYWw8YW55PltdKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ0V4cG9ydGVkIGRhdGE6JywgZXhwb3J0ZWREYXRhKTtcbiAgICB0aGlzLmRvd25sb2FkQ1NWKGV4cG9ydGVkRGF0YSk7XG4gIH1cbiAgcHJpdmF0ZSBkb3dubG9hZENTVihkYXRhOiBQYXJ0aWFsPGFueT5bXSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBPYmplY3Qua2V5cyhkYXRhWzBdKTtcbiAgICBjb25zdCBjc3ZDb250ZW50ID0gW1xuICAgICAgaGVhZGVycy5qb2luKCcsJyksXG4gICAgICAuLi5kYXRhLm1hcCgocm93KSA9PiBoZWFkZXJzLm1hcCgoaGVhZGVyKSA9PiByb3dbaGVhZGVyXSkuam9pbignLCcpKSxcbiAgICBdLmpvaW4oJ1xcbicpO1xuXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtjc3ZDb250ZW50XSwgeyB0eXBlOiAndGV4dC9jc3Y7Y2hhcnNldD11dGYtODsnIH0pO1xuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgaWYgKGxpbmsuZG93bmxvYWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdocmVmJywgdXJsKTtcbiAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsICdleHBvcnQuY3N2Jyk7XG4gICAgICBsaW5rLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICBsaW5rLmNsaWNrKCk7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xuICAgIH1cbiAgfVxuXG4gIGdldE1vY2tSb2xlcygpOiBSb2xlW10ge1xuICAgIHJldHVybiBuZXcgQXJyYXkoMTApLmZpbGwoMSkubWFwKChpZCwgaSkgPT4gKHtcbiAgICAgIElkOiBpZCArIGksXG4gICAgICBpZDogKGlkICsgaSkudG9TdHJpbmcoKSxcbiAgICAgIE5hbWU6IHRoaXMubW9ja05hbWVzW2ldIHx8ICcnLFxuICAgICAgUm9sZUNvbnRleHRzOiB0aGlzLnJhbmRvbUNvbnRleHRzKCksXG4gICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgIFRlbmFudElkOiBgVGVuYW50JHtpZCArIGl9YCxcbiAgICAgIENvZGU6ICcnLFxuICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgQVBJS2V5OiAnJyxcbiAgICB9KSk7XG4gIH1cblxuICBtb2NrTmFtZXM6IHN0cmluZ1tdID0gW1xuICAgICdBZG1pbicsXG4gICAgJ1N1cGVyIEFkbWluJyxcbiAgICAnTWFuYWdlcicsXG4gICAgJ0ludGVybicsXG4gICAgJ1Byb2R1Y3Rpb24gTWFuYWdlcicsXG4gICAgJ0NFTycsXG4gICAgJ0NUTycsXG4gICAgJ0NPTycsXG4gICAgJ0RldmVsb3BlcicsXG4gICAgJ0VuZ2luZWVyJyxcbiAgXTtcblxuICByYW5kb21OYW1lKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiB0aGlzLm1vY2tOYW1lcy5sZW5ndGgpO1xuICAgIHJldHVybiB0aGlzLm1vY2tOYW1lc1tyYW5kb21JbmRleF07XG4gIH1cblxuICByYW5kb21Db250ZXh0cygpOiBSb2xlQ29udGV4dFtdIHtcbiAgICBjb25zdCByYW5kb21OdW1iZXIgPSBNYXRoLmZsb29yKFxuICAgICAgTWF0aC5yYW5kb20oKSAqIE9iamVjdC5rZXlzKFVJcykubGVuZ3RoICsgMVxuICAgICk7XG4gICAgdmFyIHJldHVybkFycmF5OiBSb2xlQ29udGV4dFtdID0gW107XG4gICAgY29uc3QgdXNlZExpc3Q6IG51bWJlcltdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5kb21OdW1iZXI7IGkrKykge1xuICAgICAgbGV0IHJhbmRvbUluZGV4O1xuICAgICAgZG8ge1xuICAgICAgICByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIE9iamVjdC5rZXlzKFVJcykubGVuZ3RoKTtcbiAgICAgIH0gd2hpbGUgKHVzZWRMaXN0LmluY2x1ZGVzKHJhbmRvbUluZGV4KSk7XG5cbiAgICAgIHJldHVybkFycmF5LnB1c2goe1xuICAgICAgICBJZDogJ2NvbnRleHQnICsgaSxcbiAgICAgICAgaWQ6ICgnY29udGV4dCcgKyBpKS50b1N0cmluZygpLFxuICAgICAgICBOYW1lOiBPYmplY3Qua2V5cyhVSXMpW3JhbmRvbUluZGV4XSxcbiAgICAgICAgUm9sZTogJycsXG4gICAgICAgIFJvbGVBY3Rpb25zOiB0aGlzLnJhbmRvbUFjdGlvbnMoKSxcbiAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICBUZW5hbnRJZDogYFRlbmFudCR7J2NvbnRleHQnICsgaX1gLFxuICAgICAgICBDb2RlOiAnJyxcbiAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICBBUElLZXk6ICcnLFxuICAgICAgICBBcHBsaWNhdGlvblJvbGVDb250ZXh0OiAnJyxcbiAgICAgIH0pO1xuICAgICAgdXNlZExpc3QucHVzaChyYW5kb21JbmRleCk7XG4gICAgfVxuICAgIHJldHVybiByZXR1cm5BcnJheTtcbiAgfVxuXG4gIHJhbmRvbUFjdGlvbnMoKTogUm9sZUFjdGlvbltdIHtcbiAgICBjb25zdCByYW5kb21OdW1iZXIgPSBNYXRoLmZsb29yKFxuICAgICAgTWF0aC5yYW5kb20oKSAqIE9iamVjdC5rZXlzKFVJQWN0aW9ucykubGVuZ3RoICsgMVxuICAgICk7XG4gICAgdmFyIHJldHVybkFycmF5OiBSb2xlQWN0aW9uW10gPSBbXTtcbiAgICBjb25zdCB1c2VkTGlzdDogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhbmRvbU51bWJlcjsgaSsrKSB7XG4gICAgICBsZXQgcmFuZG9tSW5kZXg7XG4gICAgICBkbyB7XG4gICAgICAgIHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogT2JqZWN0LmtleXMoVUlBY3Rpb25zKS5sZW5ndGgpO1xuICAgICAgfSB3aGlsZSAodXNlZExpc3QuaW5jbHVkZXMocmFuZG9tSW5kZXgpKTtcblxuICAgICAgcmV0dXJuQXJyYXkucHVzaCh7XG4gICAgICAgIElkOiAnYWN0aW9uJyArIGksXG4gICAgICAgIGlkOiAoJ2FjdGlvbicgKyBpKS50b1N0cmluZygpLFxuICAgICAgICBOYW1lOiBPYmplY3Qua2V5cyhVSUFjdGlvbnMpW3JhbmRvbUluZGV4XSxcbiAgICAgICAgUm9sZTogJycsXG4gICAgICAgIENvbnRleHQ6ICcnLFxuICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgIFRlbmFudElkOiBgVGVuYW50JHsnYWN0aW9uJyArIGl9YCxcbiAgICAgICAgQ29kZTogJycsXG4gICAgICAgIFNlcnZpY2VOYW1lOiAnJyxcbiAgICAgICAgQVBJS2V5OiAnJyxcbiAgICAgICAgQXBwbGljYXRpb25Sb2xlQWN0aW9uOiAnJyxcbiAgICAgIH0pO1xuICAgICAgdXNlZExpc3QucHVzaChyYW5kb21JbmRleCk7XG4gICAgfVxuICAgIHJldHVybiByZXR1cm5BcnJheTtcbiAgfVxuXG4gIGNsb3NlUG9wVXAoKSB7XG4gICAgdGhpcy5vcGVuRHJvcGRvd25JZCA9IG51bGw7XG4gICAgdGhpcy5wb3BVcHMuZm9yRWFjaCgocG9wVXApID0+IHtcbiAgICAgIGlmIChwb3BVcC5kcm9wZG93bk9wZW4pIHtcbiAgICAgICAgcG9wVXAudG9nZ2xlRHJvcGRvd24oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUl0ZW0odmFsdWU6IGFueSwga2V5OiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBba2V5XTogdmFsdWUsXG4gICAgfTtcbiAgfVxuXG4gIGVkaXRWYWx1ZSh2YWx1ZTogTWFwcGVkUm9sZSkge1xuICAgIGNvbnN0IGNhcmQgPSB0aGlzLmNhcmREYXRhLmZpbmQoKHgpID0+IHguZGF0YS5JZCA9PSB2YWx1ZS5JZCk7XG4gICAgaWYgKGNhcmQgJiYgdGhpcy5jYXJkRGF0YVZpZXcpIHtcbiAgICAgIHRoaXMuZGF0YVZpZXcudG9nZ2xlVmlldygpO1xuICAgICAgY2FyZC5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB0aGlzLmN1cnJlbnREYXRhID0gdGhpcy5jYXJkRGF0YVZpZXcub25JdGVtQ2xpY2soY2FyZCk7XG4gICAgICB0aGlzLmNsb3NlUG9wVXAoKTtcbiAgICAgIC8vIGlmICh0aGlzLmN1cnJlbnREYXRhKSB7XG4gICAgICAvLyAgIHRoaXMuZm9ybS5jb250cm9sc1snTmFtZSddLnNldFZhbHVlKHRoaXMuY3VycmVudERhdGEuZGF0YT8uTmFtZSk7XG4gICAgICAvLyB9XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2ICNtZXNzYWdlTG9nIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNCBtZXNzYWdlLWxvZy1jb250YWluZXJcIj5cbiAgPGRpdiAqbmdJZj1cInRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA+IDBcIlxuICAgIGNsYXNzPVwiY29udGV4dC1iYW5uZXIgcHktMyBweC00IHJvdW5kZWQteGwgZmxleCBpdGVtLWNlbnRlciBqdXN0aWZ5LXNwYWNlLWJldHdlZW4gZ2FwLTNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMiBmbGV4LTEgY29udGV4dC1iYW5uZXItY29udGVudFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRleHQtY29udGVudCBpdGVtcy1jZW50ZXIgZmxleCBnYXAtMlwiICpuZ0Zvcj1cImxldCBjb250ZXh0IG9mIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5OyBpbmRleCBhcyBpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZXh0LW1haW4tY29udGVudC1jb250YWluZXIgZmxleCBnYXAtNFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29udGV4dC1jYXB0aW9uIGZvbnQtYm9sZCB0ZXh0LVsjNDA0MDQwXVwiPnt7Y29udGV4dC5kYXRhLkNoaWxkcmVuVHlwZSAmJlxuICAgICAgICAgICAgY29udGV4dC5kYXRhLkNoaWxkcmVuVHlwZSA9PSBjaGlsZFBlcm1pc3Npb25SZWY/IGNvbnRleHQuZGF0YS5OYW1lOiBjb250ZXh0LnRpdGxlfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJpID09IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCAtMVwiXG4gICAgICAgICAgICBjbGFzcz1cImNvbnRleHQtc3ViY2FwdGlvblwiPnt7dGhpcy5nZXRDYXJkU3ViQ2FwdGlvbihjb250ZXh0KX19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImkgPCB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggLTFcIj4vPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZFwiPlxuICAgICAgPHZlcmJlbi1zdmcgKGNsaWNrKT1cImNsb3NlRGV0YWlscygpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIGljb249XCJjbG9zZS1jaXJjbGUtZnVsbFwiIFt3aWR0aF09XCIyMFwiXG4gICAgICAgIFtoZWlnaHRdPVwiMjBcIj48L3ZlcmJlbi1zdmc+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8dmVyYmVuLWRhdGEtdmlldyAjdmR2IFt2aWV3U3RhdGVdPVwie1xuICAgICAgaXNTZWFyY2g6IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwLFxuICAgICAgaXNDb2x1bW46IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwLFxuICAgICAgaXNGaWx0ZXI6IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwLFxuICAgICAgaXNTb3J0OiB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPT0gMCxcbiAgICAgIGlzRXhwb3J0OiB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPT0gMCxcbiAgICAgIGlzU2VsZWN0OiB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPT0gMCxcbiAgICAgIGlzQ3JlYXRlOiB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPT0gMCxcbiAgICAgIGlzVG9nZ2xlOnRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwLFxuICAgIH1cIiBbYnV0dG9uQ2xhc3NdPVwiJ215LWN1c3RvbS1idXR0b24tY2xhc3MnXCIgW2ljb25DbGFzc109XCInbXktaWNvbi1jbGFzcydcIlxuICAgIFthY3RpdmVJY29uQ2xhc3NdPVwiJ215LWFjdGl2ZS1pY29uLWNsYXNzJ1wiIFtpc1RhYmxlVmlld109XCJmYWxzZVwiXG4gICAgW3NlbGVjdGVkQ29sdW1uQ291bnRdPVwiMFwiIFtzZWxlY3RlZFNvcnRDb3VudF09XCIwXCIgW3NlbGVjdGVkRmlsdGVyVGFibGVDb3VudF09XCIwXCIgKHZpZXdDaGFuZ2UpPVwib25WaWV3Q2hhbmdlKCRldmVudClcIlxuICAgIChzdGF0ZUNoYW5nZSk9XCJvblN0YXRlQ2hhbmdlKCRldmVudClcIiAob25TZWFyY2hDaGFuZ2UpPVwiaGFuZGxlU2VhcmNoKCRldmVudClcIj5cbiAgICA8ZGl2IGNsYXNzPVwibXQtMlwiIHRhYmxlLWNvbnRlbnQ+XG4gICAgICA8bGliLWRhdGEtdGFibGUgW2RhdGFLZXldPVwiJ0lkJ1wiICNkdCBbZGF0YV09XCJkYXRhXCIgW2NvbHVtbnNdPVwidmlzaWJsZUNvbHVtbkRlZlwiIFtzdHlsZUNvbmZpZ109XCJzdHlsZXNcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJzZWxlY3RcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LWlzU2VsZWN0ZWQ9XCJpc1NlbGVjdGVkXCIgbGV0LXRvZ2dsZVJvd1NlbGVjdGlvbj1cInRvZ2dsZVJvd1NlbGVjdGlvblwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImlzU2VsZWN0ZWRcIiAoY2hhbmdlKT1cInRvZ2dsZVJvd1NlbGVjdGlvbigpXCIgLz5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGVyIGxldC1hbGxSb3dzU2VsZWN0ZWQ9XCJhbGxSb3dzU2VsZWN0ZWRcIiBsZXQtc29tZVJvd3NTZWxlY3RlZD1cInNvbWVSb3dzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgbGV0LXRvZ2dsZUFsbFJvd3M9XCJ0b2dnbGVBbGxSb3dzXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiYWxsUm93c1NlbGVjdGVkKClcIiBbaW5kZXRlcm1pbmF0ZV09XCJzb21lUm93c1NlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUFsbFJvd3MoKVwiIC8+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiY3JlYXRlZEF0XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC12YWx1ZT5cbiAgICAgICAgICAgIHt7IHZhbHVlIHwgZGF0ZSB9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cInVwZGF0ZWRBdFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtdmFsdWU+XG4gICAgICAgICAgICB7eyB2YWx1ZSB8IGRhdGUgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJuYW1lXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICB7e3ZhbHVlLk5hbWV9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsRWRpdCBsZXQtcm93PVwicm93XCIgbGV0LXVwZGF0ZVZhbHVlPVwidXBkYXRlVmFsdWVcIiBsZXQtdXBkYXRlRGF0YT1cInVwZGF0ZURhdGFcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2lkdGgtbWF4XCI+XG4gICAgICAgICAgICAgIDx2ZXJiZW5hLWlucHV0IFsobmdNb2RlbCldPVwidmFsdWUuTmFtZVwiPjwvdmVyYmVuYS1pbnB1dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiYWN0aW9uc1wiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtaXNFZGl0aW5nPVwiaXNFZGl0aW5nXCIgbGV0LXRvZ2dsZVJvd0VkaXQ9XCJ0b2dnbGVSb3dFZGl0XCIgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT5cbiAgICAgICAgICAgIDx2ZXJiZW4tcG9wLVVwICNwb3B1cCBbY3VzdG9tU3R5bGVzXT1cInsnei1pbmRleCc6ICc5OSd9XCIgW2VuYWJsZU1vdXNlTGVhdmVdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgPHZlcmJlbi1zdmcgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBhY3Rpb25zLWljb25cIiBkcm9wZG93bi10cmlnZ2VyIGljb249XCJsaXN0XCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wLXVwLWNvbnRlbnQgZmxleCBmbGV4LWNvbFwiIGRyb3Bkb3duLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwidG9nZ2xlUm93RWRpdCgpOyBjbG9zZVBvcFVwKCk7IFwiIGNsYXNzPVwicG9wLXVwLXZhbHVlIGN1cnNvci1wb2ludGVyXCI+RWRpdDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cInZpZXdEZXRhaWxzRnJvbVRhYmxlKHZhbHVlKVwiIGNsYXNzPVwicG9wLXVwLXZhbHVlIGN1cnNvci1wb2ludGVyXCI+VmlldyBEZXRhaWxzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcC11cC12YWx1ZSBjdXJzb3ItcG9pbnRlclwiPlZpZXcgVXNlcnM8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3ZlcmJlbi1wb3AtVXA+XG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC00IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8dmVyYmVuLXN2ZyAoY2xpY2spPVwiZWRpdFZhbHVlKHZhbHVlKVwiIGljb249XCJlZGl0XCIgW3dpZHRoXT1cIjE1XCIgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cInZpZXdEZXRhaWxzRnJvbVRhYmxlKHZhbHVlKVwiIGNsYXNzPVwidmlldy1saW5rcyB2aWV3LWRldGFpbHNcIj52aWV3IGRldGFpbHM8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlldy1saW5rcyB2aWV3LXVzZXJzXCI+dmlldyB1c2Vyczwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbEVkaXQgbGV0LWlzRWRpdGluZz1cImlzRWRpdGluZ1wiIGxldC10b2dnbGVSb3dFZGl0PVwidG9nZ2xlUm93RWRpdFwiIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMiBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPHZlcmJlbi1zdmcgaWNvbj1cInRpY2tcIiBbd2lkdGhdPVwiMTVcIiBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidGFibGVTYXZlUm9sZSh2YWx1ZSwgdG9nZ2xlUm93RWRpdClcIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnIGljb249XCJkZWxldGVcIiBbd2lkdGhdPVwiMTVcIiBbaGVpZ2h0XT1cIjE1XCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgICA8dmVyYmVuLXN2ZyBpY29uPVwiY2FyZFZpZXdBbHRcIiBbd2lkdGhdPVwiMTVcIiBbaGVpZ2h0XT1cIjE1XCIgKGNsaWNrKT1cImVkaXRWYWx1ZSh2YWx1ZSlcIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbGliLWRhdGEtdGFibGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjYXJkLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLWNhcmQtZGF0YS12aWV3IGJvcmRlclJhZGl1cz1cIjEycHhcIiAjdmRjdiBkYXRhSWQ9XCJJZFwiIGJvcmRlcj1cIjVweFwiIFtjYXJkRGF0YUxpc3RdPVwiY2FyZERhdGFcIlxuICAgICAgICByYmdDb2xvcj1cIiNmNWY2ZjlcIiBtZz1cIjBweFwiPlxuICAgICAgICA8dmVyYmVuLWxlZnQtY2FyZC1kYXRhLXZpZXcgY2xhc3M9XCJzcGFjZS15LTdcIj5cbiAgICAgICAgICA8dmVyYmVuLWxlZnQtY2FyZC1kYXRhICN2bGNkIFtwYXJlbnRdPVwidmRjdlwiIGRhdGFJZD1cIk1haWxBZGRyZXNzXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYmctc2Vjb25kYXJ5LTEwMCByb3VuZGVkLXhsIGJvcmRlci1wcmltYXJ5IGJvcmRlci1bMXB4XVwiIFtjYXJkRGF0YUxpc3RdPVwiY2FyZERhdGFcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2FyZCBsZXQtaXRlbT5cbiAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwicm9sZUNhcmRDbGlja2VkKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0uZGF0YS5DaGlsZHJlblR5cGUgJiYgaXRlbS5kYXRhLkNoaWxkcmVuVHlwZSA9PSBjaGlsZFBlcm1pc3Npb25SZWZcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBjdXJzb3ItcG9pbnRlciBoLVttYXgtY29udGVudF1cIj5cbiAgICAgICAgICAgICAgICA8dmVyYmVuLXN2ZyBbd2lkdGhdPVwiMTVcIiBbaGVpZ2h0XT1cIjE1XCIgKGNsaWNrKT1cInRvZ2dsZUNoaWxkcmVuKGl0ZW0pOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aD8ndmlzaWJsZSc6J2ludmlzaWJsZSdcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpdGVtcy1jZW50ZXIgZmxleCAgcHItMSBjdXJzb3ItcG9pbnRlclwiIFtpY29uXT1cIml0ZW0uaXNDaGlsZHJlbkV4cGFuZGVkPydtaW51cyc6J3BsdXMnXCIgLz5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCAgdy1mdWxsIGJnLXNlY29uZGFyeSByb3VuZGVkLXhsXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0zIHJvdW5kZWQteGwgcm91bmRlZC10ci1ub25lIHJvdW5kZWQtYnItbm9uZVwiIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWQgPyAnYmctcHJpbWFyeScgOiAnYmctc2Vjb25kYXJ5LTIwMCdcbiAgICAgICAgICAgICAgICAgICAgXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktMyBweC00IGZsZXgtMSBoLVsxMDAlXVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1zdGFydCBmbGV4LTEgZ2FwLTEganVzdGlmeS1iZXR3ZWVuIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZmxleC0xIGNhcmQtbWluLWhlaWdodCBqdXN0aWZ5LWJldHdlZW4gaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cIm15LTAgZm9udC1ib2xkIHRleHQtWyM0MDQwNDBdIGxlYWRpbmctWzE5LjVweF1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRhdGEuTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvaDM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiF0ZXh0LVsxMHB4XSBmb250LWxpZ2h0IHRleHQtWyM0MDQwNDBdIGxlYWRpbmctWzEyLjFweF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7Z2V0Q2FyZFN1YkNhcHRpb24oaXRlbSl9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwXCIgY2xhc3M9XCJmbGV4IGl0ZW1zLWVuZCBoLVsxMDAlXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgKGNsaWNrKT1cInZpZXdEZXRhaWxzKGl0ZW0pOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm15LTAgdW5kZXJsaW5lIHRleHQtWyMzNDc5RTldIHRleHQtWzEycHhdIGxlYWRpbmctWzE2LjZweF0gY3Vyc29yLXBvaW50ZXIgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldyBkZXRhaWxzPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFpdGVtLmRhdGEuQ2hpbGRyZW5UeXBlIHx8IGl0ZW0uZGF0YS5DaGlsZHJlblR5cGUgIT09IGNoaWxkUGVybWlzc2lvblJlZlwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGgtW21heC1jb250ZW50XVwiPlxuICAgICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnIFtuZ0NsYXNzXT1cIml0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGg/J3Zpc2libGUnOidpbnZpc2libGUnXCIgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIiAoY2xpY2spPVwidG9nZ2xlQ2hpbGRyZW4oaXRlbSlcIiBjbGFzcz1cIml0ZW1zLWNlbnRlciBmbGV4ICBwci0xIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgIFtpY29uXT1cIml0ZW0uaXNDaGlsZHJlbkV4cGFuZGVkPydtaW51cyc6J3BsdXMnXCIgLz5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCAgdy1mdWxsIGJnLXNlY29uZGFyeSByb3VuZGVkLXhsXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0zIHJvdW5kZWQteGwgcm91bmRlZC10ci1ub25lIHJvdW5kZWQtYnItbm9uZVwiIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWQgPyAnYmctcHJpbWFyeScgOiAnYmctc2Vjb25kYXJ5LTIwMCdcbiAgICAgICAgICAgICAgICAgICAgXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktMyBweC00IGZsZXgtMSBmbGV4IGdhcC0yIGgtWzEwMCVdIGl0ZW1zLXN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIml0ZW0uZGF0YT8uU2VsZWN0ZWQgIT0gdW5kZWZpbmVkXCIgW2Rpc2FibGVkXT1cInRoaXMuaXNDaGVja2JveERpc2FibGVkKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cIm10LTEgY3Vyc29yLXBvaW50ZXJcIiBbKG5nTW9kZWwpXT1cIml0ZW0uZGF0YS5TZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyB0aGlzLnNhdmVSb2xlRHluYW1pYyhpdGVtKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLXN0YXJ0IGZsZXgtMSBnYXAtMSBqdXN0aWZ5LWJldHdlZW4gaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LTEgY2FyZC1taW4taGVpZ2h0IGp1c3RpZnktYmV0d2VlbiBoLVsxMDAlXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwibXktMCBmb250LWJvbGQgdGV4dC1bIzQwNDA0MF0gbGVhZGluZy1bMTkuNXB4XVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0udGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIhdGV4dC1bMTBweF0gZm9udC1saWdodCB0ZXh0LVsjNDA0MDQwXSBsZWFkaW5nLVsxMi4xcHhdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dldENhcmRTdWJDYXB0aW9uKGl0ZW0pfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMFwiIGNsYXNzPVwiZmxleCBpdGVtcy1lbmQgaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIChjbGljayk9XCJ2aWV3RGV0YWlscyhpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXktMCB1bmRlcmxpbmUgdGV4dC1bIzM0NzlFOV0gdGV4dC1bMTJweF0gbGVhZGluZy1bMTYuNnB4XSBjdXJzb3ItcG9pbnRlciBmb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3IGRldGFpbHM8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2FyZENoaWxkIGxldC1pdGVtPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBoLVttYXgtY29udGVudF1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCAgdy1mdWxsIGJnLXNlY29uZGFyeSByb3VuZGVkLXhsXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0zIHJvdW5kZWQteGwgcm91bmRlZC10ci1ub25lIHJvdW5kZWQtYnItbm9uZVwiIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uc2VsZWN0ZWQgPyAnYmctcHJpbWFyeScgOiAnYmctc2Vjb25kYXJ5LTIwMCdcbiAgICAgICAgICAgICAgICAgICAgXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktMyBweC00IGZsZXgtMSBmbGV4IGdhcC0yIGgtWzEwMCVdIGl0ZW1zLXN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIml0ZW0uZGF0YT8uU2VsZWN0ZWQgIT0gdW5kZWZpbmVkXCIgW2Rpc2FibGVkXT1cInRoaXMuaXNDaGVja2JveERpc2FibGVkKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cIm10LTEgY3Vyc29yLXBvaW50ZXJcIiBbKG5nTW9kZWwpXT1cIml0ZW0uZGF0YS5TZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyB0aGlzLnNhdmVSb2xlRHluYW1pYyhpdGVtKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLXN0YXJ0IGZsZXgtMSBnYXAtMSBqdXN0aWZ5LWJldHdlZW4gaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LTEgY2FyZC1taW4taGVpZ2h0IGp1c3RpZnktYmV0d2VlbiBoLVsxMDAlXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwibXktMCBmb250LWJvbGQgdGV4dC1bIzQwNDA0MF0gbGVhZGluZy1bMTkuNXB4XVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0udGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIhdGV4dC1bMTBweF0gZm9udC1saWdodCB0ZXh0LVsjNDA0MDQwXSBsZWFkaW5nLVsxMi4xcHhdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dldENhcmRTdWJDYXB0aW9uKGl0ZW0pfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMFwiIGNsYXNzPVwiZmxleCBpdGVtcy1lbmQgaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIChjbGljayk9XCJ2aWV3RGV0YWlsc0NoaWxkKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJteS0wIHVuZGVybGluZSB0ZXh0LVsjMzQ3OUU5XSB0ZXh0LVsxMnB4XSBsZWFkaW5nLVsxNi42cHhdIGN1cnNvci1wb2ludGVyIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcgZGV0YWlsczwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdmVyYmVuLWxlZnQtY2FyZC1kYXRhPlxuICAgICAgICA8L3ZlcmJlbi1sZWZ0LWNhcmQtZGF0YS12aWV3PlxuICAgICAgICA8dmVyYmVuLXJpZ2h0LWNhcmQtZGF0YS12aWV3ICpuZ0lmPVwidGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID09IDBcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3BhcmVudD5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0aGlzLmN1cnJlbnREYXRhXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHJvdW5kZWQteGwgaC1mdWxsIHctZnVsbCBqdXN0aWZ5LWJldHdlZW4gcmVsYXRpdmUgc3BhY2UteS00XCI+XG4gICAgICAgICAgICAgIDx2ZXJiZW5hLWlucHV0IG5hbWU9XCJOYW1lXCIgbGFiZWw9XCJOYW1lXCIgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlVGFibGUoKVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0aGlzLmN1cnJlbnREYXRhLmRhdGEuTmFtZVwiIC8+XG5cbiAgICAgICAgICAgICAgPCEtLSBidXR0b25zIC0tPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gYm90dG9tLTggbGVmdC0wIHJpZ2h0LTBcIj5cbiAgICAgICAgICAgICAgICA8dmVyYmVuYS1idXR0b24gY2xhc3M9XCJ2ZXJiZW4tZGVsZXRlLWJ1dHRvblwiIHRleHQ9XCJEZWxldGVcIj48L3ZlcmJlbmEtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgICA8dmVyYmVuYS1idXR0b24gY2xhc3M9XCJ2ZXJiZW4tc3dpdGNoLWJ1dHRvblwiIChjbGljayk9XCJnb1RvVGFibGVWaWV3KClcIlxuICAgICAgICAgICAgICAgICAgICB0ZXh0PVwiU3dpdGNoIFRvIFRhYmxlXCI+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDx2ZXJiZW5hLWJ1dHRvbiBjbGFzcz1cInZlcmJlbi1wcmltYXJ5LWJ1dHRvblwiIChjbGljayk9XCJ0aGlzLnNhdmVSb2xlKClcIiB0ZXh0PVwiU2F2ZVwiPjwvdmVyYmVuYS1idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3ZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldz5cbiAgICAgICAgPCEtLSA8dmVyYmVuLXJpZ2h0LWNhcmQtZGF0YS12aWV3PlxuICAgICAgICAgIHllc2hoaGhoaFxuICAgICAgICA8L3ZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldz4gLS0+XG5cbiAgICAgICAgPHZlcmJlbi1jYXJkLWRhdGEtdmlldy1mb290ZXIgKm5nSWY9XCJ0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPT0gMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiF2ZGN2Lmhhc0N1cnJlbnRJdGVtKCkgJiYgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID09IDBcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm1lc3NhZ2UtbG9nLWJ1dHRvbi1jb250YWluZXIgZmxleCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uIFtmb250V2VpZ2h0XT1cIidib2xkJ1wiIFtiZ0NvbG9yXT1cIicjOEU4RDg3J1wiIFtib3JkZXJSYWRpdXNdPVwiJzRweCdcIiBbdGV4dENvbG9yXT1cIicjZmZmJ1wiXG4gICAgICAgICAgICAgICAgW3RleHRdPVwiJ0RlbGV0ZSdcIj5cbiAgICAgICAgICAgICAgPC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgge3t2ZGN2Lmhhc0N1cnJlbnRJdGVtKCk/J2ZsZXgtMSc6Jyd9fSBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXIgZ2FwLTVcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdpbmF0b3ItdGV4dFwiPnt7IGNhcmREYXRhLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9hZE1vcmUoKVwiIGNsYXNzPVwibG9hZC1tb3JlIHZpZXctbGlua3NcIj5Mb2FkIG1vcmU8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3ZlcmJlbi1jYXJkLWRhdGEtdmlldy1mb290ZXI+XG4gICAgICA8L3ZlcmJlbi1jYXJkLWRhdGEtdmlldz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNvbHVtbi1jb250ZW50PlxuICAgICAgPHZlcmJlbi12aXNpYmxlLWNvbHVtbiAoY29sdW1uc1VwZGF0ZWQpPVwib25Db2x1bW5zVXBkYXRlZCgkZXZlbnQpXCIgW2JvcmRlcl09XCInMXB4IHNvbGlkIHJnYmEoMjEyLCAxNjAsIDcsIDEpJ1wiXG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjEwcHhcIiBib3hTaGFkb3c9XCIycHggMnB4IDJweCAwcHggc2lsdmVyXCIgYmdDb2xvcj1cIndoaXRlXCIgd2lkdGg9XCI0MDBweFwiIHRleHRDb2xvcj1cImJsYWNrXCIgcGQ9XCIxcmVtXCJcbiAgICAgICAgcHJpbWFyeUNvbG9yPVwiI0ZGRTY4MVwiIHNlY29uZGFyeUNvbG9yPVwiIzM0NzlFOVwiIFtjb2x1bW5zXT1cInZpc2libGVDb2x1bW5zXCJcbiAgICAgICAgW2Rpc3BsYXllZENvbHVtbnNdPVwiNVwiPjwvdmVyYmVuLXZpc2libGUtY29sdW1uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZmlsdGVyLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLXRhYmxlLWZpbHRlciAoZmlsdGVyc0FwcGxpZWQpPVwib25GaWx0ZXJVcGRhdGVkKCRldmVudClcIiBbYm9yZGVyXT1cIicxcHggc29saWQgcmdiYSgyMTIsIDE2MCwgNywgMSknXCJcbiAgICAgICAgYm9yZGVyUmFkaXVzPVwiMTBweFwiIGJveFNoYWRvdz1cIjJweCAycHggMnB4IDBweCBzaWx2ZXJcIiBiZ0NvbG9yPVwid2hpdGVcIiB3aWR0aD1cIjQyMHB4XCIgdGV4dENvbG9yPVwiYmxhY2tcIiBwZD1cIjFyZW1cIlxuICAgICAgICBwcmltYXJ5Q29sb3I9XCIjRkZFNjgxXCIgc2Vjb25kYXJ5Q29sb3I9XCIjMzQ3OUU5XCIgdGVydGlhcnlDb2xvcj1cIiM0MDQwNDBcIiBbZmlsdGVyT3B0aW9uc109XCJmaWx0ZXJBcnJheVwiXG4gICAgICAgIFttYXhGaWx0ZXJMZW5ndGhdPVwiM1wiPjwvdmVyYmVuLXRhYmxlLWZpbHRlcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHNvcnQtY29udGVudD5cbiAgICAgIDx2ZXJiZW4tc29ydC10YWJsZSAoc2VsZWN0ZWRPcHRpb25zKT1cIm9uU29ydFVwZGF0ZWQoJGV2ZW50KVwiIFtib3JkZXJdPVwiJzFweCBzb2xpZCByZ2JhKDIxMiwgMTYwLCA3LCAxKSdcIlxuICAgICAgICBib3JkZXJSYWRpdXM9XCIxMHB4XCIgYm94U2hhZG93PVwiMnB4IDJweCAycHggMHB4IHNpbHZlclwiIGJnQ29sb3I9XCJ3aGl0ZVwiIHdpZHRoPVwiNDAwcHhcIiB0ZXh0Q29sb3I9XCJibGFja1wiIHBkPVwiMXJlbVwiXG4gICAgICAgIHByaW1hcnlDb2xvcj1cIiNGRkU2ODFcIiBzZWNvbmRhcnlDb2xvcj1cIiMzNDc5RTlcIiB0ZXJ0aWFyeUNvbG9yPVwiIzQwNDA0MFwiIFtlbmFibGVEcmFnQW5kRHJvcF09XCJ0cnVlXCJcbiAgICAgICAgW3NvcnRPcHRpb25zXT1cInNvcnRPcHRpb25zXCI+PC92ZXJiZW4tc29ydC10YWJsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGV4cG9ydC1jb250ZW50PlxuICAgICAgPGxpYi1kYXRhLWV4cG9ydCBbZGF0YV09XCJkYXRhXCIgKGV4cG9ydERhdGFFdmVudCk9XCJoYW5kbGVFeHBvcnQoJGV2ZW50KVwiPlxuICAgICAgPC9saWItZGF0YS1leHBvcnQ+XG4gICAgPC9kaXY+XG4gIDwvdmVyYmVuLWRhdGEtdmlldz5cbiAgPGRpdiAqbmdJZj1cInZkdi5pc1RhYmxlVmlld1wiIGNsYXNzPVwiZmxleCBnYXAtMiBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZS1sb2ctYnV0dG9uLWNvbnRhaW5lciBmbGV4IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgPHZlcmJlbmEtYnV0dG9uIFtmb250V2VpZ2h0XT1cIidib2xkJ1wiIFtiZ0NvbG9yXT1cIicjOEU4RDg3J1wiIFtib3JkZXJSYWRpdXNdPVwiJzRweCdcIiBbdGV4dENvbG9yXT1cIicjZmZmJ1wiXG4gICAgICAgIFt0ZXh0XT1cIidEZWxldGUnXCI+XG4gICAgICA8L3ZlcmJlbmEtYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIGl0ZW1zLWNlbnRlciBnYXAtNVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJwYWdpbmF0b3ItdGV4dFwiPnt7IGNhcmREYXRhLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3Bhbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cImxvYWRNb3JlKClcIiBjbGFzcz1cImxvYWQtbW9yZSB2aWV3LWxpbmtzXCI+TG9hZCBtb3JlPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|