gamma-app-controller 1.2.28 → 1.2.30

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.
Files changed (58) hide show
  1. package/esm2020/lib/application-controller/application-content.service.mjs +3 -3
  2. package/esm2020/lib/application-controller/application-controller.module.mjs +9 -5
  3. package/esm2020/lib/application-controller/application-dataset-component/create-dataset/create-dataset.component.mjs +2 -2
  4. package/esm2020/lib/application-controller/application-dataset-component/create-dataset-sql/create-dataset-sql.component.mjs +3 -3
  5. package/esm2020/lib/application-controller/application-menu-controller/application-create-menu/application-create-menu.component.mjs +15 -39
  6. package/esm2020/lib/application-controller/application-menu-controller/application-menus/application-menus.component.mjs +5 -5
  7. package/esm2020/lib/application-controller/application-view-components/create-comp-view/create-comp-view.component.mjs +4 -1
  8. package/esm2020/lib/application-controller/common.mjs +1 -1
  9. package/esm2020/lib/application-controller/page-controller/page-controller/page-controller.component.mjs +12 -6
  10. package/esm2020/lib/application-controller/support-components/dash-chart/dash-chart.component.mjs +19 -4
  11. package/esm2020/lib/application-controller/support-components/dash-table/dash-table.component.mjs +8 -4
  12. package/esm2020/lib/application-controller/support-components/dash-today-previous/dash-today-previous.component.mjs +3 -3
  13. package/esm2020/lib/application-controller/support-components/table-with-bar/table-with-bar.component.mjs +9 -5
  14. package/esm2020/lib/shared/advanced-component/gamma-advance-chart/gamma-advance-chart.component.mjs +3 -3
  15. package/esm2020/lib/shared/advanced-component/gamma-advance-operator-table/gamma-advance-operator-table.component.mjs +1 -4
  16. package/esm2020/lib/shared/gamma-bread-crumbs/bread-crumbs.component.mjs +1 -3
  17. package/esm2020/lib/shared/permission-helper.mjs +54 -0
  18. package/esm2020/lib/shared/security_principal.mjs +3 -0
  19. package/esm2020/lib/shared/shared.module.mjs +119 -0
  20. package/esm2020/lib/shared/template-dataset-call-service.mjs +376 -0
  21. package/esm2020/lib/shared/user-access/user-access.component.mjs +51 -0
  22. package/esm2020/lib/template-module/KpiCreationModule/create-kpi-tree.component.mjs +38 -4
  23. package/esm2020/lib/template-module/KpiCreationModule/kpiCreation.module.mjs +7 -3
  24. package/esm2020/lib/template-module/bookmarked-template/bookmarked-dataset-call.service.mjs +12 -344
  25. package/esm2020/lib/template-module/defaulLandingComponent/landing-component.component.mjs +2 -2
  26. package/esm2020/lib/template-module/defaulLandingComponent/landing-dataset-call.service.mjs +12 -344
  27. package/esm2020/lib/template-module/defaulLandingMultiLayoutComponent/defaulLandingMultiLayout.component.mjs +1 -3
  28. package/esm2020/lib/template-module/defaulLandingMultiLayoutComponent/multi-landing-dataset-call.service.mjs +12 -344
  29. package/esm2020/lib/template-module/kpiWithMultiLayout/multi-layout-dataset-call.service.mjs +13 -345
  30. package/esm2020/lib/template-module/kpiWithSingleLayout/kpi-with-dataset.component.mjs +55 -26
  31. package/esm2020/lib/template-module/kpiWithSingleLayout/single-layout-dataset-call.service.mjs +12 -347
  32. package/esm2020/public-api.mjs +6 -1
  33. package/fesm2015/gamma-app-controller.mjs +1863 -2879
  34. package/fesm2015/gamma-app-controller.mjs.map +1 -1
  35. package/fesm2020/gamma-app-controller.mjs +1237 -2257
  36. package/fesm2020/gamma-app-controller.mjs.map +1 -1
  37. package/lib/application-controller/application-content.service.d.ts +1 -1
  38. package/lib/application-controller/application-controller.module.d.ts +2 -1
  39. package/lib/application-controller/application-menu-controller/application-create-menu/application-create-menu.component.d.ts +2 -4
  40. package/lib/application-controller/page-controller/page-controller/page-controller.component.d.ts +3 -1
  41. package/lib/application-controller/support-components/dash-chart/dash-chart.component.d.ts +2 -0
  42. package/lib/application-controller/support-components/dash-table/dash-table.component.d.ts +1 -0
  43. package/lib/application-controller/support-components/table-with-bar/table-with-bar.component.d.ts +1 -0
  44. package/lib/shared/permission-helper.d.ts +8 -0
  45. package/lib/shared/security_principal.d.ts +2 -0
  46. package/lib/shared/shared.module.d.ts +10 -0
  47. package/lib/shared/template-dataset-call-service.d.ts +23 -0
  48. package/lib/shared/user-access/user-access.component.d.ts +20 -0
  49. package/lib/template-module/KpiCreationModule/create-kpi-tree.component.d.ts +2 -0
  50. package/lib/template-module/KpiCreationModule/kpiCreation.module.d.ts +2 -1
  51. package/lib/template-module/bookmarked-template/bookmarked-dataset-call.service.d.ts +6 -13
  52. package/lib/template-module/defaulLandingComponent/landing-dataset-call.service.d.ts +5 -12
  53. package/lib/template-module/defaulLandingMultiLayoutComponent/multi-landing-dataset-call.service.d.ts +5 -12
  54. package/lib/template-module/kpiWithMultiLayout/multi-layout-dataset-call.service.d.ts +6 -13
  55. package/lib/template-module/kpiWithSingleLayout/kpi-with-dataset.component.d.ts +4 -2
  56. package/lib/template-module/kpiWithSingleLayout/single-layout-dataset-call.service.d.ts +5 -14
  57. package/package.json +1 -1
  58. package/public-api.d.ts +5 -0
@@ -12,7 +12,8 @@ import * as i9 from "devextreme-angular/ui/check-box";
12
12
  import * as i10 from "devextreme-angular/ui/html-editor";
13
13
  import * as i11 from "devextreme-angular/ui/select-box";
14
14
  import * as i12 from "devextreme-angular/ui/text-box";
15
- import * as i13 from "./treeview/treeview.component";
15
+ import * as i13 from "../../shared/user-access/user-access.component";
16
+ import * as i14 from "./treeview/treeview.component";
16
17
  export class CreateKpiTreeComponent {
17
18
  constructor(commonService, formBuilder, service, toastr, router) {
18
19
  this.commonService = commonService;
@@ -35,6 +36,7 @@ export class CreateKpiTreeComponent {
35
36
  this.kpi_visibility = false;
36
37
  this.kpi_external = false;
37
38
  this.isComponentUpdata = false;
39
+ this.userOptionContainer = [];
38
40
  }
39
41
  ngOnInit() {
40
42
  this.getAllKpiData();
@@ -368,14 +370,46 @@ export class CreateKpiTreeComponent {
368
370
  this.setKpibyTid(this.kpiData, kpi_data.tid, obj);
369
371
  this.editable_kpi_tid = kpi_data.tid;
370
372
  }
373
+ makeNewKpiWithUserEntity() {
374
+ this.userOptionContainer.forEach(element => {
375
+ let att_value = element.attributeValues.split(",");
376
+ element.attributeValues = att_value;
377
+ });
378
+ if (this.selected_kpi_tid !== undefined && this.selected_kpi_tid.length > 0) {
379
+ this.getHeistId(this.kpiData, this.selected_kpi_tid);
380
+ }
381
+ else {
382
+ this.heistValue = (this.kpiData.length != 0) ? this.getHighestTid(this.kpiData) : 0;
383
+ let value = parseInt(this.heistValue) + 1;
384
+ }
385
+ let kpiObj = {
386
+ "kpiId": this.selected_id,
387
+ "pageId": this.selected_page_id,
388
+ "title": this.select_kpi_name,
389
+ "description": this.selected_desc,
390
+ "kpiInfo": this.selected_info,
391
+ "tagType": this.select_tag_type,
392
+ "active": true,
393
+ "visibility": this.kpi_visibility,
394
+ "externalKpi": this.kpi_external,
395
+ "target": "",
396
+ "icon": "",
397
+ "url": "",
398
+ "kpiType": "",
399
+ "parentTid": this.selected_kpi_tid,
400
+ "childTid": "",
401
+ "measures": this.userOptionContainer,
402
+ };
403
+ console.log("KPI with User Entity Obj:", kpiObj);
404
+ }
371
405
  routeToKpiConfig() {
372
406
  this.router.navigate(['apps/controlPanel/kpiController/kpiConfig']);
373
407
  }
374
408
  }
375
409
  CreateKpiTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CreateKpiTreeComponent, deps: [{ token: i1.CommonService }, { token: i2.FormBuilder }, { token: i3.CreateKpIService }, { token: i4.ToastrService }, { token: i5.Router }], target: i0.ɵɵFactoryTarget.Component });
376
- CreateKpiTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CreateKpiTreeComponent, selector: "app-create-kpi", ngImport: i0, template: "<app-loading *ngIf=\"loadingModal\"></app-loading>\n<div class=\"p-4 flex flex-row w-full\">\n <div class=\"mx-2 bg-white dark:bg-transparent border-r\">\n\n <treeview class=\"dark bg-gray-900 dark:bg-transparent\" [name]=\"'mainNavigation'\" [routeKey]=\"'raKpi'\"\n [navigation]=\"kpiData\" [isSearchBox]=\"false\" [isEditIcon]=\"true\" (editableKpiData)=\"getEditableKpi($event)\">\n </treeview>\n </div>\n <div class=\"mx-2 w-full\">\n <div class=\"flex flex-row item-center justify-center my-8\">\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"addNewKpi()\">Add New KPI</button>\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"routeToKpiConfig()\"\n routerLinkActive=\"router-link-active\">Configure KPI</button>\n </div>\n <ng-container *ngIf=\"isNewKpiAdded\">\n <div class=\"px-2 w-full\">\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Name</p>\n <dx-text-box [(ngModel)]=\"select_kpi_name\"></dx-text-box>\n </div>\n </div>\n\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Tag Type</p>\n <dx-select-box [dataSource]=\"tagType\" [(ngModel)]=\"select_tag_type\"\n (onValueChanged)=\"addTagtypeValue($event)\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">ID</p>\n <dx-text-box [(ngModel)]=\"selected_id\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Page ID</p>\n <!-- <dx-text-box [(ngModel)]=\"selected_page_id\"></dx-text-box> -->\n <dx-select-box [items]=\"templateDataSource\" valueExpr=\"pageId\" displayExpr=\"pageName\"\n [(ngModel)]=\"selected_page_id\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Description</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"selected_desc\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\" [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Parent Component </p>\n <dx-select-box [dataSource]=\"keiParentDataSource\" displayExpr=\"name\" valueExpr=\"tid\"\n (onValueChanged)=\"getKpiItemValue($event)\" [value]=\"parante_kpi_name\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">TID</p>\n <dx-text-box [(ngModel)]=\"selected_kpi_tid\" [readOnly]=\"true\"></dx-text-box>\n </div>\n </div>\n <div class=\"flex flex-row justify-between mt-3\">\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_visibility\" text=\"Visibility\"></dx-check-box>\n </div>\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_external\" text=\"External KPI\"></dx-check-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">KPI Info</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"selected_info\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n <div class=\"flex flex-auto mt-5 justify-end\">\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"makeNewKpi()\">Create\n </button>\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"getReseteKpi()\">Reset</button>\n\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isEditKpiAdded\">\n <div class=\"px-2 w-full\">\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mb-2\">Name</p>\n <dx-text-box [(ngModel)]=\"editable_kpi_name\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Tag Type</p>\n <dx-select-box [dataSource]=\"tagType\" [(ngModel)]=\"editable_tag_type\"\n (onValueChanged)=\"addTagtypeValue($event)\" [readOnly]=\"isFromEditable\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">ID</p>\n <dx-text-box [(ngModel)]=\"editable_id\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Page ID</p>\n <!-- <dx-text-box [(ngModel)]=\"editable_page_id\"></dx-text-box> -->\n <dx-select-box [items]=\"templateDataSource\" valueExpr=\"pageId\" displayExpr=\"pageName\"\n [(ngModel)]=\"editable_page_id\"></dx-select-box>\n\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Description</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"editable_desc\">\n <dxo-toolbar [multiline]=\"true\">\n <dxi-item name=\"undo\"></dxi-item>\n <dxi-item name=\"redo\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"blockquote\"></dxi-item>\n\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Parent Component </p>\n <dx-select-box [searchEnabled]=\"true\" [readOnly]=\"editable_tag_type == 'parent'\"\n [dataSource]=\"keiParentDataSource\" displayExpr=\"name\" valueExpr=\"tid\"\n (onValueChanged)=\"getNewParrentKpiItemValue($event)\"\n [value]=\"parante_kpi_name\"></dx-select-box>\n </div>\n </div>\n\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">TID</p>\n <dx-text-box [(ngModel)]=\"editable_kpi_tid\" [readOnly]=\"false\"></dx-text-box>\n </div>\n </div>\n <div class=\"flex flex-row justify-between mt-3\">\n\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_visibility\" text=\"Visibility\"></dx-check-box>\n </div>\n\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_external\" text=\"External KPI\"></dx-check-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">KPI Info</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"editable_info\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n <div class=\"flex flex-auto mt-3 justify-end\">\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"getUpdateKpi()\">Update\n </button>\n <button class=\"{{commonService.btn_danger_md}}\" (click)=\"getDeleteKpi()\">Delete\n </button>\n <!-- <button class=\"{{commonService.btn_danger_md}}\" (click)=\"cancelUpdate()\">Cancle</button> -->\n\n </div>\n </div>\n </ng-container>\n </div>\n\n\n\n\n</div>", styles: [":host ::ng-deep treeview .treeview-wrapper{width:100%!important}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.LoadingComponent, selector: "app-loading" }, { kind: "component", type: i8.DxiItemComponent, selector: "dxi-item", inputs: ["disabled", "html", "icon", "template", "text", "title", "visible", "onClick", "stylingMode", "type", "baseSize", "box", "ratio", "shrink", "elementAttr", "hint", "beginGroup", "closeMenuOnClick", "items", "selectable", "selected", "colSpan", "cssClass", "dataField", "editorOptions", "editorType", "helpText", "isRequired", "itemType", "label", "name", "validationRules", "visibleIndex", "alignItemLabels", "caption", "colCount", "colCountByScreen", "tabPanelOptions", "tabs", "badge", "tabTemplate", "buttonOptions", "horizontalAlignment", "verticalAlignment", "locateInMenu", "location", "menuItemTemplate", "options", "showText", "widget", "height", "width", "imageAlt", "imageSrc", "acceptedValues", "formatName", "formatValues", "key", "showChevron", "menuTemplate", "heightRatio", "widthRatio", "expanded", "hasItems", "id", "parentId"] }, { kind: "component", type: i9.DxCheckBoxComponent, selector: "dx-check-box", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "iconSize", "isValid", "name", "readOnly", "rtlEnabled", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconSizeChange", "isValidChange", "nameChange", "readOnlyChange", "rtlEnabledChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i8.DxoToolbarComponent, selector: "dxo-toolbar", inputs: ["disabled", "items", "visible", "fileSelectionItems", "container", "multiline"] }, { kind: "component", type: i10.DxHtmlEditorComponent, selector: "dx-html-editor", inputs: ["accessKey", "activeStateEnabled", "allowSoftLineBreak", "customizeModules", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "imageUpload", "isValid", "mediaResizing", "mentions", "name", "placeholder", "readOnly", "rtlEnabled", "stylingMode", "tabIndex", "tableContextMenu", "tableResizing", "toolbar", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueType", "variables", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onFocusIn", "onFocusOut", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "allowSoftLineBreakChange", "customizeModulesChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "imageUploadChange", "isValidChange", "mediaResizingChange", "mentionsChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "tableContextMenuChange", "tableResizingChange", "toolbarChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueTypeChange", "variablesChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i8.DxoImageUploadComponent, selector: "dxo-image-upload", inputs: ["fileUploaderOptions", "fileUploadMode", "tabs", "uploadDirectory", "uploadUrl"] }, { kind: "component", type: i8.DxoMediaResizingComponent, selector: "dxo-media-resizing", inputs: ["allowedTargets", "enabled"] }, { kind: "component", type: i11.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i12.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i13.TreeviewComponent, selector: "treeview", inputs: ["autoCollapse", "inner", "navigation", "opened", "isEditIcon", "isSearchBox", "transparentOverlay", "treeListForSearchBox", "name", "openTreeId", "routeKey"], outputs: ["editableKpiData"] }] });
410
+ CreateKpiTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CreateKpiTreeComponent, selector: "app-create-kpi", ngImport: i0, template: "<app-loading *ngIf=\"loadingModal\"></app-loading>\n<div class=\"p-4 flex flex-row w-full\">\n <div class=\"mx-2 bg-white dark:bg-transparent border-r\">\n\n <treeview class=\"dark bg-gray-900 dark:bg-transparent\" [name]=\"'mainNavigation'\" [routeKey]=\"'raKpi'\"\n [navigation]=\"kpiData\" [isSearchBox]=\"false\" [isEditIcon]=\"true\" (editableKpiData)=\"getEditableKpi($event)\">\n </treeview>\n </div>\n <div class=\"mx-2 w-full\">\n <div class=\"flex flex-row item-center justify-center my-8\">\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"addNewKpi()\">Add New KPI</button>\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"routeToKpiConfig()\"\n routerLinkActive=\"router-link-active\">Configure KPI</button>\n </div>\n <ng-container *ngIf=\"isNewKpiAdded\">\n <div class=\"px-2 w-full\">\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Name</p>\n <dx-text-box [(ngModel)]=\"select_kpi_name\"></dx-text-box>\n </div>\n </div>\n\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Tag Type</p>\n <dx-select-box [dataSource]=\"tagType\" [(ngModel)]=\"select_tag_type\"\n (onValueChanged)=\"addTagtypeValue($event)\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">ID</p>\n <dx-text-box [(ngModel)]=\"selected_id\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Page ID</p>\n <!-- <dx-text-box [(ngModel)]=\"selected_page_id\"></dx-text-box> -->\n <dx-select-box [items]=\"templateDataSource\" valueExpr=\"pageId\" displayExpr=\"pageName\" [searchEnabled]=\"true\"\n [(ngModel)]=\"selected_page_id\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Description</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"selected_desc\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\" [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Parent Component </p>\n <dx-select-box [dataSource]=\"keiParentDataSource\" displayExpr=\"name\" valueExpr=\"tid\"\n (onValueChanged)=\"getKpiItemValue($event)\" [value]=\"parante_kpi_name\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">TID</p>\n <dx-text-box [(ngModel)]=\"selected_kpi_tid\" [readOnly]=\"true\"></dx-text-box>\n </div>\n </div>\n <div class=\"flex flex-row justify-between mt-3\">\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_visibility\" text=\"Visibility\"></dx-check-box>\n </div>\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_external\" text=\"External KPI\"></dx-check-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">KPI Info</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"selected_info\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n\n <app-user-access [(userOptionContainer)]=\"userOptionContainer\">\n </app-user-access>\n\n <div class=\"flex flex-auto mt-5 justify-end\">\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"makeNewKpi()\">Create\n </button>\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"makeNewKpiWithUserEntity()\">Create With User Privilege\n </button>\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"getReseteKpi()\">Reset</button>\n\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isEditKpiAdded\">\n <div class=\"px-2 w-full\">\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mb-2\">Name</p>\n <dx-text-box [(ngModel)]=\"editable_kpi_name\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Tag Type</p>\n <dx-select-box [dataSource]=\"tagType\" [(ngModel)]=\"editable_tag_type\"\n (onValueChanged)=\"addTagtypeValue($event)\" [readOnly]=\"isFromEditable\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">ID</p>\n <dx-text-box [(ngModel)]=\"editable_id\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Page ID</p>\n <!-- <dx-text-box [(ngModel)]=\"editable_page_id\"></dx-text-box> -->\n <dx-select-box [items]=\"templateDataSource\" valueExpr=\"pageId\" displayExpr=\"pageName\" [searchEnabled]=\"true\"\n [(ngModel)]=\"editable_page_id\"></dx-select-box>\n\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Description</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"editable_desc\">\n <dxo-toolbar [multiline]=\"true\">\n <dxi-item name=\"undo\"></dxi-item>\n <dxi-item name=\"redo\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"blockquote\"></dxi-item>\n\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Parent Component </p>\n <dx-select-box [searchEnabled]=\"true\" [readOnly]=\"editable_tag_type == 'parent'\"\n [dataSource]=\"keiParentDataSource\" displayExpr=\"name\" valueExpr=\"tid\"\n (onValueChanged)=\"getNewParrentKpiItemValue($event)\"\n [value]=\"parante_kpi_name\"></dx-select-box>\n </div>\n </div>\n\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">TID</p>\n <dx-text-box [(ngModel)]=\"editable_kpi_tid\" [readOnly]=\"false\"></dx-text-box>\n </div>\n </div>\n <div class=\"flex flex-row justify-between mt-3\">\n\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_visibility\" text=\"Visibility\"></dx-check-box>\n </div>\n\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_external\" text=\"External KPI\"></dx-check-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">KPI Info</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"editable_info\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n <div class=\"flex flex-auto mt-3 justify-end\">\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"getUpdateKpi()\">Update\n </button>\n <button class=\"{{commonService.btn_danger_md}}\" (click)=\"getDeleteKpi()\">Delete\n </button>\n <!-- <button class=\"{{commonService.btn_danger_md}}\" (click)=\"cancelUpdate()\">Cancle</button> -->\n\n </div>\n </div>\n </ng-container>\n </div>\n\n\n\n\n</div>", styles: [":host ::ng-deep treeview .treeview-wrapper{width:100%!important}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.LoadingComponent, selector: "app-loading" }, { kind: "component", type: i8.DxiItemComponent, selector: "dxi-item", inputs: ["disabled", "html", "icon", "template", "text", "title", "visible", "onClick", "stylingMode", "type", "baseSize", "box", "ratio", "shrink", "elementAttr", "hint", "beginGroup", "closeMenuOnClick", "items", "selectable", "selected", "colSpan", "cssClass", "dataField", "editorOptions", "editorType", "helpText", "isRequired", "itemType", "label", "name", "validationRules", "visibleIndex", "alignItemLabels", "caption", "colCount", "colCountByScreen", "tabPanelOptions", "tabs", "badge", "tabTemplate", "buttonOptions", "horizontalAlignment", "verticalAlignment", "locateInMenu", "location", "menuItemTemplate", "options", "showText", "widget", "height", "width", "imageAlt", "imageSrc", "acceptedValues", "formatName", "formatValues", "key", "showChevron", "menuTemplate", "heightRatio", "widthRatio", "expanded", "hasItems", "id", "parentId"] }, { kind: "component", type: i9.DxCheckBoxComponent, selector: "dx-check-box", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "iconSize", "isValid", "name", "readOnly", "rtlEnabled", "tabIndex", "text", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconSizeChange", "isValidChange", "nameChange", "readOnlyChange", "rtlEnabledChange", "tabIndexChange", "textChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i8.DxoToolbarComponent, selector: "dxo-toolbar", inputs: ["disabled", "items", "visible", "fileSelectionItems", "container", "multiline"] }, { kind: "component", type: i10.DxHtmlEditorComponent, selector: "dx-html-editor", inputs: ["accessKey", "activeStateEnabled", "allowSoftLineBreak", "customizeModules", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "imageUpload", "isValid", "mediaResizing", "mentions", "name", "placeholder", "readOnly", "rtlEnabled", "stylingMode", "tabIndex", "tableContextMenu", "tableResizing", "toolbar", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueType", "variables", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onFocusIn", "onFocusOut", "onInitialized", "onOptionChanged", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "allowSoftLineBreakChange", "customizeModulesChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "imageUploadChange", "isValidChange", "mediaResizingChange", "mentionsChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "tableContextMenuChange", "tableResizingChange", "toolbarChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueTypeChange", "variablesChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i8.DxoImageUploadComponent, selector: "dxo-image-upload", inputs: ["fileUploaderOptions", "fileUploadMode", "tabs", "uploadDirectory", "uploadUrl"] }, { kind: "component", type: i8.DxoMediaResizingComponent, selector: "dxo-media-resizing", inputs: ["allowedTargets", "enabled"] }, { kind: "component", type: i11.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i12.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i13.UserAccessComponent, selector: "app-user-access", inputs: ["userOptionContainer"], outputs: ["userOptionContainerChange"] }, { kind: "component", type: i14.TreeviewComponent, selector: "treeview", inputs: ["autoCollapse", "inner", "navigation", "opened", "isEditIcon", "isSearchBox", "transparentOverlay", "treeListForSearchBox", "name", "openTreeId", "routeKey"], outputs: ["editableKpiData"] }] });
377
411
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CreateKpiTreeComponent, decorators: [{
378
412
  type: Component,
379
- args: [{ selector: 'app-create-kpi', template: "<app-loading *ngIf=\"loadingModal\"></app-loading>\n<div class=\"p-4 flex flex-row w-full\">\n <div class=\"mx-2 bg-white dark:bg-transparent border-r\">\n\n <treeview class=\"dark bg-gray-900 dark:bg-transparent\" [name]=\"'mainNavigation'\" [routeKey]=\"'raKpi'\"\n [navigation]=\"kpiData\" [isSearchBox]=\"false\" [isEditIcon]=\"true\" (editableKpiData)=\"getEditableKpi($event)\">\n </treeview>\n </div>\n <div class=\"mx-2 w-full\">\n <div class=\"flex flex-row item-center justify-center my-8\">\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"addNewKpi()\">Add New KPI</button>\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"routeToKpiConfig()\"\n routerLinkActive=\"router-link-active\">Configure KPI</button>\n </div>\n <ng-container *ngIf=\"isNewKpiAdded\">\n <div class=\"px-2 w-full\">\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Name</p>\n <dx-text-box [(ngModel)]=\"select_kpi_name\"></dx-text-box>\n </div>\n </div>\n\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Tag Type</p>\n <dx-select-box [dataSource]=\"tagType\" [(ngModel)]=\"select_tag_type\"\n (onValueChanged)=\"addTagtypeValue($event)\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">ID</p>\n <dx-text-box [(ngModel)]=\"selected_id\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Page ID</p>\n <!-- <dx-text-box [(ngModel)]=\"selected_page_id\"></dx-text-box> -->\n <dx-select-box [items]=\"templateDataSource\" valueExpr=\"pageId\" displayExpr=\"pageName\"\n [(ngModel)]=\"selected_page_id\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Description</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"selected_desc\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\" [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Parent Component </p>\n <dx-select-box [dataSource]=\"keiParentDataSource\" displayExpr=\"name\" valueExpr=\"tid\"\n (onValueChanged)=\"getKpiItemValue($event)\" [value]=\"parante_kpi_name\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">TID</p>\n <dx-text-box [(ngModel)]=\"selected_kpi_tid\" [readOnly]=\"true\"></dx-text-box>\n </div>\n </div>\n <div class=\"flex flex-row justify-between mt-3\">\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_visibility\" text=\"Visibility\"></dx-check-box>\n </div>\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_external\" text=\"External KPI\"></dx-check-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">KPI Info</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"selected_info\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n <div class=\"flex flex-auto mt-5 justify-end\">\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"makeNewKpi()\">Create\n </button>\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"getReseteKpi()\">Reset</button>\n\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isEditKpiAdded\">\n <div class=\"px-2 w-full\">\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mb-2\">Name</p>\n <dx-text-box [(ngModel)]=\"editable_kpi_name\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Tag Type</p>\n <dx-select-box [dataSource]=\"tagType\" [(ngModel)]=\"editable_tag_type\"\n (onValueChanged)=\"addTagtypeValue($event)\" [readOnly]=\"isFromEditable\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">ID</p>\n <dx-text-box [(ngModel)]=\"editable_id\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Page ID</p>\n <!-- <dx-text-box [(ngModel)]=\"editable_page_id\"></dx-text-box> -->\n <dx-select-box [items]=\"templateDataSource\" valueExpr=\"pageId\" displayExpr=\"pageName\"\n [(ngModel)]=\"editable_page_id\"></dx-select-box>\n\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Description</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"editable_desc\">\n <dxo-toolbar [multiline]=\"true\">\n <dxi-item name=\"undo\"></dxi-item>\n <dxi-item name=\"redo\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"blockquote\"></dxi-item>\n\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Parent Component </p>\n <dx-select-box [searchEnabled]=\"true\" [readOnly]=\"editable_tag_type == 'parent'\"\n [dataSource]=\"keiParentDataSource\" displayExpr=\"name\" valueExpr=\"tid\"\n (onValueChanged)=\"getNewParrentKpiItemValue($event)\"\n [value]=\"parante_kpi_name\"></dx-select-box>\n </div>\n </div>\n\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">TID</p>\n <dx-text-box [(ngModel)]=\"editable_kpi_tid\" [readOnly]=\"false\"></dx-text-box>\n </div>\n </div>\n <div class=\"flex flex-row justify-between mt-3\">\n\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_visibility\" text=\"Visibility\"></dx-check-box>\n </div>\n\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_external\" text=\"External KPI\"></dx-check-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">KPI Info</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"editable_info\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n <div class=\"flex flex-auto mt-3 justify-end\">\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"getUpdateKpi()\">Update\n </button>\n <button class=\"{{commonService.btn_danger_md}}\" (click)=\"getDeleteKpi()\">Delete\n </button>\n <!-- <button class=\"{{commonService.btn_danger_md}}\" (click)=\"cancelUpdate()\">Cancle</button> -->\n\n </div>\n </div>\n </ng-container>\n </div>\n\n\n\n\n</div>", styles: [":host ::ng-deep treeview .treeview-wrapper{width:100%!important}\n"] }]
413
+ args: [{ selector: 'app-create-kpi', template: "<app-loading *ngIf=\"loadingModal\"></app-loading>\n<div class=\"p-4 flex flex-row w-full\">\n <div class=\"mx-2 bg-white dark:bg-transparent border-r\">\n\n <treeview class=\"dark bg-gray-900 dark:bg-transparent\" [name]=\"'mainNavigation'\" [routeKey]=\"'raKpi'\"\n [navigation]=\"kpiData\" [isSearchBox]=\"false\" [isEditIcon]=\"true\" (editableKpiData)=\"getEditableKpi($event)\">\n </treeview>\n </div>\n <div class=\"mx-2 w-full\">\n <div class=\"flex flex-row item-center justify-center my-8\">\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"addNewKpi()\">Add New KPI</button>\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"routeToKpiConfig()\"\n routerLinkActive=\"router-link-active\">Configure KPI</button>\n </div>\n <ng-container *ngIf=\"isNewKpiAdded\">\n <div class=\"px-2 w-full\">\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Name</p>\n <dx-text-box [(ngModel)]=\"select_kpi_name\"></dx-text-box>\n </div>\n </div>\n\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Tag Type</p>\n <dx-select-box [dataSource]=\"tagType\" [(ngModel)]=\"select_tag_type\"\n (onValueChanged)=\"addTagtypeValue($event)\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">ID</p>\n <dx-text-box [(ngModel)]=\"selected_id\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Page ID</p>\n <!-- <dx-text-box [(ngModel)]=\"selected_page_id\"></dx-text-box> -->\n <dx-select-box [items]=\"templateDataSource\" valueExpr=\"pageId\" displayExpr=\"pageName\" [searchEnabled]=\"true\"\n [(ngModel)]=\"selected_page_id\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Description</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"selected_desc\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\" [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Parent Component </p>\n <dx-select-box [dataSource]=\"keiParentDataSource\" displayExpr=\"name\" valueExpr=\"tid\"\n (onValueChanged)=\"getKpiItemValue($event)\" [value]=\"parante_kpi_name\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">TID</p>\n <dx-text-box [(ngModel)]=\"selected_kpi_tid\" [readOnly]=\"true\"></dx-text-box>\n </div>\n </div>\n <div class=\"flex flex-row justify-between mt-3\">\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_visibility\" text=\"Visibility\"></dx-check-box>\n </div>\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_external\" text=\"External KPI\"></dx-check-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">KPI Info</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"selected_info\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n\n <app-user-access [(userOptionContainer)]=\"userOptionContainer\">\n </app-user-access>\n\n <div class=\"flex flex-auto mt-5 justify-end\">\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"makeNewKpi()\">Create\n </button>\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"makeNewKpiWithUserEntity()\">Create With User Privilege\n </button>\n <button class=\"{{commonService.btn_warning_md}}\" (click)=\"getReseteKpi()\">Reset</button>\n\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isEditKpiAdded\">\n <div class=\"px-2 w-full\">\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mb-2\">Name</p>\n <dx-text-box [(ngModel)]=\"editable_kpi_name\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Tag Type</p>\n <dx-select-box [dataSource]=\"tagType\" [(ngModel)]=\"editable_tag_type\"\n (onValueChanged)=\"addTagtypeValue($event)\" [readOnly]=\"isFromEditable\"></dx-select-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">ID</p>\n <dx-text-box [(ngModel)]=\"editable_id\"></dx-text-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Page ID</p>\n <!-- <dx-text-box [(ngModel)]=\"editable_page_id\"></dx-text-box> -->\n <dx-select-box [items]=\"templateDataSource\" valueExpr=\"pageId\" displayExpr=\"pageName\" [searchEnabled]=\"true\"\n [(ngModel)]=\"editable_page_id\"></dx-select-box>\n\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">Description</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"editable_desc\">\n <dxo-toolbar [multiline]=\"true\">\n <dxi-item name=\"undo\"></dxi-item>\n <dxi-item name=\"redo\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"blockquote\"></dxi-item>\n\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\"> Parent Component </p>\n <dx-select-box [searchEnabled]=\"true\" [readOnly]=\"editable_tag_type == 'parent'\"\n [dataSource]=\"keiParentDataSource\" displayExpr=\"name\" valueExpr=\"tid\"\n (onValueChanged)=\"getNewParrentKpiItemValue($event)\"\n [value]=\"parante_kpi_name\"></dx-select-box>\n </div>\n </div>\n\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">TID</p>\n <dx-text-box [(ngModel)]=\"editable_kpi_tid\" [readOnly]=\"false\"></dx-text-box>\n </div>\n </div>\n <div class=\"flex flex-row justify-between mt-3\">\n\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_visibility\" text=\"Visibility\"></dx-check-box>\n </div>\n\n <div class=\"px-2 pt-1 w-full\">\n <dx-check-box [(ngModel)]=\"kpi_external\" text=\"External KPI\"></dx-check-box>\n </div>\n </div>\n <div class=\"m-1\">\n <div class=\"px-2 pt-1 w-full\">\n <p class=\"text-lg mt-2\">KPI Info</p>\n <dx-html-editor height=\"'auto'\" [(ngModel)]=\"editable_info\">\n <dxo-toolbar [multiline]=\"false\">\n\n <dxi-item name=\"size\"\n [acceptedValues]=\"['8pt', '10pt', '12pt', '14pt', '18pt', '24pt', '36pt']\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font size' } }\"></dxi-item>\n <dxi-item name=\"font\" [acceptedValues]=\"[\n 'Arial',\n 'Courier New',\n 'Georgia',\n 'Impact',\n 'Lucida Console',\n 'Tahoma',\n 'Times New Roman',\n 'Verdana'\n ]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Font family' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"bold\"></dxi-item>\n <dxi-item name=\"italic\"></dxi-item>\n <dxi-item name=\"underline\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"alignLeft\"></dxi-item>\n <dxi-item name=\"alignCenter\"></dxi-item>\n <dxi-item name=\"alignRight\"></dxi-item>\n <dxi-item name=\"alignJustify\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"orderedList\"></dxi-item>\n <dxi-item name=\"bulletList\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"header\" [acceptedValues]=\"[false, 1, 2, 3, 4, 5]\"\n [options]=\"{ inputAttr: { 'aria-label': 'Header' } }\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"color\"></dxi-item>\n <dxi-item name=\"background\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"link\"></dxi-item>\n <dxi-item name=\"image\"></dxi-item>\n <dxi-item name=\"separator\"></dxi-item>\n <dxi-item name=\"clear\"></dxi-item>\n <dxi-item name=\"codeBlock\"></dxi-item>\n </dxo-toolbar>\n <dxo-media-resizing [enabled]=\"true\"> </dxo-media-resizing>\n <dxo-image-upload [tabs]=\"['file', 'url']\" fileUploadMode=\"base64\">\n </dxo-image-upload>\n </dx-html-editor>\n </div>\n </div>\n <div class=\"flex flex-auto mt-3 justify-end\">\n <button class=\"{{commonService.btn_primary_md}}\" (click)=\"getUpdateKpi()\">Update\n </button>\n <button class=\"{{commonService.btn_danger_md}}\" (click)=\"getDeleteKpi()\">Delete\n </button>\n <!-- <button class=\"{{commonService.btn_danger_md}}\" (click)=\"cancelUpdate()\">Cancle</button> -->\n\n </div>\n </div>\n </ng-container>\n </div>\n\n\n\n\n</div>", styles: [":host ::ng-deep treeview .treeview-wrapper{width:100%!important}\n"] }]
380
414
  }], ctorParameters: function () { return [{ type: i1.CommonService }, { type: i2.FormBuilder }, { type: i3.CreateKpIService }, { type: i4.ToastrService }, { type: i5.Router }]; } });
381
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWtwaS10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvdGVtcGxhdGUtbW9kdWxlL0twaUNyZWF0aW9uTW9kdWxlL2NyZWF0ZS1rcGktdHJlZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3RlbXBsYXRlLW1vZHVsZS9LcGlDcmVhdGlvbk1vZHVsZS9jcmVhdGUta3BpLXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBYWxELE1BQU0sT0FBTyxzQkFBc0I7SUFxQ2pDLFlBQ1MsYUFBNEIsRUFBVSxXQUF3QixFQUM3RCxPQUF5QixFQUFVLE1BQXFCLEVBQ3hELE1BQWM7UUFGZixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQzdELFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUN4RCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBdkN4QixpQkFBWSxHQUFZLElBQUksQ0FBQztRQUM3Qix3QkFBbUIsR0FBUSxFQUFFLENBQUM7UUFFOUIsWUFBTyxHQUFHLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlCLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLG1CQUFjLEdBQVEsRUFBRSxDQUFDO1FBV3pCLFdBQU0sR0FBRyxFQUFFLENBQUM7UUFDWixZQUFPLEdBQVEsRUFBRSxDQUFDO1FBRWxCLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLG1CQUFjLEdBQVksS0FBSyxD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OzJGRGxWTyxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBSb3V0ZXIsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBDcmVhdGVLcElTZXJ2aWNlIH0gZnJvbSAnLi9jcmVhdGVLcGkuc2VydmljZSc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwbGljYXRpb24tY29udHJvbGxlci9jb21tb24nO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jcmVhdGUta3BpJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NyZWF0ZS1rcGktdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NyZWF0ZS1rcGktdHJlZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENyZWF0ZUtwaVRyZWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBsb2FkaW5nTW9kYWw6IGJvb2xlYW4gPSB0cnVlO1xuICBrZWlQYXJlbnREYXRhU291cmNlOiBhbnkgPSBbXTtcbiAgbXlGb3JtOiBGb3JtR3JvdXA7XG4gIHRhZ1R5cGUgPSBbXCJwYXJlbnRcIiwgXCJjaGlsZFwiXTtcbiAga3BpX2NvbnN0cnVjdG9yID0gW107XG4gIHNlbGVjdGVkX3Bfa3BpOiBhbnkgPSB7fTtcblxuICBzZWxlY3Rfa3BpX25hbWU6IGFueTtcbiAgc2VsZWN0X3RhZ190eXBlOiBhbnk7XG4gIHNlbGVjdGVkX2lkOiBhbnk7XG4gIHNlbGVjdGVkX3BhZ2VfaWQ6IGFueTtcbiAgc2VsZWN0ZWRfbmVzdGVkX25hbWU6IGFueTtcbiAgc2VsZWN0ZWRfa3BpX3RpZDogYW55O1xuICBzZWxlY3RlZF9kZXNjOiBhbnk7XG4gIHNlbGVjdGVkX2luZm86IGFueTtcblxuICBoZWlnaHQgPSA5MDtcbiAga3BpRGF0YTogYW55ID0gW107XG4gIGhlaXN0VmFsdWU6IGFueTtcbiAgaXNGcm9tRWRpdGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNOZXdLcGlBZGRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0VkaXRLcGlBZGRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGVkaXRhYmxlX2Rlc2MgPSBcIlwiO1xuICBlZGl0YWJsZV9pbmZvID0gXCJcIjtcbiAgZWRpdGFibGVfaWQ7XG4gIGVkaXRhYmxlX3BhZ2VfaWQ7XG4gIGVkaXRhYmxlX3RhZ190eXBlO1xuICBlZGl0YWJsZV9rcGlfbmFtZTtcbiAgZWRpdGFibGVfa3BpX3RpZDtcbiAga3BpX3Zpc2liaWxpdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAga3BpX2V4dGVybmFsOiBib29sZWFuID0gZmFsc2U7XG4gIHBhcmFudGVfa3BpX25hbWU6IGFueTtcbiAgaXNDb21wb25lbnRVcGRhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdGVtcGxhdGVEYXRhU291cmNlOiBhbnk7XG4gIC8vIGtwaURhdGFKc29uOmFueTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLCBcbiAgICBwcml2YXRlIHNlcnZpY2U6IENyZWF0ZUtwSVNlcnZpY2UsIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHtcblxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG5cbiAgICB0aGlzLmdldEFsbEtwaURhdGEoKTtcbiAgICB0aGlzLmdldEFwcFBhZ2VDb25maWdzKCk7XG4gIH1cblxuICBnZXRBcHBQYWdlQ29uZmlncygpIHtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0QXBwUGFnZUNvbmZpZ3MoKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRlbXBsYXRlRGF0YVNvdXJjZSA9IGRhdGE7XG4gICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnUGFnZSBJRCcpXG5cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZ2V0QWxsS3BpRGF0YSgpIHtcbiAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuXG4gICAgdGhpcy5rZWlQYXJlbnREYXRhU291cmNlID0gW107XG4gICAgdGhpcy5zZXJ2aWNlLmdldGxpc3RLcGlCcm93c2VyKCkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcbiAgICAgIHRoaXMua3BpRGF0YSA9IGRhdGFcbiAgICAgIHRoaXMucHJlcGFyZVBhcmVudERhdGFTb3VyY2UoZGF0YSlcblxuICAgIH0sIGVyciA9PiB7XG4gICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdLUEkgQ29uZmlnJylcbiAgICB9KVxuICB9XG5cbiAgcHJlcGFyZVBhcmVudERhdGFTb3VyY2UoZGF0YSkge1xuICAgIGRhdGEuZm9yRWFjaCgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXN1bHQudGFnX3R5cGUgPT0gJ3BhcmVudCcpIHtcbiAgICAgICAgbGV0IG5vZGUgPSB7XG4gICAgICAgICAgXCJuYW1lXCI6IHJlc3VsdC5uYW1lLFxuICAgICAgICAgIFwidGlkXCI6IHJlc3VsdC50aWRcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmtlaVBhcmVudERhdGFTb3VyY2UucHVzaChub2RlKTtcbiAgICAgICAgdGhpcy5wcmVwYXJlUGFyZW50RGF0YVNvdXJjZShyZXN1bHQubm9kZXMpO1xuICAgICAgfVxuICAgIH0pO1xuXG5cblxuICB9XG5cblxuICBtYWtlTmV3S3BpKCkge1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRfa3BpX3RpZCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuc2VsZWN0ZWRfa3BpX3RpZC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmdldEhlaXN0SWQodGhpcy5rcGlEYXRhLCB0aGlzLnNlbGVjdGVkX2twaV90aWQpO1xuICAgICAgdGhpcy5jcmVhdGVOZXdLcGlXaXRoVGlkKCk7XG4gICAgfSBlbHNlIHtcblxuICAgICAgdGhpcy5oZWlzdFZhbHVlID0gKHRoaXMua3BpRGF0YS5sZW5ndGggIT0gMCkgPyB0aGlzLmdldEhpZ2hlc3RUaWQodGhpcy5rcGlEYXRhKSA6IDA7XG4gICAgICBsZXQgdmFsdWUgPSBwYXJzZUludCh0aGlzLmhlaXN0VmFsdWUpICsgMTtcblxuICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgXCJuYW1lXCI6IHRoaXMuc2VsZWN0X2twaV9uYW1lLFxuICAgICAgICBcInRpZFwiOiB2YWx1ZS50b1N0cmluZygpLFxuICAgICAgICBcImlzQm9va21hcmtlZFwiOiBmYWxzZSxcbiAgICAgICAgXCJpc0FjY2Vzc2libGVcIjogdGhpcy5rcGlfZXh0ZXJuYWwsXG4gICAgICAgIFwibGFzdEFjY2Vzc1RpbWVcIjogXCJcIixcbiAgICAgICAgXCJ0YWdfdHlwZVwiOiB0aGlzLnNlbGVjdF90YWdfdHlwZSxcbiAgICAgICAgXCJpZFwiOiB0aGlzLnNlbGVjdGVkX2lkLFxuICAgICAgICBcInBhZ2VJZFwiOiB0aGlzLnNlbGVjdGVkX3BhZ2VfaWQsXG4gICAgICAgIFwiZGVzY1wiOiB0aGlzLnNlbGVjdGVkX2Rlc2MsXG4gICAgICAgIFwiaXNWaXNpYmxlXCI6IHRoaXMua3BpX3Zpc2liaWxpdHksXG4gICAgICAgIFwibm9kZXNcIjogW10sXG4gICAgICAgIFwiY29uZmlnXCI6IHt9XG4gICAgICB9XG4gICAgICB0aGlzLmtwaURhdGEucHVzaChvYmopXG4gICAgICBpZiAodGhpcy5zZWxlY3RfdGFnX3R5cGUgPT0gJ3BhcmVudCcpIHtcbiAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICBcIm5hbWVcIjogdGhpcy5zZWxlY3Rfa3BpX25hbWUsXG4gICAgICAgICAgXCJ0aWRcIjogdmFsdWUudG9TdHJpbmcoKSxcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmtlaVBhcmVudERhdGFTb3VyY2UucHVzaChvYmopXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZWxlY3RfdGFnX3R5cGUgPT0gJ2NoaWxkJykge1xuICAgICAgICBsZXQgb2JqID0ge1xuICAgICAgICAgIFwibmFtZVwiOiB0aGlzLnNlbGVjdF9rcGlfbmFtZSxcbiAgICAgICAgICBcImlkXCI6IHRoaXMuc2VsZWN0ZWRfaWQsXG4gICAgICAgICAgXCJwYWdlSWRcIjogdGhpcy5zZWxlY3RlZF9wYWdlX2lkLFxuICAgICAgICAgIFwic2VhcmNoRmlsdGVyXCI6IGZhbHNlLFxuICAgICAgICAgIFwiaXNTcnZUeXBlT3BlcmF0b3JcIjogZmFsc2UsXG4gICAgICAgICAgXCJvcGVyYXRpb25MZXZlbHNcIjogW10sXG4gICAgICAgICAgXCJmaXhPcGVyYXRpb25MZXZsZXNcIjogW10sXG4gICAgICAgICAgXCJhcGlfY29uZmlnXCI6IFtdXG5cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlcnZpY2UuY29uZmlndXJlS3BpQnJvd3NlckNvbmZpZyhvYmopLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcImtwaSBicm93c2VyIGNvbmZpZyBjcmVhdGVkXCIpXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3VibWl0TmV3S3BpKCk7XG5cbiAgICB9XG5cbiAgfVxuXG4gIGNyZWF0ZU5ld0twaVdpdGhUaWQoKSB7XG5cbiAgICBsZXQgYXV0b190aWQgPSB0aGlzLmF1dG9JbmNyZW1lbnQodGhpcy5zZWxlY3RlZF9rcGlfdGlkLCB0aGlzLmhlaXN0VmFsdWUpO1xuICAgIGxldCBvYmogPSB7XG4gICAgICBcIm5hbWVcIjogdGhpcy5zZWxlY3Rfa3BpX25hbWUsXG4gICAgICBcInRpZFwiOiBhdXRvX3RpZCxcbiAgICAgIFwiaXNCb29rbWFya2VkXCI6IGZhbHNlLFxuICAgICAgXCJpc0FjY2Vzc2libGVcIjogdGhpcy5rcGlfZXh0ZXJuYWwsXG4gICAgICBcImxhc3RBY2Nlc3NUaW1lXCI6IFwiXCIsXG4gICAgICBcInRhZ190eXBlXCI6IHRoaXMuc2VsZWN0X3RhZ190eXBlLFxuICAgICAgXCJpZFwiOiB0aGlzLnNlbGVjdGVkX2lkLFxuICAgICAgXCJwYWdlSWRcIjogdGhpcy5zZWxlY3RlZF9wYWdlX2lkLFxuICAgICAgXCJkZXNjXCI6IHRoaXMuc2VsZWN0ZWRfZGVzYyxcbiAgICAgIFwiaXNWaXNpYmxlXCI6IHRoaXMua3BpX3Zpc2liaWxpdHksXG4gICAgICBcIm5vZGVzXCI6IFtdLFxuICAgICAgXCJjb25maWdcIjoge31cbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWxlY3RfdGFnX3R5cGUgPT0gJ3BhcmVudCcpIHtcbiAgICAgIGxldCBvYmogPSB7XG4gICAgICAgIFwibmFtZVwiOiB0aGlzLnNlbGVjdF9rcGlfbmFtZSxcbiAgICAgICAgXCJ0aWRcIjogYXV0b190aWRcbiAgICAgIH1cbiAgICAgIHRoaXMua2VpUGFyZW50RGF0YVNvdXJjZS5wdXNoKG9iailcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0X3RhZ190eXBlID09ICdjaGlsZCcpIHtcbiAgICAgIGxldCBvYmogPSB7XG4gICAgICAgIFwibmFtZVwiOiB0aGlzLnNlbGVjdF9rcGlfbmFtZSxcbiAgICAgICAgXCJpZFwiOiB0aGlzLnNlbGVjdGVkX2lkLFxuICAgICAgICBcInBhZ2VJZFwiOiB0aGlzLnNlbGVjdGVkX3BhZ2VfaWQsXG4gICAgICAgIFwic2VhcmNoRmlsdGVyXCI6IGZhbHNlLFxuICAgICAgICBcImlzU3J2VHlwZU9wZXJhdG9yXCI6IGZhbHNlLFxuICAgICAgICBcIm9wZXJhdGlvbkxldmVsc1wiOiBbXSxcbiAgICAgICAgXCJmaXhPcGVyYXRpb25MZXZsZXNcIjogW10sXG4gICAgICAgIFwiYXBpX2NvbmZpZ1wiOiBbXVxuXG4gICAgICB9XG4gICAgICB0aGlzLnNlcnZpY2UuY29uZmlndXJlS3BpQnJvd3NlckNvbmZpZyhvYmopLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJrcGkgYnJvd3NlciBjb25maWcgY3JlYXRlZFwiKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzLnNldEtwaWJ5VGlkKHRoaXMua3BpRGF0YSwgdGhpcy5zZWxlY3RlZF9rcGlfdGlkLCBvYmopXG4gICAgdGhpcy5zdWJtaXROZXdLcGkoKTtcbiAgfVxuXG4gIGdldFJlc2V0ZUtwaSgpIHtcbiAgICB0aGlzLnNlbGVjdF9rcGlfbmFtZSA9ICcnO1xuICAgIHRoaXMuc2VsZWN0X3RhZ190eXBlID0gJyc7XG4gICAgdGhpcy5zZWxlY3RlZF9pZCA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRfcGFnZV9pZCA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRfa3BpX3RpZCA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRfZGVzYyA9ICcnO1xuICAgIHRoaXMucGFyYW50ZV9rcGlfbmFtZSA9ICcnO1xuICAgIHRoaXMuZWRpdGFibGVfa3BpX25hbWUgPSAnJztcbiAgICB0aGlzLmVkaXRhYmxlX3RhZ190eXBlID0gJyc7XG4gICAgdGhpcy5lZGl0YWJsZV9pZCA9ICcnO1xuICAgIHRoaXMuZWRpdGFibGVfcGFnZV9pZCA9ICcnO1xuICAgIHRoaXMuZWRpdGFibGVfa3BpX3RpZCA9ICcnO1xuICAgIHRoaXMuZWRpdGFibGVfZGVzYyA9ICcnO1xuICAgIHRoaXMuZWRpdGFibGVfaW5mbyA9ICcnO1xuICAgIHRoaXMucGFyYW50ZV9rcGlfbmFtZSA9ICcnO1xuICAgIHRoaXMua3BpX2V4dGVybmFsID0gZmFsc2U7XG4gICAgdGhpcy5rcGlfdmlzaWJpbGl0eSA9IGZhbHNlO1xuICAgIHRoaXMuaXNDb21wb25lbnRVcGRhdGEgPSBmYWxzZTtcbiAgfVxuXG4gIGdldERlbGV0S3BpKHRpZCkge1xuICAgIGNvbnNvbGUubG9nKHRoaXMuc2VsZWN0ZWRfcF9rcGkpXG5cbiAgfVxuXG4gIGFkZFRhZ3R5cGVWYWx1ZShlKSB7XG4gICAgdGhpcy5zZWxlY3RfdGFnX3R5cGUgPSBlLnZhbHVlO1xuICB9XG5cbiAgZ2V0S3BpSXRlbVZhbHVlKGUpIHtcbiAgICBjb25zdCBrcGlfZGF0YSA9IHRoaXMua2VpUGFyZW50RGF0YVNvdXJjZS5maW5kKChpdGVtOiBhbnkpID0+IGl0ZW0udGlkID09PSBlLnZhbHVlKTtcbiAgICB0aGlzLnNlbGVjdGVkX2twaV90aWQgPSBrcGlfZGF0YS50aWQ7XG4gIH1cblxuICBhdXRvSW5jcmVtZW50KHN0cmluZzE6IHN0cmluZywgc3RyaW5nMjogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB7XG5cbiAgICBpZiAoc3RyaW5nMiA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgbnVtYmVyUGFydCA9IHN0cmluZzEgKyAnLjEnO1xuICAgICAgcmV0dXJuIG51bWJlclBhcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gc3RyaW5nMi5zcGxpdCgnLicpO1xuICAgICAgbGV0IGxhc3RQYXJ0ID0gcGFyc2VJbnQocGFydHNbcGFydHMubGVuZ3RoIC0gMV0sIDEwKTtcbiAgICAgIGxldCBuZXdfbnVtYmVyID0gbGFzdFBhcnQrKztcbiAgICAgIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID0gbGFzdFBhcnQudG9TdHJpbmcoKTtcbiAgICAgIHJldHVybiBwYXJ0cy5qb2luKFwiLlwiKTtcbiAgICB9XG4gIH1cblxuICBzZXRLcGlieVRpZChkYXRhLCB0aWQsIG5ld0twaU9iaikge1xuICAgIGRhdGEuZm9yRWFjaChyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5ub2RlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChyZXN1bHQudGlkID09IHRpZCkge1xuXG4gICAgICAgICAgcmVzdWx0Lm5vZGVzLnB1c2gobmV3S3BpT2JqKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0S3BpYnlUaWQocmVzdWx0Lm5vZGVzLCB0aWQsIG5ld0twaU9iaik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgZ2V0SGVpc3RJZChkYXRhOiBhbnksIHRpZDogc3RyaW5nKTogYW55IHtcblxuICAgIGRhdGEuZm9yRWFjaCgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXN1bHQudGlkID09PSB0aWQpIHtcbiAgICAgICAgaWYgKHJlc3VsdC5ub2Rlcy5sZW5ndGggPiAwKSB7XG5cbiAgICAgICAgICB0aGlzLmhlaXN0VmFsdWUgPSB0aGlzLmdldEhpZ2hlc3RUaWQocmVzdWx0Lm5vZGVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmhlaXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5ub2RlcyAhPT0gdW5kZWZpbmVkICYmIHJlc3VsdC5ub2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuZ2V0SGVpc3RJZChyZXN1bHQubm9kZXMsIHRpZCk7XG4gICAgICB9XG4gICAgfSk7XG5cblxuICB9XG5cbiAgZ2V0SGlnaGVzdFRpZChkYXRhKSB7XG4gICAgY29uc3QgaGlnaGVzdFRpZCA9IGRhdGEucmVkdWNlKChtYXhUaWQsIGN1cnJlbnRJdGVtKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50VGlkUGFydHMgPSBjdXJyZW50SXRlbS50aWQuc3BsaXQoJy4nKS5tYXAocGFydCA9PiBwYXJzZUludChwYXJ0LCAxMCkpO1xuICAgICAgY29uc3QgbWF4VGlkUGFydHMgPSBtYXhUaWQuc3BsaXQoJy4nKS5tYXAocGFydCA9PiBwYXJzZUludChwYXJ0LCAxMCkpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnRUaWRQYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY3VycmVudFRpZFBhcnRzW2ldID4gbWF4VGlkUGFydHNbaV0pIHtcbiAgICAgICAgICByZXR1cm4gY3VycmVudEl0ZW0udGlkO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRUaWRQYXJ0c1tpXSA8IG1heFRpZFBhcnRzW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIG1heFRpZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG1heFRpZDtcbiAgICB9LCBkYXRhWzBdLnRpZCk7XG4gICAgcmV0dXJuIGhpZ2hlc3RUaWQ7XG4gIH1cblxuICBhZGROZXdLcGkoKSB7XG4gICAgdGhpcy5pc05ld0twaUFkZGVkID0gdHJ1ZTtcbiAgICB0aGlzLmlzRWRpdEtwaUFkZGVkID0gZmFsc2U7XG4gIH1cbiAgY2FuY2VsVXBkYXRlKCkge1xuICAgIHRoaXMuaXNFZGl0S3BpQWRkZWQgPSBmYWxzZTtcbiAgfVxuXG4gIGdldEVkaXRhYmxlS3BpKGRhdGE6IGFueSkge1xuICAgIHRoaXMuaXNDb21wb25lbnRVcGRhdGEgPSBmYWxzZTtcbiAgICB0aGlzLmlzRWRpdEtwaUFkZGVkID0gdHJ1ZTtcbiAgICB0aGlzLmlzTmV3S3BpQWRkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmlzRnJvbUVkaXRhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLmVkaXRhYmxlX2Rlc2MgPSBkYXRhLmRlc2M7XG4gICAgdGhpcy5lZGl0YWJsZV9pbmZvID0gKGRhdGEua3BpSW5mbykgPyBkYXRhLmtwaUluZm8gOiBcIlwiO1xuICAgIHRoaXMuZWRpdGFibGVfa3BpX25hbWUgPSBkYXRhLm5hbWU7XG4gICAgdGhpcy5lZGl0YWJsZV90YWdfdHlwZSA9IGRhdGEudGFnX3R5cGU7XG4gICAgdGhpcy5lZGl0YWJsZV9rcGlfdGlkID0gZGF0YS50aWQ7XG4gICAgdGhpcy5lZGl0YWJsZV9pZCA9IGRhdGEuaWQ7XG4gICAgdGhpcy5lZGl0YWJsZV9wYWdlX2lkID0gZGF0YS5wYWdlSWQ7XG4gICAgdGhpcy5rcGlfdmlzaWJpbGl0eSA9IGRhdGEuaXNWaXNpYmxlO1xuICAgIHRoaXMua3BpX2V4dGVybmFsID0gZGF0YS5pc0FjY2Vzc2libGU7XG4gICAgdGhpcy5wYXJhbnRlX2twaV9uYW1lID0gdGhpcy5nZXRLcGlQYXJyZW50TmFtZShkYXRhLnRpZClcblxuXG4gIH1cblxuICBnZXRLcGlQYXJyZW50TmFtZShpbnB1dCkge1xuICAgIGNvbnN0IGxhc3RJbmRleCA9IGlucHV0Lmxhc3RJbmRleE9mKCcuJyk7XG4gICAgaWYgKGxhc3RJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG4gICAgcmV0dXJuIGlucHV0LnN1YnN0cmluZygwLCBsYXN0SW5kZXgpO1xuICB9XG5cbiAgZ2V0VXBkYXRlS3BpKCkge1xuXG4gICAgaWYgKCF0aGlzLmlzQ29tcG9uZW50VXBkYXRhKSB7XG4gICAgICB0aGlzLmdldFVwZGF0ZUtwaU5hbWUodGhpcy5rcGlEYXRhLCB0aGlzLmVkaXRhYmxlX2twaV90aWQpXG4gICAgfVxuXG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc3VibWl0TmV3S3BpKCk7XG4gICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKCdLUEkgVXBkYXRlZCBTdWNjZXNzZnVsbHknKVxuICAgICAgdGhpcy5yZXNldGVVcGRhdGVLcGlGb3JtKCk7XG4gICAgICB0aGlzLmlzRWRpdEtwaUFkZGVkID0gZmFsc2U7XG4gICAgfSwgNTAwKTtcblxuICB9XG5cbiAgZ2V0RGVsZXRlS3BpKCkge1xuICAgIHRoaXMuZ2V0RGVsZXRlS3BpTmFtZSh0aGlzLmtwaURhdGEsIHRoaXMuZWRpdGFibGVfa3BpX3RpZClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc3VibWl0TmV3S3BpKCk7XG4gICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKCdLUEkgRGVsZXRlZCBTdWNjZXNzZnVsbHknKVxuICAgICAgdGhpcy5yZXNldGVVcGRhdGVLcGlGb3JtKCk7XG4gICAgICB0aGlzLmlzRWRpdEtwaUFkZGVkID0gZmFsc2U7XG4gICAgfSwgNTAwKTtcbiAgfVxuXG5cbiAgZ2V0VXBkYXRlS3BpTmFtZShkYXRhOiBhbnksIHRpZDogc3RyaW5nKTogYW55IHtcblxuICAgIGRhdGEuZm9yRWFjaCgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXN1bHQudGlkID09PSB0aWQpIHtcbiAgICAgICAgcmVzdWx0LmRlc2MgPSB0aGlzLmVkaXRhYmxlX2Rlc2M7XG4gICAgICAgIHJlc3VsdC5rcGlJbmZvID0gdGhpcy5lZGl0YWJsZV9pbmZvO1xuICAgICAgICByZXN1bHQubmFtZSA9IHRoaXMuZWRpdGFibGVfa3BpX25hbWU7XG4gICAgICAgIHJlc3VsdC5pZCA9IHRoaXMuZWRpdGFibGVfaWQ7XG4gICAgICAgIHJlc3VsdC5wYWdlSWQgPSB0aGlzLmVkaXRhYmxlX3BhZ2VfaWQ7XG4gICAgICAgIHJlc3VsdC50YWdfdHlwZSA9IHRoaXMuZWRpdGFibGVfdGFnX3R5cGU7XG4gICAgICAgIHJlc3VsdC5pc1Zpc2libGUgPSB0aGlzLmtwaV92aXNpYmlsaXR5O1xuICAgICAgICByZXN1bHQuaXNBY2Nlc3NpYmxlID0gdGhpcy5rcGlfZXh0ZXJuYWw7XG4gICAgICAgIHJlc3VsdC50aWQgPSB0aGlzLmVkaXRhYmxlX2twaV90aWQ7XG5cbiAgICAgICAgLy8gdGhpcy5zZXJ2aWNlLmNvbmZpZ3VyZUtwaUJyb3dzZXJDb25maWcocmVzdWx0LmNvbmZpZykuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAvLyAgIGNvbnNvbGUubG9nKFwia3BpIGJyb3dzZXIgY29uZmlnIGNyZWF0ZWRcIilcbiAgICAgICAgLy8gfSlcblxuICAgICAgfSBlbHNlIGlmIChyZXN1bHQubm9kZXMgIT09IHVuZGVmaW5lZCAmJiByZXN1bHQubm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmdldFVwZGF0ZUtwaU5hbWUocmVzdWx0Lm5vZGVzLCB0aWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIH1cblxuICBnZXREZWxldGVLcGlOYW1lKGRhdGE6IGFueSwgdGlkOiBzdHJpbmcpOiBhbnkge1xuICAgIGZvciAobGV0IGkgPSBkYXRhLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBkYXRhW2ldO1xuICAgICAgaWYgKHJlc3VsdC50aWQgPT09IHRpZCkge1xuICAgICAgICBkYXRhLnNwbGljZShpLCAxKTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0Lm5vZGVzICE9PSB1bmRlZmluZWQgJiYgcmVzdWx0Lm5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5nZXREZWxldGVLcGlOYW1lKHJlc3VsdC5ub2RlcywgdGlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXNldGVVcGRhdGVLcGlGb3JtKCkge1xuICAgIHRoaXMuZWRpdGFibGVfZGVzYyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVkaXRhYmxlX2luZm8gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lZGl0YWJsZV9rcGlfbmFtZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVkaXRhYmxlX3RhZ190eXBlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZWRpdGFibGVfa3BpX3RpZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVkaXRhYmxlX2lkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZWRpdGFibGVfcGFnZV9pZCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN1Ym1pdE5ld0twaSgpIHtcbiAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IHRydWU7XG4gICAgdGhpcy5pc0VkaXRLcGlBZGRlZCA9IGZhbHNlO1xuICAgIGxldCBvYmogPSB7IGtwaUNvbmZpZ0RhdGE6IHRoaXMua3BpRGF0YSB9XG4gICAgY29uc29sZS5sb2cob2JqKTtcbiAgICB0aGlzLmlzQ29tcG9uZW50VXBkYXRhID0gZmFsc2U7XG4gICAgdGhpcy5zZXJ2aWNlLmdldENyZWF0ZUtwaShvYmopLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgIHRoaXMuZ2V0QWxsS3BpRGF0YSgpO1xuICAgICAgdGhpcy5nZXRSZXNldGVLcGkoKTtcbiAgICB9KVxuICB9XG5cbiAgZ2V0TmV3UGFycmVudEtwaUl0ZW1WYWx1ZShlKSB7XG4gICAgdGhpcy5pc0NvbXBvbmVudFVwZGF0YSA9IHRydWU7XG4gICAgY29uc3Qga3BpX2RhdGEgPSB0aGlzLmtlaVBhcmVudERhdGFTb3VyY2UuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLnRpZCA9PT0gZS52YWx1ZSk7XG4gICAgdGhpcy5nZXRIZWlzdElkKHRoaXMua3BpRGF0YSwga3BpX2RhdGEudGlkKTtcbiAgICBsZXQgYXV0b190aWQgPSB0aGlzLmF1dG9JbmNyZW1lbnQoa3BpX2RhdGEudGlkLCB0aGlzLmhlaXN0VmFsdWUpO1xuXG4gICAgbGV0IG9iaiA9IHtcbiAgICAgIFwibmFtZVwiOiB0aGlzLmVkaXRhYmxlX2twaV9uYW1lLFxuICAgICAgXCJ0aWRcIjogYXV0b190aWQsXG4gICAgICBcImlzQm9va21hcmtlZFwiOiBmYWxzZSxcbiAgICAgIFwiaXNBY2Nlc3NpYmxlXCI6IHRoaXMua3BpX2V4dGVybmFsLFxuICAgICAgXCJsYXN0QWNjZXNzVGltZVwiOiBcIlwiLFxuICAgICAgXCJ0YWdfdHlwZVwiOiB0aGlzLmVkaXRhYmxlX3RhZ190eXBlLFxuICAgICAgXCJpZFwiOiB0aGlzLmVkaXRhYmxlX2lkLFxuICAgICAgXCJwYWdlSWRcIjogdGhpcy5lZGl0YWJsZV9wYWdlX2lkLFxuICAgICAgXCJkZXNjXCI6IHRoaXMuZWRpdGFibGVfZGVzYyxcbiAgICAgIFwia3BpSW5mb1wiOiB0aGlzLmVkaXRhYmxlX2luZm8sXG4gICAgICBcImlzVmlzaWJsZVwiOiB0aGlzLmtwaV92aXNpYmlsaXR5LFxuICAgICAgXCJub2Rlc1wiOiBbXSxcbiAgICAgIFwiY29uZmlnXCI6IHt9XG4gICAgfVxuICAgIHRoaXMuZ2V0RGVsZXRlS3BpTmFtZSh0aGlzLmtwaURhdGEsIHRoaXMuZWRpdGFibGVfa3BpX3RpZClcbiAgICB0aGlzLnNldEtwaWJ5VGlkKHRoaXMua3BpRGF0YSwga3BpX2RhdGEudGlkLCBvYmopXG4gICAgdGhpcy5lZGl0YWJsZV9rcGlfdGlkID0ga3BpX2RhdGEudGlkO1xuICAgIC8vIHRoaXMuc3VibWl0TmV3S3BpKCk7XG4gICAgLy8gdGhpcy5lZGl0YWJsZV9rcGlfdGlkID0ga3BpX2RhdGEudGlkO1xuICAgIC8vIHRoaXMuZ2V0VXBkYXRlS3BpTmFtZSh0aGlzLmtwaURhdGEsIGUudmFsdWUpXG4gIH1cblxuICByb3V0ZVRvS3BpQ29uZmlnKCkge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnYXBwcy9jb250cm9sUGFuZWwva3BpQ29udHJvbGxlci9rcGlDb25maWcnXSlcbiAgfVxuXG59XG4iLCI8YXBwLWxvYWRpbmcgKm5nSWY9XCJsb2FkaW5nTW9kYWxcIj48L2FwcC1sb2FkaW5nPlxuPGRpdiBjbGFzcz1cInAtNCBmbGV4IGZsZXgtcm93IHctZnVsbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJteC0yIGJnLXdoaXRlIGRhcms6YmctdHJhbnNwYXJlbnQgYm9yZGVyLXJcIj5cblxuICAgICAgICA8dHJlZXZpZXcgY2xhc3M9XCJkYXJrIGJnLWdyYXktOTAwIGRhcms6YmctdHJhbnNwYXJlbnRcIiBbbmFtZV09XCInbWFpbk5hdmlnYXRpb24nXCIgW3JvdXRlS2V5XT1cIidyYUtwaSdcIlxuICAgICAgICAgICAgW25hdmlnYXRpb25dPVwia3BpRGF0YVwiIFtpc1NlYXJjaEJveF09XCJmYWxzZVwiIFtpc0VkaXRJY29uXT1cInRydWVcIiAoZWRpdGFibGVLcGlEYXRhKT1cImdldEVkaXRhYmxlS3BpKCRldmVudClcIj5cbiAgICAgICAgPC90cmVldmlldz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibXgtMiB3LWZ1bGxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgaXRlbS1jZW50ZXIganVzdGlmeS1jZW50ZXIgbXktOFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fd2FybmluZ19tZH19XCIgKGNsaWNrKT1cImFkZE5ld0twaSgpXCI+QWRkIE5ldyBLUEk8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3ByaW1hcnlfbWR9fVwiIChjbGljayk9XCJyb3V0ZVRvS3BpQ29uZmlnKClcIlxuICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJyb3V0ZXItbGluay1hY3RpdmVcIj5Db25maWd1cmUgS1BJPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNOZXdLcGlBZGRlZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIG10LTJcIj5OYW1lPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwic2VsZWN0X2twaV9uYW1lXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIG10LTJcIj4gVGFnIFR5cGU8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbZGF0YVNvdXJjZV09XCJ0YWdUeXBlXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RfdGFnX3R5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJhZGRUYWd0eXBlVmFsdWUoJGV2ZW50KVwiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xICB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+SUQ8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJzZWxlY3RlZF9pZFwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgbXQtMlwiPlBhZ2UgSUQ8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkX3BhZ2VfaWRcIj48L2R4LXRleHQtYm94PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtpdGVtc109XCJ0ZW1wbGF0ZURhdGFTb3VyY2VcIiB2YWx1ZUV4cHI9XCJwYWdlSWRcIiBkaXNwbGF5RXhwcj1cInBhZ2VOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkX3BhZ2VfaWRcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgbXQtMlwiPkRlc2NyaXB0aW9uPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4LWh0bWwtZWRpdG9yIGhlaWdodD1cIidhdXRvJ1wiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRfZGVzY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8tdG9vbGJhciBbbXVsdGlsaW5lXT1cImZhbHNlXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY2NlcHRlZFZhbHVlc109XCJbJzhwdCcsICcxMHB0JywgJzEycHQnLCAnMTRwdCcsICcxOHB0JywgJzI0cHQnLCAnMzZwdCddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInsgaW5wdXRBdHRyOiB7ICdhcmlhLWxhYmVsJzogJ0ZvbnQgc2l6ZScgfSB9XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJmb250XCIgW2FjY2VwdGVkVmFsdWVzXT1cIltcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ291cmllciBOZXcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0dlb3JnaWEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ltcGFjdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTHVjaWRhIENvbnNvbGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RhaG9tYScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGltZXMgTmV3IFJvbWFuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWZXJkYW5hJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cIiBbb3B0aW9uc109XCJ7IGlucHV0QXR0cjogeyAnYXJpYS1sYWJlbCc6ICdGb250IGZhbWlseScgfSB9XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImJvbGRcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cIml0YWxpY1wiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwidW5kZXJsaW5lXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImFsaWduTGVmdFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25DZW50ZXJcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImFsaWduUmlnaHRcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImFsaWduSnVzdGlmeVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJvcmRlcmVkTGlzdFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYnVsbGV0TGlzdFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJoZWFkZXJcIiBbYWNjZXB0ZWRWYWx1ZXNdPVwiW2ZhbHNlLCAxLCAyLCAzLCA0LCA1XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJ7IGlucHV0QXR0cjogeyAnYXJpYS1sYWJlbCc6ICdIZWFkZXInIH0gfVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJjb2xvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYmFja2dyb3VuZFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJsaW5rXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJpbWFnZVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJjbGVhclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiY29kZUJsb2NrXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4by10b29sYmFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8tbWVkaWEtcmVzaXppbmcgW2VuYWJsZWRdPVwidHJ1ZVwiPiA8L2R4by1tZWRpYS1yZXNpemluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhvLWltYWdlLXVwbG9hZCBbdGFic109XCJbJ2ZpbGUnLCAndXJsJ11cIiBmaWxlVXBsb2FkTW9kZT1cImJhc2U2NFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhvLWltYWdlLXVwbG9hZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZHgtaHRtbC1lZGl0b3I+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIG10LTJcIj4gUGFyZW50IENvbXBvbmVudCA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbZGF0YVNvdXJjZV09XCJrZWlQYXJlbnREYXRhU291cmNlXCIgZGlzcGxheUV4cHI9XCJuYW1lXCIgdmFsdWVFeHByPVwidGlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwiZ2V0S3BpSXRlbVZhbHVlKCRldmVudClcIiBbdmFsdWVdPVwicGFyYW50ZV9rcGlfbmFtZVwiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xICB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+VElEPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwic2VsZWN0ZWRfa3BpX3RpZFwiIFtyZWFkT25seV09XCJ0cnVlXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIG10LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtY2hlY2stYm94IFsobmdNb2RlbCldPVwia3BpX3Zpc2liaWxpdHlcIiB0ZXh0PVwiVmlzaWJpbGl0eVwiPjwvZHgtY2hlY2stYm94PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtY2hlY2stYm94IFsobmdNb2RlbCldPVwia3BpX2V4dGVybmFsXCIgdGV4dD1cIkV4dGVybmFsIEtQSVwiPjwvZHgtY2hlY2stYm94PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIG10LTJcIj5LUEkgSW5mbzwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1odG1sLWVkaXRvciBoZWlnaHQ9XCInYXV0bydcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkX2luZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhvLXRvb2xiYXIgW211bHRpbGluZV09XCJmYWxzZVwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWNjZXB0ZWRWYWx1ZXNdPVwiWyc4cHQnLCAnMTBwdCcsICcxMnB0JywgJzE0cHQnLCAnMThwdCcsICcyNHB0JywgJzM2cHQnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJ7IGlucHV0QXR0cjogeyAnYXJpYS1sYWJlbCc6ICdGb250IHNpemUnIH0gfVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiZm9udFwiIFthY2NlcHRlZFZhbHVlc109XCJbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FyaWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ291cmllciBOZXcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdHZW9yZ2lhJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSW1wYWN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTHVjaWRhIENvbnNvbGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUYWhvbWEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaW1lcyBOZXcgUm9tYW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWZXJkYW5hJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInsgaW5wdXRBdHRyOiB7ICdhcmlhLWxhYmVsJzogJ0ZvbnQgZmFtaWx5JyB9IH1cIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYm9sZFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiaXRhbGljXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJ1bmRlcmxpbmVcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25MZWZ0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJhbGlnbkNlbnRlclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25SaWdodFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25KdXN0aWZ5XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cIm9yZGVyZWRMaXN0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJidWxsZXRMaXN0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImhlYWRlclwiIFthY2NlcHRlZFZhbHVlc109XCJbZmFsc2UsIDEsIDIsIDMsIDQsIDVdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInsgaW5wdXRBdHRyOiB7ICdhcmlhLWxhYmVsJzogJ0hlYWRlcicgfSB9XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImNvbG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJiYWNrZ3JvdW5kXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImxpbmtcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImltYWdlXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImNsZWFyXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJjb2RlQmxvY2tcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhvLXRvb2xiYXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by1tZWRpYS1yZXNpemluZyBbZW5hYmxlZF09XCJ0cnVlXCI+IDwvZHhvLW1lZGlhLXJlc2l6aW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8taW1hZ2UtdXBsb2FkIFt0YWJzXT1cIlsnZmlsZScsICd1cmwnXVwiIGZpbGVVcGxvYWRNb2RlPVwiYmFzZTY0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keG8taW1hZ2UtdXBsb2FkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9keC1odG1sLWVkaXRvcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1hdXRvIG10LTUganVzdGlmeS1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fcHJpbWFyeV9tZH19XCIgKGNsaWNrKT1cIm1ha2VOZXdLcGkoKVwiPkNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fd2FybmluZ19tZH19XCIgKGNsaWNrKT1cImdldFJlc2V0ZUtwaSgpXCI+UmVzZXQ8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFZGl0S3BpQWRkZWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtYi0yXCI+TmFtZTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cImVkaXRhYmxlX2twaV9uYW1lXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xICB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+IFRhZyBUeXBlPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW2RhdGFTb3VyY2VdPVwidGFnVHlwZVwiIFsobmdNb2RlbCldPVwiZWRpdGFibGVfdGFnX3R5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJhZGRUYWd0eXBlVmFsdWUoJGV2ZW50KVwiIFtyZWFkT25seV09XCJpc0Zyb21FZGl0YWJsZVwiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xICB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+SUQ8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJlZGl0YWJsZV9pZFwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgbXQtMlwiPlBhZ2UgSUQ8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cImVkaXRhYmxlX3BhZ2VfaWRcIj48L2R4LXRleHQtYm94PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtpdGVtc109XCJ0ZW1wbGF0ZURhdGFTb3VyY2VcIiB2YWx1ZUV4cHI9XCJwYWdlSWRcIiBkaXNwbGF5RXhwcj1cInBhZ2VOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRhYmxlX3BhZ2VfaWRcIj48L2R4LXNlbGVjdC1ib3g+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xICB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+RGVzY3JpcHRpb248L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtaHRtbC1lZGl0b3IgaGVpZ2h0PVwiJ2F1dG8nXCIgWyhuZ01vZGVsKV09XCJlZGl0YWJsZV9kZXNjXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by10b29sYmFyIFttdWx0aWxpbmVdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInVuZG9cIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInJlZG9cIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWNjZXB0ZWRWYWx1ZXNdPVwiWyc4cHQnLCAnMTBwdCcsICcxMnB0JywgJzE0cHQnLCAnMThwdCcsICcyNHB0JywgJzM2cHQnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJ7IGlucHV0QXR0cjogeyAnYXJpYS1sYWJlbCc6ICdGb250IHNpemUnIH0gfVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiZm9udFwiIFthY2NlcHRlZFZhbHVlc109XCJbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FyaWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ291cmllciBOZXcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdHZW9yZ2lhJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSW1wYWN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTHVjaWRhIENvbnNvbGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUYWhvbWEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaW1lcyBOZXcgUm9tYW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWZXJkYW5hJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInsgaW5wdXRBdHRyOiB7ICdhcmlhLWxhYmVsJzogJ0ZvbnQgZmFtaWx5JyB9IH1cIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYm9sZFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiaXRhbGljXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJ1bmRlcmxpbmVcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25MZWZ0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJhbGlnbkNlbnRlclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25SaWdodFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25KdXN0aWZ5XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cIm9yZGVyZWRMaXN0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJidWxsZXRMaXN0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImhlYWRlclwiIFthY2NlcHRlZFZhbHVlc109XCJbZmFsc2UsIDEsIDIsIDMsIDQsIDVdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInsgaW5wdXRBdHRyOiB7ICdhcmlhLWxhYmVsJzogJ0hlYWRlcicgfSB9XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImNvbG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJiYWNrZ3JvdW5kXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImxpbmtcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImltYWdlXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImNsZWFyXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJibG9ja3F1b3RlXCI+PC9keGktaXRlbT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhvLXRvb2xiYXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by1tZWRpYS1yZXNpemluZyBbZW5hYmxlZF09XCJ0cnVlXCI+IDwvZHhvLW1lZGlhLXJlc2l6aW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8taW1hZ2UtdXBsb2FkIFt0YWJzXT1cIlsnZmlsZScsICd1cmwnXVwiIGZpbGVVcGxvYWRNb2RlPVwiYmFzZTY0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keG8taW1hZ2UtdXBsb2FkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9keC1odG1sLWVkaXRvcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIG10LTJcIj4gUGFyZW50IENvbXBvbmVudCA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbc2VhcmNoRW5hYmxlZF09XCJ0cnVlXCIgW3JlYWRPbmx5XT1cImVkaXRhYmxlX3RhZ190eXBlID09ICdwYXJlbnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJrZWlQYXJlbnREYXRhU291cmNlXCIgZGlzcGxheUV4cHI9XCJuYW1lXCIgdmFsdWVFeHByPVwidGlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwiZ2V0TmV3UGFycmVudEtwaUl0ZW1WYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicGFyYW50ZV9rcGlfbmFtZVwiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIG10LTJcIj5USUQ8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJlZGl0YWJsZV9rcGlfdGlkXCIgW3JlYWRPbmx5XT1cImZhbHNlXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIG10LTNcIj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4LWNoZWNrLWJveCBbKG5nTW9kZWwpXT1cImtwaV92aXNpYmlsaXR5XCIgdGV4dD1cIlZpc2liaWxpdHlcIj48L2R4LWNoZWNrLWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1jaGVjay1ib3ggWyhuZ01vZGVsKV09XCJrcGlfZXh0ZXJuYWxcIiB0ZXh0PVwiRXh0ZXJuYWwgS1BJXCI+PC9keC1jaGVjay1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgbXQtMlwiPktQSSBJbmZvPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4LWh0bWwtZWRpdG9yIGhlaWdodD1cIidhdXRvJ1wiIFsobmdNb2RlbCldPVwiZWRpdGFibGVfaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8tdG9vbGJhciBbbXVsdGlsaW5lXT1cImZhbHNlXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY2NlcHRlZFZhbHVlc109XCJbJzhwdCcsICcxMHB0JywgJzEycHQnLCAnMTRwdCcsICcxOHB0JywgJzI0cHQnLCAnMzZwdCddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInsgaW5wdXRBdHRyOiB7ICdhcmlhLWxhYmVsJzogJ0ZvbnQgc2l6ZScgfSB9XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJmb250XCIgW2FjY2VwdGVkVmFsdWVzXT1cIltcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb3VyaWVyIE5ldycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0dlb3JnaWEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbXBhY3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMdWNpZGEgQ29uc29sZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RhaG9tYScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RpbWVzIE5ldyBSb21hbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZlcmRhbmEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwieyBpbnB1dEF0dHI6IHsgJ2FyaWEtbGFiZWwnOiAnRm9udCBmYW1pbHknIH0gfVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJib2xkXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJpdGFsaWNcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInVuZGVybGluZVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJhbGlnbkxlZnRcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImFsaWduQ2VudGVyXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJhbGlnblJpZ2h0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJhbGlnbkp1c3RpZnlcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwib3JkZXJlZExpc3RcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImJ1bGxldExpc3RcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiaGVhZGVyXCIgW2FjY2VwdGVkVmFsdWVzXT1cIltmYWxzZSwgMSwgMiwgMywgNCwgNV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwieyBpbnB1dEF0dHI6IHsgJ2FyaWEtbGFiZWwnOiAnSGVhZGVyJyB9IH1cIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiY29sb3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImJhY2tncm91bmRcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwibGlua1wiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiaW1hZ2VcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiY2xlYXJcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImNvZGVCbG9ja1wiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keG8tdG9vbGJhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhvLW1lZGlhLXJlc2l6aW5nIFtlbmFibGVkXT1cInRydWVcIj4gPC9keG8tbWVkaWEtcmVzaXppbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by1pbWFnZS11cGxvYWQgW3RhYnNdPVwiWydmaWxlJywgJ3VybCddXCIgZmlsZVVwbG9hZE1vZGU9XCJiYXNlNjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4by1pbWFnZS11cGxvYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2R4LWh0bWwtZWRpdG9yPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWF1dG8gbXQtMyBqdXN0aWZ5LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9wcmltYXJ5X21kfX1cIiAoY2xpY2spPVwiZ2V0VXBkYXRlS3BpKClcIj5VcGRhdGVcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX2Rhbmdlcl9tZH19XCIgKGNsaWNrKT1cImdldERlbGV0ZUtwaSgpXCI+RGVsZXRlXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX2Rhbmdlcl9tZH19XCIgKGNsaWNrKT1cImNhbmNlbFVwZGF0ZSgpXCI+Q2FuY2xlPC9idXR0b24+IC0tPlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cblxuXG5cbjwvZGl2PiJdfQ==
415
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWtwaS10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvdGVtcGxhdGUtbW9kdWxlL0twaUNyZWF0aW9uTW9kdWxlL2NyZWF0ZS1rcGktdHJlZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3RlbXBsYXRlLW1vZHVsZS9LcGlDcmVhdGlvbk1vZHVsZS9jcmVhdGUta3BpLXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQWFsRCxNQUFNLE9BQU8sc0JBQXNCO0lBdUNqQyxZQUNTLGFBQTRCLEVBQVUsV0FBd0IsRUFDN0QsT0FBeUIsRUFBVSxNQUFxQixFQUN4RCxNQUFjO1FBRmYsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUM3RCxZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDeEQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQXpDeEIsaUJBQVksR0FBWSxJQUFJLENBQUM7UUFDN0Isd0JBQW1CLEdBQVEsRUFBRSxDQUFDO1FBRTlCLFlBQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5QixvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUNyQixtQkFBYyxHQUFRLEVBQUUsQ0FBQztRQVd6QixXQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ1osWUFBTyxHQUFRLEVBQUUsQ0FBQztRQUVsQixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixtQkFBYyxHQUFZLEtBQUss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O1lBQ2QsVUFBVSxFQUFFLElBQUksQ0FBQyxtQkFBbUI7U0FDckMsQ0FBQTtRQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUtELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsMkNBQTJDLENBQUMsQ0FBQyxDQUFBO0lBQ3JFLENBQUM7O21IQWxlVSxzQkFBc0I7dUdBQXRCLHNCQUFzQixzRENibkMsMndyQkFxV007MkZEeFZPLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUFycmF5LCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcbmltcG9ydCB7IFJvdXRlciwgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENyZWF0ZUtwSVNlcnZpY2UgfSBmcm9tICcuL2NyZWF0ZUtwaS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL2NvbW1vbic7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNyZWF0ZS1rcGknLFxuICB0ZW1wbGF0ZVVybDogJy4vY3JlYXRlLWtwaS10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3JlYXRlLWtwaS10cmVlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ3JlYXRlS3BpVHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGxvYWRpbmdNb2RhbDogYm9vbGVhbiA9IHRydWU7XG4gIGtlaVBhcmVudERhdGFTb3VyY2U6IGFueSA9IFtdO1xuICBteUZvcm06IEZvcm1Hcm91cDtcbiAgdGFnVHlwZSA9IFtcInBhcmVudFwiLCBcImNoaWxkXCJdO1xuICBrcGlfY29uc3RydWN0b3IgPSBbXTtcbiAgc2VsZWN0ZWRfcF9rcGk6IGFueSA9IHt9O1xuXG4gIHNlbGVjdF9rcGlfbmFtZTogYW55O1xuICBzZWxlY3RfdGFnX3R5cGU6IGFueTtcbiAgc2VsZWN0ZWRfaWQ6IGFueTtcbiAgc2VsZWN0ZWRfcGFnZV9pZDogYW55O1xuICBzZWxlY3RlZF9uZXN0ZWRfbmFtZTogYW55O1xuICBzZWxlY3RlZF9rcGlfdGlkOiBhbnk7XG4gIHNlbGVjdGVkX2Rlc2M6IGFueTtcbiAgc2VsZWN0ZWRfaW5mbzogYW55O1xuXG4gIGhlaWdodCA9IDkwO1xuICBrcGlEYXRhOiBhbnkgPSBbXTtcbiAgaGVpc3RWYWx1ZTogYW55O1xuICBpc0Zyb21FZGl0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc05ld0twaUFkZGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzRWRpdEtwaUFkZGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZWRpdGFibGVfZGVzYyA9IFwiXCI7XG4gIGVkaXRhYmxlX2luZm8gPSBcIlwiO1xuICBlZGl0YWJsZV9pZDtcbiAgZWRpdGFibGVfcGFnZV9pZDtcbiAgZWRpdGFibGVfdGFnX3R5cGU7XG4gIGVkaXRhYmxlX2twaV9uYW1lO1xuICBlZGl0YWJsZV9rcGlfdGlkO1xuICBrcGlfdmlzaWJpbGl0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBrcGlfZXh0ZXJuYWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcGFyYW50ZV9rcGlfbmFtZTogYW55O1xuICBpc0NvbXBvbmVudFVwZGF0YTogYm9vbGVhbiA9IGZhbHNlO1xuICB0ZW1wbGF0ZURhdGFTb3VyY2U6IGFueTtcbiAgLy8ga3BpRGF0YUpzb246YW55O1xuICB1c2VyT3B0aW9uQ29udGFpbmVyOiBhbnkgPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSwgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBDcmVhdGVLcElTZXJ2aWNlLCBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyKSB7XG5cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gICAgdGhpcy5nZXRBbGxLcGlEYXRhKCk7XG4gICAgdGhpcy5nZXRBcHBQYWdlQ29uZmlncygpO1xuICB9XG5cbiAgZ2V0QXBwUGFnZUNvbmZpZ3MoKSB7XG4gICAgdGhpcy5zZXJ2aWNlLmdldEFwcFBhZ2VDb25maWdzKCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZURhdGFTb3VyY2UgPSBkYXRhO1xuICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ1BhZ2UgSUQnKVxuXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldEFsbEtwaURhdGEoKSB7XG4gICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcblxuICAgIHRoaXMua2VpUGFyZW50RGF0YVNvdXJjZSA9IFtdO1xuICAgIHRoaXMuc2VydmljZS5nZXRsaXN0S3BpQnJvd3NlcigpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICB0aGlzLmtwaURhdGEgPSBkYXRhXG4gICAgICB0aGlzLnByZXBhcmVQYXJlbnREYXRhU291cmNlKGRhdGEpXG5cbiAgICB9LCBlcnIgPT4ge1xuICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnS1BJIENvbmZpZycpXG4gICAgfSlcbiAgfVxuXG4gIHByZXBhcmVQYXJlbnREYXRhU291cmNlKGRhdGEpIHtcbiAgICBkYXRhLmZvckVhY2goKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LnRhZ190eXBlID09ICdwYXJlbnQnKSB7XG4gICAgICAgIGxldCBub2RlID0ge1xuICAgICAgICAgIFwibmFtZVwiOiByZXN1bHQubmFtZSxcbiAgICAgICAgICBcInRpZFwiOiByZXN1bHQudGlkXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5rZWlQYXJlbnREYXRhU291cmNlLnB1c2gobm9kZSk7XG4gICAgICAgIHRoaXMucHJlcGFyZVBhcmVudERhdGFTb3VyY2UocmVzdWx0Lm5vZGVzKTtcbiAgICAgIH1cbiAgICB9KTtcblxuXG5cbiAgfVxuXG5cbiAgbWFrZU5ld0twaSgpIHtcblxuICAgIGlmICh0aGlzLnNlbGVjdGVkX2twaV90aWQgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdGVkX2twaV90aWQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5nZXRIZWlzdElkKHRoaXMua3BpRGF0YSwgdGhpcy5zZWxlY3RlZF9rcGlfdGlkKTtcbiAgICAgIHRoaXMuY3JlYXRlTmV3S3BpV2l0aFRpZCgpO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIHRoaXMuaGVpc3RWYWx1ZSA9ICh0aGlzLmtwaURhdGEubGVuZ3RoICE9IDApID8gdGhpcy5nZXRIaWdoZXN0VGlkKHRoaXMua3BpRGF0YSkgOiAwO1xuICAgICAgbGV0IHZhbHVlID0gcGFyc2VJbnQodGhpcy5oZWlzdFZhbHVlKSArIDE7XG5cbiAgICAgIGxldCBvYmogPSB7XG4gICAgICAgIFwibmFtZVwiOiB0aGlzLnNlbGVjdF9rcGlfbmFtZSxcbiAgICAgICAgXCJ0aWRcIjogdmFsdWUudG9TdHJpbmcoKSxcbiAgICAgICAgXCJpc0Jvb2ttYXJrZWRcIjogZmFsc2UsXG4gICAgICAgIFwiaXNBY2Nlc3NpYmxlXCI6IHRoaXMua3BpX2V4dGVybmFsLFxuICAgICAgICBcImxhc3RBY2Nlc3NUaW1lXCI6IFwiXCIsXG4gICAgICAgIFwidGFnX3R5cGVcIjogdGhpcy5zZWxlY3RfdGFnX3R5cGUsXG4gICAgICAgIFwiaWRcIjogdGhpcy5zZWxlY3RlZF9pZCxcbiAgICAgICAgXCJwYWdlSWRcIjogdGhpcy5zZWxlY3RlZF9wYWdlX2lkLFxuICAgICAgICBcImRlc2NcIjogdGhpcy5zZWxlY3RlZF9kZXNjLFxuICAgICAgICBcImlzVmlzaWJsZVwiOiB0aGlzLmtwaV92aXNpYmlsaXR5LFxuICAgICAgICBcIm5vZGVzXCI6IFtdLFxuICAgICAgICBcImNvbmZpZ1wiOiB7fVxuICAgICAgfVxuICAgICAgdGhpcy5rcGlEYXRhLnB1c2gob2JqKVxuICAgICAgaWYgKHRoaXMuc2VsZWN0X3RhZ190eXBlID09ICdwYXJlbnQnKSB7XG4gICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgXCJuYW1lXCI6IHRoaXMuc2VsZWN0X2twaV9uYW1lLFxuICAgICAgICAgIFwidGlkXCI6IHZhbHVlLnRvU3RyaW5nKCksXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5rZWlQYXJlbnREYXRhU291cmNlLnB1c2gob2JqKVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0X3RhZ190eXBlID09ICdjaGlsZCcpIHtcbiAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICBcIm5hbWVcIjogdGhpcy5zZWxlY3Rfa3BpX25hbWUsXG4gICAgICAgICAgXCJpZFwiOiB0aGlzLnNlbGVjdGVkX2lkLFxuICAgICAgICAgIFwicGFnZUlkXCI6IHRoaXMuc2VsZWN0ZWRfcGFnZV9pZCxcbiAgICAgICAgICBcInNlYXJjaEZpbHRlclwiOiBmYWxzZSxcbiAgICAgICAgICBcImlzU3J2VHlwZU9wZXJhdG9yXCI6IGZhbHNlLFxuICAgICAgICAgIFwib3BlcmF0aW9uTGV2ZWxzXCI6IFtdLFxuICAgICAgICAgIFwiZml4T3BlcmF0aW9uTGV2bGVzXCI6IFtdLFxuICAgICAgICAgIFwiYXBpX2NvbmZpZ1wiOiBbXVxuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXJ2aWNlLmNvbmZpZ3VyZUtwaUJyb3dzZXJDb25maWcob2JqKS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJrcGkgYnJvd3NlciBjb25maWcgY3JlYXRlZFwiKVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICB0aGlzLnN1Ym1pdE5ld0twaSgpO1xuXG4gICAgfVxuXG4gIH1cblxuICBjcmVhdGVOZXdLcGlXaXRoVGlkKCkge1xuXG4gICAgbGV0IGF1dG9fdGlkID0gdGhpcy5hdXRvSW5jcmVtZW50KHRoaXMuc2VsZWN0ZWRfa3BpX3RpZCwgdGhpcy5oZWlzdFZhbHVlKTtcbiAgICBsZXQgb2JqID0ge1xuICAgICAgXCJuYW1lXCI6IHRoaXMuc2VsZWN0X2twaV9uYW1lLFxuICAgICAgXCJ0aWRcIjogYXV0b190aWQsXG4gICAgICBcImlzQm9va21hcmtlZFwiOiBmYWxzZSxcbiAgICAgIFwiaXNBY2Nlc3NpYmxlXCI6IHRoaXMua3BpX2V4dGVybmFsLFxuICAgICAgXCJsYXN0QWNjZXNzVGltZVwiOiBcIlwiLFxuICAgICAgXCJ0YWdfdHlwZVwiOiB0aGlzLnNlbGVjdF90YWdfdHlwZSxcbiAgICAgIFwiaWRcIjogdGhpcy5zZWxlY3RlZF9pZCxcbiAgICAgIFwicGFnZUlkXCI6IHRoaXMuc2VsZWN0ZWRfcGFnZV9pZCxcbiAgICAgIFwiZGVzY1wiOiB0aGlzLnNlbGVjdGVkX2Rlc2MsXG4gICAgICBcImlzVmlzaWJsZVwiOiB0aGlzLmtwaV92aXNpYmlsaXR5LFxuICAgICAgXCJub2Rlc1wiOiBbXSxcbiAgICAgIFwiY29uZmlnXCI6IHt9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0X3RhZ190eXBlID09ICdwYXJlbnQnKSB7XG4gICAgICBsZXQgb2JqID0ge1xuICAgICAgICBcIm5hbWVcIjogdGhpcy5zZWxlY3Rfa3BpX25hbWUsXG4gICAgICAgIFwidGlkXCI6IGF1dG9fdGlkXG4gICAgICB9XG4gICAgICB0aGlzLmtlaVBhcmVudERhdGFTb3VyY2UucHVzaChvYmopXG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdF90YWdfdHlwZSA9PSAnY2hpbGQnKSB7XG4gICAgICBsZXQgb2JqID0ge1xuICAgICAgICBcIm5hbWVcIjogdGhpcy5zZWxlY3Rfa3BpX25hbWUsXG4gICAgICAgIFwiaWRcIjogdGhpcy5zZWxlY3RlZF9pZCxcbiAgICAgICAgXCJwYWdlSWRcIjogdGhpcy5zZWxlY3RlZF9wYWdlX2lkLFxuICAgICAgICBcInNlYXJjaEZpbHRlclwiOiBmYWxzZSxcbiAgICAgICAgXCJpc1NydlR5cGVPcGVyYXRvclwiOiBmYWxzZSxcbiAgICAgICAgXCJvcGVyYXRpb25MZXZlbHNcIjogW10sXG4gICAgICAgIFwiZml4T3BlcmF0aW9uTGV2bGVzXCI6IFtdLFxuICAgICAgICBcImFwaV9jb25maWdcIjogW11cblxuICAgICAgfVxuICAgICAgdGhpcy5zZXJ2aWNlLmNvbmZpZ3VyZUtwaUJyb3dzZXJDb25maWcob2JqKS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwia3BpIGJyb3dzZXIgY29uZmlnIGNyZWF0ZWRcIilcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpcy5zZXRLcGlieVRpZCh0aGlzLmtwaURhdGEsIHRoaXMuc2VsZWN0ZWRfa3BpX3RpZCwgb2JqKVxuICAgIHRoaXMuc3VibWl0TmV3S3BpKCk7XG4gIH1cblxuICBnZXRSZXNldGVLcGkoKSB7XG4gICAgdGhpcy5zZWxlY3Rfa3BpX25hbWUgPSAnJztcbiAgICB0aGlzLnNlbGVjdF90YWdfdHlwZSA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRfaWQgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkX3BhZ2VfaWQgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkX2twaV90aWQgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkX2Rlc2MgPSAnJztcbiAgICB0aGlzLnBhcmFudGVfa3BpX25hbWUgPSAnJztcbiAgICB0aGlzLmVkaXRhYmxlX2twaV9uYW1lID0gJyc7XG4gICAgdGhpcy5lZGl0YWJsZV90YWdfdHlwZSA9ICcnO1xuICAgIHRoaXMuZWRpdGFibGVfaWQgPSAnJztcbiAgICB0aGlzLmVkaXRhYmxlX3BhZ2VfaWQgPSAnJztcbiAgICB0aGlzLmVkaXRhYmxlX2twaV90aWQgPSAnJztcbiAgICB0aGlzLmVkaXRhYmxlX2Rlc2MgPSAnJztcbiAgICB0aGlzLmVkaXRhYmxlX2luZm8gPSAnJztcbiAgICB0aGlzLnBhcmFudGVfa3BpX25hbWUgPSAnJztcbiAgICB0aGlzLmtwaV9leHRlcm5hbCA9IGZhbHNlO1xuICAgIHRoaXMua3BpX3Zpc2liaWxpdHkgPSBmYWxzZTtcbiAgICB0aGlzLmlzQ29tcG9uZW50VXBkYXRhID0gZmFsc2U7XG4gIH1cblxuICBnZXREZWxldEtwaSh0aWQpIHtcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkX3Bfa3BpKVxuXG4gIH1cblxuICBhZGRUYWd0eXBlVmFsdWUoZSkge1xuICAgIHRoaXMuc2VsZWN0X3RhZ190eXBlID0gZS52YWx1ZTtcbiAgfVxuXG4gIGdldEtwaUl0ZW1WYWx1ZShlKSB7XG4gICAgY29uc3Qga3BpX2RhdGEgPSB0aGlzLmtlaVBhcmVudERhdGFTb3VyY2UuZmluZCgoaXRlbTogYW55KSA9PiBpdGVtLnRpZCA9PT0gZS52YWx1ZSk7XG4gICAgdGhpcy5zZWxlY3RlZF9rcGlfdGlkID0ga3BpX2RhdGEudGlkO1xuICB9XG5cbiAgYXV0b0luY3JlbWVudChzdHJpbmcxOiBzdHJpbmcsIHN0cmluZzI6IHN0cmluZyB8IG51bGwpOiBzdHJpbmcge1xuXG4gICAgaWYgKHN0cmluZzIgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG51bWJlclBhcnQgPSBzdHJpbmcxICsgJy4xJztcbiAgICAgIHJldHVybiBudW1iZXJQYXJ0O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHN0cmluZzIuc3BsaXQoJy4nKTtcbiAgICAgIGxldCBsYXN0UGFydCA9IHBhcnNlSW50KHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdLCAxMCk7XG4gICAgICBsZXQgbmV3X251bWJlciA9IGxhc3RQYXJ0Kys7XG4gICAgICBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSA9IGxhc3RQYXJ0LnRvU3RyaW5nKCk7XG4gICAgICByZXR1cm4gcGFydHMuam9pbihcIi5cIik7XG4gICAgfVxuICB9XG5cbiAgc2V0S3BpYnlUaWQoZGF0YSwgdGlkLCBuZXdLcGlPYmopIHtcbiAgICBkYXRhLmZvckVhY2gocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQubm9kZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocmVzdWx0LnRpZCA9PSB0aWQpIHtcblxuICAgICAgICAgIHJlc3VsdC5ub2Rlcy5wdXNoKG5ld0twaU9iailcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldEtwaWJ5VGlkKHJlc3VsdC5ub2RlcywgdGlkLCBuZXdLcGlPYmopO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGdldEhlaXN0SWQoZGF0YTogYW55LCB0aWQ6IHN0cmluZyk6IGFueSB7XG5cbiAgICBkYXRhLmZvckVhY2goKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LnRpZCA9PT0gdGlkKSB7XG4gICAgICAgIGlmIChyZXN1bHQubm9kZXMubGVuZ3RoID4gMCkge1xuXG4gICAgICAgICAgdGhpcy5oZWlzdFZhbHVlID0gdGhpcy5nZXRIaWdoZXN0VGlkKHJlc3VsdC5ub2Rlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5oZWlzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChyZXN1bHQubm9kZXMgIT09IHVuZGVmaW5lZCAmJiByZXN1bHQubm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmdldEhlaXN0SWQocmVzdWx0Lm5vZGVzLCB0aWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG5cbiAgfVxuXG4gIGdldEhpZ2hlc3RUaWQoZGF0YSkge1xuICAgIGNvbnN0IGhpZ2hlc3RUaWQgPSBkYXRhLnJlZHVjZSgobWF4VGlkLCBjdXJyZW50SXRlbSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudFRpZFBhcnRzID0gY3VycmVudEl0ZW0udGlkLnNwbGl0KCcuJykubWFwKHBhcnQgPT4gcGFyc2VJbnQocGFydCwgMTApKTtcbiAgICAgIGNvbnN0IG1heFRpZFBhcnRzID0gbWF4VGlkLnNwbGl0KCcuJykubWFwKHBhcnQgPT4gcGFyc2VJbnQocGFydCwgMTApKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50VGlkUGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGN1cnJlbnRUaWRQYXJ0c1tpXSA+IG1heFRpZFBhcnRzW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnRJdGVtLnRpZDtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50VGlkUGFydHNbaV0gPCBtYXhUaWRQYXJ0c1tpXSkge1xuICAgICAgICAgIHJldHVybiBtYXhUaWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBtYXhUaWQ7XG4gICAgfSwgZGF0YVswXS50aWQpO1xuICAgIHJldHVybiBoaWdoZXN0VGlkO1xuICB9XG5cbiAgYWRkTmV3S3BpKCkge1xuICAgIHRoaXMuaXNOZXdLcGlBZGRlZCA9IHRydWU7XG4gICAgdGhpcy5pc0VkaXRLcGlBZGRlZCA9IGZhbHNlO1xuICB9XG4gIGNhbmNlbFVwZGF0ZSgpIHtcbiAgICB0aGlzLmlzRWRpdEtwaUFkZGVkID0gZmFsc2U7XG4gIH1cblxuICBnZXRFZGl0YWJsZUtwaShkYXRhOiBhbnkpIHtcbiAgICB0aGlzLmlzQ29tcG9uZW50VXBkYXRhID0gZmFsc2U7XG4gICAgdGhpcy5pc0VkaXRLcGlBZGRlZCA9IHRydWU7XG4gICAgdGhpcy5pc05ld0twaUFkZGVkID0gZmFsc2U7XG4gICAgdGhpcy5pc0Zyb21FZGl0YWJsZSA9IHRydWU7XG4gICAgdGhpcy5lZGl0YWJsZV9kZXNjID0gZGF0YS5kZXNjO1xuICAgIHRoaXMuZWRpdGFibGVfaW5mbyA9IChkYXRhLmtwaUluZm8pID8gZGF0YS5rcGlJbmZvIDogXCJcIjtcbiAgICB0aGlzLmVkaXRhYmxlX2twaV9uYW1lID0gZGF0YS5uYW1lO1xuICAgIHRoaXMuZWRpdGFibGVfdGFnX3R5cGUgPSBkYXRhLnRhZ190eXBlO1xuICAgIHRoaXMuZWRpdGFibGVfa3BpX3RpZCA9IGRhdGEudGlkO1xuICAgIHRoaXMuZWRpdGFibGVfaWQgPSBkYXRhLmlkO1xuICAgIHRoaXMuZWRpdGFibGVfcGFnZV9pZCA9IGRhdGEucGFnZUlkO1xuICAgIHRoaXMua3BpX3Zpc2liaWxpdHkgPSBkYXRhLmlzVmlzaWJsZTtcbiAgICB0aGlzLmtwaV9leHRlcm5hbCA9IGRhdGEuaXNBY2Nlc3NpYmxlO1xuICAgIHRoaXMucGFyYW50ZV9rcGlfbmFtZSA9IHRoaXMuZ2V0S3BpUGFycmVudE5hbWUoZGF0YS50aWQpXG5cblxuICB9XG5cbiAgZ2V0S3BpUGFycmVudE5hbWUoaW5wdXQpIHtcbiAgICBjb25zdCBsYXN0SW5kZXggPSBpbnB1dC5sYXN0SW5kZXhPZignLicpO1xuICAgIGlmIChsYXN0SW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuICAgIHJldHVybiBpbnB1dC5zdWJzdHJpbmcoMCwgbGFzdEluZGV4KTtcbiAgfVxuXG4gIGdldFVwZGF0ZUtwaSgpIHtcblxuICAgIGlmICghdGhpcy5pc0NvbXBvbmVudFVwZGF0YSkge1xuICAgICAgdGhpcy5nZXRVcGRhdGVLcGlOYW1lKHRoaXMua3BpRGF0YSwgdGhpcy5lZGl0YWJsZV9rcGlfdGlkKVxuICAgIH1cblxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnN1Ym1pdE5ld0twaSgpO1xuICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcygnS1BJIFVwZGF0ZWQgU3VjY2Vzc2Z1bGx5JylcbiAgICAgIHRoaXMucmVzZXRlVXBkYXRlS3BpRm9ybSgpO1xuICAgICAgdGhpcy5pc0VkaXRLcGlBZGRlZCA9IGZhbHNlO1xuICAgIH0sIDUwMCk7XG5cbiAgfVxuXG4gIGdldERlbGV0ZUtwaSgpIHtcbiAgICB0aGlzLmdldERlbGV0ZUtwaU5hbWUodGhpcy5rcGlEYXRhLCB0aGlzLmVkaXRhYmxlX2twaV90aWQpXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnN1Ym1pdE5ld0twaSgpO1xuICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcygnS1BJIERlbGV0ZWQgU3VjY2Vzc2Z1bGx5JylcbiAgICAgIHRoaXMucmVzZXRlVXBkYXRlS3BpRm9ybSgpO1xuICAgICAgdGhpcy5pc0VkaXRLcGlBZGRlZCA9IGZhbHNlO1xuICAgIH0sIDUwMCk7XG4gIH1cblxuXG4gIGdldFVwZGF0ZUtwaU5hbWUoZGF0YTogYW55LCB0aWQ6IHN0cmluZyk6IGFueSB7XG5cbiAgICBkYXRhLmZvckVhY2goKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LnRpZCA9PT0gdGlkKSB7XG4gICAgICAgIHJlc3VsdC5kZXNjID0gdGhpcy5lZGl0YWJsZV9kZXNjO1xuICAgICAgICByZXN1bHQua3BpSW5mbyA9IHRoaXMuZWRpdGFibGVfaW5mbztcbiAgICAgICAgcmVzdWx0Lm5hbWUgPSB0aGlzLmVkaXRhYmxlX2twaV9uYW1lO1xuICAgICAgICByZXN1bHQuaWQgPSB0aGlzLmVkaXRhYmxlX2lkO1xuICAgICAgICByZXN1bHQucGFnZUlkID0gdGhpcy5lZGl0YWJsZV9wYWdlX2lkO1xuICAgICAgICByZXN1bHQudGFnX3R5cGUgPSB0aGlzLmVkaXRhYmxlX3RhZ190eXBlO1xuICAgICAgICByZXN1bHQuaXNWaXNpYmxlID0gdGhpcy5rcGlfdmlzaWJpbGl0eTtcbiAgICAgICAgcmVzdWx0LmlzQWNjZXNzaWJsZSA9IHRoaXMua3BpX2V4dGVybmFsO1xuICAgICAgICByZXN1bHQudGlkID0gdGhpcy5lZGl0YWJsZV9rcGlfdGlkO1xuXG4gICAgICAgIC8vIHRoaXMuc2VydmljZS5jb25maWd1cmVLcGlCcm93c2VyQ29uZmlnKHJlc3VsdC5jb25maWcpLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgLy8gICBjb25zb2xlLmxvZyhcImtwaSBicm93c2VyIGNvbmZpZyBjcmVhdGVkXCIpXG4gICAgICAgIC8vIH0pXG5cbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0Lm5vZGVzICE9PSB1bmRlZmluZWQgJiYgcmVzdWx0Lm5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5nZXRVcGRhdGVLcGlOYW1lKHJlc3VsdC5ub2RlcywgdGlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICB9XG5cbiAgZ2V0RGVsZXRlS3BpTmFtZShkYXRhOiBhbnksIHRpZDogc3RyaW5nKTogYW55IHtcbiAgICBmb3IgKGxldCBpID0gZGF0YS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZGF0YVtpXTtcbiAgICAgIGlmIChyZXN1bHQudGlkID09PSB0aWQpIHtcbiAgICAgICAgZGF0YS5zcGxpY2UoaSwgMSk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5ub2RlcyAhPT0gdW5kZWZpbmVkICYmIHJlc3VsdC5ub2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuZ2V0RGVsZXRlS3BpTmFtZShyZXN1bHQubm9kZXMsIHRpZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVzZXRlVXBkYXRlS3BpRm9ybSgpIHtcbiAgICB0aGlzLmVkaXRhYmxlX2Rlc2MgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lZGl0YWJsZV9pbmZvID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZWRpdGFibGVfa3BpX25hbWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lZGl0YWJsZV90YWdfdHlwZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVkaXRhYmxlX2twaV90aWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lZGl0YWJsZV9pZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVkaXRhYmxlX3BhZ2VfaWQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBzdWJtaXROZXdLcGkoKSB7XG4gICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgIHRoaXMuaXNFZGl0S3BpQWRkZWQgPSBmYWxzZTtcbiAgICBsZXQgb2JqID0geyBrcGlDb25maWdEYXRhOiB0aGlzLmtwaURhdGEgfVxuICAgIGNvbnNvbGUubG9nKG9iaik7XG4gICAgdGhpcy5pc0NvbXBvbmVudFVwZGF0YSA9IGZhbHNlO1xuICAgIHRoaXMuc2VydmljZS5nZXRDcmVhdGVLcGkob2JqKS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICB0aGlzLmdldEFsbEtwaURhdGEoKTtcbiAgICAgIHRoaXMuZ2V0UmVzZXRlS3BpKCk7XG4gICAgfSlcbiAgfVxuXG4gIGdldE5ld1BhcnJlbnRLcGlJdGVtVmFsdWUoZSkge1xuICAgIHRoaXMuaXNDb21wb25lbnRVcGRhdGEgPSB0cnVlO1xuICAgIGNvbnN0IGtwaV9kYXRhID0gdGhpcy5rZWlQYXJlbnREYXRhU291cmNlLmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS50aWQgPT09IGUudmFsdWUpO1xuICAgIHRoaXMuZ2V0SGVpc3RJZCh0aGlzLmtwaURhdGEsIGtwaV9kYXRhLnRpZCk7XG4gICAgbGV0IGF1dG9fdGlkID0gdGhpcy5hdXRvSW5jcmVtZW50KGtwaV9kYXRhLnRpZCwgdGhpcy5oZWlzdFZhbHVlKTtcblxuICAgIGxldCBvYmogPSB7XG4gICAgICBcIm5hbWVcIjogdGhpcy5lZGl0YWJsZV9rcGlfbmFtZSxcbiAgICAgIFwidGlkXCI6IGF1dG9fdGlkLFxuICAgICAgXCJpc0Jvb2ttYXJrZWRcIjogZmFsc2UsXG4gICAgICBcImlzQWNjZXNzaWJsZVwiOiB0aGlzLmtwaV9leHRlcm5hbCxcbiAgICAgIFwibGFzdEFjY2Vzc1RpbWVcIjogXCJcIixcbiAgICAgIFwidGFnX3R5cGVcIjogdGhpcy5lZGl0YWJsZV90YWdfdHlwZSxcbiAgICAgIFwiaWRcIjogdGhpcy5lZGl0YWJsZV9pZCxcbiAgICAgIFwicGFnZUlkXCI6IHRoaXMuZWRpdGFibGVfcGFnZV9pZCxcbiAgICAgIFwiZGVzY1wiOiB0aGlzLmVkaXRhYmxlX2Rlc2MsXG4gICAgICBcImtwaUluZm9cIjogdGhpcy5lZGl0YWJsZV9pbmZvLFxuICAgICAgXCJpc1Zpc2libGVcIjogdGhpcy5rcGlfdmlzaWJpbGl0eSxcbiAgICAgIFwibm9kZXNcIjogW10sXG4gICAgICBcImNvbmZpZ1wiOiB7fVxuICAgIH1cbiAgICB0aGlzLmdldERlbGV0ZUtwaU5hbWUodGhpcy5rcGlEYXRhLCB0aGlzLmVkaXRhYmxlX2twaV90aWQpXG4gICAgdGhpcy5zZXRLcGlieVRpZCh0aGlzLmtwaURhdGEsIGtwaV9kYXRhLnRpZCwgb2JqKVxuICAgIHRoaXMuZWRpdGFibGVfa3BpX3RpZCA9IGtwaV9kYXRhLnRpZDtcbiAgICAvLyB0aGlzLnN1Ym1pdE5ld0twaSgpO1xuICAgIC8vIHRoaXMuZWRpdGFibGVfa3BpX3RpZCA9IGtwaV9kYXRhLnRpZDtcbiAgICAvLyB0aGlzLmdldFVwZGF0ZUtwaU5hbWUodGhpcy5rcGlEYXRhLCBlLnZhbHVlKVxuICB9XG5cblxuXG4gIG1ha2VOZXdLcGlXaXRoVXNlckVudGl0eSgpIHtcblxuICAgIHRoaXMudXNlck9wdGlvbkNvbnRhaW5lci5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgbGV0IGF0dF92YWx1ZSA9IGVsZW1lbnQuYXR0cmlidXRlVmFsdWVzLnNwbGl0KFwiLFwiKTtcbiAgICAgIGVsZW1lbnQuYXR0cmlidXRlVmFsdWVzID0gYXR0X3ZhbHVlO1xuICAgIH0pO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkX2twaV90aWQgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdGVkX2twaV90aWQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5nZXRIZWlzdElkKHRoaXMua3BpRGF0YSwgdGhpcy5zZWxlY3RlZF9rcGlfdGlkKTtcbiAgICB9IGVsc2Uge1xuXG4gICAgICB0aGlzLmhlaXN0VmFsdWUgPSAodGhpcy5rcGlEYXRhLmxlbmd0aCAhPSAwKSA/IHRoaXMuZ2V0SGlnaGVzdFRpZCh0aGlzLmtwaURhdGEpIDogMDtcbiAgICAgIGxldCB2YWx1ZSA9IHBhcnNlSW50KHRoaXMuaGVpc3RWYWx1ZSkgKyAxO1xuXG4gICAgfVxuICAgIGxldCBrcGlPYmogPSB7XG4gICAgICBcImtwaUlkXCI6IHRoaXMuc2VsZWN0ZWRfaWQsXG4gICAgICBcInBhZ2VJZFwiOiB0aGlzLnNlbGVjdGVkX3BhZ2VfaWQsXG4gICAgICBcInRpdGxlXCI6IHRoaXMuc2VsZWN0X2twaV9uYW1lLFxuICAgICAgXCJkZXNjcmlwdGlvblwiOiB0aGlzLnNlbGVjdGVkX2Rlc2MsXG4gICAgICBcImtwaUluZm9cIjogdGhpcy5zZWxlY3RlZF9pbmZvLFxuICAgICAgXCJ0YWdUeXBlXCI6IHRoaXMuc2VsZWN0X3RhZ190eXBlLFxuICAgICAgXCJhY3RpdmVcIjogdHJ1ZSxcbiAgICAgIFwidmlzaWJpbGl0eVwiOiB0aGlzLmtwaV92aXNpYmlsaXR5LFxuICAgICAgXCJleHRlcm5hbEtwaVwiOiB0aGlzLmtwaV9leHRlcm5hbCxcbiAgICAgIFwidGFyZ2V0XCI6IFwiXCIsXG4gICAgICBcImljb25cIjogXCJcIixcbiAgICAgIFwidXJsXCI6IFwiXCIsXG4gICAgICBcImtwaVR5cGVcIjogXCJcIixcbiAgICAgIFwicGFyZW50VGlkXCI6IHRoaXMuc2VsZWN0ZWRfa3BpX3RpZCxcbiAgICAgIFwiY2hpbGRUaWRcIjogXCJcIixcbiAgICAgIFwibWVhc3VyZXNcIjogdGhpcy51c2VyT3B0aW9uQ29udGFpbmVyLFxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKFwiS1BJIHdpdGggVXNlciBFbnRpdHkgT2JqOlwiLCBrcGlPYmopO1xuICB9XG5cblxuXG5cbiAgcm91dGVUb0twaUNvbmZpZygpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2FwcHMvY29udHJvbFBhbmVsL2twaUNvbnRyb2xsZXIva3BpQ29uZmlnJ10pXG4gIH1cblxufVxuIiwiPGFwcC1sb2FkaW5nICpuZ0lmPVwibG9hZGluZ01vZGFsXCI+PC9hcHAtbG9hZGluZz5cbjxkaXYgY2xhc3M9XCJwLTQgZmxleCBmbGV4LXJvdyB3LWZ1bGxcIj5cbiAgICA8ZGl2IGNsYXNzPVwibXgtMiBiZy13aGl0ZSBkYXJrOmJnLXRyYW5zcGFyZW50IGJvcmRlci1yXCI+XG5cbiAgICAgICAgPHRyZWV2aWV3IGNsYXNzPVwiZGFyayBiZy1ncmF5LTkwMCBkYXJrOmJnLXRyYW5zcGFyZW50XCIgW25hbWVdPVwiJ21haW5OYXZpZ2F0aW9uJ1wiIFtyb3V0ZUtleV09XCIncmFLcGknXCJcbiAgICAgICAgICAgIFtuYXZpZ2F0aW9uXT1cImtwaURhdGFcIiBbaXNTZWFyY2hCb3hdPVwiZmFsc2VcIiBbaXNFZGl0SWNvbl09XCJ0cnVlXCIgKGVkaXRhYmxlS3BpRGF0YSk9XCJnZXRFZGl0YWJsZUtwaSgkZXZlbnQpXCI+XG4gICAgICAgIDwvdHJlZXZpZXc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm14LTIgdy1mdWxsXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGl0ZW0tY2VudGVyIGp1c3RpZnktY2VudGVyIG15LThcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3dhcm5pbmdfbWR9fVwiIChjbGljayk9XCJhZGROZXdLcGkoKVwiPkFkZCBOZXcgS1BJPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9wcmltYXJ5X21kfX1cIiAoY2xpY2spPVwicm91dGVUb0twaUNvbmZpZygpXCJcbiAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwicm91dGVyLWxpbmstYWN0aXZlXCI+Q29uZmlndXJlIEtQSTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTmV3S3BpQWRkZWRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+TmFtZTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cInNlbGVjdF9rcGlfbmFtZVwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xICB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+IFRhZyBUeXBlPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW2RhdGFTb3VyY2VdPVwidGFnVHlwZVwiIFsobmdNb2RlbCldPVwic2VsZWN0X3RhZ190eXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwiYWRkVGFndHlwZVZhbHVlKCRldmVudClcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgbXQtMlwiPklEPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwic2VsZWN0ZWRfaWRcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIG10LTJcIj5QYWdlIElEPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJzZWxlY3RlZF9wYWdlX2lkXCI+PC9keC10ZXh0LWJveD4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwidGVtcGxhdGVEYXRhU291cmNlXCIgdmFsdWVFeHByPVwicGFnZUlkXCIgZGlzcGxheUV4cHI9XCJwYWdlTmFtZVwiIFtzZWFyY2hFbmFibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRfcGFnZV9pZFwiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xICB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+RGVzY3JpcHRpb248L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtaHRtbC1lZGl0b3IgaGVpZ2h0PVwiJ2F1dG8nXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZF9kZXNjXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by10b29sYmFyIFttdWx0aWxpbmVdPVwiZmFsc2VcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjY2VwdGVkVmFsdWVzXT1cIlsnOHB0JywgJzEwcHQnLCAnMTJwdCcsICcxNHB0JywgJzE4cHQnLCAnMjRwdCcsICczNnB0J11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwieyBpbnB1dEF0dHI6IHsgJ2FyaWEtbGFiZWwnOiAnRm9udCBzaXplJyB9IH1cIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImZvbnRcIiBbYWNjZXB0ZWRWYWx1ZXNdPVwiW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FyaWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb3VyaWVyIE5ldycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnR2VvcmdpYScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSW1wYWN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMdWNpZGEgQ29uc29sZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGFob21hJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaW1lcyBOZXcgUm9tYW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZlcmRhbmEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVwiIFtvcHRpb25zXT1cInsgaW5wdXRBdHRyOiB7ICdhcmlhLWxhYmVsJzogJ0ZvbnQgZmFtaWx5JyB9IH1cIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYm9sZFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiaXRhbGljXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJ1bmRlcmxpbmVcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25MZWZ0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJhbGlnbkNlbnRlclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25SaWdodFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25KdXN0aWZ5XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cIm9yZGVyZWRMaXN0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJidWxsZXRMaXN0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImhlYWRlclwiIFthY2NlcHRlZFZhbHVlc109XCJbZmFsc2UsIDEsIDIsIDMsIDQsIDVdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInsgaW5wdXRBdHRyOiB7ICdhcmlhLWxhYmVsJzogJ0hlYWRlcicgfSB9XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImNvbG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJiYWNrZ3JvdW5kXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImxpbmtcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImltYWdlXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImNsZWFyXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJjb2RlQmxvY2tcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhvLXRvb2xiYXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by1tZWRpYS1yZXNpemluZyBbZW5hYmxlZF09XCJ0cnVlXCI+IDwvZHhvLW1lZGlhLXJlc2l6aW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8taW1hZ2UtdXBsb2FkIFt0YWJzXT1cIlsnZmlsZScsICd1cmwnXVwiIGZpbGVVcGxvYWRNb2RlPVwiYmFzZTY0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keG8taW1hZ2UtdXBsb2FkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9keC1odG1sLWVkaXRvcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgbXQtMlwiPiBQYXJlbnQgQ29tcG9uZW50IDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtkYXRhU291cmNlXT1cImtlaVBhcmVudERhdGFTb3VyY2VcIiBkaXNwbGF5RXhwcj1cIm5hbWVcIiB2YWx1ZUV4cHI9XCJ0aWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJnZXRLcGlJdGVtVmFsdWUoJGV2ZW50KVwiIFt2YWx1ZV09XCJwYXJhbnRlX2twaV9uYW1lXCI+PC9keC1zZWxlY3QtYm94PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIG10LTJcIj5USUQ8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJzZWxlY3RlZF9rcGlfdGlkXCIgW3JlYWRPbmx5XT1cInRydWVcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gbXQtM1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xICB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1jaGVjay1ib3ggWyhuZ01vZGVsKV09XCJrcGlfdmlzaWJpbGl0eVwiIHRleHQ9XCJWaXNpYmlsaXR5XCI+PC9keC1jaGVjay1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xICB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1jaGVjay1ib3ggWyhuZ01vZGVsKV09XCJrcGlfZXh0ZXJuYWxcIiB0ZXh0PVwiRXh0ZXJuYWwgS1BJXCI+PC9keC1jaGVjay1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgbXQtMlwiPktQSSBJbmZvPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4LWh0bWwtZWRpdG9yIGhlaWdodD1cIidhdXRvJ1wiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRfaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8tdG9vbGJhciBbbXVsdGlsaW5lXT1cImZhbHNlXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY2NlcHRlZFZhbHVlc109XCJbJzhwdCcsICcxMHB0JywgJzEycHQnLCAnMTRwdCcsICcxOHB0JywgJzI0cHQnLCAnMzZwdCddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInsgaW5wdXRBdHRyOiB7ICdhcmlhLWxhYmVsJzogJ0ZvbnQgc2l6ZScgfSB9XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJmb250XCIgW2FjY2VwdGVkVmFsdWVzXT1cIltcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb3VyaWVyIE5ldycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0dlb3JnaWEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbXBhY3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMdWNpZGEgQ29uc29sZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RhaG9tYScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RpbWVzIE5ldyBSb21hbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZlcmRhbmEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwieyBpbnB1dEF0dHI6IHsgJ2FyaWEtbGFiZWwnOiAnRm9udCBmYW1pbHknIH0gfVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJib2xkXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJpdGFsaWNcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInVuZGVybGluZVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJhbGlnbkxlZnRcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImFsaWduQ2VudGVyXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJhbGlnblJpZ2h0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJhbGlnbkp1c3RpZnlcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwib3JkZXJlZExpc3RcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImJ1bGxldExpc3RcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiaGVhZGVyXCIgW2FjY2VwdGVkVmFsdWVzXT1cIltmYWxzZSwgMSwgMiwgMywgNCwgNV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwieyBpbnB1dEF0dHI6IHsgJ2FyaWEtbGFiZWwnOiAnSGVhZGVyJyB9IH1cIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiY29sb3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImJhY2tncm91bmRcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwibGlua1wiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiaW1hZ2VcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiY2xlYXJcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImNvZGVCbG9ja1wiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keG8tdG9vbGJhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhvLW1lZGlhLXJlc2l6aW5nIFtlbmFibGVkXT1cInRydWVcIj4gPC9keG8tbWVkaWEtcmVzaXppbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by1pbWFnZS11cGxvYWQgW3RhYnNdPVwiWydmaWxlJywgJ3VybCddXCIgZmlsZVVwbG9hZE1vZGU9XCJiYXNlNjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4by1pbWFnZS11cGxvYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2R4LWh0bWwtZWRpdG9yPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICA8YXBwLXVzZXItYWNjZXNzIFsodXNlck9wdGlvbkNvbnRhaW5lcildPVwidXNlck9wdGlvbkNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLXVzZXItYWNjZXNzPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1hdXRvIG10LTUganVzdGlmeS1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fcHJpbWFyeV9tZH19XCIgKGNsaWNrKT1cIm1ha2VOZXdLcGkoKVwiPkNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fcHJpbWFyeV9tZH19XCIgKGNsaWNrKT1cIm1ha2VOZXdLcGlXaXRoVXNlckVudGl0eSgpXCI+Q3JlYXRlIFdpdGggVXNlciBQcml2aWxlZ2VcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3dhcm5pbmdfbWR9fVwiIChjbGljayk9XCJnZXRSZXNldGVLcGkoKVwiPlJlc2V0PC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRWRpdEtwaUFkZGVkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgbWItMlwiPk5hbWU8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJlZGl0YWJsZV9rcGlfbmFtZVwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgbXQtMlwiPiBUYWcgVHlwZTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtkYXRhU291cmNlXT1cInRhZ1R5cGVcIiBbKG5nTW9kZWwpXT1cImVkaXRhYmxlX3RhZ190eXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwiYWRkVGFndHlwZVZhbHVlKCRldmVudClcIiBbcmVhZE9ubHldPVwiaXNGcm9tRWRpdGFibGVcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgbXQtMlwiPklEPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiZWRpdGFibGVfaWRcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIG10LTJcIj5QYWdlIElEPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJlZGl0YWJsZV9wYWdlX2lkXCI+PC9keC10ZXh0LWJveD4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwidGVtcGxhdGVEYXRhU291cmNlXCIgdmFsdWVFeHByPVwicGFnZUlkXCIgZGlzcGxheUV4cHI9XCJwYWdlTmFtZVwiIFtzZWFyY2hFbmFibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdGFibGVfcGFnZV9pZFwiPjwvZHgtc2VsZWN0LWJveD5cblxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxnIG10LTJcIj5EZXNjcmlwdGlvbjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1odG1sLWVkaXRvciBoZWlnaHQ9XCInYXV0bydcIiBbKG5nTW9kZWwpXT1cImVkaXRhYmxlX2Rlc2NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhvLXRvb2xiYXIgW211bHRpbGluZV09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwidW5kb1wiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwicmVkb1wiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY2NlcHRlZFZhbHVlc109XCJbJzhwdCcsICcxMHB0JywgJzEycHQnLCAnMTRwdCcsICcxOHB0JywgJzI0cHQnLCAnMzZwdCddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInsgaW5wdXRBdHRyOiB7ICdhcmlhLWxhYmVsJzogJ0ZvbnQgc2l6ZScgfSB9XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJmb250XCIgW2FjY2VwdGVkVmFsdWVzXT1cIltcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb3VyaWVyIE5ldycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0dlb3JnaWEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbXBhY3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMdWNpZGEgQ29uc29sZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RhaG9tYScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RpbWVzIE5ldyBSb21hbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZlcmRhbmEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwieyBpbnB1dEF0dHI6IHsgJ2FyaWEtbGFiZWwnOiAnRm9udCBmYW1pbHknIH0gfVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJib2xkXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJpdGFsaWNcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInVuZGVybGluZVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJhbGlnbkxlZnRcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImFsaWduQ2VudGVyXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJhbGlnblJpZ2h0XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJhbGlnbkp1c3RpZnlcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwib3JkZXJlZExpc3RcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImJ1bGxldExpc3RcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiaGVhZGVyXCIgW2FjY2VwdGVkVmFsdWVzXT1cIltmYWxzZSwgMSwgMiwgMywgNCwgNV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwieyBpbnB1dEF0dHI6IHsgJ2FyaWEtbGFiZWwnOiAnSGVhZGVyJyB9IH1cIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiY29sb3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImJhY2tncm91bmRcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwibGlua1wiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiaW1hZ2VcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNlcGFyYXRvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiY2xlYXJcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImJsb2NrcXVvdGVcIj48L2R4aS1pdGVtPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keG8tdG9vbGJhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhvLW1lZGlhLXJlc2l6aW5nIFtlbmFibGVkXT1cInRydWVcIj4gPC9keG8tbWVkaWEtcmVzaXppbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by1pbWFnZS11cGxvYWQgW3RhYnNdPVwiWydmaWxlJywgJ3VybCddXCIgZmlsZVVwbG9hZE1vZGU9XCJiYXNlNjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4by1pbWFnZS11cGxvYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2R4LWh0bWwtZWRpdG9yPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgbXQtMlwiPiBQYXJlbnQgQ29tcG9uZW50IDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtzZWFyY2hFbmFibGVkXT1cInRydWVcIiBbcmVhZE9ubHldPVwiZWRpdGFibGVfdGFnX3R5cGUgPT0gJ3BhcmVudCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cImtlaVBhcmVudERhdGFTb3VyY2VcIiBkaXNwbGF5RXhwcj1cIm5hbWVcIiB2YWx1ZUV4cHI9XCJ0aWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJnZXROZXdQYXJyZW50S3BpSXRlbVZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJwYXJhbnRlX2twaV9uYW1lXCI+PC9keC1zZWxlY3QtYm94PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHQtMSAgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGcgbXQtMlwiPlRJRDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cImVkaXRhYmxlX2twaV90aWRcIiBbcmVhZE9ubHldPVwiZmFsc2VcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gbXQtM1wiPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIHB0LTEgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtY2hlY2stYm94IFsobmdNb2RlbCldPVwia3BpX3Zpc2liaWxpdHlcIiB0ZXh0PVwiVmlzaWJpbGl0eVwiPjwvZHgtY2hlY2stYm94PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4LWNoZWNrLWJveCBbKG5nTW9kZWwpXT1cImtwaV9leHRlcm5hbFwiIHRleHQ9XCJFeHRlcm5hbCBLUElcIj48L2R4LWNoZWNrLWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBwdC0xICB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1sZyBtdC0yXCI+S1BJIEluZm88L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHgtaHRtbC1lZGl0b3IgaGVpZ2h0PVwiJ2F1dG8nXCIgWyhuZ01vZGVsKV09XCJlZGl0YWJsZV9pbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by10b29sYmFyIFttdWx0aWxpbmVdPVwiZmFsc2VcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cInNpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjY2VwdGVkVmFsdWVzXT1cIlsnOHB0JywgJzEwcHQnLCAnMTJwdCcsICcxNHB0JywgJzE4cHQnLCAnMjRwdCcsICczNnB0J11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwieyBpbnB1dEF0dHI6IHsgJ2FyaWEtbGFiZWwnOiAnRm9udCBzaXplJyB9IH1cIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImZvbnRcIiBbYWNjZXB0ZWRWYWx1ZXNdPVwiW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvdXJpZXIgTmV3JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnR2VvcmdpYScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ltcGFjdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0x1Y2lkYSBDb25zb2xlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGFob21hJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGltZXMgTmV3IFJvbWFuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVmVyZGFuYSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJ7IGlucHV0QXR0cjogeyAnYXJpYS1sYWJlbCc6ICdGb250IGZhbWlseScgfSB9XCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImJvbGRcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cIml0YWxpY1wiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwidW5kZXJsaW5lXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJzZXBhcmF0b3JcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImFsaWduTGVmdFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYWxpZ25DZW50ZXJcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImFsaWduUmlnaHRcIj48L2R4aS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLWl0ZW0gbmFtZT1cImFsaWduSnVzdGlmeVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJvcmRlcmVkTGlzdFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYnVsbGV0TGlzdFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJoZWFkZXJcIiBbYWNjZXB0ZWRWYWx1ZXNdPVwiW2ZhbHNlLCAxLCAyLCAzLCA0LCA1XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJ7IGlucHV0QXR0cjogeyAnYXJpYS1sYWJlbCc6ICdIZWFkZXInIH0gfVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJjb2xvclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiYmFja2dyb3VuZFwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJsaW5rXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJpbWFnZVwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwic2VwYXJhdG9yXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1pdGVtIG5hbWU9XCJjbGVhclwiPjwvZHhpLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktaXRlbSBuYW1lPVwiY29kZUJsb2NrXCI+PC9keGktaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4by10b29sYmFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8tbWVkaWEtcmVzaXppbmcgW2VuYWJsZWRdPVwidHJ1ZVwiPiA8L2R4by1tZWRpYS1yZXNpemluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhvLWltYWdlLXVwbG9hZCBbdGFic109XCJbJ2ZpbGUnLCAndXJsJ11cIiBmaWxlVXBsb2FkTW9kZT1cImJhc2U2NFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhvLWltYWdlLXVwbG9hZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZHgtaHRtbC1lZGl0b3I+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtYXV0byBtdC0zIGp1c3RpZnktZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3ByaW1hcnlfbWR9fVwiIChjbGljayk9XCJnZXRVcGRhdGVLcGkoKVwiPlVwZGF0ZVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fZGFuZ2VyX21kfX1cIiAoY2xpY2spPVwiZ2V0RGVsZXRlS3BpKClcIj5EZWxldGVcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fZGFuZ2VyX21kfX1cIiAoY2xpY2spPVwiY2FuY2VsVXBkYXRlKClcIj5DYW5jbGU8L2J1dHRvbj4gLS0+XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuXG5cblxuPC9kaXY+Il19