tango-app-ui-analyse-trax 3.0.0-dev → 3.3.1-alpha-task.62

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 (90) hide show
  1. package/esm2022/lib/components/action-centre/action-centre.component.mjs +303 -0
  2. package/esm2022/lib/components/activity-log/activity-log.component.mjs +94 -0
  3. package/esm2022/lib/components/add-checklist/add-checklist.component.mjs +1439 -0
  4. package/esm2022/lib/components/checklist/checklist.component.mjs +252 -0
  5. package/esm2022/lib/components/checklist-configure/checklist-configure.component.mjs +1954 -0
  6. package/esm2022/lib/components/checklistlayout/checklistlayout.component.mjs +12 -0
  7. package/esm2022/lib/components/chip-dropdown/chip-dropdown.component.mjs +84 -0
  8. package/esm2022/lib/components/create-task/create-task.component.mjs +367 -0
  9. package/esm2022/lib/components/create-task/create-task.data.mjs +306 -0
  10. package/esm2022/lib/components/create-task/create-task.interface.mjs +2 -0
  11. package/esm2022/lib/components/custom-select/custom-select.component.mjs +236 -0
  12. package/esm2022/lib/components/dashboard/dashboard.component.mjs +597 -0
  13. package/esm2022/lib/components/dashboard-info/dashboard-info.component.mjs +635 -0
  14. package/esm2022/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.mjs +172 -0
  15. package/esm2022/lib/components/dashboard-layout/dashboard-layout.component.mjs +12 -0
  16. package/esm2022/lib/components/export-gallery/export-gallery.component.mjs +119 -0
  17. package/esm2022/lib/components/flag-layout/flag-layout.component.mjs +12 -0
  18. package/esm2022/lib/components/flags/flags.component.mjs +257 -0
  19. package/esm2022/lib/components/flags/flags.interface.mjs +2 -0
  20. package/esm2022/lib/components/flags-info/flags-info.component.mjs +388 -0
  21. package/esm2022/lib/components/flags-info/flags-info.interface.mjs +2 -0
  22. package/esm2022/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.mjs +71 -0
  23. package/esm2022/lib/components/gallery/gallery.component.mjs +1181 -0
  24. package/esm2022/lib/components/group-select/group-select.component.mjs +155 -0
  25. package/esm2022/lib/components/managechecklist/managechecklist.component.mjs +172 -0
  26. package/esm2022/lib/components/multi-date-datepicker/multi-date-datepicker.component.mjs +117 -0
  27. package/esm2022/lib/components/orders/orders.component.mjs +171 -0
  28. package/esm2022/lib/components/pagination/pagination.component.mjs +62 -0
  29. package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +105 -0
  30. package/esm2022/lib/components/reports/date-picker/date-picker.component.mjs +60 -0
  31. package/esm2022/lib/components/reports/reports.component.mjs +299 -0
  32. package/esm2022/lib/components/reports/reports.interface.mjs +2 -0
  33. package/esm2022/lib/components/tango-analyse-trax/tango-analyse-trax.component.mjs +27 -6
  34. package/esm2022/lib/components/task/task.component.mjs +271 -0
  35. package/esm2022/lib/components/task-configure/task-configure.component.mjs +504 -0
  36. package/esm2022/lib/components/task-configure/task-configure.interface.mjs +2 -0
  37. package/esm2022/lib/components/task-info/task-info.component.mjs +300 -0
  38. package/esm2022/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.mjs +203 -0
  39. package/esm2022/lib/components/task-layout/task-layout.component.mjs +12 -0
  40. package/esm2022/lib/components/trax-store/trax-store.component.mjs +153 -0
  41. package/esm2022/lib/components/traxpopup/traxpopup.component.mjs +67 -0
  42. package/esm2022/lib/services/trax.service.mjs +334 -0
  43. package/esm2022/lib/tango-analyse-trax-routing.module.mjs +124 -6
  44. package/esm2022/lib/tango-analyse-trax.module.mjs +144 -9
  45. package/fesm2022/tango-app-ui-analyse-trax.mjs +11412 -21
  46. package/fesm2022/tango-app-ui-analyse-trax.mjs.map +1 -1
  47. package/lib/components/action-centre/action-centre.component.d.ts +56 -0
  48. package/lib/components/activity-log/activity-log.component.d.ts +30 -0
  49. package/lib/components/add-checklist/add-checklist.component.d.ts +99 -0
  50. package/lib/components/checklist/checklist.component.d.ts +39 -0
  51. package/lib/components/checklist-configure/checklist-configure.component.d.ts +160 -0
  52. package/lib/components/checklistlayout/checklistlayout.component.d.ts +5 -0
  53. package/lib/components/chip-dropdown/chip-dropdown.component.d.ts +24 -0
  54. package/lib/components/create-task/create-task.component.d.ts +58 -0
  55. package/lib/components/create-task/create-task.data.d.ts +244 -0
  56. package/lib/components/create-task/create-task.interface.d.ts +147 -0
  57. package/lib/components/custom-select/custom-select.component.d.ts +35 -0
  58. package/lib/components/dashboard/dashboard.component.d.ts +75 -0
  59. package/lib/components/dashboard-info/dashboard-info.component.d.ts +102 -0
  60. package/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.d.ts +40 -0
  61. package/lib/components/dashboard-layout/dashboard-layout.component.d.ts +5 -0
  62. package/lib/components/export-gallery/export-gallery.component.d.ts +33 -0
  63. package/lib/components/flag-layout/flag-layout.component.d.ts +5 -0
  64. package/lib/components/flags/flags.component.d.ts +51 -0
  65. package/lib/components/flags/flags.interface.d.ts +64 -0
  66. package/lib/components/flags-info/flags-info.component.d.ts +62 -0
  67. package/lib/components/flags-info/flags-info.interface.d.ts +212 -0
  68. package/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.d.ts +13 -0
  69. package/lib/components/gallery/gallery.component.d.ts +125 -0
  70. package/lib/components/group-select/group-select.component.d.ts +33 -0
  71. package/lib/components/managechecklist/managechecklist.component.d.ts +32 -0
  72. package/lib/components/multi-date-datepicker/multi-date-datepicker.component.d.ts +27 -0
  73. package/lib/components/orders/orders.component.d.ts +38 -0
  74. package/lib/components/pagination/pagination.component.d.ts +16 -0
  75. package/lib/components/reactive-select/reactive-select.component.d.ts +32 -0
  76. package/lib/components/reports/date-picker/date-picker.component.d.ts +23 -0
  77. package/lib/components/reports/reports.component.d.ts +55 -0
  78. package/lib/components/reports/reports.interface.d.ts +46 -0
  79. package/lib/components/tango-analyse-trax/tango-analyse-trax.component.d.ts +10 -1
  80. package/lib/components/task/task.component.d.ts +59 -0
  81. package/lib/components/task-configure/task-configure.component.d.ts +69 -0
  82. package/lib/components/task-configure/task-configure.interface.d.ts +124 -0
  83. package/lib/components/task-info/task-info.component.d.ts +68 -0
  84. package/lib/components/task-info/taskinfo-edit/taskinfo-edit.component.d.ts +60 -0
  85. package/lib/components/task-layout/task-layout.component.d.ts +5 -0
  86. package/lib/components/trax-store/trax-store.component.d.ts +44 -0
  87. package/lib/components/traxpopup/traxpopup.component.d.ts +23 -0
  88. package/lib/services/trax.service.d.ts +107 -0
  89. package/lib/tango-analyse-trax.module.d.ts +42 -3
  90. package/package.json +1 -1
@@ -0,0 +1,257 @@
1
+ import { Component } from '@angular/core';
2
+ import { Subject, debounceTime, BehaviorSubject, takeUntil, distinctUntilChanged } from "rxjs";
3
+ import { FormControl } from '@angular/forms';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "tango-app-ui-global";
6
+ import * as i2 from "../../services/trax.service";
7
+ import * as i3 from "@angular/router";
8
+ import * as i4 from "@angular/common";
9
+ import * as i5 from "tango-app-ui-shared";
10
+ import * as i6 from "@angular/forms";
11
+ import * as i7 from "../reactive-select/reactive-select.component";
12
+ export class FlagsComponent {
13
+ gs;
14
+ changeDetector;
15
+ traxService;
16
+ router;
17
+ pageInfo;
18
+ destroy$ = new Subject();
19
+ itemsPerPage = 10;
20
+ currentPage = 0;
21
+ totalItems = 0;
22
+ paginationSizes = [10, 20, 30];
23
+ pageSize = 10;
24
+ sortColumName = 'checkListName';
25
+ sortDirection = 1;
26
+ headerData;
27
+ ;
28
+ flagsTableApiState = new BehaviorSubject('initial');
29
+ flagsTableData = [];
30
+ cardMetricsApiState = new BehaviorSubject('initial');
31
+ cardMetricsData;
32
+ cardMetricsComparisonData;
33
+ searchInput = new FormControl('');
34
+ filterInput = new FormControl('all');
35
+ filterValues = [
36
+ { label: 'All', value: 'all' },
37
+ { label: 'Question', value: 'question' },
38
+ { label: 'Not Submitted', value: 'time' },
39
+ { label: 'Detection', value: 'detection' },
40
+ ];
41
+ dateComparisonType;
42
+ constructor(gs, changeDetector, traxService, router, pageInfo) {
43
+ this.gs = gs;
44
+ this.changeDetector = changeDetector;
45
+ this.traxService = traxService;
46
+ this.router = router;
47
+ this.pageInfo = pageInfo;
48
+ this.searchInput.valueChanges.pipe(takeUntil(this.destroy$)).pipe(debounceTime(1000), distinctUntilChanged()).subscribe((val) => {
49
+ if (val === null || val === undefined) {
50
+ return;
51
+ }
52
+ this.currentPage = 0;
53
+ this.getFlagsTable();
54
+ });
55
+ this.filterInput.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((val) => {
56
+ if (val === null || val === undefined) {
57
+ return;
58
+ }
59
+ this.currentPage = 0;
60
+ this.getFlagsTable();
61
+ });
62
+ const dateComparisonType = localStorage.getItem('dashboardDateType');
63
+ if (dateComparisonType) {
64
+ if (dateComparisonType === 'daily' || dateComparisonType === 'weekly') {
65
+ this.dateComparisonType = dateComparisonType;
66
+ }
67
+ else {
68
+ this.dateComparisonType = 'daily';
69
+ localStorage.setItem('dashboardDateType', 'daily');
70
+ }
71
+ }
72
+ else {
73
+ this.dateComparisonType = 'daily';
74
+ localStorage.setItem('dashboardDateType', 'daily');
75
+ }
76
+ }
77
+ ngOnDestroy() {
78
+ this.destroy$.next();
79
+ this.destroy$.complete();
80
+ }
81
+ ngOnInit() {
82
+ this.gs.dataRangeValue
83
+ .pipe(takeUntil(this.destroy$))
84
+ .pipe(debounceTime(1000))
85
+ .subscribe((data) => {
86
+ if (data?.client) {
87
+ this.headerData = data;
88
+ if (this.headerData?.stores?.length) {
89
+ this.headerData.stores = this.headerData.stores.filter((data) => data?.checked);
90
+ }
91
+ this.getChecklistFlagMetrics();
92
+ this.getChecklistFlagMetricsComparison();
93
+ this.getFlagsTable();
94
+ }
95
+ });
96
+ this.setPageData();
97
+ }
98
+ setPageData() {
99
+ this.pageInfo.setTitle("Flags");
100
+ this.pageInfo.setDescription("");
101
+ this.pageInfo.setBreadcrumbs([
102
+ // { title: "Analyze", path: "/manage/trax/dashboard", isActive: false, isSeparator: false },
103
+ // { title: "Analyze", path: "/manage/trax/dashboard", isActive: false, isSeparator: true },
104
+ { title: "Tango Trax", path: "/manage/trax/dashboard", isActive: false, isSeparator: false },
105
+ { title: "Tango Trax", path: "/manage/trax/dashboard", isActive: false, isSeparator: true },
106
+ // { title: "Reports", path: "/manage/trax/reports", isActive: false, isSeparator: false },
107
+ // { title: "Reports", path: "/manage/trax/reports", isActive: false, isSeparator: true },
108
+ ]);
109
+ }
110
+ getChecklistFlagMetrics() {
111
+ this.cardMetricsApiState.next('loading');
112
+ const data = {
113
+ "clientId": this.headerData?.client,
114
+ "fromDate": this.headerData?.date.startDate,
115
+ "toDate": this.headerData?.date.endDate,
116
+ "storeId": this.headerData?.stores.map((val) => val.storeId),
117
+ };
118
+ this.traxService.overallFlagMetrics(data).pipe(takeUntil(this.destroy$)).subscribe({
119
+ next: (res) => {
120
+ this.cardMetricsApiState.next('loaded');
121
+ if (res?.data) {
122
+ this.cardMetricsData = res.data;
123
+ }
124
+ else {
125
+ this.cardMetricsData = null;
126
+ }
127
+ },
128
+ error: (e) => {
129
+ console.log(e);
130
+ }
131
+ });
132
+ }
133
+ getChecklistFlagMetricsComparison() {
134
+ const data = {
135
+ "clientId": this.headerData?.client,
136
+ "fromDate": this.headerData?.date.startDate,
137
+ "toDate": this.headerData?.date.endDate,
138
+ "storeId": this.headerData?.stores.map((val) => val.storeId),
139
+ "dateType": this.dateComparisonType
140
+ };
141
+ this.traxService.overallFlagMetricsComparison(data).pipe(takeUntil(this.destroy$)).subscribe({
142
+ next: (res) => {
143
+ if (res?.data) {
144
+ this.cardMetricsComparisonData = res.data;
145
+ }
146
+ else {
147
+ this.cardMetricsComparisonData = null;
148
+ }
149
+ },
150
+ error: (e) => {
151
+ console.log(e);
152
+ }
153
+ });
154
+ }
155
+ getFlagsTable() {
156
+ this.flagsTableApiState.next('loading');
157
+ const data = {
158
+ "clientId": this.headerData?.client,
159
+ "storeId": this.headerData?.stores.map((val) => val.storeId),
160
+ "fromDate": this.headerData?.date.startDate,
161
+ "toDate": this.headerData?.date.endDate,
162
+ "limit": this.pageSize,
163
+ "offset": this.currentPage > 0 ? this.currentPage - 1 : 0,
164
+ "sortColumnName": this.sortColumName,
165
+ "sortBy": this.sortDirection,
166
+ "searchValue": this.searchInput.value,
167
+ "filter": this.filterInput.value
168
+ };
169
+ this.traxService.flagsTable(data).pipe(takeUntil(this.destroy$)).subscribe({
170
+ next: (res) => {
171
+ this.flagsTableApiState.next('loaded');
172
+ if (res?.data?.totalCount) {
173
+ this.totalItems = res.data.totalCount;
174
+ }
175
+ else {
176
+ this.totalItems = 0;
177
+ }
178
+ if (res?.data?.checklistPerformance) {
179
+ this.flagsTableData = res.data.checklistPerformance;
180
+ }
181
+ else {
182
+ this.flagsTableData = [];
183
+ }
184
+ },
185
+ error: (e) => {
186
+ this.flagsTableApiState.next('loaded');
187
+ }
188
+ });
189
+ }
190
+ onFlagsTableExport() {
191
+ this.flagsTableApiState.next('loading');
192
+ const data = {
193
+ "clientId": this.headerData?.client,
194
+ "storeId": this.headerData?.stores.map((val) => val.storeId),
195
+ "fromDate": this.headerData?.date.startDate,
196
+ "toDate": this.headerData?.date.endDate,
197
+ "limit": this.pageSize,
198
+ "offset": this.currentPage > 0 ? this.currentPage - 1 : 0,
199
+ "sortColumnName": this.sortColumName,
200
+ "sortBy": this.sortDirection,
201
+ "searchValue": this.searchInput.value,
202
+ "filter": this.filterInput.value,
203
+ "export": true
204
+ };
205
+ this.traxService.exportFlagsTable(data).pipe(takeUntil(this.destroy$)).subscribe({
206
+ next: (res) => {
207
+ this.flagsTableApiState.next('loaded');
208
+ this.traxService.saveAsExcelFile(res, 'flag_');
209
+ }
210
+ });
211
+ }
212
+ sortData(column) {
213
+ if (this.sortColumName === column) {
214
+ this.sortDirection = this.sortDirection === 1 ? -1 : 1;
215
+ }
216
+ else {
217
+ this.sortColumName = column;
218
+ this.sortDirection = 1;
219
+ }
220
+ this.changeDetector.detectChanges();
221
+ this.getFlagsTable();
222
+ }
223
+ onPageSizeChange(pageSize) {
224
+ this.currentPage = 1;
225
+ this.itemsPerPage = pageSize;
226
+ this.pageSize = pageSize;
227
+ this.changeDetector.detectChanges();
228
+ this.getFlagsTable();
229
+ }
230
+ onPageChange(pageOffset) {
231
+ this.currentPage = pageOffset;
232
+ this.getFlagsTable();
233
+ }
234
+ viewInDetail(checklistId, type) {
235
+ if (!checklistId) {
236
+ return;
237
+ }
238
+ let route = `/manage/trax/flags/flagsinfo?id=${checklistId}`;
239
+ if (type) {
240
+ route = route + `&type=${type}`;
241
+ }
242
+ this.router.navigateByUrl(route);
243
+ }
244
+ dateComparisonValueChange(val) {
245
+ localStorage.setItem('dashboardDateType', val);
246
+ this.dateComparisonType = val;
247
+ this.cardMetricsComparisonData = null;
248
+ this.getChecklistFlagMetricsComparison();
249
+ }
250
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FlagsComponent, deps: [{ token: i1.GlobalStateService }, { token: i0.ChangeDetectorRef }, { token: i2.TraxService }, { token: i3.Router }, { token: i1.PageInfoService }], target: i0.ɵɵFactoryTarget.Component });
251
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FlagsComponent, selector: "lib-flags", ngImport: i0, template: "<div class=\"col-md-12\">\r\n <div class=\"row\">\r\n <div class=\"col-12 px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <ng-container >\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <div class=\"card-title d-flex align-items-start flex-column\">\r\n <div class=\"d-flex\">\r\n <div class=\"cardcount\">\r\n {{(cardMetricsData?.flagCards?.totalFlag === 0 ||\r\n cardMetricsData?.flagCards?.totalFlag) ?\r\n cardMetricsData?.flagCards?.totalFlag?.toLocaleString('en-IN') : '--'}}\r\n </div>\r\n <div class=\"cardtext mx-3 mt-3\">Total Flags</div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"row g-0 h-100px py-3 \">\r\n <div class=\"col-11\" >\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"d-flex flex-column align-items-center\" >\r\n <div class=\"cardsubcount my-2\">{{(cardMetricsData?.flagCards?.questionFlag?.count === 0 ||\r\n cardMetricsData?.flagCards?.questionFlag?.count) ?\r\n cardMetricsData?.flagCards?.questionFlag?.count?.toLocaleString('en-IN') : '--'}}</div>\r\n <div class=\"cardtext \">Question Flags</div>\r\n <div class=\"mt-2\"><span *ngIf=\"cardMetricsComparisonData?.flagComparisonCards?.questionComparisonFlag?.comparisonData\" class=\"mt-2\">\r\n <svg *ngIf=\"cardMetricsComparisonData?.flagComparisonCards?.questionComparisonFlag?.ComparisonFlag\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"8\" viewBox=\"0 0 13 8\"\r\n fill=\"none\">\r\n <path\r\n d=\"M11.832 1L7.08203 5.75L4.58203 3.25L0.832031 7M11.832 1H8.83203M11.832 1V4\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"!cardMetricsComparisonData?.flagComparisonCards?.questionComparisonFlag?.ComparisonFlag\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\">\r\n </rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span><span class=\"mt-2 ms-2\"><span\r\n class=\"percent-value\">\r\n {{(cardMetricsComparisonData?.flagComparisonCards?.questionComparisonFlag?.comparisonData === 0 ||\r\n cardMetricsComparisonData?.flagComparisonCards?.questionComparisonFlag?.comparisonData) ?\r\n cardMetricsComparisonData?.flagComparisonCards?.questionComparisonFlag?.comparisonData?.toLocaleString('en-IN') : '--'}}\r\n %</span><span\r\n class=\"week-font\"> vs\r\n last {{dateComparisonType === 'weekly' ? 'week' : 'day'}}</span></span></div> \r\n </div>\r\n \r\n </div>\r\n <div class=\"col-md-4 \">\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"cardsubcount my-2\">{{(cardMetricsData?.flagCards?.delayInSubmission?.count === 0 ||\r\n cardMetricsData?.flagCards?.delayInSubmission?.count) ? cardMetricsData?.flagCards?.delayInSubmission?.count?.toLocaleString('en-IN')\r\n : '--'}}</div>\r\n <div class=\"cardtext\">Delay In Submission</div>\r\n <div class=\"mt-2\"><span *ngIf=\"cardMetricsComparisonData?.flagComparisonCards?.delayInSubmissionComparisonFlag?.comparisonData\" class=\"mt-2\">\r\n <svg *ngIf=\"cardMetricsComparisonData?.flagComparisonCards?.delayInSubmissionComparisonFlag?.ComparisonFlag\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"8\" viewBox=\"0 0 13 8\"\r\n fill=\"none\">\r\n <path\r\n d=\"M11.832 1L7.08203 5.75L4.58203 3.25L0.832031 7M11.832 1H8.83203M11.832 1V4\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"!cardMetricsComparisonData?.flagComparisonCards?.delayInSubmissionComparisonFlag?.ComparisonFlag\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\">\r\n </rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span><span class=\"mt-2 ms-2\"><span\r\n class=\"percent-value\">\r\n {{(cardMetricsComparisonData?.flagComparisonCards?.delayInSubmissionComparisonFlag?.comparisonData === 0 ||\r\n cardMetricsComparisonData?.flagComparisonCards?.delayInSubmissionComparisonFlag?.comparisonData) ?\r\n cardMetricsComparisonData?.flagComparisonCards?.delayInSubmissionComparisonFlag?.comparisonData?.toLocaleString('en-IN') : '--'}}\r\n %</span><span\r\n class=\"week-font\"> vs\r\n last {{dateComparisonType === 'weekly' ? 'week' : 'day'}}</span></span></div> \r\n </div>\r\n \r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"d-flex flex-column align-items-center\" >\r\n <div class=\"cardsubcount my-2\">{{(cardMetricsData?.flagCards?.detectionFlag?.count === 0 ||\r\n cardMetricsData?.flagCards?.detectionFlag?.count) ?\r\n cardMetricsData?.flagCards?.detectionFlag?.count?.toLocaleString('en-IN') : '--'}}</div>\r\n <div class=\"cardtext \">Detection Flags</div>\r\n <div class=\"mt-2\"><span *ngIf=\"cardMetricsComparisonData?.flagComparisonCards?.detectionComparisonFlag?.comparisonData\" class=\"mt-2\">\r\n <svg *ngIf=\"cardMetricsComparisonData?.flagComparisonCards?.detectionComparisonFlag?.ComparisonFlag\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"8\" viewBox=\"0 0 13 8\"\r\n fill=\"none\">\r\n <path\r\n d=\"M11.832 1L7.08203 5.75L4.58203 3.25L0.832031 7M11.832 1H8.83203M11.832 1V4\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"!cardMetricsComparisonData?.flagComparisonCards?.detectionComparisonFlag?.ComparisonFlag\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\">\r\n </rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span><span class=\"mt-2 ms-2\"><span\r\n class=\"percent-value\">\r\n {{(cardMetricsComparisonData?.flagComparisonCards?.detectionComparisonFlag?.comparisonData === 0 ||\r\n cardMetricsComparisonData?.flagComparisonCards?.detectionComparisonFlag?.comparisonData) ?\r\n cardMetricsComparisonData?.flagComparisonCards?.detectionComparisonFlag?.comparisonData?.toLocaleString('en-IN') : '--'}}\r\n %</span><span\r\n class=\"week-font\"> vs\r\n last {{dateComparisonType === 'weekly' ? 'week' : 'day'}}</span></span></div> \r\n </div>\r\n\r\n </div> \r\n </div>\r\n \r\n </div>\r\n <div class=\"col-1\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mt-3\">\r\n <div class=\"d-flex flex-column align-items-end justify-content-center me-5\" >\r\n <div class=\"mt-1 cursor-pointer fs-5\" [ngClass]=\"dateComparisonType ==='daily' ? 'text-primary' :''\" (click)=\"dateComparisonValueChange('daily')\">1D</div>\r\n <div class=\"mt-1 cursor-pointer fs-5\" [ngClass]=\"dateComparisonType ==='weekly' ? 'text-primary' :''\" (click)=\"dateComparisonValueChange('weekly')\">1W</div>\r\n <!-- <div class=\"mt-1 cursor-pointer fs-5\" [ngClass]=\"dateType ==='monthly' ? 'text-primary' :''\" (click)=\"dateValue('monthly')\">1M</div> --> \r\n </div>\r\n \r\n </div> \r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- <ng-container *ngIf=\"(cardMetricsApiState | async) === 'loading' || (cardMetricsApiState | async) === 'initial'\">\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 </ng-container> -->\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mt-3\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-4 px-4\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2 me-3\">Checklist Flags <span *ngIf=\"totalItems\" class=\"badge badge-light-primary \">{{totalItems}}\r\n total</span></span>\r\n <span class=\"text-sub mb-2\"> Based on {{ headerData?.date?.startDate | date: 'MMM d' }} - {{\r\n headerData?.date?.endDate | date: 'MMM d, y' }}\r\n </span>\r\n </h3>\r\n <div *ngIf=\"(flagsTableApiState | async) === 'loaded'\" class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon footfallsearch svg-icon-1 position-absolute ms-8\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\r\n </rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input [formControl]=\"searchInput\" type=\"text\" \r\n class=\"form-control ps-14 ms-4 me-4 footfallsearch\" placeholder=\"Search\"\r\n autocomplete=\"off\" />\r\n <lib-reactive-select [formControl]=\"filterInput\" [idField]=\"'value'\"\r\n [nameField]=\"'label'\" [data]=\"filterValues\" class=\"w-100\">\r\n </lib-reactive-select>\r\n <button *ngIf=\"flagsTableData?.length\" [disabled]=\"(flagsTableApiState | async) === 'loading'\" type=\"button\" (click)=\"onFlagsTableExport()\" type=\"button\"\r\n class=\"btn-outline btn align-items-end text-nowrap invheader ms-4\">\r\n <!-- Export Icon -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg>\r\n <span class=\"ms-2\"></span> Export\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <ng-container *ngIf=\"(flagsTableApiState | async) === 'loaded'\" >\r\n <div class=\"table-responsive px-4\">\r\n <table class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('checkListName')\">Checklist Name\r\n <svg\r\n [ngClass]=\"sortColumName === 'checkListName' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'checkListName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('checkListType')\">Flag Type<svg\r\n [ngClass]=\"sortColumName === 'checkListType' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'checkListType' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('assignedStores')\">Assigned Stores<svg\r\n [ngClass]=\"sortColumName === 'assignedStores' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'assignedStores' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('flaggedStores')\">Flagged Stores<svg\r\n [ngClass]=\"sortColumName === 'flaggedStores' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'flaggedStores' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th style=\"width: 200px;\" class=\"cursor-pointer\" (click)=\"sortData('flagCount')\">Flagged<svg\r\n [ngClass]=\"sortColumName === 'flagCount' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'flagCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('Compliance')\">Compliance %<svg\r\n [ngClass]=\"sortColumName === 'Compliance' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'Compliance' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th>Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <!-- *ngFor=\"let store of checklistPerformance\" -->\r\n <tr *ngFor=\"let data of flagsTableData\">\r\n <td>\r\n <div>\r\n <div class=\"symbol symbol-35px symbol-circle\">\r\n <span class=\"symbol-label bg-light-primary text-primary me-2\">\r\n {{data?.checkListChar || '--' }} </span>\r\n </div><span (click)=\"viewInDetail(data?.sourceCheckList_id)\"\r\n class=\"table-title-primary cursor-pointer\">{{data?.checkListName ? data?.checkListName : '--'}}</span> <span *ngIf=\"data?.checkListType !== 'custom'\"\r\n class=\"mx-2\">\u2728</span>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">\r\n <span *ngIf=\"data?.checkListType === 'custom'\" >Questions</span>\r\n <span *ngIf=\"data?.checkListType !== 'custom'\">Detections</span>\r\n </div>\r\n </td>\r\n <td class=\"table-title\">{{ data.checkListType === 'custom' ? ((data?.assignedStores || data?.assignedStores === 0) ? data?.assignedStores : '--') : ((data?.assignedStoresAi || data?.assignedStoresAi === 0) ? data?.assignedStoresAi : '--')}}</td>\r\n <td class=\"table-title\">{{ (data?.flaggedStores || data?.flaggedStores === 0) ? data?.flaggedStores : '--' }}</td>\r\n <td class=\"table-title-primary\"> \r\n\r\n <!-- <div class=\"d-flex justify-content-between\">\r\n <span class=\"cursor-pointer\" (click)=\"viewInDetail(data?.sourceCheckList_id)\">{{(data?.flagCount || data?.flagCount === 0) ? data?.flagCount?.toLocaleString('en-IN') : '--'}} </span> \r\n <span class=\"badge badge-light-default mx-3\" *ngIf=\"data?.checkListType === 'custom'\" >Questions</span>\r\n <span class=\"badge badge-light-default mx-3\" *ngIf=\"data?.checkListType !== 'custom'\">Detections</span> \r\n </div> -->\r\n\r\n <ng-container *ngIf=\"data?.checkListType === 'custom'\" >\r\n <div *ngIf=\"filterInput.value === 'all' || filterInput.value === 'question'\" class=\"d-flex justify-content-between mb-2\">\r\n <span class=\"cursor-pointer\" (click)=\"viewInDetail(data?.sourceCheckList_id, 'question')\" >{{(data?.customQuestionFlagCount || data?.customQuestionFlagCount === 0) ? data?.customQuestionFlagCount?.toLocaleString('en-IN') : '--'}} </span> \r\n <span class=\"badge badge-light-default mx-3\" >Questions</span> \r\n </div>\r\n\r\n <div *ngIf=\"filterInput.value === 'all' || filterInput.value === 'time'\" class=\"d-flex justify-content-between\">\r\n <span class=\"cursor-pointer\" (click)=\"viewInDetail(data?.sourceCheckList_id, 'time')\" >{{(data?.customTimeFlagCount || data?.customTimeFlagCount === 0) ? data?.customTimeFlagCount?.toLocaleString('en-IN') : '--'}} </span> \r\n <span class=\"badge badge-light-default mx-3\" >Not Submitted</span> \r\n </div> \r\n </ng-container> \r\n\r\n <div *ngIf=\"data?.checkListType !== 'custom'\" class=\"d-flex justify-content-between\">\r\n <span class=\"cursor-pointer\" (click)=\"viewInDetail(data?.sourceCheckList_id)\" >{{(data?.flagCount || data?.flagCount === 0) ? data?.flagCount?.toLocaleString('en-IN') : '--'}} </span> \r\n <span class=\"badge badge-light-default mx-3\" >Detections</span> \r\n </div>\r\n \r\n </td>\r\n <td class=\"table-title\">\r\n <div class=\"d-flex\">\r\n <div class=\"h-5px w-100 bg-light mt-4\">\r\n <div role=\"progressbar\" aria-valuemin=\"20\" aria-valuemax=\"100\"\r\n class=\"bg-primary rounded h-5px \"\r\n [style.width]=\"data?.complianceRate + '%'\"> </div>\r\n </div>\r\n <div class=\"text-end table-title\"><span class=\"my-1 mx-1 text-end\">\r\n {{data?.complianceRate?.toLocaleString('en-US', { minimumFractionDigits: 0 })\r\n || '--'}}%</span></div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">\r\n <div (click)=\"viewInDetail(data?.sourceCheckList_id)\" class=\"table-title-primary cursor-pointer\">View</div>\r\n </div>\r\n </td>\r\n\r\n </tr>\r\n\r\n </tbody>\r\n </table>\r\n\r\n </div>\r\n <div *ngIf=\"(flagsTableApiState | async) === 'loaded' && flagsTableData?.length\">\r\n <lib-pagination [itemsPerPage]=\"itemsPerPage\" [currentPage]=\"currentPage\"\r\n [totalItems]=\"totalItems\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div> \r\n </ng-container>\r\n <ng-container *ngIf=\"(flagsTableApiState | async) === 'loading' || (flagsTableApiState | async) === 'initial'\">\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 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 </ng-container>\r\n <ng-container *ngIf=\"(flagsTableApiState | async) === 'loaded' && !flagsTableData?.length\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Flags Table</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container> \r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".ellipse1{border-radius:6px;border-bottom:2px solid var(--Gray-200, #EAECF0);background:radial-gradient(206.89% 107.47% at 16.16% 32.77%,#fff6,#45bbfe33),#f2f4f7;box-shadow:0 4px 10px #0000000d}.cardcount{color:var(--Black, #101828);font-size:30px;font-style:normal;font-weight:600;line-height:38px}.cardtext{color:var(--Gray-700, #344054);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.cardsubcount{color:var(--Black, #101828);font-size:20px;font-style:normal;font-weight:700;line-height:30px}.card-border{padding:8px;border-radius:12px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF)}.percent-value{color:var(--Gray-500, #667085);text-align:center;font-size:16px;font-style:normal;font-weight:600;line-height:18px}.week-font{color:var(--Gray-800, #1D2939);font-size:12px;font-style:normal;font-weight:400;line-height:18px}.flagcard{padding:0 0 0 15%}.table-title-primary{color:var(--Primary-700, #009BF3)!important;font-size:14px;font-style:normal;font-weight:500!important;line-height:30px;text-decoration-line:underline}.table-title{color:var(--Gray-500, #667085);font-size:14px;font-style:normal;font-weight:500!important;line-height:20px}.rotate{rotate:180deg;transition:1s}td{vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i7.ReactiveSelectComponent, selector: "lib-reactive-select", inputs: ["idField", "nameField", "label", "data"], outputs: ["itemChange"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.DatePipe, name: "date" }] });
252
+ }
253
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FlagsComponent, decorators: [{
254
+ type: Component,
255
+ args: [{ selector: 'lib-flags', template: "<div class=\"col-md-12\">\r\n <div class=\"row\">\r\n <div class=\"col-12 px-2\">\r\n <div class=\"card card-border pt-2 h-100\">\r\n <ng-container >\r\n <div class=\"card-header ellipse1 border-0 px-3\">\r\n <div class=\"card-title d-flex align-items-start flex-column\">\r\n <div class=\"d-flex\">\r\n <div class=\"cardcount\">\r\n {{(cardMetricsData?.flagCards?.totalFlag === 0 ||\r\n cardMetricsData?.flagCards?.totalFlag) ?\r\n cardMetricsData?.flagCards?.totalFlag?.toLocaleString('en-IN') : '--'}}\r\n </div>\r\n <div class=\"cardtext mx-3 mt-3\">Total Flags</div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <div class=\"row g-0 h-100px py-3 \">\r\n <div class=\"col-11\" >\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"d-flex flex-column align-items-center\" >\r\n <div class=\"cardsubcount my-2\">{{(cardMetricsData?.flagCards?.questionFlag?.count === 0 ||\r\n cardMetricsData?.flagCards?.questionFlag?.count) ?\r\n cardMetricsData?.flagCards?.questionFlag?.count?.toLocaleString('en-IN') : '--'}}</div>\r\n <div class=\"cardtext \">Question Flags</div>\r\n <div class=\"mt-2\"><span *ngIf=\"cardMetricsComparisonData?.flagComparisonCards?.questionComparisonFlag?.comparisonData\" class=\"mt-2\">\r\n <svg *ngIf=\"cardMetricsComparisonData?.flagComparisonCards?.questionComparisonFlag?.ComparisonFlag\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"8\" viewBox=\"0 0 13 8\"\r\n fill=\"none\">\r\n <path\r\n d=\"M11.832 1L7.08203 5.75L4.58203 3.25L0.832031 7M11.832 1H8.83203M11.832 1V4\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"!cardMetricsComparisonData?.flagComparisonCards?.questionComparisonFlag?.ComparisonFlag\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\">\r\n </rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span><span class=\"mt-2 ms-2\"><span\r\n class=\"percent-value\">\r\n {{(cardMetricsComparisonData?.flagComparisonCards?.questionComparisonFlag?.comparisonData === 0 ||\r\n cardMetricsComparisonData?.flagComparisonCards?.questionComparisonFlag?.comparisonData) ?\r\n cardMetricsComparisonData?.flagComparisonCards?.questionComparisonFlag?.comparisonData?.toLocaleString('en-IN') : '--'}}\r\n %</span><span\r\n class=\"week-font\"> vs\r\n last {{dateComparisonType === 'weekly' ? 'week' : 'day'}}</span></span></div> \r\n </div>\r\n \r\n </div>\r\n <div class=\"col-md-4 \">\r\n <div class=\"d-flex flex-column align-items-center\">\r\n <div class=\"cardsubcount my-2\">{{(cardMetricsData?.flagCards?.delayInSubmission?.count === 0 ||\r\n cardMetricsData?.flagCards?.delayInSubmission?.count) ? cardMetricsData?.flagCards?.delayInSubmission?.count?.toLocaleString('en-IN')\r\n : '--'}}</div>\r\n <div class=\"cardtext\">Delay In Submission</div>\r\n <div class=\"mt-2\"><span *ngIf=\"cardMetricsComparisonData?.flagComparisonCards?.delayInSubmissionComparisonFlag?.comparisonData\" class=\"mt-2\">\r\n <svg *ngIf=\"cardMetricsComparisonData?.flagComparisonCards?.delayInSubmissionComparisonFlag?.ComparisonFlag\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"8\" viewBox=\"0 0 13 8\"\r\n fill=\"none\">\r\n <path\r\n d=\"M11.832 1L7.08203 5.75L4.58203 3.25L0.832031 7M11.832 1H8.83203M11.832 1V4\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"!cardMetricsComparisonData?.flagComparisonCards?.delayInSubmissionComparisonFlag?.ComparisonFlag\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\">\r\n </rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span><span class=\"mt-2 ms-2\"><span\r\n class=\"percent-value\">\r\n {{(cardMetricsComparisonData?.flagComparisonCards?.delayInSubmissionComparisonFlag?.comparisonData === 0 ||\r\n cardMetricsComparisonData?.flagComparisonCards?.delayInSubmissionComparisonFlag?.comparisonData) ?\r\n cardMetricsComparisonData?.flagComparisonCards?.delayInSubmissionComparisonFlag?.comparisonData?.toLocaleString('en-IN') : '--'}}\r\n %</span><span\r\n class=\"week-font\"> vs\r\n last {{dateComparisonType === 'weekly' ? 'week' : 'day'}}</span></span></div> \r\n </div>\r\n \r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"d-flex flex-column align-items-center\" >\r\n <div class=\"cardsubcount my-2\">{{(cardMetricsData?.flagCards?.detectionFlag?.count === 0 ||\r\n cardMetricsData?.flagCards?.detectionFlag?.count) ?\r\n cardMetricsData?.flagCards?.detectionFlag?.count?.toLocaleString('en-IN') : '--'}}</div>\r\n <div class=\"cardtext \">Detection Flags</div>\r\n <div class=\"mt-2\"><span *ngIf=\"cardMetricsComparisonData?.flagComparisonCards?.detectionComparisonFlag?.comparisonData\" class=\"mt-2\">\r\n <svg *ngIf=\"cardMetricsComparisonData?.flagComparisonCards?.detectionComparisonFlag?.ComparisonFlag\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"8\" viewBox=\"0 0 13 8\"\r\n fill=\"none\">\r\n <path\r\n d=\"M11.832 1L7.08203 5.75L4.58203 3.25L0.832031 7M11.832 1H8.83203M11.832 1V4\"\r\n stroke=\"#039855\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg *ngIf=\"!cardMetricsComparisonData?.flagComparisonCards?.detectionComparisonFlag?.ComparisonFlag\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\"\r\n viewBox=\"0 0 18 18\" fill=\"none\" class=\"ng-star-inserted\">\r\n <g clip-path=\"url(#clip0_2328_4654)\">\r\n <path d=\"M11.5 9L6.75 4.25L4.25 6.75L0.5 3M11.5 9H8.5M11.5 9V6\"\r\n stroke=\"#D92D20\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2328_4654\">\r\n <rect width=\"12\" height=\"12\" fill=\"white\">\r\n </rect>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </span><span class=\"mt-2 ms-2\"><span\r\n class=\"percent-value\">\r\n {{(cardMetricsComparisonData?.flagComparisonCards?.detectionComparisonFlag?.comparisonData === 0 ||\r\n cardMetricsComparisonData?.flagComparisonCards?.detectionComparisonFlag?.comparisonData) ?\r\n cardMetricsComparisonData?.flagComparisonCards?.detectionComparisonFlag?.comparisonData?.toLocaleString('en-IN') : '--'}}\r\n %</span><span\r\n class=\"week-font\"> vs\r\n last {{dateComparisonType === 'weekly' ? 'week' : 'day'}}</span></span></div> \r\n </div>\r\n\r\n </div> \r\n </div>\r\n \r\n </div>\r\n <div class=\"col-1\">\r\n <div class=\"row\">\r\n <div class=\"col-12 mt-3\">\r\n <div class=\"d-flex flex-column align-items-end justify-content-center me-5\" >\r\n <div class=\"mt-1 cursor-pointer fs-5\" [ngClass]=\"dateComparisonType ==='daily' ? 'text-primary' :''\" (click)=\"dateComparisonValueChange('daily')\">1D</div>\r\n <div class=\"mt-1 cursor-pointer fs-5\" [ngClass]=\"dateComparisonType ==='weekly' ? 'text-primary' :''\" (click)=\"dateComparisonValueChange('weekly')\">1W</div>\r\n <!-- <div class=\"mt-1 cursor-pointer fs-5\" [ngClass]=\"dateType ==='monthly' ? 'text-primary' :''\" (click)=\"dateValue('monthly')\">1M</div> --> \r\n </div>\r\n \r\n </div> \r\n </div>\r\n \r\n </div>\r\n \r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- <ng-container *ngIf=\"(cardMetricsApiState | async) === 'loading' || (cardMetricsApiState | async) === 'initial'\">\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 </ng-container> -->\r\n\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mt-3\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-4 px-4\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2 me-3\">Checklist Flags <span *ngIf=\"totalItems\" class=\"badge badge-light-primary \">{{totalItems}}\r\n total</span></span>\r\n <span class=\"text-sub mb-2\"> Based on {{ headerData?.date?.startDate | date: 'MMM d' }} - {{\r\n headerData?.date?.endDate | date: 'MMM d, y' }}\r\n </span>\r\n </h3>\r\n <div *ngIf=\"(flagsTableApiState | async) === 'loaded'\" class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon footfallsearch svg-icon-1 position-absolute ms-8\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\">\r\n </rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input [formControl]=\"searchInput\" type=\"text\" \r\n class=\"form-control ps-14 ms-4 me-4 footfallsearch\" placeholder=\"Search\"\r\n autocomplete=\"off\" />\r\n <lib-reactive-select [formControl]=\"filterInput\" [idField]=\"'value'\"\r\n [nameField]=\"'label'\" [data]=\"filterValues\" class=\"w-100\">\r\n </lib-reactive-select>\r\n <button *ngIf=\"flagsTableData?.length\" [disabled]=\"(flagsTableApiState | async) === 'loading'\" type=\"button\" (click)=\"onFlagsTableExport()\" type=\"button\"\r\n class=\"btn-outline btn align-items-end text-nowrap invheader ms-4\">\r\n <!-- Export Icon -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"></path>\r\n </svg>\r\n <span class=\"ms-2\"></span> Export\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-0\">\r\n <ng-container *ngIf=\"(flagsTableApiState | async) === 'loaded'\" >\r\n <div class=\"table-responsive px-4\">\r\n <table class=\"table text-nowrap bottom-border\">\r\n <thead>\r\n <tr>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('checkListName')\">Checklist Name\r\n <svg\r\n [ngClass]=\"sortColumName === 'checkListName' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'checkListName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('checkListType')\">Flag Type<svg\r\n [ngClass]=\"sortColumName === 'checkListType' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'checkListType' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('assignedStores')\">Assigned Stores<svg\r\n [ngClass]=\"sortColumName === 'assignedStores' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'assignedStores' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('flaggedStores')\">Flagged Stores<svg\r\n [ngClass]=\"sortColumName === 'flaggedStores' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'flaggedStores' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th style=\"width: 200px;\" class=\"cursor-pointer\" (click)=\"sortData('flagCount')\">Flagged<svg\r\n [ngClass]=\"sortColumName === 'flagCount' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'flagCount' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th class=\"cursor-pointer\" (click)=\"sortData('Compliance')\">Compliance %<svg\r\n [ngClass]=\"sortColumName === 'Compliance' && sortDirection === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"sortColumName === 'Compliance' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg></th>\r\n <th>Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <!-- *ngFor=\"let store of checklistPerformance\" -->\r\n <tr *ngFor=\"let data of flagsTableData\">\r\n <td>\r\n <div>\r\n <div class=\"symbol symbol-35px symbol-circle\">\r\n <span class=\"symbol-label bg-light-primary text-primary me-2\">\r\n {{data?.checkListChar || '--' }} </span>\r\n </div><span (click)=\"viewInDetail(data?.sourceCheckList_id)\"\r\n class=\"table-title-primary cursor-pointer\">{{data?.checkListName ? data?.checkListName : '--'}}</span> <span *ngIf=\"data?.checkListType !== 'custom'\"\r\n class=\"mx-2\">\u2728</span>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">\r\n <span *ngIf=\"data?.checkListType === 'custom'\" >Questions</span>\r\n <span *ngIf=\"data?.checkListType !== 'custom'\">Detections</span>\r\n </div>\r\n </td>\r\n <td class=\"table-title\">{{ data.checkListType === 'custom' ? ((data?.assignedStores || data?.assignedStores === 0) ? data?.assignedStores : '--') : ((data?.assignedStoresAi || data?.assignedStoresAi === 0) ? data?.assignedStoresAi : '--')}}</td>\r\n <td class=\"table-title\">{{ (data?.flaggedStores || data?.flaggedStores === 0) ? data?.flaggedStores : '--' }}</td>\r\n <td class=\"table-title-primary\"> \r\n\r\n <!-- <div class=\"d-flex justify-content-between\">\r\n <span class=\"cursor-pointer\" (click)=\"viewInDetail(data?.sourceCheckList_id)\">{{(data?.flagCount || data?.flagCount === 0) ? data?.flagCount?.toLocaleString('en-IN') : '--'}} </span> \r\n <span class=\"badge badge-light-default mx-3\" *ngIf=\"data?.checkListType === 'custom'\" >Questions</span>\r\n <span class=\"badge badge-light-default mx-3\" *ngIf=\"data?.checkListType !== 'custom'\">Detections</span> \r\n </div> -->\r\n\r\n <ng-container *ngIf=\"data?.checkListType === 'custom'\" >\r\n <div *ngIf=\"filterInput.value === 'all' || filterInput.value === 'question'\" class=\"d-flex justify-content-between mb-2\">\r\n <span class=\"cursor-pointer\" (click)=\"viewInDetail(data?.sourceCheckList_id, 'question')\" >{{(data?.customQuestionFlagCount || data?.customQuestionFlagCount === 0) ? data?.customQuestionFlagCount?.toLocaleString('en-IN') : '--'}} </span> \r\n <span class=\"badge badge-light-default mx-3\" >Questions</span> \r\n </div>\r\n\r\n <div *ngIf=\"filterInput.value === 'all' || filterInput.value === 'time'\" class=\"d-flex justify-content-between\">\r\n <span class=\"cursor-pointer\" (click)=\"viewInDetail(data?.sourceCheckList_id, 'time')\" >{{(data?.customTimeFlagCount || data?.customTimeFlagCount === 0) ? data?.customTimeFlagCount?.toLocaleString('en-IN') : '--'}} </span> \r\n <span class=\"badge badge-light-default mx-3\" >Not Submitted</span> \r\n </div> \r\n </ng-container> \r\n\r\n <div *ngIf=\"data?.checkListType !== 'custom'\" class=\"d-flex justify-content-between\">\r\n <span class=\"cursor-pointer\" (click)=\"viewInDetail(data?.sourceCheckList_id)\" >{{(data?.flagCount || data?.flagCount === 0) ? data?.flagCount?.toLocaleString('en-IN') : '--'}} </span> \r\n <span class=\"badge badge-light-default mx-3\" >Detections</span> \r\n </div>\r\n \r\n </td>\r\n <td class=\"table-title\">\r\n <div class=\"d-flex\">\r\n <div class=\"h-5px w-100 bg-light mt-4\">\r\n <div role=\"progressbar\" aria-valuemin=\"20\" aria-valuemax=\"100\"\r\n class=\"bg-primary rounded h-5px \"\r\n [style.width]=\"data?.complianceRate + '%'\"> </div>\r\n </div>\r\n <div class=\"text-end table-title\"><span class=\"my-1 mx-1 text-end\">\r\n {{data?.complianceRate?.toLocaleString('en-US', { minimumFractionDigits: 0 })\r\n || '--'}}%</span></div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"table-title\">\r\n <div (click)=\"viewInDetail(data?.sourceCheckList_id)\" class=\"table-title-primary cursor-pointer\">View</div>\r\n </div>\r\n </td>\r\n\r\n </tr>\r\n\r\n </tbody>\r\n </table>\r\n\r\n </div>\r\n <div *ngIf=\"(flagsTableApiState | async) === 'loaded' && flagsTableData?.length\">\r\n <lib-pagination [itemsPerPage]=\"itemsPerPage\" [currentPage]=\"currentPage\"\r\n [totalItems]=\"totalItems\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"pageSize\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div> \r\n </ng-container>\r\n <ng-container *ngIf=\"(flagsTableApiState | async) === 'loading' || (flagsTableApiState | async) === 'initial'\">\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 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 </ng-container>\r\n <ng-container *ngIf=\"(flagsTableApiState | async) === 'loaded' && !flagsTableData?.length\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div\r\n class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for Flags Table</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container> \r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".ellipse1{border-radius:6px;border-bottom:2px solid var(--Gray-200, #EAECF0);background:radial-gradient(206.89% 107.47% at 16.16% 32.77%,#fff6,#45bbfe33),#f2f4f7;box-shadow:0 4px 10px #0000000d}.cardcount{color:var(--Black, #101828);font-size:30px;font-style:normal;font-weight:600;line-height:38px}.cardtext{color:var(--Gray-700, #344054);font-size:14px;font-style:normal;font-weight:500;line-height:20px}.cardsubcount{color:var(--Black, #101828);font-size:20px;font-style:normal;font-weight:700;line-height:30px}.card-border{padding:8px;border-radius:12px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF)}.percent-value{color:var(--Gray-500, #667085);text-align:center;font-size:16px;font-style:normal;font-weight:600;line-height:18px}.week-font{color:var(--Gray-800, #1D2939);font-size:12px;font-style:normal;font-weight:400;line-height:18px}.flagcard{padding:0 0 0 15%}.table-title-primary{color:var(--Primary-700, #009BF3)!important;font-size:14px;font-style:normal;font-weight:500!important;line-height:30px;text-decoration-line:underline}.table-title{color:var(--Gray-500, #667085);font-size:14px;font-style:normal;font-weight:500!important;line-height:20px}.rotate{rotate:180deg;transition:1s}td{vertical-align:middle}\n"] }]
256
+ }], ctorParameters: () => [{ type: i1.GlobalStateService }, { type: i0.ChangeDetectorRef }, { type: i2.TraxService }, { type: i3.Router }, { type: i1.PageInfoService }] });
257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS10cmF4L3NyYy9saWIvY29tcG9uZW50cy9mbGFncy9mbGFncy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2ZsYWdzL2ZsYWdzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSy9GLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBUTdDLE1BQU0sT0FBTyxjQUFjO0lBNEJOO0lBQWdDO0lBQTJDO0lBQWtDO0lBQXdCO0lBM0JoSixRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUN2QyxZQUFZLEdBQUcsRUFBRSxDQUFBO0lBQ2pCLFdBQVcsR0FBRyxDQUFDLENBQUE7SUFDZixVQUFVLEdBQUcsQ0FBQyxDQUFBO0lBQ2QsZUFBZSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUM5QixRQUFRLEdBQUcsRUFBRSxDQUFBO0lBQ2IsYUFBYSxHQUFHLGVBQWUsQ0FBQztJQUNoQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLFVBQVUsQ0FBa0M7SUFBQSxDQUFDO0lBQzdDLGtCQUFrQixHQUFHLElBQUksZUFBZSxDQUFtQyxTQUFTLENBQUMsQ0FBQTtJQUNyRixjQUFjLEdBQXFCLEVBQUUsQ0FBQTtJQUNyQyxtQkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBbUMsU0FBUyxDQUFDLENB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QUFHLEtBQUssR0FBRyxTQUFTLElBQUksRUFBRSxDQUFBO1NBQ2hDO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVELHlCQUF5QixDQUFDLEdBQXNCO1FBQzlDLFlBQVksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDOUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEdBQUcsQ0FBQTtRQUM3QixJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFBO1FBQ3JDLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxDQUFBO0lBQzFDLENBQUM7d0dBaFFVLGNBQWM7NEZBQWQsY0FBYyxpRENkM0IsdTVrQ0FxYU07OzRGRHZaTyxjQUFjO2tCQUwxQixTQUFTOytCQUNFLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIEJlaGF2aW9yU3ViamVjdCwgdGFrZVVudGlsLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSwgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCB7IFRyYXhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJheC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgSGVhZGVyRmlsdGVyLCBGbGFnc1RhYmxlRGF0YSwgSUZsYWdDYXJkcywgSUZsYWdDb21wYXJpc29uQ2FyZHMgfSBmcm9tICcuL2ZsYWdzLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWZsYWdzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmxhZ3MuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9mbGFncy5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEZsYWdzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGl0ZW1zUGVyUGFnZSA9IDEwXHJcbiAgY3VycmVudFBhZ2UgPSAwXHJcbiAgdG90YWxJdGVtcyA9IDBcclxuICBwYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF1cclxuICBwYWdlU2l6ZSA9IDEwXHJcbiAgc29ydENvbHVtTmFtZSA9ICdjaGVja0xpc3ROYW1lJztcclxuICBzb3J0RGlyZWN0aW9uID0gMTtcclxuICBoZWFkZXJEYXRhOiBIZWFkZXJGaWx0ZXIgfCBudWxsIHwgdW5kZWZpbmVkOztcclxuICBmbGFnc1RhYmxlQXBpU3RhdGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PCdpbml0aWFsJyB8ICdsb2FkaW5nJyB8ICdsb2FkZWQnPignaW5pdGlhbCcpXHJcbiAgZmxhZ3NUYWJsZURhdGE6IEZsYWdzVGFibGVEYXRhW10gPSBbXVxyXG4gIGNhcmRNZXRyaWNzQXBpU3RhdGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PCdpbml0aWFsJyB8ICdsb2FkaW5nJyB8ICdsb2FkZWQnPignaW5pdGlhbCcpXHJcbiAgY2FyZE1ldHJpY3NEYXRhOiBJRmxhZ0NhcmRzIHwgbnVsbCB8IHVuZGVmaW5lZFxyXG4gIGNhcmRNZXRyaWNzQ29tcGFyaXNvbkRhdGE6IElGbGFnQ29tcGFyaXNvbkNhcmRzIHwgbnVsbCB8IHVuZGVmaW5lZFxyXG4gIHNlYXJjaElucHV0OiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XHJcbiAgZmlsdGVySW5wdXQ6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCdhbGwnKTtcclxuICBmaWx0ZXJWYWx1ZXMgPSBbXHJcbiAgICB7bGFiZWw6J0FsbCcsIHZhbHVlOidhbGwnfSxcclxuICAgIHtsYWJlbDonUXVlc3Rpb24nLCB2YWx1ZToncXVlc3Rpb24nfSxcclxuICAgIHtsYWJlbDonTm90IFN1Ym1pdHRlZCcsIHZhbHVlOid0aW1lJ30sXHJcbiAgICB7bGFiZWw6J0RldGVjdGlvbicsIHZhbHVlOidkZXRlY3Rpb24nfSxcclxuICBdXHJcbiAgZGF0ZUNvbXBhcmlzb25UeXBlOiAnZGFpbHknIHwgJ3dlZWtseSdcclxuXHJcblxyXG5cclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2UsIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHRyYXhTZXJ2aWNlOiBUcmF4U2VydmljZSwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBwYWdlSW5mbzpQYWdlSW5mb1NlcnZpY2UpIHsgXHJcbiAgICB0aGlzLnNlYXJjaElucHV0LnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkucGlwZShkZWJvdW5jZVRpbWUoMTAwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnN1YnNjcmliZSgodmFsKSA9PiB7XHJcbiAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlICA9IDBcclxuICAgICAgdGhpcy5nZXRGbGFnc1RhYmxlKClcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5maWx0ZXJJbnB1dC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgodmFsKSA9PiB7XHJcbiAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlICA9IDBcclxuICAgICAgdGhpcy5nZXRGbGFnc1RhYmxlKClcclxuICAgIH0pXHJcblxyXG4gICAgY29uc3QgZGF0ZUNvbXBhcmlzb25UeXBlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2Rhc2hib2FyZERhdGVUeXBlJylcclxuICAgIGlmKGRhdGVDb21wYXJpc29uVHlwZSl7XHJcbiAgICAgIGlmKGRhdGVDb21wYXJpc29uVHlwZSA9PT0gJ2RhaWx5JyB8fCBkYXRlQ29tcGFyaXNvblR5cGUgPT09ICd3ZWVrbHknKXtcclxuICAgICAgICB0aGlzLmRhdGVDb21wYXJpc29uVHlwZSA9IGRhdGVDb21wYXJpc29uVHlwZVxyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICB0aGlzLmRhdGVDb21wYXJpc29uVHlwZSA9ICdkYWlseSdcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZGFzaGJvYXJkRGF0ZVR5cGUnLCAnZGFpbHknKVxyXG4gICAgICB9XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5kYXRlQ29tcGFyaXNvblR5cGUgPSAnZGFpbHknXHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdkYXNoYm9hcmREYXRlVHlwZScsICdkYWlseScpXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWVcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwMCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhPy5jbGllbnQpIHtcclxuICAgICAgICAgIHRoaXMuaGVhZGVyRGF0YSA9IGRhdGE7XHJcbiAgICAgICAgICBpZiAodGhpcy5oZWFkZXJEYXRhPy5zdG9yZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmhlYWRlckRhdGEuc3RvcmVzID0gdGhpcy5oZWFkZXJEYXRhLnN0b3Jlcy5maWx0ZXIoKGRhdGE6IGFueSkgPT4gZGF0YT8uY2hlY2tlZClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZ2V0Q2hlY2tsaXN0RmxhZ01ldHJpY3MoKVxyXG4gICAgICAgICAgdGhpcy5nZXRDaGVja2xpc3RGbGFnTWV0cmljc0NvbXBhcmlzb24oKVxyXG4gICAgICAgICAgdGhpcy5nZXRGbGFnc1RhYmxlKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLnNldFBhZ2VEYXRhKClcclxuICB9XHJcblxyXG4gIHNldFBhZ2VEYXRhKCkge1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRUaXRsZShcIkZsYWdzXCIpO1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXREZXNjcmlwdGlvbihcIlwiKTtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0QnJlYWRjcnVtYnMoW1xyXG4gICAgICAvLyB7IHRpdGxlOiBcIkFuYWx5emVcIiwgcGF0aDogXCIvbWFuYWdlL3RyYXgvZGFzaGJvYXJkXCIsIGlzQWN0aXZlOiBmYWxzZSwgaXNTZXBhcmF0b3I6IGZhbHNlIH0sXHJcbiAgICAgIC8vIHsgdGl0bGU6IFwiQW5hbHl6ZVwiLCBwYXRoOiBcIi9tYW5hZ2UvdHJheC9kYXNoYm9hcmRcIiwgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogdHJ1ZSB9LFxyXG4gICAgICB7IHRpdGxlOiBcIlRhbmdvIFRyYXhcIiwgcGF0aDogXCIvbWFuYWdlL3RyYXgvZGFzaGJvYXJkXCIsIGlzQWN0aXZlOiBmYWxzZSwgaXNTZXBhcmF0b3I6IGZhbHNlIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwiVGFuZ28gVHJheFwiLCBwYXRoOiBcIi9tYW5hZ2UvdHJheC9kYXNoYm9hcmRcIiwgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogdHJ1ZSB9LFxyXG4gICAgICAvLyB7IHRpdGxlOiBcIlJlcG9ydHNcIiwgcGF0aDogXCIvbWFuYWdlL3RyYXgvcmVwb3J0c1wiLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiBmYWxzZSB9LFxyXG4gICAgICAvLyB7IHRpdGxlOiBcIlJlcG9ydHNcIiwgcGF0aDogXCIvbWFuYWdlL3RyYXgvcmVwb3J0c1wiLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiB0cnVlIH0sXHJcbiAgICBdKTtcclxuXHJcbiAgfVxyXG5cclxuICBnZXRDaGVja2xpc3RGbGFnTWV0cmljcygpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FyZE1ldHJpY3NBcGlTdGF0ZS5uZXh0KCdsb2FkaW5nJylcclxuICAgIGNvbnN0IGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XHJcbiAgICAgIFwiY2xpZW50SWRcIjogdGhpcy5oZWFkZXJEYXRhPy5jbGllbnQsXHJcbiAgICAgIFwiZnJvbURhdGVcIjogdGhpcy5oZWFkZXJEYXRhPy5kYXRlLnN0YXJ0RGF0ZSxcclxuICAgICAgXCJ0b0RhdGVcIjogdGhpcy5oZWFkZXJEYXRhPy5kYXRlLmVuZERhdGUsXHJcbiAgICAgIFwic3RvcmVJZFwiOiB0aGlzLmhlYWRlckRhdGE/LnN0b3Jlcy5tYXAoKHZhbDogeyBzdG9yZUlkOiBzdHJpbmcsIHN0b3JlTmFtZTogc3RyaW5nIH0pID0+IHZhbC5zdG9yZUlkKSxcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy50cmF4U2VydmljZS5vdmVyYWxsRmxhZ01ldHJpY3MoZGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgICB0aGlzLmNhcmRNZXRyaWNzQXBpU3RhdGUubmV4dCgnbG9hZGVkJylcclxuICAgICAgICBpZiAocmVzPy5kYXRhKSB7XHJcbiAgICAgICAgICB0aGlzLmNhcmRNZXRyaWNzRGF0YSA9IHJlcy5kYXRhXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuY2FyZE1ldHJpY3NEYXRhID0gbnVsbFxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZSk7XHJcblxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0Q2hlY2tsaXN0RmxhZ01ldHJpY3NDb21wYXJpc29uKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcclxuICAgICAgXCJjbGllbnRJZFwiOiB0aGlzLmhlYWRlckRhdGE/LmNsaWVudCxcclxuICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmhlYWRlckRhdGE/LmRhdGUuc3RhcnREYXRlLFxyXG4gICAgICBcInRvRGF0ZVwiOiB0aGlzLmhlYWRlckRhdGE/LmRhdGUuZW5kRGF0ZSxcclxuICAgICAgXCJzdG9yZUlkXCI6IHRoaXMuaGVhZGVyRGF0YT8uc3RvcmVzLm1hcCgodmFsOiB7IHN0b3JlSWQ6IHN0cmluZywgc3RvcmVOYW1lOiBzdHJpbmcgfSkgPT4gdmFsLnN0b3JlSWQpLFxyXG4gICAgICBcImRhdGVUeXBlXCI6IHRoaXMuZGF0ZUNvbXBhcmlzb25UeXBlXHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMudHJheFNlcnZpY2Uub3ZlcmFsbEZsYWdNZXRyaWNzQ29tcGFyaXNvbihkYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgIGlmIChyZXM/LmRhdGEpIHtcclxuICAgICAgICAgIHRoaXMuY2FyZE1ldHJpY3NDb21wYXJpc29uRGF0YSA9IHJlcy5kYXRhXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuY2FyZE1ldHJpY3NDb21wYXJpc29uRGF0YSA9IG51bGxcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG5cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldEZsYWdzVGFibGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZsYWdzVGFibGVBcGlTdGF0ZS5uZXh0KCdsb2FkaW5nJylcclxuICAgIGNvbnN0IGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XHJcbiAgICAgIFwiY2xpZW50SWRcIjogdGhpcy5oZWFkZXJEYXRhPy5jbGllbnQsXHJcbiAgICAgIFwic3RvcmVJZFwiOiB0aGlzLmhlYWRlckRhdGE/LnN0b3Jlcy5tYXAoKHZhbDogeyBzdG9yZUlkOiBzdHJpbmcsIHN0b3JlTmFtZTogc3RyaW5nIH0pID0+IHZhbC5zdG9yZUlkKSxcclxuICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmhlYWRlckRhdGE/LmRhdGUuc3RhcnREYXRlLFxyXG4gICAgICBcInRvRGF0ZVwiOiB0aGlzLmhlYWRlckRhdGE/LmRhdGUuZW5kRGF0ZSxcclxuICAgICAgXCJsaW1pdFwiOiB0aGlzLnBhZ2VTaXplLFxyXG4gICAgICBcIm9mZnNldFwiOiB0aGlzLmN1cnJlbnRQYWdlID4gMCA/IHRoaXMuY3VycmVudFBhZ2UgLSAxIDogMCxcclxuICAgICAgXCJzb3J0Q29sdW1uTmFtZVwiOiB0aGlzLnNvcnRDb2x1bU5hbWUsXHJcbiAgICAgIFwic29ydEJ5XCI6IHRoaXMuc29ydERpcmVjdGlvbixcclxuICAgICAgXCJzZWFyY2hWYWx1ZVwiOnRoaXMuc2VhcmNoSW5wdXQudmFsdWUsXHJcbiAgICAgIFwiZmlsdGVyXCI6dGhpcy5maWx0ZXJJbnB1dC52YWx1ZVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmZsYWdzVGFibGUoZGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgICB0aGlzLmZsYWdzVGFibGVBcGlTdGF0ZS5uZXh0KCdsb2FkZWQnKVxyXG4gICAgICAgIGlmIChyZXM/LmRhdGE/LnRvdGFsQ291bnQpIHtcclxuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IHJlcy5kYXRhLnRvdGFsQ291bnRcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gMFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzPy5kYXRhPy5jaGVja2xpc3RQZXJmb3JtYW5jZSkge1xyXG4gICAgICAgICAgdGhpcy5mbGFnc1RhYmxlRGF0YSA9IHJlcy5kYXRhLmNoZWNrbGlzdFBlcmZvcm1hbmNlXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZmxhZ3NUYWJsZURhdGEgPSBbXVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5mbGFnc1RhYmxlQXBpU3RhdGUubmV4dCgnbG9hZGVkJylcclxuXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBvbkZsYWdzVGFibGVFeHBvcnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZsYWdzVGFibGVBcGlTdGF0ZS5uZXh0KCdsb2FkaW5nJylcclxuICAgIGNvbnN0IGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XHJcbiAgICAgIFwiY2xpZW50SWRcIjogdGhpcy5oZWFkZXJEYXRhPy5jbGllbnQsXHJcbiAgICAgIFwic3RvcmVJZFwiOiB0aGlzLmhlYWRlckRhdGE/LnN0b3Jlcy5tYXAoKHZhbDogeyBzdG9yZUlkOiBzdHJpbmcsIHN0b3JlTmFtZTogc3RyaW5nIH0pID0+IHZhbC5zdG9yZUlkKSxcclxuICAgICAgXCJmcm9tRGF0ZVwiOiB0aGlzLmhlYWRlckRhdGE/LmRhdGUuc3RhcnREYXRlLFxyXG4gICAgICBcInRvRGF0ZVwiOiB0aGlzLmhlYWRlckRhdGE/LmRhdGUuZW5kRGF0ZSxcclxuICAgICAgXCJsaW1pdFwiOiB0aGlzLnBhZ2VTaXplLFxyXG4gICAgICBcIm9mZnNldFwiOiB0aGlzLmN1cnJlbnRQYWdlID4gMCA/IHRoaXMuY3VycmVudFBhZ2UgLSAxIDogMCxcclxuICAgICAgXCJzb3J0Q29sdW1uTmFtZVwiOiB0aGlzLnNvcnRDb2x1bU5hbWUsXHJcbiAgICAgIFwic29ydEJ5XCI6IHRoaXMuc29ydERpcmVjdGlvbixcclxuICAgICAgXCJzZWFyY2hWYWx1ZVwiOnRoaXMuc2VhcmNoSW5wdXQudmFsdWUsXHJcbiAgICAgIFwiZmlsdGVyXCI6dGhpcy5maWx0ZXJJbnB1dC52YWx1ZSxcclxuICAgICAgXCJleHBvcnRcIjp0cnVlXHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMudHJheFNlcnZpY2UuZXhwb3J0RmxhZ3NUYWJsZShkYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgIHRoaXMuZmxhZ3NUYWJsZUFwaVN0YXRlLm5leHQoJ2xvYWRlZCcpXHJcbiAgICAgICAgdGhpcy50cmF4U2VydmljZS5zYXZlQXNFeGNlbEZpbGUocmVzLCAnZmxhZ18nKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBzb3J0RGF0YShjb2x1bW46IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc29ydENvbHVtTmFtZSA9PT0gY29sdW1uKSB7XHJcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbiA9IHRoaXMuc29ydERpcmVjdGlvbiA9PT0gMSA/IC0xIDogMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc29ydENvbHVtTmFtZSA9IGNvbHVtbjtcclxuICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uID0gMTtcclxuICAgIH1cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5nZXRGbGFnc1RhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplOiBhbnkpIHtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgdGhpcy5pdGVtc1BlclBhZ2UgPSBwYWdlU2l6ZTtcclxuICAgIHRoaXMucGFnZVNpemUgPSBwYWdlU2l6ZTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5nZXRGbGFnc1RhYmxlKClcclxuICB9XHJcblxyXG4gIG9uUGFnZUNoYW5nZShwYWdlT2Zmc2V0OiBhbnkpIHtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBwYWdlT2Zmc2V0XHJcbiAgICB0aGlzLmdldEZsYWdzVGFibGUoKVxyXG4gIH1cclxuXHJcbiAgdmlld0luRGV0YWlsKGNoZWNrbGlzdElkOiBzdHJpbmcgfCB1bmRlZmluZWQsIHR5cGU/OiAncXVlc3Rpb24nIHwgJ3RpbWUnICkge1xyXG4gICAgaWYoIWNoZWNrbGlzdElkKXtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBsZXQgcm91dGUgID0gYC9tYW5hZ2UvdHJheC9mbGFncy9mbGFnc2luZm8/aWQ9JHtjaGVja2xpc3RJZH1gXHJcblxyXG4gICAgaWYodHlwZSl7XHJcbiAgICAgIHJvdXRlID0gcm91dGUgKyBgJnR5cGU9JHt0eXBlfWBcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHJvdXRlKVxyXG4gIH1cclxuXHJcbiAgZGF0ZUNvbXBhcmlzb25WYWx1ZUNoYW5nZSh2YWw6J2RhaWx5JyB8ICd3ZWVrbHknKXtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdkYXNoYm9hcmREYXRlVHlwZScsIHZhbClcclxuICAgIHRoaXMuZGF0ZUNvbXBhcmlzb25UeXBlID0gdmFsXHJcbiAgICB0aGlzLmNhcmRNZXRyaWNzQ29tcGFyaXNvbkRhdGEgPSBudWxsXHJcbiAgICB0aGlzLmdldENoZWNrbGlzdEZsYWdNZXRyaWNzQ29tcGFyaXNvbigpXHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcHgtMlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWJvcmRlciBwdC0yIGgtMTAwXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyID5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgZWxsaXBzZTEgYm9yZGVyLTAgcHgtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBkLWZsZXggYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZGNvdW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7KGNhcmRNZXRyaWNzRGF0YT8uZmxhZ0NhcmRzPy50b3RhbEZsYWcgPT09IDAgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmRNZXRyaWNzRGF0YT8uZmxhZ0NhcmRzPy50b3RhbEZsYWcpID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmRNZXRyaWNzRGF0YT8uZmxhZ0NhcmRzPy50b3RhbEZsYWc/LnRvTG9jYWxlU3RyaW5nKCdlbi1JTicpIDogJy0tJ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmR0ZXh0IG14LTMgbXQtM1wiPlRvdGFsIEZsYWdzPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0wIGgtMTAwcHggcHktMyBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTFcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXJcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRzdWJjb3VudCAgbXktMlwiPnt7KGNhcmRNZXRyaWNzRGF0YT8uZmxhZ0NhcmRzPy5xdWVzdGlvbkZsYWc/LmNvdW50ID09PSAwIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmRNZXRyaWNzRGF0YT8uZmxhZ0NhcmRzPy5xdWVzdGlvbkZsYWc/LmNvdW50KSA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmRNZXRyaWNzRGF0YT8uZmxhZ0NhcmRzPy5xdWVzdGlvbkZsYWc/LmNvdW50Py50b0xvY2FsZVN0cmluZygnZW4tSU4nKSA6ICctLSd9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkdGV4dCBcIj5RdWVzdGlvbiBGbGFnczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgIGNsYXNzPVwibXQtMlwiPjxzcGFuICpuZ0lmPVwiY2FyZE1ldHJpY3NDb21wYXJpc29uRGF0YT8uZmxhZ0NvbXBhcmlzb25DYXJkcz8ucXVlc3Rpb25Db21wYXJpc29uRmxhZz8uY29tcGFyaXNvbkRhdGFcIiBjbGFzcz1cIm10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJjYXJkTWV0cmljc0NvbXBhcmlzb25EYXRhPy5mbGFnQ29tcGFyaXNvbkNhcmRzPy5xdWVzdGlvbkNvbXBhcmlzb25GbGFnPy5Db21wYXJpc29uRmxhZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTNcIiBoZWlnaHQ9XCI4XCIgdmlld0JveD1cIjAgMCAxMyA4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEuODMyIDFMNy4wODIwMyA1Ljc1TDQuNTgyMDMgMy4yNUwwLjgzMjAzMSA3TTExLjgzMiAxSDguODMyMDNNMTEuODMyIDFWNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMzk4NTVcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiIWNhcmRNZXRyaWNzQ29tcGFyaXNvbkRhdGE/LmZsYWdDb21wYXJpc29uQ2FyZHM/LnF1ZXN0aW9uQ29tcGFyaXNvbkZsYWc/LkNvbXBhcmlzb25GbGFnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIiBjbGFzcz1cIm5nLXN0YXItaW5zZXJ0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzIzMjhfNDY1NClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMS41IDlMNi43NSA0LjI1TDQuMjUgNi43NUwwLjUgM00xMS41IDlIOC41TTExLjUgOVY2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNEOTJEMjBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMjMyOF80NjU0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwid2hpdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjxzcGFuIGNsYXNzPVwibXQtMiBtcy0yXCI+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBlcmNlbnQtdmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyhjYXJkTWV0cmljc0NvbXBhcmlzb25EYXRhPy5mbGFnQ29tcGFyaXNvbkNhcmRzPy5xdWVzdGlvbkNvbXBhcmlzb25GbGFnPy5jb21wYXJpc29uRGF0YSA9PT0gMCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkTWV0cmljc0NvbXBhcmlzb25EYXRhPy5mbGFnQ29tcGFyaXNvbkNhcmRzPy5xdWVzdGlvbkNvbXBhcmlzb25GbGFnPy5jb21wYXJpc29uRGF0YSkgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkTWV0cmljc0NvbXBhcmlzb25EYXRhPy5mbGFnQ29tcGFyaXNvbkNhcmRzPy5xdWVzdGlvbkNvbXBhcmlzb25GbGFnPy5jb21wYXJpc29uRGF0YT8udG9Mb2NhbGVTdHJpbmcoJ2VuLUlOJykgOiAnLS0nfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlPC9zcGFuPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3ZWVrLWZvbnRcIj4gdnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0IHt7ZGF0ZUNvbXBhcmlzb25UeXBlID09PSAnd2Vla2x5JyA/ICd3ZWVrJyA6ICdkYXknfX08L3NwYW4+PC9zcGFuPjwvZGl2PiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkc3ViY291bnQgbXktMlwiPnt7KGNhcmRNZXRyaWNzRGF0YT8uZmxhZ0NhcmRzPy5kZWxheUluU3VibWlzc2lvbj8uY291bnQgPT09IDAgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZE1ldHJpY3NEYXRhPy5mbGFnQ2FyZHM/LmRlbGF5SW5TdWJtaXNzaW9uPy5jb3VudCkgPyBjYXJkTWV0cmljc0RhdGE/LmZsYWdDYXJkcz8uZGVsYXlJblN1Ym1pc3Npb24/LmNvdW50Py50b0xvY2FsZVN0cmluZygnZW4tSU4nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICctLSd9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkdGV4dFwiPkRlbGF5IEluIFN1Ym1pc3Npb248L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICBjbGFzcz1cIm10LTJcIj48c3BhbiAqbmdJZj1cImNhcmRNZXRyaWNzQ29tcGFyaXNvbkRhdGE/LmZsYWdDb21wYXJpc29uQ2FyZHM/LmRlbGF5SW5TdWJtaXNzaW9uQ29tcGFyaXNvbkZsYWc/LmNvbXBhcmlzb25EYXRhXCIgY2xhc3M9XCJtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiY2FyZE1ldHJpY3NDb21wYXJpc29uRGF0YT8uZmxhZ0NvbXBhcmlzb25DYXJkcz8uZGVsYXlJblN1Ym1pc3Npb25Db21wYXJpc29uRmxhZz8uQ29tcGFyaXNvbkZsYWdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEzXCIgaGVpZ2h0PVwiOFwiIHZpZXdCb3g9XCIwIDAgMTMgOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExLjgzMiAxTDcuMDgyMDMgNS43NUw0LjU4MjAzIDMuMjVMMC44MzIwMzEgN00xMS44MzIgMUg4LjgzMjAzTTExLjgzMiAxVjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDM5ODU1XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIiFjYXJkTWV0cmljc0NvbXBhcmlzb25EYXRhPy5mbGFnQ29tcGFyaXNvbkNhcmRzPy5kZWxheUluU3VibWlzc2lvbkNvbXBhcmlzb25GbGFnPy5Db21wYXJpc29uRmxhZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCIgY2xhc3M9XCJuZy1zdGFyLWluc2VydGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8yMzI4XzQ2NTQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTEuNSA5TDYuNzUgNC4yNUw0LjI1IDYuNzVMMC41IDNNMTEuNSA5SDguNU0xMS41IDlWNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRDkyRDIwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzIzMjhfNDY1NFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cIndoaXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48c3BhbiBjbGFzcz1cIm10LTIgbXMtMlwiPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwZXJjZW50LXZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3soY2FyZE1ldHJpY3NDb21wYXJpc29uRGF0YT8uZmxhZ0NvbXBhcmlzb25DYXJkcz8uZGVsYXlJblN1Ym1pc3Npb25Db21wYXJpc29uRmxhZz8uY29tcGFyaXNvbkRhdGEgPT09IDAgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZE1ldHJpY3NDb21wYXJpc29uRGF0YT8uZmxhZ0NvbXBhcmlzb25DYXJkcz8uZGVsYXlJblN1Ym1pc3Npb25Db21wYXJpc29uRmxhZz8uY29tcGFyaXNvbkRhdGEpID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZE1ldHJpY3NDb21wYXJpc29uRGF0YT8uZmxhZ0NvbXBhcmlzb25DYXJkcz8uZGVsYXlJblN1Ym1pc3Npb25Db21wYXJpc29uRmxhZz8uY29tcGFyaXNvbkRhdGE/LnRvTG9jYWxlU3RyaW5nKCdlbi1JTicpIDogJy0tJ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJTwvc3Bhbj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwid2Vlay1mb250XCI+IHZzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCB7e2RhdGVDb21wYXJpc29uVHlwZSA9PT0gJ3dlZWtseScgPyAnd2VlaycgOiAnZGF5J319PC9zcGFuPjwvc3Bhbj48L2Rpdj4gICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXJcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRzdWJjb3VudCBteS0yXCI+e3soY2FyZE1ldHJpY3NEYXRhPy5mbGFnQ2FyZHM/LmRldGVjdGlvbkZsYWc/LmNvdW50ID09PSAwIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmRNZXRyaWNzRGF0YT8uZmxhZ0NhcmRzPy5kZXRlY3Rpb25GbGFnPy5jb3VudCkgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkTWV0cmljc0RhdGE/LmZsYWdDYXJkcz8uZGV0ZWN0aW9uRmxhZz8uY291bnQ/LnRvTG9jYWxlU3RyaW5nKCdlbi1JTicpIDogJy0tJ319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmR0ZXh0IFwiPkRldGVjdGlvbiBGbGFnczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCI+PHNwYW4gKm5nSWY9XCJjYXJkTWV0cmljc0NvbXBhcmlzb25EYXRhPy5mbGFnQ29tcGFyaXNvbkNhcmRzPy5kZXRlY3Rpb25Db21wYXJpc29uRmxhZz8uY29tcGFyaXNvbkRhdGFcIiBjbGFzcz1cIm10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJjYXJkTWV0cmljc0NvbXBhcmlzb25EYXRhPy5mbGFnQ29tcGFyaXNvbkNhcmRzPy5kZXRlY3Rpb25Db21wYXJpc29uRmxhZz8uQ29tcGFyaXNvbkZsYWdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEzXCIgaGVpZ2h0PVwiOFwiIHZpZXdCb3g9XCIwIDAgMTMgOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExLjgzMiAxTDcuMDgyMDMgNS43NUw0LjU4MjAzIDMuMjVMMC44MzIwMzEgN00xMS44MzIgMUg4LjgzMjAzTTExLjgzMiAxVjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDM5ODU1XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIiFjYXJkTWV0cmljc0NvbXBhcmlzb25EYXRhPy5mbGFnQ29tcGFyaXNvbkNhcmRzPy5kZXRlY3Rpb25Db21wYXJpc29uRmxhZz8uQ29tcGFyaXNvbkZsYWdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiIGNsYXNzPVwibmctc3Rhci1pbnNlcnRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMjMyOF80NjU0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTExLjUgOUw2Ljc1IDQuMjVMNC4yNSA2Ljc1TDAuNSAzTTExLjUgOUg4LjVNMTEuNSA5VjZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0Q5MkQyMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8yMzI4XzQ2NTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+PHNwYW4gY2xhc3M9XCJtdC0yIG1zLTJcIj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGVyY2VudC12YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7KGNhcmRNZXRyaWNzQ29tcGFyaXNvbkRhdGE/LmZsYWdDb21wYXJpc29uQ2FyZHM/LmRldGVjdGlvbkNvbXBhcmlzb25GbGFnPy5jb21wYXJpc29uRGF0YSA9PT0gMCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJkTWV0cmljc0NvbXBhcmlzb25EYXRhPy5mbGFnQ29tcGFyaXNvbkNhcmRzPy5kZXRlY3Rpb25Db21wYXJpc29uRmxhZz8uY29tcGFyaXNvbkRhdGEpID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZE1ldHJpY3NDb21wYXJpc29uRGF0YT8uZmxhZ0NvbXBhcmlzb25DYXJkcz8uZGV0ZWN0aW9uQ29tcGFyaXNvbkZsYWc/LmNvbXBhcmlzb25EYXRhPy50b0xvY2FsZVN0cmluZygnZW4tSU4nKSA6ICctLSd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICU8L3NwYW4+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIndlZWstZm9udFwiPiB2c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Qge3tkYXRlQ29tcGFyaXNvblR5cGUgPT09ICd3ZWVrbHknID8gJ3dlZWsnIDogJ2RheSd9fTwvc3Bhbj48L3NwYW4+PC9kaXY+ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtdC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtZW5kIGp1c3RpZnktY29udGVudC1jZW50ZXIgbWUtNVwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAgY2xhc3M9XCJtdC0xIGN1cnNvci1wb2ludGVyIGZzLTVcIiBbbmdDbGFzc109XCJkYXRlQ29tcGFyaXNvblR5cGUgPT09J2RhaWx5JyA/ICd0ZXh0LXByaW1hcnknIDonJ1wiIChjbGljayk9XCJkYXRlQ29tcGFyaXNvblZhbHVlQ2hhbmdlKCdkYWlseScpXCI+MUQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAgY2xhc3M9XCJtdC0xIGN1cnNvci1wb2ludGVyIGZzLTVcIiAgW25nQ2xhc3NdPVwiZGF0ZUNvbXBhcmlzb25UeXBlID09PSd3ZWVrbHknID8gJ3RleHQtcHJpbWFyeScgOicnXCIgIChjbGljayk9XCJkYXRlQ29tcGFyaXNvblZhbHVlQ2hhbmdlKCd3ZWVrbHknKVwiPjFXPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAgY2xhc3M9XCJtdC0xIGN1cnNvci1wb2ludGVyIGZzLTVcIiAgW25nQ2xhc3NdPVwiZGF0ZVR5cGUgPT09J21vbnRobHknID8gJ3RleHQtcHJpbWFyeScgOicnXCIgIChjbGljayk9XCJkYXRlVmFsdWUoJ21vbnRobHknKVwiPjFNPC9kaXY+IC0tPiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cIihjYXJkTWV0cmljc0FwaVN0YXRlIHwgYXN5bmMpID09PSAnbG9hZGluZycgfHwgKGNhcmRNZXRyaWNzQXBpU3RhdGUgfCBhc3luYykgPT09ICdpbml0aWFsJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyICBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAtLT5cclxuXHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtM1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwdC00IHB4LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FyZC1sYWJlbCBtYi0yIG1lLTNcIj5DaGVja2xpc3QgRmxhZ3MgPHNwYW4gKm5nSWY9XCJ0b3RhbEl0ZW1zXCIgY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5IFwiPnt7dG90YWxJdGVtc319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWw8L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc3ViIG1iLTJcIj4gQmFzZWQgb24ge3sgaGVhZGVyRGF0YT8uZGF0ZT8uc3RhcnREYXRlIHwgZGF0ZTogJ01NTSBkJyB9fSAtIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJEYXRhPy5kYXRlPy5lbmREYXRlIHwgZGF0ZTogJ01NTSBkLCB5JyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiKGZsYWdzVGFibGVBcGlTdGF0ZSB8IGFzeW5jKSA9PT0gJ2xvYWRlZCdcIiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciAgcG9zaXRpb24tcmVsYXRpdmUgbXktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gZm9vdGZhbGxzZWFyY2ggc3ZnLWljb24tMSBwb3NpdGlvbi1hYnNvbHV0ZSAgbXMtOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBvcGFjaXR5PVwiMC41XCIgeD1cIjE3LjAzNjVcIiB5PVwiMTUuMTIyM1wiIHdpZHRoPVwiOC4xNTU0NlwiIGhlaWdodD1cIjJcIiByeD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInJvdGF0ZSg0NSAxNy4wMzY1IDE1LjEyMjMpXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExIDE5QzYuNTU1NTYgMTkgMyAxNS40NDQ0IDMgMTFDMyA2LjU1NTU2IDYuNTU1NTYgMyAxMSAzQzE1LjQ0NDQgMyAxOSA2LjU1NTU2IDE5IDExQzE5IDE1LjQ0NDQgMTUuNDQ0NCAxOSAxMSAxOVpNMTEgNUM3LjUzMzMzIDUgNSA3LjUzMzMzIDUgMTFDNSAxNC40NjY3IDcuNTMzMzMgMTcgMTEgMTdDMTQuNDY2NyAxNyAxNyAxNC40NjY3IDE3IDExQzE3IDcuNTMzMzMgMTQuNDY2NyA1IDExIDVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtmb3JtQ29udHJvbF09XCJzZWFyY2hJbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIHBzLTE0IG1zLTQgbWUtNCBmb290ZmFsbHNlYXJjaFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0IFtmb3JtQ29udHJvbF09XCJmaWx0ZXJJbnB1dFwiIFtpZEZpZWxkXT1cIid2YWx1ZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVGaWVsZF09XCInbGFiZWwnXCIgW2RhdGFdPVwiZmlsdGVyVmFsdWVzXCIgY2xhc3M9XCJ3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImZsYWdzVGFibGVEYXRhPy5sZW5ndGhcIiBbZGlzYWJsZWRdPVwiKGZsYWdzVGFibGVBcGlTdGF0ZSB8IGFzeW5jKSA9PT0gJ2xvYWRpbmcnXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkZsYWdzVGFibGVFeHBvcnQoKVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1vdXRsaW5lIGJ0biBhbGlnbi1pdGVtcy1lbmQgdGV4dC1ub3dyYXAgaW52aGVhZGVyIG1zLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBFeHBvcnQgSWNvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE3LjUgMTIuNVYxNS44MzMzQzE3LjUgMTYuMjc1NCAxNy4zMjQ0IDE2LjY5OTMgMTcuMDExOCAxNy4wMTE4QzE2LjY5OTMgMTcuMzI0NCAxNi4yNzU0IDE3LjUgMTUuODMzMyAxNy41SDQuMTY2NjdDMy43MjQ2NCAxNy41IDMuMzAwNzIgMTcuMzI0NCAyLjk4ODE2IDE3LjAxMThDMi42NzU1OSAxNi42OTkzIDIuNSAxNi4yNzU0IDIuNSAxNS44MzMzVjEyLjVNMTQuMTY2NyA2LjY2NjY3TDEwIDIuNU0xMCAyLjVMNS44MzMzMyA2LjY2NjY3TTEwIDIuNVYxMi41XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0yXCI+PC9zcGFuPiBFeHBvcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGZsYWdzVGFibGVBcGlTdGF0ZSB8IGFzeW5jKSA9PT0gJ2xvYWRlZCdcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlIHB4LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGV4dC1ub3dyYXAgYm90dG9tLWJvcmRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ2NoZWNrTGlzdE5hbWUnKVwiPkNoZWNrbGlzdCBOYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ2NoZWNrTGlzdE5hbWUnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICdjaGVja0xpc3ROYW1lJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCdjaGVja0xpc3RUeXBlJylcIj5GbGFnIFR5cGU8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ2NoZWNrTGlzdFR5cGUnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICdjaGVja0xpc3RUeXBlJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ2Fzc2lnbmVkU3RvcmVzJylcIj5Bc3NpZ25lZCBTdG9yZXM8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ2Fzc2lnbmVkU3RvcmVzJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAnYXNzaWduZWRTdG9yZXMnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ2ZsYWdnZWRTdG9yZXMnKVwiPkZsYWdnZWQgU3RvcmVzPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRDb2x1bU5hbWUgPT09ICdmbGFnZ2VkU3RvcmVzJyAmJiBzb3J0RGlyZWN0aW9uID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAnZmxhZ2dlZFN0b3JlcycgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOiAyMDBweDtcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCdmbGFnQ291bnQnKVwiPkZsYWdnZWQ8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ2ZsYWdDb3VudCcgJiYgc29ydERpcmVjdGlvbiA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydENvbHVtTmFtZSA9PT0gJ2ZsYWdDb3VudCcgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCdDb21wbGlhbmNlJylcIj5Db21wbGlhbmNlICU8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ0NvbXBsaWFuY2UnICYmIHNvcnREaXJlY3Rpb24gPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICdDb21wbGlhbmNlJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkFjdGlvbnM8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gKm5nRm9yPVwibGV0IHN0b3JlIG9mIGNoZWNrbGlzdFBlcmZvcm1hbmNlXCIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBkYXRhIG9mIGZsYWdzVGFibGVEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN5bWJvbCBzeW1ib2wtMzVweCBzeW1ib2wtY2lyY2xlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ltYm9sLWxhYmVsIGJnLWxpZ2h0LXByaW1hcnkgdGV4dC1wcmltYXJ5IG1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGF0YT8uY2hlY2tMaXN0Q2hhciB8fCAnLS0nIH19IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj48c3BhbiAoY2xpY2spPVwidmlld0luRGV0YWlsKGRhdGE/LnNvdXJjZUNoZWNrTGlzdF9pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhYmxlLXRpdGxlLXByaW1hcnkgY3Vyc29yLXBvaW50ZXJcIj57e2RhdGE/LmNoZWNrTGlzdE5hbWUgPyBkYXRhPy5jaGVja0xpc3ROYW1lIDogJy0tJ319PC9zcGFuPiA8c3BhbiAqbmdJZj1cImRhdGE/LmNoZWNrTGlzdFR5cGUgIT09ICdjdXN0b20nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJteC0yXCI+4pyoPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkYXRhPy5jaGVja0xpc3RUeXBlID09PSAnY3VzdG9tJ1wiID5RdWVzdGlvbnM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAgKm5nSWY9XCJkYXRhPy5jaGVja0xpc3RUeXBlICE9PSAnY3VzdG9tJ1wiPkRldGVjdGlvbnM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGFibGUtdGl0bGVcIj57eyBkYXRhLmNoZWNrTGlzdFR5cGUgPT09ICdjdXN0b20nID8gKChkYXRhPy5hc3NpZ25lZFN0b3JlcyB8fCBkYXRhPy5hc3NpZ25lZFN0b3JlcyA9PT0gMCkgPyBkYXRhPy5hc3NpZ25lZFN0b3JlcyA6ICctLScpIDogKChkYXRhPy5hc3NpZ25lZFN0b3Jlc0FpIHx8IGRhdGE/LmFzc2lnbmVkU3RvcmVzQWkgPT09IDApID8gZGF0YT8uYXNzaWduZWRTdG9yZXNBaSA6ICctLScpfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0YWJsZS10aXRsZVwiPnt7IChkYXRhPy5mbGFnZ2VkU3RvcmVzIHx8IGRhdGE/LmZsYWdnZWRTdG9yZXMgPT09IDApID8gZGF0YT8uZmxhZ2dlZFN0b3JlcyA6ICctLScgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0YWJsZS10aXRsZS1wcmltYXJ5XCI+IFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJ2aWV3SW5EZXRhaWwoZGF0YT8uc291cmNlQ2hlY2tMaXN0X2lkKVwiPnt7KGRhdGE/LmZsYWdDb3VudCB8fCBkYXRhPy5mbGFnQ291bnQgPT09IDApID8gZGF0YT8uZmxhZ0NvdW50Py50b0xvY2FsZVN0cmluZygnZW4tSU4nKSA6ICctLSd9fSA8L3NwYW4+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0IG14LTNcIiAqbmdJZj1cImRhdGE/LmNoZWNrTGlzdFR5cGUgPT09ICdjdXN0b20nXCIgPlF1ZXN0aW9uczwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtZGVmYXVsdCBteC0zXCIgKm5nSWY9XCJkYXRhPy5jaGVja0xpc3RUeXBlICE9PSAnY3VzdG9tJ1wiPkRldGVjdGlvbnM8L3NwYW4+ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhPy5jaGVja0xpc3RUeXBlID09PSAnY3VzdG9tJ1wiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJmaWx0ZXJJbnB1dC52YWx1ZSA9PT0gJ2FsbCcgfHwgZmlsdGVySW5wdXQudmFsdWUgPT09ICdxdWVzdGlvbidcIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJ2aWV3SW5EZXRhaWwoZGF0YT8uc291cmNlQ2hlY2tMaXN0X2lkLCAncXVlc3Rpb24nKVwiID57eyhkYXRhPy5jdXN0b21RdWVzdGlvbkZsYWdDb3VudCB8fCBkYXRhPy5jdXN0b21RdWVzdGlvbkZsYWdDb3VudCA9PT0gMCkgPyBkYXRhPy5jdXN0b21RdWVzdGlvbkZsYWdDb3VudD8udG9Mb2NhbGVTdHJpbmcoJ2VuLUlOJykgOiAnLS0nfX0gPC9zcGFuPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LWRlZmF1bHQgbXgtM1wiID5RdWVzdGlvbnM8L3NwYW4+ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImZpbHRlcklucHV0LnZhbHVlID09PSAnYWxsJyB8fCBmaWx0ZXJJbnB1dC52YWx1ZSA9PT0gJ3RpbWUnXCIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInZpZXdJbkRldGFpbChkYXRhPy5zb3VyY2VDaGVja0xpc3RfaWQsICd0aW1lJylcIiA+e3soZGF0YT8uY3VzdG9tVGltZUZsYWdDb3VudCB8fCBkYXRhPy5jdXN0b21UaW1lRmxhZ0NvdW50ID09PSAwKSA/IGRhdGE/LmN1c3RvbVRpbWVGbGFnQ291bnQ/LnRvTG9jYWxlU3RyaW5nKCdlbi1JTicpIDogJy0tJ319IDwvc3Bhbj4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0IG14LTNcIiA+Tm90IFN1Ym1pdHRlZDwvc3Bhbj4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZGF0YT8uY2hlY2tMaXN0VHlwZSAhPT0gJ2N1c3RvbSdcIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwidmlld0luRGV0YWlsKGRhdGE/LnNvdXJjZUNoZWNrTGlzdF9pZClcIiA+e3soZGF0YT8uZmxhZ0NvdW50IHx8IGRhdGE/LmZsYWdDb3VudCA9PT0gMCkgPyBkYXRhPy5mbGFnQ291bnQ/LnRvTG9jYWxlU3RyaW5nKCdlbi1JTicpIDogJy0tJ319IDwvc3Bhbj4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0IG14LTNcIiA+RGV0ZWN0aW9uczwvc3Bhbj4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGFibGUtdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC01cHggdy0xMDAgYmctbGlnaHQgbXQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHJvbGU9XCJwcm9ncmVzc2JhclwiIGFyaWEtdmFsdWVtaW49XCIyMFwiIGFyaWEtdmFsdWVtYXg9XCIxMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJiZy1wcmltYXJ5IHJvdW5kZWQgaC01cHggXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJkYXRhPy5jb21wbGlhbmNlUmF0ZSArICclJ1wiPiA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1lbmQgdGFibGUtdGl0bGVcIj48c3BhbiBjbGFzcz1cIm15LTEgbXgtMSB0ZXh0LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhPy5jb21wbGlhbmNlUmF0ZT8udG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICctLSd9fSU8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJ2aWV3SW5EZXRhaWwoZGF0YT8uc291cmNlQ2hlY2tMaXN0X2lkKVwiIGNsYXNzPVwidGFibGUtdGl0bGUtcHJpbWFyeSBjdXJzb3ItcG9pbnRlclwiPlZpZXc8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIoZmxhZ3NUYWJsZUFwaVN0YXRlIHwgYXN5bmMpID09PSAnbG9hZGVkJyAmJiBmbGFnc1RhYmxlRGF0YT8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcGFnaW5hdGlvbiBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZVwiIFtjdXJyZW50UGFnZV09XCJjdXJyZW50UGFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG90YWxJdGVtc109XCJ0b3RhbEl0ZW1zXCIgW3BhZ2luYXRpb25TaXplc109XCJwYWdpbmF0aW9uU2l6ZXNcIiBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiPjwvbGliLXBhZ2luYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihmbGFnc1RhYmxlQXBpU3RhdGUgfCBhc3luYykgPT09ICdsb2FkaW5nJyB8fCAoZmxhZ3NUYWJsZUFwaVN0YXRlIHwgYXN5bmMpID09PSAnaW5pdGlhbCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGZsYWdzVGFibGVBcGlTdGF0ZSB8IGFzeW5jKSA9PT0gJ2xvYWRlZCcgJiYgIWZsYWdzVGFibGVEYXRhPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMiBteS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNhcmQtYm9keSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltZy1zcmNcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGExLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhbWFpbnRleHQgbXQtM1wiPk5vIGRhdGEgZm91bmQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YXN1YnRleHRcIj5UaGVyZSBpcyBubyByZXN1bHQgZm9yIEZsYWdzIFRhYmxlPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+IFxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==