tango-app-ui-ticket-user 3.0.53-dev → 3.0.55-dev

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 (34) hide show
  1. package/esm2022/lib/components/audit-management/audit-management.component.mjs +209 -0
  2. package/esm2022/lib/components/audit-workspace/audit-workspace.component.mjs +460 -0
  3. package/esm2022/lib/components/contact-details/contact-details.component.mjs +3 -3
  4. package/esm2022/lib/components/dropdown/dropdown.component.mjs +117 -0
  5. package/esm2022/lib/components/edge-cameraview/edge-cameraview.component.mjs +3 -3
  6. package/esm2022/lib/components/edgeapp-log/edgeapp-log.component.mjs +3 -3
  7. package/esm2022/lib/components/edit-details/edit-details.component.mjs +3 -3
  8. package/esm2022/lib/components/infratickets/infratickets.component.mjs +52 -16
  9. package/esm2022/lib/components/installation/installation.component.mjs +3 -3
  10. package/esm2022/lib/components/store-activity/store-activity.component.mjs +3 -3
  11. package/esm2022/lib/components/store-info/store-info.component.mjs +3 -3
  12. package/esm2022/lib/components/takeremote/takeremote.component.mjs +3 -3
  13. package/esm2022/lib/components/tango-ticket-users/tango-ticket-users.component.mjs +6 -5
  14. package/esm2022/lib/components/tickets/tickets.component.mjs +3 -3
  15. package/esm2022/lib/components/viewhistory/viewhistory.component.mjs +78 -0
  16. package/esm2022/lib/route-wrappers/edge-wrapper.module.mjs +4 -4
  17. package/esm2022/lib/services/data.service.mjs +3 -3
  18. package/esm2022/lib/services/excel.service.mjs +3 -3
  19. package/esm2022/lib/services/ticket-infra.service.mjs +45 -4
  20. package/esm2022/lib/tango-ticket-users-routing.module.mjs +6 -6
  21. package/esm2022/lib/tango-ticket-users.module.mjs +11 -7
  22. package/fesm2022/{tango-app-ui-ticket-user-edge-wrapper.module-fMqNK7aH.mjs → tango-app-ui-ticket-user-edge-wrapper.module-CFDk0tvS.mjs} +5 -5
  23. package/fesm2022/{tango-app-ui-ticket-user-edge-wrapper.module-fMqNK7aH.mjs.map → tango-app-ui-ticket-user-edge-wrapper.module-CFDk0tvS.mjs.map} +1 -1
  24. package/fesm2022/tango-app-ui-ticket-user.mjs +979 -80
  25. package/fesm2022/tango-app-ui-ticket-user.mjs.map +1 -1
  26. package/lib/components/audit-management/audit-management.component.d.ts +70 -0
  27. package/lib/components/audit-workspace/audit-workspace.component.d.ts +97 -0
  28. package/lib/components/dropdown/dropdown.component.d.ts +29 -0
  29. package/lib/components/infratickets/infratickets.component.d.ts +10 -1
  30. package/lib/components/tango-ticket-users/tango-ticket-users.component.d.ts +1 -0
  31. package/lib/components/viewhistory/viewhistory.component.d.ts +29 -0
  32. package/lib/services/ticket-infra.service.d.ts +13 -0
  33. package/lib/tango-ticket-users.module.d.ts +11 -7
  34. package/package.json +1 -1
@@ -0,0 +1,460 @@
1
+ import { Component, HostListener } from '@angular/core';
2
+ import { Subject, takeUntil } from 'rxjs';
3
+ import dayjs from 'dayjs';
4
+ import { ViewhistoryComponent } from '../viewhistory/viewhistory.component';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/router";
7
+ import * as i2 from "../../services/data.service";
8
+ import * as i3 from "tango-app-ui-shared";
9
+ import * as i4 from "../../services/ticket-infra.service";
10
+ import * as i5 from "tango-app-ui-global";
11
+ import * as i6 from "../../services/excel.service";
12
+ import * as i7 from "@ng-bootstrap/ng-bootstrap";
13
+ import * as i8 from "tango-app-ui-auth";
14
+ import * as i9 from "@angular/common";
15
+ import * as i10 from "@angular/forms";
16
+ import * as i11 from "ngx-daterangepicker-material";
17
+ import * as i12 from "../audit-management/audit-management.component";
18
+ export class AuditWorkspaceComponent {
19
+ route;
20
+ router;
21
+ cd;
22
+ dataService;
23
+ toastService;
24
+ Service;
25
+ dataservice;
26
+ gs;
27
+ excel;
28
+ modalservice;
29
+ layout;
30
+ service;
31
+ headerFilter;
32
+ userData;
33
+ user;
34
+ clientId;
35
+ dataObject;
36
+ historyLoading = true;
37
+ historyNodata = false;
38
+ isOpen;
39
+ dropDown = false;
40
+ searchWorkspace;
41
+ offset = 1;
42
+ sortBy = -1;
43
+ limit = 10;
44
+ sortColumName;
45
+ searchHistory;
46
+ ExportItems = ['Overall report', 'Hourly Report'];
47
+ workHistorydata = [];
48
+ destroy$ = new Subject();
49
+ searchAudit = '';
50
+ filterByStoreId = [];
51
+ filterByStatus = [];
52
+ filterByType = [];
53
+ selectedClient = '';
54
+ selectedExportIssue;
55
+ selectedIssue;
56
+ userId = '';
57
+ selectedType = 'traffic';
58
+ filterStores = [];
59
+ workHistoryTable;
60
+ dayjs = dayjs;
61
+ unsubscribe = [];
62
+ isCustomDate = (m) => {
63
+ const isValidDate = m > this.dayjs();
64
+ return isValidDate ? 'invalid-date' : false;
65
+ };
66
+ selectedDateRange = {};
67
+ selectedFilters = {
68
+ client: null,
69
+ clientName: null,
70
+ clients: [],
71
+ store: null,
72
+ stores: [],
73
+ date: null,
74
+ };
75
+ users;
76
+ loaded;
77
+ fileType = 'fileDate';
78
+ storeList;
79
+ startDate;
80
+ endDate;
81
+ totalCount;
82
+ paginationSizes = [10, 20, 30];
83
+ constructor(route, router, cd, dataService, toastService, Service, dataservice, gs, excel, modalservice, layout, service) {
84
+ this.route = route;
85
+ this.router = router;
86
+ this.cd = cd;
87
+ this.dataService = dataService;
88
+ this.toastService = toastService;
89
+ this.Service = Service;
90
+ this.dataservice = dataservice;
91
+ this.gs = gs;
92
+ this.excel = excel;
93
+ this.modalservice = modalservice;
94
+ this.layout = layout;
95
+ this.service = service;
96
+ }
97
+ onClick(event) {
98
+ const target = event.target;
99
+ if (!target.closest(".dropdown")) {
100
+ this.dropDown = false;
101
+ }
102
+ }
103
+ ngOnInit() {
104
+ this.datepicker();
105
+ this.userData = 'Workspace';
106
+ this.gs.dataRangeValue.pipe(takeUntil(this.destroy$)).subscribe((data) => {
107
+ if (data != null) {
108
+ this.user = JSON.parse(localStorage.getItem('user-info') || "");
109
+ this.headerFilter = data;
110
+ this.clientId = this.headerFilter?.clients;
111
+ if (this.userData === 'History') {
112
+ this.workHistory();
113
+ this.getstoreList();
114
+ }
115
+ if (this.user?.userDetails) {
116
+ this.userId = this.user?.userDetails;
117
+ this.userData = 'History';
118
+ }
119
+ else {
120
+ this.userId = this.user?._id;
121
+ }
122
+ }
123
+ });
124
+ }
125
+ datepicker() {
126
+ if ("user-info" in localStorage) {
127
+ const users = JSON.parse(localStorage.getItem("user-info") || "{}");
128
+ this.users = users;
129
+ }
130
+ if ("header-filters" in localStorage) {
131
+ const headerFilters = JSON.parse(localStorage.getItem("header-filters") || "{}");
132
+ this.selectedFilters.client = this.users.clientId;
133
+ this.selectedFilters.clients = [this.users.clientId];
134
+ this.selectedFilters.date = headerFilters.date;
135
+ this.selectedDateRange = {
136
+ // startDate:this.dayjs( headerFilters?.date.startDate, "YYYY-MM-DD").format('DD-MM-YYYY'),
137
+ // endDate: this.dayjs( headerFilters?.date.endDate, "YYYY-MM-DD").format('DD-MM-YYYY'),
138
+ startDate: this.dayjs().subtract(1, 'day'),
139
+ endDate: this.dayjs().subtract(1, 'day')
140
+ };
141
+ this.startDate = this.dayjs(this.selectedDateRange?.startDate).format('YYYY-MM-DD');
142
+ this.endDate = this.dayjs(this.selectedDateRange?.endDate).format('YYYY-MM-DD');
143
+ // localStorage.setItem(
144
+ // "header-filters",
145
+ // JSON.stringify(this.selectedFilters)
146
+ // );
147
+ // this.gs.dataRangeValue.next(this.selectedFilters);
148
+ }
149
+ else {
150
+ this.selectedFilters.client = this.users.clientId;
151
+ this.selectedFilters.clients = [this.users.clientId];
152
+ this.selectedDateRange = {
153
+ startDate: this.dayjs().format('DD-MM-YYYY'),
154
+ endDate: this.dayjs().format('DD-MM-YYYY'),
155
+ };
156
+ var datetime = {
157
+ startDate: this.dayjs().format('YYYY-MM-DD'),
158
+ endDate: this.dayjs().format('YYYY-MM-DD'),
159
+ };
160
+ this.selectedFilters.date = datetime;
161
+ // localStorage.setItem(
162
+ // "header-filters",
163
+ // JSON.stringify(this.selectedFilters)
164
+ // );
165
+ // this.gs.dataRangeValue.next(this.selectedFilters);
166
+ }
167
+ }
168
+ ranges = {
169
+ Today: [this.dayjs(), this.dayjs()],
170
+ Yesterday: [
171
+ this.dayjs().subtract(1, "days"),
172
+ this.dayjs().subtract(1, "days"),
173
+ ],
174
+ "This Week": [this.dayjs().subtract(6, "days"), this.dayjs()],
175
+ "Last Week": [
176
+ this.dayjs().subtract(14, "days").startOf("days"),
177
+ this.dayjs().subtract(8, "days").endOf("days"),
178
+ ],
179
+ "This Month": [this.dayjs().startOf("month"), this.dayjs().endOf("month")],
180
+ "Last Month": [
181
+ this.dayjs().subtract(1, "month").startOf("month"),
182
+ this.dayjs().subtract(1, "month").endOf("month"),
183
+ ],
184
+ };
185
+ onDateRangeChanged(event) {
186
+ // this.pickerDirective.open();
187
+ if (event.startDate != null && event.endDate != null) {
188
+ // this.pickerDirective.open();
189
+ this.selectedDateRange.startDate = dayjs(event.startDate?.toISOString()).utc().format('MM-DD-YYYY');
190
+ this.selectedDateRange.endDate = dayjs(event.endDate?.toISOString()).utc().format('MM-DD-YYYY');
191
+ }
192
+ else {
193
+ if ('filters' in localStorage) {
194
+ var setdate = JSON.parse(localStorage.getItem('filters') || '{}');
195
+ this.selectedDateRange.startDate = dayjs(setdate.startDate).format('MM-DD-YYYY');
196
+ this.selectedDateRange.endDate = dayjs(setdate.endDate).format('MM-DD-YYYY');
197
+ }
198
+ }
199
+ this.loaded = false;
200
+ localStorage.setItem('filters', JSON.stringify(this.selectedDateRange));
201
+ var setdate = JSON.parse(localStorage.getItem('filters') || '{}');
202
+ // this.getstoreapi()
203
+ // this.selectedItems = this.getstorevalue
204
+ }
205
+ onStartDateChange(event) {
206
+ if (this.dayjs(event.startDate).isValid()) {
207
+ this.isCustomDate = (m) => {
208
+ const isValidDate = m > this.dayjs() || m > this.dayjs(event.startDate.add(90, "days"));
209
+ return isValidDate ? "invalid-date" : false;
210
+ };
211
+ }
212
+ }
213
+ datechange(event) {
214
+ if (event && event.startDate && event.endDate) {
215
+ if (this.dayjs(event.startDate).isValid() &&
216
+ this.dayjs(event.endDate).isValid()) {
217
+ this.selectedDateRange.startDate = event.startDate;
218
+ this.selectedDateRange.endDate = event.endDate;
219
+ var datetime = {
220
+ startDate: this.dayjs(event.startDate, "DD-MM-YYYY").format('MM-DD-YYYY'),
221
+ endDate: this.dayjs(event.endDate, "DD-MM-YYYY").format('MM-DD-YYYY'),
222
+ };
223
+ this.selectedFilters.date = datetime;
224
+ this.startDate = this.dayjs(this.selectedFilters?.date?.startDate).format('YYYY-MM-DD');
225
+ this.endDate = this.dayjs(this.selectedFilters?.date?.endDate).format('YYYY-MM-DD');
226
+ this.workHistory();
227
+ }
228
+ }
229
+ else {
230
+ // const headerFilters: any = JSON.parse(
231
+ // localStorage.getItem("header-filters") || "{}"
232
+ // );
233
+ // this.selectedFilters.date = headerFilters.date;
234
+ }
235
+ this.selectedFilters.client = this.users.clientId;
236
+ this.selectedFilters.clients = [this.users.clientId];
237
+ this.selectedFilters.date = this.selectedFilters.date;
238
+ // this.gs.dataRangeValue.next(this.selectedFilters);
239
+ // localStorage.setItem(
240
+ // "header-filters",
241
+ // JSON.stringify(this.selectedFilters)
242
+ // );
243
+ }
244
+ ngOnDestroy() {
245
+ this.unsubscribe.forEach((sb) => sb.unsubscribe());
246
+ this.destroy$.next(true);
247
+ this.destroy$.complete();
248
+ }
249
+ openDropdown(event) {
250
+ event.stopPropagation();
251
+ this.dropDown = !this.dropDown;
252
+ }
253
+ userValue(data) {
254
+ this.userData = data;
255
+ if (this.userData == "History") {
256
+ this.dataObject = this.dataObject = [
257
+ { Description: 'File Date', type: 'single', Issues: [{ id: 'auditDate', text: "Audit Date" }, { id: 'auditedDate', text: "Audited Date" }] },
258
+ { Description: 'Store Id', Issues: [] },
259
+ { Description: 'Type', Issues: [{ id: 'audit', text: "Audit" }, { id: 're-audit', text: "Re-Audit" }] },
260
+ { Description: 'Status', Issues: [{ id: 'inprogress', text: "In Progress" }, { id: 'drafted', text: "Draft" }, { id: 'completed', text: "Closed" }, { id: 'skipped', text: "Skip" }] },
261
+ ];
262
+ this.getstoreList();
263
+ this.workHistory();
264
+ }
265
+ }
266
+ selectType(type) {
267
+ this.selectedType = type;
268
+ }
269
+ workHistory() {
270
+ let data = {
271
+ userId: this.userId,
272
+ fromDate: this.startDate,
273
+ toDate: this.endDate,
274
+ fileType: this.fileType ? this.fileType : '',
275
+ filterByStatus: this.filterByStatus ? this.filterByStatus : [],
276
+ filterByStoreId: this.filterByStoreId ? this.filterByStoreId : [],
277
+ filterByType: this.filterByType ? this.filterByType : [],
278
+ searchValue: this.searchHistory,
279
+ limit: this.limit,
280
+ offset: this.offset,
281
+ sortColumName: this.sortColumName,
282
+ sortBy: this.sortBy,
283
+ isExport: false
284
+ };
285
+ this.historyLoading = true;
286
+ this.historyNodata = false;
287
+ this.Service.auditHistory(data).pipe(takeUntil(this.destroy$)).subscribe({
288
+ next: (res) => {
289
+ if (res && res?.code == 200) {
290
+ this.totalCount = res?.data?.count;
291
+ this.workHistorydata = res.data.result;
292
+ if (this.totalCount < 10) {
293
+ this.paginationSizes = [this.totalCount];
294
+ }
295
+ else {
296
+ this.paginationSizes = [10, 20, 30];
297
+ }
298
+ this.historyLoading = false;
299
+ this.historyNodata = false;
300
+ }
301
+ else {
302
+ this.historyNodata = true;
303
+ this.historyLoading = false;
304
+ }
305
+ this.cd.detectChanges();
306
+ },
307
+ error: (err) => {
308
+ this.historyNodata = true;
309
+ this.historyLoading = false;
310
+ },
311
+ complete() { },
312
+ });
313
+ }
314
+ setLimit() {
315
+ if (this.totalCount < 10) {
316
+ return this.totalCount;
317
+ }
318
+ else {
319
+ return this.limit;
320
+ }
321
+ }
322
+ getstoreList() {
323
+ let data = {
324
+ "clientId": this.clientId
325
+ };
326
+ this.Service.getstoreList(data).pipe(takeUntil(this.destroy$)).subscribe({
327
+ next: (res) => {
328
+ if (res && res?.code === 200) {
329
+ this.storeList = res?.data?.result;
330
+ const issues = this.storeList?.map((obj) => ({ text: obj.storeName, id: obj.storeId }));
331
+ const uniqueIssues = [];
332
+ const Clients = new Set();
333
+ issues.forEach((issue) => {
334
+ if (!Clients.has(issue.text)) {
335
+ Clients.add(issue.text);
336
+ uniqueIssues.push(issue);
337
+ }
338
+ });
339
+ const filtredObject = (this.dataObject.find((obj) => obj.Description === "Store Id"));
340
+ filtredObject.Issues = uniqueIssues;
341
+ }
342
+ },
343
+ error: (err) => {
344
+ },
345
+ complete() { }
346
+ });
347
+ }
348
+ searchAudits(event) {
349
+ this.searchAudit = event.target.value;
350
+ }
351
+ exportAuditAsXlsx() {
352
+ this.Service.export(this.offset, 10000, this.searchAudit, true).subscribe({
353
+ next: (res) => {
354
+ if (res) {
355
+ this.dataService.saveAsExcelFile(res, "workspace");
356
+ }
357
+ this.cd.detectChanges();
358
+ },
359
+ error: (err) => {
360
+ },
361
+ complete() { }
362
+ });
363
+ }
364
+ onPageChange(pageOffset) {
365
+ this.offset = pageOffset;
366
+ this.workHistory();
367
+ }
368
+ onPageSizeChange(pageSize) {
369
+ this.limit = pageSize;
370
+ this.offset = 1;
371
+ this.workHistory();
372
+ }
373
+ ExportHistoryasXlsx() {
374
+ let exportData = {
375
+ userId: this.userId,
376
+ fromDate: this.startDate,
377
+ toDate: this.endDate,
378
+ fileType: this.fileType ? this.fileType : '',
379
+ filterByStatus: this.filterByStatus ? this.filterByStatus : [],
380
+ filterByStoreId: this.filterByStoreId ? this.filterByStoreId : [],
381
+ filterByType: this.filterByType ? this.filterByType : [],
382
+ searchValue: this.searchHistory,
383
+ limit: 10000,
384
+ offset: this.offset,
385
+ sortColumName: this.sortColumName,
386
+ sortBy: this.sortBy,
387
+ isExport: true
388
+ };
389
+ this.Service
390
+ .workHistoryExport(exportData)
391
+ .pipe(takeUntil(this.destroy$))
392
+ .subscribe({
393
+ next: (res) => {
394
+ if (res) {
395
+ this.dataService.saveAsExcelFile(res, "History");
396
+ }
397
+ this.cd.detectChanges();
398
+ },
399
+ error: (err) => {
400
+ this.historyNodata = true;
401
+ this.historyLoading = false;
402
+ },
403
+ complete() { },
404
+ });
405
+ }
406
+ sortData(value) {
407
+ this.sortColumName = value;
408
+ this.sortBy *= -1;
409
+ this.workHistory();
410
+ }
411
+ receiveData(data) {
412
+ this.filterByStoreId = data
413
+ .find((obj) => obj.Description === "Store Id")
414
+ ?.Issues.map((item) => item?.id);
415
+ this.filterByStatus = data.find((obj) => obj.Description === "Status")?.Issues?.id;
416
+ this.fileType = data.find((obj) => obj.Description === "File Date")?.Issues?.id;
417
+ this.filterByType = data
418
+ .find((obj) => obj.Description === "Type")
419
+ ?.Issues.map((item) => item?.id);
420
+ this.workHistory();
421
+ }
422
+ searchHistoryTable() {
423
+ this.workHistory();
424
+ }
425
+ selectExportItem(value) {
426
+ this.selectedExportIssue = value;
427
+ this.exportAuditAsXlsx();
428
+ }
429
+ viewHistory(data) {
430
+ const modalRef = this.modalservice.open(ViewhistoryComponent, { centered: true, size: 'lg' });
431
+ modalRef.componentInstance.data = data;
432
+ }
433
+ applyFilters(event) {
434
+ if (event?.length) {
435
+ event.forEach((element) => {
436
+ if (element.Description === "Status") {
437
+ this.selectedIssue = element.Issues.map((val) => val?.id);
438
+ }
439
+ });
440
+ }
441
+ if (this.selectedIssue.length === 6)
442
+ this.selectedIssue = [];
443
+ }
444
+ backtoZone() {
445
+ this.selectedClient = false;
446
+ }
447
+ fromChild(event) {
448
+ this.selectedClient = event;
449
+ }
450
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditWorkspaceComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i0.ChangeDetectorRef }, { token: i2.DataService }, { token: i3.ToastService }, { token: i4.TicketsService }, { token: i2.DataService }, { token: i5.GlobalStateService }, { token: i6.ExcelService }, { token: i7.NgbModal }, { token: i5.LayoutService }, { token: i8.AuthService }], target: i0.ɵɵFactoryTarget.Component });
451
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AuditWorkspaceComponent, selector: "lib-audit-workspace", host: { listeners: { "document:click": "onClick($event)" } }, ngImport: i0, template: "<div class=\"card\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2\">Audit Tickets</span>\r\n </h3>\r\n <div *ngIf=\"userData ==='Workspace'\" 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 svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" 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\"></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 type=\"text\" class=\"form-control ps-14 me-2\" \r\n placeholder=\"Search\" autocomplete=\"off\" (change)=\"searchAudits($event)\"/>\r\n\r\n <button (click)=\"exportAuditAsXlsx()\" class=\"btn btn-outline p-3 text-nowrap border border-gray ms-2 me-2\" type=\"button\"><span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span> Export</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"userData ==='History'\" 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 svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" 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\"></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 type=\"text\" class=\"form-control ps-14 me-2\" \r\n placeholder=\"Search\" autocomplete=\"off\" [(ngModel)]=\"searchHistory\" (input)=\"searchHistoryTable()\" />\r\n\r\n <div class=\"d-flex align-items-center position-relative my-1 me-3\" style=\"width: 335px !important\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <!-- <div class=\"input-group input-group-solid date dropdown-item \" id=\"kt_datetimepicker_3\" > -->\r\n <ng-container>\r\n <input class=\"fx-date-range form-control ps-14\" style=\"min-width: 260px !important;\" type=\"text\" matInput ngxDaterangepickerMd [drops]=\"'down'\"\r\n [opens]=\"'right'\" [ranges]=\"ranges\" [showCustomRangeLabel]=\"true\" [alwaysShowCalendars]=\"false\"\r\n [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"true\" autocomplete=\"off\" [(ngModel)]=\"selectedDateRange\" (startDateChanged)=\"onStartDateChange($event)\" [isCustomDate]=\"isCustomDate\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n (datesUpdated)=\"datechange($event)\" name=\"daterange\" [readonly]=\"true\" />\r\n </ng-container>\r\n </div>\r\n\r\n <lib-filters *ngIf=\"storeList\" [dataObject]=\"dataObject\" (appliedFilters)=\"receiveData($event)\" ></lib-filters>\r\n\r\n <div *ngIf=\"!historyNodata\" class=\"position-relative\">\r\n <button type=\"button\" (click)=\"openDropdown($event)\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\"><span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n <span class=\"ms-2\">Export</span> </button>\r\n <div *ngIf=\"dropDown\" class=\"card py-1 w-200px position-absolute top-50px end-0\">\r\n <ul *ngFor=\"let item of ExportItems\" class=\"list-unstyled\">\r\n <li [ngClass]=\"this.selectedExportIssue === item ? 'active' : ''\" class=\"camera px-5 items fw-semibold cursor-pointer py-2\" (click)=\"selectExportItem(item)\">{{item}}</li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-body py-2\">\r\n <div class=\"d-flex overflow-auto h-55px\">\r\n <ul class=\"nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder flex-nowrap\">\r\n <li (click)=\"userValue('Workspace')\" class=\"nav-item cursor-pointer\"><a [ngClass]=\"userData ==='Workspace' ? 'active' :''\"\r\n class=\"nav-link text-active-primary me-6\">Workspace</a>\r\n </li>\r\n <li (click)=\"userValue('History')\" class=\"nav-item cursor-pointer\"><a [ngClass]=\"userData ==='History' ? 'active' :''\"\r\n class=\"nav-link text-active-primary me-6\">History</a></li>\r\n </ul>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between mt-5\"><div class=\"d-flex\">\r\n <div (click)=\"selectType('traffic')\" [ngClass]=\"selectedType === 'traffic' ? 'active text-active-primary' : 'textSub'\" class=\"pe-5 py-3 rounded-3 cursor-pointer fw-semibold\r\n fw-semibold \">Traffic</div>\r\n <div (click)=\"selectType('zone')\" [ngClass]=\"selectedType === 'zone' ? 'active text-primary' : 'textSub'\" class=\"px-5 py-3 rounded-3 cursor-pointer fw-semibold\r\n fw-semibold\">Zone</div></div>\r\n <div *ngIf=\"selectedClient\" (click)=\"backtoZone()\" class=\"btn btn-outline px-4 py-3 cursor-pointer\">\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\r\n <path d=\"M12.8327 6.99935H1.16602M1.16602 6.99935L6.99935 12.8327M1.16602 6.99935L6.99935 1.16602\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg> \r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"userData === 'History' && selectedType === 'traffic'\">\r\n <div *ngIf=\"!historyLoading && !historyNodata\" class=\"pt-10\">\r\n <div class=\"table-responsive\"> \r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('fileDate')\">\r\n File Date\r\n <span *ngIf=\"sortColumName === 'fileDate' && sortBy !== 1 || sortColumName !== 'fileDate' \">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'fileDate' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('clientName')\">\r\n Client Name\r\n <span *ngIf=\"sortColumName === 'clientName' && sortBy !== 1 || sortColumName !== 'clientName' \">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'clientName' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('clientId')\">\r\n Client Id\r\n <span *ngIf=\"sortColumName === 'clientId' && sortBy !== 1 || sortColumName !== 'clientId' \">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'clientId' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('storeName')\">\r\n Store Name\r\n <span *ngIf=\"sortColumName === 'storeName' && sortBy !== 1 || sortColumName !== 'storeName'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'storeName' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('storeId')\">\r\n Store Id\r\n <span *ngIf=\"sortColumName === 'storeId' && sortBy !== 1 || sortColumName !== 'storeId'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'storeId' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('type')\">Type\r\n <span *ngIf=\"sortColumName === 'type' && sortBy !== 1 || sortColumName !== 'type'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'type' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('BC')\"></div>\r\n BC\r\n <span *ngIf=\"sortColumName === 'BC' && sortBy !== 1 || sortColumName !== 'BC'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'BC' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('AC')\"></div>\r\n AC\r\n <span *ngIf=\"sortColumName === 'AC' && sortBy !== 1 || sortColumName !== 'AC'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'AC' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('accuracy')\">Accuracy\r\n <span *ngIf=\"sortColumName === 'accuracy' && sortBy !== 1 || sortColumName !== 'accuracy'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'accuracy' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('starttime')\">Start Time\r\n <span *ngIf=\"sortColumName === 'starttime' && sortBy !== 1 || sortColumName !== 'starttime'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'starttime' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('endtime')\">End Time\r\n <span *ngIf=\"sortColumName === 'endtime' && sortBy !== 1 || sortColumName !== 'endtime'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'endtime' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('timespent')\">Time Spent\r\n <span *ngIf=\"sortColumName === 'timespent' && sortBy !== 1 || sortColumName !== 'timespent'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'timespent' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('createdAt')\">Created At\r\n <span *ngIf=\"sortColumName === 'createdAt' && sortBy !== 1 || sortColumName !== 'createdAt'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'createdAt' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div>\r\n </th>\r\n <th>Status\r\n </th>\r\n <th>Actions\r\n \r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let history of workHistorydata; let i = index\">\r\n <td>{{history?.fileDate ? history?.fileDate : '--'}}</td>\r\n <td>{{history?.clientName ? history?.clientName :'--'}}</td>\r\n <td>{{history?.clientId ? history?.clientId :'--'}}</td>\r\n <td>{{history?.storeName ? history?.storeName : '--'}}</td>\r\n <td>{{history?.storeId ? history?.storeId : '--'}}</td>\r\n <td>{{history?.auditType ? history?.auditType :'--'}}</td>\r\n <td>{{history?.beforeCount ?? '--'}}</td>\r\n <td>{{history?.afterCount ?? '--'}}</td>\r\n <td>{{history?.accuracy ?? '--'}}</td>\r\n <td>{{history?.startTime ? history?.startTime :'--'}}</td>\r\n <td>{{history?.endTime ? history?.endTime :'--'}}</td>\r\n <td>{{history?.timeSpent ? history?.timeSpent :'--'}}</td>\r\n <td>{{history?.createdAt ? (history?.createdAt | customDateFormat) :'--'}}</td>\r\n <td>\r\n <span *ngIf=\"history.auditStatus ==='drafted'\" class=\"badge badge-light-warning\">Draft</span>\r\n <span *ngIf=\"history.auditStatus ==='completed'\" class=\"badge badge-light-success\">Completed</span>\r\n <span *ngIf=\"history.auditStatus ==='inprogress'\" class=\"badge badge-light-primary\">In\r\n Progress</span>\r\n <span *ngIf=\"history.auditStatus ==='skipped'\" class=\"badge badge-light-primary\">Skip</span>\r\n </td>\r\n <td><span class=\"cursor-pointer\" (click)=\"viewHistory(history)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M0.833374 10C0.833374 10 4.16671 3.33337 10 3.33337C15.8334 3.33337 19.1667 10 19.1667 10C19.1667 10 15.8334 16.6667 10 16.6667C4.16671 16.6667 0.833374 10 0.833374 10Z\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M10 12.5C11.3808 12.5 12.5 11.3808 12.5 10C12.5 8.61933 11.3808 7.50004 10 7.50004C8.61933 7.50004 7.50004 8.61933 7.50004 10C7.50004 11.3808 8.61933 12.5 10 12.5Z\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n \r\n </table> \r\n </div>\r\n <lib-pagination [itemsPerPage]=\"limit\" [currentPage]=\"offset\"\r\n [totalItems]=\"totalCount\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"setLimit()\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div> \r\n <ng-container *ngIf=\"historyLoading\" >\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 \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"historyNodata\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"userData === 'Workspace'\">\r\n <lib-audit-management [searchAudit]=\"searchAudit\" [selectedType]=\"selectedType\" [selectedClient]=\"selectedClient\" (cildEvent)=\"fromChild($event)\"></lib-audit-management>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".rowbody{background:var(--Gray-50, #F9FAFB)}.issuecard{border-radius:8px;border:1px solid var(--Gray-100, #F2F4F7);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d;padding:14px 12px}.issuecard label{color:var(--Black, #101828);font-size:16px;line-height:24px}.issuecard.active{background:var(--Primary-25, #F6FCFF);box-shadow:0 2px 4px -2px #1018280f,0 4px 8px -2px #1018281a}.active{border:none;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.fw-bold-700{font-weight:700!important}.fw-bold-400{font-weight:400!important}.profile{width:24px;height:24px;overflow:hidden;border-radius:200px}.msgprofile{width:48px!important;height:48px!important;border-radius:200px;overflow:hidden}.timingtext{color:var(--Gray-500, #667085);font-size:12px;line-height:18px}.bg-badge{background-color:#776f6f29!important}.items:hover,.tems.focus,.items.active,.camera.focus-visible{background:var(--Gray-50, #F9FAFB)}.textSub{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.taketicket{color:var(--Gray-500, #667085);font-size:16px;line-height:24px}tr{vertical-align:middle!important}.img-src{width:25%}.mh-60vh{height:40vh!important}.min-height-60vh{min-height:50vh!important}.text-primary{color:var(--Primary-700, #009BF3)!important;font-family:Inter;font-size:14px;font-weight:500}table th,table td{height:44px!important;padding:12px 24px!important;align-items:center;gap:12px;align-self:stretch}.daterangepicker{display:block!important;top:153.85px!important;left:900px!important;right:0}.form-control{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600;line-height:20px;text-transform:capitalize}::ng-deep .applyBtn{display:none!important}:host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .daterangepicker-input+.ngx-daterangepicker-material .applyBtn{display:none}:host::ng-deep .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;left:-470px!important;height:450px!important}:host::ng-deep .md-drppicker .btn{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}:host::ng-deep .md-drppicker .ranges ul li button{padding:12px 16px;width:160px;color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:20px;background:none;border:none;text-align:left;cursor:pointer}:host::ng-deep .md-drppicker td.active,:host::ng-deep .md-drppicker td.active:hover{background-color:#029cf4!important;border-radius:20px!important;color:var(--White, #FFF)!important;text-align:center!important;font-size:14px!important;font-weight:500!important;line-height:20px}:host::ng-deep .md-drppicker.ltr .ranges{float:left;margin-top:10px!important}:host::ng-deep .md-drppicker td.in-range{background:var(--Primary-50, #EAF8FF)}:host::ng-deep .md-drppicker .ranges ul li button.active{background:var(--Primary-50, #EAF8FF)!important;border-radius:8px!important;color:var(--Primary-700, #009BF3);font-size:14px!important;font-weight:500!important;line-height:20px!important}:host::ng-deep table th,:host::ng-deep table td{width:40px!important;height:40px!important;padding:10px 8px!important}:host::ng-deep .md-drppicker td.available.prev,:host::ng-deep .md-drppicker th.available.prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .md-drppicker td.available.next,:host::ng-deep .md-drppicker th.available.next{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .md-drppicker .btn.btn-default{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize;margin-right:10px!important}:host::ng-deep .md-drppicker td.available.invalid-date{text-decoration:line-through;pointer-events:none;color:#a9a9a9}:host::ng-deep .md-drppicker td.available.today:not(.invalid-date){text-decoration:unset;pointer-events:unset;color:unset}.test-col{color:var(--gray-800, #1D2939);font-family:Inter!important;font-size:32px;font-style:normal;font-weight:400;line-height:40px;letter-spacing:-.64px}.test{margin:11px 5px!important}\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.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: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "component", type: i3.FiltersComponent, selector: "lib-filters", inputs: ["dataObject"], outputs: ["appliedFilters"] }, { kind: "directive", type: i11.DaterangepickerDirective, selector: "input[ngxDaterangepickerMd]", inputs: ["minDate", "maxDate", "autoApply", "alwaysShowCalendars", "showCustomRangeLabel", "linkedCalendars", "dateLimit", "singleDatePicker", "showWeekNumbers", "showISOWeekNumbers", "showDropdowns", "isInvalidDate", "isCustomDate", "isTooltipDate", "showClearButton", "customRangeDirection", "ranges", "opens", "drops", "firstMonthDayClass", "lastMonthDayClass", "emptyWeekRowClass", "emptyWeekColumnClass", "firstDayOfNextMonthClass", "lastDayOfPreviousMonthClass", "keepCalendarOpeningWithRange", "showRangeLabelOnInput", "showCancel", "lockStartDate", "timePicker", "timePicker24Hour", "timePickerIncrement", "timePickerSeconds", "closeOnAutoApply", "endKeyHolder", "startKey", "locale", "endKey"], outputs: ["change", "rangeClicked", "datesUpdated", "startDateChanged", "endDateChanged", "clearClicked"] }, { kind: "component", type: i12.AuditManagementComponent, selector: "lib-audit-management", inputs: ["searchAudit", "selectedType", "selectedClient"], outputs: ["cildEvent"] }, { kind: "pipe", type: i3.CustomDateFormatPipe, name: "customDateFormat" }] });
452
+ }
453
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditWorkspaceComponent, decorators: [{
454
+ type: Component,
455
+ args: [{ selector: 'lib-audit-workspace', template: "<div class=\"card\">\r\n <div class=\"card-header border-0 pt-3\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"card-label mb-2\">Audit Tickets</span>\r\n </h3>\r\n <div *ngIf=\"userData ==='Workspace'\" 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 svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" 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\"></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 type=\"text\" class=\"form-control ps-14 me-2\" \r\n placeholder=\"Search\" autocomplete=\"off\" (change)=\"searchAudits($event)\"/>\r\n\r\n <button (click)=\"exportAuditAsXlsx()\" class=\"btn btn-outline p-3 text-nowrap border border-gray ms-2 me-2\" type=\"button\"><span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span> Export</button>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"userData ==='History'\" 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 svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" 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\"></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 type=\"text\" class=\"form-control ps-14 me-2\" \r\n placeholder=\"Search\" autocomplete=\"off\" [(ngModel)]=\"searchHistory\" (input)=\"searchHistoryTable()\" />\r\n\r\n <div class=\"d-flex align-items-center position-relative my-1 me-3\" style=\"width: 335px !important\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M13.3333 1.66663V4.99996M6.66667 1.66663V4.99996M2.5 8.33329H17.5M4.16667 3.33329H15.8333C16.7538 3.33329 17.5 4.07948 17.5 4.99996V16.6666C17.5 17.5871 16.7538 18.3333 15.8333 18.3333H4.16667C3.24619 18.3333 2.5 17.5871 2.5 16.6666V4.99996C2.5 4.07948 3.24619 3.33329 4.16667 3.33329Z\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <!-- <div class=\"input-group input-group-solid date dropdown-item \" id=\"kt_datetimepicker_3\" > -->\r\n <ng-container>\r\n <input class=\"fx-date-range form-control ps-14\" style=\"min-width: 260px !important;\" type=\"text\" matInput ngxDaterangepickerMd [drops]=\"'down'\"\r\n [opens]=\"'right'\" [ranges]=\"ranges\" [showCustomRangeLabel]=\"true\" [alwaysShowCalendars]=\"false\"\r\n [keepCalendarOpeningWithRange]=\"true\" [showCancel]=\"true\" autocomplete=\"off\" [(ngModel)]=\"selectedDateRange\" (startDateChanged)=\"onStartDateChange($event)\" [isCustomDate]=\"isCustomDate\"\r\n [locale]=\"{ format: 'DD-MM-YYYY', firstDay: 1, monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] }\"\r\n (datesUpdated)=\"datechange($event)\" name=\"daterange\" [readonly]=\"true\" />\r\n </ng-container>\r\n </div>\r\n\r\n <lib-filters *ngIf=\"storeList\" [dataObject]=\"dataObject\" (appliedFilters)=\"receiveData($event)\" ></lib-filters>\r\n\r\n <div *ngIf=\"!historyNodata\" class=\"position-relative\">\r\n <button type=\"button\" (click)=\"openDropdown($event)\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\"><span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path 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\" stroke=\"#344054\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n <span class=\"ms-2\">Export</span> </button>\r\n <div *ngIf=\"dropDown\" class=\"card py-1 w-200px position-absolute top-50px end-0\">\r\n <ul *ngFor=\"let item of ExportItems\" class=\"list-unstyled\">\r\n <li [ngClass]=\"this.selectedExportIssue === item ? 'active' : ''\" class=\"camera px-5 items fw-semibold cursor-pointer py-2\" (click)=\"selectExportItem(item)\">{{item}}</li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"card-body py-2\">\r\n <div class=\"d-flex overflow-auto h-55px\">\r\n <ul class=\"nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder flex-nowrap\">\r\n <li (click)=\"userValue('Workspace')\" class=\"nav-item cursor-pointer\"><a [ngClass]=\"userData ==='Workspace' ? 'active' :''\"\r\n class=\"nav-link text-active-primary me-6\">Workspace</a>\r\n </li>\r\n <li (click)=\"userValue('History')\" class=\"nav-item cursor-pointer\"><a [ngClass]=\"userData ==='History' ? 'active' :''\"\r\n class=\"nav-link text-active-primary me-6\">History</a></li>\r\n </ul>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between mt-5\"><div class=\"d-flex\">\r\n <div (click)=\"selectType('traffic')\" [ngClass]=\"selectedType === 'traffic' ? 'active text-active-primary' : 'textSub'\" class=\"pe-5 py-3 rounded-3 cursor-pointer fw-semibold\r\n fw-semibold \">Traffic</div>\r\n <div (click)=\"selectType('zone')\" [ngClass]=\"selectedType === 'zone' ? 'active text-primary' : 'textSub'\" class=\"px-5 py-3 rounded-3 cursor-pointer fw-semibold\r\n fw-semibold\">Zone</div></div>\r\n <div *ngIf=\"selectedClient\" (click)=\"backtoZone()\" class=\"btn btn-outline px-4 py-3 cursor-pointer\">\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\r\n <path d=\"M12.8327 6.99935H1.16602M1.16602 6.99935L6.99935 12.8327M1.16602 6.99935L6.99935 1.16602\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg> \r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"userData === 'History' && selectedType === 'traffic'\">\r\n <div *ngIf=\"!historyLoading && !historyNodata\" class=\"pt-10\">\r\n <div class=\"table-responsive\"> \r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('fileDate')\">\r\n File Date\r\n <span *ngIf=\"sortColumName === 'fileDate' && sortBy !== 1 || sortColumName !== 'fileDate' \">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'fileDate' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('clientName')\">\r\n Client Name\r\n <span *ngIf=\"sortColumName === 'clientName' && sortBy !== 1 || sortColumName !== 'clientName' \">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'clientName' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('clientId')\">\r\n Client Id\r\n <span *ngIf=\"sortColumName === 'clientId' && sortBy !== 1 || sortColumName !== 'clientId' \">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'clientId' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('storeName')\">\r\n Store Name\r\n <span *ngIf=\"sortColumName === 'storeName' && sortBy !== 1 || sortColumName !== 'storeName'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'storeName' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('storeId')\">\r\n Store Id\r\n <span *ngIf=\"sortColumName === 'storeId' && sortBy !== 1 || sortColumName !== 'storeId'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'storeId' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('type')\">Type\r\n <span *ngIf=\"sortColumName === 'type' && sortBy !== 1 || sortColumName !== 'type'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'type' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('BC')\"></div>\r\n BC\r\n <span *ngIf=\"sortColumName === 'BC' && sortBy !== 1 || sortColumName !== 'BC'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'BC' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('AC')\"></div>\r\n AC\r\n <span *ngIf=\"sortColumName === 'AC' && sortBy !== 1 || sortColumName !== 'AC'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'AC' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('accuracy')\">Accuracy\r\n <span *ngIf=\"sortColumName === 'accuracy' && sortBy !== 1 || sortColumName !== 'accuracy'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'accuracy' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('starttime')\">Start Time\r\n <span *ngIf=\"sortColumName === 'starttime' && sortBy !== 1 || sortColumName !== 'starttime'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'starttime' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('endtime')\">End Time\r\n <span *ngIf=\"sortColumName === 'endtime' && sortBy !== 1 || sortColumName !== 'endtime'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'endtime' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('timespent')\">Time Spent\r\n <span *ngIf=\"sortColumName === 'timespent' && sortBy !== 1 || sortColumName !== 'timespent'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'timespent' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div>\r\n </th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('createdAt')\">Created At\r\n <span *ngIf=\"sortColumName === 'createdAt' && sortBy !== 1 || sortColumName !== 'createdAt'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 1.33337V10.6667M6.00016 10.6667L10.6668 6.00004M6.00016 10.6667L1.3335 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span *ngIf=\"sortColumName === 'createdAt' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M6.00016 10.6667L6.00016 1.33337M6.00016 1.33337L1.3335 6.00004M6.00016 1.33337L10.6668 6.00004\"\r\n stroke=\"#667085\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </span></div>\r\n </th>\r\n <th>Status\r\n </th>\r\n <th>Actions\r\n \r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let history of workHistorydata; let i = index\">\r\n <td>{{history?.fileDate ? history?.fileDate : '--'}}</td>\r\n <td>{{history?.clientName ? history?.clientName :'--'}}</td>\r\n <td>{{history?.clientId ? history?.clientId :'--'}}</td>\r\n <td>{{history?.storeName ? history?.storeName : '--'}}</td>\r\n <td>{{history?.storeId ? history?.storeId : '--'}}</td>\r\n <td>{{history?.auditType ? history?.auditType :'--'}}</td>\r\n <td>{{history?.beforeCount ?? '--'}}</td>\r\n <td>{{history?.afterCount ?? '--'}}</td>\r\n <td>{{history?.accuracy ?? '--'}}</td>\r\n <td>{{history?.startTime ? history?.startTime :'--'}}</td>\r\n <td>{{history?.endTime ? history?.endTime :'--'}}</td>\r\n <td>{{history?.timeSpent ? history?.timeSpent :'--'}}</td>\r\n <td>{{history?.createdAt ? (history?.createdAt | customDateFormat) :'--'}}</td>\r\n <td>\r\n <span *ngIf=\"history.auditStatus ==='drafted'\" class=\"badge badge-light-warning\">Draft</span>\r\n <span *ngIf=\"history.auditStatus ==='completed'\" class=\"badge badge-light-success\">Completed</span>\r\n <span *ngIf=\"history.auditStatus ==='inprogress'\" class=\"badge badge-light-primary\">In\r\n Progress</span>\r\n <span *ngIf=\"history.auditStatus ==='skipped'\" class=\"badge badge-light-primary\">Skip</span>\r\n </td>\r\n <td><span class=\"cursor-pointer\" (click)=\"viewHistory(history)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M0.833374 10C0.833374 10 4.16671 3.33337 10 3.33337C15.8334 3.33337 19.1667 10 19.1667 10C19.1667 10 15.8334 16.6667 10 16.6667C4.16671 16.6667 0.833374 10 0.833374 10Z\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M10 12.5C11.3808 12.5 12.5 11.3808 12.5 10C12.5 8.61933 11.3808 7.50004 10 7.50004C8.61933 7.50004 7.50004 8.61933 7.50004 10C7.50004 11.3808 8.61933 12.5 10 12.5Z\" stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n \r\n </table> \r\n </div>\r\n <lib-pagination [itemsPerPage]=\"limit\" [currentPage]=\"offset\"\r\n [totalItems]=\"totalCount\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"setLimit()\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div> \r\n <ng-container *ngIf=\"historyLoading\" >\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 \r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"historyNodata\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"userData === 'Workspace'\">\r\n <lib-audit-management [searchAudit]=\"searchAudit\" [selectedType]=\"selectedType\" [selectedClient]=\"selectedClient\" (cildEvent)=\"fromChild($event)\"></lib-audit-management>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".rowbody{background:var(--Gray-50, #F9FAFB)}.issuecard{border-radius:8px;border:1px solid var(--Gray-100, #F2F4F7);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d;padding:14px 12px}.issuecard label{color:var(--Black, #101828);font-size:16px;line-height:24px}.issuecard.active{background:var(--Primary-25, #F6FCFF);box-shadow:0 2px 4px -2px #1018280f,0 4px 8px -2px #1018281a}.active{border:none;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.fw-bold-700{font-weight:700!important}.fw-bold-400{font-weight:400!important}.profile{width:24px;height:24px;overflow:hidden;border-radius:200px}.msgprofile{width:48px!important;height:48px!important;border-radius:200px;overflow:hidden}.timingtext{color:var(--Gray-500, #667085);font-size:12px;line-height:18px}.bg-badge{background-color:#776f6f29!important}.items:hover,.tems.focus,.items.active,.camera.focus-visible{background:var(--Gray-50, #F9FAFB)}.textSub{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.taketicket{color:var(--Gray-500, #667085);font-size:16px;line-height:24px}tr{vertical-align:middle!important}.img-src{width:25%}.mh-60vh{height:40vh!important}.min-height-60vh{min-height:50vh!important}.text-primary{color:var(--Primary-700, #009BF3)!important;font-family:Inter;font-size:14px;font-weight:500}table th,table td{height:44px!important;padding:12px 24px!important;align-items:center;gap:12px;align-self:stretch}.daterangepicker{display:block!important;top:153.85px!important;left:900px!important;right:0}.form-control{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600;line-height:20px;text-transform:capitalize}::ng-deep .applyBtn{display:none!important}:host::ng-deep .md-drppicker .btn{line-height:10px!important}:host::ng-deep .daterangepicker-input+.ngx-daterangepicker-material .applyBtn{display:none}:host::ng-deep .md-drppicker.drops-down-right.ltr.double.show-ranges.shown{top:65px!important;left:-470px!important;height:450px!important}:host::ng-deep .md-drppicker .btn{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}:host::ng-deep .md-drppicker .ranges ul li button{padding:12px 16px;width:160px;color:var(--Gray-700, #344054);font-size:14px;font-weight:400;line-height:20px;background:none;border:none;text-align:left;cursor:pointer}:host::ng-deep .md-drppicker td.active,:host::ng-deep .md-drppicker td.active:hover{background-color:#029cf4!important;border-radius:20px!important;color:var(--White, #FFF)!important;text-align:center!important;font-size:14px!important;font-weight:500!important;line-height:20px}:host::ng-deep .md-drppicker.ltr .ranges{float:left;margin-top:10px!important}:host::ng-deep .md-drppicker td.in-range{background:var(--Primary-50, #EAF8FF)}:host::ng-deep .md-drppicker .ranges ul li button.active{background:var(--Primary-50, #EAF8FF)!important;border-radius:8px!important;color:var(--Primary-700, #009BF3);font-size:14px!important;font-weight:500!important;line-height:20px!important}:host::ng-deep table th,:host::ng-deep table td{width:40px!important;height:40px!important;padding:10px 8px!important}:host::ng-deep .md-drppicker td.available.prev,:host::ng-deep .md-drppicker th.available.prev{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .md-drppicker td.available.next,:host::ng-deep .md-drppicker th.available.next{background-image:url(data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMy43IDYiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDMuNyA2IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik0zLjcsMC43TDEuNCwzbDIuMywyLjNMMyw2TDAsM2wzLTNMMy43LDAuN3oiLz4NCjwvZz4NCjwvc3ZnPg0K)!important;background-repeat:no-repeat!important;background-size:.5em!important;background-position:center!important}:host::ng-deep .md-drppicker .btn.btn-default{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize;margin-right:10px!important}:host::ng-deep .md-drppicker td.available.invalid-date{text-decoration:line-through;pointer-events:none;color:#a9a9a9}:host::ng-deep .md-drppicker td.available.today:not(.invalid-date){text-decoration:unset;pointer-events:unset;color:unset}.test-col{color:var(--gray-800, #1D2939);font-family:Inter!important;font-size:32px;font-style:normal;font-weight:400;line-height:40px;letter-spacing:-.64px}.test{margin:11px 5px!important}\n"] }]
456
+ }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i0.ChangeDetectorRef }, { type: i2.DataService }, { type: i3.ToastService }, { type: i4.TicketsService }, { type: i2.DataService }, { type: i5.GlobalStateService }, { type: i6.ExcelService }, { type: i7.NgbModal }, { type: i5.LayoutService }, { type: i8.AuthService }], propDecorators: { onClick: [{
457
+ type: HostListener,
458
+ args: ["document:click", ["$event"]]
459
+ }] } });
460
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtd29ya3NwYWNlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXRpY2tldC11c2VyL3NyYy9saWIvY29tcG9uZW50cy9hdWRpdC13b3Jrc3BhY2UvYXVkaXQtd29ya3NwYWNlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXRpY2tldC11c2VyL3NyYy9saWIvY29tcG9uZW50cy9hdWRpdC13b3Jrc3BhY2UvYXVkaXQtd29ya3NwYWNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsWUFBWSxFQUFnQyxNQUFNLGVBQWUsQ0FBQztBQUs5RixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkxQyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFHMUIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBTzVFLE1BQU0sT0FBTyx1QkFBdUI7SUFzRGQ7SUFBK0I7SUFDekM7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNEO0lBQ0M7SUFDQTtJQUNBO0lBQ0E7SUEvRFYsWUFBWSxDQUFNO0lBQ2xCLFFBQVEsQ0FBUztJQUNqQixJQUFJLENBQU07SUFDVixRQUFRLENBQU07SUFDZCxVQUFVLENBQU07SUFDaEIsY0FBYyxHQUFZLElBQUksQ0FBQztJQUMvQixhQUFhLEdBQVksS0FBSyxDQUFDO0lBQy9CLE1BQU0sQ0FBVTtJQUNoQixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLGVBQWUsQ0FBTTtJQUNyQixNQUFNLEdBQVEsQ0FBQyxDQUFDO0lBQ2hCLE1BQU0sR0FBUSxDQUFDLENBQUMsQ0FBQztJQUNqQixLQUFLLEdBQVEsRUFBRSxDQUFDO0lBQ2hCLGFBQWEsQ0FBTTtJQUNuQixhQUFh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Q0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtnQkFDN0IsSUFBSSxPQUFPLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRTtvQkFDcEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2lCQUNoRTtZQUNILENBQUMsQ0FBQyxDQUFBO1NBQ0Q7UUFDRCxJQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDaEMsSUFBSSxDQUFDLGFBQWEsR0FBRSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQVM7UUFDakIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDOUIsQ0FBQzt3R0FsY1UsdUJBQXVCOzRGQUF2Qix1QkFBdUIseUhDbkJwQyxtNm1DQTRYQTs7NEZEeldhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxxQkFBcUI7NlhBMEUvQixPQUFPO3NCQUROLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSG9zdExpc3RlbmVyLCBDaGFuZ2VEZXRlY3RvclJlZiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlLCBMYXlvdXRTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRXhjZWxTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2V4Y2VsLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVGlja2V0c1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvdGlja2V0LWluZnJhLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlXCI7XHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1hdXRoXCI7IFxyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBWaWV3aGlzdG9yeUNvbXBvbmVudCB9IGZyb20gJy4uL3ZpZXdoaXN0b3J5L3ZpZXdoaXN0b3J5LmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1hdWRpdC13b3Jrc3BhY2UnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hdWRpdC13b3Jrc3BhY2UuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9hdWRpdC13b3Jrc3BhY2UuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdWRpdFdvcmtzcGFjZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCxPbkRlc3Ryb3kge1xyXG4gIGhlYWRlckZpbHRlcjogYW55O1xyXG4gIHVzZXJEYXRhOiBzdHJpbmc7XHJcbiAgdXNlcjogYW55O1xyXG4gIGNsaWVudElkOiBhbnk7XHJcbiAgZGF0YU9iamVjdDogYW55O1xyXG4gIGhpc3RvcnlMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBoaXN0b3J5Tm9kYXRhOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNPcGVuOiBib29sZWFuO1xyXG4gIGRyb3BEb3duOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2VhcmNoV29ya3NwYWNlOiBhbnk7XHJcbiAgb2Zmc2V0OiBhbnkgPSAxO1xyXG4gIHNvcnRCeTogYW55ID0gLTE7XHJcbiAgbGltaXQ6IGFueSA9IDEwO1xyXG4gIHNvcnRDb2x1bU5hbWU6IGFueTtcclxuICBzZWFyY2hIaXN0b3J5OiBhbnk7XHJcbiAgRXhwb3J0SXRlbXM6YW55ID0gWydPdmVyYWxsIHJlcG9ydCcsJ0hvdXJseSBSZXBvcnQnXVxyXG4gIHdvcmtIaXN0b3J5ZGF0YTphbnk9W107XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgc2VhcmNoQXVkaXQ6IGFueSA9ICcnO1xyXG4gIGZpbHRlckJ5U3RvcmVJZDogYW55ID0gW107XHJcbiAgZmlsdGVyQnlTdGF0dXM6IGFueSA9IFtdO1xyXG4gIGZpbHRlckJ5VHlwZTogYW55ID0gW107XHJcbiAgc2VsZWN0ZWRDbGllbnQ6YW55ID0nJztcclxuICBzZWxlY3RlZEV4cG9ydElzc3VlOiBhbnk7XHJcbiAgc2VsZWN0ZWRJc3N1ZTogYW55O1xyXG4gIHVzZXJJZDphbnkgPSAnJztcclxuICBzZWxlY3RlZFR5cGU6YW55ID0gJ3RyYWZmaWMnO1xyXG4gIGZpbHRlclN0b3JlczogYW55ID0gW107XHJcbiAgd29ya0hpc3RvcnlUYWJsZTogYW55O1xyXG4gIGRheWpzID0gZGF5anM7XHJcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZTogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBpc0N1c3RvbURhdGUgPSAobTogZGF5anMuRGF5anMpID0+IHtcclxuICAgIGNvbnN0IGlzVmFsaWREYXRlID0gIG0gPiB0aGlzLmRheWpzKCk7ICAgIFxyXG4gICAgcmV0dXJuIGlzVmFsaWREYXRlID8gJ2ludmFsaWQtZGF0ZScgOiBmYWxzZTtcclxufVxyXG4gIHNlbGVjdGVkRGF0ZVJhbmdlOiBhbnkgPSB7fTtcclxuICBzZWxlY3RlZEZpbHRlcnM6IGFueSA9IHtcclxuICAgIGNsaWVudDogbnVsbCxcclxuICAgIGNsaWVudE5hbWU6bnVsbCxcclxuICAgIGNsaWVudHM6IFtdLFxyXG4gICAgc3RvcmU6IG51bGwsXHJcbiAgICBzdG9yZXM6IFtdLFxyXG4gICAgZGF0ZTogbnVsbCxcclxuICB9O1xyXG4gIHVzZXJzOiBhbnk7XHJcbiAgbG9hZGVkOiBib29sZWFuO1xyXG4gIGZpbGVUeXBlOiBhbnkgPSAnZmlsZURhdGUnO1xyXG4gIHN0b3JlTGlzdDogYW55O1xyXG4gIHN0YXJ0RGF0ZTogc3RyaW5nO1xyXG4gIGVuZERhdGU6IHN0cmluZztcclxuICB0b3RhbENvdW50OiBhbnk7XHJcbiAgcGFnaW5hdGlvblNpemVzOmFueSA9IFsxMCwyMCwzMF07XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIFNlcnZpY2U6IFRpY2tldHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRhc2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgZXhjZWw6IEV4Y2VsU2VydmljZSxcclxuICAgIHByaXZhdGUgbW9kYWxzZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgIHByaXZhdGUgbGF5b3V0OiBMYXlvdXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICApIHtcclxuICAgXHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKFwiZG9jdW1lbnQ6Y2xpY2tcIiwgW1wiJGV2ZW50XCJdKVxyXG4gIG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmICghdGFyZ2V0LmNsb3Nlc3QoXCIuZHJvcGRvd25cIikpIHtcclxuICAgICAgdGhpcy5kcm9wRG93biA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmRhdGVwaWNrZXIoKTtcclxuICAgIHRoaXMudXNlckRhdGEgPSAnV29ya3NwYWNlJztcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChkYXRhICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLnVzZXIgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VyLWluZm8nKSB8fCBcIlwiKVxyXG4gICAgICAgIHRoaXMuaGVhZGVyRmlsdGVyID0gZGF0YTtcclxuICAgICAgICB0aGlzLmNsaWVudElkID0gdGhpcy5oZWFkZXJGaWx0ZXI/LmNsaWVudHM7XHJcbiAgICAgICAgaWYodGhpcy51c2VyRGF0YSA9PT0gJ0hpc3RvcnknKXtcclxuICAgICAgICAgIHRoaXMud29ya0hpc3RvcnkoKTtcclxuICAgICAgICAgIHRoaXMuZ2V0c3RvcmVMaXN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMudXNlcj8udXNlckRldGFpbHMpe1xyXG4gICAgICAgICAgdGhpcy51c2VySWQgPSB0aGlzLnVzZXI/LnVzZXJEZXRhaWxzO1xyXG4gICAgICAgICAgdGhpcy51c2VyRGF0YSA9ICdIaXN0b3J5J1xyXG4gICAgICAgIH1lbHNle3RoaXMudXNlcklkID0gdGhpcy51c2VyPy5faWR9XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBkYXRlcGlja2VyKCl7XHJcbiAgICBpZiAoXCJ1c2VyLWluZm9cIiBpbiBsb2NhbFN0b3JhZ2UpIHtcclxuICAgICAgY29uc3QgdXNlcnM6IGFueSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1c2VyLWluZm9cIikgfHwgXCJ7fVwiXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMudXNlcnMgPSB1c2VycztcclxuICAgIH0gIFxyXG4gICAgaWYgKFwiaGVhZGVyLWZpbHRlcnNcIiBpbiBsb2NhbFN0b3JhZ2UpIHtcclxuICAgICAgY29uc3QgaGVhZGVyRmlsdGVyczogYW55ID0gSlNPTi5wYXJzZShcclxuICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpIHx8IFwie31cIlxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnQgPSB0aGlzLnVzZXJzLmNsaWVudElkO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5jbGllbnRzID0gW3RoaXMudXNlcnMuY2xpZW50SWRdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5kYXRlID0gaGVhZGVyRmlsdGVycy5kYXRlO1xyXG5cclxuICAgICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZSA9IHtcclxuICAgICAgICAvLyBzdGFydERhdGU6dGhpcy5kYXlqcyggaGVhZGVyRmlsdGVycz8uZGF0ZS5zdGFydERhdGUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQoJ0RELU1NLVlZWVknKSxcclxuICAgICAgICAvLyBlbmREYXRlOiB0aGlzLmRheWpzKCBoZWFkZXJGaWx0ZXJzPy5kYXRlLmVuZERhdGUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQoJ0RELU1NLVlZWVknKSxcclxuICAgICAgICBzdGFydERhdGU6IHRoaXMuZGF5anMoKS5zdWJ0cmFjdCgxLCAnZGF5JyksXHJcbiAgICAgICAgZW5kRGF0ZTogdGhpcy5kYXlqcygpLnN1YnRyYWN0KDEsJ2RheScpXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuc3RhcnREYXRlID0gdGhpcy5kYXlqcyh0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlPy5zdGFydERhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpXHJcbiAgICAgIHRoaXMuZW5kRGF0ZSA9IHRoaXMuZGF5anModGhpcy5zZWxlY3RlZERhdGVSYW5nZT8uZW5kRGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJylcclxuICAgICAgLy8gbG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgIC8vICAgXCJoZWFkZXItZmlsdGVyc1wiLFxyXG4gICAgICAvLyAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKVxyXG4gICAgICAvLyApO1xyXG4gICAgICAvLyB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLm5leHQodGhpcy5zZWxlY3RlZEZpbHRlcnMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuY2xpZW50ID0gdGhpcy51c2Vycy5jbGllbnRJZDtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuY2xpZW50cyA9IFt0aGlzLnVzZXJzLmNsaWVudElkXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZSA9IHtcclxuICAgICAgICBzdGFydERhdGU6IHRoaXMuZGF5anMoKS5mb3JtYXQoJ0RELU1NLVlZWVknKSxcclxuICAgICAgICBlbmREYXRlOiB0aGlzLmRheWpzKCkuZm9ybWF0KCdERC1NTS1ZWVlZJyksXHJcbiAgICAgIH07XHJcbiAgICAgIHZhciBkYXRldGltZSA9IHtcclxuICAgICAgICBzdGFydERhdGU6IHRoaXMuZGF5anMoKS5mb3JtYXQoJ1lZWVktTU0tREQnKSxcclxuICAgICAgICBlbmREYXRlOiB0aGlzLmRheWpzKCkuZm9ybWF0KCdZWVlZLU1NLUREJyksXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmRhdGUgPSBkYXRldGltZTtcclxuICAgICAgLy8gbG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgIC8vICAgXCJoZWFkZXItZmlsdGVyc1wiLFxyXG4gICAgICAvLyAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRGaWx0ZXJzKVxyXG4gICAgICAvLyApO1xyXG4gICAgICAvLyB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLm5leHQodGhpcy5zZWxlY3RlZEZpbHRlcnMpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHJhbmdlczogYW55ID0ge1xyXG4gICAgVG9kYXk6IFt0aGlzLmRheWpzKCksIHRoaXMuZGF5anMoKV0sXHJcbiAgICBZZXN0ZXJkYXk6IFtcclxuICAgICAgdGhpcy5kYXlqcygpLnN1YnRyYWN0KDEsIFwiZGF5c1wiKSxcclxuICAgICAgdGhpcy5kYXlqcygpLnN1YnRyYWN0KDEsIFwiZGF5c1wiKSxcclxuICAgIF0sXHJcbiAgICBcIlRoaXMgV2Vla1wiOiBbdGhpcy5kYXlqcygpLnN1YnRyYWN0KDYsIFwiZGF5c1wiKSwgdGhpcy5kYXlqcygpXSxcclxuICAgIFwiTGFzdCBXZWVrXCI6IFtcclxuICAgICAgdGhpcy5kYXlqcygpLnN1YnRyYWN0KDE0LCBcImRheXNcIikuc3RhcnRPZihcImRheXNcIiksXHJcbiAgICAgIHRoaXMuZGF5anMoKS5zdWJ0cmFjdCg4LCBcImRheXNcIikuZW5kT2YoXCJkYXlzXCIpLFxyXG4gICAgXSxcclxuICAgIFwiVGhpcyBNb250aFwiOiBbdGhpcy5kYXlqcygpLnN0YXJ0T2YoXCJtb250aFwiKSwgdGhpcy5kYXlqcygpLmVuZE9mKFwibW9udGhcIildLFxyXG4gICAgXCJMYXN0IE1vbnRoXCI6IFtcclxuICAgICAgdGhpcy5kYXlqcygpLnN1YnRyYWN0KDEsIFwibW9udGhcIikuc3RhcnRPZihcIm1vbnRoXCIpLFxyXG4gICAgICB0aGlzLmRheWpzKCkuc3VidHJhY3QoMSwgXCJtb250aFwiKS5lbmRPZihcIm1vbnRoXCIpLFxyXG4gICAgXSxcclxuICB9O1xyXG5cclxuICBvbkRhdGVSYW5nZUNoYW5nZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgLy8gdGhpcy5waWNrZXJEaXJlY3RpdmUub3BlbigpO1xyXG4gICAgaWYgKGV2ZW50LnN0YXJ0RGF0ZSAhPSBudWxsICYmIGV2ZW50LmVuZERhdGUgIT0gbnVsbCkge1xyXG4gICAgICAvLyB0aGlzLnBpY2tlckRpcmVjdGl2ZS5vcGVuKCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2Uuc3RhcnREYXRlID0gZGF5anMoZXZlbnQuc3RhcnREYXRlPy50b0lTT1N0cmluZygpKS51dGMoKS5mb3JtYXQoJ01NLURELVlZWVknKVxyXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLmVuZERhdGUgPSBkYXlqcyhldmVudC5lbmREYXRlPy50b0lTT1N0cmluZygpKS51dGMoKS5mb3JtYXQoJ01NLURELVlZWVknKVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICgnZmlsdGVycycgaW4gbG9jYWxTdG9yYWdlKSB7XHJcbiAgICAgICAgdmFyIHNldGRhdGUgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdmaWx0ZXJzJykgfHwgJ3t9JylcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlLnN0YXJ0RGF0ZSA9IGRheWpzKHNldGRhdGUuc3RhcnREYXRlKS5mb3JtYXQoJ01NLURELVlZWVknKVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2UuZW5kRGF0ZSA9IGRheWpzKHNldGRhdGUuZW5kRGF0ZSkuZm9ybWF0KCdNTS1ERC1ZWVlZJylcclxuICAgICAgfVxyXG4gICAgfSB0aGlzLmxvYWRlZCA9IGZhbHNlO1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2ZpbHRlcnMnLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlKSlcclxuICAgIHZhciBzZXRkYXRlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZmlsdGVycycpIHx8ICd7fScpXHJcbiAgICAvLyB0aGlzLmdldHN0b3JlYXBpKClcclxuICAgIC8vIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuZ2V0c3RvcmV2YWx1ZVxyXG4gIH1cclxuICBvblN0YXJ0RGF0ZUNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5kYXlqcyhldmVudC5zdGFydERhdGUpLmlzVmFsaWQoKSkge1xyXG4gICAgICB0aGlzLmlzQ3VzdG9tRGF0ZSA9IChtOiBkYXlqcy5EYXlqcykgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzVmFsaWREYXRlID1cclxuICAgICAgICAgIG0gPiB0aGlzLmRheWpzKCkgfHwgbSA+IHRoaXMuZGF5anMoZXZlbnQuc3RhcnREYXRlLmFkZCg5MCwgXCJkYXlzXCIpKTtcclxuICAgICAgICByZXR1cm4gaXNWYWxpZERhdGUgPyBcImludmFsaWQtZGF0ZVwiIDogZmFsc2U7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkYXRlY2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudCAmJiBldmVudC5zdGFydERhdGUgJiYgZXZlbnQuZW5kRGF0ZSkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5kYXlqcyhldmVudC5zdGFydERhdGUpLmlzVmFsaWQoKSAmJlxyXG4gICAgICAgIHRoaXMuZGF5anMoZXZlbnQuZW5kRGF0ZSkuaXNWYWxpZCgpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlUmFuZ2Uuc3RhcnREYXRlID0gZXZlbnQuc3RhcnREYXRlXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGVSYW5nZS5lbmREYXRlID0gZXZlbnQuZW5kRGF0ZVxyXG4gICAgICAgIHZhciBkYXRldGltZSA9IHtcclxuICAgICAgICAgIHN0YXJ0RGF0ZTogdGhpcy5kYXlqcyhldmVudC5zdGFydERhdGUsXCJERC1NTS1ZWVlZXCIpLmZvcm1hdCgnTU0tREQtWVlZWScpLFxyXG4gICAgICAgICAgZW5kRGF0ZTogdGhpcy5kYXlqcyhldmVudC5lbmREYXRlLFwiREQtTU0tWVlZWVwiKS5mb3JtYXQoJ01NLURELVlZWVknKSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmRhdGUgPSBkYXRldGltZTtcclxuICAgICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHRoaXMuZGF5anModGhpcy5zZWxlY3RlZEZpbHRlcnM/LmRhdGU/LnN0YXJ0RGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XHJcbiAgICAgICAgdGhpcy5lbmREYXRlID0gdGhpcy5kYXlqcyh0aGlzLnNlbGVjdGVkRmlsdGVycz8uZGF0ZT8uZW5kRGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XHJcbiAgICAgICAgdGhpcy53b3JrSGlzdG9yeSgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBjb25zdCBoZWFkZXJGaWx0ZXJzOiBhbnkgPSBKU09OLnBhcnNlKFxyXG4gICAgICAvLyAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgfHwgXCJ7fVwiXHJcbiAgICAgIC8vICk7XHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmRhdGUgPSBoZWFkZXJGaWx0ZXJzLmRhdGU7XHJcbiAgICB9XHJcbiAgIFxyXG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlcnMuY2xpZW50ID0gdGhpcy51c2Vycy5jbGllbnRJZDtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXJzLmNsaWVudHMgPSBbdGhpcy51c2Vycy5jbGllbnRJZF07XHJcbiAgICB0aGlzLnNlbGVjdGVkRmlsdGVycy5kYXRlID0gdGhpcy5zZWxlY3RlZEZpbHRlcnMuZGF0ZTtcclxuICAgIC8vIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUubmV4dCh0aGlzLnNlbGVjdGVkRmlsdGVycyk7XHJcbiAgICAvLyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgIC8vICAgXCJoZWFkZXItZmlsdGVyc1wiLFxyXG4gICAgLy8gICBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkRmlsdGVycylcclxuICAgIC8vICk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUuZm9yRWFjaCgoc2IpID0+IHNiLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbm9wZW5Ecm9wZG93bihldmVudDogTW91c2VFdmVudCkge1xyXG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIHRoaXMuZHJvcERvd24gPSAhdGhpcy5kcm9wRG93bjtcclxufVxyXG5cclxudXNlclZhbHVlKGRhdGE6IGFueSkge1xyXG4gIHRoaXMudXNlckRhdGEgPSBkYXRhO1xyXG4gIGlmICh0aGlzLnVzZXJEYXRhID09IFwiSGlzdG9yeVwiKSB7XHJcbiAgICB0aGlzLmRhdGFPYmplY3QgPSB0aGlzLmRhdGFPYmplY3QgPSBbXHJcbiAgICAgIHsgRGVzY3JpcHRpb246ICdGaWxlIERhdGUnLHR5cGUgOidzaW5nbGUnLCBJc3N1ZXM6IFt7aWQ6J2F1ZGl0RGF0ZScsIHRleHQ6IFwiQXVkaXQgRGF0ZVwiIH0sIHtpZDonYXVkaXRlZERhdGUnLCB0ZXh0OiBcIkF1ZGl0ZWQgRGF0ZVwiIH1dIH0sXHJcbiAgICAgIHsgRGVzY3JpcHRpb246ICdTdG9yZSBJZCcsIElzc3VlczogW10gfSxcclxuICAgICAgeyBEZXNjcmlwdGlvbjogJ1R5cGUnLCBJc3N1ZXM6IFt7aWQ6J2F1ZGl0JywgdGV4dDogXCJBdWRpdFwiIH0sIHtpZDoncmUtYXVkaXQnLCB0ZXh0OiBcIlJlLUF1ZGl0XCIgfV0gfSxcclxuICAgICAgeyBEZXNjcmlwdGlvbjogJ1N0YXR1cycsIElzc3VlczogW3tpZDonaW5wcm9ncmVzcycsIHRleHQ6IFwiSW4gUHJvZ3Jlc3NcIiB9LHtpZDonZHJhZnRlZCcsIHRleHQ6IFwiRHJhZnRcIiB9LHtpZDonY29tcGxldGVkJywgdGV4dDogXCJDbG9zZWRcIiB9LCB7aWQ6J3NraXBwZWQnLCB0ZXh0OiBcIlNraXBcIiB9XX0sXHJcbiAgICBdXHJcbiAgICB0aGlzLmdldHN0b3JlTGlzdCgpO1xyXG4gICAgdGhpcy53b3JrSGlzdG9yeSgpO1xyXG4gIH1cclxufVxyXG5cclxuc2VsZWN0VHlwZSh0eXBlOmFueSl7XHJcbiAgdGhpcy5zZWxlY3RlZFR5cGUgPSB0eXBlO1xyXG59XHJcblxyXG53b3JrSGlzdG9yeSgpIHtcclxuICBsZXQgZGF0YSA9IHtcclxuICAgIHVzZXJJZDogdGhpcy51c2VySWQsXHJcbiAgICBmcm9tRGF0ZTogdGhpcy5zdGFydERhdGUsXHJcbiAgICB0b0RhdGU6IHRoaXMuZW5kRGF0ZSxcclxuICAgIGZpbGVUeXBlOnRoaXMuZmlsZVR5cGUgPyB0aGlzLmZpbGVUeXBlIDogJycsXHJcbiAgICBmaWx0ZXJCeVN0YXR1czogdGhpcy5maWx0ZXJCeVN0YXR1cyA/IHRoaXMuZmlsdGVyQnlTdGF0dXMgOiBbXSxcclxuICAgIGZpbHRlckJ5U3RvcmVJZDogdGhpcy5maWx0ZXJCeVN0b3JlSWQgPyB0aGlzLmZpbHRlckJ5U3RvcmVJZCA6IFtdLFxyXG4gICAgZmlsdGVyQnlUeXBlOiB0aGlzLmZpbHRlckJ5VHlwZSA/IHRoaXMuZmlsdGVyQnlUeXBlIDogW10sXHJcbiAgICBzZWFyY2hWYWx1ZTogdGhpcy5zZWFyY2hIaXN0b3J5LFxyXG4gICAgbGltaXQ6IHRoaXMubGltaXQsXHJcbiAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxyXG4gICAgc29ydENvbHVtTmFtZTogdGhpcy5zb3J0Q29sdW1OYW1lLFxyXG4gICAgc29ydEJ5OiB0aGlzLnNvcnRCeSxcclxuICAgIGlzRXhwb3J0OiBmYWxzZVxyXG4gIH07XHJcbiAgdGhpcy5oaXN0b3J5TG9hZGluZyA9IHRydWU7XHJcbiAgdGhpcy5oaXN0b3J5Tm9kYXRhID0gZmFsc2U7XHJcbiAgdGhpcy5TZXJ2aWNlLmF1ZGl0SGlzdG9yeShkYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXM/LmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSByZXM/LmRhdGE/LmNvdW50O1xyXG4gICAgICAgICAgdGhpcy53b3JrSGlzdG9yeWRhdGEgPSByZXMuZGF0YS5yZXN1bHQ7XHJcbiAgICAgICAgICBpZih0aGlzLnRvdGFsQ291bnQgPCAxMCl7dGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbdGhpcy50b3RhbENvdW50XX0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblNpemVzID1bMTAsMjAsMzBdXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmhpc3RvcnlMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmhpc3RvcnlOb2RhdGEgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5oaXN0b3J5Tm9kYXRhID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuaGlzdG9yeUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5oaXN0b3J5Tm9kYXRhID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmhpc3RvcnlMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbXBsZXRlKCkge30sXHJcbiAgICB9KTtcclxufVxyXG5cclxuc2V0TGltaXQoKXtcclxuICBpZih0aGlzLnRvdGFsQ291bnQgPCAxMCl7XHJcbiAgICByZXR1cm4gdGhpcy50b3RhbENvdW50XHJcbiAgfWVsc2V7IHJldHVybiB0aGlzLmxpbWl0IH1cclxufVxyXG5cclxuZ2V0c3RvcmVMaXN0KCl7XHJcbiAgbGV0IGRhdGEgPSB7XHJcbiAgICBcImNsaWVudElkXCI6IHRoaXMuY2xpZW50SWRcclxuICB9XHJcbiAgdGhpcy5TZXJ2aWNlLmdldHN0b3JlTGlzdChkYXRhKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgIG5leHQ6KHJlczphbnkpID0+IHtcclxuICAgICAgaWYocmVzICYmIHJlcz8uY29kZSA9PT0yMDApe1xyXG4gICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gcmVzPy5kYXRhPy5yZXN1bHQ7XHJcbiAgICAgICAgY29uc3QgaXNzdWVzID0gdGhpcy5zdG9yZUxpc3Q/Lm1hcCgob2JqOiBhbnkpID0+ICh7IHRleHQ6IG9iai5zdG9yZU5hbWUsaWQ6b2JqLnN0b3JlSWQgfSkpO1xyXG4gICAgICAgIGNvbnN0IHVuaXF1ZUlzc3VlczphbnlbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IENsaWVudHMgPSBuZXcgU2V0KCk7XHJcbiAgICAgICAgaXNzdWVzLmZvckVhY2goKGlzc3VlOmFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFDbGllbnRzLmhhcyhpc3N1ZS50ZXh0KSkge1xyXG4gICAgICAgICAgICBDbGllbnRzLmFkZChpc3N1ZS50ZXh0KTtcclxuICAgICAgICAgICAgdW5pcXVlSXNzdWVzLnB1c2goaXNzdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGZpbHRyZWRPYmplY3QgPSAodGhpcy5kYXRhT2JqZWN0LmZpbmQoKG9iajogYW55KSA9PiBvYmouRGVzY3JpcHRpb24gPT09IFwiU3RvcmUgSWRcIikpXHJcbiAgICAgICAgZmlsdHJlZE9iamVjdC5Jc3N1ZXMgPSB1bmlxdWVJc3N1ZXM7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBlcnJvcjooZXJyOmFueSk9PiB7XHJcbiAgICAgICAgXHJcbiAgICB9LFxyXG4gICAgY29tcGxldGUoKSB7fVxyXG59KVxyXG4gfVxyXG5cclxuc2VhcmNoQXVkaXRzKGV2ZW50OmFueSl7XHJcbiAgdGhpcy5zZWFyY2hBdWRpdCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxufVxyXG5cclxuZXhwb3J0QXVkaXRBc1hsc3goKSB7XHJcbiAgdGhpcy5TZXJ2aWNlLmV4cG9ydCh0aGlzLm9mZnNldCwgMTAwMDAsIHRoaXMuc2VhcmNoQXVkaXQsdHJ1ZSkuc3Vic2NyaWJlKHtcclxuICAgIG5leHQ6KHJlczphbnkpPT57XHJcbiAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLnNhdmVBc0V4Y2VsRmlsZShyZXMsIFwid29ya3NwYWNlXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSxcclxuICAgIGVycm9yOihlcnI6YW55KT0+eyBcclxuICAgIH0sXHJcbiAgICBjb21wbGV0ZSgpIHt9XHJcbiAgfSlcclxufVxyXG5vblBhZ2VDaGFuZ2UocGFnZU9mZnNldDogbnVtYmVyKSB7XHJcbiAgdGhpcy5vZmZzZXQgPSBwYWdlT2Zmc2V0O1xyXG4gIHRoaXMud29ya0hpc3RvcnkoKTtcclxufVxyXG5cclxub25QYWdlU2l6ZUNoYW5nZShwYWdlU2l6ZTogbnVtYmVyKSB7XHJcbiAgdGhpcy5saW1pdCA9IHBhZ2VTaXplO1xyXG4gIHRoaXMub2Zmc2V0ID0gMTtcclxuICB0aGlzLndvcmtIaXN0b3J5KCk7XHJcbn1cclxuXHJcbkV4cG9ydEhpc3Rvcnlhc1hsc3goKSB7XHJcbiAgbGV0IGV4cG9ydERhdGEgPSB7XHJcbiAgICB1c2VySWQ6IHRoaXMudXNlcklkLFxyXG4gICAgZnJvbURhdGU6IHRoaXMuc3RhcnREYXRlLFxyXG4gICAgdG9EYXRlOiB0aGlzLmVuZERhdGUsXHJcbiAgICBmaWxlVHlwZTp0aGlzLmZpbGVUeXBlID8gdGhpcy5maWxlVHlwZSA6ICcnLFxyXG4gICAgZmlsdGVyQnlTdGF0dXM6IHRoaXMuZmlsdGVyQnlTdGF0dXMgPyB0aGlzLmZpbHRlckJ5U3RhdHVzIDogW10sXHJcbiAgICBmaWx0ZXJCeVN0b3JlSWQ6IHRoaXMuZmlsdGVyQnlTdG9yZUlkID8gdGhpcy5maWx0ZXJCeVN0b3JlSWQgOiBbXSxcclxuICAgIGZpbHRlckJ5VHlwZTogdGhpcy5maWx0ZXJCeVR5cGUgPyB0aGlzLmZpbHRlckJ5VHlwZSA6IFtdLFxyXG4gICAgc2VhcmNoVmFsdWU6IHRoaXMuc2VhcmNoSGlzdG9yeSxcclxuICAgIGxpbWl0OiAxMDAwMCxcclxuICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXHJcbiAgICBzb3J0Q29sdW1OYW1lOiB0aGlzLnNvcnRDb2x1bU5hbWUsXHJcbiAgICBzb3J0Qnk6IHRoaXMuc29ydEJ5LFxyXG4gICAgaXNFeHBvcnQ6IHRydWVcclxuICB9XHJcbiAgdGhpcy5TZXJ2aWNlXHJcbiAgICAud29ya0hpc3RvcnlFeHBvcnQoZXhwb3J0RGF0YSlcclxuICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLnNhdmVBc0V4Y2VsRmlsZShyZXMsIFwiSGlzdG9yeVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOmFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuaGlzdG9yeU5vZGF0YSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5oaXN0b3J5TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICBjb21wbGV0ZSgpIHt9LFxyXG4gICAgfSk7XHJcbn1cclxuXHJcbnNvcnREYXRhKHZhbHVlOiBhbnkpIHtcclxuICB0aGlzLnNvcnRDb2x1bU5hbWUgPSB2YWx1ZTtcclxuICB0aGlzLnNvcnRCeSAqPSAtMTtcclxuICB0aGlzLndvcmtIaXN0b3J5KCk7XHJcbn1cclxuXHJcbnJlY2VpdmVEYXRhKGRhdGE6IGFueVtdKSB7XHJcbiAgdGhpcy5maWx0ZXJCeVN0b3JlSWQgPSBkYXRhXHJcbiAgICAuZmluZCgob2JqKSA9PiBvYmouRGVzY3JpcHRpb24gPT09IFwiU3RvcmUgSWRcIilcclxuICAgID8uSXNzdWVzLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtPy5pZCk7XHJcbiAgdGhpcy5maWx0ZXJCeVN0YXR1cyA9IGRhdGEuZmluZChcclxuICAgIChvYmopID0+IG9iai5EZXNjcmlwdGlvbiA9PT0gXCJTdGF0dXNcIlxyXG4gICk/Lklzc3Vlcz8uaWQ7XHJcbiAgdGhpcy5maWxlVHlwZSA9IGRhdGEuZmluZChcclxuICAgIChvYmopID0+IG9iai5EZXNjcmlwdGlvbiA9PT0gXCJGaWxlIERhdGVcIlxyXG4gICk/Lklzc3Vlcz8uaWQ7XHJcbiAgdGhpcy5maWx0ZXJCeVR5cGUgPSBkYXRhXHJcbiAgICAgIC5maW5kKChvYmopID0+IG9iai5EZXNjcmlwdGlvbiA9PT0gXCJUeXBlXCIpXHJcbiAgICAgID8uSXNzdWVzLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtPy5pZCk7XHJcbiAgXHJcbiAgdGhpcy53b3JrSGlzdG9yeSgpO1xyXG59XHJcblxyXG5zZWFyY2hIaXN0b3J5VGFibGUoKSB7XHJcbiAgdGhpcy53b3JrSGlzdG9yeSgpO1xyXG59XHJcbnNlbGVjdEV4cG9ydEl0ZW0odmFsdWU6YW55KXtcclxuICB0aGlzLnNlbGVjdGVkRXhwb3J0SXNzdWUgPSB2YWx1ZTtcclxuICB0aGlzLmV4cG9ydEF1ZGl0QXNYbHN4KCk7XHJcbn1cclxuXHJcbnZpZXdIaXN0b3J5KGRhdGE6YW55KXtcclxuICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsc2VydmljZS5vcGVuKFZpZXdoaXN0b3J5Q29tcG9uZW50LHsgY2VudGVyZWQ6dHJ1ZSxzaXplOidsZyd9KVxyXG4gICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5kYXRhID0gZGF0YTtcclxufVxyXG5cclxuYXBwbHlGaWx0ZXJzKGV2ZW50OmFueSl7XHJcbiAgaWYgKGV2ZW50Py5sZW5ndGgpIHtcclxuICAgIGV2ZW50LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZWxlbWVudC5EZXNjcmlwdGlvbiA9PT0gXCJTdGF0dXNcIikge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJc3N1ZSA9IGVsZW1lbnQuSXNzdWVzLm1hcCgodmFsOiBhbnkpID0+IHZhbD8uaWQpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgfVxyXG4gICAgaWYodGhpcy5zZWxlY3RlZElzc3VlLmxlbmd0aCA9PT0gNilcclxuICAgICAgdGhpcy5zZWxlY3RlZElzc3VlID1bXTtcclxuICB9XHJcblxyXG4gIGJhY2t0b1pvbmUoKXtcclxuICAgIHRoaXMuc2VsZWN0ZWRDbGllbnQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGZyb21DaGlsZChldmVudDphbnkpe1xyXG4gICAgdGhpcy5zZWxlY3RlZENsaWVudCA9IGV2ZW50O1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwdC0zXCI+XHJcbiAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtbGFiZWwgbWItMlwiPkF1ZGl0IFRpY2tldHM8L3NwYW4+XHJcbiAgICAgICAgPC9oMz5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwidXNlckRhdGEgPT09J1dvcmtzcGFjZSdcIiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xIHBvc2l0aW9uLWFic29sdXRlIG1zLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBvcGFjaXR5PVwiMC41XCIgeD1cIjE3LjAzNjVcIiB5PVwiMTUuMTIyM1wiIHdpZHRoPVwiOC4xNTU0NlwiIGhlaWdodD1cIjJcIiByeD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInJvdGF0ZSg0NSAxNy4wMzY1IDE1LjEyMjMpXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcmVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMSAxOUM2LjU1NTU2IDE5IDMgMTUuNDQ0NCAzIDExQzMgNi41NTU1NiA2LjU1NTU2IDMgMTEgM0MxNS40NDQ0IDMgMTkgNi41NTU1NiAxOSAxMUMxOSAxNS40NDQ0IDE1LjQ0NDQgMTkgMTEgMTlaTTExIDVDNy41MzMzMyA1IDUgNy41MzMzMyA1IDExQzUgMTQuNDY2NyA3LjUzMzMzIDE3IDExIDE3QzE0LjQ2NjcgMTcgMTcgMTQuNDY2NyAxNyAxMUMxNyA3LjUzMzMzIDE0LjQ2NjcgNSAxMSA1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHBzLTE0IG1lLTJcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGNoYW5nZSk9XCJzZWFyY2hBdWRpdHMoJGV2ZW50KVwiLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZXhwb3J0QXVkaXRBc1hsc3goKVwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHAtMyB0ZXh0LW5vd3JhcCBib3JkZXIgYm9yZGVyLWdyYXkgbXMtMiBtZS0yXCIgdHlwZT1cImJ1dHRvblwiPjxzcGFuPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3LjUgMTIuNVYxNS44MzMzQzE3LjUgMTYuMjc1NCAxNy4zMjQ0IDE2LjY5OTMgMTcuMDExOCAxNy4wMTE4QzE2LjY5OTMgMTcuMzI0NCAxNi4yNzU0IDE3LjUgMTUuODMzMyAxNy41SDQuMTY2NjdDMy43MjQ2NCAxNy41IDMuMzAwNzIgMTcuMzI0NCAyLjk4ODE2IDE3LjAxMThDMi42NzU1OSAxNi42OTkzIDIuNSAxNi4yNzU0IDIuNSAxNS44MzMzVjEyLjVNMTQuMTY2NyA2LjY2NjY3TDEwIDIuNU0xMCAyLjVMNS44MzMzMyA2LjY2NjY3TTEwIDIuNVYxMi41XCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj4gRXhwb3J0PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInVzZXJEYXRhID09PSdIaXN0b3J5J1wiIGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlIG15LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTEgcG9zaXRpb24tYWJzb2x1dGUgbXMtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IG9wYWNpdHk9XCIwLjVcIiB4PVwiMTcuMDM2NVwiIHk9XCIxNS4xMjIzXCIgd2lkdGg9XCI4LjE1NTQ2XCIgaGVpZ2h0PVwiMlwiIHJ4PVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwicm90YXRlKDQ1IDE3LjAzNjUgMTUuMTIyMylcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9yZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExIDE5QzYuNTU1NTYgMTkgMyAxNS40NDQ0IDMgMTFDMyA2LjU1NTU2IDYuNTU1NTYgMyAxMSAzQzE1LjQ0NDQgMyAxOSA2LjU1NTU2IDE5IDExQzE5IDE1LjQ0NDQgMTUuNDQ0NCAxOSAxMSAxOVpNMTEgNUM3LjUzMzMzIDUgNSA3LjUzMzMzIDUgMTFDNSAxNC40NjY3IDcuNTMzMzMgMTcgMTEgMTdDMTQuNDY2NyAxNyAxNyAxNC40NjY3IDE3IDExQzE3IDcuNTMzMzMgMTQuNDY2NyA1IDExIDVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcHMtMTQgbWUtMlwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBbKG5nTW9kZWwpXT1cInNlYXJjaEhpc3RvcnlcIiAoaW5wdXQpPVwic2VhcmNoSGlzdG9yeVRhYmxlKClcIiAvPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xIG1lLTNcIiBzdHlsZT1cIndpZHRoOiAzMzVweCAhaW1wb3J0YW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMSBwb3NpdGlvbi1hYnNvbHV0ZSBtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEzLjMzMzMgMS42NjY2M1Y0Ljk5OTk2TTYuNjY2NjcgMS42NjY2M1Y0Ljk5OTk2TTIuNSA4LjMzMzI5SDE3LjVNNC4xNjY2NyAzLjMzMzI5SDE1LjgzMzNDMTYuNzUzOCAzLjMzMzI5IDE3LjUgNC4wNzk0OCAxNy41IDQuOTk5OTZWMTYuNjY2NkMxNy41IDE3LjU4NzEgMTYuNzUzOCAxOC4zMzMzIDE1LjgzMzMgMTguMzMzM0g0LjE2NjY3QzMuMjQ2MTkgMTguMzMzMyAyLjUgMTcuNTg3MSAyLjUgMTYuNjY2NlY0Ljk5OTk2QzIuNSA0LjA3OTQ4IDMuMjQ2MTkgMy4zMzMyOSA0LjE2NjY3IDMuMzMzMjlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtc29saWQgZGF0ZSBkcm9wZG93bi1pdGVtIFwiIGlkPVwia3RfZGF0ZXRpbWVwaWNrZXJfM1wiID4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZ4LWRhdGUtcmFuZ2UgZm9ybS1jb250cm9sIHBzLTE0XCIgc3R5bGU9XCJtaW4td2lkdGg6IDI2MHB4ICFpbXBvcnRhbnQ7XCIgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBuZ3hEYXRlcmFuZ2VwaWNrZXJNZCBbZHJvcHNdPVwiJ2Rvd24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcGVuc109XCIncmlnaHQnXCIgW3Jhbmdlc109XCJyYW5nZXNcIiBbc2hvd0N1c3RvbVJhbmdlTGFiZWxdPVwidHJ1ZVwiIFthbHdheXNTaG93Q2FsZW5kYXJzXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrZWVwQ2FsZW5kYXJPcGVuaW5nV2l0aFJhbmdlXT1cInRydWVcIiBbc2hvd0NhbmNlbF09XCJ0cnVlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZERhdGVSYW5nZVwiIChzdGFydERhdGVDaGFuZ2VkKT1cIm9uU3RhcnREYXRlQ2hhbmdlKCRldmVudClcIiAgW2lzQ3VzdG9tRGF0ZV09XCJpc0N1c3RvbURhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvY2FsZV09XCJ7IGZvcm1hdDogJ0RELU1NLVlZWVknLCBmaXJzdERheTogMSwgbW9udGhOYW1lczogWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ10gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0ZXNVcGRhdGVkKT1cImRhdGVjaGFuZ2UoJGV2ZW50KVwiIG5hbWU9XCJkYXRlcmFuZ2VcIiBbcmVhZG9ubHldPVwidHJ1ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bGliLWZpbHRlcnMgKm5nSWY9XCJzdG9yZUxpc3RcIiBbZGF0YU9iamVjdF09XCJkYXRhT2JqZWN0XCIgKGFwcGxpZWRGaWx0ZXJzKT1cInJlY2VpdmVEYXRhKCRldmVudClcIiA+PC9saWItZmlsdGVycz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFoaXN0b3J5Tm9kYXRhXCIgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib3BlbkRyb3Bkb3duKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBteC0yIGJ0bi1vdXRsaW5lIGJ0bi1vdXRsaW5lLWRlZmF1bHQgcm91bmRlZC0zIHRleHQtbm93cmFwIGJvcmRlci12YWxcIj48c3Bhbj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU0xNC4xNjY3IDYuNjY2NjdMMTAgMi41TTEwIDIuNUw1LjgzMzMzIDYuNjY2NjdNMTAgMi41VjEyLjVcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0yXCI+RXhwb3J0PC9zcGFuPiA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRyb3BEb3duXCIgY2xhc3M9XCJjYXJkIHB5LTEgdy0yMDBweCBwb3NpdGlvbi1hYnNvbHV0ZSB0b3AtNTBweCBlbmQtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCAqbmdGb3I9XCJsZXQgaXRlbSBvZiBFeHBvcnRJdGVtc1wiIGNsYXNzPVwibGlzdC11bnN0eWxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBbbmdDbGFzc109XCJ0aGlzLnNlbGVjdGVkRXhwb3J0SXNzdWUgPT09IGl0ZW0gPyAnYWN0aXZlJyA6ICcnXCIgY2xhc3M9XCJjYW1lcmEgcHgtNSBpdGVtcyBmdy1zZW1pYm9sZCBjdXJzb3ItcG9pbnRlciBweS0yXCIgKGNsaWNrKT1cInNlbGVjdEV4cG9ydEl0ZW0oaXRlbSlcIj57e2l0ZW19fTwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LTJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG92ZXJmbG93LWF1dG8gaC01NXB4XCI+XHJcbiAgICAgICAgICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtc3RyZXRjaCBuYXYtbGluZS10YWJzIG5hdi1saW5lLXRhYnMtMnggYm9yZGVyLXRyYW5zcGFyZW50IGZzLTUgZnctYm9sZGVyIGZsZXgtbm93cmFwXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgKGNsaWNrKT1cInVzZXJWYWx1ZSgnV29ya3NwYWNlJylcIiAgY2xhc3M9XCJuYXYtaXRlbSBjdXJzb3ItcG9pbnRlclwiPjxhIFtuZ0NsYXNzXT1cInVzZXJEYXRhID09PSdXb3Jrc3BhY2UnID8gJ2FjdGl2ZScgOicnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuYXYtbGluayB0ZXh0LWFjdGl2ZS1wcmltYXJ5IG1lLTZcIj5Xb3Jrc3BhY2U8L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIChjbGljayk9XCJ1c2VyVmFsdWUoJ0hpc3RvcnknKVwiIGNsYXNzPVwibmF2LWl0ZW0gY3Vyc29yLXBvaW50ZXJcIj48YSBbbmdDbGFzc109XCJ1c2VyRGF0YSA9PT0nSGlzdG9yeScgPyAnYWN0aXZlJyA6JydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5hdi1saW5rIHRleHQtYWN0aXZlLXByaW1hcnkgbWUtNlwiPkhpc3Rvcnk8L2E+PC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtdC01XCI+PGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJzZWxlY3RUeXBlKCd0cmFmZmljJylcIiBbbmdDbGFzc109XCJzZWxlY3RlZFR5cGUgPT09ICd0cmFmZmljJyA/ICdhY3RpdmUgdGV4dC1hY3RpdmUtcHJpbWFyeScgOiAndGV4dFN1YidcIiBjbGFzcz1cInBlLTUgcHktMyByb3VuZGVkLTMgY3Vyc29yLXBvaW50ZXIgZnctc2VtaWJvbGRcclxuICAgICAgICAgICAgZnctc2VtaWJvbGQgXCI+VHJhZmZpYzwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJzZWxlY3RUeXBlKCd6b25lJylcIiBbbmdDbGFzc109XCJzZWxlY3RlZFR5cGUgPT09ICd6b25lJyA/ICdhY3RpdmUgdGV4dC1wcmltYXJ5JyA6ICd0ZXh0U3ViJ1wiIGNsYXNzPVwicHgtNSBweS0zIHJvdW5kZWQtMyBjdXJzb3ItcG9pbnRlciBmdy1zZW1pYm9sZFxyXG4gICAgICAgICAgICBmdy1zZW1pYm9sZFwiPlpvbmU8L2Rpdj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkQ2xpZW50XCIgKGNsaWNrKT1cImJhY2t0b1pvbmUoKVwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHB4LTQgcHktMyBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHN2Z1xyXG4gICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMi44MzI3IDYuOTk5MzVIMS4xNjYwMk0xLjE2NjAyIDYuOTk5MzVMNi45OTkzNSAxMi44MzI3TTEuMTY2MDIgNi45OTkzNUw2Ljk5OTM1IDEuMTY2MDJcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+IFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIFxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJ1c2VyRGF0YSA9PT0gJ0hpc3RvcnknICYmIHNlbGVjdGVkVHlwZSA9PT0gJ3RyYWZmaWMnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWhpc3RvcnlMb2FkaW5nICYmICFoaXN0b3J5Tm9kYXRhXCIgY2xhc3M9XCJwdC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+ICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgnZmlsZURhdGUnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZSBEYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNvcnRDb2x1bU5hbWUgPT09ICdmaWxlRGF0ZScgJiYgc29ydEJ5ICE9PSAxIHx8IHNvcnRDb2x1bU5hbWUgIT09ICdmaWxlRGF0ZScgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4wMDAxNiAxLjMzMzM3VjEwLjY2NjdNNi4wMDAxNiAxMC42NjY3TDEwLjY2NjggNi4wMDAwNE02LjAwMDE2IDEwLjY2NjdMMS4zMzM1IDYuMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSAnZmlsZURhdGUnICYmIHNvcnRCeSAhPT0gLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjAwMDE2IDEwLjY2NjdMNi4wMDAxNiAxLjMzMzM3TTYuMDAwMTYgMS4zMzMzN0wxLjMzMzUgNi4wMDAwNE02LjAwMDE2IDEuMzMzMzdMMTAuNjY2OCA2LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCdjbGllbnROYW1lJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGllbnQgTmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic29ydENvbHVtTmFtZSA9PT0gJ2NsaWVudE5hbWUnICYmIHNvcnRCeSAhPT0gMSB8fCBzb3J0Q29sdW1OYW1lICE9PSAnY2xpZW50TmFtZScgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjAwMDE2IDEuMzMzMzdWMTAuNjY2N002LjAwMDE2IDEwLjY2NjdMMTAuNjY2OCA2LjAwMDA0TTYuMDAwMTYgMTAuNjY2N0wxLjMzMzUgNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSAnY2xpZW50TmFtZScgJiYgc29ydEJ5ICE9PSAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4wMDAxNiAxMC42NjY3TDYuMDAwMTYgMS4zMzMzN002LjAwMDE2IDEuMzMzMzdMMS4zMzM1IDYuMDAwMDRNNi4wMDAxNiAxLjMzMzM3TDEwLjY2NjggNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCdjbGllbnRJZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGllbnQgSWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic29ydENvbHVtTmFtZSA9PT0gJ2NsaWVudElkJyAmJiBzb3J0QnkgIT09IDEgfHwgc29ydENvbHVtTmFtZSAhPT0gJ2NsaWVudElkJyBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjAwMDE2IDEuMzMzMzdWMTAuNjY2N002LjAwMDE2IDEwLjY2NjdMMTAuNjY2OCA2LjAwMDA0TTYuMDAwMTYgMTAuNjY2N0wxLjMzMzUgNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNvcnRDb2x1bU5hbWUgPT09ICdjbGllbnRJZCcgJiYgc29ydEJ5ICE9PSAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuMDAwMTYgMTAuNjY2N0w2LjAwMDE2IDEuMzMzMzdNNi4wMDAxNiAxLjMzMzM3TDEuMzMzNSA2LjAwMDA0TTYuMDAwMTYgMS4zMzMzN0wxMC42NjY4IDYuMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ3N0b3JlTmFtZScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmUgTmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic29ydENvbHVtTmFtZSA9PT0gJ3N0b3JlTmFtZScgJiYgc29ydEJ5ICE9PSAxIHx8IHNvcnRDb2x1bU5hbWUgIT09ICdzdG9yZU5hbWUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjAwMDE2IDEuMzMzMzdWMTAuNjY2N002LjAwMDE2IDEwLjY2NjdMMTAuNjY2OCA2LjAwMDA0TTYuMDAwMTYgMTAuNjY2N0wxLjMzMzUgNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSAnc3RvcmVOYW1lJyAmJiBzb3J0QnkgIT09IC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjAwMDE2IDEwLjY2NjdMNi4wMDAxNiAxLjMzMzM3TTYuMDAwMTYgMS4zMzMzN0wxLjMzMzUgNi4wMDAwNE02LjAwMDE2IDEuMzMzMzdMMTAuNjY2OCA2LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ3N0b3JlSWQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmUgSWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic29ydENvbHVtTmFtZSA9PT0gJ3N0b3JlSWQnICYmIHNvcnRCeSAhPT0gMSB8fCBzb3J0Q29sdW1OYW1lICE9PSAnc3RvcmVJZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjAwMDE2IDEuMzMzMzdWMTAuNjY2N002LjAwMDE2IDEwLjY2NjdMMTAuNjY2OCA2LjAwMDA0TTYuMDAwMTYgMTAuNjY2N0wxLjMzMzUgNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNvcnRDb2x1bU5hbWUgPT09ICdzdG9yZUlkJyAmJiBzb3J0QnkgIT09IC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4wMDAxNiAxMC42NjY3TDYuMDAwMTYgMS4zMzMzN002LjAwMDE2IDEuMzMzMzdMMS4zMzM1IDYuMDAwMDRNNi4wMDAxNiAxLjMzMzM3TDEwLjY2NjggNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgndHlwZScpXCI+VHlwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSAndHlwZScgJiYgc29ydEJ5ICE9PSAxIHx8IHNvcnRDb2x1bU5hbWUgIT09ICd0eXBlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuMDAwMTYgMS4zMzMzN1YxMC42NjY3TTYuMDAwMTYgMTAuNjY2N0wxMC42NjY4IDYuMDAwMDRNNi4wMDAxNiAxMC42NjY3TDEuMzMzNSA2LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic29ydENvbHVtTmFtZSA9PT0gJ3R5cGUnICYmIHNvcnRCeSAhPT0gLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjAwMDE2IDEwLjY2NjdMNi4wMDAxNiAxLjMzMzM3TTYuMDAwMTYgMS4zMzMzN0wxLjMzMzUgNi4wMDAwNE02LjAwMDE2IDEuMzMzMzdMMTAuNjY2OCA2LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ0JDJylcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJDXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSAnQkMnICYmIHNvcnRCeSAhPT0gMSB8fCBzb3J0Q29sdW1OYW1lICE9PSAnQkMnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjAwMDE2IDEuMzMzMzdWMTAuNjY2N002LjAwMDE2IDEwLjY2NjdMMTAuNjY2OCA2LjAwMDA0TTYuMDAwMTYgMTAuNjY2N0wxLjMzMzUgNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSAnQkMnICYmIHNvcnRCeSAhPT0gLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuMDAwMTYgMTAuNjY2N0w2LjAwMDE2IDEuMzMzMzdNNi4wMDAxNiAxLjMzMzM3TDEuMzMzNSA2LjAwMDA0TTYuMDAwMTYgMS4zMzMzN0wxMC42NjY4IDYuMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ0FDJylcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSAnQUMnICYmIHNvcnRCeSAhPT0gMSB8fCBzb3J0Q29sdW1OYW1lICE9PSAnQUMnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjAwMDE2IDEuMzMzMzdWMTAuNjY2N002LjAwMDE2IDEwLjY2NjdMMTAuNjY2OCA2LjAwMDA0TTYuMDAwMTYgMTAuNjY2N0wxLjMzMzUgNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSAnQUMnICYmIHNvcnRCeSAhPT0gLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuMDAwMTYgMTAuNjY2N0w2LjAwMDE2IDEuMzMzMzdNNi4wMDAxNiAxLjMzMzM3TDEuMzMzNSA2LjAwMDA0TTYuMDAwMTYgMS4zMzMzN0wxMC42NjY4IDYuMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgnYWNjdXJhY3knKVwiPkFjY3VyYWN5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNvcnRDb2x1bU5hbWUgPT09ICdhY2N1cmFjeScgJiYgc29ydEJ5ICE9PSAxIHx8IHNvcnRDb2x1bU5hbWUgIT09ICdhY2N1cmFjeSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjAwMDE2IDEuMzMzMzdWMTAuNjY2N002LjAwMDE2IDEwLjY2NjdMMTAuNjY2OCA2LjAwMDA0TTYuMDAwMTYgMTAuNjY2N0wxLjMzMzUgNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNvcnRDb2x1bU5hbWUgPT09ICdhY2N1cmFjeScgJiYgc29ydEJ5ICE9PSAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuMDAwMTYgMTAuNjY2N0w2LjAwMDE2IDEuMzMzMzdNNi4wMDAxNiAxLjMzMzM3TDEuMzMzNSA2LjAwMDA0TTYuMDAwMTYgMS4zMzMzN0wxMC42NjY4IDYuMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCdzdGFydHRpbWUnKVwiPlN0YXJ0IFRpbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic29ydENvbHVtTmFtZSA9PT0gJ3N0YXJ0dGltZScgJiYgc29ydEJ5ICE9PSAxIHx8IHNvcnRDb2x1bU5hbWUgIT09ICdzdGFydHRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4wMDAxNiAxLjMzMzM3VjEwLjY2NjdNNi4wMDAxNiAxMC42NjY3TDEwLjY2NjggNi4wMDAwNE02LjAwMDE2IDEwLjY2NjdMMS4zMzM1IDYuMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSAnc3RhcnR0aW1lJyAmJiBzb3J0QnkgIT09IC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4wMDAxNiAxMC42NjY3TDYuMDAwMTYgMS4zMzMzN002LjAwMDE2IDEuMzMzMzdMMS4zMzM1IDYuMDAwMDRNNi4wMDAxNiAxLjMzMzM3TDEwLjY2NjggNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ2VuZHRpbWUnKVwiPkVuZCBUaW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNvcnRDb2x1bU5hbWUgPT09ICdlbmR0aW1lJyAmJiBzb3J0QnkgIT09IDEgfHwgc29ydENvbHVtTmFtZSAhPT0gJ2VuZHRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4wMDAxNiAxLjMzMzM3VjEwLjY2NjdNNi4wMDAxNiAxMC42NjY3TDEwLjY2NjggNi4wMDAwNE02LjAwMDE2IDEwLjY2NjdMMS4zMzM1IDYuMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSAnZW5kdGltZScgJiYgc29ydEJ5ICE9PSAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuMDAwMTYgMTAuNjY2N0w2LjAwMDE2IDEuMzMzMzdNNi4wMDAxNiAxLjMzMzM3TDEuMzMzNSA2LjAwMDA0TTYuMDAwMTYgMS4zMzMzN0wxMC42NjY4IDYuMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCd0aW1lc3BlbnQnKVwiPlRpbWUgU3BlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic29ydENvbHVtTmFtZSA9PT0gJ3RpbWVzcGVudCcgJiYgc29ydEJ5ICE9PSAxIHx8IHNvcnRDb2x1bU5hbWUgIT09ICd0aW1lc3BlbnQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4wMDAxNiAxLjMzMzM3VjEwLjY2NjdNNi4wMDAxNiAxMC42NjY3TDEwLjY2NjggNi4wMDAwNE02LjAwMDE2IDEwLjY2NjdMMS4zMzM1IDYuMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSAndGltZXNwZW50JyAmJiBzb3J0QnkgIT09IC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4wMDAxNiAxMC42NjY3TDYuMDAwMTYgMS4zMzMzN002LjAwMDE2IDEuMzMzMzdMMS4zMzM1IDYuMDAwMDRNNi4wMDAxNiAxLjMzMzM3TDEwLjY2NjggNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ2NyZWF0ZWRBdCcpXCI+Q3JlYXRlZCBBdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSAnY3JlYXRlZEF0JyAmJiBzb3J0QnkgIT09IDEgfHwgc29ydENvbHVtTmFtZSAhPT0gJ2NyZWF0ZWRBdCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjAwMDE2IDEuMzMzMzdWMTAuNjY2N002LjAwMDE2IDEwLjY2NjdMMTAuNjY2OCA2LjAwMDA0TTYuMDAwMTYgMTAuNjY2N0wxLjMzMzUgNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNvcnRDb2x1bU5hbWUgPT09ICdjcmVhdGVkQXQnICYmIHNvcnRCeSAhPT0gLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjAwMDE2IDEwLjY2NjdMNi4wMDAxNiAxLjMzMzM3TTYuMDAwMTYgMS4zMzMzN0wxLjMzMzUgNi4wMDAwNE02LjAwMDE2IDEuMzMzMzdMMTAuNjY2OCA2LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5TdGF0dXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkFjdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGhpc3Rvcnkgb2Ygd29ya0hpc3RvcnlkYXRhOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3toaXN0b3J5Py5maWxlRGF0ZSA/IGhpc3Rvcnk/LmZpbGVEYXRlIDogJy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2hpc3Rvcnk/LmNsaWVudE5hbWUgPyBoaXN0b3J5Py5jbGllbnROYW1lIDonLS0nfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7aGlzdG9yeT8uY2xpZW50SWQgPyBoaXN0b3J5Py5jbGllbnRJZCA6Jy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2hpc3Rvcnk/LnN0b3JlTmFtZSA/IGhpc3Rvcnk/LnN0b3JlTmFtZSA6ICctLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3toaXN0b3J5Py5zdG9yZUlkID8gaGlzdG9yeT8uc3RvcmVJZCA6ICctLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3toaXN0b3J5Py5hdWRpdFR5cGUgPyBoaXN0b3J5Py5hdWRpdFR5cGUgOictLSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3toaXN0b3J5Py5iZWZvcmVDb3VudCA/PyAnLS0nfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7aGlzdG9yeT8uYWZ0ZXJDb3VudCA/PyAnLS0nfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7aGlzdG9yeT8uYWNjdXJhY3kgPz8gJy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2hpc3Rvcnk/LnN0YXJ0VGltZSA/IGhpc3Rvcnk/LnN0YXJ0VGltZSA6Jy0tJ319PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e2hpc3Rvcnk/LmVuZFRpbWUgPyBoaXN0b3J5Py5lbmRUaW1lIDonLS0nfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7aGlzdG9yeT8udGltZVNwZW50ID8gaGlzdG9yeT8udGltZVNwZW50IDonLS0nfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7aGlzdG9yeT8uY3JlYXRlZEF0ID8gKGhpc3Rvcnk/LmNyZWF0ZWRBdCB8IGN1c3RvbURhdGVGb3JtYXQpIDonLS0nfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJoaXN0b3J5LmF1ZGl0U3RhdHVzID09PSdkcmFmdGVkJ1wiIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtd2FybmluZ1wiPkRyYWZ0PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJoaXN0b3J5LmF1ZGl0U3RhdHVzID09PSdjb21wbGV0ZWQnXCIgY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1zdWNjZXNzXCI+Q29tcGxldGVkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJoaXN0b3J5LmF1ZGl0U3RhdHVzID09PSdpbnByb2dyZXNzJ1wiIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeVwiPkluXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZ3Jlc3M8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImhpc3RvcnkuYXVkaXRTdGF0dXMgPT09J3NraXBwZWQnXCIgY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5XCI+U2tpcDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwidmlld0hpc3RvcnkoaGlzdG9yeSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMC44MzMzNzQgMTBDMC44MzMzNzQgMTAgNC4xNjY3MSAzLjMzMzM3IDEwIDMuMzMzMzdDMTUuODMzNCAzLjMzMzM3IDE5LjE2NjcgMTAgMTkuMTY2NyAxMEMxOS4xNjY3IDEwIDE1LjgzMzQgMTYuNjY2NyAxMCAxNi42NjY3QzQuMTY2NzEgMTYuNjY2NyAwLjgzMzM3NCAxMCAwLjgzMzM3NCAxMFpcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwIDEyLjVDMTEuMzgwOCAxMi41IDEyLjUgMTEuMzgwOCAxMi41IDEwQzEyLjUgOC42MTkzMyAxMS4zODA4IDcuNTAwMDQgMTAgNy41MDAwNEM4LjYxOTMzIDcuNTAwMDQgNy41MDAwNCA4LjYxOTMzIDcuNTAwMDQgMTBDNy41MDAwNCAxMS4zODA4IDguNjE5MzMgMTIuNSAxMCAxMi41WlwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4gICBcclxuICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgIDxsaWItcGFnaW5hdGlvbiBbaXRlbXNQZXJQYWdlXT1cImxpbWl0XCIgW2N1cnJlbnRQYWdlXT1cIm9mZnNldFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwidG90YWxDb3VudFwiIFtwYWdpbmF0aW9uU2l6ZXNdPVwicGFnaW5hdGlvblNpemVzXCIgW3BhZ2VTaXplXT1cInNldExpbWl0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCIgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiPjwvbGliLXBhZ2luYXRpb24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhpc3RvcnlMb2FkaW5nXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoaXN0b3J5Tm9kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMiBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLXNyY1wiIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ljb25zL05vZGF0YS5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInVzZXJEYXRhID09PSAnV29ya3NwYWNlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1hdWRpdC1tYW5hZ2VtZW50IFtzZWFyY2hBdWRpdF09XCJzZWFyY2hBdWRpdFwiIFtzZWxlY3RlZFR5cGVdPVwic2VsZWN0ZWRUeXBlXCIgW3NlbGVjdGVkQ2xpZW50XT1cInNlbGVjdGVkQ2xpZW50XCIgKGNpbGRFdmVudCk9XCJmcm9tQ2hpbGQoJGV2ZW50KVwiPjwvbGliLWF1ZGl0LW1hbmFnZW1lbnQ+XHJcbiAgICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=