tango-app-ui-store-ticket-infra 3.7.1 → 3.7.2
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/ticket-camera-angle/ticket-camera-angle.component.mjs +25 -4
- package/fesm2022/tango-app-ui-store-ticket-infra.mjs +24 -3
- package/fesm2022/tango-app-ui-store-ticket-infra.mjs.map +1 -1
- package/lib/components/ticket-camera-angle/ticket-camera-angle.component.d.ts +2 -0
- package/package.json +1 -1
|
@@ -100,6 +100,24 @@ export class TicketCameraAngleComponent {
|
|
|
100
100
|
},
|
|
101
101
|
});
|
|
102
102
|
}
|
|
103
|
+
// Card description. The API returns a short label ('Angle change'), while the
|
|
104
|
+
// design shows a full sentence, so map it here — keyed off issueType, with the
|
|
105
|
+
// API's own label as the fallback for anything unmapped.
|
|
106
|
+
issueDescription(ticket) {
|
|
107
|
+
const type = String(ticket?.issueType || '').toLowerCase();
|
|
108
|
+
const byType = {
|
|
109
|
+
cameraanglechange: 'Your camera angle has been changed.',
|
|
110
|
+
ipchange: 'The camera IP address has been changed.',
|
|
111
|
+
resolutionchange: 'Your camera resolution has been changed.',
|
|
112
|
+
};
|
|
113
|
+
return byType[type] || ticket?.issue || '';
|
|
114
|
+
}
|
|
115
|
+
// Comment count shown on each ticket card — the ticket's own ticketActivity
|
|
116
|
+
// entries. Zero-padded to two digits to match the design ("01 comments").
|
|
117
|
+
commentCount(ticket) {
|
|
118
|
+
const n = Array.isArray(ticket?.ticketActivity) ? ticket.ticketActivity.length : 0;
|
|
119
|
+
return n < 10 ? '0' + n : String(n);
|
|
120
|
+
}
|
|
103
121
|
ShowTicket(ticket, index) {
|
|
104
122
|
this.selectCard = index;
|
|
105
123
|
this.ackReason = '';
|
|
@@ -157,8 +175,11 @@ export class TicketCameraAngleComponent {
|
|
|
157
175
|
return;
|
|
158
176
|
}
|
|
159
177
|
this.modalService.open(this.angleImagePopup, {
|
|
160
|
-
size: '
|
|
178
|
+
size: 'xl',
|
|
161
179
|
centered: true,
|
|
180
|
+
// Wider than Bootstrap's xl so the side-by-side angle comparison is
|
|
181
|
+
// legible; the image is the whole point of this popup.
|
|
182
|
+
windowClass: 'angle-image-modal',
|
|
162
183
|
});
|
|
163
184
|
}
|
|
164
185
|
// Images are stored as raw S3 keys; serve them through the CloudFront CDN.
|
|
@@ -279,15 +300,15 @@ export class TicketCameraAngleComponent {
|
|
|
279
300
|
this.daysToRevert = 2;
|
|
280
301
|
}
|
|
281
302
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TicketCameraAngleComponent, deps: [{ token: i1.TicketsService }, { token: i0.ChangeDetectorRef }, { token: i2.ToastService }, { token: i3.NgbModal }, { token: i4.GlobalStateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
282
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TicketCameraAngleComponent, selector: "lib-ticket-camera-angle", inputs: { selectedTab: "selectedTab" }, viewQueries: [{ propertyName: "angleImagePopup", first: true, predicate: ["angleImagePopup"], descendants: true }], ngImport: i0, template: "<div class=\"card\">\n <div class=\"card-header border-0 pt-3\">\n <h3 class=\"card-title align-items-start flex-column\">\n <span class=\"card-label mb-2\">Camera Angle Change</span>\n <span *ngIf=\"headerFilters?.date?.startDate === headerFilters?.date?.endDate\" class=\"text-sub mb-2\">An\n overview of all the tickets for till {{headerFilters?.date?.endDate | customDateFormat}}</span>\n <span *ngIf=\"headerFilters?.date?.startDate !== headerFilters?.date?.endDate\" class=\"text-sub mb-2\">An\n overview of all the tickets for {{headerFilters?.date?.startDate |\n customDateFormat}} - {{headerFilters?.date?.endDate | customDateFormat}}</span>\n </h3>\n </div>\n <div class=\"card-body\">\n <div class=\"d-flex justify-content-between mb-7\">\n <div *ngFor=\"let issue of ticketCard\" class=\"issuecard\">\n <div>\n <span class=\"title\">{{issue?.count}}</span>\n </div>\n <span class=\"label fw-semibold\">{{issue?.name}}</span>\n </div>\n </div>\n <div class=\"maincard-content\">\n <div class=\"row p-10\">\n <div class=\"col-sm-6 cursor-pointer\">\n <div *ngIf=\"!storeListLoading && !storeListNodata\">\n <div *ngFor=\"let data of tickets;let index = index\" class=\"issuecard w-100 mb-4\"\n (click)=\"ShowTicket(data,index)\"\n [ngClass]=\"(selectCard ? selectCard : 0) === index ? 'active' : ''\">\n <div class=\"maincard-label fw-bold d-flex justify-content-between mb-5\"><span> <img\n src='./assets/tango/Images/ticket.svg'>\n {{data.ticketId}}</span>\n <div\n class=\"contenttext d-flex justify-content-center align-items-center text-center fw-semibold px-3\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\n fill=\"none\">\n <path\n d=\"M10.6667 1.33398V4.00065M5.33333 1.33398V4.00065M2 6.66732H14M3.33333 2.66732H12.6667C13.403 2.66732 14 3.26427 14 4.00065V13.334C14 14.0704 13.403 14.6673 12.6667 14.6673H3.33333C2.59695 14.6673 2 14.0704 2 13.334V4.00065C2 3.26427 2.59695 2.66732 3.33333 2.66732Z\"\n stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg><span class=\"mx-1\">{{(data?.createdAt| date:'dd-MM-yyyy')}}</span></div>\n </div>\n <div class=\"mb-5 maincard-label fw-bold\">\n {{data?.issue}}\n </div>\n <div *ngIf=\"data?.cameraName || data?.zone\" class=\"mb-5 contenttext fw-semibold\">\n {{data?.cameraName ? data?.cameraName : '--'}}<span\n *ngIf=\"data?.zone\"> · {{data?.zone}}</span>\n </div>\n\n <div class=\"d-flex justify-content-between\">\n <div class=\"profile d-flex align-items-centre justify-content-centre\">\n <img src=\"./assets/tango/Images/userProfile.svg\" alt=\"\">\n </div>\n <div class=\"d-flex justify-content-between\">\n <span class=\"badge\"\n [ngClass]=\"data.status === 'closed' ? 'badge-light-success' :(data.status === 'inprogress' ? 'badge-light-primary':'badge-light-warning')\">{{data.status\n | titlecase}}</span>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"storeListLoading\" class=\"contenttext fw-semibold text-center py-10\">Loading tickets\u2026\n </div>\n <div *ngIf=\"!storeListLoading && storeListNodata\" class=\"contenttext fw-semibold text-center py-10\">\n No Camera Angle tickets found</div>\n </div>\n\n <div *ngIf=\"previewLoading\" class=\"col-sm-6\">\n <div class=\"contenttext fw-semibold text-center py-10\">Loading ticket\u2026</div>\n </div>\n\n <div *ngIf=\"!previewLoading && selectedTicket?.status\" class=\"col-sm-6\">\n <div>\n <div class=\"maincard-label fw-bold d-flex justify-content-between mb-5\">\n <span><img src='./assets/tango/Images/ticket.svg'><span\n class=\"mx-2\">{{selectedTicket?.ticketId}}</span></span>\n <span\n [ngClass]=\"selectedTicket.status === 'closed' ? 'badge-light-success' :(selectedTicket.status === 'inprogress' ? 'badge-light-primary':'badge-light-warning')\"\n class=\"badge badge-light-primary\">{{selectedTicket?.status | titlecase}}</span>\n </div>\n <!-- Acknowledge \u2014 client-only, and hidden once acknowledged. -->\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'client' && selectedTicket?.status !== 'closed' && selectedTicket?.issueStatus !== 'identified'\"\n class=\"maincard-content w-100 mt-2 px-4 py-2 pb-4\">\n <div class=\"maincard-label fw-semibold py-2\">Select to acknowledge the change</div>\n <div class=\"maincard-content d-flex justify-content-between align-items-center w-100 mt-2 px-4 py-4\"\n (click)=\"ackReason = 'store'\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <span class=\"headingtext\">Changed intentionally from store</span>\n </div>\n <div class=\"roundedcheck d-flex align-items-center\">\n <input type=\"checkbox\" [checked]=\"ackReason === 'store'\" class=\"p-0\">\n </div>\n </div>\n <div class=\"maincard-content d-flex justify-content-between align-items-center w-100 mt-2 px-4 py-4\"\n (click)=\"ackReason = 'operational'\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <span class=\"headingtext\">Changed for operational purpose</span>\n </div>\n <div class=\"roundedcheck d-flex align-items-center\">\n <input type=\"checkbox\" [checked]=\"ackReason === 'operational'\" class=\"p-0\">\n </div>\n </div>\n\n <div *ngIf=\"changeType === 'angle'\" class=\"form-group pt-6\">\n <label for=\"revertDays\" class=\"maincard-label fw-semibold mb-2\">Days to change the angle\n back *</label>\n <div class=\"w-250px position-relative\">\n <div class=\"position-absolute translate-middle-y top-50 me-5 ps-3 ticketDays\">\n <span class=\"svg-icon toggle-off svg-icon-1\"\n [ngClass]=\"daysToRevert === 0 ? 'pe-none' : ''\" (click)=\"decrementDays()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\"\n viewBox=\"0 0 21 20\" fill=\"none\">\n <path d=\"M4.66602 10H16.3327\" stroke=\"#344054\" stroke-width=\"1.67\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n </div>\n <input type=\"text\" inputmode=\"numeric\" class=\"form-control\" id=\"revertDays\"\n style=\"text-align: center;\" [ngModel]=\"daysToRevert\"\n (ngModelChange)=\"onDaysInput($event)\" (blur)=\"onDaysBlur()\"\n (keypress)=\"allowDigitsOnly($event)\" placeholder=\"0\" />\n <div class=\"position-absolute translate-middle-y top-50 end-0 me-3\">\n <span class=\"svg-icon toggle-on svg-icon-1 ticketDays\"\n (click)=\"incrementDays()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\"\n viewBox=\"0 0 21 20\" fill=\"none\">\n <path d=\"M10.4993 4.1665V15.8332M4.66602 9.99984H16.3327\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n </div>\n </div>\n </div>\n\n <div class=\"d-flex justify-content-between align-items-center mt-10 mb-5\">\n <input class=\"form-control\" [(ngModel)]=\"ackComment\" type=\"text\"\n placeholder=\"Add your comments..\">\n <button class=\"btn btn-default btn-outline ms-3\"\n (click)=\"cancelAcknowledge()\">Cancel</button>\n <button [disabled]=\"!ackReason || submitting\" class=\"btn btn-primary ms-3\"\n (click)=\"submitAcknowledge()\"> Submit </button>\n </div>\n </div>\n\n <!-- Activity log -->\n <div class=\"mt-5\" *ngFor=\"let obj of viewTicketData\">\n <div *ngIf=\"obj.actionBy === 'User'\" class=\"d-flex ms-5\">\n <div class=\"d-flex flex-column justify-content-center align-items-center pe-3\">\n <div class=\"d-flex align-items-centre justify-content-centre\">\n <img class=\"msgprofile\" src=\"./assets/tango/Images/userProfile.svg\">\n </div>\n <div class=\"p-0 h-100 mt-3 border border-1 border-gray\" style=\"width:0px\"></div>\n </div>\n <div class=\"py-3 pt-0\">\n <div class=\"d-flex mb-3\">\n <span\n class=\"headingtext text-capitalize\">{{obj?.IdentifiedBy?obj?.IdentifiedBy:\"Tango\"}}</span>\n <span class=\"timingtext px-3 pt-1\">{{obj?.timeStamp | date: 'dd MMM, yyyy hh:mm\n a'}}</span>\n </div>\n <div *ngIf=\"obj?.description\" class=\"textupdates fw-bold-400 mt-2\">\n {{obj?.description}}</div>\n <div *ngIf=\"obj?.comment\" class=\"timingtext pe-3 pt-1 fw-bold-400\">{{obj?.comment}}\n </div>\n </div>\n </div>\n\n <div *ngIf=\"obj.actionBy === 'Tango' || obj.actionBy === 'automated'\" class=\"d-flex mb-5 ms-5\">\n <div class=\"d-flex flex-column justify-content-center align-items-center pe-3\">\n <div class=\"d-flex align-items-centre justify-content-centre\">\n <span>\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"40\" height=\"40\" rx=\"20\" fill=\"#EAF8FF\" />\n <path\n d=\"M30.4932 28.3351L29.6867 27.5286L20.9965 18.8384L23.5744 16.2605L24.1921 15.6416C24.251 15.5818 24.2843 15.5014 24.2847 15.4174C24.2845 15.3759 24.2761 15.3349 24.26 15.2966C24.2439 15.2584 24.2204 15.2237 24.1909 15.1945L23.572 14.5756L20.8381 11.8368L20.2192 11.218C20.19 11.1882 20.1551 11.1645 20.1166 11.1484C20.0781 11.1323 20.0368 11.124 19.995 11.124C19.9533 11.124 19.912 11.1323 19.8735 11.1484C19.835 11.1645 19.8001 11.1882 19.7709 11.218L19.152 11.8381L15.8016 15.1884C15.7719 15.2176 15.7483 15.2523 15.7322 15.2907C15.7161 15.3291 15.7077 15.3703 15.7077 15.412C15.7077 15.4536 15.7161 15.4948 15.7322 15.5332C15.7483 15.5716 15.7719 15.6064 15.8016 15.6355L19.0021 18.8372L10.3107 27.5286L9.50787 28.3351C9.44834 28.3941 9.41461 28.4743 9.41406 28.5581C9.41441 28.6391 9.4453 28.717 9.50056 28.7762C9.53007 28.8077 9.56573 28.8328 9.60533 28.85C9.64494 28.8672 9.68765 28.8761 9.73082 28.8761H17.5487C17.6326 28.8757 17.713 28.8423 17.7723 28.7829C17.8316 28.7236 17.8651 28.6432 17.8654 28.5593V27.782C17.8654 27.6979 17.8321 27.6172 17.7727 27.5576C17.7134 27.498 17.6328 27.4644 17.5487 27.464H12.3709L19.9987 19.8362L27.6265 27.464H22.4036C22.3195 27.4644 22.2389 27.498 22.1796 27.5576C22.1202 27.6172 22.0869 27.6979 22.0869 27.782V28.5593C22.0867 28.601 22.0949 28.6424 22.111 28.6809C22.1272 28.7194 22.1508 28.7543 22.1807 28.7835C22.2399 28.8426 22.32 28.8758 22.4036 28.8761H30.269C30.3124 28.8762 30.3553 28.8674 30.3952 28.8502C30.435 28.833 30.4708 28.8078 30.5005 28.7762C30.5574 28.7164 30.5885 28.6367 30.5872 28.5542C30.5858 28.4716 30.552 28.393 30.4932 28.3351ZM19.9938 12.9906L22.4219 15.4187L19.9999 17.8407L17.5718 15.4126L19.9938 12.9906Z\"\n fill=\"#00A3FF\" />\n </svg>\n </span>\n </div>\n <div class=\"p-0 h-100 mt-3 border border-1 border-gray\" style=\"width:0px\"></div>\n </div>\n <div class=\"pt-0 w-100\">\n <div class=\"d-flex\">\n <span\n class=\"headingtext text-capitalize\">{{obj?.IdentifiedBy?obj?.IdentifiedBy:\"Tango\"}}</span>\n <span class=\"timingtext px-3 pt-1\">{{obj?.timeStamp | date: 'dd MMM, yyyy hh:mm\n a'}}</span>\n </div>\n <div *ngIf=\"obj.actionType === 'defaultInfra'\" class=\"textupdates fw-bold-400 mt-3\">\n Your camera angle has been changed and we request you to acknowledge or to\n change the camera angle to process the data.\n </div>\n\n <!-- Change detail sits inside the first (default) comment. -->\n <ng-container *ngIf=\"obj.actionType === 'defaultInfra'\">\n <div class=\"openedissue d-flex justify-content-between align-items-center\">\n <span class=\"profile-label fw-semibold\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"20\" viewBox=\"0 0 24 20\"\n fill=\"none\">\n <path\n d=\"M23 17C23 17.5304 22.7893 18.0391 22.4142 18.4142C22.0391 18.7893 21.5304 19 21 19H3C2.46957 19 1.96086 18.7893 1.58579 18.4142C1.21071 18.0391 1 17.5304 1 17V6C1 5.46957 1.21071 4.96086 1.58579 4.58579C1.96086 4.21071 2.46957 4 3 4H7L9 1H15L17 4H21C21.5304 4 22.0391 4.21071 22.4142 4.58579C22.7893 4.96086 23 5.46957 23 6V17Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M12 15C14.2091 15 16 13.2091 16 11C16 8.79086 14.2091 7 12 7C9.79086 7 8 8.79086 8 11C8 13.2091 9.79086 15 12 15Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n <span class=\"ms-2\">{{selectedTicket?.cameraName ? selectedTicket?.cameraName :\n 'Camera'}}</span>\n <span class=\"mx-2\" *ngIf=\"selectedTicket?.zone\">· {{selectedTicket?.zone}}</span>\n </span>\n <span class=\"profile-label fw-semibold\">{{selectedTicket?.issue}}</span>\n </div>\n\n <!-- ANGLE: expected/actual images -->\n <div *ngIf=\"changeType === 'angle'\" class=\"maincard-content w-100 mt-2 px-4 py-2 pb-4\">\n <div class=\"d-flex justify-content-between align-items-center py-2\">\n <span class=\"maincard-label fw-semibold\">Compare the expected and the current\n camera angle</span>\n <span class=\"angle-eye-btn cursor-pointer\" *ngIf=\"selectedTicket?.angleChangeImage\"\n title=\"View angle change image\" (click)=\"openAngleImage()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\n viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8Z\" stroke=\"#475467\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" stroke=\"#475467\" stroke-width=\"2\" />\n </svg>\n </span>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <span class=\"camera fw-bold mt-2\">Expected Camera Angle</span>\n <div *ngIf=\"selectedTicket?.expectedImage\"\n class=\"rounded-3 overflow-hidden mt-3\">\n <img class=\"w-100\" [src]=\"cdnUrl(selectedTicket.expectedImage)\" alt=\"expected\">\n </div>\n <div *ngIf=\"!selectedTicket?.expectedImage\" class=\"px-2 rounded\">\n <div class=\"img mt-4 px-3\">\n <div class=\"align-items-center justify-content-center d-flex flex-column\"\n style=\"margin-top: 20px;\">\n <span class=\"prvtxt mt-5 textclr\">Preview not available</span>\n <span class=\"refreshtxt mt-2 textclr\">The expected angle image is not\n available at the moment.</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-sm-6\">\n <span class=\"camera fw-bold mt-2\">Actual Camera Angle</span>\n <div *ngIf=\"selectedTicket?.actualImage\" class=\"rounded-3 overflow-hidden mt-3\">\n <img class=\"w-100\" [src]=\"cdnUrl(selectedTicket.actualImage)\" alt=\"actual\">\n </div>\n <div *ngIf=\"!selectedTicket?.actualImage\" class=\"px-2 rounded\">\n <div class=\"img mt-4 px-3\">\n <div class=\"align-items-center justify-content-center d-flex flex-column\"\n style=\"margin-top: 20px;\">\n <span class=\"prvtxt mt-5 textclr\">Preview not available</span>\n <span class=\"refreshtxt mt-2 textclr\">The actual angle image is not\n available at the moment.</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- RESOLUTION -->\n <div *ngIf=\"changeType === 'resolution'\" class=\"maincard-content w-100 mt-2 px-4 py-2 pb-4\">\n <div class=\"maincard-label fw-semibold py-2\">Resolution change detected</div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"maincard-content px-4 py-4 mt-2\">\n <span class=\"update-label\">Expected resolution</span>\n <div class=\"update-value mt-2\">{{selectedTicket?.expectedResolution ? selectedTicket?.expectedResolution : '--'}}</div>\n </div>\n </div>\n <div class=\"col-sm-6\">\n <div class=\"maincard-content px-4 py-4 mt-2\">\n <span class=\"update-label\">Actual resolution</span>\n <div class=\"update-value mt-2 text-danger\">{{selectedTicket?.actualResolution ? selectedTicket?.actualResolution : '--'}}</div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- IP -->\n <div *ngIf=\"changeType === 'ip'\" class=\"maincard-content w-100 mt-2 px-4 py-2 pb-4\">\n <div class=\"maincard-label fw-semibold py-2\">IP change detected</div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"maincard-content px-4 py-4 mt-2\">\n <span class=\"update-label\">Registered IP</span>\n <div class=\"update-value mt-2\">{{selectedTicket?.registeredIp ? selectedTicket?.registeredIp : '--'}}</div>\n <span class=\"timingtext\">Last connected</span>\n </div>\n </div>\n <div class=\"col-sm-6\">\n <div class=\"maincard-content px-4 py-4 mt-2\">\n <span class=\"update-label\">Current IP</span>\n <div class=\"update-value mt-2 text-danger\">{{selectedTicket?.currentIp ? selectedTicket?.currentIp : '--'}}</div>\n <span class=\"timingtext\">Feed disconnected</span>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div *ngIf=\"obj.actionType !== 'defaultInfra' && obj?.description\"\n class=\"textupdates fw-bold-400 mt-3\">{{obj?.description}}</div>\n <div *ngIf=\"obj?.comment\" class=\"timingtext pe-3 pt-1 fw-bold-400 mt-2\">\n {{obj?.comment}}</div>\n </div>\n </div>\n </div>\n\n <!-- Restore check \u2014 Tango-only, once the store has acknowledged\n and the promised restore date has passed. -->\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' && selectedTicket?.issueStatus === 'identified' && selectedTicket?.status !== 'closed' && isRestoreDue\"\n class=\"d-flex mb-5 ms-5 mt-5\">\n <div class=\"d-flex flex-column justify-content-center align-items-center pe-3\">\n <div class=\"d-flex align-items-centre justify-content-centre\">\n <span>\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"40\" height=\"40\" rx=\"20\" fill=\"#EAF8FF\" />\n <path\n d=\"M30.4932 28.3351L29.6867 27.5286L20.9965 18.8384L23.5744 16.2605L24.1921 15.6416C24.251 15.5818 24.2843 15.5014 24.2847 15.4174C24.2845 15.3759 24.2761 15.3349 24.26 15.2966C24.2439 15.2584 24.2204 15.2237 24.1909 15.1945L23.572 14.5756L20.8381 11.8368L20.2192 11.218C20.19 11.1882 20.1551 11.1645 20.1166 11.1484C20.0781 11.1323 20.0368 11.124 19.995 11.124C19.9533 11.124 19.912 11.1323 19.8735 11.1484C19.835 11.1645 19.8001 11.1882 19.7709 11.218L19.152 11.8381L15.8016 15.1884C15.7719 15.2176 15.7483 15.2523 15.7322 15.2907C15.7161 15.3291 15.7077 15.3703 15.7077 15.412C15.7077 15.4536 15.7161 15.4948 15.7322 15.5332C15.7483 15.5716 15.7719 15.6064 15.8016 15.6355L19.0021 18.8372L10.3107 27.5286L9.50787 28.3351C9.44834 28.3941 9.41461 28.4743 9.41406 28.5581C9.41441 28.6391 9.4453 28.717 9.50056 28.7762C9.53007 28.8077 9.56573 28.8328 9.60533 28.85C9.64494 28.8672 9.68765 28.8761 9.73082 28.8761H17.5487C17.6326 28.8757 17.713 28.8423 17.7723 28.7829C17.8316 28.7236 17.8651 28.6432 17.8654 28.5593V27.782C17.8654 27.6979 17.8321 27.6172 17.7727 27.5576C17.7134 27.498 17.6328 27.4644 17.5487 27.464H12.3709L19.9987 19.8362L27.6265 27.464H22.4036C22.3195 27.4644 22.2389 27.498 22.1796 27.5576C22.1202 27.6172 22.0869 27.6979 22.0869 27.782V28.5593C22.0867 28.601 22.0949 28.6424 22.111 28.6809C22.1272 28.7194 22.1508 28.7543 22.1807 28.7835C22.2399 28.8426 22.32 28.8758 22.4036 28.8761H30.269C30.3124 28.8762 30.3553 28.8674 30.3952 28.8502C30.435 28.833 30.4708 28.8078 30.5005 28.7762C30.5574 28.7164 30.5885 28.6367 30.5872 28.5542C30.5858 28.4716 30.552 28.393 30.4932 28.3351ZM19.9938 12.9906L22.4219 15.4187L19.9999 17.8407L17.5718 15.4126L19.9938 12.9906Z\"\n fill=\"#00A3FF\" />\n </svg>\n </span>\n </div>\n <div class=\"p-0 h-100 mt-3 border border-1 border-gray\" style=\"width:0px\"></div>\n </div>\n <div class=\"pt-0 w-100\">\n <div class=\"d-flex\">\n <span class=\"headingtext text-capitalize\">Tango</span>\n <span class=\"timingtext px-3 pt-1\">Now</span>\n </div>\n <div class=\"textupdates fw-bold-400 mt-3\">Waiting on the store to restore the angle</div>\n <div class=\"issuecard w-100 mt-3\">\n <span class=\"maincard-label fw-bold\">Has the camera angle been restored?</span>\n <div class=\"mt-3 d-flex justify-content-between\">\n <button class=\"btn btn-outline w-45\" [disabled]=\"submitting\"\n (click)=\"replyRestored('Yes')\">\n Yes\n </button>\n <button class=\"btn w-45\"\n [ngClass]=\"restoreReply === 'No' ? 'bg-light-primary text-primary':'btn-outline'\"\n (click)=\"restoreReply = 'No'\"> No </button>\n </div>\n <div class=\"mt-5\" *ngIf=\"restoreReply === 'No'\">\n <div class=\"mb-3 mt-3\">\n <span>comments</span>\n <textarea class=\"w-100 mt-3\" [(ngModel)]=\"restoreComment\"\n placeholder=\"Enter your comments...\"></textarea>\n </div>\n <button class=\"btn btn-primary w-100 mt-3\" [disabled]=\"submitting\"\n (click)=\"replyRestored('No')\">Submit</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<!-- Angle change image popup -->\n<ng-template #angleImagePopup let-modal>\n <div class=\"modal-header border-0 pb-0\">\n <h5 class=\"maincard-label fw-bold mb-0\">Angle Change</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body pt-2\">\n <div class=\"rounded-3 overflow-hidden\">\n <img class=\"w-100\" [src]=\"cdnUrl(selectedTicket?.angleChangeImage)\" alt=\"angle change\">\n </div>\n </div>\n</ng-template>\n", styles: [".card-label{font-size:18px!important}.roundedcheck input[type=checkbox]{width:16px!important;height:16px!important;border-radius:10px!important;-webkit-appearance:none;border:1px solid var(--Gray-500, #667085);background:var(--Gray-100, #F2F4F7)}.roundedcheck input[type=checkbox]:checked{background:var(--Primary, #009BF3);border-color:var(--Primary, #009BF3)}.prvtxt{color:var(--Gray-500, #667085);font-family:Inter;font-size:20px;font-style:normal;font-weight:700;line-height:20px;letter-spacing:-.4px}.textclr{color:var(--Gray-400, #98A2B3)}.refreshtxt{color:var(--Gray-400, #98A2B3);font-family:Inter;font-size:12px;font-style:normal;font-weight:500;line-height:18px;text-align:center}.img{border-radius:10px;border:1px solid var(--Gray-500, #667085);background:var(--Gray-100, #F2F4F7);width:100%;height:165px}.issuecard{width:19%;border-radius:10px;border:1px solid var(--Gray-200, #EAECF0);padding:16px}.issuecard label{color:var(--Black, #101828);font-size:14px;line-height:20px}.issuecard.active{border:none!important;background:var(--Primary-25, #F6FCFF);box-shadow:0 0 0 4px #e9f7ff}.contenttext{color:var(--Gray-500, #667085);font-size:14px;line-height:20px}.maincard-content{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD)}.maincard-label{color:var(--Gray-900, #101828);font-size:16px;line-height:24px}.profile{width:24px;height:24px;overflow:hidden;border-radius:200px}.timingtext{color:var(--Gray-500, #667085);font-size:12px;line-height:18px}.profile-label{font-size:12px;color:var(--Gray-500, #344054);line-height:16px}.openedissue{border-radius:6px;background:var(--Gray-50, #F9FAFB);padding:8px 12px}.w-45{width:49%}.angle-eye-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF)}.angle-eye-btn:hover{background:var(--Gray-50, #F9FAFB)}.camera{color:var(--Gray-900, #101828)!important;font-size:18px!important;line-height:28px!important}.headingtext{color:var(--Gray-700, #344054)!important;font-size:15px!important;font-weight:500;line-height:20px}input,textarea{padding:10px 14px;border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d}::placeholder{color:var(--Gray-500, #667085);font-size:16px;font-weight:400;line-height:24px}.msgprofile{width:48px!important;height:48px!important;border-radius:200px;overflow:hidden}.textupdates{color:var(--Gray-700, #344054);font-size:15px;line-height:24px}.investigation{color:var(--Gray-500, #344054);font-size:15px;line-height:24px}.fw-bold-400{font-weight:400!important}.fw-bold-700{font-weight:700!important}.update-label{color:#667085;font-size:14px;font-weight:400;line-height:20px}.update-value{color:#009bf3;font-size:14px;font-weight:500;line-height:20px}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i5.DatePipe, name: "date" }, { kind: "pipe", type: i2.CustomDateFormatPipe, name: "customDateFormat" }] });
|
|
303
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TicketCameraAngleComponent, selector: "lib-ticket-camera-angle", inputs: { selectedTab: "selectedTab" }, viewQueries: [{ propertyName: "angleImagePopup", first: true, predicate: ["angleImagePopup"], descendants: true }], ngImport: i0, template: "<div class=\"card\">\n <div class=\"card-header border-0 pt-3\">\n <h3 class=\"card-title align-items-start flex-column\">\n <span class=\"card-label mb-2\">Camera Angle Change</span>\n <span *ngIf=\"headerFilters?.date?.startDate === headerFilters?.date?.endDate\" class=\"text-sub mb-2\">An\n overview of all the tickets for till {{headerFilters?.date?.endDate | customDateFormat}}</span>\n <span *ngIf=\"headerFilters?.date?.startDate !== headerFilters?.date?.endDate\" class=\"text-sub mb-2\">An\n overview of all the tickets for {{headerFilters?.date?.startDate |\n customDateFormat}} - {{headerFilters?.date?.endDate | customDateFormat}}</span>\n </h3>\n </div>\n <div class=\"card-body\">\n <div class=\"d-flex justify-content-between mb-7\">\n <div *ngFor=\"let issue of ticketCard\" class=\"issuecard\">\n <div>\n <span class=\"title\">{{issue?.count}}</span>\n </div>\n <span class=\"label fw-semibold\">{{issue?.name}}</span>\n </div>\n </div>\n <div class=\"maincard-content\">\n <div class=\"row p-10\">\n <div class=\"col-sm-6 cursor-pointer\">\n <div *ngIf=\"!storeListLoading && !storeListNodata\">\n <div *ngFor=\"let data of tickets;let index = index\" class=\"ticket-card mb-4\"\n (click)=\"ShowTicket(data,index)\"\n [ngClass]=\"(selectCard ? selectCard : 0) === index ? 'active' : ''\">\n <!-- Row 1: ticket id + status pill -->\n <div class=\"d-flex justify-content-between align-items-center mb-3\">\n <span class=\"tc-id\"><img src='./assets/tango/Images/ticket.svg' class=\"me-2\">{{data.ticketId}}</span>\n <span class=\"tc-status\"\n [ngClass]=\"data.status === 'closed' ? 'is-closed' : (data.status === 'inprogress' ? 'badge-light-primary' : 'is-open')\">\n <span class=\"tc-dot\"></span>{{data.status | titlecase}}</span>\n </div>\n <!-- Row 2: what changed -->\n <div class=\"tc-issue mb-4\">{{issueDescription(data)}}</div>\n <!-- Row 3: avatar + comments + date -->\n <div class=\"d-flex justify-content-between align-items-center\">\n <img class=\"tc-avatar\" src=\"./assets/tango/Images/userProfile.svg\" alt=\"\">\n <div class=\"d-flex align-items-center\">\n <span class=\"tc-meta me-4\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" class=\"me-1 align-middle\">\n <path d=\"M14 7.667a5.6 5.6 0 0 1-.6 2.533 5.667 5.667 0 0 1-5.067 3.133 5.6 5.6 0 0 1-2.533-.6L2 14l1.267-3.8a5.6 5.6 0 0 1-.6-2.533A5.667 5.667 0 0 1 5.8 2.6a5.6 5.6 0 0 1 2.533-.6h.334A5.653 5.653 0 0 1 14 7.333v.334Z\"\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>{{commentCount(data)}} comments</span>\n <span class=\"tc-meta\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" class=\"me-1 align-middle\">\n <path d=\"M10.667 1.334V4M5.333 1.334V4M2 6.667h12M3.333 2.667h9.334c.736 0 1.333.597 1.333 1.333v9.334c0 .736-.597 1.333-1.333 1.333H3.333A1.333 1.333 0 0 1 2 13.334V4c0-.736.597-1.333 1.333-1.333Z\"\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>{{(data?.createdAt | date:'dd MMM, yyyy')}}</span>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"storeListLoading\" class=\"contenttext fw-semibold text-center py-10\">Loading tickets\u2026\n </div>\n <div *ngIf=\"!storeListLoading && storeListNodata\" class=\"contenttext fw-semibold text-center py-10\">\n No Camera Angle tickets found</div>\n </div>\n\n <div *ngIf=\"previewLoading\" class=\"col-sm-6\">\n <div class=\"contenttext fw-semibold text-center py-10\">Loading ticket\u2026</div>\n </div>\n\n <div *ngIf=\"!previewLoading && selectedTicket?.status\" class=\"col-sm-6\">\n <div>\n <div class=\"maincard-label fw-bold d-flex justify-content-between mb-5\">\n <span><img src='./assets/tango/Images/ticket.svg'><span\n class=\"mx-2\">{{selectedTicket?.ticketId}}</span></span>\n <span\n [ngClass]=\"selectedTicket.status === 'closed' ? 'badge-light-success' :(selectedTicket.status === 'inprogress' ? 'badge-light-primary':'badge-light-warning')\"\n class=\"badge badge-light-primary\">{{selectedTicket?.status | titlecase}}</span>\n </div>\n\n <!-- Activity log -->\n <div class=\"mt-5\" *ngFor=\"let obj of viewTicketData\">\n <div *ngIf=\"obj.actionBy === 'User'\" class=\"d-flex ms-5\">\n <div class=\"d-flex flex-column justify-content-center align-items-center pe-3\">\n <div class=\"d-flex align-items-centre justify-content-centre\">\n <img class=\"msgprofile\" src=\"./assets/tango/Images/userProfile.svg\">\n </div>\n <div class=\"p-0 h-100 mt-3 border border-1 border-gray\" style=\"width:0px\"></div>\n </div>\n <div class=\"py-3 pt-0\">\n <div class=\"d-flex mb-3\">\n <span\n class=\"headingtext text-capitalize\">{{obj?.IdentifiedBy?obj?.IdentifiedBy:\"Tango\"}}</span>\n <span class=\"timingtext px-3 pt-1\">{{obj?.timeStamp | date: 'dd MMM, yyyy hh:mm\n a'}}</span>\n </div>\n <div *ngIf=\"obj?.description\" class=\"textupdates fw-bold-400 mt-2\">\n {{obj?.description}}</div>\n <div *ngIf=\"obj?.comment\" class=\"timingtext pe-3 pt-1 fw-bold-400\">{{obj?.comment}}\n </div>\n </div>\n </div>\n\n <div *ngIf=\"obj.actionBy === 'Tango' || obj.actionBy === 'automated'\" class=\"d-flex mb-5 ms-5\">\n <div class=\"d-flex flex-column justify-content-center align-items-center pe-3\">\n <div class=\"d-flex align-items-centre justify-content-centre\">\n <span>\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"40\" height=\"40\" rx=\"20\" fill=\"#EAF8FF\" />\n <path\n d=\"M30.4932 28.3351L29.6867 27.5286L20.9965 18.8384L23.5744 16.2605L24.1921 15.6416C24.251 15.5818 24.2843 15.5014 24.2847 15.4174C24.2845 15.3759 24.2761 15.3349 24.26 15.2966C24.2439 15.2584 24.2204 15.2237 24.1909 15.1945L23.572 14.5756L20.8381 11.8368L20.2192 11.218C20.19 11.1882 20.1551 11.1645 20.1166 11.1484C20.0781 11.1323 20.0368 11.124 19.995 11.124C19.9533 11.124 19.912 11.1323 19.8735 11.1484C19.835 11.1645 19.8001 11.1882 19.7709 11.218L19.152 11.8381L15.8016 15.1884C15.7719 15.2176 15.7483 15.2523 15.7322 15.2907C15.7161 15.3291 15.7077 15.3703 15.7077 15.412C15.7077 15.4536 15.7161 15.4948 15.7322 15.5332C15.7483 15.5716 15.7719 15.6064 15.8016 15.6355L19.0021 18.8372L10.3107 27.5286L9.50787 28.3351C9.44834 28.3941 9.41461 28.4743 9.41406 28.5581C9.41441 28.6391 9.4453 28.717 9.50056 28.7762C9.53007 28.8077 9.56573 28.8328 9.60533 28.85C9.64494 28.8672 9.68765 28.8761 9.73082 28.8761H17.5487C17.6326 28.8757 17.713 28.8423 17.7723 28.7829C17.8316 28.7236 17.8651 28.6432 17.8654 28.5593V27.782C17.8654 27.6979 17.8321 27.6172 17.7727 27.5576C17.7134 27.498 17.6328 27.4644 17.5487 27.464H12.3709L19.9987 19.8362L27.6265 27.464H22.4036C22.3195 27.4644 22.2389 27.498 22.1796 27.5576C22.1202 27.6172 22.0869 27.6979 22.0869 27.782V28.5593C22.0867 28.601 22.0949 28.6424 22.111 28.6809C22.1272 28.7194 22.1508 28.7543 22.1807 28.7835C22.2399 28.8426 22.32 28.8758 22.4036 28.8761H30.269C30.3124 28.8762 30.3553 28.8674 30.3952 28.8502C30.435 28.833 30.4708 28.8078 30.5005 28.7762C30.5574 28.7164 30.5885 28.6367 30.5872 28.5542C30.5858 28.4716 30.552 28.393 30.4932 28.3351ZM19.9938 12.9906L22.4219 15.4187L19.9999 17.8407L17.5718 15.4126L19.9938 12.9906Z\"\n fill=\"#00A3FF\" />\n </svg>\n </span>\n </div>\n <div class=\"p-0 h-100 mt-3 border border-1 border-gray\" style=\"width:0px\"></div>\n </div>\n <div class=\"pt-0 w-100\">\n <div class=\"d-flex\">\n <span\n class=\"headingtext text-capitalize\">{{obj?.IdentifiedBy?obj?.IdentifiedBy:\"Tango\"}}</span>\n <span class=\"timingtext px-3 pt-1\">{{obj?.timeStamp | date: 'dd MMM, yyyy hh:mm\n a'}}</span>\n </div>\n <div *ngIf=\"obj.actionType === 'defaultInfra'\" class=\"textupdates fw-bold-400 mt-3\">\n Your camera angle has been changed and we request you to acknowledge or to\n change the camera angle to process the data.\n </div>\n\n <!-- Change detail sits inside the first (default) comment. -->\n <ng-container *ngIf=\"obj.actionType === 'defaultInfra'\">\n <div class=\"openedissue d-flex justify-content-between align-items-center\">\n <span class=\"profile-label fw-semibold\">\n <span class=\"cam-dot\"></span>\n <span class=\"cam-name\">{{selectedTicket?.cameraName ? selectedTicket?.cameraName :\n 'Camera'}}</span>\n <span class=\"cam-zone-chip\" *ngIf=\"selectedTicket?.zone\">{{selectedTicket?.zone}}</span>\n </span>\n <span class=\"cam-issue-pill\"><span class=\"cam-issue-dot\"></span>{{selectedTicket?.issue}}</span>\n </div>\n\n <!-- ANGLE: expected/actual images -->\n <div *ngIf=\"changeType === 'angle'\" class=\"maincard-content w-100 mt-2 px-4 py-2 pb-4\">\n <div class=\"d-flex justify-content-between align-items-center py-2\">\n <span class=\"maincard-label fw-semibold\">Compare the expected and the current\n camera angle</span>\n <span class=\"angle-eye-btn cursor-pointer\" *ngIf=\"selectedTicket?.angleChangeImage\"\n title=\"View angle change image\" (click)=\"openAngleImage()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\n viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8Z\" stroke=\"#475467\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" stroke=\"#475467\" stroke-width=\"2\" />\n </svg>\n </span>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <span class=\"camera fw-bold mt-2\">Expected Camera Angle</span>\n <div *ngIf=\"selectedTicket?.expectedImage\"\n class=\"rounded-3 overflow-hidden mt-3\">\n <img class=\"w-100\" [src]=\"cdnUrl(selectedTicket.expectedImage)\" alt=\"expected\">\n </div>\n <div *ngIf=\"!selectedTicket?.expectedImage\" class=\"px-2 rounded\">\n <div class=\"img mt-4 px-3\">\n <div class=\"align-items-center justify-content-center d-flex flex-column\"\n style=\"margin-top: 20px;\">\n <span class=\"prvtxt mt-5 textclr\">Preview not available</span>\n <span class=\"refreshtxt mt-2 textclr\">The expected angle image is not\n available at the moment.</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-sm-6\">\n <span class=\"camera fw-bold mt-2\">Actual Camera Angle</span>\n <div *ngIf=\"selectedTicket?.actualImage\" class=\"rounded-3 overflow-hidden mt-3\">\n <img class=\"w-100\" [src]=\"cdnUrl(selectedTicket.actualImage)\" alt=\"actual\">\n </div>\n <div *ngIf=\"!selectedTicket?.actualImage\" class=\"px-2 rounded\">\n <div class=\"img mt-4 px-3\">\n <div class=\"align-items-center justify-content-center d-flex flex-column\"\n style=\"margin-top: 20px;\">\n <span class=\"prvtxt mt-5 textclr\">Preview not available</span>\n <span class=\"refreshtxt mt-2 textclr\">The actual angle image is not\n available at the moment.</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- RESOLUTION -->\n <div *ngIf=\"changeType === 'resolution'\" class=\"maincard-content w-100 mt-2 px-4 py-2 pb-4\">\n <div class=\"maincard-label fw-semibold py-2\">Resolution change detected</div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"maincard-content px-4 py-4 mt-2\">\n <span class=\"update-label\">Expected resolution</span>\n <div class=\"update-value mt-2\">{{selectedTicket?.expectedResolution ? selectedTicket?.expectedResolution : '--'}}</div>\n </div>\n </div>\n <div class=\"col-sm-6\">\n <div class=\"maincard-content px-4 py-4 mt-2\">\n <span class=\"update-label\">Actual resolution</span>\n <div class=\"update-value mt-2 text-danger\">{{selectedTicket?.actualResolution ? selectedTicket?.actualResolution : '--'}}</div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- IP -->\n <div *ngIf=\"changeType === 'ip'\" class=\"maincard-content w-100 mt-2 px-4 py-2 pb-4\">\n <div class=\"maincard-label fw-semibold py-2\">IP change detected</div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"maincard-content px-4 py-4 mt-2\">\n <span class=\"update-label\">Registered IP</span>\n <div class=\"update-value mt-2\">{{selectedTicket?.registeredIp ? selectedTicket?.registeredIp : '--'}}</div>\n <span class=\"timingtext\">Last connected</span>\n </div>\n </div>\n <div class=\"col-sm-6\">\n <div class=\"maincard-content px-4 py-4 mt-2\">\n <span class=\"update-label\">Current IP</span>\n <div class=\"update-value mt-2 text-danger\">{{selectedTicket?.currentIp ? selectedTicket?.currentIp : '--'}}</div>\n <span class=\"timingtext\">Feed disconnected</span>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div *ngIf=\"obj.actionType !== 'defaultInfra' && obj?.description\"\n class=\"textupdates fw-bold-400 mt-3\">{{obj?.description}}</div>\n <div *ngIf=\"obj?.comment\" class=\"timingtext pe-3 pt-1 fw-bold-400 mt-2\">\n {{obj?.comment}}</div>\n </div>\n </div>\n </div>\n\n <!-- Acknowledge \u2014 client-only, and hidden once acknowledged. -->\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'client' && selectedTicket?.status !== 'closed' && selectedTicket?.issueStatus !== 'identified'\"\n class=\"maincard-content ack-panel w-100 mt-4 px-4 py-4\">\n <div class=\"maincard-label fw-semibold py-2\">Select to acknowledge the change</div>\n <div class=\"ack-options d-flex gap-3 mt-2\">\n <div class=\"ack-option d-flex align-items-center\" [class.selected]=\"ackReason === 'store'\"\n (click)=\"ackReason = 'store'\">\n <span class=\"ack-radio\" [class.checked]=\"ackReason === 'store'\"></span>\n <span class=\"ack-label\">Changed intentionally from store</span>\n </div>\n <div class=\"ack-option d-flex align-items-center\" [class.selected]=\"ackReason === 'operational'\"\n (click)=\"ackReason = 'operational'\">\n <span class=\"ack-radio\" [class.checked]=\"ackReason === 'operational'\"></span>\n <span class=\"ack-label\">Changed for operational purpose</span>\n </div>\n </div>\n\n <!-- Revealed once a reason is chosen, matching the design: the form\n only becomes relevant after an option is selected. -->\n <div class=\"ack-form mt-3\" *ngIf=\"ackReason\">\n <div class=\"form-group\">\n <label class=\"ack-field-label mb-2\">Comment</label>\n <textarea class=\"form-control ack-textarea\" rows=\"3\" [(ngModel)]=\"ackComment\"\n placeholder=\"e.g. Angle moved for a promo display; will reset after the event.\"></textarea>\n </div>\n\n <div *ngIf=\"changeType === 'angle'\" class=\"form-group mt-4\">\n <label for=\"revertDays\" class=\"ack-field-label mb-2\">Days to change the angle back *</label>\n <div class=\"day-stepper d-flex align-items-center\">\n <button type=\"button\" class=\"day-btn\" [disabled]=\"daysToRevert === 0\"\n (click)=\"decrementDays()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\n <path d=\"M4.666 10h11.667\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"/>\n </svg>\n </button>\n <input type=\"text\" inputmode=\"numeric\" class=\"day-input\" id=\"revertDays\"\n [ngModel]=\"daysToRevert\" (ngModelChange)=\"onDaysInput($event)\"\n (blur)=\"onDaysBlur()\" (keypress)=\"allowDigitsOnly($event)\" placeholder=\"0\" />\n <button type=\"button\" class=\"day-btn\" (click)=\"incrementDays()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\n <path d=\"M10.5 4.167v11.666M4.666 10h11.667\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n\n <div class=\"d-flex gap-3 mt-5\">\n <button class=\"btn ack-cancel flex-fill\" (click)=\"cancelAcknowledge()\">Cancel</button>\n <button [disabled]=\"!ackReason || submitting\" class=\"btn ack-submit flex-fill\"\n (click)=\"submitAcknowledge()\">Submit</button>\n </div>\n </div>\n </div>\n\n <!-- Restore check \u2014 Tango-only, once the store has acknowledged\n and the promised restore date has passed. -->\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' && selectedTicket?.issueStatus === 'identified' && selectedTicket?.status !== 'closed' && isRestoreDue\"\n class=\"d-flex mb-5 ms-5 mt-5\">\n <div class=\"d-flex flex-column justify-content-center align-items-center pe-3\">\n <div class=\"d-flex align-items-centre justify-content-centre\">\n <span>\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"40\" height=\"40\" rx=\"20\" fill=\"#EAF8FF\" />\n <path\n d=\"M30.4932 28.3351L29.6867 27.5286L20.9965 18.8384L23.5744 16.2605L24.1921 15.6416C24.251 15.5818 24.2843 15.5014 24.2847 15.4174C24.2845 15.3759 24.2761 15.3349 24.26 15.2966C24.2439 15.2584 24.2204 15.2237 24.1909 15.1945L23.572 14.5756L20.8381 11.8368L20.2192 11.218C20.19 11.1882 20.1551 11.1645 20.1166 11.1484C20.0781 11.1323 20.0368 11.124 19.995 11.124C19.9533 11.124 19.912 11.1323 19.8735 11.1484C19.835 11.1645 19.8001 11.1882 19.7709 11.218L19.152 11.8381L15.8016 15.1884C15.7719 15.2176 15.7483 15.2523 15.7322 15.2907C15.7161 15.3291 15.7077 15.3703 15.7077 15.412C15.7077 15.4536 15.7161 15.4948 15.7322 15.5332C15.7483 15.5716 15.7719 15.6064 15.8016 15.6355L19.0021 18.8372L10.3107 27.5286L9.50787 28.3351C9.44834 28.3941 9.41461 28.4743 9.41406 28.5581C9.41441 28.6391 9.4453 28.717 9.50056 28.7762C9.53007 28.8077 9.56573 28.8328 9.60533 28.85C9.64494 28.8672 9.68765 28.8761 9.73082 28.8761H17.5487C17.6326 28.8757 17.713 28.8423 17.7723 28.7829C17.8316 28.7236 17.8651 28.6432 17.8654 28.5593V27.782C17.8654 27.6979 17.8321 27.6172 17.7727 27.5576C17.7134 27.498 17.6328 27.4644 17.5487 27.464H12.3709L19.9987 19.8362L27.6265 27.464H22.4036C22.3195 27.4644 22.2389 27.498 22.1796 27.5576C22.1202 27.6172 22.0869 27.6979 22.0869 27.782V28.5593C22.0867 28.601 22.0949 28.6424 22.111 28.6809C22.1272 28.7194 22.1508 28.7543 22.1807 28.7835C22.2399 28.8426 22.32 28.8758 22.4036 28.8761H30.269C30.3124 28.8762 30.3553 28.8674 30.3952 28.8502C30.435 28.833 30.4708 28.8078 30.5005 28.7762C30.5574 28.7164 30.5885 28.6367 30.5872 28.5542C30.5858 28.4716 30.552 28.393 30.4932 28.3351ZM19.9938 12.9906L22.4219 15.4187L19.9999 17.8407L17.5718 15.4126L19.9938 12.9906Z\"\n fill=\"#00A3FF\" />\n </svg>\n </span>\n </div>\n <div class=\"p-0 h-100 mt-3 border border-1 border-gray\" style=\"width:0px\"></div>\n </div>\n <div class=\"pt-0 w-100\">\n <div class=\"d-flex\">\n <span class=\"headingtext text-capitalize\">Tango</span>\n <span class=\"timingtext px-3 pt-1\">Now</span>\n </div>\n <div class=\"textupdates fw-bold-400 mt-3\">Waiting on the store to restore the angle</div>\n <div class=\"issuecard w-100 mt-3\">\n <span class=\"maincard-label fw-bold\">Has the camera angle been restored?</span>\n <div class=\"mt-3 d-flex justify-content-between\">\n <button class=\"btn btn-outline w-45\" [disabled]=\"submitting\"\n (click)=\"replyRestored('Yes')\">\n Yes\n </button>\n <button class=\"btn w-45\"\n [ngClass]=\"restoreReply === 'No' ? 'bg-light-primary text-primary':'btn-outline'\"\n (click)=\"restoreReply = 'No'\"> No </button>\n </div>\n <div class=\"mt-5\" *ngIf=\"restoreReply === 'No'\">\n <div class=\"mb-3 mt-3\">\n <span>comments</span>\n <textarea class=\"w-100 mt-3\" [(ngModel)]=\"restoreComment\"\n placeholder=\"Enter your comments...\"></textarea>\n </div>\n <button class=\"btn btn-primary w-100 mt-3\" [disabled]=\"submitting\"\n (click)=\"replyRestored('No')\">Submit</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<!-- Angle change image popup -->\n<ng-template #angleImagePopup let-modal>\n <div class=\"modal-header border-0 pb-0\">\n <h5 class=\"maincard-label fw-bold mb-0\">Angle Change</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body pt-2\">\n <div class=\"rounded-3 overflow-hidden\">\n <img class=\"w-100\" [src]=\"cdnUrl(selectedTicket?.angleChangeImage)\" alt=\"angle change\">\n </div>\n </div>\n</ng-template>\n", styles: ["@charset \"UTF-8\";.card-label{font-size:18px!important}.roundedcheck input[type=checkbox]{width:16px!important;height:16px!important;border-radius:10px!important;-webkit-appearance:none;border:1px solid var(--Gray-500, #667085);background:var(--Gray-100, #F2F4F7)}.roundedcheck input[type=checkbox]:checked{background:var(--Primary, #009BF3);border-color:var(--Primary, #009BF3)}.prvtxt{color:var(--Gray-500, #667085);font-family:Inter;font-size:20px;font-style:normal;font-weight:700;line-height:20px;letter-spacing:-.4px}.textclr{color:var(--Gray-400, #98A2B3)}.refreshtxt{color:var(--Gray-400, #98A2B3);font-family:Inter;font-size:12px;font-style:normal;font-weight:500;line-height:18px;text-align:center}.img{border-radius:10px;border:1px solid var(--Gray-500, #667085);background:var(--Gray-100, #F2F4F7);width:100%;height:165px}.issuecard{width:19%;border-radius:10px;border:1px solid var(--Gray-200, #EAECF0);padding:16px}.issuecard label{color:var(--Black, #101828);font-size:14px;line-height:20px}.issuecard.active{border:none!important;background:var(--Primary-25, #F6FCFF);box-shadow:0 0 0 4px #e9f7ff}.contenttext{color:var(--Gray-500, #667085);font-size:14px;line-height:20px}.maincard-content{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD)}.maincard-label{color:var(--Gray-900, #101828);font-size:16px;line-height:24px}.profile{width:24px;height:24px;overflow:hidden;border-radius:200px}.timingtext{color:var(--Gray-500, #667085);font-size:12px;line-height:18px}.profile-label{font-size:12px;color:var(--Gray-500, #344054);line-height:16px}.openedissue{border-radius:6px;background:var(--Gray-50, #F9FAFB);padding:8px 12px}.w-45{width:49%}.angle-eye-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF)}.angle-eye-btn:hover{background:var(--Gray-50, #F9FAFB)}.camera{color:var(--Gray-900, #101828)!important;font-size:18px!important;line-height:28px!important}.headingtext{color:var(--Gray-700, #344054)!important;font-size:15px!important;font-weight:500;line-height:20px}input,textarea{padding:10px 14px;border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d}::placeholder{color:var(--Gray-500, #667085);font-size:16px;font-weight:400;line-height:24px}.msgprofile{width:48px!important;height:48px!important;border-radius:200px;overflow:hidden}.textupdates{color:var(--Gray-700, #344054);font-size:15px;line-height:24px}.investigation{color:var(--Gray-500, #344054);font-size:15px;line-height:24px}.fw-bold-400{font-weight:400!important}.fw-bold-700{font-weight:700!important}.update-label{color:#667085;font-size:14px;font-weight:400;line-height:20px}.update-value{color:#009bf3;font-size:14px;font-weight:500;line-height:20px}.ticket-card{border:1px solid #EAECF0;border-radius:12px;padding:18px 20px;background:#fff;cursor:pointer;transition:border-color .15s,box-shadow .15s}.ticket-card:hover{border-color:#b2ddff}.ticket-card.active{border-color:#009bf3;background:#f5fbff;box-shadow:0 0 0 3px #009bf31a}.tc-id{font-size:15px;font-weight:700;color:#101828;display:inline-flex;align-items:center}.tc-issue{font-size:14px;color:#475467;line-height:1.45}.tc-avatar{width:28px;height:28px;border-radius:50%}.tc-meta{font-size:12.5px;color:#667085;display:inline-flex;align-items:center;white-space:nowrap}.tc-status{font-size:12.5px;font-weight:600;border-radius:16px;padding:4px 12px;display:inline-flex;align-items:center;white-space:nowrap}.tc-dot{width:7px;height:7px;border-radius:50%;margin-right:7px;display:inline-block;background:currentColor}.tc-status.is-open{background:#fffaeb;color:#b54708}.tc-status.is-closed{background:#f2f4f7;color:#475467}.openedissue{padding:14px 0}.cam-dot{width:9px;height:9px;border-radius:50%;background:#12b76a;display:inline-block;margin-right:10px}.cam-name{font-size:15px;font-weight:700;color:#101828}.cam-zone-chip{background:#eff8ff;color:#175cd3;font-size:12.5px;font-weight:600;padding:3px 10px;border-radius:14px;margin-left:10px}.cam-issue-pill{background:#fef3f2;color:#b42318;font-size:12.5px;font-weight:600;padding:4px 12px;border-radius:14px;display:inline-flex;align-items:center;white-space:nowrap}.cam-issue-dot{width:7px;height:7px;border-radius:50%;background:#f04438;display:inline-block;margin-right:7px}.ack-options{flex-wrap:wrap}.ack-option{flex:1 1 0;min-width:240px;border:1px solid #EAECF0;border-radius:10px;padding:16px 18px;background:#fff;cursor:pointer;transition:border-color .15s,box-shadow .15s}.ack-option:hover{border-color:#b2ddff}.ack-option.selected{border-color:#009bf3;box-shadow:0 0 0 3px #009bf31a}.ack-radio{width:18px;height:18px;border-radius:50%;border:1.6px solid #D0D5DD;display:inline-block;flex:0 0 auto;margin-right:12px;background:#fff}.ack-radio.checked{border-color:#009bf3;background:#009bf3;box-shadow:inset 0 0 0 3.5px #fff}.ack-label{font-size:14px;font-weight:500;color:#344054}.ack-form{border:1px solid #EAECF0;border-radius:12px;padding:20px;background:#fff}.ack-field-label{display:block;font-size:14px;font-weight:600;color:#344054}.ack-textarea{border:1px solid #D0D5DD;border-radius:8px;padding:12px 14px;font-size:14px;color:#101828;resize:vertical;min-height:96px}.ack-textarea::placeholder{color:#98a2b3}.ack-textarea:focus{border-color:#009bf3;box-shadow:0 0 0 3px #009bf31a;outline:none}.day-stepper{border:1px solid #D0D5DD;border-radius:8px;overflow:hidden;width:190px}.day-btn{width:46px;height:46px;background:#fff;border:none;display:inline-flex;align-items:center;justify-content:center;padding:0}.day-btn:hover:not(:disabled){background:#f9fafb}.day-btn:disabled{opacity:.4;cursor:not-allowed}.day-input{flex:1 1 auto;width:100%;text-align:center;border:none;outline:none;font-size:16px;font-weight:700;color:#101828;background:#fff;border-left:1px solid #EAECF0;border-right:1px solid #EAECF0;height:46px}.ack-cancel{border:1px solid #D0D5DD;border-radius:8px;background:#fff;font-size:15px;font-weight:600;color:#344054;padding:11px 0}.ack-cancel:hover{background:#f9fafb}.ack-submit{border:none;border-radius:8px;background:#009bf3;font-size:15px;font-weight:600;color:#fff!important;padding:11px 0}.ack-submit:disabled{opacity:.45}.ack-panel{margin-left:3rem;width:auto!important}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i5.DatePipe, name: "date" }, { kind: "pipe", type: i2.CustomDateFormatPipe, name: "customDateFormat" }] });
|
|
283
304
|
}
|
|
284
305
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TicketCameraAngleComponent, decorators: [{
|
|
285
306
|
type: Component,
|
|
286
|
-
args: [{ selector: 'lib-ticket-camera-angle', template: "<div class=\"card\">\n <div class=\"card-header border-0 pt-3\">\n <h3 class=\"card-title align-items-start flex-column\">\n <span class=\"card-label mb-2\">Camera Angle Change</span>\n <span *ngIf=\"headerFilters?.date?.startDate === headerFilters?.date?.endDate\" class=\"text-sub mb-2\">An\n overview of all the tickets for till {{headerFilters?.date?.endDate | customDateFormat}}</span>\n <span *ngIf=\"headerFilters?.date?.startDate !== headerFilters?.date?.endDate\" class=\"text-sub mb-2\">An\n overview of all the tickets for {{headerFilters?.date?.startDate |\n customDateFormat}} - {{headerFilters?.date?.endDate | customDateFormat}}</span>\n </h3>\n </div>\n <div class=\"card-body\">\n <div class=\"d-flex justify-content-between mb-7\">\n <div *ngFor=\"let issue of ticketCard\" class=\"issuecard\">\n <div>\n <span class=\"title\">{{issue?.count}}</span>\n </div>\n <span class=\"label fw-semibold\">{{issue?.name}}</span>\n </div>\n </div>\n <div class=\"maincard-content\">\n <div class=\"row p-10\">\n <div class=\"col-sm-6 cursor-pointer\">\n <div *ngIf=\"!storeListLoading && !storeListNodata\">\n <div *ngFor=\"let data of tickets;let index = index\" class=\"issuecard w-100 mb-4\"\n (click)=\"ShowTicket(data,index)\"\n [ngClass]=\"(selectCard ? selectCard : 0) === index ? 'active' : ''\">\n <div class=\"maincard-label fw-bold d-flex justify-content-between mb-5\"><span> <img\n src='./assets/tango/Images/ticket.svg'>\n {{data.ticketId}}</span>\n <div\n class=\"contenttext d-flex justify-content-center align-items-center text-center fw-semibold px-3\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\n fill=\"none\">\n <path\n d=\"M10.6667 1.33398V4.00065M5.33333 1.33398V4.00065M2 6.66732H14M3.33333 2.66732H12.6667C13.403 2.66732 14 3.26427 14 4.00065V13.334C14 14.0704 13.403 14.6673 12.6667 14.6673H3.33333C2.59695 14.6673 2 14.0704 2 13.334V4.00065C2 3.26427 2.59695 2.66732 3.33333 2.66732Z\"\n stroke=\"#667085\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg><span class=\"mx-1\">{{(data?.createdAt| date:'dd-MM-yyyy')}}</span></div>\n </div>\n <div class=\"mb-5 maincard-label fw-bold\">\n {{data?.issue}}\n </div>\n <div *ngIf=\"data?.cameraName || data?.zone\" class=\"mb-5 contenttext fw-semibold\">\n {{data?.cameraName ? data?.cameraName : '--'}}<span\n *ngIf=\"data?.zone\"> · {{data?.zone}}</span>\n </div>\n\n <div class=\"d-flex justify-content-between\">\n <div class=\"profile d-flex align-items-centre justify-content-centre\">\n <img src=\"./assets/tango/Images/userProfile.svg\" alt=\"\">\n </div>\n <div class=\"d-flex justify-content-between\">\n <span class=\"badge\"\n [ngClass]=\"data.status === 'closed' ? 'badge-light-success' :(data.status === 'inprogress' ? 'badge-light-primary':'badge-light-warning')\">{{data.status\n | titlecase}}</span>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"storeListLoading\" class=\"contenttext fw-semibold text-center py-10\">Loading tickets\u2026\n </div>\n <div *ngIf=\"!storeListLoading && storeListNodata\" class=\"contenttext fw-semibold text-center py-10\">\n No Camera Angle tickets found</div>\n </div>\n\n <div *ngIf=\"previewLoading\" class=\"col-sm-6\">\n <div class=\"contenttext fw-semibold text-center py-10\">Loading ticket\u2026</div>\n </div>\n\n <div *ngIf=\"!previewLoading && selectedTicket?.status\" class=\"col-sm-6\">\n <div>\n <div class=\"maincard-label fw-bold d-flex justify-content-between mb-5\">\n <span><img src='./assets/tango/Images/ticket.svg'><span\n class=\"mx-2\">{{selectedTicket?.ticketId}}</span></span>\n <span\n [ngClass]=\"selectedTicket.status === 'closed' ? 'badge-light-success' :(selectedTicket.status === 'inprogress' ? 'badge-light-primary':'badge-light-warning')\"\n class=\"badge badge-light-primary\">{{selectedTicket?.status | titlecase}}</span>\n </div>\n <!-- Acknowledge \u2014 client-only, and hidden once acknowledged. -->\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'client' && selectedTicket?.status !== 'closed' && selectedTicket?.issueStatus !== 'identified'\"\n class=\"maincard-content w-100 mt-2 px-4 py-2 pb-4\">\n <div class=\"maincard-label fw-semibold py-2\">Select to acknowledge the change</div>\n <div class=\"maincard-content d-flex justify-content-between align-items-center w-100 mt-2 px-4 py-4\"\n (click)=\"ackReason = 'store'\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <span class=\"headingtext\">Changed intentionally from store</span>\n </div>\n <div class=\"roundedcheck d-flex align-items-center\">\n <input type=\"checkbox\" [checked]=\"ackReason === 'store'\" class=\"p-0\">\n </div>\n </div>\n <div class=\"maincard-content d-flex justify-content-between align-items-center w-100 mt-2 px-4 py-4\"\n (click)=\"ackReason = 'operational'\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <span class=\"headingtext\">Changed for operational purpose</span>\n </div>\n <div class=\"roundedcheck d-flex align-items-center\">\n <input type=\"checkbox\" [checked]=\"ackReason === 'operational'\" class=\"p-0\">\n </div>\n </div>\n\n <div *ngIf=\"changeType === 'angle'\" class=\"form-group pt-6\">\n <label for=\"revertDays\" class=\"maincard-label fw-semibold mb-2\">Days to change the angle\n back *</label>\n <div class=\"w-250px position-relative\">\n <div class=\"position-absolute translate-middle-y top-50 me-5 ps-3 ticketDays\">\n <span class=\"svg-icon toggle-off svg-icon-1\"\n [ngClass]=\"daysToRevert === 0 ? 'pe-none' : ''\" (click)=\"decrementDays()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\"\n viewBox=\"0 0 21 20\" fill=\"none\">\n <path d=\"M4.66602 10H16.3327\" stroke=\"#344054\" stroke-width=\"1.67\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n </div>\n <input type=\"text\" inputmode=\"numeric\" class=\"form-control\" id=\"revertDays\"\n style=\"text-align: center;\" [ngModel]=\"daysToRevert\"\n (ngModelChange)=\"onDaysInput($event)\" (blur)=\"onDaysBlur()\"\n (keypress)=\"allowDigitsOnly($event)\" placeholder=\"0\" />\n <div class=\"position-absolute translate-middle-y top-50 end-0 me-3\">\n <span class=\"svg-icon toggle-on svg-icon-1 ticketDays\"\n (click)=\"incrementDays()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\"\n viewBox=\"0 0 21 20\" fill=\"none\">\n <path d=\"M10.4993 4.1665V15.8332M4.66602 9.99984H16.3327\"\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n </div>\n </div>\n </div>\n\n <div class=\"d-flex justify-content-between align-items-center mt-10 mb-5\">\n <input class=\"form-control\" [(ngModel)]=\"ackComment\" type=\"text\"\n placeholder=\"Add your comments..\">\n <button class=\"btn btn-default btn-outline ms-3\"\n (click)=\"cancelAcknowledge()\">Cancel</button>\n <button [disabled]=\"!ackReason || submitting\" class=\"btn btn-primary ms-3\"\n (click)=\"submitAcknowledge()\"> Submit </button>\n </div>\n </div>\n\n <!-- Activity log -->\n <div class=\"mt-5\" *ngFor=\"let obj of viewTicketData\">\n <div *ngIf=\"obj.actionBy === 'User'\" class=\"d-flex ms-5\">\n <div class=\"d-flex flex-column justify-content-center align-items-center pe-3\">\n <div class=\"d-flex align-items-centre justify-content-centre\">\n <img class=\"msgprofile\" src=\"./assets/tango/Images/userProfile.svg\">\n </div>\n <div class=\"p-0 h-100 mt-3 border border-1 border-gray\" style=\"width:0px\"></div>\n </div>\n <div class=\"py-3 pt-0\">\n <div class=\"d-flex mb-3\">\n <span\n class=\"headingtext text-capitalize\">{{obj?.IdentifiedBy?obj?.IdentifiedBy:\"Tango\"}}</span>\n <span class=\"timingtext px-3 pt-1\">{{obj?.timeStamp | date: 'dd MMM, yyyy hh:mm\n a'}}</span>\n </div>\n <div *ngIf=\"obj?.description\" class=\"textupdates fw-bold-400 mt-2\">\n {{obj?.description}}</div>\n <div *ngIf=\"obj?.comment\" class=\"timingtext pe-3 pt-1 fw-bold-400\">{{obj?.comment}}\n </div>\n </div>\n </div>\n\n <div *ngIf=\"obj.actionBy === 'Tango' || obj.actionBy === 'automated'\" class=\"d-flex mb-5 ms-5\">\n <div class=\"d-flex flex-column justify-content-center align-items-center pe-3\">\n <div class=\"d-flex align-items-centre justify-content-centre\">\n <span>\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"40\" height=\"40\" rx=\"20\" fill=\"#EAF8FF\" />\n <path\n d=\"M30.4932 28.3351L29.6867 27.5286L20.9965 18.8384L23.5744 16.2605L24.1921 15.6416C24.251 15.5818 24.2843 15.5014 24.2847 15.4174C24.2845 15.3759 24.2761 15.3349 24.26 15.2966C24.2439 15.2584 24.2204 15.2237 24.1909 15.1945L23.572 14.5756L20.8381 11.8368L20.2192 11.218C20.19 11.1882 20.1551 11.1645 20.1166 11.1484C20.0781 11.1323 20.0368 11.124 19.995 11.124C19.9533 11.124 19.912 11.1323 19.8735 11.1484C19.835 11.1645 19.8001 11.1882 19.7709 11.218L19.152 11.8381L15.8016 15.1884C15.7719 15.2176 15.7483 15.2523 15.7322 15.2907C15.7161 15.3291 15.7077 15.3703 15.7077 15.412C15.7077 15.4536 15.7161 15.4948 15.7322 15.5332C15.7483 15.5716 15.7719 15.6064 15.8016 15.6355L19.0021 18.8372L10.3107 27.5286L9.50787 28.3351C9.44834 28.3941 9.41461 28.4743 9.41406 28.5581C9.41441 28.6391 9.4453 28.717 9.50056 28.7762C9.53007 28.8077 9.56573 28.8328 9.60533 28.85C9.64494 28.8672 9.68765 28.8761 9.73082 28.8761H17.5487C17.6326 28.8757 17.713 28.8423 17.7723 28.7829C17.8316 28.7236 17.8651 28.6432 17.8654 28.5593V27.782C17.8654 27.6979 17.8321 27.6172 17.7727 27.5576C17.7134 27.498 17.6328 27.4644 17.5487 27.464H12.3709L19.9987 19.8362L27.6265 27.464H22.4036C22.3195 27.4644 22.2389 27.498 22.1796 27.5576C22.1202 27.6172 22.0869 27.6979 22.0869 27.782V28.5593C22.0867 28.601 22.0949 28.6424 22.111 28.6809C22.1272 28.7194 22.1508 28.7543 22.1807 28.7835C22.2399 28.8426 22.32 28.8758 22.4036 28.8761H30.269C30.3124 28.8762 30.3553 28.8674 30.3952 28.8502C30.435 28.833 30.4708 28.8078 30.5005 28.7762C30.5574 28.7164 30.5885 28.6367 30.5872 28.5542C30.5858 28.4716 30.552 28.393 30.4932 28.3351ZM19.9938 12.9906L22.4219 15.4187L19.9999 17.8407L17.5718 15.4126L19.9938 12.9906Z\"\n fill=\"#00A3FF\" />\n </svg>\n </span>\n </div>\n <div class=\"p-0 h-100 mt-3 border border-1 border-gray\" style=\"width:0px\"></div>\n </div>\n <div class=\"pt-0 w-100\">\n <div class=\"d-flex\">\n <span\n class=\"headingtext text-capitalize\">{{obj?.IdentifiedBy?obj?.IdentifiedBy:\"Tango\"}}</span>\n <span class=\"timingtext px-3 pt-1\">{{obj?.timeStamp | date: 'dd MMM, yyyy hh:mm\n a'}}</span>\n </div>\n <div *ngIf=\"obj.actionType === 'defaultInfra'\" class=\"textupdates fw-bold-400 mt-3\">\n Your camera angle has been changed and we request you to acknowledge or to\n change the camera angle to process the data.\n </div>\n\n <!-- Change detail sits inside the first (default) comment. -->\n <ng-container *ngIf=\"obj.actionType === 'defaultInfra'\">\n <div class=\"openedissue d-flex justify-content-between align-items-center\">\n <span class=\"profile-label fw-semibold\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"20\" viewBox=\"0 0 24 20\"\n fill=\"none\">\n <path\n d=\"M23 17C23 17.5304 22.7893 18.0391 22.4142 18.4142C22.0391 18.7893 21.5304 19 21 19H3C2.46957 19 1.96086 18.7893 1.58579 18.4142C1.21071 18.0391 1 17.5304 1 17V6C1 5.46957 1.21071 4.96086 1.58579 4.58579C1.96086 4.21071 2.46957 4 3 4H7L9 1H15L17 4H21C21.5304 4 22.0391 4.21071 22.4142 4.58579C22.7893 4.96086 23 5.46957 23 6V17Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M12 15C14.2091 15 16 13.2091 16 11C16 8.79086 14.2091 7 12 7C9.79086 7 8 8.79086 8 11C8 13.2091 9.79086 15 12 15Z\"\n stroke=\"#475467\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n <span class=\"ms-2\">{{selectedTicket?.cameraName ? selectedTicket?.cameraName :\n 'Camera'}}</span>\n <span class=\"mx-2\" *ngIf=\"selectedTicket?.zone\">· {{selectedTicket?.zone}}</span>\n </span>\n <span class=\"profile-label fw-semibold\">{{selectedTicket?.issue}}</span>\n </div>\n\n <!-- ANGLE: expected/actual images -->\n <div *ngIf=\"changeType === 'angle'\" class=\"maincard-content w-100 mt-2 px-4 py-2 pb-4\">\n <div class=\"d-flex justify-content-between align-items-center py-2\">\n <span class=\"maincard-label fw-semibold\">Compare the expected and the current\n camera angle</span>\n <span class=\"angle-eye-btn cursor-pointer\" *ngIf=\"selectedTicket?.angleChangeImage\"\n title=\"View angle change image\" (click)=\"openAngleImage()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\n viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8Z\" stroke=\"#475467\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" stroke=\"#475467\" stroke-width=\"2\" />\n </svg>\n </span>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <span class=\"camera fw-bold mt-2\">Expected Camera Angle</span>\n <div *ngIf=\"selectedTicket?.expectedImage\"\n class=\"rounded-3 overflow-hidden mt-3\">\n <img class=\"w-100\" [src]=\"cdnUrl(selectedTicket.expectedImage)\" alt=\"expected\">\n </div>\n <div *ngIf=\"!selectedTicket?.expectedImage\" class=\"px-2 rounded\">\n <div class=\"img mt-4 px-3\">\n <div class=\"align-items-center justify-content-center d-flex flex-column\"\n style=\"margin-top: 20px;\">\n <span class=\"prvtxt mt-5 textclr\">Preview not available</span>\n <span class=\"refreshtxt mt-2 textclr\">The expected angle image is not\n available at the moment.</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-sm-6\">\n <span class=\"camera fw-bold mt-2\">Actual Camera Angle</span>\n <div *ngIf=\"selectedTicket?.actualImage\" class=\"rounded-3 overflow-hidden mt-3\">\n <img class=\"w-100\" [src]=\"cdnUrl(selectedTicket.actualImage)\" alt=\"actual\">\n </div>\n <div *ngIf=\"!selectedTicket?.actualImage\" class=\"px-2 rounded\">\n <div class=\"img mt-4 px-3\">\n <div class=\"align-items-center justify-content-center d-flex flex-column\"\n style=\"margin-top: 20px;\">\n <span class=\"prvtxt mt-5 textclr\">Preview not available</span>\n <span class=\"refreshtxt mt-2 textclr\">The actual angle image is not\n available at the moment.</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- RESOLUTION -->\n <div *ngIf=\"changeType === 'resolution'\" class=\"maincard-content w-100 mt-2 px-4 py-2 pb-4\">\n <div class=\"maincard-label fw-semibold py-2\">Resolution change detected</div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"maincard-content px-4 py-4 mt-2\">\n <span class=\"update-label\">Expected resolution</span>\n <div class=\"update-value mt-2\">{{selectedTicket?.expectedResolution ? selectedTicket?.expectedResolution : '--'}}</div>\n </div>\n </div>\n <div class=\"col-sm-6\">\n <div class=\"maincard-content px-4 py-4 mt-2\">\n <span class=\"update-label\">Actual resolution</span>\n <div class=\"update-value mt-2 text-danger\">{{selectedTicket?.actualResolution ? selectedTicket?.actualResolution : '--'}}</div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- IP -->\n <div *ngIf=\"changeType === 'ip'\" class=\"maincard-content w-100 mt-2 px-4 py-2 pb-4\">\n <div class=\"maincard-label fw-semibold py-2\">IP change detected</div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"maincard-content px-4 py-4 mt-2\">\n <span class=\"update-label\">Registered IP</span>\n <div class=\"update-value mt-2\">{{selectedTicket?.registeredIp ? selectedTicket?.registeredIp : '--'}}</div>\n <span class=\"timingtext\">Last connected</span>\n </div>\n </div>\n <div class=\"col-sm-6\">\n <div class=\"maincard-content px-4 py-4 mt-2\">\n <span class=\"update-label\">Current IP</span>\n <div class=\"update-value mt-2 text-danger\">{{selectedTicket?.currentIp ? selectedTicket?.currentIp : '--'}}</div>\n <span class=\"timingtext\">Feed disconnected</span>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div *ngIf=\"obj.actionType !== 'defaultInfra' && obj?.description\"\n class=\"textupdates fw-bold-400 mt-3\">{{obj?.description}}</div>\n <div *ngIf=\"obj?.comment\" class=\"timingtext pe-3 pt-1 fw-bold-400 mt-2\">\n {{obj?.comment}}</div>\n </div>\n </div>\n </div>\n\n <!-- Restore check \u2014 Tango-only, once the store has acknowledged\n and the promised restore date has passed. -->\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' && selectedTicket?.issueStatus === 'identified' && selectedTicket?.status !== 'closed' && isRestoreDue\"\n class=\"d-flex mb-5 ms-5 mt-5\">\n <div class=\"d-flex flex-column justify-content-center align-items-center pe-3\">\n <div class=\"d-flex align-items-centre justify-content-centre\">\n <span>\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"40\" height=\"40\" rx=\"20\" fill=\"#EAF8FF\" />\n <path\n d=\"M30.4932 28.3351L29.6867 27.5286L20.9965 18.8384L23.5744 16.2605L24.1921 15.6416C24.251 15.5818 24.2843 15.5014 24.2847 15.4174C24.2845 15.3759 24.2761 15.3349 24.26 15.2966C24.2439 15.2584 24.2204 15.2237 24.1909 15.1945L23.572 14.5756L20.8381 11.8368L20.2192 11.218C20.19 11.1882 20.1551 11.1645 20.1166 11.1484C20.0781 11.1323 20.0368 11.124 19.995 11.124C19.9533 11.124 19.912 11.1323 19.8735 11.1484C19.835 11.1645 19.8001 11.1882 19.7709 11.218L19.152 11.8381L15.8016 15.1884C15.7719 15.2176 15.7483 15.2523 15.7322 15.2907C15.7161 15.3291 15.7077 15.3703 15.7077 15.412C15.7077 15.4536 15.7161 15.4948 15.7322 15.5332C15.7483 15.5716 15.7719 15.6064 15.8016 15.6355L19.0021 18.8372L10.3107 27.5286L9.50787 28.3351C9.44834 28.3941 9.41461 28.4743 9.41406 28.5581C9.41441 28.6391 9.4453 28.717 9.50056 28.7762C9.53007 28.8077 9.56573 28.8328 9.60533 28.85C9.64494 28.8672 9.68765 28.8761 9.73082 28.8761H17.5487C17.6326 28.8757 17.713 28.8423 17.7723 28.7829C17.8316 28.7236 17.8651 28.6432 17.8654 28.5593V27.782C17.8654 27.6979 17.8321 27.6172 17.7727 27.5576C17.7134 27.498 17.6328 27.4644 17.5487 27.464H12.3709L19.9987 19.8362L27.6265 27.464H22.4036C22.3195 27.4644 22.2389 27.498 22.1796 27.5576C22.1202 27.6172 22.0869 27.6979 22.0869 27.782V28.5593C22.0867 28.601 22.0949 28.6424 22.111 28.6809C22.1272 28.7194 22.1508 28.7543 22.1807 28.7835C22.2399 28.8426 22.32 28.8758 22.4036 28.8761H30.269C30.3124 28.8762 30.3553 28.8674 30.3952 28.8502C30.435 28.833 30.4708 28.8078 30.5005 28.7762C30.5574 28.7164 30.5885 28.6367 30.5872 28.5542C30.5858 28.4716 30.552 28.393 30.4932 28.3351ZM19.9938 12.9906L22.4219 15.4187L19.9999 17.8407L17.5718 15.4126L19.9938 12.9906Z\"\n fill=\"#00A3FF\" />\n </svg>\n </span>\n </div>\n <div class=\"p-0 h-100 mt-3 border border-1 border-gray\" style=\"width:0px\"></div>\n </div>\n <div class=\"pt-0 w-100\">\n <div class=\"d-flex\">\n <span class=\"headingtext text-capitalize\">Tango</span>\n <span class=\"timingtext px-3 pt-1\">Now</span>\n </div>\n <div class=\"textupdates fw-bold-400 mt-3\">Waiting on the store to restore the angle</div>\n <div class=\"issuecard w-100 mt-3\">\n <span class=\"maincard-label fw-bold\">Has the camera angle been restored?</span>\n <div class=\"mt-3 d-flex justify-content-between\">\n <button class=\"btn btn-outline w-45\" [disabled]=\"submitting\"\n (click)=\"replyRestored('Yes')\">\n Yes\n </button>\n <button class=\"btn w-45\"\n [ngClass]=\"restoreReply === 'No' ? 'bg-light-primary text-primary':'btn-outline'\"\n (click)=\"restoreReply = 'No'\"> No </button>\n </div>\n <div class=\"mt-5\" *ngIf=\"restoreReply === 'No'\">\n <div class=\"mb-3 mt-3\">\n <span>comments</span>\n <textarea class=\"w-100 mt-3\" [(ngModel)]=\"restoreComment\"\n placeholder=\"Enter your comments...\"></textarea>\n </div>\n <button class=\"btn btn-primary w-100 mt-3\" [disabled]=\"submitting\"\n (click)=\"replyRestored('No')\">Submit</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<!-- Angle change image popup -->\n<ng-template #angleImagePopup let-modal>\n <div class=\"modal-header border-0 pb-0\">\n <h5 class=\"maincard-label fw-bold mb-0\">Angle Change</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body pt-2\">\n <div class=\"rounded-3 overflow-hidden\">\n <img class=\"w-100\" [src]=\"cdnUrl(selectedTicket?.angleChangeImage)\" alt=\"angle change\">\n </div>\n </div>\n</ng-template>\n", styles: [".card-label{font-size:18px!important}.roundedcheck input[type=checkbox]{width:16px!important;height:16px!important;border-radius:10px!important;-webkit-appearance:none;border:1px solid var(--Gray-500, #667085);background:var(--Gray-100, #F2F4F7)}.roundedcheck input[type=checkbox]:checked{background:var(--Primary, #009BF3);border-color:var(--Primary, #009BF3)}.prvtxt{color:var(--Gray-500, #667085);font-family:Inter;font-size:20px;font-style:normal;font-weight:700;line-height:20px;letter-spacing:-.4px}.textclr{color:var(--Gray-400, #98A2B3)}.refreshtxt{color:var(--Gray-400, #98A2B3);font-family:Inter;font-size:12px;font-style:normal;font-weight:500;line-height:18px;text-align:center}.img{border-radius:10px;border:1px solid var(--Gray-500, #667085);background:var(--Gray-100, #F2F4F7);width:100%;height:165px}.issuecard{width:19%;border-radius:10px;border:1px solid var(--Gray-200, #EAECF0);padding:16px}.issuecard label{color:var(--Black, #101828);font-size:14px;line-height:20px}.issuecard.active{border:none!important;background:var(--Primary-25, #F6FCFF);box-shadow:0 0 0 4px #e9f7ff}.contenttext{color:var(--Gray-500, #667085);font-size:14px;line-height:20px}.maincard-content{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD)}.maincard-label{color:var(--Gray-900, #101828);font-size:16px;line-height:24px}.profile{width:24px;height:24px;overflow:hidden;border-radius:200px}.timingtext{color:var(--Gray-500, #667085);font-size:12px;line-height:18px}.profile-label{font-size:12px;color:var(--Gray-500, #344054);line-height:16px}.openedissue{border-radius:6px;background:var(--Gray-50, #F9FAFB);padding:8px 12px}.w-45{width:49%}.angle-eye-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF)}.angle-eye-btn:hover{background:var(--Gray-50, #F9FAFB)}.camera{color:var(--Gray-900, #101828)!important;font-size:18px!important;line-height:28px!important}.headingtext{color:var(--Gray-700, #344054)!important;font-size:15px!important;font-weight:500;line-height:20px}input,textarea{padding:10px 14px;border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d}::placeholder{color:var(--Gray-500, #667085);font-size:16px;font-weight:400;line-height:24px}.msgprofile{width:48px!important;height:48px!important;border-radius:200px;overflow:hidden}.textupdates{color:var(--Gray-700, #344054);font-size:15px;line-height:24px}.investigation{color:var(--Gray-500, #344054);font-size:15px;line-height:24px}.fw-bold-400{font-weight:400!important}.fw-bold-700{font-weight:700!important}.update-label{color:#667085;font-size:14px;font-weight:400;line-height:20px}.update-value{color:#009bf3;font-size:14px;font-weight:500;line-height:20px}\n"] }]
|
|
307
|
+
args: [{ selector: 'lib-ticket-camera-angle', template: "<div class=\"card\">\n <div class=\"card-header border-0 pt-3\">\n <h3 class=\"card-title align-items-start flex-column\">\n <span class=\"card-label mb-2\">Camera Angle Change</span>\n <span *ngIf=\"headerFilters?.date?.startDate === headerFilters?.date?.endDate\" class=\"text-sub mb-2\">An\n overview of all the tickets for till {{headerFilters?.date?.endDate | customDateFormat}}</span>\n <span *ngIf=\"headerFilters?.date?.startDate !== headerFilters?.date?.endDate\" class=\"text-sub mb-2\">An\n overview of all the tickets for {{headerFilters?.date?.startDate |\n customDateFormat}} - {{headerFilters?.date?.endDate | customDateFormat}}</span>\n </h3>\n </div>\n <div class=\"card-body\">\n <div class=\"d-flex justify-content-between mb-7\">\n <div *ngFor=\"let issue of ticketCard\" class=\"issuecard\">\n <div>\n <span class=\"title\">{{issue?.count}}</span>\n </div>\n <span class=\"label fw-semibold\">{{issue?.name}}</span>\n </div>\n </div>\n <div class=\"maincard-content\">\n <div class=\"row p-10\">\n <div class=\"col-sm-6 cursor-pointer\">\n <div *ngIf=\"!storeListLoading && !storeListNodata\">\n <div *ngFor=\"let data of tickets;let index = index\" class=\"ticket-card mb-4\"\n (click)=\"ShowTicket(data,index)\"\n [ngClass]=\"(selectCard ? selectCard : 0) === index ? 'active' : ''\">\n <!-- Row 1: ticket id + status pill -->\n <div class=\"d-flex justify-content-between align-items-center mb-3\">\n <span class=\"tc-id\"><img src='./assets/tango/Images/ticket.svg' class=\"me-2\">{{data.ticketId}}</span>\n <span class=\"tc-status\"\n [ngClass]=\"data.status === 'closed' ? 'is-closed' : (data.status === 'inprogress' ? 'badge-light-primary' : 'is-open')\">\n <span class=\"tc-dot\"></span>{{data.status | titlecase}}</span>\n </div>\n <!-- Row 2: what changed -->\n <div class=\"tc-issue mb-4\">{{issueDescription(data)}}</div>\n <!-- Row 3: avatar + comments + date -->\n <div class=\"d-flex justify-content-between align-items-center\">\n <img class=\"tc-avatar\" src=\"./assets/tango/Images/userProfile.svg\" alt=\"\">\n <div class=\"d-flex align-items-center\">\n <span class=\"tc-meta me-4\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" class=\"me-1 align-middle\">\n <path d=\"M14 7.667a5.6 5.6 0 0 1-.6 2.533 5.667 5.667 0 0 1-5.067 3.133 5.6 5.6 0 0 1-2.533-.6L2 14l1.267-3.8a5.6 5.6 0 0 1-.6-2.533A5.667 5.667 0 0 1 5.8 2.6a5.6 5.6 0 0 1 2.533-.6h.334A5.653 5.653 0 0 1 14 7.333v.334Z\"\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>{{commentCount(data)}} comments</span>\n <span class=\"tc-meta\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" class=\"me-1 align-middle\">\n <path d=\"M10.667 1.334V4M5.333 1.334V4M2 6.667h12M3.333 2.667h9.334c.736 0 1.333.597 1.333 1.333v9.334c0 .736-.597 1.333-1.333 1.333H3.333A1.333 1.333 0 0 1 2 13.334V4c0-.736.597-1.333 1.333-1.333Z\"\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>{{(data?.createdAt | date:'dd MMM, yyyy')}}</span>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"storeListLoading\" class=\"contenttext fw-semibold text-center py-10\">Loading tickets\u2026\n </div>\n <div *ngIf=\"!storeListLoading && storeListNodata\" class=\"contenttext fw-semibold text-center py-10\">\n No Camera Angle tickets found</div>\n </div>\n\n <div *ngIf=\"previewLoading\" class=\"col-sm-6\">\n <div class=\"contenttext fw-semibold text-center py-10\">Loading ticket\u2026</div>\n </div>\n\n <div *ngIf=\"!previewLoading && selectedTicket?.status\" class=\"col-sm-6\">\n <div>\n <div class=\"maincard-label fw-bold d-flex justify-content-between mb-5\">\n <span><img src='./assets/tango/Images/ticket.svg'><span\n class=\"mx-2\">{{selectedTicket?.ticketId}}</span></span>\n <span\n [ngClass]=\"selectedTicket.status === 'closed' ? 'badge-light-success' :(selectedTicket.status === 'inprogress' ? 'badge-light-primary':'badge-light-warning')\"\n class=\"badge badge-light-primary\">{{selectedTicket?.status | titlecase}}</span>\n </div>\n\n <!-- Activity log -->\n <div class=\"mt-5\" *ngFor=\"let obj of viewTicketData\">\n <div *ngIf=\"obj.actionBy === 'User'\" class=\"d-flex ms-5\">\n <div class=\"d-flex flex-column justify-content-center align-items-center pe-3\">\n <div class=\"d-flex align-items-centre justify-content-centre\">\n <img class=\"msgprofile\" src=\"./assets/tango/Images/userProfile.svg\">\n </div>\n <div class=\"p-0 h-100 mt-3 border border-1 border-gray\" style=\"width:0px\"></div>\n </div>\n <div class=\"py-3 pt-0\">\n <div class=\"d-flex mb-3\">\n <span\n class=\"headingtext text-capitalize\">{{obj?.IdentifiedBy?obj?.IdentifiedBy:\"Tango\"}}</span>\n <span class=\"timingtext px-3 pt-1\">{{obj?.timeStamp | date: 'dd MMM, yyyy hh:mm\n a'}}</span>\n </div>\n <div *ngIf=\"obj?.description\" class=\"textupdates fw-bold-400 mt-2\">\n {{obj?.description}}</div>\n <div *ngIf=\"obj?.comment\" class=\"timingtext pe-3 pt-1 fw-bold-400\">{{obj?.comment}}\n </div>\n </div>\n </div>\n\n <div *ngIf=\"obj.actionBy === 'Tango' || obj.actionBy === 'automated'\" class=\"d-flex mb-5 ms-5\">\n <div class=\"d-flex flex-column justify-content-center align-items-center pe-3\">\n <div class=\"d-flex align-items-centre justify-content-centre\">\n <span>\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"40\" height=\"40\" rx=\"20\" fill=\"#EAF8FF\" />\n <path\n d=\"M30.4932 28.3351L29.6867 27.5286L20.9965 18.8384L23.5744 16.2605L24.1921 15.6416C24.251 15.5818 24.2843 15.5014 24.2847 15.4174C24.2845 15.3759 24.2761 15.3349 24.26 15.2966C24.2439 15.2584 24.2204 15.2237 24.1909 15.1945L23.572 14.5756L20.8381 11.8368L20.2192 11.218C20.19 11.1882 20.1551 11.1645 20.1166 11.1484C20.0781 11.1323 20.0368 11.124 19.995 11.124C19.9533 11.124 19.912 11.1323 19.8735 11.1484C19.835 11.1645 19.8001 11.1882 19.7709 11.218L19.152 11.8381L15.8016 15.1884C15.7719 15.2176 15.7483 15.2523 15.7322 15.2907C15.7161 15.3291 15.7077 15.3703 15.7077 15.412C15.7077 15.4536 15.7161 15.4948 15.7322 15.5332C15.7483 15.5716 15.7719 15.6064 15.8016 15.6355L19.0021 18.8372L10.3107 27.5286L9.50787 28.3351C9.44834 28.3941 9.41461 28.4743 9.41406 28.5581C9.41441 28.6391 9.4453 28.717 9.50056 28.7762C9.53007 28.8077 9.56573 28.8328 9.60533 28.85C9.64494 28.8672 9.68765 28.8761 9.73082 28.8761H17.5487C17.6326 28.8757 17.713 28.8423 17.7723 28.7829C17.8316 28.7236 17.8651 28.6432 17.8654 28.5593V27.782C17.8654 27.6979 17.8321 27.6172 17.7727 27.5576C17.7134 27.498 17.6328 27.4644 17.5487 27.464H12.3709L19.9987 19.8362L27.6265 27.464H22.4036C22.3195 27.4644 22.2389 27.498 22.1796 27.5576C22.1202 27.6172 22.0869 27.6979 22.0869 27.782V28.5593C22.0867 28.601 22.0949 28.6424 22.111 28.6809C22.1272 28.7194 22.1508 28.7543 22.1807 28.7835C22.2399 28.8426 22.32 28.8758 22.4036 28.8761H30.269C30.3124 28.8762 30.3553 28.8674 30.3952 28.8502C30.435 28.833 30.4708 28.8078 30.5005 28.7762C30.5574 28.7164 30.5885 28.6367 30.5872 28.5542C30.5858 28.4716 30.552 28.393 30.4932 28.3351ZM19.9938 12.9906L22.4219 15.4187L19.9999 17.8407L17.5718 15.4126L19.9938 12.9906Z\"\n fill=\"#00A3FF\" />\n </svg>\n </span>\n </div>\n <div class=\"p-0 h-100 mt-3 border border-1 border-gray\" style=\"width:0px\"></div>\n </div>\n <div class=\"pt-0 w-100\">\n <div class=\"d-flex\">\n <span\n class=\"headingtext text-capitalize\">{{obj?.IdentifiedBy?obj?.IdentifiedBy:\"Tango\"}}</span>\n <span class=\"timingtext px-3 pt-1\">{{obj?.timeStamp | date: 'dd MMM, yyyy hh:mm\n a'}}</span>\n </div>\n <div *ngIf=\"obj.actionType === 'defaultInfra'\" class=\"textupdates fw-bold-400 mt-3\">\n Your camera angle has been changed and we request you to acknowledge or to\n change the camera angle to process the data.\n </div>\n\n <!-- Change detail sits inside the first (default) comment. -->\n <ng-container *ngIf=\"obj.actionType === 'defaultInfra'\">\n <div class=\"openedissue d-flex justify-content-between align-items-center\">\n <span class=\"profile-label fw-semibold\">\n <span class=\"cam-dot\"></span>\n <span class=\"cam-name\">{{selectedTicket?.cameraName ? selectedTicket?.cameraName :\n 'Camera'}}</span>\n <span class=\"cam-zone-chip\" *ngIf=\"selectedTicket?.zone\">{{selectedTicket?.zone}}</span>\n </span>\n <span class=\"cam-issue-pill\"><span class=\"cam-issue-dot\"></span>{{selectedTicket?.issue}}</span>\n </div>\n\n <!-- ANGLE: expected/actual images -->\n <div *ngIf=\"changeType === 'angle'\" class=\"maincard-content w-100 mt-2 px-4 py-2 pb-4\">\n <div class=\"d-flex justify-content-between align-items-center py-2\">\n <span class=\"maincard-label fw-semibold\">Compare the expected and the current\n camera angle</span>\n <span class=\"angle-eye-btn cursor-pointer\" *ngIf=\"selectedTicket?.angleChangeImage\"\n title=\"View angle change image\" (click)=\"openAngleImage()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\n viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8Z\" stroke=\"#475467\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" stroke=\"#475467\" stroke-width=\"2\" />\n </svg>\n </span>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <span class=\"camera fw-bold mt-2\">Expected Camera Angle</span>\n <div *ngIf=\"selectedTicket?.expectedImage\"\n class=\"rounded-3 overflow-hidden mt-3\">\n <img class=\"w-100\" [src]=\"cdnUrl(selectedTicket.expectedImage)\" alt=\"expected\">\n </div>\n <div *ngIf=\"!selectedTicket?.expectedImage\" class=\"px-2 rounded\">\n <div class=\"img mt-4 px-3\">\n <div class=\"align-items-center justify-content-center d-flex flex-column\"\n style=\"margin-top: 20px;\">\n <span class=\"prvtxt mt-5 textclr\">Preview not available</span>\n <span class=\"refreshtxt mt-2 textclr\">The expected angle image is not\n available at the moment.</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-sm-6\">\n <span class=\"camera fw-bold mt-2\">Actual Camera Angle</span>\n <div *ngIf=\"selectedTicket?.actualImage\" class=\"rounded-3 overflow-hidden mt-3\">\n <img class=\"w-100\" [src]=\"cdnUrl(selectedTicket.actualImage)\" alt=\"actual\">\n </div>\n <div *ngIf=\"!selectedTicket?.actualImage\" class=\"px-2 rounded\">\n <div class=\"img mt-4 px-3\">\n <div class=\"align-items-center justify-content-center d-flex flex-column\"\n style=\"margin-top: 20px;\">\n <span class=\"prvtxt mt-5 textclr\">Preview not available</span>\n <span class=\"refreshtxt mt-2 textclr\">The actual angle image is not\n available at the moment.</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- RESOLUTION -->\n <div *ngIf=\"changeType === 'resolution'\" class=\"maincard-content w-100 mt-2 px-4 py-2 pb-4\">\n <div class=\"maincard-label fw-semibold py-2\">Resolution change detected</div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"maincard-content px-4 py-4 mt-2\">\n <span class=\"update-label\">Expected resolution</span>\n <div class=\"update-value mt-2\">{{selectedTicket?.expectedResolution ? selectedTicket?.expectedResolution : '--'}}</div>\n </div>\n </div>\n <div class=\"col-sm-6\">\n <div class=\"maincard-content px-4 py-4 mt-2\">\n <span class=\"update-label\">Actual resolution</span>\n <div class=\"update-value mt-2 text-danger\">{{selectedTicket?.actualResolution ? selectedTicket?.actualResolution : '--'}}</div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- IP -->\n <div *ngIf=\"changeType === 'ip'\" class=\"maincard-content w-100 mt-2 px-4 py-2 pb-4\">\n <div class=\"maincard-label fw-semibold py-2\">IP change detected</div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"maincard-content px-4 py-4 mt-2\">\n <span class=\"update-label\">Registered IP</span>\n <div class=\"update-value mt-2\">{{selectedTicket?.registeredIp ? selectedTicket?.registeredIp : '--'}}</div>\n <span class=\"timingtext\">Last connected</span>\n </div>\n </div>\n <div class=\"col-sm-6\">\n <div class=\"maincard-content px-4 py-4 mt-2\">\n <span class=\"update-label\">Current IP</span>\n <div class=\"update-value mt-2 text-danger\">{{selectedTicket?.currentIp ? selectedTicket?.currentIp : '--'}}</div>\n <span class=\"timingtext\">Feed disconnected</span>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n\n <div *ngIf=\"obj.actionType !== 'defaultInfra' && obj?.description\"\n class=\"textupdates fw-bold-400 mt-3\">{{obj?.description}}</div>\n <div *ngIf=\"obj?.comment\" class=\"timingtext pe-3 pt-1 fw-bold-400 mt-2\">\n {{obj?.comment}}</div>\n </div>\n </div>\n </div>\n\n <!-- Acknowledge \u2014 client-only, and hidden once acknowledged. -->\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'client' && selectedTicket?.status !== 'closed' && selectedTicket?.issueStatus !== 'identified'\"\n class=\"maincard-content ack-panel w-100 mt-4 px-4 py-4\">\n <div class=\"maincard-label fw-semibold py-2\">Select to acknowledge the change</div>\n <div class=\"ack-options d-flex gap-3 mt-2\">\n <div class=\"ack-option d-flex align-items-center\" [class.selected]=\"ackReason === 'store'\"\n (click)=\"ackReason = 'store'\">\n <span class=\"ack-radio\" [class.checked]=\"ackReason === 'store'\"></span>\n <span class=\"ack-label\">Changed intentionally from store</span>\n </div>\n <div class=\"ack-option d-flex align-items-center\" [class.selected]=\"ackReason === 'operational'\"\n (click)=\"ackReason = 'operational'\">\n <span class=\"ack-radio\" [class.checked]=\"ackReason === 'operational'\"></span>\n <span class=\"ack-label\">Changed for operational purpose</span>\n </div>\n </div>\n\n <!-- Revealed once a reason is chosen, matching the design: the form\n only becomes relevant after an option is selected. -->\n <div class=\"ack-form mt-3\" *ngIf=\"ackReason\">\n <div class=\"form-group\">\n <label class=\"ack-field-label mb-2\">Comment</label>\n <textarea class=\"form-control ack-textarea\" rows=\"3\" [(ngModel)]=\"ackComment\"\n placeholder=\"e.g. Angle moved for a promo display; will reset after the event.\"></textarea>\n </div>\n\n <div *ngIf=\"changeType === 'angle'\" class=\"form-group mt-4\">\n <label for=\"revertDays\" class=\"ack-field-label mb-2\">Days to change the angle back *</label>\n <div class=\"day-stepper d-flex align-items-center\">\n <button type=\"button\" class=\"day-btn\" [disabled]=\"daysToRevert === 0\"\n (click)=\"decrementDays()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\n <path d=\"M4.666 10h11.667\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"/>\n </svg>\n </button>\n <input type=\"text\" inputmode=\"numeric\" class=\"day-input\" id=\"revertDays\"\n [ngModel]=\"daysToRevert\" (ngModelChange)=\"onDaysInput($event)\"\n (blur)=\"onDaysBlur()\" (keypress)=\"allowDigitsOnly($event)\" placeholder=\"0\" />\n <button type=\"button\" class=\"day-btn\" (click)=\"incrementDays()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 21 20\" fill=\"none\">\n <path d=\"M10.5 4.167v11.666M4.666 10h11.667\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n\n <div class=\"d-flex gap-3 mt-5\">\n <button class=\"btn ack-cancel flex-fill\" (click)=\"cancelAcknowledge()\">Cancel</button>\n <button [disabled]=\"!ackReason || submitting\" class=\"btn ack-submit flex-fill\"\n (click)=\"submitAcknowledge()\">Submit</button>\n </div>\n </div>\n </div>\n\n <!-- Restore check \u2014 Tango-only, once the store has acknowledged\n and the promised restore date has passed. -->\n <div *ngIf=\"(gs.userAccess | async)?.userType === 'tango' && selectedTicket?.issueStatus === 'identified' && selectedTicket?.status !== 'closed' && isRestoreDue\"\n class=\"d-flex mb-5 ms-5 mt-5\">\n <div class=\"d-flex flex-column justify-content-center align-items-center pe-3\">\n <div class=\"d-flex align-items-centre justify-content-centre\">\n <span>\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"40\" height=\"40\" rx=\"20\" fill=\"#EAF8FF\" />\n <path\n d=\"M30.4932 28.3351L29.6867 27.5286L20.9965 18.8384L23.5744 16.2605L24.1921 15.6416C24.251 15.5818 24.2843 15.5014 24.2847 15.4174C24.2845 15.3759 24.2761 15.3349 24.26 15.2966C24.2439 15.2584 24.2204 15.2237 24.1909 15.1945L23.572 14.5756L20.8381 11.8368L20.2192 11.218C20.19 11.1882 20.1551 11.1645 20.1166 11.1484C20.0781 11.1323 20.0368 11.124 19.995 11.124C19.9533 11.124 19.912 11.1323 19.8735 11.1484C19.835 11.1645 19.8001 11.1882 19.7709 11.218L19.152 11.8381L15.8016 15.1884C15.7719 15.2176 15.7483 15.2523 15.7322 15.2907C15.7161 15.3291 15.7077 15.3703 15.7077 15.412C15.7077 15.4536 15.7161 15.4948 15.7322 15.5332C15.7483 15.5716 15.7719 15.6064 15.8016 15.6355L19.0021 18.8372L10.3107 27.5286L9.50787 28.3351C9.44834 28.3941 9.41461 28.4743 9.41406 28.5581C9.41441 28.6391 9.4453 28.717 9.50056 28.7762C9.53007 28.8077 9.56573 28.8328 9.60533 28.85C9.64494 28.8672 9.68765 28.8761 9.73082 28.8761H17.5487C17.6326 28.8757 17.713 28.8423 17.7723 28.7829C17.8316 28.7236 17.8651 28.6432 17.8654 28.5593V27.782C17.8654 27.6979 17.8321 27.6172 17.7727 27.5576C17.7134 27.498 17.6328 27.4644 17.5487 27.464H12.3709L19.9987 19.8362L27.6265 27.464H22.4036C22.3195 27.4644 22.2389 27.498 22.1796 27.5576C22.1202 27.6172 22.0869 27.6979 22.0869 27.782V28.5593C22.0867 28.601 22.0949 28.6424 22.111 28.6809C22.1272 28.7194 22.1508 28.7543 22.1807 28.7835C22.2399 28.8426 22.32 28.8758 22.4036 28.8761H30.269C30.3124 28.8762 30.3553 28.8674 30.3952 28.8502C30.435 28.833 30.4708 28.8078 30.5005 28.7762C30.5574 28.7164 30.5885 28.6367 30.5872 28.5542C30.5858 28.4716 30.552 28.393 30.4932 28.3351ZM19.9938 12.9906L22.4219 15.4187L19.9999 17.8407L17.5718 15.4126L19.9938 12.9906Z\"\n fill=\"#00A3FF\" />\n </svg>\n </span>\n </div>\n <div class=\"p-0 h-100 mt-3 border border-1 border-gray\" style=\"width:0px\"></div>\n </div>\n <div class=\"pt-0 w-100\">\n <div class=\"d-flex\">\n <span class=\"headingtext text-capitalize\">Tango</span>\n <span class=\"timingtext px-3 pt-1\">Now</span>\n </div>\n <div class=\"textupdates fw-bold-400 mt-3\">Waiting on the store to restore the angle</div>\n <div class=\"issuecard w-100 mt-3\">\n <span class=\"maincard-label fw-bold\">Has the camera angle been restored?</span>\n <div class=\"mt-3 d-flex justify-content-between\">\n <button class=\"btn btn-outline w-45\" [disabled]=\"submitting\"\n (click)=\"replyRestored('Yes')\">\n Yes\n </button>\n <button class=\"btn w-45\"\n [ngClass]=\"restoreReply === 'No' ? 'bg-light-primary text-primary':'btn-outline'\"\n (click)=\"restoreReply = 'No'\"> No </button>\n </div>\n <div class=\"mt-5\" *ngIf=\"restoreReply === 'No'\">\n <div class=\"mb-3 mt-3\">\n <span>comments</span>\n <textarea class=\"w-100 mt-3\" [(ngModel)]=\"restoreComment\"\n placeholder=\"Enter your comments...\"></textarea>\n </div>\n <button class=\"btn btn-primary w-100 mt-3\" [disabled]=\"submitting\"\n (click)=\"replyRestored('No')\">Submit</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<!-- Angle change image popup -->\n<ng-template #angleImagePopup let-modal>\n <div class=\"modal-header border-0 pb-0\">\n <h5 class=\"maincard-label fw-bold mb-0\">Angle Change</h5>\n <button type=\"button\" class=\"btn-close\" aria-label=\"Close\" (click)=\"modal.dismiss()\"></button>\n </div>\n <div class=\"modal-body pt-2\">\n <div class=\"rounded-3 overflow-hidden\">\n <img class=\"w-100\" [src]=\"cdnUrl(selectedTicket?.angleChangeImage)\" alt=\"angle change\">\n </div>\n </div>\n</ng-template>\n", styles: ["@charset \"UTF-8\";.card-label{font-size:18px!important}.roundedcheck input[type=checkbox]{width:16px!important;height:16px!important;border-radius:10px!important;-webkit-appearance:none;border:1px solid var(--Gray-500, #667085);background:var(--Gray-100, #F2F4F7)}.roundedcheck input[type=checkbox]:checked{background:var(--Primary, #009BF3);border-color:var(--Primary, #009BF3)}.prvtxt{color:var(--Gray-500, #667085);font-family:Inter;font-size:20px;font-style:normal;font-weight:700;line-height:20px;letter-spacing:-.4px}.textclr{color:var(--Gray-400, #98A2B3)}.refreshtxt{color:var(--Gray-400, #98A2B3);font-family:Inter;font-size:12px;font-style:normal;font-weight:500;line-height:18px;text-align:center}.img{border-radius:10px;border:1px solid var(--Gray-500, #667085);background:var(--Gray-100, #F2F4F7);width:100%;height:165px}.issuecard{width:19%;border-radius:10px;border:1px solid var(--Gray-200, #EAECF0);padding:16px}.issuecard label{color:var(--Black, #101828);font-size:14px;line-height:20px}.issuecard.active{border:none!important;background:var(--Primary-25, #F6FCFF);box-shadow:0 0 0 4px #e9f7ff}.contenttext{color:var(--Gray-500, #667085);font-size:14px;line-height:20px}.maincard-content{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD)}.maincard-label{color:var(--Gray-900, #101828);font-size:16px;line-height:24px}.profile{width:24px;height:24px;overflow:hidden;border-radius:200px}.timingtext{color:var(--Gray-500, #667085);font-size:12px;line-height:18px}.profile-label{font-size:12px;color:var(--Gray-500, #344054);line-height:16px}.openedissue{border-radius:6px;background:var(--Gray-50, #F9FAFB);padding:8px 12px}.w-45{width:49%}.angle-eye-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF)}.angle-eye-btn:hover{background:var(--Gray-50, #F9FAFB)}.camera{color:var(--Gray-900, #101828)!important;font-size:18px!important;line-height:28px!important}.headingtext{color:var(--Gray-700, #344054)!important;font-size:15px!important;font-weight:500;line-height:20px}input,textarea{padding:10px 14px;border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d}::placeholder{color:var(--Gray-500, #667085);font-size:16px;font-weight:400;line-height:24px}.msgprofile{width:48px!important;height:48px!important;border-radius:200px;overflow:hidden}.textupdates{color:var(--Gray-700, #344054);font-size:15px;line-height:24px}.investigation{color:var(--Gray-500, #344054);font-size:15px;line-height:24px}.fw-bold-400{font-weight:400!important}.fw-bold-700{font-weight:700!important}.update-label{color:#667085;font-size:14px;font-weight:400;line-height:20px}.update-value{color:#009bf3;font-size:14px;font-weight:500;line-height:20px}.ticket-card{border:1px solid #EAECF0;border-radius:12px;padding:18px 20px;background:#fff;cursor:pointer;transition:border-color .15s,box-shadow .15s}.ticket-card:hover{border-color:#b2ddff}.ticket-card.active{border-color:#009bf3;background:#f5fbff;box-shadow:0 0 0 3px #009bf31a}.tc-id{font-size:15px;font-weight:700;color:#101828;display:inline-flex;align-items:center}.tc-issue{font-size:14px;color:#475467;line-height:1.45}.tc-avatar{width:28px;height:28px;border-radius:50%}.tc-meta{font-size:12.5px;color:#667085;display:inline-flex;align-items:center;white-space:nowrap}.tc-status{font-size:12.5px;font-weight:600;border-radius:16px;padding:4px 12px;display:inline-flex;align-items:center;white-space:nowrap}.tc-dot{width:7px;height:7px;border-radius:50%;margin-right:7px;display:inline-block;background:currentColor}.tc-status.is-open{background:#fffaeb;color:#b54708}.tc-status.is-closed{background:#f2f4f7;color:#475467}.openedissue{padding:14px 0}.cam-dot{width:9px;height:9px;border-radius:50%;background:#12b76a;display:inline-block;margin-right:10px}.cam-name{font-size:15px;font-weight:700;color:#101828}.cam-zone-chip{background:#eff8ff;color:#175cd3;font-size:12.5px;font-weight:600;padding:3px 10px;border-radius:14px;margin-left:10px}.cam-issue-pill{background:#fef3f2;color:#b42318;font-size:12.5px;font-weight:600;padding:4px 12px;border-radius:14px;display:inline-flex;align-items:center;white-space:nowrap}.cam-issue-dot{width:7px;height:7px;border-radius:50%;background:#f04438;display:inline-block;margin-right:7px}.ack-options{flex-wrap:wrap}.ack-option{flex:1 1 0;min-width:240px;border:1px solid #EAECF0;border-radius:10px;padding:16px 18px;background:#fff;cursor:pointer;transition:border-color .15s,box-shadow .15s}.ack-option:hover{border-color:#b2ddff}.ack-option.selected{border-color:#009bf3;box-shadow:0 0 0 3px #009bf31a}.ack-radio{width:18px;height:18px;border-radius:50%;border:1.6px solid #D0D5DD;display:inline-block;flex:0 0 auto;margin-right:12px;background:#fff}.ack-radio.checked{border-color:#009bf3;background:#009bf3;box-shadow:inset 0 0 0 3.5px #fff}.ack-label{font-size:14px;font-weight:500;color:#344054}.ack-form{border:1px solid #EAECF0;border-radius:12px;padding:20px;background:#fff}.ack-field-label{display:block;font-size:14px;font-weight:600;color:#344054}.ack-textarea{border:1px solid #D0D5DD;border-radius:8px;padding:12px 14px;font-size:14px;color:#101828;resize:vertical;min-height:96px}.ack-textarea::placeholder{color:#98a2b3}.ack-textarea:focus{border-color:#009bf3;box-shadow:0 0 0 3px #009bf31a;outline:none}.day-stepper{border:1px solid #D0D5DD;border-radius:8px;overflow:hidden;width:190px}.day-btn{width:46px;height:46px;background:#fff;border:none;display:inline-flex;align-items:center;justify-content:center;padding:0}.day-btn:hover:not(:disabled){background:#f9fafb}.day-btn:disabled{opacity:.4;cursor:not-allowed}.day-input{flex:1 1 auto;width:100%;text-align:center;border:none;outline:none;font-size:16px;font-weight:700;color:#101828;background:#fff;border-left:1px solid #EAECF0;border-right:1px solid #EAECF0;height:46px}.ack-cancel{border:1px solid #D0D5DD;border-radius:8px;background:#fff;font-size:15px;font-weight:600;color:#344054;padding:11px 0}.ack-cancel:hover{background:#f9fafb}.ack-submit{border:none;border-radius:8px;background:#009bf3;font-size:15px;font-weight:600;color:#fff!important;padding:11px 0}.ack-submit:disabled{opacity:.45}.ack-panel{margin-left:3rem;width:auto!important}\n"] }]
|
|
287
308
|
}], ctorParameters: () => [{ type: i1.TicketsService }, { type: i0.ChangeDetectorRef }, { type: i2.ToastService }, { type: i3.NgbModal }, { type: i4.GlobalStateService }], propDecorators: { selectedTab: [{
|
|
288
309
|
type: Input
|
|
289
310
|
}], angleImagePopup: [{
|
|
290
311
|
type: ViewChild,
|
|
291
312
|
args: ['angleImagePopup']
|
|
292
313
|
}] } });
|
|
293
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlja2V0LWNhbWVyYS1hbmdsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS10aWNrZXQtaW5mcmEvc3JjL2xpYi9jb21wb25lbnRzL3RpY2tldC1jYW1lcmEtYW5nbGUvdGlja2V0LWNhbWVyYS1hbmdsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS10aWNrZXQtaW5mcmEvc3JjL2xpYi9jb21wb25lbnRzL3RpY2tldC1jYW1lcmEtYW5nbGUvdGlja2V0LWNhbWVyYS1hbmdsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7QUFVMUMsTUFBTSxPQUFPLDBCQUEwQjtJQTRCM0I7SUFDQTtJQUNBO0lBQ0E7SUFDRDtJQS9CUSxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUNqQyxXQUFXLENBQU07SUFDSSxlQUFlLENBQU07SUFFbkQsYUFBYSxDQUFNO0lBQ25CLE9BQU8sQ0FBTTtJQUNiLFFBQVEsQ0FBTTtJQUNkLE9BQU8sR0FBVSxFQUFFLENBQUM7SUFDcEIsVUFBVSxDQUFNO0lBQ2hCLGNBQWMsR0FBUSxJQUFJLENBQUM7SUFDM0IsVUFBVSxHQUFRLENBQUMsQ0FBQztJQUNwQixnQkFBZ0IsR0FBWSxJQUFJLENBQUM7SUFDakMsZUFBZSxHQUFZLEtBQUssQ0FBQztJQUNqQyxjQUFjLEdBQVksS0FBSyxDQUFDO0lBQ2hDLGNBQWMsR0FBVSxFQUFFLENBQUM7SUFFM0Isb0JBQW9CO0lBQ3BCLFNBQVMsR0FBaUMsRUFBRSxDQUFDO0lBQzdDLFVBQVUsR0FBRyxF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QWEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxJQUFJLHlCQUF5QixDQUFDLENBQUM7aUJBQzVFO2dCQUNELElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDMUIsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNsQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLElBQUkseUJBQXlCLENBQUMsQ0FBQztnQkFDbEYsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMxQixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7d0dBNVFVLDBCQUEwQjs0RkFBMUIsMEJBQTBCLDJOQ1p2QyxpdS9CQThYQTs7NEZEbFhhLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDRSx5QkFBeUI7c01BTTFCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ3dCLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktZ2xvYmFsJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xuaW1wb3J0IHsgVGlja2V0c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aWNrZXRzLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItdGlja2V0LWNhbWVyYS1hbmdsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi90aWNrZXQtY2FtZXJhLWFuZ2xlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3RpY2tldC1jYW1lcmEtYW5nbGUuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBUaWNrZXRDYW1lcmFBbmdsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG4gIEBJbnB1dCgpIHNlbGVjdGVkVGFiOiBhbnk7XG4gIEBWaWV3Q2hpbGQoJ2FuZ2xlSW1hZ2VQb3B1cCcpIGFuZ2xlSW1hZ2VQb3B1cDogYW55O1xuXG4gIGhlYWRlckZpbHRlcnM6IGFueTtcbiAgc3RvcmVJZDogYW55O1xuICBjbGllbnRJZDogYW55O1xuICB0aWNrZXRzOiBhbnlbXSA9IFtdO1xuICB0aWNrZXRDYXJkOiBhbnk7XG4gIHNlbGVjdGVkVGlja2V0OiBhbnkgPSBudWxsO1xuICBzZWxlY3RDYXJkOiBhbnkgPSAwO1xuICBzdG9yZUxpc3RMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgc3RvcmVMaXN0Tm9kYXRhOiBib29sZWFuID0gZmFsc2U7XG4gIHByZXZpZXdMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHZpZXdUaWNrZXREYXRhOiBhbnlbXSA9IFtdO1xuXG4gIC8vIEFja25vd2xlZGdlIGZvcm0uXG4gIGFja1JlYXNvbjogJ3N0b3JlJyB8ICdvcGVyYXRpb25hbCcgfCAnJyA9ICcnO1xuICBhY2tDb21tZW50ID0gJyc7XG4gIGRheXNUb1JldmVydCA9IDI7XG4gIHN1Ym1pdHRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBUYW5nby1zaWRlIHJlc3RvcmUgY2hlY2suXG4gIHJlc3RvcmVSZXBseTogJ1llcycgfCAnTm8nIHwgJycgPSAnJztcbiAgcmVzdG9yZUNvbW1lbnQgPSAnJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNlcnZpY2U6IFRpY2tldHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxuICAgIHB1YmxpYyBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlOiBhbnkpID0+IHtcbiAgICAgIGlmIChlKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyRmlsdGVycyA9IGU7XG4gICAgICAgIHRoaXMuc3RvcmVJZCA9IGUuc3RvcmU7XG4gICAgICAgIHRoaXMuY2xpZW50SWQgPSBlLmNsaWVudDtcbiAgICAgICAgdGhpcy5sb2FkVGlja2V0cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIGxvYWRUaWNrZXRzKGtlZXBUaWNrZXRJZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zdG9yZUlkIHx8ICF0aGlzLmNsaWVudElkKSB7IHJldHVybjsgfVxuICAgIHRoaXMuc3RvcmVMaXN0TG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5zdG9yZUxpc3ROb2RhdGEgPSBmYWxzZTtcbiAgICBjb25zdCBvYmogPSB7XG4gICAgICBzdG9yZUlkOiB0aGlzLnN0b3JlSWQsXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcbiAgICAgIGZyb21EYXRlOiB0aGlzLmhlYWRlckZpbHRlcnM/LmRhdGU/LnN0YXJ0RGF0ZSxcbiAgICAgIHRvRGF0ZTogdGhpcy5oZWFkZXJGaWx0ZXJzPy5kYXRlPy5lbmREYXRlLFxuICAgICAgZmlsdGVySXNzdWU6ICcnLFxuICAgIH07XG4gICAgdGhpcy5zZXJ2aWNlLmNhbWVyYUFuZ2xlQ2hhbmdlTGlzdChvYmopLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCAmJiByZXMuZGF0YT8ucmVzdWx0Py5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLnRpY2tldHMgPSByZXMuZGF0YS5yZXN1bHQ7XG4gICAgICAgICAgdGhpcy50aWNrZXRDYXJkID0gcmVzLmRhdGEucmVzcG9uc2U7XG4gICAgICAgICAgLy8gU3RheSBvbiB0aGUgdGlja2V0IHRoZSB1c2VyIHdhcyB2aWV3aW5nIChlLmcuIGFmdGVyIGFja25vd2xlZGdpbmcpLlxuICAgICAgICAgIGNvbnN0IGtlZXBJbmRleCA9IGtlZXBUaWNrZXRJZFxuICAgICAgICAgICAgPyB0aGlzLnRpY2tldHMuZmluZEluZGV4KCh0OiBhbnkpID0+IHQudGlja2V0SWQgPT09IGtlZXBUaWNrZXRJZClcbiAgICAgICAgICAgIDogLTE7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSBrZWVwSW5kZXggPiAtMSA/IGtlZXBJbmRleCA6IDA7XG4gICAgICAgICAgdGhpcy5TaG93VGlja2V0KHRoaXMudGlja2V0c1tpbmRleF0sIGluZGV4KTtcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdE5vZGF0YSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudGlja2V0cyA9IFtdO1xuICAgICAgICAgIHRoaXMudGlja2V0Q2FyZCA9IHJlcz8uZGF0YT8ucmVzcG9uc2U7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XG4gICAgICAgICAgdGhpcy5zdG9yZUxpc3ROb2RhdGEgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RvcmVMaXN0TG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLnRpY2tldHMgPSBbXTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RvcmVMaXN0TG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0b3JlTGlzdE5vZGF0YSA9IHRydWU7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIFNob3dUaWNrZXQodGlja2V0OiBhbnksIGluZGV4OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdENhcmQgPSBpbmRleDtcbiAgICB0aGlzLmFja1JlYXNvbiA9ICcnO1xuICAgIHRoaXMuYWNrQ29tbWVudCA9ICcnO1xuICAgIHRoaXMuZGF5c1RvUmV2ZXJ0ID0gMjtcbiAgICB0aGlzLnJlc3RvcmVSZXBseSA9ICcnO1xuICAgIHRoaXMucmVzdG9yZUNvbW1lbnQgPSAnJztcbiAgICB0aGlzLmdldFByZXZpZXcodGlja2V0Py50aWNrZXRJZCk7XG4gIH1cblxuICBnZXRQcmV2aWV3KHRpY2tldElkOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRpY2tldElkKSB7IHJldHVybjsgfVxuICAgIHRoaXMucHJldmlld0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xuICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgIHRpY2tldElkOiB0aWNrZXRJZCxcbiAgICAgIHN0b3JlSWQ6IHRoaXMuc3RvcmVJZCxcbiAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxuICAgIH07XG4gICAgdGhpcy5zZXJ2aWNlLmNhbWVyYUFuZ2xlQ2hhbmdlUHJldmlldyhvYmopLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSByZXMgJiYgcmVzLmNvZGUgPT09IDIwMCA/IHJlcy5kYXRhPy5yZXN1bHQgOiBudWxsO1xuICAgICAgICAvLyBOZXdlc3QgYWN0aXZpdHkgZmlyc3QsIG1hdGNoaW5nIHRoZSBJbmZyYSB0aWNrZXQgdGhyZWFkLlxuICAgICAgICB0aGlzLnZpZXdUaWNrZXREYXRhID0gQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdGVkVGlja2V0Py50aWNrZXRBY3Rpdml0eSlcbiAgICAgICAgICA/IHRoaXMuc2VsZWN0ZWRUaWNrZXQudGlja2V0QWN0aXZpdHkuc2xpY2UoKS5yZXZlcnNlKClcbiAgICAgICAgICAgICAgLmZpbHRlcigoZTogYW55KSA9PiBlLmFjdGlvblR5cGUgIT09ICdzdGF0dXNDaGFuZ2UnKVxuICAgICAgICAgIDogW107XG4gICAgICAgIHRoaXMucHJldmlld0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XG4gICAgICAgIHRoaXMudmlld1RpY2tldERhdGEgPSBbXTtcbiAgICAgICAgdGhpcy5wcmV2aWV3TG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyBUaGUgc3RvcmUgcHJvbWlzZWQgYSByZXN0b3JlIGJ5IGBoaWJlcm5hdGlvbmAgKGFja25vd2xlZGdlIGRhdGUgKyBkYXlzKS5cbiAgLy8gT25seSBwcm9tcHQgVGFuZ28gdG8gY2hlY2sgb25jZSB0aGF0IGRhdGUgaGFzIHBhc3NlZC5cbiAgZ2V0IGlzUmVzdG9yZUR1ZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBkdWUgPSB0aGlzLnNlbGVjdGVkVGlja2V0Py5oaWJlcm5hdGlvbjtcbiAgICBpZiAoIWR1ZSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCkgPj0gbmV3IERhdGUoZHVlKS5nZXRUaW1lKCk7XG4gIH1cblxuICBnZXQgY2hhbmdlVHlwZSgpOiBzdHJpbmcge1xuICAgIC8vICdhbmdsZScgfCAnaXAnIHwgJ3Jlc29sdXRpb24nXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUaWNrZXQ/LmNoYW5nZVR5cGUgfHwgJyc7XG4gIH1cblxuICBvcGVuQW5nbGVJbWFnZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRUaWNrZXQ/LmFuZ2xlQ2hhbmdlSW1hZ2UpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0aGlzLmFuZ2xlSW1hZ2VQb3B1cCwge1xuICAgICAgc2l6ZTogJ2xnJyxcbiAgICAgIGNlbnRlcmVkOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gSW1hZ2VzIGFyZSBzdG9yZWQgYXMgcmF3IFMzIGtleXM7IHNlcnZlIHRoZW0gdGhyb3VnaCB0aGUgQ2xvdWRGcm9udCBDRE4uXG4gIGNkblVybChrZXk6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCFrZXkpIHsgcmV0dXJuICcnOyB9XG4gICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmIGtleS5zdGFydHNXaXRoKCdodHRwJykpIHsgcmV0dXJuIGtleTsgfVxuICAgIGNvbnN0IGJhc2UgPSB0aGlzLnNlcnZpY2UuYW5nbGVDaGFuZ2VDRE4gfHwgJyc7XG4gICAgcmV0dXJuIGAke2Jhc2V9JHtTdHJpbmcoa2V5KS5yZXBsYWNlKC9eXFwvLywgJycpfWA7XG4gIH1cblxuICBpbmNyZW1lbnREYXlzKCk6IHZvaWQgeyB0aGlzLmRheXNUb1JldmVydCA9IChOdW1iZXIodGhpcy5kYXlzVG9SZXZlcnQpIHx8IDApICsgMTsgfVxuICBkZWNyZW1lbnREYXlzKCk6IHZvaWQgeyBpZiAodGhpcy5kYXlzVG9SZXZlcnQgPiAwKSB7IHRoaXMuZGF5c1RvUmV2ZXJ0ID0gKE51bWJlcih0aGlzLmRheXNUb1JldmVydCkgfHwgMCkgLSAxOyB9IH1cblxuICAvLyBUaGUgZmllbGQgaXMgdHlwZWFibGUgYXMgd2VsbCBhcyBzdGVwcGFibGUuIEtleXByZXNzIGlzIGxpbWl0ZWQgdG8gZGlnaXRzXG4gIC8vIChubyAnLicsICctJyBvciAnZScg4oCUIHRoZSByZXZlcnQgd2luZG93IGlzIGEgd2hvbGUgbnVtYmVyIG9mIGRheXMpLlxuICBhbGxvd0RpZ2l0c09ubHkoZXZlbnQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGsgPSBldmVudC5jaGFyQ29kZTtcbiAgICByZXR1cm4gayA9PT0gOCB8fCAoayA+PSA0OCAmJiBrIDw9IDU3KTtcbiAgfVxuXG4gIC8vIEtlZXAgdGhlIG1vZGVsIG51bWVyaWMgd2hpbGUgdHlwaW5nLiBBbiBlbXB0eSBib3ggaXMgYWxsb3dlZCBtaWQtZWRpdCBzb1xuICAvLyB0aGUgdXNlciBjYW4gY2xlYXIgaXQgYW5kIHJldHlwZTsgb25EYXlzQmx1ciBzZXR0bGVzIGl0IGJhY2sgdG8gYSBudW1iZXIuXG4gIG9uRGF5c0lucHV0KHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZGF5c1RvUmV2ZXJ0ID0gJycgYXMgYW55O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkaWdpdHMgPSBTdHJpbmcodmFsdWUpLnJlcGxhY2UoL1teMC05XS9nLCAnJyk7XG4gICAgdGhpcy5kYXlzVG9SZXZlcnQgPSBkaWdpdHMgPT09ICcnID8gKCcnIGFzIGFueSkgOiBOdW1iZXIoZGlnaXRzKTtcbiAgfVxuXG4gIC8vIEJsYW5rIG9yIGludmFsaWQgb24gYmx1ciBmYWxscyBiYWNrIHRvIDAgc28gc3VibWl0IG5ldmVyIHNlbmRzIE5hTi8nJy5cbiAgb25EYXlzQmx1cigpOiB2b2lkIHtcbiAgICBjb25zdCBuID0gTnVtYmVyKHRoaXMuZGF5c1RvUmV2ZXJ0KTtcbiAgICB0aGlzLmRheXNUb1JldmVydCA9IGlzRmluaXRlKG4pICYmIG4gPiAwID8gTWF0aC5mbG9vcihuKSA6IDA7XG4gIH1cblxuICBzdWJtaXRBY2tub3dsZWRnZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYWNrUmVhc29uKSB7XG4gICAgICByZXR1cm4gdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdCgnUGxlYXNlIHNlbGVjdCBhIHJlYXNvbiB0byBhY2tub3dsZWRnZScpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRUaWNrZXQ/LnRpY2tldElkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3VibWl0dGluZyA9IHRydWU7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7XG4gICAgICB0aWNrZXRJZDogdGhpcy5zZWxlY3RlZFRpY2tldC50aWNrZXRJZCxcbiAgICAgIGFja1JlYXNvbjogdGhpcy5hY2tSZWFzb24sXG4gICAgICBhY2tDb21tZW50OiB0aGlzLmFja0NvbW1lbnQsXG4gICAgICBpc3N1ZUlkZW50aWZpZWRCeTogdGhpcy5ncy51c2VyQWNjZXNzLnZhbHVlPy51c2VyVHlwZSA9PT0gJ3RhbmdvJyA/ICd0YW5nbycgOiAnY2xpZW50JyxcbiAgICB9O1xuICAgIC8vIE9ubHkgYW5nbGUgY2hhbmdlcyBjYXJyeSBhIHJldmVydCB3aW5kb3cuIENvZXJjZSBoZXJlIHRvbyDigJQgdGhlIGZpZWxkIGlzXG4gICAgLy8gdHlwZWFibGUsIGFuZCBzdWJtaXR0aW5nIHdpdGhvdXQgYmx1cnJpbmcgY291bGQgb3RoZXJ3aXNlIHNlbmQgJycgb3IgTmFOLlxuICAgIGlmICh0aGlzLmNoYW5nZVR5cGUgPT09ICdhbmdsZScpIHtcbiAgICAgIGNvbnN0IGRheXMgPSBOdW1iZXIodGhpcy5kYXlzVG9SZXZlcnQpO1xuICAgICAgb2JqLmRheXNUb1JldmVydCA9IGlzRmluaXRlKGRheXMpICYmIGRheXMgPiAwID8gTWF0aC5mbG9vcihkYXlzKSA6IDA7XG4gICAgfVxuICAgIHRoaXMuc2VydmljZS51cGRhdGVBbmdsZUNoYW5nZVRpY2tldChvYmopLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcbiAgICAgICAgICBjb25zdCB0aWNrZXRJZCA9IHRoaXMuc2VsZWN0ZWRUaWNrZXQ/LnRpY2tldElkO1xuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdChyZXMubWVzc2FnZSk7XG4gICAgICAgICAgdGhpcy5hY2tSZWFzb24gPSAnJztcbiAgICAgICAgICB0aGlzLmFja0NvbW1lbnQgPSAnJztcbiAgICAgICAgICB0aGlzLmRheXNUb1JldmVydCA9IDI7XG4gICAgICAgICAgLy8gUmVmcmVzaCB0aGUgbGlzdCAoc3RhdHVzL2NvdW50cyBjaGFuZ2UpIGFuZCByZW9wZW4gdGhpcyB0aWNrZXQuXG4gICAgICAgICAgdGhpcy5sb2FkVGlja2V0cyh0aWNrZXRJZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChyZXM/Lm1lc3NhZ2UgfHwgJ1VuYWJsZSB0byB1cGRhdGUgdGlja2V0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnN1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChlcnI/LmVycm9yPy5tZXNzYWdlIHx8ICdVbmFibGUgdG8gdXBkYXRlIHRpY2tldCcpO1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICByZXBseVJlc3RvcmVkKHJlcGx5OiAnWWVzJyB8ICdObycpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRUaWNrZXQ/LnRpY2tldElkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3VibWl0dGluZyA9IHRydWU7XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7XG4gICAgICB0aWNrZXRJZDogdGhpcy5zZWxlY3RlZFRpY2tldC50aWNrZXRJZCxcbiAgICAgIHJlc3RvcmVSZXBseTogcmVwbHksXG4gICAgICByZXN0b3JlQ29tbWVudDogdGhpcy5yZXN0b3JlQ29tbWVudCxcbiAgICB9O1xuICAgIHRoaXMuc2VydmljZS51cGRhdGVBbmdsZUNoYW5nZVRpY2tldChvYmopLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDApIHtcbiAgICAgICAgICBjb25zdCB0aWNrZXRJZCA9IHRoaXMuc2VsZWN0ZWRUaWNrZXQ/LnRpY2tldElkO1xuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdChyZXMubWVzc2FnZSk7XG4gICAgICAgICAgdGhpcy5yZXN0b3JlUmVwbHkgPSAnJztcbiAgICAgICAgICB0aGlzLnJlc3RvcmVDb21tZW50ID0gJyc7XG4gICAgICAgICAgdGhpcy5sb2FkVGlja2V0cyh0aWNrZXRJZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChyZXM/Lm1lc3NhZ2UgfHwgJ1VuYWJsZSB0byB1cGRhdGUgdGlja2V0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnN1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChlcnI/LmVycm9yPy5tZXNzYWdlIHx8ICdVbmFibGUgdG8gdXBkYXRlIHRpY2tldCcpO1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBjYW5jZWxBY2tub3dsZWRnZSgpOiB2b2lkIHtcbiAgICB0aGlzLmFja1JlYXNvbiA9ICcnO1xuICAgIHRoaXMuYWNrQ29tbWVudCA9ICcnO1xuICAgIHRoaXMuZGF5c1RvUmV2ZXJ0ID0gMjtcbiAgfVxufSIsIjxkaXYgY2xhc3M9XCJjYXJkXCI+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTNcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLWxhYmVsIG1iLTJcIj5DYW1lcmEgQW5nbGUgQ2hhbmdlPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJoZWFkZXJGaWx0ZXJzPy5kYXRlPy5zdGFydERhdGUgPT09IGhlYWRlckZpbHRlcnM/LmRhdGU/LmVuZERhdGVcIiBjbGFzcz1cInRleHQtc3ViIG1iLTJcIj5BblxuICAgICAgICAgICAgICAgIG92ZXJ2aWV3IG9mIGFsbCB0aGUgdGlja2V0cyBmb3IgdGlsbCB7e2hlYWRlckZpbHRlcnM/LmRhdGU/LmVuZERhdGUgfCBjdXN0b21EYXRlRm9ybWF0fX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImhlYWRlckZpbHRlcnM/LmRhdGU/LnN0YXJ0RGF0ZSAhPT0gaGVhZGVyRmlsdGVycz8uZGF0ZT8uZW5kRGF0ZVwiIGNsYXNzPVwidGV4dC1zdWIgbWItMlwiPkFuXG4gICAgICAgICAgICAgICAgb3ZlcnZpZXcgb2YgYWxsIHRoZSB0aWNrZXRzIGZvciB7e2hlYWRlckZpbHRlcnM/LmRhdGU/LnN0YXJ0RGF0ZSB8XG4gICAgICAgICAgICAgICAgY3VzdG9tRGF0ZUZvcm1hdH19IC0ge3toZWFkZXJGaWx0ZXJzPy5kYXRlPy5lbmREYXRlIHwgY3VzdG9tRGF0ZUZvcm1hdH19PC9zcGFuPlxuICAgICAgICA8L2gzPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi03XCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpc3N1ZSBvZiB0aWNrZXRDYXJkXCIgY2xhc3M9XCJpc3N1ZWNhcmRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+e3tpc3N1ZT8uY291bnR9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsIGZ3LXNlbWlib2xkXCI+e3tpc3N1ZT8ubmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWFpbmNhcmQtY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBwLTEwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02IGN1cnNvci1wb2ludGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhc3RvcmVMaXN0TG9hZGluZyAmJiAhc3RvcmVMaXN0Tm9kYXRhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkYXRhIG9mIHRpY2tldHM7bGV0IGluZGV4ID0gaW5kZXhcIiBjbGFzcz1cImlzc3VlY2FyZCB3LTEwMCBtYi00XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiU2hvd1RpY2tldChkYXRhLGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiKHNlbGVjdENhcmQgPyBzZWxlY3RDYXJkIDogMCkgPT09IGluZGV4ID8gJ2FjdGl2ZScgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluY2FyZC1sYWJlbCBmdy1ib2xkIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi01XCI+PHNwYW4+IDxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9Jy4vYXNzZXRzL3RhbmdvL0ltYWdlcy90aWNrZXQuc3ZnJz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGF0YS50aWNrZXRJZH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbnRlbnR0ZXh0IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciB0ZXh0LWNlbnRlciBmdy1zZW1pYm9sZCBweC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTAuNjY2NyAxLjMzMzk4VjQuMDAwNjVNNS4zMzMzMyAxLjMzMzk4VjQuMDAwNjVNMiA2LjY2NzMySDE0TTMuMzMzMzMgMi42NjczMkgxMi42NjY3QzEzLjQwMyAyLjY2NzMyIDE0IDMuMjY0MjcgMTQgNC4wMDA2NVYxMy4zMzRDMTQgMTQuMDcwNCAxMy40MDMgMTQuNjY3MyAxMi42NjY3IDE0LjY2NzNIMy4zMzMzM0MyLjU5Njk1IDE0LjY2NzMgMiAxNC4wNzA0IDIgMTMuMzM0VjQuMDAwNjVDMiAzLjI2NDI3IDIuNTk2OTUgMi42NjczMiAzLjMzMzMzIDIuNjY3MzJaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48c3BhbiBjbGFzcz1cIm14LTFcIj57eyhkYXRhPy5jcmVhdGVkQXR8IGRhdGU6J2RkLU1NLXl5eXknKX19PC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi01IG1haW5jYXJkLWxhYmVsIGZ3LWJvbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhPy5pc3N1ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRhdGE/LmNhbWVyYU5hbWUgfHwgZGF0YT8uem9uZVwiIGNsYXNzPVwibWItNSBjb250ZW50dGV4dCBmdy1zZW1pYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RhdGE/LmNhbWVyYU5hbWUgPyBkYXRhPy5jYW1lcmFOYW1lIDogJy0tJ319PHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGF0YT8uem9uZVwiPiAmbWlkZG90OyB7e2RhdGE/LnpvbmV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByb2ZpbGUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRyZSBqdXN0aWZ5LWNvbnRlbnQtY2VudHJlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ltYWdlcy91c2VyUHJvZmlsZS5zdmdcIiBhbHQ9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImRhdGEuc3RhdHVzID09PSAnY2xvc2VkJyA/ICdiYWRnZS1saWdodC1zdWNjZXNzJyA6KGRhdGEuc3RhdHVzID09PSAnaW5wcm9ncmVzcycgPyAnYmFkZ2UtbGlnaHQtcHJpbWFyeSc6J2JhZGdlLWxpZ2h0LXdhcm5pbmcnKVwiPnt7ZGF0YS5zdGF0dXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRpdGxlY2FzZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInN0b3JlTGlzdExvYWRpbmdcIiBjbGFzcz1cImNvbnRlbnR0ZXh0IGZ3LXNlbWlib2xkIHRleHQtY2VudGVyIHB5LTEwXCI+TG9hZGluZyB0aWNrZXRz4oCmXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXN0b3JlTGlzdExvYWRpbmcgJiYgc3RvcmVMaXN0Tm9kYXRhXCIgY2xhc3M9XCJjb250ZW50dGV4dCBmdy1zZW1pYm9sZCB0ZXh0LWNlbnRlciBweS0xMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgTm8gQ2FtZXJhIEFuZ2xlIHRpY2tldHMgZm91bmQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcmV2aWV3TG9hZGluZ1wiIGNsYXNzPVwiY29sLXNtLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnR0ZXh0IGZ3LXNlbWlib2xkIHRleHQtY2VudGVyIHB5LTEwXCI+TG9hZGluZyB0aWNrZXTigKY8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcHJldmlld0xvYWRpbmcgJiYgc2VsZWN0ZWRUaWNrZXQ/LnN0YXR1c1wiIGNsYXNzPVwiY29sLXNtLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluY2FyZC1sYWJlbCBmdy1ib2xkIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGltZyBzcmM9Jy4vYXNzZXRzL3RhbmdvL0ltYWdlcy90aWNrZXQuc3ZnJz48c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJteC0yXCI+e3tzZWxlY3RlZFRpY2tldD8udGlja2V0SWR9fTwvc3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VsZWN0ZWRUaWNrZXQuc3RhdHVzID09PSAnY2xvc2VkJyA/ICdiYWRnZS1saWdodC1zdWNjZXNzJyA6KHNlbGVjdGVkVGlja2V0LnN0YXR1cyA9PT0gJ2lucHJvZ3Jlc3MnID8gJ2JhZGdlLWxpZ2h0LXByaW1hcnknOidiYWRnZS1saWdodC13YXJuaW5nJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnlcIj57e3NlbGVjdGVkVGlja2V0Py5zdGF0dXMgfCB0aXRsZWNhc2V9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBY2tub3dsZWRnZSDigJQgY2xpZW50LW9ubHksIGFuZCBoaWRkZW4gb25jZSBhY2tub3dsZWRnZWQuIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy51c2VyVHlwZSA9PT0gJ2NsaWVudCcgJiYgc2VsZWN0ZWRUaWNrZXQ/LnN0YXR1cyAhPT0gJ2Nsb3NlZCcgJiYgc2VsZWN0ZWRUaWNrZXQ/Lmlzc3VlU3RhdHVzICE9PSAnaWRlbnRpZmllZCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWFpbmNhcmQtY29udGVudCB3LTEwMCBtdC0yIHB4LTQgcHktMiBwYi00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1haW5jYXJkLWxhYmVsIGZ3LXNlbWlib2xkIHB5LTJcIj5TZWxlY3QgdG8gYWNrbm93bGVkZ2UgdGhlIGNoYW5nZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluY2FyZC1jb250ZW50IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDAgbXQtMiBweC00IHB5LTRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWNrUmVhc29uID0gJ3N0b3JlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWFkaW5ndGV4dFwiPkNoYW5nZWQgaW50ZW50aW9uYWxseSBmcm9tIHN0b3JlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdW5kZWRjaGVjayBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiYWNrUmVhc29uID09PSAnc3RvcmUnXCIgY2xhc3M9XCJwLTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1haW5jYXJkLWNvbnRlbnQgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMCBtdC0yIHB4LTQgcHktNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY2tSZWFzb24gPSAnb3BlcmF0aW9uYWwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRpbmd0ZXh0XCI+Q2hhbmdlZCBmb3Igb3BlcmF0aW9uYWwgcHVycG9zZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3VuZGVkY2hlY2sgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImFja1JlYXNvbiA9PT0gJ29wZXJhdGlvbmFsJ1wiIGNsYXNzPVwicC0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNoYW5nZVR5cGUgPT09ICdhbmdsZSdcIiBjbGFzcz1cImZvcm0tZ3JvdXAgcHQtNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicmV2ZXJ0RGF5c1wiIGNsYXNzPVwibWFpbmNhcmQtbGFiZWwgZnctc2VtaWJvbGQgbWItMlwiPkRheXMgdG8gY2hhbmdlIHRoZSBhbmdsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFjayAqPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMjUwcHggcG9zaXRpb24tcmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSB0cmFuc2xhdGUtbWlkZGxlLXkgdG9wLTUwIG1lLTUgcHMtMyB0aWNrZXREYXlzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiB0b2dnbGUtb2ZmIHN2Zy1pY29uLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJkYXlzVG9SZXZlcnQgPT09IDAgPyAncGUtbm9uZScgOiAnJ1wiIChjbGljayk9XCJkZWNyZW1lbnREYXlzKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMVwiIGhlaWdodD1cIjIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjEgMjBcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk00LjY2NjAyIDEwSDE2LjMzMjdcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpbnB1dG1vZGU9XCJudW1lcmljXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cInJldmVydERheXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiIFtuZ01vZGVsXT1cImRheXNUb1JldmVydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25EYXlzSW5wdXQoJGV2ZW50KVwiIChibHVyKT1cIm9uRGF5c0JsdXIoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXByZXNzKT1cImFsbG93RGlnaXRzT25seSgkZXZlbnQpXCIgcGxhY2Vob2xkZXI9XCIwXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSB0cmFuc2xhdGUtbWlkZGxlLXkgdG9wLTUwIGVuZC0wIG1lLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHRvZ2dsZS1vbiBzdmctaWNvbi0xIHRpY2tldERheXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaW5jcmVtZW50RGF5cygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIxIDIwXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAuNDk5MyA0LjE2NjVWMTUuODMzMk00LjY2NjAyIDkuOTk5ODRIMTYuMzMyN1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG10LTEwIG1iLTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJhY2tDb21tZW50XCIgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJBZGQgeW91ciBjb21tZW50cy4uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLW91dGxpbmUgbXMtM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsQWNrbm93bGVkZ2UoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCIhYWNrUmVhc29uIHx8IHN1Ym1pdHRpbmdcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtcy0zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzdWJtaXRBY2tub3dsZWRnZSgpXCI+IFN1Ym1pdCA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFjdGl2aXR5IGxvZyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC01XCIgKm5nRm9yPVwibGV0IG9iaiBvZiB2aWV3VGlja2V0RGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvYmouYWN0aW9uQnkgPT09ICdVc2VyJ1wiIGNsYXNzPVwiZC1mbGV4IG1zLTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBwZS0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRyZSBqdXN0aWZ5LWNvbnRlbnQtY2VudHJlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm1zZ3Byb2ZpbGVcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JbWFnZXMvdXNlclByb2ZpbGUuc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTAgaC0xMDAgbXQtMyBib3JkZXIgYm9yZGVyLTEgYm9yZGVyLWdyYXlcIiBzdHlsZT1cIndpZHRoOjBweFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTMgcHQtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoZWFkaW5ndGV4dCB0ZXh0LWNhcGl0YWxpemVcIj57e29iaj8uSWRlbnRpZmllZEJ5P29iaj8uSWRlbnRpZmllZEJ5OlwiVGFuZ29cIn19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGltaW5ndGV4dCBweC0zIHB0LTFcIj57e29iaj8udGltZVN0YW1wIHwgZGF0ZTogJ2RkIE1NTSwgeXl5eSBoaDptbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib2JqPy5kZXNjcmlwdGlvblwiIGNsYXNzPVwidGV4dHVwZGF0ZXMgZnctYm9sZC00MDAgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b2JqPy5kZXNjcmlwdGlvbn19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib2JqPy5jb21tZW50XCIgY2xhc3M9XCJ0aW1pbmd0ZXh0IHBlLTMgcHQtMSBmdy1ib2xkLTQwMFwiPnt7b2JqPy5jb21tZW50fX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvYmouYWN0aW9uQnkgPT09ICdUYW5nbycgfHwgb2JqLmFjdGlvbkJ5ID09PSAnYXV0b21hdGVkJ1wiIGNsYXNzPVwiZC1mbGV4IG1iLTUgbXMtNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHBlLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudHJlIGp1c3RpZnktY29udGVudC1jZW50cmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCIyMFwiIGZpbGw9XCIjRUFGOEZGXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zMC40OTMyIDI4LjMzNTFMMjkuNjg2NyAyNy41Mjg2TDIwLjk5NjUgMTguODM4NEwyMy41NzQ0IDE2LjI2MDVMMjQuMTkyMSAxNS42NDE2QzI0LjI1MSAxNS41ODE4IDI0LjI4NDMgMTUuNTAxNCAyNC4yODQ3IDE1LjQxNzRDMjQuMjg0NSAxNS4zNzU5IDI0LjI3NjEgMTUuMzM0OSAyNC4yNiAxNS4yOTY2QzI0LjI0MzkgMTUuMjU4NCAyNC4yMjA0IDE1LjIyMzcgMjQuMTkwOSAxNS4xOTQ1TDIzLjU3MiAxNC41NzU2TDIwLjgzODEgMTEuODM2OEwyMC4yMTkyIDExLjIxOEMyMC4xOSAxMS4xODgyIDIwLjE1NTEgMTEuMTY0NSAyMC4xMTY2IDExLjE0ODRDMjAuMDc4MSAxMS4xMzIzIDIwLjAzNjggMTEuMTI0IDE5Ljk5NSAxMS4xMjRDMTkuOTUzMyAxMS4xMjQgMTkuOTEyIDExLjEzMjMgMTkuODczNSAxMS4xNDg0QzE5LjgzNSAxMS4xNjQ1IDE5LjgwMDEgMTEuMTg4MiAxOS43NzA5IDExLjIxOEwxOS4xNTIgMTEuODM4MUwxNS44MDE2IDE1LjE4ODRDMTUuNzcxOSAxNS4yMTc2IDE1Ljc0ODMgMTUuMjUyMyAxNS43MzIyIDE1LjI5MDdDMTUuNzE2MSAxNS4zMjkxIDE1LjcwNzcgMTUuMzcwMyAxNS43MDc3IDE1LjQxMkMxNS43MDc3IDE1LjQ1MzYgMTUuNzE2MSAxNS40OTQ4IDE1LjczMjIgMTUuNTMzMkMxNS43NDgzIDE1LjU3MTYgMTUuNzcxOSAxNS42MDY0IDE1LjgwMTYgMTUuNjM1NUwxOS4wMDIxIDE4LjgzNzJMMTAuMzEwNyAyNy41Mjg2TDkuNTA3ODcgMjguMzM1MUM5LjQ0ODM0IDI4LjM5NDEgOS40MTQ2MSAyOC40NzQzIDkuNDE0MDYgMjguNTU4MUM5LjQxNDQxIDI4LjYzOTEgOS40NDUzIDI4LjcxNyA5LjUwMDU2IDI4Ljc3NjJDOS41MzAwNyAyOC44MDc3IDkuNTY1NzMgMjguODMyOCA5LjYwNTMzIDI4Ljg1QzkuNjQ0OTQgMjguODY3MiA5LjY4NzY1IDI4Ljg3NjEgOS43MzA4MiAyOC44NzYxSDE3LjU0ODdDMTcuNjMyNiAyOC44NzU3IDE3LjcxMyAyOC44NDIzIDE3Ljc3MjMgMjguNzgyOUMxNy44MzE2IDI4LjcyMzYgMTcuODY1MSAyOC42NDMyIDE3Ljg2NTQgMjguNTU5M1YyNy43ODJDMTcuODY1NCAyNy42OTc5IDE3LjgzMjEgMjcuNjE3MiAxNy43NzI3IDI3LjU1NzZDMTcuNzEzNCAyNy40OTggMTcuNjMyOCAyNy40NjQ0IDE3LjU0ODcgMjcuNDY0SDEyLjM3MDlMMTkuOTk4NyAxOS44MzYyTDI3LjYyNjUgMjcuNDY0SDIyLjQwMzZDMjIuMzE5NSAyNy40NjQ0IDIyLjIzODkgMjcuNDk4IDIyLjE3OTYgMjcuNTU3NkMyMi4xMjAyIDI3LjYxNzIgMjIuMDg2OSAyNy42OTc5IDIyLjA4NjkgMjcuNzgyVjI4LjU1OTNDMjIuMDg2NyAyOC42MDEgMjIuMDk0OSAyOC42NDI0IDIyLjExMSAyOC42ODA5QzIyLjEyNzIgMjguNzE5NCAyMi4xNTA4IDI4Ljc1NDMgMjIuMTgwNyAyOC43ODM1QzIyLjIzOTkgMjguODQyNiAyMi4zMiAyOC44NzU4IDIyLjQwMzYgMjguODc2MUgzMC4yNjlDMzAuMzEyNCAyOC44NzYyIDMwLjM1NTMgMjguODY3NCAzMC4zOTUyIDI4Ljg1MDJDMzAuNDM1IDI4LjgzMyAzMC40NzA4IDI4LjgwNzggMzAuNTAwNSAyOC43NzYyQzMwLjU1NzQgMjguNzE2NCAzMC41ODg1IDI4LjYzNjcgMzAuNTg3MiAyOC41NTQyQzMwLjU4NTggMjguNDcxNiAzMC41NTIgMjguMzkzIDMwLjQ5MzIgMjguMzM1MVpNMTkuOTkzOCAxMi45OTA2TDIyLjQyMTkgMTUuNDE4N0wxOS45OTk5IDE3Ljg0MDdMMTcuNTcxOCAxNS40MTI2TDE5Ljk5MzggMTIuOTkwNlpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMDBBM0ZGXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0wIGgtMTAwIG10LTMgYm9yZGVyIGJvcmRlci0xIGJvcmRlci1ncmF5XCIgc3R5bGU9XCJ3aWR0aDowcHhcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdC0wIHctMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoZWFkaW5ndGV4dCB0ZXh0LWNhcGl0YWxpemVcIj57e29iaj8uSWRlbnRpZmllZEJ5P29iaj8uSWRlbnRpZmllZEJ5OlwiVGFuZ29cIn19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGltaW5ndGV4dCBweC0zIHB0LTFcIj57e29iaj8udGltZVN0YW1wIHwgZGF0ZTogJ2RkIE1NTSwgeXl5eSBoaDptbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib2JqLmFjdGlvblR5cGUgPT09ICdkZWZhdWx0SW5mcmEnXCIgY2xhc3M9XCJ0ZXh0dXBkYXRlcyBmdy1ib2xkLTQwMCBtdC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91ciBjYW1lcmEgYW5nbGUgaGFzIGJlZW4gY2hhbmdlZCBhbmQgd2UgcmVxdWVzdCB5b3UgdG8gYWNrbm93bGVkZ2Ugb3IgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgdGhlIGNhbWVyYSBhbmdsZSB0byBwcm9jZXNzIHRoZSBkYXRhLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ2hhbmdlIGRldGFpbCBzaXRzIGluc2lkZSB0aGUgZmlyc3QgKGRlZmF1bHQpIGNvbW1lbnQuIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9iai5hY3Rpb25UeXBlID09PSAnZGVmYXVsdEluZnJhJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcGVuZWRpc3N1ZSBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJvZmlsZS1sYWJlbCBmdy1zZW1pYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyNCAyMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIzIDE3QzIzIDE3LjUzMDQgMjIuNzg5MyAxOC4wMzkxIDIyLjQxNDIgMTguNDE0MkMyMi4wMzkxIDE4Ljc4OTMgMjEuNTMwNCAxOSAyMSAxOUgzQzIuNDY5NTcgMTkgMS45NjA4NiAxOC43ODkzIDEuNTg1NzkgMTguNDE0MkMxLjIxMDcxIDE4LjAzOTEgMSAxNy41MzA0IDEgMTdWNkMxIDUuNDY5NTcgMS4yMTA3MSA0Ljk2MDg2IDEuNTg1NzkgNC41ODU3OUMxLjk2MDg2IDQuMjEwNzEgMi40Njk1NyA0IDMgNEg3TDkgMUgxNUwxNyA0SDIxQzIxLjUzMDQgNCAyMi4wMzkxIDQuMjEwNzEgMjIuNDE0MiA0LjU4NTc5QzIyLjc4OTMgNC45NjA4NiAyMyA1LjQ2OTU3IDIzIDZWMTdaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTIgMTVDMTQuMjA5MSAxNSAxNiAxMy4yMDkxIDE2IDExQzE2IDguNzkwODYgMTQuMjA5MSA3IDEyIDdDOS43OTA4NiA3IDggOC43OTA4NiA4IDExQzggMTMuMjA5MSA5Ljc5MDg2IDE1IDEyIDE1WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM0NzU0NjdcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0yXCI+e3tzZWxlY3RlZFRpY2tldD8uY2FtZXJhTmFtZSA/IHNlbGVjdGVkVGlja2V0Py5jYW1lcmFOYW1lIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ2FtZXJhJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0yXCIgKm5nSWY9XCJzZWxlY3RlZFRpY2tldD8uem9uZVwiPiZtaWRkb3Q7IHt7c2VsZWN0ZWRUaWNrZXQ/LnpvbmV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInByb2ZpbGUtbGFiZWwgZnctc2VtaWJvbGRcIj57e3NlbGVjdGVkVGlja2V0Py5pc3N1ZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBTkdMRTogZXhwZWN0ZWQvYWN0dWFsIGltYWdlcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY2hhbmdlVHlwZSA9PT0gJ2FuZ2xlJ1wiIGNsYXNzPVwibWFpbmNhcmQtY29udGVudCB3LTEwMCBtdC0yIHB4LTQgcHktMiBwYi00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHB5LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFpbmNhcmQtbGFiZWwgZnctc2VtaWJvbGRcIj5Db21wYXJlIHRoZSBleHBlY3RlZCBhbmQgdGhlIGN1cnJlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmEgYW5nbGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFuZ2xlLWV5ZS1idG4gY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cInNlbGVjdGVkVGlja2V0Py5hbmdsZUNoYW5nZUltYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlZpZXcgYW5nbGUgY2hhbmdlIGltYWdlXCIgKGNsaWNrKT1cIm9wZW5BbmdsZUltYWdlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xIDEyczQtOCAxMS04IDExIDggMTEgOC00IDgtMTEgOC0xMS04LTExLThaXCIgc3Ryb2tlPVwiIzQ3NTQ2N1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCIzXCIgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYW1lcmEgZnctYm9sZCBtdC0yXCI+RXhwZWN0ZWQgQ2FtZXJhIEFuZ2xlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZFRpY2tldD8uZXhwZWN0ZWRJbWFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm91bmRlZC0zIG92ZXJmbG93LWhpZGRlbiBtdC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJ3LTEwMFwiIFtzcmNdPVwiY2RuVXJsKHNlbGVjdGVkVGlja2V0LmV4cGVjdGVkSW1hZ2UpXCIgYWx0PVwiZXhwZWN0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXNlbGVjdGVkVGlja2V0Py5leHBlY3RlZEltYWdlXCIgY2xhc3M9XCJweC0yIHJvdW5kZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltZyBtdC00IHB4LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBkLWZsZXggZmxleC1jb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXRvcDogMjBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBydnR4dCBtdC01IHRleHRjbHJcIj5QcmV2aWV3IG5vdCBhdmFpbGFibGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWZyZXNodHh0IG10LTIgdGV4dGNsclwiPlRoZSBleHBlY3RlZCBhbmdsZSBpbWFnZSBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIGF0IHRoZSBtb21lbnQuPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhbWVyYSBmdy1ib2xkIG10LTJcIj5BY3R1YWwgQ2FtZXJhIEFuZ2xlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZFRpY2tldD8uYWN0dWFsSW1hZ2VcIiBjbGFzcz1cInJvdW5kZWQtMyBvdmVyZmxvdy1oaWRkZW4gbXQtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwidy0xMDBcIiBbc3JjXT1cImNkblVybChzZWxlY3RlZFRpY2tldC5hY3R1YWxJbWFnZSlcIiBhbHQ9XCJhY3R1YWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXNlbGVjdGVkVGlja2V0Py5hY3R1YWxJbWFnZVwiIGNsYXNzPVwicHgtMiByb3VuZGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWcgbXQtNCBweC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZC1mbGV4IGZsZXgtY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi10b3A6IDIwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcnZ0eHQgbXQtNSB0ZXh0Y2xyXCI+UHJldmlldyBub3QgYXZhaWxhYmxlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVmcmVzaHR4dCBtdC0yIHRleHRjbHJcIj5UaGUgYWN0dWFsIGFuZ2xlIGltYWdlIGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgYXQgdGhlIG1vbWVudC48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJFU09MVVRJT04gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNoYW5nZVR5cGUgPT09ICdyZXNvbHV0aW9uJ1wiIGNsYXNzPVwibWFpbmNhcmQtY29udGVudCB3LTEwMCBtdC0yIHB4LTQgcHktMiBwYi00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluY2FyZC1sYWJlbCBmdy1zZW1pYm9sZCBweS0yXCI+UmVzb2x1dGlvbiBjaGFuZ2UgZGV0ZWN0ZWQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1haW5jYXJkLWNvbnRlbnQgcHgtNCBweS00IG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGRhdGUtbGFiZWxcIj5FeHBlY3RlZCByZXNvbHV0aW9uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBkYXRlLXZhbHVlIG10LTJcIj57e3NlbGVjdGVkVGlja2V0Py5leHBlY3RlZFJlc29sdXRpb24gPyBzZWxlY3RlZFRpY2tldD8uZXhwZWN0ZWRSZXNvbHV0aW9uIDogJy0tJ319PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluY2FyZC1jb250ZW50IHB4LTQgcHktNCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXBkYXRlLWxhYmVsXCI+QWN0dWFsIHJlc29sdXRpb248L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGRhdGUtdmFsdWUgbXQtMiB0ZXh0LWRhbmdlclwiPnt7c2VsZWN0ZWRUaWNrZXQ/LmFjdHVhbFJlc29sdXRpb24gPyBzZWxlY3RlZFRpY2tldD8uYWN0dWFsUmVzb2x1dGlvbiA6ICctLSd9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBJUCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY2hhbmdlVHlwZSA9PT0gJ2lwJ1wiIGNsYXNzPVwibWFpbmNhcmQtY29udGVudCB3LTEwMCBtdC0yIHB4LTQgcHktMiBwYi00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluY2FyZC1sYWJlbCBmdy1zZW1pYm9sZCBweS0yXCI+SVAgY2hhbmdlIGRldGVjdGVkPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluY2FyZC1jb250ZW50IHB4LTQgcHktNCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXBkYXRlLWxhYmVsXCI+UmVnaXN0ZXJlZCBJUDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwZGF0ZS12YWx1ZSBtdC0yXCI+e3tzZWxlY3RlZFRpY2tldD8ucmVnaXN0ZXJlZElwID8gc2VsZWN0ZWRUaWNrZXQ/LnJlZ2lzdGVyZWRJcCA6ICctLSd9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpbWluZ3RleHRcIj5MYXN0IGNvbm5lY3RlZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1haW5jYXJkLWNvbnRlbnQgcHgtNCBweS00IG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGRhdGUtbGFiZWxcIj5DdXJyZW50IElQPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBkYXRlLXZhbHVlIG10LTIgdGV4dC1kYW5nZXJcIj57e3NlbGVjdGVkVGlja2V0Py5jdXJyZW50SXAgPyBzZWxlY3RlZFRpY2tldD8uY3VycmVudElwIDogJy0tJ319PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGltaW5ndGV4dFwiPkZlZWQgZGlzY29ubmVjdGVkPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvYmouYWN0aW9uVHlwZSAhPT0gJ2RlZmF1bHRJbmZyYScgJiYgb2JqPy5kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0dXBkYXRlcyBmdy1ib2xkLTQwMCBtdC0zXCI+e3tvYmo/LmRlc2NyaXB0aW9ufX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvYmo/LmNvbW1lbnRcIiBjbGFzcz1cInRpbWluZ3RleHQgcGUtMyBwdC0xIGZ3LWJvbGQtNDAwIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29iaj8uY29tbWVudH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUmVzdG9yZSBjaGVjayDigJQgVGFuZ28tb25seSwgb25jZSB0aGUgc3RvcmUgaGFzIGFja25vd2xlZGdlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIHByb21pc2VkIHJlc3RvcmUgZGF0ZSBoYXMgcGFzc2VkLiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8udXNlclR5cGUgPT09ICd0YW5nbycgJiYgc2VsZWN0ZWRUaWNrZXQ/Lmlzc3VlU3RhdHVzID09PSAnaWRlbnRpZmllZCcgJiYgc2VsZWN0ZWRUaWNrZXQ/LnN0YXR1cyAhPT0gJ2Nsb3NlZCcgJiYgaXNSZXN0b3JlRHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBtYi01IG1zLTUgbXQtNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgcGUtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRyZSBqdXN0aWZ5LWNvbnRlbnQtY2VudHJlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHZpZXdCb3g9XCIwIDAgNDAgNDBcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCIyMFwiIGZpbGw9XCIjRUFGOEZGXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMzAuNDkzMiAyOC4zMzUxTDI5LjY4NjcgMjcuNTI4NkwyMC45OTY1IDE4LjgzODRMMjMuNTc0NCAxNi4yNjA1TDI0LjE5MjEgMTUuNjQxNkMyNC4yNTEgMTUuNTgxOCAyNC4yODQzIDE1LjUwMTQgMjQuMjg0NyAxNS40MTc0QzI0LjI4NDUgMTUuMzc1OSAyNC4yNzYxIDE1LjMzNDkgMjQuMjYgMTUuMjk2NkMyNC4yNDM5IDE1LjI1ODQgMjQuMjIwNCAxNS4yMjM3IDI0LjE5MDkgMTUuMTk0NUwyMy41NzIgMTQuNTc1NkwyMC44MzgxIDExLjgzNjhMMjAuMjE5MiAxMS4yMThDMjAuMTkgMTEuMTg4MiAyMC4xNTUxIDExLjE2NDUgMjAuMTE2NiAxMS4xNDg0QzIwLjA3ODEgMTEuMTMyMyAyMC4wMzY4IDExLjEyNCAxOS45OTUgMTEuMTI0QzE5Ljk1MzMgMTEuMTI0IDE5LjkxMiAxMS4xMzIzIDE5Ljg3MzUgMTEuMTQ4NEMxOS44MzUgMTEuMTY0NSAxOS44MDAxIDExLjE4ODIgMTkuNzcwOSAxMS4yMThMMTkuMTUyIDExLjgzODFMMTUuODAxNiAxNS4xODg0QzE1Ljc3MTkgMTUuMjE3NiAxNS43NDgzIDE1LjI1MjMgMTUuNzMyMiAxNS4yOTA3QzE1LjcxNjEgMTUuMzI5MSAxNS43MDc3IDE1LjM3MDMgMTUuNzA3NyAxNS40MTJDMTUuNzA3NyAxNS40NTM2IDE1LjcxNjEgMTUuNDk0OCAxNS43MzIyIDE1LjUzMzJDMTUuNzQ4MyAxNS41NzE2IDE1Ljc3MTkgMTUuNjA2NCAxNS44MDE2IDE1LjYzNTVMMTkuMDAyMSAxOC44MzcyTDEwLjMxMDcgMjcuNTI4Nkw5LjUwNzg3IDI4LjMzNTFDOS40NDgzNCAyOC4zOTQxIDkuNDE0NjEgMjguNDc0MyA5LjQxNDA2IDI4LjU1ODFDOS40MTQ0MSAyOC42MzkxIDkuNDQ1MyAyOC43MTcgOS41MDA1NiAyOC43NzYyQzkuNTMwMDcgMjguODA3NyA5LjU2NTczIDI4LjgzMjggOS42MDUzMyAyOC44NUM5LjY0NDk0IDI4Ljg2NzIgOS42ODc2NSAyOC44NzYxIDkuNzMwODIgMjguODc2MUgxNy41NDg3QzE3LjYzMjYgMjguODc1NyAxNy43MTMgMjguODQyMyAxNy43NzIzIDI4Ljc4MjlDMTcuODMxNiAyOC43MjM2IDE3Ljg2NTEgMjguNjQzMiAxNy44NjU0IDI4LjU1OTNWMjcuNzgyQzE3Ljg2NTQgMjcuNjk3OSAxNy44MzIxIDI3LjYxNzIgMTcuNzcyNyAyNy41NTc2QzE3LjcxMzQgMjcuNDk4IDE3LjYzMjggMjcuNDY0NCAxNy41NDg3IDI3LjQ2NEgxMi4zNzA5TDE5Ljk5ODcgMTkuODM2MkwyNy42MjY1IDI3LjQ2NEgyMi40MDM2QzIyLjMxOTUgMjcuNDY0NCAyMi4yMzg5IDI3LjQ5OCAyMi4xNzk2IDI3LjU1NzZDMjIuMTIwMiAyNy42MTcyIDIyLjA4NjkgMjcuNjk3OSAyMi4wODY5IDI3Ljc4MlYyOC41NTkzQzIyLjA4NjcgMjguNjAxIDIyLjA5NDkgMjguNjQyNCAyMi4xMTEgMjguNjgwOUMyMi4xMjcyIDI4LjcxOTQgMjIuMTUwOCAyOC43NTQzIDIyLjE4MDcgMjguNzgzNUMyMi4yMzk5IDI4Ljg0MjYgMjIuMzIgMjguODc1OCAyMi40MDM2IDI4Ljg3NjFIMzAuMjY5QzMwLjMxMjQgMjguODc2MiAzMC4zNTUzIDI4Ljg2NzQgMzAuMzk1MiAyOC44NTAyQzMwLjQzNSAyOC44MzMgMzAuNDcwOCAyOC44MDc4IDMwLjUwMDUgMjguNzc2MkMzMC41NTc0IDI4LjcxNjQgMzAuNTg4NSAyOC42MzY3IDMwLjU4NzIgMjguNTU0MkMzMC41ODU4IDI4LjQ3MTYgMzAuNTUyIDI4LjM5MyAzMC40OTMyIDI4LjMzNTFaTTE5Ljk5MzggMTIuOTkwNkwyMi40MjE5IDE1LjQxODdMMTkuOTk5OSAxNy44NDA3TDE3LjU3MTggMTUuNDEyNkwxOS45OTM4IDEyLjk5MDZaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMDBBM0ZGXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTAgaC0xMDAgbXQtMyBib3JkZXIgYm9yZGVyLTEgYm9yZGVyLWdyYXlcIiBzdHlsZT1cIndpZHRoOjBweFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdC0wIHctMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZGluZ3RleHQgdGV4dC1jYXBpdGFsaXplXCI+VGFuZ288L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpbWluZ3RleHQgcHgtMyBwdC0xXCI+Tm93PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHR1cGRhdGVzIGZ3LWJvbGQtNDAwIG10LTNcIj5XYWl0aW5nIG9uIHRoZSBzdG9yZSB0byByZXN0b3JlIHRoZSBhbmdsZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXNzdWVjYXJkIHctMTAwIG10LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFpbmNhcmQtbGFiZWwgZnctYm9sZFwiPkhhcyB0aGUgY2FtZXJhIGFuZ2xlIGJlZW4gcmVzdG9yZWQ/PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSB3LTQ1XCIgW2Rpc2FibGVkXT1cInN1Ym1pdHRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVwbHlSZXN0b3JlZCgnWWVzJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biB3LTQ1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwicmVzdG9yZVJlcGx5ID09PSAnTm8nID8gJ2JnLWxpZ2h0LXByaW1hcnkgdGV4dC1wcmltYXJ5JzonYnRuLW91dGxpbmUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc3RvcmVSZXBseSA9ICdObydcIj4gTm8gPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC01XCIgKm5nSWY9XCJyZXN0b3JlUmVwbHkgPT09ICdObydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyBtdC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPmNvbW1lbnRzPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJ3LTEwMCBtdC0zXCIgWyhuZ01vZGVsKV09XCJyZXN0b3JlQ29tbWVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgY29tbWVudHMuLi5cIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy0xMDAgbXQtM1wiIFtkaXNhYmxlZF09XCJzdWJtaXR0aW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlcGx5UmVzdG9yZWQoJ05vJylcIj5TdWJtaXQ8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPCEtLSBBbmdsZSBjaGFuZ2UgaW1hZ2UgcG9wdXAgLS0+XG48bmctdGVtcGxhdGUgI2FuZ2xlSW1hZ2VQb3B1cCBsZXQtbW9kYWw+XG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBib3JkZXItMCBwYi0wXCI+XG4gICAgICAgIDxoNSBjbGFzcz1cIm1haW5jYXJkLWxhYmVsIGZ3LWJvbGQgbWItMFwiPkFuZ2xlIENoYW5nZTwvaDU+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHB0LTJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdW5kZWQtMyBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJ3LTEwMFwiIFtzcmNdPVwiY2RuVXJsKHNlbGVjdGVkVGlja2V0Py5hbmdsZUNoYW5nZUltYWdlKVwiIGFsdD1cImFuZ2xlIGNoYW5nZVwiPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
314
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlja2V0LWNhbWVyYS1hbmdsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS10aWNrZXQtaW5mcmEvc3JjL2xpYi9jb21wb25lbnRzL3RpY2tldC1jYW1lcmEtYW5nbGUvdGlja2V0LWNhbWVyYS1hbmdsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS10aWNrZXQtaW5mcmEvc3JjL2xpYi9jb21wb25lbnRzL3RpY2tldC1jYW1lcmEtYW5nbGUvdGlja2V0LWNhbWVyYS1hbmdsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7QUFVMUMsTUFBTSxPQUFPLDBCQUEwQjtJQTRCM0I7SUFDQTtJQUNBO0lBQ0E7SUFDRDtJQS9CUSxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUNqQyxXQUFXLENBQU07SUFDSSxlQUFlLENBQU07SUFFbkQsYUFBYSxDQUFNO0lBQ25CLE9BQU8sQ0FBTTtJQUNiLFFBQVEsQ0FBTTtJQUNkLE9BQU8sR0FBVSxFQUFFLENBQUM7SUFDcEIsVUFBVSxDQUFNO0lBQ2hCLGNBQWMsR0FBUSxJQUFJLENBQUM7SUFDM0IsVUFBVSxHQUFRLENBQUMsQ0FBQztJQUNwQixnQkFBZ0IsR0FBWSxJQUFJLENBQUM7SUFDakMsZUFBZSxHQUFZLEtBQUssQ0FBQztJQUNqQyxjQUFjLEdBQVksS0FBSyxDQUFDO0lBQ2hDLGNBQWMsR0FBVSxFQUFFLENBQUM7SUFFM0Isb0JBQW9CO0lBQ3BCLFNBQVMsR0FBaUMsRUFBRSxDQUFDO0lBQzdDLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDaEIsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUNqQixVQUFVLEdBQVksS0FBSyxDQUFDO0lBRTVCLDRCQUE0QjtJQUM1QixZQUFZLEdBQXNCLEVBQUUsQ0FBQztJQUNyQyxjQUFjLEdBQUcsRUFBRSxDQUFDO0lBRXBCLFlBQ1UsT0FBdUIsRUFDdkIsRUFBcUIsRUFDckIsWUFBMEIsRUFDMUIsWUFBc0IsRUFDdkIsRUFBc0I7UUFKckIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDdkIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFDckIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsaUJBQVksR0FBWixZQUFZLENBQVU7UUFDdkIsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7SUFDNUIsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO1lBQ3pFLElBQUksQ0FBQyxFQUFFO2dCQUNMLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDekIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQ3BCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxZQUFxQjtRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFDaEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM3QixNQUFNLEdBQUcsR0FBRztZQUNWLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLFNBQVM7WUFDN0MsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLE9BQU87WUFDekMsV0FBVyxFQUFFLEVBQUU7U0FDaEIsQ0FBQztRQUNGLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDL0UsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRTtvQkFDdkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztvQkFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztvQkFDcEMsc0VBQXNFO29CQUN0RSxNQUFNLFNBQVMsR0FBRyxZQUFZO3dCQUM1QixDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDO3dCQUNqRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ1AsTUFBTSxLQUFLLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUM1QyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztpQkFDOUI7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7b0JBQ2xCLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO29CQUMzQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztpQkFDN0I7Z0JBQ0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztnQkFDOUIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMxQixDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO2dCQUM1QixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzFCLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsOEVBQThFO0lBQzlFLCtFQUErRTtJQUMvRSx5REFBeUQ7SUFDekQsZ0JBQWdCLENBQUMsTUFBVztRQUMxQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzRCxNQUFNLE1BQU0sR0FBOEI7WUFDeEMsaUJBQWlCLEVBQUUscUNBQXFDO1lBQ3hELFFBQVEsRUFBRSx5Q0FBeUM7WUFDbkQsZ0JBQWdCLEVBQUUsMENBQTBDO1NBQzdELENBQUM7UUFDRixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLDBFQUEwRTtJQUMxRSxZQUFZLENBQUMsTUFBVztRQUN0QixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsVUFBVSxDQUFDLE1BQVcsRUFBRSxLQUFVO1FBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxVQUFVLENBQUMsUUFBYTtRQUN0QixJQUFJLENBQUMsUUFBUSxFQUFFO1lBQUUsT0FBTztTQUFFO1FBQzFCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLE1BQU0sR0FBRyxHQUFHO1lBQ1YsUUFBUSxFQUFFLFFBQVE7WUFDbEIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtTQUN4QixDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNsRixJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3hFLDJEQUEyRDtnQkFDM0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDO29CQUN0RSxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxFQUFFO3lCQUNqRCxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssY0FBYyxDQUFDO29CQUN4RCxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNQLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzFCLENBQUM7WUFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUNWLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUMzQixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDMUIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCwyRUFBMkU7SUFDM0Usd0RBQXdEO0lBQ3hELElBQUksWUFBWTtRQUNkLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDO1FBQzdDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztTQUFFO1FBQzNCLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osZ0NBQWdDO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxVQUFVLElBQUksRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFDdkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUMzQyxJQUFJLEVBQUUsSUFBSTtZQUNWLFFBQVEsRUFBRSxJQUFJO1lBQ2Qsb0VBQW9FO1lBQ3BFLHVEQUF1RDtZQUN2RCxXQUFXLEVBQUUsbUJBQW1CO1NBQ2pDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCwyRUFBMkU7SUFDM0UsTUFBTSxDQUFDLEdBQVE7UUFDYixJQUFJLENBQUMsR0FBRyxFQUFFO1lBQUUsT0FBTyxFQUFFLENBQUM7U0FBRTtRQUN4QixJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQUUsT0FBTyxHQUFHLENBQUM7U0FBRTtRQUN0RSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUM7UUFDL0MsT0FBTyxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFRCxhQUFhLEtBQVcsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRixhQUFhLEtBQVcsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsRUFBRTtRQUFFLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUFFLENBQUMsQ0FBQztJQUVsSCw0RUFBNEU7SUFDNUUsc0VBQXNFO0lBQ3RFLGVBQWUsQ0FBQyxLQUFVO1FBQ3hCLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDekIsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELDJFQUEyRTtJQUMzRSw0RUFBNEU7SUFDNUUsV0FBVyxDQUFDLEtBQVU7UUFDcEIsSUFBSSxLQUFLLEtBQUssRUFBRSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUN6RCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQVMsQ0FBQztZQUM5QixPQUFPO1NBQ1I7UUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFFLEVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsVUFBVTtRQUNSLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNuQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLHVDQUF1QyxDQUFDLENBQUM7U0FDakY7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUU7WUFDbEMsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsTUFBTSxHQUFHLEdBQVE7WUFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRO1lBQ3RDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFFBQVEsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUTtTQUN2RixDQUFDO1FBQ0YsMkVBQTJFO1FBQzNFLDRFQUE0RTtRQUM1RSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssT0FBTyxFQUFFO1lBQy9CLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdkMsR0FBRyxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3RFO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNqRixJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ3hCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFO29CQUMzQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQztvQkFDL0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUMvQyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztvQkFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO29CQUN0QixrRUFBa0U7b0JBQ2xFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzVCO3FCQUFNO29CQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxPQUFPLElBQUkseUJBQXlCLENBQUMsQ0FBQztpQkFDNUU7Z0JBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMxQixDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sSUFBSSx5QkFBeUIsQ0FBQyxDQUFDO2dCQUNsRixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzFCLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQW1CO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLFFBQVEsRUFBRTtZQUNsQyxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixNQUFNLEdBQUcsR0FBUTtZQUNmLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVE7WUFDdEMsWUFBWSxFQUFFLEtBQUs7WUFDbkIsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1NBQ3BDLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ2pGLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztnQkFDeEIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUU7b0JBQzNCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDO29CQUMvQyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQy9DLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO29CQUN2QixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDNUI7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLE9BQU8sSUFBSSx5QkFBeUIsQ0FBQyxDQUFDO2lCQUM1RTtnQkFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzFCLENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLHlCQUF5QixDQUFDLENBQUM7Z0JBQ2xGLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDMUIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUN4QixDQUFDO3dHQW5TVSwwQkFBMEI7NEZBQTFCLDBCQUEwQiwyTkNadkMsaTU3QkFvV0E7OzRGRHhWYSwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0UseUJBQXlCO3NNQU0xQixXQUFXO3NCQUFuQixLQUFLO2dCQUN3QixlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcbmltcG9ydCB7IFRpY2tldHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGlja2V0cy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXRpY2tldC1jYW1lcmEtYW5nbGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGlja2V0LWNhbWVyYS1hbmdsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi90aWNrZXQtY2FtZXJhLWFuZ2xlLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgVGlja2V0Q2FtZXJhQW5nbGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuICBASW5wdXQoKSBzZWxlY3RlZFRhYjogYW55O1xuICBAVmlld0NoaWxkKCdhbmdsZUltYWdlUG9wdXAnKSBhbmdsZUltYWdlUG9wdXA6IGFueTtcblxuICBoZWFkZXJGaWx0ZXJzOiBhbnk7XG4gIHN0b3JlSWQ6IGFueTtcbiAgY2xpZW50SWQ6IGFueTtcbiAgdGlja2V0czogYW55W10gPSBbXTtcbiAgdGlja2V0Q2FyZDogYW55O1xuICBzZWxlY3RlZFRpY2tldDogYW55ID0gbnVsbDtcbiAgc2VsZWN0Q2FyZDogYW55ID0gMDtcbiAgc3RvcmVMaXN0TG9hZGluZzogYm9vbGVhbiA9IHRydWU7XG4gIHN0b3JlTGlzdE5vZGF0YTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcmV2aWV3TG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICB2aWV3VGlja2V0RGF0YTogYW55W10gPSBbXTtcblxuICAvLyBBY2tub3dsZWRnZSBmb3JtLlxuICBhY2tSZWFzb246ICdzdG9yZScgfCAnb3BlcmF0aW9uYWwnIHwgJycgPSAnJztcbiAgYWNrQ29tbWVudCA9ICcnO1xuICBkYXlzVG9SZXZlcnQgPSAyO1xuICBzdWJtaXR0aW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gVGFuZ28tc2lkZSByZXN0b3JlIGNoZWNrLlxuICByZXN0b3JlUmVwbHk6ICdZZXMnIHwgJ05vJyB8ICcnID0gJyc7XG4gIHJlc3RvcmVDb21tZW50ID0gJyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBUaWNrZXRzU2VydmljZSxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcbiAgICBwdWJsaWMgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZTogYW55KSA9PiB7XG4gICAgICBpZiAoZSkge1xuICAgICAgICB0aGlzLmhlYWRlckZpbHRlcnMgPSBlO1xuICAgICAgICB0aGlzLnN0b3JlSWQgPSBlLnN0b3JlO1xuICAgICAgICB0aGlzLmNsaWVudElkID0gZS5jbGllbnQ7XG4gICAgICAgIHRoaXMubG9hZFRpY2tldHMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBsb2FkVGlja2V0cyhrZWVwVGlja2V0SWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3RvcmVJZCB8fCAhdGhpcy5jbGllbnRJZCkgeyByZXR1cm47IH1cbiAgICB0aGlzLnN0b3JlTGlzdExvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuc3RvcmVMaXN0Tm9kYXRhID0gZmFsc2U7XG4gICAgY29uc3Qgb2JqID0ge1xuICAgICAgc3RvcmVJZDogdGhpcy5zdG9yZUlkLFxuICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXG4gICAgICBmcm9tRGF0ZTogdGhpcy5oZWFkZXJGaWx0ZXJzPy5kYXRlPy5zdGFydERhdGUsXG4gICAgICB0b0RhdGU6IHRoaXMuaGVhZGVyRmlsdGVycz8uZGF0ZT8uZW5kRGF0ZSxcbiAgICAgIGZpbHRlcklzc3VlOiAnJyxcbiAgICB9O1xuICAgIHRoaXMuc2VydmljZS5jYW1lcmFBbmdsZUNoYW5nZUxpc3Qob2JqKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDAgJiYgcmVzLmRhdGE/LnJlc3VsdD8ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy50aWNrZXRzID0gcmVzLmRhdGEucmVzdWx0O1xuICAgICAgICAgIHRoaXMudGlja2V0Q2FyZCA9IHJlcy5kYXRhLnJlc3BvbnNlO1xuICAgICAgICAgIC8vIFN0YXkgb24gdGhlIHRpY2tldCB0aGUgdXNlciB3YXMgdmlld2luZyAoZS5nLiBhZnRlciBhY2tub3dsZWRnaW5nKS5cbiAgICAgICAgICBjb25zdCBrZWVwSW5kZXggPSBrZWVwVGlja2V0SWRcbiAgICAgICAgICAgID8gdGhpcy50aWNrZXRzLmZpbmRJbmRleCgodDogYW55KSA9PiB0LnRpY2tldElkID09PSBrZWVwVGlja2V0SWQpXG4gICAgICAgICAgICA6IC0xO1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0ga2VlcEluZGV4ID4gLTEgPyBrZWVwSW5kZXggOiAwO1xuICAgICAgICAgIHRoaXMuU2hvd1RpY2tldCh0aGlzLnRpY2tldHNbaW5kZXhdLCBpbmRleCk7XG4gICAgICAgICAgdGhpcy5zdG9yZUxpc3ROb2RhdGEgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnRpY2tldHMgPSBbXTtcbiAgICAgICAgICB0aGlzLnRpY2tldENhcmQgPSByZXM/LmRhdGE/LnJlc3BvbnNlO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xuICAgICAgICAgIHRoaXMuc3RvcmVMaXN0Tm9kYXRhID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0b3JlTGlzdExvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgdGhpcy50aWNrZXRzID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQgPSBudWxsO1xuICAgICAgICB0aGlzLnN0b3JlTGlzdExvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdG9yZUxpc3ROb2RhdGEgPSB0cnVlO1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyBDYXJkIGRlc2NyaXB0aW9uLiBUaGUgQVBJIHJldHVybnMgYSBzaG9ydCBsYWJlbCAoJ0FuZ2xlIGNoYW5nZScpLCB3aGlsZSB0aGVcbiAgLy8gZGVzaWduIHNob3dzIGEgZnVsbCBzZW50ZW5jZSwgc28gbWFwIGl0IGhlcmUg4oCUIGtleWVkIG9mZiBpc3N1ZVR5cGUsIHdpdGggdGhlXG4gIC8vIEFQSSdzIG93biBsYWJlbCBhcyB0aGUgZmFsbGJhY2sgZm9yIGFueXRoaW5nIHVubWFwcGVkLlxuICBpc3N1ZURlc2NyaXB0aW9uKHRpY2tldDogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlID0gU3RyaW5nKHRpY2tldD8uaXNzdWVUeXBlIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGJ5VHlwZTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgIGNhbWVyYWFuZ2xlY2hhbmdlOiAnWW91ciBjYW1lcmEgYW5nbGUgaGFzIGJlZW4gY2hhbmdlZC4nLFxuICAgICAgaXBjaGFuZ2U6ICdUaGUgY2FtZXJhIElQIGFkZHJlc3MgaGFzIGJlZW4gY2hhbmdlZC4nLFxuICAgICAgcmVzb2x1dGlvbmNoYW5nZTogJ1lvdXIgY2FtZXJhIHJlc29sdXRpb24gaGFzIGJlZW4gY2hhbmdlZC4nLFxuICAgIH07XG4gICAgcmV0dXJuIGJ5VHlwZVt0eXBlXSB8fCB0aWNrZXQ/Lmlzc3VlIHx8ICcnO1xuICB9XG5cbiAgLy8gQ29tbWVudCBjb3VudCBzaG93biBvbiBlYWNoIHRpY2tldCBjYXJkIOKAlCB0aGUgdGlja2V0J3Mgb3duIHRpY2tldEFjdGl2aXR5XG4gIC8vIGVudHJpZXMuIFplcm8tcGFkZGVkIHRvIHR3byBkaWdpdHMgdG8gbWF0Y2ggdGhlIGRlc2lnbiAoXCIwMSBjb21tZW50c1wiKS5cbiAgY29tbWVudENvdW50KHRpY2tldDogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBuID0gQXJyYXkuaXNBcnJheSh0aWNrZXQ/LnRpY2tldEFjdGl2aXR5KSA/IHRpY2tldC50aWNrZXRBY3Rpdml0eS5sZW5ndGggOiAwO1xuICAgIHJldHVybiBuIDwgMTAgPyAnMCcgKyBuIDogU3RyaW5nKG4pO1xuICB9XG5cbiAgU2hvd1RpY2tldCh0aWNrZXQ6IGFueSwgaW5kZXg6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0Q2FyZCA9IGluZGV4O1xuICAgIHRoaXMuYWNrUmVhc29uID0gJyc7XG4gICAgdGhpcy5hY2tDb21tZW50ID0gJyc7XG4gICAgdGhpcy5kYXlzVG9SZXZlcnQgPSAyO1xuICAgIHRoaXMucmVzdG9yZVJlcGx5ID0gJyc7XG4gICAgdGhpcy5yZXN0b3JlQ29tbWVudCA9ICcnO1xuICAgIHRoaXMuZ2V0UHJldmlldyh0aWNrZXQ/LnRpY2tldElkKTtcbiAgfVxuXG4gIGdldFByZXZpZXcodGlja2V0SWQ6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGlja2V0SWQpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5wcmV2aWV3TG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IG51bGw7XG4gICAgY29uc3Qgb2JqID0ge1xuICAgICAgdGlja2V0SWQ6IHRpY2tldElkLFxuICAgICAgc3RvcmVJZDogdGhpcy5zdG9yZUlkLFxuICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXG4gICAgfTtcbiAgICB0aGlzLnNlcnZpY2UuY2FtZXJhQW5nbGVDaGFuZ2VQcmV2aWV3KG9iaikucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldCA9IHJlcyAmJiByZXMuY29kZSA9PT0gMjAwID8gcmVzLmRhdGE/LnJlc3VsdCA6IG51bGw7XG4gICAgICAgIC8vIE5ld2VzdCBhY3Rpdml0eSBmaXJzdCwgbWF0Y2hpbmcgdGhlIEluZnJhIHRpY2tldCB0aHJlYWQuXG4gICAgICAgIHRoaXMudmlld1RpY2tldERhdGEgPSBBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0ZWRUaWNrZXQ/LnRpY2tldEFjdGl2aXR5KVxuICAgICAgICAgID8gdGhpcy5zZWxlY3RlZFRpY2tldC50aWNrZXRBY3Rpdml0eS5zbGljZSgpLnJldmVyc2UoKVxuICAgICAgICAgICAgICAuZmlsdGVyKChlOiBhbnkpID0+IGUuYWN0aW9uVHlwZSAhPT0gJ3N0YXR1c0NoYW5nZScpXG4gICAgICAgICAgOiBbXTtcbiAgICAgICAgdGhpcy5wcmV2aWV3TG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy52aWV3VGlja2V0RGF0YSA9IFtdO1xuICAgICAgICB0aGlzLnByZXZpZXdMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFRoZSBzdG9yZSBwcm9taXNlZCBhIHJlc3RvcmUgYnkgYGhpYmVybmF0aW9uYCAoYWNrbm93bGVkZ2UgZGF0ZSArIGRheXMpLlxuICAvLyBPbmx5IHByb21wdCBUYW5nbyB0byBjaGVjayBvbmNlIHRoYXQgZGF0ZSBoYXMgcGFzc2VkLlxuICBnZXQgaXNSZXN0b3JlRHVlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGR1ZSA9IHRoaXMuc2VsZWN0ZWRUaWNrZXQ/LmhpYmVybmF0aW9uO1xuICAgIGlmICghZHVlKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKSA+PSBuZXcgRGF0ZShkdWUpLmdldFRpbWUoKTtcbiAgfVxuXG4gIGdldCBjaGFuZ2VUeXBlKCk6IHN0cmluZyB7XG4gICAgLy8gJ2FuZ2xlJyB8ICdpcCcgfCAncmVzb2x1dGlvbidcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRpY2tldD8uY2hhbmdlVHlwZSB8fCAnJztcbiAgfVxuXG4gIG9wZW5BbmdsZUltYWdlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZFRpY2tldD8uYW5nbGVDaGFuZ2VJbWFnZSkgeyByZXR1cm47IH1cbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRoaXMuYW5nbGVJbWFnZVBvcHVwLCB7XG4gICAgICBzaXplOiAneGwnLFxuICAgICAgY2VudGVyZWQ6IHRydWUsXG4gICAgICAvLyBXaWRlciB0aGFuIEJvb3RzdHJhcCdzIHhsIHNvIHRoZSBzaWRlLWJ5LXNpZGUgYW5nbGUgY29tcGFyaXNvbiBpc1xuICAgICAgLy8gbGVnaWJsZTsgdGhlIGltYWdlIGlzIHRoZSB3aG9sZSBwb2ludCBvZiB0aGlzIHBvcHVwLlxuICAgICAgd2luZG93Q2xhc3M6ICdhbmdsZS1pbWFnZS1tb2RhbCcsXG4gICAgfSk7XG4gIH1cblxuICAvLyBJbWFnZXMgYXJlIHN0b3JlZCBhcyByYXcgUzMga2V5czsgc2VydmUgdGhlbSB0aHJvdWdoIHRoZSBDbG91ZEZyb250IENETi5cbiAgY2RuVXJsKGtleTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIWtleSkgeyByZXR1cm4gJyc7IH1cbiAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYga2V5LnN0YXJ0c1dpdGgoJ2h0dHAnKSkgeyByZXR1cm4ga2V5OyB9XG4gICAgY29uc3QgYmFzZSA9IHRoaXMuc2VydmljZS5hbmdsZUNoYW5nZUNETiB8fCAnJztcbiAgICByZXR1cm4gYCR7YmFzZX0ke1N0cmluZyhrZXkpLnJlcGxhY2UoL15cXC8vLCAnJyl9YDtcbiAgfVxuXG4gIGluY3JlbWVudERheXMoKTogdm9pZCB7IHRoaXMuZGF5c1RvUmV2ZXJ0ID0gKE51bWJlcih0aGlzLmRheXNUb1JldmVydCkgfHwgMCkgKyAxOyB9XG4gIGRlY3JlbWVudERheXMoKTogdm9pZCB7IGlmICh0aGlzLmRheXNUb1JldmVydCA+IDApIHsgdGhpcy5kYXlzVG9SZXZlcnQgPSAoTnVtYmVyKHRoaXMuZGF5c1RvUmV2ZXJ0KSB8fCAwKSAtIDE7IH0gfVxuXG4gIC8vIFRoZSBmaWVsZCBpcyB0eXBlYWJsZSBhcyB3ZWxsIGFzIHN0ZXBwYWJsZS4gS2V5cHJlc3MgaXMgbGltaXRlZCB0byBkaWdpdHNcbiAgLy8gKG5vICcuJywgJy0nIG9yICdlJyDigJQgdGhlIHJldmVydCB3aW5kb3cgaXMgYSB3aG9sZSBudW1iZXIgb2YgZGF5cykuXG4gIGFsbG93RGlnaXRzT25seShldmVudDogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgayA9IGV2ZW50LmNoYXJDb2RlO1xuICAgIHJldHVybiBrID09PSA4IHx8IChrID49IDQ4ICYmIGsgPD0gNTcpO1xuICB9XG5cbiAgLy8gS2VlcCB0aGUgbW9kZWwgbnVtZXJpYyB3aGlsZSB0eXBpbmcuIEFuIGVtcHR5IGJveCBpcyBhbGxvd2VkIG1pZC1lZGl0IHNvXG4gIC8vIHRoZSB1c2VyIGNhbiBjbGVhciBpdCBhbmQgcmV0eXBlOyBvbkRheXNCbHVyIHNldHRsZXMgaXQgYmFjayB0byBhIG51bWJlci5cbiAgb25EYXlzSW5wdXQodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kYXlzVG9SZXZlcnQgPSAnJyBhcyBhbnk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRpZ2l0cyA9IFN0cmluZyh2YWx1ZSkucmVwbGFjZSgvW14wLTldL2csICcnKTtcbiAgICB0aGlzLmRheXNUb1JldmVydCA9IGRpZ2l0cyA9PT0gJycgPyAoJycgYXMgYW55KSA6IE51bWJlcihkaWdpdHMpO1xuICB9XG5cbiAgLy8gQmxhbmsgb3IgaW52YWxpZCBvbiBibHVyIGZhbGxzIGJhY2sgdG8gMCBzbyBzdWJtaXQgbmV2ZXIgc2VuZHMgTmFOLycnLlxuICBvbkRheXNCbHVyKCk6IHZvaWQge1xuICAgIGNvbnN0IG4gPSBOdW1iZXIodGhpcy5kYXlzVG9SZXZlcnQpO1xuICAgIHRoaXMuZGF5c1RvUmV2ZXJ0ID0gaXNGaW5pdGUobikgJiYgbiA+IDAgPyBNYXRoLmZsb29yKG4pIDogMDtcbiAgfVxuXG4gIHN1Ym1pdEFja25vd2xlZGdlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5hY2tSZWFzb24pIHtcbiAgICAgIHJldHVybiB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KCdQbGVhc2Ugc2VsZWN0IGEgcmVhc29uIHRvIGFja25vd2xlZGdlJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zZWxlY3RlZFRpY2tldD8udGlja2V0SWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdWJtaXR0aW5nID0gdHJ1ZTtcbiAgICBjb25zdCBvYmo6IGFueSA9IHtcbiAgICAgIHRpY2tldElkOiB0aGlzLnNlbGVjdGVkVGlja2V0LnRpY2tldElkLFxuICAgICAgYWNrUmVhc29uOiB0aGlzLmFja1JlYXNvbixcbiAgICAgIGFja0NvbW1lbnQ6IHRoaXMuYWNrQ29tbWVudCxcbiAgICAgIGlzc3VlSWRlbnRpZmllZEJ5OiB0aGlzLmdzLnVzZXJBY2Nlc3MudmFsdWU/LnVzZXJUeXBlID09PSAndGFuZ28nID8gJ3RhbmdvJyA6ICdjbGllbnQnLFxuICAgIH07XG4gICAgLy8gT25seSBhbmdsZSBjaGFuZ2VzIGNhcnJ5IGEgcmV2ZXJ0IHdpbmRvdy4gQ29lcmNlIGhlcmUgdG9vIOKAlCB0aGUgZmllbGQgaXNcbiAgICAvLyB0eXBlYWJsZSwgYW5kIHN1Ym1pdHRpbmcgd2l0aG91dCBibHVycmluZyBjb3VsZCBvdGhlcndpc2Ugc2VuZCAnJyBvciBOYU4uXG4gICAgaWYgKHRoaXMuY2hhbmdlVHlwZSA9PT0gJ2FuZ2xlJykge1xuICAgICAgY29uc3QgZGF5cyA9IE51bWJlcih0aGlzLmRheXNUb1JldmVydCk7XG4gICAgICBvYmouZGF5c1RvUmV2ZXJ0ID0gaXNGaW5pdGUoZGF5cykgJiYgZGF5cyA+IDAgPyBNYXRoLmZsb29yKGRheXMpIDogMDtcbiAgICB9XG4gICAgdGhpcy5zZXJ2aWNlLnVwZGF0ZUFuZ2xlQ2hhbmdlVGlja2V0KG9iaikucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xuICAgICAgICAgIGNvbnN0IHRpY2tldElkID0gdGhpcy5zZWxlY3RlZFRpY2tldD8udGlja2V0SWQ7XG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KHJlcy5tZXNzYWdlKTtcbiAgICAgICAgICB0aGlzLmFja1JlYXNvbiA9ICcnO1xuICAgICAgICAgIHRoaXMuYWNrQ29tbWVudCA9ICcnO1xuICAgICAgICAgIHRoaXMuZGF5c1RvUmV2ZXJ0ID0gMjtcbiAgICAgICAgICAvLyBSZWZyZXNoIHRoZSBsaXN0IChzdGF0dXMvY291bnRzIGNoYW5nZSkgYW5kIHJlb3BlbiB0aGlzIHRpY2tldC5cbiAgICAgICAgICB0aGlzLmxvYWRUaWNrZXRzKHRpY2tldElkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KHJlcz8ubWVzc2FnZSB8fCAnVW5hYmxlIHRvIHVwZGF0ZSB0aWNrZXQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ1VuYWJsZSB0byB1cGRhdGUgdGlja2V0Jyk7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHJlcGx5UmVzdG9yZWQocmVwbHk6ICdZZXMnIHwgJ05vJyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZFRpY2tldD8udGlja2V0SWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdWJtaXR0aW5nID0gdHJ1ZTtcbiAgICBjb25zdCBvYmo6IGFueSA9IHtcbiAgICAgIHRpY2tldElkOiB0aGlzLnNlbGVjdGVkVGlja2V0LnRpY2tldElkLFxuICAgICAgcmVzdG9yZVJlcGx5OiByZXBseSxcbiAgICAgIHJlc3RvcmVDb21tZW50OiB0aGlzLnJlc3RvcmVDb21tZW50LFxuICAgIH07XG4gICAgdGhpcy5zZXJ2aWNlLnVwZGF0ZUFuZ2xlQ2hhbmdlVGlja2V0KG9iaikucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xuICAgICAgICAgIGNvbnN0IHRpY2tldElkID0gdGhpcy5zZWxlY3RlZFRpY2tldD8udGlja2V0SWQ7XG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KHJlcy5tZXNzYWdlKTtcbiAgICAgICAgICB0aGlzLnJlc3RvcmVSZXBseSA9ICcnO1xuICAgICAgICAgIHRoaXMucmVzdG9yZUNvbW1lbnQgPSAnJztcbiAgICAgICAgICB0aGlzLmxvYWRUaWNrZXRzKHRpY2tldElkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KHJlcz8ubWVzc2FnZSB8fCAnVW5hYmxlIHRvIHVwZGF0ZSB0aWNrZXQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgJ1VuYWJsZSB0byB1cGRhdGUgdGlja2V0Jyk7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGNhbmNlbEFja25vd2xlZGdlKCk6IHZvaWQge1xuICAgIHRoaXMuYWNrUmVhc29uID0gJyc7XG4gICAgdGhpcy5hY2tDb21tZW50ID0gJyc7XG4gICAgdGhpcy5kYXlzVG9SZXZlcnQgPSAyO1xuICB9XG59IiwiPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtM1wiPlxuICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmQtbGFiZWwgbWItMlwiPkNhbWVyYSBBbmdsZSBDaGFuZ2U8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImhlYWRlckZpbHRlcnM/LmRhdGU/LnN0YXJ0RGF0ZSA9PT0gaGVhZGVyRmlsdGVycz8uZGF0ZT8uZW5kRGF0ZVwiIGNsYXNzPVwidGV4dC1zdWIgbWItMlwiPkFuXG4gICAgICAgICAgICAgICAgb3ZlcnZpZXcgb2YgYWxsIHRoZSB0aWNrZXRzIGZvciB0aWxsIHt7aGVhZGVyRmlsdGVycz8uZGF0ZT8uZW5kRGF0ZSB8IGN1c3RvbURhdGVGb3JtYXR9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaGVhZGVyRmlsdGVycz8uZGF0ZT8uc3RhcnREYXRlICE9PSBoZWFkZXJGaWx0ZXJzPy5kYXRlPy5lbmREYXRlXCIgY2xhc3M9XCJ0ZXh0LXN1YiBtYi0yXCI+QW5cbiAgICAgICAgICAgICAgICBvdmVydmlldyBvZiBhbGwgdGhlIHRpY2tldHMgZm9yIHt7aGVhZGVyRmlsdGVycz8uZGF0ZT8uc3RhcnREYXRlIHxcbiAgICAgICAgICAgICAgICBjdXN0b21EYXRlRm9ybWF0fX0gLSB7e2hlYWRlckZpbHRlcnM/LmRhdGU/LmVuZERhdGUgfCBjdXN0b21EYXRlRm9ybWF0fX08L3NwYW4+XG4gICAgICAgIDwvaDM+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG1iLTdcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGlzc3VlIG9mIHRpY2tldENhcmRcIiBjbGFzcz1cImlzc3VlY2FyZFwiPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGVcIj57e2lzc3VlPy5jb3VudH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwgZnctc2VtaWJvbGRcIj57e2lzc3VlPy5uYW1lfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYWluY2FyZC1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHAtMTBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTYgY3Vyc29yLXBvaW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFzdG9yZUxpc3RMb2FkaW5nICYmICFzdG9yZUxpc3ROb2RhdGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGlja2V0cztsZXQgaW5kZXggPSBpbmRleFwiIGNsYXNzPVwidGlja2V0LWNhcmQgbWItNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlNob3dUaWNrZXQoZGF0YSxpbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIihzZWxlY3RDYXJkID8gc2VsZWN0Q2FyZCA6IDApID09PSBpbmRleCA/ICdhY3RpdmUnIDogJydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJvdyAxOiB0aWNrZXQgaWQgKyBzdGF0dXMgcGlsbCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGMtaWRcIj48aW1nIHNyYz0nLi9hc3NldHMvdGFuZ28vSW1hZ2VzL3RpY2tldC5zdmcnIGNsYXNzPVwibWUtMlwiPnt7ZGF0YS50aWNrZXRJZH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRjLXN0YXR1c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJkYXRhLnN0YXR1cyA9PT0gJ2Nsb3NlZCcgPyAnaXMtY2xvc2VkJyA6IChkYXRhLnN0YXR1cyA9PT0gJ2lucHJvZ3Jlc3MnID8gJ2JhZGdlLWxpZ2h0LXByaW1hcnknIDogJ2lzLW9wZW4nKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0Yy1kb3RcIj48L3NwYW4+e3tkYXRhLnN0YXR1cyB8IHRpdGxlY2FzZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUm93IDI6IHdoYXQgY2hhbmdlZCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGMtaXNzdWUgbWItNFwiPnt7aXNzdWVEZXNjcmlwdGlvbihkYXRhKX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBSb3cgMzogYXZhdGFyICsgY29tbWVudHMgKyBkYXRlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJ0Yy1hdmF0YXJcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JbWFnZXMvdXNlclByb2ZpbGUuc3ZnXCIgYWx0PVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRjLW1ldGEgbWUtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgY2xhc3M9XCJtZS0xIGFsaWduLW1pZGRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0IDcuNjY3YTUuNiA1LjYgMCAwIDEtLjYgMi41MzMgNS42NjcgNS42NjcgMCAwIDEtNS4wNjcgMy4xMzMgNS42IDUuNiAwIDAgMS0yLjUzMy0uNkwyIDE0bDEuMjY3LTMuOGE1LjYgNS42IDAgMCAxLS42LTIuNTMzQTUuNjY3IDUuNjY3IDAgMCAxIDUuOCAyLjZhNS42IDUuNiAwIDAgMSAyLjUzMy0uNmguMzM0QTUuNjUzIDUuNjUzIDAgMCAxIDE0IDcuMzMzdi4zMzRaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjRcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+e3tjb21tZW50Q291bnQoZGF0YSl9fSBjb21tZW50czwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGMtbWV0YVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgY2xhc3M9XCJtZS0xIGFsaWduLW1pZGRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwLjY2NyAxLjMzNFY0TTUuMzMzIDEuMzM0VjRNMiA2LjY2N2gxMk0zLjMzMyAyLjY2N2g5LjMzNGMuNzM2IDAgMS4zMzMuNTk3IDEuMzMzIDEuMzMzdjkuMzM0YzAgLjczNi0uNTk3IDEuMzMzLTEuMzMzIDEuMzMzSDMuMzMzQTEuMzMzIDEuMzMzIDAgMCAxIDIgMTMuMzM0VjRjMC0uNzM2LjU5Ny0xLjMzMyAxLjMzMy0xLjMzM1pcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz57eyhkYXRhPy5jcmVhdGVkQXQgfCBkYXRlOidkZCBNTU0sIHl5eXknKX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInN0b3JlTGlzdExvYWRpbmdcIiBjbGFzcz1cImNvbnRlbnR0ZXh0IGZ3LXNlbWlib2xkIHRleHQtY2VudGVyIHB5LTEwXCI+TG9hZGluZyB0aWNrZXRz4oCmXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXN0b3JlTGlzdExvYWRpbmcgJiYgc3RvcmVMaXN0Tm9kYXRhXCIgY2xhc3M9XCJjb250ZW50dGV4dCBmdy1zZW1pYm9sZCB0ZXh0LWNlbnRlciBweS0xMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgTm8gQ2FtZXJhIEFuZ2xlIHRpY2tldHMgZm91bmQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcmV2aWV3TG9hZGluZ1wiIGNsYXNzPVwiY29sLXNtLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnR0ZXh0IGZ3LXNlbWlib2xkIHRleHQtY2VudGVyIHB5LTEwXCI+TG9hZGluZyB0aWNrZXTigKY8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcHJldmlld0xvYWRpbmcgJiYgc2VsZWN0ZWRUaWNrZXQ/LnN0YXR1c1wiIGNsYXNzPVwiY29sLXNtLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluY2FyZC1sYWJlbCBmdy1ib2xkIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGltZyBzcmM9Jy4vYXNzZXRzL3RhbmdvL0ltYWdlcy90aWNrZXQuc3ZnJz48c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJteC0yXCI+e3tzZWxlY3RlZFRpY2tldD8udGlja2V0SWR9fTwvc3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VsZWN0ZWRUaWNrZXQuc3RhdHVzID09PSAnY2xvc2VkJyA/ICdiYWRnZS1saWdodC1zdWNjZXNzJyA6KHNlbGVjdGVkVGlja2V0LnN0YXR1cyA9PT0gJ2lucHJvZ3Jlc3MnID8gJ2JhZGdlLWxpZ2h0LXByaW1hcnknOidiYWRnZS1saWdodC13YXJuaW5nJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnlcIj57e3NlbGVjdGVkVGlja2V0Py5zdGF0dXMgfCB0aXRsZWNhc2V9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFjdGl2aXR5IGxvZyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC01XCIgKm5nRm9yPVwibGV0IG9iaiBvZiB2aWV3VGlja2V0RGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvYmouYWN0aW9uQnkgPT09ICdVc2VyJ1wiIGNsYXNzPVwiZC1mbGV4IG1zLTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBwZS0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRyZSBqdXN0aWZ5LWNvbnRlbnQtY2VudHJlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm1zZ3Byb2ZpbGVcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JbWFnZXMvdXNlclByb2ZpbGUuc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTAgaC0xMDAgbXQtMyBib3JkZXIgYm9yZGVyLTEgYm9yZGVyLWdyYXlcIiBzdHlsZT1cIndpZHRoOjBweFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTMgcHQtMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoZWFkaW5ndGV4dCB0ZXh0LWNhcGl0YWxpemVcIj57e29iaj8uSWRlbnRpZmllZEJ5P29iaj8uSWRlbnRpZmllZEJ5OlwiVGFuZ29cIn19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGltaW5ndGV4dCBweC0zIHB0LTFcIj57e29iaj8udGltZVN0YW1wIHwgZGF0ZTogJ2RkIE1NTSwgeXl5eSBoaDptbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib2JqPy5kZXNjcmlwdGlvblwiIGNsYXNzPVwidGV4dHVwZGF0ZXMgZnctYm9sZC00MDAgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7b2JqPy5kZXNjcmlwdGlvbn19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib2JqPy5jb21tZW50XCIgY2xhc3M9XCJ0aW1pbmd0ZXh0IHBlLTMgcHQtMSBmdy1ib2xkLTQwMFwiPnt7b2JqPy5jb21tZW50fX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvYmouYWN0aW9uQnkgPT09ICdUYW5nbycgfHwgb2JqLmFjdGlvbkJ5ID09PSAnYXV0b21hdGVkJ1wiIGNsYXNzPVwiZC1mbGV4IG1iLTUgbXMtNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHBlLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudHJlIGp1c3RpZnktY29udGVudC1jZW50cmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCIyMFwiIGZpbGw9XCIjRUFGOEZGXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zMC40OTMyIDI4LjMzNTFMMjkuNjg2NyAyNy41Mjg2TDIwLjk5NjUgMTguODM4NEwyMy41NzQ0IDE2LjI2MDVMMjQuMTkyMSAxNS42NDE2QzI0LjI1MSAxNS41ODE4IDI0LjI4NDMgMTUuNTAxNCAyNC4yODQ3IDE1LjQxNzRDMjQuMjg0NSAxNS4zNzU5IDI0LjI3NjEgMTUuMzM0OSAyNC4yNiAxNS4yOTY2QzI0LjI0MzkgMTUuMjU4NCAyNC4yMjA0IDE1LjIyMzcgMjQuMTkwOSAxNS4xOTQ1TDIzLjU3MiAxNC41NzU2TDIwLjgzODEgMTEuODM2OEwyMC4yMTkyIDExLjIxOEMyMC4xOSAxMS4xODgyIDIwLjE1NTEgMTEuMTY0NSAyMC4xMTY2IDExLjE0ODRDMjAuMDc4MSAxMS4xMzIzIDIwLjAzNjggMTEuMTI0IDE5Ljk5NSAxMS4xMjRDMTkuOTUzMyAxMS4xMjQgMTkuOTEyIDExLjEzMjMgMTkuODczNSAxMS4xNDg0QzE5LjgzNSAxMS4xNjQ1IDE5LjgwMDEgMTEuMTg4MiAxOS43NzA5IDExLjIxOEwxOS4xNTIgMTEuODM4MUwxNS44MDE2IDE1LjE4ODRDMTUuNzcxOSAxNS4yMTc2IDE1Ljc0ODMgMTUuMjUyMyAxNS43MzIyIDE1LjI5MDdDMTUuNzE2MSAxNS4zMjkxIDE1LjcwNzcgMTUuMzcwMyAxNS43MDc3IDE1LjQxMkMxNS43MDc3IDE1LjQ1MzYgMTUuNzE2MSAxNS40OTQ4IDE1LjczMjIgMTUuNTMzMkMxNS43NDgzIDE1LjU3MTYgMTUuNzcxOSAxNS42MDY0IDE1LjgwMTYgMTUuNjM1NUwxOS4wMDIxIDE4LjgzNzJMMTAuMzEwNyAyNy41Mjg2TDkuNTA3ODcgMjguMzM1MUM5LjQ0ODM0IDI4LjM5NDEgOS40MTQ2MSAyOC40NzQzIDkuNDE0MDYgMjguNTU4MUM5LjQxNDQxIDI4LjYzOTEgOS40NDUzIDI4LjcxNyA5LjUwMDU2IDI4Ljc3NjJDOS41MzAwNyAyOC44MDc3IDkuNTY1NzMgMjguODMyOCA5LjYwNTMzIDI4Ljg1QzkuNjQ0OTQgMjguODY3MiA5LjY4NzY1IDI4Ljg3NjEgOS43MzA4MiAyOC44NzYxSDE3LjU0ODdDMTcuNjMyNiAyOC44NzU3IDE3LjcxMyAyOC44NDIzIDE3Ljc3MjMgMjguNzgyOUMxNy44MzE2IDI4LjcyMzYgMTcuODY1MSAyOC42NDMyIDE3Ljg2NTQgMjguNTU5M1YyNy43ODJDMTcuODY1NCAyNy42OTc5IDE3LjgzMjEgMjcuNjE3MiAxNy43NzI3IDI3LjU1NzZDMTcuNzEzNCAyNy40OTggMTcuNjMyOCAyNy40NjQ0IDE3LjU0ODcgMjcuNDY0SDEyLjM3MDlMMTkuOTk4NyAxOS44MzYyTDI3LjYyNjUgMjcuNDY0SDIyLjQwMzZDMjIuMzE5NSAyNy40NjQ0IDIyLjIzODkgMjcuNDk4IDIyLjE3OTYgMjcuNTU3NkMyMi4xMjAyIDI3LjYxNzIgMjIuMDg2OSAyNy42OTc5IDIyLjA4NjkgMjcuNzgyVjI4LjU1OTNDMjIuMDg2NyAyOC42MDEgMjIuMDk0OSAyOC42NDI0IDIyLjExMSAyOC42ODA5QzIyLjEyNzIgMjguNzE5NCAyMi4xNTA4IDI4Ljc1NDMgMjIuMTgwNyAyOC43ODM1QzIyLjIzOTkgMjguODQyNiAyMi4zMiAyOC44NzU4IDIyLjQwMzYgMjguODc2MUgzMC4yNjlDMzAuMzEyNCAyOC44NzYyIDMwLjM1NTMgMjguODY3NCAzMC4zOTUyIDI4Ljg1MDJDMzAuNDM1IDI4LjgzMyAzMC40NzA4IDI4LjgwNzggMzAuNTAwNSAyOC43NzYyQzMwLjU1NzQgMjguNzE2NCAzMC41ODg1IDI4LjYzNjcgMzAuNTg3MiAyOC41NTQyQzMwLjU4NTggMjguNDcxNiAzMC41NTIgMjguMzkzIDMwLjQ5MzIgMjguMzM1MVpNMTkuOTkzOCAxMi45OTA2TDIyLjQyMTkgMTUuNDE4N0wxOS45OTk5IDE3Ljg0MDdMMTcuNTcxOCAxNS40MTI2TDE5Ljk5MzggMTIuOTkwNlpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMDBBM0ZGXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0wIGgtMTAwIG10LTMgYm9yZGVyIGJvcmRlci0xIGJvcmRlci1ncmF5XCIgc3R5bGU9XCJ3aWR0aDowcHhcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdC0wIHctMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJoZWFkaW5ndGV4dCB0ZXh0LWNhcGl0YWxpemVcIj57e29iaj8uSWRlbnRpZmllZEJ5P29iaj8uSWRlbnRpZmllZEJ5OlwiVGFuZ29cIn19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGltaW5ndGV4dCBweC0zIHB0LTFcIj57e29iaj8udGltZVN0YW1wIHwgZGF0ZTogJ2RkIE1NTSwgeXl5eSBoaDptbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib2JqLmFjdGlvblR5cGUgPT09ICdkZWZhdWx0SW5mcmEnXCIgY2xhc3M9XCJ0ZXh0dXBkYXRlcyBmdy1ib2xkLTQwMCBtdC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91ciBjYW1lcmEgYW5nbGUgaGFzIGJlZW4gY2hhbmdlZCBhbmQgd2UgcmVxdWVzdCB5b3UgdG8gYWNrbm93bGVkZ2Ugb3IgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2UgdGhlIGNhbWVyYSBhbmdsZSB0byBwcm9jZXNzIHRoZSBkYXRhLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ2hhbmdlIGRldGFpbCBzaXRzIGluc2lkZSB0aGUgZmlyc3QgKGRlZmF1bHQpIGNvbW1lbnQuIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9iai5hY3Rpb25UeXBlID09PSAnZGVmYXVsdEluZnJhJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcGVuZWRpc3N1ZSBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHJvZmlsZS1sYWJlbCBmdy1zZW1pYm9sZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYW0tZG90XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYW0tbmFtZVwiPnt7c2VsZWN0ZWRUaWNrZXQ/LmNhbWVyYU5hbWUgPyBzZWxlY3RlZFRpY2tldD8uY2FtZXJhTmFtZSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NhbWVyYSd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FtLXpvbmUtY2hpcFwiICpuZ0lmPVwic2VsZWN0ZWRUaWNrZXQ/LnpvbmVcIj57e3NlbGVjdGVkVGlja2V0Py56b25lfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYW0taXNzdWUtcGlsbFwiPjxzcGFuIGNsYXNzPVwiY2FtLWlzc3VlLWRvdFwiPjwvc3Bhbj57e3NlbGVjdGVkVGlja2V0Py5pc3N1ZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBTkdMRTogZXhwZWN0ZWQvYWN0dWFsIGltYWdlcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY2hhbmdlVHlwZSA9PT0gJ2FuZ2xlJ1wiIGNsYXNzPVwibWFpbmNhcmQtY29udGVudCB3LTEwMCBtdC0yIHB4LTQgcHktMiBwYi00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIHB5LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFpbmNhcmQtbGFiZWwgZnctc2VtaWJvbGRcIj5Db21wYXJlIHRoZSBleHBlY3RlZCBhbmQgdGhlIGN1cnJlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmEgYW5nbGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFuZ2xlLWV5ZS1idG4gY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cInNlbGVjdGVkVGlja2V0Py5hbmdsZUNoYW5nZUltYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlZpZXcgYW5nbGUgY2hhbmdlIGltYWdlXCIgKGNsaWNrKT1cIm9wZW5BbmdsZUltYWdlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xIDEyczQtOCAxMS04IDExIDggMTEgOC00IDgtMTEgOC0xMS04LTExLThaXCIgc3Ryb2tlPVwiIzQ3NTQ2N1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCIzXCIgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYW1lcmEgZnctYm9sZCBtdC0yXCI+RXhwZWN0ZWQgQ2FtZXJhIEFuZ2xlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZFRpY2tldD8uZXhwZWN0ZWRJbWFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm91bmRlZC0zIG92ZXJmbG93LWhpZGRlbiBtdC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJ3LTEwMFwiIFtzcmNdPVwiY2RuVXJsKHNlbGVjdGVkVGlja2V0LmV4cGVjdGVkSW1hZ2UpXCIgYWx0PVwiZXhwZWN0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXNlbGVjdGVkVGlja2V0Py5leHBlY3RlZEltYWdlXCIgY2xhc3M9XCJweC0yIHJvdW5kZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltZyBtdC00IHB4LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBkLWZsZXggZmxleC1jb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLXRvcDogMjBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBydnR4dCBtdC01IHRleHRjbHJcIj5QcmV2aWV3IG5vdCBhdmFpbGFibGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWZyZXNodHh0IG10LTIgdGV4dGNsclwiPlRoZSBleHBlY3RlZCBhbmdsZSBpbWFnZSBpcyBub3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIGF0IHRoZSBtb21lbnQuPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhbWVyYSBmdy1ib2xkIG10LTJcIj5BY3R1YWwgQ2FtZXJhIEFuZ2xlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZFRpY2tldD8uYWN0dWFsSW1hZ2VcIiBjbGFzcz1cInJvdW5kZWQtMyBvdmVyZmxvdy1oaWRkZW4gbXQtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwidy0xMDBcIiBbc3JjXT1cImNkblVybChzZWxlY3RlZFRpY2tldC5hY3R1YWxJbWFnZSlcIiBhbHQ9XCJhY3R1YWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXNlbGVjdGVkVGlja2V0Py5hY3R1YWxJbWFnZVwiIGNsYXNzPVwicHgtMiByb3VuZGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWcgbXQtNCBweC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZC1mbGV4IGZsZXgtY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi10b3A6IDIwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcnZ0eHQgbXQtNSB0ZXh0Y2xyXCI+UHJldmlldyBub3QgYXZhaWxhYmxlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVmcmVzaHR4dCBtdC0yIHRleHRjbHJcIj5UaGUgYWN0dWFsIGFuZ2xlIGltYWdlIGlzIG5vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgYXQgdGhlIG1vbWVudC48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJFU09MVVRJT04gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNoYW5nZVR5cGUgPT09ICdyZXNvbHV0aW9uJ1wiIGNsYXNzPVwibWFpbmNhcmQtY29udGVudCB3LTEwMCBtdC0yIHB4LTQgcHktMiBwYi00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluY2FyZC1sYWJlbCBmdy1zZW1pYm9sZCBweS0yXCI+UmVzb2x1dGlvbiBjaGFuZ2UgZGV0ZWN0ZWQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1haW5jYXJkLWNvbnRlbnQgcHgtNCBweS00IG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGRhdGUtbGFiZWxcIj5FeHBlY3RlZCByZXNvbHV0aW9uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBkYXRlLXZhbHVlIG10LTJcIj57e3NlbGVjdGVkVGlja2V0Py5leHBlY3RlZFJlc29sdXRpb24gPyBzZWxlY3RlZFRpY2tldD8uZXhwZWN0ZWRSZXNvbHV0aW9uIDogJy0tJ319PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluY2FyZC1jb250ZW50IHB4LTQgcHktNCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXBkYXRlLWxhYmVsXCI+QWN0dWFsIHJlc29sdXRpb248L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGRhdGUtdmFsdWUgbXQtMiB0ZXh0LWRhbmdlclwiPnt7c2VsZWN0ZWRUaWNrZXQ/LmFjdHVhbFJlc29sdXRpb24gPyBzZWxlY3RlZFRpY2tldD8uYWN0dWFsUmVzb2x1dGlvbiA6ICctLSd9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBJUCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY2hhbmdlVHlwZSA9PT0gJ2lwJ1wiIGNsYXNzPVwibWFpbmNhcmQtY29udGVudCB3LTEwMCBtdC0yIHB4LTQgcHktMiBwYi00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluY2FyZC1sYWJlbCBmdy1zZW1pYm9sZCBweS0yXCI+SVAgY2hhbmdlIGRldGVjdGVkPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluY2FyZC1jb250ZW50IHB4LTQgcHktNCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXBkYXRlLWxhYmVsXCI+UmVnaXN0ZXJlZCBJUDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwZGF0ZS12YWx1ZSBtdC0yXCI+e3tzZWxlY3RlZFRpY2tldD8ucmVnaXN0ZXJlZElwID8gc2VsZWN0ZWRUaWNrZXQ/LnJlZ2lzdGVyZWRJcCA6ICctLSd9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpbWluZ3RleHRcIj5MYXN0IGNvbm5lY3RlZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1haW5jYXJkLWNvbnRlbnQgcHgtNCBweS00IG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGRhdGUtbGFiZWxcIj5DdXJyZW50IElQPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidXBkYXRlLXZhbHVlIG10LTIgdGV4dC1kYW5nZXJcIj57e3NlbGVjdGVkVGlja2V0Py5jdXJyZW50SXAgPyBzZWxlY3RlZFRpY2tldD8uY3VycmVudElwIDogJy0tJ319PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGltaW5ndGV4dFwiPkZlZWQgZGlzY29ubmVjdGVkPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvYmouYWN0aW9uVHlwZSAhPT0gJ2RlZmF1bHRJbmZyYScgJiYgb2JqPy5kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0dXBkYXRlcyBmdy1ib2xkLTQwMCBtdC0zXCI+e3tvYmo/LmRlc2NyaXB0aW9ufX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvYmo/LmNvbW1lbnRcIiBjbGFzcz1cInRpbWluZ3RleHQgcGUtMyBwdC0xIGZ3LWJvbGQtNDAwIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29iaj8uY29tbWVudH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWNrbm93bGVkZ2Ug4oCUIGNsaWVudC1vbmx5LCBhbmQgaGlkZGVuIG9uY2UgYWNrbm93bGVkZ2VkLiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8udXNlclR5cGUgPT09ICdjbGllbnQnICYmIHNlbGVjdGVkVGlja2V0Py5zdGF0dXMgIT09ICdjbG9zZWQnICYmIHNlbGVjdGVkVGlja2V0Py5pc3N1ZVN0YXR1cyAhPT0gJ2lkZW50aWZpZWQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1haW5jYXJkLWNvbnRlbnQgYWNrLXBhbmVsIHctMTAwIG10LTQgcHgtNCBweS00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1haW5jYXJkLWxhYmVsIGZ3LXNlbWlib2xkIHB5LTJcIj5TZWxlY3QgdG8gYWNrbm93bGVkZ2UgdGhlIGNoYW5nZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY2stb3B0aW9ucyBkLWZsZXggZ2FwLTMgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNrLW9wdGlvbiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgW2NsYXNzLnNlbGVjdGVkXT1cImFja1JlYXNvbiA9PT0gJ3N0b3JlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWNrUmVhc29uID0gJ3N0b3JlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY2stcmFkaW9cIiBbY2xhc3MuY2hlY2tlZF09XCJhY2tSZWFzb24gPT09ICdzdG9yZSdcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFjay1sYWJlbFwiPkNoYW5nZWQgaW50ZW50aW9uYWxseSBmcm9tIHN0b3JlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjay1vcHRpb24gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiIFtjbGFzcy5zZWxlY3RlZF09XCJhY2tSZWFzb24gPT09ICdvcGVyYXRpb25hbCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFja1JlYXNvbiA9ICdvcGVyYXRpb25hbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWNrLXJhZGlvXCIgW2NsYXNzLmNoZWNrZWRdPVwiYWNrUmVhc29uID09PSAnb3BlcmF0aW9uYWwnXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY2stbGFiZWxcIj5DaGFuZ2VkIGZvciBvcGVyYXRpb25hbCBwdXJwb3NlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUmV2ZWFsZWQgb25jZSBhIHJlYXNvbiBpcyBjaG9zZW4sIG1hdGNoaW5nIHRoZSBkZXNpZ246IHRoZSBmb3JtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5IGJlY29tZXMgcmVsZXZhbnQgYWZ0ZXIgYW4gb3B0aW9uIGlzIHNlbGVjdGVkLiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWNrLWZvcm0gbXQtM1wiICpuZ0lmPVwiYWNrUmVhc29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhY2stZmllbGQtbGFiZWwgbWItMlwiPkNvbW1lbnQ8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sIGFjay10ZXh0YXJlYVwiIHJvd3M9XCIzXCIgWyhuZ01vZGVsKV09XCJhY2tDb21tZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImUuZy4gQW5nbGUgbW92ZWQgZm9yIGEgcHJvbW8gZGlzcGxheTsgd2lsbCByZXNldCBhZnRlciB0aGUgZXZlbnQuXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNoYW5nZVR5cGUgPT09ICdhbmdsZSdcIiBjbGFzcz1cImZvcm0tZ3JvdXAgbXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInJldmVydERheXNcIiBjbGFzcz1cImFjay1maWVsZC1sYWJlbCBtYi0yXCI+RGF5cyB0byBjaGFuZ2UgdGhlIGFuZ2xlIGJhY2sgKjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF5LXN0ZXBwZXIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZGF5LWJ0blwiIFtkaXNhYmxlZF09XCJkYXlzVG9SZXZlcnQgPT09IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVjcmVtZW50RGF5cygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMSAyMFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTQuNjY2IDEwaDExLjY2N1wiIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaW5wdXRtb2RlPVwibnVtZXJpY1wiIGNsYXNzPVwiZGF5LWlucHV0XCIgaWQ9XCJyZXZlcnREYXlzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZGF5c1RvUmV2ZXJ0XCIgKG5nTW9kZWxDaGFuZ2UpPVwib25EYXlzSW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRGF5c0JsdXIoKVwiIChrZXlwcmVzcyk9XCJhbGxvd0RpZ2l0c09ubHkoJGV2ZW50KVwiIHBsYWNlaG9sZGVyPVwiMFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJkYXktYnRuXCIgKGNsaWNrKT1cImluY3JlbWVudERheXMoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjEgMjBcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMC41IDQuMTY3djExLjY2Nk00LjY2NiAxMGgxMS42NjdcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTMgbXQtNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBhY2stY2FuY2VsIGZsZXgtZmlsbFwiIChjbGljayk9XCJjYW5jZWxBY2tub3dsZWRnZSgpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCIhYWNrUmVhc29uIHx8IHN1Ym1pdHRpbmdcIiBjbGFzcz1cImJ0biBhY2stc3VibWl0IGZsZXgtZmlsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN1Ym1pdEFja25vd2xlZGdlKClcIj5TdWJtaXQ8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBSZXN0b3JlIGNoZWNrIOKAlCBUYW5nby1vbmx5LCBvbmNlIHRoZSBzdG9yZSBoYXMgYWNrbm93bGVkZ2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgcHJvbWlzZWQgcmVzdG9yZSBkYXRlIGhhcyBwYXNzZWQuIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIihncy51c2VyQWNjZXNzIHwgYXN5bmMpPy51c2VyVHlwZSA9PT0gJ3RhbmdvJyAmJiBzZWxlY3RlZFRpY2tldD8uaXNzdWVTdGF0dXMgPT09ICdpZGVudGlmaWVkJyAmJiBzZWxlY3RlZFRpY2tldD8uc3RhdHVzICE9PSAnY2xvc2VkJyAmJiBpc1Jlc3RvcmVEdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IG1iLTUgbXMtNSBtdC01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBwZS0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudHJlIGp1c3RpZnktY29udGVudC1jZW50cmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgdmlld0JveD1cIjAgMCA0MCA0MFwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiByeD1cIjIwXCIgZmlsbD1cIiNFQUY4RkZcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zMC40OTMyIDI4LjMzNTFMMjkuNjg2NyAyNy41Mjg2TDIwLjk5NjUgMTguODM4NEwyMy41NzQ0IDE2LjI2MDVMMjQuMTkyMSAxNS42NDE2QzI0LjI1MSAxNS41ODE4IDI0LjI4NDMgMTUuNTAxNCAyNC4yODQ3IDE1LjQxNzRDMjQuMjg0NSAxNS4zNzU5IDI0LjI3NjEgMTUuMzM0OSAyNC4yNiAxNS4yOTY2QzI0LjI0MzkgMTUuMjU4NCAyNC4yMjA0IDE1LjIyMzcgMjQuMTkwOSAxNS4xOTQ1TDIzLjU3MiAxNC41NzU2TDIwLjgzODEgMTEuODM2OEwyMC4yMTkyIDExLjIxOEMyMC4xOSAxMS4xODgyIDIwLjE1NTEgMTEuMTY0NSAyMC4xMTY2IDExLjE0ODRDMjAuMDc4MSAxMS4xMzIzIDIwLjAzNjggMTEuMTI0IDE5Ljk5NSAxMS4xMjRDMTkuOTUzMyAxMS4xMjQgMTkuOTEyIDExLjEzMjMgMTkuODczNSAxMS4xNDg0QzE5LjgzNSAxMS4xNjQ1IDE5LjgwMDEgMTEuMTg4MiAxOS43NzA5IDExLjIxOEwxOS4xNTIgMTEuODM4MUwxNS44MDE2IDE1LjE4ODRDMTUuNzcxOSAxNS4yMTc2IDE1Ljc0ODMgMTUuMjUyMyAxNS43MzIyIDE1LjI5MDdDMTUuNzE2MSAxNS4zMjkxIDE1LjcwNzcgMTUuMzcwMyAxNS43MDc3IDE1LjQxMkMxNS43MDc3IDE1LjQ1MzYgMTUuNzE2MSAxNS40OTQ4IDE1LjczMjIgMTUuNTMzMkMxNS43NDgzIDE1LjU3MTYgMTUuNzcxOSAxNS42MDY0IDE1LjgwMTYgMTUuNjM1NUwxOS4wMDIxIDE4LjgzNzJMMTAuMzEwNyAyNy41Mjg2TDkuNTA3ODcgMjguMzM1MUM5LjQ0ODM0IDI4LjM5NDEgOS40MTQ2MSAyOC40NzQzIDkuNDE0MDYgMjguNTU4MUM5LjQxNDQxIDI4LjYzOTEgOS40NDUzIDI4LjcxNyA5LjUwMDU2IDI4Ljc3NjJDOS41MzAwNyAyOC44MDc3IDkuNTY1NzMgMjguODMyOCA5LjYwNTMzIDI4Ljg1QzkuNjQ0OTQgMjguODY3MiA5LjY4NzY1IDI4Ljg3NjEgOS43MzA4MiAyOC44NzYxSDE3LjU0ODdDMTcuNjMyNiAyOC44NzU3IDE3LjcxMyAyOC44NDIzIDE3Ljc3MjMgMjguNzgyOUMxNy44MzE2IDI4LjcyMzYgMTcuODY1MSAyOC42NDMyIDE3Ljg2NTQgMjguNTU5M1YyNy43ODJDMTcuODY1NCAyNy42OTc5IDE3LjgzMjEgMjcuNjE3MiAxNy43NzI3IDI3LjU1NzZDMTcuNzEzNCAyNy40OTggMTcuNjMyOCAyNy40NjQ0IDE3LjU0ODcgMjcuNDY0SDEyLjM3MDlMMTkuOTk4NyAxOS44MzYyTDI3LjYyNjUgMjcuNDY0SDIyLjQwMzZDMjIuMzE5NSAyNy40NjQ0IDIyLjIzODkgMjcuNDk4IDIyLjE3OTYgMjcuNTU3NkMyMi4xMjAyIDI3LjYxNzIgMjIuMDg2OSAyNy42OTc5IDIyLjA4NjkgMjcuNzgyVjI4LjU1OTNDMjIuMDg2NyAyOC42MDEgMjIuMDk0OSAyOC42NDI0IDIyLjExMSAyOC42ODA5QzIyLjEyNzIgMjguNzE5NCAyMi4xNTA4IDI4Ljc1NDMgMjIuMTgwNyAyOC43ODM1QzIyLjIzOTkgMjguODQyNiAyMi4zMiAyOC44NzU4IDIyLjQwMzYgMjguODc2MUgzMC4yNjlDMzAuMzEyNCAyOC44NzYyIDMwLjM1NTMgMjguODY3NCAzMC4zOTUyIDI4Ljg1MDJDMzAuNDM1IDI4LjgzMyAzMC40NzA4IDI4LjgwNzggMzAuNTAwNSAyOC43NzYyQzMwLjU1NzQgMjguNzE2NCAzMC41ODg1IDI4LjYzNjcgMzAuNTg3MiAyOC41NTQyQzMwLjU4NTggMjguNDcxNiAzMC41NTIgMjguMzkzIDMwLjQ5MzIgMjguMzM1MVpNMTkuOTkzOCAxMi45OTA2TDIyLjQyMTkgMTUuNDE4N0wxOS45OTk5IDE3Ljg0MDdMMTcuNTcxOCAxNS40MTI2TDE5Ljk5MzggMTIuOTkwNlpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMwMEEzRkZcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtMCBoLTEwMCBtdC0zIGJvcmRlciBib3JkZXItMSBib3JkZXItZ3JheVwiIHN0eWxlPVwid2lkdGg6MHB4XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB0LTAgdy0xMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWFkaW5ndGV4dCB0ZXh0LWNhcGl0YWxpemVcIj5UYW5nbzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGltaW5ndGV4dCBweC0zIHB0LTFcIj5Ob3c8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dHVwZGF0ZXMgZnctYm9sZC00MDAgbXQtM1wiPldhaXRpbmcgb24gdGhlIHN0b3JlIHRvIHJlc3RvcmUgdGhlIGFuZ2xlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpc3N1ZWNhcmQgdy0xMDAgbXQtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYWluY2FyZC1sYWJlbCBmdy1ib2xkXCI+SGFzIHRoZSBjYW1lcmEgYW5nbGUgYmVlbiByZXN0b3JlZD88L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMyBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHctNDVcIiBbZGlzYWJsZWRdPVwic3VibWl0dGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZXBseVJlc3RvcmVkKCdZZXMnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIHctNDVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJyZXN0b3JlUmVwbHkgPT09ICdObycgPyAnYmctbGlnaHQtcHJpbWFyeSB0ZXh0LXByaW1hcnknOididG4tb3V0bGluZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVzdG9yZVJlcGx5ID0gJ05vJ1wiPiBObyA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTVcIiAqbmdJZj1cInJlc3RvcmVSZXBseSA9PT0gJ05vJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIG10LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Y29tbWVudHM8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cInctMTAwIG10LTNcIiBbKG5nTW9kZWwpXT1cInJlc3RvcmVDb21tZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgeW91ciBjb21tZW50cy4uLlwiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB3LTEwMCBtdC0zXCIgW2Rpc2FibGVkXT1cInN1Ym1pdHRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVwbHlSZXN0b3JlZCgnTm8nKVwiPlN1Ym1pdDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG48IS0tIEFuZ2xlIGNoYW5nZSBpbWFnZSBwb3B1cCAtLT5cbjxuZy10ZW1wbGF0ZSAjYW5nbGVJbWFnZVBvcHVwIGxldC1tb2RhbD5cbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIGJvcmRlci0wIHBiLTBcIj5cbiAgICAgICAgPGg1IGNsYXNzPVwibWFpbmNhcmQtbGFiZWwgZnctYm9sZCBtYi0wXCI+QW5nbGUgQ2hhbmdlPC9oNT5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+PC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgcHQtMlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC0zIG92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgPGltZyBjbGFzcz1cInctMTAwXCIgW3NyY109XCJjZG5Vcmwoc2VsZWN0ZWRUaWNrZXQ/LmFuZ2xlQ2hhbmdlSW1hZ2UpXCIgYWx0PVwiYW5nbGUgY2hhbmdlXCI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|