tango-app-ui-manage-tickets 3.7.0-beta.70 → 3.7.0-beta.71
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.
- package/esm2022/lib/components/add-csm-modal/add-csm-modal.component.mjs +98 -0
- package/esm2022/lib/components/audit-log/audit-log.component.mjs +11 -0
- package/esm2022/lib/components/audit-mapping-list/audit-mapping-list.component.mjs +498 -0
- package/esm2022/lib/components/audit-metrics/audit-metrics.component.mjs +298 -0
- package/esm2022/lib/components/audit-report-popup/audit-report-popup.component.mjs +389 -0
- package/esm2022/lib/components/audit-retag/audit-retag.component.mjs +480 -0
- package/esm2022/lib/components/comment-model/comment-model.component.mjs +58 -0
- package/esm2022/lib/components/count/count.component.mjs +89 -0
- package/esm2022/lib/components/custom-select/custom-select.component.mjs +187 -0
- package/esm2022/lib/components/filter-options/filter-options.component.mjs +41 -0
- package/esm2022/lib/components/footfall-dic/footfall-dic.component.mjs +1061 -0
- package/esm2022/lib/components/footfall-dicview/footfall-dicview.component.mjs +1014 -0
- package/esm2022/lib/components/footfall-popup/footfall-popup.component.mjs +15 -0
- package/esm2022/lib/components/group-select/group-select.component.mjs +155 -0
- package/esm2022/lib/components/re-trigger/re-trigger.component.mjs +96 -0
- package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +108 -0
- package/esm2022/lib/components/remove-audit/remove-audit.component.mjs +81 -0
- package/esm2022/lib/components/start-audit/start-audit.component.mjs +758 -0
- package/esm2022/lib/components/tango-manage-tickets/tango-manage-tickets.component.mjs +131 -0
- package/esm2022/lib/components/ticket-filter-panel/ticket-filter-panel.component.mjs +435 -0
- package/esm2022/lib/components/ticket-footfall-new/ticket-footfall-new.component.mjs +2488 -0
- package/esm2022/lib/components/ticketclosepopup/ticketclosepopup.component.mjs +43 -0
- package/esm2022/lib/components/tickets/tickets.component.mjs +847 -0
- package/esm2022/lib/components/viewcategory/viewcategory.component.mjs +89 -0
- package/esm2022/lib/services/audit.service.mjs +88 -0
- package/esm2022/lib/services/excel.service.mjs +45 -0
- package/esm2022/lib/services/ticket.service.mjs +319 -0
- package/esm2022/lib/services/timer.service.mjs +84 -0
- package/esm2022/lib/tango-manage-tickets-routing.module.mjs +44 -0
- package/esm2022/lib/tango-manage-tickets.module.mjs +109 -0
- package/esm2022/public-api.mjs +6 -0
- package/esm2022/tango-app-ui-manage-tickets.mjs +5 -0
- package/fesm2022/tango-app-ui-manage-tickets.mjs +9922 -0
- package/fesm2022/tango-app-ui-manage-tickets.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/add-csm-modal/add-csm-modal.component.d.ts +30 -0
- package/lib/components/audit-log/audit-log.component.d.ts +5 -0
- package/lib/components/audit-mapping-list/audit-mapping-list.component.d.ts +73 -0
- package/lib/components/audit-metrics/audit-metrics.component.d.ts +59 -0
- package/lib/components/audit-report-popup/audit-report-popup.component.d.ts +52 -0
- package/lib/components/audit-retag/audit-retag.component.d.ts +59 -0
- package/lib/components/comment-model/comment-model.component.d.ts +17 -0
- package/lib/components/count/count.component.d.ts +23 -0
- package/lib/components/custom-select/custom-select.component.d.ts +35 -0
- package/lib/components/filter-options/filter-options.component.d.ts +15 -0
- package/lib/components/footfall-dic/footfall-dic.component.d.ts +143 -0
- package/lib/components/footfall-dicview/footfall-dicview.component.d.ts +132 -0
- package/lib/components/footfall-popup/footfall-popup.component.d.ts +8 -0
- package/lib/components/group-select/group-select.component.d.ts +33 -0
- package/lib/components/re-trigger/re-trigger.component.d.ts +32 -0
- package/lib/components/reactive-select/reactive-select.component.d.ts +32 -0
- package/lib/components/remove-audit/remove-audit.component.d.ts +16 -0
- package/lib/components/start-audit/start-audit.component.d.ts +86 -0
- package/lib/components/tango-manage-tickets/tango-manage-tickets.component.d.ts +28 -0
- package/lib/components/ticket-filter-panel/ticket-filter-panel.component.d.ts +79 -0
- package/lib/components/ticket-footfall-new/ticket-footfall-new.component.d.ts +293 -0
- package/lib/components/ticketclosepopup/ticketclosepopup.component.d.ts +15 -0
- package/lib/components/tickets/tickets.component.d.ts +88 -0
- package/lib/components/viewcategory/viewcategory.component.d.ts +16 -0
- package/lib/services/audit.service.d.ts +36 -0
- package/lib/services/excel.service.d.ts +10 -0
- package/lib/services/ticket.service.d.ts +87 -0
- package/lib/services/timer.service.d.ts +22 -0
- package/lib/tango-manage-tickets-routing.module.d.ts +7 -0
- package/lib/tango-manage-tickets.module.d.ts +38 -0
- package/package.json +25 -12
- package/{src/public-api.ts → public-api.d.ts} +2 -8
- package/.eslintrc.json +0 -37
- package/ng-package.json +0 -7
- package/src/lib/components/add-csm-modal/add-csm-modal.component.html +0 -32
- package/src/lib/components/add-csm-modal/add-csm-modal.component.scss +0 -14
- package/src/lib/components/add-csm-modal/add-csm-modal.component.spec.ts +0 -23
- package/src/lib/components/add-csm-modal/add-csm-modal.component.ts +0 -94
- package/src/lib/components/audit-log/audit-log.component.html +0 -1
- package/src/lib/components/audit-log/audit-log.component.scss +0 -0
- package/src/lib/components/audit-log/audit-log.component.spec.ts +0 -23
- package/src/lib/components/audit-log/audit-log.component.ts +0 -10
- package/src/lib/components/audit-mapping-list/audit-mapping-list.component.html +0 -234
- package/src/lib/components/audit-mapping-list/audit-mapping-list.component.scss +0 -186
- package/src/lib/components/audit-mapping-list/audit-mapping-list.component.spec.ts +0 -23
- package/src/lib/components/audit-mapping-list/audit-mapping-list.component.ts +0 -536
- package/src/lib/components/audit-metrics/audit-metrics.component.html +0 -345
- package/src/lib/components/audit-metrics/audit-metrics.component.scss +0 -34
- package/src/lib/components/audit-metrics/audit-metrics.component.spec.ts +0 -23
- package/src/lib/components/audit-metrics/audit-metrics.component.ts +0 -292
- package/src/lib/components/audit-report-popup/audit-report-popup.component.html +0 -111
- package/src/lib/components/audit-report-popup/audit-report-popup.component.scss +0 -101
- package/src/lib/components/audit-report-popup/audit-report-popup.component.spec.ts +0 -23
- package/src/lib/components/audit-report-popup/audit-report-popup.component.ts +0 -397
- package/src/lib/components/audit-retag/audit-retag.component.html +0 -129
- package/src/lib/components/audit-retag/audit-retag.component.scss +0 -146
- package/src/lib/components/audit-retag/audit-retag.component.spec.ts +0 -23
- package/src/lib/components/audit-retag/audit-retag.component.ts +0 -497
- package/src/lib/components/comment-model/comment-model.component.html +0 -24
- package/src/lib/components/comment-model/comment-model.component.scss +0 -20
- package/src/lib/components/comment-model/comment-model.component.spec.ts +0 -23
- package/src/lib/components/comment-model/comment-model.component.ts +0 -53
- package/src/lib/components/count/count.component.html +0 -54
- package/src/lib/components/count/count.component.scss +0 -14
- package/src/lib/components/count/count.component.spec.ts +0 -23
- package/src/lib/components/count/count.component.ts +0 -82
- package/src/lib/components/custom-select/custom-select.component.html +0 -134
- package/src/lib/components/custom-select/custom-select.component.scss +0 -204
- package/src/lib/components/custom-select/custom-select.component.spec.ts +0 -23
- package/src/lib/components/custom-select/custom-select.component.ts +0 -189
- package/src/lib/components/filter-options/filter-options.component.html +0 -51
- package/src/lib/components/filter-options/filter-options.component.scss +0 -102
- package/src/lib/components/filter-options/filter-options.component.spec.ts +0 -23
- package/src/lib/components/filter-options/filter-options.component.ts +0 -38
- package/src/lib/components/footfall-dic/footfall-dic.component.html +0 -1275
- package/src/lib/components/footfall-dic/footfall-dic.component.scss +0 -273
- package/src/lib/components/footfall-dic/footfall-dic.component.spec.ts +0 -23
- package/src/lib/components/footfall-dic/footfall-dic.component.ts +0 -1206
- package/src/lib/components/footfall-dicview/footfall-dicview.component.html +0 -1136
- package/src/lib/components/footfall-dicview/footfall-dicview.component.scss +0 -416
- package/src/lib/components/footfall-dicview/footfall-dicview.component.spec.ts +0 -23
- package/src/lib/components/footfall-dicview/footfall-dicview.component.ts +0 -1168
- package/src/lib/components/footfall-popup/footfall-popup.component.html +0 -61
- package/src/lib/components/footfall-popup/footfall-popup.component.scss +0 -20
- package/src/lib/components/footfall-popup/footfall-popup.component.spec.ts +0 -23
- package/src/lib/components/footfall-popup/footfall-popup.component.ts +0 -12
- package/src/lib/components/group-select/group-select.component.html +0 -44
- package/src/lib/components/group-select/group-select.component.scss +0 -144
- package/src/lib/components/group-select/group-select.component.spec.ts +0 -23
- package/src/lib/components/group-select/group-select.component.ts +0 -145
- package/src/lib/components/re-trigger/re-trigger.component.html +0 -53
- package/src/lib/components/re-trigger/re-trigger.component.scss +0 -16
- package/src/lib/components/re-trigger/re-trigger.component.spec.ts +0 -23
- package/src/lib/components/re-trigger/re-trigger.component.ts +0 -96
- package/src/lib/components/reactive-select/reactive-select.component.html +0 -18
- package/src/lib/components/reactive-select/reactive-select.component.scss +0 -52
- package/src/lib/components/reactive-select/reactive-select.component.spec.ts +0 -23
- package/src/lib/components/reactive-select/reactive-select.component.ts +0 -104
- package/src/lib/components/remove-audit/remove-audit.component.html +0 -38
- package/src/lib/components/remove-audit/remove-audit.component.scss +0 -27
- package/src/lib/components/remove-audit/remove-audit.component.spec.ts +0 -23
- package/src/lib/components/remove-audit/remove-audit.component.ts +0 -81
- package/src/lib/components/start-audit/start-audit.component.html +0 -174
- package/src/lib/components/start-audit/start-audit.component.scss +0 -185
- package/src/lib/components/start-audit/start-audit.component.spec.ts +0 -23
- package/src/lib/components/start-audit/start-audit.component.ts +0 -772
- package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.html +0 -43
- package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.scss +0 -35
- package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.spec.ts +0 -23
- package/src/lib/components/tango-manage-tickets/tango-manage-tickets.component.ts +0 -118
- package/src/lib/components/ticket-filter-panel/ticket-filter-panel.component.html +0 -386
- package/src/lib/components/ticket-filter-panel/ticket-filter-panel.component.scss +0 -87
- package/src/lib/components/ticket-filter-panel/ticket-filter-panel.component.spec.ts +0 -23
- package/src/lib/components/ticket-filter-panel/ticket-filter-panel.component.ts +0 -493
- package/src/lib/components/ticket-footfall-new/ticket-footfall-new.component.html +0 -3751
- package/src/lib/components/ticket-footfall-new/ticket-footfall-new.component.scss +0 -1240
- package/src/lib/components/ticket-footfall-new/ticket-footfall-new.component.spec.ts +0 -23
- package/src/lib/components/ticket-footfall-new/ticket-footfall-new.component.ts +0 -2863
- package/src/lib/components/ticketclosepopup/ticketclosepopup.component.html +0 -100
- package/src/lib/components/ticketclosepopup/ticketclosepopup.component.scss +0 -34
- package/src/lib/components/ticketclosepopup/ticketclosepopup.component.spec.ts +0 -23
- package/src/lib/components/ticketclosepopup/ticketclosepopup.component.ts +0 -48
- package/src/lib/components/tickets/tickets.component.html +0 -451
- package/src/lib/components/tickets/tickets.component.scss +0 -131
- package/src/lib/components/tickets/tickets.component.spec.ts +0 -23
- package/src/lib/components/tickets/tickets.component.ts +0 -809
- package/src/lib/components/viewcategory/viewcategory.component.html +0 -38
- package/src/lib/components/viewcategory/viewcategory.component.scss +0 -29
- package/src/lib/components/viewcategory/viewcategory.component.spec.ts +0 -23
- package/src/lib/components/viewcategory/viewcategory.component.ts +0 -79
- package/src/lib/services/audit.service.spec.ts +0 -16
- package/src/lib/services/audit.service.ts +0 -98
- package/src/lib/services/excel.service.ts +0 -48
- package/src/lib/services/ticket.service.spec.ts +0 -16
- package/src/lib/services/ticket.service.ts +0 -501
- package/src/lib/services/timer.service.spec.ts +0 -16
- package/src/lib/services/timer.service.ts +0 -92
- package/src/lib/tango-manage-tickets-routing.module.ts +0 -37
- package/src/lib/tango-manage-tickets.module.ts +0 -68
- package/tsconfig.lib.json +0 -14
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -14
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
import { Component, ViewChild } from '@angular/core';
|
|
2
|
+
import { Subject, takeUntil } from 'rxjs';
|
|
3
|
+
import dayjs from "dayjs";
|
|
4
|
+
import "dayjs/locale/en";
|
|
5
|
+
import { ReTriggerComponent } from '../re-trigger/re-trigger.component';
|
|
6
|
+
import { CountComponent } from '../count/count.component';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "tango-app-ui-global";
|
|
9
|
+
import * as i2 from "@ng-bootstrap/ng-bootstrap";
|
|
10
|
+
import * as i3 from "../../services/ticket.service";
|
|
11
|
+
import * as i4 from "tango-app-ui-shared";
|
|
12
|
+
import * as i5 from "../../services/excel.service";
|
|
13
|
+
import * as i6 from "@angular/common";
|
|
14
|
+
import * as i7 from "@angular/forms";
|
|
15
|
+
export class AuditMetricsComponent {
|
|
16
|
+
gs;
|
|
17
|
+
modalService;
|
|
18
|
+
service;
|
|
19
|
+
toast;
|
|
20
|
+
excel;
|
|
21
|
+
noData = false;
|
|
22
|
+
loading = true;
|
|
23
|
+
storesData = [];
|
|
24
|
+
activity = [
|
|
25
|
+
{ type: 'Audit', FileDate: '28-11-2023', Time: '03:24 pm', beforeCout: '300', AfterCount: '100' },
|
|
26
|
+
{ type: 'Re-Audit', FileDate: '28-10-2023', Time: '03:24 pm', beforeCout: '350', AfterCount: '120' },
|
|
27
|
+
{ type: 'Audit', FileDate: '28-11-2023', Time: '03:24 pm', beforeCout: '300', AfterCount: '100' }
|
|
28
|
+
];
|
|
29
|
+
activitylog;
|
|
30
|
+
destroy$ = new Subject();
|
|
31
|
+
headerFilter;
|
|
32
|
+
sortColumName = '';
|
|
33
|
+
sortBy = 1;
|
|
34
|
+
filterByClient = [];
|
|
35
|
+
filterByStatus = [];
|
|
36
|
+
pagination = [10, 20, 30];
|
|
37
|
+
searchTerm;
|
|
38
|
+
limit = 10;
|
|
39
|
+
offset = 1;
|
|
40
|
+
selectedValue;
|
|
41
|
+
dayjs = dayjs;
|
|
42
|
+
filterByStore = [];
|
|
43
|
+
totalCount;
|
|
44
|
+
selectedTab = '';
|
|
45
|
+
dataObject = [
|
|
46
|
+
{ Description: 'Module Type', type: 'single', Issues: [{ id: 'traffic', text: "Traffic" }, { id: 'zone', text: "Zone" }] },
|
|
47
|
+
{ Description: 'Clients', Issues: [] },
|
|
48
|
+
{ Description: 'Status', Issues: [{ id: 'closed', text: "Completed" }, { id: 'inprogress', text: "Inprogress" }, { id: 'drafted', text: "Draft" }, { id: 'assigned', text: "Assigned" }, { id: 'not_assign', text: "Not Assigened" }, { id: 'skipped', text: "Skip" },] }
|
|
49
|
+
];
|
|
50
|
+
clientList;
|
|
51
|
+
selectedType = 'traffic';
|
|
52
|
+
constructor(gs, modalService, service, toast, excel) {
|
|
53
|
+
this.gs = gs;
|
|
54
|
+
this.modalService = modalService;
|
|
55
|
+
this.service = service;
|
|
56
|
+
this.toast = toast;
|
|
57
|
+
this.excel = excel;
|
|
58
|
+
}
|
|
59
|
+
ngOnInit() {
|
|
60
|
+
this.gs.dataRangeValue.pipe(takeUntil(this.destroy$)).subscribe((data) => {
|
|
61
|
+
if (data != null) {
|
|
62
|
+
this.headerFilter = data;
|
|
63
|
+
this.metricsList();
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
metricsList() {
|
|
68
|
+
let data = {
|
|
69
|
+
fromDate: this.dayjs(this.headerFilter?.date?.startDate).format('YYYY-MM-DD'),
|
|
70
|
+
toDate: this.dayjs(this.headerFilter?.date?.endDate).format('YYYY-MM-DD'),
|
|
71
|
+
filterByClientId: this.filterByClient,
|
|
72
|
+
filterByStoreId: this.filterByStore,
|
|
73
|
+
filterByStatus: this.filterByStatus,
|
|
74
|
+
filterByAuditType: this.selectedTab === '' ? [] : [this.selectedTab],
|
|
75
|
+
filterByModuleType: [this.selectedType],
|
|
76
|
+
searchValue: this.searchTerm,
|
|
77
|
+
sortBy: this.sortBy,
|
|
78
|
+
limit: this.limit,
|
|
79
|
+
offset: this.offset,
|
|
80
|
+
isExport: false
|
|
81
|
+
};
|
|
82
|
+
if (this.sortColumName) {
|
|
83
|
+
data.sortColumnName = this.sortColumName;
|
|
84
|
+
}
|
|
85
|
+
else if (this.searchTerm) {
|
|
86
|
+
data.searchValue = this.searchTerm;
|
|
87
|
+
}
|
|
88
|
+
this.getclientList();
|
|
89
|
+
this.service.getstoreMetrics(data).pipe(takeUntil(this.destroy$)).subscribe({
|
|
90
|
+
next: (res) => {
|
|
91
|
+
if (res && res?.code === 200) {
|
|
92
|
+
this.storesData = res?.data?.result;
|
|
93
|
+
this.totalCount = res?.data?.count;
|
|
94
|
+
if (!this.storesData?.length) {
|
|
95
|
+
this.noData = true;
|
|
96
|
+
}
|
|
97
|
+
if (this.totalCount < 10) {
|
|
98
|
+
this.pagination = [this.totalCount];
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
this.pagination = [10, 20, 30];
|
|
102
|
+
}
|
|
103
|
+
this.loading = false;
|
|
104
|
+
this.noData = false;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
this.noData = true;
|
|
108
|
+
this.loading = false;
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
error: (err) => {
|
|
112
|
+
this.noData = true;
|
|
113
|
+
this.loading = false;
|
|
114
|
+
this.toast.getErrorToast(err?.message);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
setItemsperPage() {
|
|
119
|
+
if (this.totalCount < 10) {
|
|
120
|
+
return this.totalCount;
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
return this.limit;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
getclientList() {
|
|
127
|
+
this.service.getclientList().pipe(takeUntil(this.destroy$)).subscribe({
|
|
128
|
+
next: (res) => {
|
|
129
|
+
if (res && res?.code === 200) {
|
|
130
|
+
this.clientList = res?.data?.result;
|
|
131
|
+
const issues = this.clientList.map((obj) => ({ text: obj.clientName, id: obj.clientId }));
|
|
132
|
+
const uniqueIssues = [];
|
|
133
|
+
const Clients = new Set();
|
|
134
|
+
issues.forEach((issue) => {
|
|
135
|
+
if (!Clients.has(issue.text)) {
|
|
136
|
+
Clients.add(issue.text);
|
|
137
|
+
uniqueIssues.push(issue);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
const filtredObject = (this.dataObject.find((obj) => obj.Description === "Clients"));
|
|
141
|
+
filtredObject.Issues = uniqueIssues;
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
error: (err) => {
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
ngOnDestroy() {
|
|
149
|
+
this.destroy$.next(true);
|
|
150
|
+
this.destroy$.complete();
|
|
151
|
+
}
|
|
152
|
+
receiveData(data) {
|
|
153
|
+
this.filterByClient = data.find((obj) => obj.Description === "Clients")?.Issues.map((item) => item?.id);
|
|
154
|
+
this.filterByStatus = data.find((obj) => obj.Description === "Status")?.Issues?.map((item) => item?.id);
|
|
155
|
+
this.selectedType = data.find((obj) => obj.Description === 'Module Type')?.Issues?.id;
|
|
156
|
+
this.metricsList();
|
|
157
|
+
}
|
|
158
|
+
onPageChange(pageOffset) {
|
|
159
|
+
this.pagination.offset = pageOffset;
|
|
160
|
+
this.metricsList();
|
|
161
|
+
}
|
|
162
|
+
onPageSizeChange(pageSize) {
|
|
163
|
+
this.pagination.limit = pageSize;
|
|
164
|
+
this.pagination.offset = 1;
|
|
165
|
+
this.metricsList();
|
|
166
|
+
}
|
|
167
|
+
exportXLSX() {
|
|
168
|
+
let data = {
|
|
169
|
+
fromDate: this.dayjs(this.headerFilter?.date?.startDate).format('YYYY-MM-DD'),
|
|
170
|
+
toDate: this.dayjs(this.headerFilter?.date?.endDate).format('YYYY-MM-DD'),
|
|
171
|
+
filterByClientId: this.filterByClient,
|
|
172
|
+
filterByStoreId: this.filterByStore,
|
|
173
|
+
filterByStatus: this.filterByStatus,
|
|
174
|
+
filterByAuditType: this.selectedTab === '' ? [] : [this.selectedTab],
|
|
175
|
+
filterByModuleType: [this.selectedType],
|
|
176
|
+
searchValue: this.searchTerm,
|
|
177
|
+
sortBy: this.sortBy,
|
|
178
|
+
limit: 10000,
|
|
179
|
+
offset: this.offset,
|
|
180
|
+
isExport: true
|
|
181
|
+
};
|
|
182
|
+
if (this.sortColumName) {
|
|
183
|
+
data.sortColumnName = this.sortColumName;
|
|
184
|
+
}
|
|
185
|
+
else if (this.searchTerm) {
|
|
186
|
+
data.searchValue = this.searchTerm;
|
|
187
|
+
}
|
|
188
|
+
this.service.getstoreMetricsExport(data).pipe(takeUntil(this.destroy$)).subscribe({
|
|
189
|
+
next: (res) => {
|
|
190
|
+
if (res) {
|
|
191
|
+
this.excel.saveAsExcelFile(res, 'AuditMetrics');
|
|
192
|
+
}
|
|
193
|
+
},
|
|
194
|
+
error: (err) => {
|
|
195
|
+
this.toast.getErrorToast(err?.message);
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
selectedTabs(data) {
|
|
200
|
+
if (data === 'all') {
|
|
201
|
+
this.selectedTab = '';
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
this.selectedTab = data;
|
|
205
|
+
}
|
|
206
|
+
this.limit = 10;
|
|
207
|
+
this.offset = 1;
|
|
208
|
+
this.metricsList();
|
|
209
|
+
}
|
|
210
|
+
searchData() {
|
|
211
|
+
this.searchTerm = this.searchTerm;
|
|
212
|
+
this.metricsList();
|
|
213
|
+
}
|
|
214
|
+
openBeforecount(value) {
|
|
215
|
+
const modalRef = this.modalService.open(CountComponent, {
|
|
216
|
+
centered: true,
|
|
217
|
+
size: 'xl'
|
|
218
|
+
});
|
|
219
|
+
modalRef.componentInstance.data = {
|
|
220
|
+
type: 'before',
|
|
221
|
+
fileDate: value?.fileDate,
|
|
222
|
+
storeId: value?.storeId,
|
|
223
|
+
selectedType: this.selectedType,
|
|
224
|
+
zoneName: value?.zoneName,
|
|
225
|
+
imageType: 'BC'
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
openAftercount(value) {
|
|
229
|
+
const modalRef = this.modalService.open(CountComponent, {
|
|
230
|
+
centered: true,
|
|
231
|
+
size: 'xl'
|
|
232
|
+
});
|
|
233
|
+
modalRef.componentInstance.data = {
|
|
234
|
+
type: 'after',
|
|
235
|
+
fileDate: value?.fileDate,
|
|
236
|
+
storeId: value?.storeId,
|
|
237
|
+
selectedType: this.selectedType,
|
|
238
|
+
zoneName: value?.zoneName,
|
|
239
|
+
imageType: 'AC'
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
openView() {
|
|
243
|
+
const modalRef = this.modalService.open(this.activitylog);
|
|
244
|
+
}
|
|
245
|
+
openreTrigger(value) {
|
|
246
|
+
const modalRef = this.modalService.open(ReTriggerComponent, {
|
|
247
|
+
centered: true,
|
|
248
|
+
// size:''
|
|
249
|
+
});
|
|
250
|
+
modalRef.componentInstance.reTrigerData = {
|
|
251
|
+
type: 'after',
|
|
252
|
+
data: value,
|
|
253
|
+
selectedType: this.selectedType
|
|
254
|
+
};
|
|
255
|
+
modalRef.closed.subscribe((res) => {
|
|
256
|
+
if (res) {
|
|
257
|
+
this.service.auditretrigger(res).pipe(takeUntil(this.destroy$)).subscribe({
|
|
258
|
+
next: (res) => {
|
|
259
|
+
if (res && res.code === 200) {
|
|
260
|
+
this.toast.getSuccessToast(res?.data?.result);
|
|
261
|
+
this.metricsList();
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
error: (err) => {
|
|
265
|
+
this.toast.getErrorToast(err?.message);
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
statusBadge(value) {
|
|
272
|
+
let AccountStatus = value;
|
|
273
|
+
if (AccountStatus === 'closed') {
|
|
274
|
+
return 'badge-light-success';
|
|
275
|
+
}
|
|
276
|
+
else if (AccountStatus === 'assigned' || AccountStatus === 'not Assigned') {
|
|
277
|
+
return 'badge-light-warning';
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
return 'badge-light-primary';
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
sortData(value) {
|
|
284
|
+
this.sortColumName = value;
|
|
285
|
+
this.sortBy *= -1;
|
|
286
|
+
this.metricsList();
|
|
287
|
+
}
|
|
288
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditMetricsComponent, deps: [{ token: i1.GlobalStateService }, { token: i2.NgbModal }, { token: i3.TicketService }, { token: i4.ToastService }, { token: i5.ExcelService }], target: i0.ɵɵFactoryTarget.Component });
|
|
289
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AuditMetricsComponent, selector: "lib-audit-metrics", viewQueries: [{ propertyName: "activitylog", first: true, predicate: ["activitylog"], descendants: true }], 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 Metrics</span>\r\n <!-- <span class=\"text-sub mb-2\">Last updated 1 hour ago</span> -->\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <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\" placeholder=\"Search\" autocomplete=\"off\"\r\n (change)=\"searchData()\" [(ngModel)]=\"searchTerm\" />\r\n \r\n <lib-filters *ngIf=\"clientList\" [dataObject]=\"dataObject\" (appliedFilters)=\"receiveData($event)\"></lib-filters>\r\n\r\n <button type=\"button\" *ngIf=\"!noData&&!loading\" (click)=\"exportXLSX()\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\">\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=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap horizontal-scroll\">\r\n <li class=\"nav-item\" (click)=\"selectedTabs('all')\">\r\n <a [ngClass]=\"selectedTab === '' ? 'active' : ''\" class=\"nav-link cursor-pointer no-border me-2\">\r\n All <span class=\"mx-2\"\r\n [ngClass]=\"selectedTab === '' ? 'text-border-priamry' : 'text-border'\">{{totalCount?.totalauditCount ? totalCount?.totalauditCount : 0}}</span>\r\n </a>\r\n </li>\r\n <li class=\"nav-item\" (click)=\"selectedTabs('Audit')\">\r\n <a [ngClass]=\"selectedTab === 'Audit' ? 'active' :''\" class=\"nav-link cursor-pointer no-border me-2\">\r\n Audit <span class=\"mx-2\"\r\n [ngClass]=\"selectedTab === 'Audit' ? 'text-border-priamry' : 'text-border'\">{{totalCount?.auditCount ? totalCount?.auditCount : 0}}</span>\r\n </a>\r\n </li>\r\n <li class=\"nav-item\" (click)=\"selectedTabs('ReAudit')\">\r\n <a [ngClass]=\"selectedTab === 'ReAudit' ? 'active' : ''\" class=\"nav-link cursor-pointer no-border me-2\">\r\n Re Audit <span class=\"mx-2\"\r\n [ngClass]=\"selectedTab === 'ReAudit' ? 'text-border-priamry' : 'text-border'\">{{totalCount?.reauditCount ? totalCount?.reauditCount : 0}}</span>\r\n </a>\r\n </li>\r\n </ul>\r\n <div *ngIf=\"!loading && !noData\" class=\"mt-5\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th>File Date</th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('storeName')\">\r\n Store Name\r\n <span\r\n *ngIf=\"sortColumName === 'storeName' && sortBy !== 1 || sortColumName !== 'storeName'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span\r\n *ngIf=\"sortColumName === 'storeName' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n \r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('storeId')\">\r\n Store Id\r\n <span\r\n *ngIf=\"sortColumName === 'storeId' && sortBy !== 1 || sortColumName !== 'storeId'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n <span\r\n *ngIf=\"sortColumName === 'storeId' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n \r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('userName')\">\r\n User Name\r\n <span\r\n *ngIf=\"sortColumName === 'userName' && sortBy !== 1 || sortColumName !== 'userName'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span\r\n *ngIf=\"sortColumName === 'userName' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n \r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('userEmail')\">\r\n User Email\r\n <span\r\n *ngIf=\"sortColumName === 'userEmail' && sortBy !== 1 || sortColumName !== 'userEmail'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span\r\n *ngIf=\"sortColumName === 'userEmail' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n \r\n </div></th>\r\n <th>BC</th>\r\n <th>AC</th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('accuracy')\">\r\n Accuracy\r\n <span\r\n *ngIf=\"sortColumName === 'accuracy' && sortBy !== 1 || sortColumName !== 'accuracy'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span\r\n *ngIf=\"sortColumName === 'accuracy' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n \r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('timeSpent')\">\r\n TimeSpent\r\n <span\r\n *ngIf=\"sortColumName === 'timeSpent' && sortBy !== 1 || sortColumName !== 'timeSpent'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span\r\n *ngIf=\"sortColumName === 'timeSpent' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n \r\n </div></th>\r\n <th>Audit Type</th>\r\n <th>Status</th>\r\n <th><span>Actions</span></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of storesData\">\r\n <td>\r\n <div>{{ item?.fileDate ? item?.fileDate :'NA' }}</div>\r\n </td>\r\n <td>\r\n <div>{{ item?.storeName ? item?.storeName :'NA' }}</div>\r\n </td>\r\n <td>\r\n <div>{{item?.storeId ? item?.storeId : 'NA'}}</div>\r\n </td>\r\n <td>\r\n <div>{{ item?.userName ? item?.userName :'NA' }}</div>\r\n </td>\r\n <td>\r\n <div>{{ item?.userEmail ? item?.userEmail :'NA' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"d-flex align-items-center\">\r\n <div [ngClass]=\"item?.beforeCount ? 'text-decoration-underline':''\" class=\"text-title text-primary cursor-pointer mb-1\" (click)=\"openBeforecount(item)\">\r\n {{ item?.beforeCount ?? '--' }}</div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"d-flex align-items-center\">\r\n <div [ngClass]=\"item?.afterCount ? 'text-decoration-underline':''\" class=\"text-title text-primary cursor-pointer mb-1\" (click)=\"openAftercount(item)\">\r\n {{ item?.afterCount ?? '--' }}</div>\r\n </div>\r\n </td>\r\n <td>\r\n <div>{{ item?.accuracy ?? '--' }}</div>\r\n </td>\r\n <td>{{ item?.timeSpent ? item?.timeSpent :'NA'}}</td>\r\n <td><span *ngIf=\"item?.auditType\" [ngClass]=\"item?.auditType === 'Audit' ? 'badge-light-success':'badge-light-warning'\" class=\"badge\">{{ item?.auditType }}</span></td>\r\n <td><span *ngIf=\"item?.status\" [ngClass]=\"statusBadge(item?.status)\" class=\"badge\">{{ item?.status | titlecase}}</span></td>\r\n <td><button class=\"btn btn-default btn-outline\" (click)=\"openView()\">View-Log</button>\r\n <button class=\"btn btn-default btn-outline ms-3\" [disabled]=\"item?.status === 'not_assign' || item?.status === 'assigned'\" (click)=\"openreTrigger(item)\">Re-Trigger</button></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!loading && !noData\" class=\"my-3\">\r\n <lib-pagination [itemsPerPage]=\"limit\" [currentPage]=\"offset\" [totalItems]=\"totalCount\"\r\n [paginationSizes]=\"pagination\" [pageSize]=\"setItemsperPage()\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n\r\n <div *ngIf=\"loading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"noData\" 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 w-25\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div> \r\n\r\n </div>\r\n</div>\r\n\r\n<ng-template #activitylog let-modal>\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n <div class=\"card-title\">\r\n <span class=\"card-label\">Activity Log</span>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"cursor-pointer\" (click)=\"modal.dismiss()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M15 5L5 15M5 5L15 15\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></div> \r\n </div>\r\n </div>\r\n <div class=\"card-body\">\r\n <div *ngFor=\"let log of activity\" class=\"d-flex mb-5 ms-5\">\r\n <div\r\n class=\"d-flex flex-column justify-content-center align-items-center pe-3\">\r\n <div class=\"d-flex align-items-centre justify-content-centre\">\r\n <!-- <img class=\"msgprofile\"\r\n src=\"./assets/tango/Images/userProfile.svg\"> -->\r\n <div class=\"symbol symbol-35px symbol-circle\">\r\n <span [ngClass]=\"log?.type === 'Audit' ? 'badge-light-success' : 'badge-light-primary'\" class=\"symbol-label badge-light-primary text-symbol\">\r\n <span [ngClass]=\"log?.type === 'Audit' ? 'text-success badge badge-light-success' : 'text-primary badge badge-light-primary'\" class=\"fs-4 fw-normal\">\r\n {{log?.type?.slice(0,1) | uppercase }}\r\n </span>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"p-0 h-100 mt-1 border border-1 border-gray\" style=\"width:0px\"></div>\r\n </div>\r\n <div class=\"py-3 pt-0\">\r\n <div class=\"activity-title fw-semibold mt-2 d-flex mb-4\">\r\n <span>{{log?.type}} </span><span class=\"ms-5 list\"><li>Fasila</li></span>\r\n </div>\r\n <div class=\"date-time mb-4\">\r\n {{log?.FileDate}} | {{log?.Time}}\r\n </div>\r\n <div class=\"\"><span class=\"badge badge-light-default fw-semibold\">Before Count : {{log?.beforeCout}}</span>\r\n <span class=\"badge badge-light-default fw-semibold ms-3\">After Count : {{log?.AfterCount}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.text-border{border-radius:16px!important;background:var(--Gray-100, #F2F4F7)!important;color:var(--Gray-700, #344054);text-align:center;font-size:14px;font-weight:500;line-height:20px;padding:2px 10px!important}.text-border-priamry{border-radius:16px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);text-align:center;font-size:14px;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}tr{vertical-align:middle!important}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "component", type: i4.FiltersComponent, selector: "lib-filters", inputs: ["dataObject"], outputs: ["appliedFilters"] }, { kind: "pipe", type: i6.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i6.TitleCasePipe, name: "titlecase" }] });
|
|
290
|
+
}
|
|
291
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditMetricsComponent, decorators: [{
|
|
292
|
+
type: Component,
|
|
293
|
+
args: [{ selector: 'lib-audit-metrics', 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 Metrics</span>\r\n <!-- <span class=\"text-sub mb-2\">Last updated 1 hour ago</span> -->\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <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\" placeholder=\"Search\" autocomplete=\"off\"\r\n (change)=\"searchData()\" [(ngModel)]=\"searchTerm\" />\r\n \r\n <lib-filters *ngIf=\"clientList\" [dataObject]=\"dataObject\" (appliedFilters)=\"receiveData($event)\"></lib-filters>\r\n\r\n <button type=\"button\" *ngIf=\"!noData&&!loading\" (click)=\"exportXLSX()\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\">\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=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"ms-2\">Export</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-body\">\r\n <ul class=\"nav nav-stretch nav-line-tabs1 nav-line-tabs border-transparent flex-nowrap horizontal-scroll\">\r\n <li class=\"nav-item\" (click)=\"selectedTabs('all')\">\r\n <a [ngClass]=\"selectedTab === '' ? 'active' : ''\" class=\"nav-link cursor-pointer no-border me-2\">\r\n All <span class=\"mx-2\"\r\n [ngClass]=\"selectedTab === '' ? 'text-border-priamry' : 'text-border'\">{{totalCount?.totalauditCount ? totalCount?.totalauditCount : 0}}</span>\r\n </a>\r\n </li>\r\n <li class=\"nav-item\" (click)=\"selectedTabs('Audit')\">\r\n <a [ngClass]=\"selectedTab === 'Audit' ? 'active' :''\" class=\"nav-link cursor-pointer no-border me-2\">\r\n Audit <span class=\"mx-2\"\r\n [ngClass]=\"selectedTab === 'Audit' ? 'text-border-priamry' : 'text-border'\">{{totalCount?.auditCount ? totalCount?.auditCount : 0}}</span>\r\n </a>\r\n </li>\r\n <li class=\"nav-item\" (click)=\"selectedTabs('ReAudit')\">\r\n <a [ngClass]=\"selectedTab === 'ReAudit' ? 'active' : ''\" class=\"nav-link cursor-pointer no-border me-2\">\r\n Re Audit <span class=\"mx-2\"\r\n [ngClass]=\"selectedTab === 'ReAudit' ? 'text-border-priamry' : 'text-border'\">{{totalCount?.reauditCount ? totalCount?.reauditCount : 0}}</span>\r\n </a>\r\n </li>\r\n </ul>\r\n <div *ngIf=\"!loading && !noData\" class=\"mt-5\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th>File Date</th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('storeName')\">\r\n Store Name\r\n <span\r\n *ngIf=\"sortColumName === 'storeName' && sortBy !== 1 || sortColumName !== 'storeName'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span\r\n *ngIf=\"sortColumName === 'storeName' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n \r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('storeId')\">\r\n Store Id\r\n <span\r\n *ngIf=\"sortColumName === 'storeId' && sortBy !== 1 || sortColumName !== 'storeId'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n <span\r\n *ngIf=\"sortColumName === 'storeId' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n \r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('userName')\">\r\n User Name\r\n <span\r\n *ngIf=\"sortColumName === 'userName' && sortBy !== 1 || sortColumName !== 'userName'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span\r\n *ngIf=\"sortColumName === 'userName' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n \r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('userEmail')\">\r\n User Email\r\n <span\r\n *ngIf=\"sortColumName === 'userEmail' && sortBy !== 1 || sortColumName !== 'userEmail'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span\r\n *ngIf=\"sortColumName === 'userEmail' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n \r\n </div></th>\r\n <th>BC</th>\r\n <th>AC</th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('accuracy')\">\r\n Accuracy\r\n <span\r\n *ngIf=\"sortColumName === 'accuracy' && sortBy !== 1 || sortColumName !== 'accuracy'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span\r\n *ngIf=\"sortColumName === 'accuracy' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n \r\n </div></th>\r\n <th><div class=\"cursor-pointer\" (click)=\"sortData('timeSpent')\">\r\n TimeSpent\r\n <span\r\n *ngIf=\"sortColumName === 'timeSpent' && sortBy !== 1 || sortColumName !== 'timeSpent'\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n <span\r\n *ngIf=\"sortColumName === 'timeSpent' && sortBy !== -1\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n 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\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n \r\n </div></th>\r\n <th>Audit Type</th>\r\n <th>Status</th>\r\n <th><span>Actions</span></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let item of storesData\">\r\n <td>\r\n <div>{{ item?.fileDate ? item?.fileDate :'NA' }}</div>\r\n </td>\r\n <td>\r\n <div>{{ item?.storeName ? item?.storeName :'NA' }}</div>\r\n </td>\r\n <td>\r\n <div>{{item?.storeId ? item?.storeId : 'NA'}}</div>\r\n </td>\r\n <td>\r\n <div>{{ item?.userName ? item?.userName :'NA' }}</div>\r\n </td>\r\n <td>\r\n <div>{{ item?.userEmail ? item?.userEmail :'NA' }}</div>\r\n </td>\r\n <td>\r\n <div class=\"d-flex align-items-center\">\r\n <div [ngClass]=\"item?.beforeCount ? 'text-decoration-underline':''\" class=\"text-title text-primary cursor-pointer mb-1\" (click)=\"openBeforecount(item)\">\r\n {{ item?.beforeCount ?? '--' }}</div>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"d-flex align-items-center\">\r\n <div [ngClass]=\"item?.afterCount ? 'text-decoration-underline':''\" class=\"text-title text-primary cursor-pointer mb-1\" (click)=\"openAftercount(item)\">\r\n {{ item?.afterCount ?? '--' }}</div>\r\n </div>\r\n </td>\r\n <td>\r\n <div>{{ item?.accuracy ?? '--' }}</div>\r\n </td>\r\n <td>{{ item?.timeSpent ? item?.timeSpent :'NA'}}</td>\r\n <td><span *ngIf=\"item?.auditType\" [ngClass]=\"item?.auditType === 'Audit' ? 'badge-light-success':'badge-light-warning'\" class=\"badge\">{{ item?.auditType }}</span></td>\r\n <td><span *ngIf=\"item?.status\" [ngClass]=\"statusBadge(item?.status)\" class=\"badge\">{{ item?.status | titlecase}}</span></td>\r\n <td><button class=\"btn btn-default btn-outline\" (click)=\"openView()\">View-Log</button>\r\n <button class=\"btn btn-default btn-outline ms-3\" [disabled]=\"item?.status === 'not_assign' || item?.status === 'assigned'\" (click)=\"openreTrigger(item)\">Re-Trigger</button></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!loading && !noData\" class=\"my-3\">\r\n <lib-pagination [itemsPerPage]=\"limit\" [currentPage]=\"offset\" [totalItems]=\"totalCount\"\r\n [paginationSizes]=\"pagination\" [pageSize]=\"setItemsperPage()\" (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n\r\n <div *ngIf=\"loading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"noData\" 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 w-25\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div> \r\n\r\n </div>\r\n</div>\r\n\r\n<ng-template #activitylog let-modal>\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n <div class=\"card-title\">\r\n <span class=\"card-label\">Activity Log</span>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <div class=\"cursor-pointer\" (click)=\"modal.dismiss()\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M15 5L5 15M5 5L15 15\" stroke=\"#101828\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg></div> \r\n </div>\r\n </div>\r\n <div class=\"card-body\">\r\n <div *ngFor=\"let log of activity\" class=\"d-flex mb-5 ms-5\">\r\n <div\r\n class=\"d-flex flex-column justify-content-center align-items-center pe-3\">\r\n <div class=\"d-flex align-items-centre justify-content-centre\">\r\n <!-- <img class=\"msgprofile\"\r\n src=\"./assets/tango/Images/userProfile.svg\"> -->\r\n <div class=\"symbol symbol-35px symbol-circle\">\r\n <span [ngClass]=\"log?.type === 'Audit' ? 'badge-light-success' : 'badge-light-primary'\" class=\"symbol-label badge-light-primary text-symbol\">\r\n <span [ngClass]=\"log?.type === 'Audit' ? 'text-success badge badge-light-success' : 'text-primary badge badge-light-primary'\" class=\"fs-4 fw-normal\">\r\n {{log?.type?.slice(0,1) | uppercase }}\r\n </span>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"p-0 h-100 mt-1 border border-1 border-gray\" style=\"width:0px\"></div>\r\n </div>\r\n <div class=\"py-3 pt-0\">\r\n <div class=\"activity-title fw-semibold mt-2 d-flex mb-4\">\r\n <span>{{log?.type}} </span><span class=\"ms-5 list\"><li>Fasila</li></span>\r\n </div>\r\n <div class=\"date-time mb-4\">\r\n {{log?.FileDate}} | {{log?.Time}}\r\n </div>\r\n <div class=\"\"><span class=\"badge badge-light-default fw-semibold\">Before Count : {{log?.beforeCout}}</span>\r\n <span class=\"badge badge-light-default fw-semibold ms-3\">After Count : {{log?.AfterCount}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".nav-item .nav-link.active{border:none;border-radius:6px;background:var(--Primary-50, #EAF8FF);padding:8px 12px}.nav-item .nav-link:hover{border:none}.text-border{border-radius:16px!important;background:var(--Gray-100, #F2F4F7)!important;color:var(--Gray-700, #344054);text-align:center;font-size:14px;font-weight:500;line-height:20px;padding:2px 10px!important}.text-border-priamry{border-radius:16px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3);text-align:center;font-size:14px;font-weight:500;line-height:20px;padding:2px 10px!important;mix-blend-mode:multiply!important}tr{vertical-align:middle!important}\n"] }]
|
|
294
|
+
}], ctorParameters: () => [{ type: i1.GlobalStateService }, { type: i2.NgbModal }, { type: i3.TicketService }, { type: i4.ToastService }, { type: i5.ExcelService }], propDecorators: { activitylog: [{
|
|
295
|
+
type: ViewChild,
|
|
296
|
+
args: ['activitylog']
|
|
297
|
+
}] } });
|
|
298
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtbWV0cmljcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2UtdGlja2V0cy9zcmMvbGliL2NvbXBvbmVudHMvYXVkaXQtbWV0cmljcy9hdWRpdC1tZXRyaWNzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS10aWNrZXRzL3NyYy9saWIvY29tcG9uZW50cy9hdWRpdC1tZXRyaWNzL2F1ZGl0LW1ldHJpY3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLGlCQUFpQixDQUFDO0FBR3pCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBSXhFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7O0FBUTFELE1BQU0sT0FBTyxxQkFBcUI7SUFvQ1o7SUFBOEI7SUFBOEI7SUFBK0I7SUFBMkI7SUFuQzFJLE1BQU0sR0FBVyxLQUFLLENBQUM7SUFDdkIsT0FBTyxHQUFXLElBQUksQ0FBQztJQUV2QixVQUFVLEdBQU8sRUFBRSxDQUFDO0lBQ3BCLFFBQVEsR0FBTztRQUNiLEVBQUMsSUFBSSxFQUFDLE9BQU8sRUFBQyxRQUFRLEVBQUMsWUFBWSxFQUFDLElBQUksRUFBQyxVQUFVLEVBQUMsVUFBVSxFQUFDLEtBQUssRUFBQyxVQUFVLEVBQUMsS0FBSyxFQUFDO1FBQ3RGLEVBQUMsSUFBSSxFQUFDLFVBQVUsRUFBQyxRQUFRLEVBQUMsWUFBWSxFQUFDLElBQUksRUFBQyxVQUFVLEVB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QXFCLHFLQ3BCbEMsK3pyQkF3VmM7OzRGRHBVRCxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBQ0UsbUJBQW1CO2dNQWNILFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5pbXBvcnQgZGF5anMgZnJvbSBcImRheWpzXCI7XHJcbmltcG9ydCBcImRheWpzL2xvY2FsZS9lblwiO1xyXG5pbXBvcnQgdXRjIGZyb20gXCJkYXlqcy9wbHVnaW4vdXRjXCI7XHJcbmltcG9ydCB0aW1lem9uZSBmcm9tIFwiZGF5anMvcGx1Z2luL3RpbWV6b25lXCI7XHJcbmltcG9ydCB7IFJlVHJpZ2dlckNvbXBvbmVudCB9IGZyb20gJy4uL3JlLXRyaWdnZXIvcmUtdHJpZ2dlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUaWNrZXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGlja2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcclxuaW1wb3J0IHsgRXhjZWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXhjZWwuc2VydmljZSc7XHJcbmltcG9ydCB7IENvdW50Q29tcG9uZW50IH0gZnJvbSAnLi4vY291bnQvY291bnQuY29tcG9uZW50JztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1hdWRpdC1tZXRyaWNzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXVkaXQtbWV0cmljcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2F1ZGl0LW1ldHJpY3MuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdWRpdE1ldHJpY3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsT25EZXN0cm95IHtcclxuICBub0RhdGE6Ym9vbGVhbiA9IGZhbHNlO1xyXG4gIGxvYWRpbmc6Ym9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHN0b3Jlc0RhdGE6YW55ID0gW107XHJcbiAgYWN0aXZpdHk6YW55ID0gW1xyXG4gICAge3R5cGU6J0F1ZGl0JyxGaWxlRGF0ZTonMjgtMTEtMjAyMycsVGltZTonMDM6MjQgcG0nLGJlZm9yZUNvdXQ6JzMwMCcsQWZ0ZXJDb3VudDonMTAwJ30sXHJcbiAgICB7dHlwZTonUmUtQXVkaXQnLEZpbGVEYXRlOicyOC0xMC0yMDIzJyxUaW1lOicwMzoyNCBwbScsYmVmb3JlQ291dDonMzUwJyxBZnRlckNvdW50OicxMjAnfSxcclxuICAgIHt0eXBlOidBdWRpdCcsRmlsZURhdGU6JzI4LTExLTIwMjMnLFRpbWU6JzAzOjI0IHBtJyxiZWZvcmVDb3V0OiczMDAnLEFmdGVyQ291bnQ6JzEwMCd9XHJcbiAgXVxyXG4gIEBWaWV3Q2hpbGQoJ2FjdGl2aXR5bG9nJykgYWN0aXZpdHlsb2c6YW55O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG4gIGhlYWRlckZpbHRlcjogYW55O1xyXG4gIHNvcnRDb2x1bU5hbWU6IGFueSA9ICcnO1xyXG4gIHNvcnRCeTogYW55ID0gMTtcclxuICBmaWx0ZXJCeUNsaWVudDogYW55ID0gW107XHJcbiAgZmlsdGVyQnlTdGF0dXM6IGFueSA9IFtdO1xyXG4gIHBhZ2luYXRpb246IGFueSA9IFsxMCwgMjAsIDMwXTtcclxuICBzZWFyY2hUZXJtOiBhbnk7XHJcbiAgbGltaXQ6YW55ID0gMTA7XHJcbiAgb2Zmc2V0OmFueSA9IDE7XHJcbiAgc2VsZWN0ZWRWYWx1ZTogc3RyaW5nO1xyXG4gIGRheWpzID0gZGF5anM7XHJcbiAgZmlsdGVyQnlTdG9yZTogYW55ID0gW107XHJcbiAgdG90YWxDb3VudDogYW55OyAgXHJcbiAgc2VsZWN0ZWRUYWI6YW55ID0gJyc7XHJcblxyXG4gIGRhdGFPYmplY3Q6YW55ID0gW1xyXG4gICAgeyBEZXNjcmlwdGlvbjogJ01vZHVsZSBUeXBlJyx0eXBlOidzaW5nbGUnLCBJc3N1ZXM6IFt7aWQ6J3RyYWZmaWMnLCB0ZXh0OiBcIlRyYWZmaWNcIn0se2lkOid6b25lJywgdGV4dDogXCJab25lXCIgfV19LFxyXG4gICAgeyBEZXNjcmlwdGlvbjogJ0NsaWVudHMnLCBJc3N1ZXM6IFtdIH0sXHJcbiAgICB7IERlc2NyaXB0aW9uOiAnU3RhdHVzJywgSXNzdWVzOiBbe2lkOidjbG9zZWQnLCB0ZXh0OiBcIkNvbXBsZXRlZFwiIH0sIHtpZDonaW5wcm9ncmVzcycsIHRleHQ6IFwiSW5wcm9ncmVzc1wiIH0se2lkOidkcmFmdGVkJywgdGV4dDogXCJEcmFmdFwiIH0se2lkOidhc3NpZ25lZCcsIHRleHQ6IFwiQXNzaWduZWRcIiB9LHtpZDonbm90X2Fzc2lnbicsIHRleHQ6IFwiTm90IEFzc2lnZW5lZFwiIH0se2lkOidza2lwcGVkJywgdGV4dDogXCJTa2lwXCJ9LF0gfVxyXG4gIF07XHJcbiAgXHJcbiAgY2xpZW50TGlzdDogYW55O1xyXG4gIHNlbGVjdGVkVHlwZTogYW55ID0gJ3RyYWZmaWMnO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGdzOkdsb2JhbFN0YXRlU2VydmljZSxwcml2YXRlIG1vZGFsU2VydmljZTpOZ2JNb2RhbCxwcml2YXRlIHNlcnZpY2U6IFRpY2tldFNlcnZpY2UscHJpdmF0ZSB0b2FzdDpUb2FzdFNlcnZpY2UscHJpdmF0ZSBleGNlbDpFeGNlbFNlcnZpY2Upe1xyXG4gICAgXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpe1xyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgaWYoZGF0YSE9bnVsbCl7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJGaWx0ZXIgPSBkYXRhXHJcbiAgICAgICAgdGhpcy5tZXRyaWNzTGlzdCgpO1xyXG4gICAgfVxyXG4gIH0pXHJcbiB9XHJcblxyXG4gbWV0cmljc0xpc3QoKXtcclxuICBsZXQgZGF0YTphbnkgPSB7XHJcbiAgICBmcm9tRGF0ZTogdGhpcy5kYXlqcyh0aGlzLmhlYWRlckZpbHRlcj8uZGF0ZT8uc3RhcnREYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQnKSxcclxuICAgIHRvRGF0ZTogdGhpcy5kYXlqcyh0aGlzLmhlYWRlckZpbHRlcj8uZGF0ZT8uZW5kRGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJyksXHJcbiAgICBmaWx0ZXJCeUNsaWVudElkIDogdGhpcy5maWx0ZXJCeUNsaWVudCxcclxuICAgIGZpbHRlckJ5U3RvcmVJZCA6IHRoaXMuZmlsdGVyQnlTdG9yZSxcclxuICAgIGZpbHRlckJ5U3RhdHVzIDogdGhpcy5maWx0ZXJCeVN0YXR1cyxcclxuICAgIGZpbHRlckJ5QXVkaXRUeXBlIDogdGhpcy5zZWxlY3RlZFRhYiA9PT0nJz8gW10gOiBbdGhpcy5zZWxlY3RlZFRhYl0sXHJcbiAgICBmaWx0ZXJCeU1vZHVsZVR5cGU6IFt0aGlzLnNlbGVjdGVkVHlwZV0sXHJcbiAgICBzZWFyY2hWYWx1ZTogdGhpcy5zZWFyY2hUZXJtLFxyXG4gICAgc29ydEJ5OiB0aGlzLnNvcnRCeSxcclxuICAgIGxpbWl0OiB0aGlzLmxpbWl0LFxyXG4gICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcclxuICAgIGlzRXhwb3J0OiBmYWxzZVxyXG4gIH07XHJcbiAgaWYodGhpcy5zb3J0Q29sdW1OYW1lKXtkYXRhLnNvcnRDb2x1bW5OYW1lID0gdGhpcy5zb3J0Q29sdW1OYW1lfWVsc2UgaWYodGhpcy5zZWFyY2hUZXJtKXtkYXRhLnNlYXJjaFZhbHVlID0gdGhpcy5zZWFyY2hUZXJtfVxyXG4gIHRoaXMuZ2V0Y2xpZW50TGlzdCgpO1xyXG4gIHRoaXMuc2VydmljZS5nZXRzdG9yZU1ldHJpY3MoZGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICBuZXh0OihyZXM6YW55KSA9PiB7XHJcbiAgICAgIGlmKHJlcyAmJiByZXM/LmNvZGUgPT09IDIwMCl7XHJcbiAgICAgICAgICB0aGlzLnN0b3Jlc0RhdGEgPSByZXM/LmRhdGE/LnJlc3VsdDtcclxuICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IHJlcz8uZGF0YT8uY291bnQ7XHJcbiAgICAgICAgICBpZighdGhpcy5zdG9yZXNEYXRhPy5sZW5ndGgpe1xyXG4gICAgICAgICAgICB0aGlzLm5vRGF0YSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZih0aGlzLnRvdGFsQ291bnQgPCAxMCl7XHJcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbiA9IFt0aGlzLnRvdGFsQ291bnRdXHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uID0gWzEwLCAyMCwgMzBdXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm9EYXRhID0gZmFsc2U7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9LFxyXG4gIGVycm9yOihlcnI6YW55KT0+e1xyXG4gICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChlcnI/Lm1lc3NhZ2UpXHJcbiAgfVxyXG4gfSlcclxufVxyXG5cclxuc2V0SXRlbXNwZXJQYWdlKCl7XHJcbiAgaWYodGhpcy50b3RhbENvdW50IDwgMTApe1xyXG4gICAgcmV0dXJuIHRoaXMudG90YWxDb3VudDtcclxuICB9ZWxzZXtcclxuICAgIHJldHVybiB0aGlzLmxpbWl0O1xyXG4gIH1cclxufVxyXG5cclxuZ2V0Y2xpZW50TGlzdCgpe1xyXG4gIHRoaXMuc2VydmljZS5nZXRjbGllbnRMaXN0KCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICBuZXh0OihyZXM6YW55KSA9PiB7XHJcbiAgICAgIGlmKHJlcyAmJiByZXM/LmNvZGUgPT09MjAwKXtcclxuICAgICAgICB0aGlzLmNsaWVudExpc3QgPSByZXM/LmRhdGE/LnJlc3VsdDtcclxuICAgICAgICBjb25zdCBpc3N1ZXMgPSB0aGlzLmNsaWVudExpc3QubWFwKChvYmo6IGFueSkgPT4gKHsgdGV4dDogb2JqLmNsaWVudE5hbWUsaWQ6b2JqLmNsaWVudElkIH0pKTtcclxuICAgICAgICBjb25zdCB1bmlxdWVJc3N1ZXM6YW55W10gPSBbXTtcclxuICAgICAgICBjb25zdCBDbGllbnRzID0gbmV3IFNldCgpO1xyXG4gICAgICAgIGlzc3Vlcy5mb3JFYWNoKChpc3N1ZTphbnkpID0+IHtcclxuICAgICAgICAgIGlmICghQ2xpZW50cy5oYXMoaXNzdWUudGV4dCkpIHtcclxuICAgICAgICAgICAgQ2xpZW50cy5hZGQoaXNzdWUudGV4dCk7XHJcbiAgICAgICAgICAgIHVuaXF1ZUlzc3Vlcy5wdXNoKGlzc3VlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBmaWx0cmVkT2JqZWN0ID0gKHRoaXMuZGF0YU9iamVjdC5maW5kKChvYmo6IGFueSkgPT4gb2JqLkRlc2NyaXB0aW9uID09PSBcIkNsaWVudHNcIikpXHJcbiAgICAgICAgZmlsdHJlZE9iamVjdC5Jc3N1ZXMgPSB1bmlxdWVJc3N1ZXM7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBlcnJvcjooZXJyOmFueSkgPT4ge1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxufSlcclxuIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICByZWNlaXZlRGF0YShkYXRhOmFueSkge1xyXG4gICAgdGhpcy5maWx0ZXJCeUNsaWVudCA9IGRhdGEuZmluZCgob2JqOmFueSkgPT4gb2JqLkRlc2NyaXB0aW9uID09PSBcIkNsaWVudHNcIik/Lklzc3Vlcy5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbT8uaWQpO1xyXG4gICAgdGhpcy5maWx0ZXJCeVN0YXR1cyA9IGRhdGEuZmluZCgob2JqOmFueSkgPT4gb2JqLkRlc2NyaXB0aW9uID09PSBcIlN0YXR1c1wiKT8uSXNzdWVzPy5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbT8uaWQpO1xyXG4gICAgdGhpcy5zZWxlY3RlZFR5cGUgPSBkYXRhLmZpbmQoKG9iajphbnkpID0+IG9iai5EZXNjcmlwdGlvbiA9PT0nTW9kdWxlIFR5cGUnKT8uSXNzdWVzPy5pZDtcclxuICAgIHRoaXMubWV0cmljc0xpc3QoKTtcclxuICB9XHJcblxyXG4gIG9uUGFnZUNoYW5nZShwYWdlT2Zmc2V0OiBhbnkpIHtcclxuICAgIHRoaXMucGFnaW5hdGlvbi5vZmZzZXQgPSBwYWdlT2Zmc2V0O1xyXG4gICAgdGhpcy5tZXRyaWNzTGlzdCgpO1xyXG4gIH1cclxuICBcclxuICBvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplOiBhbnkpIHtcclxuICAgIHRoaXMucGFnaW5hdGlvbi5saW1pdCA9IHBhZ2VTaXplO1xyXG4gICAgdGhpcy5wYWdpbmF0aW9uLm9mZnNldCA9IDE7XHJcbiAgICB0aGlzLm1ldHJpY3NMaXN0KCk7XHJcbiAgfVxyXG5cclxuICBleHBvcnRYTFNYKCl7XHJcbiAgICBsZXQgZGF0YTphbnkgPSB7XHJcbiAgICAgIGZyb21EYXRlOiB0aGlzLmRheWpzKHRoaXMuaGVhZGVyRmlsdGVyPy5kYXRlPy5zdGFydERhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpLFxyXG4gICAgICB0b0RhdGU6IHRoaXMuZGF5anModGhpcy5oZWFkZXJGaWx0ZXI/LmRhdGU/LmVuZERhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpLFxyXG4gICAgICBmaWx0ZXJCeUNsaWVudElkIDogdGhpcy5maWx0ZXJCeUNsaWVudCxcclxuICAgICAgZmlsdGVyQnlTdG9yZUlkIDogdGhpcy5maWx0ZXJCeVN0b3JlLFxyXG4gICAgICBmaWx0ZXJCeVN0YXR1cyA6IHRoaXMuZmlsdGVyQnlTdGF0dXMsXHJcbiAgICAgIGZpbHRlckJ5QXVkaXRUeXBlIDogdGhpcy5zZWxlY3RlZFRhYiA9PT0nJz8gW10gOiBbdGhpcy5zZWxlY3RlZFRhYl0sXHJcbiAgICAgIGZpbHRlckJ5TW9kdWxlVHlwZTogW3RoaXMuc2VsZWN0ZWRUeXBlXSxcclxuICAgICAgc2VhcmNoVmFsdWU6IHRoaXMuc2VhcmNoVGVybSxcclxuICAgICAgc29ydEJ5OiB0aGlzLnNvcnRCeSxcclxuICAgICAgbGltaXQ6IDEwMDAwLFxyXG4gICAgICBvZmZzZXQ6IHRoaXMub2Zmc2V0LFxyXG4gICAgICBpc0V4cG9ydDogdHJ1ZVxyXG4gICAgfTtcclxuICAgIGlmKHRoaXMuc29ydENvbHVtTmFtZSl7ZGF0YS5zb3J0Q29sdW1uTmFtZSA9IHRoaXMuc29ydENvbHVtTmFtZX1lbHNlIGlmKHRoaXMuc2VhcmNoVGVybSl7ZGF0YS5zZWFyY2hWYWx1ZSA9IHRoaXMuc2VhcmNoVGVybX1cclxuICAgIHRoaXMuc2VydmljZS5nZXRzdG9yZU1ldHJpY3NFeHBvcnQoZGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6KHJlczphbnkpID0+IHtcclxuICAgICAgICBpZihyZXMpe1xyXG4gICAgICAgICAgICB0aGlzLmV4Y2VsLnNhdmVBc0V4Y2VsRmlsZShyZXMsJ0F1ZGl0TWV0cmljcycpXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGVycm9yOihlcnI6YW55KT0+e1xyXG4gICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoZXJyPy5tZXNzYWdlKVxyXG4gICAgfVxyXG4gICB9KVxyXG4gfVxyXG5cclxuIHNlbGVjdGVkVGFicyhkYXRhOmFueSl7XHJcbiAgaWYoZGF0YSA9PT0gJ2FsbCcpe1xyXG4gICAgdGhpcy5zZWxlY3RlZFRhYiA9ICcnO1xyXG4gIH1lbHNle1xyXG4gICAgdGhpcy5zZWxlY3RlZFRhYiA9IGRhdGE7XHJcbiAgfVxyXG4gIHRoaXMubGltaXQgPSAxMDtcclxuICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgdGhpcy5tZXRyaWNzTGlzdCgpO1xyXG4gfVxyXG5cclxuIHNlYXJjaERhdGEoKXtcclxuICB0aGlzLnNlYXJjaFRlcm0gPSB0aGlzLnNlYXJjaFRlcm07XHJcbiAgdGhpcy5tZXRyaWNzTGlzdCgpO1xyXG4gfVxyXG5cclxuIG9wZW5CZWZvcmVjb3VudCh2YWx1ZTphbnkpIHtcclxuICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQ291bnRDb21wb25lbnQse1xyXG4gICAgY2VudGVyZWQ6dHJ1ZSxcclxuICAgIHNpemU6J3hsJ1xyXG4gIH0pXHJcbiAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZGF0YSA9e1xyXG4gICAgdHlwZSA6ICdiZWZvcmUnLFxyXG4gICAgZmlsZURhdGU6dmFsdWU/LmZpbGVEYXRlLFxyXG4gICAgc3RvcmVJZDogdmFsdWU/LnN0b3JlSWQsXHJcbiAgICBzZWxlY3RlZFR5cGU6IHRoaXMuc2VsZWN0ZWRUeXBlLFxyXG4gICAgem9uZU5hbWU6dmFsdWU/LnpvbmVOYW1lLFxyXG4gICAgaW1hZ2VUeXBlOiAnQkMnXHJcbiAgfVxyXG59XHJcbm9wZW5BZnRlcmNvdW50KHZhbHVlOmFueSl7XHJcbiAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKENvdW50Q29tcG9uZW50LHtcclxuICAgIGNlbnRlcmVkOnRydWUsXHJcbiAgICBzaXplOid4bCdcclxuICB9KVxyXG5tb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5kYXRhID17XHJcbiAgdHlwZSA6ICdhZnRlcicsXHJcbiAgZmlsZURhdGU6dmFsdWU/LmZpbGVEYXRlLFxyXG4gIHN0b3JlSWQ6IHZhbHVlPy5zdG9yZUlkLFxyXG4gIHNlbGVjdGVkVHlwZTogdGhpcy5zZWxlY3RlZFR5cGUsXHJcbiAgem9uZU5hbWU6dmFsdWU/LnpvbmVOYW1lLFxyXG4gIGltYWdlVHlwZTogJ0FDJ1xyXG59XHJcbn1cclxuXHJcbm9wZW5WaWV3KCl7XHJcbiAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRoaXMuYWN0aXZpdHlsb2cpXHJcbn1cclxuXHJcbm9wZW5yZVRyaWdnZXIodmFsdWU6YW55KXtcclxuICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oUmVUcmlnZ2VyQ29tcG9uZW50LHtcclxuICAgIGNlbnRlcmVkOnRydWUsXHJcbiAgICAvLyBzaXplOicnXHJcbiAgfSlcclxuICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5yZVRyaWdlckRhdGEgPXtcclxuICAgIHR5cGUgOiAnYWZ0ZXInLFxyXG4gICAgZGF0YTogdmFsdWUsXHJcbiAgICBzZWxlY3RlZFR5cGUgOiB0aGlzLnNlbGVjdGVkVHlwZVxyXG4gIH1cclxuICBtb2RhbFJlZi5jbG9zZWQuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgdGhpcy5zZXJ2aWNlLmF1ZGl0cmV0cmlnZ2VyKHJlcykucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6KHJlczphbnkpPT57XHJcbiAgICAgICAgICAgICAgaWYocmVzICYmIHJlcy5jb2RlID09PSAyMDApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRTdWNjZXNzVG9hc3QocmVzPy5kYXRhPy5yZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZXRyaWNzTGlzdCgpO1xyXG4gICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOihlcnI6YW55KT0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChlcnI/Lm1lc3NhZ2UpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgfSApXHJcbn1cclxuXHJcbnN0YXR1c0JhZGdlKHZhbHVlOmFueSl7XHJcbiAgbGV0IEFjY291bnRTdGF0dXMgPSB2YWx1ZTtcclxuICBpZihBY2NvdW50U3RhdHVzID09PSAnY2xvc2VkJyl7XHJcbiAgICByZXR1cm4gJ2JhZGdlLWxpZ2h0LXN1Y2Nlc3MnXHJcbiAgfWVsc2UgaWYoQWNjb3VudFN0YXR1cyA9PT0gJ2Fzc2lnbmVkJyB8fCBBY2NvdW50U3RhdHVzID09PSAnbm90IEFzc2lnbmVkJyl7XHJcbiAgICByZXR1cm4gJ2JhZGdlLWxpZ2h0LXdhcm5pbmcnXHJcbiAgfWVsc2V7XHJcbiAgICByZXR1cm4gJ2JhZGdlLWxpZ2h0LXByaW1hcnknXHJcbiAgfVxyXG59XHJcblxyXG5zb3J0RGF0YSh2YWx1ZTphbnkpe1xyXG4gIHRoaXMuc29ydENvbHVtTmFtZSA9IHZhbHVlXHJcbiAgdGhpcy5zb3J0QnkgKj0gLTE7XHJcbiAgdGhpcy5tZXRyaWNzTGlzdCgpO1xyXG59XHJcblxyXG5cclxufSIsIjxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtM1wiPlxyXG4gICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWxhYmVsIG1iLTJcIj5BdWRpdCBNZXRyaWNzPC9zcGFuPlxyXG4gICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwidGV4dC1zdWIgbWItMlwiPkxhc3QgdXBkYXRlZCAxIGhvdXIgYWdvPC9zcGFuPiAtLT5cclxuICAgICAgICA8L2gzPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmUgbXktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMSBwb3NpdGlvbi1hYnNvbHV0ZSBtcy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgb3BhY2l0eT1cIjAuNVwiIHg9XCIxNy4wMzY1XCIgeT1cIjE1LjEyMjNcIiB3aWR0aD1cIjguMTU1NDZcIiBoZWlnaHQ9XCIyXCIgcng9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJyb3RhdGUoNDUgMTcuMDM2NSAxNS4xMjIzKVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L3JlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEgMTlDNi41NTU1NiAxOSAzIDE1LjQ0NDQgMyAxMUMzIDYuNTU1NTYgNi41NTU1NiAzIDExIDNDMTUuNDQ0NCAzIDE5IDYuNTU1NTYgMTkgMTFDMTkgMTUuNDQ0NCAxNS40NDQ0IDE5IDExIDE5Wk0xMSA1QzcuNTMzMzMgNSA1IDcuNTMzMzMgNSAxMUM1IDE0LjQ2NjcgNy41MzMzMyAxNyAxMSAxN0MxNC40NjY3IDE3IDE3IDE0LjQ2NjcgMTcgMTFDMTcgNy41MzMzMyAxNC40NjY3IDUgMTEgNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBwcy0xNCBtZS0yXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNlYXJjaERhdGEoKVwiIFsobmdNb2RlbCldPVwic2VhcmNoVGVybVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPGxpYi1maWx0ZXJzICpuZ0lmPVwiY2xpZW50TGlzdFwiIFtkYXRhT2JqZWN0XT1cImRhdGFPYmplY3RcIiAoYXBwbGllZEZpbHRlcnMpPVwicmVjZWl2ZURhdGEoJGV2ZW50KVwiPjwvbGliLWZpbHRlcnM+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiIW5vRGF0YSYmIWxvYWRpbmdcIiAoY2xpY2spPVwiZXhwb3J0WExTWCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgbXgtMiBidG4tb3V0bGluZSBidG4tb3V0bGluZS1kZWZhdWx0IHJvdW5kZWQtMyB0ZXh0LW5vd3JhcCBib3JkZXItdmFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE3LjUgMTIuNVYxNS44MzMzQzE3LjUgMTYuMjc1NCAxNy4zMjQ0IDE2LjY5OTMgMTcuMDExOCAxNy4wMTE4QzE2LjY5OTMgMTcuMzI0NCAxNi4yNzU0IDE3LjUgMTUuODMzMyAxNy41SDQuMTY2NjdDMy43MjQ2NCAxNy41IDMuMzAwNzIgMTcuMzI0NCAyLjk4ODE2IDE3LjAxMThDMi42NzU1OSAxNi42OTkzIDIuNSAxNi4yNzU0IDIuNSAxNS44MzMzVjEyLjVNMTQuMTY2NyA2LjY2NjY3TDEwIDIuNU0xMCAyLjVMNS44MzMzMyA2LjY2NjY3TTEwIDIuNVYxMi41XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTJcIj5FeHBvcnQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXN0cmV0Y2ggbmF2LWxpbmUtdGFiczEgbmF2LWxpbmUtdGFicyBib3JkZXItdHJhbnNwYXJlbnQgZmxleC1ub3dyYXAgaG9yaXpvbnRhbC1zY3JvbGxcIj5cclxuICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiAoY2xpY2spPVwic2VsZWN0ZWRUYWJzKCdhbGwnKVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwic2VsZWN0ZWRUYWIgPT09ICcnID8gJ2FjdGl2ZScgOiAnJ1wiIGNsYXNzPVwibmF2LWxpbmsgY3Vyc29yLXBvaW50ZXIgbm8tYm9yZGVyIG1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICBBbGwgPHNwYW4gY2xhc3M9XCJteC0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VsZWN0ZWRUYWIgPT09ICcnID8gJ3RleHQtYm9yZGVyLXByaWFtcnknIDogJ3RleHQtYm9yZGVyJ1wiPnt7dG90YWxDb3VudD8udG90YWxhdWRpdENvdW50ID8gdG90YWxDb3VudD8udG90YWxhdWRpdENvdW50IDogMH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiIChjbGljayk9XCJzZWxlY3RlZFRhYnMoJ0F1ZGl0JylcIj5cclxuICAgICAgICAgICAgICAgIDxhIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiID09PSAnQXVkaXQnID8gJ2FjdGl2ZScgOicnXCIgY2xhc3M9XCJuYXYtbGluayBjdXJzb3ItcG9pbnRlciBuby1ib3JkZXIgbWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEF1ZGl0IDxzcGFuIGNsYXNzPVwibXgtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiID09PSAnQXVkaXQnID8gJ3RleHQtYm9yZGVyLXByaWFtcnknIDogJ3RleHQtYm9yZGVyJ1wiPnt7dG90YWxDb3VudD8uYXVkaXRDb3VudCA/IHRvdGFsQ291bnQ/LmF1ZGl0Q291bnQgOiAwfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgKGNsaWNrKT1cInNlbGVjdGVkVGFicygnUmVBdWRpdCcpXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBbbmdDbGFzc109XCJzZWxlY3RlZFRhYiA9PT0gJ1JlQXVkaXQnID8gJ2FjdGl2ZScgOiAnJ1wiIGNsYXNzPVwibmF2LWxpbmsgY3Vyc29yLXBvaW50ZXIgbm8tYm9yZGVyIG1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICBSZSBBdWRpdCA8c3BhbiBjbGFzcz1cIm14LTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzZWxlY3RlZFRhYiA9PT0gJ1JlQXVkaXQnID8gJ3RleHQtYm9yZGVyLXByaWFtcnknIDogJ3RleHQtYm9yZGVyJ1wiPnt7dG90YWxDb3VudD8ucmVhdWRpdENvdW50ID8gdG90YWxDb3VudD8ucmVhdWRpdENvdW50IDogMH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFsb2FkaW5nICYmICFub0RhdGFcIiBjbGFzcz1cIm10LTVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXBcIj5cclxuICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0aD5GaWxlIERhdGU8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRoPjxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgnc3RvcmVOYW1lJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmUgTmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSAnc3RvcmVOYW1lJyAmJiBzb3J0QnkgIT09IDEgfHwgc29ydENvbHVtTmFtZSAhPT0gJ3N0b3JlTmFtZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk02LjAwMDE2IDEuMzMzMzdWMTAuNjY2N002LjAwMDE2IDEwLjY2NjdMMTAuNjY2OCA2LjAwMDA0TTYuMDAwMTYgMTAuNjY2N0wxLjMzMzUgNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNvcnRDb2x1bU5hbWUgPT09ICdzdG9yZU5hbWUnICYmIHNvcnRCeSAhPT0gLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk02LjAwMDE2IDEwLjY2NjdMNi4wMDAxNiAxLjMzMzM3TTYuMDAwMTYgMS4zMzMzN0wxLjMzMzUgNi4wMDAwNE02LjAwMDE2IDEuMzMzMzdMMTAuNjY2OCA2LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aD48ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ3N0b3JlSWQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTdG9yZSBJZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSAnc3RvcmVJZCcgJiYgc29ydEJ5ICE9PSAxIHx8IHNvcnRDb2x1bU5hbWUgIT09ICdzdG9yZUlkJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTYuMDAwMTYgMS4zMzMzN1YxMC42NjY3TTYuMDAwMTYgMTAuNjY2N0wxMC42NjY4IDYuMDAwMDRNNi4wMDAxNiAxMC42NjY3TDEuMzMzNSA2LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSAnc3RvcmVJZCcgJiYgc29ydEJ5ICE9PSAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTYuMDAwMTYgMTAuNjY2N0w2LjAwMDE2IDEuMzMzMzdNNi4wMDAxNiAxLjMzMzM3TDEuMzMzNSA2LjAwMDA0TTYuMDAwMTYgMS4zMzMzN0wxMC42NjY4IDYuMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGg+PGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCd1c2VyTmFtZScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXIgTmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSAndXNlck5hbWUnICYmIHNvcnRCeSAhPT0gMSB8fCBzb3J0Q29sdW1OYW1lICE9PSAndXNlck5hbWUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNi4wMDAxNiAxLjMzMzM3VjEwLjY2NjdNNi4wMDAxNiAxMC42NjY3TDEwLjY2NjggNi4wMDAwNE02LjAwMDE2IDEwLjY2NjdMMS4zMzM1IDYuMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSAndXNlck5hbWUnICYmIHNvcnRCeSAhPT0gLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk02LjAwMDE2IDEwLjY2NjdMNi4wMDAxNiAxLjMzMzM3TTYuMDAwMTYgMS4zMzMzN0wxLjMzMzUgNi4wMDAwNE02LjAwMDE2IDEuMzMzMzdMMTAuNjY2OCA2LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPjxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgndXNlckVtYWlsJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgVXNlciBFbWFpbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSAndXNlckVtYWlsJyAmJiBzb3J0QnkgIT09IDEgfHwgc29ydENvbHVtTmFtZSAhPT0gJ3VzZXJFbWFpbCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk02LjAwMDE2IDEuMzMzMzdWMTAuNjY2N002LjAwMDE2IDEwLjY2NjdMMTAuNjY2OCA2LjAwMDA0TTYuMDAwMTYgMTAuNjY2N0wxLjMzMzUgNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNvcnRDb2x1bU5hbWUgPT09ICd1c2VyRW1haWwnICYmIHNvcnRCeSAhPT0gLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk02LjAwMDE2IDEwLjY2NjdMNi4wMDAxNiAxLjMzMzM3TTYuMDAwMTYgMS4zMzMzN0wxLjMzMzUgNi4wMDAwNE02LjAwMDE2IDEuMzMzMzdMMTAuNjY2OCA2LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRoPkJDPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0aD5BQzwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGg+PGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCdhY2N1cmFjeScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFjY3VyYWN5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNvcnRDb2x1bU5hbWUgPT09ICdhY2N1cmFjeScgJiYgc29ydEJ5ICE9PSAxIHx8IHNvcnRDb2x1bU5hbWUgIT09ICdhY2N1cmFjeSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk02LjAwMDE2IDEuMzMzMzdWMTAuNjY2N002LjAwMDE2IDEwLjY2NjdMMTAuNjY2OCA2LjAwMDA0TTYuMDAwMTYgMTAuNjY2N0wxLjMzMzUgNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNvcnRDb2x1bU5hbWUgPT09ICdhY2N1cmFjeScgJiYgc29ydEJ5ICE9PSAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTYuMDAwMTYgMTAuNjY2N0w2LjAwMDE2IDEuMzMzMzdNNi4wMDAxNiAxLjMzMzM3TDEuMzMzNSA2LjAwMDA0TTYuMDAwMTYgMS4zMzMzN0wxMC42NjY4IDYuMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGg+PGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCd0aW1lU3BlbnQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUaW1lU3BlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic29ydENvbHVtTmFtZSA9PT0gJ3RpbWVTcGVudCcgJiYgc29ydEJ5ICE9PSAxIHx8IHNvcnRDb2x1bU5hbWUgIT09ICd0aW1lU3BlbnQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNi4wMDAxNiAxLjMzMzM3VjEwLjY2NjdNNi4wMDAxNiAxMC42NjY3TDEwLjY2NjggNi4wMDAwNE02LjAwMDE2IDEwLjY2NjdMMS4zMzM1IDYuMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzb3J0Q29sdW1OYW1lID09PSAndGltZVNwZW50JyAmJiBzb3J0QnkgIT09IC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNi4wMDAxNiAxMC42NjY3TDYuMDAwMTYgMS4zMzMzN002LjAwMDE2IDEuMzMzMzdMMS4zMzM1IDYuMDAwMDRNNi4wMDAxNiAxLjMzMzM3TDEwLjY2NjggNi4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0aD5BdWRpdCBUeXBlPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0aD5TdGF0dXM8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRoPjxzcGFuPkFjdGlvbnM8L3NwYW4+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHN0b3Jlc0RhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57eyBpdGVtPy5maWxlRGF0ZSA/IGl0ZW0/LmZpbGVEYXRlIDonTkEnIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3sgaXRlbT8uc3RvcmVOYW1lID8gaXRlbT8uc3RvcmVOYW1lIDonTkEnIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3tpdGVtPy5zdG9yZUlkID8gaXRlbT8uc3RvcmVJZCA6ICdOQSd9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7IGl0ZW0/LnVzZXJOYW1lID8gaXRlbT8udXNlck5hbWUgOidOQScgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57eyBpdGVtPy51c2VyRW1haWwgPyBpdGVtPy51c2VyRW1haWwgOidOQScgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiaXRlbT8uYmVmb3JlQ291bnQgPyAndGV4dC1kZWNvcmF0aW9uLXVuZGVybGluZSc6JydcIiBjbGFzcz1cInRleHQtdGl0bGUgdGV4dC1wcmltYXJ5IGN1cnNvci1wb2ludGVyIG1iLTFcIiAoY2xpY2spPVwib3BlbkJlZm9yZWNvdW50KGl0ZW0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbT8uYmVmb3JlQ291bnQgPz8gJy0tJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJpdGVtPy5hZnRlckNvdW50ID8gJ3RleHQtZGVjb3JhdGlvbi11bmRlcmxpbmUnOicnXCIgY2xhc3M9XCJ0ZXh0LXRpdGxlIHRleHQtcHJpbWFyeSBjdXJzb3ItcG9pbnRlciBtYi0xXCIgKGNsaWNrKT1cIm9wZW5BZnRlcmNvdW50KGl0ZW0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0/LmFmdGVyQ291bnQgPz8gJy0tJyB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7IGl0ZW0/LmFjY3VyYWN5ID8/ICctLScgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBpdGVtPy50aW1lU3BlbnQgPyBpdGVtPy50aW1lU3BlbnQgOidOQSd9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQ+PHNwYW4gKm5nSWY9XCJpdGVtPy5hdWRpdFR5cGVcIiBbbmdDbGFzc109XCJpdGVtPy5hdWRpdFR5cGUgPT09ICdBdWRpdCcgPyAnYmFkZ2UtbGlnaHQtc3VjY2Vzcyc6J2JhZGdlLWxpZ2h0LXdhcm5pbmcnXCIgY2xhc3M9XCJiYWRnZVwiPnt7IGl0ZW0/LmF1ZGl0VHlwZSB9fTwvc3Bhbj48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkPjxzcGFuICpuZ0lmPVwiaXRlbT8uc3RhdHVzXCIgW25nQ2xhc3NdPVwic3RhdHVzQmFkZ2UoaXRlbT8uc3RhdHVzKVwiIGNsYXNzPVwiYmFkZ2VcIj57eyBpdGVtPy5zdGF0dXMgfCB0aXRsZWNhc2V9fTwvc3Bhbj48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkPjxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLW91dGxpbmVcIiAoY2xpY2spPVwib3BlblZpZXcoKVwiPlZpZXctTG9nPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLW91dGxpbmUgbXMtM1wiIFtkaXNhYmxlZF09XCJpdGVtPy5zdGF0dXMgPT09ICdub3RfYXNzaWduJyB8fCBpdGVtPy5zdGF0dXMgPT09ICdhc3NpZ25lZCdcIiAoY2xpY2spPVwib3BlbnJlVHJpZ2dlcihpdGVtKVwiPlJlLVRyaWdnZXI8L2J1dHRvbj48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWxvYWRpbmcgJiYgIW5vRGF0YVwiIGNsYXNzPVwibXktM1wiPlxyXG4gICAgICAgICAgICA8bGliLXBhZ2luYXRpb24gW2l0ZW1zUGVyUGFnZV09XCJsaW1pdFwiIFtjdXJyZW50UGFnZV09XCJvZmZzZXRcIiBbdG90YWxJdGVtc109XCJ0b3RhbENvdW50XCJcclxuICAgICAgICAgICAgICAgIFtwYWdpbmF0aW9uU2l6ZXNdPVwicGFnaW5hdGlvblwiIFtwYWdlU2l6ZV09XCJzZXRJdGVtc3BlclBhZ2UoKVwiIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIj48L2xpYi1wYWdpbmF0aW9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwibG9hZGluZ1wiIGNsYXNzPVwicm93IGxvYWRlciAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIm5vRGF0YVwiIGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLXNyYyB3LTI1XCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PiAgICAgICAgXHJcblxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICNhY3Rpdml0eWxvZyBsZXQtbW9kYWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWxhYmVsXCI+QWN0aXZpdHkgTG9nPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE1IDVMNSAxNU01IDVMMTUgMTVcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L2Rpdj4gIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGxvZyBvZiBhY3Rpdml0eVwiIGNsYXNzPVwiZC1mbGV4IG1iLTUgbXMtNVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHBlLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRyZSBqdXN0aWZ5LWNvbnRlbnQtY2VudHJlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGltZyBjbGFzcz1cIm1zZ3Byb2ZpbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCIuL2Fzc2V0cy90YW5nby9JbWFnZXMvdXNlclByb2ZpbGUuc3ZnXCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ltYm9sIHN5bWJvbC0zNXB4IHN5bWJvbC1jaXJjbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cImxvZz8udHlwZSA9PT0gJ0F1ZGl0JyA/ICdiYWRnZS1saWdodC1zdWNjZXNzJyA6ICdiYWRnZS1saWdodC1wcmltYXJ5J1wiIGNsYXNzPVwic3ltYm9sLWxhYmVsIGJhZGdlLWxpZ2h0LXByaW1hcnkgdGV4dC1zeW1ib2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJsb2c/LnR5cGUgPT09ICdBdWRpdCcgPyAndGV4dC1zdWNjZXNzIGJhZGdlIGJhZGdlLWxpZ2h0LXN1Y2Nlc3MnIDogJ3RleHQtcHJpbWFyeSBiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5J1wiIGNsYXNzPVwiZnMtNCBmdy1ub3JtYWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsb2c/LnR5cGU/LnNsaWNlKDAsMSkgfCB1cHBlcmNhc2UgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTAgaC0xMDAgbXQtMSBib3JkZXIgYm9yZGVyLTEgYm9yZGVyLWdyYXlcIiBzdHlsZT1cIndpZHRoOjBweFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktMyBwdC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGl2aXR5LXRpdGxlIGZ3LXNlbWlib2xkIG10LTIgZC1mbGV4IG1iLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tsb2c/LnR5cGV9fSA8L3NwYW4+PHNwYW4gY2xhc3M9XCJtcy01IGxpc3RcIj48bGk+RmFzaWxhPC9saT48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtdGltZSBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bG9nPy5GaWxlRGF0ZX19IHwge3tsb2c/LlRpbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj48c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LWRlZmF1bHQgZnctc2VtaWJvbGRcIj5CZWZvcmUgQ291bnQgOiB7e2xvZz8uYmVmb3JlQ291dH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1kZWZhdWx0IGZ3LXNlbWlib2xkIG1zLTNcIj5BZnRlciBDb3VudCA6IHt7bG9nPy5BZnRlckNvdW50fX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
|