tango-app-ui-analyse-trax 4.0.35 → 4.0.37
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/audit-v2/action-centre/audit-v2-action-centre.component.mjs +53 -14
- package/esm2022/lib/components/audit-v2/configure/audit-v2-configure.component.mjs +385 -67
- package/esm2022/lib/components/audit-v2/dashboard/audit-v2-dashboard.component.mjs +297 -45
- package/esm2022/lib/components/audit-v2/gallery/audit-v2-gallery.component.mjs +37 -11
- package/esm2022/lib/components/audit-v2/manage/audit-v2-manage.component.mjs +127 -22
- package/esm2022/lib/components/audit-v2/question-editor/audit-v2-question-editor.component.mjs +82 -22
- package/esm2022/lib/components/audit-v2/question-editor/bulk-upload/audit-v2-bulk-upload.component.mjs +34 -4
- package/esm2022/lib/components/audit-v2/schedule/audit-v2-schedule-detail.component.mjs +4 -4
- package/esm2022/lib/components/audit-v2/schedule/audit-v2-schedule-editor.component.mjs +196 -22
- package/esm2022/lib/components/checklist-configure/checklist-configure.component.mjs +122 -1
- package/esm2022/lib/services/trax.service.mjs +2 -2
- package/fesm2022/{tango-app-ui-analyse-trax-audit-v2.module-BWPJrcAC.mjs → tango-app-ui-analyse-trax-audit-v2.module-DGbmgnb0.mjs} +1207 -204
- package/fesm2022/tango-app-ui-analyse-trax-audit-v2.module-DGbmgnb0.mjs.map +1 -0
- package/fesm2022/{tango-app-ui-analyse-trax-tango-app-ui-analyse-trax-C4AWq4E2.mjs → tango-app-ui-analyse-trax-tango-app-ui-analyse-trax-lep87Xy8.mjs} +125 -4
- package/fesm2022/tango-app-ui-analyse-trax-tango-app-ui-analyse-trax-lep87Xy8.mjs.map +1 -0
- package/fesm2022/tango-app-ui-analyse-trax.mjs +1 -1
- package/lib/components/add-checklist/add-checklist.component.d.ts +1 -1
- package/lib/components/audit-v2/action-centre/audit-v2-action-centre.component.d.ts +23 -3
- package/lib/components/audit-v2/configure/audit-v2-configure.component.d.ts +75 -4
- package/lib/components/audit-v2/dashboard/audit-v2-dashboard.component.d.ts +98 -17
- package/lib/components/audit-v2/gallery/audit-v2-gallery.component.d.ts +16 -2
- package/lib/components/audit-v2/manage/audit-v2-manage.component.d.ts +15 -1
- package/lib/components/audit-v2/question-editor/audit-v2-question-editor.component.d.ts +17 -1
- package/lib/components/audit-v2/schedule/audit-v2-schedule-editor.component.d.ts +66 -4
- package/lib/components/checklist-configure/checklist-configure.component.d.ts +9 -0
- package/lib/services/trax.service.d.ts +1 -0
- package/package.json +1 -1
- package/fesm2022/tango-app-ui-analyse-trax-audit-v2.module-BWPJrcAC.mjs.map +0 -1
- package/fesm2022/tango-app-ui-analyse-trax-tango-app-ui-analyse-trax-C4AWq4E2.mjs.map +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Component } from '@angular/core';
|
|
2
2
|
import { Subject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';
|
|
3
3
|
import dayjs from 'dayjs';
|
|
4
|
+
import utc from 'dayjs/plugin/utc';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
import * as i1 from "../../../services/trax.service";
|
|
6
7
|
import * as i2 from "tango-app-ui-global";
|
|
@@ -10,11 +11,13 @@ import * as i5 from "tango-app-ui-shared";
|
|
|
10
11
|
import * as i6 from "@angular/forms";
|
|
11
12
|
import * as i7 from "../../activity-log-v2/log-view-popup/date-range-picker/date-range-picker.component";
|
|
12
13
|
import * as i8 from "../shimmer/audit-v2-shimmer.component";
|
|
14
|
+
dayjs.extend(utc);
|
|
13
15
|
/**
|
|
14
16
|
* Audit Action Center, served by /trax/audit/actionCenter/* (retail-trax-api-v2):
|
|
15
17
|
* cards -> audits / tasks waiting for approval
|
|
16
18
|
* approvals -> open / inprogress / done, one row per audit per day
|
|
17
|
-
* activityLog -> start + submit events from the instances,
|
|
19
|
+
* activityLog -> start + submit events from the instances, plus (Audit tab) the logged audit / schedule
|
|
20
|
+
* actions: created, edited, configured, published, unpublished, duplicated, deleted; server-paged
|
|
18
21
|
* Every call is scoped by the global header filter (client, checked stores, dates).
|
|
19
22
|
*/
|
|
20
23
|
export class AuditV2ActionCentreComponent {
|
|
@@ -41,6 +44,15 @@ export class AuditV2ActionCentreComponent {
|
|
|
41
44
|
Issues: [
|
|
42
45
|
{ text: 'Started by', id: 'start' },
|
|
43
46
|
{ text: 'Submitted by', id: 'submit' },
|
|
47
|
+
// Logged audit / schedule actions (Audit tab only); 'schedule' = every schedule action.
|
|
48
|
+
{ text: 'Audit created', id: 'created' },
|
|
49
|
+
{ text: 'Edited', id: 'edited' },
|
|
50
|
+
{ text: 'Configured', id: 'configured' },
|
|
51
|
+
{ text: 'Published', id: 'published' },
|
|
52
|
+
{ text: 'Unpublished', id: 'unpublished' },
|
|
53
|
+
{ text: 'Duplicated', id: 'duplicated' },
|
|
54
|
+
{ text: 'Deleted', id: 'deleted' },
|
|
55
|
+
{ text: 'Schedule changes', id: 'schedule' },
|
|
44
56
|
],
|
|
45
57
|
},
|
|
46
58
|
];
|
|
@@ -79,9 +91,7 @@ export class AuditV2ActionCentreComponent {
|
|
|
79
91
|
}
|
|
80
92
|
this.headerData = data;
|
|
81
93
|
this.dateRange = this.fmt(data.date?.startDate, 'DD-MM-YYYY') + ' - ' + this.fmt(data.date?.endDate, 'DD-MM-YYYY');
|
|
82
|
-
this.activityRange =
|
|
83
|
-
? { startDate: data.date.startDate, endDate: data.date.endDate }
|
|
84
|
-
: null;
|
|
94
|
+
this.activityRange = this.defaultActivityRange(data.date);
|
|
85
95
|
this.currentPage = 1;
|
|
86
96
|
this.loadCards();
|
|
87
97
|
this.loadApprovals();
|
|
@@ -101,6 +111,19 @@ export class AuditV2ActionCentreComponent {
|
|
|
101
111
|
this.destroy$.next();
|
|
102
112
|
this.destroy$.complete();
|
|
103
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* Activity Log's starting range: the header range, except that one ending yesterday runs on to today.
|
|
116
|
+
* The header's presets (and its default) stop at yesterday because analytics land a day late, but the
|
|
117
|
+
* log is live: without this, what was started or submitted today never shows until the range is changed.
|
|
118
|
+
*/
|
|
119
|
+
defaultActivityRange(date) {
|
|
120
|
+
if (!date?.startDate || !date?.endDate) {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
const yesterday = dayjs().subtract(1, 'day').format('YYYY-MM-DD');
|
|
124
|
+
const endDate = date.endDate === yesterday ? dayjs().format('YYYY-MM-DD') : date.endDate;
|
|
125
|
+
return { startDate: date.startDate, endDate };
|
|
126
|
+
}
|
|
104
127
|
/** Common header-filter scope every action-center call carries. */
|
|
105
128
|
basePayload() {
|
|
106
129
|
return {
|
|
@@ -230,6 +253,8 @@ export class AuditV2ActionCentreComponent {
|
|
|
230
253
|
limit: this.itemsPerPage,
|
|
231
254
|
offset: this.currentPage,
|
|
232
255
|
searchValue: this.search.trim(),
|
|
256
|
+
// Logged audit / schedule actions come back on this browser's clock, stamped as UTC like the visit times.
|
|
257
|
+
tzOffset: new Date().getTimezoneOffset(),
|
|
233
258
|
// Only sent when narrowed, so an API without the filter still serves the unfiltered log.
|
|
234
259
|
...(this.activityActions.length ? { action: this.activityActions } : {})
|
|
235
260
|
}).pipe(takeUntil(this.destroy$)).subscribe({
|
|
@@ -248,27 +273,41 @@ export class AuditV2ActionCentreComponent {
|
|
|
248
273
|
}
|
|
249
274
|
});
|
|
250
275
|
}
|
|
276
|
+
/**
|
|
277
|
+
* startTime / submitTime are the store's wall clock stamped as UTC (the mobile submit), so they are read
|
|
278
|
+
* as UTC: a local read would add the browser's offset (+5:30 in IST) and push evening events into the next day.
|
|
279
|
+
* Logged audit / schedule actions (kind 'log') arrive already moved to this browser's clock (tzOffset), so the
|
|
280
|
+
* same UTC read shows them in local time.
|
|
281
|
+
*/
|
|
282
|
+
eventTime(log) {
|
|
283
|
+
return log?.at ? dayjs.utc(log.at) : null;
|
|
284
|
+
}
|
|
251
285
|
toRow(log) {
|
|
252
|
-
const at =
|
|
286
|
+
const at = this.eventTime(log);
|
|
253
287
|
return {
|
|
254
288
|
name: log?.checkListName || '—',
|
|
255
289
|
action: String(log?.action || '—'),
|
|
256
290
|
by: log?.userEmail || log?.userName || '—',
|
|
257
291
|
store: log?.storeName || log?.storeId || '—',
|
|
258
|
-
day: at ? (at.
|
|
292
|
+
day: at ? (at.format('YYYY-MM-DD') === dayjs().format('YYYY-MM-DD') ? 'Today' : at.format('DD MMM YYYY')) : '—',
|
|
259
293
|
time: at ? at.format('hh : mm A') : '—',
|
|
260
|
-
// View opens an audit submission in the Gallery; a task row has no audit to open there
|
|
261
|
-
|
|
294
|
+
// View opens an audit submission in the Gallery; a task row has no audit to open there, and a logged
|
|
295
|
+
// audit / schedule action has no submission (the API sends viewable false for those).
|
|
296
|
+
viewable: !!log?.viewable && log?.kind !== 'log' && log?.module !== 'task' && this.tab === 'Audit',
|
|
262
297
|
raw: log
|
|
263
298
|
};
|
|
264
299
|
}
|
|
265
|
-
/**
|
|
300
|
+
/**
|
|
301
|
+
* Deep link for "View": the Gallery pre-selects this audit, store and visit day. The Gallery lists visits by
|
|
302
|
+
* their own date, which can be earlier than the submit day, so the visit's date_string wins when the API sends it.
|
|
303
|
+
*/
|
|
266
304
|
galleryParams(row) {
|
|
267
305
|
const log = row.raw || {};
|
|
306
|
+
const at = this.eventTime(log);
|
|
268
307
|
return {
|
|
269
308
|
audit: String(log.sourceCheckList_id || ''),
|
|
270
309
|
store: String(log.storeId || ''),
|
|
271
|
-
date: log.
|
|
310
|
+
date: log.date_string ? String(log.date_string) : (at ? at.format('YYYY-MM-DD') : '')
|
|
272
311
|
};
|
|
273
312
|
}
|
|
274
313
|
fmt(value, pattern) {
|
|
@@ -340,16 +379,16 @@ export class AuditV2ActionCentreComponent {
|
|
|
340
379
|
this.loadActivity();
|
|
341
380
|
}
|
|
342
381
|
trackByRow(index, row) {
|
|
343
|
-
return (row.raw?.processedChecklistId || row.store) + row.action + index;
|
|
382
|
+
return (row.raw?.processedChecklistId || row.raw?.logId || row.store) + row.action + index;
|
|
344
383
|
}
|
|
345
384
|
trackByColumn(_, col) {
|
|
346
385
|
return col.key;
|
|
347
386
|
}
|
|
348
387
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditV2ActionCentreComponent, deps: [{ token: i1.TraxService }, { token: i2.GlobalStateService }, { token: i0.ChangeDetectorRef }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
349
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AuditV2ActionCentreComponent, selector: "lib-audit-v2-action-centre", ngImport: i0, template: "<div class=\"av2-page\">\r\n\r\n <!-- Waiting for approval -->\r\n <div class=\"av2-grid-2\">\r\n <div class=\"av2-stat\">\r\n <span class=\"av2-sk av2-sk--value ac-sk-value\" *ngIf=\"cardsLoading\"></span>\r\n <span class=\"av2-stat-value\" *ngIf=\"!cardsLoading\">{{ auditWaiting }}</span>\r\n <span class=\"av2-stat-label\">Audit waiting for approval</span>\r\n </div>\r\n <div class=\"av2-stat\">\r\n <span class=\"av2-sk av2-sk--value ac-sk-value\" *ngIf=\"cardsLoading\"></span>\r\n <span class=\"av2-stat-value\" *ngIf=\"!cardsLoading\">{{ taskWaiting }}</span>\r\n <span class=\"av2-stat-label\">Task waiting for approval</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Approval -->\r\n <section class=\"av2-card\">\r\n <div class=\"av2-card-head\">\r\n <div class=\"av2-title-block\">\r\n <div class=\"av2-card-title\">Approval</div>\r\n <div class=\"av2-card-sub\">A summary of all the audits awaiting approval</div>\r\n </div>\r\n\r\n <label class=\"av2-search av2-search--md\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\">\r\n <circle cx=\"11\" cy=\"11\" r=\"7\"></circle>\r\n <line x1=\"16.5\" y1=\"16.5\" x2=\"21\" y2=\"21\"></line>\r\n </svg>\r\n <input [(ngModel)]=\"approvalSearch\" (ngModelChange)=\"onApprovalSearch()\" type=\"text\" placeholder=\"Search\" autocomplete=\"off\" />\r\n </label>\r\n\r\n <div class=\"approval-scope-select\">\r\n <lib-select [items]=\"approvalScopeItems\" [multi]=\"false\" [searchField]=\"'label'\" [idField]=\"'id'\"\r\n [selectedValues]=\"[approvalScopeSelected]\" (selected)=\"onApprovalScopeSelect($event)\"></lib-select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"av2-grid-3\">\r\n <div class=\"approval-col\" *ngFor=\"let col of columns; trackBy: trackByColumn\">\r\n <div class=\"av2-col-head\">\r\n {{ col.title }}\r\n <span *ngIf=\"!approvalsLoading && col.cards.length\" class=\"av2-badge av2-badge--count\">{{ col.cards.length }}</span>\r\n </div>\r\n\r\n <lib-audit-v2-shimmer *ngIf=\"approvalsLoading\" [rows]=\"2\"></lib-audit-v2-shimmer>\r\n\r\n <div *ngIf=\"!approvalsLoading && col.cards.length\" class=\"approval-cards\">\r\n <div *ngFor=\"let card of col.cards\" class=\"approval-card\" [class.approval-card--off]=\"!card.link\"\r\n [attr.role]=\"card.link ? 'link' : null\" [attr.tabindex]=\"card.link ? 0 : null\" [attr.title]=\"card.hint || null\"\r\n (click)=\"openCard(card)\" (keydown.enter)=\"openCard(card)\">\r\n <div class=\"approval-card-badges\">\r\n <span class=\"av2-badge av2-badge--purple av2-badge--count\">{{ card.typeLabel }}</span>\r\n <span *ngIf=\"card.redo\" class=\"av2-badge av2-badge--warning av2-badge--count\">Redo</span>\r\n </div>\r\n <div class=\"approval-card-name\">{{ card.name }}</div>\r\n <div class=\"approval-card-meta\">\r\n <span>{{ card.store }}</span>\r\n <span *ngIf=\"card.submittedLabel\">{{ card.submittedLabel }}</span>\r\n <span>{{ card.by }}</span>\r\n </div>\r\n <div class=\"approval-card-foot\">\r\n <span class=\"approval-card-date\">{{ card.when }}</span>\r\n <span *ngIf=\"card.approvedLabel\" class=\"av2-badge av2-badge--success av2-badge--count\">{{ card.approvedLabel }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!approvalsLoading && !col.cards.length\" class=\"av2-empty\">\r\n <img class=\"av2-empty-img\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"av2-empty-text\">\r\n <div class=\"av2-empty-title\">No data found</div>\r\n <div class=\"av2-empty-sub\">{{ col.empty }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- Activity Log -->\r\n <section class=\"av2-card av2-card--log\">\r\n <div class=\"av2-card-head av2-card-head--center\">\r\n <div class=\"av2-card-title av2-card-title--grow\">Activity Log</div>\r\n\r\n <label class=\"av2-search av2-search--lg\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\">\r\n <circle cx=\"11\" cy=\"11\" r=\"7\"></circle>\r\n <line x1=\"16.5\" y1=\"16.5\" x2=\"21\" y2=\"21\"></line>\r\n </svg>\r\n <input [(ngModel)]=\"search\" (ngModelChange)=\"onSearch()\" type=\"text\" [placeholder]=\"searchHint\" autocomplete=\"off\" />\r\n </label>\r\n\r\n <div class=\"log-date-picker\">\r\n <lib-date-range-picker [range]=\"activityRange\" (dateChange)=\"onActivityDateChange($event)\"></lib-date-range-picker>\r\n </div>\r\n\r\n <lib-filters [dataObject]=\"activityFilterData\" (appliedFilters)=\"onActivityFilters($event)\"></lib-filters>\r\n </div>\r\n\r\n <!-- Audit / Task -->\r\n <div class=\"av2-tabs\">\r\n <button *ngFor=\"let t of tabs\" type=\"button\" class=\"av2-tab\" [class.is-active]=\"tab === t\"\r\n (click)=\"setTab(t)\">{{ t }}</button>\r\n </div>\r\n\r\n <lib-audit-v2-shimmer *ngIf=\"logLoading\"></lib-audit-v2-shimmer>\r\n\r\n <div class=\"av2-table-wrap\" *ngIf=\"!logLoading\">\r\n <table class=\"av2-table log-table\">\r\n <thead>\r\n <tr>\r\n <th>\r\n <span class=\"av2-th-sort\">Date & Time\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <line x1=\"12\" y1=\"4\" x2=\"12\" y2=\"20\"></line>\r\n <polyline points=\"6 14 12 20 18 14\"></polyline>\r\n </svg>\r\n </span>\r\n </th>\r\n <th>{{ nameLabel }}</th>\r\n <th>Action Performed</th>\r\n <th>Performed by</th>\r\n <th>Name</th>\r\n <th>Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of pageRows; trackBy: trackByRow\">\r\n <td>\r\n <div class=\"av2-cell-stack\">\r\n <span>{{ row.day }}</span>\r\n <span class=\"av2-muted\">{{ row.time }}</span>\r\n </div>\r\n </td>\r\n <td class=\"av2-ellipsis\">{{ row.name }}</td>\r\n <td><span class=\"av2-badge\">{{ row.action }}</span></td>\r\n <td>\r\n <div class=\"av2-cell-icon av2-dim\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"8\" r=\"3.4\"></circle>\r\n <path d=\"M5 20c0-3.6 3.1-5.6 7-5.6s7 2 7 5.6\"></path>\r\n </svg>\r\n <span>{{ row.by }}</span>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"av2-cell-icon store-cell\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M3 9l1.6-4.5h14.8L21 9\"></path>\r\n <path d=\"M4 9v11h16V9\"></path>\r\n <path d=\"M9 20v-6h6v6\"></path>\r\n </svg>\r\n <span>{{ row.store }}</span>\r\n </div>\r\n </td>\r\n <td>\r\n <a *ngIf=\"row.viewable\" class=\"av2-link\" routerLink=\"/manage/trax/audit-v2/gallery\"\r\n [queryParams]=\"galleryParams(row)\" title=\"Open this submission in the Gallery\">View</a>\r\n <span *ngIf=\"!row.viewable\" class=\"av2-faint\">-</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div *ngIf=\"!logLoading && !filteredRows.length\" class=\"av2-empty\">\r\n <img class=\"av2-empty-img\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"av2-empty-text\">\r\n <div class=\"av2-empty-title\">No data found</div>\r\n <div class=\"av2-empty-sub\">There is no result for {{ tab }}</div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!logLoading && filteredRows.length\" class=\"log-pagination\">\r\n <lib-pagination [itemsPerPage]=\"itemsPerPage\" [pageSize]=\"itemsPerPage\" [paginationSizes]=\"pageSizes\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n (pageChange)=\"onPageChange($event)\"></lib-pagination>\r\n </div>\r\n </section>\r\n\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.av2-page{display:flex;flex-direction:column;gap:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:#101828;-webkit-font-smoothing:antialiased}.av2-page *,.av2-page *:before,.av2-page *:after{box-sizing:border-box}.av2-card{background:#fff;border-radius:12px;box-shadow:inset 0 0 0 1px #eaecf0,0 1px 2px #1018280d;padding:20px 24px;display:flex;flex-direction:column;gap:20px}.av2-card--log{padding:20px 24px 24px;gap:18px}.av2-card--table{padding:20px 24px 24px;gap:16px}.av2-card-head{display:flex;align-items:flex-start;gap:16px;flex-wrap:wrap}.av2-card-head--center{align-items:center;gap:12px}.av2-title-block{display:flex;flex-direction:column;gap:4px;flex:1;min-width:220px}.av2-card-title{font-size:18px;line-height:26px;font-weight:700;color:#101828;display:flex;align-items:center;gap:10px}.av2-card-title--grow{flex:1;min-width:180px}.av2-card-sub{font-size:13px;line-height:20px;color:#667085}.av2-grow{flex:1}.av2-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.av2-grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:20px}.av2-grid-4{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px}.av2-stat{border-radius:10px;background:linear-gradient(90deg,#f0f7ff,#f8fbff 60%,#fff);box-shadow:inset 0 0 0 1px #d1e9ff;padding:20px 24px;display:flex;align-items:center;gap:16px}.av2-stat-value{font-size:30px;line-height:38px;font-weight:700;color:#101828}.av2-stat-label{font-size:15px;line-height:22px;color:#344054}.av2-kpi{background:#fff;border-radius:10px;box-shadow:inset 0 0 0 1px #eaecf0,0 1px 2px #1018280d;display:flex;flex-direction:column;overflow:hidden}.av2-kpi.is-primary{box-shadow:inset 0 0 0 1px #b2ddff,0 1px 2px #1018280d}.av2-kpi.is-primary .av2-kpi-head{background:#eff8ff}.av2-kpi-head{padding:14px 18px;background:#f9fafb;font-size:15px;line-height:22px;font-weight:600;color:#101828}.av2-kpi-body{padding:16px 18px 18px;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.av2-kpi-value{font-size:24px;line-height:32px;font-weight:700;color:#101828}.av2-kpi-delta{display:flex;align-items:center;gap:4px;font-size:12px;color:#039855}.av2-kpi-delta.is-down{color:#d92d20}.av2-kpi-note{font-size:12px;color:#667085}.av2-search{position:relative;display:flex;align-items:center;gap:8px;height:40px;padding:0 12px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;color:#98a2b3;font-size:14px;flex-shrink:0}.av2-search svg{flex-shrink:0}.av2-search input{flex:1;min-width:0;height:100%;border:0;outline:0;padding:0;background:transparent;font:inherit;font-size:14px;color:#101828}.av2-search input::placeholder{color:#98a2b3}.av2-search:focus-within{box-shadow:inset 0 0 0 1px #84caff,0 0 0 4px #eff8ff}.av2-search--sm{width:300px}.av2-search--md{width:320px}.av2-search--lg{width:340px}.av2-select{height:40px;padding:0 36px 0 12px;border:0;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font:inherit;font-size:14px;color:#344054;cursor:pointer;appearance:none;-webkit-appearance:none;background-image:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23344054' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>\");background-repeat:no-repeat;background-position:right 12px center;flex-shrink:0}.av2-select:focus{outline:0;box-shadow:inset 0 0 0 1px #84caff,0 0 0 4px #eff8ff}.av2-select--sm{width:180px}.av2-chip{display:flex;align-items:center;gap:8px;height:40px;padding:0 12px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font-size:13px;color:#344054;white-space:nowrap;flex-shrink:0}.av2-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:40px;padding:0 16px;border:0;border-radius:8px;font-family:inherit;font-size:14px;line-height:20px;font-weight:600;cursor:pointer;white-space:nowrap;flex-shrink:0;transition:background-color .15s cubic-bezier(.4,0,.2,1)}.av2-btn svg{flex-shrink:0}.av2-btn:disabled{opacity:.55;cursor:not-allowed}.av2-btn--ghost{background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;color:#344054}.av2-btn--ghost:hover:not(:disabled){background:#f9fafb}.av2-btn--primary{background:#1570ef;color:#fff}.av2-btn--primary:hover:not(:disabled){background:#175cd3}.av2-btn--sm{height:36px;padding:0 14px;font-size:13px}.av2-btn--wide{padding:0 18px}.av2-tabs{display:flex;align-items:center;gap:6px}.av2-tab{height:40px;padding:0 26px;border:0;border-radius:8px;background:transparent;display:inline-flex;align-items:center;justify-content:center;font-family:inherit;font-size:14px;font-weight:500;color:#475467;cursor:pointer}.av2-tab.is-active{background:#eff8ff;color:#175cd3;font-weight:600}.av2-badge{display:inline-flex;align-items:center;height:28px;padding:0 12px;border-radius:6px;background:#eff8ff;color:#175cd3;font-size:12px;font-weight:600;white-space:nowrap}.av2-badge--count{height:22px;padding:0 8px}.av2-badge--success{background:#ecfdf3;color:#027a48}.av2-badge--error{background:#fef3f2;color:#b42318}.av2-badge--warning{background:#fffaeb;color:#b54708}.av2-badge--gray{background:#f2f4f7;color:#344054}.av2-badge--purple{background:#f9f5ff;color:#5925dc}.av2-link{color:#1570ef;font-size:13px;font-weight:500;text-decoration:underline;cursor:pointer}.av2-link:hover{color:#175cd3;text-decoration:underline}.av2-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.av2-muted{color:#667085}.av2-dim{color:#475467}.av2-faint{color:#98a2b3}table tbody td.av2-dim{color:#475467}table tbody td.av2-faint{color:#98a2b3}.av2-table-wrap{overflow-x:auto}.av2-table{width:100%;border-collapse:separate;border-spacing:0;margin:0}.av2-table thead th{background:#f9fafb;padding:12px 8px;font-size:12px;line-height:18px;font-weight:600;color:#475467;text-align:left;text-transform:none;letter-spacing:0;border:0;white-space:nowrap}.av2-table thead th:first-child{border-radius:8px 0 0}.av2-table thead th:last-child{border-radius:0 8px 0 0}.av2-table tbody td{padding:14px 8px;border:0;border-bottom:1px solid #F2F4F7;font-size:13px;line-height:20px;color:#1d2939;vertical-align:middle}.av2-table .av2-th-sort{display:inline-flex;align-items:center;gap:4px}.av2-table .av2-cell-icon{display:flex;align-items:center;gap:8px;min-width:0}.av2-table .av2-cell-icon svg{flex-shrink:0}.av2-table .av2-cell-icon span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av2-table .av2-cell-stack{display:flex;flex-direction:column;gap:2px}.av2-table .av2-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av2-table--lined thead th{background:transparent;border-bottom:1px solid #EAECF0;border-radius:0!important}.av2-empty{display:flex;flex-direction:column;align-items:center;gap:12px;padding:24px 16px 32px;text-align:center}.av2-empty-img{display:block;width:160px;height:120px}.av2-empty-text{display:flex;flex-direction:column;gap:4px;align-items:center}.av2-empty-title{font-size:16px;line-height:24px;font-weight:600;color:#101828}.av2-empty-sub{max-width:480px;font-size:14px;line-height:20px;color:#667085;text-wrap:pretty}.av2-col-head{border-radius:8px;background:#f9fafb;padding:14px 16px;font-size:14px;line-height:20px;font-weight:500;color:#344054;display:flex;align-items:center;gap:8px}.av2-avatar{width:32px;height:32px;flex-shrink:0;border-radius:9999px;background:#eff8ff;color:#175cd3;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700}.av2-bar{flex:1;height:5px;border-radius:9999px;background:#f2f4f7;overflow:hidden;display:block;min-width:60px}.av2-bar span{display:block;height:5px;border-radius:9999px;background:#1570ef}@keyframes av2-shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.av2-sk{display:block;width:100%;max-width:100%;height:12px;border-radius:4px;flex-shrink:0;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%;animation:av2-shimmer 3s linear infinite}.av2-sk--value{width:72px;height:28px;border-radius:6px}.av2-sk--title{width:220px;height:18px}.av2-sk--note{width:60%}.av2-sk--block{border-radius:8px}@media (prefers-reduced-motion: reduce){.av2-sk{animation:none}}:host ::ng-deep lib-pagination{display:block}:host ::ng-deep lib-pagination .container{max-width:none;padding:0;display:flex;align-items:center;justify-content:center;gap:16px;flex-wrap:wrap;font-size:13px;color:#475467}:host ::ng-deep lib-pagination .mt-4{margin-top:0!important}:host ::ng-deep lib-pagination .container>.text-center{display:flex;align-items:center}:host ::ng-deep lib-pagination .container>.text-center>ul:not(.ngx-pagination){display:none}:host ::ng-deep lib-pagination pagination-controls{display:flex;align-items:center}:host ::ng-deep lib-pagination .sub-title{color:#475467!important;font-size:13px!important;font-weight:400!important;line-height:20px}:host ::ng-deep lib-pagination .border-val{height:34px;padding:0 28px 0 12px!important;border:0!important;border-radius:8px!important;box-shadow:inset 0 0 0 1px #d0d5dd;font-size:13px;font-weight:600;color:#1d2939;background-position-x:calc(100% - 10px)}:host ::ng-deep lib-pagination .ngx-pagination{margin:0;padding:0;display:flex;align-items:center;gap:6px;color:#475467!important;font-size:13px!important;font-weight:500}:host ::ng-deep lib-pagination .ngx-pagination li{display:inline-flex;margin:0}:host ::ng-deep lib-pagination .ngx-pagination li.small-screen{display:none!important}:host ::ng-deep lib-pagination .ngx-pagination a,:host ::ng-deep lib-pagination .ngx-pagination button,:host ::ng-deep lib-pagination .ngx-pagination .current,:host ::ng-deep lib-pagination .ngx-pagination .disabled{min-width:34px!important;height:34px;padding:0 8px!important;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;line-height:20px;color:#475467}:host ::ng-deep lib-pagination .ngx-pagination a:hover,:host ::ng-deep lib-pagination .ngx-pagination button:hover{background:#f2f4f7;padding:0 8px!important}:host ::ng-deep lib-pagination .ngx-pagination .current{background:#eff8ff!important;color:#175cd3!important;font-weight:700;font-size:13px!important}:host ::ng-deep lib-pagination .ngx-pagination .disabled{color:#98a2b3}:host ::ng-deep lib-pagination .ngx-pagination .pagination-previous a:before,:host ::ng-deep lib-pagination .ngx-pagination .pagination-previous a:after,:host ::ng-deep lib-pagination .ngx-pagination .pagination-previous.disabled:before,:host ::ng-deep lib-pagination .ngx-pagination .pagination-previous.disabled:after,:host ::ng-deep lib-pagination .ngx-pagination .pagination-next a:before,:host ::ng-deep lib-pagination .ngx-pagination .pagination-next a:after,:host ::ng-deep lib-pagination .ngx-pagination .pagination-next.disabled:before,:host ::ng-deep lib-pagination .ngx-pagination .pagination-next.disabled:after{margin:0}:host ::ng-deep lib-pagination .ngx-pagination .ellipsis:after{color:#98a2b3;padding:0}.ac-sk-value{width:56px;height:32px;margin:3px 0}.approval-col{display:flex;flex-direction:column;gap:28px}.approval-cards{display:flex;flex-direction:column;gap:12px;max-height:420px;overflow-y:auto;padding-right:4px}.approval-card{display:flex;flex-direction:column;gap:6px;padding:14px 16px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #eaecf0,0 1px 2px #1018280d;cursor:pointer}.approval-card:hover{background:#fcfcfd}.approval-card:focus-visible{outline:2px solid #84CAFF;outline-offset:1px}.approval-card--off{cursor:default}.approval-card--off:hover{background:#fff}.approval-card-name{font-size:14px;line-height:20px;font-weight:600;color:#101828}.approval-card-meta{display:flex;flex-direction:column;gap:2px;font-size:12px;line-height:18px;color:#667085}.log-table{table-layout:fixed}.log-table th:nth-child(1){width:11%}.log-table th:nth-child(2){width:24%}.log-table th:nth-child(3){width:15%}.log-table th:nth-child(4){width:29%}.log-table th:nth-child(5){width:13%}.log-table th:nth-child(6){width:8%}.store-cell{color:#344054}.log-pagination{padding-top:20px}.approval-card-badges{display:flex;flex-wrap:wrap;gap:6px}.approval-card-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:2px}.approval-card-date{font-size:12px;line-height:18px;color:#667085}.approval-scope-select{min-width:160px}.log-date-picker{display:flex;align-items:center}:host ::ng-deep .log-date-picker .my-1{margin-top:0!important;margin-bottom:0!important}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i5.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "component", type: i5.FiltersComponent, selector: "lib-filters", inputs: ["dataObject"], outputs: ["appliedFilters"] }, { kind: "component", type: i5.CustomSelectComponent, selector: "lib-select", inputs: ["items", "searchField", "multi", "idField", "selectedValues", "disabled", "label"], outputs: ["selected"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.DateRangePickerComponent, selector: "lib-date-range-picker", inputs: ["value", "range"], outputs: ["dateChange"] }, { kind: "component", type: i8.AuditV2ShimmerComponent, selector: "lib-audit-v2-shimmer", inputs: ["rows"] }] });
|
|
388
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AuditV2ActionCentreComponent, selector: "lib-audit-v2-action-centre", ngImport: i0, template: "<div class=\"av2-page\">\r\n\r\n <!-- Waiting for approval -->\r\n <div class=\"av2-grid-2\">\r\n <div class=\"av2-stat\">\r\n <span class=\"av2-sk av2-sk--value ac-sk-value\" *ngIf=\"cardsLoading\"></span>\r\n <span class=\"av2-stat-value\" *ngIf=\"!cardsLoading\">{{ auditWaiting }}</span>\r\n <span class=\"av2-stat-label\">Audit waiting for approval</span>\r\n </div>\r\n <div class=\"av2-stat\">\r\n <span class=\"av2-sk av2-sk--value ac-sk-value\" *ngIf=\"cardsLoading\"></span>\r\n <span class=\"av2-stat-value\" *ngIf=\"!cardsLoading\">{{ taskWaiting }}</span>\r\n <span class=\"av2-stat-label\">Task waiting for approval</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Approval -->\r\n <section class=\"av2-card\">\r\n <div class=\"av2-card-head\">\r\n <div class=\"av2-title-block\">\r\n <div class=\"av2-card-title\">Approval</div>\r\n <div class=\"av2-card-sub\">A summary of all the audits awaiting approval</div>\r\n </div>\r\n\r\n <label class=\"av2-search av2-search--md\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\">\r\n <circle cx=\"11\" cy=\"11\" r=\"7\"></circle>\r\n <line x1=\"16.5\" y1=\"16.5\" x2=\"21\" y2=\"21\"></line>\r\n </svg>\r\n <input [(ngModel)]=\"approvalSearch\" (ngModelChange)=\"onApprovalSearch()\" type=\"text\" placeholder=\"Search\" autocomplete=\"off\" />\r\n </label>\r\n\r\n <div class=\"approval-scope-select\">\r\n <lib-select [items]=\"approvalScopeItems\" [multi]=\"false\" [searchField]=\"'label'\" [idField]=\"'id'\"\r\n [selectedValues]=\"[approvalScopeSelected]\" (selected)=\"onApprovalScopeSelect($event)\"></lib-select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"av2-grid-3\">\r\n <div class=\"approval-col\" *ngFor=\"let col of columns; trackBy: trackByColumn\">\r\n <div class=\"av2-col-head\">\r\n {{ col.title }}\r\n <span *ngIf=\"!approvalsLoading && col.cards.length\" class=\"av2-badge av2-badge--count\">{{ col.cards.length }}</span>\r\n </div>\r\n\r\n <lib-audit-v2-shimmer *ngIf=\"approvalsLoading\" [rows]=\"2\"></lib-audit-v2-shimmer>\r\n\r\n <div *ngIf=\"!approvalsLoading && col.cards.length\" class=\"approval-cards\">\r\n <div *ngFor=\"let card of col.cards\" class=\"approval-card\" [class.approval-card--off]=\"!card.link\"\r\n [attr.role]=\"card.link ? 'link' : null\" [attr.tabindex]=\"card.link ? 0 : null\" [attr.title]=\"card.hint || null\"\r\n (click)=\"openCard(card)\" (keydown.enter)=\"openCard(card)\">\r\n <div class=\"approval-card-badges\">\r\n <span class=\"av2-badge av2-badge--purple av2-badge--count\">{{ card.typeLabel }}</span>\r\n <span *ngIf=\"card.redo\" class=\"av2-badge av2-badge--warning av2-badge--count\">Redo</span>\r\n </div>\r\n <div class=\"approval-card-name\">{{ card.name }}</div>\r\n <div class=\"approval-card-meta\">\r\n <span>{{ card.store }}</span>\r\n <span *ngIf=\"card.submittedLabel\">{{ card.submittedLabel }}</span>\r\n <span>{{ card.by }}</span>\r\n </div>\r\n <div class=\"approval-card-foot\">\r\n <span class=\"approval-card-date\">{{ card.when }}</span>\r\n <span *ngIf=\"card.approvedLabel\" class=\"av2-badge av2-badge--success av2-badge--count\">{{ card.approvedLabel }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!approvalsLoading && !col.cards.length\" class=\"av2-empty\">\r\n <img class=\"av2-empty-img\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"av2-empty-text\">\r\n <div class=\"av2-empty-title\">No data found</div>\r\n <div class=\"av2-empty-sub\">{{ col.empty }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- Activity Log -->\r\n <section class=\"av2-card av2-card--log\">\r\n <div class=\"av2-card-head av2-card-head--center\">\r\n <div class=\"av2-card-title av2-card-title--grow\">Activity Log</div>\r\n\r\n <label class=\"av2-search av2-search--lg\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\">\r\n <circle cx=\"11\" cy=\"11\" r=\"7\"></circle>\r\n <line x1=\"16.5\" y1=\"16.5\" x2=\"21\" y2=\"21\"></line>\r\n </svg>\r\n <input [(ngModel)]=\"search\" (ngModelChange)=\"onSearch()\" type=\"text\" [placeholder]=\"searchHint\" autocomplete=\"off\" />\r\n </label>\r\n\r\n <div class=\"log-date-picker\">\r\n <lib-date-range-picker [range]=\"activityRange\" (dateChange)=\"onActivityDateChange($event)\"></lib-date-range-picker>\r\n </div>\r\n\r\n <lib-filters [dataObject]=\"activityFilterData\" (appliedFilters)=\"onActivityFilters($event)\"></lib-filters>\r\n </div>\r\n\r\n <!-- Audit / Task -->\r\n <div class=\"av2-tabs\">\r\n <button *ngFor=\"let t of tabs\" type=\"button\" class=\"av2-tab\" [class.is-active]=\"tab === t\"\r\n (click)=\"setTab(t)\">{{ t }}</button>\r\n </div>\r\n\r\n <lib-audit-v2-shimmer *ngIf=\"logLoading\"></lib-audit-v2-shimmer>\r\n\r\n <div class=\"av2-table-wrap\" *ngIf=\"!logLoading\">\r\n <table class=\"av2-table log-table\">\r\n <thead>\r\n <tr>\r\n <th>\r\n <span class=\"av2-th-sort\">Date & Time\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <line x1=\"12\" y1=\"4\" x2=\"12\" y2=\"20\"></line>\r\n <polyline points=\"6 14 12 20 18 14\"></polyline>\r\n </svg>\r\n </span>\r\n </th>\r\n <th>{{ nameLabel }}</th>\r\n <th>Action Performed</th>\r\n <th>Performed by</th>\r\n <th>Name</th>\r\n <th>Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of pageRows; trackBy: trackByRow\">\r\n <td>\r\n <div class=\"av2-cell-stack\">\r\n <span>{{ row.day }}</span>\r\n <span class=\"av2-muted\">{{ row.time }}</span>\r\n </div>\r\n </td>\r\n <td class=\"av2-ellipsis\">{{ row.name }}</td>\r\n <td><span class=\"av2-badge activity-action\" [class.activity-action--log]=\"row.raw?.kind === 'log'\"\r\n [title]=\"row.action\">{{ row.action }}</span></td>\r\n <td>\r\n <div class=\"av2-cell-icon av2-dim\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"8\" r=\"3.4\"></circle>\r\n <path d=\"M5 20c0-3.6 3.1-5.6 7-5.6s7 2 7 5.6\"></path>\r\n </svg>\r\n <span>{{ row.by }}</span>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"av2-cell-icon store-cell\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M3 9l1.6-4.5h14.8L21 9\"></path>\r\n <path d=\"M4 9v11h16V9\"></path>\r\n <path d=\"M9 20v-6h6v6\"></path>\r\n </svg>\r\n <span>{{ row.store }}</span>\r\n </div>\r\n </td>\r\n <td>\r\n <a *ngIf=\"row.viewable\" class=\"av2-link\" routerLink=\"/manage/trax/audit-v2/gallery\"\r\n [queryParams]=\"galleryParams(row)\" title=\"Open this submission in the Gallery\">View</a>\r\n <span *ngIf=\"!row.viewable\" class=\"av2-faint\">-</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div *ngIf=\"!logLoading && !filteredRows.length\" class=\"av2-empty\">\r\n <img class=\"av2-empty-img\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"av2-empty-text\">\r\n <div class=\"av2-empty-title\">No data found</div>\r\n <div class=\"av2-empty-sub\">There is no result for {{ tab }}</div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!logLoading && filteredRows.length\" class=\"log-pagination\">\r\n <lib-pagination [itemsPerPage]=\"itemsPerPage\" [pageSize]=\"itemsPerPage\" [paginationSizes]=\"pageSizes\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n (pageChange)=\"onPageChange($event)\"></lib-pagination>\r\n </div>\r\n </section>\r\n\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.av2-page{display:flex;flex-direction:column;gap:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:#101828;-webkit-font-smoothing:antialiased}.av2-page *,.av2-page *:before,.av2-page *:after{box-sizing:border-box}.av2-card{background:#fff;border-radius:12px;box-shadow:inset 0 0 0 1px #eaecf0,0 1px 2px #1018280d;padding:20px 24px;display:flex;flex-direction:column;gap:20px}.av2-card--log{padding:20px 24px 24px;gap:18px}.av2-card--table{padding:20px 24px 24px;gap:16px}.av2-card-head{display:flex;align-items:flex-start;gap:16px;flex-wrap:wrap}.av2-card-head--center{align-items:center;gap:12px}.av2-title-block{display:flex;flex-direction:column;gap:4px;flex:1;min-width:220px}.av2-card-title{font-size:18px;line-height:26px;font-weight:700;color:#101828;display:flex;align-items:center;gap:10px}.av2-card-title--grow{flex:1;min-width:180px}.av2-card-sub{font-size:13px;line-height:20px;color:#667085}.av2-grow{flex:1}.av2-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.av2-grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:20px}.av2-grid-4{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px}.av2-stat{border-radius:10px;background:linear-gradient(90deg,#f0f7ff,#f8fbff 60%,#fff);box-shadow:inset 0 0 0 1px #d1e9ff;padding:20px 24px;display:flex;align-items:center;gap:16px}.av2-stat-value{font-size:30px;line-height:38px;font-weight:700;color:#101828}.av2-stat-label{font-size:15px;line-height:22px;color:#344054}.av2-kpi{background:#fff;border-radius:10px;box-shadow:inset 0 0 0 1px #eaecf0,0 1px 2px #1018280d;display:flex;flex-direction:column;overflow:hidden}.av2-kpi.is-primary{box-shadow:inset 0 0 0 1px #b2ddff,0 1px 2px #1018280d}.av2-kpi.is-primary .av2-kpi-head{background:#eff8ff}.av2-kpi-head{padding:14px 18px;background:#f9fafb;font-size:15px;line-height:22px;font-weight:600;color:#101828}.av2-kpi-body{padding:16px 18px 18px;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.av2-kpi-value{font-size:24px;line-height:32px;font-weight:700;color:#101828}.av2-kpi-delta{display:flex;align-items:center;gap:4px;font-size:12px;color:#039855}.av2-kpi-delta.is-down{color:#d92d20}.av2-kpi-note{font-size:12px;color:#667085}.av2-search{position:relative;display:flex;align-items:center;gap:8px;height:40px;padding:0 12px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;color:#98a2b3;font-size:14px;flex-shrink:0}.av2-search svg{flex-shrink:0}.av2-search input{flex:1;min-width:0;height:100%;border:0;outline:0;padding:0;background:transparent;font:inherit;font-size:14px;color:#101828}.av2-search input::placeholder{color:#98a2b3}.av2-search:focus-within{box-shadow:inset 0 0 0 1px #84caff,0 0 0 4px #eff8ff}.av2-search--sm{width:300px}.av2-search--md{width:320px}.av2-search--lg{width:340px}.av2-select{height:40px;padding:0 36px 0 12px;border:0;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font:inherit;font-size:14px;color:#344054;cursor:pointer;appearance:none;-webkit-appearance:none;background-image:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23344054' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>\");background-repeat:no-repeat;background-position:right 12px center;flex-shrink:0}.av2-select:focus{outline:0;box-shadow:inset 0 0 0 1px #84caff,0 0 0 4px #eff8ff}.av2-select--sm{width:180px}.av2-chip{display:flex;align-items:center;gap:8px;height:40px;padding:0 12px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font-size:13px;color:#344054;white-space:nowrap;flex-shrink:0}.av2-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:40px;padding:0 16px;border:0;border-radius:8px;font-family:inherit;font-size:14px;line-height:20px;font-weight:600;cursor:pointer;white-space:nowrap;flex-shrink:0;transition:background-color .15s cubic-bezier(.4,0,.2,1)}.av2-btn svg{flex-shrink:0}.av2-btn:disabled{opacity:.55;cursor:not-allowed}.av2-btn--ghost{background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;color:#344054}.av2-btn--ghost:hover:not(:disabled){background:#f9fafb}.av2-btn--primary{background:#1570ef;color:#fff}.av2-btn--primary:hover:not(:disabled){background:#175cd3}.av2-btn--sm{height:36px;padding:0 14px;font-size:13px}.av2-btn--wide{padding:0 18px}.av2-tabs{display:flex;align-items:center;gap:6px}.av2-tab{height:40px;padding:0 26px;border:0;border-radius:8px;background:transparent;display:inline-flex;align-items:center;justify-content:center;font-family:inherit;font-size:14px;font-weight:500;color:#475467;cursor:pointer}.av2-tab.is-active{background:#eff8ff;color:#175cd3;font-weight:600}.av2-badge{display:inline-flex;align-items:center;height:28px;padding:0 12px;border-radius:6px;background:#eff8ff;color:#175cd3;font-size:12px;font-weight:600;white-space:nowrap}.av2-badge--count{height:22px;padding:0 8px}.av2-badge--success{background:#ecfdf3;color:#027a48}.av2-badge--error{background:#fef3f2;color:#b42318}.av2-badge--warning{background:#fffaeb;color:#b54708}.av2-badge--gray{background:#f2f4f7;color:#344054}.av2-badge--purple{background:#f9f5ff;color:#5925dc}.av2-link{color:#1570ef;font-size:13px;font-weight:500;text-decoration:underline;cursor:pointer}.av2-link:hover{color:#175cd3;text-decoration:underline}.av2-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.av2-muted{color:#667085}.av2-dim{color:#475467}.av2-faint{color:#98a2b3}table tbody td.av2-dim{color:#475467}table tbody td.av2-faint{color:#98a2b3}.av2-table-wrap{overflow-x:auto}.av2-table{width:100%;border-collapse:separate;border-spacing:0;margin:0}.av2-table thead th{background:#f9fafb;padding:12px 8px;font-size:12px;line-height:18px;font-weight:600;color:#475467;text-align:left;text-transform:none;letter-spacing:0;border:0;white-space:nowrap}.av2-table thead th:first-child{border-radius:8px 0 0}.av2-table thead th:last-child{border-radius:0 8px 0 0}.av2-table tbody td{padding:14px 8px;border:0;border-bottom:1px solid #F2F4F7;font-size:13px;line-height:20px;color:#1d2939;vertical-align:middle}.av2-table .av2-th-sort{display:inline-flex;align-items:center;gap:4px}.av2-table .av2-cell-icon{display:flex;align-items:center;gap:8px;min-width:0}.av2-table .av2-cell-icon svg{flex-shrink:0}.av2-table .av2-cell-icon span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av2-table .av2-cell-stack{display:flex;flex-direction:column;gap:2px}.av2-table .av2-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av2-table--lined thead th{background:transparent;border-bottom:1px solid #EAECF0;border-radius:0!important}.av2-empty{display:flex;flex-direction:column;align-items:center;gap:12px;padding:24px 16px 32px;text-align:center}.av2-empty-img{display:block;width:160px;height:120px}.av2-empty-text{display:flex;flex-direction:column;gap:4px;align-items:center}.av2-empty-title{font-size:16px;line-height:24px;font-weight:600;color:#101828}.av2-empty-sub{max-width:480px;font-size:14px;line-height:20px;color:#667085;text-wrap:pretty}.av2-col-head{border-radius:8px;background:#f9fafb;padding:14px 16px;font-size:14px;line-height:20px;font-weight:500;color:#344054;display:flex;align-items:center;gap:8px}.av2-avatar{width:32px;height:32px;flex-shrink:0;border-radius:9999px;background:#eff8ff;color:#175cd3;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700}.av2-bar{flex:1;height:5px;border-radius:9999px;background:#f2f4f7;overflow:hidden;display:block;min-width:60px}.av2-bar span{display:block;height:5px;border-radius:9999px;background:#1570ef}@keyframes av2-shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.av2-sk{display:block;width:100%;max-width:100%;height:12px;border-radius:4px;flex-shrink:0;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%;animation:av2-shimmer 3s linear infinite}.av2-sk--value{width:72px;height:28px;border-radius:6px}.av2-sk--title{width:220px;height:18px}.av2-sk--note{width:60%}.av2-sk--block{border-radius:8px}@media (prefers-reduced-motion: reduce){.av2-sk{animation:none}}:host ::ng-deep lib-pagination{display:block}:host ::ng-deep lib-pagination .container{max-width:none;padding:0;display:flex;align-items:center;justify-content:center;gap:16px;flex-wrap:wrap;font-size:13px;color:#475467}:host ::ng-deep lib-pagination .mt-4{margin-top:0!important}:host ::ng-deep lib-pagination .container>.text-center{display:flex;align-items:center}:host ::ng-deep lib-pagination .container>.text-center>ul:not(.ngx-pagination){display:none}:host ::ng-deep lib-pagination pagination-controls{display:flex;align-items:center}:host ::ng-deep lib-pagination .sub-title{color:#475467!important;font-size:13px!important;font-weight:400!important;line-height:20px}:host ::ng-deep lib-pagination .border-val{height:34px;padding:0 28px 0 12px!important;border:0!important;border-radius:8px!important;box-shadow:inset 0 0 0 1px #d0d5dd;font-size:13px;font-weight:600;color:#1d2939;background-position-x:calc(100% - 10px)}:host ::ng-deep lib-pagination .ngx-pagination{margin:0;padding:0;display:flex;align-items:center;gap:6px;color:#475467!important;font-size:13px!important;font-weight:500}:host ::ng-deep lib-pagination .ngx-pagination li{display:inline-flex;margin:0}:host ::ng-deep lib-pagination .ngx-pagination li.small-screen{display:none!important}:host ::ng-deep lib-pagination .ngx-pagination a,:host ::ng-deep lib-pagination .ngx-pagination button,:host ::ng-deep lib-pagination .ngx-pagination .current,:host ::ng-deep lib-pagination .ngx-pagination .disabled{min-width:34px!important;height:34px;padding:0 8px!important;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;line-height:20px;color:#475467}:host ::ng-deep lib-pagination .ngx-pagination a:hover,:host ::ng-deep lib-pagination .ngx-pagination button:hover{background:#f2f4f7;padding:0 8px!important}:host ::ng-deep lib-pagination .ngx-pagination .current{background:#eff8ff!important;color:#175cd3!important;font-weight:700;font-size:13px!important}:host ::ng-deep lib-pagination .ngx-pagination .disabled{color:#98a2b3}:host ::ng-deep lib-pagination .ngx-pagination .pagination-previous a:before,:host ::ng-deep lib-pagination .ngx-pagination .pagination-previous a:after,:host ::ng-deep lib-pagination .ngx-pagination .pagination-previous.disabled:before,:host ::ng-deep lib-pagination .ngx-pagination .pagination-previous.disabled:after,:host ::ng-deep lib-pagination .ngx-pagination .pagination-next a:before,:host ::ng-deep lib-pagination .ngx-pagination .pagination-next a:after,:host ::ng-deep lib-pagination .ngx-pagination .pagination-next.disabled:before,:host ::ng-deep lib-pagination .ngx-pagination .pagination-next.disabled:after{margin:0}:host ::ng-deep lib-pagination .ngx-pagination .ellipsis:after{color:#98a2b3;padding:0}.ac-sk-value{width:56px;height:32px;margin:3px 0}.approval-col{display:flex;flex-direction:column;gap:28px}.approval-cards{display:flex;flex-direction:column;gap:12px;max-height:420px;overflow-y:auto;padding-right:4px}.approval-card{display:flex;flex-direction:column;gap:6px;padding:14px 16px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #eaecf0,0 1px 2px #1018280d;cursor:pointer}.approval-card:hover{background:#fcfcfd}.approval-card:focus-visible{outline:2px solid #84CAFF;outline-offset:1px}.approval-card--off{cursor:default}.approval-card--off:hover{background:#fff}.approval-card-name{font-size:14px;line-height:20px;font-weight:600;color:#101828}.approval-card-meta{display:flex;flex-direction:column;gap:2px;font-size:12px;line-height:18px;color:#667085}.log-table{table-layout:fixed}.log-table th:nth-child(1){width:11%}.log-table th:nth-child(2){width:24%}.log-table th:nth-child(3){width:15%}.log-table th:nth-child(4){width:29%}.log-table th:nth-child(5){width:13%}.log-table th:nth-child(6){width:8%}.store-cell{color:#344054}.log-pagination{padding-top:20px}.approval-card-badges{display:flex;flex-wrap:wrap;gap:6px}.approval-card-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:2px}.approval-card-date{font-size:12px;line-height:18px;color:#667085}.approval-scope-select{min-width:160px}.log-date-picker{display:flex;align-items:center}:host ::ng-deep .log-date-picker .my-1{margin-top:0!important;margin-bottom:0!important}.activity-action{display:inline-block;max-width:260px;line-height:28px;overflow:hidden;text-overflow:ellipsis;vertical-align:middle}.activity-action--log{background:#f2f4f7;color:#344054}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i5.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "component", type: i5.FiltersComponent, selector: "lib-filters", inputs: ["dataObject"], outputs: ["appliedFilters"] }, { kind: "component", type: i5.CustomSelectComponent, selector: "lib-select", inputs: ["items", "searchField", "multi", "idField", "selectedValues", "disabled", "label"], outputs: ["selected"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.DateRangePickerComponent, selector: "lib-date-range-picker", inputs: ["value", "range"], outputs: ["dateChange"] }, { kind: "component", type: i8.AuditV2ShimmerComponent, selector: "lib-audit-v2-shimmer", inputs: ["rows"] }] });
|
|
350
389
|
}
|
|
351
390
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuditV2ActionCentreComponent, decorators: [{
|
|
352
391
|
type: Component,
|
|
353
|
-
args: [{ selector: 'lib-audit-v2-action-centre', template: "<div class=\"av2-page\">\r\n\r\n <!-- Waiting for approval -->\r\n <div class=\"av2-grid-2\">\r\n <div class=\"av2-stat\">\r\n <span class=\"av2-sk av2-sk--value ac-sk-value\" *ngIf=\"cardsLoading\"></span>\r\n <span class=\"av2-stat-value\" *ngIf=\"!cardsLoading\">{{ auditWaiting }}</span>\r\n <span class=\"av2-stat-label\">Audit waiting for approval</span>\r\n </div>\r\n <div class=\"av2-stat\">\r\n <span class=\"av2-sk av2-sk--value ac-sk-value\" *ngIf=\"cardsLoading\"></span>\r\n <span class=\"av2-stat-value\" *ngIf=\"!cardsLoading\">{{ taskWaiting }}</span>\r\n <span class=\"av2-stat-label\">Task waiting for approval</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Approval -->\r\n <section class=\"av2-card\">\r\n <div class=\"av2-card-head\">\r\n <div class=\"av2-title-block\">\r\n <div class=\"av2-card-title\">Approval</div>\r\n <div class=\"av2-card-sub\">A summary of all the audits awaiting approval</div>\r\n </div>\r\n\r\n <label class=\"av2-search av2-search--md\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\">\r\n <circle cx=\"11\" cy=\"11\" r=\"7\"></circle>\r\n <line x1=\"16.5\" y1=\"16.5\" x2=\"21\" y2=\"21\"></line>\r\n </svg>\r\n <input [(ngModel)]=\"approvalSearch\" (ngModelChange)=\"onApprovalSearch()\" type=\"text\" placeholder=\"Search\" autocomplete=\"off\" />\r\n </label>\r\n\r\n <div class=\"approval-scope-select\">\r\n <lib-select [items]=\"approvalScopeItems\" [multi]=\"false\" [searchField]=\"'label'\" [idField]=\"'id'\"\r\n [selectedValues]=\"[approvalScopeSelected]\" (selected)=\"onApprovalScopeSelect($event)\"></lib-select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"av2-grid-3\">\r\n <div class=\"approval-col\" *ngFor=\"let col of columns; trackBy: trackByColumn\">\r\n <div class=\"av2-col-head\">\r\n {{ col.title }}\r\n <span *ngIf=\"!approvalsLoading && col.cards.length\" class=\"av2-badge av2-badge--count\">{{ col.cards.length }}</span>\r\n </div>\r\n\r\n <lib-audit-v2-shimmer *ngIf=\"approvalsLoading\" [rows]=\"2\"></lib-audit-v2-shimmer>\r\n\r\n <div *ngIf=\"!approvalsLoading && col.cards.length\" class=\"approval-cards\">\r\n <div *ngFor=\"let card of col.cards\" class=\"approval-card\" [class.approval-card--off]=\"!card.link\"\r\n [attr.role]=\"card.link ? 'link' : null\" [attr.tabindex]=\"card.link ? 0 : null\" [attr.title]=\"card.hint || null\"\r\n (click)=\"openCard(card)\" (keydown.enter)=\"openCard(card)\">\r\n <div class=\"approval-card-badges\">\r\n <span class=\"av2-badge av2-badge--purple av2-badge--count\">{{ card.typeLabel }}</span>\r\n <span *ngIf=\"card.redo\" class=\"av2-badge av2-badge--warning av2-badge--count\">Redo</span>\r\n </div>\r\n <div class=\"approval-card-name\">{{ card.name }}</div>\r\n <div class=\"approval-card-meta\">\r\n <span>{{ card.store }}</span>\r\n <span *ngIf=\"card.submittedLabel\">{{ card.submittedLabel }}</span>\r\n <span>{{ card.by }}</span>\r\n </div>\r\n <div class=\"approval-card-foot\">\r\n <span class=\"approval-card-date\">{{ card.when }}</span>\r\n <span *ngIf=\"card.approvedLabel\" class=\"av2-badge av2-badge--success av2-badge--count\">{{ card.approvedLabel }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!approvalsLoading && !col.cards.length\" class=\"av2-empty\">\r\n <img class=\"av2-empty-img\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"av2-empty-text\">\r\n <div class=\"av2-empty-title\">No data found</div>\r\n <div class=\"av2-empty-sub\">{{ col.empty }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- Activity Log -->\r\n <section class=\"av2-card av2-card--log\">\r\n <div class=\"av2-card-head av2-card-head--center\">\r\n <div class=\"av2-card-title av2-card-title--grow\">Activity Log</div>\r\n\r\n <label class=\"av2-search av2-search--lg\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\">\r\n <circle cx=\"11\" cy=\"11\" r=\"7\"></circle>\r\n <line x1=\"16.5\" y1=\"16.5\" x2=\"21\" y2=\"21\"></line>\r\n </svg>\r\n <input [(ngModel)]=\"search\" (ngModelChange)=\"onSearch()\" type=\"text\" [placeholder]=\"searchHint\" autocomplete=\"off\" />\r\n </label>\r\n\r\n <div class=\"log-date-picker\">\r\n <lib-date-range-picker [range]=\"activityRange\" (dateChange)=\"onActivityDateChange($event)\"></lib-date-range-picker>\r\n </div>\r\n\r\n <lib-filters [dataObject]=\"activityFilterData\" (appliedFilters)=\"onActivityFilters($event)\"></lib-filters>\r\n </div>\r\n\r\n <!-- Audit / Task -->\r\n <div class=\"av2-tabs\">\r\n <button *ngFor=\"let t of tabs\" type=\"button\" class=\"av2-tab\" [class.is-active]=\"tab === t\"\r\n (click)=\"setTab(t)\">{{ t }}</button>\r\n </div>\r\n\r\n <lib-audit-v2-shimmer *ngIf=\"logLoading\"></lib-audit-v2-shimmer>\r\n\r\n <div class=\"av2-table-wrap\" *ngIf=\"!logLoading\">\r\n <table class=\"av2-table log-table\">\r\n <thead>\r\n <tr>\r\n <th>\r\n <span class=\"av2-th-sort\">Date & Time\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <line x1=\"12\" y1=\"4\" x2=\"12\" y2=\"20\"></line>\r\n <polyline points=\"6 14 12 20 18 14\"></polyline>\r\n </svg>\r\n </span>\r\n </th>\r\n <th>{{ nameLabel }}</th>\r\n <th>Action Performed</th>\r\n <th>Performed by</th>\r\n <th>Name</th>\r\n <th>Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of pageRows; trackBy: trackByRow\">\r\n <td>\r\n <div class=\"av2-cell-stack\">\r\n <span>{{ row.day }}</span>\r\n <span class=\"av2-muted\">{{ row.time }}</span>\r\n </div>\r\n </td>\r\n <td class=\"av2-ellipsis\">{{ row.name }}</td>\r\n <td><span class=\"av2-badge\">{{ row.action }}</span></td>\r\n <td>\r\n <div class=\"av2-cell-icon av2-dim\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"8\" r=\"3.4\"></circle>\r\n <path d=\"M5 20c0-3.6 3.1-5.6 7-5.6s7 2 7 5.6\"></path>\r\n </svg>\r\n <span>{{ row.by }}</span>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"av2-cell-icon store-cell\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M3 9l1.6-4.5h14.8L21 9\"></path>\r\n <path d=\"M4 9v11h16V9\"></path>\r\n <path d=\"M9 20v-6h6v6\"></path>\r\n </svg>\r\n <span>{{ row.store }}</span>\r\n </div>\r\n </td>\r\n <td>\r\n <a *ngIf=\"row.viewable\" class=\"av2-link\" routerLink=\"/manage/trax/audit-v2/gallery\"\r\n [queryParams]=\"galleryParams(row)\" title=\"Open this submission in the Gallery\">View</a>\r\n <span *ngIf=\"!row.viewable\" class=\"av2-faint\">-</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div *ngIf=\"!logLoading && !filteredRows.length\" class=\"av2-empty\">\r\n <img class=\"av2-empty-img\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"av2-empty-text\">\r\n <div class=\"av2-empty-title\">No data found</div>\r\n <div class=\"av2-empty-sub\">There is no result for {{ tab }}</div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!logLoading && filteredRows.length\" class=\"log-pagination\">\r\n <lib-pagination [itemsPerPage]=\"itemsPerPage\" [pageSize]=\"itemsPerPage\" [paginationSizes]=\"pageSizes\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n (pageChange)=\"onPageChange($event)\"></lib-pagination>\r\n </div>\r\n </section>\r\n\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.av2-page{display:flex;flex-direction:column;gap:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:#101828;-webkit-font-smoothing:antialiased}.av2-page *,.av2-page *:before,.av2-page *:after{box-sizing:border-box}.av2-card{background:#fff;border-radius:12px;box-shadow:inset 0 0 0 1px #eaecf0,0 1px 2px #1018280d;padding:20px 24px;display:flex;flex-direction:column;gap:20px}.av2-card--log{padding:20px 24px 24px;gap:18px}.av2-card--table{padding:20px 24px 24px;gap:16px}.av2-card-head{display:flex;align-items:flex-start;gap:16px;flex-wrap:wrap}.av2-card-head--center{align-items:center;gap:12px}.av2-title-block{display:flex;flex-direction:column;gap:4px;flex:1;min-width:220px}.av2-card-title{font-size:18px;line-height:26px;font-weight:700;color:#101828;display:flex;align-items:center;gap:10px}.av2-card-title--grow{flex:1;min-width:180px}.av2-card-sub{font-size:13px;line-height:20px;color:#667085}.av2-grow{flex:1}.av2-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.av2-grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:20px}.av2-grid-4{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px}.av2-stat{border-radius:10px;background:linear-gradient(90deg,#f0f7ff,#f8fbff 60%,#fff);box-shadow:inset 0 0 0 1px #d1e9ff;padding:20px 24px;display:flex;align-items:center;gap:16px}.av2-stat-value{font-size:30px;line-height:38px;font-weight:700;color:#101828}.av2-stat-label{font-size:15px;line-height:22px;color:#344054}.av2-kpi{background:#fff;border-radius:10px;box-shadow:inset 0 0 0 1px #eaecf0,0 1px 2px #1018280d;display:flex;flex-direction:column;overflow:hidden}.av2-kpi.is-primary{box-shadow:inset 0 0 0 1px #b2ddff,0 1px 2px #1018280d}.av2-kpi.is-primary .av2-kpi-head{background:#eff8ff}.av2-kpi-head{padding:14px 18px;background:#f9fafb;font-size:15px;line-height:22px;font-weight:600;color:#101828}.av2-kpi-body{padding:16px 18px 18px;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.av2-kpi-value{font-size:24px;line-height:32px;font-weight:700;color:#101828}.av2-kpi-delta{display:flex;align-items:center;gap:4px;font-size:12px;color:#039855}.av2-kpi-delta.is-down{color:#d92d20}.av2-kpi-note{font-size:12px;color:#667085}.av2-search{position:relative;display:flex;align-items:center;gap:8px;height:40px;padding:0 12px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;color:#98a2b3;font-size:14px;flex-shrink:0}.av2-search svg{flex-shrink:0}.av2-search input{flex:1;min-width:0;height:100%;border:0;outline:0;padding:0;background:transparent;font:inherit;font-size:14px;color:#101828}.av2-search input::placeholder{color:#98a2b3}.av2-search:focus-within{box-shadow:inset 0 0 0 1px #84caff,0 0 0 4px #eff8ff}.av2-search--sm{width:300px}.av2-search--md{width:320px}.av2-search--lg{width:340px}.av2-select{height:40px;padding:0 36px 0 12px;border:0;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font:inherit;font-size:14px;color:#344054;cursor:pointer;appearance:none;-webkit-appearance:none;background-image:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23344054' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>\");background-repeat:no-repeat;background-position:right 12px center;flex-shrink:0}.av2-select:focus{outline:0;box-shadow:inset 0 0 0 1px #84caff,0 0 0 4px #eff8ff}.av2-select--sm{width:180px}.av2-chip{display:flex;align-items:center;gap:8px;height:40px;padding:0 12px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font-size:13px;color:#344054;white-space:nowrap;flex-shrink:0}.av2-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:40px;padding:0 16px;border:0;border-radius:8px;font-family:inherit;font-size:14px;line-height:20px;font-weight:600;cursor:pointer;white-space:nowrap;flex-shrink:0;transition:background-color .15s cubic-bezier(.4,0,.2,1)}.av2-btn svg{flex-shrink:0}.av2-btn:disabled{opacity:.55;cursor:not-allowed}.av2-btn--ghost{background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;color:#344054}.av2-btn--ghost:hover:not(:disabled){background:#f9fafb}.av2-btn--primary{background:#1570ef;color:#fff}.av2-btn--primary:hover:not(:disabled){background:#175cd3}.av2-btn--sm{height:36px;padding:0 14px;font-size:13px}.av2-btn--wide{padding:0 18px}.av2-tabs{display:flex;align-items:center;gap:6px}.av2-tab{height:40px;padding:0 26px;border:0;border-radius:8px;background:transparent;display:inline-flex;align-items:center;justify-content:center;font-family:inherit;font-size:14px;font-weight:500;color:#475467;cursor:pointer}.av2-tab.is-active{background:#eff8ff;color:#175cd3;font-weight:600}.av2-badge{display:inline-flex;align-items:center;height:28px;padding:0 12px;border-radius:6px;background:#eff8ff;color:#175cd3;font-size:12px;font-weight:600;white-space:nowrap}.av2-badge--count{height:22px;padding:0 8px}.av2-badge--success{background:#ecfdf3;color:#027a48}.av2-badge--error{background:#fef3f2;color:#b42318}.av2-badge--warning{background:#fffaeb;color:#b54708}.av2-badge--gray{background:#f2f4f7;color:#344054}.av2-badge--purple{background:#f9f5ff;color:#5925dc}.av2-link{color:#1570ef;font-size:13px;font-weight:500;text-decoration:underline;cursor:pointer}.av2-link:hover{color:#175cd3;text-decoration:underline}.av2-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.av2-muted{color:#667085}.av2-dim{color:#475467}.av2-faint{color:#98a2b3}table tbody td.av2-dim{color:#475467}table tbody td.av2-faint{color:#98a2b3}.av2-table-wrap{overflow-x:auto}.av2-table{width:100%;border-collapse:separate;border-spacing:0;margin:0}.av2-table thead th{background:#f9fafb;padding:12px 8px;font-size:12px;line-height:18px;font-weight:600;color:#475467;text-align:left;text-transform:none;letter-spacing:0;border:0;white-space:nowrap}.av2-table thead th:first-child{border-radius:8px 0 0}.av2-table thead th:last-child{border-radius:0 8px 0 0}.av2-table tbody td{padding:14px 8px;border:0;border-bottom:1px solid #F2F4F7;font-size:13px;line-height:20px;color:#1d2939;vertical-align:middle}.av2-table .av2-th-sort{display:inline-flex;align-items:center;gap:4px}.av2-table .av2-cell-icon{display:flex;align-items:center;gap:8px;min-width:0}.av2-table .av2-cell-icon svg{flex-shrink:0}.av2-table .av2-cell-icon span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av2-table .av2-cell-stack{display:flex;flex-direction:column;gap:2px}.av2-table .av2-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av2-table--lined thead th{background:transparent;border-bottom:1px solid #EAECF0;border-radius:0!important}.av2-empty{display:flex;flex-direction:column;align-items:center;gap:12px;padding:24px 16px 32px;text-align:center}.av2-empty-img{display:block;width:160px;height:120px}.av2-empty-text{display:flex;flex-direction:column;gap:4px;align-items:center}.av2-empty-title{font-size:16px;line-height:24px;font-weight:600;color:#101828}.av2-empty-sub{max-width:480px;font-size:14px;line-height:20px;color:#667085;text-wrap:pretty}.av2-col-head{border-radius:8px;background:#f9fafb;padding:14px 16px;font-size:14px;line-height:20px;font-weight:500;color:#344054;display:flex;align-items:center;gap:8px}.av2-avatar{width:32px;height:32px;flex-shrink:0;border-radius:9999px;background:#eff8ff;color:#175cd3;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700}.av2-bar{flex:1;height:5px;border-radius:9999px;background:#f2f4f7;overflow:hidden;display:block;min-width:60px}.av2-bar span{display:block;height:5px;border-radius:9999px;background:#1570ef}@keyframes av2-shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.av2-sk{display:block;width:100%;max-width:100%;height:12px;border-radius:4px;flex-shrink:0;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%;animation:av2-shimmer 3s linear infinite}.av2-sk--value{width:72px;height:28px;border-radius:6px}.av2-sk--title{width:220px;height:18px}.av2-sk--note{width:60%}.av2-sk--block{border-radius:8px}@media (prefers-reduced-motion: reduce){.av2-sk{animation:none}}:host ::ng-deep lib-pagination{display:block}:host ::ng-deep lib-pagination .container{max-width:none;padding:0;display:flex;align-items:center;justify-content:center;gap:16px;flex-wrap:wrap;font-size:13px;color:#475467}:host ::ng-deep lib-pagination .mt-4{margin-top:0!important}:host ::ng-deep lib-pagination .container>.text-center{display:flex;align-items:center}:host ::ng-deep lib-pagination .container>.text-center>ul:not(.ngx-pagination){display:none}:host ::ng-deep lib-pagination pagination-controls{display:flex;align-items:center}:host ::ng-deep lib-pagination .sub-title{color:#475467!important;font-size:13px!important;font-weight:400!important;line-height:20px}:host ::ng-deep lib-pagination .border-val{height:34px;padding:0 28px 0 12px!important;border:0!important;border-radius:8px!important;box-shadow:inset 0 0 0 1px #d0d5dd;font-size:13px;font-weight:600;color:#1d2939;background-position-x:calc(100% - 10px)}:host ::ng-deep lib-pagination .ngx-pagination{margin:0;padding:0;display:flex;align-items:center;gap:6px;color:#475467!important;font-size:13px!important;font-weight:500}:host ::ng-deep lib-pagination .ngx-pagination li{display:inline-flex;margin:0}:host ::ng-deep lib-pagination .ngx-pagination li.small-screen{display:none!important}:host ::ng-deep lib-pagination .ngx-pagination a,:host ::ng-deep lib-pagination .ngx-pagination button,:host ::ng-deep lib-pagination .ngx-pagination .current,:host ::ng-deep lib-pagination .ngx-pagination .disabled{min-width:34px!important;height:34px;padding:0 8px!important;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;line-height:20px;color:#475467}:host ::ng-deep lib-pagination .ngx-pagination a:hover,:host ::ng-deep lib-pagination .ngx-pagination button:hover{background:#f2f4f7;padding:0 8px!important}:host ::ng-deep lib-pagination .ngx-pagination .current{background:#eff8ff!important;color:#175cd3!important;font-weight:700;font-size:13px!important}:host ::ng-deep lib-pagination .ngx-pagination .disabled{color:#98a2b3}:host ::ng-deep lib-pagination .ngx-pagination .pagination-previous a:before,:host ::ng-deep lib-pagination .ngx-pagination .pagination-previous a:after,:host ::ng-deep lib-pagination .ngx-pagination .pagination-previous.disabled:before,:host ::ng-deep lib-pagination .ngx-pagination .pagination-previous.disabled:after,:host ::ng-deep lib-pagination .ngx-pagination .pagination-next a:before,:host ::ng-deep lib-pagination .ngx-pagination .pagination-next a:after,:host ::ng-deep lib-pagination .ngx-pagination .pagination-next.disabled:before,:host ::ng-deep lib-pagination .ngx-pagination .pagination-next.disabled:after{margin:0}:host ::ng-deep lib-pagination .ngx-pagination .ellipsis:after{color:#98a2b3;padding:0}.ac-sk-value{width:56px;height:32px;margin:3px 0}.approval-col{display:flex;flex-direction:column;gap:28px}.approval-cards{display:flex;flex-direction:column;gap:12px;max-height:420px;overflow-y:auto;padding-right:4px}.approval-card{display:flex;flex-direction:column;gap:6px;padding:14px 16px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #eaecf0,0 1px 2px #1018280d;cursor:pointer}.approval-card:hover{background:#fcfcfd}.approval-card:focus-visible{outline:2px solid #84CAFF;outline-offset:1px}.approval-card--off{cursor:default}.approval-card--off:hover{background:#fff}.approval-card-name{font-size:14px;line-height:20px;font-weight:600;color:#101828}.approval-card-meta{display:flex;flex-direction:column;gap:2px;font-size:12px;line-height:18px;color:#667085}.log-table{table-layout:fixed}.log-table th:nth-child(1){width:11%}.log-table th:nth-child(2){width:24%}.log-table th:nth-child(3){width:15%}.log-table th:nth-child(4){width:29%}.log-table th:nth-child(5){width:13%}.log-table th:nth-child(6){width:8%}.store-cell{color:#344054}.log-pagination{padding-top:20px}.approval-card-badges{display:flex;flex-wrap:wrap;gap:6px}.approval-card-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:2px}.approval-card-date{font-size:12px;line-height:18px;color:#667085}.approval-scope-select{min-width:160px}.log-date-picker{display:flex;align-items:center}:host ::ng-deep .log-date-picker .my-1{margin-top:0!important;margin-bottom:0!important}\n"] }]
|
|
392
|
+
args: [{ selector: 'lib-audit-v2-action-centre', template: "<div class=\"av2-page\">\r\n\r\n <!-- Waiting for approval -->\r\n <div class=\"av2-grid-2\">\r\n <div class=\"av2-stat\">\r\n <span class=\"av2-sk av2-sk--value ac-sk-value\" *ngIf=\"cardsLoading\"></span>\r\n <span class=\"av2-stat-value\" *ngIf=\"!cardsLoading\">{{ auditWaiting }}</span>\r\n <span class=\"av2-stat-label\">Audit waiting for approval</span>\r\n </div>\r\n <div class=\"av2-stat\">\r\n <span class=\"av2-sk av2-sk--value ac-sk-value\" *ngIf=\"cardsLoading\"></span>\r\n <span class=\"av2-stat-value\" *ngIf=\"!cardsLoading\">{{ taskWaiting }}</span>\r\n <span class=\"av2-stat-label\">Task waiting for approval</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Approval -->\r\n <section class=\"av2-card\">\r\n <div class=\"av2-card-head\">\r\n <div class=\"av2-title-block\">\r\n <div class=\"av2-card-title\">Approval</div>\r\n <div class=\"av2-card-sub\">A summary of all the audits awaiting approval</div>\r\n </div>\r\n\r\n <label class=\"av2-search av2-search--md\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\">\r\n <circle cx=\"11\" cy=\"11\" r=\"7\"></circle>\r\n <line x1=\"16.5\" y1=\"16.5\" x2=\"21\" y2=\"21\"></line>\r\n </svg>\r\n <input [(ngModel)]=\"approvalSearch\" (ngModelChange)=\"onApprovalSearch()\" type=\"text\" placeholder=\"Search\" autocomplete=\"off\" />\r\n </label>\r\n\r\n <div class=\"approval-scope-select\">\r\n <lib-select [items]=\"approvalScopeItems\" [multi]=\"false\" [searchField]=\"'label'\" [idField]=\"'id'\"\r\n [selectedValues]=\"[approvalScopeSelected]\" (selected)=\"onApprovalScopeSelect($event)\"></lib-select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"av2-grid-3\">\r\n <div class=\"approval-col\" *ngFor=\"let col of columns; trackBy: trackByColumn\">\r\n <div class=\"av2-col-head\">\r\n {{ col.title }}\r\n <span *ngIf=\"!approvalsLoading && col.cards.length\" class=\"av2-badge av2-badge--count\">{{ col.cards.length }}</span>\r\n </div>\r\n\r\n <lib-audit-v2-shimmer *ngIf=\"approvalsLoading\" [rows]=\"2\"></lib-audit-v2-shimmer>\r\n\r\n <div *ngIf=\"!approvalsLoading && col.cards.length\" class=\"approval-cards\">\r\n <div *ngFor=\"let card of col.cards\" class=\"approval-card\" [class.approval-card--off]=\"!card.link\"\r\n [attr.role]=\"card.link ? 'link' : null\" [attr.tabindex]=\"card.link ? 0 : null\" [attr.title]=\"card.hint || null\"\r\n (click)=\"openCard(card)\" (keydown.enter)=\"openCard(card)\">\r\n <div class=\"approval-card-badges\">\r\n <span class=\"av2-badge av2-badge--purple av2-badge--count\">{{ card.typeLabel }}</span>\r\n <span *ngIf=\"card.redo\" class=\"av2-badge av2-badge--warning av2-badge--count\">Redo</span>\r\n </div>\r\n <div class=\"approval-card-name\">{{ card.name }}</div>\r\n <div class=\"approval-card-meta\">\r\n <span>{{ card.store }}</span>\r\n <span *ngIf=\"card.submittedLabel\">{{ card.submittedLabel }}</span>\r\n <span>{{ card.by }}</span>\r\n </div>\r\n <div class=\"approval-card-foot\">\r\n <span class=\"approval-card-date\">{{ card.when }}</span>\r\n <span *ngIf=\"card.approvedLabel\" class=\"av2-badge av2-badge--success av2-badge--count\">{{ card.approvedLabel }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!approvalsLoading && !col.cards.length\" class=\"av2-empty\">\r\n <img class=\"av2-empty-img\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"av2-empty-text\">\r\n <div class=\"av2-empty-title\">No data found</div>\r\n <div class=\"av2-empty-sub\">{{ col.empty }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- Activity Log -->\r\n <section class=\"av2-card av2-card--log\">\r\n <div class=\"av2-card-head av2-card-head--center\">\r\n <div class=\"av2-card-title av2-card-title--grow\">Activity Log</div>\r\n\r\n <label class=\"av2-search av2-search--lg\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n stroke-linecap=\"round\">\r\n <circle cx=\"11\" cy=\"11\" r=\"7\"></circle>\r\n <line x1=\"16.5\" y1=\"16.5\" x2=\"21\" y2=\"21\"></line>\r\n </svg>\r\n <input [(ngModel)]=\"search\" (ngModelChange)=\"onSearch()\" type=\"text\" [placeholder]=\"searchHint\" autocomplete=\"off\" />\r\n </label>\r\n\r\n <div class=\"log-date-picker\">\r\n <lib-date-range-picker [range]=\"activityRange\" (dateChange)=\"onActivityDateChange($event)\"></lib-date-range-picker>\r\n </div>\r\n\r\n <lib-filters [dataObject]=\"activityFilterData\" (appliedFilters)=\"onActivityFilters($event)\"></lib-filters>\r\n </div>\r\n\r\n <!-- Audit / Task -->\r\n <div class=\"av2-tabs\">\r\n <button *ngFor=\"let t of tabs\" type=\"button\" class=\"av2-tab\" [class.is-active]=\"tab === t\"\r\n (click)=\"setTab(t)\">{{ t }}</button>\r\n </div>\r\n\r\n <lib-audit-v2-shimmer *ngIf=\"logLoading\"></lib-audit-v2-shimmer>\r\n\r\n <div class=\"av2-table-wrap\" *ngIf=\"!logLoading\">\r\n <table class=\"av2-table log-table\">\r\n <thead>\r\n <tr>\r\n <th>\r\n <span class=\"av2-th-sort\">Date & Time\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <line x1=\"12\" y1=\"4\" x2=\"12\" y2=\"20\"></line>\r\n <polyline points=\"6 14 12 20 18 14\"></polyline>\r\n </svg>\r\n </span>\r\n </th>\r\n <th>{{ nameLabel }}</th>\r\n <th>Action Performed</th>\r\n <th>Performed by</th>\r\n <th>Name</th>\r\n <th>Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of pageRows; trackBy: trackByRow\">\r\n <td>\r\n <div class=\"av2-cell-stack\">\r\n <span>{{ row.day }}</span>\r\n <span class=\"av2-muted\">{{ row.time }}</span>\r\n </div>\r\n </td>\r\n <td class=\"av2-ellipsis\">{{ row.name }}</td>\r\n <td><span class=\"av2-badge activity-action\" [class.activity-action--log]=\"row.raw?.kind === 'log'\"\r\n [title]=\"row.action\">{{ row.action }}</span></td>\r\n <td>\r\n <div class=\"av2-cell-icon av2-dim\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"8\" r=\"3.4\"></circle>\r\n <path d=\"M5 20c0-3.6 3.1-5.6 7-5.6s7 2 7 5.6\"></path>\r\n </svg>\r\n <span>{{ row.by }}</span>\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"av2-cell-icon store-cell\">\r\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M3 9l1.6-4.5h14.8L21 9\"></path>\r\n <path d=\"M4 9v11h16V9\"></path>\r\n <path d=\"M9 20v-6h6v6\"></path>\r\n </svg>\r\n <span>{{ row.store }}</span>\r\n </div>\r\n </td>\r\n <td>\r\n <a *ngIf=\"row.viewable\" class=\"av2-link\" routerLink=\"/manage/trax/audit-v2/gallery\"\r\n [queryParams]=\"galleryParams(row)\" title=\"Open this submission in the Gallery\">View</a>\r\n <span *ngIf=\"!row.viewable\" class=\"av2-faint\">-</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div *ngIf=\"!logLoading && !filteredRows.length\" class=\"av2-empty\">\r\n <img class=\"av2-empty-img\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\">\r\n <div class=\"av2-empty-text\">\r\n <div class=\"av2-empty-title\">No data found</div>\r\n <div class=\"av2-empty-sub\">There is no result for {{ tab }}</div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!logLoading && filteredRows.length\" class=\"log-pagination\">\r\n <lib-pagination [itemsPerPage]=\"itemsPerPage\" [pageSize]=\"itemsPerPage\" [paginationSizes]=\"pageSizes\" [currentPage]=\"currentPage\" [totalItems]=\"totalItems\"\r\n (pageChange)=\"onPageChange($event)\"></lib-pagination>\r\n </div>\r\n </section>\r\n\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.av2-page{display:flex;flex-direction:column;gap:16px;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:#101828;-webkit-font-smoothing:antialiased}.av2-page *,.av2-page *:before,.av2-page *:after{box-sizing:border-box}.av2-card{background:#fff;border-radius:12px;box-shadow:inset 0 0 0 1px #eaecf0,0 1px 2px #1018280d;padding:20px 24px;display:flex;flex-direction:column;gap:20px}.av2-card--log{padding:20px 24px 24px;gap:18px}.av2-card--table{padding:20px 24px 24px;gap:16px}.av2-card-head{display:flex;align-items:flex-start;gap:16px;flex-wrap:wrap}.av2-card-head--center{align-items:center;gap:12px}.av2-title-block{display:flex;flex-direction:column;gap:4px;flex:1;min-width:220px}.av2-card-title{font-size:18px;line-height:26px;font-weight:700;color:#101828;display:flex;align-items:center;gap:10px}.av2-card-title--grow{flex:1;min-width:180px}.av2-card-sub{font-size:13px;line-height:20px;color:#667085}.av2-grow{flex:1}.av2-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.av2-grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:20px}.av2-grid-4{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px}.av2-stat{border-radius:10px;background:linear-gradient(90deg,#f0f7ff,#f8fbff 60%,#fff);box-shadow:inset 0 0 0 1px #d1e9ff;padding:20px 24px;display:flex;align-items:center;gap:16px}.av2-stat-value{font-size:30px;line-height:38px;font-weight:700;color:#101828}.av2-stat-label{font-size:15px;line-height:22px;color:#344054}.av2-kpi{background:#fff;border-radius:10px;box-shadow:inset 0 0 0 1px #eaecf0,0 1px 2px #1018280d;display:flex;flex-direction:column;overflow:hidden}.av2-kpi.is-primary{box-shadow:inset 0 0 0 1px #b2ddff,0 1px 2px #1018280d}.av2-kpi.is-primary .av2-kpi-head{background:#eff8ff}.av2-kpi-head{padding:14px 18px;background:#f9fafb;font-size:15px;line-height:22px;font-weight:600;color:#101828}.av2-kpi-body{padding:16px 18px 18px;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.av2-kpi-value{font-size:24px;line-height:32px;font-weight:700;color:#101828}.av2-kpi-delta{display:flex;align-items:center;gap:4px;font-size:12px;color:#039855}.av2-kpi-delta.is-down{color:#d92d20}.av2-kpi-note{font-size:12px;color:#667085}.av2-search{position:relative;display:flex;align-items:center;gap:8px;height:40px;padding:0 12px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;color:#98a2b3;font-size:14px;flex-shrink:0}.av2-search svg{flex-shrink:0}.av2-search input{flex:1;min-width:0;height:100%;border:0;outline:0;padding:0;background:transparent;font:inherit;font-size:14px;color:#101828}.av2-search input::placeholder{color:#98a2b3}.av2-search:focus-within{box-shadow:inset 0 0 0 1px #84caff,0 0 0 4px #eff8ff}.av2-search--sm{width:300px}.av2-search--md{width:320px}.av2-search--lg{width:340px}.av2-select{height:40px;padding:0 36px 0 12px;border:0;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font:inherit;font-size:14px;color:#344054;cursor:pointer;appearance:none;-webkit-appearance:none;background-image:url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23344054' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>\");background-repeat:no-repeat;background-position:right 12px center;flex-shrink:0}.av2-select:focus{outline:0;box-shadow:inset 0 0 0 1px #84caff,0 0 0 4px #eff8ff}.av2-select--sm{width:180px}.av2-chip{display:flex;align-items:center;gap:8px;height:40px;padding:0 12px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;font-size:13px;color:#344054;white-space:nowrap;flex-shrink:0}.av2-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:40px;padding:0 16px;border:0;border-radius:8px;font-family:inherit;font-size:14px;line-height:20px;font-weight:600;cursor:pointer;white-space:nowrap;flex-shrink:0;transition:background-color .15s cubic-bezier(.4,0,.2,1)}.av2-btn svg{flex-shrink:0}.av2-btn:disabled{opacity:.55;cursor:not-allowed}.av2-btn--ghost{background:#fff;box-shadow:inset 0 0 0 1px #d0d5dd;color:#344054}.av2-btn--ghost:hover:not(:disabled){background:#f9fafb}.av2-btn--primary{background:#1570ef;color:#fff}.av2-btn--primary:hover:not(:disabled){background:#175cd3}.av2-btn--sm{height:36px;padding:0 14px;font-size:13px}.av2-btn--wide{padding:0 18px}.av2-tabs{display:flex;align-items:center;gap:6px}.av2-tab{height:40px;padding:0 26px;border:0;border-radius:8px;background:transparent;display:inline-flex;align-items:center;justify-content:center;font-family:inherit;font-size:14px;font-weight:500;color:#475467;cursor:pointer}.av2-tab.is-active{background:#eff8ff;color:#175cd3;font-weight:600}.av2-badge{display:inline-flex;align-items:center;height:28px;padding:0 12px;border-radius:6px;background:#eff8ff;color:#175cd3;font-size:12px;font-weight:600;white-space:nowrap}.av2-badge--count{height:22px;padding:0 8px}.av2-badge--success{background:#ecfdf3;color:#027a48}.av2-badge--error{background:#fef3f2;color:#b42318}.av2-badge--warning{background:#fffaeb;color:#b54708}.av2-badge--gray{background:#f2f4f7;color:#344054}.av2-badge--purple{background:#f9f5ff;color:#5925dc}.av2-link{color:#1570ef;font-size:13px;font-weight:500;text-decoration:underline;cursor:pointer}.av2-link:hover{color:#175cd3;text-decoration:underline}.av2-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.av2-muted{color:#667085}.av2-dim{color:#475467}.av2-faint{color:#98a2b3}table tbody td.av2-dim{color:#475467}table tbody td.av2-faint{color:#98a2b3}.av2-table-wrap{overflow-x:auto}.av2-table{width:100%;border-collapse:separate;border-spacing:0;margin:0}.av2-table thead th{background:#f9fafb;padding:12px 8px;font-size:12px;line-height:18px;font-weight:600;color:#475467;text-align:left;text-transform:none;letter-spacing:0;border:0;white-space:nowrap}.av2-table thead th:first-child{border-radius:8px 0 0}.av2-table thead th:last-child{border-radius:0 8px 0 0}.av2-table tbody td{padding:14px 8px;border:0;border-bottom:1px solid #F2F4F7;font-size:13px;line-height:20px;color:#1d2939;vertical-align:middle}.av2-table .av2-th-sort{display:inline-flex;align-items:center;gap:4px}.av2-table .av2-cell-icon{display:flex;align-items:center;gap:8px;min-width:0}.av2-table .av2-cell-icon svg{flex-shrink:0}.av2-table .av2-cell-icon span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av2-table .av2-cell-stack{display:flex;flex-direction:column;gap:2px}.av2-table .av2-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av2-table--lined thead th{background:transparent;border-bottom:1px solid #EAECF0;border-radius:0!important}.av2-empty{display:flex;flex-direction:column;align-items:center;gap:12px;padding:24px 16px 32px;text-align:center}.av2-empty-img{display:block;width:160px;height:120px}.av2-empty-text{display:flex;flex-direction:column;gap:4px;align-items:center}.av2-empty-title{font-size:16px;line-height:24px;font-weight:600;color:#101828}.av2-empty-sub{max-width:480px;font-size:14px;line-height:20px;color:#667085;text-wrap:pretty}.av2-col-head{border-radius:8px;background:#f9fafb;padding:14px 16px;font-size:14px;line-height:20px;font-weight:500;color:#344054;display:flex;align-items:center;gap:8px}.av2-avatar{width:32px;height:32px;flex-shrink:0;border-radius:9999px;background:#eff8ff;color:#175cd3;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700}.av2-bar{flex:1;height:5px;border-radius:9999px;background:#f2f4f7;overflow:hidden;display:block;min-width:60px}.av2-bar span{display:block;height:5px;border-radius:9999px;background:#1570ef}@keyframes av2-shimmer{0%{background-position:-1000px 0}to{background-position:1000px 0}}.av2-sk{display:block;width:100%;max-width:100%;height:12px;border-radius:4px;flex-shrink:0;background:linear-gradient(to right,#e6e6e6 5%,#ccc 25%,#e6e6e6 35%);background-size:1000px 100%;animation:av2-shimmer 3s linear infinite}.av2-sk--value{width:72px;height:28px;border-radius:6px}.av2-sk--title{width:220px;height:18px}.av2-sk--note{width:60%}.av2-sk--block{border-radius:8px}@media (prefers-reduced-motion: reduce){.av2-sk{animation:none}}:host ::ng-deep lib-pagination{display:block}:host ::ng-deep lib-pagination .container{max-width:none;padding:0;display:flex;align-items:center;justify-content:center;gap:16px;flex-wrap:wrap;font-size:13px;color:#475467}:host ::ng-deep lib-pagination .mt-4{margin-top:0!important}:host ::ng-deep lib-pagination .container>.text-center{display:flex;align-items:center}:host ::ng-deep lib-pagination .container>.text-center>ul:not(.ngx-pagination){display:none}:host ::ng-deep lib-pagination pagination-controls{display:flex;align-items:center}:host ::ng-deep lib-pagination .sub-title{color:#475467!important;font-size:13px!important;font-weight:400!important;line-height:20px}:host ::ng-deep lib-pagination .border-val{height:34px;padding:0 28px 0 12px!important;border:0!important;border-radius:8px!important;box-shadow:inset 0 0 0 1px #d0d5dd;font-size:13px;font-weight:600;color:#1d2939;background-position-x:calc(100% - 10px)}:host ::ng-deep lib-pagination .ngx-pagination{margin:0;padding:0;display:flex;align-items:center;gap:6px;color:#475467!important;font-size:13px!important;font-weight:500}:host ::ng-deep lib-pagination .ngx-pagination li{display:inline-flex;margin:0}:host ::ng-deep lib-pagination .ngx-pagination li.small-screen{display:none!important}:host ::ng-deep lib-pagination .ngx-pagination a,:host ::ng-deep lib-pagination .ngx-pagination button,:host ::ng-deep lib-pagination .ngx-pagination .current,:host ::ng-deep lib-pagination .ngx-pagination .disabled{min-width:34px!important;height:34px;padding:0 8px!important;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;line-height:20px;color:#475467}:host ::ng-deep lib-pagination .ngx-pagination a:hover,:host ::ng-deep lib-pagination .ngx-pagination button:hover{background:#f2f4f7;padding:0 8px!important}:host ::ng-deep lib-pagination .ngx-pagination .current{background:#eff8ff!important;color:#175cd3!important;font-weight:700;font-size:13px!important}:host ::ng-deep lib-pagination .ngx-pagination .disabled{color:#98a2b3}:host ::ng-deep lib-pagination .ngx-pagination .pagination-previous a:before,:host ::ng-deep lib-pagination .ngx-pagination .pagination-previous a:after,:host ::ng-deep lib-pagination .ngx-pagination .pagination-previous.disabled:before,:host ::ng-deep lib-pagination .ngx-pagination .pagination-previous.disabled:after,:host ::ng-deep lib-pagination .ngx-pagination .pagination-next a:before,:host ::ng-deep lib-pagination .ngx-pagination .pagination-next a:after,:host ::ng-deep lib-pagination .ngx-pagination .pagination-next.disabled:before,:host ::ng-deep lib-pagination .ngx-pagination .pagination-next.disabled:after{margin:0}:host ::ng-deep lib-pagination .ngx-pagination .ellipsis:after{color:#98a2b3;padding:0}.ac-sk-value{width:56px;height:32px;margin:3px 0}.approval-col{display:flex;flex-direction:column;gap:28px}.approval-cards{display:flex;flex-direction:column;gap:12px;max-height:420px;overflow-y:auto;padding-right:4px}.approval-card{display:flex;flex-direction:column;gap:6px;padding:14px 16px;border-radius:8px;background:#fff;box-shadow:inset 0 0 0 1px #eaecf0,0 1px 2px #1018280d;cursor:pointer}.approval-card:hover{background:#fcfcfd}.approval-card:focus-visible{outline:2px solid #84CAFF;outline-offset:1px}.approval-card--off{cursor:default}.approval-card--off:hover{background:#fff}.approval-card-name{font-size:14px;line-height:20px;font-weight:600;color:#101828}.approval-card-meta{display:flex;flex-direction:column;gap:2px;font-size:12px;line-height:18px;color:#667085}.log-table{table-layout:fixed}.log-table th:nth-child(1){width:11%}.log-table th:nth-child(2){width:24%}.log-table th:nth-child(3){width:15%}.log-table th:nth-child(4){width:29%}.log-table th:nth-child(5){width:13%}.log-table th:nth-child(6){width:8%}.store-cell{color:#344054}.log-pagination{padding-top:20px}.approval-card-badges{display:flex;flex-wrap:wrap;gap:6px}.approval-card-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:2px}.approval-card-date{font-size:12px;line-height:18px;color:#667085}.approval-scope-select{min-width:160px}.log-date-picker{display:flex;align-items:center}:host ::ng-deep .log-date-picker .my-1{margin-top:0!important;margin-bottom:0!important}.activity-action{display:inline-block;max-width:260px;line-height:28px;overflow:hidden;text-overflow:ellipsis;vertical-align:middle}.activity-action--log{background:#f2f4f7;color:#344054}\n"] }]
|
|
354
393
|
}], ctorParameters: () => [{ type: i1.TraxService }, { type: i2.GlobalStateService }, { type: i0.ChangeDetectorRef }, { type: i3.Router }] });
|
|
355
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtdjItYWN0aW9uLWNlbnRyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2F1ZGl0LXYyL2FjdGlvbi1jZW50cmUvYXVkaXQtdjItYWN0aW9uLWNlbnRyZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2F1ZGl0LXYyL2FjdGlvbi1jZW50cmUvYXVkaXQtdjItYWN0aW9uLWNlbnRyZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFaEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTlFLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQzs7Ozs7Ozs7OztBQTRDMUI7Ozs7OztHQU1HO0FBTUgsTUFBTSxPQUFPLDRCQUE0QjtJQW9EN0I7SUFDQTtJQUNBO0lBQ0E7SUF0RFYsbUNBQW1DO0lBQ25DLEdBQUcsR0FBYyxPQUFPLENBQUM7SUFDaEIsSUFBSSxHQUFnQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUUvQywrQkFBK0I7SUFDL0IsY0FBYyxHQUFHLEVBQUUsQ0FBQztJQUNwQixhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQ2IsY0FBYyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMxQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxF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LENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFZO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWEsRUFBRSxHQUFnQjtRQUN4QyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxvQkFBb0IsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDM0UsQ0FBQztJQUVELGFBQWEsQ0FBQyxDQUFTLEVBQUUsR0FBbUI7UUFDMUMsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQ2pCLENBQUM7d0dBN1ZVLDRCQUE0Qjs0RkFBNUIsNEJBQTRCLGtFQzVEekMsczRSQXlMQTs7NEZEN0hhLDRCQUE0QjtrQkFMeEMsU0FBUzsrQkFDRSw0QkFBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XHJcbmltcG9ydCB7IFRyYXhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdHJheC5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aXZpdHlSb3cge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICAvKiogXCJTdGFydGVkIGJ5XCIgLyBcIlN1Ym1pdHRlZCBieVwiLCBmcm9tIHRoZSBhdWRpdCBhY3Rpdml0eSBBUEkuICovXHJcbiAgYWN0aW9uOiBzdHJpbmc7XHJcbiAgYnk6IHN0cmluZztcclxuICBzdG9yZTogc3RyaW5nO1xyXG4gIGRheTogc3RyaW5nO1xyXG4gIHRpbWU6IHN0cmluZztcclxuICAvKiogU3VibWl0dGVkIGVudHJpZXMgY2FuIGJlIG9wZW5lZDsgc3RhcnRlZCBvbmVzIGNhbm5vdC4gKi9cclxuICB2aWV3YWJsZTogYm9vbGVhbjtcclxuICByYXc/OiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXBwcm92YWxDYXJkIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgc3RvcmU6IHN0cmluZztcclxuICBieTogc3RyaW5nO1xyXG4gIHdoZW46IHN0cmluZztcclxuICAvKiogXCJBdWRpdFwiIG9yIFwiVGFza1wiLCBmcm9tIHRoZSBBUEkncyBtb2R1bGUgZmllbGQuICovXHJcbiAgdHlwZUxhYmVsOiBzdHJpbmc7XHJcbiAgLyoqIFwiU3VibWl0dGVkIHggLyB5XCIgKHN1Ym1pdHRlZCBpbnN0YW5jZXMgLyBhc3NpZ25lZCBzdG9yZXMpLCBvciAnJyB3aGVuIHVua25vd24uICovXHJcbiAgc3VibWl0dGVkTGFiZWw6IHN0cmluZztcclxuICAvKiogXCJBcHByb3ZlZCB4IC8geVwiIChhcHByb3ZlZCAvIHN1Ym1pdHRlZCksIG9yICcnIHdoZW4gbm90aGluZyBpcyBzdWJtaXR0ZWQgeWV0LiAqL1xyXG4gIGFwcHJvdmVkTGFiZWw6IHN0cmluZztcclxuICByZWRvOiBib29sZWFuO1xyXG4gIC8qKiBHYWxsZXJ5IGRlZXAgbGluayAoYXVkaXQgLyBzdG9yZSAvIGRheSAvIGFwcHJvdmFsIHN0YXR1cyksIG9yIG51bGwgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvIHJldmlldyB0aGVyZS4gKi9cclxuICBsaW5rOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgbnVsbDtcclxuICAvKiogVG9vbHRpcDogd2hhdCBhIGNsaWNrIG9wZW5zLCBvciB3aHkgdGhlIGNhcmQgY2Fubm90IGJlIG9wZW5lZC4gKi9cclxuICBoaW50OiBzdHJpbmc7XHJcbiAgcmF3PzogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFwcHJvdmFsQ29sdW1uIHtcclxuICBrZXk6ICdvcGVuJyB8ICdpbnByb2dyZXNzJyB8ICdhcHByb3ZlZCc7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICBlbXB0eTogc3RyaW5nO1xyXG4gIGNhcmRzOiBBcHByb3ZhbENhcmRbXTtcclxufVxyXG5cclxudHlwZSBBY3Rpb25UYWIgPSAnQXVkaXQnIHwgJ1Rhc2snO1xyXG5cclxuLyoqXHJcbiAqIEF1ZGl0IEFjdGlvbiBDZW50ZXIsIHNlcnZlZCBieSAvdHJheC9hdWRpdC9hY3Rpb25DZW50ZXIvKiAocmV0YWlsLXRyYXgtYXBpLXYyKTpcclxuICogICBjYXJkcyAgICAgICAtPiBhdWRpdHMgLyB0YXNrcyB3YWl0aW5nIGZvciBhcHByb3ZhbFxyXG4gKiAgIGFwcHJvdmFscyAgIC0+IG9wZW4gLyBpbnByb2dyZXNzIC8gZG9uZSwgb25lIHJvdyBwZXIgYXVkaXQgcGVyIGRheVxyXG4gKiAgIGFjdGl2aXR5TG9nIC0+IHN0YXJ0ICsgc3VibWl0IGV2ZW50cyBmcm9tIHRoZSBpbnN0YW5jZXMsIHNlcnZlci1wYWdlZFxyXG4gKiBFdmVyeSBjYWxsIGlzIHNjb3BlZCBieSB0aGUgZ2xvYmFsIGhlYWRlciBmaWx0ZXIgKGNsaWVudCwgY2hlY2tlZCBzdG9yZXMsIGRhdGVzKS5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWF1ZGl0LXYyLWFjdGlvbi1jZW50cmUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hdWRpdC12Mi1hY3Rpb24tY2VudHJlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vYXVkaXQtdjItYWN0aW9uLWNlbnRyZS5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1ZGl0VjJBY3Rpb25DZW50cmVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgLyoqIFRhYiBpbnNpZGUgdGhlIGFjdGl2aXR5IGxvZy4gKi9cclxuICB0YWI6IEFjdGlvblRhYiA9ICdBdWRpdCc7XHJcbiAgcmVhZG9ubHkgdGFiczogQWN0aW9uVGFiW10gPSBbJ0F1ZGl0JywgJ1Rhc2snXTtcclxuXHJcbiAgLyoqIEFwcHJvdmFsIHBhbmVsIGNvbnRyb2xzLiAqL1xyXG4gIGFwcHJvdmFsU2VhcmNoID0gJyc7XHJcbiAgYXBwcm92YWxTY29wZSA9ICdBbGwnO1xyXG4gIHJlYWRvbmx5IGFwcHJvdmFsU2NvcGVzID0gWydBbGwnLCAnQXVkaXQnLCAnVGFzayddO1xyXG4gIHJlYWRvbmx5IGFwcHJvdmFsU2NvcGVJdGVtcyA9IHRoaXMuYXBwcm92YWxTY29wZXMubWFwKChzKSA9PiAoeyBpZDogcywgbGFiZWw6IHMgfSkpO1xyXG4gIGFwcHJvdmFsU2NvcGVTZWxlY3RlZDogeyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0gPSB0aGlzLmFwcHJvdmFsU2NvcGVJdGVtc1swXTtcclxuXHJcbiAgLyoqIEFjdGl2aXR5IExvZydzIG93biBkYXRlIHJhbmdlIChkZWZhdWx0cyB0byB0aGUgaGVhZGVyIHJhbmdlLCBjaGFuZ2VkIGJ5IGl0cyBwaWNrZXIpLiAqL1xyXG4gIGFjdGl2aXR5UmFuZ2U6IHsgc3RhcnREYXRlOiBzdHJpbmc7IGVuZERhdGU6IHN0cmluZyB9IHwgbnVsbCA9IG51bGw7XHJcbiAgLyoqIEFjdGl2aXR5IExvZyBhY3Rpb24gZmlsdGVyOyBpZHMgbWF0Y2ggdGhlIEFQSSdzIGFjdGlvbiBmaWx0ZXIuIEVtcHR5ID0gYWxsLiAqL1xyXG4gIGFjdGl2aXR5QWN0aW9uczogc3RyaW5nW10gPSBbXTtcclxuICByZWFkb25seSBhY3Rpdml0eUZpbHRlckRhdGE6IGFueVtdID0gW1xyXG4gICAge1xyXG4gICAgICBEZXNjcmlwdGlvbjogJ0FjdGlvbnMnLFxyXG4gICAgICBJc3N1ZXM6IFtcclxuICAgICAgICB7IHRleHQ6ICdTdGFydGVkIGJ5JywgaWQ6ICdzdGFydCcgfSxcclxuICAgICAgICB7IHRleHQ6ICdTdWJtaXR0ZWQgYnknLCBpZDogJ3N1Ym1pdCcgfSxcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgXTtcclxuXHJcbiAgLyoqIEFjdGl2aXR5IGxvZyBjb250cm9scy4gKi9cclxuICBzZWFyY2ggPSAnJztcclxuICBkYXRlUmFuZ2UgPSAnJztcclxuICBpdGVtc1BlclBhZ2UgPSAxMDtcclxuICBjdXJyZW50UGFnZSA9IDE7XHJcbiAgcmVhZG9ubHkgcGFnZVNpemVzID0gWzEwLCAyNSwgNTBdO1xyXG4gIC8qKiBUb3RhbCBhY3Rpdml0eSByb3dzIHJlcG9ydGVkIGJ5IHRoZSBBUEkgKHNlcnZlci1zaWRlIHBhZ2luYXRpb24pLiAqL1xyXG4gIHRvdGFsSXRlbXMgPSAwO1xyXG5cclxuICBhdWRpdFdhaXRpbmcgPSAwO1xyXG4gIHRhc2tXYWl0aW5nID0gMDtcclxuXHJcbiAgcm93czogQWN0aXZpdHlSb3dbXSA9IFtdO1xyXG4gIGNvbHVtbnM6IEFwcHJvdmFsQ29sdW1uW10gPSB0aGlzLmJ1aWxkQ29sdW1ucygpO1xyXG5cclxuICBjYXJkc0xvYWRpbmcgPSB0cnVlO1xyXG4gIGFwcHJvdmFsc0xvYWRpbmcgPSB0cnVlO1xyXG4gIGxvZ0xvYWRpbmcgPSB0cnVlO1xyXG5cclxuICBwcml2YXRlIGhlYWRlckRhdGE6IGFueTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHVzZXJFbWFpbGVzOiBzdHJpbmdbXSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJzRW1haWwtaW5mbycpIHx8ICdbXScpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwcm92YWxTZWFyY2gkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc2VhcmNoJCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHRyYXhTZXJ2aWNlOiBUcmF4U2VydmljZSxcclxuICAgIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCksIGRlYm91bmNlVGltZSgzMDApKVxyXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoIWRhdGE/LmNsaWVudCkgeyByZXR1cm47IH1cclxuICAgICAgICB0aGlzLmhlYWRlckRhdGEgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuZGF0ZVJhbmdlID0gdGhpcy5mbXQoZGF0YS5kYXRlPy5zdGFydERhdGUsICdERC1NTS1ZWVlZJykgKyAnIC0gJyArIHRoaXMuZm10KGRhdGEuZGF0ZT8uZW5kRGF0ZSwgJ0RELU1NLVlZWVknKTtcclxuICAgICAgICB0aGlzLmFjdGl2aXR5UmFuZ2UgPSBkYXRhLmRhdGU/LnN0YXJ0RGF0ZSAmJiBkYXRhLmRhdGU/LmVuZERhdGVcclxuICAgICAgICAgID8geyBzdGFydERhdGU6IGRhdGEuZGF0ZS5zdGFydERhdGUsIGVuZERhdGU6IGRhdGEuZGF0ZS5lbmREYXRlIH1cclxuICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgICAgICB0aGlzLmxvYWRDYXJkcygpO1xyXG4gICAgICAgIHRoaXMubG9hZEFwcHJvdmFscygpO1xyXG4gICAgICAgIHRoaXMubG9hZEFjdGl2aXR5KCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYXBwcm92YWxTZWFyY2gkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSwgZGVib3VuY2VUaW1lKDQwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5sb2FkQXBwcm92YWxzKCkpO1xyXG5cclxuICAgIHRoaXMuc2VhcmNoJFxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCksIGRlYm91bmNlVGltZSg0MDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgICAgICB0aGlzLmxvYWRBY3Rpdml0eSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICAvKiogQ29tbW9uIGhlYWRlci1maWx0ZXIgc2NvcGUgZXZlcnkgYWN0aW9uLWNlbnRlciBjYWxsIGNhcnJpZXMuICovXHJcbiAgcHJpdmF0ZSBiYXNlUGF5bG9hZCgpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmhlYWRlckRhdGE/LmNsaWVudCxcclxuICAgICAgZnJvbURhdGU6IHRoaXMuaGVhZGVyRGF0YT8uZGF0ZT8uc3RhcnREYXRlLFxyXG4gICAgICB0b0RhdGU6IHRoaXMuaGVhZGVyRGF0YT8uZGF0ZT8uZW5kRGF0ZSxcclxuICAgICAgc3RvcmVJZDogKHRoaXMuaGVhZGVyRGF0YT8uc3RvcmVzIHx8IFtdKS5maWx0ZXIoKHM6IGFueSkgPT4gcy5jaGVja2VkKS5tYXAoKHM6IGFueSkgPT4gcy5zdG9yZUlkKSxcclxuICAgICAgdXNlckVtYWlsZXM6IHRoaXMudXNlckVtYWlsZXNcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRDYXJkcygpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FyZHNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMudHJheFNlcnZpY2UuYXVkaXRBY3Rpb25DZW50ZXJDYXJkcyh0aGlzLmJhc2VQYXlsb2FkKCkpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjYXJkID0gcmVzPy5jb2RlID09PSAyMDAgPyAocmVzLmRhdGE/LmNhcmREYXRhIHx8IHt9KSA6IHt9O1xyXG4gICAgICAgICAgdGhpcy5hdWRpdFdhaXRpbmcgPSBOdW1iZXIoY2FyZC5hdWRpdEFwcHJvdmFsKSB8fCAwO1xyXG4gICAgICAgICAgdGhpcy50YXNrV2FpdGluZyA9IE51bWJlcihjYXJkLnRhc2tBcHByb3ZhbCkgfHwgMDtcclxuICAgICAgICAgIHRoaXMuY2FyZHNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmF1ZGl0V2FpdGluZyA9IDA7XHJcbiAgICAgICAgICB0aGlzLnRhc2tXYWl0aW5nID0gMDtcclxuICAgICAgICAgIHRoaXMuY2FyZHNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkQXBwcm92YWxzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5hcHByb3ZhbHNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmFwcHJvdmFsU2NvcGUgPT09ICdBbGwnID8gJ2FsbCcgOiB0aGlzLmFwcHJvdmFsU2NvcGUgPT09ICdUYXNrJyA/ICd0YXNrJyA6ICdhdWRpdCc7XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmF1ZGl0QWN0aW9uQ2VudGVyQXBwcm92YWxzKHtcclxuICAgICAgLi4udGhpcy5iYXNlUGF5bG9hZCgpLFxyXG4gICAgICBzZWFyY2hWYWx1ZTogdGhpcy5hcHByb3ZhbFNlYXJjaC50cmltKCksXHJcbiAgICAgIHR5cGVcclxuICAgIH0pLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBkYXRhID0gcmVzPy5jb2RlID09PSAyMDAgPyAocmVzLmRhdGEgfHwge30pIDoge307XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5idWlsZENvbHVtbnMoKTtcclxuICAgICAgICB0aGlzLmNvbHVtbnNbMF0uY2FyZHMgPSAoZGF0YS5vcGVuIHx8IFtdKS5tYXAoKHg6IGFueSkgPT4gdGhpcy50b0NhcmQoeCwgJ29wZW4nKSk7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zWzFdLmNhcmRzID0gKGRhdGEuaW5wcm9ncmVzcyB8fCBbXSkubWFwKCh4OiBhbnkpID0+IHRoaXMudG9DYXJkKHgsICdpbnByb2dyZXNzJykpO1xyXG4gICAgICAgIHRoaXMuY29sdW1uc1syXS5jYXJkcyA9IChkYXRhLmRvbmUgfHwgW10pLm1hcCgoeDogYW55KSA9PiB0aGlzLnRvQ2FyZCh4LCAnYXBwcm92ZWQnKSk7XHJcbiAgICAgICAgdGhpcy5hcHByb3ZhbHNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5idWlsZENvbHVtbnMoKTtcclxuICAgICAgICB0aGlzLmFwcHJvdmFsc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRvQ2FyZCh4OiBhbnksIGNvbHVtbjogQXBwcm92YWxDb2x1bW5bJ2tleSddKTogQXBwcm92YWxDYXJkIHtcclxuICAgIGNvbnN0IHN0b3JlcyA9IE51bWJlcih4Py5zdG9yZUNvdW50KSB8fCAwO1xyXG4gICAgY29uc3Qgc3RvcmUgPSB4Py5jb3ZlcmFnZSA9PT0gJ3VzZXInXHJcbiAgICAgID8gKHg/LnVzZXJOYW1lIHx8ICfigJQnKVxyXG4gICAgICA6IChzdG9yZXMgPiAxID8gc3RvcmVzICsgJyBzdG9yZXMnIDogKHg/LnN0b3JlTmFtZSB8fCAoc3RvcmVzID09PSAxID8gJzEgc3RvcmUnIDogJ+KAlCcpKSk7XHJcbiAgICBjb25zdCBwZW5kaW5nID0gTnVtYmVyKHg/LnBlbmRpbmcpIHx8IDA7XHJcbiAgICBjb25zdCBzdWJtaXR0ZWQgPSBOdW1iZXIoeD8uc3VibWl0Q291bnQpIHx8IDA7XHJcbiAgICBjb25zdCBhcHByb3ZlZCA9IE51bWJlcih4Py5hcHByb3ZlQ291bnQpIHx8IDA7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBuYW1lOiB4Py5jaGVja0xpc3ROYW1lIHx8ICfigJQnLFxyXG4gICAgICBzdG9yZSxcclxuICAgICAgYnk6IHBlbmRpbmcgPyBwZW5kaW5nICsgJyBhd2FpdGluZyBhcHByb3ZhbCcgOiAoeD8udXNlck5hbWUgfHwgeD8uY3JlYXRlZEJ5TmFtZSB8fCAn4oCUJyksXHJcbiAgICAgIHdoZW46IHg/LnB1Ymxpc2hEYXRlID8gdGhpcy5mbXQoeC5wdWJsaXNoRGF0ZSwgJ0REIE1NTSBZWVlZJykgOiAn4oCUJyxcclxuICAgICAgdHlwZUxhYmVsOiB4Py5tb2R1bGUgPT09ICd0YXNrJyA/ICdUYXNrJyA6ICdBdWRpdCcsXHJcbiAgICAgIHN1Ym1pdHRlZExhYmVsOiBzdG9yZXMgPyBgU3VibWl0dGVkICR7c3VibWl0dGVkfSAvICR7c3RvcmVzfWAgOiAnJyxcclxuICAgICAgYXBwcm92ZWRMYWJlbDogc3VibWl0dGVkID8gYEFwcHJvdmVkICR7YXBwcm92ZWR9IC8gJHtzdWJtaXR0ZWR9YCA6ICcnLFxyXG4gICAgICByZWRvOiAhIXg/LnJlZG8sXHJcbiAgICAgIC4uLnRoaXMuY2FyZExpbmsoeCwgY29sdW1uLCBzdWJtaXR0ZWQpLFxyXG4gICAgICByYXc6IHhcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVyZSBhIGNhcmQgbGFuZHM6IHRoZSBHYWxsZXJ5IG9uIHRoYXQgYXVkaXQgYW5kIGRheSAoYW5kIHN0b3JlLCB3aGVuIHRoZSBjYXJkIGlzIG9uZSBzdG9yZSksXHJcbiAgICogbmFycm93ZWQgdG8gd2hhdCB0aGUgY29sdW1uIG1lYW5zLiBPcGVuID0gYXdhaXRpbmcgYXBwcm92YWwsIEFwcHJvdmVkID0gYXBwcm92ZWQ7IElucHJvZ3Jlc3NcclxuICAgKiBzaG93cyBldmVyeSBzdWJtaXNzaW9uLiBUaGUgR2FsbGVyeSBsaXN0cyBzdWJtaXR0ZWQgKG9yIHNlbnQtYmFjaykgdmlzaXRzIG9ubHksIHNvIGEgY2FyZCB3aXRoXHJcbiAgICogbm9uZSwgYW5kIHRhc2sgY2FyZHMgKG5vIGF1ZGl0IEdhbGxlcnkpLCBzdGF5IGNsb3NlZC5cclxuICAgKi9cclxuICBwcml2YXRlIGNhcmRMaW5rKHg6IGFueSwgY29sdW1uOiBBcHByb3ZhbENvbHVtblsna2V5J10sIHN1Ym1pdHRlZDogbnVtYmVyKTogUGljazxBcHByb3ZhbENhcmQsICdsaW5rJyB8ICdoaW50Jz4ge1xyXG4gICAgaWYgKHg/Lm1vZHVsZSA9PT0gJ3Rhc2snKSB7XHJcbiAgICAgIHJldHVybiB7IGxpbms6IG51bGwsIGhpbnQ6ICdUYXNrIHN1Ym1pc3Npb25zIGFyZSBub3QgcmV2aWV3ZWQgaW4gdGhlIGF1ZGl0IEdhbGxlcnknIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCBhdWRpdCA9IFN0cmluZyh4Py5zb3VyY2VDaGVja2xpc3RJZCB8fCAnJyk7XHJcbiAgICBjb25zdCBkYXRlID0gdGhpcy5pc29EYXkoeD8ucHVibGlzaERhdGUpO1xyXG4gICAgaWYgKCFhdWRpdCB8fCAhZGF0ZSkge1xyXG4gICAgICByZXR1cm4geyBsaW5rOiBudWxsLCBoaW50OiAnJyB9O1xyXG4gICAgfVxyXG4gICAgaWYgKCFzdWJtaXR0ZWQgJiYgIXg/LnJlZG8pIHtcclxuICAgICAgcmV0dXJuIHsgbGluazogbnVsbCwgaGludDogJ05vdGhpbmcgc3VibWl0dGVkIHlldCwgc28gdGhlcmUgaXMgbm90aGluZyB0byByZXZpZXcgaW4gdGhlIEdhbGxlcnknIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCBzdGF0dXMgPSBjb2x1bW4gPT09ICdvcGVuJyA/ICdOb3QtQXBwcm92ZWQnIDogY29sdW1uID09PSAnYXBwcm92ZWQnID8gJ0FwcHJvdmVkJyA6ICcnO1xyXG4gICAgY29uc3Qgc2luZ2xlID0gTnVtYmVyKHg/LnN0b3JlQ291bnQpID09PSAxICYmIHg/LnN0b3JlSWQ7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBsaW5rOiB7XHJcbiAgICAgICAgYXVkaXQsIGRhdGUsXHJcbiAgICAgICAgLi4uKHNpbmdsZSA/IHsgc3RvcmU6IFN0cmluZyh4LnN0b3JlSWQpIH0gOiB7fSksXHJcbiAgICAgICAgLi4uKHN0YXR1cyA/IHsgc3RhdHVzIH0gOiB7fSlcclxuICAgICAgfSxcclxuICAgICAgaGludDogY29sdW1uID09PSAnb3BlbicgPyAnUmV2aWV3IHRoZSBzdWJtaXNzaW9ucyBhd2FpdGluZyBhcHByb3ZhbCBpbiB0aGUgR2FsbGVyeSdcclxuICAgICAgICA6IGNvbHVtbiA9PT0gJ2FwcHJvdmVkJyA/ICdWaWV3IHRoZSBhcHByb3ZlZCBzdWJtaXNzaW9ucyBpbiB0aGUgR2FsbGVyeSdcclxuICAgICAgICAgIDogJ1ZpZXcgdGhlIHN1Ym1pc3Npb25zIGluIHRoZSBHYWxsZXJ5J1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKiBkYXRlX2lzbyBpcyB0aGUgdmlzaXQgZGF5IGF0IFVUQyBtaWRuaWdodDsgcmVhZCBpdHMgZGF0ZSBwYXJ0IHNvIG5vIHRpbWUgem9uZSBzaGlmdHMgdGhlIGRheS4gKi9cclxuICBwcml2YXRlIGlzb0RheSh2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgIGlmICghdmFsdWUpIHsgcmV0dXJuICcnOyB9XHJcbiAgICBjb25zdCBtID0gL14oXFxkezR9LVxcZHsyfS1cXGR7Mn0pLy5leGVjKFN0cmluZyh2YWx1ZSkpO1xyXG4gICAgcmV0dXJuIG0gPyBtWzFdIDogZGF5anModmFsdWUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xyXG4gIH1cclxuXHJcbiAgb3BlbkNhcmQoY2FyZDogQXBwcm92YWxDYXJkKTogdm9pZCB7XHJcbiAgICBpZiAoIWNhcmQubGluaykgeyByZXR1cm47IH1cclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS90cmF4L2F1ZGl0LXYyL2dhbGxlcnknXSwgeyBxdWVyeVBhcmFtczogY2FyZC5saW5rIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkQWN0aXZpdHkoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxvZ0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy50cmF4U2VydmljZS5hdWRpdEFjdGlvbkNlbnRlckFjdGl2aXR5KHtcclxuICAgICAgLi4udGhpcy5iYXNlUGF5bG9hZCgpLFxyXG4gICAgICAuLi4odGhpcy5hY3Rpdml0eVJhbmdlID8geyBmcm9tRGF0ZTogdGhpcy5hY3Rpdml0eVJhbmdlLnN0YXJ0RGF0ZSwgdG9EYXRlOiB0aGlzLmFjdGl2aXR5UmFuZ2UuZW5kRGF0ZSB9IDoge30pLFxyXG4gICAgICB0eXBlOiB0aGlzLnRhYiA9PT0gJ1Rhc2snID8gJ3Rhc2snIDogJ2F1ZGl0JyxcclxuICAgICAgbGltaXQ6IHRoaXMuaXRlbXNQZXJQYWdlLFxyXG4gICAgICBvZmZzZXQ6IHRoaXMuY3VycmVudFBhZ2UsXHJcbiAgICAgIHNlYXJjaFZhbHVlOiB0aGlzLnNlYXJjaC50cmltKCksXHJcbiAgICAgIC8vIE9ubHkgc2VudCB3aGVuIG5hcnJvd2VkLCBzbyBhbiBBUEkgd2l0aG91dCB0aGUgZmlsdGVyIHN0aWxsIHNlcnZlcyB0aGUgdW5maWx0ZXJlZCBsb2cuXHJcbiAgICAgIC4uLih0aGlzLmFjdGl2aXR5QWN0aW9ucy5sZW5ndGggPyB7IGFjdGlvbjogdGhpcy5hY3Rpdml0eUFjdGlvbnMgfSA6IHt9KVxyXG4gICAgfSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSByZXM/LmNvZGUgPT09IDIwMCA/IChyZXMuZGF0YSB8fCB7fSkgOiB7fTtcclxuICAgICAgICB0aGlzLnJvd3MgPSAoZGF0YS5hY3Rpdml0eUxvZ0RhdGEgfHwgW10pLm1hcCgobG9nOiBhbnkpID0+IHRoaXMudG9Sb3cobG9nKSk7XHJcbiAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gTnVtYmVyKGRhdGEuY291bnQpIHx8IDA7XHJcbiAgICAgICAgdGhpcy5sb2dMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yb3dzID0gW107XHJcbiAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gMDtcclxuICAgICAgICB0aGlzLmxvZ0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRvUm93KGxvZzogYW55KTogQWN0aXZpdHlSb3cge1xyXG4gICAgY29uc3QgYXQgPSBsb2c/LmF0ID8gZGF5anMobG9nLmF0KSA6IG51bGw7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBuYW1lOiBsb2c/LmNoZWNrTGlzdE5hbWUgfHwgJ+KAlCcsXHJcbiAgICAgIGFjdGlvbjogU3RyaW5nKGxvZz8uYWN0aW9uIHx8ICfigJQnKSxcclxuICAgICAgYnk6IGxvZz8udXNlckVtYWlsIHx8IGxvZz8udXNlck5hbWUgfHwgJ+KAlCcsXHJcbiAgICAgIHN0b3JlOiBsb2c/LnN0b3JlTmFtZSB8fCBsb2c/LnN0b3JlSWQgfHwgJ+KAlCcsXHJcbiAgICAgIGRheTogYXQgPyAoYXQuaXNTYW1lKGRheWpzKCksICdkYXknKSA/ICdUb2RheScgOiBhdC5mb3JtYXQoJ0REIE1NTSBZWVlZJykpIDogJ+KAlCcsXHJcbiAgICAgIHRpbWU6IGF0ID8gYXQuZm9ybWF0KCdoaCA6IG1tIEEnKSA6ICfigJQnLFxyXG4gICAgICAvLyBWaWV3IG9wZW5zIGFuIGF1ZGl0IHN1Ym1pc3Npb24gaW4gdGhlIEdhbGxlcnk7IGEgdGFzayByb3cgaGFzIG5vIGF1ZGl0IHRvIG9wZW4gdGhlcmUuXHJcbiAgICAgIHZpZXdhYmxlOiAhIWxvZz8udmlld2FibGUgJiYgbG9nPy5tb2R1bGUgIT09ICd0YXNrJyAmJiB0aGlzLnRhYiA9PT0gJ0F1ZGl0JyxcclxuICAgICAgcmF3OiBsb2dcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKiogRGVlcCBsaW5rIGZvciBcIlZpZXdcIjogdGhlIEdhbGxlcnkgcHJlLXNlbGVjdHMgdGhpcyBhdWRpdCwgc3RvcmUgYW5kIGRheS4gKi9cclxuICBnYWxsZXJ5UGFyYW1zKHJvdzogQWN0aXZpdHlSb3cpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgIGNvbnN0IGxvZyA9IHJvdy5yYXcgfHwge307XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBhdWRpdDogU3RyaW5nKGxvZy5zb3VyY2VDaGVja0xpc3RfaWQgfHwgJycpLFxyXG4gICAgICBzdG9yZTogU3RyaW5nKGxvZy5zdG9yZUlkIHx8ICcnKSxcclxuICAgICAgZGF0ZTogbG9nLmF0ID8gZGF5anMobG9nLmF0KS5mb3JtYXQoJ1lZWVktTU0tREQnKSA6ICcnXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmbXQodmFsdWU6IGFueSwgcGF0dGVybjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB2YWx1ZSA/IGRheWpzKHZhbHVlKS5mb3JtYXQocGF0dGVybikgOiAn4oCUJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRDb2x1bW5zKCk6IEFwcHJvdmFsQ29sdW1uW10ge1xyXG4gICAgY29uc3Qgbm91biA9IHRoaXMuYXBwcm92YWxTY29wZSA9PT0gJ1Rhc2snID8gJ1Rhc2snIDogJ0F1ZGl0JztcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHsga2V5OiAnb3BlbicsIHRpdGxlOiAnT3BlbicsIGVtcHR5OiAnVGhlcmUgaXMgbm8gcmVzdWx0IGZvciBPcGVuICcgKyBub3VuLCBjYXJkczogW10gfSxcclxuICAgICAgeyBrZXk6ICdpbnByb2dyZXNzJywgdGl0bGU6ICdJbnByb2dyZXNzJywgZW1wdHk6ICdUaGVyZSBpcyBubyByZXN1bHQgZm9yIElucHJvZ3Jlc3MgJyArIG5vdW4sIGNhcmRzOiBbXSB9LFxyXG4gICAgICB7IGtleTogJ2FwcHJvdmVkJywgdGl0bGU6ICdBcHByb3ZlZCcsIGVtcHR5OiAnVGhlcmUgaXMgbm8gcmVzdWx0IGZvciBBcHByb3ZlZCAnICsgbm91biwgY2FyZHM6IFtdIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBzZXRUYWIodGFiOiBBY3Rpb25UYWIpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnRhYiA9PT0gdGFiKSB7IHJldHVybjsgfVxyXG4gICAgdGhpcy50YWIgPSB0YWI7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIHRoaXMubG9hZEFjdGl2aXR5KCk7XHJcbiAgfVxyXG5cclxuICBvbkFwcHJvdmFsU2NvcGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxvYWRBcHByb3ZhbHMoKTtcclxuICB9XHJcblxyXG4gIG9uQXBwcm92YWxTY29wZVNlbGVjdChpdGVtOiB7IGlkOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgY29uc3QgbmV4dCA9IGl0ZW0/LmlkO1xyXG4gICAgaWYgKCFuZXh0IHx8IG5leHQgPT09IHRoaXMuYXBwcm92YWxTY29wZSkgeyByZXR1cm47IH1cclxuICAgIHRoaXMuYXBwcm92YWxTY29wZSA9IG5leHQ7XHJcbiAgICB0aGlzLmFwcHJvdmFsU2NvcGVTZWxlY3RlZCA9IHRoaXMuYXBwcm92YWxTY29wZUl0ZW1zLmZpbmQoKGkpID0+IGkuaWQgPT09IG5leHQpIHx8IHRoaXMuYXBwcm92YWxTY29wZUl0ZW1zWzBdO1xyXG4gICAgdGhpcy5sb2FkQXBwcm92YWxzKCk7XHJcbiAgfVxyXG5cclxuICBvbkFjdGl2aXR5RGF0ZUNoYW5nZShldmVudDogeyBzdGFydERhdGU/OiBzdHJpbmc7IGVuZERhdGU/OiBzdHJpbmcgfSk6IHZvaWQge1xyXG4gICAgaWYgKCFldmVudD8uc3RhcnREYXRlIHx8ICFldmVudD8uZW5kRGF0ZSkgeyByZXR1cm47IH1cclxuICAgIHRoaXMuYWN0aXZpdHlSYW5nZSA9IHsgc3RhcnREYXRlOiBldmVudC5zdGFydERhdGUsIGVuZERhdGU6IGV2ZW50LmVuZERhdGUgfTtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgdGhpcy5sb2FkQWN0aXZpdHkoKTtcclxuICB9XHJcblxyXG4gIG9uQWN0aXZpdHlGaWx0ZXJzKGV2ZW50OiBhbnlbXSk6IHZvaWQge1xyXG4gICAgY29uc3QgYWN0aW9ucyA9IChldmVudCB8fCBbXSkuZmluZCgoZjogYW55KSA9PiBmPy5EZXNjcmlwdGlvbiA9PT0gJ0FjdGlvbnMnKTtcclxuICAgIHRoaXMuYWN0aXZpdHlBY3Rpb25zID0gKGFjdGlvbnM/Lklzc3VlcyB8fCBbXSkubWFwKChpOiBhbnkpID0+IGkuaWQpO1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICB0aGlzLmxvYWRBY3Rpdml0eSgpO1xyXG4gIH1cclxuXHJcbiAgb25BcHByb3ZhbFNlYXJjaCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYXBwcm92YWxTZWFyY2gkLm5leHQodGhpcy5hcHByb3ZhbFNlYXJjaCk7XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VhcmNoJC5uZXh0KHRoaXMuc2VhcmNoKTtcclxuICB9XHJcblxyXG4gIGdldCBuYW1lTGFiZWwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRhYiA9PT0gJ1Rhc2snID8gJ1Rhc2sgTmFtZScgOiAnQXVkaXQgTmFtZSc7XHJcbiAgfVxyXG5cclxuICBnZXQgc2VhcmNoSGludCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGFiID09PSAnVGFzaycgPyAnU2VhcmNoIHdpdGggU3RvcmUsIEVtYWlsLCBUYXNrJyA6ICdTZWFyY2ggd2l0aCBTdG9yZSwgRW1haWwsIEF1ZGl0JztcclxuICB9XHJcblxyXG4gIC8qKiBTZWFyY2ggYW5kIHBhZ2luZyBhcmUgc2VydmVyLXNpZGU7IHRoZSBwYWdlIHdlIGhvbGQgaXMgdGhlIHBhZ2Ugd2Ugc2hvdy4gKi9cclxuICBnZXQgZmlsdGVyZWRSb3dzKCk6IEFjdGl2aXR5Um93W10ge1xyXG4gICAgcmV0dXJuIHRoaXMucm93cztcclxuICB9XHJcblxyXG4gIGdldCBwYWdlUm93cygpOiBBY3Rpdml0eVJvd1tdIHtcclxuICAgIHJldHVybiB0aGlzLnJvd3M7XHJcbiAgfVxyXG5cclxuICBvblBhZ2VDaGFuZ2UocGFnZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZTtcclxuICAgIHRoaXMubG9hZEFjdGl2aXR5KCk7XHJcbiAgfVxyXG5cclxuICB0cmFja0J5Um93KGluZGV4OiBudW1iZXIsIHJvdzogQWN0aXZpdHlSb3cpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIChyb3cucmF3Py5wcm9jZXNzZWRDaGVja2xpc3RJZCB8fCByb3cuc3RvcmUpICsgcm93LmFjdGlvbiArIGluZGV4O1xyXG4gIH1cclxuXHJcbiAgdHJhY2tCeUNvbHVtbihfOiBudW1iZXIsIGNvbDogQXBwcm92YWxDb2x1bW4pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGNvbC5rZXk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJhdjItcGFnZVwiPlxyXG5cclxuICA8IS0tIFdhaXRpbmcgZm9yIGFwcHJvdmFsIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJhdjItZ3JpZC0yXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXYyLXN0YXRcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJhdjItc2sgYXYyLXNrLS12YWx1ZSBhYy1zay12YWx1ZVwiICpuZ0lmPVwiY2FyZHNMb2FkaW5nXCI+PC9zcGFuPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImF2Mi1zdGF0LXZhbHVlXCIgKm5nSWY9XCIhY2FyZHNMb2FkaW5nXCI+e3sgYXVkaXRXYWl0aW5nIH19PC9zcGFuPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImF2Mi1zdGF0LWxhYmVsXCI+QXVkaXQgd2FpdGluZyBmb3IgYXBwcm92YWw8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJhdjItc3RhdFwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImF2Mi1zayBhdjItc2stLXZhbHVlIGFjLXNrLXZhbHVlXCIgKm5nSWY9XCJjYXJkc0xvYWRpbmdcIj48L3NwYW4+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiYXYyLXN0YXQtdmFsdWVcIiAqbmdJZj1cIiFjYXJkc0xvYWRpbmdcIj57eyB0YXNrV2FpdGluZyB9fTwvc3Bhbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJhdjItc3RhdC1sYWJlbFwiPlRhc2sgd2FpdGluZyBmb3IgYXBwcm92YWw8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBBcHByb3ZhbCAtLT5cclxuICA8c2VjdGlvbiBjbGFzcz1cImF2Mi1jYXJkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXYyLWNhcmQtaGVhZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYXYyLXRpdGxlLWJsb2NrXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImF2Mi1jYXJkLXRpdGxlXCI+QXBwcm92YWw8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXYyLWNhcmQtc3ViXCI+QSBzdW1tYXJ5IG9mIGFsbCB0aGUgYXVkaXRzIGF3YWl0aW5nIGFwcHJvdmFsPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwiYXYyLXNlYXJjaCBhdjItc2VhcmNoLS1tZFwiPlxyXG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCI+XHJcbiAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTFcIiBjeT1cIjExXCIgcj1cIjdcIj48L2NpcmNsZT5cclxuICAgICAgICAgIDxsaW5lIHgxPVwiMTYuNVwiIHkxPVwiMTYuNVwiIHgyPVwiMjFcIiB5Mj1cIjIxXCI+PC9saW5lPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImFwcHJvdmFsU2VhcmNoXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25BcHByb3ZhbFNlYXJjaCgpXCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XHJcbiAgICAgIDwvbGFiZWw+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYXBwcm92YWwtc2NvcGUtc2VsZWN0XCI+XHJcbiAgICAgICAgPGxpYi1zZWxlY3QgW2l0ZW1zXT1cImFwcHJvdmFsU2NvcGVJdGVtc1wiIFttdWx0aV09XCJmYWxzZVwiIFtzZWFyY2hGaWVsZF09XCInbGFiZWwnXCIgW2lkRmllbGRdPVwiJ2lkJ1wiXHJcbiAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZXNdPVwiW2FwcHJvdmFsU2NvcGVTZWxlY3RlZF1cIiAoc2VsZWN0ZWQpPVwib25BcHByb3ZhbFNjb3BlU2VsZWN0KCRldmVudClcIj48L2xpYi1zZWxlY3Q+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImF2Mi1ncmlkLTNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImFwcHJvdmFsLWNvbFwiICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgdHJhY2tCeTogdHJhY2tCeUNvbHVtblwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhdjItY29sLWhlYWRcIj5cclxuICAgICAgICAgIHt7IGNvbC50aXRsZSB9fVxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhYXBwcm92YWxzTG9hZGluZyAmJiBjb2wuY2FyZHMubGVuZ3RoXCIgY2xhc3M9XCJhdjItYmFkZ2UgYXYyLWJhZGdlLS1jb3VudFwiPnt7IGNvbC5jYXJkcy5sZW5ndGggfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxsaWItYXVkaXQtdjItc2hpbW1lciAqbmdJZj1cImFwcHJvdmFsc0xvYWRpbmdcIiBbcm93c109XCIyXCI+PC9saWItYXVkaXQtdjItc2hpbW1lcj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFhcHByb3ZhbHNMb2FkaW5nICYmIGNvbC5jYXJkcy5sZW5ndGhcIiBjbGFzcz1cImFwcHJvdmFsLWNhcmRzXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjYXJkIG9mIGNvbC5jYXJkc1wiIGNsYXNzPVwiYXBwcm92YWwtY2FyZFwiIFtjbGFzcy5hcHByb3ZhbC1jYXJkLS1vZmZdPVwiIWNhcmQubGlua1wiXHJcbiAgICAgICAgICAgIFthdHRyLnJvbGVdPVwiY2FyZC5saW5rID8gJ2xpbmsnIDogbnVsbFwiIFthdHRyLnRhYmluZGV4XT1cImNhcmQubGluayA/IDAgOiBudWxsXCIgW2F0dHIudGl0bGVdPVwiY2FyZC5oaW50IHx8IG51bGxcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlbkNhcmQoY2FyZClcIiAoa2V5ZG93bi5lbnRlcik9XCJvcGVuQ2FyZChjYXJkKVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwcm92YWwtY2FyZC1iYWRnZXNcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF2Mi1iYWRnZSBhdjItYmFkZ2UtLXB1cnBsZSBhdjItYmFkZ2UtLWNvdW50XCI+e3sgY2FyZC50eXBlTGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjYXJkLnJlZG9cIiBjbGFzcz1cImF2Mi1iYWRnZSBhdjItYmFkZ2UtLXdhcm5pbmcgYXYyLWJhZGdlLS1jb3VudFwiPlJlZG88L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwcm92YWwtY2FyZC1uYW1lXCI+e3sgY2FyZC5uYW1lIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHByb3ZhbC1jYXJkLW1ldGFcIj5cclxuICAgICAgICAgICAgICA8c3Bhbj57eyBjYXJkLnN0b3JlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY2FyZC5zdWJtaXR0ZWRMYWJlbFwiPnt7IGNhcmQuc3VibWl0dGVkTGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3sgY2FyZC5ieSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHByb3ZhbC1jYXJkLWZvb3RcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFwcHJvdmFsLWNhcmQtZGF0ZVwiPnt7IGNhcmQud2hlbiB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNhcmQuYXBwcm92ZWRMYWJlbFwiIGNsYXNzPVwiYXYyLWJhZGdlIGF2Mi1iYWRnZS0tc3VjY2VzcyBhdjItYmFkZ2UtLWNvdW50XCI+e3sgY2FyZC5hcHByb3ZlZExhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWFwcHJvdmFsc0xvYWRpbmcgJiYgIWNvbC5jYXJkcy5sZW5ndGhcIiBjbGFzcz1cImF2Mi1lbXB0eVwiPlxyXG4gICAgICAgICAgPGltZyBjbGFzcz1cImF2Mi1lbXB0eS1pbWdcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGExLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF2Mi1lbXB0eS10ZXh0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdjItZW1wdHktdGl0bGVcIj5ObyBkYXRhIGZvdW5kPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdjItZW1wdHktc3ViXCI+e3sgY29sLmVtcHR5IH19PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L3NlY3Rpb24+XHJcblxyXG4gIDwhLS0gQWN0aXZpdHkgTG9nIC0tPlxyXG4gIDxzZWN0aW9uIGNsYXNzPVwiYXYyLWNhcmQgYXYyLWNhcmQtLWxvZ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImF2Mi1jYXJkLWhlYWQgYXYyLWNhcmQtaGVhZC0tY2VudGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJhdjItY2FyZC10aXRsZSBhdjItY2FyZC10aXRsZS0tZ3Jvd1wiPkFjdGl2aXR5IExvZzwvZGl2PlxyXG5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwiYXYyLXNlYXJjaCBhdjItc2VhcmNoLS1sZ1wiPlxyXG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCI+XHJcbiAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTFcIiBjeT1cIjExXCIgcj1cIjdcIj48L2NpcmNsZT5cclxuICAgICAgICAgIDxsaW5lIHgxPVwiMTYuNVwiIHkxPVwiMTYuNVwiIHgyPVwiMjFcIiB5Mj1cIjIxXCI+PC9saW5lPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cInNlYXJjaFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VhcmNoKClcIiB0eXBlPVwidGV4dFwiIFtwbGFjZWhvbGRlcl09XCJzZWFyY2hIaW50XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cclxuICAgICAgPC9sYWJlbD5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsb2ctZGF0ZS1waWNrZXJcIj5cclxuICAgICAgICA8bGliLWRhdGUtcmFuZ2UtcGlja2VyIFtyYW5nZV09XCJhY3Rpdml0eVJhbmdlXCIgKGRhdGVDaGFuZ2UpPVwib25BY3Rpdml0eURhdGVDaGFuZ2UoJGV2ZW50KVwiPjwvbGliLWRhdGUtcmFuZ2UtcGlja2VyPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxsaWItZmlsdGVycyBbZGF0YU9iamVjdF09XCJhY3Rpdml0eUZpbHRlckRhdGFcIiAoYXBwbGllZEZpbHRlcnMpPVwib25BY3Rpdml0eUZpbHRlcnMoJGV2ZW50KVwiPjwvbGliLWZpbHRlcnM+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEF1ZGl0IC8gVGFzayAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJhdjItdGFic1wiPlxyXG4gICAgICA8YnV0dG9uICpuZ0Zvcj1cImxldCB0IG9mIHRhYnNcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJhdjItdGFiXCIgW2NsYXNzLmlzLWFjdGl2ZV09XCJ0YWIgPT09IHRcIlxyXG4gICAgICAgIChjbGljayk9XCJzZXRUYWIodClcIj57eyB0IH19PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bGliLWF1ZGl0LXYyLXNoaW1tZXIgKm5nSWY9XCJsb2dMb2FkaW5nXCI+PC9saWItYXVkaXQtdjItc2hpbW1lcj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiYXYyLXRhYmxlLXdyYXBcIiAqbmdJZj1cIiFsb2dMb2FkaW5nXCI+XHJcbiAgICAgIDx0YWJsZSBjbGFzcz1cImF2Mi10YWJsZSBsb2ctdGFibGVcIj5cclxuICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF2Mi10aC1zb3J0XCI+RGF0ZSAmYW1wOyBUaW1lXHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjIuMlwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGluZSB4MT1cIjEyXCIgeTE9XCI0XCIgeDI9XCIxMlwiIHkyPVwiMjBcIj48L2xpbmU+XHJcbiAgICAgICAgICAgICAgICAgIDxwb2x5bGluZSBwb2ludHM9XCI2IDE0IDEyIDIwIDE4IDE0XCI+PC9wb2x5bGluZT5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgPHRoPnt7IG5hbWVMYWJlbCB9fTwvdGg+XHJcbiAgICAgICAgICAgIDx0aD5BY3Rpb24gUGVyZm9ybWVkPC90aD5cclxuICAgICAgICAgICAgPHRoPlBlcmZvcm1lZCBieTwvdGg+XHJcbiAgICAgICAgICAgIDx0aD5OYW1lPC90aD5cclxuICAgICAgICAgICAgPHRoPkFjdGlvbnM8L3RoPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIHBhZ2VSb3dzOyB0cmFja0J5OiB0cmFja0J5Um93XCI+XHJcbiAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXYyLWNlbGwtc3RhY2tcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHJvdy5kYXkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF2Mi1tdXRlZFwiPnt7IHJvdy50aW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJhdjItZWxsaXBzaXNcIj57eyByb3cubmFtZSB9fTwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD48c3BhbiBjbGFzcz1cImF2Mi1iYWRnZVwiPnt7IHJvdy5hY3Rpb24gfX08L3NwYW4+PC90ZD5cclxuICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdjItY2VsbC1pY29uIGF2Mi1kaW1cIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNVwiIGhlaWdodD1cIjE1XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS44XCJcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiOFwiIHI9XCIzLjRcIj48L2NpcmNsZT5cclxuICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk01IDIwYzAtMy42IDMuMS01LjYgNy01LjZzNyAyIDcgNS42XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57eyByb3cuYnkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXYyLWNlbGwtaWNvbiBzdG9yZS1jZWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCIxNVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuOFwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMgOWwxLjYtNC41aDE0LjhMMjEgOVwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk00IDl2MTFoMTZWOVwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDIwdi02aDZ2NlwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgcm93LnN0b3JlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgPGEgKm5nSWY9XCJyb3cudmlld2FibGVcIiBjbGFzcz1cImF2Mi1saW5rXCIgcm91dGVyTGluaz1cIi9tYW5hZ2UvdHJheC9hdWRpdC12Mi9nYWxsZXJ5XCJcclxuICAgICAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJnYWxsZXJ5UGFyYW1zKHJvdylcIiB0aXRsZT1cIk9wZW4gdGhpcyBzdWJtaXNzaW9uIGluIHRoZSBHYWxsZXJ5XCI+VmlldzwvYT5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFyb3cudmlld2FibGVcIiBjbGFzcz1cImF2Mi1mYWludFwiPi08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGJvZHk+XHJcbiAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiIWxvZ0xvYWRpbmcgJiYgIWZpbHRlcmVkUm93cy5sZW5ndGhcIiBjbGFzcz1cImF2Mi1lbXB0eVwiPlxyXG4gICAgICA8aW1nIGNsYXNzPVwiYXYyLWVtcHR5LWltZ1wiIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ljb25zL05vZGF0YTEuc3ZnXCIgYWx0PVwiXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJhdjItZW1wdHktdGV4dFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhdjItZW1wdHktdGl0bGVcIj5ObyBkYXRhIGZvdW5kPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImF2Mi1lbXB0eS1zdWJcIj5UaGVyZSBpcyBubyByZXN1bHQgZm9yIHt7IHRhYiB9fTwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCIhbG9nTG9hZGluZyAmJiBmaWx0ZXJlZFJvd3MubGVuZ3RoXCIgY2xhc3M9XCJsb2ctcGFnaW5hdGlvblwiPlxyXG4gICAgICA8bGliLXBhZ2luYXRpb24gW2l0ZW1zUGVyUGFnZV09XCJpdGVtc1BlclBhZ2VcIiBbcGFnZVNpemVdPVwiaXRlbXNQZXJQYWdlXCIgW3BhZ2luYXRpb25TaXplc109XCJwYWdlU2l6ZXNcIiBbY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2VcIiBbdG90YWxJdGVtc109XCJ0b3RhbEl0ZW1zXCJcclxuICAgICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiPjwvbGliLXBhZ2luYXRpb24+XHJcbiAgICA8L2Rpdj5cclxuICA8L3NlY3Rpb24+XHJcblxyXG48L2Rpdj5cclxuIl19
|
|
394
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtdjItYWN0aW9uLWNlbnRyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2F1ZGl0LXYyL2FjdGlvbi1jZW50cmUvYXVkaXQtdjItYWN0aW9uLWNlbnRyZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2F1ZGl0LXYyL2FjdGlvbi1jZW50cmUvYXVkaXQtdjItYWN0aW9uLWNlbnRyZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFaEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTlFLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7Ozs7OztBQUduQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBOENsQjs7Ozs7OztHQU9HO0FBTUgsTUFBTSxPQUFPLDRCQUE0QjtJQTZEN0I7SUFDQTtJQUNBO0lBQ0E7SUEvRFYsbUNBQW1DO0lBQ25DLEdBQUcsR0FBYyxPQUFPLENBQUM7SUFDaEIsSUFBSSxHQUFnQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUUvQywrQkFBK0I7SUFDL0IsY0FBYyxHQUFHLEVBQUUsQ0FBQztJQUNwQixhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQ2IsY0FBYyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMxQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsY0FBYyxD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QUMsR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDMUQsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLGdDQUFnQyxDQUFDLENBQUMsQ0FBQyxpQ0FBaUMsQ0FBQztJQUNwRyxDQUFDO0lBRUQsK0VBQStFO0lBQy9FLElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBWTtRQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFhLEVBQUUsR0FBZ0I7UUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQzdGLENBQUM7SUFFRCxhQUFhLENBQUMsQ0FBUyxFQUFFLEdBQW1CO1FBQzFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQztJQUNqQixDQUFDO3dHQWpZVSw0QkFBNEI7NEZBQTVCLDRCQUE0QixrRUNuRXpDLHkvUkEwTEE7OzRGRHZIYSw0QkFBNEI7a0JBTHhDLFNBQVM7K0JBQ0UsNEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgU3ViamVjdCwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xyXG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMnO1xyXG5pbXBvcnQgeyBUcmF4U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RyYXguc2VydmljZSc7XHJcblxyXG5kYXlqcy5leHRlbmQodXRjKTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWN0aXZpdHlSb3cge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICAvKipcclxuICAgKiBMYWJlbCBmcm9tIHRoZSBhdWRpdCBhY3Rpdml0eSBBUEk6IFwiU3RhcnRlZCBieVwiIC8gXCJTdWJtaXR0ZWQgYnlcIiBmb3IgYSB2aXNpdCwgb3IgYSBsb2dnZWQgYXVkaXQgLyBzY2hlZHVsZVxyXG4gICAqIGFjdGlvbiBzdWNoIGFzIFwiQXVkaXQgY3JlYXRlZCBieVwiLCBcIlB1Ymxpc2hlZCBieVwiLCBcIlNjaGVkdWxlICdYJyBwdWJsaXNoZWQgYnlcIi5cclxuICAgKi9cclxuICBhY3Rpb246IHN0cmluZztcclxuICBieTogc3RyaW5nO1xyXG4gIHN0b3JlOiBzdHJpbmc7XHJcbiAgZGF5OiBzdHJpbmc7XHJcbiAgdGltZTogc3RyaW5nO1xyXG4gIC8qKiBTdWJtaXR0ZWQgZW50cmllcyBjYW4gYmUgb3BlbmVkOyBzdGFydGVkIG9uZXMgY2Fubm90LiAqL1xyXG4gIHZpZXdhYmxlOiBib29sZWFuO1xyXG4gIHJhdz86IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBcHByb3ZhbENhcmQge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBzdG9yZTogc3RyaW5nO1xyXG4gIGJ5OiBzdHJpbmc7XHJcbiAgd2hlbjogc3RyaW5nO1xyXG4gIC8qKiBcIkF1ZGl0XCIgb3IgXCJUYXNrXCIsIGZyb20gdGhlIEFQSSdzIG1vZHVsZSBmaWVsZC4gKi9cclxuICB0eXBlTGFiZWw6IHN0cmluZztcclxuICAvKiogXCJTdWJtaXR0ZWQgeCAvIHlcIiAoc3VibWl0dGVkIGluc3RhbmNlcyAvIGFzc2lnbmVkIHN0b3JlcyksIG9yICcnIHdoZW4gdW5rbm93bi4gKi9cclxuICBzdWJtaXR0ZWRMYWJlbDogc3RyaW5nO1xyXG4gIC8qKiBcIkFwcHJvdmVkIHggLyB5XCIgKGFwcHJvdmVkIC8gc3VibWl0dGVkKSwgb3IgJycgd2hlbiBub3RoaW5nIGlzIHN1Ym1pdHRlZCB5ZXQuICovXHJcbiAgYXBwcm92ZWRMYWJlbDogc3RyaW5nO1xyXG4gIHJlZG86IGJvb2xlYW47XHJcbiAgLyoqIEdhbGxlcnkgZGVlcCBsaW5rIChhdWRpdCAvIHN0b3JlIC8gZGF5IC8gYXBwcm92YWwgc3RhdHVzKSwgb3IgbnVsbCB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmV2aWV3IHRoZXJlLiAqL1xyXG4gIGxpbms6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCBudWxsO1xyXG4gIC8qKiBUb29sdGlwOiB3aGF0IGEgY2xpY2sgb3BlbnMsIG9yIHdoeSB0aGUgY2FyZCBjYW5ub3QgYmUgb3BlbmVkLiAqL1xyXG4gIGhpbnQ6IHN0cmluZztcclxuICByYXc/OiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXBwcm92YWxDb2x1bW4ge1xyXG4gIGtleTogJ29wZW4nIHwgJ2lucHJvZ3Jlc3MnIHwgJ2FwcHJvdmVkJztcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIGVtcHR5OiBzdHJpbmc7XHJcbiAgY2FyZHM6IEFwcHJvdmFsQ2FyZFtdO1xyXG59XHJcblxyXG50eXBlIEFjdGlvblRhYiA9ICdBdWRpdCcgfCAnVGFzayc7XHJcblxyXG4vKipcclxuICogQXVkaXQgQWN0aW9uIENlbnRlciwgc2VydmVkIGJ5IC90cmF4L2F1ZGl0L2FjdGlvbkNlbnRlci8qIChyZXRhaWwtdHJheC1hcGktdjIpOlxyXG4gKiAgIGNhcmRzICAgICAgIC0+IGF1ZGl0cyAvIHRhc2tzIHdhaXRpbmcgZm9yIGFwcHJvdmFsXHJcbiAqICAgYXBwcm92YWxzICAgLT4gb3BlbiAvIGlucHJvZ3Jlc3MgLyBkb25lLCBvbmUgcm93IHBlciBhdWRpdCBwZXIgZGF5XHJcbiAqICAgYWN0aXZpdHlMb2cgLT4gc3RhcnQgKyBzdWJtaXQgZXZlbnRzIGZyb20gdGhlIGluc3RhbmNlcywgcGx1cyAoQXVkaXQgdGFiKSB0aGUgbG9nZ2VkIGF1ZGl0IC8gc2NoZWR1bGVcclxuICogICAgICAgICAgICAgICAgICBhY3Rpb25zOiBjcmVhdGVkLCBlZGl0ZWQsIGNvbmZpZ3VyZWQsIHB1Ymxpc2hlZCwgdW5wdWJsaXNoZWQsIGR1cGxpY2F0ZWQsIGRlbGV0ZWQ7IHNlcnZlci1wYWdlZFxyXG4gKiBFdmVyeSBjYWxsIGlzIHNjb3BlZCBieSB0aGUgZ2xvYmFsIGhlYWRlciBmaWx0ZXIgKGNsaWVudCwgY2hlY2tlZCBzdG9yZXMsIGRhdGVzKS5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWF1ZGl0LXYyLWFjdGlvbi1jZW50cmUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hdWRpdC12Mi1hY3Rpb24tY2VudHJlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vYXVkaXQtdjItYWN0aW9uLWNlbnRyZS5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1ZGl0VjJBY3Rpb25DZW50cmVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgLyoqIFRhYiBpbnNpZGUgdGhlIGFjdGl2aXR5IGxvZy4gKi9cclxuICB0YWI6IEFjdGlvblRhYiA9ICdBdWRpdCc7XHJcbiAgcmVhZG9ubHkgdGFiczogQWN0aW9uVGFiW10gPSBbJ0F1ZGl0JywgJ1Rhc2snXTtcclxuXHJcbiAgLyoqIEFwcHJvdmFsIHBhbmVsIGNvbnRyb2xzLiAqL1xyXG4gIGFwcHJvdmFsU2VhcmNoID0gJyc7XHJcbiAgYXBwcm92YWxTY29wZSA9ICdBbGwnO1xyXG4gIHJlYWRvbmx5IGFwcHJvdmFsU2NvcGVzID0gWydBbGwnLCAnQXVkaXQnLCAnVGFzayddO1xyXG4gIHJlYWRvbmx5IGFwcHJvdmFsU2NvcGVJdGVtcyA9IHRoaXMuYXBwcm92YWxTY29wZXMubWFwKChzKSA9PiAoeyBpZDogcywgbGFiZWw6IHMgfSkpO1xyXG4gIGFwcHJvdmFsU2NvcGVTZWxlY3RlZDogeyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0gPSB0aGlzLmFwcHJvdmFsU2NvcGVJdGVtc1swXTtcclxuXHJcbiAgLyoqIEFjdGl2aXR5IExvZydzIG93biBkYXRlIHJhbmdlIChkZWZhdWx0cyB0byB0aGUgaGVhZGVyIHJhbmdlLCBjaGFuZ2VkIGJ5IGl0cyBwaWNrZXIpLiAqL1xyXG4gIGFjdGl2aXR5UmFuZ2U6IHsgc3RhcnREYXRlOiBzdHJpbmc7IGVuZERhdGU6IHN0cmluZyB9IHwgbnVsbCA9IG51bGw7XHJcbiAgLyoqIEFjdGl2aXR5IExvZyBhY3Rpb24gZmlsdGVyOyBpZHMgbWF0Y2ggdGhlIEFQSSdzIGFjdGlvbiBmaWx0ZXIuIEVtcHR5ID0gYWxsLiAqL1xyXG4gIGFjdGl2aXR5QWN0aW9uczogc3RyaW5nW10gPSBbXTtcclxuICByZWFkb25seSBhY3Rpdml0eUZpbHRlckRhdGE6IGFueVtdID0gW1xyXG4gICAge1xyXG4gICAgICBEZXNjcmlwdGlvbjogJ0FjdGlvbnMnLFxyXG4gICAgICBJc3N1ZXM6IFtcclxuICAgICAgICB7IHRleHQ6ICdTdGFydGVkIGJ5JywgaWQ6ICdzdGFydCcgfSxcclxuICAgICAgICB7IHRleHQ6ICdTdWJtaXR0ZWQgYnknLCBpZDogJ3N1Ym1pdCcgfSxcclxuICAgICAgICAvLyBMb2dnZWQgYXVkaXQgLyBzY2hlZHVsZSBhY3Rpb25zIChBdWRpdCB0YWIgb25seSk7ICdzY2hlZHVsZScgPSBldmVyeSBzY2hlZHVsZSBhY3Rpb24uXHJcbiAgICAgICAgeyB0ZXh0OiAnQXVkaXQgY3JlYXRlZCcsIGlkOiAnY3JlYXRlZCcgfSxcclxuICAgICAgICB7IHRleHQ6ICdFZGl0ZWQnLCBpZDogJ2VkaXRlZCcgfSxcclxuICAgICAgICB7IHRleHQ6ICdDb25maWd1cmVkJywgaWQ6ICdjb25maWd1cmVkJyB9LFxyXG4gICAgICAgIHsgdGV4dDogJ1B1Ymxpc2hlZCcsIGlkOiAncHVibGlzaGVkJyB9LFxyXG4gICAgICAgIHsgdGV4dDogJ1VucHVibGlzaGVkJywgaWQ6ICd1bnB1Ymxpc2hlZCcgfSxcclxuICAgICAgICB7IHRleHQ6ICdEdXBsaWNhdGVkJywgaWQ6ICdkdXBsaWNhdGVkJyB9LFxyXG4gICAgICAgIHsgdGV4dDogJ0RlbGV0ZWQnLCBpZDogJ2RlbGV0ZWQnIH0sXHJcbiAgICAgICAgeyB0ZXh0OiAnU2NoZWR1bGUgY2hhbmdlcycsIGlkOiAnc2NoZWR1bGUnIH0sXHJcbiAgICAgIF0sXHJcbiAgICB9LFxyXG4gIF07XHJcblxyXG4gIC8qKiBBY3Rpdml0eSBsb2cgY29udHJvbHMuICovXHJcbiAgc2VhcmNoID0gJyc7XHJcbiAgZGF0ZVJhbmdlID0gJyc7XHJcbiAgaXRlbXNQZXJQYWdlID0gMTA7XHJcbiAgY3VycmVudFBhZ2UgPSAxO1xyXG4gIHJlYWRvbmx5IHBhZ2VTaXplcyA9IFsxMCwgMjUsIDUwXTtcclxuICAvKiogVG90YWwgYWN0aXZpdHkgcm93cyByZXBvcnRlZCBieSB0aGUgQVBJIChzZXJ2ZXItc2lkZSBwYWdpbmF0aW9uKS4gKi9cclxuICB0b3RhbEl0ZW1zID0gMDtcclxuXHJcbiAgYXVkaXRXYWl0aW5nID0gMDtcclxuICB0YXNrV2FpdGluZyA9IDA7XHJcblxyXG4gIHJvd3M6IEFjdGl2aXR5Um93W10gPSBbXTtcclxuICBjb2x1bW5zOiBBcHByb3ZhbENvbHVtbltdID0gdGhpcy5idWlsZENvbHVtbnMoKTtcclxuXHJcbiAgY2FyZHNMb2FkaW5nID0gdHJ1ZTtcclxuICBhcHByb3ZhbHNMb2FkaW5nID0gdHJ1ZTtcclxuICBsb2dMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgcHJpdmF0ZSBoZWFkZXJEYXRhOiBhbnk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSB1c2VyRW1haWxlczogc3RyaW5nW10gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2Vyc0VtYWlsLWluZm8nKSB8fCAnW10nKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGFwcHJvdmFsU2VhcmNoJCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHNlYXJjaCQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB0cmF4U2VydmljZTogVHJheFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWVcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLCBkZWJvdW5jZVRpbWUoMzAwKSlcclxuICAgICAgLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKCFkYXRhPy5jbGllbnQpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgdGhpcy5oZWFkZXJEYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLmRhdGVSYW5nZSA9IHRoaXMuZm10KGRhdGEuZGF0ZT8uc3RhcnREYXRlLCAnREQtTU0tWVlZWScpICsgJyAtICcgKyB0aGlzLmZtdChkYXRhLmRhdGU/LmVuZERhdGUsICdERC1NTS1ZWVlZJyk7XHJcbiAgICAgICAgdGhpcy5hY3Rpdml0eVJhbmdlID0gdGhpcy5kZWZhdWx0QWN0aXZpdHlSYW5nZShkYXRhLmRhdGUpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgICAgIHRoaXMubG9hZENhcmRzKCk7XHJcbiAgICAgICAgdGhpcy5sb2FkQXBwcm92YWxzKCk7XHJcbiAgICAgICAgdGhpcy5sb2FkQWN0aXZpdHkoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5hcHByb3ZhbFNlYXJjaCRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLCBkZWJvdW5jZVRpbWUoNDAwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmxvYWRBcHByb3ZhbHMoKSk7XHJcblxyXG4gICAgdGhpcy5zZWFyY2gkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSwgZGVib3VuY2VUaW1lKDQwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgICAgIHRoaXMubG9hZEFjdGl2aXR5KCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFjdGl2aXR5IExvZydzIHN0YXJ0aW5nIHJhbmdlOiB0aGUgaGVhZGVyIHJhbmdlLCBleGNlcHQgdGhhdCBvbmUgZW5kaW5nIHllc3RlcmRheSBydW5zIG9uIHRvIHRvZGF5LlxyXG4gICAqIFRoZSBoZWFkZXIncyBwcmVzZXRzIChhbmQgaXRzIGRlZmF1bHQpIHN0b3AgYXQgeWVzdGVyZGF5IGJlY2F1c2UgYW5hbHl0aWNzIGxhbmQgYSBkYXkgbGF0ZSwgYnV0IHRoZVxyXG4gICAqIGxvZyBpcyBsaXZlOiB3aXRob3V0IHRoaXMsIHdoYXQgd2FzIHN0YXJ0ZWQgb3Igc3VibWl0dGVkIHRvZGF5IG5ldmVyIHNob3dzIHVudGlsIHRoZSByYW5nZSBpcyBjaGFuZ2VkLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgZGVmYXVsdEFjdGl2aXR5UmFuZ2UoZGF0ZTogYW55KTogeyBzdGFydERhdGU6IHN0cmluZzsgZW5kRGF0ZTogc3RyaW5nIH0gfCBudWxsIHtcclxuICAgIGlmICghZGF0ZT8uc3RhcnREYXRlIHx8ICFkYXRlPy5lbmREYXRlKSB7IHJldHVybiBudWxsOyB9XHJcbiAgICBjb25zdCB5ZXN0ZXJkYXkgPSBkYXlqcygpLnN1YnRyYWN0KDEsICdkYXknKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcclxuICAgIGNvbnN0IGVuZERhdGUgPSBkYXRlLmVuZERhdGUgPT09IHllc3RlcmRheSA/IGRheWpzKCkuZm9ybWF0KCdZWVlZLU1NLUREJykgOiBkYXRlLmVuZERhdGU7XHJcbiAgICByZXR1cm4geyBzdGFydERhdGU6IGRhdGUuc3RhcnREYXRlLCBlbmREYXRlIH07XHJcbiAgfVxyXG5cclxuICAvKiogQ29tbW9uIGhlYWRlci1maWx0ZXIgc2NvcGUgZXZlcnkgYWN0aW9uLWNlbnRlciBjYWxsIGNhcnJpZXMuICovXHJcbiAgcHJpdmF0ZSBiYXNlUGF5bG9hZCgpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmhlYWRlckRhdGE/LmNsaWVudCxcclxuICAgICAgZnJvbURhdGU6IHRoaXMuaGVhZGVyRGF0YT8uZGF0ZT8uc3RhcnREYXRlLFxyXG4gICAgICB0b0RhdGU6IHRoaXMuaGVhZGVyRGF0YT8uZGF0ZT8uZW5kRGF0ZSxcclxuICAgICAgc3RvcmVJZDogKHRoaXMuaGVhZGVyRGF0YT8uc3RvcmVzIHx8IFtdKS5maWx0ZXIoKHM6IGFueSkgPT4gcy5jaGVja2VkKS5tYXAoKHM6IGFueSkgPT4gcy5zdG9yZUlkKSxcclxuICAgICAgdXNlckVtYWlsZXM6IHRoaXMudXNlckVtYWlsZXNcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRDYXJkcygpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FyZHNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMudHJheFNlcnZpY2UuYXVkaXRBY3Rpb25DZW50ZXJDYXJkcyh0aGlzLmJhc2VQYXlsb2FkKCkpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjYXJkID0gcmVzPy5jb2RlID09PSAyMDAgPyAocmVzLmRhdGE/LmNhcmREYXRhIHx8IHt9KSA6IHt9O1xyXG4gICAgICAgICAgdGhpcy5hdWRpdFdhaXRpbmcgPSBOdW1iZXIoY2FyZC5hdWRpdEFwcHJvdmFsKSB8fCAwO1xyXG4gICAgICAgICAgdGhpcy50YXNrV2FpdGluZyA9IE51bWJlcihjYXJkLnRhc2tBcHByb3ZhbCkgfHwgMDtcclxuICAgICAgICAgIHRoaXMuY2FyZHNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmF1ZGl0V2FpdGluZyA9IDA7XHJcbiAgICAgICAgICB0aGlzLnRhc2tXYWl0aW5nID0gMDtcclxuICAgICAgICAgIHRoaXMuY2FyZHNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkQXBwcm92YWxzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5hcHByb3ZhbHNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmFwcHJvdmFsU2NvcGUgPT09ICdBbGwnID8gJ2FsbCcgOiB0aGlzLmFwcHJvdmFsU2NvcGUgPT09ICdUYXNrJyA/ICd0YXNrJyA6ICdhdWRpdCc7XHJcbiAgICB0aGlzLnRyYXhTZXJ2aWNlLmF1ZGl0QWN0aW9uQ2VudGVyQXBwcm92YWxzKHtcclxuICAgICAgLi4udGhpcy5iYXNlUGF5bG9hZCgpLFxyXG4gICAgICBzZWFyY2hWYWx1ZTogdGhpcy5hcHByb3ZhbFNlYXJjaC50cmltKCksXHJcbiAgICAgIHR5cGVcclxuICAgIH0pLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBkYXRhID0gcmVzPy5jb2RlID09PSAyMDAgPyAocmVzLmRhdGEgfHwge30pIDoge307XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5idWlsZENvbHVtbnMoKTtcclxuICAgICAgICB0aGlzLmNvbHVtbnNbMF0uY2FyZHMgPSAoZGF0YS5vcGVuIHx8IFtdKS5tYXAoKHg6IGFueSkgPT4gdGhpcy50b0NhcmQoeCwgJ29wZW4nKSk7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zWzFdLmNhcmRzID0gKGRhdGEuaW5wcm9ncmVzcyB8fCBbXSkubWFwKCh4OiBhbnkpID0+IHRoaXMudG9DYXJkKHgsICdpbnByb2dyZXNzJykpO1xyXG4gICAgICAgIHRoaXMuY29sdW1uc1syXS5jYXJkcyA9IChkYXRhLmRvbmUgfHwgW10pLm1hcCgoeDogYW55KSA9PiB0aGlzLnRvQ2FyZCh4LCAnYXBwcm92ZWQnKSk7XHJcbiAgICAgICAgdGhpcy5hcHByb3ZhbHNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5idWlsZENvbHVtbnMoKTtcclxuICAgICAgICB0aGlzLmFwcHJvdmFsc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRvQ2FyZCh4OiBhbnksIGNvbHVtbjogQXBwcm92YWxDb2x1bW5bJ2tleSddKTogQXBwcm92YWxDYXJkIHtcclxuICAgIGNvbnN0IHN0b3JlcyA9IE51bWJlcih4Py5zdG9yZUNvdW50KSB8fCAwO1xyXG4gICAgY29uc3Qgc3RvcmUgPSB4Py5jb3ZlcmFnZSA9PT0gJ3VzZXInXHJcbiAgICAgID8gKHg/LnVzZXJOYW1lIHx8ICfigJQnKVxyXG4gICAgICA6IChzdG9yZXMgPiAxID8gc3RvcmVzICsgJyBzdG9yZXMnIDogKHg/LnN0b3JlTmFtZSB8fCAoc3RvcmVzID09PSAxID8gJzEgc3RvcmUnIDogJ+KAlCcpKSk7XHJcbiAgICBjb25zdCBwZW5kaW5nID0gTnVtYmVyKHg/LnBlbmRpbmcpIHx8IDA7XHJcbiAgICBjb25zdCBzdWJtaXR0ZWQgPSBOdW1iZXIoeD8uc3VibWl0Q291bnQpIHx8IDA7XHJcbiAgICBjb25zdCBhcHByb3ZlZCA9IE51bWJlcih4Py5hcHByb3ZlQ291bnQpIHx8IDA7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBuYW1lOiB4Py5jaGVja0xpc3ROYW1lIHx8ICfigJQnLFxyXG4gICAgICBzdG9yZSxcclxuICAgICAgYnk6IHBlbmRpbmcgPyBwZW5kaW5nICsgJyBhd2FpdGluZyBhcHByb3ZhbCcgOiAoeD8udXNlck5hbWUgfHwgeD8uY3JlYXRlZEJ5TmFtZSB8fCAn4oCUJyksXHJcbiAgICAgIHdoZW46IHg/LnB1Ymxpc2hEYXRlID8gdGhpcy5mbXQoeC5wdWJsaXNoRGF0ZSwgJ0REIE1NTSBZWVlZJykgOiAn4oCUJyxcclxuICAgICAgdHlwZUxhYmVsOiB4Py5tb2R1bGUgPT09ICd0YXNrJyA/ICdUYXNrJyA6ICdBdWRpdCcsXHJcbiAgICAgIHN1Ym1pdHRlZExhYmVsOiBzdG9yZXMgPyBgU3VibWl0dGVkICR7c3VibWl0dGVkfSAvICR7c3RvcmVzfWAgOiAnJyxcclxuICAgICAgYXBwcm92ZWRMYWJlbDogc3VibWl0dGVkID8gYEFwcHJvdmVkICR7YXBwcm92ZWR9IC8gJHtzdWJtaXR0ZWR9YCA6ICcnLFxyXG4gICAgICByZWRvOiAhIXg/LnJlZG8sXHJcbiAgICAgIC4uLnRoaXMuY2FyZExpbmsoeCwgY29sdW1uLCBzdWJtaXR0ZWQpLFxyXG4gICAgICByYXc6IHhcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVyZSBhIGNhcmQgbGFuZHM6IHRoZSBHYWxsZXJ5IG9uIHRoYXQgYXVkaXQgYW5kIGRheSAoYW5kIHN0b3JlLCB3aGVuIHRoZSBjYXJkIGlzIG9uZSBzdG9yZSksXHJcbiAgICogbmFycm93ZWQgdG8gd2hhdCB0aGUgY29sdW1uIG1lYW5zLiBPcGVuID0gYXdhaXRpbmcgYXBwcm92YWwsIEFwcHJvdmVkID0gYXBwcm92ZWQ7IElucHJvZ3Jlc3NcclxuICAgKiBzaG93cyBldmVyeSBzdWJtaXNzaW9uLiBUaGUgR2FsbGVyeSBsaXN0cyBzdWJtaXR0ZWQgKG9yIHNlbnQtYmFjaykgdmlzaXRzIG9ubHksIHNvIGEgY2FyZCB3aXRoXHJcbiAgICogbm9uZSwgYW5kIHRhc2sgY2FyZHMgKG5vIGF1ZGl0IEdhbGxlcnkpLCBzdGF5IGNsb3NlZC5cclxuICAgKi9cclxuICBwcml2YXRlIGNhcmRMaW5rKHg6IGFueSwgY29sdW1uOiBBcHByb3ZhbENvbHVtblsna2V5J10sIHN1Ym1pdHRlZDogbnVtYmVyKTogUGljazxBcHByb3ZhbENhcmQsICdsaW5rJyB8ICdoaW50Jz4ge1xyXG4gICAgaWYgKHg/Lm1vZHVsZSA9PT0gJ3Rhc2snKSB7XHJcbiAgICAgIHJldHVybiB7IGxpbms6IG51bGwsIGhpbnQ6ICdUYXNrIHN1Ym1pc3Npb25zIGFyZSBub3QgcmV2aWV3ZWQgaW4gdGhlIGF1ZGl0IEdhbGxlcnknIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCBhdWRpdCA9IFN0cmluZyh4Py5zb3VyY2VDaGVja2xpc3RJZCB8fCAnJyk7XHJcbiAgICBjb25zdCBkYXRlID0gdGhpcy5pc29EYXkoeD8ucHVibGlzaERhdGUpO1xyXG4gICAgaWYgKCFhdWRpdCB8fCAhZGF0ZSkge1xyXG4gICAgICByZXR1cm4geyBsaW5rOiBudWxsLCBoaW50OiAnJyB9O1xyXG4gICAgfVxyXG4gICAgaWYgKCFzdWJtaXR0ZWQgJiYgIXg/LnJlZG8pIHtcclxuICAgICAgcmV0dXJuIHsgbGluazogbnVsbCwgaGludDogJ05vdGhpbmcgc3VibWl0dGVkIHlldCwgc28gdGhlcmUgaXMgbm90aGluZyB0byByZXZpZXcgaW4gdGhlIEdhbGxlcnknIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCBzdGF0dXMgPSBjb2x1bW4gPT09ICdvcGVuJyA/ICdOb3QtQXBwcm92ZWQnIDogY29sdW1uID09PSAnYXBwcm92ZWQnID8gJ0FwcHJvdmVkJyA6ICcnO1xyXG4gICAgY29uc3Qgc2luZ2xlID0gTnVtYmVyKHg/LnN0b3JlQ291bnQpID09PSAxICYmIHg/LnN0b3JlSWQ7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBsaW5rOiB7XHJcbiAgICAgICAgYXVkaXQsIGRhdGUsXHJcbiAgICAgICAgLi4uKHNpbmdsZSA/IHsgc3RvcmU6IFN0cmluZyh4LnN0b3JlSWQpIH0gOiB7fSksXHJcbiAgICAgICAgLi4uKHN0YXR1cyA/IHsgc3RhdHVzIH0gOiB7fSlcclxuICAgICAgfSxcclxuICAgICAgaGludDogY29sdW1uID09PSAnb3BlbicgPyAnUmV2aWV3IHRoZSBzdWJtaXNzaW9ucyBhd2FpdGluZyBhcHByb3ZhbCBpbiB0aGUgR2FsbGVyeSdcclxuICAgICAgICA6IGNvbHVtbiA9PT0gJ2FwcHJvdmVkJyA/ICdWaWV3IHRoZSBhcHByb3ZlZCBzdWJtaXNzaW9ucyBpbiB0aGUgR2FsbGVyeSdcclxuICAgICAgICAgIDogJ1ZpZXcgdGhlIHN1Ym1pc3Npb25zIGluIHRoZSBHYWxsZXJ5J1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKiBkYXRlX2lzbyBpcyB0aGUgdmlzaXQgZGF5IGF0IFVUQyBtaWRuaWdodDsgcmVhZCBpdHMgZGF0ZSBwYXJ0IHNvIG5vIHRpbWUgem9uZSBzaGlmdHMgdGhlIGRheS4gKi9cclxuICBwcml2YXRlIGlzb0RheSh2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgIGlmICghdmFsdWUpIHsgcmV0dXJuICcnOyB9XHJcbiAgICBjb25zdCBtID0gL14oXFxkezR9LVxcZHsyfS1cXGR7Mn0pLy5leGVjKFN0cmluZyh2YWx1ZSkpO1xyXG4gICAgcmV0dXJuIG0gPyBtWzFdIDogZGF5anModmFsdWUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xyXG4gIH1cclxuXHJcbiAgb3BlbkNhcmQoY2FyZDogQXBwcm92YWxDYXJkKTogdm9pZCB7XHJcbiAgICBpZiAoIWNhcmQubGluaykgeyByZXR1cm47IH1cclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS90cmF4L2F1ZGl0LXYyL2dhbGxlcnknXSwgeyBxdWVyeVBhcmFtczogY2FyZC5saW5rIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkQWN0aXZpdHkoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxvZ0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy50cmF4U2VydmljZS5hdWRpdEFjdGlvbkNlbnRlckFjdGl2aXR5KHtcclxuICAgICAgLi4udGhpcy5iYXNlUGF5bG9hZCgpLFxyXG4gICAgICAuLi4odGhpcy5hY3Rpdml0eVJhbmdlID8geyBmcm9tRGF0ZTogdGhpcy5hY3Rpdml0eVJhbmdlLnN0YXJ0RGF0ZSwgdG9EYXRlOiB0aGlzLmFjdGl2aXR5UmFuZ2UuZW5kRGF0ZSB9IDoge30pLFxyXG4gICAgICB0eXBlOiB0aGlzLnRhYiA9PT0gJ1Rhc2snID8gJ3Rhc2snIDogJ2F1ZGl0JyxcclxuICAgICAgbGltaXQ6IHRoaXMuaXRlbXNQZXJQYWdlLFxyXG4gICAgICBvZmZzZXQ6IHRoaXMuY3VycmVudFBhZ2UsXHJcbiAgICAgIHNlYXJjaFZhbHVlOiB0aGlzLnNlYXJjaC50cmltKCksXHJcbiAgICAgIC8vIExvZ2dlZCBhdWRpdCAvIHNjaGVkdWxlIGFjdGlvbnMgY29tZSBiYWNrIG9uIHRoaXMgYnJvd3NlcidzIGNsb2NrLCBzdGFtcGVkIGFzIFVUQyBsaWtlIHRoZSB2aXNpdCB0aW1lcy5cclxuICAgICAgdHpPZmZzZXQ6IG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSxcclxuICAgICAgLy8gT25seSBzZW50IHdoZW4gbmFycm93ZWQsIHNvIGFuIEFQSSB3aXRob3V0IHRoZSBmaWx0ZXIgc3RpbGwgc2VydmVzIHRoZSB1bmZpbHRlcmVkIGxvZy5cclxuICAgICAgLi4uKHRoaXMuYWN0aXZpdHlBY3Rpb25zLmxlbmd0aCA/IHsgYWN0aW9uOiB0aGlzLmFjdGl2aXR5QWN0aW9ucyB9IDoge30pXHJcbiAgICB9KS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHJlcz8uY29kZSA9PT0gMjAwID8gKHJlcy5kYXRhIHx8IHt9KSA6IHt9O1xyXG4gICAgICAgIHRoaXMucm93cyA9IChkYXRhLmFjdGl2aXR5TG9nRGF0YSB8fCBbXSkubWFwKChsb2c6IGFueSkgPT4gdGhpcy50b1Jvdyhsb2cpKTtcclxuICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSBOdW1iZXIoZGF0YS5jb3VudCkgfHwgMDtcclxuICAgICAgICB0aGlzLmxvZ0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnJvd3MgPSBbXTtcclxuICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSAwO1xyXG4gICAgICAgIHRoaXMubG9nTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHN0YXJ0VGltZSAvIHN1Ym1pdFRpbWUgYXJlIHRoZSBzdG9yZSdzIHdhbGwgY2xvY2sgc3RhbXBlZCBhcyBVVEMgKHRoZSBtb2JpbGUgc3VibWl0KSwgc28gdGhleSBhcmUgcmVhZFxyXG4gICAqIGFzIFVUQzogYSBsb2NhbCByZWFkIHdvdWxkIGFkZCB0aGUgYnJvd3NlcidzIG9mZnNldCAoKzU6MzAgaW4gSVNUKSBhbmQgcHVzaCBldmVuaW5nIGV2ZW50cyBpbnRvIHRoZSBuZXh0IGRheS5cclxuICAgKiBMb2dnZWQgYXVkaXQgLyBzY2hlZHVsZSBhY3Rpb25zIChraW5kICdsb2cnKSBhcnJpdmUgYWxyZWFkeSBtb3ZlZCB0byB0aGlzIGJyb3dzZXIncyBjbG9jayAodHpPZmZzZXQpLCBzbyB0aGVcclxuICAgKiBzYW1lIFVUQyByZWFkIHNob3dzIHRoZW0gaW4gbG9jYWwgdGltZS5cclxuICAgKi9cclxuICBwcml2YXRlIGV2ZW50VGltZShsb2c6IGFueSk6IGRheWpzLkRheWpzIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gbG9nPy5hdCA/IGRheWpzLnV0Yyhsb2cuYXQpIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9Sb3cobG9nOiBhbnkpOiBBY3Rpdml0eVJvdyB7XHJcbiAgICBjb25zdCBhdCA9IHRoaXMuZXZlbnRUaW1lKGxvZyk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBuYW1lOiBsb2c/LmNoZWNrTGlzdE5hbWUgfHwgJ+KAlCcsXHJcbiAgICAgIGFjdGlvbjogU3RyaW5nKGxvZz8uYWN0aW9uIHx8ICfigJQnKSxcclxuICAgICAgYnk6IGxvZz8udXNlckVtYWlsIHx8IGxvZz8udXNlck5hbWUgfHwgJ+KAlCcsXHJcbiAgICAgIHN0b3JlOiBsb2c/LnN0b3JlTmFtZSB8fCBsb2c/LnN0b3JlSWQgfHwgJ+KAlCcsXHJcbiAgICAgIGRheTogYXQgPyAoYXQuZm9ybWF0KCdZWVlZLU1NLUREJykgPT09IGRheWpzKCkuZm9ybWF0KCdZWVlZLU1NLUREJykgPyAnVG9kYXknIDogYXQuZm9ybWF0KCdERCBNTU0gWVlZWScpKSA6ICfigJQnLFxyXG4gICAgICB0aW1lOiBhdCA/IGF0LmZvcm1hdCgnaGggOiBtbSBBJykgOiAn4oCUJyxcclxuICAgICAgLy8gVmlldyBvcGVucyBhbiBhdWRpdCBzdWJtaXNzaW9uIGluIHRoZSBHYWxsZXJ5OyBhIHRhc2sgcm93IGhhcyBubyBhdWRpdCB0byBvcGVuIHRoZXJlLCBhbmQgYSBsb2dnZWRcclxuICAgICAgLy8gYXVkaXQgLyBzY2hlZHVsZSBhY3Rpb24gaGFzIG5vIHN1Ym1pc3Npb24gKHRoZSBBUEkgc2VuZHMgdmlld2FibGUgZmFsc2UgZm9yIHRob3NlKS5cclxuICAgICAgdmlld2FibGU6ICEhbG9nPy52aWV3YWJsZSAmJiBsb2c/LmtpbmQgIT09ICdsb2cnICYmIGxvZz8ubW9kdWxlICE9PSAndGFzaycgJiYgdGhpcy50YWIgPT09ICdBdWRpdCcsXHJcbiAgICAgIHJhdzogbG9nXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVlcCBsaW5rIGZvciBcIlZpZXdcIjogdGhlIEdhbGxlcnkgcHJlLXNlbGVjdHMgdGhpcyBhdWRpdCwgc3RvcmUgYW5kIHZpc2l0IGRheS4gVGhlIEdhbGxlcnkgbGlzdHMgdmlzaXRzIGJ5XHJcbiAgICogdGhlaXIgb3duIGRhdGUsIHdoaWNoIGNhbiBiZSBlYXJsaWVyIHRoYW4gdGhlIHN1Ym1pdCBkYXksIHNvIHRoZSB2aXNpdCdzIGRhdGVfc3RyaW5nIHdpbnMgd2hlbiB0aGUgQVBJIHNlbmRzIGl0LlxyXG4gICAqL1xyXG4gIGdhbGxlcnlQYXJhbXMocm93OiBBY3Rpdml0eVJvdyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgY29uc3QgbG9nID0gcm93LnJhdyB8fCB7fTtcclxuICAgIGNvbnN0IGF0ID0gdGhpcy5ldmVudFRpbWUobG9nKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGF1ZGl0OiBTdHJpbmcobG9nLnNvdXJjZUNoZWNrTGlzdF9pZCB8fCAnJyksXHJcbiAgICAgIHN0b3JlOiBTdHJpbmcobG9nLnN0b3JlSWQgfHwgJycpLFxyXG4gICAgICBkYXRlOiBsb2cuZGF0ZV9zdHJpbmcgPyBTdHJpbmcobG9nLmRhdGVfc3RyaW5nKSA6IChhdCA/IGF0LmZvcm1hdCgnWVlZWS1NTS1ERCcpIDogJycpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmbXQodmFsdWU6IGFueSwgcGF0dGVybjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB2YWx1ZSA/IGRheWpzKHZhbHVlKS5mb3JtYXQocGF0dGVybikgOiAn4oCUJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRDb2x1bW5zKCk6IEFwcHJvdmFsQ29sdW1uW10ge1xyXG4gICAgY29uc3Qgbm91biA9IHRoaXMuYXBwcm92YWxTY29wZSA9PT0gJ1Rhc2snID8gJ1Rhc2snIDogJ0F1ZGl0JztcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHsga2V5OiAnb3BlbicsIHRpdGxlOiAnT3BlbicsIGVtcHR5OiAnVGhlcmUgaXMgbm8gcmVzdWx0IGZvciBPcGVuICcgKyBub3VuLCBjYXJkczogW10gfSxcclxuICAgICAgeyBrZXk6ICdpbnByb2dyZXNzJywgdGl0bGU6ICdJbnByb2dyZXNzJywgZW1wdHk6ICdUaGVyZSBpcyBubyByZXN1bHQgZm9yIElucHJvZ3Jlc3MgJyArIG5vdW4sIGNhcmRzOiBbXSB9LFxyXG4gICAgICB7IGtleTogJ2FwcHJvdmVkJywgdGl0bGU6ICdBcHByb3ZlZCcsIGVtcHR5OiAnVGhlcmUgaXMgbm8gcmVzdWx0IGZvciBBcHByb3ZlZCAnICsgbm91biwgY2FyZHM6IFtdIH1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBzZXRUYWIodGFiOiBBY3Rpb25UYWIpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnRhYiA9PT0gdGFiKSB7IHJldHVybjsgfVxyXG4gICAgdGhpcy50YWIgPSB0YWI7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcclxuICAgIHRoaXMubG9hZEFjdGl2aXR5KCk7XHJcbiAgfVxyXG5cclxuICBvbkFwcHJvdmFsU2NvcGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxvYWRBcHByb3ZhbHMoKTtcclxuICB9XHJcblxyXG4gIG9uQXBwcm92YWxTY29wZVNlbGVjdChpdGVtOiB7IGlkOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgY29uc3QgbmV4dCA9IGl0ZW0/LmlkO1xyXG4gICAgaWYgKCFuZXh0IHx8IG5leHQgPT09IHRoaXMuYXBwcm92YWxTY29wZSkgeyByZXR1cm47IH1cclxuICAgIHRoaXMuYXBwcm92YWxTY29wZSA9IG5leHQ7XHJcbiAgICB0aGlzLmFwcHJvdmFsU2NvcGVTZWxlY3RlZCA9IHRoaXMuYXBwcm92YWxTY29wZUl0ZW1zLmZpbmQoKGkpID0+IGkuaWQgPT09IG5leHQpIHx8IHRoaXMuYXBwcm92YWxTY29wZUl0ZW1zWzBdO1xyXG4gICAgdGhpcy5sb2FkQXBwcm92YWxzKCk7XHJcbiAgfVxyXG5cclxuICBvbkFjdGl2aXR5RGF0ZUNoYW5nZShldmVudDogeyBzdGFydERhdGU/OiBzdHJpbmc7IGVuZERhdGU/OiBzdHJpbmcgfSk6IHZvaWQge1xyXG4gICAgaWYgKCFldmVudD8uc3RhcnREYXRlIHx8ICFldmVudD8uZW5kRGF0ZSkgeyByZXR1cm47IH1cclxuICAgIHRoaXMuYWN0aXZpdHlSYW5nZSA9IHsgc3RhcnREYXRlOiBldmVudC5zdGFydERhdGUsIGVuZERhdGU6IGV2ZW50LmVuZERhdGUgfTtcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgdGhpcy5sb2FkQWN0aXZpdHkoKTtcclxuICB9XHJcblxyXG4gIG9uQWN0aXZpdHlGaWx0ZXJzKGV2ZW50OiBhbnlbXSk6IHZvaWQge1xyXG4gICAgY29uc3QgYWN0aW9ucyA9IChldmVudCB8fCBbXSkuZmluZCgoZjogYW55KSA9PiBmPy5EZXNjcmlwdGlvbiA9PT0gJ0FjdGlvbnMnKTtcclxuICAgIHRoaXMuYWN0aXZpdHlBY3Rpb25zID0gKGFjdGlvbnM/Lklzc3VlcyB8fCBbXSkubWFwKChpOiBhbnkpID0+IGkuaWQpO1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICB0aGlzLmxvYWRBY3Rpdml0eSgpO1xyXG4gIH1cclxuXHJcbiAgb25BcHByb3ZhbFNlYXJjaCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYXBwcm92YWxTZWFyY2gkLm5leHQodGhpcy5hcHByb3ZhbFNlYXJjaCk7XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VhcmNoJC5uZXh0KHRoaXMuc2VhcmNoKTtcclxuICB9XHJcblxyXG4gIGdldCBuYW1lTGFiZWwoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRhYiA9PT0gJ1Rhc2snID8gJ1Rhc2sgTmFtZScgOiAnQXVkaXQgTmFtZSc7XHJcbiAgfVxyXG5cclxuICBnZXQgc2VhcmNoSGludCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGFiID09PSAnVGFzaycgPyAnU2VhcmNoIHdpdGggU3RvcmUsIEVtYWlsLCBUYXNrJyA6ICdTZWFyY2ggd2l0aCBTdG9yZSwgRW1haWwsIEF1ZGl0JztcclxuICB9XHJcblxyXG4gIC8qKiBTZWFyY2ggYW5kIHBhZ2luZyBhcmUgc2VydmVyLXNpZGU7IHRoZSBwYWdlIHdlIGhvbGQgaXMgdGhlIHBhZ2Ugd2Ugc2hvdy4gKi9cclxuICBnZXQgZmlsdGVyZWRSb3dzKCk6IEFjdGl2aXR5Um93W10ge1xyXG4gICAgcmV0dXJuIHRoaXMucm93cztcclxuICB9XHJcblxyXG4gIGdldCBwYWdlUm93cygpOiBBY3Rpdml0eVJvd1tdIHtcclxuICAgIHJldHVybiB0aGlzLnJvd3M7XHJcbiAgfVxyXG5cclxuICBvblBhZ2VDaGFuZ2UocGFnZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZTtcclxuICAgIHRoaXMubG9hZEFjdGl2aXR5KCk7XHJcbiAgfVxyXG5cclxuICB0cmFja0J5Um93KGluZGV4OiBudW1iZXIsIHJvdzogQWN0aXZpdHlSb3cpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIChyb3cucmF3Py5wcm9jZXNzZWRDaGVja2xpc3RJZCB8fCByb3cucmF3Py5sb2dJZCB8fCByb3cuc3RvcmUpICsgcm93LmFjdGlvbiArIGluZGV4O1xyXG4gIH1cclxuXHJcbiAgdHJhY2tCeUNvbHVtbihfOiBudW1iZXIsIGNvbDogQXBwcm92YWxDb2x1bW4pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGNvbC5rZXk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJhdjItcGFnZVwiPlxyXG5cclxuICA8IS0tIFdhaXRpbmcgZm9yIGFwcHJvdmFsIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJhdjItZ3JpZC0yXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXYyLXN0YXRcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJhdjItc2sgYXYyLXNrLS12YWx1ZSBhYy1zay12YWx1ZVwiICpuZ0lmPVwiY2FyZHNMb2FkaW5nXCI+PC9zcGFuPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImF2Mi1zdGF0LXZhbHVlXCIgKm5nSWY9XCIhY2FyZHNMb2FkaW5nXCI+e3sgYXVkaXRXYWl0aW5nIH19PC9zcGFuPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImF2Mi1zdGF0LWxhYmVsXCI+QXVkaXQgd2FpdGluZyBmb3IgYXBwcm92YWw8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJhdjItc3RhdFwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImF2Mi1zayBhdjItc2stLXZhbHVlIGFjLXNrLXZhbHVlXCIgKm5nSWY9XCJjYXJkc0xvYWRpbmdcIj48L3NwYW4+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiYXYyLXN0YXQtdmFsdWVcIiAqbmdJZj1cIiFjYXJkc0xvYWRpbmdcIj57eyB0YXNrV2FpdGluZyB9fTwvc3Bhbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJhdjItc3RhdC1sYWJlbFwiPlRhc2sgd2FpdGluZyBmb3IgYXBwcm92YWw8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBBcHByb3ZhbCAtLT5cclxuICA8c2VjdGlvbiBjbGFzcz1cImF2Mi1jYXJkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXYyLWNhcmQtaGVhZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYXYyLXRpdGxlLWJsb2NrXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImF2Mi1jYXJkLXRpdGxlXCI+QXBwcm92YWw8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXYyLWNhcmQtc3ViXCI+QSBzdW1tYXJ5IG9mIGFsbCB0aGUgYXVkaXRzIGF3YWl0aW5nIGFwcHJvdmFsPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwiYXYyLXNlYXJjaCBhdjItc2VhcmNoLS1tZFwiPlxyXG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCI+XHJcbiAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTFcIiBjeT1cIjExXCIgcj1cIjdcIj48L2NpcmNsZT5cclxuICAgICAgICAgIDxsaW5lIHgxPVwiMTYuNVwiIHkxPVwiMTYuNVwiIHgyPVwiMjFcIiB5Mj1cIjIxXCI+PC9saW5lPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImFwcHJvdmFsU2VhcmNoXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25BcHByb3ZhbFNlYXJjaCgpXCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XHJcbiAgICAgIDwvbGFiZWw+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYXBwcm92YWwtc2NvcGUtc2VsZWN0XCI+XHJcbiAgICAgICAgPGxpYi1zZWxlY3QgW2l0ZW1zXT1cImFwcHJvdmFsU2NvcGVJdGVtc1wiIFttdWx0aV09XCJmYWxzZVwiIFtzZWFyY2hGaWVsZF09XCInbGFiZWwnXCIgW2lkRmllbGRdPVwiJ2lkJ1wiXHJcbiAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZXNdPVwiW2FwcHJvdmFsU2NvcGVTZWxlY3RlZF1cIiAoc2VsZWN0ZWQpPVwib25BcHByb3ZhbFNjb3BlU2VsZWN0KCRldmVudClcIj48L2xpYi1zZWxlY3Q+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImF2Mi1ncmlkLTNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImFwcHJvdmFsLWNvbFwiICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgdHJhY2tCeTogdHJhY2tCeUNvbHVtblwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhdjItY29sLWhlYWRcIj5cclxuICAgICAgICAgIHt7IGNvbC50aXRsZSB9fVxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhYXBwcm92YWxzTG9hZGluZyAmJiBjb2wuY2FyZHMubGVuZ3RoXCIgY2xhc3M9XCJhdjItYmFkZ2UgYXYyLWJhZGdlLS1jb3VudFwiPnt7IGNvbC5jYXJkcy5sZW5ndGggfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxsaWItYXVkaXQtdjItc2hpbW1lciAqbmdJZj1cImFwcHJvdmFsc0xvYWRpbmdcIiBbcm93c109XCIyXCI+PC9saWItYXVkaXQtdjItc2hpbW1lcj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFhcHByb3ZhbHNMb2FkaW5nICYmIGNvbC5jYXJkcy5sZW5ndGhcIiBjbGFzcz1cImFwcHJvdmFsLWNhcmRzXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjYXJkIG9mIGNvbC5jYXJkc1wiIGNsYXNzPVwiYXBwcm92YWwtY2FyZFwiIFtjbGFzcy5hcHByb3ZhbC1jYXJkLS1vZmZdPVwiIWNhcmQubGlua1wiXHJcbiAgICAgICAgICAgIFthdHRyLnJvbGVdPVwiY2FyZC5saW5rID8gJ2xpbmsnIDogbnVsbFwiIFthdHRyLnRhYmluZGV4XT1cImNhcmQubGluayA/IDAgOiBudWxsXCIgW2F0dHIudGl0bGVdPVwiY2FyZC5oaW50IHx8IG51bGxcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlbkNhcmQoY2FyZClcIiAoa2V5ZG93bi5lbnRlcik9XCJvcGVuQ2FyZChjYXJkKVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwcm92YWwtY2FyZC1iYWRnZXNcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF2Mi1iYWRnZSBhdjItYmFkZ2UtLXB1cnBsZSBhdjItYmFkZ2UtLWNvdW50XCI+e3sgY2FyZC50eXBlTGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjYXJkLnJlZG9cIiBjbGFzcz1cImF2Mi1iYWRnZSBhdjItYmFkZ2UtLXdhcm5pbmcgYXYyLWJhZGdlLS1jb3VudFwiPlJlZG88L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwcm92YWwtY2FyZC1uYW1lXCI+e3sgY2FyZC5uYW1lIH19PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHByb3ZhbC1jYXJkLW1ldGFcIj5cclxuICAgICAgICAgICAgICA8c3Bhbj57eyBjYXJkLnN0b3JlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY2FyZC5zdWJtaXR0ZWRMYWJlbFwiPnt7IGNhcmQuc3VibWl0dGVkTGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3sgY2FyZC5ieSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHByb3ZhbC1jYXJkLWZvb3RcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFwcHJvdmFsLWNhcmQtZGF0ZVwiPnt7IGNhcmQud2hlbiB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNhcmQuYXBwcm92ZWRMYWJlbFwiIGNsYXNzPVwiYXYyLWJhZGdlIGF2Mi1iYWRnZS0tc3VjY2VzcyBhdjItYmFkZ2UtLWNvdW50XCI+e3sgY2FyZC5hcHByb3ZlZExhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWFwcHJvdmFsc0xvYWRpbmcgJiYgIWNvbC5jYXJkcy5sZW5ndGhcIiBjbGFzcz1cImF2Mi1lbXB0eVwiPlxyXG4gICAgICAgICAgPGltZyBjbGFzcz1cImF2Mi1lbXB0eS1pbWdcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGExLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF2Mi1lbXB0eS10ZXh0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdjItZW1wdHktdGl0bGVcIj5ObyBkYXRhIGZvdW5kPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdjItZW1wdHktc3ViXCI+e3sgY29sLmVtcHR5IH19PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L3NlY3Rpb24+XHJcblxyXG4gIDwhLS0gQWN0aXZpdHkgTG9nIC0tPlxyXG4gIDxzZWN0aW9uIGNsYXNzPVwiYXYyLWNhcmQgYXYyLWNhcmQtLWxvZ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImF2Mi1jYXJkLWhlYWQgYXYyLWNhcmQtaGVhZC0tY2VudGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJhdjItY2FyZC10aXRsZSBhdjItY2FyZC10aXRsZS0tZ3Jvd1wiPkFjdGl2aXR5IExvZzwvZGl2PlxyXG5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwiYXYyLXNlYXJjaCBhdjItc2VhcmNoLS1sZ1wiPlxyXG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCI+XHJcbiAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTFcIiBjeT1cIjExXCIgcj1cIjdcIj48L2NpcmNsZT5cclxuICAgICAgICAgIDxsaW5lIHgxPVwiMTYuNVwiIHkxPVwiMTYuNVwiIHgyPVwiMjFcIiB5Mj1cIjIxXCI+PC9saW5lPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cInNlYXJjaFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VhcmNoKClcIiB0eXBlPVwidGV4dFwiIFtwbGFjZWhvbGRlcl09XCJzZWFyY2hIaW50XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cclxuICAgICAgPC9sYWJlbD5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsb2ctZGF0ZS1waWNrZXJcIj5cclxuICAgICAgICA8bGliLWRhdGUtcmFuZ2UtcGlja2VyIFtyYW5nZV09XCJhY3Rpdml0eVJhbmdlXCIgKGRhdGVDaGFuZ2UpPVwib25BY3Rpdml0eURhdGVDaGFuZ2UoJGV2ZW50KVwiPjwvbGliLWRhdGUtcmFuZ2UtcGlja2VyPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxsaWItZmlsdGVycyBbZGF0YU9iamVjdF09XCJhY3Rpdml0eUZpbHRlckRhdGFcIiAoYXBwbGllZEZpbHRlcnMpPVwib25BY3Rpdml0eUZpbHRlcnMoJGV2ZW50KVwiPjwvbGliLWZpbHRlcnM+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEF1ZGl0IC8gVGFzayAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJhdjItdGFic1wiPlxyXG4gICAgICA8YnV0dG9uICpuZ0Zvcj1cImxldCB0IG9mIHRhYnNcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJhdjItdGFiXCIgW2NsYXNzLmlzLWFjdGl2ZV09XCJ0YWIgPT09IHRcIlxyXG4gICAgICAgIChjbGljayk9XCJzZXRUYWIodClcIj57eyB0IH19PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bGliLWF1ZGl0LXYyLXNoaW1tZXIgKm5nSWY9XCJsb2dMb2FkaW5nXCI+PC9saWItYXVkaXQtdjItc2hpbW1lcj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiYXYyLXRhYmxlLXdyYXBcIiAqbmdJZj1cIiFsb2dMb2FkaW5nXCI+XHJcbiAgICAgIDx0YWJsZSBjbGFzcz1cImF2Mi10YWJsZSBsb2ctdGFibGVcIj5cclxuICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF2Mi10aC1zb3J0XCI+RGF0ZSAmYW1wOyBUaW1lXHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjIuMlwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGluZSB4MT1cIjEyXCIgeTE9XCI0XCIgeDI9XCIxMlwiIHkyPVwiMjBcIj48L2xpbmU+XHJcbiAgICAgICAgICAgICAgICAgIDxwb2x5bGluZSBwb2ludHM9XCI2IDE0IDEyIDIwIDE4IDE0XCI+PC9wb2x5bGluZT5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgPHRoPnt7IG5hbWVMYWJlbCB9fTwvdGg+XHJcbiAgICAgICAgICAgIDx0aD5BY3Rpb24gUGVyZm9ybWVkPC90aD5cclxuICAgICAgICAgICAgPHRoPlBlcmZvcm1lZCBieTwvdGg+XHJcbiAgICAgICAgICAgIDx0aD5OYW1lPC90aD5cclxuICAgICAgICAgICAgPHRoPkFjdGlvbnM8L3RoPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIHBhZ2VSb3dzOyB0cmFja0J5OiB0cmFja0J5Um93XCI+XHJcbiAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXYyLWNlbGwtc3RhY2tcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHJvdy5kYXkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF2Mi1tdXRlZFwiPnt7IHJvdy50aW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJhdjItZWxsaXBzaXNcIj57eyByb3cubmFtZSB9fTwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD48c3BhbiBjbGFzcz1cImF2Mi1iYWRnZSBhY3Rpdml0eS1hY3Rpb25cIiBbY2xhc3MuYWN0aXZpdHktYWN0aW9uLS1sb2ddPVwicm93LnJhdz8ua2luZCA9PT0gJ2xvZydcIlxyXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cInJvdy5hY3Rpb25cIj57eyByb3cuYWN0aW9uIH19PC9zcGFuPjwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXYyLWNlbGwtaWNvbiBhdjItZGltXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCIxNVwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuOFwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjhcIiByPVwiMy40XCI+PC9jaXJjbGU+XHJcbiAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNSAyMGMwLTMuNiAzLjEtNS42IDctNS42czcgMiA3IDUuNlwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgcm93LmJ5IH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2Mi1jZWxsLWljb24gc3RvcmUtY2VsbFwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE1XCIgaGVpZ2h0PVwiMTVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj5cclxuICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDlsMS42LTQuNWgxNC44TDIxIDlcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNCA5djExaDE2VjlcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOSAyMHYtNmg2djZcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHJvdy5zdG9yZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgIDxhICpuZ0lmPVwicm93LnZpZXdhYmxlXCIgY2xhc3M9XCJhdjItbGlua1wiIHJvdXRlckxpbms9XCIvbWFuYWdlL3RyYXgvYXVkaXQtdjIvZ2FsbGVyeVwiXHJcbiAgICAgICAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwiZ2FsbGVyeVBhcmFtcyhyb3cpXCIgdGl0bGU9XCJPcGVuIHRoaXMgc3VibWlzc2lvbiBpbiB0aGUgR2FsbGVyeVwiPlZpZXc8L2E+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhcm93LnZpZXdhYmxlXCIgY2xhc3M9XCJhdjItZmFpbnRcIj4tPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3Rib2R5PlxyXG4gICAgICA8L3RhYmxlPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cIiFsb2dMb2FkaW5nICYmICFmaWx0ZXJlZFJvd3MubGVuZ3RoXCIgY2xhc3M9XCJhdjItZW1wdHlcIj5cclxuICAgICAgPGltZyBjbGFzcz1cImF2Mi1lbXB0eS1pbWdcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGExLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYXYyLWVtcHR5LXRleHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXYyLWVtcHR5LXRpdGxlXCI+Tm8gZGF0YSBmb3VuZDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhdjItZW1wdHktc3ViXCI+VGhlcmUgaXMgbm8gcmVzdWx0IGZvciB7eyB0YWIgfX08L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiIWxvZ0xvYWRpbmcgJiYgZmlsdGVyZWRSb3dzLmxlbmd0aFwiIGNsYXNzPVwibG9nLXBhZ2luYXRpb25cIj5cclxuICAgICAgPGxpYi1wYWdpbmF0aW9uIFtpdGVtc1BlclBhZ2VdPVwiaXRlbXNQZXJQYWdlXCIgW3BhZ2VTaXplXT1cIml0ZW1zUGVyUGFnZVwiIFtwYWdpbmF0aW9uU2l6ZXNdPVwicGFnZVNpemVzXCIgW2N1cnJlbnRQYWdlXT1cImN1cnJlbnRQYWdlXCIgW3RvdGFsSXRlbXNdPVwidG90YWxJdGVtc1wiXHJcbiAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIj48L2xpYi1wYWdpbmF0aW9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9zZWN0aW9uPlxyXG5cclxuPC9kaXY+XHJcbiJdfQ==
|