gamma-app-controller 2.0.7 → 2.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/application-controller/application-controller.module.mjs +1 -6
- package/esm2020/lib/application-controller/application-menu-controller/application-create-menu/application-create-menu.component.mjs +18 -3
- package/esm2020/lib/application-controller/application-view-components/create-comp-view/create-comp-view.component.mjs +3 -9
- package/esm2020/lib/application-controller/support-components/geo-map/geo-map.component.mjs +6 -5
- package/esm2020/lib/shared/advanced-component/gamma-geo-chart/gamma-geo-chart.component.mjs +64 -24
- package/esm2020/public-api.mjs +1 -3
- package/fesm2015/gamma-app-controller.mjs +1697 -2197
- package/fesm2015/gamma-app-controller.mjs.map +1 -1
- package/fesm2020/gamma-app-controller.mjs +1705 -2199
- package/fesm2020/gamma-app-controller.mjs.map +1 -1
- package/lib/application-controller/application-controller.module.d.ts +25 -26
- package/lib/application-controller/application-menu-controller/application-create-menu/application-create-menu.component.d.ts +2 -0
- package/lib/application-controller/application-view-components/create-comp-view/create-comp-view.component.d.ts +0 -4
- package/lib/application-controller/support-components/geo-map/geo-map.component.d.ts +2 -0
- package/lib/shared/advanced-component/gamma-geo-chart/gamma-geo-chart.component.d.ts +17 -2
- package/package.json +1 -1
- package/public-api.d.ts +0 -2
- package/esm2020/lib/shared/advanced-component/google-geo-map/google-geo-map.component.mjs +0 -547
- package/lib/shared/advanced-component/google-geo-map/google-geo-map.component.d.ts +0 -75
|
@@ -20,7 +20,6 @@ import * as i15 from "../../../shared/loader/loader.component";
|
|
|
20
20
|
import * as i16 from "../../common-header/common-header.component";
|
|
21
21
|
import * as i17 from "../../support-components/dash-today-previous/dash-today-previous.component";
|
|
22
22
|
import * as i18 from "../../support-components/single-card/single-card.component";
|
|
23
|
-
import * as i19 from "../../support-components/heat-map/heat-map.component";
|
|
24
23
|
export class CreateCompViewComponent {
|
|
25
24
|
constructor(toastr, commonService, service, kpiService, router, activatedRoute, environment) {
|
|
26
25
|
this.toastr = toastr;
|
|
@@ -39,11 +38,6 @@ export class CreateCompViewComponent {
|
|
|
39
38
|
{ "compName": "GammaTableWithPercentageComponent", "item": "Table View with percentage" },
|
|
40
39
|
{ "compName": "GammSingleNumberCardComponent", "item": "Single Number Card" },
|
|
41
40
|
];
|
|
42
|
-
this.componentNamesForGoogleMap = [
|
|
43
|
-
{ "compName": "GammaGeoChartComponent", "item": "Geo Chart" },
|
|
44
|
-
{ "compName": "GammaHeatChartComponent", "item": "Heat Map" },
|
|
45
|
-
{ "compName": "GammaChoroplethMapComponent", "item": "Choroplet Map" }
|
|
46
|
-
];
|
|
47
41
|
this.defaultStartDate = moment().subtract('7', 'days').format('YYYY-MM-DD');
|
|
48
42
|
this.defaultEndDate = moment().subtract('1', 'days').format('YYYY-MM-DD');
|
|
49
43
|
this.isHeader = true;
|
|
@@ -612,10 +606,10 @@ export class CreateCompViewComponent {
|
|
|
612
606
|
}
|
|
613
607
|
}
|
|
614
608
|
CreateCompViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CreateCompViewComponent, deps: [{ token: i1.ToastrService }, { token: i2.CommonService }, { token: i3.ApplicationContentService }, { token: i4.kpicommonService }, { token: i5.Router }, { token: i5.ActivatedRoute }, { token: APP_ENVIRONMENT }], target: i0.ɵɵFactoryTarget.Component });
|
|
615
|
-
CreateCompViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CreateCompViewComponent, selector: "app-create-comp-view", inputs: { kpiTreeData: "kpiTreeData", isHeader: "isHeader", selectedViewId: "selectedViewId" }, ngImport: i0, template: "<div class=\"flex flex-col flex-auto min-w-0\">\n <lib-common-header [pageTitle]=\"'Views Editor'\" *ngIf=\"isHeader\"></lib-common-header>\n <div>\n <div class=\"p-2 w-full\">\n <div\n class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <div class=\"flex flex-row justify-between\">\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">Dataset List <span *ngIf=\"isFilterInputs\"\n class=\"text-blue-500 cursor-pointer\"><i class=\"fa fa-pencil\"\n (click)=\"getEditDataSet()\"></i></span></div>\n <dx-select-box [items]=\"dataSettableDataSource\" (onValueChanged)=\"getDataSetDetails($event)\"\n displayExpr=\"datasetName\" valueExpr=\"datasetId\" [searchEnabled]=\"true\"\n [value]=\"selectedDataSetOnedit.datasetId\"></dx-select-box>\n </div>\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">Select View Type</div>\n <dx-select-box [items]=\"['chart','table','groupTable','others','map']\" [(ngModel)]=\"selectedViewType\"\n (onValueChanged)=\"getViewType($event)\"></dx-select-box>\n </div>\n <ng-container *ngIf=\"selectedViewType =='others'\">\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">Select Component</div>\n <dx-select-box [items]=\"componentNamesOthers\" displayExpr=\"item\" valueExpr=\"compName\"\n [(ngModel)]=\"componentName\"></dx-select-box>\n </div>\n </ng-container>\n \n\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">View Name</div>\n <dx-text-box [(ngModel)]=\"creatCompViewObject.viewName\"></dx-text-box>\n </div>\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">View Label</div>\n <dx-text-box [(ngModel)]=\"creatCompViewObject.viewLabel\"></dx-text-box>\n </div>\n </div>\n <ng-container *ngIf=\"isFilterInputs\">\n <div class=\"flex flex-row mt-2\">\n <ng-container *ngFor=\"let request of selectedDataSet.config.queryConfig.mapedFilters; let i = index\">\n <div class=\"m-2\">\n <div class=\"text-md mb-1\"> {{getCapitalize(request.localColumn)}}</div>\n <dx-date-box displayFormat=\"yyyy-MM-dd\" type=\"date\" \n (onValueChanged)=\"startDateChange($event,request)\"\n *ngIf=\"getFilter(request.localColumn)\">\n </dx-date-box>\n <dx-text-box [(ngModel)]=\"request.defaultValue\"\n *ngIf=\"!getFilter(request.localColumn)\"></dx-text-box>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <div class=\"flex flex-row mt-5 justify-center items-center\">\n <button class=\"{{commonService.btn_success_md}}\" (click)=\"addNewView()\">\n Reset View\n </button>\n <button class=\"{{commonService.btn_primary_md}} cursor-pointer mx-4 my-2\" (click)=\"createNewView()\">\n Proceed\n </button>\n\n\n </div>\n <div class=\"m-5 border\">\n <div class=\"m-2\">\n <div class=\"mt-5\">\n <app-loader *ngIf=\"isLoader\"></app-loader>\n <!-- for chart view -->\n <ng-container *ngIf=\"isGenerate\">\n <ng-container *ngIf=\"selectedViewType == 'chart'\">\n <app-dash-chart [datasetmodal]=\"dataSourceModal\"\n (getChartConfigOutPut)=\"getEmitNewChartCongig($event)\"></app-dash-chart>\n </ng-container>\n <ng-container *ngIf=\"selectedViewType == 'heatmap'\">\n <app-heat-map [datasetmodal]=\"dataSourceModal\"\n (getHeatMapConfigOutPut)=\"getEmitNewHeatMapConfig($event)\"></app-heat-map>\n </ng-container>\n <ng-container *ngIf=\"selectedViewType == 'map'\">\n <app-geo-map [datasetmodal]=\"dataSourceModal\"\n (createOtherComponentView)=\"getEmitNewOtherSetCongig($event)\"></app-geo-map>\n </ng-container>\n <!-- for table view -->\n <ng-container *ngIf=\"selectedViewType == 'table' || selectedViewType == 'groupTable'\">\n <app-dash-table [datasetmodal]=\"dataSourceModal\"\n (getTableConfigOutPut)=\"getEmitNewTableConfig($event)\"></app-dash-table>\n </ng-container>\n <!-- for others view -->\n <ng-container *ngIf=\"selectedViewType == 'others'\">\n <ng-container *ngIf=\"componentName == 'GammaTableWithPercentageComponent'\">\n <app-table-with-bar [datasetmodal]=\"dataSourceModal\"\n (createOtherComponentView)=\"getEmitNewOtherSetCongig($event)\"></app-table-with-bar>\n </ng-container>\n \n <ng-container\n *ngIf=\"componentName != 'GammaTableWithPercentageComponent' && componentName != 'GammaGeoChartComponent' && componentName != 'GammSingleNumberCardComponent'\">\n <lib-dash-today-previous [datasetmodal]=\"dataSourceModal\"\n (gettodayPreviousConfigOutPut)=\"getEmitNewOtherSetCongig($event)\"></lib-dash-today-previous>\n </ng-container>\n\n <ng-container\n *ngIf=\"componentName != 'GammaTableWithPercentageComponent' && componentName != 'GammaGeoChartComponent' && componentName != 'GammaTodayPreviousComponent'\">\n <lib-single-card [datasetmodal]=\"dataSourceModal\"\n (getSingleCardConfigOutPut)=\"getEmitNewOtherSetCongig($event)\">\n </lib-single-card>\n </ng-container>\n\n \n </ng-container>\n </ng-container>\n </div>\n\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.DxDateBoxComponent, selector: "dx-date-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "adaptivityEnabled", "applyButtonText", "applyValueMode", "buttons", "calendarOptions", "cancelButtonText", "dateOutOfRangeMessage", "dateSerializationFormat", "deferRendering", "disabled", "disabledDates", "displayFormat", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "interval", "invalidDateMessage", "isValid", "label", "labelMode", "max", "maxLength", "min", "name", "opened", "openOnFieldClick", "pickerType", "placeholder", "readOnly", "rtlEnabled", "showAnalogClock", "showClearButton", "showDropDownButton", "spellcheck", "stylingMode", "tabIndex", "text", "type", "useMaskBehavior", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "adaptivityEnabledChange", "applyButtonTextChange", "applyValueModeChange", "buttonsChange", "calendarOptionsChange", "cancelButtonTextChange", "dateOutOfRangeMessageChange", "dateSerializationFormatChange", "deferRenderingChange", "disabledChange", "disabledDatesChange", "displayFormatChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "intervalChange", "invalidDateMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "maxLengthChange", "minChange", "nameChange", "openedChange", "openOnFieldClickChange", "pickerTypeChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showAnalogClockChange", "showClearButtonChange", "showDropDownButtonChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "typeChange", "useMaskBehaviorChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i8.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: i9.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: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i11.GeoMapComponent, selector: "app-geo-map", inputs: ["datasetmodal"], outputs: ["createOtherComponentView"] }, { kind: "component", type: i12.DashChartComponent, selector: "app-dash-chart", inputs: ["datasetmodal"], outputs: ["getChartConfigOutPut"] }, { kind: "component", type: i13.DashTableComponent, selector: "app-dash-table", inputs: ["datasetmodal"], outputs: ["getTableConfigOutPut"] }, { kind: "component", type: i14.TableWithBarComponent, selector: "app-table-with-bar", inputs: ["datasetmodal"], outputs: ["createOtherComponentView"] }, { kind: "component", type: i15.LoaderComponent, selector: "app-loader" }, { kind: "component", type: i16.CommonHeaderComponent, selector: "lib-common-header", inputs: ["pageTitle"] }, { kind: "component", type: i17.DashTodayPreviousComponent, selector: "lib-dash-today-previous", inputs: ["datasetmodal"], outputs: ["gettodayPreviousConfigOutPut"] }, { kind: "component", type: i18.SingleCardComponent, selector: "lib-single-card", inputs: ["datasetmodal"], outputs: ["getSingleCardConfigOutPut"] }, { kind: "component", type: i19.HeatMapSupportComponent, selector: "app-heat-map", inputs: ["datasetmodal"], outputs: ["getHeatMapConfigOutPut"] }] });
|
|
609
|
+
CreateCompViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CreateCompViewComponent, selector: "app-create-comp-view", inputs: { kpiTreeData: "kpiTreeData", isHeader: "isHeader", selectedViewId: "selectedViewId" }, ngImport: i0, template: "<div class=\"flex flex-col flex-auto min-w-0\">\n <lib-common-header [pageTitle]=\"'Views Editor'\" *ngIf=\"isHeader\"></lib-common-header>\n <div>\n <div class=\"p-2 w-full\">\n <div\n class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <div class=\"flex flex-row justify-between\">\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">Dataset List <span *ngIf=\"isFilterInputs\"\n class=\"text-blue-500 cursor-pointer\"><i class=\"fa fa-pencil\"\n (click)=\"getEditDataSet()\"></i></span></div>\n <dx-select-box [items]=\"dataSettableDataSource\" (onValueChanged)=\"getDataSetDetails($event)\"\n displayExpr=\"datasetName\" valueExpr=\"datasetId\" [searchEnabled]=\"true\"\n [value]=\"selectedDataSetOnedit.datasetId\"></dx-select-box>\n </div>\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">Select View Type</div>\n <dx-select-box [items]=\"['chart','table','groupTable','others','map']\" [(ngModel)]=\"selectedViewType\"\n (onValueChanged)=\"getViewType($event)\"></dx-select-box>\n </div>\n <ng-container *ngIf=\"selectedViewType =='others'\">\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">Select Component</div>\n <dx-select-box [items]=\"componentNamesOthers\" displayExpr=\"item\" valueExpr=\"compName\"\n [(ngModel)]=\"componentName\"></dx-select-box>\n </div>\n </ng-container>\n \n\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">View Name</div>\n <dx-text-box [(ngModel)]=\"creatCompViewObject.viewName\"></dx-text-box>\n </div>\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">View Label</div>\n <dx-text-box [(ngModel)]=\"creatCompViewObject.viewLabel\"></dx-text-box>\n </div>\n </div>\n <ng-container *ngIf=\"isFilterInputs\">\n <div class=\"flex flex-row mt-2\">\n <ng-container *ngFor=\"let request of selectedDataSet.config.queryConfig.mapedFilters; let i = index\">\n <div class=\"m-2\">\n <div class=\"text-md mb-1\"> {{getCapitalize(request.localColumn)}}</div>\n <dx-date-box displayFormat=\"yyyy-MM-dd\" type=\"date\" \n (onValueChanged)=\"startDateChange($event,request)\"\n *ngIf=\"getFilter(request.localColumn)\">\n </dx-date-box>\n <dx-text-box [(ngModel)]=\"request.defaultValue\"\n *ngIf=\"!getFilter(request.localColumn)\"></dx-text-box>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <div class=\"flex flex-row mt-5 justify-center items-center\">\n <button class=\"{{commonService.btn_success_md}}\" (click)=\"addNewView()\">\n Reset View\n </button>\n <button class=\"{{commonService.btn_primary_md}} cursor-pointer mx-4 my-2\" (click)=\"createNewView()\">\n Proceed\n </button>\n\n\n </div>\n <div class=\"m-5 border\">\n <div class=\"m-2\">\n <div class=\"mt-5\">\n <app-loader *ngIf=\"isLoader\"></app-loader>\n <!-- for chart view -->\n <ng-container *ngIf=\"isGenerate\">\n <ng-container *ngIf=\"selectedViewType == 'chart'\">\n <app-dash-chart [datasetmodal]=\"dataSourceModal\"\n (getChartConfigOutPut)=\"getEmitNewChartCongig($event)\"></app-dash-chart>\n </ng-container>\n <!-- <ng-container *ngIf=\"selectedViewType == 'heatmap'\">\n <app-heat-map [datasetmodal]=\"dataSourceModal\"\n (getHeatMapConfigOutPut)=\"getEmitNewHeatMapConfig($event)\"></app-heat-map>\n </ng-container> -->\n <ng-container *ngIf=\"selectedViewType == 'map'\">\n <app-geo-map [datasetmodal]=\"dataSourceModal\"\n (createOtherComponentView)=\"getEmitNewOtherSetCongig($event)\"></app-geo-map>\n </ng-container>\n <!-- for table view -->\n <ng-container *ngIf=\"selectedViewType == 'table' || selectedViewType == 'groupTable'\">\n <app-dash-table [datasetmodal]=\"dataSourceModal\"\n (getTableConfigOutPut)=\"getEmitNewTableConfig($event)\"></app-dash-table>\n </ng-container>\n <!-- for others view -->\n <ng-container *ngIf=\"selectedViewType == 'others'\">\n <ng-container *ngIf=\"componentName == 'GammaTableWithPercentageComponent'\">\n <app-table-with-bar [datasetmodal]=\"dataSourceModal\"\n (createOtherComponentView)=\"getEmitNewOtherSetCongig($event)\"></app-table-with-bar>\n </ng-container>\n \n <ng-container\n *ngIf=\"componentName != 'GammaTableWithPercentageComponent' && componentName != 'GammaGeoChartComponent' && componentName != 'GammSingleNumberCardComponent'\">\n <lib-dash-today-previous [datasetmodal]=\"dataSourceModal\"\n (gettodayPreviousConfigOutPut)=\"getEmitNewOtherSetCongig($event)\"></lib-dash-today-previous>\n </ng-container>\n\n <ng-container\n *ngIf=\"componentName != 'GammaTableWithPercentageComponent' && componentName != 'GammaGeoChartComponent' && componentName != 'GammaTodayPreviousComponent'\">\n <lib-single-card [datasetmodal]=\"dataSourceModal\"\n (getSingleCardConfigOutPut)=\"getEmitNewOtherSetCongig($event)\">\n </lib-single-card>\n </ng-container>\n\n \n </ng-container>\n </ng-container>\n </div>\n\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.DxDateBoxComponent, selector: "dx-date-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "adaptivityEnabled", "applyButtonText", "applyValueMode", "buttons", "calendarOptions", "cancelButtonText", "dateOutOfRangeMessage", "dateSerializationFormat", "deferRendering", "disabled", "disabledDates", "displayFormat", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "interval", "invalidDateMessage", "isValid", "label", "labelMode", "max", "maxLength", "min", "name", "opened", "openOnFieldClick", "pickerType", "placeholder", "readOnly", "rtlEnabled", "showAnalogClock", "showClearButton", "showDropDownButton", "spellcheck", "stylingMode", "tabIndex", "text", "type", "useMaskBehavior", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "adaptivityEnabledChange", "applyButtonTextChange", "applyValueModeChange", "buttonsChange", "calendarOptionsChange", "cancelButtonTextChange", "dateOutOfRangeMessageChange", "dateSerializationFormatChange", "deferRenderingChange", "disabledChange", "disabledDatesChange", "displayFormatChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "intervalChange", "invalidDateMessageChange", "isValidChange", "labelChange", "labelModeChange", "maxChange", "maxLengthChange", "minChange", "nameChange", "openedChange", "openOnFieldClickChange", "pickerTypeChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showAnalogClockChange", "showClearButtonChange", "showDropDownButtonChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "typeChange", "useMaskBehaviorChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i8.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: i9.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: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i11.GeoMapComponent, selector: "app-geo-map", inputs: ["datasetmodal"], outputs: ["createOtherComponentView"] }, { kind: "component", type: i12.DashChartComponent, selector: "app-dash-chart", inputs: ["datasetmodal"], outputs: ["getChartConfigOutPut"] }, { kind: "component", type: i13.DashTableComponent, selector: "app-dash-table", inputs: ["datasetmodal"], outputs: ["getTableConfigOutPut"] }, { kind: "component", type: i14.TableWithBarComponent, selector: "app-table-with-bar", inputs: ["datasetmodal"], outputs: ["createOtherComponentView"] }, { kind: "component", type: i15.LoaderComponent, selector: "app-loader" }, { kind: "component", type: i16.CommonHeaderComponent, selector: "lib-common-header", inputs: ["pageTitle"] }, { kind: "component", type: i17.DashTodayPreviousComponent, selector: "lib-dash-today-previous", inputs: ["datasetmodal"], outputs: ["gettodayPreviousConfigOutPut"] }, { kind: "component", type: i18.SingleCardComponent, selector: "lib-single-card", inputs: ["datasetmodal"], outputs: ["getSingleCardConfigOutPut"] }] });
|
|
616
610
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CreateCompViewComponent, decorators: [{
|
|
617
611
|
type: Component,
|
|
618
|
-
args: [{ selector: 'app-create-comp-view', template: "<div class=\"flex flex-col flex-auto min-w-0\">\n <lib-common-header [pageTitle]=\"'Views Editor'\" *ngIf=\"isHeader\"></lib-common-header>\n <div>\n <div class=\"p-2 w-full\">\n <div\n class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <div class=\"flex flex-row justify-between\">\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">Dataset List <span *ngIf=\"isFilterInputs\"\n class=\"text-blue-500 cursor-pointer\"><i class=\"fa fa-pencil\"\n (click)=\"getEditDataSet()\"></i></span></div>\n <dx-select-box [items]=\"dataSettableDataSource\" (onValueChanged)=\"getDataSetDetails($event)\"\n displayExpr=\"datasetName\" valueExpr=\"datasetId\" [searchEnabled]=\"true\"\n [value]=\"selectedDataSetOnedit.datasetId\"></dx-select-box>\n </div>\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">Select View Type</div>\n <dx-select-box [items]=\"['chart','table','groupTable','others','map']\" [(ngModel)]=\"selectedViewType\"\n (onValueChanged)=\"getViewType($event)\"></dx-select-box>\n </div>\n <ng-container *ngIf=\"selectedViewType =='others'\">\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">Select Component</div>\n <dx-select-box [items]=\"componentNamesOthers\" displayExpr=\"item\" valueExpr=\"compName\"\n [(ngModel)]=\"componentName\"></dx-select-box>\n </div>\n </ng-container>\n \n\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">View Name</div>\n <dx-text-box [(ngModel)]=\"creatCompViewObject.viewName\"></dx-text-box>\n </div>\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">View Label</div>\n <dx-text-box [(ngModel)]=\"creatCompViewObject.viewLabel\"></dx-text-box>\n </div>\n </div>\n <ng-container *ngIf=\"isFilterInputs\">\n <div class=\"flex flex-row mt-2\">\n <ng-container *ngFor=\"let request of selectedDataSet.config.queryConfig.mapedFilters; let i = index\">\n <div class=\"m-2\">\n <div class=\"text-md mb-1\"> {{getCapitalize(request.localColumn)}}</div>\n <dx-date-box displayFormat=\"yyyy-MM-dd\" type=\"date\" \n (onValueChanged)=\"startDateChange($event,request)\"\n *ngIf=\"getFilter(request.localColumn)\">\n </dx-date-box>\n <dx-text-box [(ngModel)]=\"request.defaultValue\"\n *ngIf=\"!getFilter(request.localColumn)\"></dx-text-box>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <div class=\"flex flex-row mt-5 justify-center items-center\">\n <button class=\"{{commonService.btn_success_md}}\" (click)=\"addNewView()\">\n Reset View\n </button>\n <button class=\"{{commonService.btn_primary_md}} cursor-pointer mx-4 my-2\" (click)=\"createNewView()\">\n Proceed\n </button>\n\n\n </div>\n <div class=\"m-5 border\">\n <div class=\"m-2\">\n <div class=\"mt-5\">\n <app-loader *ngIf=\"isLoader\"></app-loader>\n <!-- for chart view -->\n <ng-container *ngIf=\"isGenerate\">\n <ng-container *ngIf=\"selectedViewType == 'chart'\">\n <app-dash-chart [datasetmodal]=\"dataSourceModal\"\n (getChartConfigOutPut)=\"getEmitNewChartCongig($event)\"></app-dash-chart>\n </ng-container>\n <ng-container *ngIf=\"selectedViewType == 'heatmap'\">\n <app-heat-map [datasetmodal]=\"dataSourceModal\"\n (getHeatMapConfigOutPut)=\"getEmitNewHeatMapConfig($event)\"></app-heat-map>\n </ng-container
|
|
612
|
+
args: [{ selector: 'app-create-comp-view', template: "<div class=\"flex flex-col flex-auto min-w-0\">\n <lib-common-header [pageTitle]=\"'Views Editor'\" *ngIf=\"isHeader\"></lib-common-header>\n <div>\n <div class=\"p-2 w-full\">\n <div\n class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <div class=\"flex flex-row justify-between\">\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">Dataset List <span *ngIf=\"isFilterInputs\"\n class=\"text-blue-500 cursor-pointer\"><i class=\"fa fa-pencil\"\n (click)=\"getEditDataSet()\"></i></span></div>\n <dx-select-box [items]=\"dataSettableDataSource\" (onValueChanged)=\"getDataSetDetails($event)\"\n displayExpr=\"datasetName\" valueExpr=\"datasetId\" [searchEnabled]=\"true\"\n [value]=\"selectedDataSetOnedit.datasetId\"></dx-select-box>\n </div>\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">Select View Type</div>\n <dx-select-box [items]=\"['chart','table','groupTable','others','map']\" [(ngModel)]=\"selectedViewType\"\n (onValueChanged)=\"getViewType($event)\"></dx-select-box>\n </div>\n <ng-container *ngIf=\"selectedViewType =='others'\">\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">Select Component</div>\n <dx-select-box [items]=\"componentNamesOthers\" displayExpr=\"item\" valueExpr=\"compName\"\n [(ngModel)]=\"componentName\"></dx-select-box>\n </div>\n </ng-container>\n \n\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">View Name</div>\n <dx-text-box [(ngModel)]=\"creatCompViewObject.viewName\"></dx-text-box>\n </div>\n <div class=\"mx-2 w-full\">\n <div class=\"text-md mb-2\">View Label</div>\n <dx-text-box [(ngModel)]=\"creatCompViewObject.viewLabel\"></dx-text-box>\n </div>\n </div>\n <ng-container *ngIf=\"isFilterInputs\">\n <div class=\"flex flex-row mt-2\">\n <ng-container *ngFor=\"let request of selectedDataSet.config.queryConfig.mapedFilters; let i = index\">\n <div class=\"m-2\">\n <div class=\"text-md mb-1\"> {{getCapitalize(request.localColumn)}}</div>\n <dx-date-box displayFormat=\"yyyy-MM-dd\" type=\"date\" \n (onValueChanged)=\"startDateChange($event,request)\"\n *ngIf=\"getFilter(request.localColumn)\">\n </dx-date-box>\n <dx-text-box [(ngModel)]=\"request.defaultValue\"\n *ngIf=\"!getFilter(request.localColumn)\"></dx-text-box>\n </div>\n </ng-container>\n </div>\n </ng-container>\n\n <div class=\"flex flex-row mt-5 justify-center items-center\">\n <button class=\"{{commonService.btn_success_md}}\" (click)=\"addNewView()\">\n Reset View\n </button>\n <button class=\"{{commonService.btn_primary_md}} cursor-pointer mx-4 my-2\" (click)=\"createNewView()\">\n Proceed\n </button>\n\n\n </div>\n <div class=\"m-5 border\">\n <div class=\"m-2\">\n <div class=\"mt-5\">\n <app-loader *ngIf=\"isLoader\"></app-loader>\n <!-- for chart view -->\n <ng-container *ngIf=\"isGenerate\">\n <ng-container *ngIf=\"selectedViewType == 'chart'\">\n <app-dash-chart [datasetmodal]=\"dataSourceModal\"\n (getChartConfigOutPut)=\"getEmitNewChartCongig($event)\"></app-dash-chart>\n </ng-container>\n <!-- <ng-container *ngIf=\"selectedViewType == 'heatmap'\">\n <app-heat-map [datasetmodal]=\"dataSourceModal\"\n (getHeatMapConfigOutPut)=\"getEmitNewHeatMapConfig($event)\"></app-heat-map>\n </ng-container> -->\n <ng-container *ngIf=\"selectedViewType == 'map'\">\n <app-geo-map [datasetmodal]=\"dataSourceModal\"\n (createOtherComponentView)=\"getEmitNewOtherSetCongig($event)\"></app-geo-map>\n </ng-container>\n <!-- for table view -->\n <ng-container *ngIf=\"selectedViewType == 'table' || selectedViewType == 'groupTable'\">\n <app-dash-table [datasetmodal]=\"dataSourceModal\"\n (getTableConfigOutPut)=\"getEmitNewTableConfig($event)\"></app-dash-table>\n </ng-container>\n <!-- for others view -->\n <ng-container *ngIf=\"selectedViewType == 'others'\">\n <ng-container *ngIf=\"componentName == 'GammaTableWithPercentageComponent'\">\n <app-table-with-bar [datasetmodal]=\"dataSourceModal\"\n (createOtherComponentView)=\"getEmitNewOtherSetCongig($event)\"></app-table-with-bar>\n </ng-container>\n \n <ng-container\n *ngIf=\"componentName != 'GammaTableWithPercentageComponent' && componentName != 'GammaGeoChartComponent' && componentName != 'GammSingleNumberCardComponent'\">\n <lib-dash-today-previous [datasetmodal]=\"dataSourceModal\"\n (gettodayPreviousConfigOutPut)=\"getEmitNewOtherSetCongig($event)\"></lib-dash-today-previous>\n </ng-container>\n\n <ng-container\n *ngIf=\"componentName != 'GammaTableWithPercentageComponent' && componentName != 'GammaGeoChartComponent' && componentName != 'GammaTodayPreviousComponent'\">\n <lib-single-card [datasetmodal]=\"dataSourceModal\"\n (getSingleCardConfigOutPut)=\"getEmitNewOtherSetCongig($event)\">\n </lib-single-card>\n </ng-container>\n\n \n </ng-container>\n </ng-container>\n </div>\n\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
619
613
|
}], ctorParameters: function () { return [{ type: i1.ToastrService }, { type: i2.CommonService }, { type: i3.ApplicationContentService }, { type: i4.kpicommonService }, { type: i5.Router }, { type: i5.ActivatedRoute }, { type: undefined, decorators: [{
|
|
620
614
|
type: Inject,
|
|
621
615
|
args: [APP_ENVIRONMENT]
|
|
@@ -627,4 +621,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
627
621
|
type: Input,
|
|
628
622
|
args: ['selectedViewId']
|
|
629
623
|
}] } });
|
|
630
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNvbXAtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvYXBwbGljYXRpb24tdmlldy1jb21wb25lbnRzL2NyZWF0ZS1jb21wLXZpZXcvY3JlYXRlLWNvbXAtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvYXBwbGljYXRpb24tdmlldy1jb21wb25lbnRzL2NyZWF0ZS1jb21wLXZpZXcvY3JlYXRlLWNvbXAtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLEVBQUUsS0FBSyxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUV2RixPQUFPLE1BQU0sTUFBTSx1QkFBdUIsQ0FBQztBQUszQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNwRCxNQUFNLE9BQU8sdUJBQXVCO0lBb0RsQyxZQUNVLE1BQXFCLEVBQ3RCLGFBQTRCLEVBQzNCLE9BQWtDLEVBQ2xDLFVBQTRCLEVBQzVCLE1BQWMsRUFDZCxjQUE4QixFQUNMLFdBQWdCO1FBTnpDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDdEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDM0IsWUFBTyxHQUFQLE9BQU8sQ0FBMkI7UUFDbEMsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUNMLGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBbERuRCxvQkFBZSxHQUFRLEVBQUUs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dGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcbmltcG9ydCBtb21lbnQgZnJvbSAnLi8uLi8uLi9tb21lbnQtaGVscGVyJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uQ29udGVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHBsaWNhdGlvbi1jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FeHRyYXMsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tbW9uJztcbmltcG9ydCB7IGtwaWNvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9rcGktc2VydmljZSc7XG5pbXBvcnQgeyBBUFBfRU5WSVJPTk1FTlQgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudCc7XG5cblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY3JlYXRlLWNvbXAtdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUtY29tcC12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3JlYXRlLWNvbXAtdmlldy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENyZWF0ZUNvbXBWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkga3BpVHJlZURhdGE6IGFueVxuICBpc0xvYWRlcjogYm9vbGVhbjtcbiAgaXNHZW5lcmF0ZTogYm9vbGVhbjtcbiAgaXNDcmVhdGVOZXdWaWV3OiBib29sZWFuO1xuICBpc0twaVNlbGVjdGVkOiBib29sZWFuO1xuICBpc0twaUNvbmZpZ1NlbGVjdGVkOiBib29sZWFuO1xuICBhcGlDb25maWdEYXRhOiBhbnk7XG4gIHNpbmdsZURhdGFTZXRDb25maWc6IGFueTtcbiAgc2VsZWN0ZWREYXRhU2V0OiBhbnkgPSB7fTtcbiAgZGF0YVNvdXJjZU1vZGFsOiBhbnk7XG5cbiAgZGF0YVNldHRhYmxlRGF0YVNvdXJjZTogYW55O1xuICBpc0R1cGxpZGF0ZVZpZXc6IGJvb2xlYW47XG4gIGlzRmlsdGVySW5wdXRzOiBib29sZWFuID0gZmFsc2U7XG4gIHNlbGVjdGVkRGF0YVNldE9uZWRpdDogYW55ID0ge307XG4gIHNlbGVjdGVkVmlld1R5cGU6IGFueTtcbiAgY3JlYXRDb21wVmlld09iamVjdDogYW55ID0ge307XG4gIGNvbXBvbmVudE5hbWVzT3RoZXJzID0gW1xuICAgIHsgXCJjb21wTmFtZVwiOiBcIkdhbW1hVG9kYXlQcmV2aW91c0NvbXBvbmVudFwiLCBcIml0ZW1cIjogXCJUb2RheSB2cyBQcmV2aW91cyBEYXkgXCIgfSxcbiAgICB7IFwiY29tcE5hbWVcIjogXCJHYW1tYVRhYmxlV2l0aFBlcmNlbnRhZ2VDb21wb25lbnRcIiwgXCJpdGVtXCI6IFwiVGFibGUgVmlldyB3aXRoIHBlcmNlbnRhZ2VcIiB9LFxuICAgIHsgXCJjb21wTmFtZVwiOiBcIkdhbW1TaW5nbGVOdW1iZXJDYXJkQ29tcG9uZW50XCIsIFwiaXRlbVwiOiBcIlNpbmdsZSBOdW1iZXIgQ2FyZFwiIH0sXG4gIF1cbiAgY29tcG9uZW50TmFtZXNGb3JHb29nbGVNYXAgPSBbXG4gICAgeyBcImNvbXBOYW1lXCI6IFwiR2FtbWFHZW9DaGFydENvbXBvbmVudFwiLCBcIml0ZW1cIjogXCJHZW8gQ2hhcnRcIiB9LFxuICAgIHsgXCJjb21wTmFtZVwiOiBcIkdhbW1hSGVhdENoYXJ0Q29tcG9uZW50XCIsIFwiaXRlbVwiOiBcIkhlYXQgTWFwXCIgfSxcbiAgICB7IFwiY29tcE5hbWVcIjogXCJHYW1tYUNob3JvcGxldGhNYXBDb21wb25lbnRcIiwgXCJpdGVtXCI6IFwiQ2hvcm9wbGV0IE1hcFwiIH1cbiAgXVxuICBjb21wb25lbnROYW1lOiBhbnk7XG5cbiAgZGVmYXVsdFN0YXJ0RGF0ZSA9IG1vbWVudCgpLnN1YnRyYWN0KCc3JywgJ2RheXMnKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbiAgZGVmYXVsdEVuZERhdGUgPSBtb21lbnQoKS5zdWJ0cmFjdCgnMScsICdkYXlzJykuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gIGlucHV0Vmlld0lkOiBhbnk7XG5cbiAgQElucHV0KCkgaXNIZWFkZXI6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoJ3NlbGVjdGVkVmlld0lkJylcbiAgc2V0IHNlbGVjdGVkVmlld0lkKHZhbHVlKSB7XG4gICAgaWYgKHRoaXMuZGF0YVNldHRhYmxlRGF0YVNvdXJjZSAmJiB0aGlzLmRhdGFTZXR0YWJsZURhdGFTb3VyY2UubGVuZ3RoICE9PSAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmlld1R5cGUgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5nZXRWaWV3QnlJZCh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHRoaXMuZ2V0RGF0YVNldCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlucHV0Vmlld0lkID0gdmFsdWU7XG4gICAgICB0aGlzLmdldERhdGFTZXQoKTtcbiAgICB9XG5cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxuICAgIHB1YmxpYyBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VydmljZTogQXBwbGljYXRpb25Db250ZW50U2VydmljZSxcbiAgICBwcml2YXRlIGtwaVNlcnZpY2U6IGtwaWNvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBASW5qZWN0KEFQUF9FTlZJUk9OTUVOVCkgcHJpdmF0ZSBlbnZpcm9ubWVudDogYW55XG5cbiAgKSB7XG5cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZGVmYXVsdFN0YXJ0RGF0ZSA9IG1vbWVudCgpLnN1YnRyYWN0KCc3JywgJ2RheXMnKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbiAgICB0aGlzLmRlZmF1bHRFbmREYXRlID0gbW9tZW50KCkuc3VidHJhY3QoJzEnLCAnZGF5cycpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdCA9IHtcbiAgICAgIFwidmlld05hbWVcIjogXCJcIixcbiAgICAgIFwidmlld0xhYmVsXCI6IFwiXCIsXG4gICAgICBcInZpZXdUeXBlXCI6IHRoaXMuc2VsZWN0ZWRWaWV3VHlwZVxuICAgIH1cblxuXG4gICAgdGhpcy5nZXREYXRhU2V0KCk7XG5cbiAgfVxuICBnZXRWaWV3VHlwZShlKSB7XG4gICAgaWYgKGUuZXZlbnQpIHtcbiAgICAgIHRoaXMuaXNLcGlDb25maWdTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5pc0twaVNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmlzR2VuZXJhdGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNDcmVhdGVOZXdWaWV3ID0gZmFsc2U7XG4gICAgICB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3RbJ3ZpZXdOYW1lJ10gPSB0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0TmFtZSArICcgJyArIGUudmFsdWU7XG4gICAgICB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3RbJ3ZpZXdMYWJlbCddID0gdGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldE5hbWUgKyAnICcgKyBlLnZhbHVlOztcbiAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuc2VsZWN0ZWREYXRhU2V0KVxuICAgIH1cblxuICB9XG5cblxuICBnZXREYXRhU2V0KCkge1xuICAgIHRoaXMuc2VydmljZS5nZXRBcHBEYXRhc2V0Q29uZmlncygpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG5cbiAgICAgICAgdGhpcy5kYXRhU2V0dGFibGVEYXRhU291cmNlID0gZGF0YTtcbiAgICAgICAgbGV0IHZpZXdJZCA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbJ3ZpZXdJZCddO1xuICAgICAgICBsZXQgY29udGVudFR5cGUgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWydjb250ZW50VHlwZSddO1xuICAgICAgICBpZiAoY29udGVudFR5cGUgPT0gXCJjbG9uZVwiKSB7XG4gICAgICAgICAgdGhpcy5pc0R1cGxpZGF0ZVZpZXcgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZpZXdJZCkge1xuICAgICAgICAgIHRoaXMuZ2V0Vmlld0J5SWQodmlld0lkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnB1dFZpZXdJZCkge1xuICAgICAgICAgIHRoaXMuZ2V0Vmlld0J5SWQodGhpcy5pbnB1dFZpZXdJZCk7XG4gICAgICAgIH1cblxuICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ1ZpZXcgQ3JlYXRpb24nKVxuXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldFZpZXdCeUlkKHZpZXdJZCkge1xuICAgIHRoaXMuc2VydmljZS5nZXRBcHBWaWV3Q29uZmlnKHZpZXdJZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0ID0gZGF0YTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZpZXdUeXBlID0gZGF0YS52aWV3VHlwZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGFTZXQgPSB0aGlzLmRhdGFTZXR0YWJsZURhdGFTb3VyY2UuZmluZChkYXRhc2V0ID0+IGRhdGFzZXQuZGF0YXNldElkID09PSBkYXRhLmRhdGFzZXRJZCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhU2V0T25lZGl0ID0gdGhpcy5kYXRhU2V0dGFibGVEYXRhU291cmNlLmZpbmQoZGF0YXNldCA9PiBkYXRhc2V0LmRhdGFzZXRJZCA9PT0gZGF0YS5kYXRhc2V0SWQpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZpZXdUeXBlID09IFwib3RoZXJzXCIpIHtcbiAgICAgICAgICB0aGlzLmNvbXBvbmVudE5hbWUgPSBkYXRhLmtwaUNvbmZpZy5jb21wb25lbnROYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGFTZXRbJ3NlbGVjdGVkV2lkZ2V0Q29uZmlnJ10gPSBkYXRhWydrcGlDb25maWcnXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGFTZXRbJ3NlbGVjdGVkV2lkZ2V0Q29uZmlnJ11bJ3Blcm1pc3Npb25zJ10gPSBkYXRhWydwZXJtaXNzaW9ucyddO1xuXG4gICAgICAgIC8vIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSAhPT0gJ3NxbFF1ZXJ5Jykge1xuICAgICAgICAvLyAgIHRoaXMuY3JlYXRlTmV3VmlldygpO1xuICAgICAgICAvLyB9XG5cbiAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdWaWV3IENyZWF0aW9uJylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZ2V0RGF0YVNldE5hbWUoZGF0YXNldElkKSB7XG4gICAgY29uc3QgZm91bmRPYmplY3QgPSB0aGlzLmRhdGFTZXR0YWJsZURhdGFTb3VyY2UuZmluZChkYXRhc2V0ID0+IGRhdGFzZXQuZGF0YXNldElkID09PSBkYXRhc2V0SWQpO1xuICAgIGlmIChmb3VuZE9iamVjdCkge1xuICAgICAgcmV0dXJuIGZvdW5kT2JqZWN0LmRhdGFzZXROYW1lO1xuICAgIH1cbiAgfVxuXG4gIGdldERhdGFTZXREZXRhaWxzKGV2ZW50KSB7XG4gICAgdGhpcy5zZWxlY3RlZERhdGFTZXQgPSB0aGlzLmRhdGFTZXR0YWJsZURhdGFTb3VyY2UuZmluZChkYXRhc2V0ID0+IGRhdGFzZXQuZGF0YXNldElkID09PSBldmVudC52YWx1ZSk7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRUeXBlID09IFwicXVlcnlidWlsZGVyXCIpIHtcbiAgICAgIHRoaXMuaXNGaWx0ZXJJbnB1dHMgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldFR5cGUgPT0gXCJzaW1wbGVBcGlcIikge1xuICAgICAgdGhpcy5pc0ZpbHRlcklucHV0cyA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSA9PSBcInBsYWluanNvblwiKSB7XG4gICAgICB0aGlzLmlzRmlsdGVySW5wdXRzID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSA9PSBcInNxbFF1ZXJ5XCIpIHtcbiAgICAgIHRoaXMuaXNGaWx0ZXJJbnB1dHMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzRmlsdGVySW5wdXRzID0gZmFsc2U7XG4gICAgfVxuICB9XG5cblxuICBnZXRLcGlTaW5nbGVDb25maWcoZXZlbnQpIHtcbiAgICB0aGlzLnNpbmdsZURhdGFTZXRDb25maWcgPSBldmVudC52YWx1ZTtcbiAgICB0aGlzLmlzS3BpQ29uZmlnU2VsZWN0ZWQgPSB0cnVlO1xuICB9XG5cbiAgZ2VuZXJhdGVEYXRhU2V0KCkge1xuXG4gIH1cblxuICBnZXREYXRhU2V0Rm9yTW9uZ28oZGF0YXNldCkge1xuICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsID0ge307XG4gICAgbGV0IGFwaUpzb25PYmplY3QgPSB7XG4gICAgICByZXF1ZXN0SWQ6IGRhdGFzZXQuY29uZmlnLnNlcnZpY2VJZCxcbiAgICB9O1xuICAgIGlmIChkYXRhc2V0LmNvbmZpZy5maXhPcGVyYXRpb25MZXZsZXMgJiYgZGF0YXNldC5jb25maWcuZml4T3BlcmF0aW9uTGV2bGVzLmxlbmd0aCAhPSAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YXNldC5jb25maWcuZml4T3BlcmF0aW9uTGV2bGVzKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oYXBpSnNvbk9iamVjdCwgaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG1vbl9jb25maWcgPSB0aGlzLmtwaVNlcnZpY2UuZ2V0QWxsU2V2aWNlQXBpSnNvbihhcGlKc29uT2JqZWN0KTtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0RGF0YShtb25fY29uZmlnLCBkYXRhc2V0LmNvbmZpZy5hcGkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBkYXRhW1wiUGF5bG9hZFwiXSB8fCBkYXRhO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnZGF0YSddID0gcGF5bG9hZDtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3JlcXVlc3RJZCddID0gZGF0YXNldC5jb25maWcuc2VydmljZUlkO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnYXBpJ10gPSBkYXRhc2V0LmNvbmZpZy5hcGk7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydzZWxlY3RlZFZpZXdUeXBlJ10gPSB0aGlzLnNlbGVjdGVkVmlld1R5cGU7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydzZWxlY3RlZFdpZGdldENvbmZpZyddID0gKHRoaXMuc2VsZWN0ZWREYXRhU2V0LnNlbGVjdGVkV2lkZ2V0Q29uZmlnKSA/IHRoaXMuc2VsZWN0ZWREYXRhU2V0LnNlbGVjdGVkV2lkZ2V0Q29uZmlnIDogdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNHZW5lcmF0ZSA9IHRydWU7XG5cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZ2V0RGF0YXNldEZvckltcGFsYShkYXRhc2V0KSB7XG4gICAgbGV0IHJlcXVlc3QgPSBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZztcbiAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbCA9IHt9O1xuICAgIGxldCB0cmFuc2Zvcm1lZE9iamVjdDogYW55ID0ge307XG4gICAgZm9yIChsZXQgaXRlbSBvZiByZXF1ZXN0LnJlcUZpZWxkcykge1xuICAgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMoaXRlbSlbMF07XG4gICAgICBjb25zdCB2YWx1ZSA9IE9iamVjdC52YWx1ZXMoaXRlbSlbMF07XG4gICAgICBpZiAoa2V5ID09PSAnc3RhcnREYXRlJykge1xuICAgICAgICB0cmFuc2Zvcm1lZE9iamVjdC5yZWNvcmREYXRlID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2Zvcm1lZE9iamVjdFtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJhbnNmb3JtZWRPYmplY3RbJ2ZpbHRlcnMnXSA9IHRoaXMudHJhbnNmb3JtRGF0YUZvck1GaWx0ZXIoW10sIHJlcXVlc3QubWFwZWRGaWx0ZXJzKTtcbiAgICB0cmFuc2Zvcm1lZE9iamVjdFsnc29ydGVycyddID0gcmVxdWVzdC5zb3J0ZXJzO1xuICAgIHRyYW5zZm9ybWVkT2JqZWN0W1wicGFnaW5hdGlvblJlcXVpcmVkXCJdID0gZmFsc2U7XG5cbiAgICBpZiAoZGF0YXNldC5jb25maWcuYXBpID09IFwiL2twaS9nZW5lcmljQWdncmVnYXRlUGFnaW5hdGVkS3BpU2VydmljZVJlc3BvbnNlXCIpIHtcbiAgICAgIHRyYW5zZm9ybWVkT2JqZWN0WydtZWFzdXJlcyddID0gcmVxdWVzdC5tZWFzdXJlcztcbiAgICAgIHRyYW5zZm9ybWVkT2JqZWN0WydkaW1lbnNpb25zJ10gPSByZXF1ZXN0LmRpbWVuc2lvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zZm9ybWVkT2JqZWN0Wydjb2x1bW5zJ10gPSB0aGlzLmdldEZvcm1hdE9iamVjdEZvckNvbHVtbihyZXF1ZXN0LmNvbHVtbnMpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC5oYXZpbmdzICYmIHJlcXVlc3QuaGF2aW5ncy5sZW5ndGggIT09IDApIHtcbiAgICAgIHRyYW5zZm9ybWVkT2JqZWN0WydoYXZpbmdzJ10gPSByZXF1ZXN0LmhhdmluZ3M7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2codHJhbnNmb3JtZWRPYmplY3QpO1xuXG5cblxuXG4gICAgY29uc3QgY29sdW1uRGF0YSA9IHRoaXMudHJhbnNmb3JtQ29sdW1uc0ZvckNvbHVtbnMocmVxdWVzdC5jb2x1bW5zKTtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0RGF0YSh0cmFuc2Zvcm1lZE9iamVjdCwgZGF0YXNldC5jb25maWcuYXBpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gZGF0YVsnZGF0YXNldCddO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnZGF0YSddID0gcGF5bG9hZDtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3JlcXVlc3RJZCddID0gZGF0YXNldC5jb25maWcuc2VydmljZUlkO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnYXBpJ10gPSBkYXRhc2V0LmNvbmZpZy5hcGk7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydjb2x1bW5EYXRhJ10gPSBjb2x1bW5EYXRhO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRWaWV3VHlwZSddID0gdGhpcy5zZWxlY3RlZFZpZXdUeXBlO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRXaWRnZXRDb25maWcnXSA9ICh0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZykgPyB0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZyA6IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNHZW5lcmF0ZSA9IHRydWU7XG5cbiAgICAgIH0sIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcblxuICAgICAgfVxuICAgIH0pXG5cbiAgfVxuXG5cbiAgZ2V0Rm9ybWF0T2JqZWN0Rm9yQ29sdW1uKGNvbHVtbnMpIHtcbiAgICBsZXQgY29sdW1uRGF0YSA9IFtdO1xuICAgIGNvbHVtbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IHsgYWR2YW5jZWRDb2x1bW4sIGNvbHVtbk5hbWUsIGVucmljaEZ1bmN0aW9uLCBkYXRhRmllbGQgfSA9IGVsZW1lbnQ7XG4gICAgICBjb2x1bW5EYXRhLnB1c2goe1xuICAgICAgICBcImFkdmFuY2VkQ29sdW1uXCI6IGFkdmFuY2VkQ29sdW1uLFxuICAgICAgICBcImNvbHVtbk5hbWVcIjogY29sdW1uTmFtZSxcbiAgICAgICAgXCJlbnJpY2hGdW5jdGlvblwiOiBlbnJpY2hGdW5jdGlvbixcbiAgICAgICAgXCJhbGlhc05hbWVcIjogZGF0YUZpZWxkXG4gICAgICB9KVxuICAgIH0pO1xuICAgIHJldHVybiBjb2x1bW5EYXRhO1xuICB9XG5cblxuICB0cmFuc2Zvcm1Db2x1bW5zRm9yQ29sdW1ucyhpbnB1dENvbHVtbnMpIHtcbiAgICBjb25zdCBjb2x1bW5zID0gW107XG5cbiAgICBpbnB1dENvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgY29sdW1ucy5wdXNoKHtcbiAgICAgICAgZGF0YUZpZWxkOiBjb2wuZGF0YUZpZWxkLFxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICBjYXB0aW9uOiBjb2wuY2FwdGlvbixcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbHVtbnM7XG4gIH1cblxuXG4gIHRyYW5zZm9ybURhdGFGb3JNRmlsdGVyKGZpbHRlcmRhdGEsIG1hcERhdGEpIHtcblxuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBtYXBEYXRhLmZvckVhY2gobWFwcGluZyA9PiB7XG4gICAgICBsZXQgcmVzdWx0T2JqID0ge1xuICAgICAgICBjb2x1bW5OYW1lOiBtYXBwaW5nLnNlcnZlckNvbHVtbixcbiAgICAgICAgZGF0YVR5cGU6IG1hcHBpbmcuZGF0YVR5cGUsXG4gICAgICAgIG9wZXJhdG9yOiBtYXBwaW5nLm9wZXJhdG9yTmFtZSxcbiAgICAgICAgdmFsdWU6IG1hcHBpbmcuZGVmYXVsdFZhbHVlXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBmaWx0ZXIgPSBmaWx0ZXJkYXRhLmZpbmQoZiA9PiBmLmhhc093blByb3BlcnR5KG1hcHBpbmcubG9jYWxDb2x1bW4pKTtcbiAgICAgIGlmIChtYXBwaW5nLnNlcnZlckNvbHVtbi5pbmNsdWRlcygnZGF0ZScpICYmIHR5cGVvZiByZXN1bHRPYmoudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChtYXBwaW5nLmZvcm1hdHRlciAmJiBtYXBwaW5nLmZvcm1hdHRlciAhPT0gXCJcIikge1xuICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQobWFwcGluZy5mb3JtYXR0ZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQodGhpcy5lbnZpcm9ubWVudC5kYXRhRm9ybWF0KTtcblxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgaWYgKG1hcHBpbmcuZGVmYXVsdFZhbHVlID09PSBcIlwiKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJbbWFwcGluZy5sb2NhbENvbHVtbl07XG5cbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJlc3VsdE9iai5vcGVyYXRvciA9IFwiaW5cIjtcbiAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1hcHBpbmcuc2VydmVyQ29sdW1uLmluY2x1ZGVzKCdkYXRlJykgJiYgdHlwZW9mIHJlc3VsdE9iai52YWx1ZSA9PT0gJ3N0cmluZycpIHtcblxuICAgICAgICAgICAgaWYgKG1hcHBpbmcuZm9ybWF0dGVyICYmIG1hcHBpbmcuZm9ybWF0dGVyICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQobWFwcGluZy5mb3JtYXR0ZXIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gbW9tZW50KHJlc3VsdE9iai52YWx1ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdCh0aGlzLmVudmlyb25tZW50LmRhdGFGb3JtYXQpO1xuXG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChtYXBwaW5nLmRlZmF1bHRWYWx1ZSA9PT0gXCJcIikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaChyZXN1bHRPYmopO1xuICAgIH0pO1xuICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIob2JqID0+IG9iai52YWx1ZSAhPT0gbnVsbCAmJiBvYmoudmFsdWUgIT09IFwiXCIpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXREYXRhc2V0Rm9yU2ltcGxlQXBpSW1wYWxhKGRhdGFzZXQ6IGFueSkge1xuICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsID0ge307XG5cbiAgICBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnMuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgaWYgKGZpbHRlci5oYXNPd25Qcm9wZXJ0eShmaWx0ZXIubG9jYWxDb2x1bW4pKSB7XG4gICAgICAgIGZpbHRlci5kZWZhdWx0VmFsdWUgPSBmaWx0ZXJbZmlsdGVyLmxvY2FsQ29sdW1uXTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChkYXRhc2V0LmNvbmZpZy5hcGlUeXBlID09PSBcInBvc3RcIikge1xuICAgICAgbGV0IHNlcnZpY2VKc29uOiBhbnkgPSB7fTtcbiAgICAgIGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5mb3JFYWNoKChmaWx0ZXI6IGFueSkgPT4ge1xuICAgICAgICBsZXQgZGF0ZWNvbHVtbiA9IGZpbHRlci5zZXJ2ZXJDb2x1bW4udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGRhdGVjb2x1bW4uaW5jbHVkZXMoJ2RhdGUnKSAmJiB0eXBlb2YgZmlsdGVyLmRhdGFUeXBlID09PSAnc3RyaW5nJykge1xuXG4gICAgICAgICAgaWYgKGZpbHRlci5mb3JtYXR0ZXIgJiYgZmlsdGVyLmZvcm1hdHRlciAhPT0gXCJcIikge1xuICAgICAgICAgICAgc2VydmljZUpzb25bZmlsdGVyLnNlcnZlckNvbHVtbl0gPSBtb21lbnQoZmlsdGVyLmRlZmF1bHRWYWx1ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdChmaWx0ZXIuZm9ybWF0dGVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VydmljZUpzb25bZmlsdGVyLnNlcnZlckNvbHVtbl0gPSBtb21lbnQoZmlsdGVyLmRlZmF1bHRWYWx1ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdCh0aGlzLmVudmlyb25tZW50LmRhdGFGb3JtYXQpO1xuXG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VydmljZUpzb25bZmlsdGVyLnNlcnZlckNvbHVtbl0gPSBmaWx0ZXIuZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zZXJ2aWNlLmdldFNpbXBsZUFwaVBvc3RSZXF1ZXN0KGRhdGFzZXQuY29uZmlnLmFwaSwgc2VydmljZUpzb24pLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXlsb2FkID0gZGF0YVtcIlBheWxvYWRcIl0gfHwgZGF0YTtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnZGF0YSddID0gcGF5bG9hZDtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsncmVxdWVzdElkJ10gPSBkYXRhc2V0LmNvbmZpZy5zZXJ2aWNlSWQ7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2FwaSddID0gZGF0YXNldC5jb25maWcuYXBpO1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydzZWxlY3RlZFZpZXdUeXBlJ10gPSB0aGlzLnNlbGVjdGVkVmlld1R5cGU7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkV2lkZ2V0Q29uZmlnJ10gPSAodGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcpID8gdGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNHZW5lcmF0ZSA9IHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGRhdGFzZXQuY29uZmlnLmFwaVR5cGUgPT09IFwiZ2V0XCIpIHtcbiAgICAgIC8vIENvbnN0cnVjdCBHRVQgVVJMIHdpdGggcGFyYW1ldGVyc1xuICAgICAgbGV0IHJlcXVlc3RVcmwgPSBkYXRhc2V0LmNvbmZpZy5hcGkgKyBcIj9cIjtcbiAgICAgIGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5mb3JFYWNoKChmaWx0ZXI6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICByZXF1ZXN0VXJsICs9IGAke2ZpbHRlci5zZXJ2ZXJDb2x1bW59PSR7ZmlsdGVyLmRlZmF1bHRWYWx1ZX1gO1xuICAgICAgICBpZiAoaW5kZXggPCBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHJlcXVlc3RVcmwgKz0gXCImXCI7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBNYWtlIEdFVCByZXF1ZXN0XG4gICAgICB0aGlzLnNlcnZpY2UuZ2V0U2ltcGxlQXBpR2V0UmVxdWVzdChyZXF1ZXN0VXJsKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbXCJQYXlsb2FkXCJdIHx8IGRhdGE7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2RhdGEnXSA9IHBheWxvYWQ7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3JlcXVlc3RJZCddID0gZGF0YXNldC5jb25maWcuc2VydmljZUlkO1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydhcGknXSA9IGRhdGFzZXQuY29uZmlnLmFwaTtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRWaWV3VHlwZSddID0gdGhpcy5zZWxlY3RlZFZpZXdUeXBlO1xuXG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkV2lkZ2V0Q29uZmlnJ10gPSAodGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcpID8gdGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNHZW5lcmF0ZSA9IHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgZ2V0RWRpdERhdGFTZXQoKSB7XG4gICAgbGV0IGNvbnRlbnRWaWV3SWQgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWydwYWdlSWQnXTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldElkKSB7XG4gICAgICBpZiAoY29udGVudFZpZXdJZCkge1xuICAgICAgICBsZXQgbmF2aWdhdGlvbjogTmF2aWdhdGlvbkV4dHJhcyA9IHtcbiAgICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgICAgJ2RhdGFzZXRJZCc6IHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRJZCxcbiAgICAgICAgICAgICd2aWV3SWQnOiB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3Qudmlld0lkLFxuICAgICAgICAgICAgJ3BhZ2VJZCc6IGNvbnRlbnRWaWV3SWRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnYXBwcy9jb250cm9sUGFuZWwvYXBwbGljYXRpb25EYXRhc2V0J10sIG5hdmlnYXRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IG5hdmlnYXRpb246IE5hdmlnYXRpb25FeHRyYXMgPSB7XG4gICAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAgICdkYXRhc2V0SWQnOiB0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0SWQsXG4gICAgICAgICAgICAndmlld0lkJzogdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0LnZpZXdJZCxcblxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydhcHBzL2NvbnRyb2xQYW5lbC9hcHBsaWNhdGlvbkRhdGFzZXQnXSwgbmF2aWdhdGlvbik7XG4gICAgICB9XG5cblxuICAgIH1cbiAgfVxuICBjcmVhdGVOZXdWaWV3KCkge1xuICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuICAgIHRoaXMuaXNHZW5lcmF0ZSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZykge1xuICAgICAgdGhpcy5pc0xvYWRlciA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRUeXBlID09IFwibW9uZ29cIikge1xuICAgICAgdGhpcy5nZXREYXRhU2V0Rm9yTW9uZ28odGhpcy5zZWxlY3RlZERhdGFTZXQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldFR5cGUgPT0gXCJxdWVyeWJ1aWxkZXJcIikge1xuICAgICAgdGhpcy5nZXREYXRhc2V0Rm9ySW1wYWxhKHRoaXMuc2VsZWN0ZWREYXRhU2V0KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRUeXBlID09IFwic2ltcGxlQXBpXCIpIHtcbiAgICAgIHRoaXMuZ2V0RGF0YXNldEZvclNpbXBsZUFwaUltcGFsYSh0aGlzLnNlbGVjdGVkRGF0YVNldCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSA9PSBcInBsYWluanNvblwiKSB7XG5cbiAgICAgIHRoaXMuZ2V0RGF0YXNldEZvclBsYWluSnNvbih0aGlzLnNlbGVjdGVkRGF0YVNldCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSA9PSBcInNxbFF1ZXJ5XCIpIHtcbiAgICAgIHRoaXMuZ2V0RGF0YXNldEZvclNxbFRlbXBsYXRlKHRoaXMuc2VsZWN0ZWREYXRhU2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcy5nZXREYXRhc2V0Rm9ySW1wYWxhKHRoaXMuc2VsZWN0ZWREYXRhU2V0KVxuICAgIH1cbiAgfVxuXG5cbiAgY3JlYXRlT3RoZXJDb21wb25lbnRWaWV3KCkge1xuICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdFsnZGF0YXNldElkJ10gPSB0aGlzLnNlbGVjdGVkRGF0YVNldFsnZGF0YXNldElkJ107XG4gICAgdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0WydrcGlDb25maWcnXSA9IHtcbiAgICAgIFwic2VydmljZUlkXCI6IFwiXCIsXG4gICAgICBcImFwaVwiOiBcIlwiLFxuICAgICAgXCJkaXNwbGF5VHlwZVwiOiBcImNoYXJ0XCIsXG4gICAgICBcImZvcm1hdGVcIjogXCJcIixcbiAgICAgIFwiY29tcG9uZW50TmFtZVwiOiB0aGlzLmNvbXBvbmVudE5hbWUsXG4gICAgICBcImRhdGFDb25maWdcIjoge1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5pc0xvYWRlciA9IHRydWU7XG4gICAgaWYgKHRoaXMuaXNEdXBsaWRhdGVWaWV3KSB7XG4gICAgICB0aGlzLmNyZWF0ZUFwcENvbmZpZ1ZpZXcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuY3JlYXRDb21wVmlld09iamVjdFsndmlld0lkJ10pIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLnVwZGF0ZUFwcFZpZXdDb25maWcodGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0KS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdCA9IHtcbiAgICAgICAgICAgICAgXCJ2aWV3TmFtZVwiOiBcIlwiLFxuICAgICAgICAgICAgICBcInZpZXdMYWJlbFwiOiBcIlwiLFxuICAgICAgICAgICAgICBcInZpZXdUeXBlXCI6IFwiXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXNDcmVhdGVOZXdWaWV3ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKCdWaWV3IFVwZGF0ZSBTdWNjZXNzZnVsbHknKVxuICAgICAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnVmlldyBDcmVhdGlvbicpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jcmVhdGVBcHBDb25maWdWaWV3KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuXG5cblxuXG4gIGdldENhcGl0YWxpemUoaXRlbTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuY29tbW9uU2VydmljZS5jb252ZXJ0VG9TcGFjZVNlcGFyYXRlZENhcGl0YWxpemVkKGl0ZW0pXG4gIH1cbiAgZ2V0RmlsdGVyKGl0ZW0pIHtcbiAgICBsZXQgY29sX25hbWUgPSBpdGVtLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGNvbF9uYW1lLmluY2x1ZGVzKCdkYXRlJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc3RhcnREYXRlQ2hhbmdlKGUsIGl0ZW0pIHtcbiAgICB0aGlzLmlzQ3JlYXRlTmV3VmlldyA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSA9PSBcInNpbXBsZUFwaVwiKSB7XG4gICAgICBpdGVtLmRlZmF1bHRWYWx1ZSA9IG1vbWVudChlLnZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpXG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW0uZGVmYXVsdFZhbHVlID0gbW9tZW50KGUudmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIilcbiAgICB9XG5cbiAgfVxuXG4gIGdvdG9WaWV3c3NldCgpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9hcHBzL2NvbnRyb2xQYW5lbC9hcHBsaWNhdGlvblZpZXdzLyddKVxuICB9XG5cblxuICBnZXRFbWl0TmV3VGFibGVDb25maWcoZGF0YSkge1xuXG4gICAgZGF0YVsnZGF0YXNldElkJ10gPSB0aGlzLnNlbGVjdGVkRGF0YVNldFsnZGF0YXNldElkJ107XG4gICAgdGhpcy5jcmVhdGVWaWV3Q29uZmlnKGRhdGEpO1xuXG4gICAgLy8gdGhpcy5nZXRWaWV3Q29tcG9uZW50Q29uZmlnLmVtaXQoZGF0YSk7XG4gIH1cbiAgZ2V0RW1pdE5ld0hlYXRNYXBDb25maWcoZGF0YSkge1xuICAgIGRhdGFbJ2RhdGFzZXRJZCddID0gdGhpcy5zZWxlY3RlZERhdGFTZXRbJ2RhdGFzZXRJZCddO1xuICAgIHRoaXMuY3JlYXRlVmlld0NvbmZpZyhkYXRhKTtcblxuICAgIC8vIHRoaXMuZ2V0Vmlld0NvbXBvbmVudENvbmZpZy5lbWl0KGRhdGEpO1xuICB9XG5cblxuICBnZXRFbWl0TmV3Q2hhcnRDb25naWcoZGF0YSkge1xuXG4gICAgZGF0YVsnZGF0YXNldElkJ10gPSB0aGlzLnNlbGVjdGVkRGF0YVNldFsnZGF0YXNldElkJ107XG4gICAgdGhpcy5jcmVhdGVWaWV3Q29uZmlnKGRhdGEpO1xuXG4gICAgLy8gdGhpcy5nZXRWaWV3Q29tcG9uZW50Q29uZmlnLmVtaXQoZGF0YSk7XG4gIH1cblxuICBnZXRFbWl0TmV3T3RoZXJTZXRDb25naWcoZGF0YSkge1xuICAgIGRhdGFbJ2RhdGFzZXRJZCddID0gdGhpcy5zZWxlY3RlZERhdGFTZXRbJ2RhdGFzZXRJZCddO1xuICAgIHRoaXMuY3JlYXRlVmlld0NvbmZpZyhkYXRhKTtcbiAgICAvLyB0aGlzLmdldFZpZXdDb21wb25lbnRDb25maWcuZW1pdChkYXRhKTtcbiAgfVxuXG4gIGNyZWF0ZVZpZXdDb25maWcoZGF0YSkge1xuICAgIFxuICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdFsnZGF0YXNldElkJ10gPSBkYXRhWydkYXRhc2V0SWQnXTtcbiAgICB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3RbJ3ZpZXdUeXBlJ10gPSB0aGlzLnNlbGVjdGVkVmlld1R5cGU7XG4gICAgdGhpcy5pc0xvYWRlciA9IHRydWU7XG4gICAgdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0WydrcGlDb25maWcnXSA9IGRhdGFbJ2twaUNvbmZpZyddO1xuICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdFsncGVybWlzc2lvbnMnXSA9IGRhdGFbJ3Blcm1pc3Npb25zJ107XG5cblxuICAgIGlmICh0aGlzLnNlbGVjdGVkVmlld1R5cGUgPT0gXCJvdGhlcnNcIikge1xuICAgICAgdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0WydrcGlDb25maWcnXS5jb21wb25lbnROYW1lID0gdGhpcy5jb21wb25lbnROYW1lO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyh0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3QpO1xuICAgIGlmICh0aGlzLmlzRHVwbGlkYXRlVmlldykge1xuICAgICAgdGhpcy5jcmVhdGVBcHBDb25maWdWaWV3KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3RbJ3ZpZXdJZCddKSB7XG4gICAgICAgIHRoaXMuc2VydmljZS51cGRhdGVBcHBWaWV3Q29uZmlnKHRoaXMuY3JlYXRDb21wVmlld09iamVjdCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzQ3JlYXRlTmV3VmlldyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcygnVmlldyBVcGRhdGUgU3VjY2Vzc2Z1bGx5JylcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLmlzSGVhZGVyKSB7XG4gICAgICAgICAgICAvLyAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FwcHMvY29udHJvbFBhbmVsL2FwcGxpY2F0aW9uVmlld3MvJ10pXG5cbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ1ZpZXcgQ3JlYXRpb24nKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3JlYXRlQXBwQ29uZmlnVmlldygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZUFwcENvbmZpZ1ZpZXcoKSB7XG4gICAgdGhpcy5zZXJ2aWNlLmNyZWF0ZUFwcFZpZXdDb25maWcodGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuXG4gICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoJ1ZpZXcgQ3JlYXRlZCBTdWNjZXNzZnVsbHknKVxuICAgICAgICB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3QgPSB7XG4gICAgICAgICAgXCJ2aWV3TmFtZVwiOiBcIlwiLFxuICAgICAgICAgIFwidmlld0xhYmVsXCI6IFwiXCIsXG4gICAgICAgICAgXCJ2aWV3VHlwZVwiOiBcIlwiXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAvLyBpZiAodGhpcy5pc0hlYWRlcikge1xuICAgICAgICAvLyAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FwcHMvY29udHJvbFBhbmVsL2FwcGxpY2F0aW9uVmlld3MvJ10pXG5cbiAgICAgICAgLy8gfVxuICAgICAgICAvLyB0aGlzLmFkZE5ld1ZpZXcoKTtcblxuICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ1ZpZXcgQ3JlYXRpb24nKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBhZGROZXdWaWV3KCkge1xuICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdCA9IHtcbiAgICAgIFwidmlld05hbWVcIjogXCJcIixcbiAgICAgIFwidmlld0xhYmVsXCI6IFwiXCIsXG4gICAgICBcInZpZXdUeXBlXCI6IFwiXCJcbiAgICB9XG4gICAgdGhpcy5pc0dlbmVyYXRlID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZERhdGFTZXRPbmVkaXQgPSB7fTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgJ3ZpZXdJZCc6IG51bGwsXG4gICAgICAgICdjb250ZW50VHlwZSc6IG51bGwsXG4gICAgICB9LFxuICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJ1xuICAgIH0pXG4gIH1cblxuXG4gIGdldERhdGFzZXRGb3JQbGFpbkpzb24oZGF0YXNldCkge1xuICAgIGxldCByZXF1ZXN0YXBpID0gZGF0YXNldC5jb25maWcuYXBpICsgJz9kYXRhc2V0SWQ9JyArIGRhdGFzZXQuZGF0YXNldElkO1xuICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsID0ge307XG4gICAgdGhpcy5zZXJ2aWNlLmdldEpzb25EYXRhc2V0UGF5bG9hZChyZXF1ZXN0YXBpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnZGF0YSddID0gZGF0YS5zbGljZSgwLCAxKTtcblxuICAgICAgICBjb25zdCBwYXlsb2FkID0gZGF0YVtcIlBheWxvYWRcIl0gfHwgZGF0YTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2RhdGEnXSA9IHBheWxvYWQ7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydyZXF1ZXN0SWQnXSA9IGRhdGFzZXQuY29uZmlnLnNlcnZpY2VJZDtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2FwaSddID0gZGF0YXNldC5jb25maWcuYXBpO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRWaWV3VHlwZSddID0gdGhpcy5zZWxlY3RlZFZpZXdUeXBlO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRXaWRnZXRDb25maWcnXSA9ICh0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZykgPyB0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZyA6IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzR2VuZXJhdGUgPSB0cnVlO1xuXG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldERhdGFzZXRGb3JTcWxUZW1wbGF0ZShkYXRhc2V0KSB7XG4gICAgbGV0IHJlcXVlc3RBcCA9IGRhdGFzZXQuY29uZmlnLmFwaTtcbiAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbCA9IHt9O1xuICAgIGxldCByZXF1ZXN0X3BhcmFtcyA9IHtcbiAgICAgICdkYkNvbmZpZyc6IGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLmRiQ29uZmlnLFxuICAgICAgJ2RhdGFiYXNlTmFtZSc6IGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLmRhdGFiYXNlTmFtZSxcbiAgICAgICdmaWx0ZXJzJzogdGhpcy50cmFuc2Zvcm1EYXRhRm9yTUZpbHRlckZvclNRbChkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnMpLFxuICAgICAgJ3RlbXBsYXRlUXVlcnknOiBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy50ZW1wbGF0ZVF1ZXJ5LFxuICAgICAgJ2VucmljaG1lbnRzJzogZGF0YXNldC5jb25maWcucXVlcnlDb25maWcuZW5yaWNobWVudHMsXG4gICAgfVxuXG4gICAgdGhpcy5zZXJ2aWNlLmdlbmVyaWNTcWxRdWVyeVJlc3BvbnNlKHJlcXVlc3RBcCwgcmVxdWVzdF9wYXJhbXMpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG5cbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbXCJQYXlsb2FkXCJdIHx8IGRhdGE7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydkYXRhJ10gPSBwYXlsb2FkO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsncmVxdWVzdElkJ10gPSBkYXRhc2V0LmNvbmZpZy5zZXJ2aWNlSWQ7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydhcGknXSA9IGRhdGFzZXQuY29uZmlnLmFwaTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkVmlld1R5cGUnXSA9IHRoaXMuc2VsZWN0ZWRWaWV3VHlwZTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkV2lkZ2V0Q29uZmlnJ10gPSAodGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcpID8gdGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcgOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0dlbmVyYXRlID0gdHJ1ZTtcblxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG4gIHRyYW5zZm9ybURhdGFGb3JNRmlsdGVyRm9yU1FsKG1hcERhdGEpIHtcblxuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBtYXBEYXRhLmZvckVhY2gobWFwcGluZyA9PiB7XG4gICAgICBsZXQgcmVzdWx0T2JqID0ge1xuICAgICAgICBjb2x1bW5OYW1lOiBtYXBwaW5nLnNlcnZlckNvbHVtbixcbiAgICAgICAgZGF0YVR5cGU6IG1hcHBpbmcuZGF0YVR5cGUsXG4gICAgICAgIG9wZXJhdG9yOiBtYXBwaW5nLm9wZXJhdG9yTmFtZSxcbiAgICAgICAgYWxpYXNDb2x1bW5OYW1lOiBtYXBwaW5nLmxvY2FsQ29sdW1uLFxuICAgICAgICAvLyB2YWx1ZTogKG1hcHBpbmcub3BlcmF0b3JOYW1lID09IFwiaW5cIiB8fCBtYXBwaW5nLm9wZXJhdG9yTmFtZSA9PSBcIm5vdEluXCIpID8gW21hcHBpbmcuZGVmYXVsdFZhbHVlXSA6IG1hcHBpbmcuZGVmYXVsdFZhbHVlXG4gICAgICAgIHZhbHVlOiBtYXBwaW5nLmRlZmF1bHRWYWx1ZVxuICAgICAgfTtcbiAgICAgIGlmIChtYXBwaW5nLnNlcnZlckNvbHVtbi5pbmNsdWRlcygnZGF0ZScpICYmIHR5cGVvZiByZXN1bHRPYmoudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChtYXBwaW5nLmZvcm1hdHRlciAmJiBtYXBwaW5nLmZvcm1hdHRlciAhPT0gXCJcIikge1xuICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQobWFwcGluZy5mb3JtYXR0ZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQodGhpcy5lbnZpcm9ubWVudC5kYXRhRm9ybWF0KTtcblxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdC5wdXNoKHJlc3VsdE9iaik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtYXV0byBtaW4tdy0wXCI+XG4gICAgPGxpYi1jb21tb24taGVhZGVyIFtwYWdlVGl0bGVdPVwiJ1ZpZXdzIEVkaXRvcidcIiAqbmdJZj1cImlzSGVhZGVyXCI+PC9saWItY29tbW9uLWhlYWRlcj5cbiAgICA8ZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicC0yIHctZnVsbFwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibS0zIHAtNCBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQtbGcgc2hhZG93LW1kIGRhcms6YmctZ3JheS04MDAgZGFyazpib3JkZXItZ3JheS03MDBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTIgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+RGF0YXNldCBMaXN0IDxzcGFuICpuZ0lmPVwiaXNGaWx0ZXJJbnB1dHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtYmx1ZS01MDAgY3Vyc29yLXBvaW50ZXJcIj48aSBjbGFzcz1cImZhIGZhLXBlbmNpbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ2V0RWRpdERhdGFTZXQoKVwiPjwvaT48L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwiZGF0YVNldHRhYmxlRGF0YVNvdXJjZVwiIChvblZhbHVlQ2hhbmdlZCk9XCJnZXREYXRhU2V0RGV0YWlscygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5RXhwcj1cImRhdGFzZXROYW1lXCIgdmFsdWVFeHByPVwiZGF0YXNldElkXCIgW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkRGF0YVNldE9uZWRpdC5kYXRhc2V0SWRcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5TZWxlY3QgVmlldyBUeXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwiWydjaGFydCcsJ3RhYmxlJywnZ3JvdXBUYWJsZScsJ290aGVycycsJ21hcCddXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFZpZXdUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwiZ2V0Vmlld1R5cGUoJGV2ZW50KVwiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFZpZXdUeXBlID09J290aGVycydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5TZWxlY3QgQ29tcG9uZW50PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW2l0ZW1zXT1cImNvbXBvbmVudE5hbWVzT3RoZXJzXCIgZGlzcGxheUV4cHI9XCJpdGVtXCIgdmFsdWVFeHByPVwiY29tcE5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbXBvbmVudE5hbWVcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTIgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+VmlldyBOYW1lPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJjcmVhdENvbXBWaWV3T2JqZWN0LnZpZXdOYW1lXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPlZpZXcgTGFiZWw8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cImNyZWF0Q29tcFZpZXdPYmplY3Qudmlld0xhYmVsXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRmlsdGVySW5wdXRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJlcXVlc3Qgb2Ygc2VsZWN0ZWREYXRhU2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTFcIj4ge3tnZXRDYXBpdGFsaXplKHJlcXVlc3QubG9jYWxDb2x1bW4pfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LWRhdGUtYm94IGRpc3BsYXlGb3JtYXQ9XCJ5eXl5LU1NLWRkXCIgdHlwZT1cImRhdGVcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJzdGFydERhdGVDaGFuZ2UoJGV2ZW50LHJlcXVlc3QpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0RmlsdGVyKHJlcXVlc3QubG9jYWxDb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHgtZGF0ZS1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cInJlcXVlc3QuZGVmYXVsdFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWdldEZpbHRlcihyZXF1ZXN0LmxvY2FsQ29sdW1uKVwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBtdC01IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9zdWNjZXNzX21kfX1cIiAoY2xpY2spPVwiYWRkTmV3VmlldygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNldCBWaWV3XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9wcmltYXJ5X21kfX0gY3Vyc29yLXBvaW50ZXIgbXgtNCBteS0yXCIgKGNsaWNrKT1cImNyZWF0ZU5ld1ZpZXcoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2VlZFxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tNSBib3JkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWxvYWRlciAqbmdJZj1cImlzTG9hZGVyXCI+PC9hcHAtbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gZm9yIGNoYXJ0IHZpZXcgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzR2VuZXJhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVmlld1R5cGUgPT0gJ2NoYXJ0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1kYXNoLWNoYXJ0IFtkYXRhc2V0bW9kYWxdPVwiZGF0YVNvdXJjZU1vZGFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2V0Q2hhcnRDb25maWdPdXRQdXQpPVwiZ2V0RW1pdE5ld0NoYXJ0Q29uZ2lnKCRldmVudClcIj48L2FwcC1kYXNoLWNoYXJ0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVmlld1R5cGUgPT0gJ2hlYXRtYXAnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWhlYXQtbWFwIFtkYXRhc2V0bW9kYWxdPVwiZGF0YVNvdXJjZU1vZGFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2V0SGVhdE1hcENvbmZpZ091dFB1dCk9XCJnZXRFbWl0TmV3SGVhdE1hcENvbmZpZygkZXZlbnQpXCI+PC9hcHAtaGVhdC1tYXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRWaWV3VHlwZSA9PSAnbWFwJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1nZW8tbWFwIFtkYXRhc2V0bW9kYWxdPVwiZGF0YVNvdXJjZU1vZGFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNyZWF0ZU90aGVyQ29tcG9uZW50Vmlldyk9XCJnZXRFbWl0TmV3T3RoZXJTZXRDb25naWcoJGV2ZW50KVwiPjwvYXBwLWdlby1tYXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGZvciB0YWJsZSB2aWV3IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRWaWV3VHlwZSA9PSAndGFibGUnIHx8IHNlbGVjdGVkVmlld1R5cGUgPT0gJ2dyb3VwVGFibGUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWRhc2gtdGFibGUgW2RhdGFzZXRtb2RhbF09XCJkYXRhU291cmNlTW9kYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZXRUYWJsZUNvbmZpZ091dFB1dCk9XCJnZXRFbWl0TmV3VGFibGVDb25maWcoJGV2ZW50KVwiPjwvYXBwLWRhc2gtdGFibGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGZvciBvdGhlcnMgdmlldyAgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFZpZXdUeXBlID09ICdvdGhlcnMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tcG9uZW50TmFtZSA9PSAnR2FtbWFUYWJsZVdpdGhQZXJjZW50YWdlQ29tcG9uZW50J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtdGFibGUtd2l0aC1iYXIgW2RhdGFzZXRtb2RhbF09XCJkYXRhU291cmNlTW9kYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3JlYXRlT3RoZXJDb21wb25lbnRWaWV3KT1cImdldEVtaXROZXdPdGhlclNldENvbmdpZygkZXZlbnQpXCI+PC9hcHAtdGFibGUtd2l0aC1iYXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29tcG9uZW50TmFtZSAhPSAnR2FtbWFUYWJsZVdpdGhQZXJjZW50YWdlQ29tcG9uZW50JyAmJiBjb21wb25lbnROYW1lICE9ICdHYW1tYUdlb0NoYXJ0Q29tcG9uZW50JyAmJiAgY29tcG9uZW50TmFtZSAhPSAnR2FtbVNpbmdsZU51bWJlckNhcmRDb21wb25lbnQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1kYXNoLXRvZGF5LXByZXZpb3VzIFtkYXRhc2V0bW9kYWxdPVwiZGF0YVNvdXJjZU1vZGFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2V0dG9kYXlQcmV2aW91c0NvbmZpZ091dFB1dCk9XCJnZXRFbWl0TmV3T3RoZXJTZXRDb25naWcoJGV2ZW50KVwiPjwvbGliLWRhc2gtdG9kYXktcHJldmlvdXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29tcG9uZW50TmFtZSAhPSAnR2FtbWFUYWJsZVdpdGhQZXJjZW50YWdlQ29tcG9uZW50JyAmJiBjb21wb25lbnROYW1lICE9ICdHYW1tYUdlb0NoYXJ0Q29tcG9uZW50JyAmJiBjb21wb25lbnROYW1lICE9ICdHYW1tYVRvZGF5UHJldmlvdXNDb21wb25lbnQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1zaW5nbGUtY2FyZCBbZGF0YXNldG1vZGFsXT1cImRhdGFTb3VyY2VNb2RhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdldFNpbmdsZUNhcmRDb25maWdPdXRQdXQpPVwiZ2V0RW1pdE5ld090aGVyU2V0Q29uZ2lnKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1zaW5nbGUtY2FyZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
624
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNvbXAtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvYXBwbGljYXRpb24tdmlldy1jb21wb25lbnRzL2NyZWF0ZS1jb21wLXZpZXcvY3JlYXRlLWNvbXAtdmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvYXBwbGljYXRpb24tdmlldy1jb21wb25lbnRzL2NyZWF0ZS1jb21wLXZpZXcvY3JlYXRlLWNvbXAtdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLEVBQUUsS0FBSyxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUV2RixPQUFPLE1BQU0sTUFBTSx1QkFBdUIsQ0FBQztBQUszQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU3BELE1BQU0sT0FBTyx1QkFBdUI7SUFnRGxDLFlBQ1UsTUFBcUIsRUFDdEIsYUFBNEIsRUFDM0IsT0FBa0MsRUFDbEMsVUFBNEIsRUFDNUIsTUFBYyxFQUNkLGNBQThCLEVBQ0wsV0FBZ0I7UUFOekMsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUMzQixZQUFPLEdBQVAsT0FBTyxDQUEyQjtRQUNsQyxlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUM1QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ0wsZ0JBQVcsR0FBWCxXQUFXLENBQUs7UUE5Q25ELG9CQUFlLEdBQVEsRUFBRSxD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WUFDRixJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE9BQU8sU0FBUyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUU7Z0JBQ2hGLElBQUksT0FBTyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLEVBQUUsRUFBRTtvQkFDakQsU0FBUyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUNuRjtxQkFBTTtvQkFDTCxTQUFTLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUU3RjthQUNGO1lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7O29IQXJzQlUsdUJBQXVCLHlNQXVEeEIsZUFBZTt3R0F2RGQsdUJBQXVCLDRKQ2hCcEMseWdQQXNIQTsyRkR0R2EsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLHNCQUFzQjs7MEJBMkQ3QixNQUFNOzJCQUFDLGVBQWU7NENBdERoQixXQUFXO3NCQUFuQixLQUFLO2dCQTZCRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVGLGNBQWM7c0JBRGpCLEtBQUs7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgbW9tZW50IGZyb20gJy4vLi4vLi4vbW9tZW50LWhlbHBlcic7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbnRlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwbGljYXRpb24tY29udGVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRXh0cmFzLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBrcGljb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4va3BpLXNlcnZpY2UnO1xuaW1wb3J0IHsgQVBQX0VOVklST05NRU5UIH0gZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQnO1xuXG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNyZWF0ZS1jb21wLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vY3JlYXRlLWNvbXAtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NyZWF0ZS1jb21wLXZpZXcuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDcmVhdGVDb21wVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGtwaVRyZWVEYXRhOiBhbnlcbiAgaXNMb2FkZXI6IGJvb2xlYW47XG4gIGlzR2VuZXJhdGU6IGJvb2xlYW47XG4gIGlzQ3JlYXRlTmV3VmlldzogYm9vbGVhbjtcbiAgaXNLcGlTZWxlY3RlZDogYm9vbGVhbjtcbiAgaXNLcGlDb25maWdTZWxlY3RlZDogYm9vbGVhbjtcbiAgYXBpQ29uZmlnRGF0YTogYW55O1xuICBzaW5nbGVEYXRhU2V0Q29uZmlnOiBhbnk7XG4gIHNlbGVjdGVkRGF0YVNldDogYW55ID0ge307XG4gIGRhdGFTb3VyY2VNb2RhbDogYW55O1xuXG4gIGRhdGFTZXR0YWJsZURhdGFTb3VyY2U6IGFueTtcbiAgaXNEdXBsaWRhdGVWaWV3OiBib29sZWFuO1xuICBpc0ZpbHRlcklucHV0czogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RlZERhdGFTZXRPbmVkaXQ6IGFueSA9IHt9O1xuICBzZWxlY3RlZFZpZXdUeXBlOiBhbnk7XG4gIGNyZWF0Q29tcFZpZXdPYmplY3Q6IGFueSA9IHt9O1xuICBjb21wb25lbnROYW1lc090aGVycyA9IFtcbiAgICB7IFwiY29tcE5hbWVcIjogXCJHYW1tYVRvZGF5UHJldmlvdXNDb21wb25lbnRcIiwgXCJpdGVtXCI6IFwiVG9kYXkgdnMgUHJldmlvdXMgRGF5IFwiIH0sXG4gICAgeyBcImNvbXBOYW1lXCI6IFwiR2FtbWFUYWJsZVdpdGhQZXJjZW50YWdlQ29tcG9uZW50XCIsIFwiaXRlbVwiOiBcIlRhYmxlIFZpZXcgd2l0aCBwZXJjZW50YWdlXCIgfSxcbiAgICB7IFwiY29tcE5hbWVcIjogXCJHYW1tU2luZ2xlTnVtYmVyQ2FyZENvbXBvbmVudFwiLCBcIml0ZW1cIjogXCJTaW5nbGUgTnVtYmVyIENhcmRcIiB9LFxuICBdXG4gIFxuICBjb21wb25lbnROYW1lOiBhbnk7XG5cbiAgZGVmYXVsdFN0YXJ0RGF0ZSA9IG1vbWVudCgpLnN1YnRyYWN0KCc3JywgJ2RheXMnKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbiAgZGVmYXVsdEVuZERhdGUgPSBtb21lbnQoKS5zdWJ0cmFjdCgnMScsICdkYXlzJykuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gIGlucHV0Vmlld0lkOiBhbnk7XG5cbiAgQElucHV0KCkgaXNIZWFkZXI6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoJ3NlbGVjdGVkVmlld0lkJylcbiAgc2V0IHNlbGVjdGVkVmlld0lkKHZhbHVlKSB7XG4gICAgaWYgKHRoaXMuZGF0YVNldHRhYmxlRGF0YVNvdXJjZSAmJiB0aGlzLmRhdGFTZXR0YWJsZURhdGFTb3VyY2UubGVuZ3RoICE9PSAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmlld1R5cGUgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5nZXRWaWV3QnlJZCh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHRoaXMuZ2V0RGF0YVNldCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlucHV0Vmlld0lkID0gdmFsdWU7XG4gICAgICB0aGlzLmdldERhdGFTZXQoKTtcbiAgICB9XG5cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxuICAgIHB1YmxpYyBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VydmljZTogQXBwbGljYXRpb25Db250ZW50U2VydmljZSxcbiAgICBwcml2YXRlIGtwaVNlcnZpY2U6IGtwaWNvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBASW5qZWN0KEFQUF9FTlZJUk9OTUVOVCkgcHJpdmF0ZSBlbnZpcm9ubWVudDogYW55XG5cbiAgKSB7XG5cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZGVmYXVsdFN0YXJ0RGF0ZSA9IG1vbWVudCgpLnN1YnRyYWN0KCc3JywgJ2RheXMnKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbiAgICB0aGlzLmRlZmF1bHRFbmREYXRlID0gbW9tZW50KCkuc3VidHJhY3QoJzEnLCAnZGF5cycpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdCA9IHtcbiAgICAgIFwidmlld05hbWVcIjogXCJcIixcbiAgICAgIFwidmlld0xhYmVsXCI6IFwiXCIsXG4gICAgICBcInZpZXdUeXBlXCI6IHRoaXMuc2VsZWN0ZWRWaWV3VHlwZVxuICAgIH1cblxuXG4gICAgdGhpcy5nZXREYXRhU2V0KCk7XG5cbiAgfVxuICBnZXRWaWV3VHlwZShlKSB7XG4gICAgaWYgKGUuZXZlbnQpIHtcbiAgICAgIHRoaXMuaXNLcGlDb25maWdTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5pc0twaVNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmlzR2VuZXJhdGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNDcmVhdGVOZXdWaWV3ID0gZmFsc2U7XG4gICAgICB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3RbJ3ZpZXdOYW1lJ10gPSB0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0TmFtZSArICcgJyArIGUudmFsdWU7XG4gICAgICB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3RbJ3ZpZXdMYWJlbCddID0gdGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldE5hbWUgKyAnICcgKyBlLnZhbHVlOztcbiAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuc2VsZWN0ZWREYXRhU2V0KVxuICAgIH1cblxuICB9XG5cblxuICBnZXREYXRhU2V0KCkge1xuICAgIHRoaXMuc2VydmljZS5nZXRBcHBEYXRhc2V0Q29uZmlncygpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG5cbiAgICAgICAgdGhpcy5kYXRhU2V0dGFibGVEYXRhU291cmNlID0gZGF0YTtcbiAgICAgICAgbGV0IHZpZXdJZCA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbJ3ZpZXdJZCddO1xuICAgICAgICBsZXQgY29udGVudFR5cGUgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWydjb250ZW50VHlwZSddO1xuICAgICAgICBpZiAoY29udGVudFR5cGUgPT0gXCJjbG9uZVwiKSB7XG4gICAgICAgICAgdGhpcy5pc0R1cGxpZGF0ZVZpZXcgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZpZXdJZCkge1xuICAgICAgICAgIHRoaXMuZ2V0Vmlld0J5SWQodmlld0lkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnB1dFZpZXdJZCkge1xuICAgICAgICAgIHRoaXMuZ2V0Vmlld0J5SWQodGhpcy5pbnB1dFZpZXdJZCk7XG4gICAgICAgIH1cblxuICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ1ZpZXcgQ3JlYXRpb24nKVxuXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldFZpZXdCeUlkKHZpZXdJZCkge1xuICAgIHRoaXMuc2VydmljZS5nZXRBcHBWaWV3Q29uZmlnKHZpZXdJZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0ID0gZGF0YTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZpZXdUeXBlID0gZGF0YS52aWV3VHlwZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGFTZXQgPSB0aGlzLmRhdGFTZXR0YWJsZURhdGFTb3VyY2UuZmluZChkYXRhc2V0ID0+IGRhdGFzZXQuZGF0YXNldElkID09PSBkYXRhLmRhdGFzZXRJZCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhU2V0T25lZGl0ID0gdGhpcy5kYXRhU2V0dGFibGVEYXRhU291cmNlLmZpbmQoZGF0YXNldCA9PiBkYXRhc2V0LmRhdGFzZXRJZCA9PT0gZGF0YS5kYXRhc2V0SWQpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZpZXdUeXBlID09IFwib3RoZXJzXCIpIHtcbiAgICAgICAgICB0aGlzLmNvbXBvbmVudE5hbWUgPSBkYXRhLmtwaUNvbmZpZy5jb21wb25lbnROYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGFTZXRbJ3NlbGVjdGVkV2lkZ2V0Q29uZmlnJ10gPSBkYXRhWydrcGlDb25maWcnXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGFTZXRbJ3NlbGVjdGVkV2lkZ2V0Q29uZmlnJ11bJ3Blcm1pc3Npb25zJ10gPSBkYXRhWydwZXJtaXNzaW9ucyddO1xuXG4gICAgICAgIC8vIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSAhPT0gJ3NxbFF1ZXJ5Jykge1xuICAgICAgICAvLyAgIHRoaXMuY3JlYXRlTmV3VmlldygpO1xuICAgICAgICAvLyB9XG5cbiAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdWaWV3IENyZWF0aW9uJylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZ2V0RGF0YVNldE5hbWUoZGF0YXNldElkKSB7XG4gICAgY29uc3QgZm91bmRPYmplY3QgPSB0aGlzLmRhdGFTZXR0YWJsZURhdGFTb3VyY2UuZmluZChkYXRhc2V0ID0+IGRhdGFzZXQuZGF0YXNldElkID09PSBkYXRhc2V0SWQpO1xuICAgIGlmIChmb3VuZE9iamVjdCkge1xuICAgICAgcmV0dXJuIGZvdW5kT2JqZWN0LmRhdGFzZXROYW1lO1xuICAgIH1cbiAgfVxuXG4gIGdldERhdGFTZXREZXRhaWxzKGV2ZW50KSB7XG4gICAgdGhpcy5zZWxlY3RlZERhdGFTZXQgPSB0aGlzLmRhdGFTZXR0YWJsZURhdGFTb3VyY2UuZmluZChkYXRhc2V0ID0+IGRhdGFzZXQuZGF0YXNldElkID09PSBldmVudC52YWx1ZSk7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRUeXBlID09IFwicXVlcnlidWlsZGVyXCIpIHtcbiAgICAgIHRoaXMuaXNGaWx0ZXJJbnB1dHMgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldFR5cGUgPT0gXCJzaW1wbGVBcGlcIikge1xuICAgICAgdGhpcy5pc0ZpbHRlcklucHV0cyA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSA9PSBcInBsYWluanNvblwiKSB7XG4gICAgICB0aGlzLmlzRmlsdGVySW5wdXRzID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSA9PSBcInNxbFF1ZXJ5XCIpIHtcbiAgICAgIHRoaXMuaXNGaWx0ZXJJbnB1dHMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzRmlsdGVySW5wdXRzID0gZmFsc2U7XG4gICAgfVxuICB9XG5cblxuICBnZXRLcGlTaW5nbGVDb25maWcoZXZlbnQpIHtcbiAgICB0aGlzLnNpbmdsZURhdGFTZXRDb25maWcgPSBldmVudC52YWx1ZTtcbiAgICB0aGlzLmlzS3BpQ29uZmlnU2VsZWN0ZWQgPSB0cnVlO1xuICB9XG5cbiAgZ2VuZXJhdGVEYXRhU2V0KCkge1xuXG4gIH1cblxuICBnZXREYXRhU2V0Rm9yTW9uZ28oZGF0YXNldCkge1xuICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsID0ge307XG4gICAgbGV0IGFwaUpzb25PYmplY3QgPSB7XG4gICAgICByZXF1ZXN0SWQ6IGRhdGFzZXQuY29uZmlnLnNlcnZpY2VJZCxcbiAgICB9O1xuICAgIGlmIChkYXRhc2V0LmNvbmZpZy5maXhPcGVyYXRpb25MZXZsZXMgJiYgZGF0YXNldC5jb25maWcuZml4T3BlcmF0aW9uTGV2bGVzLmxlbmd0aCAhPSAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YXNldC5jb25maWcuZml4T3BlcmF0aW9uTGV2bGVzKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oYXBpSnNvbk9iamVjdCwgaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG1vbl9jb25maWcgPSB0aGlzLmtwaVNlcnZpY2UuZ2V0QWxsU2V2aWNlQXBpSnNvbihhcGlKc29uT2JqZWN0KTtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0RGF0YShtb25fY29uZmlnLCBkYXRhc2V0LmNvbmZpZy5hcGkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBkYXRhW1wiUGF5bG9hZFwiXSB8fCBkYXRhO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnZGF0YSddID0gcGF5bG9hZDtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3JlcXVlc3RJZCddID0gZGF0YXNldC5jb25maWcuc2VydmljZUlkO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnYXBpJ10gPSBkYXRhc2V0LmNvbmZpZy5hcGk7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydzZWxlY3RlZFZpZXdUeXBlJ10gPSB0aGlzLnNlbGVjdGVkVmlld1R5cGU7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydzZWxlY3RlZFdpZGdldENvbmZpZyddID0gKHRoaXMuc2VsZWN0ZWREYXRhU2V0LnNlbGVjdGVkV2lkZ2V0Q29uZmlnKSA/IHRoaXMuc2VsZWN0ZWREYXRhU2V0LnNlbGVjdGVkV2lkZ2V0Q29uZmlnIDogdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNHZW5lcmF0ZSA9IHRydWU7XG5cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZ2V0RGF0YXNldEZvckltcGFsYShkYXRhc2V0KSB7XG4gICAgbGV0IHJlcXVlc3QgPSBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZztcbiAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbCA9IHt9O1xuICAgIGxldCB0cmFuc2Zvcm1lZE9iamVjdDogYW55ID0ge307XG4gICAgZm9yIChsZXQgaXRlbSBvZiByZXF1ZXN0LnJlcUZpZWxkcykge1xuICAgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMoaXRlbSlbMF07XG4gICAgICBjb25zdCB2YWx1ZSA9IE9iamVjdC52YWx1ZXMoaXRlbSlbMF07XG4gICAgICBpZiAoa2V5ID09PSAnc3RhcnREYXRlJykge1xuICAgICAgICB0cmFuc2Zvcm1lZE9iamVjdC5yZWNvcmREYXRlID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2Zvcm1lZE9iamVjdFtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJhbnNmb3JtZWRPYmplY3RbJ2ZpbHRlcnMnXSA9IHRoaXMudHJhbnNmb3JtRGF0YUZvck1GaWx0ZXIoW10sIHJlcXVlc3QubWFwZWRGaWx0ZXJzKTtcbiAgICB0cmFuc2Zvcm1lZE9iamVjdFsnc29ydGVycyddID0gcmVxdWVzdC5zb3J0ZXJzO1xuICAgIHRyYW5zZm9ybWVkT2JqZWN0W1wicGFnaW5hdGlvblJlcXVpcmVkXCJdID0gZmFsc2U7XG5cbiAgICBpZiAoZGF0YXNldC5jb25maWcuYXBpID09IFwiL2twaS9nZW5lcmljQWdncmVnYXRlUGFnaW5hdGVkS3BpU2VydmljZVJlc3BvbnNlXCIpIHtcbiAgICAgIHRyYW5zZm9ybWVkT2JqZWN0WydtZWFzdXJlcyddID0gcmVxdWVzdC5tZWFzdXJlcztcbiAgICAgIHRyYW5zZm9ybWVkT2JqZWN0WydkaW1lbnNpb25zJ10gPSByZXF1ZXN0LmRpbWVuc2lvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zZm9ybWVkT2JqZWN0Wydjb2x1bW5zJ10gPSB0aGlzLmdldEZvcm1hdE9iamVjdEZvckNvbHVtbihyZXF1ZXN0LmNvbHVtbnMpO1xuICAgIH1cbiAgICBpZiAocmVxdWVzdC5oYXZpbmdzICYmIHJlcXVlc3QuaGF2aW5ncy5sZW5ndGggIT09IDApIHtcbiAgICAgIHRyYW5zZm9ybWVkT2JqZWN0WydoYXZpbmdzJ10gPSByZXF1ZXN0LmhhdmluZ3M7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2codHJhbnNmb3JtZWRPYmplY3QpO1xuXG5cblxuXG4gICAgY29uc3QgY29sdW1uRGF0YSA9IHRoaXMudHJhbnNmb3JtQ29sdW1uc0ZvckNvbHVtbnMocmVxdWVzdC5jb2x1bW5zKTtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0RGF0YSh0cmFuc2Zvcm1lZE9iamVjdCwgZGF0YXNldC5jb25maWcuYXBpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gZGF0YVsnZGF0YXNldCddO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnZGF0YSddID0gcGF5bG9hZDtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3JlcXVlc3RJZCddID0gZGF0YXNldC5jb25maWcuc2VydmljZUlkO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnYXBpJ10gPSBkYXRhc2V0LmNvbmZpZy5hcGk7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydjb2x1bW5EYXRhJ10gPSBjb2x1bW5EYXRhO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRWaWV3VHlwZSddID0gdGhpcy5zZWxlY3RlZFZpZXdUeXBlO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRXaWRnZXRDb25maWcnXSA9ICh0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZykgPyB0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZyA6IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNHZW5lcmF0ZSA9IHRydWU7XG5cbiAgICAgIH0sIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcblxuICAgICAgfVxuICAgIH0pXG5cbiAgfVxuXG5cbiAgZ2V0Rm9ybWF0T2JqZWN0Rm9yQ29sdW1uKGNvbHVtbnMpIHtcbiAgICBsZXQgY29sdW1uRGF0YSA9IFtdO1xuICAgIGNvbHVtbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IHsgYWR2YW5jZWRDb2x1bW4sIGNvbHVtbk5hbWUsIGVucmljaEZ1bmN0aW9uLCBkYXRhRmllbGQgfSA9IGVsZW1lbnQ7XG4gICAgICBjb2x1bW5EYXRhLnB1c2goe1xuICAgICAgICBcImFkdmFuY2VkQ29sdW1uXCI6IGFkdmFuY2VkQ29sdW1uLFxuICAgICAgICBcImNvbHVtbk5hbWVcIjogY29sdW1uTmFtZSxcbiAgICAgICAgXCJlbnJpY2hGdW5jdGlvblwiOiBlbnJpY2hGdW5jdGlvbixcbiAgICAgICAgXCJhbGlhc05hbWVcIjogZGF0YUZpZWxkXG4gICAgICB9KVxuICAgIH0pO1xuICAgIHJldHVybiBjb2x1bW5EYXRhO1xuICB9XG5cblxuICB0cmFuc2Zvcm1Db2x1bW5zRm9yQ29sdW1ucyhpbnB1dENvbHVtbnMpIHtcbiAgICBjb25zdCBjb2x1bW5zID0gW107XG5cbiAgICBpbnB1dENvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgY29sdW1ucy5wdXNoKHtcbiAgICAgICAgZGF0YUZpZWxkOiBjb2wuZGF0YUZpZWxkLFxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICBjYXB0aW9uOiBjb2wuY2FwdGlvbixcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbHVtbnM7XG4gIH1cblxuXG4gIHRyYW5zZm9ybURhdGFGb3JNRmlsdGVyKGZpbHRlcmRhdGEsIG1hcERhdGEpIHtcblxuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBtYXBEYXRhLmZvckVhY2gobWFwcGluZyA9PiB7XG4gICAgICBsZXQgcmVzdWx0T2JqID0ge1xuICAgICAgICBjb2x1bW5OYW1lOiBtYXBwaW5nLnNlcnZlckNvbHVtbixcbiAgICAgICAgZGF0YVR5cGU6IG1hcHBpbmcuZGF0YVR5cGUsXG4gICAgICAgIG9wZXJhdG9yOiBtYXBwaW5nLm9wZXJhdG9yTmFtZSxcbiAgICAgICAgdmFsdWU6IG1hcHBpbmcuZGVmYXVsdFZhbHVlXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBmaWx0ZXIgPSBmaWx0ZXJkYXRhLmZpbmQoZiA9PiBmLmhhc093blByb3BlcnR5KG1hcHBpbmcubG9jYWxDb2x1bW4pKTtcbiAgICAgIGlmIChtYXBwaW5nLnNlcnZlckNvbHVtbi5pbmNsdWRlcygnZGF0ZScpICYmIHR5cGVvZiByZXN1bHRPYmoudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChtYXBwaW5nLmZvcm1hdHRlciAmJiBtYXBwaW5nLmZvcm1hdHRlciAhPT0gXCJcIikge1xuICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQobWFwcGluZy5mb3JtYXR0ZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQodGhpcy5lbnZpcm9ubWVudC5kYXRhRm9ybWF0KTtcblxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgaWYgKG1hcHBpbmcuZGVmYXVsdFZhbHVlID09PSBcIlwiKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJbbWFwcGluZy5sb2NhbENvbHVtbl07XG5cbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJlc3VsdE9iai5vcGVyYXRvciA9IFwiaW5cIjtcbiAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1hcHBpbmcuc2VydmVyQ29sdW1uLmluY2x1ZGVzKCdkYXRlJykgJiYgdHlwZW9mIHJlc3VsdE9iai52YWx1ZSA9PT0gJ3N0cmluZycpIHtcblxuICAgICAgICAgICAgaWYgKG1hcHBpbmcuZm9ybWF0dGVyICYmIG1hcHBpbmcuZm9ybWF0dGVyICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQobWFwcGluZy5mb3JtYXR0ZXIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gbW9tZW50KHJlc3VsdE9iai52YWx1ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdCh0aGlzLmVudmlyb25tZW50LmRhdGFGb3JtYXQpO1xuXG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChtYXBwaW5nLmRlZmF1bHRWYWx1ZSA9PT0gXCJcIikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaChyZXN1bHRPYmopO1xuICAgIH0pO1xuICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIob2JqID0+IG9iai52YWx1ZSAhPT0gbnVsbCAmJiBvYmoudmFsdWUgIT09IFwiXCIpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXREYXRhc2V0Rm9yU2ltcGxlQXBpSW1wYWxhKGRhdGFzZXQ6IGFueSkge1xuICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsID0ge307XG5cbiAgICBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnMuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgaWYgKGZpbHRlci5oYXNPd25Qcm9wZXJ0eShmaWx0ZXIubG9jYWxDb2x1bW4pKSB7XG4gICAgICAgIGZpbHRlci5kZWZhdWx0VmFsdWUgPSBmaWx0ZXJbZmlsdGVyLmxvY2FsQ29sdW1uXTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChkYXRhc2V0LmNvbmZpZy5hcGlUeXBlID09PSBcInBvc3RcIikge1xuICAgICAgbGV0IHNlcnZpY2VKc29uOiBhbnkgPSB7fTtcbiAgICAgIGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5mb3JFYWNoKChmaWx0ZXI6IGFueSkgPT4ge1xuICAgICAgICBsZXQgZGF0ZWNvbHVtbiA9IGZpbHRlci5zZXJ2ZXJDb2x1bW4udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGRhdGVjb2x1bW4uaW5jbHVkZXMoJ2RhdGUnKSAmJiB0eXBlb2YgZmlsdGVyLmRhdGFUeXBlID09PSAnc3RyaW5nJykge1xuXG4gICAgICAgICAgaWYgKGZpbHRlci5mb3JtYXR0ZXIgJiYgZmlsdGVyLmZvcm1hdHRlciAhPT0gXCJcIikge1xuICAgICAgICAgICAgc2VydmljZUpzb25bZmlsdGVyLnNlcnZlckNvbHVtbl0gPSBtb21lbnQoZmlsdGVyLmRlZmF1bHRWYWx1ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdChmaWx0ZXIuZm9ybWF0dGVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VydmljZUpzb25bZmlsdGVyLnNlcnZlckNvbHVtbl0gPSBtb21lbnQoZmlsdGVyLmRlZmF1bHRWYWx1ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdCh0aGlzLmVudmlyb25tZW50LmRhdGFGb3JtYXQpO1xuXG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VydmljZUpzb25bZmlsdGVyLnNlcnZlckNvbHVtbl0gPSBmaWx0ZXIuZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zZXJ2aWNlLmdldFNpbXBsZUFwaVBvc3RSZXF1ZXN0KGRhdGFzZXQuY29uZmlnLmFwaSwgc2VydmljZUpzb24pLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXlsb2FkID0gZGF0YVtcIlBheWxvYWRcIl0gfHwgZGF0YTtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnZGF0YSddID0gcGF5bG9hZDtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsncmVxdWVzdElkJ10gPSBkYXRhc2V0LmNvbmZpZy5zZXJ2aWNlSWQ7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2FwaSddID0gZGF0YXNldC5jb25maWcuYXBpO1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydzZWxlY3RlZFZpZXdUeXBlJ10gPSB0aGlzLnNlbGVjdGVkVmlld1R5cGU7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkV2lkZ2V0Q29uZmlnJ10gPSAodGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcpID8gdGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNHZW5lcmF0ZSA9IHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGRhdGFzZXQuY29uZmlnLmFwaVR5cGUgPT09IFwiZ2V0XCIpIHtcbiAgICAgIC8vIENvbnN0cnVjdCBHRVQgVVJMIHdpdGggcGFyYW1ldGVyc1xuICAgICAgbGV0IHJlcXVlc3RVcmwgPSBkYXRhc2V0LmNvbmZpZy5hcGkgKyBcIj9cIjtcbiAgICAgIGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5mb3JFYWNoKChmaWx0ZXI6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICByZXF1ZXN0VXJsICs9IGAke2ZpbHRlci5zZXJ2ZXJDb2x1bW59PSR7ZmlsdGVyLmRlZmF1bHRWYWx1ZX1gO1xuICAgICAgICBpZiAoaW5kZXggPCBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHJlcXVlc3RVcmwgKz0gXCImXCI7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBNYWtlIEdFVCByZXF1ZXN0XG4gICAgICB0aGlzLnNlcnZpY2UuZ2V0U2ltcGxlQXBpR2V0UmVxdWVzdChyZXF1ZXN0VXJsKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbXCJQYXlsb2FkXCJdIHx8IGRhdGE7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2RhdGEnXSA9IHBheWxvYWQ7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3JlcXVlc3RJZCddID0gZGF0YXNldC5jb25maWcuc2VydmljZUlkO1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydhcGknXSA9IGRhdGFzZXQuY29uZmlnLmFwaTtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRWaWV3VHlwZSddID0gdGhpcy5zZWxlY3RlZFZpZXdUeXBlO1xuXG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkV2lkZ2V0Q29uZmlnJ10gPSAodGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcpID8gdGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNHZW5lcmF0ZSA9IHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgZ2V0RWRpdERhdGFTZXQoKSB7XG4gICAgbGV0IGNvbnRlbnRWaWV3SWQgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zWydwYWdlSWQnXTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldElkKSB7XG4gICAgICBpZiAoY29udGVudFZpZXdJZCkge1xuICAgICAgICBsZXQgbmF2aWdhdGlvbjogTmF2aWdhdGlvbkV4dHJhcyA9IHtcbiAgICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgICAgJ2RhdGFzZXRJZCc6IHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRJZCxcbiAgICAgICAgICAgICd2aWV3SWQnOiB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3Qudmlld0lkLFxuICAgICAgICAgICAgJ3BhZ2VJZCc6IGNvbnRlbnRWaWV3SWRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnYXBwcy9jb250cm9sUGFuZWwvYXBwbGljYXRpb25EYXRhc2V0J10sIG5hdmlnYXRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IG5hdmlnYXRpb246IE5hdmlnYXRpb25FeHRyYXMgPSB7XG4gICAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAgICdkYXRhc2V0SWQnOiB0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0SWQsXG4gICAgICAgICAgICAndmlld0lkJzogdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0LnZpZXdJZCxcblxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydhcHBzL2NvbnRyb2xQYW5lbC9hcHBsaWNhdGlvbkRhdGFzZXQnXSwgbmF2aWdhdGlvbik7XG4gICAgICB9XG5cblxuICAgIH1cbiAgfVxuICBjcmVhdGVOZXdWaWV3KCkge1xuICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuICAgIHRoaXMuaXNHZW5lcmF0ZSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZykge1xuICAgICAgdGhpcy5pc0xvYWRlciA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRUeXBlID09IFwibW9uZ29cIikge1xuICAgICAgdGhpcy5nZXREYXRhU2V0Rm9yTW9uZ28odGhpcy5zZWxlY3RlZERhdGFTZXQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZERhdGFTZXQuZGF0YXNldFR5cGUgPT0gXCJxdWVyeWJ1aWxkZXJcIikge1xuICAgICAgdGhpcy5nZXREYXRhc2V0Rm9ySW1wYWxhKHRoaXMuc2VsZWN0ZWREYXRhU2V0KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWREYXRhU2V0LmRhdGFzZXRUeXBlID09IFwic2ltcGxlQXBpXCIpIHtcbiAgICAgIHRoaXMuZ2V0RGF0YXNldEZvclNpbXBsZUFwaUltcGFsYSh0aGlzLnNlbGVjdGVkRGF0YVNldCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSA9PSBcInBsYWluanNvblwiKSB7XG5cbiAgICAgIHRoaXMuZ2V0RGF0YXNldEZvclBsYWluSnNvbih0aGlzLnNlbGVjdGVkRGF0YVNldCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSA9PSBcInNxbFF1ZXJ5XCIpIHtcbiAgICAgIHRoaXMuZ2V0RGF0YXNldEZvclNxbFRlbXBsYXRlKHRoaXMuc2VsZWN0ZWREYXRhU2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcy5nZXREYXRhc2V0Rm9ySW1wYWxhKHRoaXMuc2VsZWN0ZWREYXRhU2V0KVxuICAgIH1cbiAgfVxuXG5cbiAgY3JlYXRlT3RoZXJDb21wb25lbnRWaWV3KCkge1xuICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdFsnZGF0YXNldElkJ10gPSB0aGlzLnNlbGVjdGVkRGF0YVNldFsnZGF0YXNldElkJ107XG4gICAgdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0WydrcGlDb25maWcnXSA9IHtcbiAgICAgIFwic2VydmljZUlkXCI6IFwiXCIsXG4gICAgICBcImFwaVwiOiBcIlwiLFxuICAgICAgXCJkaXNwbGF5VHlwZVwiOiBcImNoYXJ0XCIsXG4gICAgICBcImZvcm1hdGVcIjogXCJcIixcbiAgICAgIFwiY29tcG9uZW50TmFtZVwiOiB0aGlzLmNvbXBvbmVudE5hbWUsXG4gICAgICBcImRhdGFDb25maWdcIjoge1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5pc0xvYWRlciA9IHRydWU7XG4gICAgaWYgKHRoaXMuaXNEdXBsaWRhdGVWaWV3KSB7XG4gICAgICB0aGlzLmNyZWF0ZUFwcENvbmZpZ1ZpZXcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuY3JlYXRDb21wVmlld09iamVjdFsndmlld0lkJ10pIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLnVwZGF0ZUFwcFZpZXdDb25maWcodGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0KS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdCA9IHtcbiAgICAgICAgICAgICAgXCJ2aWV3TmFtZVwiOiBcIlwiLFxuICAgICAgICAgICAgICBcInZpZXdMYWJlbFwiOiBcIlwiLFxuICAgICAgICAgICAgICBcInZpZXdUeXBlXCI6IFwiXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXNDcmVhdGVOZXdWaWV3ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKCdWaWV3IFVwZGF0ZSBTdWNjZXNzZnVsbHknKVxuICAgICAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnVmlldyBDcmVhdGlvbicpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jcmVhdGVBcHBDb25maWdWaWV3KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuXG5cblxuXG4gIGdldENhcGl0YWxpemUoaXRlbTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuY29tbW9uU2VydmljZS5jb252ZXJ0VG9TcGFjZVNlcGFyYXRlZENhcGl0YWxpemVkKGl0ZW0pXG4gIH1cbiAgZ2V0RmlsdGVyKGl0ZW0pIHtcbiAgICBsZXQgY29sX25hbWUgPSBpdGVtLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGNvbF9uYW1lLmluY2x1ZGVzKCdkYXRlJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc3RhcnREYXRlQ2hhbmdlKGUsIGl0ZW0pIHtcbiAgICB0aGlzLmlzQ3JlYXRlTmV3VmlldyA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0YVNldC5kYXRhc2V0VHlwZSA9PSBcInNpbXBsZUFwaVwiKSB7XG4gICAgICBpdGVtLmRlZmF1bHRWYWx1ZSA9IG1vbWVudChlLnZhbHVlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpXG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW0uZGVmYXVsdFZhbHVlID0gbW9tZW50KGUudmFsdWUpLmZvcm1hdChcIllZWVktTU0tRERcIilcbiAgICB9XG5cbiAgfVxuXG4gIGdvdG9WaWV3c3NldCgpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9hcHBzL2NvbnRyb2xQYW5lbC9hcHBsaWNhdGlvblZpZXdzLyddKVxuICB9XG5cblxuICBnZXRFbWl0TmV3VGFibGVDb25maWcoZGF0YSkge1xuXG4gICAgZGF0YVsnZGF0YXNldElkJ10gPSB0aGlzLnNlbGVjdGVkRGF0YVNldFsnZGF0YXNldElkJ107XG4gICAgdGhpcy5jcmVhdGVWaWV3Q29uZmlnKGRhdGEpO1xuXG4gICAgLy8gdGhpcy5nZXRWaWV3Q29tcG9uZW50Q29uZmlnLmVtaXQoZGF0YSk7XG4gIH1cbiAgZ2V0RW1pdE5ld0hlYXRNYXBDb25maWcoZGF0YSkge1xuICAgIGRhdGFbJ2RhdGFzZXRJZCddID0gdGhpcy5zZWxlY3RlZERhdGFTZXRbJ2RhdGFzZXRJZCddO1xuICAgIHRoaXMuY3JlYXRlVmlld0NvbmZpZyhkYXRhKTtcblxuICAgIC8vIHRoaXMuZ2V0Vmlld0NvbXBvbmVudENvbmZpZy5lbWl0KGRhdGEpO1xuICB9XG5cblxuICBnZXRFbWl0TmV3Q2hhcnRDb25naWcoZGF0YSkge1xuXG4gICAgZGF0YVsnZGF0YXNldElkJ10gPSB0aGlzLnNlbGVjdGVkRGF0YVNldFsnZGF0YXNldElkJ107XG4gICAgdGhpcy5jcmVhdGVWaWV3Q29uZmlnKGRhdGEpO1xuXG4gICAgLy8gdGhpcy5nZXRWaWV3Q29tcG9uZW50Q29uZmlnLmVtaXQoZGF0YSk7XG4gIH1cblxuICBnZXRFbWl0TmV3T3RoZXJTZXRDb25naWcoZGF0YSkge1xuICAgIGRhdGFbJ2RhdGFzZXRJZCddID0gdGhpcy5zZWxlY3RlZERhdGFTZXRbJ2RhdGFzZXRJZCddO1xuICAgIHRoaXMuY3JlYXRlVmlld0NvbmZpZyhkYXRhKTtcbiAgICAvLyB0aGlzLmdldFZpZXdDb21wb25lbnRDb25maWcuZW1pdChkYXRhKTtcbiAgfVxuXG4gIGNyZWF0ZVZpZXdDb25maWcoZGF0YSkge1xuICAgIFxuICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdFsnZGF0YXNldElkJ10gPSBkYXRhWydkYXRhc2V0SWQnXTtcbiAgICB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3RbJ3ZpZXdUeXBlJ10gPSB0aGlzLnNlbGVjdGVkVmlld1R5cGU7XG4gICAgdGhpcy5pc0xvYWRlciA9IHRydWU7XG4gICAgdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0WydrcGlDb25maWcnXSA9IGRhdGFbJ2twaUNvbmZpZyddO1xuICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdFsncGVybWlzc2lvbnMnXSA9IGRhdGFbJ3Blcm1pc3Npb25zJ107XG5cblxuICAgIGlmICh0aGlzLnNlbGVjdGVkVmlld1R5cGUgPT0gXCJvdGhlcnNcIikge1xuICAgICAgdGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0WydrcGlDb25maWcnXS5jb21wb25lbnROYW1lID0gdGhpcy5jb21wb25lbnROYW1lO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyh0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3QpO1xuICAgIGlmICh0aGlzLmlzRHVwbGlkYXRlVmlldykge1xuICAgICAgdGhpcy5jcmVhdGVBcHBDb25maWdWaWV3KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3RbJ3ZpZXdJZCddKSB7XG4gICAgICAgIHRoaXMuc2VydmljZS51cGRhdGVBcHBWaWV3Q29uZmlnKHRoaXMuY3JlYXRDb21wVmlld09iamVjdCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzQ3JlYXRlTmV3VmlldyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcygnVmlldyBVcGRhdGUgU3VjY2Vzc2Z1bGx5JylcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLmlzSGVhZGVyKSB7XG4gICAgICAgICAgICAvLyAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FwcHMvY29udHJvbFBhbmVsL2FwcGxpY2F0aW9uVmlld3MvJ10pXG5cbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ1ZpZXcgQ3JlYXRpb24nKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3JlYXRlQXBwQ29uZmlnVmlldygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZUFwcENvbmZpZ1ZpZXcoKSB7XG4gICAgdGhpcy5zZXJ2aWNlLmNyZWF0ZUFwcFZpZXdDb25maWcodGhpcy5jcmVhdENvbXBWaWV3T2JqZWN0KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuXG4gICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoJ1ZpZXcgQ3JlYXRlZCBTdWNjZXNzZnVsbHknKVxuICAgICAgICB0aGlzLmNyZWF0Q29tcFZpZXdPYmplY3QgPSB7XG4gICAgICAgICAgXCJ2aWV3TmFtZVwiOiBcIlwiLFxuICAgICAgICAgIFwidmlld0xhYmVsXCI6IFwiXCIsXG4gICAgICAgICAgXCJ2aWV3VHlwZVwiOiBcIlwiXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAvLyBpZiAodGhpcy5pc0hlYWRlcikge1xuICAgICAgICAvLyAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FwcHMvY29udHJvbFBhbmVsL2FwcGxpY2F0aW9uVmlld3MvJ10pXG5cbiAgICAgICAgLy8gfVxuICAgICAgICAvLyB0aGlzLmFkZE5ld1ZpZXcoKTtcblxuICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ1ZpZXcgQ3JlYXRpb24nKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBhZGROZXdWaWV3KCkge1xuICAgIHRoaXMuY3JlYXRDb21wVmlld09iamVjdCA9IHtcbiAgICAgIFwidmlld05hbWVcIjogXCJcIixcbiAgICAgIFwidmlld0xhYmVsXCI6IFwiXCIsXG4gICAgICBcInZpZXdUeXBlXCI6IFwiXCJcbiAgICB9XG4gICAgdGhpcy5pc0dlbmVyYXRlID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZERhdGFTZXRPbmVkaXQgPSB7fTtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgJ3ZpZXdJZCc6IG51bGwsXG4gICAgICAgICdjb250ZW50VHlwZSc6IG51bGwsXG4gICAgICB9LFxuICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJ1xuICAgIH0pXG4gIH1cblxuXG4gIGdldERhdGFzZXRGb3JQbGFpbkpzb24oZGF0YXNldCkge1xuICAgIGxldCByZXF1ZXN0YXBpID0gZGF0YXNldC5jb25maWcuYXBpICsgJz9kYXRhc2V0SWQ9JyArIGRhdGFzZXQuZGF0YXNldElkO1xuICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsID0ge307XG4gICAgdGhpcy5zZXJ2aWNlLmdldEpzb25EYXRhc2V0UGF5bG9hZChyZXF1ZXN0YXBpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnZGF0YSddID0gZGF0YS5zbGljZSgwLCAxKTtcblxuICAgICAgICBjb25zdCBwYXlsb2FkID0gZGF0YVtcIlBheWxvYWRcIl0gfHwgZGF0YTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2RhdGEnXSA9IHBheWxvYWQ7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydyZXF1ZXN0SWQnXSA9IGRhdGFzZXQuY29uZmlnLnNlcnZpY2VJZDtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ2FwaSddID0gZGF0YXNldC5jb25maWcuYXBpO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRWaWV3VHlwZSddID0gdGhpcy5zZWxlY3RlZFZpZXdUeXBlO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsnc2VsZWN0ZWRXaWRnZXRDb25maWcnXSA9ICh0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZykgPyB0aGlzLnNlbGVjdGVkRGF0YVNldC5zZWxlY3RlZFdpZGdldENvbmZpZyA6IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzR2VuZXJhdGUgPSB0cnVlO1xuXG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldERhdGFzZXRGb3JTcWxUZW1wbGF0ZShkYXRhc2V0KSB7XG4gICAgbGV0IHJlcXVlc3RBcCA9IGRhdGFzZXQuY29uZmlnLmFwaTtcbiAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbCA9IHt9O1xuICAgIGxldCByZXF1ZXN0X3BhcmFtcyA9IHtcbiAgICAgICdkYkNvbmZpZyc6IGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLmRiQ29uZmlnLFxuICAgICAgJ2RhdGFiYXNlTmFtZSc6IGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLmRhdGFiYXNlTmFtZSxcbiAgICAgICdmaWx0ZXJzJzogdGhpcy50cmFuc2Zvcm1EYXRhRm9yTUZpbHRlckZvclNRbChkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnMpLFxuICAgICAgJ3RlbXBsYXRlUXVlcnknOiBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy50ZW1wbGF0ZVF1ZXJ5LFxuICAgICAgJ2VucmljaG1lbnRzJzogZGF0YXNldC5jb25maWcucXVlcnlDb25maWcuZW5yaWNobWVudHMsXG4gICAgfVxuXG4gICAgdGhpcy5zZXJ2aWNlLmdlbmVyaWNTcWxRdWVyeVJlc3BvbnNlKHJlcXVlc3RBcCwgcmVxdWVzdF9wYXJhbXMpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG5cbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbXCJQYXlsb2FkXCJdIHx8IGRhdGE7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydkYXRhJ10gPSBwYXlsb2FkO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VNb2RhbFsncmVxdWVzdElkJ10gPSBkYXRhc2V0LmNvbmZpZy5zZXJ2aWNlSWQ7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZU1vZGFsWydhcGknXSA9IGRhdGFzZXQuY29uZmlnLmFwaTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkVmlld1R5cGUnXSA9IHRoaXMuc2VsZWN0ZWRWaWV3VHlwZTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlTW9kYWxbJ3NlbGVjdGVkV2lkZ2V0Q29uZmlnJ10gPSAodGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcpID8gdGhpcy5zZWxlY3RlZERhdGFTZXQuc2VsZWN0ZWRXaWRnZXRDb25maWcgOiB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0dlbmVyYXRlID0gdHJ1ZTtcblxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG4gIHRyYW5zZm9ybURhdGFGb3JNRmlsdGVyRm9yU1FsKG1hcERhdGEpIHtcblxuICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICBtYXBEYXRhLmZvckVhY2gobWFwcGluZyA9PiB7XG4gICAgICBsZXQgcmVzdWx0T2JqID0ge1xuICAgICAgICBjb2x1bW5OYW1lOiBtYXBwaW5nLnNlcnZlckNvbHVtbixcbiAgICAgICAgZGF0YVR5cGU6IG1hcHBpbmcuZGF0YVR5cGUsXG4gICAgICAgIG9wZXJhdG9yOiBtYXBwaW5nLm9wZXJhdG9yTmFtZSxcbiAgICAgICAgYWxpYXNDb2x1bW5OYW1lOiBtYXBwaW5nLmxvY2FsQ29sdW1uLFxuICAgICAgICAvLyB2YWx1ZTogKG1hcHBpbmcub3BlcmF0b3JOYW1lID09IFwiaW5cIiB8fCBtYXBwaW5nLm9wZXJhdG9yTmFtZSA9PSBcIm5vdEluXCIpID8gW21hcHBpbmcuZGVmYXVsdFZhbHVlXSA6IG1hcHBpbmcuZGVmYXVsdFZhbHVlXG4gICAgICAgIHZhbHVlOiBtYXBwaW5nLmRlZmF1bHRWYWx1ZVxuICAgICAgfTtcbiAgICAgIGlmIChtYXBwaW5nLnNlcnZlckNvbHVtbi5pbmNsdWRlcygnZGF0ZScpICYmIHR5cGVvZiByZXN1bHRPYmoudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChtYXBwaW5nLmZvcm1hdHRlciAmJiBtYXBwaW5nLmZvcm1hdHRlciAhPT0gXCJcIikge1xuICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQobWFwcGluZy5mb3JtYXR0ZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQodGhpcy5lbnZpcm9ubWVudC5kYXRhRm9ybWF0KTtcblxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdC5wdXNoKHJlc3VsdE9iaik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtYXV0byBtaW4tdy0wXCI+XG4gICAgPGxpYi1jb21tb24taGVhZGVyIFtwYWdlVGl0bGVdPVwiJ1ZpZXdzIEVkaXRvcidcIiAqbmdJZj1cImlzSGVhZGVyXCI+PC9saWItY29tbW9uLWhlYWRlcj5cbiAgICA8ZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicC0yIHctZnVsbFwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibS0zIHAtNCBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQtbGcgc2hhZG93LW1kIGRhcms6YmctZ3JheS04MDAgZGFyazpib3JkZXItZ3JheS03MDBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTIgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+RGF0YXNldCBMaXN0IDxzcGFuICpuZ0lmPVwiaXNGaWx0ZXJJbnB1dHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtYmx1ZS01MDAgY3Vyc29yLXBvaW50ZXJcIj48aSBjbGFzcz1cImZhIGZhLXBlbmNpbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ2V0RWRpdERhdGFTZXQoKVwiPjwvaT48L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwiZGF0YVNldHRhYmxlRGF0YVNvdXJjZVwiIChvblZhbHVlQ2hhbmdlZCk9XCJnZXREYXRhU2V0RGV0YWlscygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5RXhwcj1cImRhdGFzZXROYW1lXCIgdmFsdWVFeHByPVwiZGF0YXNldElkXCIgW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkRGF0YVNldE9uZWRpdC5kYXRhc2V0SWRcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5TZWxlY3QgVmlldyBUeXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwiWydjaGFydCcsJ3RhYmxlJywnZ3JvdXBUYWJsZScsJ290aGVycycsJ21hcCddXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFZpZXdUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwiZ2V0Vmlld1R5cGUoJGV2ZW50KVwiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFZpZXdUeXBlID09J290aGVycydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5TZWxlY3QgQ29tcG9uZW50PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW2l0ZW1zXT1cImNvbXBvbmVudE5hbWVzT3RoZXJzXCIgZGlzcGxheUV4cHI9XCJpdGVtXCIgdmFsdWVFeHByPVwiY29tcE5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbXBvbmVudE5hbWVcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTIgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+VmlldyBOYW1lPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJjcmVhdENvbXBWaWV3T2JqZWN0LnZpZXdOYW1lXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPlZpZXcgTGFiZWw8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cImNyZWF0Q29tcFZpZXdPYmplY3Qudmlld0xhYmVsXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRmlsdGVySW5wdXRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJlcXVlc3Qgb2Ygc2VsZWN0ZWREYXRhU2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTFcIj4ge3tnZXRDYXBpdGFsaXplKHJlcXVlc3QubG9jYWxDb2x1bW4pfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LWRhdGUtYm94IGRpc3BsYXlGb3JtYXQ9XCJ5eXl5LU1NLWRkXCIgdHlwZT1cImRhdGVcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJzdGFydERhdGVDaGFuZ2UoJGV2ZW50LHJlcXVlc3QpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0RmlsdGVyKHJlcXVlc3QubG9jYWxDb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHgtZGF0ZS1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cInJlcXVlc3QuZGVmYXVsdFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWdldEZpbHRlcihyZXF1ZXN0LmxvY2FsQ29sdW1uKVwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBtdC01IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9zdWNjZXNzX21kfX1cIiAoY2xpY2spPVwiYWRkTmV3VmlldygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNldCBWaWV3XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9wcmltYXJ5X21kfX0gY3Vyc29yLXBvaW50ZXIgbXgtNCBteS0yXCIgKGNsaWNrKT1cImNyZWF0ZU5ld1ZpZXcoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2VlZFxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tNSBib3JkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWxvYWRlciAqbmdJZj1cImlzTG9hZGVyXCI+PC9hcHAtbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gZm9yIGNoYXJ0IHZpZXcgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzR2VuZXJhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVmlld1R5cGUgPT0gJ2NoYXJ0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1kYXNoLWNoYXJ0IFtkYXRhc2V0bW9kYWxdPVwiZGF0YVNvdXJjZU1vZGFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2V0Q2hhcnRDb25maWdPdXRQdXQpPVwiZ2V0RW1pdE5ld0NoYXJ0Q29uZ2lnKCRldmVudClcIj48L2FwcC1kYXNoLWNoYXJ0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRWaWV3VHlwZSA9PSAnaGVhdG1hcCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtaGVhdC1tYXAgW2RhdGFzZXRtb2RhbF09XCJkYXRhU291cmNlTW9kYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZXRIZWF0TWFwQ29uZmlnT3V0UHV0KT1cImdldEVtaXROZXdIZWF0TWFwQ29uZmlnKCRldmVudClcIj48L2FwcC1oZWF0LW1hcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRWaWV3VHlwZSA9PSAnbWFwJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1nZW8tbWFwIFtkYXRhc2V0bW9kYWxdPVwiZGF0YVNvdXJjZU1vZGFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNyZWF0ZU90aGVyQ29tcG9uZW50Vmlldyk9XCJnZXRFbWl0TmV3T3RoZXJTZXRDb25naWcoJGV2ZW50KVwiPjwvYXBwLWdlby1tYXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGZvciB0YWJsZSB2aWV3IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRWaWV3VHlwZSA9PSAndGFibGUnIHx8IHNlbGVjdGVkVmlld1R5cGUgPT0gJ2dyb3VwVGFibGUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWRhc2gtdGFibGUgW2RhdGFzZXRtb2RhbF09XCJkYXRhU291cmNlTW9kYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZXRUYWJsZUNvbmZpZ091dFB1dCk9XCJnZXRFbWl0TmV3VGFibGVDb25maWcoJGV2ZW50KVwiPjwvYXBwLWRhc2gtdGFibGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGZvciBvdGhlcnMgdmlldyAgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFZpZXdUeXBlID09ICdvdGhlcnMnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tcG9uZW50TmFtZSA9PSAnR2FtbWFUYWJsZVdpdGhQZXJjZW50YWdlQ29tcG9uZW50J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtdGFibGUtd2l0aC1iYXIgW2RhdGFzZXRtb2RhbF09XCJkYXRhU291cmNlTW9kYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3JlYXRlT3RoZXJDb21wb25lbnRWaWV3KT1cImdldEVtaXROZXdPdGhlclNldENvbmdpZygkZXZlbnQpXCI+PC9hcHAtdGFibGUtd2l0aC1iYXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29tcG9uZW50TmFtZSAhPSAnR2FtbWFUYWJsZVdpdGhQZXJjZW50YWdlQ29tcG9uZW50JyAmJiBjb21wb25lbnROYW1lICE9ICdHYW1tYUdlb0NoYXJ0Q29tcG9uZW50JyAmJiAgY29tcG9uZW50TmFtZSAhPSAnR2FtbVNpbmdsZU51bWJlckNhcmRDb21wb25lbnQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1kYXNoLXRvZGF5LXByZXZpb3VzIFtkYXRhc2V0bW9kYWxdPVwiZGF0YVNvdXJjZU1vZGFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2V0dG9kYXlQcmV2aW91c0NvbmZpZ091dFB1dCk9XCJnZXRFbWl0TmV3T3RoZXJTZXRDb25naWcoJGV2ZW50KVwiPjwvbGliLWRhc2gtdG9kYXktcHJldmlvdXM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29tcG9uZW50TmFtZSAhPSAnR2FtbWFUYWJsZVdpdGhQZXJjZW50YWdlQ29tcG9uZW50JyAmJiBjb21wb25lbnROYW1lICE9ICdHYW1tYUdlb0NoYXJ0Q29tcG9uZW50JyAmJiBjb21wb25lbnROYW1lICE9ICdHYW1tYVRvZGF5UHJldmlvdXNDb21wb25lbnQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1zaW5nbGUtY2FyZCBbZGF0YXNldG1vZGFsXT1cImRhdGFTb3VyY2VNb2RhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdldFNpbmdsZUNhcmRDb25maWdPdXRQdXQpPVwiZ2V0RW1pdE5ld090aGVyU2V0Q29uZ2lnKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1zaW5nbGUtY2FyZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|