gamma-app-controller 2.0.6 → 2.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -191,10 +191,26 @@ export class CreateKpiTreeComponent {
191
191
  getKpiItemValue(e) {
192
192
  if (e.event) {
193
193
  const kpi_data = this.keiParentDataSource.find((item) => item.kpiId === e.value);
194
- const tidKey = this.select_tag_type === 'child' && this.isEditKpiAdded ? 'childTid' : 'parentTid';
195
- this.selected_kpi_tid = kpi_data[tidKey];
194
+ if (this.isEditKpiAdded) {
195
+ const tidKey = this.select_tag_type === 'child' && this.isEditKpiAdded ? 'childTid' : 'parentTid';
196
+ this.selected_kpi_tid = kpi_data[tidKey];
197
+ }
198
+ else {
199
+ const tidKey = kpi_data.childTid && kpi_data.childTid.length > 1 ? 'childTid' : 'parentTid';
200
+ this.selected_kpi_tid = kpi_data[tidKey];
201
+ this.selected_kpi_child_tid = this.getNextChildTid(this.selected_kpi_tid, this.kpiConfigDataSource);
202
+ }
196
203
  }
197
204
  }
205
+ getNextChildTid(parentTid, kpiConfigDataSource) {
206
+ const children = kpiConfigDataSource.filter(item => item.parentTid === parentTid && item.childTid);
207
+ const maxChildNumber = children.reduce((max, item) => {
208
+ const parts = item.childTid.split('.');
209
+ const lastNumber = Number(parts[parts.length - 1]);
210
+ return lastNumber > max ? lastNumber : max;
211
+ }, 0);
212
+ return `${parentTid}.${maxChildNumber + 1}`;
213
+ }
198
214
  addNewKpi() {
199
215
  this.isNewKpiAdded = true;
200
216
  this.isEditKpiAdded = false;
@@ -269,9 +285,9 @@ export class CreateKpiTreeComponent {
269
285
  }
270
286
  }
271
287
  CreateKpiTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CreateKpiTreeComponent, deps: [{ token: i1.CommonService }, { token: i2.FormBuilder }, { token: i3.CreateKpIService }, { token: i4.ToastrService }, { token: i5.Router }], target: i0.ɵɵFactoryTarget.Component });
272
- CreateKpiTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CreateKpiTreeComponent, selector: "app-create-kpi", ngImport: i0, template: "<app-loading *ngIf=\"loadingModal\"></app-loading>\n<div class=\"p-4 flex flex-row w-full\" *ngIf=\"!loadingModal\">\n <div class=\"mx-2 bg-white dark:bg-transparent border-r\">\n <!-- <ng-container *ngIf=\"isKpiTreePrepared\"> -->\n <treeview class=\"dark bg-gray-900 dark:bg-transparent\" [name]=\"'mainNavigation'\" [routeKey]=\"'raKpi'\"\n [navigation]=\"kpiData\" [isSearchBox]=\"false\" [isEditIcon]=\"true\"\n (editableKpiData)=\"getEditableKpi($event)\">\n </treeview>\n <!-- </ng-container> -->\n\n </div>\n <div class=\"mx-2 w-full\">\n <!-- <div class=\"flex flex-row item-center justify-center my-8\">\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"addNewKpi()\">Add New KPI</button>\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"routeToKpiConfig()\"\n routerLinkActive=\"router-link-active\">Configure KPI</button>\n </div> -->\n <!-- <ng-container *ngIf=\"isNewKpiAdded\"> -->\n <!-- <div class=\"px-2 w-full\"> -->\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Name</p>\n <dx-text-box [(ngModel)]=\"select_kpi_name\"></dx-text-box>\n </div>\n </div>\n <div class=\"flex flex-row w-full\">\n <div class=\"m-1 w-1/3\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Tag Type</p>\n <dx-select-box [dataSource]=\"tagType\" [(ngModel)]=\"select_tag_type\"\n (onValueChanged)=\"addTagtypeValue($event)\"></dx-select-box>\n </div>\n </div>\n <!-- (onCustomItemCreating)=\"onCustomDimentionCreating($event)\" -->\n <div class=\"m-1 w-full\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Aliases</p>\n <dx-tag-box [acceptCustomValue]=\"true\" [(ngModel)]=\"selected_aliases\"></dx-tag-box>\n </div>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Page ID</p>\n <!-- <dx-text-box [(ngModel)]=\"selected_page_id\"></dx-text-box> -->\n <dx-select-box [items]=\"templateDataSource\" valueExpr=\"pageId\" displayExpr=\"pageName\"\n [searchEnabled]=\"true\" [(ngModel)]=\"selected_page_id\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Description</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"selected_desc\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\" [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\" [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n\n\n <div class=\"flex flex-row w-full\">\n <div class=\"m-1 w-full\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Parent Component </p>\n <dx-select-box [items]=\"keiParentDataSource\" displayExpr=\"kpiName\" valueExpr=\"kpiId\"\n (onValueChanged)=\"getKpiItemValue($event)\" [(ngModel)]=\"parante_kpi_name\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1 w-full\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Parent TID</p>\n <dx-text-box [(ngModel)]=\"selected_kpi_tid\" [readOnly]=\"false\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-1 w-full\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Child TID</p>\n <dx-text-box [(ngModel)]=\"selected_kpi_child_tid\" [readOnly]=\"false\"></dx-text-box>\n </div>\n </div>\n </div>\n\n <div class=\"flex flex-row justify-between mt-3\">\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_visibility\" text=\"Visibility\"></dx-check-box>\n </div>\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_external\" text=\"External KPI\"></dx-check-box>\n </div>\n </div>\n <!-- <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">KPI Info</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"selected_info\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div> -->\n\n <app-user-access [(userOptionContainer)]=\"userOptionContainer\">\n </app-user-access>\n\n <div class=\"flex flex-auto mt-5 justify-end\">\n <button class=\"{{commonService.btn_success_md}}\" (click)=\"getUpdateKpi()\" *ngIf=\"isEditKpiAdded\">Update KPI\n </button>\n <button class=\"{{commonService.btn_danger_md}}\" (click)=\"getDeletKpi()\" *ngIf=\"isEditKpiAdded\">Delete KPI\n </button>\n <button class=\"{{commonService.btn_success_md}}\" (click)=\"makeNewKpiWithUserEntity()\" *ngIf=\"!isEditKpiAdded\">Create KPI\n </button>\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"getReseteKpi()\">Reset</button>\n\n </div>\n <!-- </div> -->\n <!-- </ng-container> -->\n </div>\n\n\n\n\n</div>", styles: [":host ::ng-deep treeview .treeview-wrapper{width:100%!important}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.LoadingComponent, selector: "app-loading" }, { kind: "component", type: i8.DxiItemComponent, selector: "dxi-item", inputs: ["disabled", "html", "icon", "template", "text", "title", "visible", "onClick", "stylingMode", "type", "baseSize", "box", "ratio", "shrink", "elementAttr", "hint", "beginGroup", "closeMenuOnClick", "items", "selectable", "selected", "colSpan", "cssClass", "dataField", "editorOptions", "editorType", "helpText", "isRequired", "itemType", "label", "name", "validationRules", "visibleIndex", "alignItemLabels", "caption", "colCount", "colCountByScreen", "tabPanelOptions", "tabs", "badge", "tabTemplate", "buttonOptions", "horizontalAlignment", "verticalAlignment", "locateInMenu", "location", "menuItemTemplate", "options", "showText", "widget", "height", "width", "imageAlt", "imageSrc", "acceptedValues", "formatName", "formatValues", "key", "showChevron", "menuTemplate", "heightRatio", "widthRatio", "expanded", "hasItems", "id", "parentId"] }, { kind: "component", type: i9.DxCheckBoxComponent, selector: "dx-check-box", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "iconSize", "isValid", "name", "readOnly", "rtlEnabled", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconSizeChange", "isValidChange", "nameChange", "readOnlyChange", "rtlEnabledChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i8.DxoToolbarComponent, selector: "dxo-toolbar", inputs: ["disabled", "items", "visible", "fileSelectionItems", "container", "multiline"] }, { kind: "component", type: i10.DxHtmlEditorComponent, selector: "dx-html-editor", inputs: ["accessKey", "activeStateEnabled", "allowSoftLineBreak", "customizeModules", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "imageUpload", "isValid", "mediaResizing", "mentions", "name", "placeholder", "readOnly", "rtlEnabled", "stylingMode", "tabIndex", "tableContextMenu", "tableResizing", "toolbar", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueType", "variables", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onFocusIn", "onFocusOut", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "allowSoftLineBreakChange", "customizeModulesChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "imageUploadChange", "isValidChange", "mediaResizingChange", "mentionsChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "tableContextMenuChange", "tableResizingChange", "toolbarChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueTypeChange", "variablesChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i8.DxoImageUploadComponent, selector: "dxo-image-upload", inputs: ["fileUploaderOptions", "fileUploadMode", "tabs", "uploadDirectory", "uploadUrl"] }, { kind: "component", type: i8.DxoMediaResizingComponent, selector: "dxo-media-resizing", inputs: ["allowedTargets", "enabled"] }, { kind: "component", type: i11.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i12.DxTagBoxComponent, selector: "dx-tag-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "applyValueMode", "buttons", "dataSource", "deferRendering", "disabled", "displayExpr", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hideSelectedItems", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxDisplayedTags", "maxFilterQueryLength", "maxLength", "minSearchLength", "multiline", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectAllMode", "selectAllText", "selectedItems", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showMultiTagOnly", "showSelectionControls", "stylingMode", "tabIndex", "tagTemplate", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCustomItemCreating", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onMultiTagPreparing", "onOpened", "onOptionChanged", "onSelectAllValueChanged", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "applyValueModeChange", "buttonsChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hideSelectedItemsChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxDisplayedTagsChange", "maxFilterQueryLengthChange", "maxLengthChange", "minSearchLengthChange", "multilineChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectAllModeChange", "selectAllTextChange", "selectedItemsChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showMultiTagOnlyChange", "showSelectionControlsChange", "stylingModeChange", "tabIndexChange", "tagTemplateChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i13.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i14.UserAccessComponent, selector: "app-user-access", inputs: ["userOptionContainer"], outputs: ["userOptionContainerChange"] }, { kind: "component", type: i15.TreeviewComponent, selector: "treeview", inputs: ["autoCollapse", "inner", "navigation", "opened", "isEditIcon", "isSearchBox", "transparentOverlay", "treeListForSearchBox", "name", "openTreeId", "routeKey"], outputs: ["editableKpiData"] }] });
288
+ CreateKpiTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CreateKpiTreeComponent, selector: "app-create-kpi", ngImport: i0, template: "<app-loading *ngIf=\"loadingModal\"></app-loading>\n<div class=\"p-4 flex flex-row w-full\" *ngIf=\"!loadingModal\">\n <div class=\"mx-2 bg-white dark:bg-transparent border-r\">\n <!-- <ng-container *ngIf=\"isKpiTreePrepared\"> -->\n <treeview class=\"dark bg-gray-900 dark:bg-transparent\" [name]=\"'mainNavigation'\" [routeKey]=\"'raKpi'\"\n [navigation]=\"kpiData\" [isSearchBox]=\"false\" [isEditIcon]=\"true\"\n (editableKpiData)=\"getEditableKpi($event)\">\n </treeview>\n <!-- </ng-container> -->\n\n </div>\n <div class=\"mx-2 w-full\">\n <!-- <div class=\"flex flex-row item-center justify-center my-8\">\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"addNewKpi()\">Add New KPI</button>\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"routeToKpiConfig()\"\n routerLinkActive=\"router-link-active\">Configure KPI</button>\n </div> -->\n <!-- <ng-container *ngIf=\"isNewKpiAdded\"> -->\n <!-- <div class=\"px-2 w-full\"> -->\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Name</p>\n <dx-text-box [(ngModel)]=\"select_kpi_name\"></dx-text-box>\n </div>\n </div>\n <div class=\"flex flex-row w-full\">\n <div class=\"m-1 w-1/3\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Tag Type</p>\n <dx-select-box [dataSource]=\"tagType\" [(ngModel)]=\"select_tag_type\"\n (onValueChanged)=\"addTagtypeValue($event)\"></dx-select-box>\n </div>\n </div>\n <!-- (onCustomItemCreating)=\"onCustomDimentionCreating($event)\" -->\n <div class=\"m-1 w-full\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Aliases</p>\n <dx-tag-box [acceptCustomValue]=\"true\" [(ngModel)]=\"selected_aliases\"></dx-tag-box>\n </div>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Page ID</p>\n <!-- <dx-text-box [(ngModel)]=\"selected_page_id\"></dx-text-box> -->\n <dx-select-box [items]=\"templateDataSource\" valueExpr=\"pageId\" displayExpr=\"pageName\"\n [searchEnabled]=\"true\" [(ngModel)]=\"selected_page_id\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Description</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"selected_desc\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\" [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\" [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n\n\n <div class=\"flex flex-row w-full\">\n <div class=\"m-1 w-full\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Parent Component </p>\n <dx-select-box [items]=\"keiParentDataSource\" displayExpr=\"kpiName\" valueExpr=\"kpiId\"\n (onValueChanged)=\"getKpiItemValue($event)\" [(ngModel)]=\"parante_kpi_name\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1 w-full\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Parent TID</p>\n <dx-text-box [(ngModel)]=\"selected_kpi_tid\" [readOnly]=\"false\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-1 w-full\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">TID</p>\n <dx-text-box [(ngModel)]=\"selected_kpi_child_tid\" [readOnly]=\"false\"></dx-text-box>\n </div>\n </div>\n </div>\n\n <div class=\"flex flex-row justify-between mt-3\">\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_visibility\" text=\"Visibility\"></dx-check-box>\n </div>\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_external\" text=\"External KPI\"></dx-check-box>\n </div>\n </div>\n <!-- <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">KPI Info</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"selected_info\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div> -->\n\n <app-user-access [(userOptionContainer)]=\"userOptionContainer\">\n </app-user-access>\n\n <div class=\"flex flex-auto mt-5 justify-end\">\n <button class=\"{{commonService.btn_success_md}}\" (click)=\"getUpdateKpi()\" *ngIf=\"isEditKpiAdded\">Update KPI\n </button>\n <button class=\"{{commonService.btn_danger_md}}\" (click)=\"getDeletKpi()\" *ngIf=\"isEditKpiAdded\">Delete KPI\n </button>\n <button class=\"{{commonService.btn_success_md}}\" (click)=\"makeNewKpiWithUserEntity()\" *ngIf=\"!isEditKpiAdded\">Create KPI\n </button>\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"getReseteKpi()\">Reset</button>\n\n </div>\n <!-- </div> -->\n <!-- </ng-container> -->\n </div>\n\n\n\n\n</div>", styles: [":host ::ng-deep treeview .treeview-wrapper{width:100%!important}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.LoadingComponent, selector: "app-loading" }, { kind: "component", type: i8.DxiItemComponent, selector: "dxi-item", inputs: ["disabled", "html", "icon", "template", "text", "title", "visible", "onClick", "stylingMode", "type", "baseSize", "box", "ratio", "shrink", "elementAttr", "hint", "beginGroup", "closeMenuOnClick", "items", "selectable", "selected", "colSpan", "cssClass", "dataField", "editorOptions", "editorType", "helpText", "isRequired", "itemType", "label", "name", "validationRules", "visibleIndex", "alignItemLabels", "caption", "colCount", "colCountByScreen", "tabPanelOptions", "tabs", "badge", "tabTemplate", "buttonOptions", "horizontalAlignment", "verticalAlignment", "locateInMenu", "location", "menuItemTemplate", "options", "showText", "widget", "height", "width", "imageAlt", "imageSrc", "acceptedValues", "formatName", "formatValues", "key", "showChevron", "menuTemplate", "heightRatio", "widthRatio", "expanded", "hasItems", "id", "parentId"] }, { kind: "component", type: i9.DxCheckBoxComponent, selector: "dx-check-box", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "iconSize", "isValid", "name", "readOnly", "rtlEnabled", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconSizeChange", "isValidChange", "nameChange", "readOnlyChange", "rtlEnabledChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i8.DxoToolbarComponent, selector: "dxo-toolbar", inputs: ["disabled", "items", "visible", "fileSelectionItems", "container", "multiline"] }, { kind: "component", type: i10.DxHtmlEditorComponent, selector: "dx-html-editor", inputs: ["accessKey", "activeStateEnabled", "allowSoftLineBreak", "customizeModules", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "imageUpload", "isValid", "mediaResizing", "mentions", "name", "placeholder", "readOnly", "rtlEnabled", "stylingMode", "tabIndex", "tableContextMenu", "tableResizing", "toolbar", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueType", "variables", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onFocusIn", "onFocusOut", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "allowSoftLineBreakChange", "customizeModulesChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "imageUploadChange", "isValidChange", "mediaResizingChange", "mentionsChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "tableContextMenuChange", "tableResizingChange", "toolbarChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueTypeChange", "variablesChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i8.DxoImageUploadComponent, selector: "dxo-image-upload", inputs: ["fileUploaderOptions", "fileUploadMode", "tabs", "uploadDirectory", "uploadUrl"] }, { kind: "component", type: i8.DxoMediaResizingComponent, selector: "dxo-media-resizing", inputs: ["allowedTargets", "enabled"] }, { kind: "component", type: i11.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i12.DxTagBoxComponent, selector: "dx-tag-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "applyValueMode", "buttons", "dataSource", "deferRendering", "disabled", "displayExpr", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hideSelectedItems", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxDisplayedTags", "maxFilterQueryLength", "maxLength", "minSearchLength", "multiline", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectAllMode", "selectAllText", "selectedItems", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showMultiTagOnly", "showSelectionControls", "stylingMode", "tabIndex", "tagTemplate", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCustomItemCreating", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onMultiTagPreparing", "onOpened", "onOptionChanged", "onSelectAllValueChanged", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "applyValueModeChange", "buttonsChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hideSelectedItemsChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxDisplayedTagsChange", "maxFilterQueryLengthChange", "maxLengthChange", "minSearchLengthChange", "multilineChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectAllModeChange", "selectAllTextChange", "selectedItemsChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showMultiTagOnlyChange", "showSelectionControlsChange", "stylingModeChange", "tabIndexChange", "tagTemplateChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i13.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i14.UserAccessComponent, selector: "app-user-access", inputs: ["userOptionContainer"], outputs: ["userOptionContainerChange"] }, { kind: "component", type: i15.TreeviewComponent, selector: "treeview", inputs: ["autoCollapse", "inner", "navigation", "opened", "isEditIcon", "isSearchBox", "transparentOverlay", "treeListForSearchBox", "name", "openTreeId", "routeKey"], outputs: ["editableKpiData"] }] });
273
289
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CreateKpiTreeComponent, decorators: [{
274
290
  type: Component,
275
- args: [{ selector: 'app-create-kpi', template: "<app-loading *ngIf=\"loadingModal\"></app-loading>\n<div class=\"p-4 flex flex-row w-full\" *ngIf=\"!loadingModal\">\n <div class=\"mx-2 bg-white dark:bg-transparent border-r\">\n <!-- <ng-container *ngIf=\"isKpiTreePrepared\"> -->\n <treeview class=\"dark bg-gray-900 dark:bg-transparent\" [name]=\"'mainNavigation'\" [routeKey]=\"'raKpi'\"\n [navigation]=\"kpiData\" [isSearchBox]=\"false\" [isEditIcon]=\"true\"\n (editableKpiData)=\"getEditableKpi($event)\">\n </treeview>\n <!-- </ng-container> -->\n\n </div>\n <div class=\"mx-2 w-full\">\n <!-- <div class=\"flex flex-row item-center justify-center my-8\">\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"addNewKpi()\">Add New KPI</button>\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"routeToKpiConfig()\"\n routerLinkActive=\"router-link-active\">Configure KPI</button>\n </div> -->\n <!-- <ng-container *ngIf=\"isNewKpiAdded\"> -->\n <!-- <div class=\"px-2 w-full\"> -->\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Name</p>\n <dx-text-box [(ngModel)]=\"select_kpi_name\"></dx-text-box>\n </div>\n </div>\n <div class=\"flex flex-row w-full\">\n <div class=\"m-1 w-1/3\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Tag Type</p>\n <dx-select-box [dataSource]=\"tagType\" [(ngModel)]=\"select_tag_type\"\n (onValueChanged)=\"addTagtypeValue($event)\"></dx-select-box>\n </div>\n </div>\n <!-- (onCustomItemCreating)=\"onCustomDimentionCreating($event)\" -->\n <div class=\"m-1 w-full\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Aliases</p>\n <dx-tag-box [acceptCustomValue]=\"true\" [(ngModel)]=\"selected_aliases\"></dx-tag-box>\n </div>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Page ID</p>\n <!-- <dx-text-box [(ngModel)]=\"selected_page_id\"></dx-text-box> -->\n <dx-select-box [items]=\"templateDataSource\" valueExpr=\"pageId\" displayExpr=\"pageName\"\n [searchEnabled]=\"true\" [(ngModel)]=\"selected_page_id\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Description</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"selected_desc\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\" [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\" [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n\n\n <div class=\"flex flex-row w-full\">\n <div class=\"m-1 w-full\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Parent Component </p>\n <dx-select-box [items]=\"keiParentDataSource\" displayExpr=\"kpiName\" valueExpr=\"kpiId\"\n (onValueChanged)=\"getKpiItemValue($event)\" [(ngModel)]=\"parante_kpi_name\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1 w-full\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Parent TID</p>\n <dx-text-box [(ngModel)]=\"selected_kpi_tid\" [readOnly]=\"false\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-1 w-full\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Child TID</p>\n <dx-text-box [(ngModel)]=\"selected_kpi_child_tid\" [readOnly]=\"false\"></dx-text-box>\n </div>\n </div>\n </div>\n\n <div class=\"flex flex-row justify-between mt-3\">\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_visibility\" text=\"Visibility\"></dx-check-box>\n </div>\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_external\" text=\"External KPI\"></dx-check-box>\n </div>\n </div>\n <!-- <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">KPI Info</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"selected_info\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div> -->\n\n <app-user-access [(userOptionContainer)]=\"userOptionContainer\">\n </app-user-access>\n\n <div class=\"flex flex-auto mt-5 justify-end\">\n <button class=\"{{commonService.btn_success_md}}\" (click)=\"getUpdateKpi()\" *ngIf=\"isEditKpiAdded\">Update KPI\n </button>\n <button class=\"{{commonService.btn_danger_md}}\" (click)=\"getDeletKpi()\" *ngIf=\"isEditKpiAdded\">Delete KPI\n </button>\n <button class=\"{{commonService.btn_success_md}}\" (click)=\"makeNewKpiWithUserEntity()\" *ngIf=\"!isEditKpiAdded\">Create KPI\n </button>\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"getReseteKpi()\">Reset</button>\n\n </div>\n <!-- </div> -->\n <!-- </ng-container> -->\n </div>\n\n\n\n\n</div>", styles: [":host ::ng-deep treeview .treeview-wrapper{width:100%!important}\n"] }]
291
+ args: [{ selector: 'app-create-kpi', template: "<app-loading *ngIf=\"loadingModal\"></app-loading>\n<div class=\"p-4 flex flex-row w-full\" *ngIf=\"!loadingModal\">\n <div class=\"mx-2 bg-white dark:bg-transparent border-r\">\n <!-- <ng-container *ngIf=\"isKpiTreePrepared\"> -->\n <treeview class=\"dark bg-gray-900 dark:bg-transparent\" [name]=\"'mainNavigation'\" [routeKey]=\"'raKpi'\"\n [navigation]=\"kpiData\" [isSearchBox]=\"false\" [isEditIcon]=\"true\"\n (editableKpiData)=\"getEditableKpi($event)\">\n </treeview>\n <!-- </ng-container> -->\n\n </div>\n <div class=\"mx-2 w-full\">\n <!-- <div class=\"flex flex-row item-center justify-center my-8\">\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"addNewKpi()\">Add New KPI</button>\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"routeToKpiConfig()\"\n routerLinkActive=\"router-link-active\">Configure KPI</button>\n </div> -->\n <!-- <ng-container *ngIf=\"isNewKpiAdded\"> -->\n <!-- <div class=\"px-2 w-full\"> -->\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Name</p>\n <dx-text-box [(ngModel)]=\"select_kpi_name\"></dx-text-box>\n </div>\n </div>\n <div class=\"flex flex-row w-full\">\n <div class=\"m-1 w-1/3\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Tag Type</p>\n <dx-select-box [dataSource]=\"tagType\" [(ngModel)]=\"select_tag_type\"\n (onValueChanged)=\"addTagtypeValue($event)\"></dx-select-box>\n </div>\n </div>\n <!-- (onCustomItemCreating)=\"onCustomDimentionCreating($event)\" -->\n <div class=\"m-1 w-full\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Aliases</p>\n <dx-tag-box [acceptCustomValue]=\"true\" [(ngModel)]=\"selected_aliases\"></dx-tag-box>\n </div>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Page ID</p>\n <!-- <dx-text-box [(ngModel)]=\"selected_page_id\"></dx-text-box> -->\n <dx-select-box [items]=\"templateDataSource\" valueExpr=\"pageId\" displayExpr=\"pageName\"\n [searchEnabled]=\"true\" [(ngModel)]=\"selected_page_id\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Description</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"selected_desc\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\" [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\" [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n\n\n <div class=\"flex flex-row w-full\">\n <div class=\"m-1 w-full\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Parent Component </p>\n <dx-select-box [items]=\"keiParentDataSource\" displayExpr=\"kpiName\" valueExpr=\"kpiId\"\n (onValueChanged)=\"getKpiItemValue($event)\" [(ngModel)]=\"parante_kpi_name\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1 w-full\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Parent TID</p>\n <dx-text-box [(ngModel)]=\"selected_kpi_tid\" [readOnly]=\"false\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-1 w-full\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">TID</p>\n <dx-text-box [(ngModel)]=\"selected_kpi_child_tid\" [readOnly]=\"false\"></dx-text-box>\n </div>\n </div>\n </div>\n\n <div class=\"flex flex-row justify-between mt-3\">\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_visibility\" text=\"Visibility\"></dx-check-box>\n </div>\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_external\" text=\"External KPI\"></dx-check-box>\n </div>\n </div>\n <!-- <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">KPI Info</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"selected_info\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div> -->\n\n <app-user-access [(userOptionContainer)]=\"userOptionContainer\">\n </app-user-access>\n\n <div class=\"flex flex-auto mt-5 justify-end\">\n <button class=\"{{commonService.btn_success_md}}\" (click)=\"getUpdateKpi()\" *ngIf=\"isEditKpiAdded\">Update KPI\n </button>\n <button class=\"{{commonService.btn_danger_md}}\" (click)=\"getDeletKpi()\" *ngIf=\"isEditKpiAdded\">Delete KPI\n </button>\n <button class=\"{{commonService.btn_success_md}}\" (click)=\"makeNewKpiWithUserEntity()\" *ngIf=\"!isEditKpiAdded\">Create KPI\n </button>\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"getReseteKpi()\">Reset</button>\n\n </div>\n <!-- </div> -->\n <!-- </ng-container> -->\n </div>\n\n\n\n\n</div>", styles: [":host ::ng-deep treeview .treeview-wrapper{width:100%!important}\n"] }]
276
292
  }], ctorParameters: function () { return [{ type: i1.CommonService }, { type: i2.FormBuilder }, { type: i3.CreateKpIService }, { type: i4.ToastrService }, { type: i5.Router }]; } });
277
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWtwaS10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvdGVtcGxhdGUtbW9kdWxlL0twaUNyZWF0aW9uTW9kdWxlL2NyZWF0ZS1rcGktdHJlZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3RlbXBsYXRlLW1vZHVsZS9LcGlDcmVhdGlvbk1vZHVsZS9jcmVhdGUta3BpLXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFhbEQsTUFBTSxPQUFPLHNCQUFzQjtJQTZDakMsWUFDUyxhQUE0QixFQUFVLFdBQXdCLEVBQzdELE9BQXlCLEVBQVUsTUFBcUIsRUFDeEQsTUFBYztRQUZmLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDN0QsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3hELFdBQU0sR0FBTixNQUFNLENBQVE7UUEvQ3hCLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBQzdCLHdCQUFtQixHQUFRLEVBQUUsQ0FBQztRQUU5QixZQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUIsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFDckIsbUJBQWMsR0FBUSxFQUFFLENBQUM7UUFXekIsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLFlBQU8sR0FBUSxFQUFFLENBQUM7UUFFbEIsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0IsbUJBQWMsR0FBWSxLQUFL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SW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUFycmF5LCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcbmltcG9ydCB7IFJvdXRlciwgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENyZWF0ZUtwSVNlcnZpY2UgfSBmcm9tICcuL2NyZWF0ZUtwaS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL2NvbW1vbic7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNyZWF0ZS1rcGknLFxuICB0ZW1wbGF0ZVVybDogJy4vY3JlYXRlLWtwaS10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3JlYXRlLWtwaS10cmVlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ3JlYXRlS3BpVHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGxvYWRpbmdNb2RhbDogYm9vbGVhbiA9IHRydWU7XG4gIGtlaVBhcmVudERhdGFTb3VyY2U6IGFueSA9IFtdO1xuICBteUZvcm06IEZvcm1Hcm91cDtcbiAgdGFnVHlwZSA9IFtcInBhcmVudFwiLCBcImNoaWxkXCJdO1xuICBrcGlfY29uc3RydWN0b3IgPSBbXTtcbiAgc2VsZWN0ZWRfcF9rcGk6IGFueSA9IHt9O1xuXG4gIHNlbGVjdF9rcGlfbmFtZTogYW55O1xuICBzZWxlY3RfdGFnX3R5cGU6IGFueTtcbiAgc2VsZWN0ZWRfaWQ6IGFueTtcbiAgc2VsZWN0ZWRfcGFnZV9pZDogYW55O1xuICBzZWxlY3RlZF9uZXN0ZWRfbmFtZTogYW55O1xuICBzZWxlY3RlZF9rcGlfdGlkOiBhbnk7XG4gIHNlbGVjdGVkX2Rlc2M6IGFueTtcbiAgc2VsZWN0ZWRfaW5mbzogYW55O1xuXG4gIGhlaWdodCA9IDkwO1xuICBrcGlEYXRhOiBhbnkgPSBbXTtcbiAgaGVpc3RWYWx1ZTogYW55O1xuICBpc0Zyb21FZGl0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc05ld0twaUFkZGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzRWRpdEtwaUFkZGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZWRpdGFibGVfZGVzYyA9IFwiXCI7XG4gIGVkaXRhYmxlX2luZm8gPSBcIlwiO1xuICBlZGl0YWJsZV9pZDtcbiAgZWRpdGFibGVfcGFnZV9pZDtcbiAgZWRpdGFibGVfdGFnX3R5cGU7XG4gIGVkaXRhYmxlX2twaV9uYW1lO1xuICBlZGl0YWJsZV9rcGlfdGlkO1xuICBzZWxlY3RlZF9rcGlfY2hpbGRfdGlkO1xuICBrcGlfdmlzaWJpbGl0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBrcGlfZXh0ZXJuYWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcGFyYW50ZV9rcGlfbmFtZTogYW55O1xuICBpc0NvbXBvbmVudFVwZGF0YTogYm9vbGVhbiA9IGZhbHNlO1xuICB0ZW1wbGF0ZURhdGFTb3VyY2U6IGFueTtcbiAgLy8ga3BpRGF0YUpzb246YW55O1xuICB1c2VyT3B0aW9uQ29udGFpbmVyOiBhbnkgPSBbXTtcblxuICBzZWxlY3RlZF9hbGlhc2VzOiBhbnkgPSBbXTtcbiAgaXNLcGlUcmVlUHJlcGFyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBrcGlDb25maWdEYXRhU291cmNlOiBhbnkgPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSwgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBDcmVhdGVLcElTZXJ2aWNlLCBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyKSB7XG5cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gICAgdGhpcy5nZXRBbGxLcGlEYXRhKCk7XG4gICAgdGhpcy5nZXRBcHBQYWdlQ29uZmlncygpO1xuICB9XG5cbiAgZ2V0QXBwUGFnZUNvbmZpZ3MoKSB7XG4gICAgdGhpcy5zZXJ2aWNlLmdldEFwcFBhZ2VDb25maWdzKCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZURhdGFTb3VyY2UgPSBkYXRhO1xuICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ1BhZ2UgSUQnKVxuXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldEFsbEtwaURhdGEoKSB7XG5cbiAgICB0aGlzLmtlaVBhcmVudERhdGFTb3VyY2UgPSBbXTtcbiAgICB0aGlzLnNlcnZpY2UubGlzdEtwaUVudHJ5Q29uZmlncygpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICBjb25zdCB1c2VyTmFtZSA9IFwiYWRtaW5cIjtcbiAgICAgIHRoaXMua3BpQ29uZmlnRGF0YVNvdXJjZSA9IGRhdGE7XG4gICAgICB0aGlzLmtwaURhdGEgPSB0aGlzLmJ1aWxkTWVudVRyZWUodXNlck5hbWUsIGRhdGEpO1xuICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICAgIC8vICB0aGlzLmtlaVBhcmVudERhdGFTb3VyY2UgPSBkYXRhO1xuICAgICAgdGhpcy5wcmVwYXJlUGFyZW50RGF0YVNvdXJjZShkYXRhKVxuXG4gICAgfSwgZXJyID0+IHtcbiAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ0tQSSBDb25maWcnKVxuICAgIH0pXG4gIH1cblxuICBwcmVwYXJlUGFyZW50RGF0YVNvdXJjZShkYXRhKSB7XG4gICAgZGF0YS5mb3JFYWNoKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC50YWdUeXBlID09ICdwYXJlbnQnKSB7XG4gICAgICAgIC8vIGNvbnN0IHRpZEtleSA9IGRhdGEudGFnVHlwZSA9PT0gJ2NoaWxkJyA/ICdjaGlsZFRpZCcgOiAncGFyZW50VGlkJztcbiAgICAgICAgLy8gIGxldCBub2RlID0ge1xuICAgICAgICAvLyAgIFwia3BpTmFtZVwiOiByZXN1bHQua3BpTmFtZSxcbiAgICAgICAgLy8gICBcInRpZFwiOiByZXN1bHRbdGlkS2V5XSxcbiAgICAgICAgLy8gICBcImtwaUlkXCI6IHJlc3VsdC5rcGlJZFxuICAgICAgICAvLyB9XG4gICAgICAgIHRoaXMua2VpUGFyZW50RGF0YVNvdXJjZS5wdXNoKHJlc3VsdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG4gIG1ha2VOZXdLcGlXaXRoVXNlckVudGl0eSgpIHtcbiAgICBjb25zdCBwYWdlRGF0YSA9ICh0aGlzLnNlbGVjdGVkX3BhZ2VfaWQpID8gdGhpcy50ZW1wbGF0ZURhdGFTb3VyY2UuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLnBhZ2VJZCA9PT0gdGhpcy5zZWxlY3RlZF9wYWdlX2lkKSA6IG51bGw7XG5cbiAgICBsZXQga3BpT2JqID0ge1xuICAgICAgXCJrcGlJZFwiOiB0aGlzLnNlbGVjdGVkX2lkLFxuICAgICAgXCJrcGlOYW1lXCI6IHRoaXMuc2VsZWN0X2twaV9uYW1lLFxuICAgICAgXCJhbGlhc2VzXCI6IHRoaXMuc2VsZWN0ZWRfYWxpYXNlcyxcbiAgICAgIFwicGFnZUlkXCI6IHRoaXMuc2VsZWN0ZWRfcGFnZV9pZCxcbiAgICAgIFwiZGVzY3JpcHRpb25cIjogdGhpcy5zZWxlY3RlZF9kZXNjLFxuICAgICAgXCJrcGlJbmZvXCI6IFwiXCIsXG4gICAgICBcInRhZ1R5cGVcIjogdGhpcy5zZWxlY3RfdGFnX3R5cGUsXG4gICAgICBcImFjdGl2ZVwiOiB0cnVlLFxuICAgICAgXCJ2aXNpYmlsaXR5XCI6IHRoaXMua3BpX3Zpc2liaWxpdHksXG4gICAgICBcImV4dGVybmFsS3BpXCI6IHRoaXMua3BpX2V4dGVybmFsLFxuICAgICAgXCJ0YXJnZXRcIjogXCJcIixcbiAgICAgIFwiaWNvblwiOiBcIlwiLFxuICAgICAgXCJ1cmxcIjogcGFnZURhdGEgPyBwYWdlRGF0YS5wYWdlVXJsIDogXCJcIixcbiAgICAgIFwia3BpVHlwZVwiOiB0aGlzLnNlbGVjdF90YWdfdHlwZSA9PSBcInBhcmVudFwiID8gXCJjb2xsYXBzYWJsZVwiIDogXCJiYXNpY1wiLFxuICAgICAgXCJwYXJlbnRUaWRcIjogdGhpcy5zZWxlY3RlZF9rcGlfdGlkLFxuICAgICAgXCJjaGlsZFRpZFwiOiB0aGlzLnNlbGVjdGVkX2twaV9jaGlsZF90aWQsXG4gICAgICBcInBlcm1pc3Npb25zXCI6IHRoaXMudXNlck9wdGlvbkNvbnRhaW5lcixcbiAgICB9XG5cbiAgICB0aGlzLnNlcnZpY2UuY3JlYXRlS3BpRW50cnlDb25maWcoa3BpT2JqKS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKCdLUEkgQ3JlYXRlZCBTdWNjZXNzZnVsbHknKVxuICAgICAgdGhpcy5nZXRBbGxLcGlEYXRhKCk7XG4gICAgICB0aGlzLmdldFJlc2V0ZUtwaSgpO1xuICAgIH0sIGVyciA9PiB7XG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ0tQSSBDb25maWcnKVxuICAgIH0pXG5cbiAgICBjb25zb2xlLmxvZyhcIktQSSB3aXRoIFVzZXIgRW50aXR5IE9iajpcIiwga3BpT2JqKTtcbiAgfVxuXG4gIGdldEVkaXRhYmxlS3BpKGtwaTogYW55KSB7XG5cbiAgICBjb25zdCBkYXRhID0gdGhpcy5rcGlDb25maWdEYXRhU291cmNlLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5rcGlJZCA9PT0ga3BpLmlkKTtcblxuICAgIC8vIGNvbnN0IHBhcmVudE5hbWUgPSB0aGlzLmtlaVBhcmVudERhdGFTb3VyY2UuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLnBhcmVudFRpZCA9PSBkYXRhW1wicGFyZW50VGlkXCJdKTtcblxuXG4gICAgY29uc3QgdGlkS2V5ID0gZGF0YS50YWdUeXBlID09PSAnY2hpbGQnICYmIGRhdGEuY2hpbGRUaWQgJiYgZGF0YS5jaGlsZFRpZC5sZW5ndGggPiAzID8gJ2NoaWxkVGlkJyA6ICdwYXJlbnRUaWQnO1xuICAgIGNvbnN0IHBhcmVudE5hbWUgPSB0aGlzLmtlaVBhcmVudERhdGFTb3VyY2UuZmluZChcbiAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW1bdGlkS2V5XSA9PSBkYXRhW1wicGFyZW50VGlkXCJdXG4gICAgKTtcbiAgICB0aGlzLnBhcmFudGVfa3BpX25hbWUgPSBwYXJlbnROYW1lID8gcGFyZW50TmFtZVsna3BpSWQnXSA6IG51bGw7XG5cblxuICAgIHRoaXMuc2VsZWN0ZWRfaWQgPSBkYXRhW1wia3BpSWRcIl07XG4gICAgdGhpcy5zZWxlY3Rfa3BpX25hbWUgPSBkYXRhW1wia3BpTmFtZVwiXTtcbiAgICB0aGlzLnNlbGVjdGVkX2FsaWFzZXMgPSBkYXRhW1wiYWxpYXNlc1wiXTtcbiAgICB0aGlzLnNlbGVjdGVkX3BhZ2VfaWQgPSBkYXRhW1wicGFnZUlkXCJdO1xuICAgIHRoaXMuc2VsZWN0ZWRfZGVzYyA9IGRhdGFbXCJkZXNjcmlwdGlvblwiXTtcbiAgICB0aGlzLnNlbGVjdF90YWdfdHlwZSA9IGRhdGFbXCJ0YWdUeXBlXCJdO1xuICAgIHRoaXMua3BpX3Zpc2liaWxpdHkgPSBkYXRhW1widmlzaWJpbGl0eVwiXTtcbiAgICB0aGlzLmtwaV9leHRlcm5hbCA9IGRhdGFbXCJleHRlcm5hbEtwaVwiXTtcbiAgICB0aGlzLnNlbGVjdGVkX2twaV90aWQgPSBkYXRhW1wicGFyZW50VGlkXCJdO1xuICAgIHRoaXMuc2VsZWN0ZWRfa3BpX2NoaWxkX3RpZCA9IGRhdGFbXCJjaGlsZFRpZFwiXTtcbiAgICB0aGlzLnVzZXJPcHRpb25Db250YWluZXIgPSAoZGF0YVtcInBlcm1pc3Npb25zXCJdICYmIGRhdGFbXCJwZXJtaXNzaW9uc1wiXS5sZW5ndGggPiAwKSA/IGRhdGFbXCJwZXJtaXNzaW9uc1wiXSA6IFtdO1xuICAgIHRoaXMuaXNFZGl0S3BpQWRkZWQgPSB0cnVlO1xuXG4gIH1cblxuICBnZXRVcGRhdGVLcGkoKSB7XG4gICAgY29uc3QgcGFnZURhdGEgPSAodGhpcy5zZWxlY3RlZF9wYWdlX2lkKSA/IHRoaXMudGVtcGxhdGVEYXRhU291cmNlLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5wYWdlSWQgPT09IHRoaXMuc2VsZWN0ZWRfcGFnZV9pZCkgOiBudWxsO1xuXG4gICAgbGV0IGtwaU9iaiA9IHtcbiAgICAgIFwia3BpSWRcIjogdGhpcy5zZWxlY3RlZF9pZCxcbiAgICAgIFwia3BpTmFtZVwiOiB0aGlzLnNlbGVjdF9rcGlfbmFtZSxcbiAgICAgIFwiYWxpYXNlc1wiOiB0aGlzLnNlbGVjdGVkX2FsaWFzZXMsXG4gICAgICBcInBhZ2VJZFwiOiB0aGlzLnNlbGVjdGVkX3BhZ2VfaWQsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IHRoaXMuc2VsZWN0ZWRfZGVzYyxcbiAgICAgIFwia3BpSW5mb1wiOiBcIlwiLFxuICAgICAgXCJ0YWdUeXBlXCI6IHRoaXMuc2VsZWN0X3RhZ190eXBlLFxuICAgICAgXCJhY3RpdmVcIjogdHJ1ZSxcbiAgICAgIFwidmlzaWJpbGl0eVwiOiB0aGlzLmtwaV92aXNpYmlsaXR5LFxuICAgICAgXCJleHRlcm5hbEtwaVwiOiB0aGlzLmtwaV9leHRlcm5hbCxcbiAgICAgIFwidGFyZ2V0XCI6IFwiXCIsXG4gICAgICBcImljb25cIjogXCJcIixcbiAgICAgIFwidXJsXCI6IHBhZ2VEYXRhID8gcGFnZURhdGEucGFnZVVybCA6IFwiXCIsXG4gICAgICBcImtwaVR5cGVcIjogdGhpcy5zZWxlY3RfdGFnX3R5cGUgPT0gXCJwYXJlbnRcIiA/IFwiY29sbGFwc2FibGVcIiA6IFwiYmFzaWNcIixcbiAgICAgIFwicGFyZW50VGlkXCI6IHRoaXMuc2VsZWN0ZWRfa3BpX3RpZCxcbiAgICAgIFwiY2hpbGRUaWRcIjogdGhpcy5zZWxlY3RlZF9rcGlfY2hpbGRfdGlkLFxuICAgICAgXCJwZXJtaXNzaW9uc1wiOiB0aGlzLnVzZXJPcHRpb25Db250YWluZXIsXG4gICAgfVxuXG4gICAgdGhpcy5zZXJ2aWNlLnVwZGF0ZUtwaUVudHJ5Q29uZmlnKGtwaU9iaikuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcygnS1BJIFVwZGF0ZWQgU3VjY2Vzc2Z1bGx5JylcbiAgICAgIHRoaXMuZ2V0QWxsS3BpRGF0YSgpO1xuICAgICAgdGhpcy5nZXRSZXNldGVLcGkoKTtcbiAgICAgIHRoaXMuaXNFZGl0S3BpQWRkZWQgPSBmYWxzZTtcblxuICAgIH0sIGVyciA9PiB7XG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ0tQSSBDb25maWcnKVxuICAgIH0pXG5cbiAgICBjb25zb2xlLmxvZyhcIktQSSB3aXRoIFVzZXIgRW50aXR5IE9iajpcIiwga3BpT2JqKTtcbiAgfVxuXG4gIG9uQ3VzdG9tRGltZW50aW9uQ3JlYXRpbmcoYXJncykge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gYXJncy50ZXh0O1xuICAgIGFyZ3MuY3VzdG9tSXRlbSA9IG5ld1ZhbHVlO1xuICAgIGNvbnN0IGlzSXRlbUluRGF0YVNvdXJjZSA9IHRoaXMuc2VsZWN0ZWRfYWxpYXNlcy5zb21lKChpdGVtKSA9PiBpdGVtID09PSBuZXdWYWx1ZSk7XG4gICAgaWYgKCFpc0l0ZW1JbkRhdGFTb3VyY2UpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRfYWxpYXNlcy51bnNoaWZ0KG5ld1ZhbHVlKTtcbiAgICB9XG4gIH1cblxuXG5cbiAgZ2V0UmVzZXRlS3BpKCkge1xuICAgIHRoaXMuc2VsZWN0X2twaV9uYW1lID0gJyc7XG4gICAgdGhpcy5zZWxlY3RfdGFnX3R5cGUgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkX2lkID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZF9wYWdlX2lkID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZF9rcGlfdGlkID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZF9kZXNjID0gJyc7XG4gICAgdGhpcy5wYXJhbnRlX2twaV9uYW1lID0gJyc7XG4gICAgdGhpcy5lZGl0YWJsZV9rcGlfbmFtZSA9ICcnO1xuICAgIHRoaXMuZWRpdGFibGVfdGFnX3R5cGUgPSAnJztcbiAgICB0aGlzLmVkaXRhYmxlX2lkID0gJyc7XG4gICAgdGhpcy5lZGl0YWJsZV9wYWdlX2lkID0gJyc7XG4gICAgdGhpcy5lZGl0YWJsZV9rcGlfdGlkID0gJyc7XG4gICAgdGhpcy5lZGl0YWJsZV9kZXNjID0gJyc7XG4gICAgdGhpcy5lZGl0YWJsZV9pbmZvID0gJyc7XG4gICAgdGhpcy5wYXJhbnRlX2twaV9uYW1lID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZF9rcGlfY2hpbGRfdGlkID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZF9hbGlhc2VzID0gW107XG4gICAgdGhpcy5rcGlfZXh0ZXJuYWwgPSBmYWxzZTtcbiAgICB0aGlzLmtwaV92aXNpYmlsaXR5ID0gZmFsc2U7XG4gICAgdGhpcy5pc0NvbXBvbmVudFVwZGF0YSA9IGZhbHNlO1xuICAgIHRoaXMuaXNFZGl0S3BpQWRkZWQgPSBmYWxzZTtcbiAgfVxuXG5cbiAgYWRkVGFndHlwZVZhbHVlKGUpIHtcbiAgICB0aGlzLnNlbGVjdF90YWdfdHlwZSA9IGUudmFsdWU7XG4gIH1cblxuICBnZXRLcGlJdGVtVmFsdWUoZSkge1xuICAgIGlmIChlLmV2ZW50KSB7XG4gICAgICBjb25zdCBrcGlfZGF0YSA9IHRoaXMua2VpUGFyZW50RGF0YVNvdXJjZS5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0ua3BpSWQgPT09IGUudmFsdWUpO1xuICAgICAgY29uc3QgdGlkS2V5ID0gdGhpcy5zZWxlY3RfdGFnX3R5cGUgPT09ICdjaGlsZCcgJiYgdGhpcy5pc0VkaXRLcGlBZGRlZCA/ICdjaGlsZFRpZCcgOiAncGFyZW50VGlkJztcbiAgICAgIHRoaXMuc2VsZWN0ZWRfa3BpX3RpZCA9IGtwaV9kYXRhW3RpZEtleV07XG4gICAgfVxuXG4gIH1cblxuXG4gIGFkZE5ld0twaSgpIHtcbiAgICB0aGlzLmlzTmV3S3BpQWRkZWQgPSB0cnVlO1xuICAgIHRoaXMuaXNFZGl0S3BpQWRkZWQgPSBmYWxzZTtcbiAgfVxuICBjYW5jZWxVcGRhdGUoKSB7XG4gICAgdGhpcy5pc0VkaXRLcGlBZGRlZCA9IGZhbHNlO1xuICB9XG5cblxuXG4gIGdldEtwaVBhcnJlbnROYW1lKGlucHV0KSB7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gaW5wdXQubGFzdEluZGV4T2YoJy4nKTtcbiAgICBpZiAobGFzdEluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICByZXR1cm4gaW5wdXQuc3Vic3RyaW5nKDAsIGxhc3RJbmRleCk7XG4gIH1cblxuXG4gIGdldERlbGV0S3BpKCkge1xuICAgIHRoaXMuc2VydmljZS5kZWxldGVLcGlFbnRyeUNvbmZpZyh0aGlzLnNlbGVjdGVkX2lkKS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKCdLUEkgRGVsZXRlZCBTdWNjZXNzZnVsbHknKVxuICAgICAgdGhpcy5nZXRBbGxLcGlEYXRhKCk7XG4gICAgICB0aGlzLmdldFJlc2V0ZUtwaSgpO1xuICAgIH0sIGVyciA9PiB7XG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ0tQSSBDb25maWcnKVxuICAgIH0pXG4gIH1cblxuXG4gIHJlc2V0ZVVwZGF0ZUtwaUZvcm0oKSB7XG4gICAgdGhpcy5lZGl0YWJsZV9kZXNjID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZWRpdGFibGVfaW5mbyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVkaXRhYmxlX2twaV9uYW1lID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZWRpdGFibGVfdGFnX3R5cGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lZGl0YWJsZV9rcGlfdGlkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZWRpdGFibGVfaWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lZGl0YWJsZV9wYWdlX2lkID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgc3VibWl0TmV3S3BpKCkge1xuICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICB0aGlzLmlzRWRpdEtwaUFkZGVkID0gZmFsc2U7XG4gICAgbGV0IG9iaiA9IHsga3BpQ29uZmlnRGF0YTogdGhpcy5rcGlEYXRhIH1cbiAgICBjb25zb2xlLmxvZyhvYmopO1xuICAgIHRoaXMuaXNDb21wb25lbnRVcGRhdGEgPSBmYWxzZTtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0Q3JlYXRlS3BpKG9iaikuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgdGhpcy5nZXRBbGxLcGlEYXRhKCk7XG4gICAgICB0aGlzLmdldFJlc2V0ZUtwaSgpO1xuICAgIH0pXG4gIH1cblxuXG4gIGJ1aWxkTWVudVRyZWUodXNlck5hbWU6IHN0cmluZywga3BpRGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgLy8gbGV0IGZpbHRlcmVkTWVudXMgPSBtZW51RGF0YS5maWx0ZXIobWVudSA9PlxuICAgIC8vICAgIXVzZXJOYW1lIHx8IChtZW51LnBlcm1pc3Npb25zICYmIG1lbnUucGVybWlzc2lvbnMuc29tZShwZXJtID0+IHBlcm0uZW50aXR5VmFsdWVzLmluY2x1ZGVzKHVzZXJOYW1lKSkpXG4gICAgLy8gKTtcblxuICAgIGxldCBmaWx0ZXJlZE1lbnVzID0ga3BpRGF0YTtcblxuICAgIGNvbnN0IG1lbnVNYXAgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgbWVudVRyZWU6IGFueVtdID0gW107XG5cbiAgICBmaWx0ZXJlZE1lbnVzLmZvckVhY2gobWVudSA9PiB7XG4gICAgICBtZW51TWFwLnNldChtZW51LmNoaWxkVGlkIHx8IG1lbnUucGFyZW50VGlkLCB7XG4gICAgICAgIGlkOiBtZW51LmtwaUlkLFxuICAgICAgICB0aXRsZTogbWVudS5rcGlOYW1lLFxuICAgICAgICBpY29uOiBtZW51Lmljb24sXG4gICAgICAgIHR5cGU6IG1lbnUua3BpVHlwZSxcbiAgICAgICAgdGFnVHlwZTogbWVudS50YWdUeXBlLFxuICAgICAgICB2aXNpYmlsaXR5OiB0cnVlLFxuICAgICAgICAuLi4obWVudS5saW5rICYmIHsgbGluazogbWVudS5saW5rLnJlcGxhY2UoL15cXC8rLywgJycpIH0pLFxuICAgICAgICBjaGlsZHJlbjogW11cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZmlsdGVyZWRNZW51cy5mb3JFYWNoKGtwaSA9PiB7XG4gICAgICBpZiAoa3BpLnBhcmVudFRpZCAmJiBrcGkuY2hpbGRUaWQpIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gbWVudU1hcC5nZXQoa3BpLnBhcmVudFRpZCk7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChtZW51TWFwLmdldChrcGkuY2hpbGRUaWQpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVudVRyZWUucHVzaChtZW51TWFwLmdldChrcGkucGFyZW50VGlkKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWVudVRyZWU7XG4gIH1cblxufVxuIiwiPGFwcC1sb2FkaW5nICpuZ0lmPVwibG9hZGluZ01vZGFsXCI+PC9hcHAtbG9hZGluZz5cbjxkaXYgY2xhc3M9XCJwLTQgZmxleCBmbGV4LXJvdyB3LWZ1bGxcIiAqbmdJZj1cIiFsb2FkaW5nTW9kYWxcIj5cbiAgICA8ZGl2IGNsYXNzPVwibXgtMiBiZy13aGl0ZSBkYXJrOmJnLXRyYW5zcGFyZW50IGJvcmRlci1yXCI+XG4gICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzS3BpVHJlZVByZXBhcmVkXCI+IC0tPlxuICAgICAgICAgICAgPHRyZWV2aWV3IGNsYXNzPVwiZGFyayBiZy1ncmF5LTkwMCBkYXJrOmJnLXRyYW5zcGFyZW50XCIgW25hbWVdPVwiJ21haW5OYXZpZ2F0aW9uJ1wiIFtyb3V0ZUtleV09XCIncmFLcGknXCJcbiAgICAgICAgICAgICAgICBbbmF2aWdhdGlvbl09XCJrcGlEYXRhXCIgW2lzU2VhcmNoQm94XT1cImZhbHNlXCIgW2lzRWRpdEljb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgKGVkaXRhYmxlS3BpRGF0YSk9XCJnZXRFZGl0YWJsZUtwaSgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8L3RyZWV2aWV3PlxuICAgICAgICA8IS0tIDwvbmctY29udGFpbmVyPiAtLT5cblxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJteC0yIHctZnVsbFwiPlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGl0ZW0tY2VudGVyIGp1c3RpZnktY2VudGVyIG15LThcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3dhcm5pbmdfbWR9fVwiIChjbGljayk9XCJhZGROZXdLcGkoKVwiPkFkZCBOZXcgS1BJPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9wcmltYXJ5X21kfX1cIiAoY2xpY2spPVwicm91dGVUb0twaUNvbmZpZygpXCJcbiAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCI+Q29uZmlndXJlIEtQSTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTmV3S3BpQWRkZWRcIj4gLS0+XG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInB4LTIgdy1mdWxsXCI+IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+TmFtZTwvcD5cbiAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJzZWxlY3Rfa3BpX25hbWVcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyB3LWZ1bGxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTEgdy0xLzNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xICB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIG10LTJcIj4gVGFnIFR5cGU8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtkYXRhU291cmNlXT1cInRhZ1R5cGVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdF90YWdfdHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwiYWRkVGFndHlwZVZhbHVlKCRldmVudClcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gKG9uQ3VzdG9tSXRlbUNyZWF0aW5nKT1cIm9uQ3VzdG9tRGltZW50aW9uQ3JlYXRpbmcoJGV2ZW50KVwiIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMSB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xICB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIG10LTJcIj5BbGlhc2VzPC9wPlxuICAgICAgICAgICAgICAgICAgICA8ZHgtdGFnLWJveCBbYWNjZXB0Q3VzdG9tVmFsdWVdPVwidHJ1ZVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRfYWxpYXNlc1wiPjwvZHgtdGFnLWJveD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tMVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIG10LTJcIj5QYWdlIElEPC9wPlxuICAgICAgICAgICAgICAgIDwhLS0gPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwic2VsZWN0ZWRfcGFnZV9pZFwiPjwvZHgtdGV4dC1ib3g+IC0tPlxuICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtpdGVtc109XCJ0ZW1wbGF0ZURhdGFTb3VyY2VcIiB2YWx1ZUV4cHI9XCJwYWdlSWRcIiBkaXNwbGF5RXhwcj1cInBhZ2VOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRfcGFnZV9pZFwiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tMVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIG10LTJcIj5EZXNjcmlwdGlvbjwvcD5cbiAgICAgICAgICAgICAgICA8ZHgtaHRtbC1lZGl0b3IgaGVpZ2h0PVwiJ2F1dG8nXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZF9kZXNjXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkeG8tdG9vbGJhciBbbXVsdGlsaW5lXT1cImZhbHNlXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2l6ZVwiIFthY2NlcHRlZFZhbHVlc109XCJbJzhwdCcsICcxMHB0JywgJzEycHQnLCAnMTRwdCcsICcxOHB0JywgJzI0cHQnLCAnMzZwdCddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJ7IGlucHV0QXR0cjogeyAnYXJpYS1sYWJlbCc6ICdGb250IHNpemUnIH0gfVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImZvbnRcIiBbYWNjZXB0ZWRWYWx1ZXNdPVwiW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FyaWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb3VyaWVyIE5ldycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnR2VvcmdpYScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSW1wYWN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMdWNpZGEgQ29uc29sZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGFob21hJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaW1lcyBOZXcgUm9tYW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZlcmRhbmEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVwiIFtvcHRpb25zXT1cInsgaW5wdXRBdHRyOiB7ICdhcmlhLWxhYmVsJzogJ0ZvbnQgZmFtaWx5JyB9IH1cIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJib2xkXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiaXRhbGljXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwidW5kZXJsaW5lXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25MZWZ0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25DZW50ZXJcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJhbGlnblJpZ2h0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25KdXN0aWZ5XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwib3JkZXJlZExpc3RcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJidWxsZXRMaXN0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiaGVhZGVyXCIgW2FjY2VwdGVkVmFsdWVzXT1cIltmYWxzZSwgMSwgMiwgMywgNCwgNV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInsgaW5wdXRBdHRyOiB7ICdhcmlhLWxhYmVsJzogJ0hlYWRlcicgfSB9XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiY29sb3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJiYWNrZ3JvdW5kXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwibGlua1wiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImltYWdlXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiY2xlYXJcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJjb2RlQmxvY2tcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICA8L2R4by10b29sYmFyPlxuICAgICAgICAgICAgICAgICAgICA8ZHhvLW1lZGlhLXJlc2l6aW5nIFtlbmFibGVkXT1cInRydWVcIj4gPC9keG8tbWVkaWEtcmVzaXppbmc+XG4gICAgICAgICAgICAgICAgICAgIDxkeG8taW1hZ2UtdXBsb2FkIFt0YWJzXT1cIlsnZmlsZScsICd1cmwnXVwiIGZpbGVVcGxvYWRNb2RlPVwiYmFzZTY0XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZHhvLWltYWdlLXVwbG9hZD5cbiAgICAgICAgICAgICAgICA8L2R4LWh0bWwtZWRpdG9yPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgdy1mdWxsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+IFBhcmVudCBDb21wb25lbnQgPC9wPlxuICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwia2VpUGFyZW50RGF0YVNvdXJjZVwiIGRpc3BsYXlFeHByPVwia3BpTmFtZVwiIHZhbHVlRXhwcj1cImtwaUlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJnZXRLcGlJdGVtVmFsdWUoJGV2ZW50KVwiIFsobmdNb2RlbCldPVwicGFyYW50ZV9rcGlfbmFtZVwiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMSB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xICB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIG10LTJcIj5QYXJlbnQgVElEPC9wPlxuICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJzZWxlY3RlZF9rcGlfdGlkXCIgW3JlYWRPbmx5XT1cImZhbHNlXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMSB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xICB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIG10LTJcIj5DaGlsZCBUSUQ8L3A+XG4gICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkX2twaV9jaGlsZF90aWRcIiBbcmVhZE9ubHldPVwiZmFsc2VcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktYmV0d2VlbiBtdC0zXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xICB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8ZHgtY2hlY2stYm94IFsobmdNb2RlbCldPVwia3BpX3Zpc2liaWxpdHlcIiB0ZXh0PVwiVmlzaWJpbGl0eVwiPjwvZHgtY2hlY2stYm94PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xICB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8ZHgtY2hlY2stYm94IFsobmdNb2RlbCldPVwia3BpX2V4dGVybmFsXCIgdGV4dD1cIkV4dGVybmFsIEtQSVwiPjwvZHgtY2hlY2stYm94PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgbXQtMlwiPktQSSBJbmZvPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4LWh0bWwtZWRpdG9yIGhlaWdodD1cIidhdXRvJ1wiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRfaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8tdG9vbGJhciBbbXVsdGlsaW5lXT1cImZhbHNlXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY2NlcHRlZFZhbHVlc109XCJbJzhwdCcsICcxMHB0JywgJzEycHQnLCAnMTRwdCcsICcxOHB0JywgJzI0cHQnLCAnMzZwdCddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInsgaW5wdXRBdHRyOiB7ICdhcmlhLWxhYmVsJzogJ0ZvbnQgc2l6ZScgfSB9XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJmb250XCIgW2FjY2VwdGVkVmFsdWVzXT1cIltcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb3VyaWVyIE5ldycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0dlb3JnaWEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbXBhY3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMdWNpZGEgQ29uc29sZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RhaG9tYScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RpbWVzIE5ldyBSb21hbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZlcmRhbmEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwieyBpbnB1dEF0dHI6IHsgJ2FyaWEtbGFiZWwnOiAnRm9udCBmYW1pbHknIH0gfVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJib2xkXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJpdGFsaWNcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInVuZGVybGluZVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJhbGlnbkxlZnRcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImFsaWduQ2VudGVyXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJhbGlnblJpZ2h0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJhbGlnbkp1c3RpZnlcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwib3JkZXJlZExpc3RcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImJ1bGxldExpc3RcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiaGVhZGVyXCIgW2FjY2VwdGVkVmFsdWVzXT1cIltmYWxzZSwgMSwgMiwgMywgNCwgNV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwieyBpbnB1dEF0dHI6IHsgJ2FyaWEtbGFiZWwnOiAnSGVhZGVyJyB9IH1cIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiY29sb3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImJhY2tncm91bmRcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwibGlua1wiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiaW1hZ2VcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiY2xlYXJcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImNvZGVCbG9ja1wiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keG8tdG9vbGJhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhvLW1lZGlhLXJlc2l6aW5nIFtlbmFibGVkXT1cInRydWVcIj4gPC9keG8tbWVkaWEtcmVzaXppbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by1pbWFnZS11cGxvYWQgW3RhYnNdPVwiWydmaWxlJywgJ3VybCddXCIgZmlsZVVwbG9hZE1vZGU9XCJiYXNlNjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4by1pbWFnZS11cGxvYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2R4LWh0bWwtZWRpdG9yPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgPGFwcC11c2VyLWFjY2VzcyBbKHVzZXJPcHRpb25Db250YWluZXIpXT1cInVzZXJPcHRpb25Db250YWluZXJcIj5cbiAgICAgICAgPC9hcHAtdXNlci1hY2Nlc3M+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1hdXRvIG10LTUganVzdGlmeS1lbmRcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3N1Y2Nlc3NfbWR9fVwiIChjbGljayk9XCJnZXRVcGRhdGVLcGkoKVwiICpuZ0lmPVwiaXNFZGl0S3BpQWRkZWRcIj5VcGRhdGUgS1BJXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fZGFuZ2VyX21kfX1cIiAoY2xpY2spPVwiZ2V0RGVsZXRLcGkoKVwiICpuZ0lmPVwiaXNFZGl0S3BpQWRkZWRcIj5EZWxldGUgS1BJXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fc3VjY2Vzc19tZH19XCIgKGNsaWNrKT1cIm1ha2VOZXdLcGlXaXRoVXNlckVudGl0eSgpXCIgKm5nSWY9XCIhaXNFZGl0S3BpQWRkZWRcIj5DcmVhdGUgS1BJXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3dhcm5pbmdfbWR9fVwiIChjbGljayk9XCJnZXRSZXNldGVLcGkoKVwiPlJlc2V0PC9idXR0b24+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gPC9kaXY+IC0tPlxuICAgICAgICA8IS0tIDwvbmctY29udGFpbmVyPiAtLT5cbiAgICA8L2Rpdj5cblxuXG5cblxuPC9kaXY+Il19
293
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWtwaS10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvdGVtcGxhdGUtbW9kdWxlL0twaUNyZWF0aW9uTW9kdWxlL2NyZWF0ZS1rcGktdHJlZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3RlbXBsYXRlLW1vZHVsZS9LcGlDcmVhdGlvbk1vZHVsZS9jcmVhdGUta3BpLXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFhbEQsTUFBTSxPQUFPLHNCQUFzQjtJQTZDakMsWUFDUyxhQUE0QixFQUFVLFdBQXdCLEVBQzdELE9BQXlCLEVBQVUsTUFBcUIsRUFDeEQsTUFBYztRQUZmLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDN0QsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3hELFdBQU0sR0FBTixNQUFNLENBQVE7UUEvQ3hCLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBQzdCLHdCQUFtQixHQUFRLEVBQUUsQ0FBQztRQUU5QixZQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDOUIsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFDckIsbUJBQWMsR0FBUSxFQUFFLENBQUM7UUFXekIsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLFlBQU8sR0FBUSxFQUFFLENBQUM7UUFFbEIsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFDaEMsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0IsbUJBQWMsR0FBWSxLQUFL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Q2QsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNuQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNsQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3JCLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDekQsUUFBUSxFQUFFLEVBQUU7YUFDYixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDMUIsSUFBSSxHQUFHLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLE1BQU0sRUFBRTtvQkFDVixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2lCQUNqRDthQUNGO2lCQUFNO2dCQUNMLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzthQUMzQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQzs7bUhBaFhVLHNCQUFzQjt1R0FBdEIsc0JBQXNCLHNEQ2JuQyxpMFdBME1NOzJGRDdMTyxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBSb3V0ZXIsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBDcmVhdGVLcElTZXJ2aWNlIH0gZnJvbSAnLi9jcmVhdGVLcGkuc2VydmljZSc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwbGljYXRpb24tY29udHJvbGxlci9jb21tb24nO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jcmVhdGUta3BpJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NyZWF0ZS1rcGktdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NyZWF0ZS1rcGktdHJlZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENyZWF0ZUtwaVRyZWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBsb2FkaW5nTW9kYWw6IGJvb2xlYW4gPSB0cnVlO1xuICBrZWlQYXJlbnREYXRhU291cmNlOiBhbnkgPSBbXTtcbiAgbXlGb3JtOiBGb3JtR3JvdXA7XG4gIHRhZ1R5cGUgPSBbXCJwYXJlbnRcIiwgXCJjaGlsZFwiXTtcbiAga3BpX2NvbnN0cnVjdG9yID0gW107XG4gIHNlbGVjdGVkX3Bfa3BpOiBhbnkgPSB7fTtcblxuICBzZWxlY3Rfa3BpX25hbWU6IGFueTtcbiAgc2VsZWN0X3RhZ190eXBlOiBhbnk7XG4gIHNlbGVjdGVkX2lkOiBhbnk7XG4gIHNlbGVjdGVkX3BhZ2VfaWQ6IGFueTtcbiAgc2VsZWN0ZWRfbmVzdGVkX25hbWU6IGFueTtcbiAgc2VsZWN0ZWRfa3BpX3RpZDogYW55O1xuICBzZWxlY3RlZF9kZXNjOiBhbnk7XG4gIHNlbGVjdGVkX2luZm86IGFueTtcblxuICBoZWlnaHQgPSA5MDtcbiAga3BpRGF0YTogYW55ID0gW107XG4gIGhlaXN0VmFsdWU6IGFueTtcbiAgaXNGcm9tRWRpdGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNOZXdLcGlBZGRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0VkaXRLcGlBZGRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGVkaXRhYmxlX2Rlc2MgPSBcIlwiO1xuICBlZGl0YWJsZV9pbmZvID0gXCJcIjtcbiAgZWRpdGFibGVfaWQ7XG4gIGVkaXRhYmxlX3BhZ2VfaWQ7XG4gIGVkaXRhYmxlX3RhZ190eXBlO1xuICBlZGl0YWJsZV9rcGlfbmFtZTtcbiAgZWRpdGFibGVfa3BpX3RpZDtcbiAgc2VsZWN0ZWRfa3BpX2NoaWxkX3RpZDtcbiAga3BpX3Zpc2liaWxpdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAga3BpX2V4dGVybmFsOiBib29sZWFuID0gZmFsc2U7XG4gIHBhcmFudGVfa3BpX25hbWU6IGFueTtcbiAgaXNDb21wb25lbnRVcGRhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdGVtcGxhdGVEYXRhU291cmNlOiBhbnk7XG4gIC8vIGtwaURhdGFKc29uOmFueTtcbiAgdXNlck9wdGlvbkNvbnRhaW5lcjogYW55ID0gW107XG5cbiAgc2VsZWN0ZWRfYWxpYXNlczogYW55ID0gW107XG4gIGlzS3BpVHJlZVByZXBhcmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAga3BpQ29uZmlnRGF0YVNvdXJjZTogYW55ID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgc2VydmljZTogQ3JlYXRlS3BJU2VydmljZSwgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge1xuXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcblxuICAgIHRoaXMuZ2V0QWxsS3BpRGF0YSgpO1xuICAgIHRoaXMuZ2V0QXBwUGFnZUNvbmZpZ3MoKTtcbiAgfVxuXG4gIGdldEFwcFBhZ2VDb25maWdzKCkge1xuICAgIHRoaXMuc2VydmljZS5nZXRBcHBQYWdlQ29uZmlncygpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVEYXRhU291cmNlID0gZGF0YTtcbiAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdQYWdlIElEJylcblxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBnZXRBbGxLcGlEYXRhKCkge1xuXG4gICAgdGhpcy5rZWlQYXJlbnREYXRhU291cmNlID0gW107XG4gICAgdGhpcy5zZXJ2aWNlLmxpc3RLcGlFbnRyeUNvbmZpZ3MoKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgY29uc3QgdXNlck5hbWUgPSBcImFkbWluXCI7XG4gICAgICB0aGlzLmtwaUNvbmZpZ0RhdGFTb3VyY2UgPSBkYXRhO1xuICAgICAgdGhpcy5rcGlEYXRhID0gdGhpcy5idWlsZE1lbnVUcmVlKHVzZXJOYW1lLCBkYXRhKTtcbiAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG4gICAgICAvLyAgdGhpcy5rZWlQYXJlbnREYXRhU291cmNlID0gZGF0YTtcbiAgICAgIHRoaXMucHJlcGFyZVBhcmVudERhdGFTb3VyY2UoZGF0YSlcblxuICAgIH0sIGVyciA9PiB7XG4gICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdLUEkgQ29uZmlnJylcbiAgICB9KVxuICB9XG5cbiAgcHJlcGFyZVBhcmVudERhdGFTb3VyY2UoZGF0YSkge1xuICAgIGRhdGEuZm9yRWFjaCgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXN1bHQudGFnVHlwZSA9PSAncGFyZW50Jykge1xuICAgICAgICAvLyBjb25zdCB0aWRLZXkgPSBkYXRhLnRhZ1R5cGUgPT09ICdjaGlsZCcgPyAnY2hpbGRUaWQnIDogJ3BhcmVudFRpZCc7XG4gICAgICAgIC8vICBsZXQgbm9kZSA9IHtcbiAgICAgICAgLy8gICBcImtwaU5hbWVcIjogcmVzdWx0LmtwaU5hbWUsXG4gICAgICAgIC8vICAgXCJ0aWRcIjogcmVzdWx0W3RpZEtleV0sXG4gICAgICAgIC8vICAgXCJrcGlJZFwiOiByZXN1bHQua3BpSWRcbiAgICAgICAgLy8gfVxuICAgICAgICB0aGlzLmtlaVBhcmVudERhdGFTb3VyY2UucHVzaChyZXN1bHQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cblxuICBtYWtlTmV3S3BpV2l0aFVzZXJFbnRpdHkoKSB7XG4gICAgY29uc3QgcGFnZURhdGEgPSAodGhpcy5zZWxlY3RlZF9wYWdlX2lkKSA/IHRoaXMudGVtcGxhdGVEYXRhU291cmNlLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5wYWdlSWQgPT09IHRoaXMuc2VsZWN0ZWRfcGFnZV9pZCkgOiBudWxsO1xuXG4gICAgbGV0IGtwaU9iaiA9IHtcbiAgICAgIFwia3BpSWRcIjogdGhpcy5zZWxlY3RlZF9pZCxcbiAgICAgIFwia3BpTmFtZVwiOiB0aGlzLnNlbGVjdF9rcGlfbmFtZSxcbiAgICAgIFwiYWxpYXNlc1wiOiB0aGlzLnNlbGVjdGVkX2FsaWFzZXMsXG4gICAgICBcInBhZ2VJZFwiOiB0aGlzLnNlbGVjdGVkX3BhZ2VfaWQsXG4gICAgICBcImRlc2NyaXB0aW9uXCI6IHRoaXMuc2VsZWN0ZWRfZGVzYyxcbiAgICAgIFwia3BpSW5mb1wiOiBcIlwiLFxuICAgICAgXCJ0YWdUeXBlXCI6IHRoaXMuc2VsZWN0X3RhZ190eXBlLFxuICAgICAgXCJhY3RpdmVcIjogdHJ1ZSxcbiAgICAgIFwidmlzaWJpbGl0eVwiOiB0aGlzLmtwaV92aXNpYmlsaXR5LFxuICAgICAgXCJleHRlcm5hbEtwaVwiOiB0aGlzLmtwaV9leHRlcm5hbCxcbiAgICAgIFwidGFyZ2V0XCI6IFwiXCIsXG4gICAgICBcImljb25cIjogXCJcIixcbiAgICAgIFwidXJsXCI6IHBhZ2VEYXRhID8gcGFnZURhdGEucGFnZVVybCA6IFwiXCIsXG4gICAgICBcImtwaVR5cGVcIjogdGhpcy5zZWxlY3RfdGFnX3R5cGUgPT0gXCJwYXJlbnRcIiA/IFwiY29sbGFwc2FibGVcIiA6IFwiYmFzaWNcIixcbiAgICAgIFwicGFyZW50VGlkXCI6IHRoaXMuc2VsZWN0ZWRfa3BpX3RpZCxcbiAgICAgIFwiY2hpbGRUaWRcIjogdGhpcy5zZWxlY3RlZF9rcGlfY2hpbGRfdGlkLFxuICAgICAgXCJwZXJtaXNzaW9uc1wiOiB0aGlzLnVzZXJPcHRpb25Db250YWluZXIsXG4gICAgfVxuXG4gICAgdGhpcy5zZXJ2aWNlLmNyZWF0ZUtwaUVudHJ5Q29uZmlnKGtwaU9iaikuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcygnS1BJIENyZWF0ZWQgU3VjY2Vzc2Z1bGx5JylcbiAgICAgIHRoaXMuZ2V0QWxsS3BpRGF0YSgpO1xuICAgICAgdGhpcy5nZXRSZXNldGVLcGkoKTtcbiAgICB9LCBlcnIgPT4ge1xuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdLUEkgQ29uZmlnJylcbiAgICB9KVxuXG4gICAgY29uc29sZS5sb2coXCJLUEkgd2l0aCBVc2VyIEVudGl0eSBPYmo6XCIsIGtwaU9iaik7XG4gIH1cblxuICBnZXRFZGl0YWJsZUtwaShrcGk6IGFueSkge1xuXG4gICAgY29uc3QgZGF0YSA9IHRoaXMua3BpQ29uZmlnRGF0YVNvdXJjZS5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0ua3BpSWQgPT09IGtwaS5pZCk7XG5cbiAgICAvLyBjb25zdCBwYXJlbnROYW1lID0gdGhpcy5rZWlQYXJlbnREYXRhU291cmNlLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5wYXJlbnRUaWQgPT0gZGF0YVtcInBhcmVudFRpZFwiXSk7XG5cblxuICAgIGNvbnN0IHRpZEtleSA9IGRhdGEudGFnVHlwZSA9PT0gJ2NoaWxkJyAmJiBkYXRhLmNoaWxkVGlkICYmIGRhdGEuY2hpbGRUaWQubGVuZ3RoID4gMyA/ICdjaGlsZFRpZCcgOiAncGFyZW50VGlkJztcbiAgICBjb25zdCBwYXJlbnROYW1lID0gdGhpcy5rZWlQYXJlbnREYXRhU291cmNlLmZpbmQoXG4gICAgICAoaXRlbTogYW55KSA9PiBpdGVtW3RpZEtleV0gPT0gZGF0YVtcInBhcmVudFRpZFwiXVxuICAgICk7XG4gICAgdGhpcy5wYXJhbnRlX2twaV9uYW1lID0gcGFyZW50TmFtZSA/IHBhcmVudE5hbWVbJ2twaUlkJ10gOiBudWxsO1xuXG5cbiAgICB0aGlzLnNlbGVjdGVkX2lkID0gZGF0YVtcImtwaUlkXCJdO1xuICAgIHRoaXMuc2VsZWN0X2twaV9uYW1lID0gZGF0YVtcImtwaU5hbWVcIl07XG4gICAgdGhpcy5zZWxlY3RlZF9hbGlhc2VzID0gZGF0YVtcImFsaWFzZXNcIl07XG4gICAgdGhpcy5zZWxlY3RlZF9wYWdlX2lkID0gZGF0YVtcInBhZ2VJZFwiXTtcbiAgICB0aGlzLnNlbGVjdGVkX2Rlc2MgPSBkYXRhW1wiZGVzY3JpcHRpb25cIl07XG4gICAgdGhpcy5zZWxlY3RfdGFnX3R5cGUgPSBkYXRhW1widGFnVHlwZVwiXTtcbiAgICB0aGlzLmtwaV92aXNpYmlsaXR5ID0gZGF0YVtcInZpc2liaWxpdHlcIl07XG4gICAgdGhpcy5rcGlfZXh0ZXJuYWwgPSBkYXRhW1wiZXh0ZXJuYWxLcGlcIl07XG4gICAgdGhpcy5zZWxlY3RlZF9rcGlfdGlkID0gZGF0YVtcInBhcmVudFRpZFwiXTtcbiAgICB0aGlzLnNlbGVjdGVkX2twaV9jaGlsZF90aWQgPSBkYXRhW1wiY2hpbGRUaWRcIl07XG4gICAgdGhpcy51c2VyT3B0aW9uQ29udGFpbmVyID0gKGRhdGFbXCJwZXJtaXNzaW9uc1wiXSAmJiBkYXRhW1wicGVybWlzc2lvbnNcIl0ubGVuZ3RoID4gMCkgPyBkYXRhW1wicGVybWlzc2lvbnNcIl0gOiBbXTtcbiAgICB0aGlzLmlzRWRpdEtwaUFkZGVkID0gdHJ1ZTtcblxuICB9XG5cbiAgZ2V0VXBkYXRlS3BpKCkge1xuICAgIGNvbnN0IHBhZ2VEYXRhID0gKHRoaXMuc2VsZWN0ZWRfcGFnZV9pZCkgPyB0aGlzLnRlbXBsYXRlRGF0YVNvdXJjZS5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0ucGFnZUlkID09PSB0aGlzLnNlbGVjdGVkX3BhZ2VfaWQpIDogbnVsbDtcblxuICAgIGxldCBrcGlPYmogPSB7XG4gICAgICBcImtwaUlkXCI6IHRoaXMuc2VsZWN0ZWRfaWQsXG4gICAgICBcImtwaU5hbWVcIjogdGhpcy5zZWxlY3Rfa3BpX25hbWUsXG4gICAgICBcImFsaWFzZXNcIjogdGhpcy5zZWxlY3RlZF9hbGlhc2VzLFxuICAgICAgXCJwYWdlSWRcIjogdGhpcy5zZWxlY3RlZF9wYWdlX2lkLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiB0aGlzLnNlbGVjdGVkX2Rlc2MsXG4gICAgICBcImtwaUluZm9cIjogXCJcIixcbiAgICAgIFwidGFnVHlwZVwiOiB0aGlzLnNlbGVjdF90YWdfdHlwZSxcbiAgICAgIFwiYWN0aXZlXCI6IHRydWUsXG4gICAgICBcInZpc2liaWxpdHlcIjogdGhpcy5rcGlfdmlzaWJpbGl0eSxcbiAgICAgIFwiZXh0ZXJuYWxLcGlcIjogdGhpcy5rcGlfZXh0ZXJuYWwsXG4gICAgICBcInRhcmdldFwiOiBcIlwiLFxuICAgICAgXCJpY29uXCI6IFwiXCIsXG4gICAgICBcInVybFwiOiBwYWdlRGF0YSA/IHBhZ2VEYXRhLnBhZ2VVcmwgOiBcIlwiLFxuICAgICAgXCJrcGlUeXBlXCI6IHRoaXMuc2VsZWN0X3RhZ190eXBlID09IFwicGFyZW50XCIgPyBcImNvbGxhcHNhYmxlXCIgOiBcImJhc2ljXCIsXG4gICAgICBcInBhcmVudFRpZFwiOiB0aGlzLnNlbGVjdGVkX2twaV90aWQsXG4gICAgICBcImNoaWxkVGlkXCI6IHRoaXMuc2VsZWN0ZWRfa3BpX2NoaWxkX3RpZCxcbiAgICAgIFwicGVybWlzc2lvbnNcIjogdGhpcy51c2VyT3B0aW9uQ29udGFpbmVyLFxuICAgIH1cblxuICAgIHRoaXMuc2VydmljZS51cGRhdGVLcGlFbnRyeUNvbmZpZyhrcGlPYmopLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoJ0tQSSBVcGRhdGVkIFN1Y2Nlc3NmdWxseScpXG4gICAgICB0aGlzLmdldEFsbEtwaURhdGEoKTtcbiAgICAgIHRoaXMuZ2V0UmVzZXRlS3BpKCk7XG4gICAgICB0aGlzLmlzRWRpdEtwaUFkZGVkID0gZmFsc2U7XG5cbiAgICB9LCBlcnIgPT4ge1xuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdLUEkgQ29uZmlnJylcbiAgICB9KVxuXG4gICAgY29uc29sZS5sb2coXCJLUEkgd2l0aCBVc2VyIEVudGl0eSBPYmo6XCIsIGtwaU9iaik7XG4gIH1cblxuICBvbkN1c3RvbURpbWVudGlvbkNyZWF0aW5nKGFyZ3MpIHtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGFyZ3MudGV4dDtcbiAgICBhcmdzLmN1c3RvbUl0ZW0gPSBuZXdWYWx1ZTtcbiAgICBjb25zdCBpc0l0ZW1JbkRhdGFTb3VyY2UgPSB0aGlzLnNlbGVjdGVkX2FsaWFzZXMuc29tZSgoaXRlbSkgPT4gaXRlbSA9PT0gbmV3VmFsdWUpO1xuICAgIGlmICghaXNJdGVtSW5EYXRhU291cmNlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkX2FsaWFzZXMudW5zaGlmdChuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG5cblxuXG4gIGdldFJlc2V0ZUtwaSgpIHtcbiAgICB0aGlzLnNlbGVjdF9rcGlfbmFtZSA9ICcnO1xuICAgIHRoaXMuc2VsZWN0X3RhZ190eXBlID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZF9pZCA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRfcGFnZV9pZCA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRfa3BpX3RpZCA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRfZGVzYyA9ICcnO1xuICAgIHRoaXMucGFyYW50ZV9rcGlfbmFtZSA9ICcnO1xuICAgIHRoaXMuZWRpdGFibGVfa3BpX25hbWUgPSAnJztcbiAgICB0aGlzLmVkaXRhYmxlX3RhZ190eXBlID0gJyc7XG4gICAgdGhpcy5lZGl0YWJsZV9pZCA9ICcnO1xuICAgIHRoaXMuZWRpdGFibGVfcGFnZV9pZCA9ICcnO1xuICAgIHRoaXMuZWRpdGFibGVfa3BpX3RpZCA9ICcnO1xuICAgIHRoaXMuZWRpdGFibGVfZGVzYyA9ICcnO1xuICAgIHRoaXMuZWRpdGFibGVfaW5mbyA9ICcnO1xuICAgIHRoaXMucGFyYW50ZV9rcGlfbmFtZSA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRfa3BpX2NoaWxkX3RpZCA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRfYWxpYXNlcyA9IFtdO1xuICAgIHRoaXMua3BpX2V4dGVybmFsID0gZmFsc2U7XG4gICAgdGhpcy5rcGlfdmlzaWJpbGl0eSA9IGZhbHNlO1xuICAgIHRoaXMuaXNDb21wb25lbnRVcGRhdGEgPSBmYWxzZTtcbiAgICB0aGlzLmlzRWRpdEtwaUFkZGVkID0gZmFsc2U7XG4gIH1cblxuXG4gIGFkZFRhZ3R5cGVWYWx1ZShlKSB7XG4gICAgdGhpcy5zZWxlY3RfdGFnX3R5cGUgPSBlLnZhbHVlO1xuICB9XG5cbiAgZ2V0S3BpSXRlbVZhbHVlKGUpIHtcbiAgICBpZiAoZS5ldmVudCkge1xuICAgICAgY29uc3Qga3BpX2RhdGEgPSB0aGlzLmtlaVBhcmVudERhdGFTb3VyY2UuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLmtwaUlkID09PSBlLnZhbHVlKTtcbiAgICAgIGlmICh0aGlzLmlzRWRpdEtwaUFkZGVkKSB7XG4gICAgICAgIGNvbnN0IHRpZEtleSA9IHRoaXMuc2VsZWN0X3RhZ190eXBlID09PSAnY2hpbGQnICYmIHRoaXMuaXNFZGl0S3BpQWRkZWQgPyAnY2hpbGRUaWQnIDogJ3BhcmVudFRpZCc7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRfa3BpX3RpZCA9IGtwaV9kYXRhW3RpZEtleV07XG4gICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRfa3BpX2NoaWxkX3RpZCA9IHRoaXMuZ2V0TmV4dENoaWxkVGlkKHRoaXMuc2VsZWN0ZWRfa3BpX3RpZCwgdGhpcy5rcGlDb25maWdEYXRhU291cmNlKTtcblxuICAgICAgfSBlbHNlIHtcblxuICAgICAgICBjb25zdCB0aWRLZXkgPSBrcGlfZGF0YS5jaGlsZFRpZCAmJiBrcGlfZGF0YS5jaGlsZFRpZC5sZW5ndGggPiAxID8gJ2NoaWxkVGlkJyA6ICdwYXJlbnRUaWQnO1xuICAgICAgICB0aGlzLnNlbGVjdGVkX2twaV90aWQgPSBrcGlfZGF0YVt0aWRLZXldO1xuICAgICAgICB0aGlzLnNlbGVjdGVkX2twaV9jaGlsZF90aWQgPSB0aGlzLmdldE5leHRDaGlsZFRpZCh0aGlzLnNlbGVjdGVkX2twaV90aWQsIHRoaXMua3BpQ29uZmlnRGF0YVNvdXJjZSk7XG5cbiAgICAgIH1cblxuICAgICBcblxuICAgIH1cblxuICB9XG5cbiAgIGdldE5leHRDaGlsZFRpZChwYXJlbnRUaWQ6IHN0cmluZywga3BpQ29uZmlnRGF0YVNvdXJjZTogYW55W10pOiBzdHJpbmcge1xuICAgICAgICAvLyAxLiBGaWx0ZXIgYnkgcGFyZW50VGlkXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0ga3BpQ29uZmlnRGF0YVNvdXJjZS5maWx0ZXIoXG4gICAgICAgICAgaXRlbSA9PiBpdGVtLnBhcmVudFRpZCA9PT0gcGFyZW50VGlkICYmIGl0ZW0uY2hpbGRUaWRcbiAgICAgICAgKTtcblxuICAgICAgICAvLyAyLiBFeHRyYWN0IGxhc3QgbnVtZXJpYyBwYXJ0IG9mIGNoaWxkVGlkXG4gICAgICAgIGNvbnN0IG1heENoaWxkTnVtYmVyID0gY2hpbGRyZW4ucmVkdWNlKChtYXgsIGl0ZW0pID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJ0cyA9IGl0ZW0uY2hpbGRUaWQuc3BsaXQoJy4nKTtcbiAgICAgICAgICBjb25zdCBsYXN0TnVtYmVyID0gTnVtYmVyKHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICByZXR1cm4gbGFzdE51bWJlciA+IG1heCA/IGxhc3ROdW1iZXIgOiBtYXg7XG4gICAgICAgIH0sIDApO1xuXG4gICAgICAgIC8vIDMuIFJldHVybiBuZXh0IGNoaWxkVGlkXG4gICAgICAgIHJldHVybiBgJHtwYXJlbnRUaWR9LiR7bWF4Q2hpbGROdW1iZXIgKyAxfWA7XG4gICAgICB9XG5cblxuICBhZGROZXdLcGkoKSB7XG4gICAgdGhpcy5pc05ld0twaUFkZGVkID0gdHJ1ZTtcbiAgICB0aGlzLmlzRWRpdEtwaUFkZGVkID0gZmFsc2U7XG4gIH1cbiAgY2FuY2VsVXBkYXRlKCkge1xuICAgIHRoaXMuaXNFZGl0S3BpQWRkZWQgPSBmYWxzZTtcbiAgfVxuXG5cblxuICBnZXRLcGlQYXJyZW50TmFtZShpbnB1dCkge1xuICAgIGNvbnN0IGxhc3RJbmRleCA9IGlucHV0Lmxhc3RJbmRleE9mKCcuJyk7XG4gICAgaWYgKGxhc3RJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgcmV0dXJuIGlucHV0LnN1YnN0cmluZygwLCBsYXN0SW5kZXgpO1xuICB9XG5cblxuICBnZXREZWxldEtwaSgpIHtcbiAgICB0aGlzLnNlcnZpY2UuZGVsZXRlS3BpRW50cnlDb25maWcodGhpcy5zZWxlY3RlZF9pZCkuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcygnS1BJIERlbGV0ZWQgU3VjY2Vzc2Z1bGx5JylcbiAgICAgIHRoaXMuZ2V0QWxsS3BpRGF0YSgpO1xuICAgICAgdGhpcy5nZXRSZXNldGVLcGkoKTtcbiAgICB9LCBlcnIgPT4ge1xuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdLUEkgQ29uZmlnJylcbiAgICB9KVxuICB9XG5cblxuICByZXNldGVVcGRhdGVLcGlGb3JtKCkge1xuICAgIHRoaXMuZWRpdGFibGVfZGVzYyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVkaXRhYmxlX2luZm8gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lZGl0YWJsZV9rcGlfbmFtZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVkaXRhYmxlX3RhZ190eXBlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZWRpdGFibGVfa3BpX3RpZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVkaXRhYmxlX2lkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZWRpdGFibGVfcGFnZV9pZCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN1Ym1pdE5ld0twaSgpIHtcbiAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IHRydWU7XG4gICAgdGhpcy5pc0VkaXRLcGlBZGRlZCA9IGZhbHNlO1xuICAgIGxldCBvYmogPSB7IGtwaUNvbmZpZ0RhdGE6IHRoaXMua3BpRGF0YSB9XG4gICAgY29uc29sZS5sb2cob2JqKTtcbiAgICB0aGlzLmlzQ29tcG9uZW50VXBkYXRhID0gZmFsc2U7XG4gICAgdGhpcy5zZXJ2aWNlLmdldENyZWF0ZUtwaShvYmopLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgIHRoaXMuZ2V0QWxsS3BpRGF0YSgpO1xuICAgICAgdGhpcy5nZXRSZXNldGVLcGkoKTtcbiAgICB9KVxuICB9XG5cblxuICBidWlsZE1lbnVUcmVlKHVzZXJOYW1lOiBzdHJpbmcsIGtwaURhdGE6IGFueVtdKTogYW55W10ge1xuICAgIC8vIGxldCBmaWx0ZXJlZE1lbnVzID0gbWVudURhdGEuZmlsdGVyKG1lbnUgPT5cbiAgICAvLyAgICF1c2VyTmFtZSB8fCAobWVudS5wZXJtaXNzaW9ucyAmJiBtZW51LnBlcm1pc3Npb25zLnNvbWUocGVybSA9PiBwZXJtLmVudGl0eVZhbHVlcy5pbmNsdWRlcyh1c2VyTmFtZSkpKVxuICAgIC8vICk7XG5cbiAgICBsZXQgZmlsdGVyZWRNZW51cyA9IGtwaURhdGE7XG5cbiAgICBjb25zdCBtZW51TWFwID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IG1lbnVUcmVlOiBhbnlbXSA9IFtdO1xuXG4gICAgZmlsdGVyZWRNZW51cy5mb3JFYWNoKG1lbnUgPT4ge1xuICAgICAgbWVudU1hcC5zZXQobWVudS5jaGlsZFRpZCB8fCBtZW51LnBhcmVudFRpZCwge1xuICAgICAgICBpZDogbWVudS5rcGlJZCxcbiAgICAgICAgdGl0bGU6IG1lbnUua3BpTmFtZSxcbiAgICAgICAgaWNvbjogbWVudS5pY29uLFxuICAgICAgICB0eXBlOiBtZW51LmtwaVR5cGUsXG4gICAgICAgIHRhZ1R5cGU6IG1lbnUudGFnVHlwZSxcbiAgICAgICAgdmlzaWJpbGl0eTogdHJ1ZSxcbiAgICAgICAgLi4uKG1lbnUubGluayAmJiB7IGxpbms6IG1lbnUubGluay5yZXBsYWNlKC9eXFwvKy8sICcnKSB9KSxcbiAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGZpbHRlcmVkTWVudXMuZm9yRWFjaChrcGkgPT4ge1xuICAgICAgaWYgKGtwaS5wYXJlbnRUaWQgJiYga3BpLmNoaWxkVGlkKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IG1lbnVNYXAuZ2V0KGtwaS5wYXJlbnRUaWQpO1xuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2gobWVudU1hcC5nZXQoa3BpLmNoaWxkVGlkKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lbnVUcmVlLnB1c2gobWVudU1hcC5nZXQoa3BpLnBhcmVudFRpZCkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1lbnVUcmVlO1xuICB9XG5cbn1cbiIsIjxhcHAtbG9hZGluZyAqbmdJZj1cImxvYWRpbmdNb2RhbFwiPjwvYXBwLWxvYWRpbmc+XG48ZGl2IGNsYXNzPVwicC00IGZsZXggZmxleC1yb3cgdy1mdWxsXCIgKm5nSWY9XCIhbG9hZGluZ01vZGFsXCI+XG4gICAgPGRpdiBjbGFzcz1cIm14LTIgYmctd2hpdGUgZGFyazpiZy10cmFuc3BhcmVudCBib3JkZXItclwiPlxuICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0twaVRyZWVQcmVwYXJlZFwiPiAtLT5cbiAgICAgICAgICAgIDx0cmVldmlldyBjbGFzcz1cImRhcmsgYmctZ3JheS05MDAgZGFyazpiZy10cmFuc3BhcmVudFwiIFtuYW1lXT1cIidtYWluTmF2aWdhdGlvbidcIiBbcm91dGVLZXldPVwiJ3JhS3BpJ1wiXG4gICAgICAgICAgICAgICAgW25hdmlnYXRpb25dPVwia3BpRGF0YVwiIFtpc1NlYXJjaEJveF09XCJmYWxzZVwiIFtpc0VkaXRJY29uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIChlZGl0YWJsZUtwaURhdGEpPVwiZ2V0RWRpdGFibGVLcGkoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPC90cmVldmlldz5cbiAgICAgICAgPCEtLSA8L25nLWNvbnRhaW5lcj4gLS0+XG5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibXgtMiB3LWZ1bGxcIj5cbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBpdGVtLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBteS04XCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl93YXJuaW5nX21kfX1cIiAoY2xpY2spPVwiYWRkTmV3S3BpKClcIj5BZGQgTmV3IEtQSTwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fcHJpbWFyeV9tZH19XCIgKGNsaWNrKT1cInJvdXRlVG9LcGlDb25maWcoKVwiXG4gICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cInJvdXRlci1saW5rLWFjdGl2ZVwiPkNvbmZpZ3VyZSBLUEk8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc05ld0twaUFkZGVkXCI+IC0tPlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJweC0yIHctZnVsbFwiPiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tMVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgbXQtMlwiPk5hbWU8L3A+XG4gICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwic2VsZWN0X2twaV9uYW1lXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgdy1mdWxsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xIHctMS8zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+IFRhZyBUeXBlPC9wPlxuICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbZGF0YVNvdXJjZV09XCJ0YWdUeXBlXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RfdGFnX3R5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cImFkZFRhZ3R5cGVWYWx1ZSgkZXZlbnQpXCI+PC9keC1zZWxlY3QtYm94PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIChvbkN1c3RvbUl0ZW1DcmVhdGluZyk9XCJvbkN1c3RvbURpbWVudGlvbkNyZWF0aW5nKCRldmVudClcIiAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTEgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+QWxpYXNlczwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGR4LXRhZy1ib3ggW2FjY2VwdEN1c3RvbVZhbHVlXT1cInRydWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkX2FsaWFzZXNcIj48L2R4LXRhZy1ib3g+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+UGFnZSBJRDwvcD5cbiAgICAgICAgICAgICAgICA8IS0tIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkX3BhZ2VfaWRcIj48L2R4LXRleHQtYm94PiAtLT5cbiAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwidGVtcGxhdGVEYXRhU291cmNlXCIgdmFsdWVFeHByPVwicGFnZUlkXCIgZGlzcGxheUV4cHI9XCJwYWdlTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzZWFyY2hFbmFibGVkXT1cInRydWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkX3BhZ2VfaWRcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+RGVzY3JpcHRpb248L3A+XG4gICAgICAgICAgICAgICAgPGR4LWh0bWwtZWRpdG9yIGhlaWdodD1cIidhdXRvJ1wiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRfZGVzY1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZHhvLXRvb2xiYXIgW211bHRpbGluZV09XCJmYWxzZVwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNpemVcIiBbYWNjZXB0ZWRWYWx1ZXNdPVwiWyc4cHQnLCAnMTBwdCcsICcxMnB0JywgJzE0cHQnLCAnMThwdCcsICcyNHB0JywgJzM2cHQnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwieyBpbnB1dEF0dHI6IHsgJ2FyaWEtbGFiZWwnOiAnRm9udCBzaXplJyB9IH1cIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJmb250XCIgW2FjY2VwdGVkVmFsdWVzXT1cIltcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ291cmllciBOZXcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0dlb3JnaWEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ltcGFjdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTHVjaWRhIENvbnNvbGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RhaG9tYScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGltZXMgTmV3IFJvbWFuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWZXJkYW5hJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cIiBbb3B0aW9uc109XCJ7IGlucHV0QXR0cjogeyAnYXJpYS1sYWJlbCc6ICdGb250IGZhbWlseScgfSB9XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYm9sZFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cIml0YWxpY1wiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInVuZGVybGluZVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImFsaWduTGVmdFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImFsaWduQ2VudGVyXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25SaWdodFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImFsaWduSnVzdGlmeVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cIm9yZGVyZWRMaXN0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYnVsbGV0TGlzdFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImhlYWRlclwiIFthY2NlcHRlZFZhbHVlc109XCJbZmFsc2UsIDEsIDIsIDMsIDQsIDVdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJ7IGlucHV0QXR0cjogeyAnYXJpYS1sYWJlbCc6ICdIZWFkZXInIH0gfVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImNvbG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYmFja2dyb3VuZFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImxpbmtcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJpbWFnZVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImNsZWFyXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiY29kZUJsb2NrXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPC9keG8tdG9vbGJhcj5cbiAgICAgICAgICAgICAgICAgICAgPGR4by1tZWRpYS1yZXNpemluZyBbZW5hYmxlZF09XCJ0cnVlXCI+IDwvZHhvLW1lZGlhLXJlc2l6aW5nPlxuICAgICAgICAgICAgICAgICAgICA8ZHhvLWltYWdlLXVwbG9hZCBbdGFic109XCJbJ2ZpbGUnLCAndXJsJ11cIiBmaWxlVXBsb2FkTW9kZT1cImJhc2U2NFwiPlxuICAgICAgICAgICAgICAgICAgICA8L2R4by1pbWFnZS11cGxvYWQ+XG4gICAgICAgICAgICAgICAgPC9keC1odG1sLWVkaXRvcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IHctZnVsbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMSB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgbXQtMlwiPiBQYXJlbnQgQ29tcG9uZW50IDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW2l0ZW1zXT1cImtlaVBhcmVudERhdGFTb3VyY2VcIiBkaXNwbGF5RXhwcj1cImtwaU5hbWVcIiB2YWx1ZUV4cHI9XCJrcGlJZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwiZ2V0S3BpSXRlbVZhbHVlKCRldmVudClcIiBbKG5nTW9kZWwpXT1cInBhcmFudGVfa3BpX25hbWVcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTEgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+UGFyZW50IFRJRDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwic2VsZWN0ZWRfa3BpX3RpZFwiIFtyZWFkT25seV09XCJmYWxzZVwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTEgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+VElEPC9wPlxuICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJzZWxlY3RlZF9rcGlfY2hpbGRfdGlkXCIgW3JlYWRPbmx5XT1cImZhbHNlXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gbXQtM1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPGR4LWNoZWNrLWJveCBbKG5nTW9kZWwpXT1cImtwaV92aXNpYmlsaXR5XCIgdGV4dD1cIlZpc2liaWxpdHlcIj48L2R4LWNoZWNrLWJveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPGR4LWNoZWNrLWJveCBbKG5nTW9kZWwpXT1cImtwaV9leHRlcm5hbFwiIHRleHQ9XCJFeHRlcm5hbCBLUElcIj48L2R4LWNoZWNrLWJveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIG10LTJcIj5LUEkgSW5mbzwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1odG1sLWVkaXRvciBoZWlnaHQ9XCInYXV0bydcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkX2luZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhvLXRvb2xiYXIgW211bHRpbGluZV09XCJmYWxzZVwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWNjZXB0ZWRWYWx1ZXNdPVwiWyc4cHQnLCAnMTBwdCcsICcxMnB0JywgJzE0cHQnLCAnMThwdCcsICcyNHB0JywgJzM2cHQnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJ7IGlucHV0QXR0cjogeyAnYXJpYS1sYWJlbCc6ICdGb250IHNpemUnIH0gfVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiZm9udFwiIFthY2NlcHRlZFZhbHVlc109XCJbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FyaWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ291cmllciBOZXcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdHZW9yZ2lhJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSW1wYWN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTHVjaWRhIENvbnNvbGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUYWhvbWEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaW1lcyBOZXcgUm9tYW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWZXJkYW5hJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInsgaW5wdXRBdHRyOiB7ICdhcmlhLWxhYmVsJzogJ0ZvbnQgZmFtaWx5JyB9IH1cIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYm9sZFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiaXRhbGljXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJ1bmRlcmxpbmVcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25MZWZ0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJhbGlnbkNlbnRlclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25SaWdodFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25KdXN0aWZ5XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cIm9yZGVyZWRMaXN0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJidWxsZXRMaXN0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImhlYWRlclwiIFthY2NlcHRlZFZhbHVlc109XCJbZmFsc2UsIDEsIDIsIDMsIDQsIDVdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInsgaW5wdXRBdHRyOiB7ICdhcmlhLWxhYmVsJzogJ0hlYWRlcicgfSB9XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImNvbG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJiYWNrZ3JvdW5kXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImxpbmtcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImltYWdlXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImNsZWFyXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJjb2RlQmxvY2tcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhvLXRvb2xiYXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by1tZWRpYS1yZXNpemluZyBbZW5hYmxlZF09XCJ0cnVlXCI+IDwvZHhvLW1lZGlhLXJlc2l6aW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8taW1hZ2UtdXBsb2FkIFt0YWJzXT1cIlsnZmlsZScsICd1cmwnXVwiIGZpbGVVcGxvYWRNb2RlPVwiYmFzZTY0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keG8taW1hZ2UtdXBsb2FkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9keC1odG1sLWVkaXRvcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgIDxhcHAtdXNlci1hY2Nlc3MgWyh1c2VyT3B0aW9uQ29udGFpbmVyKV09XCJ1c2VyT3B0aW9uQ29udGFpbmVyXCI+XG4gICAgICAgIDwvYXBwLXVzZXItYWNjZXNzPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtYXV0byBtdC01IGp1c3RpZnktZW5kXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9zdWNjZXNzX21kfX1cIiAoY2xpY2spPVwiZ2V0VXBkYXRlS3BpKClcIiAqbmdJZj1cImlzRWRpdEtwaUFkZGVkXCI+VXBkYXRlIEtQSVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX2Rhbmdlcl9tZH19XCIgKGNsaWNrKT1cImdldERlbGV0S3BpKClcIiAqbmdJZj1cImlzRWRpdEtwaUFkZGVkXCI+RGVsZXRlIEtQSVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3N1Y2Nlc3NfbWR9fVwiIChjbGljayk9XCJtYWtlTmV3S3BpV2l0aFVzZXJFbnRpdHkoKVwiICpuZ0lmPVwiIWlzRWRpdEtwaUFkZGVkXCI+Q3JlYXRlIEtQSVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl93YXJuaW5nX21kfX1cIiAoY2xpY2spPVwiZ2V0UmVzZXRlS3BpKClcIj5SZXNldDwvYnV0dG9uPlxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8IS0tIDwvZGl2PiAtLT5cbiAgICAgICAgPCEtLSA8L25nLWNvbnRhaW5lcj4gLS0+XG4gICAgPC9kaXY+XG5cblxuXG5cbjwvZGl2PiJdfQ==