vc-create-dashboard 3.0.83 → 3.0.85

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 (178) hide show
  1. package/README.md +24 -24
  2. package/esm2022/lib/configurations.mjs +7 -7
  3. package/esm2022/lib/create-dashboard-container/categories/categories-config.mjs +2 -2
  4. package/esm2022/lib/create-dashboard-container/categories/categories.component.mjs +212 -212
  5. package/esm2022/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.mjs +350 -350
  6. package/esm2022/lib/create-dashboard-container/configure-widgets/configure-widgets/widget.interface.mjs +2 -2
  7. package/esm2022/lib/create-dashboard-container/configure-widgets/configure-widgets.module.mjs +47 -47
  8. package/esm2022/lib/create-dashboard-container/constants/assets.constant.mjs +37 -37
  9. package/esm2022/lib/create-dashboard-container/create-dashboard-config.mjs +2 -2
  10. package/esm2022/lib/create-dashboard-container/create-dashboard.component.mjs +1601 -1520
  11. package/esm2022/lib/create-dashboard-container/create-dashboard.module.mjs +127 -127
  12. package/esm2022/lib/create-dashboard-container/directives/directives.module.mjs +24 -24
  13. package/esm2022/lib/create-dashboard-container/directives/scroll-in-view.directive.mjs +36 -36
  14. package/esm2022/lib/create-dashboard-container/form-group/form-group.component.mjs +153 -153
  15. package/esm2022/lib/create-dashboard-container/frequency/frequency.component.mjs +309 -309
  16. package/esm2022/lib/create-dashboard-container/interfaces/widget-data-model.mjs +2 -2
  17. package/esm2022/lib/create-dashboard-container/pipes/filter.pipe.mjs +30 -30
  18. package/esm2022/lib/create-dashboard-container/pipes/search-program.pipe.mjs +37 -37
  19. package/esm2022/lib/create-dashboard-container/pipes/search.pipe.mjs +25 -25
  20. package/esm2022/lib/create-dashboard-container/pipes/text-count.pipe.mjs +18 -19
  21. package/esm2022/lib/create-dashboard-container/program-list/constant.mjs +31 -31
  22. package/esm2022/lib/create-dashboard-container/program-list/information-block/information-block.component.mjs +13 -13
  23. package/esm2022/lib/create-dashboard-container/program-list/interfaces/list-item.interface.mjs +2 -2
  24. package/esm2022/lib/create-dashboard-container/program-list/list-container/list-container.component.mjs +50 -50
  25. package/esm2022/lib/create-dashboard-container/program-list/pipes/check-selected-items.pipes.mjs +23 -23
  26. package/esm2022/lib/create-dashboard-container/program-list/program-list/program-list.component.mjs +294 -294
  27. package/esm2022/lib/create-dashboard-container/program-list/program-list.module.mjs +60 -60
  28. package/esm2022/lib/create-dashboard-container/program-list/services/list-utils.service.mjs +27 -27
  29. package/esm2022/lib/create-dashboard-container/program-list/services/program-list-api.service.mjs +28 -35
  30. package/esm2022/lib/create-dashboard-container/responsibility-center/responsibility-center.component.mjs +224 -149
  31. package/esm2022/lib/create-dashboard-container/risk-categories/risk-categories-config.mjs +2 -2
  32. package/esm2022/lib/create-dashboard-container/risk-categories/risk-categories.component.mjs +206 -206
  33. package/esm2022/lib/create-dashboard-container/services/configure-widgets.service.mjs +233 -238
  34. package/esm2022/lib/create-dashboard-container/services/create-dashboard.service.mjs +227 -243
  35. package/esm2022/lib/create-dashboard-container/services/pagination.service.mjs +28 -28
  36. package/esm2022/lib/create-dashboard-container/user-list/user-list.component.mjs +440 -440
  37. package/esm2022/lib/create-dashboard-container/user-list/user-list.config.mjs +2 -2
  38. package/esm2022/lib/create-dashboard-container/utils/dashboard-edit.utils.mjs +181 -181
  39. package/esm2022/lib/create-dashboard.service.mjs +14 -14
  40. package/esm2022/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.mjs +52 -52
  41. package/esm2022/lib/ui-kit/dashboard-footer/dashboard-footer-config.mjs +2 -2
  42. package/esm2022/lib/ui-kit/dashboard-footer/dashboard-footer.module.mjs +32 -32
  43. package/esm2022/lib/ui-kit/dialog/dialog-config.mjs +7 -7
  44. package/esm2022/lib/ui-kit/dialog/dialog-injector.mjs +17 -17
  45. package/esm2022/lib/ui-kit/dialog/dialog-ref.mjs +11 -11
  46. package/esm2022/lib/ui-kit/dialog/dialog.component.mjs +96 -96
  47. package/esm2022/lib/ui-kit/dialog/dialog.module.mjs +20 -20
  48. package/esm2022/lib/ui-kit/dialog/dialog.service.mjs +56 -56
  49. package/esm2022/lib/ui-kit/dialog/insertion.directive.mjs +17 -17
  50. package/esm2022/lib/ui-kit/floating-bar/floating-bar.component.mjs +57 -57
  51. package/esm2022/lib/ui-kit/floating-bar/floating-bar.module.mjs +32 -32
  52. package/esm2022/lib/ui-kit/formgroup/click-outside.directive.mjs +30 -30
  53. package/esm2022/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.mjs +29 -29
  54. package/esm2022/lib/ui-kit/formgroup/cs-radio/cs-radio.component.mjs +34 -34
  55. package/esm2022/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.mjs +14 -14
  56. package/esm2022/lib/ui-kit/formgroup/cs-select/cs-select.component.mjs +119 -119
  57. package/esm2022/lib/ui-kit/formgroup/cs-switch/cs-switch.component.mjs +39 -39
  58. package/esm2022/lib/ui-kit/formgroup/formgroup.module.mjs +55 -55
  59. package/esm2022/lib/ui-kit/formgroup/pipes/pascal.pipe.mjs +19 -19
  60. package/esm2022/lib/ui-kit/formgroup/pipes/searchMultiSelect.pipe.mjs +24 -24
  61. package/esm2022/lib/ui-kit/loaders/loaders.module.mjs +24 -24
  62. package/esm2022/lib/ui-kit/loaders/table-loader/table-loader.component.mjs +18 -18
  63. package/esm2022/lib/ui-kit/no-data/no-data.component.mjs +47 -47
  64. package/esm2022/lib/ui-kit/no-data/no-data.module.mjs +18 -18
  65. package/esm2022/lib/ui-kit/pagination/pagination.component.mjs +130 -130
  66. package/esm2022/lib/ui-kit/pagination/pagination.module.mjs +18 -18
  67. package/esm2022/lib/ui-kit/popover/popover.component.mjs +129 -129
  68. package/esm2022/lib/ui-kit/popover/popover.directive.mjs +93 -93
  69. package/esm2022/lib/ui-kit/popover/popover.module.mjs +21 -21
  70. package/esm2022/lib/ui-kit/popover/popover.service.mjs +23 -23
  71. package/esm2022/lib/ui-kit/select/cs-option/cs-option.component.mjs +41 -41
  72. package/esm2022/lib/ui-kit/select/cs-select/cs-select.component.mjs +107 -107
  73. package/esm2022/lib/ui-kit/select/safe-html.pipe.mjs +21 -21
  74. package/esm2022/lib/ui-kit/select/select.module.mjs +21 -21
  75. package/esm2022/lib/ui-kit/services/cs-select.service.mjs +16 -16
  76. package/esm2022/lib/ui-kit/smiley-dialog/smiley-dialog.component.mjs +52 -52
  77. package/esm2022/lib/ui-kit/smiley-dialog/smiley-dialog.module.mjs +18 -18
  78. package/esm2022/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.mjs +46 -46
  79. package/esm2022/lib/ui-kit/snack-bar/snack-bar.module.mjs +18 -18
  80. package/esm2022/lib/ui-kit/snack-bar/snack-bar.service.mjs +23 -23
  81. package/esm2022/lib/ui-kit/tooltip/tooltip.directive.mjs +168 -168
  82. package/esm2022/lib/ui-kit/tooltip/tooltip.module.mjs +18 -18
  83. package/esm2022/lib/ui-kit/v-loader/loader/loader.component.mjs +24 -24
  84. package/esm2022/lib/ui-kit/v-loader/loader-inline/loader-inline.component.mjs +24 -24
  85. package/esm2022/lib/ui-kit/v-loader/v-loader.module.mjs +19 -19
  86. package/esm2022/public-api.mjs +10 -10
  87. package/esm2022/vc-create-dashboard.mjs +4 -4
  88. package/fesm2022/vc-create-dashboard.mjs +6438 -6333
  89. package/fesm2022/vc-create-dashboard.mjs.map +1 -1
  90. package/index.d.ts +5 -5
  91. package/lib/configurations.d.ts +4 -4
  92. package/lib/create-dashboard-container/categories/categories-config.d.ts +18 -18
  93. package/lib/create-dashboard-container/categories/categories.component.d.ts +66 -66
  94. package/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.d.ts +113 -113
  95. package/lib/create-dashboard-container/configure-widgets/configure-widgets/widget.interface.d.ts +9 -9
  96. package/lib/create-dashboard-container/configure-widgets/configure-widgets.module.d.ts +14 -14
  97. package/lib/create-dashboard-container/constants/assets.constant.d.ts +35 -35
  98. package/lib/create-dashboard-container/create-dashboard-config.d.ts +18 -18
  99. package/lib/create-dashboard-container/create-dashboard.component.d.ts +219 -216
  100. package/lib/create-dashboard-container/create-dashboard.module.d.ts +37 -37
  101. package/lib/create-dashboard-container/directives/directives.module.d.ts +8 -8
  102. package/lib/create-dashboard-container/directives/scroll-in-view.directive.d.ts +12 -12
  103. package/lib/create-dashboard-container/form-group/form-group.component.d.ts +48 -48
  104. package/lib/create-dashboard-container/frequency/frequency.component.d.ts +39 -39
  105. package/lib/create-dashboard-container/interfaces/widget-data-model.d.ts +8 -8
  106. package/lib/create-dashboard-container/pipes/filter.pipe.d.ts +7 -7
  107. package/lib/create-dashboard-container/pipes/search-program.pipe.d.ts +7 -7
  108. package/lib/create-dashboard-container/pipes/search.pipe.d.ts +7 -7
  109. package/lib/create-dashboard-container/pipes/text-count.pipe.d.ts +7 -7
  110. package/lib/create-dashboard-container/program-list/constant.d.ts +24 -24
  111. package/lib/create-dashboard-container/program-list/information-block/information-block.component.d.ts +6 -6
  112. package/lib/create-dashboard-container/program-list/interfaces/list-item.interface.d.ts +5 -5
  113. package/lib/create-dashboard-container/program-list/list-container/list-container.component.d.ts +9 -9
  114. package/lib/create-dashboard-container/program-list/pipes/check-selected-items.pipes.d.ts +7 -7
  115. package/lib/create-dashboard-container/program-list/program-list/program-list.component.d.ts +119 -119
  116. package/lib/create-dashboard-container/program-list/program-list.module.d.ts +17 -17
  117. package/lib/create-dashboard-container/program-list/services/list-utils.service.d.ts +7 -7
  118. package/lib/create-dashboard-container/program-list/services/program-list-api.service.d.ts +12 -14
  119. package/lib/create-dashboard-container/responsibility-center/responsibility-center.component.d.ts +70 -62
  120. package/lib/create-dashboard-container/risk-categories/risk-categories-config.d.ts +18 -18
  121. package/lib/create-dashboard-container/risk-categories/risk-categories.component.d.ts +66 -66
  122. package/lib/create-dashboard-container/services/configure-widgets.service.d.ts +21 -23
  123. package/lib/create-dashboard-container/services/create-dashboard.service.d.ts +80 -82
  124. package/lib/create-dashboard-container/services/pagination.service.d.ts +12 -12
  125. package/lib/create-dashboard-container/user-list/user-list.component.d.ts +123 -123
  126. package/lib/create-dashboard-container/user-list/user-list.config.d.ts +13 -13
  127. package/lib/create-dashboard-container/utils/dashboard-edit.utils.d.ts +16 -16
  128. package/lib/create-dashboard.service.d.ts +6 -6
  129. package/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.d.ts +17 -17
  130. package/lib/ui-kit/dashboard-footer/dashboard-footer-config.d.ts +11 -11
  131. package/lib/ui-kit/dashboard-footer/dashboard-footer.module.d.ts +10 -10
  132. package/lib/ui-kit/dialog/dialog-config.d.ts +6 -6
  133. package/lib/ui-kit/dialog/dialog-injector.d.ts +7 -7
  134. package/lib/ui-kit/dialog/dialog-ref.d.ts +7 -7
  135. package/lib/ui-kit/dialog/dialog.component.d.ts +33 -33
  136. package/lib/ui-kit/dialog/dialog.module.d.ts +9 -9
  137. package/lib/ui-kit/dialog/dialog.service.d.ts +17 -17
  138. package/lib/ui-kit/dialog/insertion.directive.d.ts +8 -8
  139. package/lib/ui-kit/floating-bar/floating-bar.component.d.ts +20 -20
  140. package/lib/ui-kit/floating-bar/floating-bar.module.d.ts +10 -10
  141. package/lib/ui-kit/formgroup/click-outside.directive.d.ts +10 -10
  142. package/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.d.ts +13 -13
  143. package/lib/ui-kit/formgroup/cs-radio/cs-radio.component.d.ts +15 -15
  144. package/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.d.ts +8 -8
  145. package/lib/ui-kit/formgroup/cs-select/cs-select.component.d.ts +36 -36
  146. package/lib/ui-kit/formgroup/cs-switch/cs-switch.component.d.ts +15 -15
  147. package/lib/ui-kit/formgroup/formgroup.module.d.ts +17 -17
  148. package/lib/ui-kit/formgroup/pipes/pascal.pipe.d.ts +7 -7
  149. package/lib/ui-kit/formgroup/pipes/searchMultiSelect.pipe.d.ts +7 -7
  150. package/lib/ui-kit/loaders/loaders.module.d.ts +8 -8
  151. package/lib/ui-kit/loaders/table-loader/table-loader.component.d.ts +9 -9
  152. package/lib/ui-kit/no-data/no-data.component.d.ts +19 -19
  153. package/lib/ui-kit/no-data/no-data.module.d.ts +8 -8
  154. package/lib/ui-kit/pagination/pagination.component.d.ts +21 -21
  155. package/lib/ui-kit/pagination/pagination.module.d.ts +8 -8
  156. package/lib/ui-kit/popover/popover.component.d.ts +28 -28
  157. package/lib/ui-kit/popover/popover.directive.d.ts +17 -17
  158. package/lib/ui-kit/popover/popover.module.d.ts +9 -9
  159. package/lib/ui-kit/popover/popover.service.d.ts +13 -13
  160. package/lib/ui-kit/select/cs-option/cs-option.component.d.ts +16 -16
  161. package/lib/ui-kit/select/cs-select/cs-select.component.d.ts +32 -32
  162. package/lib/ui-kit/select/safe-html.pipe.d.ts +10 -10
  163. package/lib/ui-kit/select/select.module.d.ts +11 -11
  164. package/lib/ui-kit/services/cs-select.service.d.ts +7 -7
  165. package/lib/ui-kit/smiley-dialog/smiley-dialog.component.d.ts +17 -17
  166. package/lib/ui-kit/smiley-dialog/smiley-dialog.module.d.ts +8 -8
  167. package/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.d.ts +17 -17
  168. package/lib/ui-kit/snack-bar/snack-bar.module.d.ts +8 -8
  169. package/lib/ui-kit/snack-bar/snack-bar.service.d.ts +9 -9
  170. package/lib/ui-kit/tooltip/tooltip.directive.d.ts +28 -28
  171. package/lib/ui-kit/tooltip/tooltip.module.d.ts +8 -8
  172. package/lib/ui-kit/v-loader/loader/loader.component.d.ts +11 -11
  173. package/lib/ui-kit/v-loader/loader-inline/loader-inline.component.d.ts +11 -11
  174. package/lib/ui-kit/v-loader/v-loader.module.d.ts +9 -9
  175. package/package.json +1 -1
  176. package/public-api.d.ts +3 -3
  177. package/esm2022/lib/create-dashboard-container/services/auth.service.mjs +0 -31
  178. package/lib/create-dashboard-container/services/auth.service.d.ts +0 -11
@@ -1,350 +1,350 @@
1
- import { Component, EventEmitter, Input, Output, } from '@angular/core';
2
- import { ASSETS } from '../../constants/assets.constant';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "../../../ui-kit/dialog/dialog-ref";
5
- import * as i2 from "../../services/configure-widgets.service";
6
- import * as i3 from "../../../ui-kit/snack-bar/snack-bar.service";
7
- import * as i4 from "@angular/common";
8
- import * as i5 from "../../../ui-kit/floating-bar/floating-bar.component";
9
- import * as i6 from "../../../ui-kit/formgroup/cs-checkbox/cs-checkbox.component";
10
- import * as i7 from "@angular/forms";
11
- import * as i8 from "../../../ui-kit/no-data/no-data.component";
12
- import * as i9 from "../../pipes/search.pipe";
13
- export class ConfigureWidgetsComponent {
14
- dialog;
15
- configureWidgetsService;
16
- snackBar;
17
- widgetsDataModified = new EventEmitter();
18
- closeConfigureWidgets = new EventEmitter();
19
- checkboxStatus;
20
- search = '';
21
- checkedArray = [];
22
- selectedWidgets = [];
23
- ASSETS = ASSETS;
24
- module = 'COMPLIANCE';
25
- selectedWidgetsData = [];
26
- displayedWidgets = [];
27
- showRisk = false;
28
- showCompliance = false;
29
- mode = 'CREATE';
30
- noDataText = 'You have not configured any widgets. Click on the <strong>Configure Widgets</strong> button to begin.';
31
- selectedWidgetIds = [];
32
- subResponsibilitiesSelected = false;
33
- subKeyResponsibilitiesSelected = false;
34
- showWidgets = true;
35
- complianceWidgetsDisplayCount = 9;
36
- riskWidgetsDisplayCount = 9;
37
- constructor(dialog, configureWidgetsService, snackBar) {
38
- this.dialog = dialog;
39
- this.configureWidgetsService = configureWidgetsService;
40
- this.snackBar = snackBar;
41
- }
42
- ngOnChanges() {
43
- this.selectedWidgets = [];
44
- if (this.mode === 'EDIT') {
45
- this.applyEditModeWidgetCatalog();
46
- }
47
- else {
48
- this.applyCreateModeWidgetVisibility();
49
- this.applySavedWidgetSelection(this.selectedWidgetsData);
50
- }
51
- this.module = this.showCompliance ? 'COMPLIANCE' : 'RISK';
52
- this.setSelectedWidgets();
53
- }
54
- /** EDIT: show full widget catalog; check items present in getWidgets widgetArr. */
55
- applyEditModeWidgetCatalog() {
56
- this.widgetsList.COMPLIANCE.forEach((ele) => {
57
- ele.value = false;
58
- ele.visibility = true;
59
- (ele.subWidgets ?? []).forEach((sub) => {
60
- sub.value = false;
61
- sub.visibility = true;
62
- });
63
- });
64
- this.complianceWidgetsDisplayCount = this.widgetsList.COMPLIANCE.filter((w) => w.visibility).length;
65
- this.riskWidgetsDisplayCount = 0;
66
- this.applySavedWidgetSelection(this.selectedWidgetsData);
67
- }
68
- /** CREATE: limit visible tiles to displayedWidgets when provided. */
69
- applyCreateModeWidgetVisibility() {
70
- if (!this.displayedWidgets?.length) {
71
- return;
72
- }
73
- this.setWidgetsVisibilityToFalse();
74
- this.riskWidgetsDisplayCount = 0;
75
- this.complianceWidgetsDisplayCount = 0;
76
- const finalData = [...new Set(this.displayedWidgets)];
77
- finalData.forEach((element) => {
78
- this.widgetsList.COMPLIANCE.forEach((ele) => {
79
- if (ele.id !== element.widget_code) {
80
- return;
81
- }
82
- ele.visibility = true;
83
- if (ele.subWidgets.length > 0) {
84
- const visibleSubCodes = (element.sub_widgets ?? []).map((subwidget) => subwidget.widget_code);
85
- ele.subWidgets.forEach((subElement, subIndex) => {
86
- ele.subWidgets[subIndex].visibility = visibleSubCodes.includes(subElement.id);
87
- });
88
- }
89
- this.complianceWidgetsDisplayCount++;
90
- });
91
- });
92
- }
93
- applySavedWidgetSelection(savedWidgets) {
94
- const data = [...new Set(savedWidgets ?? [])];
95
- data.forEach((element) => {
96
- if (element?.state && element.state !== 'ACTIVE') {
97
- return;
98
- }
99
- this.widgetsList.COMPLIANCE.forEach((ele) => {
100
- if (ele.id !== element.widget_code) {
101
- return;
102
- }
103
- ele.value = true;
104
- if (ele.subWidgets.length > 0 && element.sub_widgets?.length) {
105
- const activeSubCodes = (element.sub_widgets ?? [])
106
- .filter((subwidget) => subwidget.state === 'ACTIVE')
107
- .map((subwidget) => subwidget.widget_code);
108
- ele.subWidgets.forEach((subElement, subIndex) => {
109
- ele.subWidgets[subIndex].value = activeSubCodes.includes(subElement.id);
110
- });
111
- }
112
- });
113
- });
114
- }
115
- ngOnInit() { }
116
- widgetsList = {
117
- COMPLIANCE: [
118
- {
119
- title: 'Overview',
120
- id: 'overview',
121
- description: 'Overview shows the performance of responsibilities and Programs.',
122
- widgetImage: ASSETS.overviewWidget,
123
- value: false,
124
- visibility: true,
125
- module: 'COMPLIANCE',
126
- subWidgets: [],
127
- },
128
- {
129
- title: 'Responsibility Calendar',
130
- id: 'compliance_calendar_flag',
131
- description: 'The Responsibility Calendar shows the due dates of responsibilities in a calendar format. The responsibilities are color coded to reflect the status of the responsibilities.',
132
- widgetImage: ASSETS.responsibilityCalenderWidget,
133
- value: false,
134
- visibility: true,
135
- module: 'COMPLIANCE',
136
- subWidgets: [],
137
- },
138
- {
139
- title: 'Responsibilities by Assignee',
140
- id: 'responsibilities_by_assignee',
141
- description: 'The Responsibilities by Assignee widget shows the performance of responsibilities by users.',
142
- widgetImage: ASSETS.responsibilitiesByAssignee,
143
- value: false,
144
- visibility: true,
145
- module: 'COMPLIANCE',
146
- subWidgets: [],
147
- },
148
- {
149
- title: 'Responsibility Center Overview',
150
- id: 'responsibility_center_overview_flag',
151
- description: 'The Responsibility Center Overview shows the performance of responsibilities and Responsibility Centers.',
152
- widgetImage: ASSETS.responsibilityCenterOverviewWidget,
153
- value: false,
154
- visibility: true,
155
- module: 'COMPLIANCE',
156
- subWidgets: [],
157
- },
158
- {
159
- title: 'Responsibilities',
160
- id: 'my_responsibilities',
161
- description: 'This widget shows the performance of the responsibilities that you are required to complete, the responsibilities that you are reviewing and the responsibilities that you are overseeing.',
162
- widgetImage: ASSETS.myResponsibilitiesWidget,
163
- tabOption: true,
164
- value: false,
165
- visibility: true,
166
- module: 'COMPLIANCE',
167
- subWidgets: [
168
- {
169
- title: 'My Responsibilities',
170
- id: 'my_responsibility_flag',
171
- value: false,
172
- visibility: true,
173
- },
174
- {
175
- title: 'I’m Reviewing',
176
- id: 'reviewer_responsibility_flag',
177
- value: false,
178
- visibility: true,
179
- },
180
- {
181
- title: 'I’m Overseeing',
182
- id: 'cc_responsibility_flag',
183
- value: false,
184
- visibility: true,
185
- },
186
- ],
187
- },
188
- {
189
- title: 'Key Responsibilities',
190
- id: 'key_responsibilities',
191
- description: 'This widget shows the performance of key responsibilities that you are required to complete, that you are reviewing, that you are overseeing and that you have assigned to another person.',
192
- widgetImage: ASSETS.keyResponsibilitiesWidget,
193
- tabOption: true,
194
- value: false,
195
- visibility: true,
196
- module: 'COMPLIANCE',
197
- subWidgets: [
198
- {
199
- title: 'Overview',
200
- id: 'key_responsibilities_overview_flag',
201
- value: false,
202
- visibility: true,
203
- },
204
- {
205
- title: 'My Responsibilities',
206
- id: 'key_my_responsibilities_flag',
207
- value: false,
208
- visibility: true,
209
- },
210
- {
211
- title: 'I’m Reviewing',
212
- id: 'key_i_am_reviewing_flag',
213
- value: false,
214
- visibility: true,
215
- },
216
- {
217
- title: 'I’m Overseeing',
218
- id: 'key_i_am_overseeing_flag',
219
- value: false,
220
- visibility: true,
221
- },
222
- ],
223
- },
224
- {
225
- title: 'Trend Analysis',
226
- id: 'trend_analysis_flag',
227
- description: 'The Trend Analysis is a graphical representation of the performance of responsibilities over a period.',
228
- widgetImage: ASSETS.trendAnalysisWidget,
229
- value: false,
230
- visibility: true,
231
- module: 'COMPLIANCE',
232
- subWidgets: [],
233
- },
234
- ],
235
- };
236
- selectWidget(event, module, widgetId, subWidgetId) {
237
- const widgetIndex = this.widgetsList[module].findIndex((ele) => ele.id == widgetId);
238
- const isSubWidgetAddable = this.selectedWidgets.findIndex((widget) => widget.id === widgetId);
239
- if (event) {
240
- if (this.selectedWidgets.length >= 10 &&
241
- !(subWidgetId && isSubWidgetAddable >= 0)) {
242
- this.snackBar.show('You cannot add more than 10 widgets.', 'alert');
243
- this.showWidgets = false;
244
- setTimeout(() => {
245
- this.widgetsList[module][widgetIndex].value = false;
246
- this.showWidgets = true;
247
- }, 10);
248
- return;
249
- }
250
- this.widgetsList[module][widgetIndex].value = true;
251
- if (this.widgetsList[module][widgetIndex].subWidgets.length > 0) {
252
- if (!subWidgetId) {
253
- this.widgetsList[module][widgetIndex].subWidgets.forEach((ele) => (ele.value = true));
254
- }
255
- else {
256
- const subWidgetIndex = this.widgetsList[module][widgetIndex].subWidgets.findIndex((ele) => ele.id == subWidgetId);
257
- this.widgetsList[module][widgetIndex].subWidgets[subWidgetIndex].value = true;
258
- }
259
- }
260
- }
261
- else {
262
- if (this.widgetsList[module][widgetIndex].subWidgets.length > 0) {
263
- if (!subWidgetId) {
264
- this.widgetsList[module][widgetIndex].value = false;
265
- this.widgetsList[module][widgetIndex].subWidgets.forEach((ele) => (ele.value = false));
266
- }
267
- else {
268
- const subWidgetIndex = this.widgetsList[module][widgetIndex].subWidgets.findIndex((ele) => ele.id == subWidgetId);
269
- this.widgetsList[module][widgetIndex].subWidgets[subWidgetIndex].value = false;
270
- const isAllWidgetsRemoved = this.widgetsList[module][widgetIndex].subWidgets.every((ele) => ele.value == false);
271
- if (isAllWidgetsRemoved) {
272
- this.widgetsList[module][widgetIndex].value = false;
273
- }
274
- }
275
- }
276
- else {
277
- this.widgetsList[module][widgetIndex].value = false;
278
- }
279
- }
280
- this.setSelectedWidgets();
281
- }
282
- setSelectedWidgets() {
283
- this.selectedWidgets = [];
284
- this.widgetsList.COMPLIANCE.forEach((ele) => {
285
- if (ele.value) {
286
- this.selectedWidgets.push(ele);
287
- }
288
- });
289
- // this.widgetsList.RISK.forEach((ele: any) => {
290
- // if (ele.value) {
291
- // this.selectedWidgets.push(ele);
292
- // }
293
- // });
294
- }
295
- removeWidget(widget) {
296
- const widgetIndex = this.widgetsList[widget.module].findIndex((ele) => ele.id == widget.id);
297
- this.widgetsList[widget.module][widgetIndex].value = false;
298
- if (this.widgetsList[widget.module][widgetIndex].subWidgets.length > 0) {
299
- this.widgetsList[widget.module][widgetIndex].subWidgets.forEach((ele) => (ele.value = false));
300
- }
301
- this.setSelectedWidgets();
302
- }
303
- onNextClick() {
304
- this.widgetsDataModified.emit(this.selectedWidgets);
305
- }
306
- closeConfigureDashboard() {
307
- this.selectedWidgets = [];
308
- this.dialog.close();
309
- this.closeConfigureWidgets.emit(false);
310
- }
311
- setWidgetsVisibilityToFalse() {
312
- this.widgetsList.COMPLIANCE.forEach((ele) => {
313
- ele.visibility = false;
314
- if (ele.subWidgets.length > 0) {
315
- ele.subWidgets.forEach((subElement) => {
316
- subElement.visibility = false;
317
- });
318
- }
319
- });
320
- // this.widgetsList.RISK.forEach((ele: any) => {
321
- // ele.visibility = false;
322
- // if (ele.subWidgets.length > 0) {
323
- // ele.subWidgets.forEach((subElement: any) => {
324
- // subElement.visibility = false;
325
- // });
326
- // }
327
- // });
328
- }
329
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConfigureWidgetsComponent, deps: [{ token: i1.DialogRef }, { token: i2.ConfigureWidgetsService }, { token: i3.SnackBarService }], target: i0.ɵɵFactoryTarget.Component });
330
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ConfigureWidgetsComponent, selector: "app-configure-widgets", inputs: { selectedWidgetsData: "selectedWidgetsData", displayedWidgets: "displayedWidgets", showRisk: "showRisk", showCompliance: "showCompliance", mode: "mode" }, outputs: { widgetsDataModified: "widgetsDataModified", closeConfigureWidgets: "closeConfigureWidgets" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"configure-widgets vx-d-block\" *ngIf=\"showWidgets\">\n <div\n class=\"configure-widgets-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\"\n >\n <div class=\"configure-widgets-title vx-fs-14 vx-fw-500 vx-label-txt\">\n Configure Widgets\n </div>\n <button\n class=\"configure-widgets-back vx-fs-14 vx-fw-500 vx-label-txt vx-m-0 vx-p-0 vx-d-inline-flex vx-align-center\"\n (click)=\"closeConfigureDashboard()\"\n >\n <i class=\"icons vx-fs-16\">&#xe91d;</i> Back\n </button>\n </div>\n <div class=\"configure-widgets-body\">\n <div class=\"configure-widgets-tab\">\n <ul>\n <li\n [class.active]=\"module === 'COMPLIANCE'\"\n *ngIf=\"showCompliance\"\n (click)=\"module = 'COMPLIANCE'\"\n >\n <!-- <button>\n Compliance<span>{{ complianceWidgetsDisplayCount }}</span>\n </button> -->\n </li>\n <li [class.active]=\"module === 'RISK'\" *ngIf=\"showRisk\">\n <button (click)=\"module = 'RISK'\">\n Risks<span>{{ riskWidgetsDisplayCount }}</span>\n </button>\n </li>\n </ul>\n </div>\n <div class=\"configure-widgets-search vx-mb-2\">\n <i class=\"icons\">&#xe90b;</i>\n <input type=\"text\" placeholder=\"Search widgets\" [(ngModel)]=\"search\" />\n </div>\n <div\n class=\"configure-widgets-list vx-d-flex vx-flex-wrap\"\n *ngIf=\"(widgetsList[module] | search : search).length !== 0\"\n >\n <ng-container\n *ngFor=\"let widget of widgetsList[module] | search : search\"\n >\n <div class=\"configure-widgets-item\" *ngIf=\"widget?.visibility\">\n <label class=\"block\">\n <input\n type=\"checkbox\"\n [checked]=\"widget.value\"\n (change)=\"selectWidget($event.target.checked, module, widget.id)\"\n />\n <div class=\"check-icon\">\n <svg\n class=\"check\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"check-circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"check-circle\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"configure-widgets-item-head\">\n <h4\n class=\"configure-widgets-item-title\"\n [innerHTML]=\"widget?.title\"\n ></h4>\n <p\n class=\"configure-widgets-item-description\"\n [innerHTML]=\"widget?.description\"\n ></p>\n <button\n *ngIf=\"!widget.value\"\n class=\"configure-widgets-item-button add\"\n (click)=\"selectWidget(true, module, widget.id)\"\n >\n + ADD\n </button>\n <button\n *ngIf=\"widget.value\"\n class=\"configure-widgets-item-button remove\"\n (click)=\"selectWidget(false, module, widget.id)\"\n >\n - Remove\n </button>\n </div>\n <div class=\"configure-widgets-item-body\">\n <div class=\"image-wrapper\">\n <img\n [ngSrc]=\"widget?.widgetImage\"\n alt=\"\"\n width=\"790\"\n height=\"613\"\n />\n </div>\n <div\n class=\"floating-option vx-d-flex\"\n *ngIf=\"widget?.subWidgets?.length > 0\"\n >\n <ng-container *ngFor=\"let subWidget of widget.subWidgets\">\n <app-cs-checkbox\n *ngIf=\"subWidget.visibility\"\n (ngValueChange)=\"\n selectWidget($event, module, widget.id, subWidget.id)\n \"\n [ngValue]=\"subWidget.value\"\n >{{ subWidget.title }}\n </app-cs-checkbox>\n </ng-container>\n </div>\n </div>\n </label>\n </div>\n </ng-container>\n\n <!-- No Data Image -->\n </div>\n <app-no-data\n *ngIf=\"(widgetsList[module] | search : search).length === 0\"\n [noDataImage]=\"ASSETS.configure_widget\"\n [noDataText]=\"'No data to display'\"\n >\n </app-no-data>\n\n <floating-bar\n (submitEvent)=\"onNextClick()\"\n (cancelEvent)=\"closeConfigureDashboard()\"\n [selectedData]=\"selectedWidgets\"\n (deleteEvent)=\"removeWidget($event)\"\n ></floating-bar>\n </div>\n</div>\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/mixin/mixin.css\";@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::ng-deep .configure-widgets{width:100vw;height:100vh;background:#fff}@media screen and (max-width: 1280px){::ng-deep .configure-widgets{width:100vw;margin-left:0}}::ng-deep .configure-widgets-head{height:2.75rem;background:#fbfbfb;border-bottom:1px solid #f1f1f1}::ng-deep .configure-widgets-back{border:none;outline:none;background:transparent}::ng-deep .configure-widgets-back i{margin-right:6px}::ng-deep .configure-widgets-body{padding:2rem;position:relative;height:calc(100vh - 2.75rem)}::ng-deep .configure-widgets-body app-no-data .no-data-wrapper{height:calc(100vh - 13.875rem)!important}::ng-deep .configure-widgets-body .floating-option{position:absolute;right:0;bottom:0;left:0;background:#fff;padding:16px 12px;z-index:3;box-shadow:0 -6px 12px #1e5dd31a}::ng-deep .configure-widgets-body .floating-option app-cs-checkbox{display:flex}::ng-deep .configure-widgets-body .floating-option app-cs-checkbox label span.value{color:#161b2f!important;font-size:11px!important;line-height:16px!important;margin-left:8px!important;white-space:nowrap}::ng-deep .configure-widgets-body .floating-option app-cs-checkbox+app-cs-checkbox{margin-left:20px}::ng-deep .configure-widgets-tab ul{padding:0;margin:0 0 8px;display:flex;border-bottom:1px solid #dbdbdb}::ng-deep .configure-widgets-tab ul li{list-style:none;display:flex;width:auto;padding:0}::ng-deep .configure-widgets-tab ul li button{color:#747576;display:inline-block;font-size:11px;line-height:16px;font-weight:600;text-transform:uppercase;border:none;outline:none;background:transparent;padding:0 0 8px;position:relative;margin:0}::ng-deep .configure-widgets-tab ul li button span{display:inline-block;margin-left:8px;color:#74757680}::ng-deep .configure-widgets-tab ul li+li{padding-left:28px}::ng-deep .configure-widgets-tab ul li.active button{color:#1e5dd3}::ng-deep .configure-widgets-tab ul li.active button span{color:#1e5dd3}::ng-deep .configure-widgets-tab ul li.active button:after{content:\"\";right:0;bottom:0;left:0;height:2px;border-radius:2px;position:absolute;background-color:#1e5dd3}::ng-deep .configure-widgets-search{position:relative;margin-bottom:24px}::ng-deep .configure-widgets-search i{position:absolute;top:16px;left:16px;color:#dbdbdb}::ng-deep .configure-widgets-search input{border:1px solid #dbdbdb;border-radius:4px;height:44px;padding:10px 180px 10px 40px;width:100%;font-size:14px;color:#747576;outline:none}::ng-deep .configure-widgets-search input:focus{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .configure-widgets-list{margin:0 -1rem .5rem;height:calc(100vh - 15.5rem);overflow:hidden;overflow-y:auto}::ng-deep .configure-widgets-list::-webkit-scrollbar-track{background-color:transparent}::ng-deep .configure-widgets-item{width:50%;padding:0 16px;margin-bottom:32px}::ng-deep .configure-widgets-item .block{background:#f8f8f8;border-radius:4px;padding:16px 44px 4px;cursor:pointer;position:relative;display:block}::ng-deep .configure-widgets-item .block .check-icon{position:absolute;top:8px;left:0;height:36px;width:36px;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center;background:#34aa44;opacity:0;pointer-events:none}::ng-deep .configure-widgets-item .block .check-icon .check{display:none;width:27px;height:27px;background:transparent;border-radius:50%;stroke-width:4;stroke:#fff;stroke-miterlimit:10;box-shadow:inset 0 0 #fff;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}::ng-deep .configure-widgets-item .block .check-icon .check-circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:4;stroke-miterlimit:10;stroke:#fff;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}::ng-deep .configure-widgets-item .block .check-icon .check-check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}::ng-deep .configure-widgets-item .block input[type=checkbox]{opacity:0;position:absolute;top:0;left:0;width:100%;height:100%;margin:0;z-index:1;cursor:pointer}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked+.check-icon{opacity:1}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked+.check-icon .check{display:block}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked~.configure-widgets-item-body .image-wrapper{opacity:.5}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked~.configure-widgets-item-head button.add{display:none}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked~.configure-widgets-item-head button.remove{display:flex}::ng-deep .configure-widgets-item-head{padding:0 0 16px;position:relative}::ng-deep .configure-widgets-item-title{margin:0 0 12px;font-size:14px;line-height:20px;text-transform:uppercase;color:#161b2f;max-width:calc(100% - 72px);font-weight:500}::ng-deep .configure-widgets-item-description{font-size:12px;line-height:20px;color:#747576;margin:0;font-weight:400;height:60px}::ng-deep .configure-widgets-item-button{width:72px;height:28px;cursor:pointer;display:flex;position:absolute;top:0;right:-24px;font-size:11px;font-weight:500;border:none;outline:none;justify-content:center;align-items:center;border-radius:2px;text-transform:uppercase;padding:0;margin:0}::ng-deep .configure-widgets-item-button.add{color:#fff;background:#1e5dd3}::ng-deep .configure-widgets-item-button.remove{background:#fff;border:1px solid #f1f1f1;color:#c7381b;display:none}::ng-deep .configure-widgets-item-body{overflow:hidden;height:220px;border:1px solid #f1f1f1;border-bottom:none;border-radius:2px 2px 0 0;box-shadow:0 -4px 8px #161b2f10}::ng-deep .configure-widgets-item-body .image-wrapper{box-shadow:0 -6px 12px #0000001a;border-radius:2px;overflow:hidden;background:#fff}::ng-deep .configure-widgets-item-body img{width:100%}@keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #fff}}.disabled{pointer-events:none;opacity:.7}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.FloatingBarComponent, selector: "floating-bar", inputs: ["text", "frequencyMessage", "singleCategory", "selectedData"], outputs: ["cancelEvent", "submitEvent", "deleteEvent"] }, { kind: "component", type: i6.CsCheckboxComponent, selector: "app-cs-checkbox", inputs: ["disabled", "ngValue", "value"], outputs: ["ngValueChange"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.NoDataComponent, selector: "app-no-data", inputs: ["action", "noDataImage", "noDataText", "noDataButton", "noDataSecButton", "altText", "smallButton", "buttonIcon", "iconClass"], outputs: ["buttonAction"] }, { kind: "directive", type: i4.NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "src", "srcset"] }, { kind: "pipe", type: i9.SearchPipe, name: "search" }] });
331
- }
332
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConfigureWidgetsComponent, decorators: [{
333
- type: Component,
334
- args: [{ selector: 'app-configure-widgets', template: "<div class=\"configure-widgets vx-d-block\" *ngIf=\"showWidgets\">\n <div\n class=\"configure-widgets-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\"\n >\n <div class=\"configure-widgets-title vx-fs-14 vx-fw-500 vx-label-txt\">\n Configure Widgets\n </div>\n <button\n class=\"configure-widgets-back vx-fs-14 vx-fw-500 vx-label-txt vx-m-0 vx-p-0 vx-d-inline-flex vx-align-center\"\n (click)=\"closeConfigureDashboard()\"\n >\n <i class=\"icons vx-fs-16\">&#xe91d;</i> Back\n </button>\n </div>\n <div class=\"configure-widgets-body\">\n <div class=\"configure-widgets-tab\">\n <ul>\n <li\n [class.active]=\"module === 'COMPLIANCE'\"\n *ngIf=\"showCompliance\"\n (click)=\"module = 'COMPLIANCE'\"\n >\n <!-- <button>\n Compliance<span>{{ complianceWidgetsDisplayCount }}</span>\n </button> -->\n </li>\n <li [class.active]=\"module === 'RISK'\" *ngIf=\"showRisk\">\n <button (click)=\"module = 'RISK'\">\n Risks<span>{{ riskWidgetsDisplayCount }}</span>\n </button>\n </li>\n </ul>\n </div>\n <div class=\"configure-widgets-search vx-mb-2\">\n <i class=\"icons\">&#xe90b;</i>\n <input type=\"text\" placeholder=\"Search widgets\" [(ngModel)]=\"search\" />\n </div>\n <div\n class=\"configure-widgets-list vx-d-flex vx-flex-wrap\"\n *ngIf=\"(widgetsList[module] | search : search).length !== 0\"\n >\n <ng-container\n *ngFor=\"let widget of widgetsList[module] | search : search\"\n >\n <div class=\"configure-widgets-item\" *ngIf=\"widget?.visibility\">\n <label class=\"block\">\n <input\n type=\"checkbox\"\n [checked]=\"widget.value\"\n (change)=\"selectWidget($event.target.checked, module, widget.id)\"\n />\n <div class=\"check-icon\">\n <svg\n class=\"check\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"check-circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"check-circle\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"configure-widgets-item-head\">\n <h4\n class=\"configure-widgets-item-title\"\n [innerHTML]=\"widget?.title\"\n ></h4>\n <p\n class=\"configure-widgets-item-description\"\n [innerHTML]=\"widget?.description\"\n ></p>\n <button\n *ngIf=\"!widget.value\"\n class=\"configure-widgets-item-button add\"\n (click)=\"selectWidget(true, module, widget.id)\"\n >\n + ADD\n </button>\n <button\n *ngIf=\"widget.value\"\n class=\"configure-widgets-item-button remove\"\n (click)=\"selectWidget(false, module, widget.id)\"\n >\n - Remove\n </button>\n </div>\n <div class=\"configure-widgets-item-body\">\n <div class=\"image-wrapper\">\n <img\n [ngSrc]=\"widget?.widgetImage\"\n alt=\"\"\n width=\"790\"\n height=\"613\"\n />\n </div>\n <div\n class=\"floating-option vx-d-flex\"\n *ngIf=\"widget?.subWidgets?.length > 0\"\n >\n <ng-container *ngFor=\"let subWidget of widget.subWidgets\">\n <app-cs-checkbox\n *ngIf=\"subWidget.visibility\"\n (ngValueChange)=\"\n selectWidget($event, module, widget.id, subWidget.id)\n \"\n [ngValue]=\"subWidget.value\"\n >{{ subWidget.title }}\n </app-cs-checkbox>\n </ng-container>\n </div>\n </div>\n </label>\n </div>\n </ng-container>\n\n <!-- No Data Image -->\n </div>\n <app-no-data\n *ngIf=\"(widgetsList[module] | search : search).length === 0\"\n [noDataImage]=\"ASSETS.configure_widget\"\n [noDataText]=\"'No data to display'\"\n >\n </app-no-data>\n\n <floating-bar\n (submitEvent)=\"onNextClick()\"\n (cancelEvent)=\"closeConfigureDashboard()\"\n [selectedData]=\"selectedWidgets\"\n (deleteEvent)=\"removeWidget($event)\"\n ></floating-bar>\n </div>\n</div>\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/mixin/mixin.css\";@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::ng-deep .configure-widgets{width:100vw;height:100vh;background:#fff}@media screen and (max-width: 1280px){::ng-deep .configure-widgets{width:100vw;margin-left:0}}::ng-deep .configure-widgets-head{height:2.75rem;background:#fbfbfb;border-bottom:1px solid #f1f1f1}::ng-deep .configure-widgets-back{border:none;outline:none;background:transparent}::ng-deep .configure-widgets-back i{margin-right:6px}::ng-deep .configure-widgets-body{padding:2rem;position:relative;height:calc(100vh - 2.75rem)}::ng-deep .configure-widgets-body app-no-data .no-data-wrapper{height:calc(100vh - 13.875rem)!important}::ng-deep .configure-widgets-body .floating-option{position:absolute;right:0;bottom:0;left:0;background:#fff;padding:16px 12px;z-index:3;box-shadow:0 -6px 12px #1e5dd31a}::ng-deep .configure-widgets-body .floating-option app-cs-checkbox{display:flex}::ng-deep .configure-widgets-body .floating-option app-cs-checkbox label span.value{color:#161b2f!important;font-size:11px!important;line-height:16px!important;margin-left:8px!important;white-space:nowrap}::ng-deep .configure-widgets-body .floating-option app-cs-checkbox+app-cs-checkbox{margin-left:20px}::ng-deep .configure-widgets-tab ul{padding:0;margin:0 0 8px;display:flex;border-bottom:1px solid #dbdbdb}::ng-deep .configure-widgets-tab ul li{list-style:none;display:flex;width:auto;padding:0}::ng-deep .configure-widgets-tab ul li button{color:#747576;display:inline-block;font-size:11px;line-height:16px;font-weight:600;text-transform:uppercase;border:none;outline:none;background:transparent;padding:0 0 8px;position:relative;margin:0}::ng-deep .configure-widgets-tab ul li button span{display:inline-block;margin-left:8px;color:#74757680}::ng-deep .configure-widgets-tab ul li+li{padding-left:28px}::ng-deep .configure-widgets-tab ul li.active button{color:#1e5dd3}::ng-deep .configure-widgets-tab ul li.active button span{color:#1e5dd3}::ng-deep .configure-widgets-tab ul li.active button:after{content:\"\";right:0;bottom:0;left:0;height:2px;border-radius:2px;position:absolute;background-color:#1e5dd3}::ng-deep .configure-widgets-search{position:relative;margin-bottom:24px}::ng-deep .configure-widgets-search i{position:absolute;top:16px;left:16px;color:#dbdbdb}::ng-deep .configure-widgets-search input{border:1px solid #dbdbdb;border-radius:4px;height:44px;padding:10px 180px 10px 40px;width:100%;font-size:14px;color:#747576;outline:none}::ng-deep .configure-widgets-search input:focus{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .configure-widgets-list{margin:0 -1rem .5rem;height:calc(100vh - 15.5rem);overflow:hidden;overflow-y:auto}::ng-deep .configure-widgets-list::-webkit-scrollbar-track{background-color:transparent}::ng-deep .configure-widgets-item{width:50%;padding:0 16px;margin-bottom:32px}::ng-deep .configure-widgets-item .block{background:#f8f8f8;border-radius:4px;padding:16px 44px 4px;cursor:pointer;position:relative;display:block}::ng-deep .configure-widgets-item .block .check-icon{position:absolute;top:8px;left:0;height:36px;width:36px;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center;background:#34aa44;opacity:0;pointer-events:none}::ng-deep .configure-widgets-item .block .check-icon .check{display:none;width:27px;height:27px;background:transparent;border-radius:50%;stroke-width:4;stroke:#fff;stroke-miterlimit:10;box-shadow:inset 0 0 #fff;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}::ng-deep .configure-widgets-item .block .check-icon .check-circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:4;stroke-miterlimit:10;stroke:#fff;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}::ng-deep .configure-widgets-item .block .check-icon .check-check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}::ng-deep .configure-widgets-item .block input[type=checkbox]{opacity:0;position:absolute;top:0;left:0;width:100%;height:100%;margin:0;z-index:1;cursor:pointer}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked+.check-icon{opacity:1}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked+.check-icon .check{display:block}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked~.configure-widgets-item-body .image-wrapper{opacity:.5}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked~.configure-widgets-item-head button.add{display:none}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked~.configure-widgets-item-head button.remove{display:flex}::ng-deep .configure-widgets-item-head{padding:0 0 16px;position:relative}::ng-deep .configure-widgets-item-title{margin:0 0 12px;font-size:14px;line-height:20px;text-transform:uppercase;color:#161b2f;max-width:calc(100% - 72px);font-weight:500}::ng-deep .configure-widgets-item-description{font-size:12px;line-height:20px;color:#747576;margin:0;font-weight:400;height:60px}::ng-deep .configure-widgets-item-button{width:72px;height:28px;cursor:pointer;display:flex;position:absolute;top:0;right:-24px;font-size:11px;font-weight:500;border:none;outline:none;justify-content:center;align-items:center;border-radius:2px;text-transform:uppercase;padding:0;margin:0}::ng-deep .configure-widgets-item-button.add{color:#fff;background:#1e5dd3}::ng-deep .configure-widgets-item-button.remove{background:#fff;border:1px solid #f1f1f1;color:#c7381b;display:none}::ng-deep .configure-widgets-item-body{overflow:hidden;height:220px;border:1px solid #f1f1f1;border-bottom:none;border-radius:2px 2px 0 0;box-shadow:0 -4px 8px #161b2f10}::ng-deep .configure-widgets-item-body .image-wrapper{box-shadow:0 -6px 12px #0000001a;border-radius:2px;overflow:hidden;background:#fff}::ng-deep .configure-widgets-item-body img{width:100%}@keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #fff}}.disabled{pointer-events:none;opacity:.7}\n"] }]
335
- }], ctorParameters: function () { return [{ type: i1.DialogRef }, { type: i2.ConfigureWidgetsService }, { type: i3.SnackBarService }]; }, propDecorators: { widgetsDataModified: [{
336
- type: Output
337
- }], closeConfigureWidgets: [{
338
- type: Output
339
- }], selectedWidgetsData: [{
340
- type: Input
341
- }], displayedWidgets: [{
342
- type: Input
343
- }], showRisk: [{
344
- type: Input
345
- }], showCompliance: [{
346
- type: Input
347
- }], mode: [{
348
- type: Input
349
- }] } });
350
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJlLXdpZGdldHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3JlYXRlLWRhc2hib2FyZC9zcmMvbGliL2NyZWF0ZS1kYXNoYm9hcmQtY29udGFpbmVyL2NvbmZpZ3VyZS13aWRnZXRzL2NvbmZpZ3VyZS13aWRnZXRzL2NvbmZpZ3VyZS13aWRnZXRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NyZWF0ZS1kYXNoYm9hcmQvc3JjL2xpYi9jcmVhdGUtZGFzaGJvYXJkLWNvbnRhaW5lci9jb25maWd1cmUtd2lkZ2V0cy9jb25maWd1cmUtd2lkZ2V0cy9jb25maWd1cmUtd2lkZ2V0cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBTXZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7Ozs7QUFPekQsTUFBTSxPQUFPLHlCQUF5QjtJQXlCMUI7SUFDRDtJQUNDO0lBMUJBLG1CQUFtQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzVELHFCQUFxQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ3hFLGNBQWMsQ0FBTztJQUNyQixNQUFNLEdBQVcsRUFBRSxDQUFDO0lBQ3BCLFlBQVksR0FBNkMsRUFBRSxDQUFDO0lBQzVELGVBQWUsR0FBMkIsRUFBRSxDQUFDO0lBQzdDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDaEIsTUFBTSxHQUEwQixZQUFZLENBQUM7SUFDcEMsbUJBQW1CLEdBQVEsRUFBRSxDQUFDO0lBQzlCLGdCQUFnQixHQUFRLEVBQUUsQ0FBQztJQUMzQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLGNBQWMsR0FBRyxLQUFL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QUU7Z0JBQzdCLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBZSxFQUFFLEVBQUU7b0JBQ3pDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUNoQyxDQUFDLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxnREFBZ0Q7UUFDaEQsNEJBQTRCO1FBQzVCLHFDQUFxQztRQUNyQyxvREFBb0Q7UUFDcEQsdUNBQXVDO1FBQ3ZDLFVBQVU7UUFDVixNQUFNO1FBQ04sTUFBTTtJQUNSLENBQUM7d0dBbFhVLHlCQUF5Qjs0RkFBekIseUJBQXlCLCtWQ3JCdEMsdTNKQTZJQTs7NEZEeEhhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSx1QkFBdUI7b0tBS3ZCLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBT0UsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZmlndXJlV2lkZ2V0c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWd1cmUtd2lkZ2V0cy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyByZXRyeSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHdpZGdldERhdGFNb2RlbCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvd2lkZ2V0LWRhdGEtbW9kZWwnO1xuaW1wb3J0IHsgRGlhbG9nUmVmIH0gZnJvbSAnLi4vLi4vLi4vdWkta2l0L2RpYWxvZy9kaWFsb2ctcmVmJztcbmltcG9ydCB7IHdpZGdldENvbmZpZyB9IGZyb20gJy4vd2lkZ2V0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7IEFTU0VUUyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9hc3NldHMuY29uc3RhbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY29uZmlndXJlLXdpZGdldHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29uZmlndXJlLXdpZGdldHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb25maWd1cmUtd2lkZ2V0cy5jb21wb25lbnQubGVzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDb25maWd1cmVXaWRnZXRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBAT3V0cHV0KCkgd2lkZ2V0c0RhdGFNb2RpZmllZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBjbG9zZUNvbmZpZ3VyZVdpZGdldHM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBjaGVja2JveFN0YXR1cyE6IGFueTtcbiAgc2VhcmNoOiBzdHJpbmcgPSAnJztcbiAgY2hlY2tlZEFycmF5OiBBcnJheTx7IGluZGV4OiBudW1iZXI7IHN0YXR1czogbnVtYmVyIH0+ID0gW107XG4gIHNlbGVjdGVkV2lkZ2V0czogQXJyYXk8d2lkZ2V0RGF0YU1vZGVsPiA9IFtdO1xuICBBU1NFVFMgPSBBU1NFVFM7XG4gIG1vZHVsZTogJ0NPTVBMSUFOQ0UnIHwgJ1JJU0snID0gJ0NPTVBMSUFOQ0UnO1xuICBASW5wdXQoKSBzZWxlY3RlZFdpZGdldHNEYXRhOiBhbnkgPSBbXTtcbiAgQElucHV0KCkgZGlzcGxheWVkV2lkZ2V0czogYW55ID0gW107XG4gIEBJbnB1dCgpIHNob3dSaXNrID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dDb21wbGlhbmNlID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1vZGUgPSAnQ1JFQVRFJztcbiAgbm9EYXRhVGV4dCA9XG4gICAgJ1lvdSBoYXZlIG5vdCBjb25maWd1cmVkIGFueSB3aWRnZXRzLiBDbGljayBvbiB0aGUgPHN0cm9uZz5Db25maWd1cmUgV2lkZ2V0czwvc3Ryb25nPiBidXR0b24gdG8gYmVnaW4uJztcblxuICBzZWxlY3RlZFdpZGdldElkczogYW55ID0gW107XG4gIHN1YlJlc3BvbnNpYmlsaXRpZXNTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBzdWJLZXlSZXNwb25zaWJpbGl0aWVzU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd1dpZGdldHMgPSB0cnVlO1xuICBjb21wbGlhbmNlV2lkZ2V0c0Rpc3BsYXlDb3VudCA9IDk7XG4gIHJpc2tXaWRnZXRzRGlzcGxheUNvdW50ID0gOTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRpYWxvZzogRGlhbG9nUmVmLFxuICAgIHB1YmxpYyBjb25maWd1cmVXaWRnZXRzU2VydmljZTogQ29uZmlndXJlV2lkZ2V0c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogU25hY2tCYXJTZXJ2aWNlXG4gICkge31cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IFtdO1xuXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XG4gICAgICB0aGlzLmFwcGx5RWRpdE1vZGVXaWRnZXRDYXRhbG9nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXBwbHlDcmVhdGVNb2RlV2lkZ2V0VmlzaWJpbGl0eSgpO1xuICAgICAgdGhpcy5hcHBseVNhdmVkV2lkZ2V0U2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWRXaWRnZXRzRGF0YSk7XG4gICAgfVxuXG4gICAgdGhpcy5tb2R1bGUgPSB0aGlzLnNob3dDb21wbGlhbmNlID8gJ0NPTVBMSUFOQ0UnIDogJ1JJU0snO1xuICAgIHRoaXMuc2V0U2VsZWN0ZWRXaWRnZXRzKCk7XG4gIH1cblxuICAvKiogRURJVDogc2hvdyBmdWxsIHdpZGdldCBjYXRhbG9nOyBjaGVjayBpdGVtcyBwcmVzZW50IGluIGdldFdpZGdldHMgd2lkZ2V0QXJyLiAqL1xuICBwcml2YXRlIGFwcGx5RWRpdE1vZGVXaWRnZXRDYXRhbG9nKCk6IHZvaWQge1xuICAgIHRoaXMud2lkZ2V0c0xpc3QuQ09NUExJQU5DRS5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xuICAgICAgZWxlLnZhbHVlID0gZmFsc2U7XG4gICAgICBlbGUudmlzaWJpbGl0eSA9IHRydWU7XG4gICAgICAoZWxlLnN1YldpZGdldHMgPz8gW10pLmZvckVhY2goKHN1YjogYW55KSA9PiB7XG4gICAgICAgIHN1Yi52YWx1ZSA9IGZhbHNlO1xuICAgICAgICBzdWIudmlzaWJpbGl0eSA9IHRydWU7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLmNvbXBsaWFuY2VXaWRnZXRzRGlzcGxheUNvdW50ID0gdGhpcy53aWRnZXRzTGlzdC5DT01QTElBTkNFLmZpbHRlcihcbiAgICAgICh3KSA9PiB3LnZpc2liaWxpdHlcbiAgICApLmxlbmd0aDtcbiAgICB0aGlzLnJpc2tXaWRnZXRzRGlzcGxheUNvdW50ID0gMDtcbiAgICB0aGlzLmFwcGx5U2F2ZWRXaWRnZXRTZWxlY3Rpb24odGhpcy5zZWxlY3RlZFdpZGdldHNEYXRhKTtcbiAgfVxuXG4gIC8qKiBDUkVBVEU6IGxpbWl0IHZpc2libGUgdGlsZXMgdG8gZGlzcGxheWVkV2lkZ2V0cyB3aGVuIHByb3ZpZGVkLiAqL1xuICBwcml2YXRlIGFwcGx5Q3JlYXRlTW9kZVdpZGdldFZpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc3BsYXllZFdpZGdldHM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldFdpZGdldHNWaXNpYmlsaXR5VG9GYWxzZSgpO1xuICAgIHRoaXMucmlza1dpZGdldHNEaXNwbGF5Q291bnQgPSAwO1xuICAgIHRoaXMuY29tcGxpYW5jZVdpZGdldHNEaXNwbGF5Q291bnQgPSAwO1xuICAgIGNvbnN0IGZpbmFsRGF0YSA9IFsuLi5uZXcgU2V0KHRoaXMuZGlzcGxheWVkV2lkZ2V0cyldO1xuICAgIGZpbmFsRGF0YS5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgIHRoaXMud2lkZ2V0c0xpc3QuQ09NUExJQU5DRS5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZWxlLmlkICE9PSBlbGVtZW50LndpZGdldF9jb2RlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsZS52aXNpYmlsaXR5ID0gdHJ1ZTtcbiAgICAgICAgaWYgKGVsZS5zdWJXaWRnZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCB2aXNpYmxlU3ViQ29kZXMgPSAoZWxlbWVudC5zdWJfd2lkZ2V0cyA/PyBbXSkubWFwKFxuICAgICAgICAgICAgKHN1YndpZGdldDogYW55KSA9PiBzdWJ3aWRnZXQud2lkZ2V0X2NvZGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGVsZS5zdWJXaWRnZXRzLmZvckVhY2goKHN1YkVsZW1lbnQ6IGFueSwgc3ViSW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgZWxlLnN1YldpZGdldHNbc3ViSW5kZXhdLnZpc2liaWxpdHkgPSB2aXNpYmxlU3ViQ29kZXMuaW5jbHVkZXMoXG4gICAgICAgICAgICAgIHN1YkVsZW1lbnQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21wbGlhbmNlV2lkZ2V0c0Rpc3BsYXlDb3VudCsrO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U2F2ZWRXaWRnZXRTZWxlY3Rpb24oc2F2ZWRXaWRnZXRzOiBhbnlbXSk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGEgPSBbLi4ubmV3IFNldChzYXZlZFdpZGdldHMgPz8gW10pXTtcbiAgICBkYXRhLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQ/LnN0YXRlICYmIGVsZW1lbnQuc3RhdGUgIT09ICdBQ1RJVkUnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMud2lkZ2V0c0xpc3QuQ09NUExJQU5DRS5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZWxlLmlkICE9PSBlbGVtZW50LndpZGdldF9jb2RlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsZS52YWx1ZSA9IHRydWU7XG4gICAgICAgIGlmIChlbGUuc3ViV2lkZ2V0cy5sZW5ndGggPiAwICYmIGVsZW1lbnQuc3ViX3dpZGdldHM/Lmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IGFjdGl2ZVN1YkNvZGVzID0gKGVsZW1lbnQuc3ViX3dpZGdldHMgPz8gW10pXG4gICAgICAgICAgICAuZmlsdGVyKChzdWJ3aWRnZXQ6IGFueSkgPT4gc3Vid2lkZ2V0LnN0YXRlID09PSAnQUNUSVZFJylcbiAgICAgICAgICAgIC5tYXAoKHN1YndpZGdldDogYW55KSA9PiBzdWJ3aWRnZXQud2lkZ2V0X2NvZGUpO1xuICAgICAgICAgIGVsZS5zdWJXaWRnZXRzLmZvckVhY2goKHN1YkVsZW1lbnQ6IGFueSwgc3ViSW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgZWxlLnN1YldpZGdldHNbc3ViSW5kZXhdLnZhbHVlID0gYWN0aXZlU3ViQ29kZXMuaW5jbHVkZXMoXG4gICAgICAgICAgICAgIHN1YkVsZW1lbnQuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7fVxuXG4gIHdpZGdldHNMaXN0ID0ge1xuICAgIENPTVBMSUFOQ0U6IFtcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6ICdPdmVydmlldycsXG4gICAgICAgIGlkOiAnb3ZlcnZpZXcnLFxuICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAnT3ZlcnZpZXcgc2hvd3MgdGhlIHBlcmZvcm1hbmNlIG9mIHJlc3BvbnNpYmlsaXRpZXMgYW5kIFByb2dyYW1zLicsXG4gICAgICAgIHdpZGdldEltYWdlOiBBU1NFVFMub3ZlcnZpZXdXaWRnZXQsXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgICAgdmlzaWJpbGl0eTogdHJ1ZSxcbiAgICAgICAgbW9kdWxlOiAnQ09NUExJQU5DRScsXG4gICAgICAgIHN1YldpZGdldHM6IFtdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6ICdSZXNwb25zaWJpbGl0eSBDYWxlbmRhcicsXG4gICAgICAgIGlkOiAnY29tcGxpYW5jZV9jYWxlbmRhcl9mbGFnJyxcbiAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgJ1RoZSBSZXNwb25zaWJpbGl0eSBDYWxlbmRhciBzaG93cyB0aGUgZHVlIGRhdGVzIG9mIHJlc3BvbnNpYmlsaXRpZXMgaW4gYSBjYWxlbmRhciBmb3JtYXQuIFRoZSByZXNwb25zaWJpbGl0aWVzIGFyZSBjb2xvciBjb2RlZCB0byByZWZsZWN0IHRoZSBzdGF0dXMgb2YgdGhlIHJlc3BvbnNpYmlsaXRpZXMuJyxcbiAgICAgICAgd2lkZ2V0SW1hZ2U6IEFTU0VUUy5yZXNwb25zaWJpbGl0eUNhbGVuZGVyV2lkZ2V0LFxuICAgICAgICB2YWx1ZTogZmFsc2UsXG4gICAgICAgIHZpc2liaWxpdHk6IHRydWUsXG4gICAgICAgIG1vZHVsZTogJ0NPTVBMSUFOQ0UnLFxuICAgICAgICBzdWJXaWRnZXRzOiBbXSxcbiAgICAgIH0sXG5cbiAgICAgIHtcbiAgICAgICAgdGl0bGU6ICdSZXNwb25zaWJpbGl0aWVzIGJ5IEFzc2lnbmVlJyxcbiAgICAgICAgaWQ6ICdyZXNwb25zaWJpbGl0aWVzX2J5X2Fzc2lnbmVlJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgUmVzcG9uc2liaWxpdGllcyBieSBBc3NpZ25lZSB3aWRnZXQgc2hvd3MgdGhlIHBlcmZvcm1hbmNlIG9mIHJlc3BvbnNpYmlsaXRpZXMgYnkgdXNlcnMuJyxcbiAgICAgICAgd2lkZ2V0SW1hZ2U6IEFTU0VUUy5yZXNwb25zaWJpbGl0aWVzQnlBc3NpZ25lZSxcbiAgICAgICAgdmFsdWU6IGZhbHNlLFxuICAgICAgICB2aXNpYmlsaXR5OiB0cnVlLFxuICAgICAgICBtb2R1bGU6ICdDT01QTElBTkNFJyxcbiAgICAgICAgc3ViV2lkZ2V0czogW10sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogJ1Jlc3BvbnNpYmlsaXR5IENlbnRlciBPdmVydmlldycsXG4gICAgICAgIGlkOiAncmVzcG9uc2liaWxpdHlfY2VudGVyX292ZXJ2aWV3X2ZsYWcnLFxuICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAnVGhlIFJlc3BvbnNpYmlsaXR5IENlbnRlciBPdmVydmlldyBzaG93cyB0aGUgcGVyZm9ybWFuY2Ugb2YgcmVzcG9uc2liaWxpdGllcyBhbmQgUmVzcG9uc2liaWxpdHkgQ2VudGVycy4nLFxuICAgICAgICB3aWRnZXRJbWFnZTogQVNTRVRTLnJlc3BvbnNpYmlsaXR5Q2VudGVyT3ZlcnZpZXdXaWRnZXQsXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgICAgdmlzaWJpbGl0eTogdHJ1ZSxcbiAgICAgICAgbW9kdWxlOiAnQ09NUExJQU5DRScsXG4gICAgICAgIHN1YldpZGdldHM6IFtdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6ICdSZXNwb25zaWJpbGl0aWVzJyxcbiAgICAgICAgaWQ6ICdteV9yZXNwb25zaWJpbGl0aWVzJyxcbiAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgJ1RoaXMgd2lkZ2V0IHNob3dzIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgcmVzcG9uc2liaWxpdGllcyB0aGF0IHlvdSBhcmUgcmVxdWlyZWQgdG8gY29tcGxldGUsIHRoZSByZXNwb25zaWJpbGl0aWVzIHRoYXQgeW91IGFyZSByZXZpZXdpbmcgYW5kIHRoZSByZXNwb25zaWJpbGl0aWVzIHRoYXQgeW91IGFyZSBvdmVyc2VlaW5nLicsXG4gICAgICAgIHdpZGdldEltYWdlOiBBU1NFVFMubXlSZXNwb25zaWJpbGl0aWVzV2lkZ2V0LFxuICAgICAgICB0YWJPcHRpb246IHRydWUsXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgICAgdmlzaWJpbGl0eTogdHJ1ZSxcbiAgICAgICAgbW9kdWxlOiAnQ09NUExJQU5DRScsXG4gICAgICAgIHN1YldpZGdldHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ015IFJlc3BvbnNpYmlsaXRpZXMnLFxuICAgICAgICAgICAgaWQ6ICdteV9yZXNwb25zaWJpbGl0eV9mbGFnJyxcbiAgICAgICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ0nigJltIFJldmlld2luZycsXG4gICAgICAgICAgICBpZDogJ3Jldmlld2VyX3Jlc3BvbnNpYmlsaXR5X2ZsYWcnLFxuICAgICAgICAgICAgdmFsdWU6IGZhbHNlLFxuICAgICAgICAgICAgdmlzaWJpbGl0eTogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRpdGxlOiAnSeKAmW0gT3ZlcnNlZWluZycsXG4gICAgICAgICAgICBpZDogJ2NjX3Jlc3BvbnNpYmlsaXR5X2ZsYWcnLFxuICAgICAgICAgICAgdmFsdWU6IGZhbHNlLFxuICAgICAgICAgICAgdmlzaWJpbGl0eTogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6ICdLZXkgUmVzcG9uc2liaWxpdGllcycsXG4gICAgICAgIGlkOiAna2V5X3Jlc3BvbnNpYmlsaXRpZXMnLFxuICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAnVGhpcyB3aWRnZXQgc2hvd3MgdGhlIHBlcmZvcm1hbmNlIG9mIGtleSByZXNwb25zaWJpbGl0aWVzIHRoYXQgeW91IGFyZSByZXF1aXJlZCB0byBjb21wbGV0ZSwgdGhhdCB5b3UgYXJlIHJldmlld2luZywgdGhhdCB5b3UgYXJlIG92ZXJzZWVpbmcgYW5kIHRoYXQgeW91IGhhdmUgYXNzaWduZWQgdG8gYW5vdGhlciBwZXJzb24uJyxcbiAgICAgICAgd2lkZ2V0SW1hZ2U6IEFTU0VUUy5rZXlSZXNwb25zaWJpbGl0aWVzV2lkZ2V0LFxuICAgICAgICB0YWJPcHRpb246IHRydWUsXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgICAgdmlzaWJpbGl0eTogdHJ1ZSxcbiAgICAgICAgbW9kdWxlOiAnQ09NUExJQU5DRScsXG4gICAgICAgIHN1YldpZGdldHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aXRsZTogJ092ZXJ2aWV3JyxcbiAgICAgICAgICAgIGlkOiAna2V5X3Jlc3BvbnNpYmlsaXRpZXNfb3ZlcnZpZXdfZmxhZycsXG4gICAgICAgICAgICB2YWx1ZTogZmFsc2UsXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6ICdNeSBSZXNwb25zaWJpbGl0aWVzJyxcbiAgICAgICAgICAgIGlkOiAna2V5X215X3Jlc3BvbnNpYmlsaXRpZXNfZmxhZycsXG4gICAgICAgICAgICB2YWx1ZTogZmFsc2UsXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6ICdJ4oCZbSBSZXZpZXdpbmcnLFxuICAgICAgICAgICAgaWQ6ICdrZXlfaV9hbV9yZXZpZXdpbmdfZmxhZycsXG4gICAgICAgICAgICB2YWx1ZTogZmFsc2UsXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGl0bGU6ICdJ4oCZbSBPdmVyc2VlaW5nJyxcbiAgICAgICAgICAgIGlkOiAna2V5X2lfYW1fb3ZlcnNlZWluZ19mbGFnJyxcbiAgICAgICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnVHJlbmQgQW5hbHlzaXMnLFxuICAgICAgICBpZDogJ3RyZW5kX2FuYWx5c2lzX2ZsYWcnLFxuICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAnVGhlIFRyZW5kIEFuYWx5c2lzIGlzIGEgZ3JhcGhpY2FsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwZXJmb3JtYW5jZSBvZiByZXNwb25zaWJpbGl0aWVzIG92ZXIgYSBwZXJpb2QuJyxcbiAgICAgICAgd2lkZ2V0SW1hZ2U6IEFTU0VUUy50cmVuZEFuYWx5c2lzV2lkZ2V0LFxuICAgICAgICB2YWx1ZTogZmFsc2UsXG4gICAgICAgIHZpc2liaWxpdHk6IHRydWUsXG4gICAgICAgIG1vZHVsZTogJ0NPTVBMSUFOQ0UnLFxuICAgICAgICBzdWJXaWRnZXRzOiBbXSxcbiAgICAgIH0sXG4gIFxuICAgIF0sXG4gIFxuICB9O1xuXG4gIHNlbGVjdFdpZGdldChcbiAgICBldmVudDogYW55LFxuICAgIG1vZHVsZTogJ0NPTVBMSUFOQ0UnLFxuICAgIHdpZGdldElkOiBzdHJpbmcsXG4gICAgc3ViV2lkZ2V0SWQ/OiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3Qgd2lkZ2V0SW5kZXggPSB0aGlzLndpZGdldHNMaXN0W21vZHVsZV0uZmluZEluZGV4KFxuICAgICAgKGVsZTogYW55KSA9PiBlbGUuaWQgPT0gd2lkZ2V0SWRcbiAgICApO1xuICAgIGNvbnN0IGlzU3ViV2lkZ2V0QWRkYWJsZSA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbmRJbmRleChcbiAgICAgICh3aWRnZXQ6IGFueSkgPT4gd2lkZ2V0LmlkID09PSB3aWRnZXRJZFxuICAgICk7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmxlbmd0aCA+PSAxMCAmJlxuICAgICAgICAhKHN1YldpZGdldElkICYmIGlzU3ViV2lkZ2V0QWRkYWJsZSA+PSAwKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdygnWW91IGNhbm5vdCBhZGQgbW9yZSB0aGFuIDEwIHdpZGdldHMuJywgJ2FsZXJ0Jyk7XG4gICAgICAgIHRoaXMuc2hvd1dpZGdldHMgPSBmYWxzZTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy53aWRnZXRzTGlzdFttb2R1bGVdW3dpZGdldEluZGV4XS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc2hvd1dpZGdldHMgPSB0cnVlO1xuICAgICAgICB9LCAxMCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMud2lkZ2V0c0xpc3RbbW9kdWxlXVt3aWRnZXRJbmRleF0udmFsdWUgPSB0cnVlO1xuICAgICAgaWYgKHRoaXMud2lkZ2V0c0xpc3RbbW9kdWxlXVt3aWRnZXRJbmRleF0uc3ViV2lkZ2V0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmICghc3ViV2lkZ2V0SWQpIHtcbiAgICAgICAgICB0aGlzLndpZGdldHNMaXN0W21vZHVsZV1bd2lkZ2V0SW5kZXhdLnN1YldpZGdldHMuZm9yRWFjaChcbiAgICAgICAgICAgIChlbGUpID0+IChlbGUudmFsdWUgPSB0cnVlKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3Qgc3ViV2lkZ2V0SW5kZXggPSB0aGlzLndpZGdldHNMaXN0W21vZHVsZV1bXG4gICAgICAgICAgICB3aWRnZXRJbmRleFxuICAgICAgICAgIF0uc3ViV2lkZ2V0cy5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUuaWQgPT0gc3ViV2lkZ2V0SWQpO1xuICAgICAgICAgIHRoaXMud2lkZ2V0c0xpc3RbbW9kdWxlXVt3aWRnZXRJbmRleF0uc3ViV2lkZ2V0c1tcbiAgICAgICAgICAgIHN1YldpZGdldEluZGV4XG4gICAgICAgICAgXS52YWx1ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMud2lkZ2V0c0xpc3RbbW9kdWxlXVt3aWRnZXRJbmRleF0uc3ViV2lkZ2V0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmICghc3ViV2lkZ2V0SWQpIHtcbiAgICAgICAgICB0aGlzLndpZGdldHNMaXN0W21vZHVsZV1bd2lkZ2V0SW5kZXhdLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy53aWRnZXRzTGlzdFttb2R1bGVdW3dpZGdldEluZGV4XS5zdWJXaWRnZXRzLmZvckVhY2goXG4gICAgICAgICAgICAoZWxlOiBhbnkpID0+IChlbGUudmFsdWUgPSBmYWxzZSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHN1YldpZGdldEluZGV4ID0gdGhpcy53aWRnZXRzTGlzdFttb2R1bGVdW1xuICAgICAgICAgICAgd2lkZ2V0SW5kZXhcbiAgICAgICAgICBdLnN1YldpZGdldHMuZmluZEluZGV4KChlbGU6IGFueSkgPT4gZWxlLmlkID09IHN1YldpZGdldElkKTtcbiAgICAgICAgICB0aGlzLndpZGdldHNMaXN0W21vZHVsZV1bd2lkZ2V0SW5kZXhdLnN1YldpZGdldHNbXG4gICAgICAgICAgICBzdWJXaWRnZXRJbmRleFxuICAgICAgICAgIF0udmFsdWUgPSBmYWxzZTtcblxuICAgICAgICAgIGNvbnN0IGlzQWxsV2lkZ2V0c1JlbW92ZWQgPSB0aGlzLndpZGdldHNMaXN0W21vZHVsZV1bXG4gICAgICAgICAgICB3aWRnZXRJbmRleFxuICAgICAgICAgIF0uc3ViV2lkZ2V0cy5ldmVyeSgoZWxlOiBhbnkpID0+IGVsZS52YWx1ZSA9PSBmYWxzZSk7XG4gICAgICAgICAgaWYgKGlzQWxsV2lkZ2V0c1JlbW92ZWQpIHtcbiAgICAgICAgICAgIHRoaXMud2lkZ2V0c0xpc3RbbW9kdWxlXVt3aWRnZXRJbmRleF0udmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMud2lkZ2V0c0xpc3RbbW9kdWxlXVt3aWRnZXRJbmRleF0udmFsdWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZXRTZWxlY3RlZFdpZGdldHMoKTtcbiAgfVxuICBzZXRTZWxlY3RlZFdpZGdldHMoKSB7XG4gICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSBbXTtcbiAgICB0aGlzLndpZGdldHNMaXN0LkNPTVBMSUFOQ0UuZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcbiAgICAgIGlmIChlbGUudmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMucHVzaChlbGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIHRoaXMud2lkZ2V0c0xpc3QuUklTSy5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xuICAgIC8vICAgaWYgKGVsZS52YWx1ZSkge1xuICAgIC8vICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5wdXNoKGVsZSk7XG4gICAgLy8gICB9XG4gICAgLy8gfSk7XG4gIH1cblxuICByZW1vdmVXaWRnZXQod2lkZ2V0OiB3aWRnZXRDb25maWcpIHtcbiAgICBjb25zdCB3aWRnZXRJbmRleCA9IHRoaXMud2lkZ2V0c0xpc3Rbd2lkZ2V0Lm1vZHVsZV0uZmluZEluZGV4KFxuICAgICAgKGVsZTogYW55KSA9PiBlbGUuaWQgPT0gd2lkZ2V0LmlkXG4gICAgKTtcbiAgICB0aGlzLndpZGdldHNMaXN0W3dpZGdldC5tb2R1bGVdW3dpZGdldEluZGV4XS52YWx1ZSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLndpZGdldHNMaXN0W3dpZGdldC5tb2R1bGVdW3dpZGdldEluZGV4XS5zdWJXaWRnZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMud2lkZ2V0c0xpc3Rbd2lkZ2V0Lm1vZHVsZV1bd2lkZ2V0SW5kZXhdLnN1YldpZGdldHMuZm9yRWFjaChcbiAgICAgICAgKGVsZTogYW55KSA9PiAoZWxlLnZhbHVlID0gZmFsc2UpXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLnNldFNlbGVjdGVkV2lkZ2V0cygpO1xuICB9XG5cbiAgb25OZXh0Q2xpY2soKSB7XG4gICAgdGhpcy53aWRnZXRzRGF0YU1vZGlmaWVkLmVtaXQodGhpcy5zZWxlY3RlZFdpZGdldHMpO1xuICB9XG5cbiAgY2xvc2VDb25maWd1cmVEYXNoYm9hcmQoKSB7XG4gICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSBbXTtcbiAgICB0aGlzLmRpYWxvZy5jbG9zZSgpO1xuICAgIHRoaXMuY2xvc2VDb25maWd1cmVXaWRnZXRzLmVtaXQoZmFsc2UpO1xuICB9XG5cbiAgc2V0V2lkZ2V0c1Zpc2liaWxpdHlUb0ZhbHNlKCkge1xuICAgIHRoaXMud2lkZ2V0c0xpc3QuQ09NUExJQU5DRS5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xuICAgICAgZWxlLnZpc2liaWxpdHkgPSBmYWxzZTtcbiAgICAgIGlmIChlbGUuc3ViV2lkZ2V0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGVsZS5zdWJXaWRnZXRzLmZvckVhY2goKHN1YkVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIHN1YkVsZW1lbnQudmlzaWJpbGl0eSA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyB0aGlzLndpZGdldHNMaXN0LlJJU0suZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcbiAgICAvLyAgIGVsZS52aXNpYmlsaXR5ID0gZmFsc2U7XG4gICAgLy8gICBpZiAoZWxlLnN1YldpZGdldHMubGVuZ3RoID4gMCkge1xuICAgIC8vICAgICBlbGUuc3ViV2lkZ2V0cy5mb3JFYWNoKChzdWJFbGVtZW50OiBhbnkpID0+IHtcbiAgICAvLyAgICAgICBzdWJFbGVtZW50LnZpc2liaWxpdHkgPSBmYWxzZTtcbiAgICAvLyAgICAgfSk7XG4gICAgLy8gICB9XG4gICAgLy8gfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb25maWd1cmUtd2lkZ2V0cyB2eC1kLWJsb2NrXCIgKm5nSWY9XCJzaG93V2lkZ2V0c1wiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjb25maWd1cmUtd2lkZ2V0cy1oZWFkIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuIHZ4LXBsLTQgdngtcHItNFwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiY29uZmlndXJlLXdpZGdldHMtdGl0bGUgdngtZnMtMTQgdngtZnctNTAwIHZ4LWxhYmVsLXR4dFwiPlxuICAgICAgQ29uZmlndXJlIFdpZGdldHNcbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImNvbmZpZ3VyZS13aWRnZXRzLWJhY2sgdngtZnMtMTQgdngtZnctNTAwIHZ4LWxhYmVsLXR4dCB2eC1tLTAgdngtcC0wIHZ4LWQtaW5saW5lLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgIChjbGljayk9XCJjbG9zZUNvbmZpZ3VyZURhc2hib2FyZCgpXCJcbiAgICA+XG4gICAgICA8aSBjbGFzcz1cImljb25zIHZ4LWZzLTE2XCI+JiN4ZTkxZDs8L2k+IEJhY2tcbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb25maWd1cmUtd2lkZ2V0cy1ib2R5XCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbmZpZ3VyZS13aWRnZXRzLXRhYlwiPlxuICAgICAgPHVsPlxuICAgICAgICA8bGlcbiAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cIm1vZHVsZSA9PT0gJ0NPTVBMSUFOQ0UnXCJcbiAgICAgICAgICAqbmdJZj1cInNob3dDb21wbGlhbmNlXCJcbiAgICAgICAgICAoY2xpY2spPVwibW9kdWxlID0gJ0NPTVBMSUFOQ0UnXCJcbiAgICAgICAgPlxuICAgICAgICAgIDwhLS0gPGJ1dHRvbj5cbiAgICAgICAgICAgIENvbXBsaWFuY2U8c3Bhbj57eyBjb21wbGlhbmNlV2lkZ2V0c0Rpc3BsYXlDb3VudCB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj4gLS0+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaSBbY2xhc3MuYWN0aXZlXT1cIm1vZHVsZSA9PT0gJ1JJU0snXCIgKm5nSWY9XCJzaG93Umlza1wiPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm1vZHVsZSA9ICdSSVNLJ1wiPlxuICAgICAgICAgICAgUmlza3M8c3Bhbj57eyByaXNrV2lkZ2V0c0Rpc3BsYXlDb3VudCB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9saT5cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbmZpZ3VyZS13aWRnZXRzLXNlYXJjaCB2eC1tYi0yXCI+XG4gICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkwYjs8L2k+XG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCB3aWRnZXRzXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hcIiAvPlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiY29uZmlndXJlLXdpZGdldHMtbGlzdCB2eC1kLWZsZXggdngtZmxleC13cmFwXCJcbiAgICAgICpuZ0lmPVwiKHdpZGdldHNMaXN0W21vZHVsZV0gfCBzZWFyY2ggOiBzZWFyY2gpLmxlbmd0aCAhPT0gMFwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdGb3I9XCJsZXQgd2lkZ2V0IG9mIHdpZGdldHNMaXN0W21vZHVsZV0gfCBzZWFyY2ggOiBzZWFyY2hcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlndXJlLXdpZGdldHMtaXRlbVwiICpuZ0lmPVwid2lkZ2V0Py52aXNpYmlsaXR5XCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYmxvY2tcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJ3aWRnZXQudmFsdWVcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInNlbGVjdFdpZGdldCgkZXZlbnQudGFyZ2V0LmNoZWNrZWQsIG1vZHVsZSwgd2lkZ2V0LmlkKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrLWljb25cIj5cbiAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tcIlxuICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGVjay1jaXJjbGVcIlxuICAgICAgICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGVjay1jaXJjbGVcIlxuICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlndXJlLXdpZGdldHMtaXRlbS1oZWFkXCI+XG4gICAgICAgICAgICAgIDxoNFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29uZmlndXJlLXdpZGdldHMtaXRlbS10aXRsZVwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJ3aWRnZXQ/LnRpdGxlXCJcbiAgICAgICAgICAgICAgPjwvaDQ+XG4gICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb25maWd1cmUtd2lkZ2V0cy1pdGVtLWRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIndpZGdldD8uZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICA+PC9wPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhd2lkZ2V0LnZhbHVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbmZpZ3VyZS13aWRnZXRzLWl0ZW0tYnV0dG9uIGFkZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFdpZGdldCh0cnVlLCBtb2R1bGUsIHdpZGdldC5pZClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgKyBBRERcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cIndpZGdldC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb25maWd1cmUtd2lkZ2V0cy1pdGVtLWJ1dHRvbiByZW1vdmVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RXaWRnZXQoZmFsc2UsIG1vZHVsZSwgd2lkZ2V0LmlkKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAtIFJlbW92ZVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZ3VyZS13aWRnZXRzLWl0ZW0tYm9keVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2Utd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgIFtuZ1NyY109XCJ3aWRnZXQ/LndpZGdldEltYWdlXCJcbiAgICAgICAgICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgICAgICAgICAgICB3aWR0aD1cIjc5MFwiXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9XCI2MTNcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbG9hdGluZy1vcHRpb24gdngtZC1mbGV4XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIndpZGdldD8uc3ViV2lkZ2V0cz8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdWJXaWRnZXQgb2Ygd2lkZ2V0LnN1YldpZGdldHNcIj5cbiAgICAgICAgICAgICAgICAgIDxhcHAtY3MtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdWJXaWRnZXQudmlzaWJpbGl0eVwiXG4gICAgICAgICAgICAgICAgICAgIChuZ1ZhbHVlQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdFdpZGdldCgkZXZlbnQsIG1vZHVsZSwgd2lkZ2V0LmlkLCBzdWJXaWRnZXQuaWQpXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cInN1YldpZGdldC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgID57eyBzdWJXaWRnZXQudGl0bGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvYXBwLWNzLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gTm8gRGF0YSBJbWFnZSAtLT5cbiAgICA8L2Rpdj5cbiAgICA8YXBwLW5vLWRhdGFcbiAgICAgICpuZ0lmPVwiKHdpZGdldHNMaXN0W21vZHVsZV0gfCBzZWFyY2ggOiBzZWFyY2gpLmxlbmd0aCA9PT0gMFwiXG4gICAgICBbbm9EYXRhSW1hZ2VdPVwiQVNTRVRTLmNvbmZpZ3VyZV93aWRnZXRcIlxuICAgICAgW25vRGF0YVRleHRdPVwiJ05vIGRhdGEgdG8gZGlzcGxheSdcIlxuICAgID5cbiAgICA8L2FwcC1uby1kYXRhPlxuXG4gICAgPGZsb2F0aW5nLWJhclxuICAgICAgKHN1Ym1pdEV2ZW50KT1cIm9uTmV4dENsaWNrKClcIlxuICAgICAgKGNhbmNlbEV2ZW50KT1cImNsb3NlQ29uZmlndXJlRGFzaGJvYXJkKClcIlxuICAgICAgW3NlbGVjdGVkRGF0YV09XCJzZWxlY3RlZFdpZGdldHNcIlxuICAgICAgKGRlbGV0ZUV2ZW50KT1cInJlbW92ZVdpZGdldCgkZXZlbnQpXCJcbiAgICA+PC9mbG9hdGluZy1iYXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
1
+ import { Component, EventEmitter, Input, Output, } from '@angular/core';
2
+ import { ASSETS } from '../../constants/assets.constant';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../../ui-kit/dialog/dialog-ref";
5
+ import * as i2 from "../../services/configure-widgets.service";
6
+ import * as i3 from "../../../ui-kit/snack-bar/snack-bar.service";
7
+ import * as i4 from "@angular/common";
8
+ import * as i5 from "../../../ui-kit/floating-bar/floating-bar.component";
9
+ import * as i6 from "../../../ui-kit/formgroup/cs-checkbox/cs-checkbox.component";
10
+ import * as i7 from "@angular/forms";
11
+ import * as i8 from "../../../ui-kit/no-data/no-data.component";
12
+ import * as i9 from "../../pipes/search.pipe";
13
+ export class ConfigureWidgetsComponent {
14
+ dialog;
15
+ configureWidgetsService;
16
+ snackBar;
17
+ widgetsDataModified = new EventEmitter();
18
+ closeConfigureWidgets = new EventEmitter();
19
+ checkboxStatus;
20
+ search = '';
21
+ checkedArray = [];
22
+ selectedWidgets = [];
23
+ ASSETS = ASSETS;
24
+ module = 'COMPLIANCE';
25
+ selectedWidgetsData = [];
26
+ displayedWidgets = [];
27
+ showRisk = false;
28
+ showCompliance = false;
29
+ mode = 'CREATE';
30
+ noDataText = 'You have not configured any widgets. Click on the <strong>Configure Widgets</strong> button to begin.';
31
+ selectedWidgetIds = [];
32
+ subResponsibilitiesSelected = false;
33
+ subKeyResponsibilitiesSelected = false;
34
+ showWidgets = true;
35
+ complianceWidgetsDisplayCount = 9;
36
+ riskWidgetsDisplayCount = 9;
37
+ constructor(dialog, configureWidgetsService, snackBar) {
38
+ this.dialog = dialog;
39
+ this.configureWidgetsService = configureWidgetsService;
40
+ this.snackBar = snackBar;
41
+ }
42
+ ngOnChanges() {
43
+ this.selectedWidgets = [];
44
+ if (this.mode === 'EDIT') {
45
+ this.applyEditModeWidgetCatalog();
46
+ }
47
+ else {
48
+ this.applyCreateModeWidgetVisibility();
49
+ this.applySavedWidgetSelection(this.selectedWidgetsData);
50
+ }
51
+ this.module = this.showCompliance ? 'COMPLIANCE' : 'RISK';
52
+ this.setSelectedWidgets();
53
+ }
54
+ /** EDIT: show full widget catalog; check items present in getWidgets widgetArr. */
55
+ applyEditModeWidgetCatalog() {
56
+ this.widgetsList.COMPLIANCE.forEach((ele) => {
57
+ ele.value = false;
58
+ ele.visibility = true;
59
+ (ele.subWidgets ?? []).forEach((sub) => {
60
+ sub.value = false;
61
+ sub.visibility = true;
62
+ });
63
+ });
64
+ this.complianceWidgetsDisplayCount = this.widgetsList.COMPLIANCE.filter((w) => w.visibility).length;
65
+ this.riskWidgetsDisplayCount = 0;
66
+ this.applySavedWidgetSelection(this.selectedWidgetsData);
67
+ }
68
+ /** CREATE: limit visible tiles to displayedWidgets when provided. */
69
+ applyCreateModeWidgetVisibility() {
70
+ if (!this.displayedWidgets?.length) {
71
+ return;
72
+ }
73
+ this.setWidgetsVisibilityToFalse();
74
+ this.riskWidgetsDisplayCount = 0;
75
+ this.complianceWidgetsDisplayCount = 0;
76
+ const finalData = [...new Set(this.displayedWidgets)];
77
+ finalData.forEach((element) => {
78
+ this.widgetsList.COMPLIANCE.forEach((ele) => {
79
+ if (ele.id !== element.widget_code) {
80
+ return;
81
+ }
82
+ ele.visibility = true;
83
+ if (ele.subWidgets.length > 0) {
84
+ const visibleSubCodes = (element.sub_widgets ?? []).map((subwidget) => subwidget.widget_code);
85
+ ele.subWidgets.forEach((subElement, subIndex) => {
86
+ ele.subWidgets[subIndex].visibility = visibleSubCodes.includes(subElement.id);
87
+ });
88
+ }
89
+ this.complianceWidgetsDisplayCount++;
90
+ });
91
+ });
92
+ }
93
+ applySavedWidgetSelection(savedWidgets) {
94
+ const data = [...new Set(savedWidgets ?? [])];
95
+ data.forEach((element) => {
96
+ if (element?.state && element.state !== 'ACTIVE') {
97
+ return;
98
+ }
99
+ this.widgetsList.COMPLIANCE.forEach((ele) => {
100
+ if (ele.id !== element.widget_code) {
101
+ return;
102
+ }
103
+ ele.value = true;
104
+ if (ele.subWidgets.length > 0 && element.sub_widgets?.length) {
105
+ const activeSubCodes = (element.sub_widgets ?? [])
106
+ .filter((subwidget) => subwidget.state === 'ACTIVE')
107
+ .map((subwidget) => subwidget.widget_code);
108
+ ele.subWidgets.forEach((subElement, subIndex) => {
109
+ ele.subWidgets[subIndex].value = activeSubCodes.includes(subElement.id);
110
+ });
111
+ }
112
+ });
113
+ });
114
+ }
115
+ ngOnInit() { }
116
+ widgetsList = {
117
+ COMPLIANCE: [
118
+ {
119
+ title: 'Overview',
120
+ id: 'overview',
121
+ description: 'Overview shows the performance of responsibilities and Programs.',
122
+ widgetImage: ASSETS.overviewWidget,
123
+ value: false,
124
+ visibility: true,
125
+ module: 'COMPLIANCE',
126
+ subWidgets: [],
127
+ },
128
+ {
129
+ title: 'Responsibility Calendar',
130
+ id: 'compliance_calendar_flag',
131
+ description: 'The Responsibility Calendar shows the due dates of responsibilities in a calendar format. The responsibilities are color coded to reflect the status of the responsibilities.',
132
+ widgetImage: ASSETS.responsibilityCalenderWidget,
133
+ value: false,
134
+ visibility: true,
135
+ module: 'COMPLIANCE',
136
+ subWidgets: [],
137
+ },
138
+ {
139
+ title: 'Responsibilities by Assignee',
140
+ id: 'responsibilities_by_assignee',
141
+ description: 'The Responsibilities by Assignee widget shows the performance of responsibilities by users.',
142
+ widgetImage: ASSETS.responsibilitiesByAssignee,
143
+ value: false,
144
+ visibility: true,
145
+ module: 'COMPLIANCE',
146
+ subWidgets: [],
147
+ },
148
+ {
149
+ title: 'Responsibility Center Overview',
150
+ id: 'responsibility_center_overview_flag',
151
+ description: 'The Responsibility Center Overview shows the performance of responsibilities and Responsibility Centers.',
152
+ widgetImage: ASSETS.responsibilityCenterOverviewWidget,
153
+ value: false,
154
+ visibility: true,
155
+ module: 'COMPLIANCE',
156
+ subWidgets: [],
157
+ },
158
+ {
159
+ title: 'Responsibilities',
160
+ id: 'my_responsibilities',
161
+ description: 'This widget shows the performance of the responsibilities that you are required to complete, the responsibilities that you are reviewing and the responsibilities that you are overseeing.',
162
+ widgetImage: ASSETS.myResponsibilitiesWidget,
163
+ tabOption: true,
164
+ value: false,
165
+ visibility: true,
166
+ module: 'COMPLIANCE',
167
+ subWidgets: [
168
+ {
169
+ title: 'My Responsibilities',
170
+ id: 'my_responsibility_flag',
171
+ value: false,
172
+ visibility: true,
173
+ },
174
+ {
175
+ title: 'I’m Reviewing',
176
+ id: 'reviewer_responsibility_flag',
177
+ value: false,
178
+ visibility: true,
179
+ },
180
+ {
181
+ title: 'I’m Overseeing',
182
+ id: 'cc_responsibility_flag',
183
+ value: false,
184
+ visibility: true,
185
+ },
186
+ ],
187
+ },
188
+ {
189
+ title: 'Key Responsibilities',
190
+ id: 'key_responsibilities',
191
+ description: 'This widget shows the performance of key responsibilities that you are required to complete, that you are reviewing, that you are overseeing and that you have assigned to another person.',
192
+ widgetImage: ASSETS.keyResponsibilitiesWidget,
193
+ tabOption: true,
194
+ value: false,
195
+ visibility: true,
196
+ module: 'COMPLIANCE',
197
+ subWidgets: [
198
+ {
199
+ title: 'Overview',
200
+ id: 'key_responsibilities_overview_flag',
201
+ value: false,
202
+ visibility: true,
203
+ },
204
+ {
205
+ title: 'My Responsibilities',
206
+ id: 'key_my_responsibilities_flag',
207
+ value: false,
208
+ visibility: true,
209
+ },
210
+ {
211
+ title: 'I’m Reviewing',
212
+ id: 'key_i_am_reviewing_flag',
213
+ value: false,
214
+ visibility: true,
215
+ },
216
+ {
217
+ title: 'I’m Overseeing',
218
+ id: 'key_i_am_overseeing_flag',
219
+ value: false,
220
+ visibility: true,
221
+ },
222
+ ],
223
+ },
224
+ {
225
+ title: 'Trend Analysis',
226
+ id: 'trend_analysis_flag',
227
+ description: 'The Trend Analysis is a graphical representation of the performance of responsibilities over a period.',
228
+ widgetImage: ASSETS.trendAnalysisWidget,
229
+ value: false,
230
+ visibility: true,
231
+ module: 'COMPLIANCE',
232
+ subWidgets: [],
233
+ },
234
+ ],
235
+ };
236
+ selectWidget(event, module, widgetId, subWidgetId) {
237
+ const widgetIndex = this.widgetsList[module].findIndex((ele) => ele.id == widgetId);
238
+ const isSubWidgetAddable = this.selectedWidgets.findIndex((widget) => widget.id === widgetId);
239
+ if (event) {
240
+ if (this.selectedWidgets.length >= 10 &&
241
+ !(subWidgetId && isSubWidgetAddable >= 0)) {
242
+ this.snackBar.show('You cannot add more than 10 widgets.', 'alert');
243
+ this.showWidgets = false;
244
+ setTimeout(() => {
245
+ this.widgetsList[module][widgetIndex].value = false;
246
+ this.showWidgets = true;
247
+ }, 10);
248
+ return;
249
+ }
250
+ this.widgetsList[module][widgetIndex].value = true;
251
+ if (this.widgetsList[module][widgetIndex].subWidgets.length > 0) {
252
+ if (!subWidgetId) {
253
+ this.widgetsList[module][widgetIndex].subWidgets.forEach((ele) => (ele.value = true));
254
+ }
255
+ else {
256
+ const subWidgetIndex = this.widgetsList[module][widgetIndex].subWidgets.findIndex((ele) => ele.id == subWidgetId);
257
+ this.widgetsList[module][widgetIndex].subWidgets[subWidgetIndex].value = true;
258
+ }
259
+ }
260
+ }
261
+ else {
262
+ if (this.widgetsList[module][widgetIndex].subWidgets.length > 0) {
263
+ if (!subWidgetId) {
264
+ this.widgetsList[module][widgetIndex].value = false;
265
+ this.widgetsList[module][widgetIndex].subWidgets.forEach((ele) => (ele.value = false));
266
+ }
267
+ else {
268
+ const subWidgetIndex = this.widgetsList[module][widgetIndex].subWidgets.findIndex((ele) => ele.id == subWidgetId);
269
+ this.widgetsList[module][widgetIndex].subWidgets[subWidgetIndex].value = false;
270
+ const isAllWidgetsRemoved = this.widgetsList[module][widgetIndex].subWidgets.every((ele) => ele.value == false);
271
+ if (isAllWidgetsRemoved) {
272
+ this.widgetsList[module][widgetIndex].value = false;
273
+ }
274
+ }
275
+ }
276
+ else {
277
+ this.widgetsList[module][widgetIndex].value = false;
278
+ }
279
+ }
280
+ this.setSelectedWidgets();
281
+ }
282
+ setSelectedWidgets() {
283
+ this.selectedWidgets = [];
284
+ this.widgetsList.COMPLIANCE.forEach((ele) => {
285
+ if (ele.value) {
286
+ this.selectedWidgets.push(ele);
287
+ }
288
+ });
289
+ // this.widgetsList.RISK.forEach((ele: any) => {
290
+ // if (ele.value) {
291
+ // this.selectedWidgets.push(ele);
292
+ // }
293
+ // });
294
+ }
295
+ removeWidget(widget) {
296
+ const widgetIndex = this.widgetsList[widget.module].findIndex((ele) => ele.id == widget.id);
297
+ this.widgetsList[widget.module][widgetIndex].value = false;
298
+ if (this.widgetsList[widget.module][widgetIndex].subWidgets.length > 0) {
299
+ this.widgetsList[widget.module][widgetIndex].subWidgets.forEach((ele) => (ele.value = false));
300
+ }
301
+ this.setSelectedWidgets();
302
+ }
303
+ onNextClick() {
304
+ this.widgetsDataModified.emit(this.selectedWidgets);
305
+ }
306
+ closeConfigureDashboard() {
307
+ this.selectedWidgets = [];
308
+ this.dialog.close();
309
+ this.closeConfigureWidgets.emit(false);
310
+ }
311
+ setWidgetsVisibilityToFalse() {
312
+ this.widgetsList.COMPLIANCE.forEach((ele) => {
313
+ ele.visibility = false;
314
+ if (ele.subWidgets.length > 0) {
315
+ ele.subWidgets.forEach((subElement) => {
316
+ subElement.visibility = false;
317
+ });
318
+ }
319
+ });
320
+ // this.widgetsList.RISK.forEach((ele: any) => {
321
+ // ele.visibility = false;
322
+ // if (ele.subWidgets.length > 0) {
323
+ // ele.subWidgets.forEach((subElement: any) => {
324
+ // subElement.visibility = false;
325
+ // });
326
+ // }
327
+ // });
328
+ }
329
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConfigureWidgetsComponent, deps: [{ token: i1.DialogRef }, { token: i2.ConfigureWidgetsService }, { token: i3.SnackBarService }], target: i0.ɵɵFactoryTarget.Component });
330
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ConfigureWidgetsComponent, selector: "app-configure-widgets", inputs: { selectedWidgetsData: "selectedWidgetsData", displayedWidgets: "displayedWidgets", showRisk: "showRisk", showCompliance: "showCompliance", mode: "mode" }, outputs: { widgetsDataModified: "widgetsDataModified", closeConfigureWidgets: "closeConfigureWidgets" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"configure-widgets vx-d-block\" *ngIf=\"showWidgets\">\r\n <div\r\n class=\"configure-widgets-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\"\r\n >\r\n <div class=\"configure-widgets-title vx-fs-14 vx-fw-500 vx-label-txt\">\r\n Configure Widgets\r\n </div>\r\n <button\r\n class=\"configure-widgets-back vx-fs-14 vx-fw-500 vx-label-txt vx-m-0 vx-p-0 vx-d-inline-flex vx-align-center\"\r\n (click)=\"closeConfigureDashboard()\"\r\n >\r\n <i class=\"icons vx-fs-16\">&#xe91d;</i> Back\r\n </button>\r\n </div>\r\n <div class=\"configure-widgets-body\">\r\n <div class=\"configure-widgets-tab\">\r\n <ul>\r\n <li\r\n [class.active]=\"module === 'COMPLIANCE'\"\r\n *ngIf=\"showCompliance\"\r\n (click)=\"module = 'COMPLIANCE'\"\r\n >\r\n <!-- <button>\r\n Compliance<span>{{ complianceWidgetsDisplayCount }}</span>\r\n </button> -->\r\n </li>\r\n <li [class.active]=\"module === 'RISK'\" *ngIf=\"showRisk\">\r\n <button (click)=\"module = 'RISK'\">\r\n Risks<span>{{ riskWidgetsDisplayCount }}</span>\r\n </button>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"configure-widgets-search vx-mb-2\">\r\n <i class=\"icons\">&#xe90b;</i>\r\n <input type=\"text\" placeholder=\"Search widgets\" [(ngModel)]=\"search\" />\r\n </div>\r\n <div\r\n class=\"configure-widgets-list vx-d-flex vx-flex-wrap\"\r\n *ngIf=\"(widgetsList[module] | search : search).length !== 0\"\r\n >\r\n <ng-container\r\n *ngFor=\"let widget of widgetsList[module] | search : search\"\r\n >\r\n <div class=\"configure-widgets-item\" *ngIf=\"widget?.visibility\">\r\n <label class=\"block\">\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"widget.value\"\r\n (change)=\"selectWidget($event.target.checked, module, widget.id)\"\r\n />\r\n <div class=\"check-icon\">\r\n <svg\r\n class=\"check\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 52 52\"\r\n >\r\n <circle\r\n class=\"check-circle\"\r\n cx=\"26\"\r\n cy=\"26\"\r\n r=\"25\"\r\n fill=\"none\"\r\n />\r\n <path\r\n class=\"check-circle\"\r\n fill=\"none\"\r\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\r\n />\r\n </svg>\r\n </div>\r\n <div class=\"configure-widgets-item-head\">\r\n <h4\r\n class=\"configure-widgets-item-title\"\r\n [innerHTML]=\"widget?.title\"\r\n ></h4>\r\n <p\r\n class=\"configure-widgets-item-description\"\r\n [innerHTML]=\"widget?.description\"\r\n ></p>\r\n <button\r\n *ngIf=\"!widget.value\"\r\n class=\"configure-widgets-item-button add\"\r\n (click)=\"selectWidget(true, module, widget.id)\"\r\n >\r\n + ADD\r\n </button>\r\n <button\r\n *ngIf=\"widget.value\"\r\n class=\"configure-widgets-item-button remove\"\r\n (click)=\"selectWidget(false, module, widget.id)\"\r\n >\r\n - Remove\r\n </button>\r\n </div>\r\n <div class=\"configure-widgets-item-body\">\r\n <div class=\"image-wrapper\">\r\n <img\r\n [ngSrc]=\"widget?.widgetImage\"\r\n alt=\"\"\r\n width=\"790\"\r\n height=\"613\"\r\n />\r\n </div>\r\n <div\r\n class=\"floating-option vx-d-flex\"\r\n *ngIf=\"widget?.subWidgets?.length > 0\"\r\n >\r\n <ng-container *ngFor=\"let subWidget of widget.subWidgets\">\r\n <app-cs-checkbox\r\n *ngIf=\"subWidget.visibility\"\r\n (ngValueChange)=\"\r\n selectWidget($event, module, widget.id, subWidget.id)\r\n \"\r\n [ngValue]=\"subWidget.value\"\r\n >{{ subWidget.title }}\r\n </app-cs-checkbox>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </label>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- No Data Image -->\r\n </div>\r\n <app-no-data\r\n *ngIf=\"(widgetsList[module] | search : search).length === 0\"\r\n [noDataImage]=\"ASSETS.configure_widget\"\r\n [noDataText]=\"'No data to display'\"\r\n >\r\n </app-no-data>\r\n\r\n <floating-bar\r\n (submitEvent)=\"onNextClick()\"\r\n (cancelEvent)=\"closeConfigureDashboard()\"\r\n [selectedData]=\"selectedWidgets\"\r\n (deleteEvent)=\"removeWidget($event)\"\r\n ></floating-bar>\r\n </div>\r\n</div>\r\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/mixin/mixin.css\";@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::ng-deep .configure-widgets{width:100vw;height:100vh;background:#fff}@media screen and (max-width: 1280px){::ng-deep .configure-widgets{width:100vw;margin-left:0}}::ng-deep .configure-widgets-head{height:2.75rem;background:#fbfbfb;border-bottom:1px solid #f1f1f1}::ng-deep .configure-widgets-back{border:none;outline:none;background:transparent}::ng-deep .configure-widgets-back i{margin-right:6px}::ng-deep .configure-widgets-body{padding:2rem;position:relative;height:calc(100vh - 2.75rem)}::ng-deep .configure-widgets-body app-no-data .no-data-wrapper{height:calc(100vh - 13.875rem)!important}::ng-deep .configure-widgets-body .floating-option{position:absolute;right:0;bottom:0;left:0;background:#fff;padding:16px 12px;z-index:3;box-shadow:0 -6px 12px #1e5dd31a}::ng-deep .configure-widgets-body .floating-option app-cs-checkbox{display:flex}::ng-deep .configure-widgets-body .floating-option app-cs-checkbox label span.value{color:#161b2f!important;font-size:11px!important;line-height:16px!important;margin-left:8px!important;white-space:nowrap}::ng-deep .configure-widgets-body .floating-option app-cs-checkbox+app-cs-checkbox{margin-left:20px}::ng-deep .configure-widgets-tab ul{padding:0;margin:0 0 8px;display:flex;border-bottom:1px solid #dbdbdb}::ng-deep .configure-widgets-tab ul li{list-style:none;display:flex;width:auto;padding:0}::ng-deep .configure-widgets-tab ul li button{color:#747576;display:inline-block;font-size:11px;line-height:16px;font-weight:600;text-transform:uppercase;border:none;outline:none;background:transparent;padding:0 0 8px;position:relative;margin:0}::ng-deep .configure-widgets-tab ul li button span{display:inline-block;margin-left:8px;color:#74757680}::ng-deep .configure-widgets-tab ul li+li{padding-left:28px}::ng-deep .configure-widgets-tab ul li.active button{color:#1e5dd3}::ng-deep .configure-widgets-tab ul li.active button span{color:#1e5dd3}::ng-deep .configure-widgets-tab ul li.active button:after{content:\"\";right:0;bottom:0;left:0;height:2px;border-radius:2px;position:absolute;background-color:#1e5dd3}::ng-deep .configure-widgets-search{position:relative;margin-bottom:24px}::ng-deep .configure-widgets-search i{position:absolute;top:16px;left:16px;color:#dbdbdb}::ng-deep .configure-widgets-search input{border:1px solid #dbdbdb;border-radius:4px;height:44px;padding:10px 180px 10px 40px;width:100%;font-size:14px;color:#747576;outline:none}::ng-deep .configure-widgets-search input:focus{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .configure-widgets-list{margin:0 -1rem .5rem;height:calc(100vh - 15.5rem);overflow:hidden;overflow-y:auto}::ng-deep .configure-widgets-list::-webkit-scrollbar-track{background-color:transparent}::ng-deep .configure-widgets-item{width:50%;padding:0 16px;margin-bottom:32px}::ng-deep .configure-widgets-item .block{background:#f8f8f8;border-radius:4px;padding:16px 44px 4px;cursor:pointer;position:relative;display:block}::ng-deep .configure-widgets-item .block .check-icon{position:absolute;top:8px;left:0;height:36px;width:36px;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center;background:#34aa44;opacity:0;pointer-events:none}::ng-deep .configure-widgets-item .block .check-icon .check{display:none;width:27px;height:27px;background:transparent;border-radius:50%;stroke-width:4;stroke:#fff;stroke-miterlimit:10;box-shadow:inset 0 0 #fff;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}::ng-deep .configure-widgets-item .block .check-icon .check-circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:4;stroke-miterlimit:10;stroke:#fff;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}::ng-deep .configure-widgets-item .block .check-icon .check-check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}::ng-deep .configure-widgets-item .block input[type=checkbox]{opacity:0;position:absolute;top:0;left:0;width:100%;height:100%;margin:0;z-index:1;cursor:pointer}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked+.check-icon{opacity:1}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked+.check-icon .check{display:block}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked~.configure-widgets-item-body .image-wrapper{opacity:.5}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked~.configure-widgets-item-head button.add{display:none}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked~.configure-widgets-item-head button.remove{display:flex}::ng-deep .configure-widgets-item-head{padding:0 0 16px;position:relative}::ng-deep .configure-widgets-item-title{margin:0 0 12px;font-size:14px;line-height:20px;text-transform:uppercase;color:#161b2f;max-width:calc(100% - 72px);font-weight:500}::ng-deep .configure-widgets-item-description{font-size:12px;line-height:20px;color:#747576;margin:0;font-weight:400;height:60px}::ng-deep .configure-widgets-item-button{width:72px;height:28px;cursor:pointer;display:flex;position:absolute;top:0;right:-24px;font-size:11px;font-weight:500;border:none;outline:none;justify-content:center;align-items:center;border-radius:2px;text-transform:uppercase;padding:0;margin:0}::ng-deep .configure-widgets-item-button.add{color:#fff;background:#1e5dd3}::ng-deep .configure-widgets-item-button.remove{background:#fff;border:1px solid #f1f1f1;color:#c7381b;display:none}::ng-deep .configure-widgets-item-body{overflow:hidden;height:220px;border:1px solid #f1f1f1;border-bottom:none;border-radius:2px 2px 0 0;box-shadow:0 -4px 8px #161b2f10}::ng-deep .configure-widgets-item-body .image-wrapper{box-shadow:0 -6px 12px #0000001a;border-radius:2px;overflow:hidden;background:#fff}::ng-deep .configure-widgets-item-body img{width:100%}@keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #fff}}.disabled{pointer-events:none;opacity:.7}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.FloatingBarComponent, selector: "floating-bar", inputs: ["text", "frequencyMessage", "singleCategory", "selectedData"], outputs: ["cancelEvent", "submitEvent", "deleteEvent"] }, { kind: "component", type: i6.CsCheckboxComponent, selector: "app-cs-checkbox", inputs: ["disabled", "ngValue", "value"], outputs: ["ngValueChange"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.NoDataComponent, selector: "app-no-data", inputs: ["action", "noDataImage", "noDataText", "noDataButton", "noDataSecButton", "altText", "smallButton", "buttonIcon", "iconClass"], outputs: ["buttonAction"] }, { kind: "directive", type: i4.NgOptimizedImage, selector: "img[ngSrc]", inputs: ["ngSrc", "ngSrcset", "sizes", "width", "height", "loading", "priority", "loaderParams", "disableOptimizedSrcset", "fill", "src", "srcset"] }, { kind: "pipe", type: i9.SearchPipe, name: "search" }] });
331
+ }
332
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ConfigureWidgetsComponent, decorators: [{
333
+ type: Component,
334
+ args: [{ selector: 'app-configure-widgets', template: "<div class=\"configure-widgets vx-d-block\" *ngIf=\"showWidgets\">\r\n <div\r\n class=\"configure-widgets-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\"\r\n >\r\n <div class=\"configure-widgets-title vx-fs-14 vx-fw-500 vx-label-txt\">\r\n Configure Widgets\r\n </div>\r\n <button\r\n class=\"configure-widgets-back vx-fs-14 vx-fw-500 vx-label-txt vx-m-0 vx-p-0 vx-d-inline-flex vx-align-center\"\r\n (click)=\"closeConfigureDashboard()\"\r\n >\r\n <i class=\"icons vx-fs-16\">&#xe91d;</i> Back\r\n </button>\r\n </div>\r\n <div class=\"configure-widgets-body\">\r\n <div class=\"configure-widgets-tab\">\r\n <ul>\r\n <li\r\n [class.active]=\"module === 'COMPLIANCE'\"\r\n *ngIf=\"showCompliance\"\r\n (click)=\"module = 'COMPLIANCE'\"\r\n >\r\n <!-- <button>\r\n Compliance<span>{{ complianceWidgetsDisplayCount }}</span>\r\n </button> -->\r\n </li>\r\n <li [class.active]=\"module === 'RISK'\" *ngIf=\"showRisk\">\r\n <button (click)=\"module = 'RISK'\">\r\n Risks<span>{{ riskWidgetsDisplayCount }}</span>\r\n </button>\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"configure-widgets-search vx-mb-2\">\r\n <i class=\"icons\">&#xe90b;</i>\r\n <input type=\"text\" placeholder=\"Search widgets\" [(ngModel)]=\"search\" />\r\n </div>\r\n <div\r\n class=\"configure-widgets-list vx-d-flex vx-flex-wrap\"\r\n *ngIf=\"(widgetsList[module] | search : search).length !== 0\"\r\n >\r\n <ng-container\r\n *ngFor=\"let widget of widgetsList[module] | search : search\"\r\n >\r\n <div class=\"configure-widgets-item\" *ngIf=\"widget?.visibility\">\r\n <label class=\"block\">\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"widget.value\"\r\n (change)=\"selectWidget($event.target.checked, module, widget.id)\"\r\n />\r\n <div class=\"check-icon\">\r\n <svg\r\n class=\"check\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 52 52\"\r\n >\r\n <circle\r\n class=\"check-circle\"\r\n cx=\"26\"\r\n cy=\"26\"\r\n r=\"25\"\r\n fill=\"none\"\r\n />\r\n <path\r\n class=\"check-circle\"\r\n fill=\"none\"\r\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\r\n />\r\n </svg>\r\n </div>\r\n <div class=\"configure-widgets-item-head\">\r\n <h4\r\n class=\"configure-widgets-item-title\"\r\n [innerHTML]=\"widget?.title\"\r\n ></h4>\r\n <p\r\n class=\"configure-widgets-item-description\"\r\n [innerHTML]=\"widget?.description\"\r\n ></p>\r\n <button\r\n *ngIf=\"!widget.value\"\r\n class=\"configure-widgets-item-button add\"\r\n (click)=\"selectWidget(true, module, widget.id)\"\r\n >\r\n + ADD\r\n </button>\r\n <button\r\n *ngIf=\"widget.value\"\r\n class=\"configure-widgets-item-button remove\"\r\n (click)=\"selectWidget(false, module, widget.id)\"\r\n >\r\n - Remove\r\n </button>\r\n </div>\r\n <div class=\"configure-widgets-item-body\">\r\n <div class=\"image-wrapper\">\r\n <img\r\n [ngSrc]=\"widget?.widgetImage\"\r\n alt=\"\"\r\n width=\"790\"\r\n height=\"613\"\r\n />\r\n </div>\r\n <div\r\n class=\"floating-option vx-d-flex\"\r\n *ngIf=\"widget?.subWidgets?.length > 0\"\r\n >\r\n <ng-container *ngFor=\"let subWidget of widget.subWidgets\">\r\n <app-cs-checkbox\r\n *ngIf=\"subWidget.visibility\"\r\n (ngValueChange)=\"\r\n selectWidget($event, module, widget.id, subWidget.id)\r\n \"\r\n [ngValue]=\"subWidget.value\"\r\n >{{ subWidget.title }}\r\n </app-cs-checkbox>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </label>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- No Data Image -->\r\n </div>\r\n <app-no-data\r\n *ngIf=\"(widgetsList[module] | search : search).length === 0\"\r\n [noDataImage]=\"ASSETS.configure_widget\"\r\n [noDataText]=\"'No data to display'\"\r\n >\r\n </app-no-data>\r\n\r\n <floating-bar\r\n (submitEvent)=\"onNextClick()\"\r\n (cancelEvent)=\"closeConfigureDashboard()\"\r\n [selectedData]=\"selectedWidgets\"\r\n (deleteEvent)=\"removeWidget($event)\"\r\n ></floating-bar>\r\n </div>\r\n</div>\r\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/mixin/mixin.css\";@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::ng-deep .configure-widgets{width:100vw;height:100vh;background:#fff}@media screen and (max-width: 1280px){::ng-deep .configure-widgets{width:100vw;margin-left:0}}::ng-deep .configure-widgets-head{height:2.75rem;background:#fbfbfb;border-bottom:1px solid #f1f1f1}::ng-deep .configure-widgets-back{border:none;outline:none;background:transparent}::ng-deep .configure-widgets-back i{margin-right:6px}::ng-deep .configure-widgets-body{padding:2rem;position:relative;height:calc(100vh - 2.75rem)}::ng-deep .configure-widgets-body app-no-data .no-data-wrapper{height:calc(100vh - 13.875rem)!important}::ng-deep .configure-widgets-body .floating-option{position:absolute;right:0;bottom:0;left:0;background:#fff;padding:16px 12px;z-index:3;box-shadow:0 -6px 12px #1e5dd31a}::ng-deep .configure-widgets-body .floating-option app-cs-checkbox{display:flex}::ng-deep .configure-widgets-body .floating-option app-cs-checkbox label span.value{color:#161b2f!important;font-size:11px!important;line-height:16px!important;margin-left:8px!important;white-space:nowrap}::ng-deep .configure-widgets-body .floating-option app-cs-checkbox+app-cs-checkbox{margin-left:20px}::ng-deep .configure-widgets-tab ul{padding:0;margin:0 0 8px;display:flex;border-bottom:1px solid #dbdbdb}::ng-deep .configure-widgets-tab ul li{list-style:none;display:flex;width:auto;padding:0}::ng-deep .configure-widgets-tab ul li button{color:#747576;display:inline-block;font-size:11px;line-height:16px;font-weight:600;text-transform:uppercase;border:none;outline:none;background:transparent;padding:0 0 8px;position:relative;margin:0}::ng-deep .configure-widgets-tab ul li button span{display:inline-block;margin-left:8px;color:#74757680}::ng-deep .configure-widgets-tab ul li+li{padding-left:28px}::ng-deep .configure-widgets-tab ul li.active button{color:#1e5dd3}::ng-deep .configure-widgets-tab ul li.active button span{color:#1e5dd3}::ng-deep .configure-widgets-tab ul li.active button:after{content:\"\";right:0;bottom:0;left:0;height:2px;border-radius:2px;position:absolute;background-color:#1e5dd3}::ng-deep .configure-widgets-search{position:relative;margin-bottom:24px}::ng-deep .configure-widgets-search i{position:absolute;top:16px;left:16px;color:#dbdbdb}::ng-deep .configure-widgets-search input{border:1px solid #dbdbdb;border-radius:4px;height:44px;padding:10px 180px 10px 40px;width:100%;font-size:14px;color:#747576;outline:none}::ng-deep .configure-widgets-search input:focus{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .configure-widgets-list{margin:0 -1rem .5rem;height:calc(100vh - 15.5rem);overflow:hidden;overflow-y:auto}::ng-deep .configure-widgets-list::-webkit-scrollbar-track{background-color:transparent}::ng-deep .configure-widgets-item{width:50%;padding:0 16px;margin-bottom:32px}::ng-deep .configure-widgets-item .block{background:#f8f8f8;border-radius:4px;padding:16px 44px 4px;cursor:pointer;position:relative;display:block}::ng-deep .configure-widgets-item .block .check-icon{position:absolute;top:8px;left:0;height:36px;width:36px;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center;background:#34aa44;opacity:0;pointer-events:none}::ng-deep .configure-widgets-item .block .check-icon .check{display:none;width:27px;height:27px;background:transparent;border-radius:50%;stroke-width:4;stroke:#fff;stroke-miterlimit:10;box-shadow:inset 0 0 #fff;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}::ng-deep .configure-widgets-item .block .check-icon .check-circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:4;stroke-miterlimit:10;stroke:#fff;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}::ng-deep .configure-widgets-item .block .check-icon .check-check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}::ng-deep .configure-widgets-item .block input[type=checkbox]{opacity:0;position:absolute;top:0;left:0;width:100%;height:100%;margin:0;z-index:1;cursor:pointer}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked+.check-icon{opacity:1}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked+.check-icon .check{display:block}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked~.configure-widgets-item-body .image-wrapper{opacity:.5}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked~.configure-widgets-item-head button.add{display:none}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked~.configure-widgets-item-head button.remove{display:flex}::ng-deep .configure-widgets-item-head{padding:0 0 16px;position:relative}::ng-deep .configure-widgets-item-title{margin:0 0 12px;font-size:14px;line-height:20px;text-transform:uppercase;color:#161b2f;max-width:calc(100% - 72px);font-weight:500}::ng-deep .configure-widgets-item-description{font-size:12px;line-height:20px;color:#747576;margin:0;font-weight:400;height:60px}::ng-deep .configure-widgets-item-button{width:72px;height:28px;cursor:pointer;display:flex;position:absolute;top:0;right:-24px;font-size:11px;font-weight:500;border:none;outline:none;justify-content:center;align-items:center;border-radius:2px;text-transform:uppercase;padding:0;margin:0}::ng-deep .configure-widgets-item-button.add{color:#fff;background:#1e5dd3}::ng-deep .configure-widgets-item-button.remove{background:#fff;border:1px solid #f1f1f1;color:#c7381b;display:none}::ng-deep .configure-widgets-item-body{overflow:hidden;height:220px;border:1px solid #f1f1f1;border-bottom:none;border-radius:2px 2px 0 0;box-shadow:0 -4px 8px #161b2f10}::ng-deep .configure-widgets-item-body .image-wrapper{box-shadow:0 -6px 12px #0000001a;border-radius:2px;overflow:hidden;background:#fff}::ng-deep .configure-widgets-item-body img{width:100%}@keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #fff}}.disabled{pointer-events:none;opacity:.7}\n"] }]
335
+ }], ctorParameters: function () { return [{ type: i1.DialogRef }, { type: i2.ConfigureWidgetsService }, { type: i3.SnackBarService }]; }, propDecorators: { widgetsDataModified: [{
336
+ type: Output
337
+ }], closeConfigureWidgets: [{
338
+ type: Output
339
+ }], selectedWidgetsData: [{
340
+ type: Input
341
+ }], displayedWidgets: [{
342
+ type: Input
343
+ }], showRisk: [{
344
+ type: Input
345
+ }], showCompliance: [{
346
+ type: Input
347
+ }], mode: [{
348
+ type: Input
349
+ }] } });
350
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJlLXdpZGdldHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3JlYXRlLWRhc2hib2FyZC9zcmMvbGliL2NyZWF0ZS1kYXNoYm9hcmQtY29udGFpbmVyL2NvbmZpZ3VyZS13aWRnZXRzL2NvbmZpZ3VyZS13aWRnZXRzL2NvbmZpZ3VyZS13aWRnZXRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NyZWF0ZS1kYXNoYm9hcmQvc3JjL2xpYi9jcmVhdGUtZGFzaGJvYXJkLWNvbnRhaW5lci9jb25maWd1cmUtd2lkZ2V0cy9jb25maWd1cmUtd2lkZ2V0cy9jb25maWd1cmUtd2lkZ2V0cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBTXZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7Ozs7QUFPekQsTUFBTSxPQUFPLHlCQUF5QjtJQXlCMUI7SUFDRDtJQUNDO0lBMUJBLG1CQUFtQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBQzVELHFCQUFxQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ3hFLGNBQWMsQ0FBTztJQUNyQixNQUFNLEdBQVcsRUFBRSxDQUFDO0lBQ3BCLFlBQVksR0FBNkMsRUFBRSxDQUFDO0lBQzVELGVBQWUsR0FBMkIsRUFBRSxDQUFDO0lBQzdDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDaEIsTUFBTSxHQUEwQixZQUFZLENBQUM7SUFDcEMsbUJBQW1CLEdBQVEsRUFBRSxDQUFDO0lBQzlCLGdCQUFnQixHQUFRLEVBQUUsQ0FBQztJQUMzQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLGNBQWMsR0FBRyxLQUFL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QUU7Z0JBQzdCLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBZSxFQUFFLEVBQUU7b0JBQ3pDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUNoQyxDQUFDLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxnREFBZ0Q7UUFDaEQsNEJBQTRCO1FBQzVCLHFDQUFxQztRQUNyQyxvREFBb0Q7UUFDcEQsdUNBQXVDO1FBQ3ZDLFVBQVU7UUFDVixNQUFNO1FBQ04sTUFBTTtJQUNSLENBQUM7d0dBalhVLHlCQUF5Qjs0RkFBekIseUJBQXlCLCtWQ3JCdEMsaXBLQTZJQTs7NEZEeEhhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSx1QkFBdUI7b0tBS3ZCLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBT0UsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZmlndXJlV2lkZ2V0c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb25maWd1cmUtd2lkZ2V0cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyByZXRyeSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgd2lkZ2V0RGF0YU1vZGVsIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy93aWRnZXQtZGF0YS1tb2RlbCc7XHJcbmltcG9ydCB7IERpYWxvZ1JlZiB9IGZyb20gJy4uLy4uLy4uL3VpLWtpdC9kaWFsb2cvZGlhbG9nLXJlZic7XHJcbmltcG9ydCB7IHdpZGdldENvbmZpZyB9IGZyb20gJy4vd2lkZ2V0LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFNuYWNrQmFyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3VpLWtpdC9zbmFjay1iYXIvc25hY2stYmFyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBU1NFVFMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvYXNzZXRzLmNvbnN0YW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWNvbmZpZ3VyZS13aWRnZXRzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29uZmlndXJlLXdpZGdldHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvbmZpZ3VyZS13aWRnZXRzLmNvbXBvbmVudC5sZXNzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb25maWd1cmVXaWRnZXRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG4gIEBPdXRwdXQoKSB3aWRnZXRzRGF0YU1vZGlmaWVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2xvc2VDb25maWd1cmVXaWRnZXRzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBjaGVja2JveFN0YXR1cyE6IGFueTtcclxuICBzZWFyY2g6IHN0cmluZyA9ICcnO1xyXG4gIGNoZWNrZWRBcnJheTogQXJyYXk8eyBpbmRleDogbnVtYmVyOyBzdGF0dXM6IG51bWJlciB9PiA9IFtdO1xyXG4gIHNlbGVjdGVkV2lkZ2V0czogQXJyYXk8d2lkZ2V0RGF0YU1vZGVsPiA9IFtdO1xyXG4gIEFTU0VUUyA9IEFTU0VUUztcclxuICBtb2R1bGU6ICdDT01QTElBTkNFJyB8ICdSSVNLJyA9ICdDT01QTElBTkNFJztcclxuICBASW5wdXQoKSBzZWxlY3RlZFdpZGdldHNEYXRhOiBhbnkgPSBbXTtcclxuICBASW5wdXQoKSBkaXNwbGF5ZWRXaWRnZXRzOiBhbnkgPSBbXTtcclxuICBASW5wdXQoKSBzaG93UmlzayA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dDb21wbGlhbmNlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgbW9kZSA9ICdDUkVBVEUnO1xyXG4gIG5vRGF0YVRleHQgPVxyXG4gICAgJ1lvdSBoYXZlIG5vdCBjb25maWd1cmVkIGFueSB3aWRnZXRzLiBDbGljayBvbiB0aGUgPHN0cm9uZz5Db25maWd1cmUgV2lkZ2V0czwvc3Ryb25nPiBidXR0b24gdG8gYmVnaW4uJztcclxuXHJcbiAgc2VsZWN0ZWRXaWRnZXRJZHM6IGFueSA9IFtdO1xyXG4gIHN1YlJlc3BvbnNpYmlsaXRpZXNTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHN1YktleVJlc3BvbnNpYmlsaXRpZXNTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dXaWRnZXRzID0gdHJ1ZTtcclxuICBjb21wbGlhbmNlV2lkZ2V0c0Rpc3BsYXlDb3VudCA9IDk7XHJcbiAgcmlza1dpZGdldHNEaXNwbGF5Q291bnQgPSA5O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZGlhbG9nOiBEaWFsb2dSZWYsXHJcbiAgICBwdWJsaWMgY29uZmlndXJlV2lkZ2V0c1NlcnZpY2U6IENvbmZpZ3VyZVdpZGdldHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogU25hY2tCYXJTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gW107XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlFZGl0TW9kZVdpZGdldENhdGFsb2coKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYXBwbHlDcmVhdGVNb2RlV2lkZ2V0VmlzaWJpbGl0eSgpO1xyXG4gICAgICB0aGlzLmFwcGx5U2F2ZWRXaWRnZXRTZWxlY3Rpb24odGhpcy5zZWxlY3RlZFdpZGdldHNEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm1vZHVsZSA9IHRoaXMuc2hvd0NvbXBsaWFuY2UgPyAnQ09NUExJQU5DRScgOiAnUklTSyc7XHJcbiAgICB0aGlzLnNldFNlbGVjdGVkV2lkZ2V0cygpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEVESVQ6IHNob3cgZnVsbCB3aWRnZXQgY2F0YWxvZzsgY2hlY2sgaXRlbXMgcHJlc2VudCBpbiBnZXRXaWRnZXRzIHdpZGdldEFyci4gKi9cclxuICBwcml2YXRlIGFwcGx5RWRpdE1vZGVXaWRnZXRDYXRhbG9nKCk6IHZvaWQge1xyXG4gICAgdGhpcy53aWRnZXRzTGlzdC5DT01QTElBTkNFLmZvckVhY2goKGVsZTogYW55KSA9PiB7XHJcbiAgICAgIGVsZS52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICBlbGUudmlzaWJpbGl0eSA9IHRydWU7XHJcbiAgICAgIChlbGUuc3ViV2lkZ2V0cyA/PyBbXSkuZm9yRWFjaCgoc3ViOiBhbnkpID0+IHtcclxuICAgICAgICBzdWIudmFsdWUgPSBmYWxzZTtcclxuICAgICAgICBzdWIudmlzaWJpbGl0eSA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNvbXBsaWFuY2VXaWRnZXRzRGlzcGxheUNvdW50ID0gdGhpcy53aWRnZXRzTGlzdC5DT01QTElBTkNFLmZpbHRlcihcclxuICAgICAgKHcpID0+IHcudmlzaWJpbGl0eVxyXG4gICAgKS5sZW5ndGg7XHJcbiAgICB0aGlzLnJpc2tXaWRnZXRzRGlzcGxheUNvdW50ID0gMDtcclxuICAgIHRoaXMuYXBwbHlTYXZlZFdpZGdldFNlbGVjdGlvbih0aGlzLnNlbGVjdGVkV2lkZ2V0c0RhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqIENSRUFURTogbGltaXQgdmlzaWJsZSB0aWxlcyB0byBkaXNwbGF5ZWRXaWRnZXRzIHdoZW4gcHJvdmlkZWQuICovXHJcbiAgcHJpdmF0ZSBhcHBseUNyZWF0ZU1vZGVXaWRnZXRWaXNpYmlsaXR5KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmRpc3BsYXllZFdpZGdldHM/Lmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFdpZGdldHNWaXNpYmlsaXR5VG9GYWxzZSgpO1xyXG4gICAgdGhpcy5yaXNrV2lkZ2V0c0Rpc3BsYXlDb3VudCA9IDA7XHJcbiAgICB0aGlzLmNvbXBsaWFuY2VXaWRnZXRzRGlzcGxheUNvdW50ID0gMDtcclxuICAgIGNvbnN0IGZpbmFsRGF0YSA9IFsuLi5uZXcgU2V0KHRoaXMuZGlzcGxheWVkV2lkZ2V0cyldO1xyXG4gICAgZmluYWxEYXRhLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLndpZGdldHNMaXN0LkNPTVBMSUFOQ0UuZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZWxlLmlkICE9PSBlbGVtZW50LndpZGdldF9jb2RlKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZS52aXNpYmlsaXR5ID0gdHJ1ZTtcclxuICAgICAgICBpZiAoZWxlLnN1YldpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY29uc3QgdmlzaWJsZVN1YkNvZGVzID0gKGVsZW1lbnQuc3ViX3dpZGdldHMgPz8gW10pLm1hcChcclxuICAgICAgICAgICAgKHN1YndpZGdldDogYW55KSA9PiBzdWJ3aWRnZXQud2lkZ2V0X2NvZGVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBlbGUuc3ViV2lkZ2V0cy5mb3JFYWNoKChzdWJFbGVtZW50OiBhbnksIHN1YkluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgZWxlLnN1YldpZGdldHNbc3ViSW5kZXhdLnZpc2liaWxpdHkgPSB2aXNpYmxlU3ViQ29kZXMuaW5jbHVkZXMoXHJcbiAgICAgICAgICAgICAgc3ViRWxlbWVudC5pZFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29tcGxpYW5jZVdpZGdldHNEaXNwbGF5Q291bnQrKztcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlTYXZlZFdpZGdldFNlbGVjdGlvbihzYXZlZFdpZGdldHM6IGFueVtdKTogdm9pZCB7XHJcbiAgICBjb25zdCBkYXRhID0gWy4uLm5ldyBTZXQoc2F2ZWRXaWRnZXRzID8/IFtdKV07XHJcbiAgICBkYXRhLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZWxlbWVudD8uc3RhdGUgJiYgZWxlbWVudC5zdGF0ZSAhPT0gJ0FDVElWRScpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy53aWRnZXRzTGlzdC5DT01QTElBTkNFLmZvckVhY2goKGVsZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGVsZS5pZCAhPT0gZWxlbWVudC53aWRnZXRfY29kZSkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbGUudmFsdWUgPSB0cnVlO1xyXG4gICAgICAgIGlmIChlbGUuc3ViV2lkZ2V0cy5sZW5ndGggPiAwICYmIGVsZW1lbnQuc3ViX3dpZGdldHM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgY29uc3QgYWN0aXZlU3ViQ29kZXMgPSAoZWxlbWVudC5zdWJfd2lkZ2V0cyA/PyBbXSlcclxuICAgICAgICAgICAgLmZpbHRlcigoc3Vid2lkZ2V0OiBhbnkpID0+IHN1YndpZGdldC5zdGF0ZSA9PT0gJ0FDVElWRScpXHJcbiAgICAgICAgICAgIC5tYXAoKHN1YndpZGdldDogYW55KSA9PiBzdWJ3aWRnZXQud2lkZ2V0X2NvZGUpO1xyXG4gICAgICAgICAgZWxlLnN1YldpZGdldHMuZm9yRWFjaCgoc3ViRWxlbWVudDogYW55LCBzdWJJbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIGVsZS5zdWJXaWRnZXRzW3N1YkluZGV4XS52YWx1ZSA9IGFjdGl2ZVN1YkNvZGVzLmluY2x1ZGVzKFxyXG4gICAgICAgICAgICAgIHN1YkVsZW1lbnQuaWRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge31cclxuXHJcbiAgd2lkZ2V0c0xpc3QgPSB7XHJcbiAgICBDT01QTElBTkNFOiBbXHJcbiAgICAgIHtcclxuICAgICAgICB0aXRsZTogJ092ZXJ2aWV3JyxcclxuICAgICAgICBpZDogJ292ZXJ2aWV3JyxcclxuICAgICAgICBkZXNjcmlwdGlvbjpcclxuICAgICAgICAgICdPdmVydmlldyBzaG93cyB0aGUgcGVyZm9ybWFuY2Ugb2YgcmVzcG9uc2liaWxpdGllcyBhbmQgUHJvZ3JhbXMuJyxcclxuICAgICAgICB3aWRnZXRJbWFnZTogQVNTRVRTLm92ZXJ2aWV3V2lkZ2V0LFxyXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcclxuICAgICAgICB2aXNpYmlsaXR5OiB0cnVlLFxyXG4gICAgICAgIG1vZHVsZTogJ0NPTVBMSUFOQ0UnLFxyXG4gICAgICAgIHN1YldpZGdldHM6IFtdLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6ICdSZXNwb25zaWJpbGl0eSBDYWxlbmRhcicsXHJcbiAgICAgICAgaWQ6ICdjb21wbGlhbmNlX2NhbGVuZGFyX2ZsYWcnLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOlxyXG4gICAgICAgICAgJ1RoZSBSZXNwb25zaWJpbGl0eSBDYWxlbmRhciBzaG93cyB0aGUgZHVlIGRhdGVzIG9mIHJlc3BvbnNpYmlsaXRpZXMgaW4gYSBjYWxlbmRhciBmb3JtYXQuIFRoZSByZXNwb25zaWJpbGl0aWVzIGFyZSBjb2xvciBjb2RlZCB0byByZWZsZWN0IHRoZSBzdGF0dXMgb2YgdGhlIHJlc3BvbnNpYmlsaXRpZXMuJyxcclxuICAgICAgICB3aWRnZXRJbWFnZTogQVNTRVRTLnJlc3BvbnNpYmlsaXR5Q2FsZW5kZXJXaWRnZXQsXHJcbiAgICAgICAgdmFsdWU6IGZhbHNlLFxyXG4gICAgICAgIHZpc2liaWxpdHk6IHRydWUsXHJcbiAgICAgICAgbW9kdWxlOiAnQ09NUExJQU5DRScsXHJcbiAgICAgICAgc3ViV2lkZ2V0czogW10sXHJcbiAgICAgIH0sXHJcblxyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6ICdSZXNwb25zaWJpbGl0aWVzIGJ5IEFzc2lnbmVlJyxcclxuICAgICAgICBpZDogJ3Jlc3BvbnNpYmlsaXRpZXNfYnlfYXNzaWduZWUnLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIFJlc3BvbnNpYmlsaXRpZXMgYnkgQXNzaWduZWUgd2lkZ2V0IHNob3dzIHRoZSBwZXJmb3JtYW5jZSBvZiByZXNwb25zaWJpbGl0aWVzIGJ5IHVzZXJzLicsXHJcbiAgICAgICAgd2lkZ2V0SW1hZ2U6IEFTU0VUUy5yZXNwb25zaWJpbGl0aWVzQnlBc3NpZ25lZSxcclxuICAgICAgICB2YWx1ZTogZmFsc2UsXHJcbiAgICAgICAgdmlzaWJpbGl0eTogdHJ1ZSxcclxuICAgICAgICBtb2R1bGU6ICdDT01QTElBTkNFJyxcclxuICAgICAgICBzdWJXaWRnZXRzOiBbXSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiAnUmVzcG9uc2liaWxpdHkgQ2VudGVyIE92ZXJ2aWV3JyxcclxuICAgICAgICBpZDogJ3Jlc3BvbnNpYmlsaXR5X2NlbnRlcl9vdmVydmlld19mbGFnJyxcclxuICAgICAgICBkZXNjcmlwdGlvbjpcclxuICAgICAgICAgICdUaGUgUmVzcG9uc2liaWxpdHkgQ2VudGVyIE92ZXJ2aWV3IHNob3dzIHRoZSBwZXJmb3JtYW5jZSBvZiByZXNwb25zaWJpbGl0aWVzIGFuZCBSZXNwb25zaWJpbGl0eSBDZW50ZXJzLicsXHJcbiAgICAgICAgd2lkZ2V0SW1hZ2U6IEFTU0VUUy5yZXNwb25zaWJpbGl0eUNlbnRlck92ZXJ2aWV3V2lkZ2V0LFxyXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcclxuICAgICAgICB2aXNpYmlsaXR5OiB0cnVlLFxyXG4gICAgICAgIG1vZHVsZTogJ0NPTVBMSUFOQ0UnLFxyXG4gICAgICAgIHN1YldpZGdldHM6IFtdLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6ICdSZXNwb25zaWJpbGl0aWVzJyxcclxuICAgICAgICBpZDogJ215X3Jlc3BvbnNpYmlsaXRpZXMnLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOlxyXG4gICAgICAgICAgJ1RoaXMgd2lkZ2V0IHNob3dzIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgcmVzcG9uc2liaWxpdGllcyB0aGF0IHlvdSBhcmUgcmVxdWlyZWQgdG8gY29tcGxldGUsIHRoZSByZXNwb25zaWJpbGl0aWVzIHRoYXQgeW91IGFyZSByZXZpZXdpbmcgYW5kIHRoZSByZXNwb25zaWJpbGl0aWVzIHRoYXQgeW91IGFyZSBvdmVyc2VlaW5nLicsXHJcbiAgICAgICAgd2lkZ2V0SW1hZ2U6IEFTU0VUUy5teVJlc3BvbnNpYmlsaXRpZXNXaWRnZXQsXHJcbiAgICAgICAgdGFiT3B0aW9uOiB0cnVlLFxyXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcclxuICAgICAgICB2aXNpYmlsaXR5OiB0cnVlLFxyXG4gICAgICAgIG1vZHVsZTogJ0NPTVBMSUFOQ0UnLFxyXG4gICAgICAgIHN1YldpZGdldHM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdGl0bGU6ICdNeSBSZXNwb25zaWJpbGl0aWVzJyxcclxuICAgICAgICAgICAgaWQ6ICdteV9yZXNwb25zaWJpbGl0eV9mbGFnJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZhbHNlLFxyXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiB0cnVlLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdGl0bGU6ICdJ4oCZbSBSZXZpZXdpbmcnLFxyXG4gICAgICAgICAgICBpZDogJ3Jldmlld2VyX3Jlc3BvbnNpYmlsaXR5X2ZsYWcnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZmFsc2UsXHJcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IHRydWUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB0aXRsZTogJ0nigJltIE92ZXJzZWVpbmcnLFxyXG4gICAgICAgICAgICBpZDogJ2NjX3Jlc3BvbnNpYmlsaXR5X2ZsYWcnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZmFsc2UsXHJcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IHRydWUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0aXRsZTogJ0tleSBSZXNwb25zaWJpbGl0aWVzJyxcclxuICAgICAgICBpZDogJ2tleV9yZXNwb25zaWJpbGl0aWVzJyxcclxuICAgICAgICBkZXNjcmlwdGlvbjpcclxuICAgICAgICAgICdUaGlzIHdpZGdldCBzaG93cyB0aGUgcGVyZm9ybWFuY2Ugb2Yga2V5IHJlc3BvbnNpYmlsaXRpZXMgdGhhdCB5b3UgYXJlIHJlcXVpcmVkIHRvIGNvbXBsZXRlLCB0aGF0IHlvdSBhcmUgcmV2aWV3aW5nLCB0aGF0IHlvdSBhcmUgb3ZlcnNlZWluZyBhbmQgdGhhdCB5b3UgaGF2ZSBhc3NpZ25lZCB0byBhbm90aGVyIHBlcnNvbi4nLFxyXG4gICAgICAgIHdpZGdldEltYWdlOiBBU1NFVFMua2V5UmVzcG9uc2liaWxpdGllc1dpZGdldCxcclxuICAgICAgICB0YWJPcHRpb246IHRydWUsXHJcbiAgICAgICAgdmFsdWU6IGZhbHNlLFxyXG4gICAgICAgIHZpc2liaWxpdHk6IHRydWUsXHJcbiAgICAgICAgbW9kdWxlOiAnQ09NUExJQU5DRScsXHJcbiAgICAgICAgc3ViV2lkZ2V0czogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB0aXRsZTogJ092ZXJ2aWV3JyxcclxuICAgICAgICAgICAgaWQ6ICdrZXlfcmVzcG9uc2liaWxpdGllc19vdmVydmlld19mbGFnJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZhbHNlLFxyXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiB0cnVlLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdGl0bGU6ICdNeSBSZXNwb25zaWJpbGl0aWVzJyxcclxuICAgICAgICAgICAgaWQ6ICdrZXlfbXlfcmVzcG9uc2liaWxpdGllc19mbGFnJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZhbHNlLFxyXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiB0cnVlLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdGl0bGU6ICdJ4oCZbSBSZXZpZXdpbmcnLFxyXG4gICAgICAgICAgICBpZDogJ2tleV9pX2FtX3Jldmlld2luZ19mbGFnJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZhbHNlLFxyXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiB0cnVlLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdGl0bGU6ICdJ4oCZbSBPdmVyc2VlaW5nJyxcclxuICAgICAgICAgICAgaWQ6ICdrZXlfaV9hbV9vdmVyc2VlaW5nX2ZsYWcnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZmFsc2UsXHJcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IHRydWUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0aXRsZTogJ1RyZW5kIEFuYWx5c2lzJyxcclxuICAgICAgICBpZDogJ3RyZW5kX2FuYWx5c2lzX2ZsYWcnLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOlxyXG4gICAgICAgICAgJ1RoZSBUcmVuZCBBbmFseXNpcyBpcyBhIGdyYXBoaWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGVyZm9ybWFuY2Ugb2YgcmVzcG9uc2liaWxpdGllcyBvdmVyIGEgcGVyaW9kLicsXHJcbiAgICAgICAgd2lkZ2V0SW1hZ2U6IEFTU0VUUy50cmVuZEFuYWx5c2lzV2lkZ2V0LFxyXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcclxuICAgICAgICB2aXNpYmlsaXR5OiB0cnVlLFxyXG4gICAgICAgIG1vZHVsZTogJ0NPTVBMSUFOQ0UnLFxyXG4gICAgICAgIHN1YldpZGdldHM6IFtdLFxyXG4gICAgICB9LFxyXG4gICAgXSxcclxuICBcclxuICB9O1xyXG5cclxuICBzZWxlY3RXaWRnZXQoXHJcbiAgICBldmVudDogYW55LFxyXG4gICAgbW9kdWxlOiAnQ09NUExJQU5DRScsXHJcbiAgICB3aWRnZXRJZDogc3RyaW5nLFxyXG4gICAgc3ViV2lkZ2V0SWQ/OiBzdHJpbmdcclxuICApIHtcclxuICAgIGNvbnN0IHdpZGdldEluZGV4ID0gdGhpcy53aWRnZXRzTGlzdFttb2R1bGVdLmZpbmRJbmRleChcclxuICAgICAgKGVsZTogYW55KSA9PiBlbGUuaWQgPT0gd2lkZ2V0SWRcclxuICAgICk7XHJcbiAgICBjb25zdCBpc1N1YldpZGdldEFkZGFibGUgPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maW5kSW5kZXgoXHJcbiAgICAgICh3aWRnZXQ6IGFueSkgPT4gd2lkZ2V0LmlkID09PSB3aWRnZXRJZFxyXG4gICAgKTtcclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMubGVuZ3RoID49IDEwICYmXHJcbiAgICAgICAgIShzdWJXaWRnZXRJZCAmJiBpc1N1YldpZGdldEFkZGFibGUgPj0gMClcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KCdZb3UgY2Fubm90IGFkZCBtb3JlIHRoYW4gMTAgd2lkZ2V0cy4nLCAnYWxlcnQnKTtcclxuICAgICAgICB0aGlzLnNob3dXaWRnZXRzID0gZmFsc2U7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLndpZGdldHNMaXN0W21vZHVsZV1bd2lkZ2V0SW5kZXhdLnZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNob3dXaWRnZXRzID0gdHJ1ZTtcclxuICAgICAgICB9LCAxMCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMud2lkZ2V0c0xpc3RbbW9kdWxlXVt3aWRnZXRJbmRleF0udmFsdWUgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy53aWRnZXRzTGlzdFttb2R1bGVdW3dpZGdldEluZGV4XS5zdWJXaWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBpZiAoIXN1YldpZGdldElkKSB7XHJcbiAgICAgICAgICB0aGlzLndpZGdldHNMaXN0W21vZHVsZV1bd2lkZ2V0SW5kZXhdLnN1YldpZGdldHMuZm9yRWFjaChcclxuICAgICAgICAgICAgKGVsZSkgPT4gKGVsZS52YWx1ZSA9IHRydWUpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBzdWJXaWRnZXRJbmRleCA9IHRoaXMud2lkZ2V0c0xpc3RbbW9kdWxlXVtcclxuICAgICAgICAgICAgd2lkZ2V0SW5kZXhcclxuICAgICAgICAgIF0uc3ViV2lkZ2V0cy5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUuaWQgPT0gc3ViV2lkZ2V0SWQpO1xyXG4gICAgICAgICAgdGhpcy53aWRnZXRzTGlzdFttb2R1bGVdW3dpZGdldEluZGV4XS5zdWJXaWRnZXRzW1xyXG4gICAgICAgICAgICBzdWJXaWRnZXRJbmRleFxyXG4gICAgICAgICAgXS52YWx1ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy53aWRnZXRzTGlzdFttb2R1bGVdW3dpZGdldEluZGV4XS5zdWJXaWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBpZiAoIXN1YldpZGdldElkKSB7XHJcbiAgICAgICAgICB0aGlzLndpZGdldHNMaXN0W21vZHVsZV1bd2lkZ2V0SW5kZXhdLnZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLndpZGdldHNMaXN0W21vZHVsZV1bd2lkZ2V0SW5kZXhdLnN1YldpZGdldHMuZm9yRWFjaChcclxuICAgICAgICAgICAgKGVsZTogYW55KSA9PiAoZWxlLnZhbHVlID0gZmFsc2UpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBzdWJXaWRnZXRJbmRleCA9IHRoaXMud2lkZ2V0c0xpc3RbbW9kdWxlXVtcclxuICAgICAgICAgICAgd2lkZ2V0SW5kZXhcclxuICAgICAgICAgIF0uc3ViV2lkZ2V0cy5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUuaWQgPT0gc3ViV2lkZ2V0SWQpO1xyXG4gICAgICAgICAgdGhpcy53aWRnZXRzTGlzdFttb2R1bGVdW3dpZGdldEluZGV4XS5zdWJXaWRnZXRzW1xyXG4gICAgICAgICAgICBzdWJXaWRnZXRJbmRleFxyXG4gICAgICAgICAgXS52YWx1ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGlzQWxsV2lkZ2V0c1JlbW92ZWQgPSB0aGlzLndpZGdldHNMaXN0W21vZHVsZV1bXHJcbiAgICAgICAgICAgIHdpZGdldEluZGV4XHJcbiAgICAgICAgICBdLnN1YldpZGdldHMuZXZlcnkoKGVsZTogYW55KSA9PiBlbGUudmFsdWUgPT0gZmFsc2UpO1xyXG4gICAgICAgICAgaWYgKGlzQWxsV2lkZ2V0c1JlbW92ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy53aWRnZXRzTGlzdFttb2R1bGVdW3dpZGdldEluZGV4XS52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLndpZGdldHNMaXN0W21vZHVsZV1bd2lkZ2V0SW5kZXhdLnZhbHVlID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRXaWRnZXRzKCk7XHJcbiAgfVxyXG4gIHNldFNlbGVjdGVkV2lkZ2V0cygpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gW107XHJcbiAgICB0aGlzLndpZGdldHNMaXN0LkNPTVBMSUFOQ0UuZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGVsZS52YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzLnB1c2goZWxlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICAvLyB0aGlzLndpZGdldHNMaXN0LlJJU0suZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgIC8vICAgaWYgKGVsZS52YWx1ZSkge1xyXG4gICAgLy8gICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzLnB1c2goZWxlKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVXaWRnZXQod2lkZ2V0OiB3aWRnZXRDb25maWcpIHtcclxuICAgIGNvbnN0IHdpZGdldEluZGV4ID0gdGhpcy53aWRnZXRzTGlzdFt3aWRnZXQubW9kdWxlXS5maW5kSW5kZXgoXHJcbiAgICAgIChlbGU6IGFueSkgPT4gZWxlLmlkID09IHdpZGdldC5pZFxyXG4gICAgKTtcclxuICAgIHRoaXMud2lkZ2V0c0xpc3Rbd2lkZ2V0Lm1vZHVsZV1bd2lkZ2V0SW5kZXhdLnZhbHVlID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy53aWRnZXRzTGlzdFt3aWRnZXQubW9kdWxlXVt3aWRnZXRJbmRleF0uc3ViV2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0c0xpc3Rbd2lkZ2V0Lm1vZHVsZV1bd2lkZ2V0SW5kZXhdLnN1YldpZGdldHMuZm9yRWFjaChcclxuICAgICAgICAoZWxlOiBhbnkpID0+IChlbGUudmFsdWUgPSBmYWxzZSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRXaWRnZXRzKCk7XHJcbiAgfVxyXG5cclxuICBvbk5leHRDbGljaygpIHtcclxuICAgIHRoaXMud2lkZ2V0c0RhdGFNb2RpZmllZC5lbWl0KHRoaXMuc2VsZWN0ZWRXaWRnZXRzKTtcclxuICB9XHJcblxyXG4gIGNsb3NlQ29uZmlndXJlRGFzaGJvYXJkKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSBbXTtcclxuICAgIHRoaXMuZGlhbG9nLmNsb3NlKCk7XHJcbiAgICB0aGlzLmNsb3NlQ29uZmlndXJlV2lkZ2V0cy5lbWl0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHNldFdpZGdldHNWaXNpYmlsaXR5VG9GYWxzZSgpIHtcclxuICAgIHRoaXMud2lkZ2V0c0xpc3QuQ09NUExJQU5DRS5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICBlbGUudmlzaWJpbGl0eSA9IGZhbHNlO1xyXG4gICAgICBpZiAoZWxlLnN1YldpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGVsZS5zdWJXaWRnZXRzLmZvckVhY2goKHN1YkVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgc3ViRWxlbWVudC52aXNpYmlsaXR5ID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLy8gdGhpcy53aWRnZXRzTGlzdC5SSVNLLmZvckVhY2goKGVsZTogYW55KSA9PiB7XHJcbiAgICAvLyAgIGVsZS52aXNpYmlsaXR5ID0gZmFsc2U7XHJcbiAgICAvLyAgIGlmIChlbGUuc3ViV2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgICAgZWxlLnN1YldpZGdldHMuZm9yRWFjaCgoc3ViRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAvLyAgICAgICBzdWJFbGVtZW50LnZpc2liaWxpdHkgPSBmYWxzZTtcclxuICAgIC8vICAgICB9KTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjb25maWd1cmUtd2lkZ2V0cyB2eC1kLWJsb2NrXCIgKm5nSWY9XCJzaG93V2lkZ2V0c1wiPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiY29uZmlndXJlLXdpZGdldHMtaGVhZCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlbiB2eC1wbC00IHZ4LXByLTRcIlxyXG4gID5cclxuICAgIDxkaXYgY2xhc3M9XCJjb25maWd1cmUtd2lkZ2V0cy10aXRsZSB2eC1mcy0xNCB2eC1mdy01MDAgdngtbGFiZWwtdHh0XCI+XHJcbiAgICAgIENvbmZpZ3VyZSBXaWRnZXRzXHJcbiAgICA8L2Rpdj5cclxuICAgIDxidXR0b25cclxuICAgICAgY2xhc3M9XCJjb25maWd1cmUtd2lkZ2V0cy1iYWNrIHZ4LWZzLTE0IHZ4LWZ3LTUwMCB2eC1sYWJlbC10eHQgdngtbS0wIHZ4LXAtMCB2eC1kLWlubGluZS1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXHJcbiAgICAgIChjbGljayk9XCJjbG9zZUNvbmZpZ3VyZURhc2hib2FyZCgpXCJcclxuICAgID5cclxuICAgICAgPGkgY2xhc3M9XCJpY29ucyB2eC1mcy0xNlwiPiYjeGU5MWQ7PC9pPiBCYWNrXHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiY29uZmlndXJlLXdpZGdldHMtYm9keVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbmZpZ3VyZS13aWRnZXRzLXRhYlwiPlxyXG4gICAgICA8dWw+XHJcbiAgICAgICAgPGxpXHJcbiAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cIm1vZHVsZSA9PT0gJ0NPTVBMSUFOQ0UnXCJcclxuICAgICAgICAgICpuZ0lmPVwic2hvd0NvbXBsaWFuY2VcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm1vZHVsZSA9ICdDT01QTElBTkNFJ1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPCEtLSA8YnV0dG9uPlxyXG4gICAgICAgICAgICBDb21wbGlhbmNlPHNwYW4+e3sgY29tcGxpYW5jZVdpZGdldHNEaXNwbGF5Q291bnQgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGkgW2NsYXNzLmFjdGl2ZV09XCJtb2R1bGUgPT09ICdSSVNLJ1wiICpuZ0lmPVwic2hvd1Jpc2tcIj5cclxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm1vZHVsZSA9ICdSSVNLJ1wiPlxyXG4gICAgICAgICAgICBSaXNrczxzcGFuPnt7IHJpc2tXaWRnZXRzRGlzcGxheUNvdW50IH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgPC91bD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbmZpZ3VyZS13aWRnZXRzLXNlYXJjaCB2eC1tYi0yXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBiOzwvaT5cclxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggd2lkZ2V0c1wiIFsobmdNb2RlbCldPVwic2VhcmNoXCIgLz5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cImNvbmZpZ3VyZS13aWRnZXRzLWxpc3QgdngtZC1mbGV4IHZ4LWZsZXgtd3JhcFwiXHJcbiAgICAgICpuZ0lmPVwiKHdpZGdldHNMaXN0W21vZHVsZV0gfCBzZWFyY2ggOiBzZWFyY2gpLmxlbmd0aCAhPT0gMFwiXHJcbiAgICA+XHJcbiAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAqbmdGb3I9XCJsZXQgd2lkZ2V0IG9mIHdpZGdldHNMaXN0W21vZHVsZV0gfCBzZWFyY2ggOiBzZWFyY2hcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZ3VyZS13aWRnZXRzLWl0ZW1cIiAqbmdJZj1cIndpZGdldD8udmlzaWJpbGl0eVwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYmxvY2tcIj5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJ3aWRnZXQudmFsdWVcIlxyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwic2VsZWN0V2lkZ2V0KCRldmVudC50YXJnZXQuY2hlY2tlZCwgbW9kdWxlLCB3aWRnZXQuaWQpXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrLWljb25cIj5cclxuICAgICAgICAgICAgICA8c3ZnXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoZWNrXCJcclxuICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGNpcmNsZVxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoZWNrLWNpcmNsZVwiXHJcbiAgICAgICAgICAgICAgICAgIGN4PVwiMjZcIlxyXG4gICAgICAgICAgICAgICAgICBjeT1cIjI2XCJcclxuICAgICAgICAgICAgICAgICAgcj1cIjI1XCJcclxuICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2stY2lyY2xlXCJcclxuICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZ3VyZS13aWRnZXRzLWl0ZW0taGVhZFwiPlxyXG4gICAgICAgICAgICAgIDxoNFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb25maWd1cmUtd2lkZ2V0cy1pdGVtLXRpdGxlXCJcclxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwid2lkZ2V0Py50aXRsZVwiXHJcbiAgICAgICAgICAgICAgPjwvaDQ+XHJcbiAgICAgICAgICAgICAgPHBcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29uZmlndXJlLXdpZGdldHMtaXRlbS1kZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIndpZGdldD8uZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgID48L3A+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhd2lkZ2V0LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29uZmlndXJlLXdpZGdldHMtaXRlbS1idXR0b24gYWRkXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RXaWRnZXQodHJ1ZSwgbW9kdWxlLCB3aWRnZXQuaWQpXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICArIEFERFxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICpuZ0lmPVwid2lkZ2V0LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29uZmlndXJlLXdpZGdldHMtaXRlbS1idXR0b24gcmVtb3ZlXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RXaWRnZXQoZmFsc2UsIG1vZHVsZSwgd2lkZ2V0LmlkKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgLSBSZW1vdmVcclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWd1cmUtd2lkZ2V0cy1pdGVtLWJvZHlcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2Utd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICBbbmdTcmNdPVwid2lkZ2V0Py53aWRnZXRJbWFnZVwiXHJcbiAgICAgICAgICAgICAgICAgIGFsdD1cIlwiXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiNzkwXCJcclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiNjEzXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbG9hdGluZy1vcHRpb24gdngtZC1mbGV4XCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwid2lkZ2V0Py5zdWJXaWRnZXRzPy5sZW5ndGggPiAwXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdWJXaWRnZXQgb2Ygd2lkZ2V0LnN1YldpZGdldHNcIj5cclxuICAgICAgICAgICAgICAgICAgPGFwcC1jcy1jaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3ViV2lkZ2V0LnZpc2liaWxpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgIChuZ1ZhbHVlQ2hhbmdlKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgc2VsZWN0V2lkZ2V0KCRldmVudCwgbW9kdWxlLCB3aWRnZXQuaWQsIHN1YldpZGdldC5pZClcclxuICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1ZhbHVlXT1cInN1YldpZGdldC52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPnt7IHN1YldpZGdldC50aXRsZSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2FwcC1jcy1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPCEtLSBObyBEYXRhIEltYWdlIC0tPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8YXBwLW5vLWRhdGFcclxuICAgICAgKm5nSWY9XCIod2lkZ2V0c0xpc3RbbW9kdWxlXSB8IHNlYXJjaCA6IHNlYXJjaCkubGVuZ3RoID09PSAwXCJcclxuICAgICAgW25vRGF0YUltYWdlXT1cIkFTU0VUUy5jb25maWd1cmVfd2lkZ2V0XCJcclxuICAgICAgW25vRGF0YVRleHRdPVwiJ05vIGRhdGEgdG8gZGlzcGxheSdcIlxyXG4gICAgPlxyXG4gICAgPC9hcHAtbm8tZGF0YT5cclxuXHJcbiAgICA8ZmxvYXRpbmctYmFyXHJcbiAgICAgIChzdWJtaXRFdmVudCk9XCJvbk5leHRDbGljaygpXCJcclxuICAgICAgKGNhbmNlbEV2ZW50KT1cImNsb3NlQ29uZmlndXJlRGFzaGJvYXJkKClcIlxyXG4gICAgICBbc2VsZWN0ZWREYXRhXT1cInNlbGVjdGVkV2lkZ2V0c1wiXHJcbiAgICAgIChkZWxldGVFdmVudCk9XCJyZW1vdmVXaWRnZXQoJGV2ZW50KVwiXHJcbiAgICA+PC9mbG9hdGluZy1iYXI+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=