tango-app-ui-manage-tickets 3.7.0-beta.61 → 3.7.0-beta.63

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 (177) hide show
  1. package/esm2022/lib/components/add-csm-modal/add-csm-modal.component.mjs +98 -0
  2. package/esm2022/lib/components/audit-log/audit-log.component.mjs +11 -0
  3. package/esm2022/lib/components/audit-mapping-list/audit-mapping-list.component.mjs +496 -0
  4. package/esm2022/lib/components/audit-metrics/audit-metrics.component.mjs +298 -0
  5. package/esm2022/lib/components/audit-report-popup/audit-report-popup.component.mjs +389 -0
  6. package/esm2022/lib/components/audit-retag/audit-retag.component.mjs +480 -0
  7. package/esm2022/lib/components/comment-model/comment-model.component.mjs +58 -0
  8. package/esm2022/lib/components/count/count.component.mjs +89 -0
  9. package/esm2022/lib/components/custom-select/custom-select.component.mjs +187 -0
  10. package/esm2022/lib/components/filter-options/filter-options.component.mjs +41 -0
  11. package/esm2022/lib/components/footfall-dic/footfall-dic.component.mjs +1061 -0
  12. package/esm2022/lib/components/footfall-dicview/footfall-dicview.component.mjs +1014 -0
  13. package/esm2022/lib/components/footfall-popup/footfall-popup.component.mjs +15 -0
  14. package/esm2022/lib/components/group-select/group-select.component.mjs +155 -0
  15. package/esm2022/lib/components/re-trigger/re-trigger.component.mjs +96 -0
  16. package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +108 -0
  17. package/esm2022/lib/components/remove-audit/remove-audit.component.mjs +81 -0
  18. package/esm2022/lib/components/start-audit/start-audit.component.mjs +769 -0
  19. package/esm2022/lib/components/tango-manage-tickets/tango-manage-tickets.component.mjs +131 -0
  20. package/esm2022/lib/components/ticket-filter-panel/ticket-filter-panel.component.mjs +435 -0
  21. package/esm2022/lib/components/ticket-footfall-new/ticket-footfall-new.component.mjs +2749 -0
  22. package/esm2022/lib/components/ticketclosepopup/ticketclosepopup.component.mjs +43 -0
  23. package/esm2022/lib/components/tickets/tickets.component.mjs +847 -0
  24. package/esm2022/lib/components/viewcategory/viewcategory.component.mjs +89 -0
  25. package/esm2022/lib/services/audit.service.mjs +88 -0
  26. package/esm2022/lib/services/excel.service.mjs +45 -0
  27. package/esm2022/lib/services/ticket.service.mjs +319 -0
  28. package/esm2022/lib/services/timer.service.mjs +84 -0
  29. package/esm2022/lib/tango-manage-tickets-routing.module.mjs +44 -0
  30. package/esm2022/lib/tango-manage-tickets.module.mjs +109 -0
  31. package/esm2022/public-api.mjs +6 -0
  32. package/esm2022/tango-app-ui-manage-tickets.mjs +5 -0
  33. package/fesm2022/tango-app-ui-manage-tickets.mjs +10192 -0
  34. package/fesm2022/tango-app-ui-manage-tickets.mjs.map +1 -0
  35. package/index.d.ts +5 -0
  36. package/lib/components/add-csm-modal/add-csm-modal.component.d.ts +30 -0
  37. package/lib/components/audit-log/audit-log.component.d.ts +5 -0
  38. package/lib/components/audit-mapping-list/audit-mapping-list.component.d.ts +73 -0
  39. package/lib/components/audit-metrics/audit-metrics.component.d.ts +59 -0
  40. package/lib/components/audit-report-popup/audit-report-popup.component.d.ts +52 -0
  41. package/lib/components/audit-retag/audit-retag.component.d.ts +59 -0
  42. package/lib/components/comment-model/comment-model.component.d.ts +17 -0
  43. package/lib/components/count/count.component.d.ts +23 -0
  44. package/lib/components/custom-select/custom-select.component.d.ts +35 -0
  45. package/lib/components/filter-options/filter-options.component.d.ts +15 -0
  46. package/lib/components/footfall-dic/footfall-dic.component.d.ts +143 -0
  47. package/lib/components/footfall-dicview/footfall-dicview.component.d.ts +132 -0
  48. package/lib/components/footfall-popup/footfall-popup.component.d.ts +8 -0
  49. package/lib/components/group-select/group-select.component.d.ts +33 -0
  50. package/lib/components/re-trigger/re-trigger.component.d.ts +32 -0
  51. package/lib/components/reactive-select/reactive-select.component.d.ts +32 -0
  52. package/lib/components/remove-audit/remove-audit.component.d.ts +16 -0
  53. package/lib/components/start-audit/start-audit.component.d.ts +86 -0
  54. package/lib/components/tango-manage-tickets/tango-manage-tickets.component.d.ts +28 -0
  55. package/lib/components/ticket-filter-panel/ticket-filter-panel.component.d.ts +79 -0
  56. package/lib/components/ticket-footfall-new/ticket-footfall-new.component.d.ts +287 -0
  57. package/lib/components/ticketclosepopup/ticketclosepopup.component.d.ts +15 -0
  58. package/lib/components/tickets/tickets.component.d.ts +88 -0
  59. package/lib/components/viewcategory/viewcategory.component.d.ts +16 -0
  60. package/lib/services/audit.service.d.ts +36 -0
  61. package/lib/services/excel.service.d.ts +10 -0
  62. package/lib/services/ticket.service.d.ts +87 -0
  63. package/lib/services/timer.service.d.ts +22 -0
  64. package/lib/tango-manage-tickets-routing.module.d.ts +7 -0
  65. package/lib/tango-manage-tickets.module.d.ts +38 -0
  66. package/package.json +25 -12
  67. package/{src/public-api.ts → public-api.d.ts} +2 -8
  68. package/.eslintrc.json +0 -37
  69. package/ng-package.json +0 -7
  70. package/src/lib/components/add-csm-modal/add-csm-modal.component.html +0 -32
  71. package/src/lib/components/add-csm-modal/add-csm-modal.component.scss +0 -14
  72. package/src/lib/components/add-csm-modal/add-csm-modal.component.spec.ts +0 -23
  73. package/src/lib/components/add-csm-modal/add-csm-modal.component.ts +0 -94
  74. package/src/lib/components/audit-log/audit-log.component.html +0 -1
  75. package/src/lib/components/audit-log/audit-log.component.scss +0 -0
  76. package/src/lib/components/audit-log/audit-log.component.spec.ts +0 -23
  77. package/src/lib/components/audit-log/audit-log.component.ts +0 -10
  78. package/src/lib/components/audit-mapping-list/audit-mapping-list.component.html +0 -234
  79. package/src/lib/components/audit-mapping-list/audit-mapping-list.component.scss +0 -186
  80. package/src/lib/components/audit-mapping-list/audit-mapping-list.component.spec.ts +0 -23
  81. package/src/lib/components/audit-mapping-list/audit-mapping-list.component.ts +0 -520
  82. package/src/lib/components/audit-metrics/audit-metrics.component.html +0 -345
  83. package/src/lib/components/audit-metrics/audit-metrics.component.scss +0 -34
  84. package/src/lib/components/audit-metrics/audit-metrics.component.spec.ts +0 -23
  85. package/src/lib/components/audit-metrics/audit-metrics.component.ts +0 -292
  86. package/src/lib/components/audit-report-popup/audit-report-popup.component.html +0 -111
  87. package/src/lib/components/audit-report-popup/audit-report-popup.component.scss +0 -101
  88. package/src/lib/components/audit-report-popup/audit-report-popup.component.spec.ts +0 -23
  89. package/src/lib/components/audit-report-popup/audit-report-popup.component.ts +0 -397
  90. package/src/lib/components/audit-retag/audit-retag.component.html +0 -129
  91. package/src/lib/components/audit-retag/audit-retag.component.scss +0 -146
  92. package/src/lib/components/audit-retag/audit-retag.component.spec.ts +0 -23
  93. package/src/lib/components/audit-retag/audit-retag.component.ts +0 -489
  94. package/src/lib/components/comment-model/comment-model.component.html +0 -24
  95. package/src/lib/components/comment-model/comment-model.component.scss +0 -20
  96. package/src/lib/components/comment-model/comment-model.component.spec.ts +0 -23
  97. package/src/lib/components/comment-model/comment-model.component.ts +0 -53
  98. package/src/lib/components/count/count.component.html +0 -54
  99. package/src/lib/components/count/count.component.scss +0 -14
  100. package/src/lib/components/count/count.component.spec.ts +0 -23
  101. package/src/lib/components/count/count.component.ts +0 -82
  102. package/src/lib/components/custom-select/custom-select.component.html +0 -134
  103. package/src/lib/components/custom-select/custom-select.component.scss +0 -204
  104. package/src/lib/components/custom-select/custom-select.component.spec.ts +0 -23
  105. package/src/lib/components/custom-select/custom-select.component.ts +0 -189
  106. package/src/lib/components/filter-options/filter-options.component.html +0 -51
  107. package/src/lib/components/filter-options/filter-options.component.scss +0 -102
  108. package/src/lib/components/filter-options/filter-options.component.spec.ts +0 -23
  109. package/src/lib/components/filter-options/filter-options.component.ts +0 -38
  110. package/src/lib/components/footfall-dic/footfall-dic.component.html +0 -1275
  111. package/src/lib/components/footfall-dic/footfall-dic.component.scss +0 -273
  112. package/src/lib/components/footfall-dic/footfall-dic.component.spec.ts +0 -23
  113. package/src/lib/components/footfall-dic/footfall-dic.component.ts +0 -1206
  114. package/src/lib/components/footfall-dicview/footfall-dicview.component.html +0 -1136
  115. package/src/lib/components/footfall-dicview/footfall-dicview.component.scss +0 -416
  116. package/src/lib/components/footfall-dicview/footfall-dicview.component.spec.ts +0 -23
  117. package/src/lib/components/footfall-dicview/footfall-dicview.component.ts +0 -1168
  118. package/src/lib/components/footfall-popup/footfall-popup.component.html +0 -61
  119. package/src/lib/components/footfall-popup/footfall-popup.component.scss +0 -20
  120. package/src/lib/components/footfall-popup/footfall-popup.component.spec.ts +0 -23
  121. package/src/lib/components/footfall-popup/footfall-popup.component.ts +0 -12
  122. package/src/lib/components/group-select/group-select.component.html +0 -44
  123. package/src/lib/components/group-select/group-select.component.scss +0 -144
  124. package/src/lib/components/group-select/group-select.component.spec.ts +0 -23
  125. package/src/lib/components/group-select/group-select.component.ts +0 -145
  126. package/src/lib/components/re-trigger/re-trigger.component.html +0 -53
  127. package/src/lib/components/re-trigger/re-trigger.component.scss +0 -16
  128. package/src/lib/components/re-trigger/re-trigger.component.spec.ts +0 -23
  129. package/src/lib/components/re-trigger/re-trigger.component.ts +0 -96
  130. package/src/lib/components/reactive-select/reactive-select.component.html +0 -18
  131. package/src/lib/components/reactive-select/reactive-select.component.scss +0 -52
  132. package/src/lib/components/reactive-select/reactive-select.component.spec.ts +0 -23
  133. package/src/lib/components/reactive-select/reactive-select.component.ts +0 -104
  134. package/src/lib/components/remove-audit/remove-audit.component.html +0 -38
  135. package/src/lib/components/remove-audit/remove-audit.component.scss +0 -27
  136. package/src/lib/components/remove-audit/remove-audit.component.spec.ts +0 -23
  137. package/src/lib/components/remove-audit/remove-audit.component.ts +0 -81
  138. package/src/lib/components/start-audit/start-audit.component.html +0 -174
  139. package/src/lib/components/start-audit/start-audit.component.scss +0 -185
  140. package/src/lib/components/start-audit/start-audit.component.spec.ts +0 -23
  141. package/src/lib/components/start-audit/start-audit.component.ts +0 -761
  142. package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.html +0 -43
  143. package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.scss +0 -35
  144. package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.spec.ts +0 -23
  145. package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.ts +0 -118
  146. package/src/lib/components/ticket-filter-panel/ticket-filter-panel.component.html +0 -386
  147. package/src/lib/components/ticket-filter-panel/ticket-filter-panel.component.scss +0 -87
  148. package/src/lib/components/ticket-filter-panel/ticket-filter-panel.component.spec.ts +0 -23
  149. package/src/lib/components/ticket-filter-panel/ticket-filter-panel.component.ts +0 -494
  150. package/src/lib/components/ticket-footfall-new/ticket-footfall-new.component.html +0 -4743
  151. package/src/lib/components/ticket-footfall-new/ticket-footfall-new.component.scss +0 -1208
  152. package/src/lib/components/ticket-footfall-new/ticket-footfall-new.component.spec.ts +0 -23
  153. package/src/lib/components/ticket-footfall-new/ticket-footfall-new.component.ts +0 -3344
  154. package/src/lib/components/ticketclosepopup/ticketclosepopup.component.html +0 -100
  155. package/src/lib/components/ticketclosepopup/ticketclosepopup.component.scss +0 -34
  156. package/src/lib/components/ticketclosepopup/ticketclosepopup.component.spec.ts +0 -23
  157. package/src/lib/components/ticketclosepopup/ticketclosepopup.component.ts +0 -48
  158. package/src/lib/components/tickets/tickets.component.html +0 -451
  159. package/src/lib/components/tickets/tickets.component.scss +0 -131
  160. package/src/lib/components/tickets/tickets.component.spec.ts +0 -23
  161. package/src/lib/components/tickets/tickets.component.ts +0 -809
  162. package/src/lib/components/viewcategory/viewcategory.component.html +0 -38
  163. package/src/lib/components/viewcategory/viewcategory.component.scss +0 -29
  164. package/src/lib/components/viewcategory/viewcategory.component.spec.ts +0 -23
  165. package/src/lib/components/viewcategory/viewcategory.component.ts +0 -79
  166. package/src/lib/services/audit.service.spec.ts +0 -16
  167. package/src/lib/services/audit.service.ts +0 -98
  168. package/src/lib/services/excel.service.ts +0 -48
  169. package/src/lib/services/ticket.service.spec.ts +0 -16
  170. package/src/lib/services/ticket.service.ts +0 -501
  171. package/src/lib/services/timer.service.spec.ts +0 -16
  172. package/src/lib/services/timer.service.ts +0 -92
  173. package/src/lib/tango-manage-tickets-routing.module.ts +0 -37
  174. package/src/lib/tango-manage-tickets.module.ts +0 -68
  175. package/tsconfig.lib.json +0 -14
  176. package/tsconfig.lib.prod.json +0 -10
  177. package/tsconfig.spec.json +0 -14
@@ -0,0 +1,496 @@
1
+ import { Component, ViewChild } from '@angular/core';
2
+ import * as LZString from 'lz-string';
3
+ // import { AuditReportPopupComponent } from '../audit-report-popup/audit-report-popup.component';
4
+ import { Subject, takeUntil } from 'rxjs';
5
+ import { AuditReportPopupComponent } from '../audit-report-popup/audit-report-popup.component';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@ng-bootstrap/ng-bootstrap";
8
+ import * as i2 from "@angular/router";
9
+ import * as i3 from "../../services/audit.service";
10
+ import * as i4 from "tango-app-ui-shared";
11
+ import * as i5 from "../../services/timer.service";
12
+ import * as i6 from "@angular/common";
13
+ export class AuditMappingListComponent {
14
+ modalService;
15
+ router;
16
+ auditService;
17
+ toastr;
18
+ route;
19
+ cd;
20
+ timerService;
21
+ totalfile = 0;
22
+ customer = 0;
23
+ junk = 0;
24
+ employee = 0;
25
+ currentValue = 0;
26
+ showvalue = false;
27
+ retggingpage = false;
28
+ showvalue1 = false;
29
+ junkimage = [];
30
+ retagimage = [];
31
+ submitvalue = true;
32
+ auditmappingdata;
33
+ customercount;
34
+ auditLoading = true;
35
+ selectedType;
36
+ junkcount = 0;
37
+ employeecount = 0;
38
+ employeimage = [];
39
+ filedetails;
40
+ demographic;
41
+ submitted = false;
42
+ dummymapping;
43
+ destroy$ = new Subject();
44
+ timePassed = 0;
45
+ subscription = null;
46
+ formattedTime = '00:00:00';
47
+ count;
48
+ category = [];
49
+ confirmDraft;
50
+ constructor(modalService, router, auditService, toastr, route, cd, timerService) {
51
+ this.modalService = modalService;
52
+ this.router = router;
53
+ this.auditService = auditService;
54
+ this.toastr = toastr;
55
+ this.route = route;
56
+ this.cd = cd;
57
+ this.timerService = timerService;
58
+ this.selectedType = this.route.snapshot.paramMap.get('type');
59
+ }
60
+ ngOnInit() {
61
+ this.getAuditConfig();
62
+ // this.initial_data_loading();
63
+ if (this.retagimage.length > 0) {
64
+ this.showvalue = true;
65
+ }
66
+ this.setTimer();
67
+ }
68
+ getAuditConfig() {
69
+ let filedata = JSON.parse(sessionStorage.getItem('totalfiles') || '{}');
70
+ this.auditService.getAuditconfig(filedata?.filedetails?.clientId).pipe(takeUntil(this.destroy$)).subscribe({
71
+ next: (res) => {
72
+ if (res && res?.code == 200) {
73
+ this.category = res.data.footfallDirectoryConfigs.taggingLimitation;
74
+ // this.initial_data_loading()
75
+ // this.saveDraftimg();
76
+ this.getmappingdata();
77
+ }
78
+ }
79
+ });
80
+ }
81
+ setTimer() {
82
+ this.subscription = this.timerService.getTimePassed().subscribe(time => {
83
+ this.timePassed = time;
84
+ this.formattedTime = this.timerService.formatTime(time);
85
+ this.cd.detectChanges();
86
+ });
87
+ this.timerService.startTimer();
88
+ document.addEventListener('mousemove', this.handleGlobalMouseEvent);
89
+ document.addEventListener('click', this.handleGlobalMouseEvent);
90
+ document.addEventListener('mouseenter', this.handleGlobalMouseEvent);
91
+ document.addEventListener('scroll', this.handleGlobalMouseEvent);
92
+ }
93
+ ngOnDestroy() {
94
+ this.destroy$.next(true);
95
+ this.destroy$.complete();
96
+ document.removeEventListener('mousemove', this.handleGlobalMouseEvent);
97
+ document.removeEventListener('click', this.handleGlobalMouseEvent);
98
+ document.removeEventListener('mouseenter', this.handleGlobalMouseEvent);
99
+ document.removeEventListener('scroll', this.handleGlobalMouseEvent);
100
+ this.timerService.clearTimer();
101
+ }
102
+ handleGlobalMouseEvent = () => {
103
+ this.timerService.startTimer();
104
+ };
105
+ initial_data_loading() {
106
+ if ('audit' in sessionStorage) {
107
+ let stringifydata = sessionStorage.getItem('audit') || '{}';
108
+ const decompressedData = LZString.decompress(stringifydata);
109
+ var auditdata = JSON.parse(decompressedData || '{}');
110
+ if (auditdata.length > 0) {
111
+ this.auditmappingdata = auditdata;
112
+ this.customercount = this.auditmappingdata.length;
113
+ }
114
+ else {
115
+ this.auditmappingdata = [];
116
+ this.customercount = 0;
117
+ }
118
+ this.demographic = this.auditmappingdata.filter((data) => data.demographic === 'd').length;
119
+ }
120
+ this.category.map((data) => {
121
+ var count = JSON.parse(sessionStorage.getItem(data?.type) || '{}');
122
+ data.count = count?.length;
123
+ });
124
+ if ('retag' in sessionStorage) {
125
+ var retagdata = JSON.parse(sessionStorage.getItem('retag') || '{}');
126
+ if (retagdata.length > 0) {
127
+ this.retagimage = retagdata;
128
+ }
129
+ else {
130
+ this.retagimage = [];
131
+ if (this.retagimage.length == 0) {
132
+ this.showvalue = false;
133
+ }
134
+ }
135
+ }
136
+ if ('totalfiles' in sessionStorage) {
137
+ var files = JSON.parse(sessionStorage.getItem('totalfiles') || '{}');
138
+ this.totalfile = files?.totalfiles;
139
+ this.filedetails = files?.filedetails;
140
+ }
141
+ }
142
+ getmappingdata() {
143
+ var totalfile = JSON.parse(sessionStorage.getItem('totalfiles') || '{}');
144
+ this.filedetails = totalfile?.filedetails;
145
+ var payload = {
146
+ storeId: totalfile?.filedetails?.storeId,
147
+ fileDate: totalfile?.filedetails?.Date,
148
+ auditId: totalfile?.auditId,
149
+ count: totalfile?.totalfiles
150
+ };
151
+ this.auditService.getAuditmappinglist(payload).pipe(takeUntil(this.destroy$)).subscribe({
152
+ next: (res) => {
153
+ if (res && res?.code == 200) {
154
+ this.auditLoading = false;
155
+ this.category.map((data) => {
156
+ let filterData = res?.data?.result?.draftedData?.filter((x) => x.type === data.type);
157
+ data.value = filterData[0]?.value && filterData[0]?.value.length > 0 ? filterData[0]?.value : [];
158
+ data.count = data?.value?.length;
159
+ sessionStorage.setItem(data?.type, JSON.stringify(data?.value && data?.value.length > 0 ? data?.value : []));
160
+ });
161
+ let customerData = res?.data?.result?.draftedData?.filter((x) => x.type === 'customer');
162
+ this.auditmappingdata = customerData[0]?.value;
163
+ const jsonString = JSON.stringify(customerData[0]?.value);
164
+ const compressedData = LZString.compress(jsonString);
165
+ sessionStorage.setItem('audit', compressedData);
166
+ var retagiamge = JSON.parse(sessionStorage.getItem('retag') || '[]');
167
+ if (retagiamge.length > 0) {
168
+ let stringifydata = sessionStorage.getItem('audit') || '{}';
169
+ const decompressedData = LZString.decompress(stringifydata);
170
+ var customer = JSON.parse(decompressedData || '{}');
171
+ customer = [...customer, ...retagiamge];
172
+ const jsonString = JSON.stringify(customer);
173
+ const compressedData = LZString.compress(jsonString);
174
+ sessionStorage.setItem('audit', compressedData);
175
+ }
176
+ sessionStorage.removeItem('retag');
177
+ this.retagimage = [];
178
+ this.initial_data_loading();
179
+ if (this.retagimage.length == 0) {
180
+ this.showvalue = false;
181
+ }
182
+ }
183
+ },
184
+ error: (err) => {
185
+ }
186
+ });
187
+ }
188
+ redireact = false;
189
+ backToTagging() {
190
+ this.redireact = true;
191
+ this.saveDraftimg();
192
+ }
193
+ changesdata() {
194
+ var user = JSON.parse(localStorage.getItem('user-info') || '{}');
195
+ var totalfile = JSON.parse(sessionStorage.getItem('totalfiles') || '{}');
196
+ var payload = {
197
+ storeId: totalfile?.filedetails?.storeId,
198
+ fileDate: totalfile?.filedetails?.Date,
199
+ auditId: totalfile?.auditId,
200
+ count: totalfile?.totalfiles
201
+ };
202
+ this.auditService.getAuditmappinglist(payload).pipe(takeUntil(this.destroy$)).subscribe({
203
+ next: (res) => {
204
+ if (res && res?.code == 200) {
205
+ this.auditLoading = false;
206
+ sessionStorage.removeItem('retag');
207
+ this.retagimage = [];
208
+ this.category.map((data) => {
209
+ let filterData = res?.data?.result?.draftedData?.filter((x) => x.type === data.type);
210
+ data.value = filterData[0]?.value && filterData[0]?.value.length > 0 ? filterData[0]?.value : [];
211
+ data.count = data?.value?.length;
212
+ sessionStorage.setItem(data?.type, JSON.stringify(data?.value && data?.value.length > 0 ? data?.value : []));
213
+ });
214
+ let customerData = res?.data?.result?.draftedData?.filter((x) => x.type === 'customer');
215
+ this.auditmappingdata = customerData[0]?.value;
216
+ const jsonString = JSON.stringify(customerData[0]?.value);
217
+ const compressedData = LZString.compress(jsonString);
218
+ sessionStorage.setItem('audit', compressedData);
219
+ if (this.retagimage.length == 0) {
220
+ this.showvalue = false;
221
+ }
222
+ this.router.navigate(["/manage/tickets/audit"]);
223
+ }
224
+ },
225
+ error: (err) => {
226
+ }
227
+ });
228
+ }
229
+ ngOnChanges(changes) {
230
+ if (changes['auditmappingdata']) {
231
+ this.dummymapping = JSON.parse(JSON.stringify(changes['auditmappingdata'].currentValue));
232
+ }
233
+ }
234
+ allowDrop(ev) {
235
+ ev.preventDefault();
236
+ }
237
+ drag(ev) {
238
+ ev.dataTransfer.setData("text/plain", ev.target.id);
239
+ }
240
+ dropforretag(ev) {
241
+ ev.preventDefault();
242
+ const draggedImageId = ev.dataTransfer.getData('text/plain');
243
+ const draggedImage = document.getElementById(draggedImageId);
244
+ this.showvalue = true;
245
+ const htmltag = ev.dataTransfer.getData('text/html');
246
+ var Name = getTagNameFromHTML(htmltag);
247
+ console.log("🚀 ~ AuditMappingListComponent ~ dropforretag ~ Name:", Name, draggedImageId);
248
+ if (Name != null && this.category.filter((data) => data?.type === Name)?.length > 0) {
249
+ let imageData = JSON.parse(sessionStorage.getItem(Name) || '{}');
250
+ var splicedvalue = imageData.splice(imageData.findIndex(({ img_id }) => img_id == draggedImageId), 1);
251
+ this.category.map((data) => {
252
+ if (data?.type == Name) {
253
+ data.value = imageData;
254
+ data.count = imageData.length;
255
+ }
256
+ });
257
+ sessionStorage.setItem(Name, JSON.stringify(imageData));
258
+ var oldretag = JSON.parse(sessionStorage.getItem('retag') || '{}');
259
+ var newtag = [];
260
+ if (Number(oldretag.length) > 0) {
261
+ newtag = [...oldretag, ...splicedvalue];
262
+ }
263
+ else {
264
+ newtag = splicedvalue;
265
+ }
266
+ this.retagimage = newtag;
267
+ sessionStorage.setItem('retag', JSON.stringify(this.retagimage));
268
+ if (Name === 'duplicate') {
269
+ this.auditmappingdata.map((mainData) => {
270
+ if (mainData.count > 1) {
271
+ console.log("🚀 ~ AuditMappingListComponent ~ dropforretag ~ mainData:", mainData);
272
+ mainData.mappedid = mainData.mappedid.filter((data) => data.img_id != draggedImageId);
273
+ mainData.count = mainData.mappedid.length;
274
+ }
275
+ });
276
+ }
277
+ }
278
+ else if (Name != null) {
279
+ var insertIndex = this.auditmappingdata.findIndex(({ img_id }) => img_id == Name);
280
+ var mainarray = this.auditmappingdata.splice(this.auditmappingdata.findIndex(({ img_id }) => img_id == Name), 1);
281
+ this.customercount = this.auditmappingdata?.length;
282
+ if (mainarray?.length > 0 && mainarray[0].mappedid.length > 1) {
283
+ var checkindex = mainarray[0].mappedid.findIndex(({ img_id }) => img_id == draggedImageId);
284
+ var subarray = mainarray[0].mappedid.splice(mainarray[0].mappedid.findIndex(({ img_id }) => img_id == draggedImageId), 1);
285
+ if (checkindex == 0) {
286
+ mainarray[0].img_name = mainarray[0].mappedid[0].img_name;
287
+ mainarray[0].img_id = mainarray[0].mappedid[0].img_id;
288
+ mainarray[0].img_path = mainarray[0].mappedid[0].img_path;
289
+ }
290
+ mainarray[0].count = mainarray[0].count - 1;
291
+ subarray[0].mappedid = [];
292
+ let obj = {
293
+ img_name: subarray[0].img_name,
294
+ img_id: subarray[0].img_id,
295
+ img_path: subarray[0].img_path
296
+ };
297
+ subarray[0].mappedid.push(obj);
298
+ subarray[0].selected = false;
299
+ subarray[0].dropped = false;
300
+ subarray[0].demographic = '';
301
+ subarray[0].count = 1;
302
+ var oldretag = JSON.parse(sessionStorage.getItem('retag') || '{}');
303
+ var newtag = [];
304
+ if (Number(oldretag.length) > 0) {
305
+ newtag = [...oldretag, ...subarray];
306
+ }
307
+ else {
308
+ newtag = subarray;
309
+ }
310
+ this.retagimage = newtag;
311
+ sessionStorage.setItem('retag', JSON.stringify(this.retagimage));
312
+ this.auditmappingdata.splice(insertIndex, 0, ...mainarray);
313
+ const jsonString = JSON.stringify(this.auditmappingdata);
314
+ const compressedData = LZString.compress(jsonString);
315
+ sessionStorage.setItem('audit', compressedData);
316
+ }
317
+ else {
318
+ var oldretag = JSON.parse(sessionStorage.getItem('retag') || '{}');
319
+ var newtag = [];
320
+ if (Number(oldretag.length) > 0) {
321
+ newtag = [...oldretag, ...mainarray];
322
+ }
323
+ else {
324
+ newtag = mainarray;
325
+ }
326
+ this.retagimage = newtag;
327
+ sessionStorage.setItem('retag', JSON.stringify(this.retagimage));
328
+ const jsonString = JSON.stringify(this.auditmappingdata);
329
+ const compressedData = LZString.compress(jsonString);
330
+ sessionStorage.setItem('audit', compressedData);
331
+ }
332
+ }
333
+ function getTagNameFromHTML(html) {
334
+ var tempElement = document.createElement('div');
335
+ tempElement.innerHTML = html;
336
+ var firstChild = tempElement.firstChild;
337
+ if (firstChild.hasAttribute('name')) {
338
+ var namePropertyValue = firstChild.getAttribute('name');
339
+ return namePropertyValue;
340
+ }
341
+ return null;
342
+ }
343
+ sessionStorage.setItem('retag', JSON.stringify(this.retagimage));
344
+ if ('retag' in sessionStorage) {
345
+ var retagdata = JSON.parse(sessionStorage.getItem('retag') || '{}');
346
+ this.retagimage = retagdata;
347
+ }
348
+ }
349
+ removeimage(data) {
350
+ var removed_img = this.retagimage.filter((ev) => ev.img_id == data.img_id);
351
+ this.retagimage.splice(this.retagimage.findIndex(({ img_id }) => img_id == data.img_id), 1);
352
+ this.auditmappingdata = [...this.auditmappingdata, ...removed_img];
353
+ this.customercount = this.auditmappingdata?.length;
354
+ if (!this.retagimage.length) {
355
+ this.showvalue = false;
356
+ }
357
+ let stringifydata = sessionStorage.getItem('audit') || '{}';
358
+ const decompressedData = LZString.decompress(stringifydata);
359
+ const completeDate = JSON.parse(decompressedData || '{}');
360
+ const jsonString = JSON.stringify(this.auditmappingdata);
361
+ const compressedData = LZString.compress(jsonString);
362
+ sessionStorage.setItem('audit', compressedData);
363
+ sessionStorage.setItem('retag', JSON.stringify(this.retagimage));
364
+ this.cd.detectChanges();
365
+ }
366
+ saveDraftimg() {
367
+ this.submitted = true;
368
+ var totalfile = JSON.parse(sessionStorage.getItem('totalfiles') || '{}');
369
+ this.timePassed = JSON.parse(sessionStorage.getItem('timeSpent') || '{}');
370
+ if ('retag' in sessionStorage) {
371
+ var retagdata = JSON.parse(sessionStorage.getItem('retag') || '{}');
372
+ this.retagimage = retagdata;
373
+ }
374
+ let storedData = [
375
+ {
376
+ type: "customer",
377
+ value: this.auditmappingdata ? this.auditmappingdata : [],
378
+ }
379
+ ];
380
+ this.category.map((data) => {
381
+ let sessionvalue = JSON.parse(sessionStorage.getItem(data.type) || '{}');
382
+ storedData.push({
383
+ type: data.type,
384
+ value: sessionvalue && sessionvalue.length > 0 ? sessionvalue : []
385
+ });
386
+ });
387
+ var inserobj = {
388
+ storeId: totalfile?.filedetails?.storeId,
389
+ fileDate: totalfile?.filedetails?.Date,
390
+ auditId: totalfile?.auditId ? totalfile?.auditId : totalfile?.filedetails?.auditId,
391
+ totalCount: totalfile?.totalfiles ? totalfile.totalfiles : 0,
392
+ retagCount: this.retagimage.length,
393
+ timeSpent: this.timePassed,
394
+ retagImage: this.retagimage ? this.retagimage : []
395
+ };
396
+ this.auditService.saveDraft(inserobj).pipe(takeUntil(this.destroy$)).subscribe(() => {
397
+ if (!this.redireact) {
398
+ this.submitted = false;
399
+ this.getmappingdata();
400
+ }
401
+ else {
402
+ this.changesdata();
403
+ }
404
+ });
405
+ }
406
+ taggingview() {
407
+ this.submitted = true;
408
+ var totalfile = JSON.parse(sessionStorage.getItem('totalfiles') || '{}');
409
+ this.showvalue = false;
410
+ this.showvalue1 = true;
411
+ this.retggingpage = true;
412
+ let stringifydata = sessionStorage.getItem('audit') || '{}';
413
+ const decompressedData = LZString.decompress(stringifydata);
414
+ var customer = JSON.parse(decompressedData || '{}');
415
+ let storedData = [
416
+ {
417
+ type: "customer",
418
+ value: customer ? customer : [],
419
+ }
420
+ ];
421
+ this.category.map((data) => {
422
+ let sessionvalue = JSON.parse(sessionStorage.getItem(data.type) || '{}');
423
+ storedData.push({
424
+ type: data.type,
425
+ value: sessionvalue && sessionvalue.length > 0 ? sessionvalue : []
426
+ });
427
+ });
428
+ var inserobj = {
429
+ storeId: totalfile?.filedetails?.store_id,
430
+ fileDate: totalfile?.filedetails?.file_date,
431
+ auditId: totalfile?.auditId ? totalfile?.auditId : totalfile?.filedetails.auditId,
432
+ totalCount: totalfile?.totalfiles ? totalfile.totalfiles : 0,
433
+ retagCount: this.retagimage.length,
434
+ timeSpent: this.timePassed,
435
+ retagImage: this.retagimage ? this.retagimage : []
436
+ };
437
+ this.auditService.saveDraft(inserobj).pipe(takeUntil(this.destroy$)).subscribe(() => { this.submitted = false; });
438
+ if ('retag' in sessionStorage) {
439
+ var retagdata = JSON.parse(sessionStorage.getItem('retag') || '{}');
440
+ this.retagimage = retagdata;
441
+ }
442
+ this.router.navigate(["/manage/tickets/retag-mapping"]);
443
+ }
444
+ submitaudit() {
445
+ const modalRef = this.modalService.open(AuditReportPopupComponent, {
446
+ size: 'lg',
447
+ centered: true
448
+ });
449
+ modalRef.componentInstance.selectedType = this.selectedType;
450
+ }
451
+ setValue(i) {
452
+ let index = 0;
453
+ if (i > index) {
454
+ return this.currentValue = this.currentValue + 1;
455
+ }
456
+ }
457
+ currentGroupNumber = 0;
458
+ getGroupNumber(obj) {
459
+ if (obj.count > 1) {
460
+ return ++this.currentGroupNumber;
461
+ }
462
+ return null;
463
+ }
464
+ resetGroupNumber() {
465
+ this.currentGroupNumber = 0;
466
+ }
467
+ getFilteredData(count) {
468
+ return this.auditmappingdata.filter((obj) => obj.count === count);
469
+ }
470
+ toggleImage(img_name) {
471
+ this.auditmappingdata.map((data) => {
472
+ if (data.img_name == img_name) {
473
+ if (data.mappedid.length > 0) {
474
+ data.demographic !== 'd' ? data.demographic = 'd' : data.demographic = '';
475
+ }
476
+ else {
477
+ data.dropped = !data.dropped;
478
+ }
479
+ }
480
+ });
481
+ this.demographic = this.auditmappingdata.filter((data) => data.demographic === 'd').length;
482
+ const jsonString = JSON.stringify(this.auditmappingdata);
483
+ const compressedData = LZString.compress(jsonString);
484
+ sessionStorage.setItem('audit', compressedData);
485
+ }
486
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditMappingListComponent, deps: [{ token: i1.NgbModal }, { token: i2.Router }, { token: i3.AuditService }, { token: i4.ToastService }, { token: i2.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i5.TimerService }], target: i0.ɵɵFactoryTarget.Component });
487
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AuditMappingListComponent, selector: "lib-audit-mapping-list", viewQueries: [{ propertyName: "confirmDraft", first: true, predicate: ["confirmDraft"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"!auditLoading\" class=\"card\" >\r\n <div class=\"card-header\" >\r\n <div class=\"card-title\">\r\n <h3 class=\"flex-column\">\r\n <!-- <span class=\"card-label fw-bold\">{{filedetails?.queueName}}<span class=\"mx-3 arrow-code\"> - </span> -->\r\n <span>{{filedetails?.storeId}}</span>\r\n \r\n <span class=\"mx-3 arrow-code\"> - </span>\r\n <span >{{filedetails?.Date}}</span>\r\n <!-- <span class=\"mx-3 arrow-code\"> - </span>\r\n <span >{{filedetails?.type}}</span> -->\r\n <!-- </span> -->\r\n </h3>\r\n \r\n <div class=\"rounded-3 ms-3 d-flex align-items-center bg-timer\">\r\n <span class=\"me-3 text-timer fw-semibold\">{{ formattedTime }}</span>\r\n <span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M9.16667 2.87071C9.16667 2.62023 9.26617 2.38001 9.44329 2.20289C9.62041 2.02577 9.86063 1.92627 10.1111 1.92627H13.8889C14.1394 1.92627 14.3796 2.02577 14.5567 2.20289C14.7338 2.38001 14.8333 2.62023 14.8333 2.87071C14.8333 3.1212 14.7338 3.36142 14.5567 3.53854C14.3796 3.71565 14.1394 3.81516 13.8889 3.81516H12.9444V5.07442L12.9432 5.12605C14.5396 5.30097 16.0528 5.92787 17.3053 6.93308L17.3141 6.92553L18.2585 5.98108C18.374 5.85676 18.5208 5.76588 18.6835 5.71801C18.8463 5.67014 19.019 5.66706 19.1833 5.70908C19.3477 5.75111 19.4977 5.83669 19.6175 5.9568C19.7373 6.07692 19.8225 6.22713 19.8641 6.3916C19.906 6.55578 19.903 6.72823 19.8554 6.89085C19.8077 7.05348 19.7172 7.20029 19.5933 7.3159L18.6489 8.26034L18.6413 8.26915C19.6403 9.51974 20.2658 11.027 20.446 12.6174C20.6261 14.2078 20.3536 15.8167 19.6597 17.2591C18.9658 18.7014 17.8788 19.9185 16.5237 20.7704C15.1686 21.6222 13.6006 22.0741 12 22.0741C10.3994 22.0741 8.83137 21.6222 7.47629 20.7704C6.12122 19.9185 5.03419 18.7014 4.3403 17.2591C3.64641 15.8167 3.37386 14.2078 3.55402 12.6174C3.73418 11.027 4.35973 9.51974 5.35867 8.26915L5.35111 8.26034L4.40667 7.3159C4.23964 7.1369 4.14865 6.90003 4.15287 6.65524C4.1571 6.41045 4.25622 6.17687 4.42934 6.00375C4.60246 5.83063 4.83604 5.73151 5.08083 5.72728C5.32562 5.72306 5.56249 5.81405 5.74149 5.98108L6.68593 6.92553L6.69474 6.93308C7.94681 5.92809 9.45963 5.3012 11.0556 5.12605V3.81516H10.1111C9.86063 3.81516 9.62041 3.71565 9.44329 3.53854C9.26617 3.36142 9.16667 3.1212 9.16667 2.87071ZM12 20.1855C13.7535 20.1854 15.4352 19.4886 16.675 18.2485C17.9148 17.0085 18.6113 15.3267 18.6111 13.5732C18.6109 11.8196 17.9142 10.138 16.6741 8.89813C15.4341 7.65831 13.7523 6.96188 11.9987 6.96204C10.2452 6.96221 8.56354 7.65896 7.32372 8.89902C6.0839 10.1391 5.38747 11.8209 5.38763 13.5744C5.3878 15.328 6.08455 17.0096 7.32461 18.2494C8.56467 19.4893 10.2465 20.1857 12 20.1855ZM12.4899 11.7485L14.1647 10.0737C14.2517 9.98343 14.3559 9.91143 14.4711 9.86188C14.5863 9.81233 14.7102 9.78622 14.8356 9.78507C14.9611 9.78392 15.0854 9.80776 15.2015 9.85519C15.3176 9.90262 15.4231 9.9727 15.5118 10.0613C15.6005 10.15 15.6707 10.2554 15.7182 10.3714C15.7658 10.4875 15.7897 10.6118 15.7887 10.7372C15.7877 10.8626 15.7617 10.9866 15.7122 11.1018C15.6628 11.2171 15.5909 11.3213 15.5007 11.4085L13.8259 13.0846C13.9003 13.3645 13.9095 13.6579 13.8526 13.942C13.7958 14.226 13.6745 14.4933 13.4981 14.7231C13.3217 14.9529 13.0949 15.1391 12.8352 15.2675C12.5754 15.3958 12.2897 15.4628 12 15.4633C11.7327 15.461 11.4688 15.4019 11.226 15.29C10.9832 15.1781 10.767 15.0159 10.5916 14.8141C10.4162 14.6123 10.2857 14.3755 10.2087 14.1195C10.1316 13.8635 10.1099 13.594 10.1448 13.329C10.1798 13.0639 10.2706 12.8093 10.4114 12.582C10.5522 12.3547 10.7396 12.1599 10.9613 12.0104C11.183 11.861 11.4339 11.7604 11.6974 11.7152C11.9609 11.6701 12.231 11.6814 12.4899 11.7485Z\" fill=\"black\"/>\r\n </svg></span>\r\n </div>\r\n <!-- <span *ngIf=\"demographic\" class=\"badge badge-light-success ms-3\">{{demographic}} {{demographic > 1 ? 'Demographics' : 'Demographic'}}</span> -->\r\n </div>\r\n\r\n <div class=\"card-toolbar \">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <a *ngIf=\"!showvalue1\" class=\"btn btn-sm btn-default btn-outline py-2 mx-2\" (click)=\"changesdata()\"><span\r\n class=\"svg-icon svg-icon-primary svg-icon-2x\" ><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M15.8337 10.0001H4.16699M4.16699 10.0001L10.0003 15.8334M4.16699 10.0001L10.0003 4.16675\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span><span class=\"ms-3\">Back to Tagging</span></a>\r\n <button *ngIf=\"!showvalue\" class=\"btn btn-sm btn-primary py-2 mx-2\" (click)=\"submitaudit()\" >Submit\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M4.16699 9.99984H15.8337M15.8337 9.99984L10.0003 4.1665M15.8337 9.99984L10.0003 15.8332\" stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </button>\r\n \r\n <button *ngIf=\"showvalue\" class=\"btn btn-primary btn-sm py-2 mx-2\" [disabled]=\"submitted\" (click)=\"taggingview()\">Retag <span\r\n class=\"svg-icon svg-icon-primary svg-icon-2x\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M4.16666 9.99996H15.8333M15.8333 9.99996L9.99999 4.16663M15.8333 9.99996L9.99999 15.8333\" stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n \r\n</div>\r\n\r\n\r\n<div class=\"row\"> \r\n <div *ngIf=\"auditLoading\" class=\"card mt-5\">\r\n <div class=\"card-body\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div> \r\n </div>\r\n <!-- <h5 class=\"text-dark-600 fs-3 fw-bold text-center \">Loading Audit file......</h5> -->\r\n </div>\r\n </div>\r\n <div *ngIf=\"!auditLoading\" class=\"col-md-7\">\r\n <div class=\"card mt-5\">\r\n <div class=\"h-1000px\">\r\n <div ngbAccordion *ngFor=\"let item of category\">\r\n <div *ngIf=\"item?.count !==0\" class=\"mt-6\" ngbAccordionItem [collapsed]=\"!item?.count\">\r\n <div ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div>\r\n {{item?.name}} <span class=\"sub-text mt-2 ms-2\">\r\n <span class=\"badge badge-light-default\"><svg class=\"me-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_14508_18583)\">\r\n <path d=\"M2.5 10.5H9.5C10.0523 10.5 10.5 10.0523 10.5 9.5V2.5C10.5 1.94772 10.0523 1.5 9.5 1.5H2.5C1.94772 1.5 1.5 1.94772 1.5 2.5V9.5C1.5 10.0523 1.94772 10.5 2.5 10.5ZM2.5 10.5L8 5L10.5 7.5M5 4.25C5 4.66421 4.66421 5 4.25 5C3.83579 5 3.5 4.66421 3.5 4.25C3.5 3.83579 3.83579 3.5 4.25 3.5C4.66421 3.5 5 3.83579 5 4.25Z\" stroke=\"#667085\" stroke-width=\"1.1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_14508_18583\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>{{item?.count}}</span>\r\n </span>\r\n </div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n \r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody class=\"py-0\">\r\n <ng-template>\r\n <div class=\"h-auto\" (dragover)=\"allowDrop($event)\">\r\n <div class=\"col-md-12 item\" >\r\n <div class=\"item\" *ngFor=\"let obj of item?.value\" >\r\n <img draggable=\"true\" (dragstart)=\"drag($event)\" id=\"{{obj.img_id}}\" name=\"{{item.type}}\"\r\n class=\"my-3 mx-2 img\" [src]=\"obj.img_path\">\r\n <div class=\"text-center m-0 fs-7 fw-bold\">{{obj.img_name}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n </div>\r\n <div ngbAccordion>\r\n <div class=\"mt-6\" ngbAccordionItem [collapsed]=\"!(!junkcount && !employeecount)\">\r\n <div ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div>\r\n Unique Customer <span class=\"sub-text mt-2 ms-2\">\r\n <span class=\"badge badge-light-default\"><svg class=\"me-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_15800_3911)\">\r\n <path d=\"M8.5 10.5V9.5C8.5 8.96957 8.28929 8.46086 7.91421 8.08579C7.53914 7.71071 7.03043 7.5 6.5 7.5H2.5C1.96957 7.5 1.46086 7.71071 1.08579 8.08579C0.710714 8.46086 0.5 8.96957 0.5 9.5V10.5M11.5 10.5V9.5C11.4997 9.05686 11.3522 8.62639 11.0807 8.27616C10.8092 7.92593 10.4291 7.67578 10 7.565M8 1.565C8.43021 1.67515 8.81152 1.92535 9.08382 2.27616C9.35612 2.62696 9.50392 3.05841 9.50392 3.5025C9.50392 3.94659 9.35612 4.37804 9.08382 4.72884C8.81152 5.07965 8.43021 5.32985 8 5.44M6.5 3.5C6.5 4.60457 5.60457 5.5 4.5 5.5C3.39543 5.5 2.5 4.60457 2.5 3.5C2.5 2.39543 3.39543 1.5 4.5 1.5C5.60457 1.5 6.5 2.39543 6.5 3.5Z\" stroke=\"#667085\" stroke-width=\"1.1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15800_3911\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg> {{customercount}}</span>\r\n </span>\r\n </div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n \r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody class=\"py-0\">\r\n <ng-template>\r\n <div>\r\n <div class=\"h-500\" (dragover)=\"allowDrop($event)\">\r\n <ng-container *ngIf=\"resetGroupNumber() === null\"></ng-container>\r\n <ng-container *ngFor=\"let obj of auditmappingdata;let i=index\">\r\n <div *ngIf=\"obj?.count === 1\" class=\"item\">\r\n <div>\r\n <div *ngFor=\"let img of obj?.mappedid\">\r\n <img draggable=\"true\" name=\"{{obj.img_id}}\" (dragstart)=\"drag($event)\" (click)=\"toggleImage(img?.img_name )\"\r\n id=\"{{img.img_id}}\" class=\"my-3 mx-2 img\" [src]=\"img.img_path\">\r\n <div class=\"text-center m-0 fs-7 fw-bold\">{{img.img_name}}</div>\r\n <!-- <span *ngIf=\"obj?.demographic !== 'd'\" class=\"notify-badge2 w-25px h-25px cursor-pointer\" (click)=\"toggleImage(img?.img_name )\">\r\n </span>\r\n <span *ngIf=\"obj?.demographic === 'd'\" class=\"notify-badge\" (click)=\"toggleImage(img?.img_name )\"><i class=\"fa fa-check\" aria-hidden=\"true\"\r\n style=\"font-size:15px;color:#00A3FF\"></i></span> -->\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container class=\"mt-5\" *ngFor=\"let obj of auditmappingdata;let i=index\">\r\n <div *ngIf=\"obj?.count > 1\" class=\"card-label mt-3\">Group {{ getGroupNumber(obj) }} <span class=\"sub-text mt-3 ms-2\">\r\n <span class=\"badge badge-light-default\"><svg class=\"me-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_14508_18583)\">\r\n <path d=\"M2.5 10.5H9.5C10.0523 10.5 10.5 10.0523 10.5 9.5V2.5C10.5 1.94772 10.0523 1.5 9.5 1.5H2.5C1.94772 1.5 1.5 1.94772 1.5 2.5V9.5C1.5 10.0523 1.94772 10.5 2.5 10.5ZM2.5 10.5L8 5L10.5 7.5M5 4.25C5 4.66421 4.66421 5 4.25 5C3.83579 5 3.5 4.66421 3.5 4.25C3.5 3.83579 3.83579 3.5 4.25 3.5C4.66421 3.5 5 3.83579 5 4.25Z\" stroke=\"#667085\" stroke-width=\"1.1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_14508_18583\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>{{obj.count}}</span>\r\n </span> \r\n <!-- <span *ngIf=\"obj?.demographic !== 'd'\" class=\"kid-badge cursor-pointer ms-3 me-3\" style=\"padding:2px 10.5px !important\" (click)=\"toggleImage(obj?.img_name)\">\r\n </span>\r\n <span *ngIf=\"obj?.demographic === 'd'\" class=\"kid-badge cursor-pointer ms-3 me-3\" (click)=\"toggleImage(obj?.img_name)\"><i class=\"fa fa-check\" aria-hidden=\"true\"\r\n style=\"font-size:15px;color:#00A3FF\"></i></span> Mark as demographic -->\r\n </div>\r\n <div *ngIf=\"obj.count > 1\" class=\"item\">\r\n <div>\r\n <div *ngFor=\"let img of obj?.mappedid\" class=\"item\">\r\n <img draggable=\"true\" name=\"{{obj.img_id}}\" (dragstart)=\"drag($event)\"\r\n id=\"{{img.img_id}}\" class=\"my-3 mx-2 img\" [src]=\"img.img_path\">\r\n <div class=\"text-center m-0 fs-7 fw-bold\">{{img.img_name}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!auditLoading\" class=\"col-md-5\">\r\n <div class=\"card mt-5\">\r\n <!-- (change)=\"imagearray()\" -->\r\n <div class=\"card-body h-1000px\" (drop)=\"dropforretag($event)\" (dragover)=\"allowDrop($event)\" >\r\n <div class=\"card-label fw-bold text-dark mb-5\">Images for Retagging</div>\r\n <div class=\"col-md-12 item\" >\r\n <div class=\"item\" *ngFor=\"let item of retagimage\">\r\n <img [src]=\"item.img_path\" class=\"my-2 mx-4 img-ret\">\r\n <div class=\"text-center m-0 fs-7 fw-bold\">{{item.img_name}}</div>\r\n <span class=\"notify-badge1 cursor-pointer\" (click)=\"removeimage(item)\"><i class=\"fa fa-close\" aria-hidden=\"true\"\r\n style=\"font-size:15px;color:#00A3FF\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #confirmDraft let-modal>\r\n <div class=\"card h-auto p-10\">\r\n <div class=\"card-header d-grid p-0 border-0\">\r\n <span><img src=\"./assets/tango/Images/Successtoast.png\"></span>\r\n <!-- <span *ngIf=\"getBack\"><img src=\"./assets/tango/custompopup-Icons/danger-icon.svg\"></span> -->\r\n <div class=\"card-label mt-5\">Do you want to submit your changes without demographic?</div>\r\n <!-- <div *ngIf=\"getBack\" class=\"card-label mt-5\">Unsaved Changes</div> -->\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"w-100 d-flex mt-10\">\r\n <button class=\"btn btn-outline w-50 me-2 fw-bold\" (click)=\"modal.close('isDenied')\">Cancel</button>\r\n <button class=\"btn btn-primary savebtn w-50 ms-2\" (click)=\"modal.close('isConfirmed')\">Ok</button>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".img{width:90px;height:200px}.card-label{font-family:Inter;font-style:normal;font-weight:600!important;font-size:18px!important}.text-col{font-family:Inter;font-style:normal;font-weight:400;font-size:14px;line-height:17px;color:#3f4254}.img-ret{width:90px;height:170px}.butn-flag{border:1px solid #009ef7!important;border-right-style:none!important;border-radius:.5rem 0rem 0rem .5rem!important;padding:calc(.25rem + 1px) calc(1.5rem + 1px)!important;background-color:#fff!important}.butn-flag1{border:1px solid #009ef7!important;border-radius:0rem .5rem .5rem 0rem!important;padding:calc(.25rem + 1px) calc(1.5rem + 1px)!important;background-color:#fff!important}.btn.btn-light-primary:hover:not(.btn-active){background-color:#fff!important}.butn{border:1px solid #009ef7!important;padding:calc(.65rem + 1px) calc(1.5rem + 1px)!important}.h-800px{min-height:120px;max-height:auto}.h-500{min-height:300px}.h-1000px{overflow:auto}.item{position:relative;display:inline-block}.notify-badge{position:absolute;right:0;top:195px;background:var(--Primary-50, #EAF8FF);text-align:center;border-radius:6px;color:#00a3ff;border:2px solid var(--Primary-600, #00A3FF);padding:8px;font-size:20px}.notify-badge{position:absolute;right:4px;top:8px;background:var(--Primary-50, #EAF8FF);text-align:center;border-radius:6px;color:#00a3ff;border:2px solid var(--Primary-600, #00A3FF);padding:0 5px;font-size:15px;width:25px;height:25px}.kid-badge{background:var(--Primary-50, #EAF8FF);text-align:center;border-radius:6px;color:#00a3ff;border:2px solid var(--Primary-600, #00A3FF);padding:2px 4px;font-size:15px;width:25px;height:25px}.nav-menu{position:sticky;position:-webkit-sticky;top:0}.notify-badge1{position:absolute;right:8px;top:4px;background:var(--Primary-50, #EAF8FF);color:#00a3ff;border:2px solid var(--Primary-600, #00A3FF);text-align:center;border-radius:6px;padding:1px 5px 0;font-size:15px;width:25px;height:25px}.notify-badge2{position:absolute;right:4px;top:8px;background:var(--Primary-50, #EAF8FF);color:#00a3ff;border:2px solid var(--Primary-600, #00A3FF);text-align:center;border-radius:6px;padding:0 8px;font-size:20px}.loader1{width:90px;height:90px;margin-left:580px}.svg-icon.svg-icon-2x svg{width:20px!important;height:20px!important}.mapping-height{min-height:auto;max-height:1000px}.mapping-height .h-100{height:96%!important}.btn-outline{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d;color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:24px}.text-timer{color:var(--Gray-900, #101828);font-size:24px;line-height:32px}.bg-timer{border-radius:12px;background:var(--Primary-25, #F6FCFF);padding:4px}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgbAccordionButton, selector: "button[ngbAccordionButton]" }, { kind: "directive", type: i1.NgbAccordionDirective, selector: "[ngbAccordion]", inputs: ["animation", "closeOthers", "destroyOnHide"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i1.NgbAccordionItem, selector: "[ngbAccordionItem]", inputs: ["ngbAccordionItem", "destroyOnHide", "disabled", "collapsed"], outputs: ["show", "shown", "hide", "hidden"], exportAs: ["ngbAccordionItem"] }, { kind: "directive", type: i1.NgbAccordionHeader, selector: "[ngbAccordionHeader]" }, { kind: "directive", type: i1.NgbAccordionBody, selector: "[ngbAccordionBody]" }, { kind: "directive", type: i1.NgbAccordionCollapse, selector: "[ngbAccordionCollapse]", exportAs: ["ngbAccordionCollapse"] }] });
488
+ }
489
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditMappingListComponent, decorators: [{
490
+ type: Component,
491
+ args: [{ selector: 'lib-audit-mapping-list', template: "<div *ngIf=\"!auditLoading\" class=\"card\" >\r\n <div class=\"card-header\" >\r\n <div class=\"card-title\">\r\n <h3 class=\"flex-column\">\r\n <!-- <span class=\"card-label fw-bold\">{{filedetails?.queueName}}<span class=\"mx-3 arrow-code\"> - </span> -->\r\n <span>{{filedetails?.storeId}}</span>\r\n \r\n <span class=\"mx-3 arrow-code\"> - </span>\r\n <span >{{filedetails?.Date}}</span>\r\n <!-- <span class=\"mx-3 arrow-code\"> - </span>\r\n <span >{{filedetails?.type}}</span> -->\r\n <!-- </span> -->\r\n </h3>\r\n \r\n <div class=\"rounded-3 ms-3 d-flex align-items-center bg-timer\">\r\n <span class=\"me-3 text-timer fw-semibold\">{{ formattedTime }}</span>\r\n <span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M9.16667 2.87071C9.16667 2.62023 9.26617 2.38001 9.44329 2.20289C9.62041 2.02577 9.86063 1.92627 10.1111 1.92627H13.8889C14.1394 1.92627 14.3796 2.02577 14.5567 2.20289C14.7338 2.38001 14.8333 2.62023 14.8333 2.87071C14.8333 3.1212 14.7338 3.36142 14.5567 3.53854C14.3796 3.71565 14.1394 3.81516 13.8889 3.81516H12.9444V5.07442L12.9432 5.12605C14.5396 5.30097 16.0528 5.92787 17.3053 6.93308L17.3141 6.92553L18.2585 5.98108C18.374 5.85676 18.5208 5.76588 18.6835 5.71801C18.8463 5.67014 19.019 5.66706 19.1833 5.70908C19.3477 5.75111 19.4977 5.83669 19.6175 5.9568C19.7373 6.07692 19.8225 6.22713 19.8641 6.3916C19.906 6.55578 19.903 6.72823 19.8554 6.89085C19.8077 7.05348 19.7172 7.20029 19.5933 7.3159L18.6489 8.26034L18.6413 8.26915C19.6403 9.51974 20.2658 11.027 20.446 12.6174C20.6261 14.2078 20.3536 15.8167 19.6597 17.2591C18.9658 18.7014 17.8788 19.9185 16.5237 20.7704C15.1686 21.6222 13.6006 22.0741 12 22.0741C10.3994 22.0741 8.83137 21.6222 7.47629 20.7704C6.12122 19.9185 5.03419 18.7014 4.3403 17.2591C3.64641 15.8167 3.37386 14.2078 3.55402 12.6174C3.73418 11.027 4.35973 9.51974 5.35867 8.26915L5.35111 8.26034L4.40667 7.3159C4.23964 7.1369 4.14865 6.90003 4.15287 6.65524C4.1571 6.41045 4.25622 6.17687 4.42934 6.00375C4.60246 5.83063 4.83604 5.73151 5.08083 5.72728C5.32562 5.72306 5.56249 5.81405 5.74149 5.98108L6.68593 6.92553L6.69474 6.93308C7.94681 5.92809 9.45963 5.3012 11.0556 5.12605V3.81516H10.1111C9.86063 3.81516 9.62041 3.71565 9.44329 3.53854C9.26617 3.36142 9.16667 3.1212 9.16667 2.87071ZM12 20.1855C13.7535 20.1854 15.4352 19.4886 16.675 18.2485C17.9148 17.0085 18.6113 15.3267 18.6111 13.5732C18.6109 11.8196 17.9142 10.138 16.6741 8.89813C15.4341 7.65831 13.7523 6.96188 11.9987 6.96204C10.2452 6.96221 8.56354 7.65896 7.32372 8.89902C6.0839 10.1391 5.38747 11.8209 5.38763 13.5744C5.3878 15.328 6.08455 17.0096 7.32461 18.2494C8.56467 19.4893 10.2465 20.1857 12 20.1855ZM12.4899 11.7485L14.1647 10.0737C14.2517 9.98343 14.3559 9.91143 14.4711 9.86188C14.5863 9.81233 14.7102 9.78622 14.8356 9.78507C14.9611 9.78392 15.0854 9.80776 15.2015 9.85519C15.3176 9.90262 15.4231 9.9727 15.5118 10.0613C15.6005 10.15 15.6707 10.2554 15.7182 10.3714C15.7658 10.4875 15.7897 10.6118 15.7887 10.7372C15.7877 10.8626 15.7617 10.9866 15.7122 11.1018C15.6628 11.2171 15.5909 11.3213 15.5007 11.4085L13.8259 13.0846C13.9003 13.3645 13.9095 13.6579 13.8526 13.942C13.7958 14.226 13.6745 14.4933 13.4981 14.7231C13.3217 14.9529 13.0949 15.1391 12.8352 15.2675C12.5754 15.3958 12.2897 15.4628 12 15.4633C11.7327 15.461 11.4688 15.4019 11.226 15.29C10.9832 15.1781 10.767 15.0159 10.5916 14.8141C10.4162 14.6123 10.2857 14.3755 10.2087 14.1195C10.1316 13.8635 10.1099 13.594 10.1448 13.329C10.1798 13.0639 10.2706 12.8093 10.4114 12.582C10.5522 12.3547 10.7396 12.1599 10.9613 12.0104C11.183 11.861 11.4339 11.7604 11.6974 11.7152C11.9609 11.6701 12.231 11.6814 12.4899 11.7485Z\" fill=\"black\"/>\r\n </svg></span>\r\n </div>\r\n <!-- <span *ngIf=\"demographic\" class=\"badge badge-light-success ms-3\">{{demographic}} {{demographic > 1 ? 'Demographics' : 'Demographic'}}</span> -->\r\n </div>\r\n\r\n <div class=\"card-toolbar \">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <a *ngIf=\"!showvalue1\" class=\"btn btn-sm btn-default btn-outline py-2 mx-2\" (click)=\"changesdata()\"><span\r\n class=\"svg-icon svg-icon-primary svg-icon-2x\" ><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M15.8337 10.0001H4.16699M4.16699 10.0001L10.0003 15.8334M4.16699 10.0001L10.0003 4.16675\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span><span class=\"ms-3\">Back to Tagging</span></a>\r\n <button *ngIf=\"!showvalue\" class=\"btn btn-sm btn-primary py-2 mx-2\" (click)=\"submitaudit()\" >Submit\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M4.16699 9.99984H15.8337M15.8337 9.99984L10.0003 4.1665M15.8337 9.99984L10.0003 15.8332\" stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </button>\r\n \r\n <button *ngIf=\"showvalue\" class=\"btn btn-primary btn-sm py-2 mx-2\" [disabled]=\"submitted\" (click)=\"taggingview()\">Retag <span\r\n class=\"svg-icon svg-icon-primary svg-icon-2x\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M4.16666 9.99996H15.8333M15.8333 9.99996L9.99999 4.16663M15.8333 9.99996L9.99999 15.8333\" stroke=\"white\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n \r\n</div>\r\n\r\n\r\n<div class=\"row\"> \r\n <div *ngIf=\"auditLoading\" class=\"card mt-5\">\r\n <div class=\"card-body\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div> \r\n </div>\r\n <!-- <h5 class=\"text-dark-600 fs-3 fw-bold text-center \">Loading Audit file......</h5> -->\r\n </div>\r\n </div>\r\n <div *ngIf=\"!auditLoading\" class=\"col-md-7\">\r\n <div class=\"card mt-5\">\r\n <div class=\"h-1000px\">\r\n <div ngbAccordion *ngFor=\"let item of category\">\r\n <div *ngIf=\"item?.count !==0\" class=\"mt-6\" ngbAccordionItem [collapsed]=\"!item?.count\">\r\n <div ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div>\r\n {{item?.name}} <span class=\"sub-text mt-2 ms-2\">\r\n <span class=\"badge badge-light-default\"><svg class=\"me-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_14508_18583)\">\r\n <path d=\"M2.5 10.5H9.5C10.0523 10.5 10.5 10.0523 10.5 9.5V2.5C10.5 1.94772 10.0523 1.5 9.5 1.5H2.5C1.94772 1.5 1.5 1.94772 1.5 2.5V9.5C1.5 10.0523 1.94772 10.5 2.5 10.5ZM2.5 10.5L8 5L10.5 7.5M5 4.25C5 4.66421 4.66421 5 4.25 5C3.83579 5 3.5 4.66421 3.5 4.25C3.5 3.83579 3.83579 3.5 4.25 3.5C4.66421 3.5 5 3.83579 5 4.25Z\" stroke=\"#667085\" stroke-width=\"1.1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_14508_18583\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>{{item?.count}}</span>\r\n </span>\r\n </div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n \r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody class=\"py-0\">\r\n <ng-template>\r\n <div class=\"h-auto\" (dragover)=\"allowDrop($event)\">\r\n <div class=\"col-md-12 item\" >\r\n <div class=\"item\" *ngFor=\"let obj of item?.value\" >\r\n <img draggable=\"true\" (dragstart)=\"drag($event)\" id=\"{{obj.img_id}}\" name=\"{{item.type}}\"\r\n class=\"my-3 mx-2 img\" [src]=\"obj.img_path\">\r\n <div class=\"text-center m-0 fs-7 fw-bold\">{{obj.img_name}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n \r\n </div>\r\n <div ngbAccordion>\r\n <div class=\"mt-6\" ngbAccordionItem [collapsed]=\"!(!junkcount && !employeecount)\">\r\n <div ngbAccordionHeader>\r\n <button class=\"mainheading\" ngbAccordionButton>\r\n <div>\r\n Unique Customer <span class=\"sub-text mt-2 ms-2\">\r\n <span class=\"badge badge-light-default\"><svg class=\"me-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_15800_3911)\">\r\n <path d=\"M8.5 10.5V9.5C8.5 8.96957 8.28929 8.46086 7.91421 8.08579C7.53914 7.71071 7.03043 7.5 6.5 7.5H2.5C1.96957 7.5 1.46086 7.71071 1.08579 8.08579C0.710714 8.46086 0.5 8.96957 0.5 9.5V10.5M11.5 10.5V9.5C11.4997 9.05686 11.3522 8.62639 11.0807 8.27616C10.8092 7.92593 10.4291 7.67578 10 7.565M8 1.565C8.43021 1.67515 8.81152 1.92535 9.08382 2.27616C9.35612 2.62696 9.50392 3.05841 9.50392 3.5025C9.50392 3.94659 9.35612 4.37804 9.08382 4.72884C8.81152 5.07965 8.43021 5.32985 8 5.44M6.5 3.5C6.5 4.60457 5.60457 5.5 4.5 5.5C3.39543 5.5 2.5 4.60457 2.5 3.5C2.5 2.39543 3.39543 1.5 4.5 1.5C5.60457 1.5 6.5 2.39543 6.5 3.5Z\" stroke=\"#667085\" stroke-width=\"1.1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_15800_3911\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg> {{customercount}}</span>\r\n </span>\r\n </div>\r\n <div class=\"divider\"></div>\r\n </button>\r\n </div>\r\n \r\n <div ngbAccordionCollapse>\r\n <div ngbAccordionBody class=\"py-0\">\r\n <ng-template>\r\n <div>\r\n <div class=\"h-500\" (dragover)=\"allowDrop($event)\">\r\n <ng-container *ngIf=\"resetGroupNumber() === null\"></ng-container>\r\n <ng-container *ngFor=\"let obj of auditmappingdata;let i=index\">\r\n <div *ngIf=\"obj?.count === 1\" class=\"item\">\r\n <div>\r\n <div *ngFor=\"let img of obj?.mappedid\">\r\n <img draggable=\"true\" name=\"{{obj.img_id}}\" (dragstart)=\"drag($event)\" (click)=\"toggleImage(img?.img_name )\"\r\n id=\"{{img.img_id}}\" class=\"my-3 mx-2 img\" [src]=\"img.img_path\">\r\n <div class=\"text-center m-0 fs-7 fw-bold\">{{img.img_name}}</div>\r\n <!-- <span *ngIf=\"obj?.demographic !== 'd'\" class=\"notify-badge2 w-25px h-25px cursor-pointer\" (click)=\"toggleImage(img?.img_name )\">\r\n </span>\r\n <span *ngIf=\"obj?.demographic === 'd'\" class=\"notify-badge\" (click)=\"toggleImage(img?.img_name )\"><i class=\"fa fa-check\" aria-hidden=\"true\"\r\n style=\"font-size:15px;color:#00A3FF\"></i></span> -->\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container class=\"mt-5\" *ngFor=\"let obj of auditmappingdata;let i=index\">\r\n <div *ngIf=\"obj?.count > 1\" class=\"card-label mt-3\">Group {{ getGroupNumber(obj) }} <span class=\"sub-text mt-3 ms-2\">\r\n <span class=\"badge badge-light-default\"><svg class=\"me-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_14508_18583)\">\r\n <path d=\"M2.5 10.5H9.5C10.0523 10.5 10.5 10.0523 10.5 9.5V2.5C10.5 1.94772 10.0523 1.5 9.5 1.5H2.5C1.94772 1.5 1.5 1.94772 1.5 2.5V9.5C1.5 10.0523 1.94772 10.5 2.5 10.5ZM2.5 10.5L8 5L10.5 7.5M5 4.25C5 4.66421 4.66421 5 4.25 5C3.83579 5 3.5 4.66421 3.5 4.25C3.5 3.83579 3.83579 3.5 4.25 3.5C4.66421 3.5 5 3.83579 5 4.25Z\" stroke=\"#667085\" stroke-width=\"1.1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_14508_18583\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>{{obj.count}}</span>\r\n </span> \r\n <!-- <span *ngIf=\"obj?.demographic !== 'd'\" class=\"kid-badge cursor-pointer ms-3 me-3\" style=\"padding:2px 10.5px !important\" (click)=\"toggleImage(obj?.img_name)\">\r\n </span>\r\n <span *ngIf=\"obj?.demographic === 'd'\" class=\"kid-badge cursor-pointer ms-3 me-3\" (click)=\"toggleImage(obj?.img_name)\"><i class=\"fa fa-check\" aria-hidden=\"true\"\r\n style=\"font-size:15px;color:#00A3FF\"></i></span> Mark as demographic -->\r\n </div>\r\n <div *ngIf=\"obj.count > 1\" class=\"item\">\r\n <div>\r\n <div *ngFor=\"let img of obj?.mappedid\" class=\"item\">\r\n <img draggable=\"true\" name=\"{{obj.img_id}}\" (dragstart)=\"drag($event)\"\r\n id=\"{{img.img_id}}\" class=\"my-3 mx-2 img\" [src]=\"img.img_path\">\r\n <div class=\"text-center m-0 fs-7 fw-bold\">{{img.img_name}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!auditLoading\" class=\"col-md-5\">\r\n <div class=\"card mt-5\">\r\n <!-- (change)=\"imagearray()\" -->\r\n <div class=\"card-body h-1000px\" (drop)=\"dropforretag($event)\" (dragover)=\"allowDrop($event)\" >\r\n <div class=\"card-label fw-bold text-dark mb-5\">Images for Retagging</div>\r\n <div class=\"col-md-12 item\" >\r\n <div class=\"item\" *ngFor=\"let item of retagimage\">\r\n <img [src]=\"item.img_path\" class=\"my-2 mx-4 img-ret\">\r\n <div class=\"text-center m-0 fs-7 fw-bold\">{{item.img_name}}</div>\r\n <span class=\"notify-badge1 cursor-pointer\" (click)=\"removeimage(item)\"><i class=\"fa fa-close\" aria-hidden=\"true\"\r\n style=\"font-size:15px;color:#00A3FF\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #confirmDraft let-modal>\r\n <div class=\"card h-auto p-10\">\r\n <div class=\"card-header d-grid p-0 border-0\">\r\n <span><img src=\"./assets/tango/Images/Successtoast.png\"></span>\r\n <!-- <span *ngIf=\"getBack\"><img src=\"./assets/tango/custompopup-Icons/danger-icon.svg\"></span> -->\r\n <div class=\"card-label mt-5\">Do you want to submit your changes without demographic?</div>\r\n <!-- <div *ngIf=\"getBack\" class=\"card-label mt-5\">Unsaved Changes</div> -->\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"w-100 d-flex mt-10\">\r\n <button class=\"btn btn-outline w-50 me-2 fw-bold\" (click)=\"modal.close('isDenied')\">Cancel</button>\r\n <button class=\"btn btn-primary savebtn w-50 ms-2\" (click)=\"modal.close('isConfirmed')\">Ok</button>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".img{width:90px;height:200px}.card-label{font-family:Inter;font-style:normal;font-weight:600!important;font-size:18px!important}.text-col{font-family:Inter;font-style:normal;font-weight:400;font-size:14px;line-height:17px;color:#3f4254}.img-ret{width:90px;height:170px}.butn-flag{border:1px solid #009ef7!important;border-right-style:none!important;border-radius:.5rem 0rem 0rem .5rem!important;padding:calc(.25rem + 1px) calc(1.5rem + 1px)!important;background-color:#fff!important}.butn-flag1{border:1px solid #009ef7!important;border-radius:0rem .5rem .5rem 0rem!important;padding:calc(.25rem + 1px) calc(1.5rem + 1px)!important;background-color:#fff!important}.btn.btn-light-primary:hover:not(.btn-active){background-color:#fff!important}.butn{border:1px solid #009ef7!important;padding:calc(.65rem + 1px) calc(1.5rem + 1px)!important}.h-800px{min-height:120px;max-height:auto}.h-500{min-height:300px}.h-1000px{overflow:auto}.item{position:relative;display:inline-block}.notify-badge{position:absolute;right:0;top:195px;background:var(--Primary-50, #EAF8FF);text-align:center;border-radius:6px;color:#00a3ff;border:2px solid var(--Primary-600, #00A3FF);padding:8px;font-size:20px}.notify-badge{position:absolute;right:4px;top:8px;background:var(--Primary-50, #EAF8FF);text-align:center;border-radius:6px;color:#00a3ff;border:2px solid var(--Primary-600, #00A3FF);padding:0 5px;font-size:15px;width:25px;height:25px}.kid-badge{background:var(--Primary-50, #EAF8FF);text-align:center;border-radius:6px;color:#00a3ff;border:2px solid var(--Primary-600, #00A3FF);padding:2px 4px;font-size:15px;width:25px;height:25px}.nav-menu{position:sticky;position:-webkit-sticky;top:0}.notify-badge1{position:absolute;right:8px;top:4px;background:var(--Primary-50, #EAF8FF);color:#00a3ff;border:2px solid var(--Primary-600, #00A3FF);text-align:center;border-radius:6px;padding:1px 5px 0;font-size:15px;width:25px;height:25px}.notify-badge2{position:absolute;right:4px;top:8px;background:var(--Primary-50, #EAF8FF);color:#00a3ff;border:2px solid var(--Primary-600, #00A3FF);text-align:center;border-radius:6px;padding:0 8px;font-size:20px}.loader1{width:90px;height:90px;margin-left:580px}.svg-icon.svg-icon-2x svg{width:20px!important;height:20px!important}.mapping-height{min-height:auto;max-height:1000px}.mapping-height .h-100{height:96%!important}.btn-outline{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d;color:var(--Gray-700, #344054);font-size:14px;font-weight:500;line-height:24px}.text-timer{color:var(--Gray-900, #101828);font-size:24px;line-height:32px}.bg-timer{border-radius:12px;background:var(--Primary-25, #F6FCFF);padding:4px}\n"] }]
492
+ }], ctorParameters: () => [{ type: i1.NgbModal }, { type: i2.Router }, { type: i3.AuditService }, { type: i4.ToastService }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i5.TimerService }], propDecorators: { confirmDraft: [{
493
+ type: ViewChild,
494
+ args: ['confirmDraft']
495
+ }] } });
496
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtbWFwcGluZy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS10aWNrZXRzL3NyYy9saWIvY29tcG9uZW50cy9hdWRpdC1tYXBwaW5nLWxpc3QvYXVkaXQtbWFwcGluZy1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS10aWNrZXRzL3NyYy9saWIvY29tcG9uZW50cy9hdWRpdC1tYXBwaW5nLWxpc3QvYXVkaXQtbWFwcGluZy1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWtFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUtySCxPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxrR0FBa0c7QUFDbEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRXhELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOzs7Ozs7OztBQU8vRixNQUFNLE9BQU8seUJBQXlCO0lBaUNqQjtJQUFnQztJQUF3QjtJQUFvQztJQUE4QjtJQUNuSTtJQUErQjtJQWhDekMsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNkLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDYixJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ1QsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUNiLFlBQVksR0FBUSxDQUFDLENBQUM7SUFDdEIsU0FBUyxHQUFZLEtBQUssQ0FBQztJQUMzQixZQUFZLEdBQVksS0FBSyxDQUFDO0lBQzlCLFVBQVUsR0FBWSxLQUFLLENBQUM7SUFDNUIsU0FBUyxHQUFRLEVBQUUsQ0FBQTtJQUNuQixVQUFVLEdBQVEsRUFBRSxDQUFBO0lBQ3BCLFdBQVcsR0FBWSxJQUFJLENBQUM7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LENBQUMsV0FBVyxLQUFLLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNoRyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckQsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUE7SUFDakQsQ0FBQzt3R0FyZ0JVLHlCQUF5Qjs0RkFBekIseUJBQXlCLGlNQ2hCdEMseTBvQkEwT0E7OzRGRDFOYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0Usd0JBQXdCO2dQQW1DUCxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBPbkRlc3Ryb3ksIENoYW5nZURldGVjdG9yUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcclxuaW1wb3J0IHsgQXVkaXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXVkaXQuc2VydmljZSc7XHJcbmltcG9ydCAqIGFzIExaU3RyaW5nIGZyb20gJ2x6LXN0cmluZyc7XHJcbi8vIGltcG9ydCB7IEF1ZGl0UmVwb3J0UG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi9hdWRpdC1yZXBvcnQtcG9wdXAvYXVkaXQtcmVwb3J0LXBvcHVwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFRpbWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RpbWVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdWRpdFJlcG9ydFBvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi4vYXVkaXQtcmVwb3J0LXBvcHVwL2F1ZGl0LXJlcG9ydC1wb3B1cC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYXVkaXQtbWFwcGluZy1saXN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXVkaXQtbWFwcGluZy1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vYXVkaXQtbWFwcGluZy1saXN0LmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXVkaXRNYXBwaW5nTGlzdENvbXBvbmVudCB7XHJcblxyXG4gIHRvdGFsZmlsZSA9IDA7XHJcbiAgY3VzdG9tZXIgPSAwO1xyXG4gIGp1bmsgPSAwO1xyXG4gIGVtcGxveWVlID0gMDtcclxuICBjdXJyZW50VmFsdWU6IGFueSA9IDA7XHJcbiAgc2hvd3ZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcmV0Z2dpbmdwYWdlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd3ZhbHVlMTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGp1bmtpbWFnZTogYW55ID0gW11cclxuICByZXRhZ2ltYWdlOiBhbnkgPSBbXVxyXG4gIHN1Ym1pdHZhbHVlOiBib29sZWFuID0gdHJ1ZTtcclxuICBhdWRpdG1hcHBpbmdkYXRhOiBhbnk7XHJcbiAgY3VzdG9tZXJjb3VudDogYW55O1xyXG4gIGF1ZGl0TG9hZGluZyA9IHRydWU7XHJcbiAgc2VsZWN0ZWRUeXBlOiBhbnk7XHJcblxyXG4gIGp1bmtjb3VudDogYW55ID0gMDtcclxuICBlbXBsb3llZWNvdW50OiBhbnkgPSAwO1xyXG4gIGVtcGxveWVpbWFnZTogYW55ID0gW107XHJcbiAgZmlsZWRldGFpbHM6IGFueTtcclxuICBkZW1vZ3JhcGhpYzogYW55O1xyXG4gIHN1Ym1pdHRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGR1bW15bWFwcGluZzogYW55O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIHRpbWVQYXNzZWQ6IG51bWJlciA9IDA7XHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcclxuICBmb3JtYXR0ZWRUaW1lOiBzdHJpbmcgPSAnMDA6MDA6MDAnO1xyXG4gIGNvdW50OiBhbnk7XHJcbiAgY2F0ZWdvcnk6IGFueSA9IFtdXHJcbiAgQFZpZXdDaGlsZCgnY29uZmlybURyYWZ0JykgY29uZmlybURyYWZ0OiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLCBwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIGF1ZGl0U2VydmljZTogQXVkaXRTZXJ2aWNlLCBwcml2YXRlIHRvYXN0cjogVG9hc3RTZXJ2aWNlLCBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHRpbWVyU2VydmljZTogVGltZXJTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkVHlwZSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCd0eXBlJylcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRBdWRpdENvbmZpZygpXHJcbiAgICAvLyB0aGlzLmluaXRpYWxfZGF0YV9sb2FkaW5nKCk7XHJcbiAgICBpZiAodGhpcy5yZXRhZ2ltYWdlLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zaG93dmFsdWUgPSB0cnVlXHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFRpbWVyKCk7XHJcbiAgfVxyXG4gIGdldEF1ZGl0Q29uZmlnKCkge1xyXG5cclxuICAgIGxldCBmaWxlZGF0YSA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndG90YWxmaWxlcycpIHx8ICd7fScpXHJcbiAgICB0aGlzLmF1ZGl0U2VydmljZS5nZXRBdWRpdGNvbmZpZyhmaWxlZGF0YT8uZmlsZWRldGFpbHM/LmNsaWVudElkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXM/LmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLmNhdGVnb3J5ID0gcmVzLmRhdGEuZm9vdGZhbGxEaXJlY3RvcnlDb25maWdzLnRhZ2dpbmdMaW1pdGF0aW9uXHJcbiAgICAgICAgICAvLyB0aGlzLmluaXRpYWxfZGF0YV9sb2FkaW5nKClcclxuICAgICAgICAgIC8vIHRoaXMuc2F2ZURyYWZ0aW1nKCk7XHJcbiAgICAgICAgICB0aGlzLmdldG1hcHBpbmdkYXRhKClcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBzZXRUaW1lcigpIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy50aW1lclNlcnZpY2UuZ2V0VGltZVBhc3NlZCgpLnN1YnNjcmliZSh0aW1lID0+IHtcclxuICAgICAgdGhpcy50aW1lUGFzc2VkID0gdGltZTtcclxuICAgICAgdGhpcy5mb3JtYXR0ZWRUaW1lID0gdGhpcy50aW1lclNlcnZpY2UuZm9ybWF0VGltZSh0aW1lKTtcclxuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMudGltZXJTZXJ2aWNlLnN0YXJ0VGltZXIoKTtcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuaGFuZGxlR2xvYmFsTW91c2VFdmVudCk7XHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlR2xvYmFsTW91c2VFdmVudCk7XHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgdGhpcy5oYW5kbGVHbG9iYWxNb3VzZUV2ZW50KTtcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuaGFuZGxlR2xvYmFsTW91c2VFdmVudCk7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLmhhbmRsZUdsb2JhbE1vdXNlRXZlbnQpO1xyXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhhbmRsZUdsb2JhbE1vdXNlRXZlbnQpO1xyXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIHRoaXMuaGFuZGxlR2xvYmFsTW91c2VFdmVudCk7XHJcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmhhbmRsZUdsb2JhbE1vdXNlRXZlbnQpO1xyXG4gICAgdGhpcy50aW1lclNlcnZpY2UuY2xlYXJUaW1lcigpXHJcbiAgfVxyXG5cclxuICBoYW5kbGVHbG9iYWxNb3VzZUV2ZW50ID0gKCk6IHZvaWQgPT4ge1xyXG4gICAgdGhpcy50aW1lclNlcnZpY2Uuc3RhcnRUaW1lcigpO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbF9kYXRhX2xvYWRpbmcoKSB7XHJcbiAgICBpZiAoJ2F1ZGl0JyBpbiBzZXNzaW9uU3RvcmFnZSkge1xyXG4gICAgICBsZXQgc3RyaW5naWZ5ZGF0YSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2F1ZGl0JykgfHwgJ3t9J1xyXG4gICAgICBjb25zdCBkZWNvbXByZXNzZWREYXRhID0gTFpTdHJpbmcuZGVjb21wcmVzcyhzdHJpbmdpZnlkYXRhKTtcclxuICAgICAgdmFyIGF1ZGl0ZGF0YSA9IEpTT04ucGFyc2UoZGVjb21wcmVzc2VkRGF0YSB8fCAne30nKVxyXG4gICBcclxuICAgICAgaWYgKGF1ZGl0ZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5hdWRpdG1hcHBpbmdkYXRhID0gYXVkaXRkYXRhO1xyXG4gICAgICAgIHRoaXMuY3VzdG9tZXJjb3VudCA9IHRoaXMuYXVkaXRtYXBwaW5nZGF0YS5sZW5ndGhcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmF1ZGl0bWFwcGluZ2RhdGEgPSBbXVxyXG4gICAgICAgIHRoaXMuY3VzdG9tZXJjb3VudCA9IDBcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRlbW9ncmFwaGljID0gdGhpcy5hdWRpdG1hcHBpbmdkYXRhLmZpbHRlcigoZGF0YTogYW55KSA9PiBkYXRhLmRlbW9ncmFwaGljID09PSAnZCcpLmxlbmd0aDtcclxuICAgIH1cclxuICAgIHRoaXMuY2F0ZWdvcnkubWFwKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgdmFyIGNvdW50ID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGRhdGE/LnR5cGUpIHx8ICd7fScpXHJcbiAgICAgIGRhdGEuY291bnQgPSBjb3VudD8ubGVuZ3RoXHJcbiAgICB9KVxyXG4gICAgaWYgKCdyZXRhZycgaW4gc2Vzc2lvblN0b3JhZ2UpIHtcclxuICAgICAgdmFyIHJldGFnZGF0YSA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgncmV0YWcnKSB8fCAne30nKVxyXG4gICAgICBpZiAocmV0YWdkYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnJldGFnaW1hZ2UgPSByZXRhZ2RhdGE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZXRhZ2ltYWdlID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMucmV0YWdpbWFnZS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5zaG93dmFsdWUgPSBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCd0b3RhbGZpbGVzJyBpbiBzZXNzaW9uU3RvcmFnZSkge1xyXG4gICAgICB2YXIgZmlsZXMgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3RvdGFsZmlsZXMnKSB8fCAne30nKVxyXG4gICAgICB0aGlzLnRvdGFsZmlsZSA9IGZpbGVzPy50b3RhbGZpbGVzXHJcbiAgICAgIHRoaXMuZmlsZWRldGFpbHMgPSBmaWxlcz8uZmlsZWRldGFpbHNcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBnZXRtYXBwaW5nZGF0YSgpIHtcclxuICAgIHZhciB0b3RhbGZpbGU6IGFueSA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndG90YWxmaWxlcycpIHx8ICd7fScpO1xyXG4gICAgdGhpcy5maWxlZGV0YWlscyA9IHRvdGFsZmlsZT8uZmlsZWRldGFpbHNcclxuXHJcbiAgICB2YXIgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICBzdG9yZUlkOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5zdG9yZUlkLFxyXG4gICAgICBmaWxlRGF0ZTogdG90YWxmaWxlPy5maWxlZGV0YWlscz8uRGF0ZSxcclxuICAgICAgYXVkaXRJZDogdG90YWxmaWxlPy5hdWRpdElkLFxyXG4gICAgICBjb3VudDogdG90YWxmaWxlPy50b3RhbGZpbGVzXHJcbiAgICB9XHJcbiAgICB0aGlzLmF1ZGl0U2VydmljZS5nZXRBdWRpdG1hcHBpbmdsaXN0KHBheWxvYWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcz8uY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuYXVkaXRMb2FkaW5nID0gZmFsc2U7XHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yeS5tYXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZmlsdGVyRGF0YSA9IHJlcz8uZGF0YT8ucmVzdWx0Py5kcmFmdGVkRGF0YT8uZmlsdGVyKCh4OiBhbnkpID0+IHgudHlwZSA9PT0gZGF0YS50eXBlKVxyXG4gICAgICAgICAgICBkYXRhLnZhbHVlID0gZmlsdGVyRGF0YVswXT8udmFsdWUgJiYgZmlsdGVyRGF0YVswXT8udmFsdWUubGVuZ3RoID4gMCA/IGZpbHRlckRhdGFbMF0/LnZhbHVlIDogW11cclxuICAgICAgICAgICAgZGF0YS5jb3VudCA9IGRhdGE/LnZhbHVlPy5sZW5ndGhcclxuICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShkYXRhPy50eXBlLCBKU09OLnN0cmluZ2lmeShkYXRhPy52YWx1ZSAmJiBkYXRhPy52YWx1ZS5sZW5ndGggPiAwID8gZGF0YT8udmFsdWUgOiBbXSkpXHJcblxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGxldCBjdXN0b21lckRhdGEgPSByZXM/LmRhdGE/LnJlc3VsdD8uZHJhZnRlZERhdGE/LmZpbHRlcigoeDogYW55KSA9PiB4LnR5cGUgPT09ICdjdXN0b21lcicpXHJcblxyXG4gICAgICAgICAgdGhpcy5hdWRpdG1hcHBpbmdkYXRhID0gY3VzdG9tZXJEYXRhWzBdPy52YWx1ZVxyXG4gICAgICAgICAgY29uc3QganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGN1c3RvbWVyRGF0YVswXT8udmFsdWUpO1xyXG4gICAgICAgICAgY29uc3QgY29tcHJlc3NlZERhdGEgPSBMWlN0cmluZy5jb21wcmVzcyhqc29uU3RyaW5nKTtcclxuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2F1ZGl0JywgY29tcHJlc3NlZERhdGEpXHJcblxyXG5cclxuXHJcbiAgICAgICAgICB2YXIgcmV0YWdpYW1nZSA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgncmV0YWcnKSB8fCAnW10nKVxyXG4gICAgICAgICAgaWYgKHJldGFnaWFtZ2UubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgc3RyaW5naWZ5ZGF0YSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2F1ZGl0JykgfHwgJ3t9J1xyXG4gICAgICAgICAgICBjb25zdCBkZWNvbXByZXNzZWREYXRhID0gTFpTdHJpbmcuZGVjb21wcmVzcyhzdHJpbmdpZnlkYXRhKTtcclxuICAgICAgICAgICAgdmFyIGN1c3RvbWVyID0gSlNPTi5wYXJzZShkZWNvbXByZXNzZWREYXRhIHx8ICd7fScpXHJcbiAgICAgICAgICAgIGN1c3RvbWVyID0gWy4uLmN1c3RvbWVyLCAuLi5yZXRhZ2lhbWdlXVxyXG4gICAgICAgICAgICBjb25zdCBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoY3VzdG9tZXIpO1xyXG4gICAgICAgICAgICBjb25zdCBjb21wcmVzc2VkRGF0YSA9IExaU3RyaW5nLmNvbXByZXNzKGpzb25TdHJpbmcpO1xyXG4gICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdhdWRpdCcsIGNvbXByZXNzZWREYXRhKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgncmV0YWcnKVxyXG4gICAgICAgICAgdGhpcy5yZXRhZ2ltYWdlID0gW11cclxuICAgICAgICAgIHRoaXMuaW5pdGlhbF9kYXRhX2xvYWRpbmcoKVxyXG4gICAgICAgICAgaWYgKHRoaXMucmV0YWdpbWFnZS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNob3d2YWx1ZSA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcblxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcmVkaXJlYWN0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGJhY2tUb1RhZ2dpbmcoKSB7XHJcbiAgICB0aGlzLnJlZGlyZWFjdCA9IHRydWU7XHJcbiAgICB0aGlzLnNhdmVEcmFmdGltZygpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlc2RhdGEoKSB7XHJcbiAgICB2YXIgdXNlciA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXItaW5mbycpIHx8ICd7fScpXHJcbiAgICB2YXIgdG90YWxmaWxlOiBhbnkgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3RvdGFsZmlsZXMnKSB8fCAne30nKTtcclxuICAgIHZhciBwYXlsb2FkOiBhbnkgPSB7XHJcbiAgICAgIHN0b3JlSWQ6IHRvdGFsZmlsZT8uZmlsZWRldGFpbHM/LnN0b3JlSWQsXHJcbiAgICAgIGZpbGVEYXRlOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5EYXRlLFxyXG4gICAgICBhdWRpdElkOiB0b3RhbGZpbGU/LmF1ZGl0SWQsXHJcbiAgICAgIGNvdW50OiB0b3RhbGZpbGU/LnRvdGFsZmlsZXNcclxuICAgIH1cclxuICAgIHRoaXMuYXVkaXRTZXJ2aWNlLmdldEF1ZGl0bWFwcGluZ2xpc3QocGF5bG9hZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzPy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5hdWRpdExvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ3JldGFnJylcclxuICAgICAgICAgIHRoaXMucmV0YWdpbWFnZSA9IFtdXHJcbiAgICAgICAgICB0aGlzLmNhdGVnb3J5Lm1hcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBmaWx0ZXJEYXRhID0gcmVzPy5kYXRhPy5yZXN1bHQ/LmRyYWZ0ZWREYXRhPy5maWx0ZXIoKHg6IGFueSkgPT4geC50eXBlID09PSBkYXRhLnR5cGUpXHJcbiAgICAgICAgICAgIGRhdGEudmFsdWUgPSBmaWx0ZXJEYXRhWzBdPy52YWx1ZSAmJiBmaWx0ZXJEYXRhWzBdPy52YWx1ZS5sZW5ndGggPiAwID8gZmlsdGVyRGF0YVswXT8udmFsdWUgOiBbXVxyXG4gICAgICAgICAgICBkYXRhLmNvdW50ID0gZGF0YT8udmFsdWU/Lmxlbmd0aFxyXG4gICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGRhdGE/LnR5cGUsIEpTT04uc3RyaW5naWZ5KGRhdGE/LnZhbHVlICYmIGRhdGE/LnZhbHVlLmxlbmd0aCA+IDAgPyBkYXRhPy52YWx1ZSA6IFtdKSlcclxuXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgbGV0IGN1c3RvbWVyRGF0YSA9IHJlcz8uZGF0YT8ucmVzdWx0Py5kcmFmdGVkRGF0YT8uZmlsdGVyKCh4OiBhbnkpID0+IHgudHlwZSA9PT0gJ2N1c3RvbWVyJylcclxuXHJcbiAgICAgICAgICB0aGlzLmF1ZGl0bWFwcGluZ2RhdGEgPSBjdXN0b21lckRhdGFbMF0/LnZhbHVlXHJcbiAgICAgICAgICBjb25zdCBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoY3VzdG9tZXJEYXRhWzBdPy52YWx1ZSk7XHJcbiAgICAgICAgICBjb25zdCBjb21wcmVzc2VkRGF0YSA9IExaU3RyaW5nLmNvbXByZXNzKGpzb25TdHJpbmcpO1xyXG4gICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnYXVkaXQnLCBjb21wcmVzc2VkRGF0YSlcclxuICAgICAgICAgIGlmICh0aGlzLnJldGFnaW1hZ2UubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93dmFsdWUgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9tYW5hZ2UvdGlja2V0cy9hdWRpdFwiXSlcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuXHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ2F1ZGl0bWFwcGluZ2RhdGEnXSkge1xyXG4gICAgICB0aGlzLmR1bW15bWFwcGluZyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1snYXVkaXRtYXBwaW5nZGF0YSddLmN1cnJlbnRWYWx1ZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWxsb3dEcm9wKGV2OiBhbnkpIHtcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICBkcmFnKGV2OiBhbnkpIHtcclxuICAgIGV2LmRhdGFUcmFuc2Zlci5zZXREYXRhKFwidGV4dC9wbGFpblwiLCBldi50YXJnZXQuaWQpO1xyXG4gIH1cclxuXHJcbiAgZHJvcGZvcnJldGFnKGV2OiBhbnkpIHtcclxuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBjb25zdCBkcmFnZ2VkSW1hZ2VJZCA9IGV2LmRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0L3BsYWluJyk7XHJcbiAgICBjb25zdCBkcmFnZ2VkSW1hZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkcmFnZ2VkSW1hZ2VJZCk7XHJcbiAgICB0aGlzLnNob3d2YWx1ZSA9IHRydWU7XHJcbiAgICBjb25zdCBodG1sdGFnID0gZXYuZGF0YVRyYW5zZmVyLmdldERhdGEoJ3RleHQvaHRtbCcpO1xyXG4gICAgdmFyIE5hbWUgPSBnZXRUYWdOYW1lRnJvbUhUTUwoaHRtbHRhZyk7XHJcbiAgICBjb25zb2xlLmxvZyhcIvCfmoAgfiBBdWRpdE1hcHBpbmdMaXN0Q29tcG9uZW50IH4gZHJvcGZvcnJldGFnIH4gTmFtZTpcIiwgTmFtZSxkcmFnZ2VkSW1hZ2VJZClcclxuICAgIGlmIChOYW1lICE9IG51bGwgJiYgdGhpcy5jYXRlZ29yeS5maWx0ZXIoKGRhdGE6IGFueSkgPT4gZGF0YT8udHlwZSA9PT0gTmFtZSk/Lmxlbmd0aCA+IDApIHtcclxuXHJcbiAgICAgIGxldCBpbWFnZURhdGEgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oTmFtZSkgfHwgJ3t9JylcclxuICAgICAgdmFyIHNwbGljZWR2YWx1ZSA9IGltYWdlRGF0YS5zcGxpY2UoaW1hZ2VEYXRhLmZpbmRJbmRleCgoeyBpbWdfaWQgfTogeyBpbWdfaWQ6IHN0cmluZyB9KSA9PiBpbWdfaWQgPT0gZHJhZ2dlZEltYWdlSWQpLCAxKTtcclxuXHJcbiAgICAgIHRoaXMuY2F0ZWdvcnkubWFwKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZGF0YT8udHlwZSA9PSBOYW1lKSB7XHJcbiAgICAgICAgICBkYXRhLnZhbHVlID0gaW1hZ2VEYXRhXHJcbiAgICAgICAgICBkYXRhLmNvdW50ID0gaW1hZ2VEYXRhLmxlbmd0aFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pXHJcbiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oTmFtZSwgSlNPTi5zdHJpbmdpZnkoaW1hZ2VEYXRhKSlcclxuICAgICAgdmFyIG9sZHJldGFnID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdyZXRhZycpIHx8ICd7fScpXHJcbiAgICAgIHZhciBuZXd0YWc6IGFueSA9IFtdXHJcbiAgICAgIGlmIChOdW1iZXIob2xkcmV0YWcubGVuZ3RoKSA+IDApIHtcclxuICAgICAgICBuZXd0YWcgPSBbLi4ub2xkcmV0YWcsIC4uLnNwbGljZWR2YWx1ZV1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXd0YWcgPSBzcGxpY2VkdmFsdWVcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJldGFnaW1hZ2UgPSBuZXd0YWdcclxuICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgncmV0YWcnLCBKU09OLnN0cmluZ2lmeSh0aGlzLnJldGFnaW1hZ2UpKVxyXG5cclxuXHJcbiAgICAgIGlmKE5hbWU9PT0nZHVwbGljYXRlJyl7XHJcbiAgICAgICAgdGhpcy5hdWRpdG1hcHBpbmdkYXRhLm1hcCgobWFpbkRhdGE6YW55KT0+e1xyXG4gICAgICAgICAgaWYobWFpbkRhdGEuY291bnQ+MSl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi8J+agCB+IEF1ZGl0TWFwcGluZ0xpc3RDb21wb25lbnQgfiBkcm9wZm9ycmV0YWcgfiBtYWluRGF0YTpcIiwgbWFpbkRhdGEpXHJcbiAgICAgICAgICAgIG1haW5EYXRhLm1hcHBlZGlkID0gbWFpbkRhdGEubWFwcGVkaWQuZmlsdGVyKChkYXRhOmFueSk9PmRhdGEuaW1nX2lkIT1kcmFnZ2VkSW1hZ2VJZClcclxuICAgICAgICAgICAgbWFpbkRhdGEuY291bnQgPSBtYWluRGF0YS5tYXBwZWRpZC5sZW5ndGhcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcblxyXG5cclxuXHJcbiAgICB9IGVsc2UgaWYgKE5hbWUgIT0gbnVsbCkge1xyXG4gICAgICB2YXIgaW5zZXJ0SW5kZXggPSB0aGlzLmF1ZGl0bWFwcGluZ2RhdGEuZmluZEluZGV4KCh7IGltZ19pZCB9OiB7IGltZ19pZDogc3RyaW5nIH0pID0+IGltZ19pZCA9PSBOYW1lKVxyXG4gICAgICB2YXIgbWFpbmFycmF5ID0gdGhpcy5hdWRpdG1hcHBpbmdkYXRhLnNwbGljZSh0aGlzLmF1ZGl0bWFwcGluZ2RhdGEuZmluZEluZGV4KCh7IGltZ19pZCB9OiB7IGltZ19pZDogc3RyaW5nIH0pID0+IGltZ19pZCA9PSBOYW1lKSwgMSk7XHJcbiAgICAgIHRoaXMuY3VzdG9tZXJjb3VudCA9IHRoaXMuYXVkaXRtYXBwaW5nZGF0YT8ubGVuZ3RoO1xyXG4gICAgICBpZiAobWFpbmFycmF5Py5sZW5ndGggPiAwICYmIG1haW5hcnJheVswXS5tYXBwZWRpZC5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgdmFyIGNoZWNraW5kZXggPSBtYWluYXJyYXlbMF0ubWFwcGVkaWQuZmluZEluZGV4KCh7IGltZ19pZCB9OiB7IGltZ19pZDogc3RyaW5nIH0pID0+IGltZ19pZCA9PSBkcmFnZ2VkSW1hZ2VJZClcclxuXHJcbiAgICAgICAgdmFyIHN1YmFycmF5ID0gbWFpbmFycmF5WzBdLm1hcHBlZGlkLnNwbGljZShtYWluYXJyYXlbMF0ubWFwcGVkaWQuZmluZEluZGV4KCh7IGltZ19pZCB9OiB7IGltZ19pZDogc3RyaW5nIH0pID0+IGltZ19pZCA9PSBkcmFnZ2VkSW1hZ2VJZCksIDEpO1xyXG4gICAgICAgIGlmIChjaGVja2luZGV4ID09IDApIHtcclxuICAgICAgICAgIG1haW5hcnJheVswXS5pbWdfbmFtZSA9IG1haW5hcnJheVswXS5tYXBwZWRpZFswXS5pbWdfbmFtZVxyXG4gICAgICAgICAgbWFpbmFycmF5WzBdLmltZ19pZCA9IG1haW5hcnJheVswXS5tYXBwZWRpZFswXS5pbWdfaWRcclxuICAgICAgICAgIG1haW5hcnJheVswXS5pbWdfcGF0aCA9IG1haW5hcnJheVswXS5tYXBwZWRpZFswXS5pbWdfcGF0aFxyXG4gICAgICAgIH1cclxuICAgICAgICBtYWluYXJyYXlbMF0uY291bnQgPSBtYWluYXJyYXlbMF0uY291bnQgLSAxXHJcbiAgICAgICAgc3ViYXJyYXlbMF0ubWFwcGVkaWQgPSBbXVxyXG4gICAgICAgIGxldCBvYmogPSB7XHJcbiAgICAgICAgICBpbWdfbmFtZTogc3ViYXJyYXlbMF0uaW1nX25hbWUsXHJcbiAgICAgICAgICBpbWdfaWQ6IHN1YmFycmF5WzBdLmltZ19pZCxcclxuICAgICAgICAgIGltZ19wYXRoOiBzdWJhcnJheVswXS5pbWdfcGF0aFxyXG4gICAgICAgIH1cclxuICAgICAgICBzdWJhcnJheVswXS5tYXBwZWRpZC5wdXNoKG9iailcclxuICAgICAgICBzdWJhcnJheVswXS5zZWxlY3RlZCA9IGZhbHNlXHJcbiAgICAgICAgc3ViYXJyYXlbMF0uZHJvcHBlZCA9IGZhbHNlXHJcbiAgICAgICAgc3ViYXJyYXlbMF0uZGVtb2dyYXBoaWMgPSAnJ1xyXG4gICAgICAgIHN1YmFycmF5WzBdLmNvdW50ID0gMTtcclxuICAgICAgICB2YXIgb2xkcmV0YWcgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3JldGFnJykgfHwgJ3t9JylcclxuICAgICAgICB2YXIgbmV3dGFnOiBhbnkgPSBbXVxyXG4gICAgICAgIGlmIChOdW1iZXIob2xkcmV0YWcubGVuZ3RoKSA+IDApIHtcclxuICAgICAgICAgIG5ld3RhZyA9IFsuLi5vbGRyZXRhZywgLi4uc3ViYXJyYXldXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG5ld3RhZyA9IHN1YmFycmF5XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmV0YWdpbWFnZSA9IG5ld3RhZ1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3JldGFnJywgSlNPTi5zdHJpbmdpZnkodGhpcy5yZXRhZ2ltYWdlKSlcclxuICAgICAgICB0aGlzLmF1ZGl0bWFwcGluZ2RhdGEuc3BsaWNlKGluc2VydEluZGV4LCAwLCAuLi5tYWluYXJyYXkpO1xyXG4gICAgICAgIGNvbnN0IGpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmF1ZGl0bWFwcGluZ2RhdGEpO1xyXG4gICAgICAgIGNvbnN0IGNvbXByZXNzZWREYXRhID0gTFpTdHJpbmcuY29tcHJlc3MoanNvblN0cmluZyk7XHJcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnYXVkaXQnLCBjb21wcmVzc2VkRGF0YSlcclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgdmFyIG9sZHJldGFnID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdyZXRhZycpIHx8ICd7fScpXHJcbiAgICAgICAgdmFyIG5ld3RhZzogYW55ID0gW11cclxuICAgICAgICBpZiAoTnVtYmVyKG9sZHJldGFnLmxlbmd0aCkgPiAwKSB7XHJcbiAgICAgICAgICBuZXd0YWcgPSBbLi4ub2xkcmV0YWcsIC4uLm1haW5hcnJheV1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbmV3dGFnID0gbWFpbmFycmF5XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmV0YWdpbWFnZSA9IG5ld3RhZ1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3JldGFnJywgSlNPTi5zdHJpbmdpZnkodGhpcy5yZXRhZ2ltYWdlKSlcclxuICAgICAgICBjb25zdCBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkodGhpcy5hdWRpdG1hcHBpbmdkYXRhKTtcclxuICAgICAgICBjb25zdCBjb21wcmVzc2VkRGF0YSA9IExaU3RyaW5nLmNvbXByZXNzKGpzb25TdHJpbmcpO1xyXG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2F1ZGl0JywgY29tcHJlc3NlZERhdGEpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBnZXRUYWdOYW1lRnJvbUhUTUwoaHRtbDogYW55KSB7XHJcbiAgICAgIHZhciB0ZW1wRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICB0ZW1wRWxlbWVudC5pbm5lckhUTUwgPSBodG1sO1xyXG4gICAgICB2YXIgZmlyc3RDaGlsZDogYW55ID0gdGVtcEVsZW1lbnQuZmlyc3RDaGlsZDtcclxuICAgICAgaWYgKGZpcnN0Q2hpbGQuaGFzQXR0cmlidXRlKCduYW1lJykpIHtcclxuICAgICAgICB2YXIgbmFtZVByb3BlcnR5VmFsdWUgPSBmaXJzdENoaWxkLmdldEF0dHJpYnV0ZSgnbmFtZScpO1xyXG4gICAgICAgIHJldHVybiBuYW1lUHJvcGVydHlWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3JldGFnJywgSlNPTi5zdHJpbmdpZnkodGhpcy5yZXRhZ2ltYWdlKSlcclxuXHJcbiAgICBpZiAoJ3JldGFnJyBpbiBzZXNzaW9uU3RvcmFnZSkge1xyXG4gICAgICB2YXIgcmV0YWdkYXRhID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdyZXRhZycpIHx8ICd7fScpXHJcbiAgICAgIHRoaXMucmV0YWdpbWFnZSA9IHJldGFnZGF0YTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVpbWFnZShkYXRhOiBhbnkpIHtcclxuICAgIHZhciByZW1vdmVkX2ltZyA9IHRoaXMucmV0YWdpbWFnZS5maWx0ZXIoKGV2OiBhbnkpID0+IGV2LmltZ19pZCA9PSBkYXRhLmltZ19pZClcclxuICAgIHRoaXMucmV0YWdpbWFnZS5zcGxpY2UodGhpcy5yZXRhZ2ltYWdlLmZpbmRJbmRleCgoeyBpbWdfaWQgfTogeyBpbWdfaWQ6IHN0cmluZyB9KSA9PiBpbWdfaWQgPT0gZGF0YS5pbWdfaWQpLCAxKTtcclxuICAgIHRoaXMuYXVkaXRtYXBwaW5nZGF0YSA9IFsuLi50aGlzLmF1ZGl0bWFwcGluZ2RhdGEsIC4uLnJlbW92ZWRfaW1nXVxyXG4gICAgdGhpcy5jdXN0b21lcmNvdW50ID0gdGhpcy5hdWRpdG1hcHBpbmdkYXRhPy5sZW5ndGg7XHJcbiAgICBpZiAoIXRoaXMucmV0YWdpbWFnZS5sZW5ndGgpIHsgdGhpcy5zaG93dmFsdWUgPSBmYWxzZSB9XHJcbiAgICBsZXQgc3RyaW5naWZ5ZGF0YSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2F1ZGl0JykgfHwgJ3t9J1xyXG4gICAgY29uc3QgZGVjb21wcmVzc2VkRGF0YSA9IExaU3RyaW5nLmRlY29tcHJlc3Moc3RyaW5naWZ5ZGF0YSk7XHJcbiAgICBjb25zdCBjb21wbGV0ZURhdGUgPSBKU09OLnBhcnNlKGRlY29tcHJlc3NlZERhdGEgfHwgJ3t9JylcclxuICAgIGNvbnN0IGpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmF1ZGl0bWFwcGluZ2RhdGEpO1xyXG4gICAgY29uc3QgY29tcHJlc3NlZERhdGEgPSBMWlN0cmluZy5jb21wcmVzcyhqc29uU3RyaW5nKTtcclxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2F1ZGl0JywgY29tcHJlc3NlZERhdGEpXHJcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdyZXRhZycsIEpTT04uc3RyaW5naWZ5KHRoaXMucmV0YWdpbWFnZSkpXHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHNhdmVEcmFmdGltZygpIHtcclxuICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcclxuXHJcbiAgICB2YXIgdG90YWxmaWxlOiBhbnkgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3RvdGFsZmlsZXMnKSB8fCAne30nKTtcclxuICAgIHRoaXMudGltZVBhc3NlZCA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndGltZVNwZW50JykgfHwgJ3t9JylcclxuICAgIGlmICgncmV0YWcnIGluIHNlc3Npb25TdG9yYWdlKSB7XHJcbiAgICAgIHZhciByZXRhZ2RhdGEgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3JldGFnJykgfHwgJ3t9JylcclxuICAgICAgdGhpcy5yZXRhZ2ltYWdlID0gcmV0YWdkYXRhO1xyXG4gICAgfVxyXG4gICAgbGV0IHN0b3JlZERhdGEgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICB0eXBlOiBcImN1c3RvbWVyXCIsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuYXVkaXRtYXBwaW5nZGF0YSA/IHRoaXMuYXVkaXRtYXBwaW5nZGF0YSA6IFtdLFxyXG4gICAgICB9XHJcbiAgICBdXHJcblxyXG4gICAgdGhpcy5jYXRlZ29yeS5tYXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICBsZXQgc2Vzc2lvbnZhbHVlID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGRhdGEudHlwZSkgfHwgJ3t9Jyk7XHJcbiAgICAgIHN0b3JlZERhdGEucHVzaCh7XHJcbiAgICAgICAgdHlwZTogZGF0YS50eXBlLFxyXG4gICAgICAgIHZhbHVlOiBzZXNzaW9udmFsdWUgJiYgc2Vzc2lvbnZhbHVlLmxlbmd0aCA+IDAgPyBzZXNzaW9udmFsdWUgOiBbXVxyXG4gICAgICB9KVxyXG4gICAgfSlcclxuICAgIHZhciBpbnNlcm9iajogYW55ID0ge1xyXG4gICAgICBzdG9yZUlkOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzPy5zdG9yZUlkLFxyXG4gICAgICBmaWxlRGF0ZTogdG90YWxmaWxlPy5maWxlZGV0YWlscz8uRGF0ZSxcclxuICAgICAgYXVkaXRJZDogdG90YWxmaWxlPy5hdWRpdElkID8gdG90YWxmaWxlPy5hdWRpdElkIDogdG90YWxmaWxlPy5maWxlZGV0YWlscz8uYXVkaXRJZCxcclxuICAgICAgdG90YWxDb3VudDogdG90YWxmaWxlPy50b3RhbGZpbGVzID8gdG90YWxmaWxlLnRvdGFsZmlsZXMgOiAwLFxyXG4gICAgICByZXRhZ0NvdW50OiB0aGlzLnJldGFnaW1hZ2UubGVuZ3RoLFxyXG4gICAgICB0aW1lU3BlbnQ6IHRoaXMudGltZVBhc3NlZCxcclxuICAgICAgcmV0YWdJbWFnZTogdGhpcy5yZXRhZ2ltYWdlID8gdGhpcy5yZXRhZ2ltYWdlIDogW11cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmF1ZGl0U2VydmljZS5zYXZlRHJhZnQoaW5zZXJvYmopLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMucmVkaXJlYWN0KSB7XHJcbiAgICAgICAgdGhpcy5zdWJtaXR0ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdldG1hcHBpbmdkYXRhKClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNoYW5nZXNkYXRhKClcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuICB0YWdnaW5ndmlldygpIHtcclxuICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcclxuICAgIHZhciB0b3RhbGZpbGU6IGFueSA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgndG90YWxmaWxlcycpIHx8ICd7fScpO1xyXG4gICAgdGhpcy5zaG93dmFsdWUgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd3ZhbHVlMSA9IHRydWU7XHJcbiAgICB0aGlzLnJldGdnaW5ncGFnZSA9IHRydWU7XHJcbiAgICBsZXQgc3RyaW5naWZ5ZGF0YSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2F1ZGl0JykgfHwgJ3t9J1xyXG4gICAgY29uc3QgZGVjb21wcmVzc2VkRGF0YSA9IExaU3RyaW5nLmRlY29tcHJlc3Moc3RyaW5naWZ5ZGF0YSk7XHJcbiAgICB2YXIgY3VzdG9tZXIgPSBKU09OLnBhcnNlKGRlY29tcHJlc3NlZERhdGEgfHwgJ3t9JylcclxuICAgIGxldCBzdG9yZWREYXRhID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZTogXCJjdXN0b21lclwiLFxyXG4gICAgICAgIHZhbHVlOiBjdXN0b21lciA/IGN1c3RvbWVyIDogW10sXHJcbiAgICAgIH1cclxuICAgIF1cclxuXHJcbiAgICB0aGlzLmNhdGVnb3J5Lm1hcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgIGxldCBzZXNzaW9udmFsdWUgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oZGF0YS50eXBlKSB8fCAne30nKTtcclxuICAgICAgc3RvcmVkRGF0YS5wdXNoKHtcclxuICAgICAgICB0eXBlOiBkYXRhLnR5cGUsXHJcbiAgICAgICAgdmFsdWU6IHNlc3Npb252YWx1ZSAmJiBzZXNzaW9udmFsdWUubGVuZ3RoID4gMCA/IHNlc3Npb252YWx1ZSA6IFtdXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gICAgdmFyIGluc2Vyb2JqOiBhbnkgPSB7XHJcbiAgICAgIHN0b3JlSWQ6IHRvdGFsZmlsZT8uZmlsZWRldGFpbHM/LnN0b3JlX2lkLFxyXG4gICAgICBmaWxlRGF0ZTogdG90YWxmaWxlPy5maWxlZGV0YWlscz8uZmlsZV9kYXRlLFxyXG4gICAgICBhdWRpdElkOiB0b3RhbGZpbGU/LmF1ZGl0SWQgPyB0b3RhbGZpbGU/LmF1ZGl0SWQgOiB0b3RhbGZpbGU/LmZpbGVkZXRhaWxzLmF1ZGl0SWQsXHJcbiAgICAgIHRvdGFsQ291bnQ6IHRvdGFsZmlsZT8udG90YWxmaWxlcyA/IHRvdGFsZmlsZS50b3RhbGZpbGVzIDogMCxcclxuICAgICAgcmV0YWdDb3VudDogdGhpcy5yZXRhZ2ltYWdlLmxlbmd0aCxcclxuICAgICAgdGltZVNwZW50OiB0aGlzLnRpbWVQYXNzZWQsXHJcbiAgICAgIHJldGFnSW1hZ2U6IHRoaXMucmV0YWdpbWFnZSA/IHRoaXMucmV0YWdpbWFnZSA6IFtdXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hdWRpdFNlcnZpY2Uuc2F2ZURyYWZ0KGluc2Vyb2JqKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHsgdGhpcy5zdWJtaXR0ZWQgPSBmYWxzZTsgfSlcclxuICAgIGlmICgncmV0YWcnIGluIHNlc3Npb25TdG9yYWdlKSB7XHJcbiAgICAgIHZhciByZXRhZ2RhdGEgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3JldGFnJykgfHwgJ3t9JylcclxuICAgICAgdGhpcy5yZXRhZ2ltYWdlID0gcmV0YWdkYXRhO1xyXG5cclxuICAgIH1cclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9tYW5hZ2UvdGlja2V0cy9yZXRhZy1tYXBwaW5nXCJdKVxyXG4gIH1cclxuXHJcbiAgc3VibWl0YXVkaXQoKSB7XHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQXVkaXRSZXBvcnRQb3B1cENvbXBvbmVudCwge1xyXG4gICAgICBzaXplOiAnbGcnLFxyXG4gICAgICBjZW50ZXJlZDogdHJ1ZVxyXG4gICAgfSlcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnNlbGVjdGVkVHlwZSA9IHRoaXMuc2VsZWN0ZWRUeXBlO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBzZXRWYWx1ZShpOiBhbnkpIHtcclxuICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICBpZiAoaSA+IGluZGV4KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRoaXMuY3VycmVudFZhbHVlICsgMTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIGN1cnJlbnRHcm91cE51bWJlcjogYW55ID0gMDtcclxuXHJcbiAgZ2V0R3JvdXBOdW1iZXIob2JqOiBhbnkpOiBudW1iZXIgfCBudWxsIHtcclxuICAgIGlmIChvYmouY291bnQgPiAxKSB7XHJcbiAgICAgIHJldHVybiArK3RoaXMuY3VycmVudEdyb3VwTnVtYmVyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICByZXNldEdyb3VwTnVtYmVyKCkge1xyXG4gICAgdGhpcy5jdXJyZW50R3JvdXBOdW1iZXIgPSAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmlsdGVyZWREYXRhKGNvdW50OiBudW1iZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmF1ZGl0bWFwcGluZ2RhdGEuZmlsdGVyKChvYmo6IGFueSkgPT4gb2JqLmNvdW50ID09PSBjb3VudCk7XHJcblxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlSW1hZ2UoaW1nX25hbWU6IGFueSkge1xyXG4gICAgdGhpcy5hdWRpdG1hcHBpbmdkYXRhLm1hcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChkYXRhLmltZ19uYW1lID09IGltZ19uYW1lKSB7XHJcbiAgICAgICAgaWYgKGRhdGEubWFwcGVkaWQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgZGF0YS5kZW1vZ3JhcGhpYyAhPT0gJ2QnID8gZGF0YS5kZW1vZ3JhcGhpYyA9ICdkJyA6IGRhdGEuZGVtb2dyYXBoaWMgPSAnJ1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkYXRhLmRyb3BwZWQgPSAhZGF0YS5kcm9wcGVkXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgdGhpcy5kZW1vZ3JhcGhpYyA9IHRoaXMuYXVkaXRtYXBwaW5nZGF0YS5maWx0ZXIoKGRhdGE6IGFueSkgPT4gZGF0YS5kZW1vZ3JhcGhpYyA9PT0gJ2QnKS5sZW5ndGg7XHJcbiAgICBjb25zdCBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkodGhpcy5hdWRpdG1hcHBpbmdkYXRhKTtcclxuICAgIGNvbnN0IGNvbXByZXNzZWREYXRhID0gTFpTdHJpbmcuY29tcHJlc3MoanNvblN0cmluZyk7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdhdWRpdCcsIGNvbXByZXNzZWREYXRhKVxyXG4gIH1cclxufSIsIjxkaXYgKm5nSWY9XCIhYXVkaXRMb2FkaW5nXCIgY2xhc3M9XCJjYXJkXCIgPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCIgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwiY2FyZC1sYWJlbCBmdy1ib2xkXCI+e3tmaWxlZGV0YWlscz8ucXVldWVOYW1lfX08c3BhbiBjbGFzcz1cIm14LTMgYXJyb3ctY29kZVwiPiAtIDwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tmaWxlZGV0YWlscz8uc3RvcmVJZH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMyBhcnJvdy1jb2RlXCI+IC0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuID57e2ZpbGVkZXRhaWxzPy5EYXRlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cIm14LTMgYXJyb3ctY29kZVwiPiAtIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiA+e3tmaWxlZGV0YWlscz8udHlwZX19PC9zcGFuPiAtLT5cclxuICAgICAgICAgICAgICAgIDwhLS0gPC9zcGFuPiAtLT5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgIFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC0zIG1zLTMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBiZy10aW1lclwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0zIHRleHQtdGltZXIgZnctc2VtaWJvbGRcIj57eyBmb3JtYXR0ZWRUaW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkuMTY2NjcgMi44NzA3MUM5LjE2NjY3IDIuNjIwMjMgOS4yNjYxNyAyLjM4MDAxIDkuNDQzMjkgMi4yMDI4OUM5LjYyMDQxIDIuMDI1NzcgOS44NjA2MyAxLjkyNjI3IDEwLjExMTEgMS45MjYyN0gxMy44ODg5QzE0LjEzOTQgMS45MjYyNyAxNC4zNzk2IDIuMDI1NzcgMTQuNTU2NyAyLjIwMjg5QzE0LjczMzggMi4zODAwMSAxNC44MzMzIDIuNjIwMjMgMTQuODMzMyAyLjg3MDcxQzE0LjgzMzMgMy4xMjEyIDE0LjczMzggMy4zNjE0MiAxNC41NTY3IDMuNTM4NTRDMTQuMzc5NiAzLjcxNTY1IDE0LjEzOTQgMy44MTUxNiAxMy44ODg5IDMuODE1MTZIMTIuOTQ0NFY1LjA3NDQyTDEyLjk0MzIgNS4xMjYwNUMxNC41Mzk2IDUuMzAwOTcgMTYuMDUyOCA1LjkyNzg3IDE3LjMwNTMgNi45MzMwOEwxNy4zMTQxIDYuOTI1NTNMMTguMjU4NSA1Ljk4MTA4QzE4LjM3NCA1Ljg1Njc2IDE4LjUyMDggNS43NjU4OCAxOC42ODM1IDUuNzE4MDFDMTguODQ2MyA1LjY3MDE0IDE5LjAxOSA1LjY2NzA2IDE5LjE4MzMgNS43MDkwOEMxOS4zNDc3IDUuNzUxMTEgMTkuNDk3NyA1LjgzNjY5IDE5LjYxNzUgNS45NTY4QzE5LjczNzMgNi4wNzY5MiAxOS44MjI1IDYuMjI3MTMgMTkuODY0MSA2LjM5MTZDMTkuOTA2IDYuNTU1NzggMTkuOTAzIDYuNzI4MjMgMTkuODU1NCA2Ljg5MDg1QzE5LjgwNzcgNy4wNTM0OCAxOS43MTcyIDcuMjAwMjkgMTkuNTkzMyA3LjMxNTlMMTguNjQ4OSA4LjI2MDM0TDE4LjY0MTMgOC4yNjkxNUMxOS42NDAzIDkuNTE5NzQgMjAuMjY1OCAxMS4wMjcgMjAuNDQ2IDEyLjYxNzRDMjAuNjI2MSAxNC4yMDc4IDIwLjM1MzYgMTUuODE2NyAxOS42NTk3IDE3LjI1OTFDMTguOTY1OCAxOC43MDE0IDE3Ljg3ODggMTkuOTE4NSAxNi41MjM3IDIwLjc3MDRDMTUuMTY4NiAyMS42MjIyIDEzLjYwMDYgMjIuMDc0MSAxMiAyMi4wNzQxQzEwLjM5OTQgMjIuMDc0MSA4LjgzMTM3IDIxLjYyMjIgNy40NzYyOSAyMC43NzA0QzYuMTIxMjIgMTkuOTE4NSA1LjAzNDE5IDE4LjcwMTQgNC4zNDAzIDE3LjI1OTFDMy42NDY0MSAxNS44MTY3IDMuMzczODYgMTQuMjA3OCAzLjU1NDAyIDEyLjYxNzRDMy43MzQxOCAxMS4wMjcgNC4zNTk3MyA5LjUxOTc0IDUuMzU4NjcgOC4yNjkxNUw1LjM1MTExIDguMjYwMzRMNC40MDY2NyA3LjMxNTlDNC4yMzk2NCA3LjEzNjkgNC4xNDg2NSA2LjkwMDAzIDQuMTUyODcgNi42NTUyNEM0LjE1NzEgNi40MTA0NSA0LjI1NjIyIDYuMTc2ODcgNC40MjkzNCA2LjAwMzc1QzQuNjAyNDYgNS44MzA2MyA0LjgzNjA0IDUuNzMxNTEgNS4wODA4MyA1LjcyNzI4QzUuMzI1NjIgNS43MjMwNiA1LjU2MjQ5IDUuODE0MDUgNS43NDE0OSA1Ljk4MTA4TDYuNjg1OTMgNi45MjU1M0w2LjY5NDc0IDYuOTMzMDhDNy45NDY4MSA1LjkyODA5IDkuNDU5NjMgNS4zMDEyIDExLjA1NTYgNS4xMjYwNVYzLjgxNTE2SDEwLjExMTFDOS44NjA2MyAzLjgxNTE2IDkuNjIwNDEgMy43MTU2NSA5LjQ0MzI5IDMuNTM4NTRDOS4yNjYxNyAzLjM2MTQyIDkuMTY2NjcgMy4xMjEyIDkuMTY2NjcgMi44NzA3MVpNMTIgMjAuMTg1NUMxMy43NTM1IDIwLjE4NTQgMTUuNDM1MiAxOS40ODg2IDE2LjY3NSAxOC4yNDg1QzE3LjkxNDggMTcuMDA4NSAxOC42MTEzIDE1LjMyNjcgMTguNjExMSAxMy41NzMyQzE4LjYxMDkgMTEuODE5NiAxNy45MTQyIDEwLjEzOCAxNi42NzQxIDguODk4MTNDMTUuNDM0MSA3LjY1ODMxIDEzLjc1MjMgNi45NjE4OCAxMS45OTg3IDYuOTYyMDRDMTAuMjQ1MiA2Ljk2MjIxIDguNTYzNTQgNy42NTg5NiA3LjMyMzcyIDguODk5MDJDNi4wODM5IDEwLjEzOTEgNS4zODc0NyAxMS44MjA5IDUuMzg3NjMgMTMuNTc0NEM1LjM4NzggMTUuMzI4IDYuMDg0NTUgMTcuMDA5NiA3LjMyNDYxIDE4LjI0OTRDOC41NjQ2NyAxOS40ODkzIDEwLjI0NjUgMjAuMTg1NyAxMiAyMC4xODU1Wk0xMi40ODk5IDExLjc0ODVMMTQuMTY0NyAxMC4wNzM3QzE0LjI1MTcgOS45ODM0MyAxNC4zNTU5IDkuOTExNDMgMTQuNDcxMSA5Ljg2MTg4QzE0LjU4NjMgOS44MTIzMyAxNC43MTAyIDkuNzg2MjIgMTQuODM1NiA5Ljc4NTA3QzE0Ljk2MTEgOS43ODM5MiAxNS4wODU0IDkuODA3NzYgMTUuMjAxNSA5Ljg1NTE5QzE1LjMxNzYgOS45MDI2MiAxNS40MjMxIDkuOTcyNyAxNS41MTE4IDEwLjA2MTNDMTUuNjAwNSAxMC4xNSAxNS42NzA3IDEwLjI1NTQgMTUuNzE4MiAxMC4zNzE0QzE1Ljc2NTggMTAuNDg3NSAxNS43ODk3IDEwLjYxMTggMTUuNzg4NyAxMC43MzcyQzE1Ljc4NzcgMTAuODYyNiAxNS43NjE3IDEwLjk4NjYgMTUuNzEyMiAxMS4xMDE4QzE1LjY2MjggMTEuMjE3MSAxNS41OTA5IDExLjMyMTMgMTUuNTAwNyAxMS40MDg1TDEzLjgyNTkgMTMuMDg0NkMxMy45MDAzIDEzLjM2NDUgMTMuOTA5NSAxMy42NTc5IDEzLjg1MjYgMTMuOTQyQzEzLjc5NTggMTQuMjI2IDEzLjY3NDUgMTQuNDkzMyAxMy40OTgxIDE0LjcyMzFDMTMuMzIxNyAxNC45NTI5IDEzLjA5NDkgMTUuMTM5MSAxMi44MzUyIDE1LjI2NzVDMTIuNTc1NCAxNS4zOTU4IDEyLjI4OTcgMTUuNDYyOCAxMiAxNS40NjMzQzExLjczMjcgMTUuNDYxIDExLjQ2ODggMTUuNDAxOSAxMS4yMjYgMTUuMjlDMTAuOTgzMiAxNS4xNzgxIDEwLjc2NyAxNS4wMTU5IDEwLjU5MTYgMTQuODE0MUMxMC40MTYyIDE0LjYxMjMgMTAuMjg1NyAxNC4zNzU1IDEwLjIwODcgMTQuMTE5NUMxMC4xMzE2IDEzLjg2MzUgMTAuMTA5OSAxMy41OTQgMTAuMTQ0OCAxMy4zMjlDMTAuMTc5OCAxMy4wNjM5IDEwLjI3MDYgMTIuODA5MyAxMC40MTE0IDEyLjU4MkMxMC41NTIyIDEyLjM1NDcgMTAuNzM5NiAxMi4xNTk5IDEwLjk2MTMgMTIuMDEwNEMxMS4xODMgMTEuODYxIDExLjQzMzkgMTEuNzYwNCAxMS42OTc0IDExLjcxNTJDMTEuOTYwOSAxMS42NzAxIDEyLjIzMSAxMS42ODE0IDEyLjQ4OTkgMTEuNzQ4NVpcIiBmaWxsPVwiYmxhY2tcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIDxzcGFuICpuZ0lmPVwiZGVtb2dyYXBoaWNcIiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXN1Y2Nlc3MgbXMtM1wiPnt7ZGVtb2dyYXBoaWN9fSB7e2RlbW9ncmFwaGljID4gMSA/ICdEZW1vZ3JhcGhpY3MnIDogJ0RlbW9ncmFwaGljJ319PC9zcGFuPiAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhciBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmUgbXktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwiIXNob3d2YWx1ZTFcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWRlZmF1bHQgYnRuLW91dGxpbmUgcHktMiBteC0yXCIgKGNsaWNrKT1cImNoYW5nZXNkYXRhKClcIj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi1wcmltYXJ5IHN2Zy1pY29uLTJ4XCIgPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTUuODMzNyAxMC4wMDAxSDQuMTY2OTlNNC4xNjY5OSAxMC4wMDAxTDEwLjAwMDMgMTUuODMzNE00LjE2Njk5IDEwLjAwMDFMMTAuMDAwMyA0LjE2Njc1XCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPjxzcGFuIGNsYXNzPVwibXMtM1wiPkJhY2sgdG8gVGFnZ2luZzwvc3Bhbj48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIXNob3d2YWx1ZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeSBweS0yIG14LTJcIiAoY2xpY2spPVwic3VibWl0YXVkaXQoKVwiICA+U3VibWl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNC4xNjY5OSA5Ljk5OTg0SDE1LjgzMzdNMTUuODMzNyA5Ljk5OTg0TDEwLjAwMDMgNC4xNjY1TTE1LjgzMzcgOS45OTk4NEwxMC4wMDAzIDE1LjgzMzJcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd3ZhbHVlXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtIHB5LTIgbXgtMlwiIFtkaXNhYmxlZF09XCJzdWJtaXR0ZWRcIiAoY2xpY2spPVwidGFnZ2luZ3ZpZXcoKVwiPlJldGFnIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLXByaW1hcnkgc3ZnLWljb24tMnhcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTQuMTY2NjYgOS45OTk5NkgxNS44MzMzTTE1LjgzMzMgOS45OTk5Nkw5Ljk5OTk5IDQuMTY2NjNNMTUuODMzMyA5Ljk5OTk2TDkuOTk5OTkgMTUuODMzM1wiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIFxyXG48L2Rpdj5cclxuXHJcblxyXG48ZGl2IGNsYXNzPVwicm93XCI+IFxyXG4gICAgPGRpdiAqbmdJZj1cImF1ZGl0TG9hZGluZ1wiIGNsYXNzPVwiY2FyZCBtdC01XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSA8aDUgY2xhc3M9XCJ0ZXh0LWRhcmstNjAwIGZzLTMgZnctYm9sZCB0ZXh0LWNlbnRlciBcIj5Mb2FkaW5nIEF1ZGl0IGZpbGUuLi4uLi48L2g1PiAtLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIWF1ZGl0TG9hZGluZ1wiIGNsYXNzPVwiY29sLW1kLTdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtdC01XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTEwMDBweFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2F0ZWdvcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbT8uY291bnQgIT09MFwiIGNsYXNzPVwibXQtNlwiIG5nYkFjY29yZGlvbkl0ZW0gW2NvbGxhcHNlZF09XCIhaXRlbT8uY291bnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWFpbmhlYWRpbmdcIiBuZ2JBY2NvcmRpb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtPy5uYW1lfX0gPHNwYW4gY2xhc3M9XCJzdWItdGV4dCBtdC0yIG1zLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0XCI+PHN2ZyBjbGFzcz1cIm1lLTJcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzE0NTA4XzE4NTgzKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yLjUgMTAuNUg5LjVDMTAuMDUyMyAxMC41IDEwLjUgMTAuMDUyMyAxMC41IDkuNVYyLjVDMTAuNSAxLjk0NzcyIDEwLjA1MjMgMS41IDkuNSAxLjVIMi41QzEuOTQ3NzIgMS41IDEuNSAxLjk0NzcyIDEuNSAyLjVWOS41QzEuNSAxMC4wNTIzIDEuOTQ3NzIgMTAuNSAyLjUgMTAuNVpNMi41IDEwLjVMOCA1TDEwLjUgNy41TTUgNC4yNUM1IDQuNjY0MjEgNC42NjQyMSA1IDQuMjUgNUMzLjgzNTc5IDUgMy41IDQuNjY0MjEgMy41IDQuMjVDMy41IDMuODM1NzkgMy44MzU3OSAzLjUgNC4yNSAzLjVDNC42NjQyMSAzLjUgNSAzLjgzNTc5IDUgNC4yNVpcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xNDUwOF8xODU4M1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cIndoaXRlXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPnt7aXRlbT8uY291bnR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdmlkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHkgY2xhc3M9XCJweS0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC1hdXRvXCIgKGRyYWdvdmVyKT1cImFsbG93RHJvcCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIGl0ZW1cIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIiAqbmdGb3I9XCJsZXQgb2JqIG9mIGl0ZW0/LnZhbHVlXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBkcmFnZ2FibGU9XCJ0cnVlXCIgKGRyYWdzdGFydCk9XCJkcmFnKCRldmVudClcIiBpZD1cInt7b2JqLmltZ19pZH19XCIgbmFtZT1cInt7aXRlbS50eXBlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm15LTMgbXgtMiBpbWdcIiBbc3JjXT1cIm9iai5pbWdfcGF0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtLTAgZnMtNyBmdy1ib2xkXCI+e3tvYmouaW1nX25hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC02XCIgbmdiQWNjb3JkaW9uSXRlbSBbY29sbGFwc2VkXT1cIiEoIWp1bmtjb3VudCAmJiAhZW1wbG95ZWVjb3VudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWFpbmhlYWRpbmdcIiBuZ2JBY2NvcmRpb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVW5pcXVlIEN1c3RvbWVyICA8c3BhbiBjbGFzcz1cInN1Yi10ZXh0IG10LTIgbXMtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LWRlZmF1bHRcIj48c3ZnIGNsYXNzPVwibWUtMlwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTU4MDBfMzkxMSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC41IDEwLjVWOS41QzguNSA4Ljk2OTU3IDguMjg5MjkgOC40NjA4NiA3LjkxNDIxIDguMDg1NzlDNy41MzkxNCA3LjcxMDcxIDcuMDMwNDMgNy41IDYuNSA3LjVIMi41QzEuOTY5NTcgNy41IDEuNDYwODYgNy43MTA3MSAxLjA4NTc5IDguMDg1NzlDMC43MTA3MTQgOC40NjA4NiAwLjUgOC45Njk1NyAwLjUgOS41VjEwLjVNMTEuNSAxMC41VjkuNUMxMS40OTk3IDkuMDU2ODYgMTEuMzUyMiA4LjYyNjM5IDExLjA4MDcgOC4yNzYxNkMxMC44MDkyIDcuOTI1OTMgMTAuNDI5MSA3LjY3NTc4IDEwIDcuNTY1TTggMS41NjVDOC40MzAyMSAxLjY3NTE1IDguODExNTIgMS45MjUzNSA5LjA4MzgyIDIuMjc2MTZDOS4zNTYxMiAyLjYyNjk2IDkuNTAzOTIgMy4wNTg0MSA5LjUwMzkyIDMuNTAyNUM5LjUwMzkyIDMuOTQ2NTkgOS4zNTYxMiA0LjM3ODA0IDkuMDgzODIgNC43Mjg4NEM4LjgxMTUyIDUuMDc5NjUgOC40MzAyMSA1LjMyOTg1IDggNS40NE02LjUgMy41QzYuNSA0LjYwNDU3IDUuNjA0NTcgNS41IDQuNSA1LjVDMy4zOTU0MyA1LjUgMi41IDQuNjA0NTcgMi41IDMuNUMyLjUgMi4zOTU0MyAzLjM5NTQzIDEuNSA0LjUgMS41QzUuNjA0NTcgMS41IDYuNSAyLjM5NTQzIDYuNSAzLjVaXCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMTU4MDBfMzkxMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cIndoaXRlXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPiB7e2N1c3RvbWVyY291bnR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdmlkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHkgY2xhc3M9XCJweS0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtNTAwXCIgKGRyYWdvdmVyKT1cImFsbG93RHJvcCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlc2V0R3JvdXBOdW1iZXIoKSA9PT0gbnVsbFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9iaiBvZiBhdWRpdG1hcHBpbmdkYXRhO2xldCBpPWluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvYmo/LmNvdW50ID09PSAxXCIgY2xhc3M9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGltZyBvZiBvYmo/Lm1hcHBlZGlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgZHJhZ2dhYmxlPVwidHJ1ZVwiIG5hbWU9XCJ7e29iai5pbWdfaWR9fVwiIChkcmFnc3RhcnQpPVwiZHJhZygkZXZlbnQpXCIgKGNsaWNrKT1cInRvZ2dsZUltYWdlKGltZz8uaW1nX25hbWUgKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwie3tpbWcuaW1nX2lkfX1cIiBjbGFzcz1cIm15LTMgbXgtMiBpbWdcIiBbc3JjXT1cImltZy5pbWdfcGF0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgbS0wIGZzLTcgZnctYm9sZFwiPnt7aW1nLmltZ19uYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8c3BhbiAqbmdJZj1cIm9iaj8uZGVtb2dyYXBoaWMgIT09ICdkJ1wiIGNsYXNzPVwibm90aWZ5LWJhZGdlMiB3LTI1cHggaC0yNXB4IGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInRvZ2dsZUltYWdlKGltZz8uaW1nX25hbWUgKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwib2JqPy5kZW1vZ3JhcGhpYyA9PT0gJ2QnXCIgY2xhc3M9XCJub3RpZnktYmFkZ2VcIiAoY2xpY2spPVwidG9nZ2xlSW1hZ2UoaW1nPy5pbWdfbmFtZSApXCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVja1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZToxNXB4O2NvbG9yOiMwMEEzRkZcIj48L2k+PC9zcGFuPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGNsYXNzPVwibXQtNVwiICpuZ0Zvcj1cImxldCBvYmogb2YgYXVkaXRtYXBwaW5nZGF0YTtsZXQgaT1pbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib2JqPy5jb3VudCA+IDFcIiBjbGFzcz1cImNhcmQtbGFiZWwgbXQtM1wiPkdyb3VwIHt7IGdldEdyb3VwTnVtYmVyKG9iaikgfX0gPHNwYW4gY2xhc3M9XCJzdWItdGV4dCBtdC0zIG1zLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtZGVmYXVsdFwiPjxzdmcgY2xhc3M9XCJtZS0yXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTQ1MDhfMTg1ODMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yLjUgMTAuNUg5LjVDMTAuMDUyMyAxMC41IDEwLjUgMTAuMDUyMyAxMC41IDkuNVYyLjVDMTAuNSAxLjk0NzcyIDEwLjA1MjMgMS41IDkuNSAxLjVIMi41QzEuOTQ3NzIgMS41IDEuNSAxLjk0NzcyIDEuNSAyLjVWOS41QzEuNSAxMC4wNTIzIDEuOTQ3NzIgMTAuNSAyLjUgMTAuNVpNMi41IDEwLjVMOCA1TDEwLjUgNy41TTUgNC4yNUM1IDQuNjY0MjEgNC42NjQyMSA1IDQuMjUgNUMzLjgzNTc5IDUgMy41IDQuNjY0MjEgMy41IDQuMjVDMy41IDMuODM1NzkgMy44MzU3OSAzLjUgNC4yNSAzLjVDNC42NjQyMSAzLjUgNSAzLjgzNTc5IDUgNC4yNVpcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4xXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xNDUwOF8xODU4M1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz57e29iai5jb3VudH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gKm5nSWY9XCJvYmo/LmRlbW9ncmFwaGljICE9PSAnZCdcIiBjbGFzcz1cImtpZC1iYWRnZSBjdXJzb3ItcG9pbnRlciBtcy0zIG1lLTNcIiBzdHlsZT1cInBhZGRpbmc6MnB4IDEwLjVweCAhaW1wb3J0YW50XCIgKGNsaWNrKT1cInRvZ2dsZUltYWdlKG9iaj8uaW1nX25hbWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm9iaj8uZGVtb2dyYXBoaWMgPT09ICdkJ1wiIGNsYXNzPVwia2lkLWJhZGdlIGN1cnNvci1wb2ludGVyIG1zLTMgbWUtM1wiIChjbGljayk9XCJ0b2dnbGVJbWFnZShvYmo/LmltZ19uYW1lKVwiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2tcIiBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOjE1cHg7Y29sb3I6IzAwQTNGRlwiPjwvaT48L3NwYW4+IE1hcmsgYXMgZGVtb2dyYXBoaWMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib2JqLmNvdW50ID4gMVwiIGNsYXNzPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpbWcgb2Ygb2JqPy5tYXBwZWRpZFwiIGNsYXNzPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGRyYWdnYWJsZT1cInRydWVcIiBuYW1lPVwie3tvYmouaW1nX2lkfX1cIiAoZHJhZ3N0YXJ0KT1cImRyYWcoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwie3tpbWcuaW1nX2lkfX1cIiBjbGFzcz1cIm15LTMgbXgtMiBpbWdcIiBbc3JjXT1cImltZy5pbWdfcGF0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgbS0wIGZzLTcgZnctYm9sZFwiPnt7aW1nLmltZ19uYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cIiFhdWRpdExvYWRpbmdcIiBjbGFzcz1cImNvbC1tZC01XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgbXQtNVwiPlxyXG4gICAgICAgICAgICA8IS0tIChjaGFuZ2UpPVwiaW1hZ2VhcnJheSgpXCIgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgaC0xMDAwcHhcIiAoZHJvcCk9XCJkcm9wZm9ycmV0YWcoJGV2ZW50KVwiIChkcmFnb3Zlcik9XCJhbGxvd0Ryb3AoJGV2ZW50KVwiID5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWxhYmVsIGZ3LWJvbGQgdGV4dC1kYXJrIG1iLTVcIj5JbWFnZXMgZm9yIFJldGFnZ2luZzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBpdGVtXCIgPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiByZXRhZ2ltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nICBbc3JjXT1cIml0ZW0uaW1nX3BhdGhcIiBjbGFzcz1cIm15LTIgbXgtNCBpbWctcmV0XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICBjbGFzcz1cInRleHQtY2VudGVyIG0tMCBmcy03IGZ3LWJvbGRcIj57e2l0ZW0uaW1nX25hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJub3RpZnktYmFkZ2UxIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInJlbW92ZWltYWdlKGl0ZW0pXCI+PGkgY2xhc3M9XCJmYSBmYS1jbG9zZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6MTVweDtjb2xvcjojMDBBM0ZGXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb25maXJtRHJhZnQgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQgaC1hdXRvIHAtMTBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgZC1ncmlkIHAtMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICA8c3Bhbj48aW1nIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ltYWdlcy9TdWNjZXNzdG9hc3QucG5nXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8IS0tIDxzcGFuICpuZ0lmPVwiZ2V0QmFja1wiPjxpbWcgc3JjPVwiLi9hc3NldHMvdGFuZ28vY3VzdG9tcG9wdXAtSWNvbnMvZGFuZ2VyLWljb24uc3ZnXCI+PC9zcGFuPiAgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWxhYmVsIG10LTVcIj5EbyB5b3Ugd2FudCB0byBzdWJtaXQgeW91ciBjaGFuZ2VzIHdpdGhvdXQgZGVtb2dyYXBoaWM/PC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cImdldEJhY2tcIiBjbGFzcz1cImNhcmQtbGFiZWwgbXQtNVwiPlVuc2F2ZWQgQ2hhbmdlczwvZGl2PiAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHAtMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4IG10LTEwXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHctNTAgbWUtMiBmdy1ib2xkXCIgKGNsaWNrKT1cIm1vZGFsLmNsb3NlKCdpc0RlbmllZCcpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHNhdmVidG4gdy01MCBtcy0yXCIgKGNsaWNrKT1cIm1vZGFsLmNsb3NlKCdpc0NvbmZpcm1lZCcpXCI+T2s8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19