gamma-app-controller 1.1.11 → 1.1.12
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-dataset-call.service.mjs +19 -4
- package/esm2020/lib/application-controller/application-dataset-component/application-dataset/application-dataset.component.mjs +19 -4
- package/esm2020/lib/application-controller/application-dataset-component/create-dataset-sql/create-dataset-sql.component.mjs +5 -5
- package/esm2020/lib/application-controller/application-dataset-component/dataset-query-bulder/dataset-query-bulder.component.mjs +6 -5
- package/esm2020/lib/application-controller/application-dataset-component/dataset-rest-api/dataset-rest-api.component.mjs +5 -5
- package/esm2020/lib/application-controller/application-filter/application-filter.component.mjs +12 -7
- package/esm2020/lib/application-controller/application-view-components/create-comp-view/create-comp-view.component.mjs +25 -5
- package/esm2020/lib/application-controller/shared/advanced-component/google-geo-map/google-geo-map.component.mjs +2 -8
- package/esm2020/lib/application-controller/support-components/dash-table/dash-table.component.mjs +9 -21
- package/fesm2015/gamma-app-controller.mjs +93 -55
- package/fesm2015/gamma-app-controller.mjs.map +1 -1
- package/fesm2020/gamma-app-controller.mjs +93 -55
- package/fesm2020/gamma-app-controller.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -17,14 +17,14 @@ export class DatasetRestApiComponent {
|
|
|
17
17
|
set restApiDataset(value) {
|
|
18
18
|
if (value.queryConfig.mapedFilters == undefined) {
|
|
19
19
|
value.queryConfig.mapedFilters = [];
|
|
20
|
-
value.queryConfig.mapedFilters.push({ "localColumn": "", "serverColumn": "", "operatorName": "", "defaultValue": "", "dataType": "" });
|
|
20
|
+
value.queryConfig.mapedFilters.push({ "localColumn": "", "serverColumn": "", "operatorName": "", "defaultValue": "", "dataType": "", "formatter": "" });
|
|
21
21
|
}
|
|
22
22
|
this.apiBulderDataset = value;
|
|
23
23
|
}
|
|
24
24
|
ngOnInit() {
|
|
25
25
|
}
|
|
26
26
|
addFilterMapingColumns() {
|
|
27
|
-
let obj = { "localColumn": "", "serverColumn": "", "operatorName": "", "defaultValue": "", "dataType": "" };
|
|
27
|
+
let obj = { "localColumn": "", "serverColumn": "", "operatorName": "", "defaultValue": "", "dataType": "", "formatter": "" };
|
|
28
28
|
this.apiBulderDataset.queryConfig.mapedFilters.push(obj);
|
|
29
29
|
}
|
|
30
30
|
deleteFilterMapingColumns(i) {
|
|
@@ -48,14 +48,14 @@ export class DatasetRestApiComponent {
|
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
DatasetRestApiComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DatasetRestApiComponent, deps: [{ token: i1.ToastrService }, { token: i2.CommonService }], target: i0.ɵɵFactoryTarget.Component });
|
|
51
|
-
DatasetRestApiComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DatasetRestApiComponent, selector: "app-dataset-rest-api", inputs: { restApiDataset: "restApiDataset" }, outputs: { getRestApiBulbderDataSet: "getRestApiBulbderDataSet" }, ngImport: i0, template: "<div class=\"m-2\">\n <div class=\"flex flex-row mb-2\">\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">End Point</div>\n <dx-text-box [(ngModel)]=\"apiBulderDataset.api\"></dx-text-box>\n </div>\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">Api Type</div>\n <dx-select-box [dataSource]=\"['get','post']\" [(ngModel)]=\"apiBulderDataset.apiType\">\n </dx-select-box>\n </div>\n </div>\n\n <div class=\"flex flex-col flex-auto min-w-0 my-2\">\n <div class=\"text-lg py-2 font-extrabold border-b bg-gray-700 text-white px-2\"> Filter Maping\n </div>\n <div class=\"pt-2 border-x border-b \">\n <div class=\"my-2 flex justify-between\"\n *ngFor=\"let item of apiBulderDataset.queryConfig.mapedFilters; let i = index;\">\n\n <div class=\"px-1 mb-2\">\n <div class=\"text-md mb-2\"> Local Column</div>\n <dx-text-box [(ngModel)]=\"item.localColumn\"></dx-text-box>\n </div>\n <div class=\"px-1 mb-2\">\n <div class=\"text-md mb-2\"> Server Column</div>\n <dx-text-box [(ngModel)]=\"item.serverColumn\"></dx-text-box>\n </div>\n <div class=\"px-1 mb-2\">\n <div class=\"text-md mb-2\"> Operator</div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"kpi_operator\"\n [(ngModel)]=\"item.operatorName\"></dx-select-box>\n </div>\n <div class=\"px-1 mb-2\">\n <div class=\"text-md mb-2\"> Datatype</div>\n <dx-select-box [searchEnabled]=\"true\"\n [items]=\"['date','string','timestamp','int', 'double', 'boolean']\"\n [(ngModel)]=\"item.dataType\"></dx-select-box>\n </div>\n <div class=\"px-1 mb-2\">\n <div class=\"text-md mb-2\"> Default Value</div>\n <dx-text-box [(ngModel)]=\"item.defaultValue\"></dx-text-box>\n </div>\n <div class=\"px-1 mt-8\">\n <div class=\"flex flex-row\">\n <button *ngIf=\"i !== 0\" class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1\"\n (click)=\"moveItemForColumns(i, 'up')\">\n <i class=\"fa fa-arrow-up\" aria-hidden=\"true\"></i>\n </button>\n\n <button *ngIf=\"i !== apiBulderDataset.queryConfig.mapedFilters.length - 1\"\n class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1\"\n (click)=\"moveItemForColumns(i, 'down')\">\n <i class=\"fa fa-arrow-down\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n <div class=\"px-1 mt-8 text-center\">\n <button class=\"{{commonService.btn_danger_sm}} cursor-pointer\"\n (click)=\"deleteFilterMapingColumns(i)\"><i class=\"fa fa-trash-o\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"flex flex-row\">\n <div class=\"w-1/2\">\n <div class=\"flex flex-row justify-end my-2\">\n <button class=\"{{commonService.btn_success_sm}} cursor-pointer\" (click)=\"saveColumnMaping()\">Save\n Maping</button>\n <button class=\"{{commonService.btn_primary_sm}} cursor-pointer\"\n (click)=\"addFilterMapingColumns()\">Add\n Maping</button>\n </div>\n </div>\n </div>\n\n <div class=\"flex w-full justify-end mt-5 border-t\">\n <button class=\"{{commonService.btn_success_md}} cursor-pointer mx-1 my-2\" (click)=\"createDataSet()\">\n Submit DataSet\n </button>\n </div>\n\n </div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.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: i5.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
51
|
+
DatasetRestApiComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DatasetRestApiComponent, selector: "app-dataset-rest-api", inputs: { restApiDataset: "restApiDataset" }, outputs: { getRestApiBulbderDataSet: "getRestApiBulbderDataSet" }, ngImport: i0, template: "<div class=\"m-2\">\n <div class=\"flex flex-row mb-2\">\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">End Point</div>\n <dx-text-box [(ngModel)]=\"apiBulderDataset.api\"></dx-text-box>\n </div>\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">Api Type</div>\n <dx-select-box [dataSource]=\"['get','post']\" [(ngModel)]=\"apiBulderDataset.apiType\">\n </dx-select-box>\n </div>\n </div>\n\n <div class=\"flex flex-col flex-auto min-w-0 my-2\">\n <div class=\"text-lg py-2 font-extrabold border-b bg-gray-700 text-white px-2\"> Filter Maping\n </div>\n <div class=\"pt-2 border-x border-b \">\n <div class=\"my-2 flex justify-between\"\n *ngFor=\"let item of apiBulderDataset.queryConfig.mapedFilters; let i = index;\">\n\n <div class=\"px-1 mb-2\">\n <div class=\"text-md mb-2\"> Local Column</div>\n <dx-text-box [(ngModel)]=\"item.localColumn\"></dx-text-box>\n </div>\n <div class=\"px-1 mb-2\">\n <div class=\"text-md mb-2\"> Server Column</div>\n <dx-text-box [(ngModel)]=\"item.serverColumn\"></dx-text-box>\n </div>\n <div class=\"px-1 mb-2\">\n <div class=\"text-md mb-2\"> Operator</div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"kpi_operator\"\n [(ngModel)]=\"item.operatorName\"></dx-select-box>\n </div>\n <div class=\"px-1 mb-2\">\n <div class=\"text-md mb-2\"> Datatype</div>\n <dx-select-box [searchEnabled]=\"true\"\n [items]=\"['date','string','timestamp','int', 'double', 'boolean']\"\n [(ngModel)]=\"item.dataType\"></dx-select-box>\n </div>\n <div class=\"px-1 mb-2\">\n <div class=\"text-md mb-2\"> Formatter</div>\n <dx-text-box [(ngModel)]=\"item.formatter\"></dx-text-box>\n </div>\n <div class=\"px-1 mb-2\">\n <div class=\"text-md mb-2\"> Default Value</div>\n <dx-text-box [(ngModel)]=\"item.defaultValue\"></dx-text-box>\n </div>\n <div class=\"px-1 mt-8\">\n <div class=\"flex flex-row\">\n <button *ngIf=\"i !== 0\" class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1\"\n (click)=\"moveItemForColumns(i, 'up')\">\n <i class=\"fa fa-arrow-up\" aria-hidden=\"true\"></i>\n </button>\n\n <button *ngIf=\"i !== apiBulderDataset.queryConfig.mapedFilters.length - 1\"\n class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1\"\n (click)=\"moveItemForColumns(i, 'down')\">\n <i class=\"fa fa-arrow-down\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n <div class=\"px-1 mt-8 text-center\">\n <button class=\"{{commonService.btn_danger_sm}} cursor-pointer\"\n (click)=\"deleteFilterMapingColumns(i)\"><i class=\"fa fa-trash-o\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"flex flex-row\">\n <div class=\"w-1/2\">\n <div class=\"flex flex-row justify-end my-2\">\n <button class=\"{{commonService.btn_success_sm}} cursor-pointer\" (click)=\"saveColumnMaping()\">Save\n Maping</button>\n <button class=\"{{commonService.btn_primary_sm}} cursor-pointer\"\n (click)=\"addFilterMapingColumns()\">Add\n Maping</button>\n </div>\n </div>\n </div>\n\n <div class=\"flex w-full justify-end mt-5 border-t\">\n <button class=\"{{commonService.btn_success_md}} cursor-pointer mx-1 my-2\" (click)=\"createDataSet()\">\n Submit DataSet\n </button>\n </div>\n\n </div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.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: i5.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
52
52
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DatasetRestApiComponent, decorators: [{
|
|
53
53
|
type: Component,
|
|
54
|
-
args: [{ selector: 'app-dataset-rest-api', template: "<div class=\"m-2\">\n <div class=\"flex flex-row mb-2\">\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">End Point</div>\n <dx-text-box [(ngModel)]=\"apiBulderDataset.api\"></dx-text-box>\n </div>\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">Api Type</div>\n <dx-select-box [dataSource]=\"['get','post']\" [(ngModel)]=\"apiBulderDataset.apiType\">\n </dx-select-box>\n </div>\n </div>\n\n <div class=\"flex flex-col flex-auto min-w-0 my-2\">\n <div class=\"text-lg py-2 font-extrabold border-b bg-gray-700 text-white px-2\"> Filter Maping\n </div>\n <div class=\"pt-2 border-x border-b \">\n <div class=\"my-2 flex justify-between\"\n *ngFor=\"let item of apiBulderDataset.queryConfig.mapedFilters; let i = index;\">\n\n <div class=\"px-1 mb-2\">\n <div class=\"text-md mb-2\"> Local Column</div>\n <dx-text-box [(ngModel)]=\"item.localColumn\"></dx-text-box>\n </div>\n <div class=\"px-1 mb-2\">\n <div class=\"text-md mb-2\"> Server Column</div>\n <dx-text-box [(ngModel)]=\"item.serverColumn\"></dx-text-box>\n </div>\n <div class=\"px-1 mb-2\">\n <div class=\"text-md mb-2\"> Operator</div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"kpi_operator\"\n [(ngModel)]=\"item.operatorName\"></dx-select-box>\n </div>\n <div class=\"px-1 mb-2\">\n <div class=\"text-md mb-2\"> Datatype</div>\n <dx-select-box [searchEnabled]=\"true\"\n [items]=\"['date','string','timestamp','int', 'double', 'boolean']\"\n [(ngModel)]=\"item.dataType\"></dx-select-box>\n </div>\n <div class=\"px-1 mb-2\">\n <div class=\"text-md mb-2\"> Default Value</div>\n <dx-text-box [(ngModel)]=\"item.defaultValue\"></dx-text-box>\n </div>\n <div class=\"px-1 mt-8\">\n <div class=\"flex flex-row\">\n <button *ngIf=\"i !== 0\" class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1\"\n (click)=\"moveItemForColumns(i, 'up')\">\n <i class=\"fa fa-arrow-up\" aria-hidden=\"true\"></i>\n </button>\n\n <button *ngIf=\"i !== apiBulderDataset.queryConfig.mapedFilters.length - 1\"\n class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1\"\n (click)=\"moveItemForColumns(i, 'down')\">\n <i class=\"fa fa-arrow-down\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n <div class=\"px-1 mt-8 text-center\">\n <button class=\"{{commonService.btn_danger_sm}} cursor-pointer\"\n (click)=\"deleteFilterMapingColumns(i)\"><i class=\"fa fa-trash-o\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"flex flex-row\">\n <div class=\"w-1/2\">\n <div class=\"flex flex-row justify-end my-2\">\n <button class=\"{{commonService.btn_success_sm}} cursor-pointer\" (click)=\"saveColumnMaping()\">Save\n Maping</button>\n <button class=\"{{commonService.btn_primary_sm}} cursor-pointer\"\n (click)=\"addFilterMapingColumns()\">Add\n Maping</button>\n </div>\n </div>\n </div>\n\n <div class=\"flex w-full justify-end mt-5 border-t\">\n <button class=\"{{commonService.btn_success_md}} cursor-pointer mx-1 my-2\" (click)=\"createDataSet()\">\n Submit DataSet\n </button>\n </div>\n\n </div>\n</div>" }]
|
|
54
|
+
args: [{ selector: 'app-dataset-rest-api', template: "<div class=\"m-2\">\n <div class=\"flex flex-row mb-2\">\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">End Point</div>\n <dx-text-box [(ngModel)]=\"apiBulderDataset.api\"></dx-text-box>\n </div>\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">Api Type</div>\n <dx-select-box [dataSource]=\"['get','post']\" [(ngModel)]=\"apiBulderDataset.apiType\">\n </dx-select-box>\n </div>\n </div>\n\n <div class=\"flex flex-col flex-auto min-w-0 my-2\">\n <div class=\"text-lg py-2 font-extrabold border-b bg-gray-700 text-white px-2\"> Filter Maping\n </div>\n <div class=\"pt-2 border-x border-b \">\n <div class=\"my-2 flex justify-between\"\n *ngFor=\"let item of apiBulderDataset.queryConfig.mapedFilters; let i = index;\">\n\n <div class=\"px-1 mb-2\">\n <div class=\"text-md mb-2\"> Local Column</div>\n <dx-text-box [(ngModel)]=\"item.localColumn\"></dx-text-box>\n </div>\n <div class=\"px-1 mb-2\">\n <div class=\"text-md mb-2\"> Server Column</div>\n <dx-text-box [(ngModel)]=\"item.serverColumn\"></dx-text-box>\n </div>\n <div class=\"px-1 mb-2\">\n <div class=\"text-md mb-2\"> Operator</div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"kpi_operator\"\n [(ngModel)]=\"item.operatorName\"></dx-select-box>\n </div>\n <div class=\"px-1 mb-2\">\n <div class=\"text-md mb-2\"> Datatype</div>\n <dx-select-box [searchEnabled]=\"true\"\n [items]=\"['date','string','timestamp','int', 'double', 'boolean']\"\n [(ngModel)]=\"item.dataType\"></dx-select-box>\n </div>\n <div class=\"px-1 mb-2\">\n <div class=\"text-md mb-2\"> Formatter</div>\n <dx-text-box [(ngModel)]=\"item.formatter\"></dx-text-box>\n </div>\n <div class=\"px-1 mb-2\">\n <div class=\"text-md mb-2\"> Default Value</div>\n <dx-text-box [(ngModel)]=\"item.defaultValue\"></dx-text-box>\n </div>\n <div class=\"px-1 mt-8\">\n <div class=\"flex flex-row\">\n <button *ngIf=\"i !== 0\" class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1\"\n (click)=\"moveItemForColumns(i, 'up')\">\n <i class=\"fa fa-arrow-up\" aria-hidden=\"true\"></i>\n </button>\n\n <button *ngIf=\"i !== apiBulderDataset.queryConfig.mapedFilters.length - 1\"\n class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1\"\n (click)=\"moveItemForColumns(i, 'down')\">\n <i class=\"fa fa-arrow-down\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n <div class=\"px-1 mt-8 text-center\">\n <button class=\"{{commonService.btn_danger_sm}} cursor-pointer\"\n (click)=\"deleteFilterMapingColumns(i)\"><i class=\"fa fa-trash-o\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"flex flex-row\">\n <div class=\"w-1/2\">\n <div class=\"flex flex-row justify-end my-2\">\n <button class=\"{{commonService.btn_success_sm}} cursor-pointer\" (click)=\"saveColumnMaping()\">Save\n Maping</button>\n <button class=\"{{commonService.btn_primary_sm}} cursor-pointer\"\n (click)=\"addFilterMapingColumns()\">Add\n Maping</button>\n </div>\n </div>\n </div>\n\n <div class=\"flex w-full justify-end mt-5 border-t\">\n <button class=\"{{commonService.btn_success_md}} cursor-pointer mx-1 my-2\" (click)=\"createDataSet()\">\n Submit DataSet\n </button>\n </div>\n\n </div>\n</div>" }]
|
|
55
55
|
}], ctorParameters: function () { return [{ type: i1.ToastrService }, { type: i2.CommonService }]; }, propDecorators: { getRestApiBulbderDataSet: [{
|
|
56
56
|
type: Output
|
|
57
57
|
}], restApiDataset: [{
|
|
58
58
|
type: Input,
|
|
59
59
|
args: ['restApiDataset']
|
|
60
60
|
}] } });
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNldC1yZXN0LWFwaS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvYXBwbGljYXRpb24tZGF0YXNldC1jb21wb25lbnQvZGF0YXNldC1yZXN0LWFwaS9kYXRhc2V0LXJlc3QtYXBpLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvYXBwbGljYXRpb24tY29udHJvbGxlci9hcHBsaWNhdGlvbi1kYXRhc2V0LWNvbXBvbmVudC9kYXRhc2V0LXJlc3QtYXBpL2RhdGFzZXQtcmVzdC1hcGkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFTL0UsTUFBTSxPQUFPLHVCQUF1QjtJQWtCbEMsWUFDVSxNQUFxQixFQUN0QixhQUE0QjtRQUQzQixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3RCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBbkJyQyxpQkFBWSxHQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtRQUNyRixpQkFBWSxHQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUNsRiw2QkFBd0IsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQWtCOUUsQ0FBQztJQWRMLElBQ0ksY0FBYyxDQUFDLEtBQUs7UUFFdEIsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLFlBQVksSUFBSSxTQUFTLEVBQUU7WUFDL0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3BDLEtBQUssQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUE7U0FDdkk7UUFFRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0lBQ2hDLENBQUM7SUFPRCxRQUFRO0lBQ1IsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixJQUFJLEdBQUcsR0FBRyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFBO1FBQzNHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUUzRCxDQUFDO0lBRUQseUJBQXlCLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBRTdELENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBRW5ELENBQUM7SUFJRCxrQkFBa0IsQ0FBQyxLQUFhLEVBQUUsU0FBd0I7UUFFeEQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUN4RixNQUFNLFdBQVcsR0FBRyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBRS9ELElBQUksV0FBVyxHQUFHLENBQUMsSUFBSSxXQUFXLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsTUFBTTtZQUFFLE9BQU87UUFHcEcsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFDM0QsQ0FBQzs7b0hBM0RVLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLDZLQ1RwQyxrbklBbUZNOzJGRDFFTyx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0Usc0JBQXNCO2dJQU9mLHdCQUF3QjtzQkFBeEMsTUFBTTtnQkFLSCxjQUFjO3NCQURqQixLQUFLO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZGF0YXNldC1yZXN0LWFwaScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhc2V0LXJlc3QtYXBpLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0YXNldC1yZXN0LWFwaS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIERhdGFzZXRSZXN0QXBpQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAga3BpX2Z1bmN0aW9uOiBhbnkgPSBbXCJzdW1cIiwgXCJjb3VudFwiLCBcImF2Z1wiLCBcIm1heFwiLCBcIm1pblwiLCBcInN0ZGRldlwiLCBcImNvdW50X2Rpc3RpbmN0XCJdXG4gIGtwaV9vcGVyYXRvcjogYW55ID0gW1wiZXFcIiwgXCJndGVcIiwgXCJsdGVcIiwgXCJuZVwiLCBcImluXCIsIFwibm90SW5cIiwgXCJjb250YWluc1wiLCBcInN0YXJ0c1dpdGhcIiwgXCJlbmRzV2l0aFwiXVxuICBAT3V0cHV0KCkgcHVibGljIGdldFJlc3RBcGlCdWxiZGVyRGF0YVNldDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIGFwaUJ1bGRlckRhdGFzZXQ6IGFueTtcblxuXG4gIEBJbnB1dCgncmVzdEFwaURhdGFzZXQnKVxuICBzZXQgcmVzdEFwaURhdGFzZXQodmFsdWUpIHtcblxuICAgIGlmICh2YWx1ZS5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnMgPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWx1ZS5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnMgPSBbXTtcbiAgICAgIHZhbHVlLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5wdXNoKHsgXCJsb2NhbENvbHVtblwiOiBcIlwiLCBcInNlcnZlckNvbHVtblwiOiBcIlwiLCBcIm9wZXJhdG9yTmFtZVwiOiBcIlwiLCBcImRlZmF1bHRWYWx1ZVwiOiBcIlwiLCBcImRhdGFUeXBlXCI6IFwiXCIgfSlcbiAgICB9XG5cbiAgICB0aGlzLmFwaUJ1bGRlckRhdGFzZXQgPSB2YWx1ZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxuICAgIHB1YmxpYyBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gIH1cblxuICBhZGRGaWx0ZXJNYXBpbmdDb2x1bW5zKCkge1xuICAgIGxldCBvYmogPSB7IFwibG9jYWxDb2x1bW5cIjogXCJcIiwgXCJzZXJ2ZXJDb2x1bW5cIjogXCJcIiwgXCJvcGVyYXRvck5hbWVcIjogXCJcIiwgXCJkZWZhdWx0VmFsdWVcIjogXCJcIiwgXCJkYXRhVHlwZVwiOiBcIlwiIH1cbiAgICB0aGlzLmFwaUJ1bGRlckRhdGFzZXQucXVlcnlDb25maWcubWFwZWRGaWx0ZXJzLnB1c2gob2JqKTtcblxuICB9XG5cbiAgZGVsZXRlRmlsdGVyTWFwaW5nQ29sdW1ucyhpKSB7XG4gICAgdGhpcy5hcGlCdWxkZXJEYXRhc2V0LnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5zcGxpY2UoaSwgMSlcblxuICB9XG5cbiAgc2F2ZUNvbHVtbk1hcGluZygpIHtcbiAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKCdNYXBlZCBGaWx0ZXIgU3VjY2Vzc2Z1bGx5Jyk7XG5cbiAgfVxuXG5cblxuICBtb3ZlSXRlbUZvckNvbHVtbnMoaW5kZXg6IG51bWJlciwgZGlyZWN0aW9uOiAndXAnIHwgJ2Rvd24nKTogdm9pZCB7XG4gICAgLy8gUHJldmVudCBtb3ZpbmcgYmV5b25kIGFycmF5IGJvdW5kc1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5hcGlCdWxkZXJEYXRhc2V0LnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBuZXdQb3NpdGlvbiA9IGRpcmVjdGlvbiA9PT0gJ3VwJyA/IGluZGV4IC0gMSA6IGluZGV4ICsgMTtcbiAgICAvLyBQcmV2ZW50IG1vdmluZyBiZXlvbmQgYXJyYXkgYm91bmRzXG4gICAgaWYgKG5ld1Bvc2l0aW9uIDwgMCB8fCBuZXdQb3NpdGlvbiA+PSB0aGlzLmFwaUJ1bGRlckRhdGFzZXQucXVlcnlDb25maWcubWFwZWRGaWx0ZXJzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgLy8gTW92ZSBpdGVtXG4gICAgY29uc3QgaXRlbVRvTW92ZSA9IHRoaXMuYXBpQnVsZGVyRGF0YXNldC5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnNbaW5kZXhdO1xuICAgIHRoaXMuYXBpQnVsZGVyRGF0YXNldC5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnMuc3BsaWNlKGluZGV4LCAxKTsgLy8gUmVtb3ZlIGl0ZW0gZnJvbSBjdXJyZW50IHBvc2l0aW9uXG4gICAgdGhpcy5hcGlCdWxkZXJEYXRhc2V0LnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5zcGxpY2UobmV3UG9zaXRpb24sIDAsIGl0ZW1Ub01vdmUpOyAvLyBJbnNlcnQgaXRlbSBpbiBuZXcgcG9zaXRpb25cbiAgfVxuXG4gIGNyZWF0ZURhdGFTZXQoKSB7XG4gICAgdGhpcy5nZXRSZXN0QXBpQnVsYmRlckRhdGFTZXQuZW1pdCh0aGlzLmFwaUJ1bGRlckRhdGFzZXQpXG4gIH1cblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwibS0yXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgbWItMlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiB3LTEvM1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPkVuZCBQb2ludDwvZGl2PlxuICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiYXBpQnVsZGVyRGF0YXNldC5hcGlcIj48L2R4LXRleHQtYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm14LTIgdy0xLzNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5BcGkgVHlwZTwvZGl2PlxuICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW2RhdGFTb3VyY2VdPVwiWydnZXQnLCdwb3N0J11cIiBbKG5nTW9kZWwpXT1cImFwaUJ1bGRlckRhdGFzZXQuYXBpVHlwZVwiPlxuICAgICAgICAgICAgPC9keC1zZWxlY3QtYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtYXV0byBtaW4tdy0wIG15LTJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbGcgcHktMiBmb250LWV4dHJhYm9sZCBib3JkZXItYiBiZy1ncmF5LTcwMCB0ZXh0LXdoaXRlIHB4LTJcIj4gRmlsdGVyIE1hcGluZ1xuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB0LTIgYm9yZGVyLXggYm9yZGVyLWIgXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMiBmbGV4IGp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYXBpQnVsZGVyRGF0YXNldC5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnM7IGxldCBpID0gaW5kZXg7XCI+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMSBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj4gTG9jYWwgQ29sdW1uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cIml0ZW0ubG9jYWxDb2x1bW5cIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0xIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPiBTZXJ2ZXIgQ29sdW1uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cIml0ZW0uc2VydmVyQ29sdW1uXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMSBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj4gT3BlcmF0b3I8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiIFtpdGVtc109XCJrcGlfb3BlcmF0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtLm9wZXJhdG9yTmFtZVwiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMSBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj4gRGF0YXR5cGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiWydkYXRlJywnc3RyaW5nJywndGltZXN0YW1wJywnaW50JywgJ2RvdWJsZScsICdib29sZWFuJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtLmRhdGFUeXBlXCI+PC9keC1zZWxlY3QtYm94PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0xIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPiBEZWZhdWx0IFZhbHVlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cIml0ZW0uZGVmYXVsdFZhbHVlXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMSBtdC04XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaSAhPT0gMFwiIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9saWdodF9zbX19IGN1cnNvci1wb2ludGVyIG14LTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtb3ZlSXRlbUZvckNvbHVtbnMoaSwgJ3VwJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LXVwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpICE9PSBhcGlCdWxkZXJEYXRhc2V0LnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5sZW5ndGggLSAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fbGlnaHRfc219fSBjdXJzb3ItcG9pbnRlciBteC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibW92ZUl0ZW1Gb3JDb2x1bW5zKGksICdkb3duJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LWRvd25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTEgbXQtOCB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9kYW5nZXJfc219fSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlRmlsdGVyTWFwaW5nQ29sdW1ucyhpKVwiPjxpIGNsYXNzPVwiZmEgZmEtdHJhc2gtb1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWVuZCBteS0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3N1Y2Nlc3Nfc219fSBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzYXZlQ29sdW1uTWFwaW5nKClcIj5TYXZlXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXBpbmc8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fcHJpbWFyeV9zbX19IGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRGaWx0ZXJNYXBpbmdDb2x1bW5zKClcIj5BZGRcbiAgICAgICAgICAgICAgICAgICAgICAgIE1hcGluZzwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBqdXN0aWZ5LWVuZCBtdC01IGJvcmRlci10XCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9zdWNjZXNzX21kfX0gY3Vyc29yLXBvaW50ZXIgbXgtMSBteS0yXCIgKGNsaWNrKT1cImNyZWF0ZURhdGFTZXQoKVwiPlxuICAgICAgICAgICAgICAgIFN1Ym1pdCBEYXRhU2V0XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNldC1yZXN0LWFwaS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvYXBwbGljYXRpb24tZGF0YXNldC1jb21wb25lbnQvZGF0YXNldC1yZXN0LWFwaS9kYXRhc2V0LXJlc3QtYXBpLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvYXBwbGljYXRpb24tY29udHJvbGxlci9hcHBsaWNhdGlvbi1kYXRhc2V0LWNvbXBvbmVudC9kYXRhc2V0LXJlc3QtYXBpL2RhdGFzZXQtcmVzdC1hcGkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFTL0UsTUFBTSxPQUFPLHVCQUF1QjtJQWtCbEMsWUFDVSxNQUFxQixFQUN0QixhQUE0QjtRQUQzQixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3RCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBbkJyQyxpQkFBWSxHQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtRQUNyRixpQkFBWSxHQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUNsRiw2QkFBd0IsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQWtCOUUsQ0FBQztJQWRMLElBQ0ksY0FBYyxDQUFDLEtBQUs7UUFFdEIsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLFlBQVksSUFBSSxTQUFTLEVBQUU7WUFDL0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3BDLEtBQUssQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBQyxXQUFXLEVBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtTQUN0SjtRQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFDaEMsQ0FBQztJQU9ELFFBQVE7SUFDUixDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLElBQUksR0FBRyxHQUFHLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFDLFdBQVcsRUFBQyxFQUFFLEVBQUUsQ0FBQTtRQUMxSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFM0QsQ0FBQztJQUVELHlCQUF5QixDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUU3RCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUVuRCxDQUFDO0lBSUQsa0JBQWtCLENBQUMsS0FBYSxFQUFFLFNBQXdCO1FBRXhELElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDeEYsTUFBTSxXQUFXLEdBQUcsU0FBUyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUUvRCxJQUFJLFdBQVcsR0FBRyxDQUFDLElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBR3BHLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQzNELENBQUM7O29IQTNEVSx1QkFBdUI7d0dBQXZCLHVCQUF1Qiw2S0NUcEMsdTBJQXVGTTsyRkQ5RU8sdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLHNCQUFzQjtnSUFPZix3QkFBd0I7c0JBQXhDLE1BQU07Z0JBS0gsY0FBYztzQkFEakIsS0FBSzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWRhdGFzZXQtcmVzdC1hcGknLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YXNldC1yZXN0LWFwaS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGFzZXQtcmVzdC1hcGkuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRhc2V0UmVzdEFwaUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGtwaV9mdW5jdGlvbjogYW55ID0gW1wic3VtXCIsIFwiY291bnRcIiwgXCJhdmdcIiwgXCJtYXhcIiwgXCJtaW5cIiwgXCJzdGRkZXZcIiwgXCJjb3VudF9kaXN0aW5jdFwiXVxuICBrcGlfb3BlcmF0b3I6IGFueSA9IFtcImVxXCIsIFwiZ3RlXCIsIFwibHRlXCIsIFwibmVcIiwgXCJpblwiLCBcIm5vdEluXCIsIFwiY29udGFpbnNcIiwgXCJzdGFydHNXaXRoXCIsIFwiZW5kc1dpdGhcIl1cbiAgQE91dHB1dCgpIHB1YmxpYyBnZXRSZXN0QXBpQnVsYmRlckRhdGFTZXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBhcGlCdWxkZXJEYXRhc2V0OiBhbnk7XG5cblxuICBASW5wdXQoJ3Jlc3RBcGlEYXRhc2V0JylcbiAgc2V0IHJlc3RBcGlEYXRhc2V0KHZhbHVlKSB7XG5cbiAgICBpZiAodmFsdWUucXVlcnlDb25maWcubWFwZWRGaWx0ZXJzID09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsdWUucXVlcnlDb25maWcubWFwZWRGaWx0ZXJzID0gW107XG4gICAgICB2YWx1ZS5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnMucHVzaCh7IFwibG9jYWxDb2x1bW5cIjogXCJcIiwgXCJzZXJ2ZXJDb2x1bW5cIjogXCJcIiwgXCJvcGVyYXRvck5hbWVcIjogXCJcIiwgXCJkZWZhdWx0VmFsdWVcIjogXCJcIiwgXCJkYXRhVHlwZVwiOiBcIlwiLFwiZm9ybWF0dGVyXCI6XCJcIiB9KVxuICAgIH1cblxuICAgIHRoaXMuYXBpQnVsZGVyRGF0YXNldCA9IHZhbHVlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXG4gICAgcHVibGljIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2VcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgfVxuXG4gIGFkZEZpbHRlck1hcGluZ0NvbHVtbnMoKSB7XG4gICAgbGV0IG9iaiA9IHsgXCJsb2NhbENvbHVtblwiOiBcIlwiLCBcInNlcnZlckNvbHVtblwiOiBcIlwiLCBcIm9wZXJhdG9yTmFtZVwiOiBcIlwiLCBcImRlZmF1bHRWYWx1ZVwiOiBcIlwiLCBcImRhdGFUeXBlXCI6IFwiXCIsXCJmb3JtYXR0ZXJcIjpcIlwiIH1cbiAgICB0aGlzLmFwaUJ1bGRlckRhdGFzZXQucXVlcnlDb25maWcubWFwZWRGaWx0ZXJzLnB1c2gob2JqKTtcblxuICB9XG5cbiAgZGVsZXRlRmlsdGVyTWFwaW5nQ29sdW1ucyhpKSB7XG4gICAgdGhpcy5hcGlCdWxkZXJEYXRhc2V0LnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5zcGxpY2UoaSwgMSlcblxuICB9XG5cbiAgc2F2ZUNvbHVtbk1hcGluZygpIHtcbiAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKCdNYXBlZCBGaWx0ZXIgU3VjY2Vzc2Z1bGx5Jyk7XG5cbiAgfVxuXG5cblxuICBtb3ZlSXRlbUZvckNvbHVtbnMoaW5kZXg6IG51bWJlciwgZGlyZWN0aW9uOiAndXAnIHwgJ2Rvd24nKTogdm9pZCB7XG4gICAgLy8gUHJldmVudCBtb3ZpbmcgYmV5b25kIGFycmF5IGJvdW5kc1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5hcGlCdWxkZXJEYXRhc2V0LnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBuZXdQb3NpdGlvbiA9IGRpcmVjdGlvbiA9PT0gJ3VwJyA/IGluZGV4IC0gMSA6IGluZGV4ICsgMTtcbiAgICAvLyBQcmV2ZW50IG1vdmluZyBiZXlvbmQgYXJyYXkgYm91bmRzXG4gICAgaWYgKG5ld1Bvc2l0aW9uIDwgMCB8fCBuZXdQb3NpdGlvbiA+PSB0aGlzLmFwaUJ1bGRlckRhdGFzZXQucXVlcnlDb25maWcubWFwZWRGaWx0ZXJzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgLy8gTW92ZSBpdGVtXG4gICAgY29uc3QgaXRlbVRvTW92ZSA9IHRoaXMuYXBpQnVsZGVyRGF0YXNldC5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnNbaW5kZXhdO1xuICAgIHRoaXMuYXBpQnVsZGVyRGF0YXNldC5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnMuc3BsaWNlKGluZGV4LCAxKTsgLy8gUmVtb3ZlIGl0ZW0gZnJvbSBjdXJyZW50IHBvc2l0aW9uXG4gICAgdGhpcy5hcGlCdWxkZXJEYXRhc2V0LnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5zcGxpY2UobmV3UG9zaXRpb24sIDAsIGl0ZW1Ub01vdmUpOyAvLyBJbnNlcnQgaXRlbSBpbiBuZXcgcG9zaXRpb25cbiAgfVxuXG4gIGNyZWF0ZURhdGFTZXQoKSB7XG4gICAgdGhpcy5nZXRSZXN0QXBpQnVsYmRlckRhdGFTZXQuZW1pdCh0aGlzLmFwaUJ1bGRlckRhdGFzZXQpXG4gIH1cblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwibS0yXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgbWItMlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiB3LTEvM1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPkVuZCBQb2ludDwvZGl2PlxuICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiYXBpQnVsZGVyRGF0YXNldC5hcGlcIj48L2R4LXRleHQtYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm14LTIgdy0xLzNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5BcGkgVHlwZTwvZGl2PlxuICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW2RhdGFTb3VyY2VdPVwiWydnZXQnLCdwb3N0J11cIiBbKG5nTW9kZWwpXT1cImFwaUJ1bGRlckRhdGFzZXQuYXBpVHlwZVwiPlxuICAgICAgICAgICAgPC9keC1zZWxlY3QtYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtYXV0byBtaW4tdy0wIG15LTJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbGcgcHktMiBmb250LWV4dHJhYm9sZCBib3JkZXItYiBiZy1ncmF5LTcwMCB0ZXh0LXdoaXRlIHB4LTJcIj4gRmlsdGVyIE1hcGluZ1xuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInB0LTIgYm9yZGVyLXggYm9yZGVyLWIgXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMiBmbGV4IGp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYXBpQnVsZGVyRGF0YXNldC5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnM7IGxldCBpID0gaW5kZXg7XCI+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMSBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj4gTG9jYWwgQ29sdW1uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cIml0ZW0ubG9jYWxDb2x1bW5cIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0xIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPiBTZXJ2ZXIgQ29sdW1uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cIml0ZW0uc2VydmVyQ29sdW1uXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMSBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj4gT3BlcmF0b3I8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiIFtpdGVtc109XCJrcGlfb3BlcmF0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtLm9wZXJhdG9yTmFtZVwiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMSBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj4gRGF0YXR5cGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiWydkYXRlJywnc3RyaW5nJywndGltZXN0YW1wJywnaW50JywgJ2RvdWJsZScsICdib29sZWFuJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtLmRhdGFUeXBlXCI+PC9keC1zZWxlY3QtYm94PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0xIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPiBGb3JtYXR0ZXI8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiaXRlbS5mb3JtYXR0ZXJcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0xIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPiBEZWZhdWx0IFZhbHVlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cIml0ZW0uZGVmYXVsdFZhbHVlXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMSBtdC04XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaSAhPT0gMFwiIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9saWdodF9zbX19IGN1cnNvci1wb2ludGVyIG14LTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtb3ZlSXRlbUZvckNvbHVtbnMoaSwgJ3VwJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LXVwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpICE9PSBhcGlCdWxkZXJEYXRhc2V0LnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5sZW5ndGggLSAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fbGlnaHRfc219fSBjdXJzb3ItcG9pbnRlciBteC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibW92ZUl0ZW1Gb3JDb2x1bW5zKGksICdkb3duJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LWRvd25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTEgbXQtOCB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9kYW5nZXJfc219fSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlRmlsdGVyTWFwaW5nQ29sdW1ucyhpKVwiPjxpIGNsYXNzPVwiZmEgZmEtdHJhc2gtb1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWVuZCBteS0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3N1Y2Nlc3Nfc219fSBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzYXZlQ29sdW1uTWFwaW5nKClcIj5TYXZlXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXBpbmc8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fcHJpbWFyeV9zbX19IGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRGaWx0ZXJNYXBpbmdDb2x1bW5zKClcIj5BZGRcbiAgICAgICAgICAgICAgICAgICAgICAgIE1hcGluZzwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBqdXN0aWZ5LWVuZCBtdC01IGJvcmRlci10XCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9zdWNjZXNzX21kfX0gY3Vyc29yLXBvaW50ZXIgbXgtMSBteS0yXCIgKGNsaWNrKT1cImNyZWF0ZURhdGFTZXQoKVwiPlxuICAgICAgICAgICAgICAgIFN1Ym1pdCBEYXRhU2V0XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
|
package/esm2020/lib/application-controller/application-filter/application-filter.component.mjs
CHANGED
|
@@ -33,7 +33,8 @@ export class ApplicationFilterComponent {
|
|
|
33
33
|
"defaultFilterType": "dynamic",
|
|
34
34
|
"defaultFilterValue": "15,days",
|
|
35
35
|
"momentFunction": "subtract",
|
|
36
|
-
"momentFormat": "YYYY-MM-DD"
|
|
36
|
+
"momentFormat": "YYYY-MM-DD",
|
|
37
|
+
"queryFormat": "YYYYMMDD"
|
|
37
38
|
},
|
|
38
39
|
{
|
|
39
40
|
"apiName": "endDate",
|
|
@@ -44,7 +45,8 @@ export class ApplicationFilterComponent {
|
|
|
44
45
|
"defaultFilterType": "dynamic",
|
|
45
46
|
"defaultFilterValue": "1,days",
|
|
46
47
|
"momentFunction": "subtract",
|
|
47
|
-
"momentFormat": "YYYY-MM-DD"
|
|
48
|
+
"momentFormat": "YYYY-MM-DD",
|
|
49
|
+
"queryFormat": "YYYYMMDD"
|
|
48
50
|
}]
|
|
49
51
|
};
|
|
50
52
|
this.filter_type = ['single', 'multiple', 'date', 'datetime', "content", "context"];
|
|
@@ -95,7 +97,8 @@ export class ApplicationFilterComponent {
|
|
|
95
97
|
"defaultFilterType": "dynamic",
|
|
96
98
|
"defaultFilterValue": "15,days",
|
|
97
99
|
"momentFunction": "subtract",
|
|
98
|
-
"momentFormat": "YYYY-MM-DD"
|
|
100
|
+
"momentFormat": "YYYY-MM-DD",
|
|
101
|
+
"queryFormat": "YYYYMMDD"
|
|
99
102
|
},
|
|
100
103
|
{
|
|
101
104
|
"apiName": "endDate",
|
|
@@ -106,11 +109,13 @@ export class ApplicationFilterComponent {
|
|
|
106
109
|
"defaultFilterType": "dynamic",
|
|
107
110
|
"defaultFilterValue": "1,days",
|
|
108
111
|
"momentFunction": "subtract",
|
|
109
|
-
"momentFormat": "YYYY-MM-DD"
|
|
112
|
+
"momentFormat": "YYYY-MM-DD",
|
|
113
|
+
"queryFormat": "YYYYMMDD"
|
|
110
114
|
}]
|
|
111
115
|
};
|
|
112
116
|
}
|
|
113
117
|
editFilter(data) {
|
|
118
|
+
debugger;
|
|
114
119
|
this.creatFilterObject = data;
|
|
115
120
|
this.isNewFilterCreate = true;
|
|
116
121
|
}
|
|
@@ -208,9 +213,9 @@ export class ApplicationFilterComponent {
|
|
|
208
213
|
}
|
|
209
214
|
}
|
|
210
215
|
ApplicationFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ApplicationFilterComponent, deps: [{ token: i1.ApplicationContentService }, { token: i2.CommonService }, { token: i3.ToastrService }, { token: i4.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
211
|
-
ApplicationFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ApplicationFilterComponent, selector: "app-application-filter", ngImport: i0, template: "<div class=\"flex flex-col flex-auto min-w-0\">\n <lib-common-header [pageTitle]=\"'Application Filters'\"></lib-common-header>\n\n\n\n\n <div class=\"p-4 w-full\">\n <div class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <h6\n class=\"mb-2 font-bold text-lg tracking-tight text-gray-900 dark:text-white border-b pb-3 flex items-center\">\n <i class=\"fa fa-table mr-2\"></i> Filters\n <div class=\"ml-auto\">\n <button class=\"bg-blue-500 hover:bg-blue-700 text-white font-bold py-1 px-3 rounded\"\n (click)=\"getCreateNewFilter()\">\n Add Filter\n </button>\n </div>\n </h6>\n <app-loader *ngIf=\"isLoader\"></app-loader>\n <dx-data-grid [columnAutoWidth]=\"true\" [dataSource]=\"filterDataSource\" [hoverStateEnabled]=\"true\"\n *ngIf=\"!isLoader\" [selectedRowKeys]=\"[]\" [showBorders]=\"true\" [showColumnLines]=\"true\"\n [showRowLines]=\"true\" id=\"gridContainer\">\n <dxo-paging [pageSize]=\"10\"></dxo-paging>\n <dxo-export [enabled]=\"true\"></dxo-export>\n\n <dxi-column dataField=\"filterName\"></dxi-column>\n <dxi-column dataField=\"filterId\"></dxi-column>\n <dxi-column dataField=\"createdBy\"></dxi-column>\n <dxi-column dataField=\"creationDate\"></dxi-column>\n <dxi-column dataField=\"action\" cellTemplate=\"cellTemplate\" [fixed]=\"true\"\n fixedPosition=\"right\"></dxi-column>\n <div *dxTemplate=\"let data of 'cellTemplate'\">\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"editFilter(data.data)\">\n Edit\n </button>\n <button class=\"{{commonService.btn_danger_md}}\" (click)=\"deleteFilter(data.data)\">\n Delete\n </button>\n </div>\n\n\n </dx-data-grid>\n </div>\n </div>\n <div class=\"p-2 w-full\" *ngIf=\"isNewFilterCreate\">\n <div class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <h6\n class=\"mb-2 font-bold text-lg tracking-tight text-gray-900 dark:text-white border-b pb-3 flex items-center\">\n <i class=\"fa fa-table mr-2\"></i> Create Filters\n\n </h6>\n <div class=\"flex flex-row my-2\">\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">Filter Name</div>\n <dx-text-box [(ngModel)]=\"creatFilterObject.filterName\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-5 border\">\n <div class=\"flex flex-col flex-auto min-w-0 \">\n <div class=\"text-lg py-2 font-extrabold border-b bg-gray-700 text-white px-2\"> Select Filters\n </div>\n <div class=\"pt-2 border-x border-b \">\n <ng-container *ngFor=\"let item of creatFilterObject.filterItems; let i = index;\">\n <div class=\"my-2 flex flex-row justify-between border-b\">\n\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2 mt-5\"> </div>\n <dx-check-box [(ngModel)]=\"item.display\" text=\"Display\"></dx-check-box>\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\">Filter Name </div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"kpiFilterConfigService\"\n displayExpr=\"apiName\" valueExpr=\"apiUrl\"\n [(ngModel)]=\"item.apiName\"></dx-select-box>\n </div>\n\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\">Operator Key Name </div>\n <dx-text-box [(ngModel)]=\"item.operatorName\"></dx-text-box>\n\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> FIlter Label</div>\n <dx-text-box [(ngModel)]=\"item.label\"></dx-text-box>\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> FIlter Container</div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"filter_type\"\n [(ngModel)]=\"item.filterType\"></dx-select-box>\n\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> FIlter type</div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"defaultFilterTypeDataSource\"\n [(ngModel)]=\"item.defaultFilterType\"\n value=\"defaultFilterTypeDataSource[0]\"></dx-select-box>\n\n </div>\n\n <ng-container\n *ngIf=\"item.defaultFilterType == 'dynamic' && (item.filterType == 'date' || item.filterType == 'datetime')\">\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Function </div>\n <dx-select-box [items]=\"momentFunction\"\n [(ngModel)]=\"item.momentFunction\"></dx-select-box>\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Additionals </div>\n <dx-text-box [(ngModel)]=\"item.momentFormat\"></dx-text-box>\n </div>\n\n </ng-container>\n <ng-container\n *ngIf=\"item.defaultFilterType == 'static' && (item.filterType == 'date' || item.filterType == 'datetime')\">\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Default Value </div>\n <dx-text-box \n [(ngModel)]=\"item.defaultFilterValue\"></dx-text-box>\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Display Format </div>\n <dx-text-box [(ngModel)]=\"item.momentFormat\"></dx-text-box>\n </div>\n </ng-container>\n <ng-container\n *ngIf=\"item.defaultFilterType == 'dynamic' && (item.filterType !== 'date' || item.filterType !== 'datetime')\">\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> FIlter Default Value</div>\n <dx-text-box [(ngModel)]=\"item.defaultFilterValue\"></dx-text-box>\n </div>\n </ng-container>\n\n <div class=\"px-2 mt-8 text-center\">\n <button class=\"{{commonService.btn_danger_sm}} cursor-pointer\"\n (click)=\"deleteFilters(i)\"><i class=\"fa fa-trash-o\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </ng-container>\n <div class=\"flex flex-row justify-end my-2\">\n <button class=\"{{commonService.btn_primary_sm}} cursor-pointer\" (click)=\"addFilter()\">Add\n Columns</button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"flex w-full justify-end mt-5 border-t\">\n <button class=\"{{commonService.btn_success_md}} cursor-pointer mx-1 my-2\" (click)=\"createFilterItems()\">\n Submit Filter\n </button>\n </div>\n\n </div>\n </div>\n\n\n\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i7.DxoExportComponent, selector: "dxo-export", inputs: ["backgroundColor", "enabled", "fileName", "formats", "margin", "printingEnabled", "proxyUrl", "svgToCanvas", "allowExportSelectedData", "customizeExcelCell", "excelFilterEnabled", "excelWrapTextEnabled", "ignoreExcelErrors", "texts"] }, { kind: "component", type: i8.DxCheckBoxComponent, selector: "dx-check-box", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "iconSize", "isValid", "name", "readOnly", "rtlEnabled", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconSizeChange", "isValidChange", "nameChange", "readOnlyChange", "rtlEnabledChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i9.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "customizeExportData", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "focusStateEnabled", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExported", "onExporting", "onFileSaving", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "customizeExportDataChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "focusStateEnabledChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i7.DxiColumnComponent, selector: "dxi-column", inputs: ["alignment", "allowEditing", "allowExporting", "allowFiltering", "allowFixing", "allowGrouping", "allowHeaderFiltering", "allowHiding", "allowReordering", "allowResizing", "allowSearch", "allowSorting", "autoExpandGroup", "buttons", "calculateCellValue", "calculateDisplayValue", "calculateFilterExpression", "calculateGroupValue", "calculateSortValue", "caption", "cellTemplate", "columns", "cssClass", "customizeText", "dataField", "dataType", "editCellTemplate", "editorOptions", "encodeHtml", "falseText", "filterOperations", "filterType", "filterValue", "filterValues", "fixed", "fixedPosition", "format", "formItem", "groupCellTemplate", "groupIndex", "headerCellTemplate", "headerFilter", "hidingPriority", "isBand", "lookup", "minWidth", "name", "ownerBand", "renderAsync", "selectedFilterOperation", "setCellValue", "showEditorAlways", "showInColumnChooser", "showWhenGrouped", "sortIndex", "sortingMethod", "sortOrder", "trueText", "type", "validationRules", "visible", "visibleIndex", "width"], outputs: ["filterValueChange", "filterValuesChange", "groupIndexChange", "selectedFilterOperationChange", "sortIndexChange", "sortOrderChange", "visibleChange", "visibleIndexChange"] }, { kind: "component", type: i7.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i10.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: i11.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: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i13.LoaderComponent, selector: "app-loader" }, { kind: "component", type: i14.CommonHeaderComponent, selector: "lib-common-header", inputs: ["pageTitle"] }] });
|
|
216
|
+
ApplicationFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ApplicationFilterComponent, selector: "app-application-filter", ngImport: i0, template: "<div class=\"flex flex-col flex-auto min-w-0\">\n <lib-common-header [pageTitle]=\"'Application Filters'\"></lib-common-header>\n\n\n\n\n <div class=\"p-4 w-full\">\n <div class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <h6\n class=\"mb-2 font-bold text-lg tracking-tight text-gray-900 dark:text-white border-b pb-3 flex items-center\">\n <i class=\"fa fa-table mr-2\"></i> Filters\n <div class=\"ml-auto\">\n <button class=\"bg-blue-500 hover:bg-blue-700 text-white font-bold py-1 px-3 rounded\"\n (click)=\"getCreateNewFilter()\">\n Add Filter\n </button>\n </div>\n </h6>\n <app-loader *ngIf=\"isLoader\"></app-loader>\n <dx-data-grid [columnAutoWidth]=\"true\" [dataSource]=\"filterDataSource\" [hoverStateEnabled]=\"true\"\n *ngIf=\"!isLoader\" [selectedRowKeys]=\"[]\" [showBorders]=\"true\" [showColumnLines]=\"true\"\n [showRowLines]=\"true\" id=\"gridContainer\">\n <dxo-paging [pageSize]=\"10\"></dxo-paging>\n <dxo-export [enabled]=\"true\"></dxo-export>\n\n <dxi-column dataField=\"filterName\"></dxi-column>\n <dxi-column dataField=\"filterId\"></dxi-column>\n <dxi-column dataField=\"createdBy\"></dxi-column>\n <dxi-column dataField=\"creationDate\"></dxi-column>\n <dxi-column dataField=\"action\" cellTemplate=\"cellTemplate\" [fixed]=\"true\"\n fixedPosition=\"right\"></dxi-column>\n <div *dxTemplate=\"let data of 'cellTemplate'\">\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"editFilter(data.data)\">\n Edit\n </button>\n <button class=\"{{commonService.btn_danger_md}}\" (click)=\"deleteFilter(data.data)\">\n Delete\n </button>\n </div>\n\n\n </dx-data-grid>\n </div>\n </div>\n <div class=\"p-2 w-full\" *ngIf=\"isNewFilterCreate\">\n <div class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <h6\n class=\"mb-2 font-bold text-lg tracking-tight text-gray-900 dark:text-white border-b pb-3 flex items-center\">\n <i class=\"fa fa-table mr-2\"></i> Create Filters\n\n </h6>\n <div class=\"flex flex-row my-2\">\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">Filter Name</div>\n <dx-text-box [(ngModel)]=\"creatFilterObject.filterName\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-5 border\">\n <div class=\"flex flex-col flex-auto min-w-0 \">\n <div class=\"text-lg py-2 font-extrabold border-b bg-gray-700 text-white px-2\"> Select Filters\n </div>\n <div class=\"pt-2 border-x border-b \">\n <ng-container *ngFor=\"let item of creatFilterObject.filterItems; let i = index;\">\n <div class=\"my-2 flex flex-row justify-between border-b\">\n\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2 mt-5\"> </div>\n <dx-check-box [(ngModel)]=\"item.display\" text=\"Display\"></dx-check-box>\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\">Filter Name </div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"kpiFilterConfigService\"\n displayExpr=\"apiName\" valueExpr=\"apiUrl\"\n [(ngModel)]=\"item.apiName\"></dx-select-box>\n </div>\n\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\">Operator Key Name </div>\n <dx-text-box [(ngModel)]=\"item.operatorName\"></dx-text-box>\n\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> FIlter Label</div>\n <dx-text-box [(ngModel)]=\"item.label\"></dx-text-box>\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> FIlter Container</div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"filter_type\"\n [(ngModel)]=\"item.filterType\"></dx-select-box>\n\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> FIlter type</div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"defaultFilterTypeDataSource\"\n [(ngModel)]=\"item.defaultFilterType\"\n value=\"defaultFilterTypeDataSource[0]\"></dx-select-box>\n\n </div>\n\n <ng-container\n *ngIf=\"item.defaultFilterType == 'dynamic' && (item.filterType == 'date' || item.filterType == 'datetime')\">\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Function </div>\n <dx-select-box [items]=\"momentFunction\"\n [(ngModel)]=\"item.momentFunction\"></dx-select-box>\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Display Format </div>\n <dx-text-box [(ngModel)]=\"item.momentFormat\"></dx-text-box>\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Query Format </div>\n <dx-text-box [(ngModel)]=\"item.queryFormat\"></dx-text-box>\n </div>\n\n </ng-container>\n <ng-container\n *ngIf=\"item.defaultFilterType == 'static' && (item.filterType == 'date' || item.filterType == 'datetime')\">\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Default Value </div>\n <dx-text-box \n [(ngModel)]=\"item.defaultFilterValue\"></dx-text-box>\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Display Format </div>\n <dx-text-box [(ngModel)]=\"item.momentFormat\"></dx-text-box>\n </div>\n </ng-container>\n <ng-container\n *ngIf=\"item.defaultFilterType == 'dynamic' && (item.filterType !== 'date' || item.filterType !== 'datetime')\">\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> FIlter Default Value</div>\n <dx-text-box [(ngModel)]=\"item.defaultFilterValue\"></dx-text-box>\n </div>\n </ng-container>\n\n <div class=\"px-2 mt-8 text-center\">\n <button class=\"{{commonService.btn_danger_sm}} cursor-pointer\"\n (click)=\"deleteFilters(i)\"><i class=\"fa fa-trash-o\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </ng-container>\n <div class=\"flex flex-row justify-end my-2\">\n <button class=\"{{commonService.btn_primary_sm}} cursor-pointer\" (click)=\"addFilter()\">Add\n Columns</button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"flex w-full justify-end mt-5 border-t\">\n <button class=\"{{commonService.btn_success_md}} cursor-pointer mx-1 my-2\" (click)=\"createFilterItems()\">\n Submit Filter\n </button>\n </div>\n\n </div>\n </div>\n\n\n\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i7.DxoExportComponent, selector: "dxo-export", inputs: ["backgroundColor", "enabled", "fileName", "formats", "margin", "printingEnabled", "proxyUrl", "svgToCanvas", "allowExportSelectedData", "customizeExcelCell", "excelFilterEnabled", "excelWrapTextEnabled", "ignoreExcelErrors", "texts"] }, { kind: "component", type: i8.DxCheckBoxComponent, selector: "dx-check-box", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "iconSize", "isValid", "name", "readOnly", "rtlEnabled", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconSizeChange", "isValidChange", "nameChange", "readOnlyChange", "rtlEnabledChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i9.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "customizeExportData", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "focusStateEnabled", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExported", "onExporting", "onFileSaving", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "customizeExportDataChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "focusStateEnabledChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i7.DxiColumnComponent, selector: "dxi-column", inputs: ["alignment", "allowEditing", "allowExporting", "allowFiltering", "allowFixing", "allowGrouping", "allowHeaderFiltering", "allowHiding", "allowReordering", "allowResizing", "allowSearch", "allowSorting", "autoExpandGroup", "buttons", "calculateCellValue", "calculateDisplayValue", "calculateFilterExpression", "calculateGroupValue", "calculateSortValue", "caption", "cellTemplate", "columns", "cssClass", "customizeText", "dataField", "dataType", "editCellTemplate", "editorOptions", "encodeHtml", "falseText", "filterOperations", "filterType", "filterValue", "filterValues", "fixed", "fixedPosition", "format", "formItem", "groupCellTemplate", "groupIndex", "headerCellTemplate", "headerFilter", "hidingPriority", "isBand", "lookup", "minWidth", "name", "ownerBand", "renderAsync", "selectedFilterOperation", "setCellValue", "showEditorAlways", "showInColumnChooser", "showWhenGrouped", "sortIndex", "sortingMethod", "sortOrder", "trueText", "type", "validationRules", "visible", "visibleIndex", "width"], outputs: ["filterValueChange", "filterValuesChange", "groupIndexChange", "selectedFilterOperationChange", "sortIndexChange", "sortOrderChange", "visibleChange", "visibleIndexChange"] }, { kind: "component", type: i7.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i10.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: i11.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: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i13.LoaderComponent, selector: "app-loader" }, { kind: "component", type: i14.CommonHeaderComponent, selector: "lib-common-header", inputs: ["pageTitle"] }] });
|
|
212
217
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ApplicationFilterComponent, decorators: [{
|
|
213
218
|
type: Component,
|
|
214
|
-
args: [{ selector: 'app-application-filter', template: "<div class=\"flex flex-col flex-auto min-w-0\">\n <lib-common-header [pageTitle]=\"'Application Filters'\"></lib-common-header>\n\n\n\n\n <div class=\"p-4 w-full\">\n <div class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <h6\n class=\"mb-2 font-bold text-lg tracking-tight text-gray-900 dark:text-white border-b pb-3 flex items-center\">\n <i class=\"fa fa-table mr-2\"></i> Filters\n <div class=\"ml-auto\">\n <button class=\"bg-blue-500 hover:bg-blue-700 text-white font-bold py-1 px-3 rounded\"\n (click)=\"getCreateNewFilter()\">\n Add Filter\n </button>\n </div>\n </h6>\n <app-loader *ngIf=\"isLoader\"></app-loader>\n <dx-data-grid [columnAutoWidth]=\"true\" [dataSource]=\"filterDataSource\" [hoverStateEnabled]=\"true\"\n *ngIf=\"!isLoader\" [selectedRowKeys]=\"[]\" [showBorders]=\"true\" [showColumnLines]=\"true\"\n [showRowLines]=\"true\" id=\"gridContainer\">\n <dxo-paging [pageSize]=\"10\"></dxo-paging>\n <dxo-export [enabled]=\"true\"></dxo-export>\n\n <dxi-column dataField=\"filterName\"></dxi-column>\n <dxi-column dataField=\"filterId\"></dxi-column>\n <dxi-column dataField=\"createdBy\"></dxi-column>\n <dxi-column dataField=\"creationDate\"></dxi-column>\n <dxi-column dataField=\"action\" cellTemplate=\"cellTemplate\" [fixed]=\"true\"\n fixedPosition=\"right\"></dxi-column>\n <div *dxTemplate=\"let data of 'cellTemplate'\">\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"editFilter(data.data)\">\n Edit\n </button>\n <button class=\"{{commonService.btn_danger_md}}\" (click)=\"deleteFilter(data.data)\">\n Delete\n </button>\n </div>\n\n\n </dx-data-grid>\n </div>\n </div>\n <div class=\"p-2 w-full\" *ngIf=\"isNewFilterCreate\">\n <div class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <h6\n class=\"mb-2 font-bold text-lg tracking-tight text-gray-900 dark:text-white border-b pb-3 flex items-center\">\n <i class=\"fa fa-table mr-2\"></i> Create Filters\n\n </h6>\n <div class=\"flex flex-row my-2\">\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">Filter Name</div>\n <dx-text-box [(ngModel)]=\"creatFilterObject.filterName\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-5 border\">\n <div class=\"flex flex-col flex-auto min-w-0 \">\n <div class=\"text-lg py-2 font-extrabold border-b bg-gray-700 text-white px-2\"> Select Filters\n </div>\n <div class=\"pt-2 border-x border-b \">\n <ng-container *ngFor=\"let item of creatFilterObject.filterItems; let i = index;\">\n <div class=\"my-2 flex flex-row justify-between border-b\">\n\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2 mt-5\"> </div>\n <dx-check-box [(ngModel)]=\"item.display\" text=\"Display\"></dx-check-box>\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\">Filter Name </div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"kpiFilterConfigService\"\n displayExpr=\"apiName\" valueExpr=\"apiUrl\"\n [(ngModel)]=\"item.apiName\"></dx-select-box>\n </div>\n\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\">Operator Key Name </div>\n <dx-text-box [(ngModel)]=\"item.operatorName\"></dx-text-box>\n\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> FIlter Label</div>\n <dx-text-box [(ngModel)]=\"item.label\"></dx-text-box>\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> FIlter Container</div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"filter_type\"\n [(ngModel)]=\"item.filterType\"></dx-select-box>\n\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> FIlter type</div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"defaultFilterTypeDataSource\"\n [(ngModel)]=\"item.defaultFilterType\"\n value=\"defaultFilterTypeDataSource[0]\"></dx-select-box>\n\n </div>\n\n <ng-container\n *ngIf=\"item.defaultFilterType == 'dynamic' && (item.filterType == 'date' || item.filterType == 'datetime')\">\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Function </div>\n <dx-select-box [items]=\"momentFunction\"\n [(ngModel)]=\"item.momentFunction\"></dx-select-box>\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\">
|
|
219
|
+
args: [{ selector: 'app-application-filter', template: "<div class=\"flex flex-col flex-auto min-w-0\">\n <lib-common-header [pageTitle]=\"'Application Filters'\"></lib-common-header>\n\n\n\n\n <div class=\"p-4 w-full\">\n <div class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <h6\n class=\"mb-2 font-bold text-lg tracking-tight text-gray-900 dark:text-white border-b pb-3 flex items-center\">\n <i class=\"fa fa-table mr-2\"></i> Filters\n <div class=\"ml-auto\">\n <button class=\"bg-blue-500 hover:bg-blue-700 text-white font-bold py-1 px-3 rounded\"\n (click)=\"getCreateNewFilter()\">\n Add Filter\n </button>\n </div>\n </h6>\n <app-loader *ngIf=\"isLoader\"></app-loader>\n <dx-data-grid [columnAutoWidth]=\"true\" [dataSource]=\"filterDataSource\" [hoverStateEnabled]=\"true\"\n *ngIf=\"!isLoader\" [selectedRowKeys]=\"[]\" [showBorders]=\"true\" [showColumnLines]=\"true\"\n [showRowLines]=\"true\" id=\"gridContainer\">\n <dxo-paging [pageSize]=\"10\"></dxo-paging>\n <dxo-export [enabled]=\"true\"></dxo-export>\n\n <dxi-column dataField=\"filterName\"></dxi-column>\n <dxi-column dataField=\"filterId\"></dxi-column>\n <dxi-column dataField=\"createdBy\"></dxi-column>\n <dxi-column dataField=\"creationDate\"></dxi-column>\n <dxi-column dataField=\"action\" cellTemplate=\"cellTemplate\" [fixed]=\"true\"\n fixedPosition=\"right\"></dxi-column>\n <div *dxTemplate=\"let data of 'cellTemplate'\">\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"editFilter(data.data)\">\n Edit\n </button>\n <button class=\"{{commonService.btn_danger_md}}\" (click)=\"deleteFilter(data.data)\">\n Delete\n </button>\n </div>\n\n\n </dx-data-grid>\n </div>\n </div>\n <div class=\"p-2 w-full\" *ngIf=\"isNewFilterCreate\">\n <div class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <h6\n class=\"mb-2 font-bold text-lg tracking-tight text-gray-900 dark:text-white border-b pb-3 flex items-center\">\n <i class=\"fa fa-table mr-2\"></i> Create Filters\n\n </h6>\n <div class=\"flex flex-row my-2\">\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">Filter Name</div>\n <dx-text-box [(ngModel)]=\"creatFilterObject.filterName\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-5 border\">\n <div class=\"flex flex-col flex-auto min-w-0 \">\n <div class=\"text-lg py-2 font-extrabold border-b bg-gray-700 text-white px-2\"> Select Filters\n </div>\n <div class=\"pt-2 border-x border-b \">\n <ng-container *ngFor=\"let item of creatFilterObject.filterItems; let i = index;\">\n <div class=\"my-2 flex flex-row justify-between border-b\">\n\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2 mt-5\"> </div>\n <dx-check-box [(ngModel)]=\"item.display\" text=\"Display\"></dx-check-box>\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\">Filter Name </div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"kpiFilterConfigService\"\n displayExpr=\"apiName\" valueExpr=\"apiUrl\"\n [(ngModel)]=\"item.apiName\"></dx-select-box>\n </div>\n\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\">Operator Key Name </div>\n <dx-text-box [(ngModel)]=\"item.operatorName\"></dx-text-box>\n\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> FIlter Label</div>\n <dx-text-box [(ngModel)]=\"item.label\"></dx-text-box>\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> FIlter Container</div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"filter_type\"\n [(ngModel)]=\"item.filterType\"></dx-select-box>\n\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> FIlter type</div>\n <dx-select-box [searchEnabled]=\"true\" [items]=\"defaultFilterTypeDataSource\"\n [(ngModel)]=\"item.defaultFilterType\"\n value=\"defaultFilterTypeDataSource[0]\"></dx-select-box>\n\n </div>\n\n <ng-container\n *ngIf=\"item.defaultFilterType == 'dynamic' && (item.filterType == 'date' || item.filterType == 'datetime')\">\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Function </div>\n <dx-select-box [items]=\"momentFunction\"\n [(ngModel)]=\"item.momentFunction\"></dx-select-box>\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Display Format </div>\n <dx-text-box [(ngModel)]=\"item.momentFormat\"></dx-text-box>\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Query Format </div>\n <dx-text-box [(ngModel)]=\"item.queryFormat\"></dx-text-box>\n </div>\n\n </ng-container>\n <ng-container\n *ngIf=\"item.defaultFilterType == 'static' && (item.filterType == 'date' || item.filterType == 'datetime')\">\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Default Value </div>\n <dx-text-box \n [(ngModel)]=\"item.defaultFilterValue\"></dx-text-box>\n </div>\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> Display Format </div>\n <dx-text-box [(ngModel)]=\"item.momentFormat\"></dx-text-box>\n </div>\n </ng-container>\n <ng-container\n *ngIf=\"item.defaultFilterType == 'dynamic' && (item.filterType !== 'date' || item.filterType !== 'datetime')\">\n <div class=\"px-2 mb-2 w-full\">\n <div class=\"text-md mb-2\"> FIlter Default Value</div>\n <dx-text-box [(ngModel)]=\"item.defaultFilterValue\"></dx-text-box>\n </div>\n </ng-container>\n\n <div class=\"px-2 mt-8 text-center\">\n <button class=\"{{commonService.btn_danger_sm}} cursor-pointer\"\n (click)=\"deleteFilters(i)\"><i class=\"fa fa-trash-o\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </ng-container>\n <div class=\"flex flex-row justify-end my-2\">\n <button class=\"{{commonService.btn_primary_sm}} cursor-pointer\" (click)=\"addFilter()\">Add\n Columns</button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"flex w-full justify-end mt-5 border-t\">\n <button class=\"{{commonService.btn_success_md}} cursor-pointer mx-1 my-2\" (click)=\"createFilterItems()\">\n Submit Filter\n </button>\n </div>\n\n </div>\n </div>\n\n\n\n</div>" }]
|
|
215
220
|
}], ctorParameters: function () { return [{ type: i1.ApplicationContentService }, { type: i2.CommonService }, { type: i3.ToastrService }, { type: i4.Router }]; } });
|
|
216
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvYXBwbGljYXRpb24tY29udHJvbGxlci9hcHBsaWNhdGlvbi1maWx0ZXIvYXBwbGljYXRpb24tZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvYXBwbGljYXRpb24tY29udHJvbGxlci9hcHBsaWNhdGlvbi1maWx0ZXIvYXBwbGljYXRpb24tZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFHbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBUy9DLE1BQU0sT0FBTywwQkFBMEI7SUFtQ3JDLFlBQ1UsT0FBa0MsRUFDbkMsYUFBNEIsRUFDM0IsTUFBcUIsRUFDckIsTUFBYztRQUhkLFlBQU8sR0FBUCxPQUFPLENBQTJCO1FBQ25DLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzNCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQXRDeEIscUJBQWdCLEdBQVEsRUFBRSxDQUFDO1FBRzNCLHNCQUFpQixHQUFRO1lBQ3ZCLFVBQVUsRUFBRSxFQUFFO1lBQ2QsV0FBVyxFQUFFLENBQUM7b0JBQ1osU0FBUyxFQUFFLFdBQVc7b0JBQ3RCLE9BQU8sRUFBRSxZQUFZO29CQUNyQixZQUFZLEVBQUUsTUFBTTtvQkFDcEIsU0FBUyxFQUFFLElBQUk7b0JBQ2YsY0FBYyxFQUFFLEVBQUU7b0JBQ2xCLG1CQUFtQixFQUFFLFNBQVM7b0JBQzlCLG9CQUFvQixFQUFFLFNBQVM7b0JBQy9C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QUFFLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxFQUFFLG9CQUFvQixDQUFDLENBQUE7WUFDdEcsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFLRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUNELFNBQVM7UUFDUCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLHdDQUF3QyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBQ0QsV0FBVztRQUNULElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMscUNBQXFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFDRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQzs7dUhBMU5VLDBCQUEwQjsyR0FBMUIsMEJBQTBCLDhEQ1p2QywwL1JBNkpNOzJGRGpKTywwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0Usd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uQ29udGVudFNlcnZpY2UgfSBmcm9tICcuLi9hcHBsaWNhdGlvbi1jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IHsgY29uZmlybSB9IGZyb20gJ2RldmV4dHJlbWUvdWkvZGlhbG9nJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWFwcGxpY2F0aW9uLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHBsaWNhdGlvbi1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hcHBsaWNhdGlvbi1maWx0ZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvbkZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGZpbHRlckRhdGFTb3VyY2U6IGFueSA9IFtdO1xuICBpc05ld0ZpbHRlckNyZWF0ZTogYm9vbGVhbjtcbiAgaXNMb2FkZXI6IGJvb2xlYW47XG4gIGNyZWF0RmlsdGVyT2JqZWN0OiBhbnkgPSB7XG4gICAgZmlsdGVyTmFtZTogXCJcIixcbiAgICBmaWx0ZXJJdGVtczogW3tcbiAgICAgIFwiYXBpTmFtZVwiOiBcInN0YXJ0RGF0ZVwiLFxuICAgICAgXCJsYWJlbFwiOiBcIlN0YXJ0IERhdGVcIixcbiAgICAgIFwiZmlsdGVyVHlwZVwiOiBcImRhdGVcIixcbiAgICAgIFwiZGlzcGxheVwiOiB0cnVlLFxuICAgICAgXCJvcGVyYXRvck5hbWVcIjogXCJcIixcbiAgICAgIFwiZGVmYXVsdEZpbHRlclR5cGVcIjogXCJkeW5hbWljXCIsXG4gICAgICBcImRlZmF1bHRGaWx0ZXJWYWx1ZVwiOiBcIjE1LGRheXNcIixcbiAgICAgIFwibW9tZW50RnVuY3Rpb25cIjogXCJzdWJ0cmFjdFwiLFxuICAgICAgXCJtb21lbnRGb3JtYXRcIjogXCJZWVlZLU1NLUREXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiYXBpTmFtZVwiOiBcImVuZERhdGVcIixcbiAgICAgIFwibGFiZWxcIjogXCJFbmQgRGF0ZVwiLFxuICAgICAgXCJkaXNwbGF5XCI6IHRydWUsXG4gICAgICBcImZpbHRlclR5cGVcIjogXCJkYXRlXCIsXG4gICAgICBcIm9wZXJhdG9yTmFtZVwiOiBcIlwiLFxuICAgICAgXCJkZWZhdWx0RmlsdGVyVHlwZVwiOiBcImR5bmFtaWNcIixcbiAgICAgIFwiZGVmYXVsdEZpbHRlclZhbHVlXCI6IFwiMSxkYXlzXCIsXG4gICAgICBcIm1vbWVudEZ1bmN0aW9uXCI6IFwic3VidHJhY3RcIixcbiAgICAgIFwibW9tZW50Rm9ybWF0XCI6IFwiWVlZWS1NTS1ERFwiXG4gICAgfV1cbiAgfVxuXG4gIGZpbHRlcl90eXBlID0gWydzaW5nbGUnLCAnbXVsdGlwbGUnLCAnZGF0ZScsICdkYXRldGltZScsIFwiY29udGVudFwiLCBcImNvbnRleHRcIl1cbiAgZGVmYXVsdEZpbHRlclR5cGVEYXRhU291cmNlID0gWydzdGF0aWMnLCAnZHluYW1pYyddXG5cbiAgbW9tZW50RnVuY3Rpb24gPSBbXCJzdWJ0cmFjdFwiLCBcImFkZFwiLCBcInN0YXJ0T2ZcIiwgXCJlbmRPZlwiLCBcIndlZWtQaWNrZXJcIiwgXCJtb250aFBpY2tlclwiXVxuICBrcGlGaWx0ZXJDb25maWdTZXJ2aWNlOiBhbnk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2VydmljZTogQXBwbGljYXRpb25Db250ZW50U2VydmljZSxcbiAgICBwdWJsaWMgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pc0xvYWRlciA9IHRydWU7XG4gICAgdGhpcy5nZXRLUElSZWZlcmVuY2VFbmRQb2ludHMoKTtcbiAgICB0aGlzLmdldEZpbHRlckRhdGFTZXQoKTtcblxuICB9XG5cbiAgZ2V0RmlsdGVyRGF0YVNldCgpIHtcbiAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0QXBwRmlsdGVyQ29uZmlncygpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZmlsdGVyRGF0YVNvdXJjZSA9IGRhdGE7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdGaWx0ZXIgQ3JlYXRpb24nKVxuXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGFkZEZpbHRlcigpIHtcbiAgICBsZXQgb2JqID0ge1xuICAgICAgXCJhcGlOYW1lXCI6IFwiXCIsXG4gICAgICBcImRpc3BsYXlcIjogdHJ1ZSxcbiAgICAgIFwibGFiZWxcIjogXCJcIixcbiAgICAgIFwiZmlsdGVyVHlwZVwiOiBcIlwiLFxuICAgICAgXCJvcGVyYXRvck5hbWVcIjogXCJcIixcbiAgICAgIFwiZGVmYXVsdEZpbHRlclR5cGVcIjogXCJcIixcbiAgICAgIFwiZGVmYXVsdEZpbHRlclZhbHVlXCI6IFwiXCJcbiAgICB9XG4gICAgdGhpcy5jcmVhdEZpbHRlck9iamVjdC5maWx0ZXJJdGVtcy5wdXNoKG9iaik7XG4gIH1cblxuICBkZWxldGVGaWx0ZXJzKGkpIHtcbiAgICB0aGlzLmNyZWF0RmlsdGVyT2JqZWN0LmZpbHRlckl0ZW1zLnNwbGljZShpLCAxKVxuICB9XG5cblxuICBnZXRDcmVhdGVOZXdGaWx0ZXIoKSB7XG4gICAgdGhpcy5pc05ld0ZpbHRlckNyZWF0ZSA9IHRydWU7XG4gICAgdGhpcy5jcmVhdEZpbHRlck9iamVjdCA9IHtcbiAgICAgIGZpbHRlck5hbWU6IFwiXCIsXG4gICAgICBmaWx0ZXJJdGVtczogW3tcbiAgICAgICAgXCJhcGlOYW1lXCI6IFwic3RhcnREYXRlXCIsXG4gICAgICAgIFwibGFiZWxcIjogXCJTdGFydCBEYXRlXCIsXG4gICAgICAgIFwiZmlsdGVyVHlwZVwiOiBcImRhdGVcIixcbiAgICAgICAgXCJkaXNwbGF5XCI6IHRydWUsXG4gICAgICAgIFwib3BlcmF0b3JOYW1lXCI6IFwiXCIsXG4gICAgICAgIFwiZGVmYXVsdEZpbHRlclR5cGVcIjogXCJkeW5hbWljXCIsXG4gICAgICAgIFwiZGVmYXVsdEZpbHRlclZhbHVlXCI6IFwiMTUsZGF5c1wiLFxuICAgICAgICBcIm1vbWVudEZ1bmN0aW9uXCI6IFwic3VidHJhY3RcIixcbiAgICAgICAgXCJtb21lbnRGb3JtYXRcIjogXCJZWVlZLU1NLUREXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwiYXBpTmFtZVwiOiBcImVuZERhdGVcIixcbiAgICAgICAgXCJsYWJlbFwiOiBcIkVuZCBEYXRlXCIsXG4gICAgICAgIFwiZGlzcGxheVwiOiB0cnVlLFxuICAgICAgICBcImZpbHRlclR5cGVcIjogXCJkYXRlXCIsXG4gICAgICAgIFwib3BlcmF0b3JOYW1lXCI6IFwiXCIsXG4gICAgICAgIFwiZGVmYXVsdEZpbHRlclR5cGVcIjogXCJkeW5hbWljXCIsXG4gICAgICAgIFwiZGVmYXVsdEZpbHRlclZhbHVlXCI6IFwiMSxkYXlzXCIsXG4gICAgICAgIFwibW9tZW50RnVuY3Rpb25cIjogXCJzdWJ0cmFjdFwiLFxuICAgICAgICBcIm1vbWVudEZvcm1hdFwiOiBcIllZWVktTU0tRERcIlxuICAgICAgfV1cbiAgICB9XG4gIH1cblxuICBlZGl0RmlsdGVyKGRhdGEpIHtcbiAgICB0aGlzLmNyZWF0RmlsdGVyT2JqZWN0ID0gZGF0YTtcbiAgICB0aGlzLmlzTmV3RmlsdGVyQ3JlYXRlID0gdHJ1ZTtcbiAgfVxuXG4gIGRlbGV0ZUZpbHRlcihpdGVtKSB7XG4gICAgbGV0IHJlc3VsdCA9IGNvbmZpcm0oXCI8aT5BcmUgWW91IFN1cmU/PC9pPlwiLCBcIkRlbGV0ZSBGaWx0ZXJcIik7XG4gICAgcmVzdWx0LnRoZW4oKGRpYWxvZ1Jlc3VsdCkgPT4ge1xuICAgICAgaWYgKGRpYWxvZ1Jlc3VsdCkge1xuICAgICAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmRlbGV0ZUFwcEZpbHRlckNvbmZpZyhpdGVtLmZpbHRlcklkKS5zdWJzY3JpYmUoKHZhbDogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5nZXRGaWx0ZXJEYXRhU2V0KCk7XG4gICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoJ0ZpbHRlciBEZWxldGVkIFN1Y2Nlc3NmdWxseScpXG4gICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ1J1bGUgTW9kdWxlJyk7XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVGaWx0ZXJJdGVtcygpIHtcbiAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLmNyZWF0RmlsdGVyT2JqZWN0WydmaWx0ZXJJZCddKSB7XG4gICAgICB0aGlzLnNlcnZpY2UuZWRpdEFwcEZpbHRlckNvbmZpZyh0aGlzLmNyZWF0RmlsdGVyT2JqZWN0KS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5nZXRGaWx0ZXJEYXRhU2V0KCk7XG4gICAgICAgICAgdGhpcy5pc05ld0ZpbHRlckNyZWF0ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKCdGaWx0ZXIgQ3JlYXRlZCBTdWNjZXNzZnVsbHknKVxuICAgICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdGaWx0ZXIgQ3JlYXRpb24nKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlcnZpY2UuY3JlYXRlQXBwRmlsdGVyQ29uZmlnKHRoaXMuY3JlYXRGaWx0ZXJPYmplY3QpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmdldEZpbHRlckRhdGFTZXQoKTtcbiAgICAgICAgICB0aGlzLmlzTmV3RmlsdGVyQ3JlYXRlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoJ0ZpbHRlciBDcmVhdGVkIFN1Y2Nlc3NmdWxseScpXG4gICAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ0ZpbHRlciBDcmVhdGlvbicpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cblxuICBnZXRLUElSZWZlcmVuY2VFbmRQb2ludHMoKSB7XG4gICAgdGhpcy5rcGlGaWx0ZXJDb25maWdTZXJ2aWNlID0gW107XG4gICAgbGV0IGZpcnN0T2JqZWN0ID0ge1xuICAgICAgXCJhcGlOYW1lXCI6IFwiU3RhcnQgRGF0ZVwiLFxuICAgICAgXCJhcGlVcmxcIjogXCJzdGFydERhdGVcIlxuICAgIH07XG4gICAgbGV0IHNlY29uZE9iamVjdCA9IHtcbiAgICAgIFwiYXBpTmFtZVwiOiBcIkVuZCBEYXRlXCIsXG4gICAgICBcImFwaVVybFwiOiBcImVuZERhdGVcIlxuICAgIH07XG4gICAgbGV0IHRoaXJkT2JqZWN0ID0ge1xuICAgICAgXCJhcGlOYW1lXCI6IFwiVGV4dCBCb3hcIixcbiAgICAgIFwiYXBpVXJsXCI6IFwiXCJcbiAgICB9O1xuICAgIGxldCBvcGVyYXRvcl9rZXkgPSB7XG4gICAgICBcImFwaU5hbWVcIjogXCJPcGVyYXRvciBLZXlcIixcbiAgICAgIFwiYXBpVXJsXCI6IFwib3BlcmF0b3Jfa2V5XCJcbiAgICB9O1xuICAgIGxldCBjb250ZXh0X2ZpbHRlciA9IHtcbiAgICAgIFwiYXBpTmFtZVwiOiBcIkNvbnRleHQgRmlsdGVyXCIsXG4gICAgICBcImFwaVVybFwiOiBcImNvbnRleHRfZmlsdGVyXCJcbiAgICB9O1xuICAgIHRoaXMua3BpRmlsdGVyQ29uZmlnU2VydmljZS5wdXNoKGZpcnN0T2JqZWN0KTtcbiAgICB0aGlzLmtwaUZpbHRlckNvbmZpZ1NlcnZpY2UucHVzaChzZWNvbmRPYmplY3QpO1xuICAgIHRoaXMua3BpRmlsdGVyQ29uZmlnU2VydmljZS5wdXNoKHRoaXJkT2JqZWN0KTtcbiAgICB0aGlzLmtwaUZpbHRlckNvbmZpZ1NlcnZpY2UucHVzaChvcGVyYXRvcl9rZXkpO1xuICAgIHRoaXMua3BpRmlsdGVyQ29uZmlnU2VydmljZS5wdXNoKGNvbnRleHRfZmlsdGVyKTtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0S1BJUmVmZXJlbmNlRW5kUG9pbnRzKCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgZGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgIHRoaXMua3BpRmlsdGVyQ29uZmlnU2VydmljZS5wdXNoKGVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gbGV0IGxhc3RPYmplY3QgPSB7XG4gICAgICAgIC8vICAgICBcImFwaU5hbWVcIjogXCJCeSBNU0lTRE5cIixcbiAgICAgICAgLy8gICAgIFwiYXBpVXJsXCI6IFwiXCJcbiAgICAgICAgLy8gfTtcbiAgICAgICAgLy8gdGhpcy5rcGlGaWx0ZXJDb25maWdTZXJ2aWNlLnB1c2gobGFzdE9iamVjdCk7XG5cbiAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoXCJVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi5cIiwgXCJLUEkgc2VydmljZSBDb25maWdcIilcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cblxuICAvLyBuYXZpZ2F0aW9uIG9mIGNvbnRyb2xsZXJzXG5cbiAgZ290b1ZpZXdzKCkge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnYXBwcy9jb250cm9sUGFuZWwvYXBwbGljYXRpb25WaWV3cyddKTtcbiAgfVxuICBnb3RvUGFnZXMoKSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydhcHBzL2NvbnRyb2xQYW5lbC9hcHBsaWNhdGlvbkRhc2hib2FyZCddKTtcbiAgfVxuICBnb3RvRmlsdGVycygpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2FwcHMvY29udHJvbFBhbmVsL2FwcGxpY2F0aW9uRmlsdGVyJ10pO1xuICB9XG4gIGdvdG9EYXRhU2V0cygpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2FwcHMvY29udHJvbFBhbmVsL2FwcGxpY2F0aW9uRGF0YXNldCddKTtcbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LWF1dG8gbWluLXctMFwiPlxuICAgIDxsaWItY29tbW9uLWhlYWRlciBbcGFnZVRpdGxlXT1cIidBcHBsaWNhdGlvbiBGaWx0ZXJzJ1wiPjwvbGliLWNvbW1vbi1oZWFkZXI+XG5cblxuXG5cbiAgICA8ZGl2IGNsYXNzPVwicC00IHctZnVsbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibS0zIHAtNCBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQtbGcgc2hhZG93LW1kIGRhcms6YmctZ3JheS04MDAgZGFyazpib3JkZXItZ3JheS03MDBcIj5cbiAgICAgICAgICAgIDxoNlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMiBmb250LWJvbGQgdGV4dC1sZyB0cmFja2luZy10aWdodCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBib3JkZXItYiBwYi0zIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10YWJsZSBtci0yXCI+PC9pPiBGaWx0ZXJzXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLWF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJnLWJsdWUtNTAwIGhvdmVyOmJnLWJsdWUtNzAwIHRleHQtd2hpdGUgZm9udC1ib2xkIHB5LTEgcHgtMyByb3VuZGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnZXRDcmVhdGVOZXdGaWx0ZXIoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQWRkIEZpbHRlclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvaDY+XG4gICAgICAgICAgICA8YXBwLWxvYWRlciAqbmdJZj1cImlzTG9hZGVyXCI+PC9hcHAtbG9hZGVyPlxuICAgICAgICAgICAgPGR4LWRhdGEtZ3JpZCBbY29sdW1uQXV0b1dpZHRoXT1cInRydWVcIiBbZGF0YVNvdXJjZV09XCJmaWx0ZXJEYXRhU291cmNlXCIgW2hvdmVyU3RhdGVFbmFibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzTG9hZGVyXCIgW3NlbGVjdGVkUm93S2V5c109XCJbXVwiIFtzaG93Qm9yZGVyc109XCJ0cnVlXCIgW3Nob3dDb2x1bW5MaW5lc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbc2hvd1Jvd0xpbmVzXT1cInRydWVcIiBpZD1cImdyaWRDb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZHhvLXBhZ2luZyBbcGFnZVNpemVdPVwiMTBcIj48L2R4by1wYWdpbmc+XG4gICAgICAgICAgICAgICAgPGR4by1leHBvcnQgW2VuYWJsZWRdPVwidHJ1ZVwiPjwvZHhvLWV4cG9ydD5cblxuICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImZpbHRlck5hbWVcIj48L2R4aS1jb2x1bW4+XG4gICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZmlsdGVySWRcIj48L2R4aS1jb2x1bW4+XG4gICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiY3JlYXRlZEJ5XCI+PC9keGktY29sdW1uPlxuICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImNyZWF0aW9uRGF0ZVwiPjwvZHhpLWNvbHVtbj5cbiAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJhY3Rpb25cIiBjZWxsVGVtcGxhdGU9XCJjZWxsVGVtcGxhdGVcIiBbZml4ZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIGZpeGVkUG9zaXRpb249XCJyaWdodFwiPjwvZHhpLWNvbHVtbj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgJ2NlbGxUZW1wbGF0ZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fcHJpbWFyeV9tZH19XCIgKGNsaWNrKT1cImVkaXRGaWx0ZXIoZGF0YS5kYXRhKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdFxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fZGFuZ2VyX21kfX1cIiAoY2xpY2spPVwiZGVsZXRlRmlsdGVyKGRhdGEuZGF0YSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICA8L2R4LWRhdGEtZ3JpZD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInAtMiB3LWZ1bGxcIiAqbmdJZj1cImlzTmV3RmlsdGVyQ3JlYXRlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLTMgcC00IGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZC1sZyBzaGFkb3ctbWQgZGFyazpiZy1ncmF5LTgwMCBkYXJrOmJvcmRlci1ncmF5LTcwMFwiPlxuICAgICAgICAgICAgPGg2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0yIGZvbnQtYm9sZCB0ZXh0LWxnIHRyYWNraW5nLXRpZ2h0IHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGJvcmRlci1iIHBiLTMgZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRhYmxlIG1yLTJcIj48L2k+IENyZWF0ZSBGaWx0ZXJzXG5cbiAgICAgICAgICAgIDwvaDY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBteS0yXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTIgdy0xLzNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPkZpbHRlciBOYW1lPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cImNyZWF0RmlsdGVyT2JqZWN0LmZpbHRlck5hbWVcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS01IGJvcmRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtYXV0byBtaW4tdy0wIFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1sZyBweS0yIGZvbnQtZXh0cmFib2xkIGJvcmRlci1iIGJnLWdyYXktNzAwIHRleHQtd2hpdGUgcHgtMlwiPiBTZWxlY3QgRmlsdGVyc1xuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB0LTIgYm9yZGVyLXggYm9yZGVyLWIgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNyZWF0RmlsdGVyT2JqZWN0LmZpbHRlckl0ZW1zOyBsZXQgaSA9IGluZGV4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0yIGZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIGJvcmRlci1iXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgbWItMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTIgbXQtNVwiPiA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1jaGVjay1ib3ggWyhuZ01vZGVsKV09XCJpdGVtLmRpc3BsYXlcIiB0ZXh0PVwiRGlzcGxheVwiPjwvZHgtY2hlY2stYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgbWItMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5GaWx0ZXIgTmFtZSA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtzZWFyY2hFbmFibGVkXT1cInRydWVcIiBbaXRlbXNdPVwia3BpRmlsdGVyQ29uZmlnU2VydmljZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUV4cHI9XCJhcGlOYW1lXCIgdmFsdWVFeHByPVwiYXBpVXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0uYXBpTmFtZVwiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgbWItMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5PcGVyYXRvciBLZXkgTmFtZSA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cIml0ZW0ub3BlcmF0b3JOYW1lXCI+PC9keC10ZXh0LWJveD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgbWItMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj4gRklsdGVyIExhYmVsPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJpdGVtLmxhYmVsXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIG1iLTIgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+IEZJbHRlciBDb250YWluZXI8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtzZWFyY2hFbmFibGVkXT1cInRydWVcIiBbaXRlbXNdPVwiZmlsdGVyX3R5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5maWx0ZXJUeXBlXCI+PC9keC1zZWxlY3QtYm94PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBtYi0yIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPiBGSWx0ZXIgdHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiIFtpdGVtc109XCJkZWZhdWx0RmlsdGVyVHlwZURhdGFTb3VyY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5kZWZhdWx0RmlsdGVyVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJkZWZhdWx0RmlsdGVyVHlwZURhdGFTb3VyY2VbMF1cIj48L2R4LXNlbGVjdC1ib3g+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmRlZmF1bHRGaWx0ZXJUeXBlID09ICdkeW5hbWljJyAmJiAoaXRlbS5maWx0ZXJUeXBlID09ICdkYXRlJyB8fCBpdGVtLmZpbHRlclR5cGUgPT0gJ2RhdGV0aW1lJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIG1iLTIgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPiBGdW5jdGlvbiA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwibW9tZW50RnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0ubW9tZW50RnVuY3Rpb25cIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIG1iLTIgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPiBBZGRpdGlvbmFscyA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJpdGVtLm1vbWVudEZvcm1hdFwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmRlZmF1bHRGaWx0ZXJUeXBlID09ICdzdGF0aWMnICYmIChpdGVtLmZpbHRlclR5cGUgPT0gJ2RhdGUnIHx8IGl0ZW0uZmlsdGVyVHlwZSA9PSAnZGF0ZXRpbWUnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgbWItMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+IERlZmF1bHQgVmFsdWUgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0uZGVmYXVsdEZpbHRlclZhbHVlXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgbWItMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+IERpc3BsYXkgRm9ybWF0IDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cIml0ZW0ubW9tZW50Rm9ybWF0XCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmRlZmF1bHRGaWx0ZXJUeXBlID09ICdkeW5hbWljJyAmJiAoaXRlbS5maWx0ZXJUeXBlICE9PSAnZGF0ZScgfHwgaXRlbS5maWx0ZXJUeXBlICE9PSAnZGF0ZXRpbWUnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgbWItMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+IEZJbHRlciBEZWZhdWx0IFZhbHVlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiaXRlbS5kZWZhdWx0RmlsdGVyVmFsdWVcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIG10LTggdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX2Rhbmdlcl9zbX19IGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlRmlsdGVycyhpKVwiPjxpIGNsYXNzPVwiZmEgZmEtdHJhc2gtb1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1lbmQgbXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3ByaW1hcnlfc219fSBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJhZGRGaWx0ZXIoKVwiPkFkZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW5zPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBqdXN0aWZ5LWVuZCBtdC01IGJvcmRlci10XCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fc3VjY2Vzc19tZH19IGN1cnNvci1wb2ludGVyIG14LTEgbXktMlwiIChjbGljayk9XCJjcmVhdGVGaWx0ZXJJdGVtcygpXCI+XG4gICAgICAgICAgICAgICAgICAgIFN1Ym1pdCBGaWx0ZXJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG5cblxuPC9kaXY+Il19
|
|
221
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvYXBwbGljYXRpb24tY29udHJvbGxlci9hcHBsaWNhdGlvbi1maWx0ZXIvYXBwbGljYXRpb24tZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvYXBwbGljYXRpb24tY29udHJvbGxlci9hcHBsaWNhdGlvbi1maWx0ZXIvYXBwbGljYXRpb24tZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFHbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBUy9DLE1BQU0sT0FBTywwQkFBMEI7SUFxQ3JDLFlBQ1UsT0FBa0MsRUFDbkMsYUFBNEIsRUFDM0IsTUFBcUIsRUFDckIsTUFBYztRQUhkLFlBQU8sR0FBUCxPQUFPLENBQTJCO1FBQ25DLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzNCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQXhDeEIscUJBQWdCLEdBQVEsRUFBRSxDQUFDO1FBRzNCLHNCQUFpQixHQUFRO1lBQ3ZCLFVBQVUsRUFBRSxFQUFFO1lBQ2QsV0FBVyxFQUFFLENBQUM7b0JBQ1osU0FBUyxFQUFFLFdBQVc7b0JBQ3RCLE9BQU8sRUFBRSxZQUFZO29CQUNyQixZQUFZLEVBQUUsTUFBTTtvQkFDcEIsU0FBUyxFQUFFLElBQUk7b0JBQ2YsY0FBYyxFQUFFLEVBQUU7b0JBQ2xCLG1CQUFtQixFQUFFLFNBQVM7b0JBQzlCLG9CQUFvQixFQUFFLFNBQVM7b0JBQy9C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QUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzVDLENBQUMsQ0FBQyxDQUFDO1lBT0wsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywyREFBMkQsRUFBRSxvQkFBb0IsQ0FBQyxDQUFBO1lBQ3RHLENBQUM7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDO0lBS0QsU0FBUztRQUNQLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsb0NBQW9DLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFDRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLHFDQUFxQyxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBQ0QsWUFBWTtRQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsc0NBQXNDLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7O3VIQS9OVSwwQkFBMEI7MkdBQTFCLDBCQUEwQiw4RENadkMsK3lTQWlLTTsyRkRySk8sMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbnRlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vYXBwbGljYXRpb24tY29udGVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcbmltcG9ydCB7IGNvbmZpcm0gfSBmcm9tICdkZXZleHRyZW1lL3VpL2RpYWxvZyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1hcHBsaWNhdGlvbi1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vYXBwbGljYXRpb24tZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXBwbGljYXRpb24tZmlsdGVyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQXBwbGljYXRpb25GaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBmaWx0ZXJEYXRhU291cmNlOiBhbnkgPSBbXTtcbiAgaXNOZXdGaWx0ZXJDcmVhdGU6IGJvb2xlYW47XG4gIGlzTG9hZGVyOiBib29sZWFuO1xuICBjcmVhdEZpbHRlck9iamVjdDogYW55ID0ge1xuICAgIGZpbHRlck5hbWU6IFwiXCIsXG4gICAgZmlsdGVySXRlbXM6IFt7XG4gICAgICBcImFwaU5hbWVcIjogXCJzdGFydERhdGVcIixcbiAgICAgIFwibGFiZWxcIjogXCJTdGFydCBEYXRlXCIsXG4gICAgICBcImZpbHRlclR5cGVcIjogXCJkYXRlXCIsXG4gICAgICBcImRpc3BsYXlcIjogdHJ1ZSxcbiAgICAgIFwib3BlcmF0b3JOYW1lXCI6IFwiXCIsXG4gICAgICBcImRlZmF1bHRGaWx0ZXJUeXBlXCI6IFwiZHluYW1pY1wiLFxuICAgICAgXCJkZWZhdWx0RmlsdGVyVmFsdWVcIjogXCIxNSxkYXlzXCIsXG4gICAgICBcIm1vbWVudEZ1bmN0aW9uXCI6IFwic3VidHJhY3RcIixcbiAgICAgIFwibW9tZW50Rm9ybWF0XCI6IFwiWVlZWS1NTS1ERFwiLFxuICAgICAgXCJxdWVyeUZvcm1hdFwiOiBcIllZWVlNTUREXCJcbiAgICB9LFxuICAgIHtcbiAgICAgIFwiYXBpTmFtZVwiOiBcImVuZERhdGVcIixcbiAgICAgIFwibGFiZWxcIjogXCJFbmQgRGF0ZVwiLFxuICAgICAgXCJkaXNwbGF5XCI6IHRydWUsXG4gICAgICBcImZpbHRlclR5cGVcIjogXCJkYXRlXCIsXG4gICAgICBcIm9wZXJhdG9yTmFtZVwiOiBcIlwiLFxuICAgICAgXCJkZWZhdWx0RmlsdGVyVHlwZVwiOiBcImR5bmFtaWNcIixcbiAgICAgIFwiZGVmYXVsdEZpbHRlclZhbHVlXCI6IFwiMSxkYXlzXCIsXG4gICAgICBcIm1vbWVudEZ1bmN0aW9uXCI6IFwic3VidHJhY3RcIixcbiAgICAgIFwibW9tZW50Rm9ybWF0XCI6IFwiWVlZWS1NTS1ERFwiLFxuICAgICAgXCJxdWVyeUZvcm1hdFwiOiBcIllZWVlNTUREXCJcbiAgICB9XVxuICB9XG5cbiAgZmlsdGVyX3R5cGUgPSBbJ3NpbmdsZScsICdtdWx0aXBsZScsICdkYXRlJywgJ2RhdGV0aW1lJywgXCJjb250ZW50XCIsIFwiY29udGV4dFwiXVxuICBkZWZhdWx0RmlsdGVyVHlwZURhdGFTb3VyY2UgPSBbJ3N0YXRpYycsICdkeW5hbWljJ11cblxuICBtb21lbnRGdW5jdGlvbiA9IFtcInN1YnRyYWN0XCIsIFwiYWRkXCIsIFwic3RhcnRPZlwiLCBcImVuZE9mXCIsIFwid2Vla1BpY2tlclwiLCBcIm1vbnRoUGlja2VyXCJdXG4gIGtwaUZpbHRlckNvbmZpZ1NlcnZpY2U6IGFueTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBBcHBsaWNhdGlvbkNvbnRlbnRTZXJ2aWNlLFxuICAgIHB1YmxpYyBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICB0aGlzLmdldEtQSVJlZmVyZW5jZUVuZFBvaW50cygpO1xuICAgIHRoaXMuZ2V0RmlsdGVyRGF0YVNldCgpO1xuXG4gIH1cblxuICBnZXRGaWx0ZXJEYXRhU2V0KCkge1xuICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuICAgIHRoaXMuc2VydmljZS5nZXRBcHBGaWx0ZXJDb25maWdzKCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5maWx0ZXJEYXRhU291cmNlID0gZGF0YTtcbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ0ZpbHRlciBDcmVhdGlvbicpXG5cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgYWRkRmlsdGVyKCkge1xuICAgIGxldCBvYmogPSB7XG4gICAgICBcImFwaU5hbWVcIjogXCJcIixcbiAgICAgIFwiZGlzcGxheVwiOiB0cnVlLFxuICAgICAgXCJsYWJlbFwiOiBcIlwiLFxuICAgICAgXCJmaWx0ZXJUeXBlXCI6IFwiXCIsXG4gICAgICBcIm9wZXJhdG9yTmFtZVwiOiBcIlwiLFxuICAgICAgXCJkZWZhdWx0RmlsdGVyVHlwZVwiOiBcIlwiLFxuICAgICAgXCJkZWZhdWx0RmlsdGVyVmFsdWVcIjogXCJcIlxuICAgIH1cbiAgICB0aGlzLmNyZWF0RmlsdGVyT2JqZWN0LmZpbHRlckl0ZW1zLnB1c2gob2JqKTtcbiAgfVxuXG4gIGRlbGV0ZUZpbHRlcnMoaSkge1xuICAgIHRoaXMuY3JlYXRGaWx0ZXJPYmplY3QuZmlsdGVySXRlbXMuc3BsaWNlKGksIDEpXG4gIH1cblxuXG4gIGdldENyZWF0ZU5ld0ZpbHRlcigpIHtcbiAgICB0aGlzLmlzTmV3RmlsdGVyQ3JlYXRlID0gdHJ1ZTtcbiAgICB0aGlzLmNyZWF0RmlsdGVyT2JqZWN0ID0ge1xuICAgICAgZmlsdGVyTmFtZTogXCJcIixcbiAgICAgIGZpbHRlckl0ZW1zOiBbe1xuICAgICAgICBcImFwaU5hbWVcIjogXCJzdGFydERhdGVcIixcbiAgICAgICAgXCJsYWJlbFwiOiBcIlN0YXJ0IERhdGVcIixcbiAgICAgICAgXCJmaWx0ZXJUeXBlXCI6IFwiZGF0ZVwiLFxuICAgICAgICBcImRpc3BsYXlcIjogdHJ1ZSxcbiAgICAgICAgXCJvcGVyYXRvck5hbWVcIjogXCJcIixcbiAgICAgICAgXCJkZWZhdWx0RmlsdGVyVHlwZVwiOiBcImR5bmFtaWNcIixcbiAgICAgICAgXCJkZWZhdWx0RmlsdGVyVmFsdWVcIjogXCIxNSxkYXlzXCIsXG4gICAgICAgIFwibW9tZW50RnVuY3Rpb25cIjogXCJzdWJ0cmFjdFwiLFxuICAgICAgICBcIm1vbWVudEZvcm1hdFwiOiBcIllZWVktTU0tRERcIixcbiAgICAgICAgXCJxdWVyeUZvcm1hdFwiOiBcIllZWVlNTUREXCJcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFwiYXBpTmFtZVwiOiBcImVuZERhdGVcIixcbiAgICAgICAgXCJsYWJlbFwiOiBcIkVuZCBEYXRlXCIsXG4gICAgICAgIFwiZGlzcGxheVwiOiB0cnVlLFxuICAgICAgICBcImZpbHRlclR5cGVcIjogXCJkYXRlXCIsXG4gICAgICAgIFwib3BlcmF0b3JOYW1lXCI6IFwiXCIsXG4gICAgICAgIFwiZGVmYXVsdEZpbHRlclR5cGVcIjogXCJkeW5hbWljXCIsXG4gICAgICAgIFwiZGVmYXVsdEZpbHRlclZhbHVlXCI6IFwiMSxkYXlzXCIsXG4gICAgICAgIFwibW9tZW50RnVuY3Rpb25cIjogXCJzdWJ0cmFjdFwiLFxuICAgICAgICBcIm1vbWVudEZvcm1hdFwiOiBcIllZWVktTU0tRERcIixcbiAgICAgICAgXCJxdWVyeUZvcm1hdFwiOiBcIllZWVlNTUREXCJcbiAgICAgIH1dXG4gICAgfVxuICB9XG5cbiAgZWRpdEZpbHRlcihkYXRhKSB7XG4gICAgZGVidWdnZXJcbiAgICB0aGlzLmNyZWF0RmlsdGVyT2JqZWN0ID0gZGF0YTtcbiAgICB0aGlzLmlzTmV3RmlsdGVyQ3JlYXRlID0gdHJ1ZTtcbiAgfVxuXG4gIGRlbGV0ZUZpbHRlcihpdGVtKSB7XG4gICAgbGV0IHJlc3VsdCA9IGNvbmZpcm0oXCI8aT5BcmUgWW91IFN1cmU/PC9pPlwiLCBcIkRlbGV0ZSBGaWx0ZXJcIik7XG4gICAgcmVzdWx0LnRoZW4oKGRpYWxvZ1Jlc3VsdCkgPT4ge1xuICAgICAgaWYgKGRpYWxvZ1Jlc3VsdCkge1xuICAgICAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmRlbGV0ZUFwcEZpbHRlckNvbmZpZyhpdGVtLmZpbHRlcklkKS5zdWJzY3JpYmUoKHZhbDogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5nZXRGaWx0ZXJEYXRhU2V0KCk7XG4gICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoJ0ZpbHRlciBEZWxldGVkIFN1Y2Nlc3NmdWxseScpXG4gICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ1J1bGUgTW9kdWxlJyk7XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVGaWx0ZXJJdGVtcygpIHtcbiAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLmNyZWF0RmlsdGVyT2JqZWN0WydmaWx0ZXJJZCddKSB7XG4gICAgICB0aGlzLnNlcnZpY2UuZWRpdEFwcEZpbHRlckNvbmZpZyh0aGlzLmNyZWF0RmlsdGVyT2JqZWN0KS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5nZXRGaWx0ZXJEYXRhU2V0KCk7XG4gICAgICAgICAgdGhpcy5pc05ld0ZpbHRlckNyZWF0ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKCdGaWx0ZXIgQ3JlYXRlZCBTdWNjZXNzZnVsbHknKVxuICAgICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdGaWx0ZXIgQ3JlYXRpb24nKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlcnZpY2UuY3JlYXRlQXBwRmlsdGVyQ29uZmlnKHRoaXMuY3JlYXRGaWx0ZXJPYmplY3QpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmdldEZpbHRlckRhdGFTZXQoKTtcbiAgICAgICAgICB0aGlzLmlzTmV3RmlsdGVyQ3JlYXRlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoJ0ZpbHRlciBDcmVhdGVkIFN1Y2Nlc3NmdWxseScpXG4gICAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ0ZpbHRlciBDcmVhdGlvbicpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cblxuICBnZXRLUElSZWZlcmVuY2VFbmRQb2ludHMoKSB7XG4gICAgdGhpcy5rcGlGaWx0ZXJDb25maWdTZXJ2aWNlID0gW107XG4gICAgbGV0IGZpcnN0T2JqZWN0ID0ge1xuICAgICAgXCJhcGlOYW1lXCI6IFwiU3RhcnQgRGF0ZVwiLFxuICAgICAgXCJhcGlVcmxcIjogXCJzdGFydERhdGVcIlxuICAgIH07XG4gICAgbGV0IHNlY29uZE9iamVjdCA9IHtcbiAgICAgIFwiYXBpTmFtZVwiOiBcIkVuZCBEYXRlXCIsXG4gICAgICBcImFwaVVybFwiOiBcImVuZERhdGVcIlxuICAgIH07XG4gICAgbGV0IHRoaXJkT2JqZWN0ID0ge1xuICAgICAgXCJhcGlOYW1lXCI6IFwiVGV4dCBCb3hcIixcbiAgICAgIFwiYXBpVXJsXCI6IFwiXCJcbiAgICB9O1xuICAgIGxldCBvcGVyYXRvcl9rZXkgPSB7XG4gICAgICBcImFwaU5hbWVcIjogXCJPcGVyYXRvciBLZXlcIixcbiAgICAgIFwiYXBpVXJsXCI6IFwib3BlcmF0b3Jfa2V5XCJcbiAgICB9O1xuICAgIGxldCBjb250ZXh0X2ZpbHRlciA9IHtcbiAgICAgIFwiYXBpTmFtZVwiOiBcIkNvbnRleHQgRmlsdGVyXCIsXG4gICAgICBcImFwaVVybFwiOiBcImNvbnRleHRfZmlsdGVyXCJcbiAgICB9O1xuICAgIHRoaXMua3BpRmlsdGVyQ29uZmlnU2VydmljZS5wdXNoKGZpcnN0T2JqZWN0KTtcbiAgICB0aGlzLmtwaUZpbHRlckNvbmZpZ1NlcnZpY2UucHVzaChzZWNvbmRPYmplY3QpO1xuICAgIHRoaXMua3BpRmlsdGVyQ29uZmlnU2VydmljZS5wdXNoKHRoaXJkT2JqZWN0KTtcbiAgICB0aGlzLmtwaUZpbHRlckNvbmZpZ1NlcnZpY2UucHVzaChvcGVyYXRvcl9rZXkpO1xuICAgIHRoaXMua3BpRmlsdGVyQ29uZmlnU2VydmljZS5wdXNoKGNvbnRleHRfZmlsdGVyKTtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0S1BJUmVmZXJlbmNlRW5kUG9pbnRzKCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgZGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgIHRoaXMua3BpRmlsdGVyQ29uZmlnU2VydmljZS5wdXNoKGVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gbGV0IGxhc3RPYmplY3QgPSB7XG4gICAgICAgIC8vICAgICBcImFwaU5hbWVcIjogXCJCeSBNU0lTRE5cIixcbiAgICAgICAgLy8gICAgIFwiYXBpVXJsXCI6IFwiXCJcbiAgICAgICAgLy8gfTtcbiAgICAgICAgLy8gdGhpcy5rcGlGaWx0ZXJDb25maWdTZXJ2aWNlLnB1c2gobGFzdE9iamVjdCk7XG5cbiAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoXCJVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi5cIiwgXCJLUEkgc2VydmljZSBDb25maWdcIilcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cblxuICAvLyBuYXZpZ2F0aW9uIG9mIGNvbnRyb2xsZXJzXG5cbiAgZ290b1ZpZXdzKCkge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnYXBwcy9jb250cm9sUGFuZWwvYXBwbGljYXRpb25WaWV3cyddKTtcbiAgfVxuICBnb3RvUGFnZXMoKSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydhcHBzL2NvbnRyb2xQYW5lbC9hcHBsaWNhdGlvbkRhc2hib2FyZCddKTtcbiAgfVxuICBnb3RvRmlsdGVycygpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2FwcHMvY29udHJvbFBhbmVsL2FwcGxpY2F0aW9uRmlsdGVyJ10pO1xuICB9XG4gIGdvdG9EYXRhU2V0cygpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2FwcHMvY29udHJvbFBhbmVsL2FwcGxpY2F0aW9uRGF0YXNldCddKTtcbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LWF1dG8gbWluLXctMFwiPlxuICAgIDxsaWItY29tbW9uLWhlYWRlciBbcGFnZVRpdGxlXT1cIidBcHBsaWNhdGlvbiBGaWx0ZXJzJ1wiPjwvbGliLWNvbW1vbi1oZWFkZXI+XG5cblxuXG5cbiAgICA8ZGl2IGNsYXNzPVwicC00IHctZnVsbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibS0zIHAtNCBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQtbGcgc2hhZG93LW1kIGRhcms6YmctZ3JheS04MDAgZGFyazpib3JkZXItZ3JheS03MDBcIj5cbiAgICAgICAgICAgIDxoNlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWItMiBmb250LWJvbGQgdGV4dC1sZyB0cmFja2luZy10aWdodCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBib3JkZXItYiBwYi0zIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10YWJsZSBtci0yXCI+PC9pPiBGaWx0ZXJzXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLWF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJnLWJsdWUtNTAwIGhvdmVyOmJnLWJsdWUtNzAwIHRleHQtd2hpdGUgZm9udC1ib2xkIHB5LTEgcHgtMyByb3VuZGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnZXRDcmVhdGVOZXdGaWx0ZXIoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQWRkIEZpbHRlclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvaDY+XG4gICAgICAgICAgICA8YXBwLWxvYWRlciAqbmdJZj1cImlzTG9hZGVyXCI+PC9hcHAtbG9hZGVyPlxuICAgICAgICAgICAgPGR4LWRhdGEtZ3JpZCBbY29sdW1uQXV0b1dpZHRoXT1cInRydWVcIiBbZGF0YVNvdXJjZV09XCJmaWx0ZXJEYXRhU291cmNlXCIgW2hvdmVyU3RhdGVFbmFibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzTG9hZGVyXCIgW3NlbGVjdGVkUm93S2V5c109XCJbXVwiIFtzaG93Qm9yZGVyc109XCJ0cnVlXCIgW3Nob3dDb2x1bW5MaW5lc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbc2hvd1Jvd0xpbmVzXT1cInRydWVcIiBpZD1cImdyaWRDb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZHhvLXBhZ2luZyBbcGFnZVNpemVdPVwiMTBcIj48L2R4by1wYWdpbmc+XG4gICAgICAgICAgICAgICAgPGR4by1leHBvcnQgW2VuYWJsZWRdPVwidHJ1ZVwiPjwvZHhvLWV4cG9ydD5cblxuICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImZpbHRlck5hbWVcIj48L2R4aS1jb2x1bW4+XG4gICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZmlsdGVySWRcIj48L2R4aS1jb2x1bW4+XG4gICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiY3JlYXRlZEJ5XCI+PC9keGktY29sdW1uPlxuICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImNyZWF0aW9uRGF0ZVwiPjwvZHhpLWNvbHVtbj5cbiAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJhY3Rpb25cIiBjZWxsVGVtcGxhdGU9XCJjZWxsVGVtcGxhdGVcIiBbZml4ZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIGZpeGVkUG9zaXRpb249XCJyaWdodFwiPjwvZHhpLWNvbHVtbj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgJ2NlbGxUZW1wbGF0ZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fcHJpbWFyeV9tZH19XCIgKGNsaWNrKT1cImVkaXRGaWx0ZXIoZGF0YS5kYXRhKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdFxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fZGFuZ2VyX21kfX1cIiAoY2xpY2spPVwiZGVsZXRlRmlsdGVyKGRhdGEuZGF0YSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICA8L2R4LWRhdGEtZ3JpZD5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInAtMiB3LWZ1bGxcIiAqbmdJZj1cImlzTmV3RmlsdGVyQ3JlYXRlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLTMgcC00IGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZC1sZyBzaGFkb3ctbWQgZGFyazpiZy1ncmF5LTgwMCBkYXJrOmJvcmRlci1ncmF5LTcwMFwiPlxuICAgICAgICAgICAgPGg2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0yIGZvbnQtYm9sZCB0ZXh0LWxnIHRyYWNraW5nLXRpZ2h0IHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGJvcmRlci1iIHBiLTMgZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRhYmxlIG1yLTJcIj48L2k+IENyZWF0ZSBGaWx0ZXJzXG5cbiAgICAgICAgICAgIDwvaDY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBteS0yXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTIgdy0xLzNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPkZpbHRlciBOYW1lPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cImNyZWF0RmlsdGVyT2JqZWN0LmZpbHRlck5hbWVcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS01IGJvcmRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtYXV0byBtaW4tdy0wIFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1sZyBweS0yIGZvbnQtZXh0cmFib2xkIGJvcmRlci1iIGJnLWdyYXktNzAwIHRleHQtd2hpdGUgcHgtMlwiPiBTZWxlY3QgRmlsdGVyc1xuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB0LTIgYm9yZGVyLXggYm9yZGVyLWIgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNyZWF0RmlsdGVyT2JqZWN0LmZpbHRlckl0ZW1zOyBsZXQgaSA9IGluZGV4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0yIGZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIGJvcmRlci1iXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgbWItMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTIgbXQtNVwiPiA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1jaGVjay1ib3ggWyhuZ01vZGVsKV09XCJpdGVtLmRpc3BsYXlcIiB0ZXh0PVwiRGlzcGxheVwiPjwvZHgtY2hlY2stYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgbWItMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5GaWx0ZXIgTmFtZSA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtzZWFyY2hFbmFibGVkXT1cInRydWVcIiBbaXRlbXNdPVwia3BpRmlsdGVyQ29uZmlnU2VydmljZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUV4cHI9XCJhcGlOYW1lXCIgdmFsdWVFeHByPVwiYXBpVXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0uYXBpTmFtZVwiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgbWItMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5PcGVyYXRvciBLZXkgTmFtZSA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cIml0ZW0ub3BlcmF0b3JOYW1lXCI+PC9keC10ZXh0LWJveD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgbWItMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj4gRklsdGVyIExhYmVsPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJpdGVtLmxhYmVsXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIG1iLTIgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+IEZJbHRlciBDb250YWluZXI8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtzZWFyY2hFbmFibGVkXT1cInRydWVcIiBbaXRlbXNdPVwiZmlsdGVyX3R5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5maWx0ZXJUeXBlXCI+PC9keC1zZWxlY3QtYm94PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBtYi0yIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPiBGSWx0ZXIgdHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiIFtpdGVtc109XCJkZWZhdWx0RmlsdGVyVHlwZURhdGFTb3VyY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5kZWZhdWx0RmlsdGVyVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJkZWZhdWx0RmlsdGVyVHlwZURhdGFTb3VyY2VbMF1cIj48L2R4LXNlbGVjdC1ib3g+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmRlZmF1bHRGaWx0ZXJUeXBlID09ICdkeW5hbWljJyAmJiAoaXRlbS5maWx0ZXJUeXBlID09ICdkYXRlJyB8fCBpdGVtLmZpbHRlclR5cGUgPT0gJ2RhdGV0aW1lJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIG1iLTIgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPiBGdW5jdGlvbiA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwibW9tZW50RnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0ubW9tZW50RnVuY3Rpb25cIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIG1iLTIgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPiBEaXNwbGF5IEZvcm1hdCA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJpdGVtLm1vbWVudEZvcm1hdFwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIG1iLTIgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPiBRdWVyeSBGb3JtYXQgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiaXRlbS5xdWVyeUZvcm1hdFwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmRlZmF1bHRGaWx0ZXJUeXBlID09ICdzdGF0aWMnICYmIChpdGVtLmZpbHRlclR5cGUgPT0gJ2RhdGUnIHx8IGl0ZW0uZmlsdGVyVHlwZSA9PSAnZGF0ZXRpbWUnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgbWItMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+IERlZmF1bHQgVmFsdWUgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0uZGVmYXVsdEZpbHRlclZhbHVlXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgbWItMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+IERpc3BsYXkgRm9ybWF0IDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cIml0ZW0ubW9tZW50Rm9ybWF0XCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmRlZmF1bHRGaWx0ZXJUeXBlID09ICdkeW5hbWljJyAmJiAoaXRlbS5maWx0ZXJUeXBlICE9PSAnZGF0ZScgfHwgaXRlbS5maWx0ZXJUeXBlICE9PSAnZGF0ZXRpbWUnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgbWItMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+IEZJbHRlciBEZWZhdWx0IFZhbHVlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiaXRlbS5kZWZhdWx0RmlsdGVyVmFsdWVcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIG10LTggdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX2Rhbmdlcl9zbX19IGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlRmlsdGVycyhpKVwiPjxpIGNsYXNzPVwiZmEgZmEtdHJhc2gtb1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1lbmQgbXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3ByaW1hcnlfc219fSBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJhZGRGaWx0ZXIoKVwiPkFkZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW5zPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBqdXN0aWZ5LWVuZCBtdC01IGJvcmRlci10XCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fc3VjY2Vzc19tZH19IGN1cnNvci1wb2ludGVyIG14LTEgbXktMlwiIChjbGljayk9XCJjcmVhdGVGaWx0ZXJJdGVtcygpXCI+XG4gICAgICAgICAgICAgICAgICAgIFN1Ym1pdCBGaWx0ZXJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG5cblxuPC9kaXY+Il19
|