tnx-shared 5.1.78 → 5.1.82

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 (121) hide show
  1. package/bundles/tnx-shared.umd.js +994 -321
  2. package/bundles/tnx-shared.umd.js.map +1 -1
  3. package/bundles/tnx-shared.umd.min.js +1 -1
  4. package/bundles/tnx-shared.umd.min.js.map +1 -1
  5. package/classes/base/data-form-base.d.ts +1 -0
  6. package/classes/base/data-form-base.d.ts.map +1 -1
  7. package/classes/base/data-list-base.d.ts +2 -1
  8. package/classes/base/data-list-base.d.ts.map +1 -1
  9. package/classes/form-schema.d.ts +3 -0
  10. package/classes/form-schema.d.ts.map +1 -1
  11. package/components/crud/crud-form/crud-form.component.d.ts.map +1 -1
  12. package/components/crud/crud-list/crud-list.component.d.ts +1 -0
  13. package/components/crud/crud-list/crud-list.component.d.ts.map +1 -1
  14. package/components/entity-permission/services.cs/entity-permission.service.d.ts +1 -0
  15. package/components/entity-permission/services.cs/entity-permission.service.d.ts.map +1 -1
  16. package/components/file-explorer/file-manager/file-manager.component.d.ts +1 -0
  17. package/components/file-explorer/file-manager/file-manager.component.d.ts.map +1 -1
  18. package/components/file-explorer/services/file-data.service.d.ts +1 -0
  19. package/components/file-explorer/services/file-data.service.d.ts.map +1 -1
  20. package/components/query-builders/query-builder/query-builder.component.d.ts.map +1 -1
  21. package/components/query-builders/query-builder-group/query-builder-group.component.d.ts +1 -0
  22. package/components/query-builders/query-builder-group/query-builder-group.component.d.ts.map +1 -1
  23. package/components/query-builders/query-builder-rule/query-builder-rule.component.d.ts +3 -0
  24. package/components/query-builders/query-builder-rule/query-builder-rule.component.d.ts.map +1 -1
  25. package/components/statemachines/models/constants.d.ts +5 -1
  26. package/components/statemachines/models/constants.d.ts.map +1 -1
  27. package/components/statemachines/models/enums.d.ts +4 -0
  28. package/components/statemachines/models/enums.d.ts.map +1 -1
  29. package/components/statemachines/statemachines-connection-metadata/statemachines-connection-metadata.component.d.ts.map +1 -1
  30. package/components/statemachines/statemachines-connection-receiver/statemachines-connection-receiver.component.d.ts +3 -0
  31. package/components/statemachines/statemachines-connection-receiver/statemachines-connection-receiver.component.d.ts.map +1 -1
  32. package/components/statemachines/statemachines-connection-receiver-condition/statemachines-connection-receiver-condition.component.d.ts +28 -0
  33. package/components/statemachines/statemachines-connection-receiver-condition/statemachines-connection-receiver-condition.component.d.ts.map +1 -0
  34. package/components/statemachines/statemachines-connection-receiver-condition/statemachines-connection-receiver-condition.component.ngfactory.d.ts.map +1 -0
  35. package/components/statemachines/statemachines-connection-receiver-condition/statemachines-connection-receiver-condition.component.scss.shim.ngstyle.d.ts.map +1 -0
  36. package/components/statemachines/statemachines-connection-receiver-department/statemachines-connection-receiver-department.component.d.ts +3 -1
  37. package/components/statemachines/statemachines-connection-receiver-department/statemachines-connection-receiver-department.component.d.ts.map +1 -1
  38. package/components/statemachines/statemachines-connection-receiver-group/statemachines-connection-receiver-group.component.d.ts +3 -1
  39. package/components/statemachines/statemachines-connection-receiver-group/statemachines-connection-receiver-group.component.d.ts.map +1 -1
  40. package/components/statemachines/statemachines-connection-receiver-role/statemachines-connection-receiver-role.component.d.ts +6 -4
  41. package/components/statemachines/statemachines-connection-receiver-role/statemachines-connection-receiver-role.component.d.ts.map +1 -1
  42. package/components/statemachines/statemachines-connection-sender/statemachines-connection-sender.component.d.ts +3 -3
  43. package/components/statemachines/statemachines-connection-sender/statemachines-connection-sender.component.d.ts.map +1 -1
  44. package/components/user-picker/user-picker.component.d.ts +8 -2
  45. package/components/user-picker/user-picker.component.d.ts.map +1 -1
  46. package/components/workflow/models/models.d.ts +8 -8
  47. package/components/workflow/models/models.d.ts.map +1 -1
  48. package/components/workflow/process-workflow-form/process-workflow-form.component.d.ts +1 -1
  49. package/components/workflow/process-workflow-form/process-workflow-form.component.d.ts.map +1 -1
  50. package/components/workflow/process-workflow-target/process-workflow-target.component.d.ts +3 -6
  51. package/components/workflow/process-workflow-target/process-workflow-target.component.d.ts.map +1 -1
  52. package/components/workflow/workflow-history-new/workflow-history-new.component.d.ts +3 -3
  53. package/components/workflow/workflow-history-new/workflow-history-new.component.d.ts.map +1 -1
  54. package/components/workflow/workflow-setting-new/workflow-setting-new.component.d.ts +1 -0
  55. package/components/workflow/workflow-setting-new/workflow-setting-new.component.d.ts.map +1 -1
  56. package/configs/component-context.constant.d.ts +1 -0
  57. package/configs/component-context.constant.d.ts.map +1 -1
  58. package/congviec/congviec/congviec-dinhkem/congviec-dinhkem.component.d.ts +8 -3
  59. package/congviec/congviec/congviec-dinhkem/congviec-dinhkem.component.d.ts.map +1 -1
  60. package/congviec/congviec/congviec-form/congviec-form.component.d.ts +2 -0
  61. package/congviec/congviec/congviec-form/congviec-form.component.d.ts.map +1 -1
  62. package/congviec/congviec/congviec.component.d.ts.map +1 -1
  63. package/congviec/congviec/services/congviec-dinhkem.service.d.ts +8 -0
  64. package/congviec/congviec/services/congviec-dinhkem.service.d.ts.map +1 -1
  65. package/congviec/congviec/services/congviec.service.d.ts.map +1 -1
  66. package/esm2015/classes/base/data-form-base.js +6 -3
  67. package/esm2015/classes/base/data-list-base.js +13 -3
  68. package/esm2015/classes/form-schema.js +1 -1
  69. package/esm2015/components/crud/crud-form/crud-form.component.js +2 -1
  70. package/esm2015/components/crud/crud-list/crud-list.component.js +6 -2
  71. package/esm2015/components/entity-permission/services.cs/entity-permission.service.js +8 -5
  72. package/esm2015/components/file-explorer/file-manager/file-manager.component.js +17 -10
  73. package/esm2015/components/file-explorer/services/file-data.service.js +15 -15
  74. package/esm2015/components/query-builders/query-builder/query-builder.component.js +24 -7
  75. package/esm2015/components/query-builders/query-builder-group/query-builder-group.component.js +6 -2
  76. package/esm2015/components/query-builders/query-builder-rule/query-builder-rule.component.js +39 -3
  77. package/esm2015/components/share-link-by-permission/share-link-by-permission.component.js +2 -2
  78. package/esm2015/components/statemachines/models/constants.js +9 -4
  79. package/esm2015/components/statemachines/models/enums.js +6 -1
  80. package/esm2015/components/statemachines/statemachines-connection-metadata/statemachines-connection-metadata.component.js +9 -5
  81. package/esm2015/components/statemachines/statemachines-connection-receiver/statemachines-connection-receiver.component.js +19 -6
  82. package/esm2015/components/statemachines/statemachines-connection-receiver-condition/statemachines-connection-receiver-condition.component.js +179 -0
  83. package/esm2015/components/statemachines/statemachines-connection-receiver-department/statemachines-connection-receiver-department.component.js +32 -1
  84. package/esm2015/components/statemachines/statemachines-connection-receiver-group/statemachines-connection-receiver-group.component.js +32 -1
  85. package/esm2015/components/statemachines/statemachines-connection-receiver-role/statemachines-connection-receiver-role.component.js +39 -8
  86. package/esm2015/components/statemachines/statemachines-connection-sender/statemachines-connection-sender.component.js +19 -7
  87. package/esm2015/components/statemachines/statemachines-designer/statemachines-designer.component.js +1 -1
  88. package/esm2015/components/statemachines/utils/utils.js +6 -6
  89. package/esm2015/components/tn-app-help/tn-app-help.component.js +1 -1
  90. package/esm2015/components/tn-app-notification/tn-app-notification.component.js +2 -2
  91. package/esm2015/components/user-picker/user-picker.component.js +47 -6
  92. package/esm2015/components/workflow/models/models.js +1 -7
  93. package/esm2015/components/workflow/process-workflow-form/process-workflow-form.component.js +39 -42
  94. package/esm2015/components/workflow/process-workflow-target/process-workflow-target.component.js +7 -40
  95. package/esm2015/components/workflow/workflow-history-new/workflow-history-new.component.js +10 -12
  96. package/esm2015/components/workflow/workflow-setting-new/workflow-setting-new.component.js +67 -10
  97. package/esm2015/configs/component-context.constant.js +3 -2
  98. package/esm2015/congviec/congviec/congviec-dinhkem/congviec-dinhkem.component.js +50 -14
  99. package/esm2015/congviec/congviec/congviec-form/congviec-form.component.js +24 -12
  100. package/esm2015/congviec/congviec/congviec.component.js +7 -6
  101. package/esm2015/congviec/congviec/services/congviec-dinhkem.service.js +57 -1
  102. package/esm2015/congviec/congviec/services/congviec.service.js +3 -3
  103. package/esm2015/services/base.service.js +4 -1
  104. package/esm2015/services/dm-chucvu.service.js +28 -0
  105. package/esm2015/services/role.service.js +1 -1
  106. package/esm2015/tnx-shared.js +69 -67
  107. package/esm2015/tnx-shared.module.js +3 -1
  108. package/fesm2015/tnx-shared.js +776 -220
  109. package/fesm2015/tnx-shared.js.map +1 -1
  110. package/package.json +2 -2
  111. package/services/base.service.d.ts +1 -0
  112. package/services/base.service.d.ts.map +1 -1
  113. package/services/dm-chucvu.service.d.ts +12 -0
  114. package/services/dm-chucvu.service.d.ts.map +1 -0
  115. package/services/dm-chucvu.service.ngfactory.d.ts.map +1 -0
  116. package/tnx-shared.d.ts +68 -66
  117. package/tnx-shared.d.ts.map +1 -1
  118. package/tnx-shared.metadata.json +1 -1
  119. package/tnx-shared.module.d.ts +2 -1
  120. package/tnx-shared.module.d.ts.map +1 -1
  121. package/tnx-shared.module.ngfactory.d.ts.map +1 -1
@@ -2,9 +2,10 @@ import { __awaiter } from "tslib";
2
2
  import { Component, Injector, Input } from '@angular/core';
3
3
  import { ComponentContextService } from '../../../app-context/component-context.service';
4
4
  import { DataListBase } from '../../../classes/base/data-list-base';
5
+ import { FormState } from '../../../classes/constants';
5
6
  import { ColumnSchemaBase, EnumFileLayout, HeightType, ModelSchema, Operator } from '../../../classes/form-schema';
6
7
  import { FileDataService } from '../../../components/file-explorer/services/file-data.service';
7
- import { FormState } from '../../../classes/constants';
8
+ import { ComCtxConstants } from '../../../configs/component-context.constant';
8
9
  import { VirtualBaseService } from '../../../services/virtual-base.service';
9
10
  import { CongviecDinhkemService } from '../services/congviec-dinhkem.service';
10
11
  export class BaseCongviecDinhkemComponent extends DataListBase {
@@ -13,13 +14,23 @@ export class BaseCongviecDinhkemComponent extends DataListBase {
13
14
  this._virtualBaseService = _virtualBaseService;
14
15
  this._congViecDinhKemService = _congViecDinhKemService;
15
16
  this.fileDataService = fileDataService;
16
- this.formState = FormState.VIEW;
17
+ this._formState = FormState.VIEW;
17
18
  this.layoutFile = EnumFileLayout;
18
19
  this.enumFormState = FormState;
19
20
  this.formModel = {};
20
21
  this.showAttachLinkBox = false;
21
22
  this.typedLink = '';
22
23
  }
24
+ set formState(value) {
25
+ this._formState = value;
26
+ if (this.setting) {
27
+ this.settingIfIsFormView();
28
+ }
29
+ }
30
+ ;
31
+ get formState() {
32
+ return this._formState;
33
+ }
23
34
  ngOnInit() {
24
35
  this.setting.objectName = 'mục đính kèm';
25
36
  this.setting.baseService = this._congViecDinhKemService;
@@ -30,11 +41,10 @@ export class BaseCongviecDinhkemComponent extends DataListBase {
30
41
  this.setting.hiddenPageSetting = true;
31
42
  this.setting.hiddenAdvanceSearch = true;
32
43
  this.setting.hiddenFilterRow = true;
33
- // this.setting.hiddenCheckbox = this.formState == FormState.VIEW;
34
- // this.setting.hiddenFunctionColumn = this.formState == FormState.VIEW;
35
44
  this.setting.fixHeightTypeInDialog = false;
36
45
  this.setting.heightType = HeightType.dynamic;
37
46
  this.setting.showExportSelectedItems = false;
47
+ this.settingIfIsFormView();
38
48
  this.setting.modelSchemas = [
39
49
  new ModelSchema({ field: 'tenHienThiDoiTuong', name: 'Đối tượng', fullName: 'Đối tượng', description: 'Đối tượng' }),
40
50
  new ModelSchema({ field: 'tieuDe', name: 'Tiêu đề', fullName: 'Tiêu đề', description: 'Tiêu đề' }),
@@ -52,6 +62,17 @@ export class BaseCongviecDinhkemComponent extends DataListBase {
52
62
  dataType: 'fileDinhKem'
53
63
  })
54
64
  ];
65
+ this.rootContext.replaySubscribe(ComCtxConstants.ROOT.GAN_ENTITY_SANG_CONG_VIEC, rowData => {
66
+ this.themDinhKem(false);
67
+ });
68
+ }
69
+ ngOnDestroy() {
70
+ this.rootContext.unSubscribleReplay(ComCtxConstants.ROOT.GAN_ENTITY_SANG_CONG_VIEC);
71
+ super.ngOnDestroy();
72
+ }
73
+ settingIfIsFormView() {
74
+ this.setting.hiddenCheckbox = this.formState == FormState.VIEW;
75
+ this.setting.hiddenFunctionColumn = this.setting.hiddenCheckbox;
55
76
  }
56
77
  modifyGridInfo(gridInfo) {
57
78
  return __awaiter(this, void 0, void 0, function* () {
@@ -60,14 +81,22 @@ export class BaseCongviecDinhkemComponent extends DataListBase {
60
81
  }
61
82
  afterGetData() {
62
83
  return __awaiter(this, void 0, void 0, function* () {
63
- for (const item of this.model.dataSource) {
64
- const detail = (yield this._congViecDinhKemService.getDetailItem(item.serviceCode, item.entity, item.entityKey, item.fieldHienThi)).data;
65
- if (detail.length > 0) {
66
- item.tieuDe = detail[0][item.fieldHienThi];
84
+ const dicGrouped = {};
85
+ this.model.dataSource.forEach(item => {
86
+ if (!dicGrouped[item.serviceCode]) {
87
+ dicGrouped[item.serviceCode] = {};
67
88
  }
68
- else {
69
- item.tieuDe = 'Không tìm thấy bản ghi';
89
+ if (!dicGrouped[item.serviceCode][item.entity]) {
90
+ dicGrouped[item.serviceCode][item.entity] = {
91
+ fieldHienThi: item.fieldHienThi,
92
+ lstId: []
93
+ };
70
94
  }
95
+ dicGrouped[item.serviceCode][item.entity].lstId.push(item.entityKey);
96
+ });
97
+ const dataDisplayName = yield this._congViecDinhKemService.getDetailItems(dicGrouped);
98
+ for (const item of this.model.dataSource) {
99
+ item.tieuDe = dataDisplayName[item.serviceCode][item.entity][item.entityKey];
71
100
  if (item.tenHienThiDoiTuong != null) {
72
101
  item.tenHienThiDoiTuong = item.tenHienThiDoiTuong.trim();
73
102
  item.tenHienThiDoiTuong = item.tenHienThiDoiTuong.substring(0, 1).toUpperCase() + item.tenHienThiDoiTuong.substring(1);
@@ -75,6 +104,11 @@ export class BaseCongviecDinhkemComponent extends DataListBase {
75
104
  }
76
105
  });
77
106
  }
107
+ afterReloaded() {
108
+ return __awaiter(this, void 0, void 0, function* () {
109
+ this.fileDataService.getData();
110
+ });
111
+ }
78
112
  viewLinkItem(evt) {
79
113
  this.viewRawLink(evt);
80
114
  }
@@ -94,7 +128,7 @@ export class BaseCongviecDinhkemComponent extends DataListBase {
94
128
  }
95
129
  }));
96
130
  }
97
- themDinhKem() {
131
+ themDinhKem(showNoti = true) {
98
132
  return __awaiter(this, void 0, void 0, function* () {
99
133
  const content = this._commonService.pasteByStorage();
100
134
  if (content) {
@@ -102,7 +136,9 @@ export class BaseCongviecDinhkemComponent extends DataListBase {
102
136
  if (obj.length > 0) {
103
137
  this._congViecDinhKemService.themDinhKemNghiepVu(this.taskId, obj).then(rs => {
104
138
  if (rs.success) {
105
- this._notifierService.showSuccess('Thêm mục đính kèm thành công!');
139
+ if (showNoti) {
140
+ this._notifierService.showSuccess('Thêm mục đính kèm thành công!');
141
+ }
106
142
  this.reload();
107
143
  this._commonService.clearClipboardStorage();
108
144
  }
@@ -197,7 +233,7 @@ export class BaseCongviecDinhkemComponent extends DataListBase {
197
233
  BaseCongviecDinhkemComponent.decorators = [
198
234
  { type: Component, args: [{
199
235
  selector: 'base-congviec-dinhkem',
200
- template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\" [hiddenAdd]=\"true\"\r\n [hiddenEdit]=\"true\" [hiddenDelete]=\"true\" [hiddenCopyLink]=\"true\" (onReload)=\"_triggerProcessData($event)\"\r\n (onView)=\"viewLinkItem($event)\" (onDelete)=\"deleteLinkItem($event)\"\r\n (onDeleteMultiple)=\"deleteLinkItemMultiple($event)\" (onReloaded)=\"_unmarkLoading()\">\r\n <ng-template #tieuDe let-rowData=\"rowData\">\r\n {{rowData.tenHienThiDoiTuong}}: [{{rowData.tieuDe}}]\r\n </ng-template>\r\n <ng-template #buttonAfterToolbar>\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\" class=\"p-button-text p-button-primary\" (click)=\"themDinhKem()\"></button>\r\n <button type=\"button\"\r\n *ngIf=\"(formState == enumFormState.EDIT || formState == enumFormState.ADD) && model.selectedItems.length > 0\"\r\n pButton pRipple label=\"X\u00F3a\" icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\"\r\n (click)=\"deleteLinkItemMultiple($event)\"></button>\r\n </ng-template>\r\n <ng-template #function let-rowData=\"rowData\">\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\" pTooltip=\"H\u1EE7y \u0111\u00EDnh k\u00E8m\"\r\n tooltipPosition=\"top\" (click)=\"deleteLinkItem(rowData)\"></button>\r\n </ng-template>\r\n <ng-template #fileDinhKem let-rowData=\"rowData\">\r\n <file-manager [readonly]=\"true\" [serviceCode]=\"rowData.serviceCode\" [entity]=\"rowData.entity\"\r\n [entityKey]=\"rowData.entityKey\" [layout]=\"layoutFile.SIMPLE\" [fileDataService]=\"fileDataService\">\r\n </file-manager>\r\n </ng-template>\r\n</crud-list>\r\n\r\n<tn-dialog *ngIf=\"showDetailForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"setting.popupHeader | translate\" [popupSize]=\"setting.popupSize\" (onHide)=\"showDetailForm = false\">\r\n <base-congviec-dinhkem-form #formBase [taskId]=\"taskId\" [parentModel]=\"model\" [parentContext]=\"context\"\r\n [model]=\"formModel\" (onSaved)=\"showDetailForm = false;crudList.reload()\" (onCancel)=\"_handleCancel($event)\"\r\n (onAfterSaved)=\"onAfterSaved($event)\">\r\n </base-congviec-dinhkem-form>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showAttachLinkBox\" #dialog2 [maximizable]=\"false\" [header]=\"'Nh\u1EADp li\u00EAn k\u1EBFt' | translate\"\r\n [popupSize]=\"{ width: 600, height: 50}\" (onHide)=\"showAttachLinkBox = false; typedLink=''\">\r\n <div class=\"p-col-12\">\r\n <div class=\"p-grid\">\r\n <div class=\"p-md-10\">\r\n <input #input type=\"text\" placeholder=\"Nh\u1EADp li\u00EAn k\u1EBFt sao ch\u00E9p t\u1EEB ph\u00E2n h\u1EC7 kh\u00E1c...\" pInputText\r\n class=\"p-col-12\" [(ngModel)]=\"typedLink\" (keyup.enter)=\"addAttachLink()\" />\r\n </div>\r\n <div class=\"p-md-2\">\r\n <button type=\"button\" pButton class=\"p-button-primary p-col-12\" label=\"Ok\"\r\n [disabled]=\"typedLink != ''? null : true\" (click)=\"addAttachLink()\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <after-view-checked (loaded)=\"focusInput(input)\"></after-view-checked>\r\n</tn-dialog>\r\n",
236
+ template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\" [hiddenAdd]=\"true\"\r\n [hiddenEdit]=\"true\" [hiddenDelete]=\"true\" [hiddenCopyLink]=\"true\" (onReload)=\"_triggerProcessData($event)\"\r\n (onView)=\"viewLinkItem($event)\" (onDelete)=\"deleteLinkItem($event)\"\r\n (onDeleteMultiple)=\"deleteLinkItemMultiple($event)\" (onReloaded)=\"_handleReloaded($event)\">\r\n <ng-template #tieuDe let-rowData=\"rowData\">\r\n [{{rowData.tenHienThiDoiTuong}}] {{rowData.tieuDe}}\r\n </ng-template>\r\n <ng-template #buttonAfterToolbar>\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n label=\"Th\u00EAm m\u1EDBi\" icon=\"pi pi-plus\" class=\"p-button-text p-button-primary\" (click)=\"themDinhKem()\"></button>\r\n <button type=\"button\"\r\n *ngIf=\"(formState == enumFormState.EDIT || formState == enumFormState.ADD) && model.selectedItems.length > 0\"\r\n pButton pRipple label=\"X\u00F3a\" icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\"\r\n (click)=\"deleteLinkItemMultiple($event)\"></button>\r\n </ng-template>\r\n <ng-template #function let-rowData=\"rowData\">\r\n <button *ngIf=\"formState == enumFormState.EDIT || formState == enumFormState.ADD\" type=\"button\" pButton pRipple\r\n icon=\"pi pi-trash\" class=\"p-button-rounded p-button-text p-button-danger\" pTooltip=\"H\u1EE7y \u0111\u00EDnh k\u00E8m\"\r\n tooltipPosition=\"top\" (click)=\"deleteLinkItem(rowData)\"></button>\r\n </ng-template>\r\n <ng-template #fileDinhKem let-rowData=\"rowData\">\r\n <file-manager [readonly]=\"true\" [serviceCode]=\"rowData.serviceCode\" [entity]=\"rowData.entity\"\r\n [entityKey]=\"rowData.entityKey\" [layout]=\"layoutFile.SIMPLE\">\r\n </file-manager>\r\n </ng-template>\r\n</crud-list>\r\n\r\n<tn-dialog *ngIf=\"showDetailForm\" #dialog [styleClass]=\"'congviec-form tn-form-dialog'\"\r\n [header]=\"setting.popupHeader | translate\" [popupSize]=\"setting.popupSize\" (onHide)=\"showDetailForm = false\">\r\n <base-congviec-dinhkem-form #formBase [taskId]=\"taskId\" [parentModel]=\"model\" [parentContext]=\"context\"\r\n [model]=\"formModel\" (onSaved)=\"showDetailForm = false;crudList.reload()\" (onCancel)=\"_handleCancel($event)\"\r\n (onAfterSaved)=\"onAfterSaved($event)\">\r\n </base-congviec-dinhkem-form>\r\n</tn-dialog>\r\n\r\n<tn-dialog *ngIf=\"showAttachLinkBox\" #dialog2 [maximizable]=\"false\" [header]=\"'Nh\u1EADp li\u00EAn k\u1EBFt' | translate\"\r\n [popupSize]=\"{ width: 600, height: 50}\" (onHide)=\"showAttachLinkBox = false; typedLink=''\">\r\n <div class=\"p-col-12\">\r\n <div class=\"p-grid\">\r\n <div class=\"p-md-10\">\r\n <input #input type=\"text\" placeholder=\"Nh\u1EADp li\u00EAn k\u1EBFt sao ch\u00E9p t\u1EEB ph\u00E2n h\u1EC7 kh\u00E1c...\" pInputText\r\n class=\"p-col-12\" [(ngModel)]=\"typedLink\" (keyup.enter)=\"addAttachLink()\" />\r\n </div>\r\n <div class=\"p-md-2\">\r\n <button type=\"button\" pButton class=\"p-button-primary p-col-12\" label=\"Ok\"\r\n [disabled]=\"typedLink != ''? null : true\" (click)=\"addAttachLink()\"></button>\r\n </div>\r\n </div>\r\n </div>\r\n <after-view-checked (loaded)=\"focusInput(input)\"></after-view-checked>\r\n</tn-dialog>",
201
237
  providers: [ComponentContextService],
202
238
  styles: [""]
203
239
  },] }
@@ -212,4 +248,4 @@ BaseCongviecDinhkemComponent.propDecorators = {
212
248
  formState: [{ type: Input }],
213
249
  taskId: [{ type: Input }]
214
250
  };
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZ3ZpZWMtZGluaGtlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY29uZ3ZpZWMvY29uZ3ZpZWMvY29uZ3ZpZWMtZGluaGtlbS9jb25ndmllYy1kaW5oa2VtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxRQUFRLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBRS9GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQVM5RSxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsWUFBWTtJQVcxRCxZQUNJLFFBQWtCLEVBQ1YsbUJBQXVDLEVBQ3ZDLHVCQUErQyxFQUNoRCxlQUFnQztRQUV2QyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFKUix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQW9CO1FBQ3ZDLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBd0I7UUFDaEQsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBZGxDLGNBQVMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBRzdCLGVBQVUsR0FBRyxjQUFjLENBQUM7UUFDNUIsa0JB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TSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3QixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDVCxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDOUM7aUJBQ0k7Z0JBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQzthQUN2QjtTQUNKO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQVk7UUFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQzs7O1lBOU1KLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsdUJBQXVCO2dCQUNqQywwaUhBQWdEO2dCQUVoRCxTQUFTLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQzs7YUFDdkM7OztZQWhCK0IsUUFBUTtZQU8vQixrQkFBa0I7WUFDbEIsc0JBQXNCO1lBSnRCLGVBQWU7Ozt3QkFjbkIsS0FBSztxQkFDTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEYXRhTGlzdEJhc2UgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Jhc2UvZGF0YS1saXN0LWJhc2UnO1xyXG5pbXBvcnQgeyBDb2x1bW5TY2hlbWFCYXNlLCBFbnVtRmlsZUxheW91dCwgSGVpZ2h0VHlwZSwgTW9kZWxTY2hlbWEsIE9wZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XHJcbmltcG9ydCB7IEZpbGVEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvZmlsZS1leHBsb3Jlci9zZXJ2aWNlcy9maWxlLWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IEdyaWRJbmZvIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dyaWQtaW5mbyc7XHJcbmltcG9ydCB7IEZvcm1TdGF0ZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvY29uc3RhbnRzJztcclxuaW1wb3J0IHsgVmlydHVhbEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdmlydHVhbC1iYXNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25ndmllY0RpbmhrZW1TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29uZ3ZpZWMtZGluaGtlbS5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYmFzZS1jb25ndmllYy1kaW5oa2VtJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb25ndmllYy1kaW5oa2VtLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2Nvbmd2aWVjLWRpbmhrZW0uY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW0NvbXBvbmVudENvbnRleHRTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFzZUNvbmd2aWVjRGluaGtlbUNvbXBvbmVudCBleHRlbmRzIERhdGFMaXN0QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBASW5wdXQoKSBmb3JtU3RhdGUgPSBGb3JtU3RhdGUuVklFVztcclxuICAgIEBJbnB1dCgpIHRhc2tJZDogYW55O1xyXG5cclxuICAgIHB1YmxpYyBsYXlvdXRGaWxlID0gRW51bUZpbGVMYXlvdXQ7XHJcbiAgICBwdWJsaWMgZW51bUZvcm1TdGF0ZSA9IEZvcm1TdGF0ZTtcclxuXHJcbiAgICBmb3JtTW9kZWw6IGFueSA9IHt9O1xyXG4gICAgc2hvd0F0dGFjaExpbmtCb3ggPSBmYWxzZTtcclxuICAgIHR5cGVkTGluazogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByaXZhdGUgX3ZpcnR1YWxCYXNlU2VydmljZTogVmlydHVhbEJhc2VTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2NvbmdWaWVjRGluaEtlbVNlcnZpY2U6IENvbmd2aWVjRGluaGtlbVNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGZpbGVEYXRhU2VydmljZTogRmlsZURhdGFTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLm9iamVjdE5hbWUgPSAnbeG7pWMgxJHDrW5oIGvDqG0nO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSA9IHRoaXMuX2NvbmdWaWVjRGluaEtlbVNlcnZpY2U7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlblNldHRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5TZXR0aW5nUGVybWlzc2lvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlblNldHRpbmdXb3JrZmxvdyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlblNldHRpbmdXb3JrZmxvd05ldyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlblBhZ2VTZXR0aW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuQWR2YW5jZVNlYXJjaCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlbkZpbHRlclJvdyA9IHRydWU7XHJcbiAgICAgICAgLy8gdGhpcy5zZXR0aW5nLmhpZGRlbkNoZWNrYm94ID0gdGhpcy5mb3JtU3RhdGUgPT0gRm9ybVN0YXRlLlZJRVc7XHJcbiAgICAgICAgLy8gdGhpcy5zZXR0aW5nLmhpZGRlbkZ1bmN0aW9uQ29sdW1uID0gdGhpcy5mb3JtU3RhdGUgPT0gRm9ybVN0YXRlLlZJRVc7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmZpeEhlaWdodFR5cGVJbkRpYWxvZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oZWlnaHRUeXBlID0gSGVpZ2h0VHlwZS5keW5hbWljO1xyXG5cclxuICAgICAgICB0aGlzLnNldHRpbmcuc2hvd0V4cG9ydFNlbGVjdGVkSXRlbXMgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLm1vZGVsU2NoZW1hcyA9IFtcclxuICAgICAgICAgICAgbmV3IE1vZGVsU2NoZW1hKHsgZmllbGQ6ICd0ZW5IaWVuVGhpRG9pVHVvbmcnLCBuYW1lOiAnxJDhu5FpIHTGsOG7o25nJywgZnVsbE5hbWU6ICfEkOG7kWkgdMaw4bujbmcnLCBkZXNjcmlwdGlvbjogJ8SQ4buRaSB0xrDhu6NuZycgfSksXHJcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7IGZpZWxkOiAndGlldURlJywgbmFtZTogJ1Rpw6p1IMSR4buBJywgZnVsbE5hbWU6ICdUacOqdSDEkeG7gScsIGRlc2NyaXB0aW9uOiAnVGnDqnUgxJHhu4EnIH0pLFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMgPSBbXHJcbiAgICAgICAgICAgIG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAndGlldURlJyxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnVGnDqnUgxJHhu4EnLFxyXG4gICAgICAgICAgICAgICAgc2hvd0VkaXRMaW5rOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICd0aWV1RGUnXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2ZpbGVEaW5oS2VtJyxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnRmlsZSDEkcOtbmgga8OobScsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2ZpbGVEaW5oS2VtJ1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbW9kaWZ5R3JpZEluZm8oZ3JpZEluZm8/OiBHcmlkSW5mbykge1xyXG4gICAgICAgIGdyaWRJbmZvLmZpbHRlcnMucHVzaChcclxuICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2lkQ29uZ1ZpZWMnLCBPcGVyYXRvci5lcXVhbCwgdGhpcy50YXNrSWQpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhZnRlckdldERhdGEoKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMubW9kZWwuZGF0YVNvdXJjZSkge1xyXG4gICAgICAgICAgICBjb25zdCBkZXRhaWwgPSAoYXdhaXQgdGhpcy5fY29uZ1ZpZWNEaW5oS2VtU2VydmljZS5nZXREZXRhaWxJdGVtKGl0ZW0uc2VydmljZUNvZGUsIGl0ZW0uZW50aXR5LCBpdGVtLmVudGl0eUtleSwgaXRlbS5maWVsZEhpZW5UaGkpKS5kYXRhO1xyXG4gICAgICAgICAgICBpZiAoZGV0YWlsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0udGlldURlID0gZGV0YWlsWzBdW2l0ZW0uZmllbGRIaWVuVGhpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0udGlldURlID0gJ0tow7RuZyB0w6xtIHRo4bqleSBi4bqjbiBnaGknO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpdGVtLnRlbkhpZW5UaGlEb2lUdW9uZyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLnRlbkhpZW5UaGlEb2lUdW9uZyA9IGl0ZW0udGVuSGllblRoaURvaVR1b25nLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgIGl0ZW0udGVuSGllblRoaURvaVR1b25nID0gaXRlbS50ZW5IaWVuVGhpRG9pVHVvbmcuc3Vic3RyaW5nKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyBpdGVtLnRlbkhpZW5UaGlEb2lUdW9uZy5zdWJzdHJpbmcoMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmlld0xpbmtJdGVtKGV2dCkge1xyXG4gICAgICAgIHRoaXMudmlld1Jhd0xpbmsoZXZ0KTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVMaW5rSXRlbShldnQpIHtcclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0NvbmZpcm0oJ0LhuqFuIGPDsyBjaOG6r2MgY2jhuq9uIG114buRbiBo4buneSDEkcOtbmgga8OobSBi4bqjbiBnaGkgbsOgeT8nKS50aGVuKGFzeW5jIHJzID0+IHtcclxuICAgICAgICAgICAgaWYgKHJzKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9jb25nVmllY0RpbmhLZW1TZXJ2aWNlLmRlbGV0ZShldnQuaWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZUxpbmtJdGVtTXVsdGlwbGUoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dDb25maXJtKCdC4bqhbiBjw7MgY2jhuq9jIGNo4bqvbiBtdeG7kW4gaOG7p3kgxJHDrW5oIGvDqG0gYuG6o24gZ2hpIG7DoHk/JykudGhlbihhc3luYyBycyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChycykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fY29uZ1ZpZWNEaW5oS2VtU2VydmljZS5kZWxldGVNYW55KHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5tYXAoeCA9PiB4LmlkKS5qb2luKCcsJykpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHRoZW1EaW5oS2VtKCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLl9jb21tb25TZXJ2aWNlLnBhc3RlQnlTdG9yYWdlKCk7XHJcbiAgICAgICAgaWYgKGNvbnRlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgb2JqID0gdGhpcy5wYXJzZUF0dGFjaExpbmsoY29udGVudCk7XHJcbiAgICAgICAgICAgIGlmIChvYmoubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY29uZ1ZpZWNEaW5oS2VtU2VydmljZS50aGVtRGluaEtlbU5naGllcFZ1KHRoaXMudGFza0lkLCBvYmopLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChycy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnVGjDqm0gbeG7pWMgxJHDrW5oIGvDqG0gdGjDoG5oIGPDtG5nIScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmNsZWFyQ2xpcGJvYXJkU3RvcmFnZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93QXR0YWNoTGlua0JveCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dBdHRhY2hMaW5rQm94ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93QXR0YWNoTGlua0JveCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0F0dGFjaExpbmtCb3ggPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhZGRBdHRhY2hMaW5rKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnR5cGVkTGluayAmJiB0aGlzLnR5cGVkTGluay5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHRoaXMucGFyc2VBdHRhY2hMaW5rKHRoaXMudHlwZWRMaW5rKTtcclxuICAgICAgICAgICAgaWYgKG9iai5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jb25nVmllY0RpbmhLZW1TZXJ2aWNlLnRoZW1EaW5oS2VtTmdoaWVwVnUodGhpcy50YXNrSWQsIG9iaikudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCdUaMOqbSBt4bulYyDEkcOtbmgga8OobSB0aMOgbmggY8O0bmchJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0F0dGFjaExpbmtCb3ggPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlZExpbmsgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnTGnDqm4ga+G6v3Qga2jDtG5nIGjhu6NwIGzhu4chJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0xpw6puIGvhur90IGtow7RuZyBo4bujcCBs4buHIScpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0xpw6puIGvhur90IGtow7RuZyBo4bujcCBs4buHIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvY3VzSW5wdXQoaW5wdXQ6IGFueSkge1xyXG4gICAgICAgIGlucHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaHR0cDovL2xvY2FsaG9zdDoyNzIzMC91bml2ZXJzYWwtbGluaz9zZXJ2aWNlQ29kZT1jb25ndmllYyZlbnRpdHk9RE1fUHJpb3JpdHkmZW50aXR5S2V5PTA5MTFmM2U3LTNkYjAtNGI2OC04N2NkLTA3ZDQyNTc0MWU5ZSZzdGF0ZT0mc291cmNlUGF0aD1odHRwOi8vbG9jYWxob3N0OjI3MjMwL2RtLXByaW9yaXR5XHJcbiAgICBwYXJzZUF0dGFjaExpbmsoY29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGxpbmtzID0gY29udGVudC5zcGxpdCgnXFxyXFxuJyk7XHJcbiAgICAgICAgY29uc3Qgb3AgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcclxuICAgICAgICAgICAgY29uc3QgYXJyID0gbGluay5zcGxpdCgnPycpO1xyXG4gICAgICAgICAgICBpZiAoYXJyLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBhcnJbMV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMucGFyc2VRdWVyeVN0cmluZyh0ZW1wKTtcclxuICAgICAgICAgICAgICAgIGlmIChxdWVyeSAmJiBxdWVyeS5zZXJ2aWNlQ29kZSAmJiBxdWVyeS5lbnRpdHkgJiYgcXVlcnkuZW50aXR5S2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlcnkucmF3TGluayA9IGxpbms7XHJcbiAgICAgICAgICAgICAgICAgICAgb3AucHVzaChxdWVyeSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYGxpbmsgJHtsaW5rfSBpbnZhbGlkIHRvIHBhcnNlYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9wO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQWZ0ZXJTYXZlZChldnQpIHtcclxuICAgICAgICAvLyB0aGlzLnNob3dEZXRhaWxGb3JtID0gZmFsc2U7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2FmdGVyIHNhdmVkJywgZXZ0KTtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZVF1ZXJ5U3RyaW5nKHF1ZXJ5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIGlmICghcXVlcnkpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGlmIChxdWVyeS5zdGFydHNXaXRoKCc/JykpIHF1ZXJ5ID0gcXVlcnkuc3Vic3RyaW5nKDEpO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IHF1ZXJ5LnNwbGl0KCcmJyk7XHJcbiAgICAgICAgY29uc3Qgb2JqID0ge307XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGFycikge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gaXRlbS5zcGxpdCgnPScpO1xyXG4gICAgICAgICAgICBpZiAodGVtcFsxXSkge1xyXG4gICAgICAgICAgICAgICAgb2JqW3RlbXBbMF1dID0gZGVjb2RlVVJJQ29tcG9uZW50KHRlbXBbMV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb2JqW3RlbXBbMF1dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG5cclxuICAgIHZpZXdSYXdMaW5rKHJvd0RhdGE6IGFueSkge1xyXG4gICAgICAgIHdpbmRvdy5vcGVuKHJvd0RhdGEubGlua0dvYyk7XHJcbiAgICB9XHJcbn1cclxuIl19
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZ3ZpZWMtZGluaGtlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY29uZ3ZpZWMvY29uZ3ZpZWMvY29uZ3ZpZWMtZGluaGtlbS9jb25ndmllYy1kaW5oa2VtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25ILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUMvRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFOUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFTOUUsTUFBTSxPQUFPLDRCQUE2QixTQUFRLFlBQVk7SUFvQjFELFlBQ0ksUUFBa0IsRUFDVixtQkFBdUMsRUFDdkMsdUJBQStDLEVBQ2hELGVBQWdDO1FBRXZDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUpSLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBb0I7UUFDdkMsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF3QjtRQUNoRCxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUF2QjNDLGVBQVUsR0FBRyxTQUFTLENBQUMs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fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0YUxpc3RCYXNlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9iYXNlL2RhdGEtbGlzdC1iYXNlJztcclxuaW1wb3J0IHsgRm9ybVN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBDb2x1bW5TY2hlbWFCYXNlLCBFbnVtRmlsZUxheW91dCwgSGVpZ2h0VHlwZSwgTW9kZWxTY2hlbWEsIE9wZXJhdG9yIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XHJcbmltcG9ydCB7IEZpbGVEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvZmlsZS1leHBsb3Jlci9zZXJ2aWNlcy9maWxlLWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBHcmlkSW5mbyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xyXG5pbXBvcnQgeyBWaXJ0dWFsQmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy92aXJ0dWFsLWJhc2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbmd2aWVjRGluaGtlbVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb25ndmllYy1kaW5oa2VtLnNlcnZpY2UnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdiYXNlLWNvbmd2aWVjLWRpbmhrZW0nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Nvbmd2aWVjLWRpbmhrZW0uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY29uZ3ZpZWMtZGluaGtlbS5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbQ29tcG9uZW50Q29udGV4dFNlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYXNlQ29uZ3ZpZWNEaW5oa2VtQ29tcG9uZW50IGV4dGVuZHMgRGF0YUxpc3RCYXNlIGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIF9mb3JtU3RhdGUgPSBGb3JtU3RhdGUuVklFVztcclxuICAgIEBJbnB1dCgpIHNldCBmb3JtU3RhdGUodmFsdWU6IEZvcm1TdGF0ZSkge1xyXG4gICAgICAgIHRoaXMuX2Zvcm1TdGF0ZSA9IHZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nSWZJc0Zvcm1WaWV3KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIGdldCBmb3JtU3RhdGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1TdGF0ZTtcclxuICAgIH1cclxuICAgIEBJbnB1dCgpIHRhc2tJZDogYW55O1xyXG5cclxuICAgIHB1YmxpYyBsYXlvdXRGaWxlID0gRW51bUZpbGVMYXlvdXQ7XHJcbiAgICBwdWJsaWMgZW51bUZvcm1TdGF0ZSA9IEZvcm1TdGF0ZTtcclxuXHJcbiAgICBmb3JtTW9kZWw6IGFueSA9IHt9O1xyXG4gICAgc2hvd0F0dGFjaExpbmtCb3ggPSBmYWxzZTtcclxuICAgIHR5cGVkTGluazogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByaXZhdGUgX3ZpcnR1YWxCYXNlU2VydmljZTogVmlydHVhbEJhc2VTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2NvbmdWaWVjRGluaEtlbVNlcnZpY2U6IENvbmd2aWVjRGluaGtlbVNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGZpbGVEYXRhU2VydmljZTogRmlsZURhdGFTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihpbmplY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLm9iamVjdE5hbWUgPSAnbeG7pWMgxJHDrW5oIGvDqG0nO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSA9IHRoaXMuX2NvbmdWaWVjRGluaEtlbVNlcnZpY2U7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlblNldHRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oaWRkZW5TZXR0aW5nUGVybWlzc2lvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlblNldHRpbmdXb3JrZmxvdyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlblNldHRpbmdXb3JrZmxvd05ldyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlblBhZ2VTZXR0aW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuQWR2YW5jZVNlYXJjaCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpZGRlbkZpbHRlclJvdyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmZpeEhlaWdodFR5cGVJbkRpYWxvZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oZWlnaHRUeXBlID0gSGVpZ2h0VHlwZS5keW5hbWljO1xyXG5cclxuICAgICAgICB0aGlzLnNldHRpbmcuc2hvd0V4cG9ydFNlbGVjdGVkSXRlbXMgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5nSWZJc0Zvcm1WaWV3KCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0dGluZy5tb2RlbFNjaGVtYXMgPSBbXHJcbiAgICAgICAgICAgIG5ldyBNb2RlbFNjaGVtYSh7IGZpZWxkOiAndGVuSGllblRoaURvaVR1b25nJywgbmFtZTogJ8SQ4buRaSB0xrDhu6NuZycsIGZ1bGxOYW1lOiAnxJDhu5FpIHTGsOG7o25nJywgZGVzY3JpcHRpb246ICfEkOG7kWkgdMaw4bujbmcnIH0pLFxyXG4gICAgICAgICAgICBuZXcgTW9kZWxTY2hlbWEoeyBmaWVsZDogJ3RpZXVEZScsIG5hbWU6ICdUacOqdSDEkeG7gScsIGZ1bGxOYW1lOiAnVGnDqnUgxJHhu4EnLCBkZXNjcmlwdGlvbjogJ1Rpw6p1IMSR4buBJyB9KSxcclxuICAgICAgICBdO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2xzID0gW1xyXG4gICAgICAgICAgICBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3RpZXVEZScsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1Rpw6p1IMSR4buBJyxcclxuICAgICAgICAgICAgICAgIHNob3dFZGl0TGluazogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAndGlldURlJ1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdmaWxlRGluaEtlbScsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0ZpbGUgxJHDrW5oIGvDqG0nLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdmaWxlRGluaEtlbSdcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICBdO1xyXG4gICAgICAgIHRoaXMucm9vdENvbnRleHQucmVwbGF5U3Vic2NyaWJlKENvbUN0eENvbnN0YW50cy5ST09ULkdBTl9FTlRJVFlfU0FOR19DT05HX1ZJRUMsIHJvd0RhdGEgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRoZW1EaW5oS2VtKGZhbHNlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMucm9vdENvbnRleHQudW5TdWJzY3JpYmxlUmVwbGF5KENvbUN0eENvbnN0YW50cy5ST09ULkdBTl9FTlRJVFlfU0FOR19DT05HX1ZJRUMpO1xyXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0dGluZ0lmSXNGb3JtVmlldygpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuQ2hlY2tib3ggPSB0aGlzLmZvcm1TdGF0ZSA9PSBGb3JtU3RhdGUuVklFVztcclxuICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuRnVuY3Rpb25Db2x1bW4gPSB0aGlzLnNldHRpbmcuaGlkZGVuQ2hlY2tib3g7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbW9kaWZ5R3JpZEluZm8oZ3JpZEluZm8/OiBHcmlkSW5mbykge1xyXG4gICAgICAgIGdyaWRJbmZvLmZpbHRlcnMucHVzaChcclxuICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2lkQ29uZ1ZpZWMnLCBPcGVyYXRvci5lcXVhbCwgdGhpcy50YXNrSWQpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhZnRlckdldERhdGEoKSB7XHJcbiAgICAgICAgY29uc3QgZGljR3JvdXBlZCA9IHt9O1xyXG4gICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWRpY0dyb3VwZWRbaXRlbS5zZXJ2aWNlQ29kZV0pIHtcclxuICAgICAgICAgICAgICAgIGRpY0dyb3VwZWRbaXRlbS5zZXJ2aWNlQ29kZV0gPSB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWRpY0dyb3VwZWRbaXRlbS5zZXJ2aWNlQ29kZV1baXRlbS5lbnRpdHldKSB7XHJcbiAgICAgICAgICAgICAgICBkaWNHcm91cGVkW2l0ZW0uc2VydmljZUNvZGVdW2l0ZW0uZW50aXR5XSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZEhpZW5UaGk6IGl0ZW0uZmllbGRIaWVuVGhpLFxyXG4gICAgICAgICAgICAgICAgICAgIGxzdElkOiBbXVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkaWNHcm91cGVkW2l0ZW0uc2VydmljZUNvZGVdW2l0ZW0uZW50aXR5XS5sc3RJZC5wdXNoKGl0ZW0uZW50aXR5S2V5KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBkYXRhRGlzcGxheU5hbWUgPSBhd2FpdCB0aGlzLl9jb25nVmllY0RpbmhLZW1TZXJ2aWNlLmdldERldGFpbEl0ZW1zKGRpY0dyb3VwZWQpO1xyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLm1vZGVsLmRhdGFTb3VyY2UpIHtcclxuICAgICAgICAgICAgaXRlbS50aWV1RGUgPSBkYXRhRGlzcGxheU5hbWVbaXRlbS5zZXJ2aWNlQ29kZV1baXRlbS5lbnRpdHldW2l0ZW0uZW50aXR5S2V5XTtcclxuICAgICAgICAgICAgaWYgKGl0ZW0udGVuSGllblRoaURvaVR1b25nICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0udGVuSGllblRoaURvaVR1b25nID0gaXRlbS50ZW5IaWVuVGhpRG9pVHVvbmcudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgaXRlbS50ZW5IaWVuVGhpRG9pVHVvbmcgPSBpdGVtLnRlbkhpZW5UaGlEb2lUdW9uZy5zdWJzdHJpbmcoMCwgMSkudG9VcHBlckNhc2UoKSArIGl0ZW0udGVuSGllblRoaURvaVR1b25nLnN1YnN0cmluZygxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhZnRlclJlbG9hZGVkKCkge1xyXG4gICAgICAgIHRoaXMuZmlsZURhdGFTZXJ2aWNlLmdldERhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICB2aWV3TGlua0l0ZW0oZXZ0KSB7XHJcbiAgICAgICAgdGhpcy52aWV3UmF3TGluayhldnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZUxpbmtJdGVtKGV2dCkge1xyXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93Q29uZmlybSgnQuG6oW4gY8OzIGNo4bqvYyBjaOG6r24gbXXhu5FuIGjhu6d5IMSRw61uaCBrw6htIGLhuqNuIGdoaSBuw6B5PycpLnRoZW4oYXN5bmMgcnMgPT4ge1xyXG4gICAgICAgICAgICBpZiAocnMpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NvbmdWaWVjRGluaEtlbVNlcnZpY2UuZGVsZXRlKGV2dC5pZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlTGlua0l0ZW1NdWx0aXBsZShldnQpIHtcclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0NvbmZpcm0oJ0LhuqFuIGPDsyBjaOG6r2MgY2jhuq9uIG114buRbiBo4buneSDEkcOtbmgga8OobSBi4bqjbiBnaGkgbsOgeT8nKS50aGVuKGFzeW5jIHJzID0+IHtcclxuICAgICAgICAgICAgaWYgKHJzKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9jb25nVmllY0RpbmhLZW1TZXJ2aWNlLmRlbGV0ZU1hbnkodGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLm1hcCh4ID0+IHguaWQpLmpvaW4oJywnKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdGhlbURpbmhLZW0oc2hvd05vdGk6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMuX2NvbW1vblNlcnZpY2UucGFzdGVCeVN0b3JhZ2UoKTtcclxuICAgICAgICBpZiAoY29udGVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBvYmogPSB0aGlzLnBhcnNlQXR0YWNoTGluayhjb250ZW50KTtcclxuICAgICAgICAgICAgaWYgKG9iai5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jb25nVmllY0RpbmhLZW1TZXJ2aWNlLnRoZW1EaW5oS2VtTmdoaWVwVnUodGhpcy50YXNrSWQsIG9iaikudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3dOb3RpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ1Row6ptIG3hu6VjIMSRw61uaCBrw6htIHRow6BuaCBjw7RuZyEnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmNsZWFyQ2xpcGJvYXJkU3RvcmFnZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93QXR0YWNoTGlua0JveCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dBdHRhY2hMaW5rQm94ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93QXR0YWNoTGlua0JveCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0F0dGFjaExpbmtCb3ggPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhZGRBdHRhY2hMaW5rKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnR5cGVkTGluayAmJiB0aGlzLnR5cGVkTGluay5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHRoaXMucGFyc2VBdHRhY2hMaW5rKHRoaXMudHlwZWRMaW5rKTtcclxuICAgICAgICAgICAgaWYgKG9iai5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jb25nVmllY0RpbmhLZW1TZXJ2aWNlLnRoZW1EaW5oS2VtTmdoaWVwVnUodGhpcy50YXNrSWQsIG9iaikudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCdUaMOqbSBt4bulYyDEkcOtbmgga8OobSB0aMOgbmggY8O0bmchJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0F0dGFjaExpbmtCb3ggPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlZExpbmsgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxvYWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnTGnDqm4ga+G6v3Qga2jDtG5nIGjhu6NwIGzhu4chJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0xpw6puIGvhur90IGtow7RuZyBo4bujcCBs4buHIScpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0xpw6puIGvhur90IGtow7RuZyBo4bujcCBs4buHIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvY3VzSW5wdXQoaW5wdXQ6IGFueSkge1xyXG4gICAgICAgIGlucHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaHR0cDovL2xvY2FsaG9zdDoyNzIzMC91bml2ZXJzYWwtbGluaz9zZXJ2aWNlQ29kZT1jb25ndmllYyZlbnRpdHk9RE1fUHJpb3JpdHkmZW50aXR5S2V5PTA5MTFmM2U3LTNkYjAtNGI2OC04N2NkLTA3ZDQyNTc0MWU5ZSZzdGF0ZT0mc291cmNlUGF0aD1odHRwOi8vbG9jYWxob3N0OjI3MjMwL2RtLXByaW9yaXR5XHJcbiAgICBwYXJzZUF0dGFjaExpbmsoY29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGxpbmtzID0gY29udGVudC5zcGxpdCgnXFxyXFxuJyk7XHJcbiAgICAgICAgY29uc3Qgb3AgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcclxuICAgICAgICAgICAgY29uc3QgYXJyID0gbGluay5zcGxpdCgnPycpO1xyXG4gICAgICAgICAgICBpZiAoYXJyLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBhcnJbMV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMucGFyc2VRdWVyeVN0cmluZyh0ZW1wKTtcclxuICAgICAgICAgICAgICAgIGlmIChxdWVyeSAmJiBxdWVyeS5zZXJ2aWNlQ29kZSAmJiBxdWVyeS5lbnRpdHkgJiYgcXVlcnkuZW50aXR5S2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlcnkucmF3TGluayA9IGxpbms7XHJcbiAgICAgICAgICAgICAgICAgICAgb3AucHVzaChxdWVyeSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYGxpbmsgJHtsaW5rfSBpbnZhbGlkIHRvIHBhcnNlYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9wO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQWZ0ZXJTYXZlZChldnQpIHtcclxuICAgICAgICAvLyB0aGlzLnNob3dEZXRhaWxGb3JtID0gZmFsc2U7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2FmdGVyIHNhdmVkJywgZXZ0KTtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZVF1ZXJ5U3RyaW5nKHF1ZXJ5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgICAgIGlmICghcXVlcnkpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGlmIChxdWVyeS5zdGFydHNXaXRoKCc/JykpIHF1ZXJ5ID0gcXVlcnkuc3Vic3RyaW5nKDEpO1xyXG4gICAgICAgIGNvbnN0IGFyciA9IHF1ZXJ5LnNwbGl0KCcmJyk7XHJcbiAgICAgICAgY29uc3Qgb2JqID0ge307XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGFycikge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gaXRlbS5zcGxpdCgnPScpO1xyXG4gICAgICAgICAgICBpZiAodGVtcFsxXSkge1xyXG4gICAgICAgICAgICAgICAgb2JqW3RlbXBbMF1dID0gZGVjb2RlVVJJQ29tcG9uZW50KHRlbXBbMV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb2JqW3RlbXBbMF1dID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG5cclxuICAgIHZpZXdSYXdMaW5rKHJvd0RhdGE6IGFueSkge1xyXG4gICAgICAgIHdpbmRvdy5vcGVuKHJvd0RhdGEubGlua0dvYyk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -4,7 +4,7 @@ import { ComponentContextService } from '../../../app-context/component-context.
4
4
  import { DataFormBase } from '../../../classes/base/data-form-base';
5
5
  import { DateCompareValidator } from '../../../classes/base/validators';
6
6
  import { FormState } from '../../../classes/constants';
7
- import { CustomControlSchema, DateTimeControlSchema, DropdownControlSchema, EditorControlSchema, Operator, PercentControlSchema, TextControlSchema } from '../../../classes/form-schema';
7
+ import { CheckboxControlSchema, CustomControlSchema, DateTimeControlSchema, DropdownControlSchema, EditorControlSchema, Operator, PercentControlSchema, TextControlSchema } from '../../../classes/form-schema';
8
8
  import { CrudListComponent } from '../../../components/crud/crud-list/crud-list.component';
9
9
  import { WorkflowPermissionDetailService } from '../../../components/workflow/services/workflow-permission-detail.service';
10
10
  import { ComCtxConstants } from '../../../configs/component-context.constant';
@@ -51,6 +51,7 @@ export class BaseCongViecFormComponent extends DataFormBase {
51
51
  },
52
52
  ];
53
53
  this.buttons = [];
54
+ this.mdWidthWorkflow = 6;
54
55
  this.handleChangeLoaiCongViecWhenAdd = (evt) => __awaiter(this, void 0, void 0, function* () {
55
56
  if (evt.eventType == 'change') {
56
57
  yield this.loadWorkflowByLoaiCongViec(evt, evt.model.id);
@@ -90,15 +91,6 @@ export class BaseCongViecFormComponent extends DataFormBase {
90
91
  label: 'Mô tả nội dung',
91
92
  mdWidth: 12
92
93
  }),
93
- new DropdownControlSchema({
94
- field: 'idLoaiCongViec',
95
- label: 'Phân loại',
96
- baseService: this._dmLoaiCongViecService,
97
- isTree: true,
98
- fieldTree: 'idParent',
99
- valueParentRoot: null,
100
- onChanged: onChangeLoaiCongViec
101
- }),
102
94
  new DropdownControlSchema({
103
95
  field: 'idPriority',
104
96
  label: 'Độ ưu tiên',
@@ -124,11 +116,31 @@ export class BaseCongViecFormComponent extends DataFormBase {
124
116
  }),
125
117
  new PercentControlSchema({
126
118
  field: 'phanTram',
127
- mdWidth: 12,
119
+ mdWidth: 6,
128
120
  label: 'Tiến độ'
129
121
  }),
122
+ new DropdownControlSchema({
123
+ field: 'idLoaiCongViec',
124
+ label: 'Phân loại công việc',
125
+ baseService: this._dmLoaiCongViecService,
126
+ isTree: true,
127
+ fieldTree: 'idParent',
128
+ valueParentRoot: null,
129
+ sorts: [{ field: 'maPhanCap', dir: 1 }],
130
+ onChanged: onChangeLoaiCongViec
131
+ })
130
132
  ];
131
133
  this.addSchemaBase();
134
+ if (this._isFormAddNew()) {
135
+ this.setting.schema.push(new CheckboxControlSchema({
136
+ field: 'autoNextStep',
137
+ label: 'Tự động chuyển bước đầu tiên',
138
+ class: 'mg-top-0',
139
+ showLabel: false,
140
+ mdWidth: 6,
141
+ hiddenCheck: (rootModel) => !rootModel._WorkflowCode
142
+ }));
143
+ }
132
144
  }
133
145
  onFormInitialized(evt) {
134
146
  return __awaiter(this, void 0, void 0, function* () {
@@ -244,4 +256,4 @@ BaseCongViecFormComponent.propDecorators = {
244
256
  tenCongViec: [{ type: Input }],
245
257
  onAfterSaved: [{ type: Output }]
246
258
  };
247
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZ3ZpZWMtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY29uZ3ZpZWMvY29uZ3ZpZWMvY29uZ3ZpZWMtZm9ybS9jb25ndmllYy1mb3JtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQ0gsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDckIsbUJBQW1CLEVBR25CLFFBQVEsRUFDUixvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ3BCLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDM0YsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDM0gsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUMxRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUNqRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNuRixPQUFP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VyxDQUFDLEdBQUc7UUFDWCxJQUFJLENBQUMsZUFBZSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQzlDLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxLQUFLO1FBQzNCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDaEYsQ0FBQzs7O1lBMU9KLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsb0JBQW9CO2dCQUM5QixpdUZBQTZDO2dCQUU3QyxTQUFTLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQzs7YUFDdkM7OztZQWhDaUMsUUFBUTtZQXlCakMsZUFBZTtZQUhmLHFCQUFxQjtZQURyQix3QkFBd0I7WUFFeEIsaUJBQWlCO1lBTmpCLCtCQUErQjs7O3VCQWlCbkMsS0FBSztzQkFDTCxLQUFLOzBCQUVMLEtBQUs7MkJBS0wsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGFGb3JtQmFzZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvYmFzZS9kYXRhLWZvcm0tYmFzZSc7XHJcbmltcG9ydCB7IERhdGVDb21wYXJlVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9iYXNlL3ZhbGlkYXRvcnMnO1xyXG5pbXBvcnQgeyBGb3JtU3RhdGUgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7XHJcbiAgICBDdXN0b21Db250cm9sU2NoZW1hLFxyXG4gICAgRGF0ZVRpbWVDb250cm9sU2NoZW1hLFxyXG4gICAgRHJvcGRvd25Db250cm9sU2NoZW1hLFxyXG4gICAgRWRpdG9yQ29udHJvbFNjaGVtYSxcclxuICAgIEV2ZW50RGF0YSxcclxuICAgIEZvcm1Db250cm9sQmFzZSxcclxuICAgIE9wZXJhdG9yLFxyXG4gICAgUGVyY2VudENvbnRyb2xTY2hlbWEsXHJcbiAgICBUZXh0Q29udHJvbFNjaGVtYVxyXG59IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xyXG5pbXBvcnQgeyBDcnVkTGlzdENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvY3J1ZC9jcnVkLWxpc3QvY3J1ZC1saXN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L3NlcnZpY2VzL3dvcmtmbG93LXBlcm1pc3Npb24tZGV0YWlsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMgfSBmcm9tICcuLi8uLi8uLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcclxuaW1wb3J0IHsgUGVybWlzc2lvbkJhc2UgfSBmcm9tICcuLi8uLi8uLi9lbnVtcy9jb21tb24nO1xyXG5pbXBvcnQgeyBSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9yZXNwb25zZS1yZXN1bHQnO1xyXG5pbXBvcnQgeyBEbUxpbmhWdWNDb25nVmllY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9kbS1saW5odnVjLWNvbmd2aWVjL3NlcnZpY2VzL2RtLWxpbmh2dWMtY29uZ3ZpZWMuc2VydmljZSc7XHJcbmltcG9ydCB7IERtTG9haUNvbmdWaWVjU2VydmljZSB9IGZyb20gJy4uLy4uL2RtLWxvYWktY29uZ3ZpZWMvc2VydmljZXMvZG0tbG9haS1jb25ndmllYy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRG1Qcmlvcml0eVNlcnZpY2UgfSBmcm9tICcuLi8uLi9kbS1wcmlvcml0eS9zZXJ2aWNlcy9kbS1wcmlvcml0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW51bUxvYWlEYW5oU2FjaENvbmdWaWVjIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2VudW1zJztcclxuaW1wb3J0IHsgQ29uZ1ZpZWNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29uZ3ZpZWMuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYmFzZS1jb25ndmllYy1mb3JtJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb25ndmllYy1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2Nvbmd2aWVjLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW0NvbXBvbmVudENvbnRleHRTZXJ2aWNlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEJhc2VDb25nVmllY0Zvcm1Db21wb25lbnQgZXh0ZW5kcyBEYXRhRm9ybUJhc2UgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgQElucHV0KCkgY3J1ZExpc3Q6IENydWRMaXN0Q29tcG9uZW50O1xyXG4gICAgQElucHV0KCkgY29udHJvbDogQ3VzdG9tQ29udHJvbFNjaGVtYTtcclxuICAgIF90ZW5Db25nVmllYzogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgc2V0IHRlbkNvbmdWaWVjKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl90ZW5Db25nVmllYyA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuc2V0VGVuQ29uZ1ZpZWMoKTtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KCkgb25BZnRlclNhdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBhdXRvRm9jdXMgPSB0cnVlO1xyXG4gICAgcHVibGljIGVudW1Gb3JtU3RhdGUgPSBGb3JtU3RhdGU7XHJcbiAgICBlbnVtTG9haURhbmhTYWNoQ29uZ1ZpZWMgPSBFbnVtTG9haURhbmhTYWNoQ29uZ1ZpZWM7XHJcbiAgICBjdXJyZW50VGFiSW5kZXg6IG51bWJlcjtcclxuICAgIHVzZXJzOiB7XHJcbiAgICAgICAgdGFza05hbWU6IHN0cmluZyxcclxuICAgICAgICBhc3NpZ25lZTogYW55LFxyXG4gICAgICAgIGFzc2lnbmVyOiBhbnksXHJcbiAgICAgICAgcmVsYXRlZFVzZXJzOiBhbnlbXVxyXG4gICAgfSA9IHtcclxuICAgICAgICAgICAgdGFza05hbWU6ICcnLFxyXG4gICAgICAgICAgICBhc3NpZ25lcjogMCxcclxuICAgICAgICAgICAgYXNzaWduZWU6IDAsXHJcbiAgICAgICAgICAgIHJlbGF0ZWRVc2VyczogW10sXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICB0YWJEYXRhQ2hpbGQ6IGFueVtdID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29kZTogJ2ZpbGVEaW5oS2VtJyxcclxuICAgICAgICAgICAgaWNvbjogJ3BpIHBpLXBhcGVyY2xpcCcsXHJcbiAgICAgICAgICAgIGxhYmVsOiAnRmlsZSDEkcOtbmgga8OobSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29kZTogJ3Rhc2tDaGlsZCcsXHJcbiAgICAgICAgICAgIGljb246ICdwaSBwaS1jaGVjay1zcXVhcmUnLFxyXG4gICAgICAgICAgICBsYWJlbDogJ0PDtG5nIHZp4buHYyBjb24nXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvZGU6ICd0YXNrTGllblF1YW4nLFxyXG4gICAgICAgICAgICBpY29uOiAncGkgcGktc2hhcmUtYWx0JyxcclxuICAgICAgICAgICAgbGFiZWw6ICdDw7RuZyB2aeG7h2MgbGnDqm4gcXVhbidcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIHtcclxuICAgICAgICAvLyAgICAgY29kZTogJ3RyYW9Eb2lDb25nVmllYycsXHJcbiAgICAgICAgLy8gICAgIGljb246ICdwaSBwaS1jb21tZW50JyxcclxuICAgICAgICAvLyAgICAgbGFiZWw6ICdUcmFvIMSR4buVaSBjw7RuZyB2aeG7h2MnLFxyXG4gICAgICAgIC8vIH1cclxuICAgIF07XHJcbiAgICBidXR0b25zOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByb3RlY3RlZCBfaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByaXZhdGUgX2NvbmdWaWVjU2VydmljZTogQ29uZ1ZpZWNTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2RtTG9haUNvbmdWaWVjU2VydmljZTogRG1Mb2FpQ29uZ1ZpZWNTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2RtTGluaFZ1Y0NvbmdWaWVjU2VydmljZTogRG1MaW5oVnVjQ29uZ1ZpZWNTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2RtUHJpb3JpdHlTZXJ2aWNlOiBEbVByaW9yaXR5U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF93b3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlOiBXb3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihfaW5qZWN0b3IpO1xyXG4gICAgICAgIHRoaXMudXNlcnMuYXNzaWduZXIgPSAwO1xyXG4gICAgICAgIHRoaXMudXNlcnMuYXNzaWduZWUgPSAwO1xyXG4gICAgICAgIHRoaXMudXNlcnMucmVsYXRlZFVzZXJzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuX2NvbXBvbmVudCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy5hdXRvRm9jdXMgPSAhdGhpcy5jb250cm9sO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSA9IHRoaXMuX2NvbmdWaWVjU2VydmljZTtcclxuICAgICAgICBsZXQgb25DaGFuZ2VMb2FpQ29uZ1ZpZWMgPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0Zvcm1BZGROZXcoKSkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZUxvYWlDb25nVmllYyA9IHRoaXMuaGFuZGxlQ2hhbmdlTG9haUNvbmdWaWVjV2hlbkFkZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZm9ybVN0YXRlID09IEZvcm1TdGF0ZS5BREQpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhLmlkID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0dGluZy5zY2hlbWEgPSA8Rm9ybUNvbnRyb2xCYXNlW10+W1xyXG4gICAgICAgICAgICBuZXcgVGV4dENvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICd0ZW4nLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdUw6puIGPDtG5nIHZp4buHYycsXHJcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIG1kV2lkdGg6IDEyXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgRWRpdG9yQ29udHJvbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ21vVGEnLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdNw7QgdOG6oyBu4buZaSBkdW5nJyxcclxuICAgICAgICAgICAgICAgIG1kV2lkdGg6IDEyXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgRHJvcGRvd25Db250cm9sU2NoZW1hKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnaWRMb2FpQ29uZ1ZpZWMnLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdQaMOibiBsb+G6oWknLFxyXG4gICAgICAgICAgICAgICAgYmFzZVNlcnZpY2U6IHRoaXMuX2RtTG9haUNvbmdWaWVjU2VydmljZSxcclxuICAgICAgICAgICAgICAgIGlzVHJlZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGZpZWxkVHJlZTogJ2lkUGFyZW50JyxcclxuICAgICAgICAgICAgICAgIHZhbHVlUGFyZW50Um9vdDogbnVsbCxcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlZDogb25DaGFuZ2VMb2FpQ29uZ1ZpZWNcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBEcm9wZG93bkNvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpZFByaW9yaXR5JyxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnxJDhu5kgxrB1IHRpw6puJyxcclxuICAgICAgICAgICAgICAgIGJhc2VTZXJ2aWNlOiB0aGlzLl9kbVByaW9yaXR5U2VydmljZVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IERyb3Bkb3duQ29udHJvbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2lkTGluaFZ1YycsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ0zEqW5oIHbhu7FjJyxcclxuICAgICAgICAgICAgICAgIGJhc2VTZXJ2aWNlOiB0aGlzLl9kbUxpbmhWdWNDb25nVmllY1NlcnZpY2VcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBEYXRlVGltZUNvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICduZ2F5QmF0RGF1JyxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnTmfDoHkgYuG6r3QgxJHhuqd1JyxcclxuICAgICAgICAgICAgICAgIG1kV2lkdGg6IDNcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBEYXRlVGltZUNvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICduZ2F5S2V0VGh1YycsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ05nw6B5IGvhur90IHRow7pjJyxcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnM6IFtcclxuICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZUNvbXBhcmVWYWxpZGF0b3IoT3BlcmF0b3IuZ3JlYXRlclRoYW5FcXVhbCwgJ25nYXlCYXREYXUnKVxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIG1kV2lkdGg6IDNcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBQZXJjZW50Q29udHJvbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3BoYW5UcmFtJyxcclxuICAgICAgICAgICAgICAgIG1kV2lkdGg6IDEyLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdUaeG6v24gxJHhu5knXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy5hZGRTY2hlbWFCYXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25Gb3JtSW5pdGlhbGl6ZWQoZXZ0OiBFdmVudERhdGEpIHtcclxuICAgICAgICBpZiAodGhpcy5faXNGb3JtQWRkTmV3KCkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbCAmJiB0aGlzLmNvbnRyb2wuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihldnQubW9kZWwsIHRoaXMuY29udHJvbC5kYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZXZ0Lm1vZGVsLmlkTG9haUNvbmdWaWVjKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRXb3JrZmxvd0J5TG9haUNvbmdWaWVjKGV2dCwgZXZ0Lm1vZGVsLmlkTG9haUNvbmdWaWVjKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGVuQ29uZ1ZpZWMoKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5kYXRhID0geyAuLi50aGlzLm1vZGVsLmRhdGEsIHRlbjogdGhpcy5fdGVuQ29uZ1ZpZWMgfTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBtb2RpZnlEZXRhaWxEYXRhKGRhdGE6IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlV29ya2Zsb3dCdXR0b24oZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJXb3JrZmxvd0J1dHRvbnMoKSB7XHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2VuZXJhdGVXb3JrZmxvd0J1dHRvbihkYXRhOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XHJcbiAgICAgICAgY29uc3QgdXNlcklkQ3VycmVudCA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldElkKCk7XHJcbiAgICAgICAgLy8gTOG6pXkgcmEgdHLhuqFuZyB0aMOhaSBxdXkgdHLDrG5oXHJcbiAgICAgICAgY29uc3QgbHN0SXRlbVN0YXR1cyA9IChhd2FpdCB0aGlzLl93b3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlLmdldEFsbChcclxuICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2l0ZW1JZCcsIE9wZXJhdG9yLmVxdWFsLCBkYXRhLmlkKSxcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCd1c2VySWQnLCBPcGVyYXRvci5lcXVhbCwgdXNlcklkQ3VycmVudClcclxuICAgICAgICAgICAgXSwgJ2l0ZW1JZCx1c2VySWQsdHJhbmdUaGFpLHRleHRUcmFuZ1RoYWksd29ya2Zsb3dDb2RlLHBlcm1pc3Npb24nXHJcbiAgICAgICAgKSkuZGF0YTtcclxuICAgICAgICBpZiAobHN0SXRlbVN0YXR1cyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyBs4bqleSDEkcaw4bujYyB0aMO0bmcgdGluIHRy4bqhbmcgdGjDoWkgaGnhu4duIHThuqFpIGPhu6dhIGLhuqNuIGdoaScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgaXRlbVN0YXR1cyA9IG51bGw7XHJcbiAgICAgICAgaWYgKCFsc3RJdGVtU3RhdHVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBpdGVtU3RhdHVzID0ge1xyXG4gICAgICAgICAgICAgICAgdGV4dFRyYW5nVGhhaTogJ0NoxrBhIGNo4bqheSBxdXkgdHLDrG5oJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaXRlbVN0YXR1cyA9IGxzdEl0ZW1TdGF0dXMuZmluZChxID0+IChxLnBlcm1pc3Npb24gJiBQZXJtaXNzaW9uQmFzZS5FRElUKSA9PSBQZXJtaXNzaW9uQmFzZS5FRElUKTtcclxuICAgICAgICAgICAgaWYgKGl0ZW1TdGF0dXMgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgaXRlbVN0YXR1cyA9IGxzdEl0ZW1TdGF0dXNbMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRhdGEuX190cmFuZ1RoYWkgPSBpdGVtU3RhdHVzLnRyYW5nVGhhaTtcclxuICAgICAgICBkYXRhLl9fdGV4dFRyYW5nVGhhaSA9IGl0ZW1TdGF0dXMudGV4dFRyYW5nVGhhaTtcclxuICAgICAgICBkYXRhLl9fd29ya2Zsb3dDb2RlID0gaXRlbVN0YXR1cy53b3JrZmxvd0NvZGU7XHJcbiAgICAgICAgZGF0YS5fX3Blcm1pc3Npb24gPSBpdGVtU3RhdHVzLnBlcm1pc3Npb247XHJcbiAgICAgICAgaWYgKHRoaXMuY3J1ZExpc3QpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0R2V0QWN0aW9uV29ya2Zsb3cgPSBhd2FpdCB0aGlzLmNydWRMaXN0LmdldEFjdGlvbldvcmtmbG93TmV3KGRhdGEpO1xyXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0R2V0QWN0aW9uV29ya2Zsb3cpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IFtidXR0b25Db250ZXh0c10gPSByZXN1bHRHZXRBY3Rpb25Xb3JrZmxvdztcclxuICAgICAgICAgICAgdGhpcy5idXR0b25zID0gYnV0dG9uQ29udGV4dHM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGjhuqNpIGTDuW5nIGjDoG0gbsOgeSB2w6wgbsOzIGNo4bqheSBzYXUgbG9naWMgc3dpdGNoIHZpZXcgbW9kZSBj4bunYSBiYXNlXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIG9uQWZ0ZXJHZXREZXRhaWwoKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0RGlzYWJsZUNvbnRyb2woJ2lkTG9haUNvbmdWaWVjJywgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlQ2hhbmdlTG9haUNvbmdWaWVjV2hlbkFkZCA9IGFzeW5jIChldnQ6IEV2ZW50RGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChldnQuZXZlbnRUeXBlID09ICdjaGFuZ2UnKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFdvcmtmbG93QnlMb2FpQ29uZ1ZpZWMoZXZ0LCBldnQubW9kZWwuaWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgYXN5bmMgbG9hZFdvcmtmbG93QnlMb2FpQ29uZ1ZpZWMoZXZ0OiBFdmVudERhdGEsIGlkTG9haUNvbmdWaWVjOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIWlkTG9haUNvbmdWaWVjKSB7XHJcbiAgICAgICAgICAgIGlkTG9haUNvbmdWaWVjID0gZXZ0Lm1vZGVsLmlkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB3b3JrZmxvd1NldHRpbmcgPSBhd2FpdCB0aGlzLl9kbUxvYWlDb25nVmllY1NlcnZpY2UuZ2V0V29ya2Zsb3dTZXR0aW5nQnlJZExvYWlDb25nVmllYyhpZExvYWlDb25nVmllYyk7XHJcbiAgICAgICAgdGhpcy5zZXRXb3JrZmxvd0RhdGFzb3VyY2UoZXZ0LCB3b3JrZmxvd1NldHRpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQWZ0ZXJTYXZlKHJlczogUmVzcG9uc2VSZXN1bHQpIHtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbC5mb3JtU3RhdGUgPT0gRm9ybVN0YXRlLkFERCAmJiByZXMgJiYgcmVzLnN1Y2Nlc3MgJiYgcmVzLmRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5vbkFmdGVyU2F2ZWQuZW1pdChyZXMuZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uVGFiQ2hhbmdlKGV2dCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRhYkluZGV4ID0gZXZ0LmluZGV4O1xyXG4gICAgICAgIHRoaXMudXNlcnMudGFza05hbWUgPSB0aGlzLm1vZGVsLmRhdGEudGVuO1xyXG4gICAgfVxyXG5cclxuICAgIGZvcmN1c1RvRmlyc3RJbnB1dENvbnRyb2woZXZlbnQpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5GT0NVU19UT19GSVJTVF9JTlBVVF9DT05UUk9MKTtcclxuICAgIH1cclxuXHJcblxyXG59XHJcblxyXG4iXX0=
259
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZ3ZpZWMtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY29uZ3ZpZWMvY29uZ3ZpZWMvY29uZ3ZpZWMtZm9ybS9jb25ndmllYy1mb3JtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RCxPQUFPLEVBQ0gscUJBQXFCLEVBQ3JCLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLG1CQUFtQixFQUduQixRQUFRLEVBQ1Isb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUNwQixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzNGLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBQzNILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdkQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDMUcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDakcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0RBQWdELENB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QUFLOzJCQUtMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEYXRhRm9ybUJhc2UgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Jhc2UvZGF0YS1mb3JtLWJhc2UnO1xyXG5pbXBvcnQgeyBEYXRlQ29tcGFyZVZhbGlkYXRvciB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvYmFzZS92YWxpZGF0b3JzJztcclxuaW1wb3J0IHsgRm9ybVN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9jb25zdGFudHMnO1xyXG5pbXBvcnQge1xyXG4gICAgQ2hlY2tib3hDb250cm9sU2NoZW1hLFxyXG4gICAgQ3VzdG9tQ29udHJvbFNjaGVtYSxcclxuICAgIERhdGVUaW1lQ29udHJvbFNjaGVtYSxcclxuICAgIERyb3Bkb3duQ29udHJvbFNjaGVtYSxcclxuICAgIEVkaXRvckNvbnRyb2xTY2hlbWEsXHJcbiAgICBFdmVudERhdGEsXHJcbiAgICBGb3JtQ29udHJvbEJhc2UsXHJcbiAgICBPcGVyYXRvcixcclxuICAgIFBlcmNlbnRDb250cm9sU2NoZW1hLFxyXG4gICAgVGV4dENvbnRyb2xTY2hlbWFcclxufSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgQ3J1ZExpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2NydWQvY3J1ZC1saXN0L2NydWQtbGlzdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBXb3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy93b3JrZmxvdy9zZXJ2aWNlcy93b3JrZmxvdy1wZXJtaXNzaW9uLWRldGFpbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25CYXNlIH0gZnJvbSAnLi4vLi4vLi4vZW51bXMvY29tbW9uJztcclxuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcclxuaW1wb3J0IHsgRG1MaW5oVnVjQ29uZ1ZpZWNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZG0tbGluaHZ1Yy1jb25ndmllYy9zZXJ2aWNlcy9kbS1saW5odnVjLWNvbmd2aWVjLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEbUxvYWlDb25nVmllY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9kbS1sb2FpLWNvbmd2aWVjL3NlcnZpY2VzL2RtLWxvYWktY29uZ3ZpZWMuc2VydmljZSc7XHJcbmltcG9ydCB7IERtUHJpb3JpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZG0tcHJpb3JpdHkvc2VydmljZXMvZG0tcHJpb3JpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudW1Mb2FpRGFuaFNhY2hDb25nVmllYyB9IGZyb20gJy4uLy4uL21vZGVscy9lbnVtcyc7XHJcbmltcG9ydCB7IENvbmdWaWVjU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Nvbmd2aWVjLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2Jhc2UtY29uZ3ZpZWMtZm9ybScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29uZ3ZpZWMtZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb25ndmllYy1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtDb21wb25lbnRDb250ZXh0U2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYXNlQ29uZ1ZpZWNGb3JtQ29tcG9uZW50IGV4dGVuZHMgRGF0YUZvcm1CYXNlIGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIEBJbnB1dCgpIGNydWRMaXN0OiBDcnVkTGlzdENvbXBvbmVudDtcclxuICAgIEBJbnB1dCgpIGNvbnRyb2w6IEN1c3RvbUNvbnRyb2xTY2hlbWE7XHJcbiAgICBfdGVuQ29uZ1ZpZWM6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHNldCB0ZW5Db25nVmllYyh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fdGVuQ29uZ1ZpZWMgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLnNldFRlbkNvbmdWaWVjKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpIG9uQWZ0ZXJTYXZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgYXV0b0ZvY3VzID0gdHJ1ZTtcclxuICAgIHB1YmxpYyBlbnVtRm9ybVN0YXRlID0gRm9ybVN0YXRlO1xyXG4gICAgZW51bUxvYWlEYW5oU2FjaENvbmdWaWVjID0gRW51bUxvYWlEYW5oU2FjaENvbmdWaWVjO1xyXG4gICAgY3VycmVudFRhYkluZGV4OiBudW1iZXI7XHJcbiAgICB1c2Vyczoge1xyXG4gICAgICAgIHRhc2tOYW1lOiBzdHJpbmcsXHJcbiAgICAgICAgYXNzaWduZWU6IGFueSxcclxuICAgICAgICBhc3NpZ25lcjogYW55LFxyXG4gICAgICAgIHJlbGF0ZWRVc2VyczogYW55W11cclxuICAgIH0gPSB7XHJcbiAgICAgICAgICAgIHRhc2tOYW1lOiAnJyxcclxuICAgICAgICAgICAgYXNzaWduZXI6IDAsXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiAwLFxyXG4gICAgICAgICAgICByZWxhdGVkVXNlcnM6IFtdLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgdGFiRGF0YUNoaWxkOiBhbnlbXSA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvZGU6ICdmaWxlRGluaEtlbScsXHJcbiAgICAgICAgICAgIGljb246ICdwaSBwaS1wYXBlcmNsaXAnLFxyXG4gICAgICAgICAgICBsYWJlbDogJ0ZpbGUgxJHDrW5oIGvDqG0nXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIGNvZGU6ICd0YXNrQ2hpbGQnLFxyXG4gICAgICAgICAgICBpY29uOiAncGkgcGktY2hlY2stc3F1YXJlJyxcclxuICAgICAgICAgICAgbGFiZWw6ICdDw7RuZyB2aeG7h2MgY29uJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb2RlOiAndGFza0xpZW5RdWFuJyxcclxuICAgICAgICAgICAgaWNvbjogJ3BpIHBpLXNoYXJlLWFsdCcsXHJcbiAgICAgICAgICAgIGxhYmVsOiAnQ8O0bmcgdmnhu4djIGxpw6puIHF1YW4nXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyB7XHJcbiAgICAgICAgLy8gICAgIGNvZGU6ICd0cmFvRG9pQ29uZ1ZpZWMnLFxyXG4gICAgICAgIC8vICAgICBpY29uOiAncGkgcGktY29tbWVudCcsXHJcbiAgICAgICAgLy8gICAgIGxhYmVsOiAnVHJhbyDEkeG7lWkgY8O0bmcgdmnhu4djJyxcclxuICAgICAgICAvLyB9XHJcbiAgICBdO1xyXG4gICAgYnV0dG9uczogYW55W10gPSBbXTtcclxuICAgIG1kV2lkdGhXb3JrZmxvdyA9IDY7XHJcbiAgICBtZExvYWlDb25nVmllYzogbnVtYmVyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByb3RlY3RlZCBfaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHByaXZhdGUgX2NvbmdWaWVjU2VydmljZTogQ29uZ1ZpZWNTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2RtTG9haUNvbmdWaWVjU2VydmljZTogRG1Mb2FpQ29uZ1ZpZWNTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2RtTGluaFZ1Y0NvbmdWaWVjU2VydmljZTogRG1MaW5oVnVjQ29uZ1ZpZWNTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2RtUHJpb3JpdHlTZXJ2aWNlOiBEbVByaW9yaXR5U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF93b3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlOiBXb3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihfaW5qZWN0b3IpO1xyXG4gICAgICAgIHRoaXMudXNlcnMuYXNzaWduZXIgPSAwO1xyXG4gICAgICAgIHRoaXMudXNlcnMuYXNzaWduZWUgPSAwO1xyXG4gICAgICAgIHRoaXMudXNlcnMucmVsYXRlZFVzZXJzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuX2NvbXBvbmVudCA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICAgICAgdGhpcy5hdXRvRm9jdXMgPSAhdGhpcy5jb250cm9sO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSA9IHRoaXMuX2NvbmdWaWVjU2VydmljZTtcclxuICAgICAgICBsZXQgb25DaGFuZ2VMb2FpQ29uZ1ZpZWMgPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0Zvcm1BZGROZXcoKSkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZUxvYWlDb25nVmllYyA9IHRoaXMuaGFuZGxlQ2hhbmdlTG9haUNvbmdWaWVjV2hlbkFkZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuZm9ybVN0YXRlID09IEZvcm1TdGF0ZS5BREQpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhLmlkID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0dGluZy5zY2hlbWEgPSA8Rm9ybUNvbnRyb2xCYXNlW10+W1xyXG4gICAgICAgICAgICBuZXcgVGV4dENvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICd0ZW4nLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdUw6puIGPDtG5nIHZp4buHYycsXHJcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIG1kV2lkdGg6IDEyXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgRWRpdG9yQ29udHJvbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ21vVGEnLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdNw7QgdOG6oyBu4buZaSBkdW5nJyxcclxuICAgICAgICAgICAgICAgIG1kV2lkdGg6IDEyXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgRHJvcGRvd25Db250cm9sU2NoZW1hKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnaWRQcmlvcml0eScsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ8SQ4buZIMawdSB0acOqbicsXHJcbiAgICAgICAgICAgICAgICBiYXNlU2VydmljZTogdGhpcy5fZG1Qcmlvcml0eVNlcnZpY2VcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBEcm9wZG93bkNvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpZExpbmhWdWMnLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdMxKluaCB24buxYycsXHJcbiAgICAgICAgICAgICAgICBiYXNlU2VydmljZTogdGhpcy5fZG1MaW5oVnVjQ29uZ1ZpZWNTZXJ2aWNlXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgRGF0ZVRpbWVDb250cm9sU2NoZW1hKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnbmdheUJhdERhdScsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJ05nw6B5IGLhuq90IMSR4bqndScsXHJcbiAgICAgICAgICAgICAgICBtZFdpZHRoOiAzXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgRGF0ZVRpbWVDb250cm9sU2NoZW1hKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnbmdheUtldFRodWMnLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdOZ8OgeSBr4bq/dCB0aMO6YycsXHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3JzOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3IERhdGVDb21wYXJlVmFsaWRhdG9yKE9wZXJhdG9yLmdyZWF0ZXJUaGFuRXF1YWwsICduZ2F5QmF0RGF1JylcclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICBtZFdpZHRoOiAzXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgUGVyY2VudENvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdwaGFuVHJhbScsXHJcbiAgICAgICAgICAgICAgICBtZFdpZHRoOiA2LFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdUaeG6v24gxJHhu5knXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBuZXcgRHJvcGRvd25Db250cm9sU2NoZW1hKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnaWRMb2FpQ29uZ1ZpZWMnLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdQaMOibiBsb+G6oWkgY8O0bmcgdmnhu4djJyxcclxuICAgICAgICAgICAgICAgIGJhc2VTZXJ2aWNlOiB0aGlzLl9kbUxvYWlDb25nVmllY1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBpc1RyZWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBmaWVsZFRyZWU6ICdpZFBhcmVudCcsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZVBhcmVudFJvb3Q6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBzb3J0czogW3sgZmllbGQ6ICdtYVBoYW5DYXAnLCBkaXI6IDEgfV0sXHJcbiAgICAgICAgICAgICAgICBvbkNoYW5nZWQ6IG9uQ2hhbmdlTG9haUNvbmdWaWVjXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgXTtcclxuICAgICAgICB0aGlzLmFkZFNjaGVtYUJhc2UoKTtcclxuICAgICAgICBpZiAodGhpcy5faXNGb3JtQWRkTmV3KCkpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnNjaGVtYS5wdXNoKFxyXG4gICAgICAgICAgICAgICAgbmV3IENoZWNrYm94Q29udHJvbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdhdXRvTmV4dFN0ZXAnLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnVOG7sSDEkeG7mW5nIGNodXnhu4NuIGLGsOG7m2MgxJHhuqd1IHRpw6puJyxcclxuICAgICAgICAgICAgICAgICAgICBjbGFzczogJ21nLXRvcC0wJyxcclxuICAgICAgICAgICAgICAgICAgICBzaG93TGFiZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIG1kV2lkdGg6IDYsXHJcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuQ2hlY2s6IChyb290TW9kZWwpID0+ICFyb290TW9kZWwuX1dvcmtmbG93Q29kZVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25Gb3JtSW5pdGlhbGl6ZWQoZXZ0OiBFdmVudERhdGEpIHtcclxuICAgICAgICBpZiAodGhpcy5faXNGb3JtQWRkTmV3KCkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbCAmJiB0aGlzLmNvbnRyb2wuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihldnQubW9kZWwsIHRoaXMuY29udHJvbC5kYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZXZ0Lm1vZGVsLmlkTG9haUNvbmdWaWVjKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRXb3JrZmxvd0J5TG9haUNvbmdWaWVjKGV2dCwgZXZ0Lm1vZGVsLmlkTG9haUNvbmdWaWVjKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGVuQ29uZ1ZpZWMoKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5kYXRhID0geyAuLi50aGlzLm1vZGVsLmRhdGEsIHRlbjogdGhpcy5fdGVuQ29uZ1ZpZWMgfTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBtb2RpZnlEZXRhaWxEYXRhKGRhdGE6IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmdlbmVyYXRlV29ya2Zsb3dCdXR0b24oZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJXb3JrZmxvd0J1dHRvbnMoKSB7XHJcbiAgICAgICAgdGhpcy5idXR0b25zID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2VuZXJhdGVXb3JrZmxvd0J1dHRvbihkYXRhOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XHJcbiAgICAgICAgY29uc3QgdXNlcklkQ3VycmVudCA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldElkKCk7XHJcbiAgICAgICAgLy8gTOG6pXkgcmEgdHLhuqFuZyB0aMOhaSBxdXkgdHLDrG5oXHJcbiAgICAgICAgY29uc3QgbHN0SXRlbVN0YXR1cyA9IChhd2FpdCB0aGlzLl93b3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlLmdldEFsbChcclxuICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2l0ZW1JZCcsIE9wZXJhdG9yLmVxdWFsLCBkYXRhLmlkKSxcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCd1c2VySWQnLCBPcGVyYXRvci5lcXVhbCwgdXNlcklkQ3VycmVudClcclxuICAgICAgICAgICAgXSwgJ2l0ZW1JZCx1c2VySWQsdHJhbmdUaGFpLHRleHRUcmFuZ1RoYWksd29ya2Zsb3dDb2RlLHBlcm1pc3Npb24nXHJcbiAgICAgICAgKSkuZGF0YTtcclxuICAgICAgICBpZiAobHN0SXRlbVN0YXR1cyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyBs4bqleSDEkcaw4bujYyB0aMO0bmcgdGluIHRy4bqhbmcgdGjDoWkgaGnhu4duIHThuqFpIGPhu6dhIGLhuqNuIGdoaScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgaXRlbVN0YXR1cyA9IG51bGw7XHJcbiAgICAgICAgaWYgKCFsc3RJdGVtU3RhdHVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBpdGVtU3RhdHVzID0ge1xyXG4gICAgICAgICAgICAgICAgdGV4dFRyYW5nVGhhaTogJ0NoxrBhIGNo4bqheSBxdXkgdHLDrG5oJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaXRlbVN0YXR1cyA9IGxzdEl0ZW1TdGF0dXMuZmluZChxID0+IChxLnBlcm1pc3Npb24gJiBQZXJtaXNzaW9uQmFzZS5FRElUKSA9PSBQZXJtaXNzaW9uQmFzZS5FRElUKTtcclxuICAgICAgICAgICAgaWYgKGl0ZW1TdGF0dXMgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgaXRlbVN0YXR1cyA9IGxzdEl0ZW1TdGF0dXNbMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGRhdGEuX190cmFuZ1RoYWkgPSBpdGVtU3RhdHVzLnRyYW5nVGhhaTtcclxuICAgICAgICBkYXRhLl9fdGV4dFRyYW5nVGhhaSA9IGl0ZW1TdGF0dXMudGV4dFRyYW5nVGhhaTtcclxuICAgICAgICBkYXRhLl9fd29ya2Zsb3dDb2RlID0gaXRlbVN0YXR1cy53b3JrZmxvd0NvZGU7XHJcbiAgICAgICAgZGF0YS5fX3Blcm1pc3Npb24gPSBpdGVtU3RhdHVzLnBlcm1pc3Npb247XHJcbiAgICAgICAgaWYgKHRoaXMuY3J1ZExpc3QpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0R2V0QWN0aW9uV29ya2Zsb3cgPSBhd2FpdCB0aGlzLmNydWRMaXN0LmdldEFjdGlvbldvcmtmbG93TmV3KGRhdGEpO1xyXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0R2V0QWN0aW9uV29ya2Zsb3cpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IFtidXR0b25Db250ZXh0c10gPSByZXN1bHRHZXRBY3Rpb25Xb3JrZmxvdztcclxuICAgICAgICAgICAgdGhpcy5idXR0b25zID0gYnV0dG9uQ29udGV4dHM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGjhuqNpIGTDuW5nIGjDoG0gbsOgeSB2w6wgbsOzIGNo4bqheSBzYXUgbG9naWMgc3dpdGNoIHZpZXcgbW9kZSBj4bunYSBiYXNlXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIG9uQWZ0ZXJHZXREZXRhaWwoKSB7XHJcbiAgICAgICAgdGhpcy5fc2V0RGlzYWJsZUNvbnRyb2woJ2lkTG9haUNvbmdWaWVjJywgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlQ2hhbmdlTG9haUNvbmdWaWVjV2hlbkFkZCA9IGFzeW5jIChldnQ6IEV2ZW50RGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChldnQuZXZlbnRUeXBlID09ICdjaGFuZ2UnKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFdvcmtmbG93QnlMb2FpQ29uZ1ZpZWMoZXZ0LCBldnQubW9kZWwuaWQpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgYXN5bmMgbG9hZFdvcmtmbG93QnlMb2FpQ29uZ1ZpZWMoZXZ0OiBFdmVudERhdGEsIGlkTG9haUNvbmdWaWVjOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIWlkTG9haUNvbmdWaWVjKSB7XHJcbiAgICAgICAgICAgIGlkTG9haUNvbmdWaWVjID0gZXZ0Lm1vZGVsLmlkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB3b3JrZmxvd1NldHRpbmcgPSBhd2FpdCB0aGlzLl9kbUxvYWlDb25nVmllY1NlcnZpY2UuZ2V0V29ya2Zsb3dTZXR0aW5nQnlJZExvYWlDb25nVmllYyhpZExvYWlDb25nVmllYyk7XHJcbiAgICAgICAgdGhpcy5zZXRXb3JrZmxvd0RhdGFzb3VyY2UoZXZ0LCB3b3JrZmxvd1NldHRpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQWZ0ZXJTYXZlKHJlczogUmVzcG9uc2VSZXN1bHQpIHtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbC5mb3JtU3RhdGUgPT0gRm9ybVN0YXRlLkFERCAmJiByZXMgJiYgcmVzLnN1Y2Nlc3MgJiYgcmVzLmRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5vbkFmdGVyU2F2ZWQuZW1pdChyZXMuZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uVGFiQ2hhbmdlKGV2dCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRhYkluZGV4ID0gZXZ0LmluZGV4O1xyXG4gICAgICAgIHRoaXMudXNlcnMudGFza05hbWUgPSB0aGlzLm1vZGVsLmRhdGEudGVuO1xyXG4gICAgfVxyXG5cclxuICAgIGZvcmN1c1RvRmlyc3RJbnB1dENvbnRyb2woZXZlbnQpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5GT0NVU19UT19GSVJTVF9JTlBVVF9DT05UUk9MKTtcclxuICAgIH1cclxuXHJcblxyXG59XHJcblxyXG4iXX0=