tango-app-ui-ticket-user 3.5.1 → 3.5.3
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/infratickets/infratickets.component.mjs +6 -1
- package/esm2022/lib/components/preinstallation-info/preinstallation-info.component.mjs +191 -0
- package/esm2022/lib/services/ticket-infra.service.mjs +13 -1
- package/esm2022/lib/tango-ticket-users-routing.module.mjs +6 -1
- package/esm2022/lib/tango-ticket-users.module.mjs +4 -3
- package/fesm2022/tango-app-ui-ticket-user.mjs +250 -46
- package/fesm2022/tango-app-ui-ticket-user.mjs.map +1 -1
- package/lib/components/preinstallation-info/preinstallation-info.component.d.ts +60 -0
- package/lib/services/ticket-infra.service.d.ts +5 -0
- package/lib/tango-ticket-users.module.d.ts +8 -7
- package/package.json +1 -1
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { Subject, takeUntil } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/router";
|
|
5
|
+
import * as i2 from "../../services/ticket-infra.service";
|
|
6
|
+
import * as i3 from "tango-app-ui-shared";
|
|
7
|
+
import * as i4 from "@angular/common";
|
|
8
|
+
import * as i5 from "@ng-bootstrap/ng-bootstrap";
|
|
9
|
+
/**
|
|
10
|
+
* Pre-Installation ticket detail page (workspace entry for TE_PRE tickets).
|
|
11
|
+
* Same role as InstallationComponent for TE_INS tickets: the ticket header +
|
|
12
|
+
* activity trail come from the tickets API, the LIVE camera-placement state
|
|
13
|
+
* comes from the store-builder CCTV row, and the page gates the next step:
|
|
14
|
+
* autoPlacement -> "Auto placement in progress", editor locked, source preview
|
|
15
|
+
* failed -> failure reason + Retry
|
|
16
|
+
* open -> "Open DXF editor" (assignee gated server-side)
|
|
17
|
+
* approvalPending-> waiting for approval, drawing viewable
|
|
18
|
+
* approved -> done (ticket closes via the approve hook)
|
|
19
|
+
* Loading the CCTV detail also triggers the server-side OS reconcile, so this
|
|
20
|
+
* page keeps the row fresh, the job the CCTV table used to do.
|
|
21
|
+
*/
|
|
22
|
+
export class PreinstallationInfoComponent {
|
|
23
|
+
route;
|
|
24
|
+
router;
|
|
25
|
+
service;
|
|
26
|
+
toastService;
|
|
27
|
+
ticketId;
|
|
28
|
+
storeId;
|
|
29
|
+
ticketInfo;
|
|
30
|
+
cctvRow;
|
|
31
|
+
cctvFloor;
|
|
32
|
+
/** live placement state straight off the status index */
|
|
33
|
+
placement = null;
|
|
34
|
+
fileUrls = {};
|
|
35
|
+
loading = true;
|
|
36
|
+
cctvLoading = false;
|
|
37
|
+
/** Refresh clicked and the ticket reload is still in flight (icon turns) */
|
|
38
|
+
reloading = false;
|
|
39
|
+
cctvError = '';
|
|
40
|
+
retrying = false;
|
|
41
|
+
destroy$ = new Subject();
|
|
42
|
+
constructor(route, router, service, toastService) {
|
|
43
|
+
this.route = route;
|
|
44
|
+
this.router = router;
|
|
45
|
+
this.service = service;
|
|
46
|
+
this.toastService = toastService;
|
|
47
|
+
this.ticketId = this.route.snapshot.paramMap.get('ticketId');
|
|
48
|
+
this.storeId = this.route.snapshot.paramMap.get('storeId');
|
|
49
|
+
}
|
|
50
|
+
ngOnInit() {
|
|
51
|
+
this.viewTicket();
|
|
52
|
+
}
|
|
53
|
+
ngOnDestroy() {
|
|
54
|
+
this.destroy$.next(true);
|
|
55
|
+
this.destroy$.complete();
|
|
56
|
+
}
|
|
57
|
+
get floorId() {
|
|
58
|
+
return this.ticketInfo?.preInstallation?.floorId || '';
|
|
59
|
+
}
|
|
60
|
+
get floorNumber() {
|
|
61
|
+
return this.ticketInfo?.preInstallation?.floorNumber || '-';
|
|
62
|
+
}
|
|
63
|
+
/** Presigned link to the imported drawing (v1), from the detail call's url map. */
|
|
64
|
+
get sourceDxfUrl() {
|
|
65
|
+
const key = this.cctvRow?.sourceKey;
|
|
66
|
+
return key ? this.fileUrls?.[key] || null : null;
|
|
67
|
+
}
|
|
68
|
+
get sourceDxfName() {
|
|
69
|
+
const key = this.cctvRow?.sourceKey || '';
|
|
70
|
+
return key.split('/').pop() || 'source.dxf';
|
|
71
|
+
}
|
|
72
|
+
// The page's single state switch, derived from ticket + live CCTV row.
|
|
73
|
+
get placementState() {
|
|
74
|
+
if (this.ticketInfo?.status === 'closed')
|
|
75
|
+
return 'approved';
|
|
76
|
+
if (!this.floorId)
|
|
77
|
+
return 'waitingLayout';
|
|
78
|
+
if (!this.cctvRow)
|
|
79
|
+
return this.cctvError ? 'unavailable' : 'loading';
|
|
80
|
+
// The status index owns the placement half: queued and running both read
|
|
81
|
+
// as "in progress", and a failure carries its reason. Once the placement
|
|
82
|
+
// is done the workflow row takes over (open | approvalPending | approved).
|
|
83
|
+
const jobStatus = this.placement?.status;
|
|
84
|
+
if (jobStatus === 'pending' || jobStatus === 'processing')
|
|
85
|
+
return 'processing';
|
|
86
|
+
if (jobStatus === 'failed')
|
|
87
|
+
return 'failed';
|
|
88
|
+
if (this.cctvRow.status === 'autoPlacement')
|
|
89
|
+
return 'processing';
|
|
90
|
+
return this.cctvRow.status;
|
|
91
|
+
}
|
|
92
|
+
get versions() {
|
|
93
|
+
const files = Array.isArray(this.cctvRow?.files) ? [...this.cctvRow.files] : [];
|
|
94
|
+
return files.sort((a, b) => (b?.version ?? 0) - (a?.version ?? 0));
|
|
95
|
+
}
|
|
96
|
+
get activity() {
|
|
97
|
+
const list = Array.isArray(this.ticketInfo?.ticketActivity) ? [...this.ticketInfo.ticketActivity] : [];
|
|
98
|
+
return list.reverse();
|
|
99
|
+
}
|
|
100
|
+
viewTicket() {
|
|
101
|
+
this.service.viewTicket({ ticketId: this.ticketId })
|
|
102
|
+
.pipe(takeUntil(this.destroy$))
|
|
103
|
+
.subscribe({
|
|
104
|
+
next: (res) => {
|
|
105
|
+
this.loading = false;
|
|
106
|
+
this.reloading = false;
|
|
107
|
+
if (res && res.code == 200) {
|
|
108
|
+
this.ticketInfo = res.data;
|
|
109
|
+
if (this.floorId) {
|
|
110
|
+
this.loadCctvDetail();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
error: () => {
|
|
115
|
+
this.loading = false;
|
|
116
|
+
this.reloading = false;
|
|
117
|
+
this.toastService.getErrorToast('Unable to load the ticket.');
|
|
118
|
+
},
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
loadCctvDetail() {
|
|
122
|
+
if (!this.floorId)
|
|
123
|
+
return;
|
|
124
|
+
this.cctvLoading = true;
|
|
125
|
+
this.cctvError = '';
|
|
126
|
+
this.service.getCctvDetail(this.floorId)
|
|
127
|
+
.pipe(takeUntil(this.destroy$))
|
|
128
|
+
.subscribe({
|
|
129
|
+
next: (res) => {
|
|
130
|
+
this.cctvLoading = false;
|
|
131
|
+
this.cctvRow = res?.data?.row || null;
|
|
132
|
+
this.cctvFloor = res?.data?.floor || null;
|
|
133
|
+
this.fileUrls = res?.data?.urls || {};
|
|
134
|
+
this.placement = res?.data?.placement || null;
|
|
135
|
+
},
|
|
136
|
+
error: () => {
|
|
137
|
+
this.cctvLoading = false;
|
|
138
|
+
this.cctvError = 'Unable to load the camera placement status.';
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
refresh() {
|
|
143
|
+
this.reloading = true;
|
|
144
|
+
this.viewTicket();
|
|
145
|
+
}
|
|
146
|
+
retryPlacement() {
|
|
147
|
+
if (!this.floorId || this.retrying)
|
|
148
|
+
return;
|
|
149
|
+
this.retrying = true;
|
|
150
|
+
this.service.cctvRetry({ floorId: this.floorId })
|
|
151
|
+
.pipe(takeUntil(this.destroy$))
|
|
152
|
+
.subscribe({
|
|
153
|
+
next: (res) => {
|
|
154
|
+
this.retrying = false;
|
|
155
|
+
this.toastService.getSuccessToast(res?.data?.startedNow ?
|
|
156
|
+
'Auto placement is running again.' :
|
|
157
|
+
'Queued for auto placement. It will start on the next run.');
|
|
158
|
+
this.loadCctvDetail();
|
|
159
|
+
},
|
|
160
|
+
error: () => {
|
|
161
|
+
this.retrying = false;
|
|
162
|
+
this.toastService.getErrorToast('Unable to retry. Please try again.');
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
openEditor() {
|
|
167
|
+
if (!this.floorId)
|
|
168
|
+
return;
|
|
169
|
+
this.router.navigate(['/manage/planogram/cctv-editor'], {
|
|
170
|
+
queryParams: { floorId: this.floorId, mode: 'edit' },
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
/** The source drawing, read-only, while auto placement is still running. */
|
|
174
|
+
openPreview() {
|
|
175
|
+
if (!this.floorId)
|
|
176
|
+
return;
|
|
177
|
+
this.router.navigate(['/manage/planogram/cctv-preview'], {
|
|
178
|
+
queryParams: { floorId: this.floorId, from: 'ticket' },
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
back() {
|
|
182
|
+
this.router.navigate(['/tickets/users'], { queryParams: { type: 'installation' } });
|
|
183
|
+
}
|
|
184
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PreinstallationInfoComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.TicketsService }, { token: i3.ToastService }], target: i0.ɵɵFactoryTarget.Component });
|
|
185
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PreinstallationInfoComponent, selector: "lib-preinstallation-info", ngImport: i0, template: "<div class=\"container-fluid p-5 preinstall-page\">\n\n <!-- Header -->\n <div class=\"card mb-5\">\n <div class=\"card-body d-flex flex-wrap align-items-center justify-content-between gap-4 py-4\">\n <div class=\"d-flex align-items-center gap-4\">\n <button type=\"button\" class=\"btn btn-sm btn-light back-btn\" (click)=\"back()\" aria-label=\"Back to workspace\">\n <i class=\"bi bi-arrow-left\"></i>\n </button>\n <div>\n <div class=\"d-flex align-items-center gap-3\">\n <h4 class=\"mb-0\">{{ ticketInfo?.ticketId || ticketId }}</h4>\n <span class=\"badge state-badge\" [ngClass]=\"'state-' + placementState\">\n {{\n placementState === 'waitingLayout' ? 'Waiting for layout' :\n placementState === 'processing' ? 'Auto placement in progress' :\n placementState === 'failed' ? 'Placement failed' :\n placementState === 'open' ? 'Ready for placement review' :\n placementState === 'approvalPending' ? 'Waiting for approval' :\n placementState === 'approved' ? 'Approved' :\n placementState === 'unavailable' ? 'Status unavailable' : 'Loading'\n }}\n </span>\n </div>\n <div class=\"text-muted fs-7 mt-1\">\n Pre-Installation, camera placement\n <span *ngIf=\"ticketInfo?.basicDetails?.storeName\">, {{ ticketInfo?.basicDetails?.storeName }}</span>\n <span>, Floor {{ floorNumber }}</span>\n </div>\n </div>\n </div>\n <div class=\"d-flex align-items-center gap-3\">\n <button type=\"button\" class=\"btn btn-sm btn-light row-btn\" (click)=\"refresh()\">\n <i class=\"bi bi-arrow-clockwise me-1\" [class.spinning]=\"reloading || cctvLoading\"></i>Refresh\n </button>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"loading\" class=\"text-center py-10 text-muted\">Loading ticket...</div>\n\n <div *ngIf=\"!loading && ticketInfo\" class=\"row g-5\">\n\n <!-- Placement state / action panel -->\n <div class=\"col-12 col-lg-7\">\n <div class=\"card h-100\">\n <div class=\"card-body\">\n <div class=\"card-head mb-4\">\n <h5 class=\"mb-0\">Camera placement</h5>\n <!-- The imported drawing itself, for the internal team to inspect in\n CAD when the engine cannot handle it or before editing. -->\n <a *ngIf=\"sourceDxfUrl\" [href]=\"sourceDxfUrl\" target=\"_blank\" rel=\"noopener\"\n class=\"btn btn-sm btn-light row-btn\" [ngbTooltip]=\"sourceDxfName\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M12 3v12m0 0 4-4m-4 4-4-4M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2\"\n stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <span class=\"ms-1\">Download source DXF</span>\n </a>\n </div>\n\n <div [ngSwitch]=\"placementState\" class=\"state-panel\">\n\n <div *ngSwitchCase=\"'waitingLayout'\" class=\"state-box\">\n <p class=\"mb-1 fw-semibold\">Waiting for the CAD layout.</p>\n <p class=\"text-muted mb-0\">The store's floor drawing has not been imported yet. Auto placement starts right after the CAD import.</p>\n </div>\n\n <div *ngSwitchCase=\"'processing'\" class=\"state-box\">\n <div class=\"d-flex align-items-center gap-3 mb-1\">\n <span class=\"spinner-border spinner-border-sm text-primary\" role=\"status\" aria-hidden=\"true\"></span>\n <p class=\"mb-0 fw-semibold\">Auto camera placement is running.</p>\n </div>\n <p class=\"text-muted mb-3\">The DXF editor unlocks when placement completes. Use Refresh to check again. Meanwhile you can look at the source drawing.</p>\n <button type=\"button\" class=\"btn btn-sm btn-light row-btn\" (click)=\"openPreview()\">\n <i class=\"bi bi-eye me-1\"></i>View source drawing\n </button>\n </div>\n\n <div *ngSwitchCase=\"'failed'\" class=\"state-box state-box-danger\">\n <p class=\"mb-1 fw-semibold\">Auto placement failed.</p>\n <p class=\"text-muted mb-3\">{{ placement?.errorMsg || cctvRow?.errorMsg || 'The placement engine reported a failure.' }}</p>\n <!-- Retry hidden until the autoPlace Lambda exists (LAMBDAURL.autoPlace is empty).\n Re-enable by removing this comment; retryPlacement() is still wired in the component.\n <button type=\"button\" class=\"btn btn-sm btn-primary row-btn\" [disabled]=\"retrying\" (click)=\"retryPlacement()\">\n <span *ngIf=\"retrying\" class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"></span>\n {{ retrying ? 'Retrying...' : 'Retry auto placement' }}\n </button>\n -->\n </div>\n\n <div *ngSwitchCase=\"'open'\" class=\"state-box\">\n <p class=\"mb-1 fw-semibold\">The drawing is ready for camera review.</p>\n <p class=\"text-muted mb-3\">\n Adjust the auto-placed cameras in the DXF editor, then submit for approval.\n <span *ngIf=\"cctvRow?.isRework\" class=\"text-warning fw-semibold\">This floor was sent back for rework.</span>\n </p>\n <button type=\"button\" class=\"btn btn-sm btn-primary row-btn\" (click)=\"openEditor()\">\n <i class=\"bi bi-pencil-square me-1\"></i>Open DXF editor\n </button>\n </div>\n\n <div *ngSwitchCase=\"'approvalPending'\" class=\"state-box\">\n <p class=\"mb-1 fw-semibold\">Submitted, waiting for approval.</p>\n <p class=\"text-muted mb-3\">The approval team reviews it from the onboard table. You can still view the drawing.</p>\n <button type=\"button\" class=\"btn btn-sm btn-light row-btn\" (click)=\"openEditor()\">\n <i class=\"bi bi-eye me-1\"></i>View drawing\n </button>\n </div>\n\n <div *ngSwitchCase=\"'approved'\" class=\"state-box state-box-success\">\n <p class=\"mb-1 fw-semibold\">Camera placement approved.</p>\n <p class=\"text-muted mb-0\">This ticket is closed. The installation ticket takes over once every floor of the store is approved.</p>\n </div>\n\n <div *ngSwitchCase=\"'unavailable'\" class=\"state-box state-box-danger\">\n <p class=\"mb-1 fw-semibold\">Placement status unavailable.</p>\n <p class=\"text-muted mb-3\">{{ cctvError }}</p>\n <button type=\"button\" class=\"btn btn-sm btn-light row-btn\" (click)=\"loadCctvDetail()\">Try again</button>\n </div>\n\n <div *ngSwitchDefault class=\"state-box\">\n <p class=\"text-muted mb-0\">Loading placement status...</p>\n </div>\n </div>\n\n <!-- Version timeline -->\n <div *ngIf=\"versions.length\" class=\"mt-6\">\n <h6 class=\"text-muted mb-3\">Drawing versions</h6>\n <div class=\"version-list\">\n <div class=\"version-row d-flex align-items-center justify-content-between\" *ngFor=\"let file of versions\">\n <div>\n <span class=\"fw-semibold\">v{{ file.version }}</span>\n <span class=\"text-muted ms-2 fs-7\">{{ file.kind === 'auto' ? 'Auto placement' : file.kind === 'approver' ? 'Approver edit' : 'Internal edit' }}</span>\n <span class=\"text-muted ms-2 fs-7\" *ngIf=\"file.cameraCount != null\">{{ file.cameraCount }} cameras</span>\n </div>\n <div class=\"d-flex align-items-center gap-3\">\n <span class=\"text-muted fs-7\">{{ file.uploadedAt | date: 'dd MMM, y HH:mm' }}</span>\n <a *ngIf=\"fileUrls[file.key]\" [href]=\"fileUrls[file.key]\" target=\"_blank\" rel=\"noopener\" class=\"btn btn-sm btn-light row-btn\">\n <i class=\"bi bi-download\"></i>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Ticket info + activity -->\n <div class=\"col-12 col-lg-5\">\n <div class=\"card mb-5\">\n <div class=\"card-body\">\n <h5 class=\"mb-4\">Ticket details</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-row\"><span class=\"text-muted\">Store</span><span>{{ ticketInfo?.basicDetails?.storeName || '-' }} ({{ ticketInfo?.basicDetails?.storeId || storeId }})</span></div>\n <div class=\"detail-row\"><span class=\"text-muted\">Brand</span><span>{{ ticketInfo?.basicDetails?.clientName || '-' }}</span></div>\n <div class=\"detail-row\"><span class=\"text-muted\">Floor</span><span>Floor {{ floorNumber }}</span></div>\n <div class=\"detail-row\"><span class=\"text-muted\">Ticket status</span><span class=\"text-capitalize\">{{ ticketInfo?.status || '-' }}</span></div>\n <div class=\"detail-row\"><span class=\"text-muted\">Created</span><span>{{ ticketInfo?.createdAt | date: 'dd MMM, y HH:mm' }}</span></div>\n <div class=\"detail-row\" *ngIf=\"cctvRow?.assigneeName\"><span class=\"text-muted\">Assignee</span><span>{{ cctvRow?.assigneeName }}</span></div>\n <div class=\"detail-row\" *ngIf=\"cctvRow?.reworkCount\"><span class=\"text-muted\">Rework count</span><span>{{ cctvRow?.reworkCount }}</span></div>\n </div>\n </div>\n </div>\n\n <div class=\"card\">\n <div class=\"card-body\">\n <h5 class=\"mb-4\">Activity</h5>\n <div *ngIf=\"!activity.length\" class=\"text-muted fs-7\">No activity yet.</div>\n <div class=\"activity-list\">\n <div class=\"activity-row\" *ngFor=\"let entry of activity\">\n <div class=\"activity-dot\" aria-hidden=\"true\"></div>\n <div class=\"flex-grow-1\">\n <div class=\"d-flex justify-content-between gap-3\">\n <span class=\"fw-semibold fs-7\">{{ entry.description || entry.actionType }}</span>\n <span class=\"text-muted fs-8 text-nowrap\">{{ entry.timeStamp | date: 'dd MMM, HH:mm' }}</span>\n </div>\n <div class=\"text-muted fs-8\" *ngIf=\"entry.comment\">{{ entry.comment }}</div>\n <div class=\"text-muted fs-8\" *ngIf=\"entry.IdentifiedBy && entry.IdentifiedBy !== 'Tango'\">by {{ entry.IdentifiedBy }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".preinstall-page .back-btn,.preinstall-page .card-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.preinstall-page .back-btn .row-btn,.preinstall-page .card-head .row-btn{display:inline-flex;align-items:center;white-space:nowrap}.preinstall-page .row-btn{height:40px;display:inline-flex;align-items:center}.preinstall-page .state-badge{padding:6px 12px;font-weight:600;border-radius:999px}.preinstall-page .state-badge.state-waitingLayout,.preinstall-page .state-badge.state-loading,.preinstall-page .state-badge.state-unavailable{background:#f1f3f5;color:#5e6278}.preinstall-page .state-badge.state-processing{background:#eef6ff;color:#1b84ff}.preinstall-page .state-badge.state-failed{background:#fff5f8;color:#f1416c}.preinstall-page .state-badge.state-open{background:#e8fff3;color:#17c653}.preinstall-page .state-badge.state-approvalPending{background:#fff8dd;color:#f6c000}.preinstall-page .state-badge.state-approved{background:#e8fff3;color:#17c653}.preinstall-page .state-panel .state-box{border:1px solid #e9ecef;border-radius:8px;padding:16px 20px;opacity:0;transform:translateY(4px);animation:preinstallFade .25s ease forwards}.preinstall-page .state-panel .state-box.state-box-danger{border-color:#ffd6e1;background:#fff9fb}.preinstall-page .state-panel .state-box.state-box-success{border-color:#c8f2d8;background:#f6fffa}.preinstall-page .version-list .version-row{padding:10px 0;border-bottom:1px dashed #e9ecef}.preinstall-page .version-list .version-row:last-child{border-bottom:none}.preinstall-page .detail-grid .detail-row{display:flex;justify-content:space-between;gap:12px;padding:7px 0;border-bottom:1px dashed #f1f3f5;font-size:13px}.preinstall-page .detail-grid .detail-row:last-child{border-bottom:none}.preinstall-page .activity-list{max-height:420px;overflow-y:auto}.preinstall-page .activity-list .activity-row{display:flex;gap:10px;padding:8px 0}.preinstall-page .activity-list .activity-row .activity-dot{width:8px;height:8px;border-radius:50%;background:#1b84ff;margin-top:6px;flex-shrink:0}@keyframes preinstallFade{to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion: reduce){.preinstall-page .state-panel .state-box{animation:none;opacity:1;transform:none}}.preinstall-page .bi-arrow-clockwise{display:inline-block;line-height:1}.preinstall-page .bi-arrow-clockwise:before{display:inline-block;transform-origin:50% 50%}.preinstall-page .bi-arrow-clockwise.spinning:before{animation:preinstallSpin .8s linear infinite}@keyframes preinstallSpin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.preinstall-page .bi-arrow-clockwise.spinning:before{animation:none}}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i5.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "pipe", type: i4.DatePipe, name: "date" }] });
|
|
186
|
+
}
|
|
187
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PreinstallationInfoComponent, decorators: [{
|
|
188
|
+
type: Component,
|
|
189
|
+
args: [{ selector: 'lib-preinstallation-info', template: "<div class=\"container-fluid p-5 preinstall-page\">\n\n <!-- Header -->\n <div class=\"card mb-5\">\n <div class=\"card-body d-flex flex-wrap align-items-center justify-content-between gap-4 py-4\">\n <div class=\"d-flex align-items-center gap-4\">\n <button type=\"button\" class=\"btn btn-sm btn-light back-btn\" (click)=\"back()\" aria-label=\"Back to workspace\">\n <i class=\"bi bi-arrow-left\"></i>\n </button>\n <div>\n <div class=\"d-flex align-items-center gap-3\">\n <h4 class=\"mb-0\">{{ ticketInfo?.ticketId || ticketId }}</h4>\n <span class=\"badge state-badge\" [ngClass]=\"'state-' + placementState\">\n {{\n placementState === 'waitingLayout' ? 'Waiting for layout' :\n placementState === 'processing' ? 'Auto placement in progress' :\n placementState === 'failed' ? 'Placement failed' :\n placementState === 'open' ? 'Ready for placement review' :\n placementState === 'approvalPending' ? 'Waiting for approval' :\n placementState === 'approved' ? 'Approved' :\n placementState === 'unavailable' ? 'Status unavailable' : 'Loading'\n }}\n </span>\n </div>\n <div class=\"text-muted fs-7 mt-1\">\n Pre-Installation, camera placement\n <span *ngIf=\"ticketInfo?.basicDetails?.storeName\">, {{ ticketInfo?.basicDetails?.storeName }}</span>\n <span>, Floor {{ floorNumber }}</span>\n </div>\n </div>\n </div>\n <div class=\"d-flex align-items-center gap-3\">\n <button type=\"button\" class=\"btn btn-sm btn-light row-btn\" (click)=\"refresh()\">\n <i class=\"bi bi-arrow-clockwise me-1\" [class.spinning]=\"reloading || cctvLoading\"></i>Refresh\n </button>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"loading\" class=\"text-center py-10 text-muted\">Loading ticket...</div>\n\n <div *ngIf=\"!loading && ticketInfo\" class=\"row g-5\">\n\n <!-- Placement state / action panel -->\n <div class=\"col-12 col-lg-7\">\n <div class=\"card h-100\">\n <div class=\"card-body\">\n <div class=\"card-head mb-4\">\n <h5 class=\"mb-0\">Camera placement</h5>\n <!-- The imported drawing itself, for the internal team to inspect in\n CAD when the engine cannot handle it or before editing. -->\n <a *ngIf=\"sourceDxfUrl\" [href]=\"sourceDxfUrl\" target=\"_blank\" rel=\"noopener\"\n class=\"btn btn-sm btn-light row-btn\" [ngbTooltip]=\"sourceDxfName\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M12 3v12m0 0 4-4m-4 4-4-4M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2\"\n stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <span class=\"ms-1\">Download source DXF</span>\n </a>\n </div>\n\n <div [ngSwitch]=\"placementState\" class=\"state-panel\">\n\n <div *ngSwitchCase=\"'waitingLayout'\" class=\"state-box\">\n <p class=\"mb-1 fw-semibold\">Waiting for the CAD layout.</p>\n <p class=\"text-muted mb-0\">The store's floor drawing has not been imported yet. Auto placement starts right after the CAD import.</p>\n </div>\n\n <div *ngSwitchCase=\"'processing'\" class=\"state-box\">\n <div class=\"d-flex align-items-center gap-3 mb-1\">\n <span class=\"spinner-border spinner-border-sm text-primary\" role=\"status\" aria-hidden=\"true\"></span>\n <p class=\"mb-0 fw-semibold\">Auto camera placement is running.</p>\n </div>\n <p class=\"text-muted mb-3\">The DXF editor unlocks when placement completes. Use Refresh to check again. Meanwhile you can look at the source drawing.</p>\n <button type=\"button\" class=\"btn btn-sm btn-light row-btn\" (click)=\"openPreview()\">\n <i class=\"bi bi-eye me-1\"></i>View source drawing\n </button>\n </div>\n\n <div *ngSwitchCase=\"'failed'\" class=\"state-box state-box-danger\">\n <p class=\"mb-1 fw-semibold\">Auto placement failed.</p>\n <p class=\"text-muted mb-3\">{{ placement?.errorMsg || cctvRow?.errorMsg || 'The placement engine reported a failure.' }}</p>\n <!-- Retry hidden until the autoPlace Lambda exists (LAMBDAURL.autoPlace is empty).\n Re-enable by removing this comment; retryPlacement() is still wired in the component.\n <button type=\"button\" class=\"btn btn-sm btn-primary row-btn\" [disabled]=\"retrying\" (click)=\"retryPlacement()\">\n <span *ngIf=\"retrying\" class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"></span>\n {{ retrying ? 'Retrying...' : 'Retry auto placement' }}\n </button>\n -->\n </div>\n\n <div *ngSwitchCase=\"'open'\" class=\"state-box\">\n <p class=\"mb-1 fw-semibold\">The drawing is ready for camera review.</p>\n <p class=\"text-muted mb-3\">\n Adjust the auto-placed cameras in the DXF editor, then submit for approval.\n <span *ngIf=\"cctvRow?.isRework\" class=\"text-warning fw-semibold\">This floor was sent back for rework.</span>\n </p>\n <button type=\"button\" class=\"btn btn-sm btn-primary row-btn\" (click)=\"openEditor()\">\n <i class=\"bi bi-pencil-square me-1\"></i>Open DXF editor\n </button>\n </div>\n\n <div *ngSwitchCase=\"'approvalPending'\" class=\"state-box\">\n <p class=\"mb-1 fw-semibold\">Submitted, waiting for approval.</p>\n <p class=\"text-muted mb-3\">The approval team reviews it from the onboard table. You can still view the drawing.</p>\n <button type=\"button\" class=\"btn btn-sm btn-light row-btn\" (click)=\"openEditor()\">\n <i class=\"bi bi-eye me-1\"></i>View drawing\n </button>\n </div>\n\n <div *ngSwitchCase=\"'approved'\" class=\"state-box state-box-success\">\n <p class=\"mb-1 fw-semibold\">Camera placement approved.</p>\n <p class=\"text-muted mb-0\">This ticket is closed. The installation ticket takes over once every floor of the store is approved.</p>\n </div>\n\n <div *ngSwitchCase=\"'unavailable'\" class=\"state-box state-box-danger\">\n <p class=\"mb-1 fw-semibold\">Placement status unavailable.</p>\n <p class=\"text-muted mb-3\">{{ cctvError }}</p>\n <button type=\"button\" class=\"btn btn-sm btn-light row-btn\" (click)=\"loadCctvDetail()\">Try again</button>\n </div>\n\n <div *ngSwitchDefault class=\"state-box\">\n <p class=\"text-muted mb-0\">Loading placement status...</p>\n </div>\n </div>\n\n <!-- Version timeline -->\n <div *ngIf=\"versions.length\" class=\"mt-6\">\n <h6 class=\"text-muted mb-3\">Drawing versions</h6>\n <div class=\"version-list\">\n <div class=\"version-row d-flex align-items-center justify-content-between\" *ngFor=\"let file of versions\">\n <div>\n <span class=\"fw-semibold\">v{{ file.version }}</span>\n <span class=\"text-muted ms-2 fs-7\">{{ file.kind === 'auto' ? 'Auto placement' : file.kind === 'approver' ? 'Approver edit' : 'Internal edit' }}</span>\n <span class=\"text-muted ms-2 fs-7\" *ngIf=\"file.cameraCount != null\">{{ file.cameraCount }} cameras</span>\n </div>\n <div class=\"d-flex align-items-center gap-3\">\n <span class=\"text-muted fs-7\">{{ file.uploadedAt | date: 'dd MMM, y HH:mm' }}</span>\n <a *ngIf=\"fileUrls[file.key]\" [href]=\"fileUrls[file.key]\" target=\"_blank\" rel=\"noopener\" class=\"btn btn-sm btn-light row-btn\">\n <i class=\"bi bi-download\"></i>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Ticket info + activity -->\n <div class=\"col-12 col-lg-5\">\n <div class=\"card mb-5\">\n <div class=\"card-body\">\n <h5 class=\"mb-4\">Ticket details</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-row\"><span class=\"text-muted\">Store</span><span>{{ ticketInfo?.basicDetails?.storeName || '-' }} ({{ ticketInfo?.basicDetails?.storeId || storeId }})</span></div>\n <div class=\"detail-row\"><span class=\"text-muted\">Brand</span><span>{{ ticketInfo?.basicDetails?.clientName || '-' }}</span></div>\n <div class=\"detail-row\"><span class=\"text-muted\">Floor</span><span>Floor {{ floorNumber }}</span></div>\n <div class=\"detail-row\"><span class=\"text-muted\">Ticket status</span><span class=\"text-capitalize\">{{ ticketInfo?.status || '-' }}</span></div>\n <div class=\"detail-row\"><span class=\"text-muted\">Created</span><span>{{ ticketInfo?.createdAt | date: 'dd MMM, y HH:mm' }}</span></div>\n <div class=\"detail-row\" *ngIf=\"cctvRow?.assigneeName\"><span class=\"text-muted\">Assignee</span><span>{{ cctvRow?.assigneeName }}</span></div>\n <div class=\"detail-row\" *ngIf=\"cctvRow?.reworkCount\"><span class=\"text-muted\">Rework count</span><span>{{ cctvRow?.reworkCount }}</span></div>\n </div>\n </div>\n </div>\n\n <div class=\"card\">\n <div class=\"card-body\">\n <h5 class=\"mb-4\">Activity</h5>\n <div *ngIf=\"!activity.length\" class=\"text-muted fs-7\">No activity yet.</div>\n <div class=\"activity-list\">\n <div class=\"activity-row\" *ngFor=\"let entry of activity\">\n <div class=\"activity-dot\" aria-hidden=\"true\"></div>\n <div class=\"flex-grow-1\">\n <div class=\"d-flex justify-content-between gap-3\">\n <span class=\"fw-semibold fs-7\">{{ entry.description || entry.actionType }}</span>\n <span class=\"text-muted fs-8 text-nowrap\">{{ entry.timeStamp | date: 'dd MMM, HH:mm' }}</span>\n </div>\n <div class=\"text-muted fs-8\" *ngIf=\"entry.comment\">{{ entry.comment }}</div>\n <div class=\"text-muted fs-8\" *ngIf=\"entry.IdentifiedBy && entry.IdentifiedBy !== 'Tango'\">by {{ entry.IdentifiedBy }}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".preinstall-page .back-btn,.preinstall-page .card-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.preinstall-page .back-btn .row-btn,.preinstall-page .card-head .row-btn{display:inline-flex;align-items:center;white-space:nowrap}.preinstall-page .row-btn{height:40px;display:inline-flex;align-items:center}.preinstall-page .state-badge{padding:6px 12px;font-weight:600;border-radius:999px}.preinstall-page .state-badge.state-waitingLayout,.preinstall-page .state-badge.state-loading,.preinstall-page .state-badge.state-unavailable{background:#f1f3f5;color:#5e6278}.preinstall-page .state-badge.state-processing{background:#eef6ff;color:#1b84ff}.preinstall-page .state-badge.state-failed{background:#fff5f8;color:#f1416c}.preinstall-page .state-badge.state-open{background:#e8fff3;color:#17c653}.preinstall-page .state-badge.state-approvalPending{background:#fff8dd;color:#f6c000}.preinstall-page .state-badge.state-approved{background:#e8fff3;color:#17c653}.preinstall-page .state-panel .state-box{border:1px solid #e9ecef;border-radius:8px;padding:16px 20px;opacity:0;transform:translateY(4px);animation:preinstallFade .25s ease forwards}.preinstall-page .state-panel .state-box.state-box-danger{border-color:#ffd6e1;background:#fff9fb}.preinstall-page .state-panel .state-box.state-box-success{border-color:#c8f2d8;background:#f6fffa}.preinstall-page .version-list .version-row{padding:10px 0;border-bottom:1px dashed #e9ecef}.preinstall-page .version-list .version-row:last-child{border-bottom:none}.preinstall-page .detail-grid .detail-row{display:flex;justify-content:space-between;gap:12px;padding:7px 0;border-bottom:1px dashed #f1f3f5;font-size:13px}.preinstall-page .detail-grid .detail-row:last-child{border-bottom:none}.preinstall-page .activity-list{max-height:420px;overflow-y:auto}.preinstall-page .activity-list .activity-row{display:flex;gap:10px;padding:8px 0}.preinstall-page .activity-list .activity-row .activity-dot{width:8px;height:8px;border-radius:50%;background:#1b84ff;margin-top:6px;flex-shrink:0}@keyframes preinstallFade{to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion: reduce){.preinstall-page .state-panel .state-box{animation:none;opacity:1;transform:none}}.preinstall-page .bi-arrow-clockwise{display:inline-block;line-height:1}.preinstall-page .bi-arrow-clockwise:before{display:inline-block;transform-origin:50% 50%}.preinstall-page .bi-arrow-clockwise.spinning:before{animation:preinstallSpin .8s linear infinite}@keyframes preinstallSpin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.preinstall-page .bi-arrow-clockwise.spinning:before{animation:none}}\n"] }]
|
|
190
|
+
}], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.TicketsService }, { type: i3.ToastService }] });
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlaW5zdGFsbGF0aW9uLWluZm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tdGlja2V0LXVzZXIvc3JjL2xpYi9jb21wb25lbnRzL3ByZWluc3RhbGxhdGlvbi1pbmZvL3ByZWluc3RhbGxhdGlvbi1pbmZvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXRpY2tldC11c2VyL3NyYy9saWIvY29tcG9uZW50cy9wcmVpbnN0YWxsYXRpb24taW5mby9wcmVpbnN0YWxsYXRpb24taW5mby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7OztBQUkxQzs7Ozs7Ozs7Ozs7O0dBWUc7QUFNSCxNQUFNLE9BQU8sNEJBQTRCO0lBbUI3QjtJQUNBO0lBQ0E7SUFDQTtJQXJCVixRQUFRLENBQWdCO0lBQ3hCLE9BQU8sQ0FBZ0I7SUFDdkIsVUFBVSxDQUFNO0lBQ2hCLE9BQU8sQ0FBTTtJQUNiLFNBQVMsQ0FBTTtJQUNmLHlEQUF5RDtJQUN6RCxTQUFTLEdBQVEsSUFBSSxDQUFDO0lBQ3RCLFFBQVEsR0FBUSxFQUFFLENBQUM7SUFDbkIsT0FBTyxHQUFZLElBQUksQ0FBQztJQUN4QixXQUFXLEdBQVksS0FBSyxDQUFDO0lBQzdCLDRFQUE0RTtJQUM1RSxTQUFTLEdBQVksS0FBSyxDQUFDO0lBQzNCLFNBQVMsR0FBVyxFQUFFLENBQUM7SUFDdkIsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUVULFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBRTFDLFlBQ1UsS0FBcUIsRUFDckIsTUFBYyxFQUNkLE9BQXVCLEVBQ3ZCLFlBQTBCO1FBSDFCLFVBQUss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VyxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtTQUN2RCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSTtRQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdEYsQ0FBQzt3R0F6S1UsNEJBQTRCOzRGQUE1Qiw0QkFBNEIsZ0VDeEJ6QyxreVZBNExBOzs0RkRwS2EsNEJBQTRCO2tCQUx4QyxTQUFTOytCQUNFLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcbmltcG9ydCB7IFRpY2tldHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGlja2V0LWluZnJhLnNlcnZpY2UnO1xuXG4vKipcbiAqIFByZS1JbnN0YWxsYXRpb24gdGlja2V0IGRldGFpbCBwYWdlICh3b3Jrc3BhY2UgZW50cnkgZm9yIFRFX1BSRSB0aWNrZXRzKS5cbiAqIFNhbWUgcm9sZSBhcyBJbnN0YWxsYXRpb25Db21wb25lbnQgZm9yIFRFX0lOUyB0aWNrZXRzOiB0aGUgdGlja2V0IGhlYWRlciArXG4gKiBhY3Rpdml0eSB0cmFpbCBjb21lIGZyb20gdGhlIHRpY2tldHMgQVBJLCB0aGUgTElWRSBjYW1lcmEtcGxhY2VtZW50IHN0YXRlXG4gKiBjb21lcyBmcm9tIHRoZSBzdG9yZS1idWlsZGVyIENDVFYgcm93LCBhbmQgdGhlIHBhZ2UgZ2F0ZXMgdGhlIG5leHQgc3RlcDpcbiAqICAgYXV0b1BsYWNlbWVudCAgLT4gXCJBdXRvIHBsYWNlbWVudCBpbiBwcm9ncmVzc1wiLCBlZGl0b3IgbG9ja2VkLCBzb3VyY2UgcHJldmlld1xuICogICBmYWlsZWQgICAgICAgICAtPiBmYWlsdXJlIHJlYXNvbiArIFJldHJ5XG4gKiAgIG9wZW4gICAgICAgICAgIC0+IFwiT3BlbiBEWEYgZWRpdG9yXCIgKGFzc2lnbmVlIGdhdGVkIHNlcnZlci1zaWRlKVxuICogICBhcHByb3ZhbFBlbmRpbmctPiB3YWl0aW5nIGZvciBhcHByb3ZhbCwgZHJhd2luZyB2aWV3YWJsZVxuICogICBhcHByb3ZlZCAgICAgICAtPiBkb25lICh0aWNrZXQgY2xvc2VzIHZpYSB0aGUgYXBwcm92ZSBob29rKVxuICogTG9hZGluZyB0aGUgQ0NUViBkZXRhaWwgYWxzbyB0cmlnZ2VycyB0aGUgc2VydmVyLXNpZGUgT1MgcmVjb25jaWxlLCBzbyB0aGlzXG4gKiBwYWdlIGtlZXBzIHRoZSByb3cgZnJlc2gsIHRoZSBqb2IgdGhlIENDVFYgdGFibGUgdXNlZCB0byBkby5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXByZWluc3RhbGxhdGlvbi1pbmZvJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ByZWluc3RhbGxhdGlvbi1pbmZvLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3ByZWluc3RhbGxhdGlvbi1pbmZvLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgUHJlaW5zdGFsbGF0aW9uSW5mb0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgdGlja2V0SWQ6IHN0cmluZyB8IG51bGw7XG4gIHN0b3JlSWQ6IHN0cmluZyB8IG51bGw7XG4gIHRpY2tldEluZm86IGFueTtcbiAgY2N0dlJvdzogYW55O1xuICBjY3R2Rmxvb3I6IGFueTtcbiAgLyoqIGxpdmUgcGxhY2VtZW50IHN0YXRlIHN0cmFpZ2h0IG9mZiB0aGUgc3RhdHVzIGluZGV4ICovXG4gIHBsYWNlbWVudDogYW55ID0gbnVsbDtcbiAgZmlsZVVybHM6IGFueSA9IHt9O1xuICBsb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgY2N0dkxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIFJlZnJlc2ggY2xpY2tlZCBhbmQgdGhlIHRpY2tldCByZWxvYWQgaXMgc3RpbGwgaW4gZmxpZ2h0IChpY29uIHR1cm5zKSAqL1xuICByZWxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2N0dkVycm9yOiBzdHJpbmcgPSAnJztcbiAgcmV0cnlpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgc2VydmljZTogVGlja2V0c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy50aWNrZXRJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCd0aWNrZXRJZCcpO1xuICAgIHRoaXMuc3RvcmVJZCA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdzdG9yZUlkJyk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnZpZXdUaWNrZXQoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBnZXQgZmxvb3JJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRpY2tldEluZm8/LnByZUluc3RhbGxhdGlvbj8uZmxvb3JJZCB8fCAnJztcbiAgfVxuXG4gIGdldCBmbG9vck51bWJlcigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnRpY2tldEluZm8/LnByZUluc3RhbGxhdGlvbj8uZmxvb3JOdW1iZXIgfHwgJy0nO1xuICB9XG5cbiAgLyoqIFByZXNpZ25lZCBsaW5rIHRvIHRoZSBpbXBvcnRlZCBkcmF3aW5nICh2MSksIGZyb20gdGhlIGRldGFpbCBjYWxsJ3MgdXJsIG1hcC4gKi9cbiAgZ2V0IHNvdXJjZUR4ZlVybCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmNjdHZSb3c/LnNvdXJjZUtleTtcbiAgICByZXR1cm4ga2V5ID8gdGhpcy5maWxlVXJscz8uW2tleV0gfHwgbnVsbCA6IG51bGw7XG4gIH1cblxuICBnZXQgc291cmNlRHhmTmFtZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGtleTogc3RyaW5nID0gdGhpcy5jY3R2Um93Py5zb3VyY2VLZXkgfHwgJyc7XG4gICAgcmV0dXJuIGtleS5zcGxpdCgnLycpLnBvcCgpIHx8ICdzb3VyY2UuZHhmJztcbiAgfVxuXG4gIC8vIFRoZSBwYWdlJ3Mgc2luZ2xlIHN0YXRlIHN3aXRjaCwgZGVyaXZlZCBmcm9tIHRpY2tldCArIGxpdmUgQ0NUViByb3cuXG4gIGdldCBwbGFjZW1lbnRTdGF0ZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnRpY2tldEluZm8/LnN0YXR1cyA9PT0gJ2Nsb3NlZCcpIHJldHVybiAnYXBwcm92ZWQnO1xuICAgIGlmICghdGhpcy5mbG9vcklkKSByZXR1cm4gJ3dhaXRpbmdMYXlvdXQnO1xuICAgIGlmICghdGhpcy5jY3R2Um93KSByZXR1cm4gdGhpcy5jY3R2RXJyb3IgPyAndW5hdmFpbGFibGUnIDogJ2xvYWRpbmcnO1xuXG4gICAgLy8gVGhlIHN0YXR1cyBpbmRleCBvd25zIHRoZSBwbGFjZW1lbnQgaGFsZjogcXVldWVkIGFuZCBydW5uaW5nIGJvdGggcmVhZFxuICAgIC8vIGFzIFwiaW4gcHJvZ3Jlc3NcIiwgYW5kIGEgZmFpbHVyZSBjYXJyaWVzIGl0cyByZWFzb24uIE9uY2UgdGhlIHBsYWNlbWVudFxuICAgIC8vIGlzIGRvbmUgdGhlIHdvcmtmbG93IHJvdyB0YWtlcyBvdmVyIChvcGVuIHwgYXBwcm92YWxQZW5kaW5nIHwgYXBwcm92ZWQpLlxuICAgIGNvbnN0IGpvYlN0YXR1cyA9IHRoaXMucGxhY2VtZW50Py5zdGF0dXM7XG4gICAgaWYgKGpvYlN0YXR1cyA9PT0gJ3BlbmRpbmcnIHx8IGpvYlN0YXR1cyA9PT0gJ3Byb2Nlc3NpbmcnKSByZXR1cm4gJ3Byb2Nlc3NpbmcnO1xuICAgIGlmIChqb2JTdGF0dXMgPT09ICdmYWlsZWQnKSByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgaWYgKHRoaXMuY2N0dlJvdy5zdGF0dXMgPT09ICdhdXRvUGxhY2VtZW50JykgcmV0dXJuICdwcm9jZXNzaW5nJztcbiAgICByZXR1cm4gdGhpcy5jY3R2Um93LnN0YXR1cztcbiAgfVxuXG4gIGdldCB2ZXJzaW9ucygpOiBhbnlbXSB7XG4gICAgY29uc3QgZmlsZXMgPSBBcnJheS5pc0FycmF5KHRoaXMuY2N0dlJvdz8uZmlsZXMpID8gWy4uLnRoaXMuY2N0dlJvdy5maWxlc10gOiBbXTtcbiAgICByZXR1cm4gZmlsZXMuc29ydCgoYSwgYikgPT4gKGI/LnZlcnNpb24gPz8gMCkgLSAoYT8udmVyc2lvbiA/PyAwKSk7XG4gIH1cblxuICBnZXQgYWN0aXZpdHkoKTogYW55W10ge1xuICAgIGNvbnN0IGxpc3QgPSBBcnJheS5pc0FycmF5KHRoaXMudGlja2V0SW5mbz8udGlja2V0QWN0aXZpdHkpID8gWy4uLnRoaXMudGlja2V0SW5mby50aWNrZXRBY3Rpdml0eV0gOiBbXTtcbiAgICByZXR1cm4gbGlzdC5yZXZlcnNlKCk7XG4gIH1cblxuICB2aWV3VGlja2V0KCk6IHZvaWQge1xuICAgIHRoaXMuc2VydmljZS52aWV3VGlja2V0KHsgdGlja2V0SWQ6IHRoaXMudGlja2V0SWQgfSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnJlbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XG4gICAgICAgICAgICB0aGlzLnRpY2tldEluZm8gPSByZXMuZGF0YTtcbiAgICAgICAgICAgIGlmICh0aGlzLmZsb29ySWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkQ2N0dkRldGFpbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnJlbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoJ1VuYWJsZSB0byBsb2FkIHRoZSB0aWNrZXQuJyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIGxvYWRDY3R2RGV0YWlsKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5mbG9vcklkKSByZXR1cm47XG4gICAgdGhpcy5jY3R2TG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5jY3R2RXJyb3IgPSAnJztcbiAgICB0aGlzLnNlcnZpY2UuZ2V0Q2N0dkRldGFpbCh0aGlzLmZsb29ySWQpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5jY3R2TG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuY2N0dlJvdyA9IHJlcz8uZGF0YT8ucm93IHx8IG51bGw7XG4gICAgICAgICAgdGhpcy5jY3R2Rmxvb3IgPSByZXM/LmRhdGE/LmZsb29yIHx8IG51bGw7XG4gICAgICAgICAgdGhpcy5maWxlVXJscyA9IHJlcz8uZGF0YT8udXJscyB8fCB7fTtcbiAgICAgICAgICB0aGlzLnBsYWNlbWVudCA9IHJlcz8uZGF0YT8ucGxhY2VtZW50IHx8IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jY3R2TG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuY2N0dkVycm9yID0gJ1VuYWJsZSB0byBsb2FkIHRoZSBjYW1lcmEgcGxhY2VtZW50IHN0YXR1cy4nO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICByZWZyZXNoKCk6IHZvaWQge1xuICAgIHRoaXMucmVsb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnZpZXdUaWNrZXQoKTtcbiAgfVxuXG4gIHJldHJ5UGxhY2VtZW50KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5mbG9vcklkIHx8IHRoaXMucmV0cnlpbmcpIHJldHVybjtcbiAgICB0aGlzLnJldHJ5aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnNlcnZpY2UuY2N0dlJldHJ5KHsgZmxvb3JJZDogdGhpcy5mbG9vcklkIH0pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5yZXRyeWluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdChcbiAgICAgICAgICAgIHJlcz8uZGF0YT8uc3RhcnRlZE5vdyA/XG4gICAgICAgICAgICAgICdBdXRvIHBsYWNlbWVudCBpcyBydW5uaW5nIGFnYWluLicgOlxuICAgICAgICAgICAgICAnUXVldWVkIGZvciBhdXRvIHBsYWNlbWVudC4gSXQgd2lsbCBzdGFydCBvbiB0aGUgbmV4dCBydW4uJyxcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMubG9hZENjdHZEZXRhaWwoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnJldHJ5aW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdCgnVW5hYmxlIHRvIHJldHJ5LiBQbGVhc2UgdHJ5IGFnYWluLicpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICBvcGVuRWRpdG9yKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5mbG9vcklkKSByZXR1cm47XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbWFuYWdlL3BsYW5vZ3JhbS9jY3R2LWVkaXRvciddLCB7XG4gICAgICBxdWVyeVBhcmFtczogeyBmbG9vcklkOiB0aGlzLmZsb29ySWQsIG1vZGU6ICdlZGl0JyB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIFRoZSBzb3VyY2UgZHJhd2luZywgcmVhZC1vbmx5LCB3aGlsZSBhdXRvIHBsYWNlbWVudCBpcyBzdGlsbCBydW5uaW5nLiAqL1xuICBvcGVuUHJldmlldygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZmxvb3JJZCkgcmV0dXJuO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS9wbGFub2dyYW0vY2N0di1wcmV2aWV3J10sIHtcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7IGZsb29ySWQ6IHRoaXMuZmxvb3JJZCwgZnJvbTogJ3RpY2tldCcgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGJhY2soKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvdGlja2V0cy91c2VycyddLCB7IHF1ZXJ5UGFyYW1zOiB7IHR5cGU6ICdpbnN0YWxsYXRpb24nIH0gfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWQgcC01IHByZWluc3RhbGwtcGFnZVwiPlxuXG4gIDwhLS0gSGVhZGVyIC0tPlxuICA8ZGl2IGNsYXNzPVwiY2FyZCBtYi01XCI+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBkLWZsZXggZmxleC13cmFwIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBnYXAtNCBweS00XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtNFwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0IGJhY2stYnRuXCIgKGNsaWNrKT1cImJhY2soKVwiIGFyaWEtbGFiZWw9XCJCYWNrIHRvIHdvcmtzcGFjZVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktYXJyb3ctbGVmdFwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cbiAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1iLTBcIj57eyB0aWNrZXRJbmZvPy50aWNrZXRJZCB8fCB0aWNrZXRJZCB9fTwvaDQ+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIHN0YXRlLWJhZGdlXCIgW25nQ2xhc3NdPVwiJ3N0YXRlLScgKyBwbGFjZW1lbnRTdGF0ZVwiPlxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIHBsYWNlbWVudFN0YXRlID09PSAnd2FpdGluZ0xheW91dCcgPyAnV2FpdGluZyBmb3IgbGF5b3V0JyA6XG4gICAgICAgICAgICAgICAgcGxhY2VtZW50U3RhdGUgPT09ICdwcm9jZXNzaW5nJyA/ICdBdXRvIHBsYWNlbWVudCBpbiBwcm9ncmVzcycgOlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudFN0YXRlID09PSAnZmFpbGVkJyA/ICdQbGFjZW1lbnQgZmFpbGVkJyA6XG4gICAgICAgICAgICAgICAgcGxhY2VtZW50U3RhdGUgPT09ICdvcGVuJyA/ICdSZWFkeSBmb3IgcGxhY2VtZW50IHJldmlldycgOlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudFN0YXRlID09PSAnYXBwcm92YWxQZW5kaW5nJyA/ICdXYWl0aW5nIGZvciBhcHByb3ZhbCcgOlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudFN0YXRlID09PSAnYXBwcm92ZWQnID8gJ0FwcHJvdmVkJyA6XG4gICAgICAgICAgICAgICAgcGxhY2VtZW50U3RhdGUgPT09ICd1bmF2YWlsYWJsZScgPyAnU3RhdHVzIHVuYXZhaWxhYmxlJyA6ICdMb2FkaW5nJ1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZzLTcgbXQtMVwiPlxuICAgICAgICAgICAgUHJlLUluc3RhbGxhdGlvbiwgY2FtZXJhIHBsYWNlbWVudFxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0aWNrZXRJbmZvPy5iYXNpY0RldGFpbHM/LnN0b3JlTmFtZVwiPiwge3sgdGlja2V0SW5mbz8uYmFzaWNEZXRhaWxzPy5zdG9yZU5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj4sIEZsb29yIHt7IGZsb29yTnVtYmVyIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodCByb3ctYnRuXCIgKGNsaWNrKT1cInJlZnJlc2goKVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktYXJyb3ctY2xvY2t3aXNlIG1lLTFcIiBbY2xhc3Muc3Bpbm5pbmddPVwicmVsb2FkaW5nIHx8IGNjdHZMb2FkaW5nXCI+PC9pPlJlZnJlc2hcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cImxvYWRpbmdcIiBjbGFzcz1cInRleHQtY2VudGVyIHB5LTEwIHRleHQtbXV0ZWRcIj5Mb2FkaW5nIHRpY2tldC4uLjwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCIhbG9hZGluZyAmJiB0aWNrZXRJbmZvXCIgY2xhc3M9XCJyb3cgZy01XCI+XG5cbiAgICA8IS0tIFBsYWNlbWVudCBzdGF0ZSAvIGFjdGlvbiBwYW5lbCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1sZy03XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBoLTEwMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZCBtYi00XCI+XG4gICAgICAgICAgICA8aDUgY2xhc3M9XCJtYi0wXCI+Q2FtZXJhIHBsYWNlbWVudDwvaDU+XG4gICAgICAgICAgICA8IS0tIFRoZSBpbXBvcnRlZCBkcmF3aW5nIGl0c2VsZiwgZm9yIHRoZSBpbnRlcm5hbCB0ZWFtIHRvIGluc3BlY3QgaW5cbiAgICAgICAgICAgICAgICAgQ0FEIHdoZW4gdGhlIGVuZ2luZSBjYW5ub3QgaGFuZGxlIGl0IG9yIGJlZm9yZSBlZGl0aW5nLiAtLT5cbiAgICAgICAgICAgIDxhICpuZ0lmPVwic291cmNlRHhmVXJsXCIgW2hyZWZdPVwic291cmNlRHhmVXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXJcIlxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0IHJvdy1idG5cIiBbbmdiVG9vbHRpcF09XCJzb3VyY2VEeGZOYW1lXCI+XG4gICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgM3YxMm0wIDAgNC00bS00IDQtNC00TTQgMTd2MmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJ2LTJcIlxuICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS44XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMVwiPkRvd25sb2FkIHNvdXJjZSBEWEY8L3NwYW4+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJwbGFjZW1lbnRTdGF0ZVwiIGNsYXNzPVwic3RhdGUtcGFuZWxcIj5cblxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ3dhaXRpbmdMYXlvdXQnXCIgY2xhc3M9XCJzdGF0ZS1ib3hcIj5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xIGZ3LXNlbWlib2xkXCI+V2FpdGluZyBmb3IgdGhlIENBRCBsYXlvdXQuPC9wPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbXV0ZWQgbWItMFwiPlRoZSBzdG9yZSdzIGZsb29yIGRyYXdpbmcgaGFzIG5vdCBiZWVuIGltcG9ydGVkIHlldC4gQXV0byBwbGFjZW1lbnQgc3RhcnRzIHJpZ2h0IGFmdGVyIHRoZSBDQUQgaW1wb3J0LjwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCIncHJvY2Vzc2luZydcIiBjbGFzcz1cInN0YXRlLWJveFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMyBtYi0xXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbSB0ZXh0LXByaW1hcnlcIiByb2xlPVwic3RhdHVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBmdy1zZW1pYm9sZFwiPkF1dG8gY2FtZXJhIHBsYWNlbWVudCBpcyBydW5uaW5nLjwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1tdXRlZCBtYi0zXCI+VGhlIERYRiBlZGl0b3IgdW5sb2NrcyB3aGVuIHBsYWNlbWVudCBjb21wbGV0ZXMuIFVzZSBSZWZyZXNoIHRvIGNoZWNrIGFnYWluLiBNZWFud2hpbGUgeW91IGNhbiBsb29rIGF0IHRoZSBzb3VyY2UgZHJhd2luZy48L3A+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQgcm93LWJ0blwiIChjbGljayk9XCJvcGVuUHJldmlldygpXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1leWUgbWUtMVwiPjwvaT5WaWV3IHNvdXJjZSBkcmF3aW5nXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidmYWlsZWQnXCIgY2xhc3M9XCJzdGF0ZS1ib3ggc3RhdGUtYm94LWRhbmdlclwiPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTEgZnctc2VtaWJvbGRcIj5BdXRvIHBsYWNlbWVudCBmYWlsZWQuPC9wPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbXV0ZWQgbWItM1wiPnt7IHBsYWNlbWVudD8uZXJyb3JNc2cgfHwgY2N0dlJvdz8uZXJyb3JNc2cgfHwgJ1RoZSBwbGFjZW1lbnQgZW5naW5lIHJlcG9ydGVkIGEgZmFpbHVyZS4nIH19PC9wPlxuICAgICAgICAgICAgICA8IS0tIFJldHJ5IGhpZGRlbiB1bnRpbCB0aGUgYXV0b1BsYWNlIExhbWJkYSBleGlzdHMgKExBTUJEQVVSTC5hdXRvUGxhY2UgaXMgZW1wdHkpLlxuICAgICAgICAgICAgICAgICAgIFJlLWVuYWJsZSBieSByZW1vdmluZyB0aGlzIGNvbW1lbnQ7IHJldHJ5UGxhY2VtZW50KCkgaXMgc3RpbGwgd2lyZWQgaW4gdGhlIGNvbXBvbmVudC5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5IHJvdy1idG5cIiBbZGlzYWJsZWRdPVwicmV0cnlpbmdcIiAoY2xpY2spPVwicmV0cnlQbGFjZW1lbnQoKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicmV0cnlpbmdcIiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHNwaW5uZXItYm9yZGVyLXNtIG1lLTJcIiByb2xlPVwic3RhdHVzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIHt7IHJldHJ5aW5nID8gJ1JldHJ5aW5nLi4uJyA6ICdSZXRyeSBhdXRvIHBsYWNlbWVudCcgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIC0tPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidvcGVuJ1wiIGNsYXNzPVwic3RhdGUtYm94XCI+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMSBmdy1zZW1pYm9sZFwiPlRoZSBkcmF3aW5nIGlzIHJlYWR5IGZvciBjYW1lcmEgcmV2aWV3LjwvcD5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LW11dGVkIG1iLTNcIj5cbiAgICAgICAgICAgICAgICBBZGp1c3QgdGhlIGF1dG8tcGxhY2VkIGNhbWVyYXMgaW4gdGhlIERYRiBlZGl0b3IsIHRoZW4gc3VibWl0IGZvciBhcHByb3ZhbC5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNjdHZSb3c/LmlzUmV3b3JrXCIgY2xhc3M9XCJ0ZXh0LXdhcm5pbmcgZnctc2VtaWJvbGRcIj5UaGlzIGZsb29yIHdhcyBzZW50IGJhY2sgZm9yIHJld29yay48L3NwYW4+XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5IHJvdy1idG5cIiAoY2xpY2spPVwib3BlbkVkaXRvcigpXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1wZW5jaWwtc3F1YXJlIG1lLTFcIj48L2k+T3BlbiBEWEYgZWRpdG9yXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidhcHByb3ZhbFBlbmRpbmcnXCIgY2xhc3M9XCJzdGF0ZS1ib3hcIj5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xIGZ3LXNlbWlib2xkXCI+U3VibWl0dGVkLCB3YWl0aW5nIGZvciBhcHByb3ZhbC48L3A+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1tdXRlZCBtYi0zXCI+VGhlIGFwcHJvdmFsIHRlYW0gcmV2aWV3cyBpdCBmcm9tIHRoZSBvbmJvYXJkIHRhYmxlLiBZb3UgY2FuIHN0aWxsIHZpZXcgdGhlIGRyYXdpbmcuPC9wPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0IHJvdy1idG5cIiAoY2xpY2spPVwib3BlbkVkaXRvcigpXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1leWUgbWUtMVwiPjwvaT5WaWV3IGRyYXdpbmdcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2FwcHJvdmVkJ1wiIGNsYXNzPVwic3RhdGUtYm94IHN0YXRlLWJveC1zdWNjZXNzXCI+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMSBmdy1zZW1pYm9sZFwiPkNhbWVyYSBwbGFjZW1lbnQgYXBwcm92ZWQuPC9wPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbXV0ZWQgbWItMFwiPlRoaXMgdGlja2V0IGlzIGNsb3NlZC4gVGhlIGluc3RhbGxhdGlvbiB0aWNrZXQgdGFrZXMgb3ZlciBvbmNlIGV2ZXJ5IGZsb29yIG9mIHRoZSBzdG9yZSBpcyBhcHByb3ZlZC48L3A+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ3VuYXZhaWxhYmxlJ1wiIGNsYXNzPVwic3RhdGUtYm94IHN0YXRlLWJveC1kYW5nZXJcIj5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xIGZ3LXNlbWlib2xkXCI+UGxhY2VtZW50IHN0YXR1cyB1bmF2YWlsYWJsZS48L3A+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1tdXRlZCBtYi0zXCI+e3sgY2N0dkVycm9yIH19PC9wPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0IHJvdy1idG5cIiAoY2xpY2spPVwibG9hZENjdHZEZXRhaWwoKVwiPlRyeSBhZ2FpbjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoRGVmYXVsdCBjbGFzcz1cInN0YXRlLWJveFwiPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbXV0ZWQgbWItMFwiPkxvYWRpbmcgcGxhY2VtZW50IHN0YXR1cy4uLjwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBWZXJzaW9uIHRpbWVsaW5lIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJ2ZXJzaW9ucy5sZW5ndGhcIiBjbGFzcz1cIm10LTZcIj5cbiAgICAgICAgICAgIDxoNiBjbGFzcz1cInRleHQtbXV0ZWQgbWItM1wiPkRyYXdpbmcgdmVyc2lvbnM8L2g2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZlcnNpb24tbGlzdFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmVyc2lvbi1yb3cgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiICpuZ0Zvcj1cImxldCBmaWxlIG9mIHZlcnNpb25zXCI+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnctc2VtaWJvbGRcIj52e3sgZmlsZS52ZXJzaW9uIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkIG1zLTIgZnMtN1wiPnt7IGZpbGUua2luZCA9PT0gJ2F1dG8nID8gJ0F1dG8gcGxhY2VtZW50JyA6IGZpbGUua2luZCA9PT0gJ2FwcHJvdmVyJyA/ICdBcHByb3ZlciBlZGl0JyA6ICdJbnRlcm5hbCBlZGl0JyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZCBtcy0yIGZzLTdcIiAqbmdJZj1cImZpbGUuY2FtZXJhQ291bnQgIT0gbnVsbFwiPnt7IGZpbGUuY2FtZXJhQ291bnQgfX0gY2FtZXJhczwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtM1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkIGZzLTdcIj57eyBmaWxlLnVwbG9hZGVkQXQgfCBkYXRlOiAnZGQgTU1NLCB5IEhIOm1tJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwiZmlsZVVybHNbZmlsZS5rZXldXCIgW2hyZWZdPVwiZmlsZVVybHNbZmlsZS5rZXldXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXJcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0IHJvdy1idG5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1kb3dubG9hZFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gVGlja2V0IGluZm8gKyBhY3Rpdml0eSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1sZy01XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtYi01XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICA8aDUgY2xhc3M9XCJtYi00XCI+VGlja2V0IGRldGFpbHM8L2g1PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWwtZ3JpZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbC1yb3dcIj48c3BhbiBjbGFzcz1cInRleHQtbXV0ZWRcIj5TdG9yZTwvc3Bhbj48c3Bhbj57eyB0aWNrZXRJbmZvPy5iYXNpY0RldGFpbHM/LnN0b3JlTmFtZSB8fCAnLScgfX0gKHt7IHRpY2tldEluZm8/LmJhc2ljRGV0YWlscz8uc3RvcmVJZCB8fCBzdG9yZUlkIH19KTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWwtcm93XCI+PHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCI+QnJhbmQ8L3NwYW4+PHNwYW4+e3sgdGlja2V0SW5mbz8uYmFzaWNEZXRhaWxzPy5jbGllbnROYW1lIHx8ICctJyB9fTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWwtcm93XCI+PHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkXCI+Rmxvb3I8L3NwYW4+PHNwYW4+Rmxvb3Ige3sgZmxvb3JOdW1iZXIgfX08L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGV0YWlsLXJvd1wiPjxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZFwiPlRpY2tldCBzdGF0dXM8L3NwYW4+PHNwYW4gY2xhc3M9XCJ0ZXh0LWNhcGl0YWxpemVcIj57eyB0aWNrZXRJbmZvPy5zdGF0dXMgfHwgJy0nIH19PC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbC1yb3dcIj48c3BhbiBjbGFzcz1cInRleHQtbXV0ZWRcIj5DcmVhdGVkPC9zcGFuPjxzcGFuPnt7IHRpY2tldEluZm8/LmNyZWF0ZWRBdCB8IGRhdGU6ICdkZCBNTU0sIHkgSEg6bW0nIH19PC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbC1yb3dcIiAqbmdJZj1cImNjdHZSb3c/LmFzc2lnbmVlTmFtZVwiPjxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZFwiPkFzc2lnbmVlPC9zcGFuPjxzcGFuPnt7IGNjdHZSb3c/LmFzc2lnbmVlTmFtZSB9fTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWwtcm93XCIgKm5nSWY9XCJjY3R2Um93Py5yZXdvcmtDb3VudFwiPjxzcGFuIGNsYXNzPVwidGV4dC1tdXRlZFwiPlJld29yayBjb3VudDwvc3Bhbj48c3Bhbj57eyBjY3R2Um93Py5yZXdvcmtDb3VudCB9fTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgIDxoNSBjbGFzcz1cIm1iLTRcIj5BY3Rpdml0eTwvaDU+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIiFhY3Rpdml0eS5sZW5ndGhcIiBjbGFzcz1cInRleHQtbXV0ZWQgZnMtN1wiPk5vIGFjdGl2aXR5IHlldC48L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aXZpdHktbGlzdFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGl2aXR5LXJvd1wiICpuZ0Zvcj1cImxldCBlbnRyeSBvZiBhY3Rpdml0eVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aXZpdHktZG90XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZnctc2VtaWJvbGQgZnMtN1wiPnt7IGVudHJ5LmRlc2NyaXB0aW9uIHx8IGVudHJ5LmFjdGlvblR5cGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWQgZnMtOCB0ZXh0LW5vd3JhcFwiPnt7IGVudHJ5LnRpbWVTdGFtcCB8IGRhdGU6ICdkZCBNTU0sIEhIOm1tJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmcy04XCIgKm5nSWY9XCJlbnRyeS5jb21tZW50XCI+e3sgZW50cnkuY29tbWVudCB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZzLThcIiAqbmdJZj1cImVudHJ5LklkZW50aWZpZWRCeSAmJiBlbnRyeS5JZGVudGlmaWVkQnkgIT09ICdUYW5nbydcIj5ieSB7eyBlbnRyeS5JZGVudGlmaWVkQnkgfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -20,6 +20,7 @@ export class TicketsService {
|
|
|
20
20
|
metricsApiUrl;
|
|
21
21
|
zoneauditApiUrl;
|
|
22
22
|
traxauditApiUrl;
|
|
23
|
+
storeBuilderUrl;
|
|
23
24
|
constructor(http, gs) {
|
|
24
25
|
this.http = http;
|
|
25
26
|
this.gs = gs;
|
|
@@ -33,6 +34,7 @@ export class TicketsService {
|
|
|
33
34
|
this.metricsApiUrl = env.auditmetricApiUrl;
|
|
34
35
|
this.zoneauditApiUrl = env.zoneauditApiUrl;
|
|
35
36
|
this.traxauditApiUrl = env.traxauditApiUrl;
|
|
37
|
+
this.storeBuilderUrl = env.storeBuilderUrl;
|
|
36
38
|
}
|
|
37
39
|
this.gs.dataRangeValue.subscribe((e) => {
|
|
38
40
|
if (e) {
|
|
@@ -86,6 +88,16 @@ export class TicketsService {
|
|
|
86
88
|
viewTicket(data) {
|
|
87
89
|
return this.http.post(`${this.ticketApiUrl}/infra/viewTicket`, data, {}).pipe(map((response) => response), catchError(this.handleError));
|
|
88
90
|
}
|
|
91
|
+
// Pre-installation tickets: live CCTV placement state for the ticket's floor
|
|
92
|
+
// (store-builder API; access = allowlist OR the ticket assignee).
|
|
93
|
+
getCctvDetail(floorId) {
|
|
94
|
+
return this.http.get(`${this.storeBuilderUrl}/onboardPlano/cctv/detail`, {
|
|
95
|
+
params: { floorId },
|
|
96
|
+
}).pipe(map((response) => response), catchError(this.handleError));
|
|
97
|
+
}
|
|
98
|
+
cctvRetry(data) {
|
|
99
|
+
return this.http.post(`${this.storeBuilderUrl}/onboardPlano/cctv/retry`, data, {}).pipe(map((response) => response), catchError(this.handleError));
|
|
100
|
+
}
|
|
89
101
|
getCameraList(data) {
|
|
90
102
|
return this.http.post(`${this.edgeAppApiUrl}/getCameraImage`, data, {}).pipe(map((response) => response), catchError(this.handleError));
|
|
91
103
|
}
|
|
@@ -180,4 +192,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
180
192
|
providedIn: 'root'
|
|
181
193
|
}]
|
|
182
194
|
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.GlobalStateService }] });
|
|
183
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlja2V0LWluZnJhLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby10aWNrZXQtdXNlci9zcmMvbGliL3NlcnZpY2VzL3RpY2tldC1pbmZyYS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFjLFVBQVUsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFDLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7OztBQU8vRSxNQUFNLE9BQU8sY0FBYztJQWtCTDtJQUEwQjtJQWhCOUMsWUFBWSxDQUFNO0lBQ2xCLFdBQVcsQ0FBTTtJQUNqQixJQUFJLENBQU07SUFDVixPQUFPLENBQU07SUFDYixZQUFZLENBQU07SUFDbEIsYUFBYSxDQUFNO0lBQ25CLFlBQVksQ0FBTztJQUVuQixRQUFRLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUE7SUFDMUMsVUFBVSxHQUFHLElBQUksZUFBZSxDQUFNLElBQUksQ0FBQyxDQUFBO0lBQzNDLFdBQVcsQ0FBTTtJQUNqQixXQUFXLEdBQUcsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7SUFDN0MsYUFBYSxDQUFNO0lBQ25CLGVBQWUsQ0FBSztJQUNwQixlQUFlLENBQUs7SUFFcEIsWUFBb0IsSUFBZ0IsRUFBVSxFQUFzQjtRQUFoRCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7UUFDbEUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDcEMsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFBO2dCQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxXQUFXLENB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VyxPQUFPLEVBQUUsTUFBTSxZQUFZLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQTtRQUNqZCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVE7UUFDbkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLGVBQWUsRUFBQyxJQUFJLENBQUMsQ0FBQTtJQUNoRSxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVywyQkFBMkIsQ0FBQyxDQUFBO0lBQ3RFLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLFVBQVUsRUFBRSxFQUNuRCxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQ3RCLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDakUsT0FBTyxRQUFRLENBQUE7UUFDbkIsQ0FBQyxDQUFDLEVBQ0UsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7d0dBdlBZLGNBQWM7NEdBQWQsY0FBYyxjQUZiLE1BQU07OzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgY2F0Y2hFcnJvciwgbWFwLCB0aHJvd0Vycm9yLEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktZ2xvYmFsJztcclxuXHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUaWNrZXRzU2VydmljZSB7XHJcblxyXG4gIHRpY2tldEFwaVVybDogYW55O1xyXG4gIHN0b3JlQXBpVXJsOiBhbnk7XHJcbiAgZGF0YTogYW55O1xyXG4gIHVzZXJVcmw6IGFueTtcclxuICB0b2tlblN0b3JhZ2U6IGFueTtcclxuICBlZGdlQXBwQXBpVXJsOiBhbnk7XHJcbiAgY2xpZW50QXBpVXJsOnN0cmluZ1xyXG5cclxuICBjbGllbnRJZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJylcclxuICBjbGllbnREYXRhID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpXHJcbiAgYXVkaXRBcGlVcmw6IGFueTtcclxuICBkYXRhU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcclxuICBtZXRyaWNzQXBpVXJsOiBhbnk7XHJcbiAgem9uZWF1ZGl0QXBpVXJsOmFueTtcclxuICB0cmF4YXVkaXRBcGlVcmw6YW55O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSkge1xyXG4gICAgdGhpcy5ncy5lbnZpcm9ubWVudC5zdWJzY3JpYmUoKGVudikgPT4ge1xyXG4gICAgICBpZiAoZW52KSB7XHJcbiAgICAgICAgdGhpcy50aWNrZXRBcGlVcmwgPSBlbnYudGlja2V0c0FwaVVybFxyXG4gICAgICAgIHRoaXMuc3RvcmVBcGlVcmwgPSBlbnYuc3RvcmVBcGlVcmw7XHJcbiAgICAgICAgdGhpcy51c2VyVXJsID0gZW52LnVzZXJVcmw7XHJcbiAgICAgICAgdGhpcy5lZGdlQXBwQXBpVXJsID0gZW52LmVkZ2VBcHBBcGlVcmw7XHJcbiAgICAgICAgdGhpcy5hdWRpdEFwaVVybCA9IGVudi5hdWRpdEFwaVVybDtcclxuICAgICAgICB0aGlzLm1ldHJpY3NBcGlVcmwgPSBlbnYuYXVkaXRtZXRyaWNBcGlVcmw7XHJcbiAgICAgICAgdGhpcy56b25lYXVkaXRBcGlVcmw9IGVudi56b25lYXVkaXRBcGlVcmw7XHJcbiAgICAgICAgdGhpcy50cmF4YXVkaXRBcGlVcmwgPSBlbnYudHJheGF1ZGl0QXBpVXJsO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUuc3Vic2NyaWJlKChlOmFueSk9PnsgICAgICBcclxuICAgICAgICBpZihlKXtcclxuICAgICAgICAgIHRoaXMuY2xpZW50SWQubmV4dChlLmNsaWVudClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICB1c2VyVGlja2V0TGlzdChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy50aWNrZXRBcGlVcmx9L3VzZXJJbmZyYS91c2VyVGlja2V0TGlzdGAsIGRhdGEsIHtcclxuICAgIH0pLnBpcGUoXHJcbiAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4gcmVzcG9uc2UpLFxyXG4gICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICApO1xyXG4gIH1cclxuICBleHBvcnR1c2VyVGlja2V0TGlzdChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudGlja2V0QXBpVXJsfS91c2VySW5mcmEvdXNlclRpY2tldExpc3RgLCBkYXRhLCB7IHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyB9KVxyXG4gIH1cclxuICB1c2VyVGFrZVRpY2tldChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy50aWNrZXRBcGlVcmx9L3VzZXJJbmZyYS91c2VyVGFrZVRpY2tldGAsIGRhdGEsIHtcclxuICAgIH0pLnBpcGUoXHJcbiAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4gcmVzcG9uc2UpLFxyXG4gICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBwcmltYXJ5UmVhc29uKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke3RoaXMudGlja2V0QXBpVXJsfS9pbmZyYS9QcmltYXJ5UmVhc29uc2AsIHtcclxuICAgIH0pLnBpcGUoXHJcbiAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4gcmVzcG9uc2UpLFxyXG4gICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBzZWNvbmRhcnlSZWFzb24oZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMudGlja2V0QXBpVXJsfS9pbmZyYS9zZWNvbmRhcnlSZWFzb25gLCBkYXRhLCB7XHJcbiAgICB9KS5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHJlc3BvbnNlKSxcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKSlcclxuICB9XHJcblxyXG4gIGVkZ2VBcHBMb2dUYWJsZShkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudGlja2V0QXBpVXJsfS9zdG9yZUluZnJhL2VkZ2VBcHBMb2dUYWJsZWAsIGRhdGEpXHJcblxyXG4gIH1cclxuXHJcbiAgZWRnZUFwcExvZ1RhYmxlRXhwb3J0KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50aWNrZXRBcGlVcmx9L3N0b3JlSW5mcmEvZWRnZUFwcExvZ1RhYmxlYCwgZGF0YSwgeyByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicgfSlcclxuXHJcbiAgfVxyXG5cclxuICB1cGxvYWRBdHRhY2htZW50cyh0aWNrZXRJZDogYW55LCBmb3JtRGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMudGlja2V0QXBpVXJsfS9pbmZyYS91cGxvYWRBdHRhY2htZW50cy8ke3RpY2tldElkfWAsIGZvcm1EYXRhKVxyXG4gIH1cclxuICByZW1vdmVBdHRhY2htZW50KHRpY2tldElkOiBhbnksIGRhdGE6IGFueSl7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChgJHt0aGlzLnRpY2tldEFwaVVybH0vaW5mcmEvcmVtb3ZlQXR0YWNobWVudC8ke3RpY2tldElkfWAsIGRhdGEpXHJcbiAgfVxyXG4gIHZpZXdlZGdlQXBwTG9nKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50aWNrZXRBcGlVcmx9L3N0b3JlSW5mcmEvdmlld2VkZ2VBcHBMb2dgLCBkYXRhKVxyXG5cclxuICB9XHJcbiAgdXBkYXRlVGlja2V0KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLnRpY2tldEFwaVVybH0vaW5mcmEvdXBkYXRlVGlja2V0SXNzdWVgLCBkYXRhLCB7XHJcbiAgICB9KS5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHJlc3BvbnNlKSxcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgc3RvcmVUaWNrZXRjYXJkKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50aWNrZXRBcGlVcmx9L3N0b3JlSW5mcmEvc3RvcmVUaWNrZXRjYXJkYCwgZGF0YSlcclxuICB9XHJcblxyXG4gIHN0b3JlVGlja2V0TGlzdChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy50aWNrZXRBcGlVcmx9L3N0b3JlSW5mcmEvc3RvcmVUaWNrZXRMaXN0YCwgZGF0YSwge1xyXG4gICAgfSkucGlwZShcclxuICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiByZXNwb25zZSksXHJcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgIClcclxuICB9XHJcblxyXG4gIHN0b3JlVGlja2V0TGlzdEV4cG9ydChkYXRhOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLnRpY2tldEFwaVVybH0vc3RvcmVJbmZyYS9zdG9yZVRpY2tldExpc3RgLCBkYXRhLCB7IHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyB9KVxyXG4gIH1cclxuICB2aWV3VGlja2V0KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLnRpY2tldEFwaVVybH0vaW5mcmEvdmlld1RpY2tldGAsIGRhdGEsIHtcclxuICAgIH0pLnBpcGUoXHJcbiAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4gcmVzcG9uc2UpLFxyXG4gICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICApXHJcbiAgfVxyXG4gIGdldENhbWVyYUxpc3QoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuZWRnZUFwcEFwaVVybH0vZ2V0Q2FtZXJhSW1hZ2VgLCBkYXRhLCB7XHJcbiAgICB9KS5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHJlc3BvbnNlKSxcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgKVxyXG4gIH1cclxuICBzdGF0dXNVcGRhdGUoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMudGlja2V0QXBpVXJsfS9pbmZyYS91cGRhdGVTdGF0dXNgLCBkYXRhLCB7XHJcbiAgICB9KS5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHJlc3BvbnNlKSxcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgd29ya0hpc3RvcnkoZGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLnRpY2tldEFwaVVybH0vdXNlckluZnJhL3dvcmtIaXN0b3J5YCwgZGF0YSwge1xyXG4gICAgfSkucGlwZShcclxuICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiByZXNwb25zZSksXHJcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgIClcclxuICB9XHJcblxyXG4gIHdvcmtIaXN0b3J5RXhwb3J0KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50aWNrZXRBcGlVcmx9L3VzZXJJbmZyYS93b3JrSGlzdG9yeWAsIGRhdGEsIHsgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInIH0pXHJcbiAgfVxyXG5cclxuICBnZXRTcG9jTG9nRGF0YShkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuc3RvcmVBcGlVcmx9L2dldC1zcG9jLWxpc3RgLCBkYXRhKVxyXG5cclxuICB9XHJcblxyXG4gIGNhbWVyYUFuZ2xlQ2hhbmdlKGRhdGE6IGFueSk6T2JzZXJ2YWJsZTxhbnk+e1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudGlja2V0QXBpVXJsfS9zdG9yZUluZnJhL2NhbWVyYUFuZ2xlQ2hhbmdlYCxkYXRhKVxyXG4gIH1cclxuICBjYW1lcmFMaXN0KHN0b3JlSWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5lZGdlQXBwQXBpVXJsfS9nZXRBbGxDYW1lcmFTdHJlYW1EYXRhP3N0b3JlSWQ9JHtzdG9yZUlkfWApXHJcbiAgfVxyXG4gIGFkZFNpbmdsZVNwb2MoaWQ6IGFueSwgZGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5zdG9yZUFwaVVybH0vY3JlYXRlLXNwb2MvJHtpZH1gLCBkYXRhKVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlU3BvYyhpZDogYW55LCBkYXRhOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLnN0b3JlQXBpVXJsfS91cGRhdGUtc3BvYy8ke2lkfWAsIGRhdGEpXHJcbiAgfVxyXG5cclxuICBkZWxldGVTcG9jKGlkOiBhbnksIGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuc3RvcmVBcGlVcmx9L2RlbGV0ZS1zcG9jLyR7aWR9YCwgZGF0YSlcclxuICB9XHJcblxyXG4gIGdldFJlbW90ZShpZDogYW55LCBkYXRhOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKHtkYXRhOmRhdGEsIGlkOmlkfSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5zdG9yZUFwaVVybH0vZ2V0LXN0b3JlLyR7aWR9YCwgZGF0YSlcclxuICB9XHJcblxyXG4gIHVwZGF0ZVJlbW90ZShpZDogYW55LCBkYXRhOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuc3RvcmVBcGlVcmx9L3VwZGF0ZS1zdG9yZS8ke2lkfWAsIGRhdGEpXHJcbiAgfVxyXG5cclxuICBhY3RpdmVUaWNrZXQoZGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50aWNrZXRBcGlVcmx9L3VzZXJJbmZyYS9hY3RpdmVUaWNrZXRMaXN0YCwgZGF0YSlcclxuICB9XHJcblxyXG4gIGdldENhbWVyYUltYWdlcyhwYXJhbXM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmVkZ2VBcHBBcGlVcmx9L2dldEFsbENhbWVyYVN0cmVhbURhdGFgLCB7IHBhcmFtczogcGFyYW1zIH0pXHJcbiAgfVxyXG5cclxuICB1cGRhdGVTdG9yZShpZDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuZWRnZUFwcEFwaVVybH0vdXBkYXRlU3RvcmVJc3N1ZS8ke2lkfWAsIHtcclxuICAgIH0pLnBpcGUoXHJcbiAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4gcmVzcG9uc2UpLFxyXG4gICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICApXHJcbiAgfVxyXG4gIGdldEFsbENvdW50cyhkYXRhOmFueSl7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLnRpY2tldEFwaVVybH0vdXNlckluZnJhL3BlbmRpbmdUaWNrZXRgLCBkYXRhKVxyXG4gIH1cclxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSk6IE9ic2VydmFibGU8bmV2ZXI+IHtcclxuICAgIHJldHVybiB0aHJvd0Vycm9yKFxyXG4gICAgICAoKSA9PiBuZXcgRXJyb3IoXCJTb21ldGhpbmcgYmFkIGhhcHBlbmVkOyBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyXCIpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbi8vIGF1ZGl0IGNvZGVcclxuXHJcbmF1ZGl0SGlzdG9yeShkYXRhOmFueSx0eXBlOmFueSl7XHJcbiAgbGV0IHVybCA9IHR5cGUgPT09J2F1ZGl0Jz8gdGhpcy5hdWRpdEFwaVVybCA6IHRoaXMudHJheGF1ZGl0QXBpVXJsXHJcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3VybH0vbWV0cmljcy91c2VyLWF1ZGl0LWhpc3RvcnlgLGRhdGEpXHJcbn1cclxuXHJcbmF1ZGl0SGlzdG9yeUV4cG9ydChkYXRhOmFueSx0eXBlOmFueSl7XHJcbiAgbGV0IHVybCA9IHR5cGUgPT09J2F1ZGl0Jz8gdGhpcy5hdWRpdEFwaVVybCA6IHRoaXMudHJheGF1ZGl0QXBpVXJsXHJcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3VybH0vbWV0cmljcy91c2VyLWF1ZGl0LWhpc3RvcnlgLGRhdGEse3Jlc3BvbnNlVHlwZTonYXJyYXlidWZmZXInfSlcclxufVxyXG5cclxuZXhwb3J0KHBheWxvYWQ6YW55LHR5cGU6YW55KSB7XHJcbiAgbGV0IHVybCA9IHR5cGUgPT09J2F1ZGl0Jz8gdGhpcy5hdWRpdEFwaVVybCA6IHRoaXMudHJheGF1ZGl0QXBpVXJsXHJcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3VybH0vd29yay1zcGFjZWAscGF5bG9hZCwge3Jlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ30pXHJcbn1cclxuXHJcbmdldEF1ZGl0KHBheWxvYWQ6YW55LHR5cGU6YW55KSB7XHJcbiAgbGV0IHVybCA9IHR5cGUgPT09J2F1ZGl0Jz8gdGhpcy5hdWRpdEFwaVVybCA6IHRoaXMudHJheGF1ZGl0QXBpVXJsXHJcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3VybH0vd29yay1zcGFjZWAscGF5bG9hZClcclxufVxyXG5cclxuZ2V0QXVkaXRtYXBwaW5nbGlzdChwYXlsb2FkOmFueSkge1xyXG4gICBsZXQgdXJsID0gWyd0cmFmZmljJywnem9uZSddLmluY2x1ZGVzKHBheWxvYWQ/Lm1vZHVsZVR5cGUpID8gYCR7dGhpcy5hdWRpdEFwaVVybH0vZ2V0LWRyYWZ0ZWQtZGF0YT9maWxlRGF0ZT0ke3BheWxvYWQ/LmZpbGVEYXRlfSZzdG9yZUlkPSR7cGF5bG9hZD8uc3RvcmVJZH0mem9uZU5hbWU9JHtwYXlsb2FkPy56b25lTmFtZX0mbW9kdWxlVHlwZT0ke3BheWxvYWQ/Lm1vZHVsZVR5cGV9JnVzZXJJZD0ke3BheWxvYWQ/LnVzZXJJZH0mYXVkaXRJZD0ke3BheWxvYWQ/LmF1ZGl0SWR9YCA6IGAke3RoaXMudHJheGF1ZGl0QXBpVXJsfS9nZXQtZHJhZnRlZC1kYXRhP2ZpbGVEYXRlPSR7cGF5bG9hZD8uZmlsZURhdGV9JnN0b3JlSWQ9JHtwYXlsb2FkPy5zdG9yZUlkfSZtb2R1bGVUeXBlPSR7cGF5bG9hZD8ubW9kdWxlVHlwZX0mdXNlcklkPSR7cGF5bG9hZD8udXNlcklkfSZhdWRpdElkPSR7cGF5bG9hZD8uYXVkaXRJZH1gXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt1cmx9YClcclxufVxyXG5cclxuZ2V0c3RvcmVMaXN0KGRhdGE6YW55KXtcclxuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5hdWRpdEFwaVVybH0vYXVkaXQtc3RvcmVzYCxkYXRhKVxyXG59XHJcblxyXG5nZXRUb3RhbEF1ZGl0Y291bnQoKXtcclxuICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmF1ZGl0QXBpVXJsfS90b3RhbC1ub3QtYXNzaWduZWQtY291bnRgKVxyXG59XHJcblxyXG51c2VyRGV0YWlscygpIHtcclxuICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmF1ZGl0QXBpVXJsfS9hdXRoL21lYCwge1xyXG4gIH0pLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndXNlci1pbmZvJywgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YSkpO1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXHJcbiAgICAgIH0pLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKSk7XHJcbn1cclxuXHJcblxyXG5cclxufVxyXG4iXX0=
|
|
195
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlja2V0LWluZnJhLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby10aWNrZXQtdXNlci9zcmMvbGliL3NlcnZpY2VzL3RpY2tldC1pbmZyYS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFjLFVBQVUsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFDLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7OztBQU8vRSxNQUFNLE9BQU8sY0FBYztJQW1CTDtJQUEwQjtJQWpCOUMsWUFBWSxDQUFNO0lBQ2xCLFdBQVcsQ0FBTTtJQUNqQixJQUFJLENBQU07SUFDVixPQUFPLENBQU07SUFDYixZQUFZLENBQU07SUFDbEIsYUFBYSxDQUFNO0lBQ25CLFlBQVksQ0FBTztJQUVuQixRQUFRLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUE7SUFDMUMsVUFBVSxHQUFHLElBQUksZUFBZSxDQUFNLElBQUksQ0FBQyxDQUFBO0lBQzNDLFdBQVcsQ0FBTTtJQUNqQixXQUFXLEdBQUcsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7SUFDN0MsYUFBYSxDQUFNO0lBQ25CLGVBQWUsQ0FBSztJQUNwQixlQUFlLENBQUs7SUFDcEIsZUFBZSxDQUFNO0lBRXJCLFlBQW9CLElBQWdCLEVBQVUsRUFBc0I7UUFBaEQsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUFVLE9BQUUsR0FBRixFQUFFLENBQW9CO1FBQ2xFLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3BDLElBQUksR0FBRyxFQUFFO2dCQUNQLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQTtnQkFDckMsSUFBSSxDQUFDLFdBQVcsR0FBRyxH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QUFBO0lBQ3RFLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLFVBQVUsRUFBRSxFQUNuRCxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQ3RCLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDakUsT0FBTyxRQUFRLENBQUE7UUFDbkIsQ0FBQyxDQUFDLEVBQ0UsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7d0dBMVFZLGNBQWM7NEdBQWQsY0FBYyxjQUZiLE1BQU07OzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgY2F0Y2hFcnJvciwgbWFwLCB0aHJvd0Vycm9yLEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktZ2xvYmFsJztcclxuXHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUaWNrZXRzU2VydmljZSB7XHJcblxyXG4gIHRpY2tldEFwaVVybDogYW55O1xyXG4gIHN0b3JlQXBpVXJsOiBhbnk7XHJcbiAgZGF0YTogYW55O1xyXG4gIHVzZXJVcmw6IGFueTtcclxuICB0b2tlblN0b3JhZ2U6IGFueTtcclxuICBlZGdlQXBwQXBpVXJsOiBhbnk7XHJcbiAgY2xpZW50QXBpVXJsOnN0cmluZ1xyXG5cclxuICBjbGllbnRJZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJylcclxuICBjbGllbnREYXRhID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpXHJcbiAgYXVkaXRBcGlVcmw6IGFueTtcclxuICBkYXRhU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcclxuICBtZXRyaWNzQXBpVXJsOiBhbnk7XHJcbiAgem9uZWF1ZGl0QXBpVXJsOmFueTtcclxuICB0cmF4YXVkaXRBcGlVcmw6YW55O1xyXG4gIHN0b3JlQnVpbGRlclVybDogYW55O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSkge1xyXG4gICAgdGhpcy5ncy5lbnZpcm9ubWVudC5zdWJzY3JpYmUoKGVudikgPT4ge1xyXG4gICAgICBpZiAoZW52KSB7XHJcbiAgICAgICAgdGhpcy50aWNrZXRBcGlVcmwgPSBlbnYudGlja2V0c0FwaVVybFxyXG4gICAgICAgIHRoaXMuc3RvcmVBcGlVcmwgPSBlbnYuc3RvcmVBcGlVcmw7XHJcbiAgICAgICAgdGhpcy51c2VyVXJsID0gZW52LnVzZXJVcmw7XHJcbiAgICAgICAgdGhpcy5lZGdlQXBwQXBpVXJsID0gZW52LmVkZ2VBcHBBcGlVcmw7XHJcbiAgICAgICAgdGhpcy5hdWRpdEFwaVVybCA9IGVudi5hdWRpdEFwaVVybDtcclxuICAgICAgICB0aGlzLm1ldHJpY3NBcGlVcmwgPSBlbnYuYXVkaXRtZXRyaWNBcGlVcmw7XHJcbiAgICAgICAgdGhpcy56b25lYXVkaXRBcGlVcmw9IGVudi56b25lYXVkaXRBcGlVcmw7XHJcbiAgICAgICAgdGhpcy50cmF4YXVkaXRBcGlVcmwgPSBlbnYudHJheGF1ZGl0QXBpVXJsO1xyXG4gICAgICAgIHRoaXMuc3RvcmVCdWlsZGVyVXJsID0gZW52LnN0b3JlQnVpbGRlclVybDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLnN1YnNjcmliZSgoZTphbnkpPT57ICAgICAgXHJcbiAgICAgICAgaWYoZSl7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkLm5leHQoZS5jbGllbnQpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgdXNlclRpY2tldExpc3QoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMudGlja2V0QXBpVXJsfS91c2VySW5mcmEvdXNlclRpY2tldExpc3RgLCBkYXRhLCB7XHJcbiAgICB9KS5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHJlc3BvbnNlKSxcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgKTtcclxuICB9XHJcbiAgZXhwb3J0dXNlclRpY2tldExpc3QoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLnRpY2tldEFwaVVybH0vdXNlckluZnJhL3VzZXJUaWNrZXRMaXN0YCwgZGF0YSwgeyByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicgfSlcclxuICB9XHJcbiAgdXNlclRha2VUaWNrZXQoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMudGlja2V0QXBpVXJsfS91c2VySW5mcmEvdXNlclRha2VUaWNrZXRgLCBkYXRhLCB7XHJcbiAgICB9KS5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHJlc3BvbnNlKSxcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgcHJpbWFyeVJlYXNvbihkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHt0aGlzLnRpY2tldEFwaVVybH0vaW5mcmEvUHJpbWFyeVJlYXNvbnNgLCB7XHJcbiAgICB9KS5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHJlc3BvbnNlKSxcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgc2Vjb25kYXJ5UmVhc29uKGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLnRpY2tldEFwaVVybH0vaW5mcmEvc2Vjb25kYXJ5UmVhc29uYCwgZGF0YSwge1xyXG4gICAgfSkucGlwZShcclxuICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiByZXNwb25zZSksXHJcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcikpXHJcbiAgfVxyXG5cclxuICBlZGdlQXBwTG9nVGFibGUoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLnRpY2tldEFwaVVybH0vc3RvcmVJbmZyYS9lZGdlQXBwTG9nVGFibGVgLCBkYXRhKVxyXG5cclxuICB9XHJcblxyXG4gIGVkZ2VBcHBMb2dUYWJsZUV4cG9ydChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudGlja2V0QXBpVXJsfS9zdG9yZUluZnJhL2VkZ2VBcHBMb2dUYWJsZWAsIGRhdGEsIHsgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgdXBsb2FkQXR0YWNobWVudHModGlja2V0SWQ6IGFueSwgZm9ybURhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChgJHt0aGlzLnRpY2tldEFwaVVybH0vaW5mcmEvdXBsb2FkQXR0YWNobWVudHMvJHt0aWNrZXRJZH1gLCBmb3JtRGF0YSlcclxuICB9XHJcbiAgcmVtb3ZlQXR0YWNobWVudCh0aWNrZXRJZDogYW55LCBkYXRhOiBhbnkpe1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy50aWNrZXRBcGlVcmx9L2luZnJhL3JlbW92ZUF0dGFjaG1lbnQvJHt0aWNrZXRJZH1gLCBkYXRhKVxyXG4gIH1cclxuICB2aWV3ZWRnZUFwcExvZyhkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudGlja2V0QXBpVXJsfS9zdG9yZUluZnJhL3ZpZXdlZGdlQXBwTG9nYCwgZGF0YSlcclxuXHJcbiAgfVxyXG4gIHVwZGF0ZVRpY2tldChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy50aWNrZXRBcGlVcmx9L2luZnJhL3VwZGF0ZVRpY2tldElzc3VlYCwgZGF0YSwge1xyXG4gICAgfSkucGlwZShcclxuICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiByZXNwb25zZSksXHJcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgIClcclxuICB9XHJcblxyXG4gIHN0b3JlVGlja2V0Y2FyZChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudGlja2V0QXBpVXJsfS9zdG9yZUluZnJhL3N0b3JlVGlja2V0Y2FyZGAsIGRhdGEpXHJcbiAgfVxyXG5cclxuICBzdG9yZVRpY2tldExpc3QoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMudGlja2V0QXBpVXJsfS9zdG9yZUluZnJhL3N0b3JlVGlja2V0TGlzdGAsIGRhdGEsIHtcclxuICAgIH0pLnBpcGUoXHJcbiAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4gcmVzcG9uc2UpLFxyXG4gICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBzdG9yZVRpY2tldExpc3RFeHBvcnQoZGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50aWNrZXRBcGlVcmx9L3N0b3JlSW5mcmEvc3RvcmVUaWNrZXRMaXN0YCwgZGF0YSwgeyByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcicgfSlcclxuICB9XHJcbiAgdmlld1RpY2tldChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy50aWNrZXRBcGlVcmx9L2luZnJhL3ZpZXdUaWNrZXRgLCBkYXRhLCB7XHJcbiAgICB9KS5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHJlc3BvbnNlKSxcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgKVxyXG4gIH1cclxuICAvLyBQcmUtaW5zdGFsbGF0aW9uIHRpY2tldHM6IGxpdmUgQ0NUViBwbGFjZW1lbnQgc3RhdGUgZm9yIHRoZSB0aWNrZXQncyBmbG9vclxyXG4gIC8vIChzdG9yZS1idWlsZGVyIEFQSTsgYWNjZXNzID0gYWxsb3dsaXN0IE9SIHRoZSB0aWNrZXQgYXNzaWduZWUpLlxyXG4gIGdldENjdHZEZXRhaWwoZmxvb3JJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5zdG9yZUJ1aWxkZXJVcmx9L29uYm9hcmRQbGFuby9jY3R2L2RldGFpbGAsIHtcclxuICAgICAgcGFyYW1zOiB7IGZsb29ySWQgfSxcclxuICAgIH0pLnBpcGUoXHJcbiAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4gcmVzcG9uc2UpLFxyXG4gICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICApXHJcbiAgfVxyXG4gIGNjdHZSZXRyeShkYXRhOiB7IGZsb29ySWQ6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuc3RvcmVCdWlsZGVyVXJsfS9vbmJvYXJkUGxhbm8vY2N0di9yZXRyeWAsIGRhdGEsIHtcclxuICAgIH0pLnBpcGUoXHJcbiAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4gcmVzcG9uc2UpLFxyXG4gICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICApXHJcbiAgfVxyXG4gIGdldENhbWVyYUxpc3QoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuZWRnZUFwcEFwaVVybH0vZ2V0Q2FtZXJhSW1hZ2VgLCBkYXRhLCB7XHJcbiAgICB9KS5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHJlc3BvbnNlKSxcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgKVxyXG4gIH1cclxuICBzdGF0dXNVcGRhdGUoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMudGlja2V0QXBpVXJsfS9pbmZyYS91cGRhdGVTdGF0dXNgLCBkYXRhLCB7XHJcbiAgICB9KS5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHJlc3BvbnNlKSxcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgd29ya0hpc3RvcnkoZGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLnRpY2tldEFwaVVybH0vdXNlckluZnJhL3dvcmtIaXN0b3J5YCwgZGF0YSwge1xyXG4gICAgfSkucGlwZShcclxuICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiByZXNwb25zZSksXHJcbiAgICAgIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcilcclxuICAgIClcclxuICB9XHJcblxyXG4gIHdvcmtIaXN0b3J5RXhwb3J0KGRhdGE6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50aWNrZXRBcGlVcmx9L3VzZXJJbmZyYS93b3JrSGlzdG9yeWAsIGRhdGEsIHsgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInIH0pXHJcbiAgfVxyXG5cclxuICBnZXRTcG9jTG9nRGF0YShkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuc3RvcmVBcGlVcmx9L2dldC1zcG9jLWxpc3RgLCBkYXRhKVxyXG5cclxuICB9XHJcblxyXG4gIGNhbWVyYUFuZ2xlQ2hhbmdlKGRhdGE6IGFueSk6T2JzZXJ2YWJsZTxhbnk+e1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMudGlja2V0QXBpVXJsfS9zdG9yZUluZnJhL2NhbWVyYUFuZ2xlQ2hhbmdlYCxkYXRhKVxyXG4gIH1cclxuICBjYW1lcmFMaXN0KHN0b3JlSWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5lZGdlQXBwQXBpVXJsfS9nZXRBbGxDYW1lcmFTdHJlYW1EYXRhP3N0b3JlSWQ9JHtzdG9yZUlkfWApXHJcbiAgfVxyXG4gIGFkZFNpbmdsZVNwb2MoaWQ6IGFueSwgZGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5zdG9yZUFwaVVybH0vY3JlYXRlLXNwb2MvJHtpZH1gLCBkYXRhKVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlU3BvYyhpZDogYW55LCBkYXRhOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLnN0b3JlQXBpVXJsfS91cGRhdGUtc3BvYy8ke2lkfWAsIGRhdGEpXHJcbiAgfVxyXG5cclxuICBkZWxldGVTcG9jKGlkOiBhbnksIGRhdGE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuc3RvcmVBcGlVcmx9L2RlbGV0ZS1zcG9jLyR7aWR9YCwgZGF0YSlcclxuICB9XHJcblxyXG4gIGdldFJlbW90ZShpZDogYW55LCBkYXRhOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKHtkYXRhOmRhdGEsIGlkOmlkfSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5zdG9yZUFwaVVybH0vZ2V0LXN0b3JlLyR7aWR9YCwgZGF0YSlcclxuICB9XHJcblxyXG4gIHVwZGF0ZVJlbW90ZShpZDogYW55LCBkYXRhOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KGAke3RoaXMuc3RvcmVBcGlVcmx9L3VwZGF0ZS1zdG9yZS8ke2lkfWAsIGRhdGEpXHJcbiAgfVxyXG5cclxuICBhY3RpdmVUaWNrZXQoZGF0YTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy50aWNrZXRBcGlVcmx9L3VzZXJJbmZyYS9hY3RpdmVUaWNrZXRMaXN0YCwgZGF0YSlcclxuICB9XHJcblxyXG4gIGdldENhbWVyYUltYWdlcyhwYXJhbXM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmVkZ2VBcHBBcGlVcmx9L2dldEFsbENhbWVyYVN0cmVhbURhdGFgLCB7IHBhcmFtczogcGFyYW1zIH0pXHJcbiAgfVxyXG5cclxuICB1cGRhdGVTdG9yZShpZDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke3RoaXMuZWRnZUFwcEFwaVVybH0vdXBkYXRlU3RvcmVJc3N1ZS8ke2lkfWAsIHtcclxuICAgIH0pLnBpcGUoXHJcbiAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4gcmVzcG9uc2UpLFxyXG4gICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IpXHJcbiAgICApXHJcbiAgfVxyXG4gIGdldEFsbENvdW50cyhkYXRhOmFueSl7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLnRpY2tldEFwaVVybH0vdXNlckluZnJhL3BlbmRpbmdUaWNrZXRgLCBkYXRhKVxyXG4gIH1cclxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSk6IE9ic2VydmFibGU8bmV2ZXI+IHtcclxuICAgIHJldHVybiB0aHJvd0Vycm9yKFxyXG4gICAgICAoKSA9PiBuZXcgRXJyb3IoXCJTb21ldGhpbmcgYmFkIGhhcHBlbmVkOyBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyXCIpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbi8vIGF1ZGl0IGNvZGVcclxuXHJcbmF1ZGl0SGlzdG9yeShkYXRhOmFueSx0eXBlOmFueSl7XHJcbiAgbGV0IHVybCA9IHR5cGUgPT09J2F1ZGl0Jz8gdGhpcy5hdWRpdEFwaVVybCA6IHRoaXMudHJheGF1ZGl0QXBpVXJsXHJcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3VybH0vbWV0cmljcy91c2VyLWF1ZGl0LWhpc3RvcnlgLGRhdGEpXHJcbn1cclxuXHJcbmF1ZGl0SGlzdG9yeUV4cG9ydChkYXRhOmFueSx0eXBlOmFueSl7XHJcbiAgbGV0IHVybCA9IHR5cGUgPT09J2F1ZGl0Jz8gdGhpcy5hdWRpdEFwaVVybCA6IHRoaXMudHJheGF1ZGl0QXBpVXJsXHJcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3VybH0vbWV0cmljcy91c2VyLWF1ZGl0LWhpc3RvcnlgLGRhdGEse3Jlc3BvbnNlVHlwZTonYXJyYXlidWZmZXInfSlcclxufVxyXG5cclxuZXhwb3J0KHBheWxvYWQ6YW55LHR5cGU6YW55KSB7XHJcbiAgbGV0IHVybCA9IHR5cGUgPT09J2F1ZGl0Jz8gdGhpcy5hdWRpdEFwaVVybCA6IHRoaXMudHJheGF1ZGl0QXBpVXJsXHJcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3VybH0vd29yay1zcGFjZWAscGF5bG9hZCwge3Jlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ30pXHJcbn1cclxuXHJcbmdldEF1ZGl0KHBheWxvYWQ6YW55LHR5cGU6YW55KSB7XHJcbiAgbGV0IHVybCA9IHR5cGUgPT09J2F1ZGl0Jz8gdGhpcy5hdWRpdEFwaVVybCA6IHRoaXMudHJheGF1ZGl0QXBpVXJsXHJcbiAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3VybH0vd29yay1zcGFjZWAscGF5bG9hZClcclxufVxyXG5cclxuZ2V0QXVkaXRtYXBwaW5nbGlzdChwYXlsb2FkOmFueSkge1xyXG4gICBsZXQgdXJsID0gWyd0cmFmZmljJywnem9uZSddLmluY2x1ZGVzKHBheWxvYWQ/Lm1vZHVsZVR5cGUpID8gYCR7dGhpcy5hdWRpdEFwaVVybH0vZ2V0LWRyYWZ0ZWQtZGF0YT9maWxlRGF0ZT0ke3BheWxvYWQ/LmZpbGVEYXRlfSZzdG9yZUlkPSR7cGF5bG9hZD8uc3RvcmVJZH0mem9uZU5hbWU9JHtwYXlsb2FkPy56b25lTmFtZX0mbW9kdWxlVHlwZT0ke3BheWxvYWQ/Lm1vZHVsZVR5cGV9JnVzZXJJZD0ke3BheWxvYWQ/LnVzZXJJZH0mYXVkaXRJZD0ke3BheWxvYWQ/LmF1ZGl0SWR9YCA6IGAke3RoaXMudHJheGF1ZGl0QXBpVXJsfS9nZXQtZHJhZnRlZC1kYXRhP2ZpbGVEYXRlPSR7cGF5bG9hZD8uZmlsZURhdGV9JnN0b3JlSWQ9JHtwYXlsb2FkPy5zdG9yZUlkfSZtb2R1bGVUeXBlPSR7cGF5bG9hZD8ubW9kdWxlVHlwZX0mdXNlcklkPSR7cGF5bG9hZD8udXNlcklkfSZhdWRpdElkPSR7cGF5bG9hZD8uYXVkaXRJZH1gXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt1cmx9YClcclxufVxyXG5cclxuZ2V0c3RvcmVMaXN0KGRhdGE6YW55KXtcclxuICByZXR1cm4gdGhpcy5odHRwLnBvc3QoYCR7dGhpcy5hdWRpdEFwaVVybH0vYXVkaXQtc3RvcmVzYCxkYXRhKVxyXG59XHJcblxyXG5nZXRUb3RhbEF1ZGl0Y291bnQoKXtcclxuICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmF1ZGl0QXBpVXJsfS90b3RhbC1ub3QtYXNzaWduZWQtY291bnRgKVxyXG59XHJcblxyXG51c2VyRGV0YWlscygpIHtcclxuICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmF1ZGl0QXBpVXJsfS9hdXRoL21lYCwge1xyXG4gIH0pLnBpcGUobWFwKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndXNlci1pbmZvJywgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YSkpO1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXHJcbiAgICAgIH0pLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKSk7XHJcbn1cclxuXHJcblxyXG5cclxufVxyXG4iXX0=
|
|
@@ -4,6 +4,7 @@ import { TangoTicketUsersComponent } from './components/tango-ticket-users/tango
|
|
|
4
4
|
import { InfraticketsComponent } from './components/infratickets/infratickets.component';
|
|
5
5
|
import { TicketsComponent } from './components/tickets/tickets.component';
|
|
6
6
|
import { InstallationComponent } from './components/installation/installation.component';
|
|
7
|
+
import { PreinstallationInfoComponent } from './components/preinstallation-info/preinstallation-info.component';
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
8
9
|
import * as i1 from "@angular/router";
|
|
9
10
|
const routes = [
|
|
@@ -28,6 +29,10 @@ const routes = [
|
|
|
28
29
|
{
|
|
29
30
|
path: 'installationinfo/:ticketId/:storeId',
|
|
30
31
|
component: InstallationComponent
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
path: 'preinstallationinfo/:ticketId/:storeId',
|
|
35
|
+
component: PreinstallationInfoComponent
|
|
31
36
|
}
|
|
32
37
|
];
|
|
33
38
|
export class TangoTicketUsersRoutingModule {
|
|
@@ -42,4 +47,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
42
47
|
exports: [RouterModule]
|
|
43
48
|
}]
|
|
44
49
|
}] });
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFuZ28tdGlja2V0LXVzZXJzLXJvdXRpbmcubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tdGlja2V0LXVzZXIvc3JjL2xpYi90YW5nby10aWNrZXQtdXNlcnMtcm91dGluZy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDekcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDekYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDekYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sa0VBQWtFLENBQUM7OztBQUVoSCxNQUFNLE1BQU0sR0FBVztJQUNyQjtRQUNFLElBQUksRUFBQyxFQUFFO1FBQ1AsU0FBUyxFQUFDLHlCQUF5QjtRQUNuQyxRQUFRLEVBQUM7WUFDUDtnQkFDRSxJQUFJLEVBQUMsRUFBRTtnQkFDUCxTQUFTLEVBQUMscUJBQXFCO2FBQ2hDO1NBQ0Y7S0FDRjtJQUNEO1FBQ0UsSUFBSSxFQUFDLDJCQUEyQjtRQUNoQyxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLHNDQUFzQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMseUJBQXlCLENBQUM7S0FDNUc7SUFDRDtRQUNFLElBQUksRUFBQywrQkFBK0I7UUFDcEMsU0FBUyxFQUFFLGdCQUFnQjtLQUM1QjtJQUNEO1FBQ0UsSUFBSSxFQUFDLHFDQUFxQztRQUMxQyxTQUFTLEVBQUUscUJBQXFCO0tBQ2pDO0lBQ0Q7UUFDRSxJQUFJLEVBQUMsd0NBQXdDO1FBQzdDLFNBQVMsRUFBRSw0QkFBNEI7S0FDeEM7Q0FDRixDQUFDO0FBTUYsTUFBTSxPQUFPLDZCQUE2Qjt3R0FBN0IsNkJBQTZCO3lHQUE3Qiw2QkFBNkIsd0NBRjlCLFlBQVk7eUdBRVgsNkJBQTZCLFlBSDlCLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQzdCLFlBQVk7OzRGQUVYLDZCQUE2QjtrQkFKekMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN4QyxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7aUJBQ3hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyTW9kdWxlLCBSb3V0ZXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUYW5nb1RpY2tldFVzZXJzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RhbmdvLXRpY2tldC11c2Vycy90YW5nby10aWNrZXQtdXNlcnMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSW5mcmF0aWNrZXRzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2luZnJhdGlja2V0cy9pbmZyYXRpY2tldHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGlja2V0c0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90aWNrZXRzL3RpY2tldHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSW5zdGFsbGF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2luc3RhbGxhdGlvbi9pbnN0YWxsYXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgUHJlaW5zdGFsbGF0aW9uSW5mb0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wcmVpbnN0YWxsYXRpb24taW5mby9wcmVpbnN0YWxsYXRpb24taW5mby5jb21wb25lbnQnO1xyXG5cclxuY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXHJcbiAge1xyXG4gICAgcGF0aDonJyxcclxuICAgIGNvbXBvbmVudDpUYW5nb1RpY2tldFVzZXJzQ29tcG9uZW50LFxyXG4gICAgY2hpbGRyZW46W1xyXG4gICAgICB7XHJcbiAgICAgICAgcGF0aDonJyxcclxuICAgICAgICBjb21wb25lbnQ6SW5mcmF0aWNrZXRzQ29tcG9uZW50XHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9LFxyXG4gIHtcclxuICAgIHBhdGg6J2luc3RhbGxhdGlvbmluZm8vZWRnZS1hcHAnLFxyXG4gICAgbG9hZENoaWxkcmVuOiAoKSA9PiBpbXBvcnQoJy4vcm91dGUtd3JhcHBlcnMvZWRnZS13cmFwcGVyLm1vZHVsZScpLnRoZW4oKG0pID0+IG0uVGFuZ29FZGdlQXBwV3JhcHBlck1vZHVsZSksXHJcbiAgfSxcclxuICB7XHJcbiAgICBwYXRoOid0aWNrZXRpbmZvLzp0aWNrZXRJZC86c3RvcmVJZCcsXHJcbiAgICBjb21wb25lbnQ6IFRpY2tldHNDb21wb25lbnRcclxuICB9LFxyXG4gIHtcclxuICAgIHBhdGg6J2luc3RhbGxhdGlvbmluZm8vOnRpY2tldElkLzpzdG9yZUlkJyxcclxuICAgIGNvbXBvbmVudDogSW5zdGFsbGF0aW9uQ29tcG9uZW50XHJcbiAgfSxcclxuICB7XHJcbiAgICBwYXRoOidwcmVpbnN0YWxsYXRpb25pbmZvLzp0aWNrZXRJZC86c3RvcmVJZCcsXHJcbiAgICBjb21wb25lbnQ6IFByZWluc3RhbGxhdGlvbkluZm9Db21wb25lbnRcclxuICB9XHJcbl07XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGltcG9ydHM6IFtSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQocm91dGVzKV0sXHJcbiAgZXhwb3J0czogW1JvdXRlck1vZHVsZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFRhbmdvVGlja2V0VXNlcnNSb3V0aW5nTW9kdWxlIHsgfVxyXG4iXX0=
|
|
@@ -20,10 +20,11 @@ import { DropdownComponent } from './components/dropdown/dropdown.component';
|
|
|
20
20
|
import { AuditManagementComponent } from './components/audit-management/audit-management.component';
|
|
21
21
|
import { AuditWorkspaceComponent } from './components/audit-workspace/audit-workspace.component';
|
|
22
22
|
import { ViewhistoryComponent } from './components/viewhistory/viewhistory.component';
|
|
23
|
+
import { PreinstallationInfoComponent } from './components/preinstallation-info/preinstallation-info.component';
|
|
23
24
|
import * as i0 from "@angular/core";
|
|
24
25
|
export class TangoTicketUsersModule {
|
|
25
26
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TangoTicketUsersModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
26
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: TangoTicketUsersModule, declarations: [TangoTicketUsersComponent, InfraticketsComponent, TicketsComponent, ContactDetailsComponent, EditDetailsComponent, TakeremoteComponent, StoreInfoComponent, EdgeappLogComponent, StoreActivityComponent, EdgeCameraviewComponent, InstallationComponent, DropdownComponent, AuditManagementComponent, AuditWorkspaceComponent, ViewhistoryComponent], imports: [CommonModule,
|
|
27
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: TangoTicketUsersModule, declarations: [TangoTicketUsersComponent, InfraticketsComponent, TicketsComponent, ContactDetailsComponent, EditDetailsComponent, TakeremoteComponent, StoreInfoComponent, EdgeappLogComponent, StoreActivityComponent, EdgeCameraviewComponent, InstallationComponent, DropdownComponent, AuditManagementComponent, AuditWorkspaceComponent, ViewhistoryComponent, PreinstallationInfoComponent], imports: [CommonModule,
|
|
27
28
|
TangoTicketUsersRoutingModule,
|
|
28
29
|
FormsModule,
|
|
29
30
|
CommonSharedModule,
|
|
@@ -43,7 +44,7 @@ export class TangoTicketUsersModule {
|
|
|
43
44
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TangoTicketUsersModule, decorators: [{
|
|
44
45
|
type: NgModule,
|
|
45
46
|
args: [{
|
|
46
|
-
declarations: [TangoTicketUsersComponent, InfraticketsComponent, TicketsComponent, ContactDetailsComponent, EditDetailsComponent, TakeremoteComponent, StoreInfoComponent, EdgeappLogComponent, StoreActivityComponent, EdgeCameraviewComponent, InstallationComponent, DropdownComponent, AuditManagementComponent, AuditWorkspaceComponent, ViewhistoryComponent],
|
|
47
|
+
declarations: [TangoTicketUsersComponent, InfraticketsComponent, TicketsComponent, ContactDetailsComponent, EditDetailsComponent, TakeremoteComponent, StoreInfoComponent, EdgeappLogComponent, StoreActivityComponent, EdgeCameraviewComponent, InstallationComponent, DropdownComponent, AuditManagementComponent, AuditWorkspaceComponent, ViewhistoryComponent, PreinstallationInfoComponent],
|
|
47
48
|
imports: [
|
|
48
49
|
CommonModule,
|
|
49
50
|
TangoTicketUsersRoutingModule,
|
|
@@ -56,4 +57,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
56
57
|
]
|
|
57
58
|
}]
|
|
58
59
|
}] });
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFuZ28tdGlja2V0LXVzZXJzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXRpY2tldC11c2VyL3NyYy9saWIvdGFuZ28tdGlja2V0LXVzZXJzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUN6RyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN4RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNsRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUNwRyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN0RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQzs7QUFnQmhILE1BQU0sT0FBTyxzQkFBc0I7d0dBQXRCLHNCQUFzQjt5R0FBdEIsc0JBQXNCLGlCQVpsQix5QkFBeUIsRUFBQyxxQkFBcUIsRUFBQyxnQkFBZ0IsRUFBQyx1QkFBdUIsRUFBQyxvQkFBb0IsRUFBQyxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSx3QkFBd0IsRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSw0QkFBNEIsYUFFelgsWUFBWTtZQUNaLDZCQUE2QjtZQUM3QixXQUFXO1lBQ1gsa0JBQWtCO1lBQ2xCLG1CQUFtQjtZQUNuQixjQUFjO1lBQ2QsU0FBUztZQUNULG9CQUFvQjt5R0FHWCxzQkFBc0IsWUFWL0IsWUFBWTtZQUNaLDZCQUE2QjtZQUM3QixXQUFXO1lBQ1gsa0JBQWtCO1lBQ2xCLG1CQUFtQjtZQUNuQixjQUFjO1lBQ2QsU0FBUztZQUNULG9CQUFvQjs7NEZBR1gsc0JBQXNCO2tCQWJsQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLHlCQUF5QixFQUFDLHFCQUFxQixFQUFDLGdCQUFnQixFQUFDLHVCQUF1QixFQUFDLG9CQUFvQixFQUFDLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLHNCQUFzQixFQUFFLHVCQUF1QixFQUFFLHFCQUFxQixFQUFFLGlCQUFpQixFQUFFLHdCQUF3QixFQUFFLHVCQUF1QixFQUFFLG9CQUFvQixFQUFFLDRCQUE0QixDQUFDO29CQUM1WCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWiw2QkFBNkI7d0JBQzdCLFdBQVc7d0JBQ1gsa0JBQWtCO3dCQUNsQixtQkFBbUI7d0JBQ25CLGNBQWM7d0JBQ2QsU0FBUzt3QkFDVCxvQkFBb0I7cUJBQ3JCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbmltcG9ydCB7IFRhbmdvVGlja2V0VXNlcnNSb3V0aW5nTW9kdWxlIH0gZnJvbSAnLi90YW5nby10aWNrZXQtdXNlcnMtcm91dGluZy5tb2R1bGUnO1xyXG5pbXBvcnQgeyBUYW5nb1RpY2tldFVzZXJzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RhbmdvLXRpY2tldC11c2Vycy90YW5nby10aWNrZXQtdXNlcnMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSW5mcmF0aWNrZXRzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2luZnJhdGlja2V0cy9pbmZyYXRpY2tldHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGlja2V0c0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90aWNrZXRzL3RpY2tldHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29udGFjdERldGFpbHNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY29udGFjdC1kZXRhaWxzL2NvbnRhY3QtZGV0YWlscy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFZGl0RGV0YWlsc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9lZGl0LWRldGFpbHMvZWRpdC1kZXRhaWxzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRha2VyZW1vdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFrZXJlbW90ZS90YWtlcmVtb3RlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuaW1wb3J0IHsgTmdiTW9kYWxNb2R1bGUsIE5nYk1vZHVsZSB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgU3RvcmVJbmZvQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3N0b3JlLWluZm8vc3RvcmUtaW5mby5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFZGdlYXBwTG9nQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2VkZ2VhcHAtbG9nL2VkZ2VhcHAtbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFN0b3JlQWN0aXZpdHlDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc3RvcmUtYWN0aXZpdHkvc3RvcmUtYWN0aXZpdHkuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRWRnZUNhbWVyYXZpZXdDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZWRnZS1jYW1lcmF2aWV3L2VkZ2UtY2FtZXJhdmlldy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBOZ3hEYXRlcmFuZ2VwaWNrZXJNZCB9IGZyb20gJ25neC1kYXRlcmFuZ2VwaWNrZXItbWF0ZXJpYWwnO1xyXG5pbXBvcnQgeyBDb21tb25TaGFyZWRNb2R1bGUgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcclxuaW1wb3J0IHsgSW5zdGFsbGF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2luc3RhbGxhdGlvbi9pbnN0YWxsYXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQXVkaXRNYW5hZ2VtZW50Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2F1ZGl0LW1hbmFnZW1lbnQvYXVkaXQtbWFuYWdlbWVudC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBdWRpdFdvcmtzcGFjZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hdWRpdC13b3Jrc3BhY2UvYXVkaXQtd29ya3NwYWNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFZpZXdoaXN0b3J5Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3ZpZXdoaXN0b3J5L3ZpZXdoaXN0b3J5LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFByZWluc3RhbGxhdGlvbkluZm9Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcHJlaW5zdGFsbGF0aW9uLWluZm8vcHJlaW5zdGFsbGF0aW9uLWluZm8uY29tcG9uZW50JztcclxuXHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW1RhbmdvVGlja2V0VXNlcnNDb21wb25lbnQsSW5mcmF0aWNrZXRzQ29tcG9uZW50LFRpY2tldHNDb21wb25lbnQsQ29udGFjdERldGFpbHNDb21wb25lbnQsRWRpdERldGFpbHNDb21wb25lbnQsVGFrZXJlbW90ZUNvbXBvbmVudCwgU3RvcmVJbmZvQ29tcG9uZW50LCBFZGdlYXBwTG9nQ29tcG9uZW50LCBTdG9yZUFjdGl2aXR5Q29tcG9uZW50LCBFZGdlQ2FtZXJhdmlld0NvbXBvbmVudCwgSW5zdGFsbGF0aW9uQ29tcG9uZW50LCBEcm9wZG93bkNvbXBvbmVudCwgQXVkaXRNYW5hZ2VtZW50Q29tcG9uZW50LCBBdWRpdFdvcmtzcGFjZUNvbXBvbmVudCwgVmlld2hpc3RvcnlDb21wb25lbnQsIFByZWluc3RhbGxhdGlvbkluZm9Db21wb25lbnRdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFRhbmdvVGlja2V0VXNlcnNSb3V0aW5nTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBDb21tb25TaGFyZWRNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgTmdiTW9kYWxNb2R1bGUsXHJcbiAgICBOZ2JNb2R1bGUsXHJcbiAgICBOZ3hEYXRlcmFuZ2VwaWNrZXJNZCxcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYW5nb1RpY2tldFVzZXJzTW9kdWxlIHsgfVxyXG4iXX0=
|