verben-authentication-ui 0.7.1 → 0.7.3

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.
@@ -44,6 +44,7 @@ export class RoleControlComponent {
44
44
  cardContextHistoryData = [];
45
45
  cardDataView;
46
46
  dataView;
47
+ popUp;
47
48
  isGlobal = true;
48
49
  serviceName = null;
49
50
  application = null;
@@ -449,6 +450,7 @@ export class RoleControlComponent {
449
450
  const cardData = this.cardData.find((x) => x.data == data);
450
451
  if (cardData) {
451
452
  this.viewDetails(cardData);
453
+ this.closePopUp();
452
454
  }
453
455
  }
454
456
  viewDetails(context) {
@@ -1158,29 +1160,40 @@ export class RoleControlComponent {
1158
1160
  }
1159
1161
  return returnArray;
1160
1162
  }
1163
+ closePopUp() {
1164
+ if (this.popUp.dropdownOpen == true) {
1165
+ this.popUp.toggleDropdown();
1166
+ this.openDropdownId = null;
1167
+ this.onClose();
1168
+ }
1169
+ }
1161
1170
  editValue(value) {
1162
1171
  const card = this.cardData.find((x) => x.data.Id == value.Id);
1163
1172
  if (card && this.cardDataView) {
1164
1173
  this.dataView.toggleView();
1165
1174
  card.selected = true;
1166
1175
  this.currentData = this.cardDataView.onItemClick(card);
1176
+ this.closePopUp();
1167
1177
  // if (this.currentData) {
1168
1178
  // this.form.controls['Name'].setValue(this.currentData.data?.Name);
1169
1179
  // }
1170
1180
  }
1171
1181
  }
1172
1182
  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 });
1173
- 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 }], 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]=\"this.cardContextHistory.length == 0\"\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 [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\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-row=\"row\" let-value>\n <verben-pop-Up [customStyles]=\"{'z-index': '99'}\" [dropdownOpen]=\"isDropdownOpen(row)\"\n [enableMouseLeave]=\"false\" (close)=\"onClose()\">\n <verben-svg class=\"cursor-pointer actions-icon\" (click)=\"openDropdown(row)\" dropdown-trigger\n icon=\"list\"></verben-svg>\n <div class=\"pop-up-content flex flex-col\" dropdown-content>\n <div (click)=\"editValue(value)\" 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-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)=\"vdv.toggleView()\"\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}\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", "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", "size"] }, { kind: "component", type: i8.DataViewComponent, selector: "verben-data-view", inputs: ["buttonClass", "iconClass", "activeIconClass", "columnCustomClass", "filterCustomClass", "sortCustomClass", "exportCustomClass", "selectCustomClass", "zIndex", "createCustomClass", "tableIcon", "cardIcon", "cardClass", "tableClass", "searchKey", "searchValue", "viewState", "searchTemplate", "columnTemplate", "filterTemplate", "sortTemplate", "children", "exportTemplate", "createTemplate", "selectedColumnCount", "selectedSortCount", "selectedFilterTableCount", "inputWidth", "showColumnChild", "showSortChild", "showFilterChild", "showExportChild", "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"] }, { 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"] }, { 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"] }, { kind: "component", type: i8.DataExportComponent, selector: "lib-data-export", inputs: ["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", "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", "svgPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "styleType", "svg", "svgWidth", "svgHeight", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i8.VerbenPopUpComponent, selector: "verben-pop-Up", inputs: ["dropdownOpen", "dropdownWidth", "color", "customStyles", "popUpClass", "border", "borderRadius", "enableMouseLeave"], outputs: ["dropdownOpenChange", "close"] }, { kind: "pipe", type: i7.DatePipe, name: "date" }] });
1183
+ 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: "popUp", first: true, 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]=\"this.cardContextHistory.length == 0\"\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 [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\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-row=\"row\" let-value>\n <verben-pop-Up #popup [customStyles]=\"{'z-index': '99'}\" [dropdownOpen]=\"isDropdownOpen(row)\"\n [enableMouseLeave]=\"false\" (close)=\"onClose()\">\n <verben-svg class=\"cursor-pointer actions-icon\" (click)=\"openDropdown(row)\" dropdown-trigger\n icon=\"list\"></verben-svg>\n <div class=\"pop-up-content flex flex-col\" dropdown-content>\n <div (click)=\"editValue(value)\" 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-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)=\"vdv.toggleView()\"\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}\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", "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", "size"] }, { kind: "component", type: i8.DataViewComponent, selector: "verben-data-view", inputs: ["buttonClass", "iconClass", "activeIconClass", "columnCustomClass", "filterCustomClass", "sortCustomClass", "exportCustomClass", "selectCustomClass", "zIndex", "createCustomClass", "tableIcon", "cardIcon", "cardClass", "tableClass", "searchKey", "searchValue", "viewState", "searchTemplate", "columnTemplate", "filterTemplate", "sortTemplate", "children", "exportTemplate", "createTemplate", "selectedColumnCount", "selectedSortCount", "selectedFilterTableCount", "inputWidth", "showColumnChild", "showSortChild", "showFilterChild", "showExportChild", "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"] }, { 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"] }, { 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"] }, { kind: "component", type: i8.DataExportComponent, selector: "lib-data-export", inputs: ["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", "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", "svgPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "styleType", "svg", "svgWidth", "svgHeight", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i8.VerbenPopUpComponent, selector: "verben-pop-Up", inputs: ["dropdownOpen", "dropdownWidth", "color", "customStyles", "popUpClass", "border", "borderRadius", "enableMouseLeave"], outputs: ["dropdownOpenChange", "close"] }, { kind: "pipe", type: i7.DatePipe, name: "date" }] });
1174
1184
  }
1175
1185
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RoleControlComponent, decorators: [{
1176
1186
  type: Component,
1177
- 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]=\"this.cardContextHistory.length == 0\"\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 [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\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-row=\"row\" let-value>\n <verben-pop-Up [customStyles]=\"{'z-index': '99'}\" [dropdownOpen]=\"isDropdownOpen(row)\"\n [enableMouseLeave]=\"false\" (close)=\"onClose()\">\n <verben-svg class=\"cursor-pointer actions-icon\" (click)=\"openDropdown(row)\" dropdown-trigger\n icon=\"list\"></verben-svg>\n <div class=\"pop-up-content flex flex-col\" dropdown-content>\n <div (click)=\"editValue(value)\" 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-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)=\"vdv.toggleView()\"\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}\n"] }]
1187
+ 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]=\"this.cardContextHistory.length == 0\"\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 [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\n <ng-container libColumn=\"actions\">\n <ng-template #cell let-row=\"row\" let-value>\n <verben-pop-Up #popup [customStyles]=\"{'z-index': '99'}\" [dropdownOpen]=\"isDropdownOpen(row)\"\n [enableMouseLeave]=\"false\" (close)=\"onClose()\">\n <verben-svg class=\"cursor-pointer actions-icon\" (click)=\"openDropdown(row)\" dropdown-trigger\n icon=\"list\"></verben-svg>\n <div class=\"pop-up-content flex flex-col\" dropdown-content>\n <div (click)=\"editValue(value)\" 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-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)=\"vdv.toggleView()\"\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}\n"] }]
1178
1188
  }], ctorParameters: () => [{ type: i1.AuthorizationService }, { type: i2.RoleControlService }, { type: i3.UtilService }, { type: i4.HttpWebRequestService }, { type: i0.ChangeDetectorRef }, { type: i5.FormBuilder }, { type: i6.EnvironmentService }], propDecorators: { cardDataView: [{
1179
1189
  type: ViewChild,
1180
1190
  args: ['vdcv']
1181
1191
  }], dataView: [{
1182
1192
  type: ViewChild,
1183
1193
  args: ['vdv']
1194
+ }], popUp: [{
1195
+ type: ViewChild,
1196
+ args: ['popup']
1184
1197
  }], isGlobal: [{
1185
1198
  type: Input
1186
1199
  }], serviceName: [{
@@ -1192,4 +1205,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
1192
1205
  }], searchDebounceTime: [{
1193
1206
  type: Input
1194
1207
  }] } });
1195
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1jb250cm9sLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1hdXRoZW50aWNhdGlvbi11aS9zcmMvbGliL2NvbXBvbmVudHMvcm9sZS1jb250cm9sL3JvbGUtY29udHJvbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tYXV0aGVudGljYXRpb24tdWkvc3JjL2xpYi9jb21wb25lbnRzL3JvbGUtY29udHJvbC9yb2xlLWNvbnRyb2wuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBRUwsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFJTCxjQUFjLEdBR2YsTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRTVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFReEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBUzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUczRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFJckUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFFN0MsSUFBSyxlQUlKO0FBSkQsV0FBSyxl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Q0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU07b0NBQ3BDLHFCQUFxQixFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUM7aUNBQzdELENBQUM7Z0NBQ0YsT0FBTyxHQUFHLENBQUM7NEJBQ2IsQ0FBQyxDQUFDOzRCQUNGLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTs0QkFDakIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJOzRCQUNyQixFQUFFLEVBQUUsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTs0QkFDakUsRUFBRSxFQUFFLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7NEJBQ2pFLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRTs0QkFDckIsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFOzRCQUNyQixTQUFTLEVBQUUsV0FBVyxDQUFDLEdBQUc7NEJBQzFCLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTs0QkFDN0IsSUFBSSxFQUNGLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7NEJBQ2pFLFdBQVcsRUFDVCxVQUFVLEdBQUcsQ0FBQyxDQUFDO2dDQUNiLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVc7Z0NBQ2pELENBQUMsQ0FBQyxFQUFFOzRCQUNSLE1BQU0sRUFDSixVQUFVLEdBQUcsQ0FBQyxDQUFDO2dDQUNiLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU07Z0NBQzVDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNOzRCQUNwQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMseUJBQXlCLENBQ3BELE1BQU0sQ0FBQyxJQUFJLENBQ1o7eUJBQ0YsQ0FBQzt3QkFDRixPQUFPLE9BQU8sQ0FBQztvQkFDakIsQ0FBQyxDQUFDO2lCQUNILENBQUM7Z0JBQ0YsTUFBTSxTQUFTLEdBQUcsV0FBVztvQkFDM0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksQ0FBQztvQkFDcEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNQLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUM7b0JBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLGNBQWMsQ0FBQyxFQUFFLENBQUM7b0JBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUM7b0JBQzFELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUM7b0JBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQyxXQUFXLENBQUM7b0JBQzlELGNBQWMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQzt3QkFDaEUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7d0JBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDO3dCQUNqRSxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTs0QkFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0NBQ3RELGNBQWMsQ0FBQyxJQUFJLENBQUM7NEJBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzs0QkFDbEUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVc7Z0NBQzdELENBQUMsQ0FBQyxXQUFXLENBQUM7d0JBQ2xCLENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO29CQUNILG1FQUFtRTtvQkFFbkUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLHFCQUFxQjtvQkFDckIsa0JBQWtCO29CQUNsQiw0REFBNEQ7b0JBQzVELFFBQVE7b0JBQ1IsK0JBQStCO29CQUMvQixpREFBaUQ7b0JBQ2pELHFFQUFxRTtvQkFDckUsa0NBQWtDO29CQUNsQyw0QkFBNEI7b0JBQzVCLGdCQUFnQjtvQkFDaEIseURBQXlEO29CQUN6RCxpQkFBaUI7b0JBQ2pCLDJCQUEyQjtvQkFDM0IsZ0RBQWdEO29CQUNoRCxtQkFBbUI7b0JBQ25CLG9CQUFvQjtvQkFDcEIsK0NBQStDO29CQUMvQyxxQkFBcUI7b0JBQ3JCLCtCQUErQjtvQkFDL0Isb0RBQW9EO29CQUNwRCx1QkFBdUI7b0JBQ3ZCLHdCQUF3QjtvQkFDeEIsNEJBQTRCO29CQUM1QixlQUFlO29CQUNmLGNBQWM7b0JBQ2QsV0FBVztvQkFDWCxVQUFVO29CQUNWLE9BQU87b0JBQ1AsSUFBSTtnQkFDTixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULE1BQU0sS0FBSyxHQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsT0FBTztnQkFDTCxHQUFHLENBQUM7Z0JBQ0osWUFBWSxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQy9ELE9BQU87d0JBQ0wsR0FBRyxDQUFDO3dCQUNKLFdBQVcsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FDL0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQ0Y7cUJBQ2xCLENBQUM7Z0JBQ0osQ0FBQyxDQUFrQjthQUNwQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFTO1FBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDN0IsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsSUFBUztRQUN0QixPQUFPLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsWUFBWSxDQUFDLFVBQW1CLElBQVMsQ0FBQztJQUMxQyxhQUFhLENBQUMsS0FBc0M7UUFDbEQsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDbEIsS0FBSyxRQUFRO2dCQUNYLElBQUksYUFBYSxHQUFlO29CQUM5QixZQUFZLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTt3QkFDM0MsSUFBSSxPQUFPLEdBQXNCOzRCQUMvQixZQUFZLEVBQUUsWUFBWSxDQUFDLE1BQU07NEJBQ2pDLFFBQVEsRUFBRSxLQUFLOzRCQUNmLFdBQVcsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dDQUN6QyxJQUFJLEdBQUcsR0FBcUI7b0NBQzFCLFFBQVEsRUFBRSxLQUFLO29DQUNmLElBQUksRUFBRSxNQUFNO29DQUNaLElBQUksRUFBRSxFQUFFO29DQUNSLE9BQU8sRUFBRSxFQUFFO29DQUNYLEVBQUUsRUFBRSxFQUFFO29DQUNOLEVBQUUsRUFBRSxFQUFFO29DQUNOLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRTtvQ0FDckIsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO29DQUNyQixTQUFTLEVBQUUsV0FBVyxDQUFDLEdBQUc7b0NBQzFCLFFBQVEsRUFBRSxFQUFFO29DQUNaLElBQUksRUFBRSxFQUFFO29DQUNSLFdBQVcsRUFBRSxFQUFFO29DQUNmLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNO29DQUN0QyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDO2lDQUM3RCxDQUFDO2dDQUNGLE9BQU8sR0FBRyxDQUFDOzRCQUNiLENBQUMsQ0FBQzs0QkFDRixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7NEJBQ2pCLElBQUksRUFBRSxFQUFFOzRCQUNSLEVBQUUsRUFBRSxFQUFFOzRCQUNOLEVBQUUsRUFBRSxFQUFFOzRCQUNOLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRTs0QkFDckIsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFOzRCQUNyQixTQUFTLEVBQUUsV0FBVyxDQUFDLEdBQUc7NEJBQzFCLFFBQVEsRUFBRSxFQUFFOzRCQUNaLElBQUksRUFBRSxFQUFFOzRCQUNSLFdBQVcsRUFBRSxFQUFFOzRCQUNmLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNOzRCQUN0QyxzQkFBc0IsRUFBRSxJQUFJLENBQUMseUJBQXlCLENBQ3BELE1BQU0sQ0FBQyxJQUFJLENBQ1o7eUJBQ0YsQ0FBQzt3QkFFRixPQUFPLE9BQU8sQ0FBQztvQkFDakIsQ0FBQyxDQUFDO29CQUNGLFlBQVksRUFBRSxZQUFZLENBQUMsVUFBVTtvQkFDckMsSUFBSSxFQUFFLEVBQUU7b0JBQ1IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO29CQUN6QyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7b0JBQ3pDLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRTtvQkFDckIsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO29CQUNyQixTQUFTLEVBQUUsV0FBVyxDQUFDLEdBQUc7b0JBQzFCLFFBQVEsRUFBRSxFQUFFO29CQUNaLElBQUksRUFBRSxFQUFFO29CQUNSLFdBQVcsRUFBRSxFQUFFO29CQUNmLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTO29CQUM1RCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTTtpQkFDdkMsQ0FBQztnQkFDRixNQUFNLFFBQVEsR0FBYTtvQkFDekIsUUFBUSxFQUFFLEtBQUs7b0JBQ2YsS0FBSyxFQUFFLGFBQWEsQ0FBQyxJQUFJO29CQUN6QixJQUFJLEVBQUUsYUFBYTtvQkFDbkIsSUFBSSxFQUFFLEVBQUU7b0JBQ1IsUUFBUSxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7d0JBQzdDLE9BQU87NEJBQ0wsUUFBUSxFQUFFLEtBQUs7NEJBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOzRCQUNwQyxJQUFJLEVBQUUsQ0FBQzs0QkFDUCxJQUFJLEVBQUUsRUFBRTs0QkFDUixRQUFRLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQ0FDaEMsT0FBTztvQ0FDTCxRQUFRLEVBQUUsS0FBSztvQ0FDZixLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7b0NBQ3BDLElBQUksRUFBRSxDQUFDO29DQUNQLElBQUksRUFBRSxFQUFFO29DQUNSLFFBQVEsRUFBRSxFQUFFO2lDQUNiLENBQUM7NEJBQ0osQ0FBQyxDQUFDO3lCQUNILENBQUM7b0JBQ0osQ0FBQyxDQUFDO2lCQUNILENBQUM7Z0JBQ0YsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM3QixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0JBQ2xDLE1BQU07WUFDUjtnQkFDRSxNQUFNO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhLEdBQVksS0FBSyxDQUFDO0lBQy9CLGlCQUFpQixDQUFDLFlBQW9CLElBQUcsQ0FBQztJQUMxQyxZQUFZLEtBQUksQ0FBQztJQUNqQixnQkFBZ0IsQ0FBQyxjQUE2QjtRQUM1QyxNQUFNLGdCQUFnQixHQUFtQyxFQUFFLENBQUM7UUFDNUQsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzdCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDdEQsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQ2pFLENBQUM7WUFDRixJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNoQixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxLQUFLLENBQUMscUJBQXFCLENBQUMsV0FBb0IsS0FBSztRQUNuRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6QixNQUFNLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3pDLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixJQUFJLEVBQUUsTUFBTTthQUNiLENBQUMsQ0FBQztZQUNILFFBQVEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM1QixJQUFJLE9BQU8sR0FBMEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNqRSxPQUFPO2dCQUNMLFlBQVksRUFBRSxDQUFDLENBQUMsSUFBSTtnQkFDcEIsV0FBVyxFQUFFLENBQUMsQ0FBQyxLQUFLO2dCQUNwQixRQUFRLEVBQUUsY0FBYyxDQUFDLEdBQUc7Z0JBQzVCLElBQUksRUFDRixDQUFDLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQy9ELENBQUMsQ0FBRSxlQUFlLENBQ2QsQ0FBQyxDQUFDLFNBQXlDLENBQ1Y7b0JBQ3JDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO2dCQUMzQixJQUFJLEVBQUUsdUJBQXVCLENBQUMsSUFBSTthQUNuQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ1gsWUFBWSxFQUFFLFFBQVE7WUFDdEIsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU07WUFDM0MsUUFBUSxFQUFFLGNBQWMsQ0FBQyxHQUFHO1lBQzVCLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxFQUFFO1NBQzVCLENBQUMsQ0FBQztRQUNILE1BQU0sU0FBUyxHQUNiLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDMUIsQ0FBQyxDQUFDO2dCQUNFLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7Z0JBQ2hDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUs7YUFDbEM7WUFDSCxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ1gsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixNQUFNLEdBQUcsR0FBRyxnQkFBZ0I7WUFDMUIsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQ25CLDBCQUEwQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLE1BQ3JELElBQUksQ0FBQyxRQUNQLEVBQUUsQ0FDSDtZQUNILENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNwQixTQUFTO2dCQUNQLENBQUMsQ0FBQyxzQkFBc0IsSUFBSSxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUU7Z0JBQzdFLENBQUMsQ0FBQyxzQkFBc0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUN6QyxPQUFPLENBQ1IsQ0FBQztRQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksR0FBRyxZQUFZLGFBQWEsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUF3QixDQUFDO1lBQzFDLElBQUksTUFBTSxHQUFJLEdBQXlCLENBQUMsTUFBTSxDQUFDO1lBQy9DLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBQ0QsS0FBSyxDQUFDLHVCQUF1QjtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxPQUFPLEdBQTBCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDakUsT0FBTztnQkFDTCxZQUFZLEVBQUUsQ0FBQyxDQUFDLElBQUk7Z0JBQ3BCLFdBQVcsRUFBRSxDQUFDLENBQUMsS0FBSztnQkFDcEIsUUFBUSxFQUFFLGNBQWMsQ0FBQyxHQUFHO2dCQUM1QixJQUFJLEVBQ0YsQ0FBQyxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO29CQUMvRCxDQUFDLENBQUUsZUFBZSxDQUNkLENBQUMsQ0FBQyxTQUF5QyxDQUNWO29CQUNyQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsRUFBRTtnQkFDM0IsSUFBSSxFQUFFLHVCQUF1QixDQUFDLElBQUk7YUFDbkMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNYLFlBQVksRUFBRSxRQUFRO1lBQ3RCLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNO1lBQzNDLFFBQVEsRUFBRSxjQUFjLENBQUMsR0FBRztZQUM1QixJQUFJLEVBQUUsa0JBQWtCLENBQUMsRUFBRTtTQUM1QixDQUFDLENBQUM7UUFDSCxNQUFNLFNBQVMsR0FDYixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQzFCLENBQUMsQ0FBQztnQkFDRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUNoQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO2FBQ2xDO1lBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNYLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCO1lBQzFCLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUNuQiwwQkFBMEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUNyRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQ2pCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUNwQjtZQUNILENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNwQixTQUFTO2dCQUNQLENBQUMsQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUU7Z0JBQ2xHLENBQUMsQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUM5RCxPQUFPLENBQ1IsQ0FBQztRQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksR0FBRyxZQUFZLGFBQWEsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxNQUFNLEdBQUcsR0FBd0IsQ0FBQztZQUN0QyxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO0lBQ0gsQ0FBQztJQUNELGVBQWUsQ0FBQyxjQUFzQztRQUNwRCxvQ0FBb0M7UUFDcEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7WUFDckMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFDRCxhQUFhLENBQUMsWUFBMkI7UUFDdkMsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBcUM7UUFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxZQUFZLENBQUMsWUFBNEI7UUFDdkMsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUNPLFdBQVcsQ0FBQyxJQUFvQjtRQUN0QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sVUFBVSxHQUFHO1lBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ2pCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3JFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWIsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSx5QkFBeUIsRUFBRSxDQUFDLENBQUM7UUFDekUsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDaEMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7WUFDakMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMzQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUM7WUFDVixFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO1lBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFDN0IsWUFBWSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDbkMsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ3JCLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRTtZQUNyQixTQUFTLEVBQUUsV0FBVyxDQUFDLEdBQUc7WUFDMUIsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUMzQixJQUFJLEVBQUUsRUFBRTtZQUNSLFdBQVcsRUFBRSxFQUFFO1lBQ2YsTUFBTSxFQUFFLEVBQUU7U0FDWCxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxTQUFTLEdBQWE7UUFDcEIsT0FBTztRQUNQLGFBQWE7UUFDYixTQUFTO1FBQ1QsUUFBUTtRQUNSLG9CQUFvQjtRQUNwQixLQUFLO1FBQ0wsS0FBSztRQUNMLEtBQUs7UUFDTCxXQUFXO1FBQ1gsVUFBVTtLQUNYLENBQUM7SUFFRixVQUFVO1FBQ1IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGNBQWM7UUFDWixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUM3QixJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUM1QyxDQUFDO1FBQ0YsSUFBSSxXQUFXLEdBQWtCLEVBQUUsQ0FBQztRQUNwQyxNQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7UUFDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3RDLElBQUksV0FBVyxDQUFDO1lBQ2hCLEdBQUcsQ0FBQztnQkFDRixXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwRSxDQUFDLFFBQVEsUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUV6QyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUNmLEVBQUUsRUFBRSxTQUFTLEdBQUcsQ0FBQztnQkFDakIsRUFBRSxFQUFFLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQkFDOUIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDO2dCQUNuQyxJQUFJLEVBQUUsRUFBRTtnQkFDUixXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDakMsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO2dCQUNyQixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUU7Z0JBQ3JCLFNBQVMsRUFBRSxXQUFXLENBQUMsR0FBRztnQkFDMUIsUUFBUSxFQUFFLFNBQVMsU0FBUyxHQUFHLENBQUMsRUFBRTtnQkFDbEMsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsV0FBVyxFQUFFLEVBQUU7Z0JBQ2YsTUFBTSxFQUFFLEVBQUU7Z0JBQ1Ysc0JBQXNCLEVBQUUsRUFBRTthQUMzQixDQUFDLENBQUM7WUFDSCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsYUFBYTtRQUNYLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQzdCLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQ2xELENBQUM7UUFDRixJQUFJLFdBQVcsR0FBaUIsRUFBRSxDQUFDO1FBQ25DLE1BQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQztRQUM5QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdEMsSUFBSSxXQUFXLENBQUM7WUFDaEIsR0FBRyxDQUFDO2dCQUNGLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFFLENBQUMsUUFBUSxRQUFRLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBRXpDLFdBQVcsQ0FBQyxJQUFJLENBQUM7Z0JBQ2YsRUFBRSxFQUFFLFFBQVEsR0FBRyxDQUFDO2dCQUNoQixFQUFFLEVBQUUsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO2dCQUM3QixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLENBQUM7Z0JBQ3pDLElBQUksRUFBRSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxFQUFFO2dCQUNYLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRTtnQkFDckIsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO2dCQUNyQixTQUFTLEVBQUUsV0FBVyxDQUFDLEdBQUc7Z0JBQzFCLFFBQVEsRUFBRSxTQUFTLFFBQVEsR0FBRyxDQUFDLEVBQUU7Z0JBQ2pDLElBQUksRUFBRSxFQUFFO2dCQUNSLFdBQVcsRUFBRSxFQUFFO2dCQUNmLE1BQU0sRUFBRSxFQUFFO2dCQUNWLHFCQUFxQixFQUFFLEVBQUU7YUFDMUIsQ0FBQyxDQUFDO1lBQ0gsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3QixDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFpQjtRQUN6QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlELElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkQsMEJBQTBCO1lBQzFCLHNFQUFzRTtZQUN0RSxJQUFJO1FBQ04sQ0FBQztJQUNILENBQUM7d0dBL3hDVSxvQkFBb0I7NEZBQXBCLG9CQUFvQiwwWUM3RGpDLHd3ZUFrUUE7OzRGRHJNYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0Usa0JBQWtCO21SQWNULFlBQVk7c0JBQTlCLFNBQVM7dUJBQUMsTUFBTTtnQkFDQyxRQUFRO3NCQUF6QixTQUFTO3VCQUFDLEtBQUs7Z0JBQ1AsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm9sZUNvbnRyb2xTZXJ2aWNlIH0gZnJvbSAnLi9yb2xlLWNvbnRyb2wuc2VydmljZSc7XG5pbXBvcnQge1xuICBDYXJkRGF0YSxcbiAgQ2FyZERhdGFWaWV3Q29tcG9uZW50LFxuICBDb2x1bW5EZWZpbml0aW9uLFxuICBEYXRhRmlsdGVyVHlwZSxcbiAgRGF0YVZpZXdDb21wb25lbnQsXG4gIElEYXRhRmlsdGVyLFxufSBmcm9tICd2ZXJiZW4tbmctdWknO1xuaW1wb3J0IHsgUm9sZSB9IGZyb20gJy4uLy4uL21vZGVscy9Sb2xlJztcbmltcG9ydCB7IGJhc2VTdHlsZSB9IGZyb20gJy4vYmFzZS10YWJsZS1zdHlsZSc7XG5pbXBvcnQgeyBPYmplY3RTdGF0ZSB9IGZyb20gJy4uLy4uL21vZGVscy9vYmplY3Qtc3RhdGUnO1xuaW1wb3J0IHsgUm9sZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tb2RlbHMvUm9sZUNvbnRleHQnO1xuaW1wb3J0IHsgVUlzIH0gZnJvbSAnLi9VSXMnO1xuaW1wb3J0IHsgUm9sZUFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9Sb2xlQWN0aW9uJztcbmltcG9ydCB7IFVJQWN0aW9ucyB9IGZyb20gJy4vVUlBY3Rpb25zJztcbmltcG9ydCB7IE1hcHBlZFJvbGUgfSBmcm9tICcuL01hcHBlZFJvbGUnO1xuaW1wb3J0IHtcbiAgQXV0aG9yaXphdGlvbkNvbmZpZyxcbiAgQXV0aG9yaXphdGlvblNlcnZpY2UsXG59IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGhvcml6YXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBNYXBwZWRSb2xlQ29udGV4dCB9IGZyb20gJy4vTWFwcGVkUm9sZUNvbnRleHQnO1xuaW1wb3J0IHsgTWFwcGVkUm9sZUFjdGlvbiB9IGZyb20gJy4vTWFwcGVkUm9sZUFjdGlvbic7XG5pbXBvcnQgeyBDaGlsZHJlblR5cGUgfSBmcm9tICcuL0NoaWxkcmVuVHlwZSc7XG5pbXBvcnQge1xuICBGb3JtQnVpbGRlcixcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Hcm91cCxcbiAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVXRpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91dGlsLnNlcnZpY2UnO1xuaW1wb3J0IHsgSHR0cFdlYlJlcXVlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC13ZWItcmVxdWVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IEVycm9yUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvRXJyb3JSZXNwb25zZSc7XG5pbXBvcnQgeyBQYWdlZFJlc3VsdCB9IGZyb20gJy4uLy4uL21vZGVscy9QYWdlZFJlc3VsdCc7XG5pbXBvcnQgeyBTZWFyY2hQcm9wZXJ0eVZhbHVlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1NlYXJjaFByb3BlcnR5VmFsdWUnO1xuaW1wb3J0IHsgU2VhcmNoT3BlcmF0b3IgfSBmcm9tICcuLi8uLi9tb2RlbHMvU2VhcmNoT3BlcmF0b3InO1xuaW1wb3J0IHsgU2VhcmNoUHJvcGVydHlTaWduIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1NlYXJjaFByb3BlcnR5U2lnbic7XG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnZpcm9ubWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uUm9sZUNvbnRleHQgfSBmcm9tICcuLi8uLi9tb2RlbHMvQXBwbGljYXRpb25Sb2xlQ29udGV4dCc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblJvbGVBY3Rpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvQXBwbGljYXRpb25Sb2xlQWN0aW9uJztcbmltcG9ydCB7IFNlYXJjaFByb3BlcnR5VmFsdWVUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1NlYXJjaFByb3BlcnR5VmFsdWVUeXBlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5lbnVtIERhdGVGaWx0ZXJUeXBlcyB7XG4gIEJlZm9yZSA9IFNlYXJjaFByb3BlcnR5U2lnbi5MVCxcbiAgT24gPSBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gIEFmdGVyID0gU2VhcmNoUHJvcGVydHlTaWduLkdULFxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItcm9sZS1jb250cm9sJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JvbGUtY29udHJvbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9yb2xlLWNvbnRyb2wuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIFJvbGVDb250cm9sQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgdmlzaWJsZUNvbHVtbkRlZjogQ29sdW1uRGVmaW5pdGlvbjxNYXBwZWRSb2xlPltdID0gW107XG4gIHN0eWxlcyA9IGJhc2VTdHlsZTtcbiAgZGF0YTogTWFwcGVkUm9sZVtdID0gW107XG4gIGNhcmREYXRhOiBDYXJkRGF0YVtdID0gW107XG4gIGN1cnJlbnREYXRhOiBDYXJkRGF0YSB8IG51bGwgPSBudWxsO1xuICBjdXJyZW50RXhwYW5kZWRDYXJkOiBDYXJkRGF0YSB8IG51bGwgPSBudWxsO1xuICBjYXJkQ29udGV4dDogQ2FyZERhdGEgfCBudWxsID0gbnVsbDtcbiAgY2FyZENvbnRleHRIaXN0b3J5OiBDYXJkRGF0YVtdID0gW107XG4gIGNhcmRDb250ZXh0SGlzdG9yeURhdGE6IENhcmREYXRhW11bXSA9IFtdO1xuICBAVmlld0NoaWxkKCd2ZGN2JykgY2FyZERhdGFWaWV3ITogQ2FyZERhdGFWaWV3Q29tcG9uZW50O1xuICBAVmlld0NoaWxkKCd2ZHYnKSBkYXRhVmlldyE6IERhdGFWaWV3Q29tcG9uZW50O1xuICBASW5wdXQoKSBpc0dsb2JhbDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHNlcnZpY2VOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgYXBwbGljYXRpb246IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBwYWdlU2l6ZTogbnVtYmVyID0gMTA7XG4gIEBJbnB1dCgpIHNlYXJjaERlYm91bmNlVGltZTogbnVtYmVyID0gNTAwO1xuICBwYWdlU3RhdGU6IFBhZ2VkUmVzdWx0PFJvbGU+IHwgbnVsbCA9IG51bGw7XG4gIHNvdXJjZURhdGE6IEF1dGhvcml6YXRpb25Db25maWdbXSA9IFtdO1xuICBpc09wZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgb3BlbkRyb3Bkb3duSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBjdXJyZW50RmlsdGVyczogSURhdGFGaWx0ZXJbXSA9IFtdO1xuICBjdXJyZW50U29ydHM6IElEYXRhRmlsdGVyW10gPSBbXTtcbiAgc2VhcmNoVGVybSQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG5cbiAgdmlzaWJsZUNvbHVtbnM6IElEYXRhRmlsdGVyW10gPSBbXTtcblxuICBmaWx0ZXJBcnJheTogSURhdGFGaWx0ZXJbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnQ3JlYXRlZEF0JyxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLkRhdGUsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdVcGRhdGVkQXQnLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuRGF0ZSxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gIF07XG5cbiAgc29ydE9wdGlvbnM6IElEYXRhRmlsdGVyW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ0NyZWF0ZWRBdCcsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5EYXRlLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnVXBkYXRlZEF0JyxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLkRhdGUsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICBdO1xuXG4gIC8vIHByaXZhdGUgX3NlYXJjaEl0ZW06IHN0cmluZyA9ICcnO1xuICAvLyBnZXQgc2VhcmNoSXRlbSgpOiBzdHJpbmcge1xuICAvLyAgIHJldHVybiB0aGlzLl9zZWFyY2hJdGVtXG4gIC8vIH1cbiAgLy8gc2V0IHNlYXJjaEl0ZW0odmFsdWU6IHN0cmluZykge1xuICAvLyAgIHRoaXMuX3NlYXJjaEl0ZW0gPSB2YWx1ZTtcbiAgLy8gICB0aGlzLnNlYXJjaFRlcm0kLm5leHQodmFsdWUpO1xuICAvLyB9XG5cbiAgLy8gZm9ybTogRm9ybUdyb3VwO1xuICBjaGlsZFBlcm1pc3Npb25SZWY6IENoaWxkcmVuVHlwZSA9IENoaWxkcmVuVHlwZS5QZXJtaXNzaW9uO1xuXG4gIHJvbGVDb250ZXh0c1N0b3JlOiBBcHBsaWNhdGlvblJvbGVDb250ZXh0W10gPSBbXTtcbiAgcm9sZUFjdGlvbnNTdG9yZTogQXBwbGljYXRpb25Sb2xlQWN0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBjdXJyZW50U2VhcmNoVGVybTogc3RyaW5nID0gJyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aG9yaXphdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb2xlQ29udHJvbFN2YzogUm9sZUNvbnRyb2xTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXRpbFNlcnZpY2U6IFV0aWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VydmVyOiBIdHRwV2ViUmVxdWVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZW52U3ZjOiBFbnZpcm9ubWVudFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1uRGVmID0gcm9sZUNvbnRyb2xTdmMucm9sZUNvbHVtbnM7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IHJvbGVDb250cm9sU3ZjLnJvbGVDb2x1bW5zLm1hcCgoY29sKSA9PiAoe1xuICAgICAgY2hlY2tlZDogdHJ1ZSxcbiAgICAgIG5hbWU6IHR5cGVvZiBjb2wuaGVhZGVyID09PSAnc3RyaW5nJyA/IGNvbC5oZWFkZXIgOiBjb2wuaWQsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5Cb29sLFxuICAgIH0pKTtcbiAgICAvLyB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAvLyAgIE5hbWU6IG5ldyBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPihudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcbiAgICAvLyB9KTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1vY2tEYXRhID0gdGhpcy5nZXRNb2NrUm9sZXMoKTtcbiAgICBjb25zdCByb2xlcyA9IGF3YWl0IHRoaXMuZ2V0QWxsUm9sZXMoKTtcbiAgICBpZiAodGhpcy5pc0dsb2JhbCkge1xuICAgICAgY29uc3QgY29udGV4dHNSZXMgPSBhd2FpdCB0aGlzLmdldFNhdmVkQ29udGV4dHMoKTtcbiAgICAgIGlmIChjb250ZXh0c1Jlcykge1xuICAgICAgICB0aGlzLnJvbGVDb250ZXh0c1N0b3JlID0gY29udGV4dHNSZXM7XG4gICAgICAgIHRoaXMucm9sZUFjdGlvbnNTdG9yZSA9IGNvbnRleHRzUmVzLmZsYXRNYXAoKHgpID0+IHguUm9sZUFjdGlvbnMpO1xuICAgICAgICBjb25zdCBhdXRoQ29uZmlnOiBBdXRob3JpemF0aW9uQ29uZmlnW10gPSBjb250ZXh0c1Jlcy5tYXAoKHgpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgTmFtZTogeC5OYW1lLFxuICAgICAgICAgICAgQWN0aW9uczogeC5Sb2xlQWN0aW9ucy5tYXAoKHkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHkuTmFtZTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNvdXJjZURhdGEgPSBhdXRoQ29uZmlnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNvdXJjZURhdGEgPSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25Db25maWc7XG4gICAgfVxuICAgIGlmIChyb2xlcykge1xuICAgICAgdGhpcy5zZXRVcE1hcHBlZERhdGEocm9sZXMpO1xuICAgICAgdGhpcy5zZXRVcENhcmREYXRhKCk7XG4gICAgfVxuICAgIHRoaXMuc2VhcmNoVGVybSRcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLnNlYXJjaERlYm91bmNlVGltZSkpIC8vIEFkanVzdCBkZWJvdW5jZSB0aW1lIGhlcmUgKGluIG1zKVxuICAgICAgLnN1YnNjcmliZShhc3luYyAoc2VhcmNoVGVybSkgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtID0gc2VhcmNoVGVybTtcbiAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXJzQW5kU29ydHModHJ1ZSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldFNhdmVkQ29udGV4dHMoKTogUHJvbWlzZTxBcHBsaWNhdGlvblJvbGVDb250ZXh0W10gfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIXRoaXMuaXNHbG9iYWwgfHwgIXRoaXMuc2VydmljZU5hbWUpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHZhciBwYXlsb2FkOiBTZWFyY2hQcm9wZXJ0eVZhbHVlW10gPSBbXG4gICAgICB7XG4gICAgICAgIFByb3BlcnR5TmFtZTogJ1NlcnZpY2VOYW1lJyxcbiAgICAgICAgRW50aXR5VmFsdWU6IHRoaXMuc2VydmljZU5hbWUsXG4gICAgICAgIE9wZXJhdG9yOiBTZWFyY2hPcGVyYXRvci5BbmQsXG4gICAgICAgIFNpZ246IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFByb3BlcnR5TmFtZTogJ0FQSUtleScsXG4gICAgICAgIEVudGl0eVZhbHVlOiB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5BUElLZXksXG4gICAgICAgIE9wZXJhdG9yOiBTZWFyY2hPcGVyYXRvci5BbmQsXG4gICAgICAgIFNpZ246IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgICAgIH0sXG4gICAgXTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KFxuICAgICAgYEFwcGxpY2F0aW9uL1NlYXJjaEFwcGxpY2F0aW9uUm9sZUNvbnRleHRzLzAvMGAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByZXN1bHQgPSAocmVzIGFzIFBhZ2VkUmVzdWx0PEFwcGxpY2F0aW9uUm9sZUNvbnRleHQ+KS5SZXN1bHQ7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuICBhc3luYyBnZXRBbGxSb2xlcygpOiBQcm9taXNlPFJvbGVbXSB8IHVuZGVmaW5lZD4ge1xuICAgIC8vICAgdmFyIHBheWxvYWQ6IFNlYXJjaFByb3BlcnR5VmFsdWVbXSA9IFtcbiAgICAvLyAgICAge1xuICAgIC8vICAgICAgIFByb3BlcnR5TmFtZTogJ0FQSUtleScsXG4gICAgLy8gICAgICAgRW50aXR5VmFsdWU6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAvLyAgICAgICBPcGVyYXRvcjogU2VhcmNoT3BlcmF0b3IuQW5kLFxuICAgIC8vICAgICAgIFNpZ246IFNlYXJjaFByb3BlcnR5U2lnbi5FUVxuICAgIC8vICAgICB9XG4gICAgLy8gXVxuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuc2VydmVyLmdldChgUm9sZS9HZXRSb2xlcy8wLyR7dGhpcy5wYWdlU2l6ZX1gKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFnZVN0YXRlID0gcmVzIGFzIFBhZ2VkUmVzdWx0PFJvbGU+O1xuICAgICAgdmFyIHJlc3VsdCA9IChyZXMgYXMgUGFnZWRSZXN1bHQ8Um9sZT4pLlJlc3VsdDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbG9hZE1vcmUoKSB7XG4gICAgaWYgKCF0aGlzLnBhZ2VTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPVxuICAgICAgdGhpcy5jdXJyZW50RmlsdGVycy5sZW5ndGggPiAwIHx8XG4gICAgICB0aGlzLmN1cnJlbnRTb3J0cy5sZW5ndGggPiAwIHx8XG4gICAgICB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtLnRyaW0oKS5sZW5ndGggPiAwXG4gICAgICAgID8gYXdhaXQgdGhpcy5sb2FkTW9yZUZpbHRlcnNBbmRTb3J0cygpXG4gICAgICAgIDogYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KFxuICAgICAgICAgICAgYFJvbGUvR2V0Um9sZXMvJHt0aGlzLnBhZ2VTdGF0ZS5Ta2lwfS8ke3RoaXMucGFnZVNpemV9YFxuICAgICAgICAgICk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFnZVN0YXRlID0gcmVzIGFzIFBhZ2VkUmVzdWx0PFJvbGU+O1xuICAgICAgdmFyIHJlc3VsdCA9IChyZXMgYXMgUGFnZWRSZXN1bHQ8Um9sZT4pLlJlc3VsdDtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNldFVwTWFwcGVkRGF0YUV4dHJhKHJlc3VsdCk7XG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuY29uY2F0KGRhdGEpO1xuICAgICAgdGhpcy5zZXRVcENhcmREYXRhRXh0cmEoZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXBwbGljYXRpb25Db250ZXh0Q29kZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnJvbGVDb250ZXh0c1N0b3JlLmZpbmQoKHgpID0+IHguTmFtZSA9PSBuYW1lKTtcbiAgICByZXR1cm4gaXRlbSA/IGl0ZW0uQ29kZSA6ICcnO1xuICB9XG4gIGdldEFwcGxpY2F0aW9uQWN0aW9uQ29kZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnJvbGVBY3Rpb25zU3RvcmUuZmluZCgoeCkgPT4geC5OYW1lID09IG5hbWUpO1xuICAgIHJldHVybiBpdGVtID8gaXRlbS5Db2RlIDogJyc7XG4gIH1cblxuICBmaW5kUGFyZW50KGNhcmREYXRhOiBDYXJkRGF0YVtdLCB0YXJnZXQ6IENhcmREYXRhKTogQ2FyZERhdGEgfCBudWxsIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY2FyZERhdGEpIHtcbiAgICAgIGlmIChpdGVtLmNoaWxkcmVuLmluY2x1ZGVzKHRhcmdldCkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW07IC8vIEltbWVkaWF0ZSBwYXJlbnQgZm91bmRcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZmluZFBhcmVudChpdGVtLmNoaWxkcmVuLCB0YXJnZXQpO1xuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDsgLy8gTm90IGZvdW5kXG4gIH1cblxuICBpc0NoZWNrYm94RGlzYWJsZWQoaXRlbTogQ2FyZERhdGEpOiBib29sZWFuIHtcbiAgICBjb25zdCBwYXJlbnQgPVxuICAgICAgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnlEYXRhLmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLmZpbmRQYXJlbnQodGhpcy5jYXJkQ29udGV4dEhpc3RvcnlEYXRhWzBdLCBpdGVtKVxuICAgICAgICA6IHRoaXMuZmluZFBhcmVudCh0aGlzLmNhcmREYXRhLCBpdGVtKTtcbiAgICBpZiAoXG4gICAgICBwYXJlbnQgJiZcbiAgICAgIHBhcmVudC5kYXRhLkNoaWxkcmVuVHlwZSAmJlxuICAgICAgcGFyZW50LmRhdGEuQ2hpbGRyZW5UeXBlID09IENoaWxkcmVuVHlwZS5BY3Rpb24gJiZcbiAgICAgIHBhcmVudC5kYXRhLlNlbGVjdGVkID09IGZhbHNlXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc2V0VXBNYXBwZWREYXRhKGRhdGE6IFJvbGVbXSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGEubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi54LFxuICAgICAgICBpZDogeC5JZCxcbiAgICAgICAgQ2hpbGRyZW5UeXBlOiBDaGlsZHJlblR5cGUuUGVybWlzc2lvbixcbiAgICAgICAgUm9sZUNvbnRleHRzOiB0aGlzLnNvdXJjZURhdGEubWFwKChjb25maWcpID0+IHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0lkID0geC5Sb2xlQ29udGV4dHMuZmluZEluZGV4KFxuICAgICAgICAgICAgKHkpID0+IHkuTmFtZSA9PSBjb25maWcuTmFtZVxuICAgICAgICAgICk7XG4gICAgICAgICAgdmFyIGNvbnRleHQ6IE1hcHBlZFJvbGVDb250ZXh0ID0ge1xuICAgICAgICAgICAgQ2hpbGRyZW5UeXBlOiBDaGlsZHJlblR5cGUuQWN0aW9uLFxuICAgICAgICAgICAgU2VsZWN0ZWQ6IGV4aXN0aW5nSWQgPiAtMSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgIFJvbGVBY3Rpb25zOiBjb25maWcuQWN0aW9ucy5tYXAoKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0FjdGlvbiA9XG4gICAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xXG4gICAgICAgICAgICAgICAgICA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgICAoYykgPT4gYy5OYW1lID09IGFjdGlvblxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IC0xO1xuXG4gICAgICAgICAgICAgIHZhciBhY3Q6IE1hcHBlZFJvbGVBY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgU2VsZWN0ZWQ6IGV4aXN0aW5nQWN0aW9uID4gLTEgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgTmFtZTogYWN0aW9uLFxuICAgICAgICAgICAgICAgIFJvbGU6IHguQ29kZSxcbiAgICAgICAgICAgICAgICBDb250ZXh0OiAnJyxcbiAgICAgICAgICAgICAgICBpZDpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tleGlzdGluZ0FjdGlvbl0uaWRcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICBJZDpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tleGlzdGluZ0FjdGlvbl0uSWRcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICAgIFRlbmFudElkOiB4LlRlbmFudElkLFxuICAgICAgICAgICAgICAgIENvZGU6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbZXhpc3RpbmdBY3Rpb25dXG4gICAgICAgICAgICAgICAgICAgICAgICAuQ29kZVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgIFNlcnZpY2VOYW1lOlxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW2V4aXN0aW5nQWN0aW9uXVxuICAgICAgICAgICAgICAgICAgICAgICAgLlNlcnZpY2VOYW1lXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgQVBJS2V5OlxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW2V4aXN0aW5nQWN0aW9uXVxuICAgICAgICAgICAgICAgICAgICAgICAgLkFQSUtleVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVBY3Rpb246IHRoaXMuZ2V0QXBwbGljYXRpb25BY3Rpb25Db2RlKGFjdGlvbiksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHJldHVybiBhY3Q7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIE5hbWU6IGNvbmZpZy5OYW1lLFxuICAgICAgICAgICAgUm9sZTogeC5Db2RlLFxuICAgICAgICAgICAgaWQ6IGV4aXN0aW5nSWQgPiAtMSA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLmlkIDogJycsXG4gICAgICAgICAgICBJZDogZXhpc3RpbmdJZCA+IC0xID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uSWQgOiAnJyxcbiAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgVGVuYW50SWQ6IHguVGVuYW50SWQsXG4gICAgICAgICAgICBDb2RlOiBleGlzdGluZ0lkID4gLTEgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Db2RlIDogJycsXG4gICAgICAgICAgICBTZXJ2aWNlTmFtZTpcbiAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uU2VydmljZU5hbWUgOiAnJyxcbiAgICAgICAgICAgIEFQSUtleTpcbiAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xXG4gICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5BUElLZXlcbiAgICAgICAgICAgICAgICA6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgICAgIEFwcGxpY2F0aW9uUm9sZUNvbnRleHQ6IHRoaXMuZ2V0QXBwbGljYXRpb25Db250ZXh0Q29kZShjb25maWcuTmFtZSksXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgc2V0VXBNYXBwZWREYXRhRXh0cmEoZGF0YTogUm9sZVtdKTogTWFwcGVkUm9sZVtdIHtcbiAgICByZXR1cm4gZGF0YS5tYXAoKHgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLngsXG4gICAgICAgIGlkOiB4LklkLFxuICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5QZXJtaXNzaW9uLFxuICAgICAgICBSb2xlQ29udGV4dHM6IHRoaXMuc291cmNlRGF0YS5tYXAoKGNvbmZpZykgPT4ge1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWQgPSB4LlJvbGVDb250ZXh0cy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoeSkgPT4geS5OYW1lID09IGNvbmZpZy5OYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgICB2YXIgY29udGV4dDogTWFwcGVkUm9sZUNvbnRleHQgPSB7XG4gICAgICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5BY3Rpb24sXG4gICAgICAgICAgICBTZWxlY3RlZDogZXhpc3RpbmdJZCA+IC0xID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgUm9sZUFjdGlvbnM6IGNvbmZpZy5BY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQWN0aW9uID1cbiAgICAgICAgICAgICAgICBleGlzdGluZ0lkID4gLTFcbiAgICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgIChjKSA9PiBjLk5hbWUgPT0gYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogLTE7XG5cbiAgICAgICAgICAgICAgdmFyIGFjdDogTWFwcGVkUm9sZUFjdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBTZWxlY3RlZDogZXhpc3RpbmdBY3Rpb24gPiAtMSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBOYW1lOiBhY3Rpb24sXG4gICAgICAgICAgICAgICAgUm9sZTogeC5Db2RlLFxuICAgICAgICAgICAgICAgIENvbnRleHQ6ICcnLFxuICAgICAgICAgICAgICAgIGlkOlxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW2V4aXN0aW5nQWN0aW9uXS5pZFxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgIElkOlxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW2V4aXN0aW5nQWN0aW9uXS5JZFxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgICAgICAgICAgVGVuYW50SWQ6IHguVGVuYW50SWQsXG4gICAgICAgICAgICAgICAgQ29kZTpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tleGlzdGluZ0FjdGlvbl1cbiAgICAgICAgICAgICAgICAgICAgICAgIC5Db2RlXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgU2VydmljZU5hbWU6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbZXhpc3RpbmdBY3Rpb25dXG4gICAgICAgICAgICAgICAgICAgICAgICAuU2VydmljZU5hbWVcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICBBUElLZXk6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbZXhpc3RpbmdBY3Rpb25dXG4gICAgICAgICAgICAgICAgICAgICAgICAuQVBJS2V5XG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uUm9sZUFjdGlvbjogdGhpcy5nZXRBcHBsaWNhdGlvbkFjdGlvbkNvZGUoYWN0aW9uKSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgcmV0dXJuIGFjdDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgTmFtZTogY29uZmlnLk5hbWUsXG4gICAgICAgICAgICBSb2xlOiB4LkNvZGUsXG4gICAgICAgICAgICBpZDogZXhpc3RpbmdJZCA+IC0xID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uaWQgOiAnJyxcbiAgICAgICAgICAgIElkOiBleGlzdGluZ0lkID4gLTEgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5JZCA6ICcnLFxuICAgICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgICAgICBUZW5hbnRJZDogeC5UZW5hbnRJZCxcbiAgICAgICAgICAgIENvZGU6IGV4aXN0aW5nSWQgPiAtMSA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLkNvZGUgOiAnJyxcbiAgICAgICAgICAgIFNlcnZpY2VOYW1lOlxuICAgICAgICAgICAgICBleGlzdGluZ0lkID4gLTEgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5TZXJ2aWNlTmFtZSA6ICcnLFxuICAgICAgICAgICAgQVBJS2V5OlxuICAgICAgICAgICAgICBleGlzdGluZ0lkID4gLTFcbiAgICAgICAgICAgICAgICA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLkFQSUtleVxuICAgICAgICAgICAgICAgIDogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgQXBwbGljYXRpb25Sb2xlQ29udGV4dDogdGhpcy5nZXRBcHBsaWNhdGlvbkNvbnRleHRDb2RlKGNvbmZpZy5OYW1lKSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgICAgIH0pLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldFVwQ2FyZERhdGEoKSB7XG4gICAgY29uc3QgY2FyZERhdGE6IENhcmREYXRhW10gPSB0aGlzLmRhdGEubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIHRpdGxlOiB4Lk5hbWUsXG4gICAgICAgIGRhdGE6IHgsXG4gICAgICAgIGJvZHk6IFtdLFxuICAgICAgICBjaGlsZHJlbjogeC5Sb2xlQ29udGV4dHMubWFwKChjKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLmdldEZvcm1hdHRlZE5hbWUoYy5OYW1lKSxcbiAgICAgICAgICAgIGRhdGE6IGMsXG4gICAgICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBjLlJvbGVBY3Rpb25zLm1hcCgoYSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRGb3JtYXR0ZWROYW1lKGEuTmFtZSksXG4gICAgICAgICAgICAgICAgZGF0YTogYSxcbiAgICAgICAgICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5jYXJkRGF0YSA9IGNhcmREYXRhO1xuICB9XG4gIHNldFVwQ2FyZERhdGFFeHRyYShiYXNlRGF0YTogTWFwcGVkUm9sZVtdKSB7XG4gICAgY29uc3QgY2FyZERhdGE6IENhcmREYXRhW10gPSBiYXNlRGF0YS5tYXAoKHgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgdGl0bGU6IHguTmFtZSxcbiAgICAgICAgZGF0YTogeCxcbiAgICAgICAgYm9keTogW10sXG4gICAgICAgIGNoaWxkcmVuOiB4LlJvbGVDb250ZXh0cy5tYXAoKGMpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0Rm9ybWF0dGVkTmFtZShjLk5hbWUpLFxuICAgICAgICAgICAgZGF0YTogYyxcbiAgICAgICAgICAgIGJvZHk6IFtdLFxuICAgICAgICAgICAgY2hpbGRyZW46IGMuUm9sZUFjdGlvbnMubWFwKChhKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmdldEZvcm1hdHRlZE5hbWUoYS5OYW1lKSxcbiAgICAgICAgICAgICAgICBkYXRhOiBhLFxuICAgICAgICAgICAgICAgIGJvZHk6IFtdLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLmNhcmREYXRhID0gdGhpcy5jYXJkRGF0YS5jb25jYXQoY2FyZERhdGEpO1xuICB9XG5cbiAgZ2V0Rm9ybWF0dGVkTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIFNwbGl0IHRoZSBrZXkgb24gY2FwaXRhbCBsZXR0ZXJzLCBoYW5kbGluZyBcIkFuZFwiIGFzIGxvd2VyY2FzZVxuICAgIGNvbnN0IHdvcmRzID0gbmFtZVxuICAgICAgLnNwbGl0KC8oPz1bQS1aXSkvKVxuICAgICAgLm1hcCgod29yZCkgPT4gKHdvcmQgPT09ICdBbmQnID8gJ2FuZCcgOiB3b3JkKSk7XG4gICAgLy8gSm9pbiB0aGUgd29yZHMgd2l0aCBzcGFjZXNcbiAgICByZXR1cm4gd29yZHMuam9pbignICcpO1xuICB9XG5cbiAgdmlld0RldGFpbHNGcm9tVGFibGUoZGF0YTogTWFwcGVkUm9sZSkge1xuICAgIGNvbnN0IGNhcmREYXRhID0gdGhpcy5jYXJkRGF0YS5maW5kKCh4KSA9PiB4LmRhdGEgPT0gZGF0YSk7XG4gICAgaWYgKGNhcmREYXRhKSB7XG4gICAgICB0aGlzLnZpZXdEZXRhaWxzKGNhcmREYXRhKTtcbiAgICB9XG4gIH1cblxuICB2aWV3RGV0YWlscyhjb250ZXh0OiBDYXJkRGF0YSkge1xuICAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5LnB1c2goY29udGV4dCk7XG4gICAgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnlEYXRhLnB1c2godGhpcy5jYXJkRGF0YSk7XG4gICAgdGhpcy5jYXJkRGF0YSA9IGNvbnRleHQuY2hpbGRyZW47XG4gICAgdGhpcy5jYXJkRGF0YVZpZXcuY2xlYXJEYXRhKCk7XG4gIH1cbiAgdmlld0RldGFpbHNDaGlsZChjb250ZXh0OiBDYXJkRGF0YSkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRFeHBhbmRlZENhcmQpIHtcbiAgICAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5LnB1c2godGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkKTtcbiAgICAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5LnB1c2goY29udGV4dCk7XG4gICAgICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeURhdGEucHVzaCh0aGlzLmNhcmREYXRhKTtcbiAgICAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5RGF0YS5wdXNoKHRoaXMuY3VycmVudEV4cGFuZGVkQ2FyZC5jaGlsZHJlbik7XG4gICAgICB0aGlzLmNhcmREYXRhID0gY29udGV4dC5jaGlsZHJlbjtcbiAgICAgIHRoaXMuY2FyZERhdGFWaWV3LmNsZWFyRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIHJvbGVDYXJkQ2xpY2tlZChpdGVtOiBDYXJkRGF0YSkge1xuICAgIHRoaXMuY3VycmVudERhdGEgPSB0aGlzLmNhcmREYXRhVmlldy5vbkl0ZW1DbGljayhpdGVtKTtcbiAgICAvLyBpZiAodGhpcy5jdXJyZW50RGF0YSkge1xuICAgIC8vICAgdGhpcy5mb3JtLmNvbnRyb2xzWydOYW1lJ10uc2V0VmFsdWUodGhpcy5jdXJyZW50RGF0YS5kYXRhPy5OYW1lKTtcbiAgICAvLyB9XG4gIH1cblxuICB0b2dnbGVDaGlsZHJlbihpdGVtOiBDYXJkRGF0YSkge1xuICAgIHZhciBjdXJyVG9nZ2xlU3RhdGUgPSBpdGVtLmlzQ2hpbGRyZW5FeHBhbmRlZDtcbiAgICB0aGlzLmNhcmREYXRhLmZvckVhY2goKF8pID0+IHtcbiAgICAgIF8uaXNDaGlsZHJlbkV4cGFuZGVkID0gZmFsc2U7XG4gICAgfSk7XG4gICAgaXRlbS5pc0NoaWxkcmVuRXhwYW5kZWQgPSAhY3VyclRvZ2dsZVN0YXRlO1xuICAgIGlmIChpdGVtLmlzQ2hpbGRyZW5FeHBhbmRlZCkge1xuICAgICAgdGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkID0gaXRlbTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBjbG9zZURldGFpbHMoKSB7XG4gICAgdGhpcy5jYXJkRGF0YSA9XG4gICAgICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeURhdGFbdGhpcy5jYXJkQ29udGV4dEhpc3RvcnlEYXRhLmxlbmd0aCAtIDFdO1xuICAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5RGF0YS5wb3AoKTtcbiAgICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5wb3AoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmRhdGFWaWV3LmlzVGFibGVWaWV3KSB7XG4gICAgICAgIHRoaXMuZGF0YVZpZXcudG9nZ2xlVmlldygpO1xuICAgICAgfVxuICAgIH0sIDIwMCk7XG4gIH1cblxuICBnZXRDYXJkU3ViQ2FwdGlvbihpdGVtOiBDYXJkRGF0YSkge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gaXRlbS5jaGlsZHJlbi5maWx0ZXIoKHgpID0+IHguZGF0YS5TZWxlY3RlZCkubGVuZ3RoO1xuICAgIGNvbnN0IHRvdGFsID0gaXRlbS5jaGlsZHJlbi5sZW5ndGg7XG4gICAgcmV0dXJuIGAke3NlbGVjdGVkfSBvZiAke3RvdGFsfSAke1xuICAgICAgdG90YWwgPiAxID8gaXRlbS5kYXRhLkNoaWxkcmVuVHlwZSArICdzJyA6IGl0ZW0uZGF0YS5DaGlsZHJlblR5cGVcbiAgICB9YDtcbiAgfVxuXG4gIGdldFVwZGF0ZWRSb2xlKHJvbGU6IE1hcHBlZFJvbGUpOiBSb2xlIHtcbiAgICBjb25zdCBuZXdSb2xlID0gcm9sZTtcbiAgICBuZXdSb2xlLlJvbGVDb250ZXh0cyA9IHJvbGUuUm9sZUNvbnRleHRzLmZpbHRlcigoeCkgPT4geC5TZWxlY3RlZCkubWFwKFxuICAgICAgKHkpID0+IHtcbiAgICAgICAgeS5Sb2xlQWN0aW9ucyA9IHkuUm9sZUFjdGlvbnMuZmlsdGVyKCh6KSA9PiB6LlNlbGVjdGVkKTtcbiAgICAgICAgcmV0dXJuIHk7XG4gICAgICB9XG4gICAgKTtcbiAgICBuZXdSb2xlLkRhdGFTdGF0ZSA9XG4gICAgICBuZXdSb2xlLkRhdGFTdGF0ZSA9PSBPYmplY3RTdGF0ZS5OZXdcbiAgICAgICAgPyBPYmplY3RTdGF0ZS5OZXdcbiAgICAgICAgOiBPYmplY3RTdGF0ZS5DaGFuZ2VkO1xuICAgIG5ld1JvbGUuSWQgPSBuZXdSb2xlLkRhdGFTdGF0ZSA9PSBPYmplY3RTdGF0ZS5OZXcgPyAnJyA6IG5ld1JvbGUuSWQ7XG4gICAgcmV0dXJuIG5ld1JvbGUgYXMgUm9sZTtcbiAgfVxuICBhc3luYyBzYXZlUm9sZSgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50RGF0YSkge1xuICAgICAgdmFyIHJvbGU6IE1hcHBlZFJvbGUgPSB0aGlzLmN1cnJlbnREYXRhLmRhdGEgYXMgTWFwcGVkUm9sZTtcbiAgICAgIC8vIHJvbGUuTmFtZSA9IHRoaXMuZm9ybS5jb250cm9sc1snTmFtZSddLnZhbHVlO1xuICAgICAgaWYgKHRoaXMuY3VycmVudERhdGEuZGF0YS5OYW1lLnRyaW0oKS5sZW5ndGggPT0gMCkge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dJbmZvKCdSb2xlIG5hbWUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hcHBlZFJvbGUgPSB0aGlzLmdldFVwZGF0ZWRSb2xlKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocm9sZSkpKTtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZXJ2ZXIucG9zdChgUm9sZS9TYXZlUm9sZXNgLCBbbWFwcGVkUm9sZV0pO1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ1JvbGUgc2F2ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlcyBhcyBSb2xlW107XG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHZhciByb2xlUmVzdWx0ID0gcmVzdWx0WzBdO1xuICAgICAgICAgIHZhciBtYXBwZWRSb2xlU2F2ZTogTWFwcGVkUm9sZSA9IHtcbiAgICAgICAgICAgIC4uLnJvbGVSZXN1bHQsXG4gICAgICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5QZXJtaXNzaW9uLFxuICAgICAgICAgICAgUm9sZUNvbnRleHRzOiB0aGlzLnNvdXJjZURhdGEubWFwKChjb25maWcpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdJZCA9IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAoeSkgPT4geS5OYW1lID09IGNvbmZpZy5OYW1lXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHZhciBjb250ZXh0OiBNYXBwZWRSb2xlQ29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5BY3Rpb24sXG4gICAgICAgICAgICAgICAgU2VsZWN0ZWQ6IGV4aXN0aW5nSWQgPiAtMSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBSb2xlQWN0aW9uczogY29uZmlnLkFjdGlvbnMubWFwKChhY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQWN0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xXG4gICAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdJZFxuICAgICAgICAgICAgICAgICAgICAgICAgXS5Sb2xlQWN0aW9ucy5maW5kSW5kZXgoKGMpID0+IGMuTmFtZSA9PSBhY3Rpb24pXG4gICAgICAgICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICAgICAgICAgICAgdmFyIGFjdDogTWFwcGVkUm9sZUFjdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgU2VsZWN0ZWQ6IGV4aXN0aW5nQWN0aW9uID4gLTEgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIE5hbWU6IGFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgUm9sZTogcm9sZVJlc3VsdC5Db2RlLFxuICAgICAgICAgICAgICAgICAgICBDb250ZXh0OiAnJyxcbiAgICAgICAgICAgICAgICAgICAgaWQ6XG4gICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBdLmlkXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgICBJZDpcbiAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0uSWRcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICAgICAgICAgICAgVGVuYW50SWQ6IHJvbGVSZXN1bHQuVGVuYW50SWQsXG4gICAgICAgICAgICAgICAgICAgIENvZGU6XG4gICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBdLkNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgIFNlcnZpY2VOYW1lOlxuICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgXS5TZXJ2aWNlTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgQVBJS2V5OlxuICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgXS5BUElLZXlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVBY3Rpb246XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBcHBsaWNhdGlvbkFjdGlvbkNvZGUoYWN0aW9uKSxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYWN0O1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIE5hbWU6IGNvbmZpZy5OYW1lLFxuICAgICAgICAgICAgICAgIFJvbGU6IHJvbGVSZXN1bHQuQ29kZSxcbiAgICAgICAgICAgICAgICBpZDpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMSA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLmlkIDogJycsXG4gICAgICAgICAgICAgICAgSWQ6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0lkID4gLTEgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5JZCA6ICcnLFxuICAgICAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgICAgICAgICAgVGVuYW50SWQ6IHJvbGVSZXN1bHQuVGVuYW50SWQsXG4gICAgICAgICAgICAgICAgQ29kZTpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLkNvZGVcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICBTZXJ2aWNlTmFtZTpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlNlcnZpY2VOYW1lXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgQVBJS2V5OlxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uQVBJS2V5XG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uUm9sZUNvbnRleHQ6IHRoaXMuZ2V0QXBwbGljYXRpb25Db250ZXh0Q29kZShcbiAgICAgICAgICAgICAgICAgIGNvbmZpZy5OYW1lXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLmRhdGEuZmluZEluZGV4KFxuICAgICAgICAgICAgKHgpID0+IHggPT0gdGhpcy5jdXJyZW50RGF0YT8uZGF0YVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGl0ZW1JbmRleCA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Db2RlID0gbWFwcGVkUm9sZVNhdmUuQ29kZTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLklkID0gbWFwcGVkUm9sZVNhdmUuSWQ7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5EYXRhU3RhdGUgPSBtYXBwZWRSb2xlU2F2ZS5EYXRhU3RhdGU7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5UZW5hbnRJZCA9IG1hcHBlZFJvbGVTYXZlLlRlbmFudElkO1xuICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uU2VydmljZU5hbWUgPSBtYXBwZWRSb2xlU2F2ZS5TZXJ2aWNlTmFtZTtcbiAgICAgICAgICAgIG1hcHBlZFJvbGVTYXZlLlJvbGVDb250ZXh0cy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5Sb2xlID0gbWFwcGVkUm9sZVNhdmUuQ29kZTtcbiAgICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uUm9sZUNvbnRleHRzW2ldLkNvZGUgPSB4LkNvZGU7XG4gICAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5TZXJ2aWNlTmFtZSA9IHguU2VydmljZU5hbWU7XG4gICAgICAgICAgICAgIHguUm9sZUFjdGlvbnMuZm9yRWFjaCgoeSwgaikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5Sb2xlQWN0aW9uc1tqXS5Sb2xlID1cbiAgICAgICAgICAgICAgICAgIG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uUm9sZUNvbnRleHRzW2ldLlJvbGVBY3Rpb25zW2pdLkNvZGUgPVxuICAgICAgICAgICAgICAgICAgeS5Db2RlO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5Sb2xlQWN0aW9uc1tcbiAgICAgICAgICAgICAgICAgIGpcbiAgICAgICAgICAgICAgICBdLlNlcnZpY2VOYW1lID0geS5TZXJ2aWNlTmFtZTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5tYXAoKHgpID0+IHgpO1xuICAgICAgICAgICAgLy8gdGhpcy5jdXJyZW50RGF0YSA9IHtcbiAgICAgICAgICAgIC8vICAgc2VsZWN0ZWQ6IHRydWUsXG4gICAgICAgICAgICAvLyAgIHRpdGxlOiBtYXBwZWRSb2xlU2F2ZS5OYW1lLFxuICAgICAgICAgICAgLy8gICBkYXRhOiBtYXBwZWRSb2xlU2F2ZSxcbiAgICAgICAgICAgIC8vICAgaXNDaGlsZHJlbkV4cGFuZGVkOiB0aGlzLmN1cnJlbnREYXRhLmlzQ2hpbGRyZW5FeHBhbmRlZCxcbiAgICAgICAgICAgIC8vICAgYm9keTogW10sXG4gICAgICAgICAgICAvLyAgIGNoaWxkcmVuOiBtYXBwZWRSb2xlU2F2ZS5Sb2xlQ29udGV4dHMubWFwKChjKSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8vICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIC8vICAgICAgIHRpdGxlOiB0aGlzLmdldEZvcm1hdHRlZE5hbWUoYy5OYW1lKSxcbiAgICAgICAgICAgIC8vICAgICAgIGRhdGE6IGMsXG4gICAgICAgICAgICAvLyAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAgIC8vICAgICAgIGNoaWxkcmVuOiBjLlJvbGVBY3Rpb25zLm1hcCgoYSkgPT4ge1xuICAgICAgICAgICAgLy8gICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLy8gICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRGb3JtYXR0ZWROYW1lKGEuTmFtZSksXG4gICAgICAgICAgICAvLyAgICAgICAgICAgZGF0YTogYSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICAvLyAgICAgICAgIH07XG4gICAgICAgICAgICAvLyAgICAgICB9KSxcbiAgICAgICAgICAgIC8vICAgICB9O1xuICAgICAgICAgICAgLy8gICB9KSxcbiAgICAgICAgICAgIC8vIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2F2ZVJvbGVEeW5hbWljKGl0ZW06IENhcmREYXRhKSB7XG4gICAgaWYgKHRoaXMuaXNDaGVja2JveERpc2FibGVkKGl0ZW0pKSB7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dJbmZvKCdQYXJlbnQgVUkgbm90IHNlbGVjdGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHJvbGU6IENhcmREYXRhIHwgbnVsbCA9XG4gICAgICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5jYXJkQ29udGV4dEhpc3RvcnlbMF1cbiAgICAgICAgOiB0aGlzLmN1cnJlbnRFeHBhbmRlZENhcmRcbiAgICAgICAgPyB0aGlzLmN1cnJlbnRFeHBhbmRlZENhcmRcbiAgICAgICAgOiBudWxsO1xuICAgIHZhciBjYXJkRGF0YVJlZjogQ2FyZERhdGFbXSB8IG51bGwgPVxuICAgICAgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnlEYXRhLmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeURhdGFbMF1cbiAgICAgICAgOiB0aGlzLmN1cnJlbnRFeHBhbmRlZENhcmRcbiAgICAgICAgPyB0aGlzLmNhcmREYXRhXG4gICAgICAgIDogbnVsbDtcbiAgICAvLyBjb25zdCBpc0V4cGFuZGVkQ2FyZDogYm9vbGVhbiA9XG4gICAgLy8gICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPiAwXG4gICAgLy8gICAgID8gZmFsc2VcbiAgICAvLyAgICAgOiB0aGlzLmN1cnJlbnRFeHBhbmRlZENhcmRcbiAgICAvLyAgICAgPyB0cnVlXG4gICAgLy8gICAgIDogZmFsc2U7XG4gICAgaWYgKCFyb2xlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyb2xlLmRhdGEuTmFtZS50cmltKCkubGVuZ3RoID09IDApIHtcbiAgICAgIGl0ZW0uZGF0YS5TZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93SW5mbygnUm9sZSBuYW1lIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpdGVtLmRhdGEuU2VsZWN0ZWQgPSAhaXRlbS5kYXRhLlNlbGVjdGVkO1xuICAgIGNvbnN0IG1hcHBlZFJvbGUgPSB0aGlzLmdldFVwZGF0ZWRSb2xlKFxuICAgICAgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyb2xlLmRhdGEpKVxuICAgICk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZXJ2ZXIucG9zdChgUm9sZS9TYXZlUm9sZXNgLCBbbWFwcGVkUm9sZV0pO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgaXRlbS5kYXRhLlNlbGVjdGVkID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ1JvbGUgc2F2ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXMgYXMgUm9sZVtdO1xuICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciByb2xlUmVzdWx0ID0gcmVzdWx0WzBdO1xuICAgICAgICB2YXIgbWFwcGVkUm9sZVNhdmU6IE1hcHBlZFJvbGUgPSB7XG4gICAgICAgICAgLi4ucm9sZVJlc3VsdCxcbiAgICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5QZXJtaXNzaW9uLFxuICAgICAgICAgIFJvbGVDb250ZXh0czogdGhpcy5zb3VyY2VEYXRhLm1hcCgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ0lkID0gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAoeSkgPT4geS5OYW1lID09IGNvbmZpZy5OYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdmFyIGNvbnRleHQ6IE1hcHBlZFJvbGVDb250ZXh0ID0ge1xuICAgICAgICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5BY3Rpb24sXG4gICAgICAgICAgICAgIFNlbGVjdGVkOiBleGlzdGluZ0lkID4gLTEgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgIFJvbGVBY3Rpb25zOiBjb25maWcuQWN0aW9ucy5tYXAoKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQWN0aW9uID1cbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgICAgIChjKSA9PiBjLk5hbWUgPT0gYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IC0xO1xuICAgICAgICAgICAgICAgIHZhciBhY3Q6IE1hcHBlZFJvbGVBY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgICBTZWxlY3RlZDogZXhpc3RpbmdBY3Rpb24gPiAtMSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIE5hbWU6IGFjdGlvbixcbiAgICAgICAgICAgICAgICAgIFJvbGU6IHJvbGVSZXN1bHQuQ29kZSxcbiAgICAgICAgICAgICAgICAgIENvbnRleHQ6ICcnLFxuICAgICAgICAgICAgICAgICAgaWQ6XG4gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgXS5pZFxuICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICBJZDpcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBdLklkXG4gICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICAgICAgVGVuYW50SWQ6IHJvbGVSZXN1bHQuVGVuYW50SWQsXG4gICAgICAgICAgICAgICAgICBDb2RlOlxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIF0uQ29kZVxuICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICBTZXJ2aWNlTmFtZTpcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBdLlNlcnZpY2VOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIEFQSUtleTpcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBdLkFQSUtleVxuICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25Sb2xlQWN0aW9uOiB0aGlzLmdldEFwcGxpY2F0aW9uQWN0aW9uQ29kZShhY3Rpb24pLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdDtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIE5hbWU6IGNvbmZpZy5OYW1lLFxuICAgICAgICAgICAgICBSb2xlOiByb2xlUmVzdWx0LkNvZGUsXG4gICAgICAgICAgICAgIGlkOiBleGlzdGluZ0lkID4gLTEgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5pZCA6ICcnLFxuICAgICAgICAgICAgICBJZDogZXhpc3RpbmdJZCA+IC0xID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uSWQgOiAnJyxcbiAgICAgICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICBUZW5hbnRJZDogcm9sZVJlc3VsdC5UZW5hbnRJZCxcbiAgICAgICAgICAgICAgQ29kZTpcbiAgICAgICAgICAgICAgICBleGlzdGluZ0lkID4gLTEgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Db2RlIDogJycsXG4gICAgICAgICAgICAgIFNlcnZpY2VOYW1lOlxuICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5TZXJ2aWNlTmFtZVxuICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgQVBJS2V5OlxuICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5BUElLZXlcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVDb250ZXh0OiB0aGlzLmdldEFwcGxpY2F0aW9uQ29udGV4dENvZGUoXG4gICAgICAgICAgICAgICAgY29uZmlnLk5hbWVcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gY2FyZERhdGFSZWZcbiAgICAgICAgICA/IGNhcmREYXRhUmVmLmZpbmRJbmRleCgoeCkgPT4geC5kYXRhID09IHJvbGU/LmRhdGEpXG4gICAgICAgICAgOiAtMTtcbiAgICAgICAgaWYgKGl0ZW1JbmRleCA+IC0xKSB7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uQ29kZSA9IG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uSWQgPSBtYXBwZWRSb2xlU2F2ZS5JZDtcbiAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5EYXRhU3RhdGUgPSBtYXBwZWRSb2xlU2F2ZS5EYXRhU3RhdGU7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uVGVuYW50SWQgPSBtYXBwZWRSb2xlU2F2ZS5UZW5hbnRJZDtcbiAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5TZXJ2aWNlTmFtZSA9IG1hcHBlZFJvbGVTYXZlLlNlcnZpY2VOYW1lO1xuICAgICAgICAgIG1hcHBlZFJvbGVTYXZlLlJvbGVDb250ZXh0cy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uUm9sZSA9IG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uQ29kZSA9IHguQ29kZTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5TZXJ2aWNlTmFtZSA9IHguU2VydmljZU5hbWU7XG4gICAgICAgICAgICB4LlJvbGVBY3Rpb25zLmZvckVhY2goKHksIGopID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uUm9sZUNvbnRleHRzW2ldLlJvbGVBY3Rpb25zW2pdLlJvbGUgPVxuICAgICAgICAgICAgICAgIG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5Sb2xlQWN0aW9uc1tqXS5Db2RlID0geS5Db2RlO1xuICAgICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uUm9sZUFjdGlvbnNbal0uU2VydmljZU5hbWUgPVxuICAgICAgICAgICAgICAgIHkuU2VydmljZU5hbWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHMgPSBtYXBwZWRSb2xlU2F2ZS5Sb2xlQ29udGV4dHM7XG5cbiAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEubWFwKCh4KSA9PiB4KTtcbiAgICAgICAgICAvLyBpZiAoY2FyZERhdGFSZWYpIHtcbiAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHtcbiAgICAgICAgICAvLyAgICAgWERhdGFJc0hlcmU6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2FyZERhdGFSZWYpKSxcbiAgICAgICAgICAvLyAgIH0pO1xuICAgICAgICAgIC8vICAgY2FyZERhdGFSZWZbaXRlbUluZGV4XSA9IHtcbiAgICAgICAgICAvLyAgICAgc2VsZWN0ZWQ6IGNhcmREYXRhUmVmW2l0ZW1JbmRleF0uc2VsZWN0ZWQsXG4gICAgICAgICAgLy8gICAgIGlzQ2hpbGRyZW5FeHBhbmRlZDogY2FyZERhdGFSZWZbaXRlbUluZGV4XS5pc0NoaWxkcmVuRXhwYW5kZWQsXG4gICAgICAgICAgLy8gICAgIHRpdGxlOiBtYXBwZWRSb2xlU2F2ZS5OYW1lLFxuICAgICAgICAgIC8vICAgICBkYXRhOiBtYXBwZWRSb2xlU2F2ZSxcbiAgICAgICAgICAvLyAgICAgYm9keTogW10sXG4gICAgICAgICAgLy8gICAgIGNoaWxkcmVuOiBtYXBwZWRSb2xlU2F2ZS5Sb2xlQ29udGV4dHMubWFwKChjKSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAvLyAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAvLyAgICAgICAgIHRpdGxlOiB0aGlzLmdldEZvcm1hdHRlZE5hbWUoYy5OYW1lKSxcbiAgICAgICAgICAvLyAgICAgICAgIGRhdGE6IGMsXG4gICAgICAgICAgLy8gICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAvLyAgICAgICAgIGNoaWxkcmVuOiBjLlJvbGVBY3Rpb25zLm1hcCgoYSkgPT4ge1xuICAgICAgICAgIC8vICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRGb3JtYXR0ZWROYW1lKGEuTmFtZSksXG4gICAgICAgICAgLy8gICAgICAgICAgICAgZGF0YTogYSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgLy8gICAgICAgICAgIH07XG4gICAgICAgICAgLy8gICAgICAgICB9KSxcbiAgICAgICAgICAvLyAgICAgICB9O1xuICAgICAgICAgIC8vICAgICB9KSxcbiAgICAgICAgICAvLyAgIH07XG4gICAgICAgICAgLy8gfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2F2ZURhdGFBbGwoKSB7XG4gICAgY29uc3Qgcm9sZXM6IFJvbGVbXSA9IHRoaXMuZGF0YS5tYXAoKHgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLngsXG4gICAgICAgIFJvbGVDb250ZXh0czogeC5Sb2xlQ29udGV4dHMuZmlsdGVyKCh5KSA9PiB5LlNlbGVjdGVkKS5tYXAoKHopID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ueixcbiAgICAgICAgICAgIFJvbGVBY3Rpb25zOiB6LlJvbGVBY3Rpb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgKGEpID0+IGEuU2VsZWN0ZWRcbiAgICAgICAgICAgICkgYXMgUm9sZUFjdGlvbltdLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pIGFzIFJvbGVDb250ZXh0W10sXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlVGFibGUoKSB7XG4gICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLm1hcCgoeCkgPT4geCk7XG4gIH1cblxuICBvbkNsb3NlKCkge1xuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gIH1cblxuICBvcGVuRHJvcGRvd24oaXRlbTogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ2l0ZW0gaXMgaGVyZScsIGl0ZW0pO1xuICAgIGlmICh0aGlzLm9wZW5Ecm9wZG93bklkID09PSBpdGVtLmlkKSB7XG4gICAgICB0aGlzLm9wZW5Ecm9wZG93bklkID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuRHJvcGRvd25JZCA9IGl0ZW0uaWQ7XG4gICAgfVxuICB9XG5cbiAgaXNEcm9wZG93bk9wZW4oaXRlbTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3BlbkRyb3Bkb3duSWQgPT09IGl0ZW0uaWQ7XG4gIH1cblxuICBvblZpZXdDaGFuZ2UoaXNHcmlkVmlldzogYm9vbGVhbik6IHZvaWQge31cbiAgb25TdGF0ZUNoYW5nZShldmVudDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IGJvb2xlYW4gfSk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdjcmVhdGUnOlxuICAgICAgICB2YXIgbmV3TWFwcGVkUm9sZTogTWFwcGVkUm9sZSA9IHtcbiAgICAgICAgICBSb2xlQ29udGV4dHM6IHRoaXMuc291cmNlRGF0YS5tYXAoKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQ6IE1hcHBlZFJvbGVDb250ZXh0ID0ge1xuICAgICAgICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5BY3Rpb24sXG4gICAgICAgICAgICAgIFNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgUm9sZUFjdGlvbnM6IGNvbmZpZy5BY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIGFjdDogTWFwcGVkUm9sZUFjdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgIFNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIE5hbWU6IGFjdGlvbixcbiAgICAgICAgICAgICAgICAgIFJvbGU6ICcnLFxuICAgICAgICAgICAgICAgICAgQ29udGV4dDogJycsXG4gICAgICAgICAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgICAgICAgICBJZDogJycsXG4gICAgICAgICAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICAgICAgICAgIFRlbmFudElkOiAnJyxcbiAgICAgICAgICAgICAgICAgIENvZGU6ICcnLFxuICAgICAgICAgICAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICAgICAgICAgICAgQVBJS2V5OiB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5BUElLZXksXG4gICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVBY3Rpb246IHRoaXMuZ2V0QXBwbGljYXRpb25BY3Rpb25Db2RlKGFjdGlvbiksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWN0O1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgTmFtZTogY29uZmlnLk5hbWUsXG4gICAgICAgICAgICAgIFJvbGU6ICcnLFxuICAgICAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgICAgIElkOiAnJyxcbiAgICAgICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICBUZW5hbnRJZDogJycsXG4gICAgICAgICAgICAgIENvZGU6ICcnLFxuICAgICAgICAgICAgICBTZXJ2aWNlTmFtZTogJycsXG4gICAgICAgICAgICAgIEFQSUtleTogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVDb250ZXh0OiB0aGlzLmdldEFwcGxpY2F0aW9uQ29udGV4dENvZGUoXG4gICAgICAgICAgICAgICAgY29uZmlnLk5hbWVcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIENoaWxkcmVuVHlwZTogQ2hpbGRyZW5UeXBlLlBlcm1pc3Npb24sXG4gICAgICAgICAgTmFtZTogJycsXG4gICAgICAgICAgaWQ6ICh0aGlzLmNhcmREYXRhLmxlbmd0aCArIDEpLnRvU3RyaW5nKCksXG4gICAgICAgICAgSWQ6ICh0aGlzLmNhcmREYXRhLmxlbmd0aCArIDEpLnRvU3RyaW5nKCksXG4gICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICBUZW5hbnRJZDogJycsXG4gICAgICAgICAgQ29kZTogJycsXG4gICAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICAgIEFwcGxpY2F0aW9uOiB0aGlzLmFwcGxpY2F0aW9uID8gdGhpcy5hcHBsaWNhdGlvbiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBBUElLZXk6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2FyZERhdGE6IENhcmREYXRhID0ge1xuICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICB0aXRsZTogbmV3TWFwcGVkUm9sZS5OYW1lLFxuICAgICAgICAgIGRhdGE6IG5ld01hcHBlZFJvbGUsXG4gICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgY2hpbGRyZW46IG5ld01hcHBlZFJvbGUuUm9sZUNvbnRleHRzLm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRGb3JtYXR0ZWROYW1lKGMuTmFtZSksXG4gICAgICAgICAgICAgIGRhdGE6IGMsXG4gICAgICAgICAgICAgIGJvZHk6IFtdLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogYy5Sb2xlQWN0aW9ucy5tYXAoKGEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0Rm9ybWF0dGVkTmFtZShhLk5hbWUpLFxuICAgICAgICAgICAgICAgICAgZGF0YTogYSxcbiAgICAgICAgICAgICAgICAgIGJvZHk6IFtdLFxuICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLmNvbmNhdChbbmV3TWFwcGVkUm9sZV0pO1xuICAgICAgICB0aGlzLmNhcmREYXRhLnB1c2goY2FyZERhdGEpO1xuICAgICAgICB0aGlzLnJvbGVDYXJkQ2xpY2tlZChjYXJkRGF0YSk7XG4gICAgICAgIHRoaXMuZGF0YVZpZXcuaXNUYWJsZVZpZXcgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzaG93VGFibGVWaWV3OiBib29sZWFuID0gZmFsc2U7XG4gIG9uU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGVkUm93czogUm9sZVtdKSB7fVxuICByZXRyeU1lc3NhZ2UoKSB7fVxuICBvbkNvbHVtbnNVcGRhdGVkKHVwZGF0ZWRDb2x1bW5zOiBJRGF0YUZpbHRlcltdKSB7XG4gICAgY29uc3QgdXBkYXRlZENvbHVtbkRlZjogQ29sdW1uRGVmaW5pdGlvbjxNYXBwZWRSb2xlPltdID0gW107XG4gICAgdXBkYXRlZENvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGluZ0NvbCA9IHRoaXMucm9sZUNvbnRyb2xTdmMucm9sZUNvbHVtbnMuZmluZChcbiAgICAgICAgKGNvbHVtbikgPT4gY29sdW1uLmhlYWRlciA9PT0gY29sLm5hbWUgfHwgY29sdW1uLmlkID09PSBjb2wubmFtZVxuICAgICAgKTtcbiAgICAgIGlmIChtYXRjaGluZ0NvbCkge1xuICAgICAgICB1cGRhdGVkQ29sdW1uRGVmLnB1c2gobWF0Y2hpbmdDb2wpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy52aXNpYmxlQ29sdW1uRGVmID0gWy4uLnVwZGF0ZWRDb2x1bW5EZWZdO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRmlsdGVyc0FuZFNvcnRzKGlzU2VhcmNoOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAoIWlzU2VhcmNoKSB7XG4gICAgICB0aGlzLmRhdGFWaWV3Lm9uQ2xlYXJTZWFyY2goKTtcbiAgICAgIHRoaXMuY3VycmVudFNlYXJjaFRlcm0gPSAnJztcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIGNvbnN0IGNsaWNrRXZlbnQgPSBuZXcgTW91c2VFdmVudCgnY2xpY2snLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICAgIHZpZXc6IHdpbmRvdyxcbiAgICAgIH0pO1xuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjbGlja0V2ZW50KTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coeyBUaGlzOiB0aGlzIH0pO1xuICAgIHZhciBwYXlsb2FkOiBTZWFyY2hQcm9wZXJ0eVZhbHVlW10gPSB0aGlzLmN1cnJlbnRGaWx0ZXJzLm1hcCgoeCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgUHJvcGVydHlOYW1lOiB4Lm5hbWUsXG4gICAgICAgIEVudGl0eVZhbHVlOiB4LnZhbHVlLFxuICAgICAgICBPcGVyYXRvcjogU2VhcmNoT3BlcmF0b3IuQW5kLFxuICAgICAgICBTaWduOlxuICAgICAgICAgIHguY29uZGl0aW9uICYmIE9iamVjdC5rZXlzKERhdGVGaWx0ZXJUeXBlcykuaW5jbHVkZXMoeC5jb25kaXRpb24pXG4gICAgICAgICAgICA/IChEYXRlRmlsdGVyVHlwZXNbXG4gICAgICAgICAgICAgICAgeC5jb25kaXRpb24gYXMga2V5b2YgdHlwZW9mIERhdGVGaWx0ZXJUeXBlc1xuICAgICAgICAgICAgICBdIGFzIHVua25vd24gYXMgU2VhcmNoUHJvcGVydHlTaWduKVxuICAgICAgICAgICAgOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgICAgIFR5cGU6IFNlYXJjaFByb3BlcnR5VmFsdWVUeXBlLkRhdGUsXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHBheWxvYWQucHVzaCh7XG4gICAgICBQcm9wZXJ0eU5hbWU6ICdBUElLZXknLFxuICAgICAgRW50aXR5VmFsdWU6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgIE9wZXJhdG9yOiBTZWFyY2hPcGVyYXRvci5BbmQsXG4gICAgICBTaWduOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgfSk7XG4gICAgY29uc3Qgc29ydFBhcmFtOiB7IFBhcmFtOiBzdHJpbmc7IE9yZGVyOiBzdHJpbmcgfSB8IG51bGwgPVxuICAgICAgdGhpcy5jdXJyZW50U29ydHMubGVuZ3RoID4gMFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIFBhcmFtOiB0aGlzLmN1cnJlbnRTb3J0c1swXS5uYW1lLFxuICAgICAgICAgICAgT3JkZXI6IHRoaXMuY3VycmVudFNvcnRzWzBdLnZhbHVlLFxuICAgICAgICAgIH1cbiAgICAgICAgOiBudWxsO1xuICAgIGNvbnN0IHNlYXJjaFRlcm1FeGlzdHMgPSB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtLnRyaW0oKS5sZW5ndGggPiAwO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IHNlYXJjaFRlcm1FeGlzdHNcbiAgICAgID8gYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KFxuICAgICAgICAgIGBSb2xlL0dldFJvbGVzV2l0aFBhcmFtLyR7dGhpcy5jdXJyZW50U2VhcmNoVGVybS50cmltKCl9LzAvJHtcbiAgICAgICAgICAgIHRoaXMucGFnZVNpemVcbiAgICAgICAgICB9YFxuICAgICAgICApXG4gICAgICA6IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoXG4gICAgICAgICAgc29ydFBhcmFtXG4gICAgICAgICAgICA/IGBSb2xlL1NlYXJjaFJvbGVzLzAvJHt0aGlzLnBhZ2VTaXplfS8ke3NvcnRQYXJhbS5QYXJhbX0vJHtzb3J0UGFyYW0uT3JkZXJ9YFxuICAgICAgICAgICAgOiBgUm9sZS9TZWFyY2hSb2xlcy8wLyR7dGhpcy5wYWdlU2l6ZX1gLFxuICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlcnMgPSBbXTtcbiAgICAgIHRoaXMuY3VycmVudFNvcnRzID0gW107XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhZ2VTdGF0ZSA9IHJlcyBhcyBQYWdlZFJlc3VsdDxSb2xlPjtcbiAgICAgIHZhciByZXN1bHQgPSAocmVzIGFzIFBhZ2VkUmVzdWx0PFJvbGU+KS5SZXN1bHQ7XG4gICAgICB0aGlzLnNldFVwTWFwcGVkRGF0YShyZXN1bHQpO1xuICAgICAgdGhpcy5zZXRVcENhcmREYXRhKCk7XG4gICAgfVxuICB9XG4gIGFzeW5jIGxvYWRNb3JlRmlsdGVyc0FuZFNvcnRzKCk6IFByb21pc2U8UGFnZWRSZXN1bHQ8Um9sZT4gfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIXRoaXMucGFnZVN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBwYXlsb2FkOiBTZWFyY2hQcm9wZXJ0eVZhbHVlW10gPSB0aGlzLmN1cnJlbnRGaWx0ZXJzLm1hcCgoeCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgUHJvcGVydHlOYW1lOiB4Lm5hbWUsXG4gICAgICAgIEVudGl0eVZhbHVlOiB4LnZhbHVlLFxuICAgICAgICBPcGVyYXRvcjogU2VhcmNoT3BlcmF0b3IuQW5kLFxuICAgICAgICBTaWduOlxuICAgICAgICAgIHguY29uZGl0aW9uICYmIE9iamVjdC5rZXlzKERhdGVGaWx0ZXJUeXBlcykuaW5jbHVkZXMoeC5jb25kaXRpb24pXG4gICAgICAgICAgICA/IChEYXRlRmlsdGVyVHlwZXNbXG4gICAgICAgICAgICAgICAgeC5jb25kaXRpb24gYXMga2V5b2YgdHlwZW9mIERhdGVGaWx0ZXJUeXBlc1xuICAgICAgICAgICAgICBdIGFzIHVua25vd24gYXMgU2VhcmNoUHJvcGVydHlTaWduKVxuICAgICAgICAgICAgOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgICAgIFR5cGU6IFNlYXJjaFByb3BlcnR5VmFsdWVUeXBlLkRhdGUsXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHBheWxvYWQucHVzaCh7XG4gICAgICBQcm9wZXJ0eU5hbWU6ICdBUElLZXknLFxuICAgICAgRW50aXR5VmFsdWU6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgIE9wZXJhdG9yOiBTZWFyY2hPcGVyYXRvci5BbmQsXG4gICAgICBTaWduOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgfSk7XG4gICAgY29uc3Qgc29ydFBhcmFtOiB7IFBhcmFtOiBzdHJpbmc7IE9yZGVyOiBzdHJpbmcgfSB8IG51bGwgPVxuICAgICAgdGhpcy5jdXJyZW50U29ydHMubGVuZ3RoID4gMFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIFBhcmFtOiB0aGlzLmN1cnJlbnRTb3J0c1swXS5uYW1lLFxuICAgICAgICAgICAgT3JkZXI6IHRoaXMuY3VycmVudFNvcnRzWzBdLnZhbHVlLFxuICAgICAgICAgIH1cbiAgICAgICAgOiBudWxsO1xuICAgIGNvbnN0IHNlYXJjaFRlcm1FeGlzdHMgPSB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtLnRyaW0oKS5sZW5ndGggPiAwO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IHNlYXJjaFRlcm1FeGlzdHNcbiAgICAgID8gYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KFxuICAgICAgICAgIGBSb2xlL0dldFJvbGVzV2l0aFBhcmFtLyR7dGhpcy5jdXJyZW50U2VhcmNoVGVybS50cmltKCl9LyR7XG4gICAgICAgICAgICB0aGlzLnBhZ2VTdGF0ZS5Ta2lwXG4gICAgICAgICAgfS8ke3RoaXMucGFnZVNpemV9YFxuICAgICAgICApXG4gICAgICA6IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoXG4gICAgICAgICAgc29ydFBhcmFtXG4gICAgICAgICAgICA/IGBSb2xlL1NlYXJjaFJvbGVzLyR7dGhpcy5wYWdlU3RhdGUuU2tpcH0vJHt0aGlzLnBhZ2VTaXplfS8ke3NvcnRQYXJhbS5QYXJhbX0vJHtzb3J0UGFyYW0uT3JkZXJ9YFxuICAgICAgICAgICAgOiBgUm9sZS9TZWFyY2hSb2xlcy8ke3RoaXMucGFnZVN0YXRlLlNraXB9LyR7dGhpcy5wYWdlU2l6ZX1gLFxuICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByZXN1bHQgPSByZXMgYXMgUGFnZWRSZXN1bHQ8Um9sZT47XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuICBvbkZpbHRlclVwZGF0ZWQodXBkYXRlZEZpbHRlcnM6IElEYXRhRmlsdGVyW10gfCBzdHJpbmcpIHtcbiAgICAvLyBFbnN1cmUgdXBkYXRlZEZpbHRlcnMgaXMgYW4gYXJyYXlcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh1cGRhdGVkRmlsdGVycykpIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlcnMgPSB1cGRhdGVkRmlsdGVycztcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyc0FuZFNvcnRzKCk7XG4gICAgfVxuICB9XG4gIG9uU29ydFVwZGF0ZWQodXBkYXRlZFNvcnRzOiBJRGF0YUZpbHRlcltdKSB7XG4gICAgdGhpcy5jdXJyZW50U29ydHMgPSB1cGRhdGVkU29ydHM7XG4gICAgY29uc29sZS5sb2coeyBTb3J0czogdXBkYXRlZFNvcnRzIH0pO1xuICAgIHRoaXMudXBkYXRlRmlsdGVyc0FuZFNvcnRzKCk7XG4gIH1cblxuICBoYW5kbGVTZWFyY2goZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSkge1xuICAgIHRoaXMuc2VhcmNoVGVybSQubmV4dChldmVudC52YWx1ZSk7XG4gIH1cblxuICBoYW5kbGVFeHBvcnQoZXhwb3J0ZWREYXRhOiBQYXJ0aWFsPGFueT5bXSkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdFeHBvcnRlZCBkYXRhOicsIGV4cG9ydGVkRGF0YSk7XG4gICAgdGhpcy5kb3dubG9hZENTVihleHBvcnRlZERhdGEpO1xuICB9XG4gIHByaXZhdGUgZG93bmxvYWRDU1YoZGF0YTogUGFydGlhbDxhbnk+W10pIHtcbiAgICBjb25zdCBoZWFkZXJzID0gT2JqZWN0LmtleXMoZGF0YVswXSk7XG4gICAgY29uc3QgY3N2Q29udGVudCA9IFtcbiAgICAgIGhlYWRlcnMuam9pbignLCcpLFxuICAgICAgLi4uZGF0YS5tYXAoKHJvdykgPT4gaGVhZGVycy5tYXAoKGhlYWRlcikgPT4gcm93W2hlYWRlcl0pLmpvaW4oJywnKSksXG4gICAgXS5qb2luKCdcXG4nKTtcblxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbY3N2Q29udGVudF0sIHsgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7JyB9KTtcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGlmIChsaW5rLmRvd25sb2FkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHVybCk7XG4gICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCAnZXhwb3J0LmNzdicpO1xuICAgICAgbGluay5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgbGluay5jbGljaygpO1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbiAgICB9XG4gIH1cblxuICBnZXRNb2NrUm9sZXMoKTogUm9sZVtdIHtcbiAgICByZXR1cm4gbmV3IEFycmF5KDEwKS5maWxsKDEpLm1hcCgoaWQsIGkpID0+ICh7XG4gICAgICBJZDogaWQgKyBpLFxuICAgICAgaWQ6IChpZCArIGkpLnRvU3RyaW5nKCksXG4gICAgICBOYW1lOiB0aGlzLm1vY2tOYW1lc1tpXSB8fCAnJyxcbiAgICAgIFJvbGVDb250ZXh0czogdGhpcy5yYW5kb21Db250ZXh0cygpLFxuICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICBUZW5hbnRJZDogYFRlbmFudCR7aWQgKyBpfWAsXG4gICAgICBDb2RlOiAnJyxcbiAgICAgIFNlcnZpY2VOYW1lOiAnJyxcbiAgICAgIEFQSUtleTogJycsXG4gICAgfSkpO1xuICB9XG5cbiAgbW9ja05hbWVzOiBzdHJpbmdbXSA9IFtcbiAgICAnQWRtaW4nLFxuICAgICdTdXBlciBBZG1pbicsXG4gICAgJ01hbmFnZXInLFxuICAgICdJbnRlcm4nLFxuICAgICdQcm9kdWN0aW9uIE1hbmFnZXInLFxuICAgICdDRU8nLFxuICAgICdDVE8nLFxuICAgICdDT08nLFxuICAgICdEZXZlbG9wZXInLFxuICAgICdFbmdpbmVlcicsXG4gIF07XG5cbiAgcmFuZG9tTmFtZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy5tb2NrTmFtZXMubGVuZ3RoKTtcbiAgICByZXR1cm4gdGhpcy5tb2NrTmFtZXNbcmFuZG9tSW5kZXhdO1xuICB9XG5cbiAgcmFuZG9tQ29udGV4dHMoKTogUm9sZUNvbnRleHRbXSB7XG4gICAgY29uc3QgcmFuZG9tTnVtYmVyID0gTWF0aC5mbG9vcihcbiAgICAgIE1hdGgucmFuZG9tKCkgKiBPYmplY3Qua2V5cyhVSXMpLmxlbmd0aCArIDFcbiAgICApO1xuICAgIHZhciByZXR1cm5BcnJheTogUm9sZUNvbnRleHRbXSA9IFtdO1xuICAgIGNvbnN0IHVzZWRMaXN0OiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZG9tTnVtYmVyOyBpKyspIHtcbiAgICAgIGxldCByYW5kb21JbmRleDtcbiAgICAgIGRvIHtcbiAgICAgICAgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBPYmplY3Qua2V5cyhVSXMpLmxlbmd0aCk7XG4gICAgICB9IHdoaWxlICh1c2VkTGlzdC5pbmNsdWRlcyhyYW5kb21JbmRleCkpO1xuXG4gICAgICByZXR1cm5BcnJheS5wdXNoKHtcbiAgICAgICAgSWQ6ICdjb250ZXh0JyArIGksXG4gICAgICAgIGlkOiAoJ2NvbnRleHQnICsgaSkudG9TdHJpbmcoKSxcbiAgICAgICAgTmFtZTogT2JqZWN0LmtleXMoVUlzKVtyYW5kb21JbmRleF0sXG4gICAgICAgIFJvbGU6ICcnLFxuICAgICAgICBSb2xlQWN0aW9uczogdGhpcy5yYW5kb21BY3Rpb25zKCksXG4gICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgVGVuYW50SWQ6IGBUZW5hbnQkeydjb250ZXh0JyArIGl9YCxcbiAgICAgICAgQ29kZTogJycsXG4gICAgICAgIFNlcnZpY2VOYW1lOiAnJyxcbiAgICAgICAgQVBJS2V5OiAnJyxcbiAgICAgICAgQXBwbGljYXRpb25Sb2xlQ29udGV4dDogJycsXG4gICAgICB9KTtcbiAgICAgIHVzZWRMaXN0LnB1c2gocmFuZG9tSW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuQXJyYXk7XG4gIH1cblxuICByYW5kb21BY3Rpb25zKCk6IFJvbGVBY3Rpb25bXSB7XG4gICAgY29uc3QgcmFuZG9tTnVtYmVyID0gTWF0aC5mbG9vcihcbiAgICAgIE1hdGgucmFuZG9tKCkgKiBPYmplY3Qua2V5cyhVSUFjdGlvbnMpLmxlbmd0aCArIDFcbiAgICApO1xuICAgIHZhciByZXR1cm5BcnJheTogUm9sZUFjdGlvbltdID0gW107XG4gICAgY29uc3QgdXNlZExpc3Q6IG51bWJlcltdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5kb21OdW1iZXI7IGkrKykge1xuICAgICAgbGV0IHJhbmRvbUluZGV4O1xuICAgICAgZG8ge1xuICAgICAgICByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIE9iamVjdC5rZXlzKFVJQWN0aW9ucykubGVuZ3RoKTtcbiAgICAgIH0gd2hpbGUgKHVzZWRMaXN0LmluY2x1ZGVzKHJhbmRvbUluZGV4KSk7XG5cbiAgICAgIHJldHVybkFycmF5LnB1c2goe1xuICAgICAgICBJZDogJ2FjdGlvbicgKyBpLFxuICAgICAgICBpZDogKCdhY3Rpb24nICsgaSkudG9TdHJpbmcoKSxcbiAgICAgICAgTmFtZTogT2JqZWN0LmtleXMoVUlBY3Rpb25zKVtyYW5kb21JbmRleF0sXG4gICAgICAgIFJvbGU6ICcnLFxuICAgICAgICBDb250ZXh0OiAnJyxcbiAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICBUZW5hbnRJZDogYFRlbmFudCR7J2FjdGlvbicgKyBpfWAsXG4gICAgICAgIENvZGU6ICcnLFxuICAgICAgICBTZXJ2aWNlTmFtZTogJycsXG4gICAgICAgIEFQSUtleTogJycsXG4gICAgICAgIEFwcGxpY2F0aW9uUm9sZUFjdGlvbjogJycsXG4gICAgICB9KTtcbiAgICAgIHVzZWRMaXN0LnB1c2gocmFuZG9tSW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuQXJyYXk7XG4gIH1cblxuICBlZGl0VmFsdWUodmFsdWU6IE1hcHBlZFJvbGUpIHtcbiAgICBjb25zdCBjYXJkID0gdGhpcy5jYXJkRGF0YS5maW5kKCh4KSA9PiB4LmRhdGEuSWQgPT0gdmFsdWUuSWQpO1xuICAgIGlmIChjYXJkICYmIHRoaXMuY2FyZERhdGFWaWV3KSB7XG4gICAgICB0aGlzLmRhdGFWaWV3LnRvZ2dsZVZpZXcoKTtcbiAgICAgIGNhcmQuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5jdXJyZW50RGF0YSA9IHRoaXMuY2FyZERhdGFWaWV3Lm9uSXRlbUNsaWNrKGNhcmQpO1xuICAgICAgLy8gaWYgKHRoaXMuY3VycmVudERhdGEpIHtcbiAgICAgIC8vICAgdGhpcy5mb3JtLmNvbnRyb2xzWydOYW1lJ10uc2V0VmFsdWUodGhpcy5jdXJyZW50RGF0YS5kYXRhPy5OYW1lKTtcbiAgICAgIC8vIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgI21lc3NhZ2VMb2cgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC00IG1lc3NhZ2UtbG9nLWNvbnRhaW5lclwiPlxuICA8ZGl2ICpuZ0lmPVwidGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID4gMFwiXG4gICAgY2xhc3M9XCJjb250ZXh0LWJhbm5lciBweS0zIHB4LTQgcm91bmRlZC14bCBmbGV4IGl0ZW0tY2VudGVyIGp1c3RpZnktc3BhY2UtYmV0d2VlbiBnYXAtM1wiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIGZsZXgtMSBjb250ZXh0LWJhbm5lci1jb250ZW50XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGV4dC1jb250ZW50IGl0ZW1zLWNlbnRlciBmbGV4IGdhcC0yXCIgKm5nRm9yPVwibGV0IGNvbnRleHQgb2YgdGhpcy5jYXJkQ29udGV4dEhpc3Rvcnk7IGluZGV4IGFzIGlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRleHQtbWFpbi1jb250ZW50LWNvbnRhaW5lciBmbGV4IGdhcC00XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb250ZXh0LWNhcHRpb24gZm9udC1ib2xkIHRleHQtWyM0MDQwNDBdXCI+e3tjb250ZXh0LmRhdGEuQ2hpbGRyZW5UeXBlICYmXG4gICAgICAgICAgICBjb250ZXh0LmRhdGEuQ2hpbGRyZW5UeXBlID09IGNoaWxkUGVybWlzc2lvblJlZj8gY29udGV4dC5kYXRhLk5hbWU6IGNvbnRleHQudGl0bGV9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImkgPT0gdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoIC0xXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY29udGV4dC1zdWJjYXB0aW9uXCI+e3t0aGlzLmdldENhcmRTdWJDYXB0aW9uKGNvbnRleHQpfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaSA8IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCAtMVwiPi88L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kXCI+XG4gICAgICA8dmVyYmVuLXN2ZyAoY2xpY2spPVwiY2xvc2VEZXRhaWxzKClcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgaWNvbj1cImNsb3NlLWNpcmNsZS1mdWxsXCIgW3dpZHRoXT1cIjIwXCJcbiAgICAgICAgW2hlaWdodF09XCIyMFwiPjwvdmVyYmVuLXN2Zz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDx2ZXJiZW4tZGF0YS12aWV3ICN2ZHYgW3ZpZXdTdGF0ZV09XCJ7XG4gICAgICBpc1NlYXJjaDogdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID09IDAsXG4gICAgICBpc0NvbHVtbjogdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID09IDAsXG4gICAgICBpc0ZpbHRlcjogdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID09IDAsXG4gICAgICBpc1NvcnQ6IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwLFxuICAgICAgaXNFeHBvcnQ6IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwLFxuICAgICAgaXNTZWxlY3Q6IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwLFxuICAgICAgaXNDcmVhdGU6IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwLFxuICAgICAgaXNUb2dnbGU6dGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID09IDAsXG4gICAgfVwiIFtidXR0b25DbGFzc109XCInbXktY3VzdG9tLWJ1dHRvbi1jbGFzcydcIiBbaWNvbkNsYXNzXT1cIidteS1pY29uLWNsYXNzJ1wiXG4gICAgW2FjdGl2ZUljb25DbGFzc109XCInbXktYWN0aXZlLWljb24tY2xhc3MnXCIgW2lzVGFibGVWaWV3XT1cInRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwXCJcbiAgICBbc2VsZWN0ZWRDb2x1bW5Db3VudF09XCIwXCIgW3NlbGVjdGVkU29ydENvdW50XT1cIjBcIiBbc2VsZWN0ZWRGaWx0ZXJUYWJsZUNvdW50XT1cIjBcIiAodmlld0NoYW5nZSk9XCJvblZpZXdDaGFuZ2UoJGV2ZW50KVwiXG4gICAgKHN0YXRlQ2hhbmdlKT1cIm9uU3RhdGVDaGFuZ2UoJGV2ZW50KVwiIChvblNlYXJjaENoYW5nZSk9XCJoYW5kbGVTZWFyY2goJGV2ZW50KVwiPlxuICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgdGFibGUtY29udGVudD5cbiAgICAgIDxsaWItZGF0YS10YWJsZSBbZGF0YV09XCJkYXRhXCIgW2NvbHVtbnNdPVwidmlzaWJsZUNvbHVtbkRlZlwiIFtzdHlsZUNvbmZpZ109XCJzdHlsZXNcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJzZWxlY3RcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LWlzU2VsZWN0ZWQ9XCJpc1NlbGVjdGVkXCIgbGV0LXRvZ2dsZVJvd1NlbGVjdGlvbj1cInRvZ2dsZVJvd1NlbGVjdGlvblwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImlzU2VsZWN0ZWRcIiAoY2hhbmdlKT1cInRvZ2dsZVJvd1NlbGVjdGlvbigpXCIgLz5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGVyIGxldC1hbGxSb3dzU2VsZWN0ZWQ9XCJhbGxSb3dzU2VsZWN0ZWRcIiBsZXQtc29tZVJvd3NTZWxlY3RlZD1cInNvbWVSb3dzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgbGV0LXRvZ2dsZUFsbFJvd3M9XCJ0b2dnbGVBbGxSb3dzXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiYWxsUm93c1NlbGVjdGVkKClcIiBbaW5kZXRlcm1pbmF0ZV09XCJzb21lUm93c1NlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZUFsbFJvd3MoKVwiIC8+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiY3JlYXRlZEF0XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC12YWx1ZT5cbiAgICAgICAgICAgIHt7IHZhbHVlIHwgZGF0ZSB9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cInVwZGF0ZWRBdFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtdmFsdWU+XG4gICAgICAgICAgICB7eyB2YWx1ZSB8IGRhdGUgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cImFjdGlvbnNcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXJvdz1cInJvd1wiIGxldC12YWx1ZT5cbiAgICAgICAgICAgIDx2ZXJiZW4tcG9wLVVwIFtjdXN0b21TdHlsZXNdPVwieyd6LWluZGV4JzogJzk5J31cIiBbZHJvcGRvd25PcGVuXT1cImlzRHJvcGRvd25PcGVuKHJvdylcIlxuICAgICAgICAgICAgICBbZW5hYmxlTW91c2VMZWF2ZV09XCJmYWxzZVwiIChjbG9zZSk9XCJvbkNsb3NlKClcIj5cbiAgICAgICAgICAgICAgPHZlcmJlbi1zdmcgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBhY3Rpb25zLWljb25cIiAoY2xpY2spPVwib3BlbkRyb3Bkb3duKHJvdylcIiBkcm9wZG93bi10cmlnZ2VyXG4gICAgICAgICAgICAgICAgaWNvbj1cImxpc3RcIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3AtdXAtY29udGVudCBmbGV4IGZsZXgtY29sXCIgZHJvcGRvd24tY29udGVudD5cbiAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJlZGl0VmFsdWUodmFsdWUpXCIgY2xhc3M9XCJwb3AtdXAtdmFsdWUgY3Vyc29yLXBvaW50ZXJcIj5FZGl0PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwidmlld0RldGFpbHNGcm9tVGFibGUodmFsdWUpXCIgY2xhc3M9XCJwb3AtdXAtdmFsdWUgY3Vyc29yLXBvaW50ZXJcIj5WaWV3IERldGFpbHM8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wLXVwLXZhbHVlIGN1cnNvci1wb2ludGVyXCI+VmlldyBVc2VyczwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdmVyYmVuLXBvcC1VcD5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImZsZXggZ2FwLTQgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnIChjbGljayk9XCJlZGl0VmFsdWUodmFsdWUpXCIgaWNvbj1cImVkaXRcIiBbd2lkdGhdPVwiMTVcIiBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwidmlld0RldGFpbHNGcm9tVGFibGUodmFsdWUpXCIgY2xhc3M9XCJ2aWV3LWxpbmtzIHZpZXctZGV0YWlsc1wiPnZpZXcgZGV0YWlsczwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aWV3LWxpbmtzIHZpZXctdXNlcnNcIj52aWV3IHVzZXJzPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9saWItZGF0YS10YWJsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNhcmQtY29udGVudD5cbiAgICAgIDx2ZXJiZW4tY2FyZC1kYXRhLXZpZXcgYm9yZGVyUmFkaXVzPVwiMTJweFwiICN2ZGN2IGRhdGFJZD1cIklkXCIgYm9yZGVyPVwiNXB4XCIgW2NhcmREYXRhTGlzdF09XCJjYXJkRGF0YVwiXG4gICAgICAgIHJiZ0NvbG9yPVwiI2Y1ZjZmOVwiIG1nPVwiMHB4XCI+XG4gICAgICAgIDx2ZXJiZW4tbGVmdC1jYXJkLWRhdGEtdmlldyBjbGFzcz1cInNwYWNlLXktN1wiPlxuICAgICAgICAgIDx2ZXJiZW4tbGVmdC1jYXJkLWRhdGEgI3ZsY2QgW3BhcmVudF09XCJ2ZGN2XCIgZGF0YUlkPVwiTWFpbEFkZHJlc3NcIlxuICAgICAgICAgICAgY2xhc3M9XCJiZy1zZWNvbmRhcnktMTAwIHJvdW5kZWQteGwgYm9yZGVyLXByaW1hcnkgYm9yZGVyLVsxcHhdXCIgW2NhcmREYXRhTGlzdF09XCJjYXJkRGF0YVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjYXJkIGxldC1pdGVtPlxuICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJyb2xlQ2FyZENsaWNrZWQoaXRlbSlcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5kYXRhLkNoaWxkcmVuVHlwZSAmJiBpdGVtLmRhdGEuQ2hpbGRyZW5UeXBlID09IGNoaWxkUGVybWlzc2lvblJlZlwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGN1cnNvci1wb2ludGVyIGgtW21heC1jb250ZW50XVwiPlxuICAgICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnIFt3aWR0aF09XCIxNVwiIFtoZWlnaHRdPVwiMTVcIiAoY2xpY2spPVwidG9nZ2xlQ2hpbGRyZW4oaXRlbSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoPyd2aXNpYmxlJzonaW52aXNpYmxlJ1wiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIml0ZW1zLWNlbnRlciBmbGV4ICBwci0xIGN1cnNvci1wb2ludGVyXCIgW2ljb25dPVwiaXRlbS5pc0NoaWxkcmVuRXhwYW5kZWQ/J21pbnVzJzoncGx1cydcIiAvPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4ICB3LWZ1bGwgYmctc2Vjb25kYXJ5IHJvdW5kZWQteGxcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTMgcm91bmRlZC14bCByb3VuZGVkLXRyLW5vbmUgcm91bmRlZC1ici1ub25lXCIgW25nQ2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbS5zZWxlY3RlZCA/ICdiZy1wcmltYXJ5JyA6ICdiZy1zZWNvbmRhcnktMjAwJ1xuICAgICAgICAgICAgICAgICAgICBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0zIHB4LTQgZmxleC0xIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLXN0YXJ0IGZsZXgtMSBnYXAtMSBqdXN0aWZ5LWJldHdlZW4gaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LTEgY2FyZC1taW4taGVpZ2h0IGp1c3RpZnktYmV0d2VlbiBoLVsxMDAlXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwibXktMCBmb250LWJvbGQgdGV4dC1bIzQwNDA0MF0gbGVhZGluZy1bMTkuNXB4XVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGF0YS5OYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiIXRleHQtWzEwcHhdIGZvbnQtbGlnaHQgdGV4dC1bIzQwNDA0MF0gbGVhZGluZy1bMTIuMXB4XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tnZXRDYXJkU3ViQ2FwdGlvbihpdGVtKX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDBcIiBjbGFzcz1cImZsZXggaXRlbXMtZW5kIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAoY2xpY2spPVwidmlld0RldGFpbHMoaXRlbSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXktMCB1bmRlcmxpbmUgdGV4dC1bIzM0NzlFOV0gdGV4dC1bMTJweF0gbGVhZGluZy1bMTYuNnB4XSBjdXJzb3ItcG9pbnRlciBmb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3IGRldGFpbHM8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWl0ZW0uZGF0YS5DaGlsZHJlblR5cGUgfHwgaXRlbS5kYXRhLkNoaWxkcmVuVHlwZSAhPT0gY2hpbGRQZXJtaXNzaW9uUmVmXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaC1bbWF4LWNvbnRlbnRdXCI+XG4gICAgICAgICAgICAgICAgPHZlcmJlbi1zdmcgW25nQ2xhc3NdPVwiaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aD8ndmlzaWJsZSc6J2ludmlzaWJsZSdcIiBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCIxNVwiIChjbGljayk9XCJ0b2dnbGVDaGlsZHJlbihpdGVtKVwiIGNsYXNzPVwiaXRlbXMtY2VudGVyIGZsZXggIHByLTEgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgW2ljb25dPVwiaXRlbS5pc0NoaWxkcmVuRXhwYW5kZWQ/J21pbnVzJzoncGx1cydcIiAvPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4ICB3LWZ1bGwgYmctc2Vjb25kYXJ5IHJvdW5kZWQteGxcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTMgcm91bmRlZC14bCByb3VuZGVkLXRyLW5vbmUgcm91bmRlZC1ici1ub25lXCIgW25nQ2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbS5zZWxlY3RlZCA/ICdiZy1wcmltYXJ5JyA6ICdiZy1zZWNvbmRhcnktMjAwJ1xuICAgICAgICAgICAgICAgICAgICBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0zIHB4LTQgZmxleC0xIGZsZXggZ2FwLTIgaC1bMTAwJV0gaXRlbXMtc3RhcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiaXRlbS5kYXRhPy5TZWxlY3RlZCAhPSB1bmRlZmluZWRcIiBbZGlzYWJsZWRdPVwidGhpcy5pc0NoZWNrYm94RGlzYWJsZWQoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwibXQtMSBjdXJzb3ItcG9pbnRlclwiIFsobmdNb2RlbCldPVwiaXRlbS5kYXRhLlNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IHRoaXMuc2F2ZVJvbGVEeW5hbWljKGl0ZW0pXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtc3RhcnQgZmxleC0xIGdhcC0xIGp1c3RpZnktYmV0d2VlbiBoLVsxMDAlXVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtMSBjYXJkLW1pbi1oZWlnaHQganVzdGlmeS1iZXR3ZWVuIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJteS0wIGZvbnQtYm9sZCB0ZXh0LVsjNDA0MDQwXSBsZWFkaW5nLVsxOS41cHhdXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS50aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvaDM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiF0ZXh0LVsxMHB4XSBmb250LWxpZ2h0IHRleHQtWyM0MDQwNDBdIGxlYWRpbmctWzEyLjFweF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7Z2V0Q2FyZFN1YkNhcHRpb24oaXRlbSl9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwXCIgY2xhc3M9XCJmbGV4IGl0ZW1zLWVuZCBoLVsxMDAlXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgKGNsaWNrKT1cInZpZXdEZXRhaWxzKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJteS0wIHVuZGVybGluZSB0ZXh0LVsjMzQ3OUU5XSB0ZXh0LVsxMnB4XSBsZWFkaW5nLVsxNi42cHhdIGN1cnNvci1wb2ludGVyIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcgZGV0YWlsczwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjYXJkQ2hpbGQgbGV0LWl0ZW0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGgtW21heC1jb250ZW50XVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4ICB3LWZ1bGwgYmctc2Vjb25kYXJ5IHJvdW5kZWQteGxcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTMgcm91bmRlZC14bCByb3VuZGVkLXRyLW5vbmUgcm91bmRlZC1ici1ub25lXCIgW25nQ2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbS5zZWxlY3RlZCA/ICdiZy1wcmltYXJ5JyA6ICdiZy1zZWNvbmRhcnktMjAwJ1xuICAgICAgICAgICAgICAgICAgICBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0zIHB4LTQgZmxleC0xIGZsZXggZ2FwLTIgaC1bMTAwJV0gaXRlbXMtc3RhcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiaXRlbS5kYXRhPy5TZWxlY3RlZCAhPSB1bmRlZmluZWRcIiBbZGlzYWJsZWRdPVwidGhpcy5pc0NoZWNrYm94RGlzYWJsZWQoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwibXQtMSBjdXJzb3ItcG9pbnRlclwiIFsobmdNb2RlbCldPVwiaXRlbS5kYXRhLlNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IHRoaXMuc2F2ZVJvbGVEeW5hbWljKGl0ZW0pXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtc3RhcnQgZmxleC0xIGdhcC0xIGp1c3RpZnktYmV0d2VlbiBoLVsxMDAlXVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtMSBjYXJkLW1pbi1oZWlnaHQganVzdGlmeS1iZXR3ZWVuIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJteS0wIGZvbnQtYm9sZCB0ZXh0LVsjNDA0MDQwXSBsZWFkaW5nLVsxOS41cHhdXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS50aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvaDM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiF0ZXh0LVsxMHB4XSBmb250LWxpZ2h0IHRleHQtWyM0MDQwNDBdIGxlYWRpbmctWzEyLjFweF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7Z2V0Q2FyZFN1YkNhcHRpb24oaXRlbSl9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwXCIgY2xhc3M9XCJmbGV4IGl0ZW1zLWVuZCBoLVsxMDAlXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgKGNsaWNrKT1cInZpZXdEZXRhaWxzQ2hpbGQoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm15LTAgdW5kZXJsaW5lIHRleHQtWyMzNDc5RTldIHRleHQtWzEycHhdIGxlYWRpbmctWzE2LjZweF0gY3Vyc29yLXBvaW50ZXIgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldyBkZXRhaWxzPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC92ZXJiZW4tbGVmdC1jYXJkLWRhdGE+XG4gICAgICAgIDwvdmVyYmVuLWxlZnQtY2FyZC1kYXRhLXZpZXc+XG4gICAgICAgIDx2ZXJiZW4tcmlnaHQtY2FyZC1kYXRhLXZpZXcgKm5nSWY9XCJ0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPT0gMFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcGFyZW50PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRoaXMuY3VycmVudERhdGFcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgcm91bmRlZC14bCBoLWZ1bGwgdy1mdWxsIGp1c3RpZnktYmV0d2VlbiByZWxhdGl2ZSBzcGFjZS15LTRcIj5cbiAgICAgICAgICAgICAgPHZlcmJlbmEtaW5wdXQgbmFtZT1cIk5hbWVcIiBsYWJlbD1cIk5hbWVcIiAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVUYWJsZSgpXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRoaXMuY3VycmVudERhdGEuZGF0YS5OYW1lXCIgLz5cblxuICAgICAgICAgICAgICA8IS0tIGJ1dHRvbnMgLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBib3R0b20tOCBsZWZ0LTAgcmlnaHQtMFwiPlxuICAgICAgICAgICAgICAgIDx2ZXJiZW5hLWJ1dHRvbiBjbGFzcz1cInZlcmJlbi1kZWxldGUtYnV0dG9uXCIgdGV4dD1cIkRlbGV0ZVwiPjwvdmVyYmVuYS1idXR0b24+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICAgIDx2ZXJiZW5hLWJ1dHRvbiBjbGFzcz1cInZlcmJlbi1zd2l0Y2gtYnV0dG9uXCIgKGNsaWNrKT1cInZkdi50b2dnbGVWaWV3KClcIlxuICAgICAgICAgICAgICAgICAgICB0ZXh0PVwiU3dpdGNoIFRvIFRhYmxlXCI+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDx2ZXJiZW5hLWJ1dHRvbiBjbGFzcz1cInZlcmJlbi1wcmltYXJ5LWJ1dHRvblwiIChjbGljayk9XCJ0aGlzLnNhdmVSb2xlKClcIiB0ZXh0PVwiU2F2ZVwiPjwvdmVyYmVuYS1idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3ZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldz5cbiAgICAgICAgPCEtLSA8dmVyYmVuLXJpZ2h0LWNhcmQtZGF0YS12aWV3PlxuICAgICAgICAgIHllc2hoaGhoaFxuICAgICAgICA8L3ZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldz4gLS0+XG5cbiAgICAgICAgPHZlcmJlbi1jYXJkLWRhdGEtdmlldy1mb290ZXIgKm5nSWY9XCJ0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPT0gMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiF2ZGN2Lmhhc0N1cnJlbnRJdGVtKCkgJiYgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnkubGVuZ3RoID09IDBcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm1lc3NhZ2UtbG9nLWJ1dHRvbi1jb250YWluZXIgZmxleCBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uIFtmb250V2VpZ2h0XT1cIidib2xkJ1wiIFtiZ0NvbG9yXT1cIicjOEU4RDg3J1wiIFtib3JkZXJSYWRpdXNdPVwiJzRweCdcIiBbdGV4dENvbG9yXT1cIicjZmZmJ1wiXG4gICAgICAgICAgICAgICAgW3RleHRdPVwiJ0RlbGV0ZSdcIj5cbiAgICAgICAgICAgICAgPC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgge3t2ZGN2Lmhhc0N1cnJlbnRJdGVtKCk/J2ZsZXgtMSc6Jyd9fSBqdXN0aWZ5LWVuZCBpdGVtcy1jZW50ZXIgZ2FwLTVcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwYWdpbmF0b3ItdGV4dFwiPnt7IGNhcmREYXRhLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9hZE1vcmUoKVwiIGNsYXNzPVwibG9hZC1tb3JlIHZpZXctbGlua3NcIj5Mb2FkIG1vcmU8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3ZlcmJlbi1jYXJkLWRhdGEtdmlldy1mb290ZXI+XG4gICAgICA8L3ZlcmJlbi1jYXJkLWRhdGEtdmlldz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNvbHVtbi1jb250ZW50PlxuICAgICAgPHZlcmJlbi12aXNpYmxlLWNvbHVtbiAoY29sdW1uc1VwZGF0ZWQpPVwib25Db2x1bW5zVXBkYXRlZCgkZXZlbnQpXCIgW2JvcmRlcl09XCInMXB4IHNvbGlkIHJnYmEoMjEyLCAxNjAsIDcsIDEpJ1wiXG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjEwcHhcIiBib3hTaGFkb3c9XCIycHggMnB4IDJweCAwcHggc2lsdmVyXCIgYmdDb2xvcj1cIndoaXRlXCIgd2lkdGg9XCI0MDBweFwiIHRleHRDb2xvcj1cImJsYWNrXCIgcGQ9XCIxcmVtXCJcbiAgICAgICAgcHJpbWFyeUNvbG9yPVwiI0ZGRTY4MVwiIHNlY29uZGFyeUNvbG9yPVwiIzM0NzlFOVwiIFtjb2x1bW5zXT1cInZpc2libGVDb2x1bW5zXCJcbiAgICAgICAgW2Rpc3BsYXllZENvbHVtbnNdPVwiNVwiPjwvdmVyYmVuLXZpc2libGUtY29sdW1uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZmlsdGVyLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLXRhYmxlLWZpbHRlciAoZmlsdGVyc0FwcGxpZWQpPVwib25GaWx0ZXJVcGRhdGVkKCRldmVudClcIiBbYm9yZGVyXT1cIicxcHggc29saWQgcmdiYSgyMTIsIDE2MCwgNywgMSknXCJcbiAgICAgICAgYm9yZGVyUmFkaXVzPVwiMTBweFwiIGJveFNoYWRvdz1cIjJweCAycHggMnB4IDBweCBzaWx2ZXJcIiBiZ0NvbG9yPVwid2hpdGVcIiB3aWR0aD1cIjQyMHB4XCIgdGV4dENvbG9yPVwiYmxhY2tcIiBwZD1cIjFyZW1cIlxuICAgICAgICBwcmltYXJ5Q29sb3I9XCIjRkZFNjgxXCIgc2Vjb25kYXJ5Q29sb3I9XCIjMzQ3OUU5XCIgdGVydGlhcnlDb2xvcj1cIiM0MDQwNDBcIiBbZmlsdGVyT3B0aW9uc109XCJmaWx0ZXJBcnJheVwiXG4gICAgICAgIFttYXhGaWx0ZXJMZW5ndGhdPVwiM1wiPjwvdmVyYmVuLXRhYmxlLWZpbHRlcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IHNvcnQtY29udGVudD5cbiAgICAgIDx2ZXJiZW4tc29ydC10YWJsZSAoc2VsZWN0ZWRPcHRpb25zKT1cIm9uU29ydFVwZGF0ZWQoJGV2ZW50KVwiIFtib3JkZXJdPVwiJzFweCBzb2xpZCByZ2JhKDIxMiwgMTYwLCA3LCAxKSdcIlxuICAgICAgICBib3JkZXJSYWRpdXM9XCIxMHB4XCIgYm94U2hhZG93PVwiMnB4IDJweCAycHggMHB4IHNpbHZlclwiIGJnQ29sb3I9XCJ3aGl0ZVwiIHdpZHRoPVwiNDAwcHhcIiB0ZXh0Q29sb3I9XCJibGFja1wiIHBkPVwiMXJlbVwiXG4gICAgICAgIHByaW1hcnlDb2xvcj1cIiNGRkU2ODFcIiBzZWNvbmRhcnlDb2xvcj1cIiMzNDc5RTlcIiB0ZXJ0aWFyeUNvbG9yPVwiIzQwNDA0MFwiIFtlbmFibGVEcmFnQW5kRHJvcF09XCJ0cnVlXCJcbiAgICAgICAgW3NvcnRPcHRpb25zXT1cInNvcnRPcHRpb25zXCI+PC92ZXJiZW4tc29ydC10YWJsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGV4cG9ydC1jb250ZW50PlxuICAgICAgPGxpYi1kYXRhLWV4cG9ydCBbZGF0YV09XCJkYXRhXCIgKGV4cG9ydERhdGFFdmVudCk9XCJoYW5kbGVFeHBvcnQoJGV2ZW50KVwiPlxuICAgICAgPC9saWItZGF0YS1leHBvcnQ+XG4gICAgPC9kaXY+XG4gIDwvdmVyYmVuLWRhdGEtdmlldz5cbiAgPGRpdiAqbmdJZj1cInZkdi5pc1RhYmxlVmlld1wiIGNsYXNzPVwiZmxleCBnYXAtMiBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZS1sb2ctYnV0dG9uLWNvbnRhaW5lciBmbGV4IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgPHZlcmJlbmEtYnV0dG9uIFtmb250V2VpZ2h0XT1cIidib2xkJ1wiIFtiZ0NvbG9yXT1cIicjOEU4RDg3J1wiIFtib3JkZXJSYWRpdXNdPVwiJzRweCdcIiBbdGV4dENvbG9yXT1cIicjZmZmJ1wiXG4gICAgICAgIFt0ZXh0XT1cIidEZWxldGUnXCI+XG4gICAgICA8L3ZlcmJlbmEtYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIGl0ZW1zLWNlbnRlciBnYXAtNVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJwYWdpbmF0b3ItdGV4dFwiPnt7IGNhcmREYXRhLmxlbmd0aCB9fSByZWNvcmRzIGxvYWRlZDwvc3Bhbj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cImxvYWRNb3JlKClcIiBjbGFzcz1cImxvYWQtbW9yZSB2aWV3LWxpbmtzXCI+TG9hZCBtb3JlPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
1208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS1jb250cm9sLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1hdXRoZW50aWNhdGlvbi11aS9zcmMvbGliL2NvbXBvbmVudHMvcm9sZS1jb250cm9sL3JvbGUtY29udHJvbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tYXV0aGVudGljYXRpb24tdWkvc3JjL2xpYi9jb21wb25lbnRzL3JvbGUtY29udHJvbC9yb2xlLWNvbnRyb2wuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBRUwsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFJTCxjQUFjLEdBSWYsTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRTVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFReEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBUzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUczRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFJckUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDL0UsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFFN0MsSUFBSyxlQUlKO0FBSkQsV0FBSyxl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RUFBRSxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQWlCO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUQsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsMEJBQTBCO1lBQzFCLHNFQUFzRTtZQUN0RSxJQUFJO1FBQ04sQ0FBQztJQUNILENBQUM7d0dBMXlDVSxvQkFBb0I7NEZBQXBCLG9CQUFvQiwyZEM5RGpDLCt3ZUFrUUE7OzRGRHBNYSxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0Usa0JBQWtCO21SQWNULFlBQVk7c0JBQTlCLFNBQVM7dUJBQUMsTUFBTTtnQkFDQyxRQUFRO3NCQUF6QixTQUFTO3VCQUFDLEtBQUs7Z0JBQ0ksS0FBSztzQkFBeEIsU0FBUzt1QkFBQyxPQUFPO2dCQUNULFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvbGVDb250cm9sU2VydmljZSB9IGZyb20gJy4vcm9sZS1jb250cm9sLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ2FyZERhdGEsXG4gIENhcmREYXRhVmlld0NvbXBvbmVudCxcbiAgQ29sdW1uRGVmaW5pdGlvbixcbiAgRGF0YUZpbHRlclR5cGUsXG4gIERhdGFWaWV3Q29tcG9uZW50LFxuICBJRGF0YUZpbHRlcixcbiAgVmVyYmVuUG9wVXBDb21wb25lbnQsXG59IGZyb20gJ3ZlcmJlbi1uZy11aSc7XG5pbXBvcnQgeyBSb2xlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1JvbGUnO1xuaW1wb3J0IHsgYmFzZVN0eWxlIH0gZnJvbSAnLi9iYXNlLXRhYmxlLXN0eWxlJztcbmltcG9ydCB7IE9iamVjdFN0YXRlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL29iamVjdC1zdGF0ZSc7XG5pbXBvcnQgeyBSb2xlQ29udGV4dCB9IGZyb20gJy4uLy4uL21vZGVscy9Sb2xlQ29udGV4dCc7XG5pbXBvcnQgeyBVSXMgfSBmcm9tICcuL1VJcyc7XG5pbXBvcnQgeyBSb2xlQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1JvbGVBY3Rpb24nO1xuaW1wb3J0IHsgVUlBY3Rpb25zIH0gZnJvbSAnLi9VSUFjdGlvbnMnO1xuaW1wb3J0IHsgTWFwcGVkUm9sZSB9IGZyb20gJy4vTWFwcGVkUm9sZSc7XG5pbXBvcnQge1xuICBBdXRob3JpemF0aW9uQ29uZmlnLFxuICBBdXRob3JpemF0aW9uU2VydmljZSxcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aG9yaXphdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE1hcHBlZFJvbGVDb250ZXh0IH0gZnJvbSAnLi9NYXBwZWRSb2xlQ29udGV4dCc7XG5pbXBvcnQgeyBNYXBwZWRSb2xlQWN0aW9uIH0gZnJvbSAnLi9NYXBwZWRSb2xlQWN0aW9uJztcbmltcG9ydCB7IENoaWxkcmVuVHlwZSB9IGZyb20gJy4vQ2hpbGRyZW5UeXBlJztcbmltcG9ydCB7XG4gIEZvcm1CdWlsZGVyLFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUdyb3VwLFxuICBWYWxpZGF0b3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBVdGlsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3V0aWwuc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwV2ViUmVxdWVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9odHRwLXdlYi1yZXF1ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRXJyb3JSZXNwb25zZSB9IGZyb20gJy4uLy4uL21vZGVscy9FcnJvclJlc3BvbnNlJztcbmltcG9ydCB7IFBhZ2VkUmVzdWx0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL1BhZ2VkUmVzdWx0JztcbmltcG9ydCB7IFNlYXJjaFByb3BlcnR5VmFsdWUgfSBmcm9tICcuLi8uLi9tb2RlbHMvU2VhcmNoUHJvcGVydHlWYWx1ZSc7XG5pbXBvcnQgeyBTZWFyY2hPcGVyYXRvciB9IGZyb20gJy4uLy4uL21vZGVscy9TZWFyY2hPcGVyYXRvcic7XG5pbXBvcnQgeyBTZWFyY2hQcm9wZXJ0eVNpZ24gfSBmcm9tICcuLi8uLi9tb2RlbHMvU2VhcmNoUHJvcGVydHlTaWduJztcbmltcG9ydCB7IEVudmlyb25tZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Vudmlyb25tZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25Sb2xlQ29udGV4dCB9IGZyb20gJy4uLy4uL21vZGVscy9BcHBsaWNhdGlvblJvbGVDb250ZXh0JztcbmltcG9ydCB7IEFwcGxpY2F0aW9uUm9sZUFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9BcHBsaWNhdGlvblJvbGVBY3Rpb24nO1xuaW1wb3J0IHsgU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvU2VhcmNoUHJvcGVydHlWYWx1ZVR5cGUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmVudW0gRGF0ZUZpbHRlclR5cGVzIHtcbiAgQmVmb3JlID0gU2VhcmNoUHJvcGVydHlTaWduLkxULFxuICBPbiA9IFNlYXJjaFByb3BlcnR5U2lnbi5FUSxcbiAgQWZ0ZXIgPSBTZWFyY2hQcm9wZXJ0eVNpZ24uR1QsXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1yb2xlLWNvbnRyb2wnLFxuICB0ZW1wbGF0ZVVybDogJy4vcm9sZS1jb250cm9sLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3JvbGUtY29udHJvbC5jb21wb25lbnQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgUm9sZUNvbnRyb2xDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICB2aXNpYmxlQ29sdW1uRGVmOiBDb2x1bW5EZWZpbml0aW9uPE1hcHBlZFJvbGU+W10gPSBbXTtcbiAgc3R5bGVzID0gYmFzZVN0eWxlO1xuICBkYXRhOiBNYXBwZWRSb2xlW10gPSBbXTtcbiAgY2FyZERhdGE6IENhcmREYXRhW10gPSBbXTtcbiAgY3VycmVudERhdGE6IENhcmREYXRhIHwgbnVsbCA9IG51bGw7XG4gIGN1cnJlbnRFeHBhbmRlZENhcmQ6IENhcmREYXRhIHwgbnVsbCA9IG51bGw7XG4gIGNhcmRDb250ZXh0OiBDYXJkRGF0YSB8IG51bGwgPSBudWxsO1xuICBjYXJkQ29udGV4dEhpc3Rvcnk6IENhcmREYXRhW10gPSBbXTtcbiAgY2FyZENvbnRleHRIaXN0b3J5RGF0YTogQ2FyZERhdGFbXVtdID0gW107XG4gIEBWaWV3Q2hpbGQoJ3ZkY3YnKSBjYXJkRGF0YVZpZXchOiBDYXJkRGF0YVZpZXdDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3ZkdicpIGRhdGFWaWV3ITogRGF0YVZpZXdDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3BvcHVwJykgcG9wVXAhOiBWZXJiZW5Qb3BVcENvbXBvbmVudDtcbiAgQElucHV0KCkgaXNHbG9iYWw6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBzZXJ2aWNlTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGFwcGxpY2F0aW9uOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IDEwO1xuICBASW5wdXQoKSBzZWFyY2hEZWJvdW5jZVRpbWU6IG51bWJlciA9IDUwMDtcbiAgcGFnZVN0YXRlOiBQYWdlZFJlc3VsdDxSb2xlPiB8IG51bGwgPSBudWxsO1xuICBzb3VyY2VEYXRhOiBBdXRob3JpemF0aW9uQ29uZmlnW10gPSBbXTtcbiAgaXNPcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIG9wZW5Ecm9wZG93bklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgY3VycmVudEZpbHRlcnM6IElEYXRhRmlsdGVyW10gPSBbXTtcbiAgY3VycmVudFNvcnRzOiBJRGF0YUZpbHRlcltdID0gW107XG4gIHNlYXJjaFRlcm0kID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIHZpc2libGVDb2x1bW5zOiBJRGF0YUZpbHRlcltdID0gW107XG5cbiAgZmlsdGVyQXJyYXk6IElEYXRhRmlsdGVyW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ0NyZWF0ZWRBdCcsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5EYXRlLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnVXBkYXRlZEF0JyxcbiAgICAgIHR5cGU6IERhdGFGaWx0ZXJUeXBlLkRhdGUsXG4gICAgICBjaGVja2VkOiBmYWxzZSxcbiAgICB9LFxuICBdO1xuXG4gIHNvcnRPcHRpb25zOiBJRGF0YUZpbHRlcltdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdDcmVhdGVkQXQnLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuRGF0ZSxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ1VwZGF0ZWRBdCcsXG4gICAgICB0eXBlOiBEYXRhRmlsdGVyVHlwZS5EYXRlLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcbiAgXTtcblxuICAvLyBwcml2YXRlIF9zZWFyY2hJdGVtOiBzdHJpbmcgPSAnJztcbiAgLy8gZ2V0IHNlYXJjaEl0ZW0oKTogc3RyaW5nIHtcbiAgLy8gICByZXR1cm4gdGhpcy5fc2VhcmNoSXRlbVxuICAvLyB9XG4gIC8vIHNldCBzZWFyY2hJdGVtKHZhbHVlOiBzdHJpbmcpIHtcbiAgLy8gICB0aGlzLl9zZWFyY2hJdGVtID0gdmFsdWU7XG4gIC8vICAgdGhpcy5zZWFyY2hUZXJtJC5uZXh0KHZhbHVlKTtcbiAgLy8gfVxuXG4gIC8vIGZvcm06IEZvcm1Hcm91cDtcbiAgY2hpbGRQZXJtaXNzaW9uUmVmOiBDaGlsZHJlblR5cGUgPSBDaGlsZHJlblR5cGUuUGVybWlzc2lvbjtcblxuICByb2xlQ29udGV4dHNTdG9yZTogQXBwbGljYXRpb25Sb2xlQ29udGV4dFtdID0gW107XG4gIHJvbGVBY3Rpb25zU3RvcmU6IEFwcGxpY2F0aW9uUm9sZUFjdGlvbltdID0gW107XG4gIHByaXZhdGUgY3VycmVudFNlYXJjaFRlcm06IHN0cmluZyA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhvcml6YXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcm9sZUNvbnRyb2xTdmM6IFJvbGVDb250cm9sU2VydmljZSxcbiAgICBwcml2YXRlIHV0aWxTZXJ2aWNlOiBVdGlsU2VydmljZSxcbiAgICBwcml2YXRlIHNlcnZlcjogSHR0cFdlYlJlcXVlc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGVudlN2YzogRW52aXJvbm1lbnRTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMudmlzaWJsZUNvbHVtbkRlZiA9IHJvbGVDb250cm9sU3ZjLnJvbGVDb2x1bW5zO1xuICAgIHRoaXMudmlzaWJsZUNvbHVtbnMgPSByb2xlQ29udHJvbFN2Yy5yb2xlQ29sdW1ucy5tYXAoKGNvbCkgPT4gKHtcbiAgICAgIGNoZWNrZWQ6IHRydWUsXG4gICAgICBuYW1lOiB0eXBlb2YgY29sLmhlYWRlciA9PT0gJ3N0cmluZycgPyBjb2wuaGVhZGVyIDogY29sLmlkLFxuICAgICAgdHlwZTogRGF0YUZpbHRlclR5cGUuQm9vbCxcbiAgICB9KSk7XG4gICAgLy8gdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgLy8gICBOYW1lOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4obnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXG4gICAgLy8gfSk7XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtb2NrRGF0YSA9IHRoaXMuZ2V0TW9ja1JvbGVzKCk7XG4gICAgY29uc3Qgcm9sZXMgPSBhd2FpdCB0aGlzLmdldEFsbFJvbGVzKCk7XG4gICAgaWYgKHRoaXMuaXNHbG9iYWwpIHtcbiAgICAgIGNvbnN0IGNvbnRleHRzUmVzID0gYXdhaXQgdGhpcy5nZXRTYXZlZENvbnRleHRzKCk7XG4gICAgICBpZiAoY29udGV4dHNSZXMpIHtcbiAgICAgICAgdGhpcy5yb2xlQ29udGV4dHNTdG9yZSA9IGNvbnRleHRzUmVzO1xuICAgICAgICB0aGlzLnJvbGVBY3Rpb25zU3RvcmUgPSBjb250ZXh0c1Jlcy5mbGF0TWFwKCh4KSA9PiB4LlJvbGVBY3Rpb25zKTtcbiAgICAgICAgY29uc3QgYXV0aENvbmZpZzogQXV0aG9yaXphdGlvbkNvbmZpZ1tdID0gY29udGV4dHNSZXMubWFwKCh4KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIE5hbWU6IHguTmFtZSxcbiAgICAgICAgICAgIEFjdGlvbnM6IHguUm9sZUFjdGlvbnMubWFwKCh5KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB5Lk5hbWU7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zb3VyY2VEYXRhID0gYXV0aENvbmZpZztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zb3VyY2VEYXRhID0gdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uQ29uZmlnO1xuICAgIH1cbiAgICBpZiAocm9sZXMpIHtcbiAgICAgIHRoaXMuc2V0VXBNYXBwZWREYXRhKHJvbGVzKTtcbiAgICAgIHRoaXMuc2V0VXBDYXJkRGF0YSgpO1xuICAgIH1cbiAgICB0aGlzLnNlYXJjaFRlcm0kXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUodGhpcy5zZWFyY2hEZWJvdW5jZVRpbWUpKSAvLyBBZGp1c3QgZGVib3VuY2UgdGltZSBoZXJlIChpbiBtcylcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKHNlYXJjaFRlcm0pID0+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50U2VhcmNoVGVybSA9IHNlYXJjaFRlcm07XG4gICAgICAgIHRoaXMudXBkYXRlRmlsdGVyc0FuZFNvcnRzKHRydWUpO1xuICAgICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRTYXZlZENvbnRleHRzKCk6IFByb21pc2U8QXBwbGljYXRpb25Sb2xlQ29udGV4dFtdIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCF0aGlzLmlzR2xvYmFsIHx8ICF0aGlzLnNlcnZpY2VOYW1lKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB2YXIgcGF5bG9hZDogU2VhcmNoUHJvcGVydHlWYWx1ZVtdID0gW1xuICAgICAge1xuICAgICAgICBQcm9wZXJ0eU5hbWU6ICdTZXJ2aWNlTmFtZScsXG4gICAgICAgIEVudGl0eVZhbHVlOiB0aGlzLnNlcnZpY2VOYW1lLFxuICAgICAgICBPcGVyYXRvcjogU2VhcmNoT3BlcmF0b3IuQW5kLFxuICAgICAgICBTaWduOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBQcm9wZXJ0eU5hbWU6ICdBUElLZXknLFxuICAgICAgICBFbnRpdHlWYWx1ZTogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICBPcGVyYXRvcjogU2VhcmNoT3BlcmF0b3IuQW5kLFxuICAgICAgICBTaWduOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgICB9LFxuICAgIF07XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZXJ2ZXIucG9zdChcbiAgICAgIGBBcHBsaWNhdGlvbi9TZWFyY2hBcHBsaWNhdGlvblJvbGVDb250ZXh0cy8wLzBgLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcmVzdWx0ID0gKHJlcyBhcyBQYWdlZFJlc3VsdDxBcHBsaWNhdGlvblJvbGVDb250ZXh0PikuUmVzdWx0O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cbiAgYXN5bmMgZ2V0QWxsUm9sZXMoKTogUHJvbWlzZTxSb2xlW10gfCB1bmRlZmluZWQ+IHtcbiAgICAvLyAgIHZhciBwYXlsb2FkOiBTZWFyY2hQcm9wZXJ0eVZhbHVlW10gPSBbXG4gICAgLy8gICAgIHtcbiAgICAvLyAgICAgICBQcm9wZXJ0eU5hbWU6ICdBUElLZXknLFxuICAgIC8vICAgICAgIEVudGl0eVZhbHVlOiB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5BUElLZXksXG4gICAgLy8gICAgICAgT3BlcmF0b3I6IFNlYXJjaE9wZXJhdG9yLkFuZCxcbiAgICAvLyAgICAgICBTaWduOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVFcbiAgICAvLyAgICAgfVxuICAgIC8vIF1cbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5nZXQoYFJvbGUvR2V0Um9sZXMvMC8ke3RoaXMucGFnZVNpemV9YCk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgIGlmIChyZXMgaW5zdGFuY2VvZiBFcnJvclJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhZ2VTdGF0ZSA9IHJlcyBhcyBQYWdlZFJlc3VsdDxSb2xlPjtcbiAgICAgIHZhciByZXN1bHQgPSAocmVzIGFzIFBhZ2VkUmVzdWx0PFJvbGU+KS5SZXN1bHQ7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWRNb3JlKCkge1xuICAgIGlmICghdGhpcy5wYWdlU3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gICAgY29uc3QgcmVzID1cbiAgICAgIHRoaXMuY3VycmVudEZpbHRlcnMubGVuZ3RoID4gMCB8fFxuICAgICAgdGhpcy5jdXJyZW50U29ydHMubGVuZ3RoID4gMCB8fFxuICAgICAgdGhpcy5jdXJyZW50U2VhcmNoVGVybS50cmltKCkubGVuZ3RoID4gMFxuICAgICAgICA/IGF3YWl0IHRoaXMubG9hZE1vcmVGaWx0ZXJzQW5kU29ydHMoKVxuICAgICAgICA6IGF3YWl0IHRoaXMuc2VydmVyLmdldChcbiAgICAgICAgICAgIGBSb2xlL0dldFJvbGVzLyR7dGhpcy5wYWdlU3RhdGUuU2tpcH0vJHt0aGlzLnBhZ2VTaXplfWBcbiAgICAgICAgICApO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhZ2VTdGF0ZSA9IHJlcyBhcyBQYWdlZFJlc3VsdDxSb2xlPjtcbiAgICAgIHZhciByZXN1bHQgPSAocmVzIGFzIFBhZ2VkUmVzdWx0PFJvbGU+KS5SZXN1bHQ7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5zZXRVcE1hcHBlZERhdGFFeHRyYShyZXN1bHQpO1xuICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLmNvbmNhdChkYXRhKTtcbiAgICAgIHRoaXMuc2V0VXBDYXJkRGF0YUV4dHJhKGRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGdldEFwcGxpY2F0aW9uQ29udGV4dENvZGUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5yb2xlQ29udGV4dHNTdG9yZS5maW5kKCh4KSA9PiB4Lk5hbWUgPT0gbmFtZSk7XG4gICAgcmV0dXJuIGl0ZW0gPyBpdGVtLkNvZGUgOiAnJztcbiAgfVxuICBnZXRBcHBsaWNhdGlvbkFjdGlvbkNvZGUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5yb2xlQWN0aW9uc1N0b3JlLmZpbmQoKHgpID0+IHguTmFtZSA9PSBuYW1lKTtcbiAgICByZXR1cm4gaXRlbSA/IGl0ZW0uQ29kZSA6ICcnO1xuICB9XG5cbiAgZmluZFBhcmVudChjYXJkRGF0YTogQ2FyZERhdGFbXSwgdGFyZ2V0OiBDYXJkRGF0YSk6IENhcmREYXRhIHwgbnVsbCB7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGNhcmREYXRhKSB7XG4gICAgICBpZiAoaXRlbS5jaGlsZHJlbi5pbmNsdWRlcyh0YXJnZXQpKSB7XG4gICAgICAgIHJldHVybiBpdGVtOyAvLyBJbW1lZGlhdGUgcGFyZW50IGZvdW5kXG4gICAgICB9XG4gICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmZpbmRQYXJlbnQoaXRlbS5jaGlsZHJlbiwgdGFyZ2V0KTtcbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7IC8vIE5vdCBmb3VuZFxuICB9XG5cbiAgaXNDaGVja2JveERpc2FibGVkKGl0ZW06IENhcmREYXRhKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGFyZW50ID1cbiAgICAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5RGF0YS5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5maW5kUGFyZW50KHRoaXMuY2FyZENvbnRleHRIaXN0b3J5RGF0YVswXSwgaXRlbSlcbiAgICAgICAgOiB0aGlzLmZpbmRQYXJlbnQodGhpcy5jYXJkRGF0YSwgaXRlbSk7XG4gICAgaWYgKFxuICAgICAgcGFyZW50ICYmXG4gICAgICBwYXJlbnQuZGF0YS5DaGlsZHJlblR5cGUgJiZcbiAgICAgIHBhcmVudC5kYXRhLkNoaWxkcmVuVHlwZSA9PSBDaGlsZHJlblR5cGUuQWN0aW9uICYmXG4gICAgICBwYXJlbnQuZGF0YS5TZWxlY3RlZCA9PSBmYWxzZVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHNldFVwTWFwcGVkRGF0YShkYXRhOiBSb2xlW10pIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhLm1hcCgoeCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ueCxcbiAgICAgICAgaWQ6IHguSWQsXG4gICAgICAgIENoaWxkcmVuVHlwZTogQ2hpbGRyZW5UeXBlLlBlcm1pc3Npb24sXG4gICAgICAgIFJvbGVDb250ZXh0czogdGhpcy5zb3VyY2VEYXRhLm1hcCgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdJZCA9IHguUm9sZUNvbnRleHRzLmZpbmRJbmRleChcbiAgICAgICAgICAgICh5KSA9PiB5Lk5hbWUgPT0gY29uZmlnLk5hbWVcbiAgICAgICAgICApO1xuICAgICAgICAgIHZhciBjb250ZXh0OiBNYXBwZWRSb2xlQ29udGV4dCA9IHtcbiAgICAgICAgICAgIENoaWxkcmVuVHlwZTogQ2hpbGRyZW5UeXBlLkFjdGlvbixcbiAgICAgICAgICAgIFNlbGVjdGVkOiBleGlzdGluZ0lkID4gLTEgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICBSb2xlQWN0aW9uczogY29uZmlnLkFjdGlvbnMubWFwKChhY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdBY3Rpb24gPVxuICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9ucy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKGMpID0+IGMuTmFtZSA9PSBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICAgICAgICB2YXIgYWN0OiBNYXBwZWRSb2xlQWN0aW9uID0ge1xuICAgICAgICAgICAgICAgIFNlbGVjdGVkOiBleGlzdGluZ0FjdGlvbiA+IC0xID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIE5hbWU6IGFjdGlvbixcbiAgICAgICAgICAgICAgICBSb2xlOiB4LkNvZGUsXG4gICAgICAgICAgICAgICAgQ29udGV4dDogJycsXG4gICAgICAgICAgICAgICAgaWQ6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbZXhpc3RpbmdBY3Rpb25dLmlkXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgSWQ6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbZXhpc3RpbmdBY3Rpb25dLklkXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICAgICAgICBUZW5hbnRJZDogeC5UZW5hbnRJZCxcbiAgICAgICAgICAgICAgICBDb2RlOlxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW2V4aXN0aW5nQWN0aW9uXVxuICAgICAgICAgICAgICAgICAgICAgICAgLkNvZGVcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICBTZXJ2aWNlTmFtZTpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tleGlzdGluZ0FjdGlvbl1cbiAgICAgICAgICAgICAgICAgICAgICAgIC5TZXJ2aWNlTmFtZVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgIEFQSUtleTpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tleGlzdGluZ0FjdGlvbl1cbiAgICAgICAgICAgICAgICAgICAgICAgIC5BUElLZXlcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5BUElLZXksXG4gICAgICAgICAgICAgICAgQXBwbGljYXRpb25Sb2xlQWN0aW9uOiB0aGlzLmdldEFwcGxpY2F0aW9uQWN0aW9uQ29kZShhY3Rpb24pLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICByZXR1cm4gYWN0O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBOYW1lOiBjb25maWcuTmFtZSxcbiAgICAgICAgICAgIFJvbGU6IHguQ29kZSxcbiAgICAgICAgICAgIGlkOiBleGlzdGluZ0lkID4gLTEgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5pZCA6ICcnLFxuICAgICAgICAgICAgSWQ6IGV4aXN0aW5nSWQgPiAtMSA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLklkIDogJycsXG4gICAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICAgIFRlbmFudElkOiB4LlRlbmFudElkLFxuICAgICAgICAgICAgQ29kZTogZXhpc3RpbmdJZCA+IC0xID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uQ29kZSA6ICcnLFxuICAgICAgICAgICAgU2VydmljZU5hbWU6XG4gICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMSA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlNlcnZpY2VOYW1lIDogJycsXG4gICAgICAgICAgICBBUElLZXk6XG4gICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uQVBJS2V5XG4gICAgICAgICAgICAgICAgOiB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5BUElLZXksXG4gICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVDb250ZXh0OiB0aGlzLmdldEFwcGxpY2F0aW9uQ29udGV4dENvZGUoY29uZmlnLk5hbWUpLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIHNldFVwTWFwcGVkRGF0YUV4dHJhKGRhdGE6IFJvbGVbXSk6IE1hcHBlZFJvbGVbXSB7XG4gICAgcmV0dXJuIGRhdGEubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi54LFxuICAgICAgICBpZDogeC5JZCxcbiAgICAgICAgQ2hpbGRyZW5UeXBlOiBDaGlsZHJlblR5cGUuUGVybWlzc2lvbixcbiAgICAgICAgUm9sZUNvbnRleHRzOiB0aGlzLnNvdXJjZURhdGEubWFwKChjb25maWcpID0+IHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0lkID0geC5Sb2xlQ29udGV4dHMuZmluZEluZGV4KFxuICAgICAgICAgICAgKHkpID0+IHkuTmFtZSA9PSBjb25maWcuTmFtZVxuICAgICAgICAgICk7XG4gICAgICAgICAgdmFyIGNvbnRleHQ6IE1hcHBlZFJvbGVDb250ZXh0ID0ge1xuICAgICAgICAgICAgQ2hpbGRyZW5UeXBlOiBDaGlsZHJlblR5cGUuQWN0aW9uLFxuICAgICAgICAgICAgU2VsZWN0ZWQ6IGV4aXN0aW5nSWQgPiAtMSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgIFJvbGVBY3Rpb25zOiBjb25maWcuQWN0aW9ucy5tYXAoKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0FjdGlvbiA9XG4gICAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xXG4gICAgICAgICAgICAgICAgICA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgICAoYykgPT4gYy5OYW1lID09IGFjdGlvblxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IC0xO1xuXG4gICAgICAgICAgICAgIHZhciBhY3Q6IE1hcHBlZFJvbGVBY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgU2VsZWN0ZWQ6IGV4aXN0aW5nQWN0aW9uID4gLTEgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgTmFtZTogYWN0aW9uLFxuICAgICAgICAgICAgICAgIFJvbGU6IHguQ29kZSxcbiAgICAgICAgICAgICAgICBDb250ZXh0OiAnJyxcbiAgICAgICAgICAgICAgICBpZDpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tleGlzdGluZ0FjdGlvbl0uaWRcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICBJZDpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tleGlzdGluZ0FjdGlvbl0uSWRcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICAgIFRlbmFudElkOiB4LlRlbmFudElkLFxuICAgICAgICAgICAgICAgIENvZGU6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbZXhpc3RpbmdBY3Rpb25dXG4gICAgICAgICAgICAgICAgICAgICAgICAuQ29kZVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgIFNlcnZpY2VOYW1lOlxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW2V4aXN0aW5nQWN0aW9uXVxuICAgICAgICAgICAgICAgICAgICAgICAgLlNlcnZpY2VOYW1lXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgQVBJS2V5OlxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW2V4aXN0aW5nQWN0aW9uXVxuICAgICAgICAgICAgICAgICAgICAgICAgLkFQSUtleVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVBY3Rpb246IHRoaXMuZ2V0QXBwbGljYXRpb25BY3Rpb25Db2RlKGFjdGlvbiksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHJldHVybiBhY3Q7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIE5hbWU6IGNvbmZpZy5OYW1lLFxuICAgICAgICAgICAgUm9sZTogeC5Db2RlLFxuICAgICAgICAgICAgaWQ6IGV4aXN0aW5nSWQgPiAtMSA/IHguUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLmlkIDogJycsXG4gICAgICAgICAgICBJZDogZXhpc3RpbmdJZCA+IC0xID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uSWQgOiAnJyxcbiAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgVGVuYW50SWQ6IHguVGVuYW50SWQsXG4gICAgICAgICAgICBDb2RlOiBleGlzdGluZ0lkID4gLTEgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Db2RlIDogJycsXG4gICAgICAgICAgICBTZXJ2aWNlTmFtZTpcbiAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xID8geC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uU2VydmljZU5hbWUgOiAnJyxcbiAgICAgICAgICAgIEFQSUtleTpcbiAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xXG4gICAgICAgICAgICAgICAgPyB4LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5BUElLZXlcbiAgICAgICAgICAgICAgICA6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgICAgIEFwcGxpY2F0aW9uUm9sZUNvbnRleHQ6IHRoaXMuZ2V0QXBwbGljYXRpb25Db250ZXh0Q29kZShjb25maWcuTmFtZSksXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBzZXRVcENhcmREYXRhKCkge1xuICAgIGNvbnN0IGNhcmREYXRhOiBDYXJkRGF0YVtdID0gdGhpcy5kYXRhLm1hcCgoeCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICB0aXRsZTogeC5OYW1lLFxuICAgICAgICBkYXRhOiB4LFxuICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgY2hpbGRyZW46IHguUm9sZUNvbnRleHRzLm1hcCgoYykgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRGb3JtYXR0ZWROYW1lKGMuTmFtZSksXG4gICAgICAgICAgICBkYXRhOiBjLFxuICAgICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgICBjaGlsZHJlbjogYy5Sb2xlQWN0aW9ucy5tYXAoKGEpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0Rm9ybWF0dGVkTmFtZShhLk5hbWUpLFxuICAgICAgICAgICAgICAgIGRhdGE6IGEsXG4gICAgICAgICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMuY2FyZERhdGEgPSBjYXJkRGF0YTtcbiAgfVxuICBzZXRVcENhcmREYXRhRXh0cmEoYmFzZURhdGE6IE1hcHBlZFJvbGVbXSkge1xuICAgIGNvbnN0IGNhcmREYXRhOiBDYXJkRGF0YVtdID0gYmFzZURhdGEubWFwKCh4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIHRpdGxlOiB4Lk5hbWUsXG4gICAgICAgIGRhdGE6IHgsXG4gICAgICAgIGJvZHk6IFtdLFxuICAgICAgICBjaGlsZHJlbjogeC5Sb2xlQ29udGV4dHMubWFwKChjKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLmdldEZvcm1hdHRlZE5hbWUoYy5OYW1lKSxcbiAgICAgICAgICAgIGRhdGE6IGMsXG4gICAgICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBjLlJvbGVBY3Rpb25zLm1hcCgoYSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRGb3JtYXR0ZWROYW1lKGEuTmFtZSksXG4gICAgICAgICAgICAgICAgZGF0YTogYSxcbiAgICAgICAgICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5jYXJkRGF0YSA9IHRoaXMuY2FyZERhdGEuY29uY2F0KGNhcmREYXRhKTtcbiAgfVxuXG4gIGdldEZvcm1hdHRlZE5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBTcGxpdCB0aGUga2V5IG9uIGNhcGl0YWwgbGV0dGVycywgaGFuZGxpbmcgXCJBbmRcIiBhcyBsb3dlcmNhc2VcbiAgICBjb25zdCB3b3JkcyA9IG5hbWVcbiAgICAgIC5zcGxpdCgvKD89W0EtWl0pLylcbiAgICAgIC5tYXAoKHdvcmQpID0+ICh3b3JkID09PSAnQW5kJyA/ICdhbmQnIDogd29yZCkpO1xuICAgIC8vIEpvaW4gdGhlIHdvcmRzIHdpdGggc3BhY2VzXG4gICAgcmV0dXJuIHdvcmRzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIHZpZXdEZXRhaWxzRnJvbVRhYmxlKGRhdGE6IE1hcHBlZFJvbGUpIHtcbiAgICBjb25zdCBjYXJkRGF0YSA9IHRoaXMuY2FyZERhdGEuZmluZCgoeCkgPT4geC5kYXRhID09IGRhdGEpO1xuICAgIGlmIChjYXJkRGF0YSkge1xuICAgICAgdGhpcy52aWV3RGV0YWlscyhjYXJkRGF0YSk7XG4gICAgICB0aGlzLmNsb3NlUG9wVXAoKTtcbiAgICB9XG4gIH1cblxuICB2aWV3RGV0YWlscyhjb250ZXh0OiBDYXJkRGF0YSkge1xuICAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5LnB1c2goY29udGV4dCk7XG4gICAgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnlEYXRhLnB1c2godGhpcy5jYXJkRGF0YSk7XG4gICAgdGhpcy5jYXJkRGF0YSA9IGNvbnRleHQuY2hpbGRyZW47XG4gICAgdGhpcy5jYXJkRGF0YVZpZXcuY2xlYXJEYXRhKCk7XG4gIH1cbiAgdmlld0RldGFpbHNDaGlsZChjb250ZXh0OiBDYXJkRGF0YSkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRFeHBhbmRlZENhcmQpIHtcbiAgICAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5LnB1c2godGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkKTtcbiAgICAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5LnB1c2goY29udGV4dCk7XG4gICAgICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeURhdGEucHVzaCh0aGlzLmNhcmREYXRhKTtcbiAgICAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5RGF0YS5wdXNoKHRoaXMuY3VycmVudEV4cGFuZGVkQ2FyZC5jaGlsZHJlbik7XG4gICAgICB0aGlzLmNhcmREYXRhID0gY29udGV4dC5jaGlsZHJlbjtcbiAgICAgIHRoaXMuY2FyZERhdGFWaWV3LmNsZWFyRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIHJvbGVDYXJkQ2xpY2tlZChpdGVtOiBDYXJkRGF0YSkge1xuICAgIHRoaXMuY3VycmVudERhdGEgPSB0aGlzLmNhcmREYXRhVmlldy5vbkl0ZW1DbGljayhpdGVtKTtcbiAgICAvLyBpZiAodGhpcy5jdXJyZW50RGF0YSkge1xuICAgIC8vICAgdGhpcy5mb3JtLmNvbnRyb2xzWydOYW1lJ10uc2V0VmFsdWUodGhpcy5jdXJyZW50RGF0YS5kYXRhPy5OYW1lKTtcbiAgICAvLyB9XG4gIH1cblxuICB0b2dnbGVDaGlsZHJlbihpdGVtOiBDYXJkRGF0YSkge1xuICAgIHZhciBjdXJyVG9nZ2xlU3RhdGUgPSBpdGVtLmlzQ2hpbGRyZW5FeHBhbmRlZDtcbiAgICB0aGlzLmNhcmREYXRhLmZvckVhY2goKF8pID0+IHtcbiAgICAgIF8uaXNDaGlsZHJlbkV4cGFuZGVkID0gZmFsc2U7XG4gICAgfSk7XG4gICAgaXRlbS5pc0NoaWxkcmVuRXhwYW5kZWQgPSAhY3VyclRvZ2dsZVN0YXRlO1xuICAgIGlmIChpdGVtLmlzQ2hpbGRyZW5FeHBhbmRlZCkge1xuICAgICAgdGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkID0gaXRlbTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50RXhwYW5kZWRDYXJkID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBjbG9zZURldGFpbHMoKSB7XG4gICAgdGhpcy5jYXJkRGF0YSA9XG4gICAgICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeURhdGFbdGhpcy5jYXJkQ29udGV4dEhpc3RvcnlEYXRhLmxlbmd0aCAtIDFdO1xuICAgIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5RGF0YS5wb3AoKTtcbiAgICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5wb3AoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmRhdGFWaWV3LmlzVGFibGVWaWV3KSB7XG4gICAgICAgIHRoaXMuZGF0YVZpZXcudG9nZ2xlVmlldygpO1xuICAgICAgfVxuICAgIH0sIDIwMCk7XG4gIH1cblxuICBnZXRDYXJkU3ViQ2FwdGlvbihpdGVtOiBDYXJkRGF0YSkge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gaXRlbS5jaGlsZHJlbi5maWx0ZXIoKHgpID0+IHguZGF0YS5TZWxlY3RlZCkubGVuZ3RoO1xuICAgIGNvbnN0IHRvdGFsID0gaXRlbS5jaGlsZHJlbi5sZW5ndGg7XG4gICAgcmV0dXJuIGAke3NlbGVjdGVkfSBvZiAke3RvdGFsfSAke1xuICAgICAgdG90YWwgPiAxID8gaXRlbS5kYXRhLkNoaWxkcmVuVHlwZSArICdzJyA6IGl0ZW0uZGF0YS5DaGlsZHJlblR5cGVcbiAgICB9YDtcbiAgfVxuXG4gIGdldFVwZGF0ZWRSb2xlKHJvbGU6IE1hcHBlZFJvbGUpOiBSb2xlIHtcbiAgICBjb25zdCBuZXdSb2xlID0gcm9sZTtcbiAgICBuZXdSb2xlLlJvbGVDb250ZXh0cyA9IHJvbGUuUm9sZUNvbnRleHRzLmZpbHRlcigoeCkgPT4geC5TZWxlY3RlZCkubWFwKFxuICAgICAgKHkpID0+IHtcbiAgICAgICAgeS5Sb2xlQWN0aW9ucyA9IHkuUm9sZUFjdGlvbnMuZmlsdGVyKCh6KSA9PiB6LlNlbGVjdGVkKTtcbiAgICAgICAgcmV0dXJuIHk7XG4gICAgICB9XG4gICAgKTtcbiAgICBuZXdSb2xlLkRhdGFTdGF0ZSA9XG4gICAgICBuZXdSb2xlLkRhdGFTdGF0ZSA9PSBPYmplY3RTdGF0ZS5OZXdcbiAgICAgICAgPyBPYmplY3RTdGF0ZS5OZXdcbiAgICAgICAgOiBPYmplY3RTdGF0ZS5DaGFuZ2VkO1xuICAgIG5ld1JvbGUuSWQgPSBuZXdSb2xlLkRhdGFTdGF0ZSA9PSBPYmplY3RTdGF0ZS5OZXcgPyAnJyA6IG5ld1JvbGUuSWQ7XG4gICAgcmV0dXJuIG5ld1JvbGUgYXMgUm9sZTtcbiAgfVxuICBhc3luYyBzYXZlUm9sZSgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50RGF0YSkge1xuICAgICAgdmFyIHJvbGU6IE1hcHBlZFJvbGUgPSB0aGlzLmN1cnJlbnREYXRhLmRhdGEgYXMgTWFwcGVkUm9sZTtcbiAgICAgIC8vIHJvbGUuTmFtZSA9IHRoaXMuZm9ybS5jb250cm9sc1snTmFtZSddLnZhbHVlO1xuICAgICAgaWYgKHRoaXMuY3VycmVudERhdGEuZGF0YS5OYW1lLnRyaW0oKS5sZW5ndGggPT0gMCkge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dJbmZvKCdSb2xlIG5hbWUgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hcHBlZFJvbGUgPSB0aGlzLmdldFVwZGF0ZWRSb2xlKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocm9sZSkpKTtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZXJ2ZXIucG9zdChgUm9sZS9TYXZlUm9sZXNgLCBbbWFwcGVkUm9sZV0pO1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ1JvbGUgc2F2ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlcyBhcyBSb2xlW107XG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHZhciByb2xlUmVzdWx0ID0gcmVzdWx0WzBdO1xuICAgICAgICAgIHZhciBtYXBwZWRSb2xlU2F2ZTogTWFwcGVkUm9sZSA9IHtcbiAgICAgICAgICAgIC4uLnJvbGVSZXN1bHQsXG4gICAgICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5QZXJtaXNzaW9uLFxuICAgICAgICAgICAgUm9sZUNvbnRleHRzOiB0aGlzLnNvdXJjZURhdGEubWFwKChjb25maWcpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdJZCA9IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAoeSkgPT4geS5OYW1lID09IGNvbmZpZy5OYW1lXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHZhciBjb250ZXh0OiBNYXBwZWRSb2xlQ29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5BY3Rpb24sXG4gICAgICAgICAgICAgICAgU2VsZWN0ZWQ6IGV4aXN0aW5nSWQgPiAtMSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBSb2xlQWN0aW9uczogY29uZmlnLkFjdGlvbnMubWFwKChhY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQWN0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xXG4gICAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdJZFxuICAgICAgICAgICAgICAgICAgICAgICAgXS5Sb2xlQWN0aW9ucy5maW5kSW5kZXgoKGMpID0+IGMuTmFtZSA9PSBhY3Rpb24pXG4gICAgICAgICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICAgICAgICAgICAgdmFyIGFjdDogTWFwcGVkUm9sZUFjdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgU2VsZWN0ZWQ6IGV4aXN0aW5nQWN0aW9uID4gLTEgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIE5hbWU6IGFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgUm9sZTogcm9sZVJlc3VsdC5Db2RlLFxuICAgICAgICAgICAgICAgICAgICBDb250ZXh0OiAnJyxcbiAgICAgICAgICAgICAgICAgICAgaWQ6XG4gICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBdLmlkXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgICBJZDpcbiAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0uSWRcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICAgICAgICAgICAgVGVuYW50SWQ6IHJvbGVSZXN1bHQuVGVuYW50SWQsXG4gICAgICAgICAgICAgICAgICAgIENvZGU6XG4gICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICBdLkNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgIFNlcnZpY2VOYW1lOlxuICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgXS5TZXJ2aWNlTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgQVBJS2V5OlxuICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgXS5BUElLZXlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVBY3Rpb246XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRBcHBsaWNhdGlvbkFjdGlvbkNvZGUoYWN0aW9uKSxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYWN0O1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIE5hbWU6IGNvbmZpZy5OYW1lLFxuICAgICAgICAgICAgICAgIFJvbGU6IHJvbGVSZXN1bHQuQ29kZSxcbiAgICAgICAgICAgICAgICBpZDpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMSA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLmlkIDogJycsXG4gICAgICAgICAgICAgICAgSWQ6XG4gICAgICAgICAgICAgICAgICBleGlzdGluZ0lkID4gLTEgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5JZCA6ICcnLFxuICAgICAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgICAgICAgICAgVGVuYW50SWQ6IHJvbGVSZXN1bHQuVGVuYW50SWQsXG4gICAgICAgICAgICAgICAgQ29kZTpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLkNvZGVcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICBTZXJ2aWNlTmFtZTpcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlNlcnZpY2VOYW1lXG4gICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgQVBJS2V5OlxuICAgICAgICAgICAgICAgICAgZXhpc3RpbmdJZCA+IC0xXG4gICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uQVBJS2V5XG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uUm9sZUNvbnRleHQ6IHRoaXMuZ2V0QXBwbGljYXRpb25Db250ZXh0Q29kZShcbiAgICAgICAgICAgICAgICAgIGNvbmZpZy5OYW1lXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLmRhdGEuZmluZEluZGV4KFxuICAgICAgICAgICAgKHgpID0+IHggPT0gdGhpcy5jdXJyZW50RGF0YT8uZGF0YVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGl0ZW1JbmRleCA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Db2RlID0gbWFwcGVkUm9sZVNhdmUuQ29kZTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLklkID0gbWFwcGVkUm9sZVNhdmUuSWQ7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5EYXRhU3RhdGUgPSBtYXBwZWRSb2xlU2F2ZS5EYXRhU3RhdGU7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5UZW5hbnRJZCA9IG1hcHBlZFJvbGVTYXZlLlRlbmFudElkO1xuICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uU2VydmljZU5hbWUgPSBtYXBwZWRSb2xlU2F2ZS5TZXJ2aWNlTmFtZTtcbiAgICAgICAgICAgIG1hcHBlZFJvbGVTYXZlLlJvbGVDb250ZXh0cy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5Sb2xlID0gbWFwcGVkUm9sZVNhdmUuQ29kZTtcbiAgICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uUm9sZUNvbnRleHRzW2ldLkNvZGUgPSB4LkNvZGU7XG4gICAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5TZXJ2aWNlTmFtZSA9IHguU2VydmljZU5hbWU7XG4gICAgICAgICAgICAgIHguUm9sZUFjdGlvbnMuZm9yRWFjaCgoeSwgaikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5Sb2xlQWN0aW9uc1tqXS5Sb2xlID1cbiAgICAgICAgICAgICAgICAgIG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uUm9sZUNvbnRleHRzW2ldLlJvbGVBY3Rpb25zW2pdLkNvZGUgPVxuICAgICAgICAgICAgICAgICAgeS5Db2RlO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5Sb2xlQWN0aW9uc1tcbiAgICAgICAgICAgICAgICAgIGpcbiAgICAgICAgICAgICAgICBdLlNlcnZpY2VOYW1lID0geS5TZXJ2aWNlTmFtZTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5tYXAoKHgpID0+IHgpO1xuICAgICAgICAgICAgLy8gdGhpcy5jdXJyZW50RGF0YSA9IHtcbiAgICAgICAgICAgIC8vICAgc2VsZWN0ZWQ6IHRydWUsXG4gICAgICAgICAgICAvLyAgIHRpdGxlOiBtYXBwZWRSb2xlU2F2ZS5OYW1lLFxuICAgICAgICAgICAgLy8gICBkYXRhOiBtYXBwZWRSb2xlU2F2ZSxcbiAgICAgICAgICAgIC8vICAgaXNDaGlsZHJlbkV4cGFuZGVkOiB0aGlzLmN1cnJlbnREYXRhLmlzQ2hpbGRyZW5FeHBhbmRlZCxcbiAgICAgICAgICAgIC8vICAgYm9keTogW10sXG4gICAgICAgICAgICAvLyAgIGNoaWxkcmVuOiBtYXBwZWRSb2xlU2F2ZS5Sb2xlQ29udGV4dHMubWFwKChjKSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8vICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIC8vICAgICAgIHRpdGxlOiB0aGlzLmdldEZvcm1hdHRlZE5hbWUoYy5OYW1lKSxcbiAgICAgICAgICAgIC8vICAgICAgIGRhdGE6IGMsXG4gICAgICAgICAgICAvLyAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAgIC8vICAgICAgIGNoaWxkcmVuOiBjLlJvbGVBY3Rpb25zLm1hcCgoYSkgPT4ge1xuICAgICAgICAgICAgLy8gICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLy8gICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRGb3JtYXR0ZWROYW1lKGEuTmFtZSksXG4gICAgICAgICAgICAvLyAgICAgICAgICAgZGF0YTogYSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICAvLyAgICAgICAgIH07XG4gICAgICAgICAgICAvLyAgICAgICB9KSxcbiAgICAgICAgICAgIC8vICAgICB9O1xuICAgICAgICAgICAgLy8gICB9KSxcbiAgICAgICAgICAgIC8vIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2F2ZVJvbGVEeW5hbWljKGl0ZW06IENhcmREYXRhKSB7XG4gICAgaWYgKHRoaXMuaXNDaGVja2JveERpc2FibGVkKGl0ZW0pKSB7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dJbmZvKCdQYXJlbnQgVUkgbm90IHNlbGVjdGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHJvbGU6IENhcmREYXRhIHwgbnVsbCA9XG4gICAgICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5jYXJkQ29udGV4dEhpc3RvcnlbMF1cbiAgICAgICAgOiB0aGlzLmN1cnJlbnRFeHBhbmRlZENhcmRcbiAgICAgICAgPyB0aGlzLmN1cnJlbnRFeHBhbmRlZENhcmRcbiAgICAgICAgOiBudWxsO1xuICAgIHZhciBjYXJkRGF0YVJlZjogQ2FyZERhdGFbXSB8IG51bGwgPVxuICAgICAgdGhpcy5jYXJkQ29udGV4dEhpc3RvcnlEYXRhLmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeURhdGFbMF1cbiAgICAgICAgOiB0aGlzLmN1cnJlbnRFeHBhbmRlZENhcmRcbiAgICAgICAgPyB0aGlzLmNhcmREYXRhXG4gICAgICAgIDogbnVsbDtcbiAgICAvLyBjb25zdCBpc0V4cGFuZGVkQ2FyZDogYm9vbGVhbiA9XG4gICAgLy8gICB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPiAwXG4gICAgLy8gICAgID8gZmFsc2VcbiAgICAvLyAgICAgOiB0aGlzLmN1cnJlbnRFeHBhbmRlZENhcmRcbiAgICAvLyAgICAgPyB0cnVlXG4gICAgLy8gICAgIDogZmFsc2U7XG4gICAgaWYgKCFyb2xlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyb2xlLmRhdGEuTmFtZS50cmltKCkubGVuZ3RoID09IDApIHtcbiAgICAgIGl0ZW0uZGF0YS5TZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93SW5mbygnUm9sZSBuYW1lIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpdGVtLmRhdGEuU2VsZWN0ZWQgPSAhaXRlbS5kYXRhLlNlbGVjdGVkO1xuICAgIGNvbnN0IG1hcHBlZFJvbGUgPSB0aGlzLmdldFVwZGF0ZWRSb2xlKFxuICAgICAgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyb2xlLmRhdGEpKVxuICAgICk7XG4gICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkodHJ1ZSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZXJ2ZXIucG9zdChgUm9sZS9TYXZlUm9sZXNgLCBbbWFwcGVkUm9sZV0pO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgaXRlbS5kYXRhLlNlbGVjdGVkID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ1JvbGUgc2F2ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXMgYXMgUm9sZVtdO1xuICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciByb2xlUmVzdWx0ID0gcmVzdWx0WzBdO1xuICAgICAgICB2YXIgbWFwcGVkUm9sZVNhdmU6IE1hcHBlZFJvbGUgPSB7XG4gICAgICAgICAgLi4ucm9sZVJlc3VsdCxcbiAgICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5QZXJtaXNzaW9uLFxuICAgICAgICAgIFJvbGVDb250ZXh0czogdGhpcy5zb3VyY2VEYXRhLm1hcCgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ0lkID0gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAoeSkgPT4geS5OYW1lID09IGNvbmZpZy5OYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdmFyIGNvbnRleHQ6IE1hcHBlZFJvbGVDb250ZXh0ID0ge1xuICAgICAgICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5BY3Rpb24sXG4gICAgICAgICAgICAgIFNlbGVjdGVkOiBleGlzdGluZ0lkID4gLTEgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgIFJvbGVBY3Rpb25zOiBjb25maWcuQWN0aW9ucy5tYXAoKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQWN0aW9uID1cbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgICAgIChjKSA9PiBjLk5hbWUgPT0gYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IC0xO1xuICAgICAgICAgICAgICAgIHZhciBhY3Q6IE1hcHBlZFJvbGVBY3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgICBTZWxlY3RlZDogZXhpc3RpbmdBY3Rpb24gPiAtMSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIE5hbWU6IGFjdGlvbixcbiAgICAgICAgICAgICAgICAgIFJvbGU6IHJvbGVSZXN1bHQuQ29kZSxcbiAgICAgICAgICAgICAgICAgIENvbnRleHQ6ICcnLFxuICAgICAgICAgICAgICAgICAgaWQ6XG4gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICA/IHJvbGVSZXN1bHQuUm9sZUNvbnRleHRzW2V4aXN0aW5nSWRdLlJvbGVBY3Rpb25zW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgXS5pZFxuICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICBJZDpcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBdLklkXG4gICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICAgICAgVGVuYW50SWQ6IHJvbGVSZXN1bHQuVGVuYW50SWQsXG4gICAgICAgICAgICAgICAgICBDb2RlOlxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZ0FjdGlvbiA+IC0xXG4gICAgICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Sb2xlQWN0aW9uc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIF0uQ29kZVxuICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICBTZXJ2aWNlTmFtZTpcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBdLlNlcnZpY2VOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIEFQSUtleTpcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdBY3Rpb24gPiAtMVxuICAgICAgICAgICAgICAgICAgICAgID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uUm9sZUFjdGlvbnNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nQWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBdLkFQSUtleVxuICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25Sb2xlQWN0aW9uOiB0aGlzLmdldEFwcGxpY2F0aW9uQWN0aW9uQ29kZShhY3Rpb24pLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjdDtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIE5hbWU6IGNvbmZpZy5OYW1lLFxuICAgICAgICAgICAgICBSb2xlOiByb2xlUmVzdWx0LkNvZGUsXG4gICAgICAgICAgICAgIGlkOiBleGlzdGluZ0lkID4gLTEgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5pZCA6ICcnLFxuICAgICAgICAgICAgICBJZDogZXhpc3RpbmdJZCA+IC0xID8gcm9sZVJlc3VsdC5Sb2xlQ29udGV4dHNbZXhpc3RpbmdJZF0uSWQgOiAnJyxcbiAgICAgICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICBUZW5hbnRJZDogcm9sZVJlc3VsdC5UZW5hbnRJZCxcbiAgICAgICAgICAgICAgQ29kZTpcbiAgICAgICAgICAgICAgICBleGlzdGluZ0lkID4gLTEgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5Db2RlIDogJycsXG4gICAgICAgICAgICAgIFNlcnZpY2VOYW1lOlxuICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5TZXJ2aWNlTmFtZVxuICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgQVBJS2V5OlxuICAgICAgICAgICAgICAgIGV4aXN0aW5nSWQgPiAtMVxuICAgICAgICAgICAgICAgICAgPyByb2xlUmVzdWx0LlJvbGVDb250ZXh0c1tleGlzdGluZ0lkXS5BUElLZXlcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVDb250ZXh0OiB0aGlzLmdldEFwcGxpY2F0aW9uQ29udGV4dENvZGUoXG4gICAgICAgICAgICAgICAgY29uZmlnLk5hbWVcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gY2FyZERhdGFSZWZcbiAgICAgICAgICA/IGNhcmREYXRhUmVmLmZpbmRJbmRleCgoeCkgPT4geC5kYXRhID09IHJvbGU/LmRhdGEpXG4gICAgICAgICAgOiAtMTtcbiAgICAgICAgaWYgKGl0ZW1JbmRleCA+IC0xKSB7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uQ29kZSA9IG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uSWQgPSBtYXBwZWRSb2xlU2F2ZS5JZDtcbiAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5EYXRhU3RhdGUgPSBtYXBwZWRSb2xlU2F2ZS5EYXRhU3RhdGU7XG4gICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uVGVuYW50SWQgPSBtYXBwZWRSb2xlU2F2ZS5UZW5hbnRJZDtcbiAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5TZXJ2aWNlTmFtZSA9IG1hcHBlZFJvbGVTYXZlLlNlcnZpY2VOYW1lO1xuICAgICAgICAgIG1hcHBlZFJvbGVTYXZlLlJvbGVDb250ZXh0cy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uUm9sZSA9IG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uQ29kZSA9IHguQ29kZTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5TZXJ2aWNlTmFtZSA9IHguU2VydmljZU5hbWU7XG4gICAgICAgICAgICB4LlJvbGVBY3Rpb25zLmZvckVhY2goKHksIGopID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5kYXRhW2l0ZW1JbmRleF0uUm9sZUNvbnRleHRzW2ldLlJvbGVBY3Rpb25zW2pdLlJvbGUgPVxuICAgICAgICAgICAgICAgIG1hcHBlZFJvbGVTYXZlLkNvZGU7XG4gICAgICAgICAgICAgIHRoaXMuZGF0YVtpdGVtSW5kZXhdLlJvbGVDb250ZXh0c1tpXS5Sb2xlQWN0aW9uc1tqXS5Db2RlID0geS5Db2RlO1xuICAgICAgICAgICAgICB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHNbaV0uUm9sZUFjdGlvbnNbal0uU2VydmljZU5hbWUgPVxuICAgICAgICAgICAgICAgIHkuU2VydmljZU5hbWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyB0aGlzLmRhdGFbaXRlbUluZGV4XS5Sb2xlQ29udGV4dHMgPSBtYXBwZWRSb2xlU2F2ZS5Sb2xlQ29udGV4dHM7XG5cbiAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEubWFwKCh4KSA9PiB4KTtcbiAgICAgICAgICAvLyBpZiAoY2FyZERhdGFSZWYpIHtcbiAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKHtcbiAgICAgICAgICAvLyAgICAgWERhdGFJc0hlcmU6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2FyZERhdGFSZWYpKSxcbiAgICAgICAgICAvLyAgIH0pO1xuICAgICAgICAgIC8vICAgY2FyZERhdGFSZWZbaXRlbUluZGV4XSA9IHtcbiAgICAgICAgICAvLyAgICAgc2VsZWN0ZWQ6IGNhcmREYXRhUmVmW2l0ZW1JbmRleF0uc2VsZWN0ZWQsXG4gICAgICAgICAgLy8gICAgIGlzQ2hpbGRyZW5FeHBhbmRlZDogY2FyZERhdGFSZWZbaXRlbUluZGV4XS5pc0NoaWxkcmVuRXhwYW5kZWQsXG4gICAgICAgICAgLy8gICAgIHRpdGxlOiBtYXBwZWRSb2xlU2F2ZS5OYW1lLFxuICAgICAgICAgIC8vICAgICBkYXRhOiBtYXBwZWRSb2xlU2F2ZSxcbiAgICAgICAgICAvLyAgICAgYm9keTogW10sXG4gICAgICAgICAgLy8gICAgIGNoaWxkcmVuOiBtYXBwZWRSb2xlU2F2ZS5Sb2xlQ29udGV4dHMubWFwKChjKSA9PiB7XG4gICAgICAgICAgLy8gICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAvLyAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAvLyAgICAgICAgIHRpdGxlOiB0aGlzLmdldEZvcm1hdHRlZE5hbWUoYy5OYW1lKSxcbiAgICAgICAgICAvLyAgICAgICAgIGRhdGE6IGMsXG4gICAgICAgICAgLy8gICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAvLyAgICAgICAgIGNoaWxkcmVuOiBjLlJvbGVBY3Rpb25zLm1hcCgoYSkgPT4ge1xuICAgICAgICAgIC8vICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC8vICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRGb3JtYXR0ZWROYW1lKGEuTmFtZSksXG4gICAgICAgICAgLy8gICAgICAgICAgICAgZGF0YTogYSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICBib2R5OiBbXSxcbiAgICAgICAgICAvLyAgICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgLy8gICAgICAgICAgIH07XG4gICAgICAgICAgLy8gICAgICAgICB9KSxcbiAgICAgICAgICAvLyAgICAgICB9O1xuICAgICAgICAgIC8vICAgICB9KSxcbiAgICAgICAgICAvLyAgIH07XG4gICAgICAgICAgLy8gfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2F2ZURhdGFBbGwoKSB7XG4gICAgY29uc3Qgcm9sZXM6IFJvbGVbXSA9IHRoaXMuZGF0YS5tYXAoKHgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLngsXG4gICAgICAgIFJvbGVDb250ZXh0czogeC5Sb2xlQ29udGV4dHMuZmlsdGVyKCh5KSA9PiB5LlNlbGVjdGVkKS5tYXAoKHopID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ueixcbiAgICAgICAgICAgIFJvbGVBY3Rpb25zOiB6LlJvbGVBY3Rpb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgKGEpID0+IGEuU2VsZWN0ZWRcbiAgICAgICAgICAgICkgYXMgUm9sZUFjdGlvbltdLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pIGFzIFJvbGVDb250ZXh0W10sXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlVGFibGUoKSB7XG4gICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLm1hcCgoeCkgPT4geCk7XG4gIH1cblxuICBvbkNsb3NlKCkge1xuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gIH1cblxuICBvcGVuRHJvcGRvd24oaXRlbTogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ2l0ZW0gaXMgaGVyZScsIGl0ZW0pO1xuICAgIGlmICh0aGlzLm9wZW5Ecm9wZG93bklkID09PSBpdGVtLmlkKSB7XG4gICAgICB0aGlzLm9wZW5Ecm9wZG93bklkID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGVuRHJvcGRvd25JZCA9IGl0ZW0uaWQ7XG4gICAgfVxuICB9XG5cbiAgaXNEcm9wZG93bk9wZW4oaXRlbTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3BlbkRyb3Bkb3duSWQgPT09IGl0ZW0uaWQ7XG4gIH1cblxuICBvblZpZXdDaGFuZ2UoaXNHcmlkVmlldzogYm9vbGVhbik6IHZvaWQge31cbiAgb25TdGF0ZUNoYW5nZShldmVudDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IGJvb2xlYW4gfSk6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdjcmVhdGUnOlxuICAgICAgICB2YXIgbmV3TWFwcGVkUm9sZTogTWFwcGVkUm9sZSA9IHtcbiAgICAgICAgICBSb2xlQ29udGV4dHM6IHRoaXMuc291cmNlRGF0YS5tYXAoKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQ6IE1hcHBlZFJvbGVDb250ZXh0ID0ge1xuICAgICAgICAgICAgICBDaGlsZHJlblR5cGU6IENoaWxkcmVuVHlwZS5BY3Rpb24sXG4gICAgICAgICAgICAgIFNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgUm9sZUFjdGlvbnM6IGNvbmZpZy5BY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIGFjdDogTWFwcGVkUm9sZUFjdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgIFNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIE5hbWU6IGFjdGlvbixcbiAgICAgICAgICAgICAgICAgIFJvbGU6ICcnLFxuICAgICAgICAgICAgICAgICAgQ29udGV4dDogJycsXG4gICAgICAgICAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgICAgICAgICBJZDogJycsXG4gICAgICAgICAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICAgICAgICAgIFRlbmFudElkOiAnJyxcbiAgICAgICAgICAgICAgICAgIENvZGU6ICcnLFxuICAgICAgICAgICAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICAgICAgICAgICAgQVBJS2V5OiB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5BUElLZXksXG4gICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVBY3Rpb246IHRoaXMuZ2V0QXBwbGljYXRpb25BY3Rpb25Db2RlKGFjdGlvbiksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWN0O1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgTmFtZTogY29uZmlnLk5hbWUsXG4gICAgICAgICAgICAgIFJvbGU6ICcnLFxuICAgICAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgICAgIElkOiAnJyxcbiAgICAgICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICAgICAgICBUZW5hbnRJZDogJycsXG4gICAgICAgICAgICAgIENvZGU6ICcnLFxuICAgICAgICAgICAgICBTZXJ2aWNlTmFtZTogJycsXG4gICAgICAgICAgICAgIEFQSUtleTogdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuQVBJS2V5LFxuICAgICAgICAgICAgICBBcHBsaWNhdGlvblJvbGVDb250ZXh0OiB0aGlzLmdldEFwcGxpY2F0aW9uQ29udGV4dENvZGUoXG4gICAgICAgICAgICAgICAgY29uZmlnLk5hbWVcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIENoaWxkcmVuVHlwZTogQ2hpbGRyZW5UeXBlLlBlcm1pc3Npb24sXG4gICAgICAgICAgTmFtZTogJycsXG4gICAgICAgICAgaWQ6ICh0aGlzLmNhcmREYXRhLmxlbmd0aCArIDEpLnRvU3RyaW5nKCksXG4gICAgICAgICAgSWQ6ICh0aGlzLmNhcmREYXRhLmxlbmd0aCArIDEpLnRvU3RyaW5nKCksXG4gICAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICBUZW5hbnRJZDogJycsXG4gICAgICAgICAgQ29kZTogJycsXG4gICAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICAgIEFwcGxpY2F0aW9uOiB0aGlzLmFwcGxpY2F0aW9uID8gdGhpcy5hcHBsaWNhdGlvbiA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBBUElLZXk6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2FyZERhdGE6IENhcmREYXRhID0ge1xuICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICB0aXRsZTogbmV3TWFwcGVkUm9sZS5OYW1lLFxuICAgICAgICAgIGRhdGE6IG5ld01hcHBlZFJvbGUsXG4gICAgICAgICAgYm9keTogW10sXG4gICAgICAgICAgY2hpbGRyZW46IG5ld01hcHBlZFJvbGUuUm9sZUNvbnRleHRzLm1hcCgoYykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICB0aXRsZTogdGhpcy5nZXRGb3JtYXR0ZWROYW1lKGMuTmFtZSksXG4gICAgICAgICAgICAgIGRhdGE6IGMsXG4gICAgICAgICAgICAgIGJvZHk6IFtdLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogYy5Sb2xlQWN0aW9ucy5tYXAoKGEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0Rm9ybWF0dGVkTmFtZShhLk5hbWUpLFxuICAgICAgICAgICAgICAgICAgZGF0YTogYSxcbiAgICAgICAgICAgICAgICAgIGJvZHk6IFtdLFxuICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLmNvbmNhdChbbmV3TWFwcGVkUm9sZV0pO1xuICAgICAgICB0aGlzLmNhcmREYXRhLnB1c2goY2FyZERhdGEpO1xuICAgICAgICB0aGlzLnJvbGVDYXJkQ2xpY2tlZChjYXJkRGF0YSk7XG4gICAgICAgIHRoaXMuZGF0YVZpZXcuaXNUYWJsZVZpZXcgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzaG93VGFibGVWaWV3OiBib29sZWFuID0gZmFsc2U7XG4gIG9uU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGVkUm93czogUm9sZVtdKSB7fVxuICByZXRyeU1lc3NhZ2UoKSB7fVxuICBvbkNvbHVtbnNVcGRhdGVkKHVwZGF0ZWRDb2x1bW5zOiBJRGF0YUZpbHRlcltdKSB7XG4gICAgY29uc3QgdXBkYXRlZENvbHVtbkRlZjogQ29sdW1uRGVmaW5pdGlvbjxNYXBwZWRSb2xlPltdID0gW107XG4gICAgdXBkYXRlZENvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGluZ0NvbCA9IHRoaXMucm9sZUNvbnRyb2xTdmMucm9sZUNvbHVtbnMuZmluZChcbiAgICAgICAgKGNvbHVtbikgPT4gY29sdW1uLmhlYWRlciA9PT0gY29sLm5hbWUgfHwgY29sdW1uLmlkID09PSBjb2wubmFtZVxuICAgICAgKTtcbiAgICAgIGlmIChtYXRjaGluZ0NvbCkge1xuICAgICAgICB1cGRhdGVkQ29sdW1uRGVmLnB1c2gobWF0Y2hpbmdDb2wpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy52aXNpYmxlQ29sdW1uRGVmID0gWy4uLnVwZGF0ZWRDb2x1bW5EZWZdO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRmlsdGVyc0FuZFNvcnRzKGlzU2VhcmNoOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAoIWlzU2VhcmNoKSB7XG4gICAgICB0aGlzLmRhdGFWaWV3Lm9uQ2xlYXJTZWFyY2goKTtcbiAgICAgIHRoaXMuY3VycmVudFNlYXJjaFRlcm0gPSAnJztcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIGNvbnN0IGNsaWNrRXZlbnQgPSBuZXcgTW91c2VFdmVudCgnY2xpY2snLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNhbmNlbGFibGU6IHRydWUsXG4gICAgICAgIHZpZXc6IHdpbmRvdyxcbiAgICAgIH0pO1xuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjbGlja0V2ZW50KTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coeyBUaGlzOiB0aGlzIH0pO1xuICAgIHZhciBwYXlsb2FkOiBTZWFyY2hQcm9wZXJ0eVZhbHVlW10gPSB0aGlzLmN1cnJlbnRGaWx0ZXJzLm1hcCgoeCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgUHJvcGVydHlOYW1lOiB4Lm5hbWUsXG4gICAgICAgIEVudGl0eVZhbHVlOiB4LnZhbHVlLFxuICAgICAgICBPcGVyYXRvcjogU2VhcmNoT3BlcmF0b3IuQW5kLFxuICAgICAgICBTaWduOlxuICAgICAgICAgIHguY29uZGl0aW9uICYmIE9iamVjdC5rZXlzKERhdGVGaWx0ZXJUeXBlcykuaW5jbHVkZXMoeC5jb25kaXRpb24pXG4gICAgICAgICAgICA/IChEYXRlRmlsdGVyVHlwZXNbXG4gICAgICAgICAgICAgICAgeC5jb25kaXRpb24gYXMga2V5b2YgdHlwZW9mIERhdGVGaWx0ZXJUeXBlc1xuICAgICAgICAgICAgICBdIGFzIHVua25vd24gYXMgU2VhcmNoUHJvcGVydHlTaWduKVxuICAgICAgICAgICAgOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgICAgIFR5cGU6IFNlYXJjaFByb3BlcnR5VmFsdWVUeXBlLkRhdGUsXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHBheWxvYWQucHVzaCh7XG4gICAgICBQcm9wZXJ0eU5hbWU6ICdBUElLZXknLFxuICAgICAgRW50aXR5VmFsdWU6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgIE9wZXJhdG9yOiBTZWFyY2hPcGVyYXRvci5BbmQsXG4gICAgICBTaWduOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgfSk7XG4gICAgY29uc3Qgc29ydFBhcmFtOiB7IFBhcmFtOiBzdHJpbmc7IE9yZGVyOiBzdHJpbmcgfSB8IG51bGwgPVxuICAgICAgdGhpcy5jdXJyZW50U29ydHMubGVuZ3RoID4gMFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIFBhcmFtOiB0aGlzLmN1cnJlbnRTb3J0c1swXS5uYW1lLFxuICAgICAgICAgICAgT3JkZXI6IHRoaXMuY3VycmVudFNvcnRzWzBdLnZhbHVlLFxuICAgICAgICAgIH1cbiAgICAgICAgOiBudWxsO1xuICAgIGNvbnN0IHNlYXJjaFRlcm1FeGlzdHMgPSB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtLnRyaW0oKS5sZW5ndGggPiAwO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IHNlYXJjaFRlcm1FeGlzdHNcbiAgICAgID8gYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KFxuICAgICAgICAgIGBSb2xlL0dldFJvbGVzV2l0aFBhcmFtLyR7dGhpcy5jdXJyZW50U2VhcmNoVGVybS50cmltKCl9LzAvJHtcbiAgICAgICAgICAgIHRoaXMucGFnZVNpemVcbiAgICAgICAgICB9YFxuICAgICAgICApXG4gICAgICA6IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoXG4gICAgICAgICAgc29ydFBhcmFtXG4gICAgICAgICAgICA/IGBSb2xlL1NlYXJjaFJvbGVzLzAvJHt0aGlzLnBhZ2VTaXplfS8ke3NvcnRQYXJhbS5QYXJhbX0vJHtzb3J0UGFyYW0uT3JkZXJ9YFxuICAgICAgICAgICAgOiBgUm9sZS9TZWFyY2hSb2xlcy8wLyR7dGhpcy5wYWdlU2l6ZX1gLFxuICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlcnMgPSBbXTtcbiAgICAgIHRoaXMuY3VycmVudFNvcnRzID0gW107XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhZ2VTdGF0ZSA9IHJlcyBhcyBQYWdlZFJlc3VsdDxSb2xlPjtcbiAgICAgIHZhciByZXN1bHQgPSAocmVzIGFzIFBhZ2VkUmVzdWx0PFJvbGU+KS5SZXN1bHQ7XG4gICAgICB0aGlzLnNldFVwTWFwcGVkRGF0YShyZXN1bHQpO1xuICAgICAgdGhpcy5zZXRVcENhcmREYXRhKCk7XG4gICAgfVxuICB9XG4gIGFzeW5jIGxvYWRNb3JlRmlsdGVyc0FuZFNvcnRzKCk6IFByb21pc2U8UGFnZWRSZXN1bHQ8Um9sZT4gfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIXRoaXMucGFnZVN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBwYXlsb2FkOiBTZWFyY2hQcm9wZXJ0eVZhbHVlW10gPSB0aGlzLmN1cnJlbnRGaWx0ZXJzLm1hcCgoeCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgUHJvcGVydHlOYW1lOiB4Lm5hbWUsXG4gICAgICAgIEVudGl0eVZhbHVlOiB4LnZhbHVlLFxuICAgICAgICBPcGVyYXRvcjogU2VhcmNoT3BlcmF0b3IuQW5kLFxuICAgICAgICBTaWduOlxuICAgICAgICAgIHguY29uZGl0aW9uICYmIE9iamVjdC5rZXlzKERhdGVGaWx0ZXJUeXBlcykuaW5jbHVkZXMoeC5jb25kaXRpb24pXG4gICAgICAgICAgICA/IChEYXRlRmlsdGVyVHlwZXNbXG4gICAgICAgICAgICAgICAgeC5jb25kaXRpb24gYXMga2V5b2YgdHlwZW9mIERhdGVGaWx0ZXJUeXBlc1xuICAgICAgICAgICAgICBdIGFzIHVua25vd24gYXMgU2VhcmNoUHJvcGVydHlTaWduKVxuICAgICAgICAgICAgOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgICAgIFR5cGU6IFNlYXJjaFByb3BlcnR5VmFsdWVUeXBlLkRhdGUsXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHBheWxvYWQucHVzaCh7XG4gICAgICBQcm9wZXJ0eU5hbWU6ICdBUElLZXknLFxuICAgICAgRW50aXR5VmFsdWU6IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkFQSUtleSxcbiAgICAgIE9wZXJhdG9yOiBTZWFyY2hPcGVyYXRvci5BbmQsXG4gICAgICBTaWduOiBTZWFyY2hQcm9wZXJ0eVNpZ24uRVEsXG4gICAgfSk7XG4gICAgY29uc3Qgc29ydFBhcmFtOiB7IFBhcmFtOiBzdHJpbmc7IE9yZGVyOiBzdHJpbmcgfSB8IG51bGwgPVxuICAgICAgdGhpcy5jdXJyZW50U29ydHMubGVuZ3RoID4gMFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIFBhcmFtOiB0aGlzLmN1cnJlbnRTb3J0c1swXS5uYW1lLFxuICAgICAgICAgICAgT3JkZXI6IHRoaXMuY3VycmVudFNvcnRzWzBdLnZhbHVlLFxuICAgICAgICAgIH1cbiAgICAgICAgOiBudWxsO1xuICAgIGNvbnN0IHNlYXJjaFRlcm1FeGlzdHMgPSB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtLnRyaW0oKS5sZW5ndGggPiAwO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IHNlYXJjaFRlcm1FeGlzdHNcbiAgICAgID8gYXdhaXQgdGhpcy5zZXJ2ZXIuZ2V0KFxuICAgICAgICAgIGBSb2xlL0dldFJvbGVzV2l0aFBhcmFtLyR7dGhpcy5jdXJyZW50U2VhcmNoVGVybS50cmltKCl9LyR7XG4gICAgICAgICAgICB0aGlzLnBhZ2VTdGF0ZS5Ta2lwXG4gICAgICAgICAgfS8ke3RoaXMucGFnZVNpemV9YFxuICAgICAgICApXG4gICAgICA6IGF3YWl0IHRoaXMuc2VydmVyLnBvc3QoXG4gICAgICAgICAgc29ydFBhcmFtXG4gICAgICAgICAgICA/IGBSb2xlL1NlYXJjaFJvbGVzLyR7dGhpcy5wYWdlU3RhdGUuU2tpcH0vJHt0aGlzLnBhZ2VTaXplfS8ke3NvcnRQYXJhbS5QYXJhbX0vJHtzb3J0UGFyYW0uT3JkZXJ9YFxuICAgICAgICAgICAgOiBgUm9sZS9TZWFyY2hSb2xlcy8ke3RoaXMucGFnZVN0YXRlLlNraXB9LyR7dGhpcy5wYWdlU2l6ZX1gLFxuICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByZXN1bHQgPSByZXMgYXMgUGFnZWRSZXN1bHQ8Um9sZT47XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuICBvbkZpbHRlclVwZGF0ZWQodXBkYXRlZEZpbHRlcnM6IElEYXRhRmlsdGVyW10gfCBzdHJpbmcpIHtcbiAgICAvLyBFbnN1cmUgdXBkYXRlZEZpbHRlcnMgaXMgYW4gYXJyYXlcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh1cGRhdGVkRmlsdGVycykpIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlcnMgPSB1cGRhdGVkRmlsdGVycztcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyc0FuZFNvcnRzKCk7XG4gICAgfVxuICB9XG4gIG9uU29ydFVwZGF0ZWQodXBkYXRlZFNvcnRzOiBJRGF0YUZpbHRlcltdKSB7XG4gICAgdGhpcy5jdXJyZW50U29ydHMgPSB1cGRhdGVkU29ydHM7XG4gICAgY29uc29sZS5sb2coeyBTb3J0czogdXBkYXRlZFNvcnRzIH0pO1xuICAgIHRoaXMudXBkYXRlRmlsdGVyc0FuZFNvcnRzKCk7XG4gIH1cblxuICBoYW5kbGVTZWFyY2goZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSkge1xuICAgIHRoaXMuc2VhcmNoVGVybSQubmV4dChldmVudC52YWx1ZSk7XG4gIH1cblxuICBoYW5kbGVFeHBvcnQoZXhwb3J0ZWREYXRhOiBQYXJ0aWFsPGFueT5bXSkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdFeHBvcnRlZCBkYXRhOicsIGV4cG9ydGVkRGF0YSk7XG4gICAgdGhpcy5kb3dubG9hZENTVihleHBvcnRlZERhdGEpO1xuICB9XG4gIHByaXZhdGUgZG93bmxvYWRDU1YoZGF0YTogUGFydGlhbDxhbnk+W10pIHtcbiAgICBjb25zdCBoZWFkZXJzID0gT2JqZWN0LmtleXMoZGF0YVswXSk7XG4gICAgY29uc3QgY3N2Q29udGVudCA9IFtcbiAgICAgIGhlYWRlcnMuam9pbignLCcpLFxuICAgICAgLi4uZGF0YS5tYXAoKHJvdykgPT4gaGVhZGVycy5tYXAoKGhlYWRlcikgPT4gcm93W2hlYWRlcl0pLmpvaW4oJywnKSksXG4gICAgXS5qb2luKCdcXG4nKTtcblxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbY3N2Q29udGVudF0sIHsgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7JyB9KTtcbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGlmIChsaW5rLmRvd25sb2FkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnaHJlZicsIHVybCk7XG4gICAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCAnZXhwb3J0LmNzdicpO1xuICAgICAgbGluay5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgbGluay5jbGljaygpO1xuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbiAgICB9XG4gIH1cblxuICBnZXRNb2NrUm9sZXMoKTogUm9sZVtdIHtcbiAgICByZXR1cm4gbmV3IEFycmF5KDEwKS5maWxsKDEpLm1hcCgoaWQsIGkpID0+ICh7XG4gICAgICBJZDogaWQgKyBpLFxuICAgICAgaWQ6IChpZCArIGkpLnRvU3RyaW5nKCksXG4gICAgICBOYW1lOiB0aGlzLm1vY2tOYW1lc1tpXSB8fCAnJyxcbiAgICAgIFJvbGVDb250ZXh0czogdGhpcy5yYW5kb21Db250ZXh0cygpLFxuICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICBUZW5hbnRJZDogYFRlbmFudCR7aWQgKyBpfWAsXG4gICAgICBDb2RlOiAnJyxcbiAgICAgIFNlcnZpY2VOYW1lOiAnJyxcbiAgICAgIEFQSUtleTogJycsXG4gICAgfSkpO1xuICB9XG5cbiAgbW9ja05hbWVzOiBzdHJpbmdbXSA9IFtcbiAgICAnQWRtaW4nLFxuICAgICdTdXBlciBBZG1pbicsXG4gICAgJ01hbmFnZXInLFxuICAgICdJbnRlcm4nLFxuICAgICdQcm9kdWN0aW9uIE1hbmFnZXInLFxuICAgICdDRU8nLFxuICAgICdDVE8nLFxuICAgICdDT08nLFxuICAgICdEZXZlbG9wZXInLFxuICAgICdFbmdpbmVlcicsXG4gIF07XG5cbiAgcmFuZG9tTmFtZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy5tb2NrTmFtZXMubGVuZ3RoKTtcbiAgICByZXR1cm4gdGhpcy5tb2NrTmFtZXNbcmFuZG9tSW5kZXhdO1xuICB9XG5cbiAgcmFuZG9tQ29udGV4dHMoKTogUm9sZUNvbnRleHRbXSB7XG4gICAgY29uc3QgcmFuZG9tTnVtYmVyID0gTWF0aC5mbG9vcihcbiAgICAgIE1hdGgucmFuZG9tKCkgKiBPYmplY3Qua2V5cyhVSXMpLmxlbmd0aCArIDFcbiAgICApO1xuICAgIHZhciByZXR1cm5BcnJheTogUm9sZUNvbnRleHRbXSA9IFtdO1xuICAgIGNvbnN0IHVzZWRMaXN0OiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZG9tTnVtYmVyOyBpKyspIHtcbiAgICAgIGxldCByYW5kb21JbmRleDtcbiAgICAgIGRvIHtcbiAgICAgICAgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBPYmplY3Qua2V5cyhVSXMpLmxlbmd0aCk7XG4gICAgICB9IHdoaWxlICh1c2VkTGlzdC5pbmNsdWRlcyhyYW5kb21JbmRleCkpO1xuXG4gICAgICByZXR1cm5BcnJheS5wdXNoKHtcbiAgICAgICAgSWQ6ICdjb250ZXh0JyArIGksXG4gICAgICAgIGlkOiAoJ2NvbnRleHQnICsgaSkudG9TdHJpbmcoKSxcbiAgICAgICAgTmFtZTogT2JqZWN0LmtleXMoVUlzKVtyYW5kb21JbmRleF0sXG4gICAgICAgIFJvbGU6ICcnLFxuICAgICAgICBSb2xlQWN0aW9uczogdGhpcy5yYW5kb21BY3Rpb25zKCksXG4gICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgVGVuYW50SWQ6IGBUZW5hbnQkeydjb250ZXh0JyArIGl9YCxcbiAgICAgICAgQ29kZTogJycsXG4gICAgICAgIFNlcnZpY2VOYW1lOiAnJyxcbiAgICAgICAgQVBJS2V5OiAnJyxcbiAgICAgICAgQXBwbGljYXRpb25Sb2xlQ29udGV4dDogJycsXG4gICAgICB9KTtcbiAgICAgIHVzZWRMaXN0LnB1c2gocmFuZG9tSW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuQXJyYXk7XG4gIH1cblxuICByYW5kb21BY3Rpb25zKCk6IFJvbGVBY3Rpb25bXSB7XG4gICAgY29uc3QgcmFuZG9tTnVtYmVyID0gTWF0aC5mbG9vcihcbiAgICAgIE1hdGgucmFuZG9tKCkgKiBPYmplY3Qua2V5cyhVSUFjdGlvbnMpLmxlbmd0aCArIDFcbiAgICApO1xuICAgIHZhciByZXR1cm5BcnJheTogUm9sZUFjdGlvbltdID0gW107XG4gICAgY29uc3QgdXNlZExpc3Q6IG51bWJlcltdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYW5kb21OdW1iZXI7IGkrKykge1xuICAgICAgbGV0IHJhbmRvbUluZGV4O1xuICAgICAgZG8ge1xuICAgICAgICByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIE9iamVjdC5rZXlzKFVJQWN0aW9ucykubGVuZ3RoKTtcbiAgICAgIH0gd2hpbGUgKHVzZWRMaXN0LmluY2x1ZGVzKHJhbmRvbUluZGV4KSk7XG5cbiAgICAgIHJldHVybkFycmF5LnB1c2goe1xuICAgICAgICBJZDogJ2FjdGlvbicgKyBpLFxuICAgICAgICBpZDogKCdhY3Rpb24nICsgaSkudG9TdHJpbmcoKSxcbiAgICAgICAgTmFtZTogT2JqZWN0LmtleXMoVUlBY3Rpb25zKVtyYW5kb21JbmRleF0sXG4gICAgICAgIFJvbGU6ICcnLFxuICAgICAgICBDb250ZXh0OiAnJyxcbiAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICBUZW5hbnRJZDogYFRlbmFudCR7J2FjdGlvbicgKyBpfWAsXG4gICAgICAgIENvZGU6ICcnLFxuICAgICAgICBTZXJ2aWNlTmFtZTogJycsXG4gICAgICAgIEFQSUtleTogJycsXG4gICAgICAgIEFwcGxpY2F0aW9uUm9sZUFjdGlvbjogJycsXG4gICAgICB9KTtcbiAgICAgIHVzZWRMaXN0LnB1c2gocmFuZG9tSW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuQXJyYXk7XG4gIH1cblxuICBjbG9zZVBvcFVwKCkge1xuICAgIGlmICh0aGlzLnBvcFVwLmRyb3Bkb3duT3BlbiA9PSB0cnVlKSB7XG4gICAgICB0aGlzLnBvcFVwLnRvZ2dsZURyb3Bkb3duKCk7XG4gICAgICB0aGlzLm9wZW5Ecm9wZG93bklkID0gbnVsbDtcbiAgICAgIHRoaXMub25DbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGVkaXRWYWx1ZSh2YWx1ZTogTWFwcGVkUm9sZSkge1xuICAgIGNvbnN0IGNhcmQgPSB0aGlzLmNhcmREYXRhLmZpbmQoKHgpID0+IHguZGF0YS5JZCA9PSB2YWx1ZS5JZCk7XG4gICAgaWYgKGNhcmQgJiYgdGhpcy5jYXJkRGF0YVZpZXcpIHtcbiAgICAgIHRoaXMuZGF0YVZpZXcudG9nZ2xlVmlldygpO1xuICAgICAgY2FyZC5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB0aGlzLmN1cnJlbnREYXRhID0gdGhpcy5jYXJkRGF0YVZpZXcub25JdGVtQ2xpY2soY2FyZCk7XG4gICAgICB0aGlzLmNsb3NlUG9wVXAoKTtcbiAgICAgIC8vIGlmICh0aGlzLmN1cnJlbnREYXRhKSB7XG4gICAgICAvLyAgIHRoaXMuZm9ybS5jb250cm9sc1snTmFtZSddLnNldFZhbHVlKHRoaXMuY3VycmVudERhdGEuZGF0YT8uTmFtZSk7XG4gICAgICAvLyB9XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2ICNtZXNzYWdlTG9nIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNCBtZXNzYWdlLWxvZy1jb250YWluZXJcIj5cbiAgPGRpdiAqbmdJZj1cInRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA+IDBcIlxuICAgIGNsYXNzPVwiY29udGV4dC1iYW5uZXIgcHktMyBweC00IHJvdW5kZWQteGwgZmxleCBpdGVtLWNlbnRlciBqdXN0aWZ5LXNwYWNlLWJldHdlZW4gZ2FwLTNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMiBmbGV4LTEgY29udGV4dC1iYW5uZXItY29udGVudFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRleHQtY29udGVudCBpdGVtcy1jZW50ZXIgZmxleCBnYXAtMlwiICpuZ0Zvcj1cImxldCBjb250ZXh0IG9mIHRoaXMuY2FyZENvbnRleHRIaXN0b3J5OyBpbmRleCBhcyBpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZXh0LW1haW4tY29udGVudC1jb250YWluZXIgZmxleCBnYXAtNFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29udGV4dC1jYXB0aW9uIGZvbnQtYm9sZCB0ZXh0LVsjNDA0MDQwXVwiPnt7Y29udGV4dC5kYXRhLkNoaWxkcmVuVHlwZSAmJlxuICAgICAgICAgICAgY29udGV4dC5kYXRhLkNoaWxkcmVuVHlwZSA9PSBjaGlsZFBlcm1pc3Npb25SZWY/IGNvbnRleHQuZGF0YS5OYW1lOiBjb250ZXh0LnRpdGxlfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJpID09IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCAtMVwiXG4gICAgICAgICAgICBjbGFzcz1cImNvbnRleHQtc3ViY2FwdGlvblwiPnt7dGhpcy5nZXRDYXJkU3ViQ2FwdGlvbihjb250ZXh0KX19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImkgPCB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggLTFcIj4vPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZFwiPlxuICAgICAgPHZlcmJlbi1zdmcgKGNsaWNrKT1cImNsb3NlRGV0YWlscygpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIGljb249XCJjbG9zZS1jaXJjbGUtZnVsbFwiIFt3aWR0aF09XCIyMFwiXG4gICAgICAgIFtoZWlnaHRdPVwiMjBcIj48L3ZlcmJlbi1zdmc+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8dmVyYmVuLWRhdGEtdmlldyAjdmR2IFt2aWV3U3RhdGVdPVwie1xuICAgICAgaXNTZWFyY2g6IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwLFxuICAgICAgaXNDb2x1bW46IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwLFxuICAgICAgaXNGaWx0ZXI6IHRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwLFxuICAgICAgaXNTb3J0OiB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPT0gMCxcbiAgICAgIGlzRXhwb3J0OiB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPT0gMCxcbiAgICAgIGlzU2VsZWN0OiB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPT0gMCxcbiAgICAgIGlzQ3JlYXRlOiB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPT0gMCxcbiAgICAgIGlzVG9nZ2xlOnRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwLFxuICAgIH1cIiBbYnV0dG9uQ2xhc3NdPVwiJ215LWN1c3RvbS1idXR0b24tY2xhc3MnXCIgW2ljb25DbGFzc109XCInbXktaWNvbi1jbGFzcydcIlxuICAgIFthY3RpdmVJY29uQ2xhc3NdPVwiJ215LWFjdGl2ZS1pY29uLWNsYXNzJ1wiIFtpc1RhYmxlVmlld109XCJ0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPT0gMFwiXG4gICAgW3NlbGVjdGVkQ29sdW1uQ291bnRdPVwiMFwiIFtzZWxlY3RlZFNvcnRDb3VudF09XCIwXCIgW3NlbGVjdGVkRmlsdGVyVGFibGVDb3VudF09XCIwXCIgKHZpZXdDaGFuZ2UpPVwib25WaWV3Q2hhbmdlKCRldmVudClcIlxuICAgIChzdGF0ZUNoYW5nZSk9XCJvblN0YXRlQ2hhbmdlKCRldmVudClcIiAob25TZWFyY2hDaGFuZ2UpPVwiaGFuZGxlU2VhcmNoKCRldmVudClcIj5cbiAgICA8ZGl2IGNsYXNzPVwibXQtMlwiIHRhYmxlLWNvbnRlbnQ+XG4gICAgICA8bGliLWRhdGEtdGFibGUgW2RhdGFdPVwiZGF0YVwiIFtjb2x1bW5zXT1cInZpc2libGVDb2x1bW5EZWZcIiBbc3R5bGVDb25maWddPVwic3R5bGVzXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwic2VsZWN0XCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC1pc1NlbGVjdGVkPVwiaXNTZWxlY3RlZFwiIGxldC10b2dnbGVSb3dTZWxlY3Rpb249XCJ0b2dnbGVSb3dTZWxlY3Rpb25cIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJpc1NlbGVjdGVkXCIgKGNoYW5nZSk9XCJ0b2dnbGVSb3dTZWxlY3Rpb24oKVwiIC8+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2hlYWRlciBsZXQtYWxsUm93c1NlbGVjdGVkPVwiYWxsUm93c1NlbGVjdGVkXCIgbGV0LXNvbWVSb3dzU2VsZWN0ZWQ9XCJzb21lUm93c1NlbGVjdGVkXCJcbiAgICAgICAgICAgIGxldC10b2dnbGVBbGxSb3dzPVwidG9nZ2xlQWxsUm93c1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImFsbFJvd3NTZWxlY3RlZCgpXCIgW2luZGV0ZXJtaW5hdGVdPVwic29tZVJvd3NTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVBbGxSb3dzKClcIiAvPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cImNyZWF0ZWRBdFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbCBsZXQtdmFsdWU+XG4gICAgICAgICAgICB7eyB2YWx1ZSB8IGRhdGUgfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJ1cGRhdGVkQXRcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2NlbGwgbGV0LXZhbHVlPlxuICAgICAgICAgICAge3sgdmFsdWUgfCBkYXRlIH19XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJhY3Rpb25zXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsIGxldC1yb3c9XCJyb3dcIiBsZXQtdmFsdWU+XG4gICAgICAgICAgICA8dmVyYmVuLXBvcC1VcCAjcG9wdXAgW2N1c3RvbVN0eWxlc109XCJ7J3otaW5kZXgnOiAnOTknfVwiIFtkcm9wZG93bk9wZW5dPVwiaXNEcm9wZG93bk9wZW4ocm93KVwiXG4gICAgICAgICAgICAgIFtlbmFibGVNb3VzZUxlYXZlXT1cImZhbHNlXCIgKGNsb3NlKT1cIm9uQ2xvc2UoKVwiPlxuICAgICAgICAgICAgICA8dmVyYmVuLXN2ZyBjbGFzcz1cImN1cnNvci1wb2ludGVyIGFjdGlvbnMtaWNvblwiIChjbGljayk9XCJvcGVuRHJvcGRvd24ocm93KVwiIGRyb3Bkb3duLXRyaWdnZXJcbiAgICAgICAgICAgICAgICBpY29uPVwibGlzdFwiPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcC11cC1jb250ZW50IGZsZXggZmxleC1jb2xcIiBkcm9wZG93bi1jb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImVkaXRWYWx1ZSh2YWx1ZSlcIiBjbGFzcz1cInBvcC11cC12YWx1ZSBjdXJzb3ItcG9pbnRlclwiPkVkaXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJ2aWV3RGV0YWlsc0Zyb21UYWJsZSh2YWx1ZSlcIiBjbGFzcz1cInBvcC11cC12YWx1ZSBjdXJzb3ItcG9pbnRlclwiPlZpZXcgRGV0YWlsczwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3AtdXAtdmFsdWUgY3Vyc29yLXBvaW50ZXJcIj5WaWV3IFVzZXJzPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC92ZXJiZW4tcG9wLVVwPlxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtNCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPHZlcmJlbi1zdmcgKGNsaWNrKT1cImVkaXRWYWx1ZSh2YWx1ZSlcIiBpY29uPVwiZWRpdFwiIFt3aWR0aF09XCIxNVwiIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJ2aWV3RGV0YWlsc0Zyb21UYWJsZSh2YWx1ZSlcIiBjbGFzcz1cInZpZXctbGlua3Mgdmlldy1kZXRhaWxzXCI+dmlldyBkZXRhaWxzPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZpZXctbGlua3Mgdmlldy11c2Vyc1wiPnZpZXcgdXNlcnM8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2xpYi1kYXRhLXRhYmxlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2FyZC1jb250ZW50PlxuICAgICAgPHZlcmJlbi1jYXJkLWRhdGEtdmlldyBib3JkZXJSYWRpdXM9XCIxMnB4XCIgI3ZkY3YgZGF0YUlkPVwiSWRcIiBib3JkZXI9XCI1cHhcIiBbY2FyZERhdGFMaXN0XT1cImNhcmREYXRhXCJcbiAgICAgICAgcmJnQ29sb3I9XCIjZjVmNmY5XCIgbWc9XCIwcHhcIj5cbiAgICAgICAgPHZlcmJlbi1sZWZ0LWNhcmQtZGF0YS12aWV3IGNsYXNzPVwic3BhY2UteS03XCI+XG4gICAgICAgICAgPHZlcmJlbi1sZWZ0LWNhcmQtZGF0YSAjdmxjZCBbcGFyZW50XT1cInZkY3ZcIiBkYXRhSWQ9XCJNYWlsQWRkcmVzc1wiXG4gICAgICAgICAgICBjbGFzcz1cImJnLXNlY29uZGFyeS0xMDAgcm91bmRlZC14bCBib3JkZXItcHJpbWFyeSBib3JkZXItWzFweF1cIiBbY2FyZERhdGFMaXN0XT1cImNhcmREYXRhXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NhcmQgbGV0LWl0ZW0+XG4gICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cInJvbGVDYXJkQ2xpY2tlZChpdGVtKVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmRhdGEuQ2hpbGRyZW5UeXBlICYmIGl0ZW0uZGF0YS5DaGlsZHJlblR5cGUgPT0gY2hpbGRQZXJtaXNzaW9uUmVmXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggY3Vyc29yLXBvaW50ZXIgaC1bbWF4LWNvbnRlbnRdXCI+XG4gICAgICAgICAgICAgICAgPHZlcmJlbi1zdmcgW3dpZHRoXT1cIjE1XCIgW2hlaWdodF09XCIxNVwiIChjbGljayk9XCJ0b2dnbGVDaGlsZHJlbihpdGVtKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGg/J3Zpc2libGUnOidpbnZpc2libGUnXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaXRlbXMtY2VudGVyIGZsZXggIHByLTEgY3Vyc29yLXBvaW50ZXJcIiBbaWNvbl09XCJpdGVtLmlzQ2hpbGRyZW5FeHBhbmRlZD8nbWludXMnOidwbHVzJ1wiIC8+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggIHctZnVsbCBiZy1zZWNvbmRhcnkgcm91bmRlZC14bFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMyByb3VuZGVkLXhsIHJvdW5kZWQtdHItbm9uZSByb3VuZGVkLWJyLW5vbmVcIiBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNlbGVjdGVkID8gJ2JnLXByaW1hcnknIDogJ2JnLXNlY29uZGFyeS0yMDAnXG4gICAgICAgICAgICAgICAgICAgIFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTMgcHgtNCBmbGV4LTEgaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtc3RhcnQgZmxleC0xIGdhcC0xIGp1c3RpZnktYmV0d2VlbiBoLVsxMDAlXVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtMSBjYXJkLW1pbi1oZWlnaHQganVzdGlmeS1iZXR3ZWVuIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJteS0wIGZvbnQtYm9sZCB0ZXh0LVsjNDA0MDQwXSBsZWFkaW5nLVsxOS41cHhdXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kYXRhLk5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIhdGV4dC1bMTBweF0gZm9udC1saWdodCB0ZXh0LVsjNDA0MDQwXSBsZWFkaW5nLVsxMi4xcHhdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dldENhcmRTdWJDYXB0aW9uKGl0ZW0pfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID4gMFwiIGNsYXNzPVwiZmxleCBpdGVtcy1lbmQgaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIChjbGljayk9XCJ2aWV3RGV0YWlscyhpdGVtKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJteS0wIHVuZGVybGluZSB0ZXh0LVsjMzQ3OUU5XSB0ZXh0LVsxMnB4XSBsZWFkaW5nLVsxNi42cHhdIGN1cnNvci1wb2ludGVyIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcgZGV0YWlsczwvcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXRlbS5kYXRhLkNoaWxkcmVuVHlwZSB8fCBpdGVtLmRhdGEuQ2hpbGRyZW5UeXBlICE9PSBjaGlsZFBlcm1pc3Npb25SZWZcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBoLVttYXgtY29udGVudF1cIj5cbiAgICAgICAgICAgICAgICA8dmVyYmVuLXN2ZyBbbmdDbGFzc109XCJpdGVtLmNoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoPyd2aXNpYmxlJzonaW52aXNpYmxlJ1wiIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCIgKGNsaWNrKT1cInRvZ2dsZUNoaWxkcmVuKGl0ZW0pXCIgY2xhc3M9XCJpdGVtcy1jZW50ZXIgZmxleCAgcHItMSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICBbaWNvbl09XCJpdGVtLmlzQ2hpbGRyZW5FeHBhbmRlZD8nbWludXMnOidwbHVzJ1wiIC8+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggIHctZnVsbCBiZy1zZWNvbmRhcnkgcm91bmRlZC14bFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMyByb3VuZGVkLXhsIHJvdW5kZWQtdHItbm9uZSByb3VuZGVkLWJyLW5vbmVcIiBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNlbGVjdGVkID8gJ2JnLXByaW1hcnknIDogJ2JnLXNlY29uZGFyeS0yMDAnXG4gICAgICAgICAgICAgICAgICAgIFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTMgcHgtNCBmbGV4LTEgZmxleCBnYXAtMiBoLVsxMDAlXSBpdGVtcy1zdGFydFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJpdGVtLmRhdGE/LlNlbGVjdGVkICE9IHVuZGVmaW5lZFwiIFtkaXNhYmxlZF09XCJ0aGlzLmlzQ2hlY2tib3hEaXNhYmxlZChpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJtdC0xIGN1cnNvci1wb2ludGVyXCIgWyhuZ01vZGVsKV09XCJpdGVtLmRhdGEuU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgdGhpcy5zYXZlUm9sZUR5bmFtaWMoaXRlbSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1zdGFydCBmbGV4LTEgZ2FwLTEganVzdGlmeS1iZXR3ZWVuIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZmxleC0xIGNhcmQtbWluLWhlaWdodCBqdXN0aWZ5LWJldHdlZW4gaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cIm15LTAgZm9udC1ib2xkIHRleHQtWyM0MDQwNDBdIGxlYWRpbmctWzE5LjVweF1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiIXRleHQtWzEwcHhdIGZvbnQtbGlnaHQgdGV4dC1bIzQwNDA0MF0gbGVhZGluZy1bMTIuMXB4XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tnZXRDYXJkU3ViQ2FwdGlvbihpdGVtKX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDBcIiBjbGFzcz1cImZsZXggaXRlbXMtZW5kIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAoY2xpY2spPVwidmlld0RldGFpbHMoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm15LTAgdW5kZXJsaW5lIHRleHQtWyMzNDc5RTldIHRleHQtWzEycHhdIGxlYWRpbmctWzE2LjZweF0gY3Vyc29yLXBvaW50ZXIgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldyBkZXRhaWxzPC9wPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NhcmRDaGlsZCBsZXQtaXRlbT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaC1bbWF4LWNvbnRlbnRdXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggIHctZnVsbCBiZy1zZWNvbmRhcnkgcm91bmRlZC14bFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMyByb3VuZGVkLXhsIHJvdW5kZWQtdHItbm9uZSByb3VuZGVkLWJyLW5vbmVcIiBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNlbGVjdGVkID8gJ2JnLXByaW1hcnknIDogJ2JnLXNlY29uZGFyeS0yMDAnXG4gICAgICAgICAgICAgICAgICAgIFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTMgcHgtNCBmbGV4LTEgZmxleCBnYXAtMiBoLVsxMDAlXSBpdGVtcy1zdGFydFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJpdGVtLmRhdGE/LlNlbGVjdGVkICE9IHVuZGVmaW5lZFwiIFtkaXNhYmxlZF09XCJ0aGlzLmlzQ2hlY2tib3hEaXNhYmxlZChpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJtdC0xIGN1cnNvci1wb2ludGVyXCIgWyhuZ01vZGVsKV09XCJpdGVtLmRhdGEuU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKTsgdGhpcy5zYXZlUm9sZUR5bmFtaWMoaXRlbSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1zdGFydCBmbGV4LTEgZ2FwLTEganVzdGlmeS1iZXR3ZWVuIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZmxleC0xIGNhcmQtbWluLWhlaWdodCBqdXN0aWZ5LWJldHdlZW4gaC1bMTAwJV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cIm15LTAgZm9udC1ib2xkIHRleHQtWyM0MDQwNDBdIGxlYWRpbmctWzE5LjVweF1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9oMz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiIXRleHQtWzEwcHhdIGZvbnQtbGlnaHQgdGV4dC1bIzQwNDA0MF0gbGVhZGluZy1bMTIuMXB4XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tnZXRDYXJkU3ViQ2FwdGlvbihpdGVtKX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDBcIiBjbGFzcz1cImZsZXggaXRlbXMtZW5kIGgtWzEwMCVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCAoY2xpY2spPVwidmlld0RldGFpbHNDaGlsZChpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXktMCB1bmRlcmxpbmUgdGV4dC1bIzM0NzlFOV0gdGV4dC1bMTJweF0gbGVhZGluZy1bMTYuNnB4XSBjdXJzb3ItcG9pbnRlciBmb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3IGRldGFpbHM8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3ZlcmJlbi1sZWZ0LWNhcmQtZGF0YT5cbiAgICAgICAgPC92ZXJiZW4tbGVmdC1jYXJkLWRhdGEtdmlldz5cbiAgICAgICAgPHZlcmJlbi1yaWdodC1jYXJkLWRhdGEtdmlldyAqbmdJZj1cInRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwXCI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNwYXJlbnQ+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGhpcy5jdXJyZW50RGF0YVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCByb3VuZGVkLXhsIGgtZnVsbCB3LWZ1bGwganVzdGlmeS1iZXR3ZWVuIHJlbGF0aXZlIHNwYWNlLXktNFwiPlxuICAgICAgICAgICAgICA8dmVyYmVuYS1pbnB1dCBuYW1lPVwiTmFtZVwiIGxhYmVsPVwiTmFtZVwiIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZVRhYmxlKClcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGhpcy5jdXJyZW50RGF0YS5kYXRhLk5hbWVcIiAvPlxuXG4gICAgICAgICAgICAgIDwhLS0gYnV0dG9ucyAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGJvdHRvbS04IGxlZnQtMCByaWdodC0wXCI+XG4gICAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uIGNsYXNzPVwidmVyYmVuLWRlbGV0ZS1idXR0b25cIiB0ZXh0PVwiRGVsZXRlXCI+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtM1wiPlxuICAgICAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uIGNsYXNzPVwidmVyYmVuLXN3aXRjaC1idXR0b25cIiAoY2xpY2spPVwidmR2LnRvZ2dsZVZpZXcoKVwiXG4gICAgICAgICAgICAgICAgICAgIHRleHQ9XCJTd2l0Y2ggVG8gVGFibGVcIj48L3ZlcmJlbmEtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPHZlcmJlbmEtYnV0dG9uIGNsYXNzPVwidmVyYmVuLXByaW1hcnktYnV0dG9uXCIgKGNsaWNrKT1cInRoaXMuc2F2ZVJvbGUoKVwiIHRleHQ9XCJTYXZlXCI+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvdmVyYmVuLXJpZ2h0LWNhcmQtZGF0YS12aWV3PlxuICAgICAgICA8IS0tIDx2ZXJiZW4tcmlnaHQtY2FyZC1kYXRhLXZpZXc+XG4gICAgICAgICAgeWVzaGhoaGhoXG4gICAgICAgIDwvdmVyYmVuLXJpZ2h0LWNhcmQtZGF0YS12aWV3PiAtLT5cblxuICAgICAgICA8dmVyYmVuLWNhcmQtZGF0YS12aWV3LWZvb3RlciAqbmdJZj1cInRoaXMuY2FyZENvbnRleHRIaXN0b3J5Lmxlbmd0aCA9PSAwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXZkY3YuaGFzQ3VycmVudEl0ZW0oKSAmJiB0aGlzLmNhcmRDb250ZXh0SGlzdG9yeS5sZW5ndGggPT0gMFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibWVzc2FnZS1sb2ctYnV0dG9uLWNvbnRhaW5lciBmbGV4IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICA8dmVyYmVuYS1idXR0b24gW2ZvbnRXZWlnaHRdPVwiJ2JvbGQnXCIgW2JnQ29sb3JdPVwiJyM4RThEODcnXCIgW2JvcmRlclJhZGl1c109XCInNHB4J1wiIFt0ZXh0Q29sb3JdPVwiJyNmZmYnXCJcbiAgICAgICAgICAgICAgICBbdGV4dF09XCInRGVsZXRlJ1wiPlxuICAgICAgICAgICAgICA8L3ZlcmJlbmEtYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB7e3ZkY3YuaGFzQ3VycmVudEl0ZW0oKT8nZmxleC0xJzonJ319IGp1c3RpZnktZW5kIGl0ZW1zLWNlbnRlciBnYXAtNVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2luYXRvci10ZXh0XCI+e3sgY2FyZERhdGEubGVuZ3RoIH19IHJlY29yZHMgbG9hZGVkPC9zcGFuPlxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkTW9yZSgpXCIgY2xhc3M9XCJsb2FkLW1vcmUgdmlldy1saW5rc1wiPkxvYWQgbW9yZTwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdmVyYmVuLWNhcmQtZGF0YS12aWV3LWZvb3Rlcj5cbiAgICAgIDwvdmVyYmVuLWNhcmQtZGF0YS12aWV3PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY29sdW1uLWNvbnRlbnQ+XG4gICAgICA8dmVyYmVuLXZpc2libGUtY29sdW1uIChjb2x1bW5zVXBkYXRlZCk9XCJvbkNvbHVtbnNVcGRhdGVkKCRldmVudClcIiBbYm9yZGVyXT1cIicxcHggc29saWQgcmdiYSgyMTIsIDE2MCwgNywgMSknXCJcbiAgICAgICAgYm9yZGVyUmFkaXVzPVwiMTBweFwiIGJveFNoYWRvdz1cIjJweCAycHggMnB4IDBweCBzaWx2ZXJcIiBiZ0NvbG9yPVwid2hpdGVcIiB3aWR0aD1cIjQwMHB4XCIgdGV4dENvbG9yPVwiYmxhY2tcIiBwZD1cIjFyZW1cIlxuICAgICAgICBwcmltYXJ5Q29sb3I9XCIjRkZFNjgxXCIgc2Vjb25kYXJ5Q29sb3I9XCIjMzQ3OUU5XCIgW2NvbHVtbnNdPVwidmlzaWJsZUNvbHVtbnNcIlxuICAgICAgICBbZGlzcGxheWVkQ29sdW1uc109XCI1XCI+PC92ZXJiZW4tdmlzaWJsZS1jb2x1bW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBmaWx0ZXItY29udGVudD5cbiAgICAgIDx2ZXJiZW4tdGFibGUtZmlsdGVyIChmaWx0ZXJzQXBwbGllZCk9XCJvbkZpbHRlclVwZGF0ZWQoJGV2ZW50KVwiIFtib3JkZXJdPVwiJzFweCBzb2xpZCByZ2JhKDIxMiwgMTYwLCA3LCAxKSdcIlxuICAgICAgICBib3JkZXJSYWRpdXM9XCIxMHB4XCIgYm94U2hhZG93PVwiMnB4IDJweCAycHggMHB4IHNpbHZlclwiIGJnQ29sb3I9XCJ3aGl0ZVwiIHdpZHRoPVwiNDIwcHhcIiB0ZXh0Q29sb3I9XCJibGFja1wiIHBkPVwiMXJlbVwiXG4gICAgICAgIHByaW1hcnlDb2xvcj1cIiNGRkU2ODFcIiBzZWNvbmRhcnlDb2xvcj1cIiMzNDc5RTlcIiB0ZXJ0aWFyeUNvbG9yPVwiIzQwNDA0MFwiIFtmaWx0ZXJPcHRpb25zXT1cImZpbHRlckFycmF5XCJcbiAgICAgICAgW21heEZpbHRlckxlbmd0aF09XCIzXCI+PC92ZXJiZW4tdGFibGUtZmlsdGVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgc29ydC1jb250ZW50PlxuICAgICAgPHZlcmJlbi1zb3J0LXRhYmxlIChzZWxlY3RlZE9wdGlvbnMpPVwib25Tb3J0VXBkYXRlZCgkZXZlbnQpXCIgW2JvcmRlcl09XCInMXB4IHNvbGlkIHJnYmEoMjEyLCAxNjAsIDcsIDEpJ1wiXG4gICAgICAgIGJvcmRlclJhZGl1cz1cIjEwcHhcIiBib3hTaGFkb3c9XCIycHggMnB4IDJweCAwcHggc2lsdmVyXCIgYmdDb2xvcj1cIndoaXRlXCIgd2lkdGg9XCI0MDBweFwiIHRleHRDb2xvcj1cImJsYWNrXCIgcGQ9XCIxcmVtXCJcbiAgICAgICAgcHJpbWFyeUNvbG9yPVwiI0ZGRTY4MVwiIHNlY29uZGFyeUNvbG9yPVwiIzM0NzlFOVwiIHRlcnRpYXJ5Q29sb3I9XCIjNDA0MDQwXCIgW2VuYWJsZURyYWdBbmREcm9wXT1cInRydWVcIlxuICAgICAgICBbc29ydE9wdGlvbnNdPVwic29ydE9wdGlvbnNcIj48L3ZlcmJlbi1zb3J0LXRhYmxlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZXhwb3J0LWNvbnRlbnQ+XG4gICAgICA8bGliLWRhdGEtZXhwb3J0IFtkYXRhXT1cImRhdGFcIiAoZXhwb3J0RGF0YUV2ZW50KT1cImhhbmRsZUV4cG9ydCgkZXZlbnQpXCI+XG4gICAgICA8L2xpYi1kYXRhLWV4cG9ydD5cbiAgICA8L2Rpdj5cbiAgPC92ZXJiZW4tZGF0YS12aWV3PlxuICA8ZGl2ICpuZ0lmPVwidmR2LmlzVGFibGVWaWV3XCIgY2xhc3M9XCJmbGV4IGdhcC0yIGp1c3RpZnktYmV0d2VlblwiPlxuICAgIDxkaXYgY2xhc3M9XCJtZXNzYWdlLWxvZy1idXR0b24tY29udGFpbmVyIGZsZXgganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICA8dmVyYmVuYS1idXR0b24gW2ZvbnRXZWlnaHRdPVwiJ2JvbGQnXCIgW2JnQ29sb3JdPVwiJyM4RThEODcnXCIgW2JvcmRlclJhZGl1c109XCInNHB4J1wiIFt0ZXh0Q29sb3JdPVwiJyNmZmYnXCJcbiAgICAgICAgW3RleHRdPVwiJ0RlbGV0ZSdcIj5cbiAgICAgIDwvdmVyYmVuYS1idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmQgaXRlbXMtY2VudGVyIGdhcC01XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInBhZ2luYXRvci10ZXh0XCI+e3sgY2FyZERhdGEubGVuZ3RoIH19IHJlY29yZHMgbG9hZGVkPC9zcGFuPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9hZE1vcmUoKVwiIGNsYXNzPVwibG9hZC1tb3JlIHZpZXctbGlua3NcIj5Mb2FkIG1vcmU8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==