verben-workflow-ui 0.5.74 → 0.5.76

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.
@@ -125,7 +125,7 @@ export class TaskHistoryComponent {
125
125
  FromStage: '',
126
126
  ToStage: '',
127
127
  Code: '',
128
- TenantId: 'PDLTC6',
128
+ TenantId: '',
129
129
  };
130
130
  this.service.saveActionHistory([actionHistory]).then(() => {
131
131
  this.newComment = '';
@@ -218,4 +218,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
218
218
  type: Component,
219
219
  args: [{ selector: 'lib-task-history', template: "<div class=\"bg-[#F9FAFB]\">\n <header class=\"mx-8 rounded-lg shadow-lg flex justify-between items-center px-6 py-2 bg-[#D4A00773]\">\n <h4 class=\"font-semibold\">{{ taskCode() }}</h4>\n <div class=\"flex gap-4 items-center\">\n <verbena-button (click)=\"addComment()\" text=\"+ Add Comment\" styleType=\"ylw-outline\"\n class=\"ml-auto\"></verbena-button>\n <verben-svg (click)=\"goBack()\" class=\"cursor-pointer\" [width]=\"17\" [height]=\"17\" [icon]=\"'go-back'\"></verben-svg>\n </div>\n </header>\n <section class=\"grid grid-cols-12\">\n <div class=\"bg-[#fff] col-span-7 pl-16 pt-20 relative\">\n <div *ngIf=\"showCommentBox\" class=\"mb-6 mr-10\">\n <h4 class=\"font-bold text-lg mb-2\">Add Comment</h4>\n <!-- <verbena-textarea [(ngModel)]=\"newComment\" label=\"Comment\" class=\"w-full\"></verbena-textarea> -->\n <textarea [(ngModel)]=\"newComment\" label=\"Comment\" class=\"w-full border rounded-md p-2\"></textarea>\n <div class=\"mt-4\">\n <file-upload (selectedFilesChange)=\"onFileSelect($event)\" [multiple]=\"true\" label=\"Attach Files\">\n </file-upload>\n <div *ngIf=\"selectedFiles.length > 0\" class=\"flex flex-wrap gap-3 mt-3\">\n <div *ngFor=\"let file of selectedFiles\">\n <ng-container [ngSwitch]=\"file.Extension\">\n <img *ngSwitchCase=\"'jpg'\" [src]=\"file.Data\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\" />\n <img *ngSwitchCase=\"'png'\" [src]=\"file.Data\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\" />\n <video *ngSwitchCase=\"'mp4'\" [src]=\"file.Data\" class=\"w-[150px] rounded-md shadow\" controls></video>\n <audio *ngSwitchCase=\"'mp3'\" [src]=\"file.Data\" controls class=\"w-[150px]\"></audio>\n </ng-container>\n </div>\n </div>\n </div>\n <div class=\"flex justify-end gap-2 mt-2\">\n <verbena-button (click)=\"addComment()\" text=\"Cancel\" styleType=\"ylw-outline\"></verbena-button>\n <verbena-button (click)=\"saveComment()\" text=\"Save\" bgColor=\"#FFE681\" textColor=\"#404040\" borderRadius=\"10px\"\n pd=\"10px 20px\" width=\"114px\" height=\"39px\"></verbena-button>\n </div>\n </div>\n <span class=\"absolute block h-[90%] h-ninety border border-secondary-200 left-[150px]\"></span>\n <div *ngFor=\"let timeline of history; let i = index\">\n <div>\n <div class=\"flex mb-7\">\n <h5 class=\"w-[100px] cursor-pointer\" (click)=\"setActive(i)\">\n {{ timeline?.CreatedAt | date }}\n </h5>\n <div class=\"ml-24 cursor-pointer min-w-[250px] p-6 rounded-md border-l-2\" [ngClass]=\"{\n 'bg-[#FEFAF1] border-[#FFE681]': active === i,\n 'bg-transparent border-transparent hover:bg-[#F9FAFB]': active !== i\n }\" (click)=\"setActive(i)\">\n <!-- ActionName as primary heading, fallback to ActionType -->\n <h4 class=\"font-bold text-xl text-[#101828] mb-2\">\n {{ timeline.ActionName || timeline.ActionType }}\n </h4>\n\n <!-- Actor information with tooltip -->\n <div class=\"mb-3\">\n <verben-tooltip [top]=\"'0px'\" [left]=\"'0px'\" [textColor]=\"'#000'\" [backgroundColor]=\"'#FFF'\"\n [tooltipContent]=\"actorTooltipTemplate\">\n <p class=\"text-sm text-[#667085] cursor-help inline-flex items-center gap-2\">\n <verben-svg [width]=\"14\" [height]=\"14\" [icon]=\"'user'\" stroke=\"#667085\"></verben-svg>\n <span class=\"font-medium text-[#344054]\">{{ timeline.Actor.Name }}</span>\n </p>\n </verben-tooltip>\n\n <ng-template #actorTooltipTemplate>\n <div class=\"bg-white border border-[#E4E7EC] rounded-lg p-4 shadow-lg w-[280px]\">\n <div class=\"flex gap-3 items-start\">\n <div\n class=\"w-[40px] h-[40px] rounded-full bg-gradient-to-r from-[#D9AEAE] via-[#E3C79F] to-[#FFE681] flex-shrink-0\">\n </div>\n <div class=\"flex-1 min-w-0\">\n <p class=\"font-bold text-sm text-[#101828] mb-1\">\n {{ timeline.Actor.Name }}\n </p>\n <p class=\"text-xs text-[#667085] break-words flex items-start gap-1\">\n <verben-svg [width]=\"12\" [height]=\"12\" [icon]=\"'mail'\" stroke=\"#667085\"></verben-svg>\n <span>{{ timeline.Actor.Identifier }}</span>\n </p>\n <p *ngIf=\"getTagsFromActor(timeline.Actor)\" class=\"text-xs text-[#667085] mt-2\">\n <span class=\"font-medium\">Tags:</span> {{ getTagsFromActor(timeline.Actor) }}\n </p>\n </div>\n </div>\n </div>\n </ng-template>\n </div>\n\n <!-- Action Type (if different from ActionName) -->\n <p *ngIf=\"timeline.ActionName\" class=\"text-sm text-[#667085] mb-2\">\n <span class=\"font-medium\">Operation:</span> {{ timeline.ActionType }}\n </p>\n\n <!-- Stage information for transfer actions -->\n @if (showFromAndTo(timeline.ActionType)) {\n <div class=\"bg-[#F9FAFB] rounded-md p-3 mt-2 space-y-1.5\">\n <p class=\"text-sm flex items-center gap-2\">\n <span class=\"text-[#667085] font-medium\">From:</span>\n <span class=\"text-[#6172F3] font-mono text-xs\">{{ timeline.FromStage }}</span>\n </p>\n <p class=\"text-sm flex items-center gap-2\">\n <span class=\"text-[#667085] font-medium\">To:</span>\n <span class=\"text-[#6172F3] font-mono text-xs\">{{ timeline.ToStage }}</span>\n </p>\n </div>\n }\n\n <!-- View comments button -->\n <button *ngIf=\"timeline.Description\"\n class=\"flex gap-2 items-center w-fit text-[#667085] text-sm border px-3 py-2 rounded-lg bg-[#FCFCFD] mt-3 border-[#E4E7EC] hover:bg-[#F9FAFB] hover:border-[#D0D5DD] transition-colors\">\n <verben-svg [width]=\"15\" [height]=\"15\" [icon]=\"'chat'\"></verben-svg>\n View comments\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-span-5\">\n <div class=\"h-[50px] bg-[#fff]\"></div>\n <div *ngIf=\"active >= 0\" class=\"w-[480px] pl-16 pt-10\">\n <h1 class=\"font-bold text-lg py-2\">Comments</h1>\n <p class=\"text-xs text-[#667085] text-right py-2\">\n {{ history[active].CreatedAt | date }}\n </p>\n <div class=\"bg-[#fff] text-[#101828] leading-relaxed p-8 shadow-md rounded-md\">\n {{ history[active].Description }}\n\n <div *ngIf=\"history[active]?.Files?.length\" class=\"mt-4 border-t pt-4\">\n <h5 class=\"font-bold text-sm mb-2\">Attachments</h5>\n <div class=\"flex flex-col gap-2\">\n <div *ngFor=\"let file of history[active]?.Files\"\n class=\"file-container p-2 flex items-center justify-between gap-3 border rounded-md bg-gray-50\">\n <div class=\"text-sm overflow-x-auto font-semibold\">\n {{ getFileName(file) }}\n </div>\n <span (click)=\"openFile(file)\" class=\"cursor-pointer\">\n <verben-svg [icon]=\"'download-icon'\" [width]=\"20\" [height]=\"20\"></verben-svg>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n</div>\n", styles: [".bg-\\[#F9FAFB\\]{background-color:#f9fafb}.bg-\\[#D4A00773\\]{background-color:#d4a00773}.bg-\\[#fff\\]{background-color:#fff}.bg-\\[#d3d3d32a\\]{background-color:#d3d3d32a}.bg-\\[#FCFCFD\\]{background-color:#fcfcfd}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-\\[#D9AEAE\\]{--tw-gradient-from: #d9aeae;--tw-gradient-to: rgb(217 174 174 / 0);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-\\[#E3C79F\\]{--tw-gradient-to: rgb(227 199 159 / 0);--tw-gradient-stops: var(--tw-gradient-from), #e3c79f, var(--tw-gradient-to)}.to-\\[#FFE681\\]{--tw-gradient-to: #ffe681}.mx-8{margin-left:2rem;margin-right:2rem}.rounded-lg{border-radius:.5rem}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.flex{display:flex}.justify-between{justify-content:space-between}.items-center{align-items:center}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.font-semibold{font-weight:600}.cursor-pointer{cursor:pointer}.grid{display:grid}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.col-span-7{grid-column:span 7 / span 7}.col-span-5{grid-column:span 5 / span 5}.pl-16{padding-left:4rem}.pt-20{padding-top:5rem}.pt-10{padding-top:2.5rem}.relative{position:relative}.absolute{position:absolute}.block{display:block}.h-ninety{height:90%}.border{border-width:1px}.border-secondary-200{border-color:#d7dbe6}.left-\\[150px\\]{left:150px}.mb-7{margin-bottom:1.75rem}.w-\\[100px\\]{width:100px}.ml-24{margin-left:6rem}.min-w-\\[250px\\]{min-width:250px}.p-6{padding:1.5rem}.rounded-md{border-radius:.375rem}.after\\:absolute:after{content:\"\";position:absolute}.after\\:-left-\\[90px\\]:after{left:-90px}.after\\:top-0:after{top:0}.after\\:h-full:after{height:100%}.after\\:border-l-2:after{border-left-width:2px}.border-none{border-style:none}.font-bold{font-weight:700}.text-lg{font-size:1.125rem;line-height:1.75rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-\\[\\#667085\\]{color:#667085}.gap-2{gap:.5rem}.w-fit{width:fit-content}.px-3{padding-left:.75rem;padding-right:.75rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.mt-2{margin-top:.5rem}.border-\\[#E4E7EC\\]{border-color:#e4e7ec}.ml-\\[3px\\]{margin-left:3px}.underline{text-decoration-line:underline}.text-\\[\\#6172F3\\]{color:#6172f3}.mt-\\[4px\\]{margin-top:4px}.z-\\[10000\\]{z-index:10000}.border-primary{--tw-border-opacity: 1;border-color:rgb(212 160 7 / var(--tw-border-opacity, 1))}.w-\\[326px\\]{width:326px}.gap-4{gap:1rem}.w-\\[50px\\]{width:50px}.rounded-full{border-radius:9999px}.gap-3{gap:.75rem}.mt-4{margin-top:1rem}.h-\\[50px\\]{height:50px}.w-\\[480px\\]{width:480px}.text-xs{font-size:.75rem;line-height:1rem}.text-right{text-align:right}.text-\\[\\#101828\\]{color:#101828}.leading-relaxed{line-height:1.625}.p-8{padding:2rem}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}\n"] }]
220
220
  }], ctorParameters: () => [{ type: i1.Location }, { type: i2.TaskHistoryService }, { type: i3.EnvironmentService }, { type: i3.UtilService }] });
221
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1oaXN0b3J5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvdGFzay1oaXN0b3J5L3Rhc2staGlzdG9yeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3Rhc2staGlzdG9yeS90YXNrLWhpc3RvcnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFpQixVQUFVLEVBQTJCLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7QUFTbkksTUFBTSxPQUFPLG9CQUFvQjtJQVVyQjtJQUNBO0lBQ0E7SUFDQTtJQVpWLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7SUFDcEMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJQUM5QixNQUFNLEdBQVcsQ0FBQyxDQUFDO0lBQ25CLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFDaEMsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUN4QixhQUFhLEdBQWUsRUFBRSxDQUFDO0lBQy9CLDJCQUEyQjtJQUUzQixZQUNVLFNBQW1CLEVBQ25CLE9BQTJCLEVBQzNCLE1BQTBCLEVBQzFCLFdBQXdCO1FBSHhCLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbkIsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFDM0IsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFDOUIsQ0FBQztJQUNMLHFDQUFxQztJQUNyQyxNQUFNO0lBQ04sdUJBQXVCO0lBQ3ZCLHdDQUF3QztJQUN4QyxtQkFBbUI7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VSxDQUFDLE1BQU0sQ0FBQztZQUN2QixLQUFLLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDekIsS0FBSyxVQUFVLENBQUMsV0FBVyxDQUFDO1lBQzVCLEtBQUssVUFBVSxDQUFDLFlBQVk7Z0JBQzFCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsS0FBSyxVQUFVLENBQUMsT0FBTyxDQUFDO1lBQ3hCLEtBQUssVUFBVSxDQUFDLFdBQVcsQ0FBQztZQUM1QixLQUFLLFVBQVUsQ0FBQyxZQUFZO2dCQUMxQixPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFlO1FBQ3pCLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDeEIsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsUUFBUSxDQUFDLE9BQWU7UUFDdEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixDQUN2QyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLGFBQWEsR0FBRyxPQUFPLEVBQUUsQ0FDckQsQ0FBQztJQUNKLENBQUM7d0dBL05VLG9CQUFvQjs0RkFBcEIsb0JBQW9CLG9NQ1hqQyx5OFBBaUpBOzs0RkR0SWEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgaW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9uSGlzdG9yeSwgQWN0aW9uVHlwZSwgQWN0b3IsIEZpbGUgYXMgRmlsZURhdGEsIE9iamVjdFN0YXRlLCBPcGVyYXRpb25UeXBlIH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IEVudmlyb25tZW50U2VydmljZSwgVXRpbFNlcnZpY2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBUYXNrSGlzdG9yeVNlcnZpY2UgfSBmcm9tICcuL3Rhc2staGlzdG9yeS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXRhc2staGlzdG9yeScsXG4gIHRlbXBsYXRlVXJsOiAnLi90YXNrLWhpc3RvcnkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vdGFzay1oaXN0b3J5LmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBUYXNrSGlzdG9yeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHRhc2tDb2RlID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICBvcGVyYXRpb25UeXBlID0gT3BlcmF0aW9uVHlwZTtcbiAgYWN0aXZlOiBudW1iZXIgPSAwO1xuICBzaG93Q29tbWVudEJveDogYm9vbGVhbiA9IGZhbHNlO1xuICBuZXdDb21tZW50OiBzdHJpbmcgPSAnJztcbiAgc2VsZWN0ZWRGaWxlczogRmlsZURhdGFbXSA9IFtdO1xuICAvLyBBY3Rpb25UeXBlID0gQWN0aW9uVHlwZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9sb2NhdGlvbjogTG9jYXRpb24sXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBUYXNrSGlzdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbnZTdmM6IEVudmlyb25tZW50U2VydmljZSxcbiAgICBwcml2YXRlIHV0aWxTZXJ2aWNlOiBVdGlsU2VydmljZVxuICApIHsgfVxuICAvLyBzaW5nbGVIaXN0b3J5OiBUaW1lbGluZUV2ZW50W10gPSBbXG4gIC8vICAge1xuICAvLyAgICAgRGF0ZTogJzQ6MDUgUE0nLFxuICAvLyAgICAgT3BlcmF0aW9uOiBPcGVyYXRpb25UeXBlLkNvbW1lbnQsXG4gIC8vICAgICBEZXRhaWxzOiB7fSxcbiAgLy8gICAgIEFjdGlvbnM6IFtcbiAgLy8gICAgICAgeyBMYWJlbDogJ1ZpZXcgQ29tbWVudHMnLCBUeXBlOiAnYnV0dG9uJywgQWN0aW9uOiAndmlld0NvbW1lbnRzJyB9LFxuICAvLyAgICAgXSxcbiAgLy8gICB9LFxuICAvLyAgIHtcbiAgLy8gICAgIERhdGU6ICdZZXN0ZXJkYXknLFxuICAvLyAgICAgT3BlcmF0aW9uOiBPcGVyYXRpb25UeXBlLkNvbW1lbnQsXG4gIC8vICAgICBEZXRhaWxzOiB7fSxcbiAgLy8gICAgIEFjdGlvbnM6IFtcbiAgLy8gICAgICAgeyBMYWJlbDogJ1ZpZXcgQ29tbWVudHMnLCBUeXBlOiAnYnV0dG9uJywgQWN0aW9uOiAndmlld0NvbW1lbnRzJyB9LFxuICAvLyAgICAgXSxcbiAgLy8gICB9LFxuICAvLyAgIHtcbiAgLy8gICAgIERhdGU6ICdNYXIgMicsXG4gIC8vICAgICBPcGVyYXRpb246IE9wZXJhdGlvblR5cGUuRm9ybXMsXG4gIC8vICAgICBEZXRhaWxzOiB7XG4gIC8vICAgICAgIEZpbGxlZEJ5OiAnQW5vbnltb3VzJyxcbiAgLy8gICAgIH0sXG4gIC8vICAgICBBY3Rpb25zOiBbeyBMYWJlbDogJ1ZpZXcgRm9ybScsIFR5cGU6ICdidXR0b24nLCBBY3Rpb246ICd2aWV3Rm9ybScgfV0sXG4gIC8vICAgfSxcbiAgLy8gICB7XG4gIC8vICAgICBEYXRlOiAnTm92IDQnLFxuICAvLyAgICAgT3BlcmF0aW9uOiBPcGVyYXRpb25UeXBlLkFzc2lnbm1lbnQsXG4gIC8vICAgICBEZXRhaWxzOiB7XG4gIC8vICAgICAgIEZyb206ICdKb2huIERvZScsXG4gIC8vICAgICAgIFRvOiAnSmFuZSBEb2UnLFxuICAvLyAgICAgfSxcbiAgLy8gICAgIEFjdGlvbnM6IFtdLFxuICAvLyAgIH0sXG4gIC8vICAge1xuICAvLyAgICAgRGF0ZTogJ05vdiA2JyxcbiAgLy8gICAgIE9wZXJhdGlvbjogT3BlcmF0aW9uVHlwZS5Db21tZW50LFxuICAvLyAgICAgRGV0YWlsczoge30sXG4gIC8vICAgICBBY3Rpb25zOiBbXG4gIC8vICAgICAgIHsgTGFiZWw6ICdWaWV3IENvbW1lbnRzJywgVHlwZTogJ2J1dHRvbicsIEFjdGlvbjogJ3ZpZXdDb21tZW50cycgfSxcbiAgLy8gICAgIF0sXG4gIC8vICAgfSxcbiAgLy8gXTtcblxuICBoaXN0b3J5OiBBY3Rpb25IaXN0b3J5W10gPSBbXTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0VGFza0hpc3RvcnkodGhpcy50YXNrQ29kZSgpKS50aGVuKChyZXMpID0+IHtcbiAgICAgIHRoaXMuaGlzdG9yeSA9IHJlcztcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuaGlzdG9yeSk7XG4gICAgfSk7XG4gIH1cblxuICBnb0JhY2soKSB7XG4gICAgdGhpcy5fbG9jYXRpb24uYmFjaygpO1xuICB9XG5cbiAgc2V0QWN0aXZlKGk6IG51bWJlcikge1xuICAgIHRoaXMuYWN0aXZlID0gaTtcbiAgfVxuXG4gIGdldFRhZ3NGcm9tQWN0b3IoYWN0b3I6IEFjdG9yKSB7XG4gICAgcmV0dXJuIGFjdG9yLlRhZ3MubWFwKCh0YWcpID0+IHRhZy5OYW1lKS5qb2luKCcsICcpO1xuICB9XG5cbiAgYWRkQ29tbWVudCgpIHtcbiAgICB0aGlzLnNob3dDb21tZW50Qm94ID0gIXRoaXMuc2hvd0NvbW1lbnRCb3g7XG4gIH1cblxuICBhc3luYyBzYXZlQ29tbWVudCgpIHtcbiAgICBjb25zb2xlLmxvZyh0aGlzLm5ld0NvbW1lbnQpO1xuICAgIGlmICghdGhpcy5uZXdDb21tZW50LnRyaW0oKSAmJiB0aGlzLnNlbGVjdGVkRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHVwbG9hZGVkRmlsZXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZXJ2aWNlLnVwbG9hZEZpbGVzKHRoaXMuc2VsZWN0ZWRGaWxlcyk7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICB1cGxvYWRlZEZpbGVzID0gcmVzO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdGaWxlIHVwbG9hZCBmYWlsZWQnLCBlcnJvcik7XG4gICAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFjdGlvbkhpc3RvcnkgPSB7XG4gICAgICBUYXNrQ29kZTogdGhpcy50YXNrQ29kZSgpID8/ICcnLFxuICAgICAgRGVzY3JpcHRpb246IHRoaXMubmV3Q29tbWVudCxcbiAgICAgIEFjdGlvblR5cGU6IEFjdGlvblR5cGUuQ29tbWVudCxcbiAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgRmlsZXM6IHVwbG9hZGVkRmlsZXMsXG4gICAgICAvLyBBY3Rvcjoge1xuICAgICAgLy8gICBJZDogdGhpcy5zZWxlY3RlZERldGFpbC5BY3RvcklkLFxuICAgICAgLy8gICBOYW1lOiB0aGlzLnNlbGVjdGVkRGV0YWlsLkFjdG9yTmFtZSxcbiAgICAgIC8vICAgVGFnczogdGhpcy5zZWxlY3RlZERldGFpbC5UYWdzLFxuICAgICAgLy8gfSxcbiAgICAgIFdvcmtmbG93OiAnJyxcbiAgICAgIEZyb21TdGFnZTogJycsXG4gICAgICBUb1N0YWdlOiAnJyxcbiAgICAgIENvZGU6ICcnLFxuICAgICAgVGVuYW50SWQ6ICdQRExUQzYnLFxuICAgIH0gYXMgQWN0aW9uSGlzdG9yeTtcblxuICAgIHRoaXMuc2VydmljZS5zYXZlQWN0aW9uSGlzdG9yeShbYWN0aW9uSGlzdG9yeV0pLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5uZXdDb21tZW50ID0gJyc7XG4gICAgICB0aGlzLnNlbGVjdGVkRmlsZXMgPSBbXTtcbiAgICAgIHRoaXMuc2hvd0NvbW1lbnRCb3ggPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VydmljZS5nZXRUYXNrSGlzdG9yeSh0aGlzLnRhc2tDb2RlKCkpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICB0aGlzLmhpc3RvcnkgPSByZXM7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRmlsZVNlbGVjdChkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBmaWxlczogYW55ID0gZGF0YTtcblxuICAgIGlmICghZmlsZXMgfHwgZmlsZXMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICBjb25zdCBmaWxlQXJyYXk6IEZpbGVEYXRhW10gPSBbXTtcbiAgICBjb25zdCByZWFkZXJzOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1tpXTtcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYmFzZTY0ID0gcmVhZGVyLnJlc3VsdCBhcyBzdHJpbmc7XG4gICAgICAgICAgZmlsZUFycmF5LnB1c2goe1xuICAgICAgICAgICAgRXh0ZW5zaW9uOiBmaWxlLm5hbWUuc3BsaXQoJy4nKS5wb3AoKSxcbiAgICAgICAgICAgIE5hbWU6IHRoaXMuZ2VuZXJhdGVSYW5kb21Db2RlKCksXG4gICAgICAgICAgICBEYXRhOiBiYXNlNjQsXG4gICAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHJlamVjdChlcnJvcik7XG4gICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgICAgfSk7XG5cbiAgICAgIHJlYWRlcnMucHVzaChwcm9taXNlKTtcbiAgICB9XG5cbiAgICBQcm9taXNlLmFsbChyZWFkZXJzKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdGaWxlcyByZWFkeSB0byB1cGxvYWQ6JywgZmlsZUFycmF5KTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlcyA9IGZpbGVBcnJheTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVSYW5kb21Db2RlKGxlbmd0aDogbnVtYmVyID0gMTApOiBzdHJpbmcge1xuICAgIGNvbnN0IGNoYXJzID1cbiAgICAgICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSc7XG4gICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdCArPSBjaGFycy5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcnMubGVuZ3RoKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHMgPSBmaWxlVXJsLnNwbGl0KCcuJyk7XG4gICAgcmV0dXJuIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBzZXRQcmV2aWV3KHZhbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXZhbCkgcmV0dXJuICcnO1xuICAgIGNvbnN0IGZpcnN0ID0gdmFsLnNwbGl0KCcsJylbMF0udHJpbSgpO1xuXG4gICAgaWYgKGZpcnN0LnN0YXJ0c1dpdGgoJ2h0dHAnKSB8fCBmaXJzdC5zdGFydHNXaXRoKCdkYXRhOicpKSB7XG4gICAgICByZXR1cm4gZmlyc3Q7XG4gICAgfVxuICAgIHJldHVybiBgJHt0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5GSUxFX1VSTH0vJHtmaXJzdH1gO1xuICB9XG5cbiAgc2hvd0Zyb21BbmRUbyhhY3Rpb25UeXBlOiBBY3Rpb25UeXBlKTogYm9vbGVhbiB7XG4gICAgc3dpdGNoIChhY3Rpb25UeXBlKSB7XG4gICAgICBjYXNlIEFjdGlvblR5cGUuUGFzc09uOlxuICAgICAgY2FzZSBBY3Rpb25UeXBlLlBhc3NCYWNrOlxuICAgICAgY2FzZSBBY3Rpb25UeXBlLlNraXBGb3J3YXJkOlxuICAgICAgY2FzZSBBY3Rpb25UeXBlLlNraXBCYWNrd2FyZDpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlIEFjdGlvblR5cGUuQ29tbWVudDpcbiAgICAgIGNhc2UgQWN0aW9uVHlwZS5Gb3JtRmlsbGluZzpcbiAgICAgIGNhc2UgQWN0aW9uVHlwZS5TdGF0dXNDaGFuZ2U6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBnZXRGaWxlTmFtZShmaWxlVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghZmlsZVVybCkgcmV0dXJuICcnO1xuICAgIHJldHVybiBmaWxlVXJsLnNwbGl0KCcvJykucG9wKCkgfHwgJyc7XG4gIH1cblxuICBvcGVuRmlsZShmaWxlVXJsOiBzdHJpbmcpIHtcbiAgICBpZiAoIWZpbGVVcmwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy51dGlsU2VydmljZS5vcGVuRnVsbFJvdXRlSW5OZXdXaW5kb3coXG4gICAgICBgJHt0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5GSUxFX0JBU0VfVVJMfSR7ZmlsZVVybH1gXG4gICAgKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImJnLVsjRjlGQUZCXVwiPlxuICA8aGVhZGVyIGNsYXNzPVwibXgtOCByb3VuZGVkLWxnIHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgcHgtNiBweS0yIGJnLVsjRDRBMDA3NzNdXCI+XG4gICAgPGg0IGNsYXNzPVwiZm9udC1zZW1pYm9sZFwiPnt7IHRhc2tDb2RlKCkgfX08L2g0PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC00IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgPHZlcmJlbmEtYnV0dG9uIChjbGljayk9XCJhZGRDb21tZW50KClcIiB0ZXh0PVwiKyBBZGQgQ29tbWVudFwiIHN0eWxlVHlwZT1cInlsdy1vdXRsaW5lXCJcbiAgICAgICAgY2xhc3M9XCJtbC1hdXRvXCI+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgIDx2ZXJiZW4tc3ZnIChjbGljayk9XCJnb0JhY2soKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBbd2lkdGhdPVwiMTdcIiBbaGVpZ2h0XT1cIjE3XCIgW2ljb25dPVwiJ2dvLWJhY2snXCI+PC92ZXJiZW4tc3ZnPlxuICAgIDwvZGl2PlxuICA8L2hlYWRlcj5cbiAgPHNlY3Rpb24gY2xhc3M9XCJncmlkIGdyaWQtY29scy0xMlwiPlxuICAgIDxkaXYgY2xhc3M9XCJiZy1bI2ZmZl0gY29sLXNwYW4tNyBwbC0xNiBwdC0yMCByZWxhdGl2ZVwiPlxuICAgICAgPGRpdiAqbmdJZj1cInNob3dDb21tZW50Qm94XCIgY2xhc3M9XCJtYi02IG1yLTEwXCI+XG4gICAgICAgIDxoNCBjbGFzcz1cImZvbnQtYm9sZCB0ZXh0LWxnIG1iLTJcIj5BZGQgQ29tbWVudDwvaDQ+XG4gICAgICAgIDwhLS0gPHZlcmJlbmEtdGV4dGFyZWEgWyhuZ01vZGVsKV09XCJuZXdDb21tZW50XCIgbGFiZWw9XCJDb21tZW50XCIgY2xhc3M9XCJ3LWZ1bGxcIj48L3ZlcmJlbmEtdGV4dGFyZWE+IC0tPlxuICAgICAgICA8dGV4dGFyZWEgWyhuZ01vZGVsKV09XCJuZXdDb21tZW50XCIgbGFiZWw9XCJDb21tZW50XCIgY2xhc3M9XCJ3LWZ1bGwgYm9yZGVyIHJvdW5kZWQtbWQgcC0yXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8ZmlsZS11cGxvYWQgKHNlbGVjdGVkRmlsZXNDaGFuZ2UpPVwib25GaWxlU2VsZWN0KCRldmVudClcIiBbbXVsdGlwbGVdPVwidHJ1ZVwiIGxhYmVsPVwiQXR0YWNoIEZpbGVzXCI+XG4gICAgICAgICAgPC9maWxlLXVwbG9hZD5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRGaWxlcy5sZW5ndGggPiAwXCIgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMyBtdC0zXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWxlIG9mIHNlbGVjdGVkRmlsZXNcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZmlsZS5FeHRlbnNpb25cIj5cbiAgICAgICAgICAgICAgICA8aW1nICpuZ1N3aXRjaENhc2U9XCInanBnJ1wiIFtzcmNdPVwiZmlsZS5EYXRhXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy1bMTAwcHhdIGgtWzEwMHB4XSBvYmplY3QtY292ZXIgcm91bmRlZC1tZCBib3JkZXJcIiAvPlxuICAgICAgICAgICAgICAgIDxpbWcgKm5nU3dpdGNoQ2FzZT1cIidwbmcnXCIgW3NyY109XCJmaWxlLkRhdGFcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LVsxMDBweF0gaC1bMTAwcHhdIG9iamVjdC1jb3ZlciByb3VuZGVkLW1kIGJvcmRlclwiIC8+XG4gICAgICAgICAgICAgICAgPHZpZGVvICpuZ1N3aXRjaENhc2U9XCInbXA0J1wiIFtzcmNdPVwiZmlsZS5EYXRhXCIgY2xhc3M9XCJ3LVsxNTBweF0gcm91bmRlZC1tZCBzaGFkb3dcIiBjb250cm9scz48L3ZpZGVvPlxuICAgICAgICAgICAgICAgIDxhdWRpbyAqbmdTd2l0Y2hDYXNlPVwiJ21wMydcIiBbc3JjXT1cImZpbGUuRGF0YVwiIGNvbnRyb2xzIGNsYXNzPVwidy1bMTUwcHhdXCI+PC9hdWRpbz5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIGdhcC0yIG10LTJcIj5cbiAgICAgICAgICA8dmVyYmVuYS1idXR0b24gKGNsaWNrKT1cImFkZENvbW1lbnQoKVwiIHRleHQ9XCJDYW5jZWxcIiBzdHlsZVR5cGU9XCJ5bHctb3V0bGluZVwiPjwvdmVyYmVuYS1idXR0b24+XG4gICAgICAgICAgPHZlcmJlbmEtYnV0dG9uIChjbGljayk9XCJzYXZlQ29tbWVudCgpXCIgdGV4dD1cIlNhdmVcIiBiZ0NvbG9yPVwiI0ZGRTY4MVwiIHRleHRDb2xvcj1cIiM0MDQwNDBcIiBib3JkZXJSYWRpdXM9XCIxMHB4XCJcbiAgICAgICAgICAgIHBkPVwiMTBweCAyMHB4XCIgd2lkdGg9XCIxMTRweFwiIGhlaWdodD1cIjM5cHhcIj48L3ZlcmJlbmEtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNwYW4gY2xhc3M9XCJhYnNvbHV0ZSBibG9jayBoLVs5MCVdIGgtbmluZXR5IGJvcmRlciBib3JkZXItc2Vjb25kYXJ5LTIwMCBsZWZ0LVsxNTBweF1cIj48L3NwYW4+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB0aW1lbGluZSBvZiBoaXN0b3J5OyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggbWItN1wiPlxuICAgICAgICAgICAgPGg1IGNsYXNzPVwidy1bMTAwcHhdIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNldEFjdGl2ZShpKVwiPlxuICAgICAgICAgICAgICB7eyB0aW1lbGluZT8uQ3JlYXRlZEF0IHwgZGF0ZSB9fVxuICAgICAgICAgICAgPC9oNT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC0yNCBjdXJzb3ItcG9pbnRlciBtaW4tdy1bMjUwcHhdIHAtNiByb3VuZGVkLW1kIGJvcmRlci1sLTJcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ2JnLVsjRkVGQUYxXSBib3JkZXItWyNGRkU2ODFdJzogYWN0aXZlID09PSBpLFxuICAgICAgICAgICAgICAgICdiZy10cmFuc3BhcmVudCBib3JkZXItdHJhbnNwYXJlbnQgaG92ZXI6YmctWyNGOUZBRkJdJzogYWN0aXZlICE9PSBpXG4gICAgICAgICAgICAgIH1cIiAoY2xpY2spPVwic2V0QWN0aXZlKGkpXCI+XG4gICAgICAgICAgICAgIDwhLS0gQWN0aW9uTmFtZSBhcyBwcmltYXJ5IGhlYWRpbmcsIGZhbGxiYWNrIHRvIEFjdGlvblR5cGUgLS0+XG4gICAgICAgICAgICAgIDxoNCBjbGFzcz1cImZvbnQtYm9sZCB0ZXh0LXhsIHRleHQtWyMxMDE4MjhdIG1iLTJcIj5cbiAgICAgICAgICAgICAgICB7eyB0aW1lbGluZS5BY3Rpb25OYW1lIHx8IHRpbWVsaW5lLkFjdGlvblR5cGUgfX1cbiAgICAgICAgICAgICAgPC9oND5cblxuICAgICAgICAgICAgICA8IS0tIEFjdG9yIGluZm9ybWF0aW9uIHdpdGggdG9vbHRpcCAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICA8dmVyYmVuLXRvb2x0aXAgW3RvcF09XCInMHB4J1wiIFtsZWZ0XT1cIicwcHgnXCIgW3RleHRDb2xvcl09XCInIzAwMCdcIiBbYmFja2dyb3VuZENvbG9yXT1cIicjRkZGJ1wiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcENvbnRlbnRdPVwiYWN0b3JUb29sdGlwVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1zbSB0ZXh0LVsjNjY3MDg1XSBjdXJzb3ItaGVscCBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHZlcmJlbi1zdmcgW3dpZHRoXT1cIjE0XCIgW2hlaWdodF09XCIxNFwiIFtpY29uXT1cIid1c2VyJ1wiIHN0cm9rZT1cIiM2NjcwODVcIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1tZWRpdW0gdGV4dC1bIzM0NDA1NF1cIj57eyB0aW1lbGluZS5BY3Rvci5OYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDwvdmVyYmVuLXRvb2x0aXA+XG5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2FjdG9yVG9vbHRpcFRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIGJvcmRlciBib3JkZXItWyNFNEU3RUNdIHJvdW5kZWQtbGcgcC00IHNoYWRvdy1sZyB3LVsyODBweF1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTMgaXRlbXMtc3RhcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctWzQwcHhdIGgtWzQwcHhdIHJvdW5kZWQtZnVsbCBiZy1ncmFkaWVudC10by1yIGZyb20tWyNEOUFFQUVdIHZpYS1bI0UzQzc5Rl0gdG8tWyNGRkU2ODFdIGZsZXgtc2hyaW5rLTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xIG1pbi13LTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtc20gdGV4dC1bIzEwMTgyOF0gbWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0aW1lbGluZS5BY3Rvci5OYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQteHMgdGV4dC1bIzY2NzA4NV0gYnJlYWstd29yZHMgZmxleCBpdGVtcy1zdGFydCBnYXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyYmVuLXN2ZyBbd2lkdGhdPVwiMTJcIiBbaGVpZ2h0XT1cIjEyXCIgW2ljb25dPVwiJ21haWwnXCIgc3Ryb2tlPVwiIzY2NzA4NVwiPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdGltZWxpbmUuQWN0b3IuSWRlbnRpZmllciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiZ2V0VGFnc0Zyb21BY3Rvcih0aW1lbGluZS5BY3RvcilcIiBjbGFzcz1cInRleHQteHMgdGV4dC1bIzY2NzA4NV0gbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbWVkaXVtXCI+VGFnczo8L3NwYW4+IHt7IGdldFRhZ3NGcm9tQWN0b3IodGltZWxpbmUuQWN0b3IpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPCEtLSBBY3Rpb24gVHlwZSAoaWYgZGlmZmVyZW50IGZyb20gQWN0aW9uTmFtZSkgLS0+XG4gICAgICAgICAgICAgIDxwICpuZ0lmPVwidGltZWxpbmUuQWN0aW9uTmFtZVwiIGNsYXNzPVwidGV4dC1zbSB0ZXh0LVsjNjY3MDg1XSBtYi0yXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LW1lZGl1bVwiPk9wZXJhdGlvbjo8L3NwYW4+IHt7IHRpbWVsaW5lLkFjdGlvblR5cGUgfX1cbiAgICAgICAgICAgICAgPC9wPlxuXG4gICAgICAgICAgICAgIDwhLS0gU3RhZ2UgaW5mb3JtYXRpb24gZm9yIHRyYW5zZmVyIGFjdGlvbnMgLS0+XG4gICAgICAgICAgICAgIEBpZiAoc2hvd0Zyb21BbmRUbyh0aW1lbGluZS5BY3Rpb25UeXBlKSkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctWyNGOUZBRkJdIHJvdW5kZWQtbWQgcC0zIG10LTIgc3BhY2UteS0xLjVcIj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtc20gZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1bIzY2NzA4NV0gZm9udC1tZWRpdW1cIj5Gcm9tOjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1bIzYxNzJGM10gZm9udC1tb25vIHRleHQteHNcIj57eyB0aW1lbGluZS5Gcm9tU3RhZ2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LVsjNjY3MDg1XSBmb250LW1lZGl1bVwiPlRvOjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1bIzYxNzJGM10gZm9udC1tb25vIHRleHQteHNcIj57eyB0aW1lbGluZS5Ub1N0YWdlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICA8IS0tIFZpZXcgY29tbWVudHMgYnV0dG9uIC0tPlxuICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwidGltZWxpbmUuRGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBnYXAtMiBpdGVtcy1jZW50ZXIgdy1maXQgdGV4dC1bIzY2NzA4NV0gdGV4dC1zbSBib3JkZXIgcHgtMyBweS0yIHJvdW5kZWQtbGcgYmctWyNGQ0ZDRkRdIG10LTMgYm9yZGVyLVsjRTRFN0VDXSBob3ZlcjpiZy1bI0Y5RkFGQl0gaG92ZXI6Ym9yZGVyLVsjRDBENUREXSB0cmFuc2l0aW9uLWNvbG9yc1wiPlxuICAgICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnIFt3aWR0aF09XCIxNVwiIFtoZWlnaHRdPVwiMTVcIiBbaWNvbl09XCInY2hhdCdcIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICAgICAgVmlldyBjb21tZW50c1xuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc3Bhbi01XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiaC1bNTBweF0gYmctWyNmZmZdXCI+PC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiYWN0aXZlID49IDBcIiBjbGFzcz1cInctWzQ4MHB4XSBwbC0xNiBwdC0xMFwiPlxuICAgICAgICA8aDEgY2xhc3M9XCJmb250LWJvbGQgdGV4dC1sZyBweS0yXCI+Q29tbWVudHM8L2gxPlxuICAgICAgICA8cCBjbGFzcz1cInRleHQteHMgdGV4dC1bIzY2NzA4NV0gdGV4dC1yaWdodCBweS0yXCI+XG4gICAgICAgICAge3sgaGlzdG9yeVthY3RpdmVdLkNyZWF0ZWRBdCB8IGRhdGUgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYmctWyNmZmZdIHRleHQtWyMxMDE4MjhdIGxlYWRpbmctcmVsYXhlZCBwLTggc2hhZG93LW1kIHJvdW5kZWQtbWRcIj5cbiAgICAgICAgICB7eyBoaXN0b3J5W2FjdGl2ZV0uRGVzY3JpcHRpb24gfX1cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJoaXN0b3J5W2FjdGl2ZV0/LkZpbGVzPy5sZW5ndGhcIiBjbGFzcz1cIm10LTQgYm9yZGVyLXQgcHQtNFwiPlxuICAgICAgICAgICAgPGg1IGNsYXNzPVwiZm9udC1ib2xkIHRleHQtc20gbWItMlwiPkF0dGFjaG1lbnRzPC9oNT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0yXCI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpbGUgb2YgaGlzdG9yeVthY3RpdmVdPy5GaWxlc1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmaWxlLWNvbnRhaW5lciBwLTIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0zIGJvcmRlciByb3VuZGVkLW1kIGJnLWdyYXktNTBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zbSBvdmVyZmxvdy14LWF1dG8gZm9udC1zZW1pYm9sZFwiPlxuICAgICAgICAgICAgICAgICAge3sgZ2V0RmlsZU5hbWUoZmlsZSkgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwib3BlbkZpbGUoZmlsZSlcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+XG4gICAgICAgICAgICAgICAgICA8dmVyYmVuLXN2ZyBbaWNvbl09XCInZG93bmxvYWQtaWNvbidcIiBbd2lkdGhdPVwiMjBcIiBbaGVpZ2h0XT1cIjIwXCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9zZWN0aW9uPlxuPC9kaXY+XG4iXX0=
221
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1oaXN0b3J5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvdGFzay1oaXN0b3J5L3Rhc2staGlzdG9yeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3Rhc2staGlzdG9yeS90YXNrLWhpc3RvcnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFpQixVQUFVLEVBQTJCLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7QUFTbkksTUFBTSxPQUFPLG9CQUFvQjtJQVVyQjtJQUNBO0lBQ0E7SUFDQTtJQVpWLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7SUFDcEMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJQUM5QixNQUFNLEdBQVcsQ0FBQyxDQUFDO0lBQ25CLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFDaEMsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUN4QixhQUFhLEdBQWUsRUFBRSxDQUFDO0lBQy9CLDJCQUEyQjtJQUUzQixZQUNVLFNBQW1CLEVBQ25CLE9BQTJCLEVBQzNCLE1BQTBCLEVBQzFCLFdBQXdCO1FBSHhCLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbkIsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFDM0IsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7UUFDMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFDOUIsQ0FBQztJQUNMLHFDQUFxQztJQUNyQyxNQUFNO0lBQ04sdUJBQXVCO0lBQ3ZCLHdDQUF3QztJQUN4QyxtQkFBbUI7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VSxDQUFDLE1BQU0sQ0FBQztZQUN2QixLQUFLLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDekIsS0FBSyxVQUFVLENBQUMsV0FBVyxDQUFDO1lBQzVCLEtBQUssVUFBVSxDQUFDLFlBQVk7Z0JBQzFCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsS0FBSyxVQUFVLENBQUMsT0FBTyxDQUFDO1lBQ3hCLEtBQUssVUFBVSxDQUFDLFdBQVcsQ0FBQztZQUM1QixLQUFLLFVBQVUsQ0FBQyxZQUFZO2dCQUMxQixPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFlO1FBQ3pCLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDeEIsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQsUUFBUSxDQUFDLE9BQWU7UUFDdEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixDQUN2QyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLGFBQWEsR0FBRyxPQUFPLEVBQUUsQ0FDckQsQ0FBQztJQUNKLENBQUM7d0dBL05VLG9CQUFvQjs0RkFBcEIsb0JBQW9CLG9NQ1hqQyx5OFBBaUpBOzs0RkR0SWEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgaW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9uSGlzdG9yeSwgQWN0aW9uVHlwZSwgQWN0b3IsIEZpbGUgYXMgRmlsZURhdGEsIE9iamVjdFN0YXRlLCBPcGVyYXRpb25UeXBlIH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IEVudmlyb25tZW50U2VydmljZSwgVXRpbFNlcnZpY2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBUYXNrSGlzdG9yeVNlcnZpY2UgfSBmcm9tICcuL3Rhc2staGlzdG9yeS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXRhc2staGlzdG9yeScsXG4gIHRlbXBsYXRlVXJsOiAnLi90YXNrLWhpc3RvcnkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vdGFzay1oaXN0b3J5LmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBUYXNrSGlzdG9yeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHRhc2tDb2RlID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICBvcGVyYXRpb25UeXBlID0gT3BlcmF0aW9uVHlwZTtcbiAgYWN0aXZlOiBudW1iZXIgPSAwO1xuICBzaG93Q29tbWVudEJveDogYm9vbGVhbiA9IGZhbHNlO1xuICBuZXdDb21tZW50OiBzdHJpbmcgPSAnJztcbiAgc2VsZWN0ZWRGaWxlczogRmlsZURhdGFbXSA9IFtdO1xuICAvLyBBY3Rpb25UeXBlID0gQWN0aW9uVHlwZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9sb2NhdGlvbjogTG9jYXRpb24sXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBUYXNrSGlzdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbnZTdmM6IEVudmlyb25tZW50U2VydmljZSxcbiAgICBwcml2YXRlIHV0aWxTZXJ2aWNlOiBVdGlsU2VydmljZVxuICApIHsgfVxuICAvLyBzaW5nbGVIaXN0b3J5OiBUaW1lbGluZUV2ZW50W10gPSBbXG4gIC8vICAge1xuICAvLyAgICAgRGF0ZTogJzQ6MDUgUE0nLFxuICAvLyAgICAgT3BlcmF0aW9uOiBPcGVyYXRpb25UeXBlLkNvbW1lbnQsXG4gIC8vICAgICBEZXRhaWxzOiB7fSxcbiAgLy8gICAgIEFjdGlvbnM6IFtcbiAgLy8gICAgICAgeyBMYWJlbDogJ1ZpZXcgQ29tbWVudHMnLCBUeXBlOiAnYnV0dG9uJywgQWN0aW9uOiAndmlld0NvbW1lbnRzJyB9LFxuICAvLyAgICAgXSxcbiAgLy8gICB9LFxuICAvLyAgIHtcbiAgLy8gICAgIERhdGU6ICdZZXN0ZXJkYXknLFxuICAvLyAgICAgT3BlcmF0aW9uOiBPcGVyYXRpb25UeXBlLkNvbW1lbnQsXG4gIC8vICAgICBEZXRhaWxzOiB7fSxcbiAgLy8gICAgIEFjdGlvbnM6IFtcbiAgLy8gICAgICAgeyBMYWJlbDogJ1ZpZXcgQ29tbWVudHMnLCBUeXBlOiAnYnV0dG9uJywgQWN0aW9uOiAndmlld0NvbW1lbnRzJyB9LFxuICAvLyAgICAgXSxcbiAgLy8gICB9LFxuICAvLyAgIHtcbiAgLy8gICAgIERhdGU6ICdNYXIgMicsXG4gIC8vICAgICBPcGVyYXRpb246IE9wZXJhdGlvblR5cGUuRm9ybXMsXG4gIC8vICAgICBEZXRhaWxzOiB7XG4gIC8vICAgICAgIEZpbGxlZEJ5OiAnQW5vbnltb3VzJyxcbiAgLy8gICAgIH0sXG4gIC8vICAgICBBY3Rpb25zOiBbeyBMYWJlbDogJ1ZpZXcgRm9ybScsIFR5cGU6ICdidXR0b24nLCBBY3Rpb246ICd2aWV3Rm9ybScgfV0sXG4gIC8vICAgfSxcbiAgLy8gICB7XG4gIC8vICAgICBEYXRlOiAnTm92IDQnLFxuICAvLyAgICAgT3BlcmF0aW9uOiBPcGVyYXRpb25UeXBlLkFzc2lnbm1lbnQsXG4gIC8vICAgICBEZXRhaWxzOiB7XG4gIC8vICAgICAgIEZyb206ICdKb2huIERvZScsXG4gIC8vICAgICAgIFRvOiAnSmFuZSBEb2UnLFxuICAvLyAgICAgfSxcbiAgLy8gICAgIEFjdGlvbnM6IFtdLFxuICAvLyAgIH0sXG4gIC8vICAge1xuICAvLyAgICAgRGF0ZTogJ05vdiA2JyxcbiAgLy8gICAgIE9wZXJhdGlvbjogT3BlcmF0aW9uVHlwZS5Db21tZW50LFxuICAvLyAgICAgRGV0YWlsczoge30sXG4gIC8vICAgICBBY3Rpb25zOiBbXG4gIC8vICAgICAgIHsgTGFiZWw6ICdWaWV3IENvbW1lbnRzJywgVHlwZTogJ2J1dHRvbicsIEFjdGlvbjogJ3ZpZXdDb21tZW50cycgfSxcbiAgLy8gICAgIF0sXG4gIC8vICAgfSxcbiAgLy8gXTtcblxuICBoaXN0b3J5OiBBY3Rpb25IaXN0b3J5W10gPSBbXTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0VGFza0hpc3RvcnkodGhpcy50YXNrQ29kZSgpKS50aGVuKChyZXMpID0+IHtcbiAgICAgIHRoaXMuaGlzdG9yeSA9IHJlcztcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuaGlzdG9yeSk7XG4gICAgfSk7XG4gIH1cblxuICBnb0JhY2soKSB7XG4gICAgdGhpcy5fbG9jYXRpb24uYmFjaygpO1xuICB9XG5cbiAgc2V0QWN0aXZlKGk6IG51bWJlcikge1xuICAgIHRoaXMuYWN0aXZlID0gaTtcbiAgfVxuXG4gIGdldFRhZ3NGcm9tQWN0b3IoYWN0b3I6IEFjdG9yKSB7XG4gICAgcmV0dXJuIGFjdG9yLlRhZ3MubWFwKCh0YWcpID0+IHRhZy5OYW1lKS5qb2luKCcsICcpO1xuICB9XG5cbiAgYWRkQ29tbWVudCgpIHtcbiAgICB0aGlzLnNob3dDb21tZW50Qm94ID0gIXRoaXMuc2hvd0NvbW1lbnRCb3g7XG4gIH1cblxuICBhc3luYyBzYXZlQ29tbWVudCgpIHtcbiAgICBjb25zb2xlLmxvZyh0aGlzLm5ld0NvbW1lbnQpO1xuICAgIGlmICghdGhpcy5uZXdDb21tZW50LnRyaW0oKSAmJiB0aGlzLnNlbGVjdGVkRmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHVwbG9hZGVkRmlsZXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zZXJ2aWNlLnVwbG9hZEZpbGVzKHRoaXMuc2VsZWN0ZWRGaWxlcyk7XG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICB1cGxvYWRlZEZpbGVzID0gcmVzO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdGaWxlIHVwbG9hZCBmYWlsZWQnLCBlcnJvcik7XG4gICAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy51dGlsU2VydmljZS5zZW5kQkkoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFjdGlvbkhpc3RvcnkgPSB7XG4gICAgICBUYXNrQ29kZTogdGhpcy50YXNrQ29kZSgpID8/ICcnLFxuICAgICAgRGVzY3JpcHRpb246IHRoaXMubmV3Q29tbWVudCxcbiAgICAgIEFjdGlvblR5cGU6IEFjdGlvblR5cGUuQ29tbWVudCxcbiAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgRmlsZXM6IHVwbG9hZGVkRmlsZXMsXG4gICAgICAvLyBBY3Rvcjoge1xuICAgICAgLy8gICBJZDogdGhpcy5zZWxlY3RlZERldGFpbC5BY3RvcklkLFxuICAgICAgLy8gICBOYW1lOiB0aGlzLnNlbGVjdGVkRGV0YWlsLkFjdG9yTmFtZSxcbiAgICAgIC8vICAgVGFnczogdGhpcy5zZWxlY3RlZERldGFpbC5UYWdzLFxuICAgICAgLy8gfSxcbiAgICAgIFdvcmtmbG93OiAnJyxcbiAgICAgIEZyb21TdGFnZTogJycsXG4gICAgICBUb1N0YWdlOiAnJyxcbiAgICAgIENvZGU6ICcnLFxuICAgICAgVGVuYW50SWQ6ICcnLFxuICAgIH0gYXMgQWN0aW9uSGlzdG9yeTtcblxuICAgIHRoaXMuc2VydmljZS5zYXZlQWN0aW9uSGlzdG9yeShbYWN0aW9uSGlzdG9yeV0pLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5uZXdDb21tZW50ID0gJyc7XG4gICAgICB0aGlzLnNlbGVjdGVkRmlsZXMgPSBbXTtcbiAgICAgIHRoaXMuc2hvd0NvbW1lbnRCb3ggPSBmYWxzZTtcbiAgICAgIHRoaXMuc2VydmljZS5nZXRUYXNrSGlzdG9yeSh0aGlzLnRhc2tDb2RlKCkpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICB0aGlzLmhpc3RvcnkgPSByZXM7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRmlsZVNlbGVjdChkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBmaWxlczogYW55ID0gZGF0YTtcblxuICAgIGlmICghZmlsZXMgfHwgZmlsZXMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICBjb25zdCBmaWxlQXJyYXk6IEZpbGVEYXRhW10gPSBbXTtcbiAgICBjb25zdCByZWFkZXJzOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1tpXTtcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYmFzZTY0ID0gcmVhZGVyLnJlc3VsdCBhcyBzdHJpbmc7XG4gICAgICAgICAgZmlsZUFycmF5LnB1c2goe1xuICAgICAgICAgICAgRXh0ZW5zaW9uOiBmaWxlLm5hbWUuc3BsaXQoJy4nKS5wb3AoKSxcbiAgICAgICAgICAgIE5hbWU6IHRoaXMuZ2VuZXJhdGVSYW5kb21Db2RlKCksXG4gICAgICAgICAgICBEYXRhOiBiYXNlNjQsXG4gICAgICAgICAgICBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLk5ldyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHJlamVjdChlcnJvcik7XG4gICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgICAgfSk7XG5cbiAgICAgIHJlYWRlcnMucHVzaChwcm9taXNlKTtcbiAgICB9XG5cbiAgICBQcm9taXNlLmFsbChyZWFkZXJzKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdGaWxlcyByZWFkeSB0byB1cGxvYWQ6JywgZmlsZUFycmF5KTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlcyA9IGZpbGVBcnJheTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVSYW5kb21Db2RlKGxlbmd0aDogbnVtYmVyID0gMTApOiBzdHJpbmcge1xuICAgIGNvbnN0IGNoYXJzID1cbiAgICAgICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSc7XG4gICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdCArPSBjaGFycy5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcnMubGVuZ3RoKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHMgPSBmaWxlVXJsLnNwbGl0KCcuJyk7XG4gICAgcmV0dXJuIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBzZXRQcmV2aWV3KHZhbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXZhbCkgcmV0dXJuICcnO1xuICAgIGNvbnN0IGZpcnN0ID0gdmFsLnNwbGl0KCcsJylbMF0udHJpbSgpO1xuXG4gICAgaWYgKGZpcnN0LnN0YXJ0c1dpdGgoJ2h0dHAnKSB8fCBmaXJzdC5zdGFydHNXaXRoKCdkYXRhOicpKSB7XG4gICAgICByZXR1cm4gZmlyc3Q7XG4gICAgfVxuICAgIHJldHVybiBgJHt0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5GSUxFX1VSTH0vJHtmaXJzdH1gO1xuICB9XG5cbiAgc2hvd0Zyb21BbmRUbyhhY3Rpb25UeXBlOiBBY3Rpb25UeXBlKTogYm9vbGVhbiB7XG4gICAgc3dpdGNoIChhY3Rpb25UeXBlKSB7XG4gICAgICBjYXNlIEFjdGlvblR5cGUuUGFzc09uOlxuICAgICAgY2FzZSBBY3Rpb25UeXBlLlBhc3NCYWNrOlxuICAgICAgY2FzZSBBY3Rpb25UeXBlLlNraXBGb3J3YXJkOlxuICAgICAgY2FzZSBBY3Rpb25UeXBlLlNraXBCYWNrd2FyZDpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlIEFjdGlvblR5cGUuQ29tbWVudDpcbiAgICAgIGNhc2UgQWN0aW9uVHlwZS5Gb3JtRmlsbGluZzpcbiAgICAgIGNhc2UgQWN0aW9uVHlwZS5TdGF0dXNDaGFuZ2U6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBnZXRGaWxlTmFtZShmaWxlVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghZmlsZVVybCkgcmV0dXJuICcnO1xuICAgIHJldHVybiBmaWxlVXJsLnNwbGl0KCcvJykucG9wKCkgfHwgJyc7XG4gIH1cblxuICBvcGVuRmlsZShmaWxlVXJsOiBzdHJpbmcpIHtcbiAgICBpZiAoIWZpbGVVcmwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy51dGlsU2VydmljZS5vcGVuRnVsbFJvdXRlSW5OZXdXaW5kb3coXG4gICAgICBgJHt0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5GSUxFX0JBU0VfVVJMfSR7ZmlsZVVybH1gXG4gICAgKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImJnLVsjRjlGQUZCXVwiPlxuICA8aGVhZGVyIGNsYXNzPVwibXgtOCByb3VuZGVkLWxnIHNoYWRvdy1sZyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgcHgtNiBweS0yIGJnLVsjRDRBMDA3NzNdXCI+XG4gICAgPGg0IGNsYXNzPVwiZm9udC1zZW1pYm9sZFwiPnt7IHRhc2tDb2RlKCkgfX08L2g0PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC00IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgPHZlcmJlbmEtYnV0dG9uIChjbGljayk9XCJhZGRDb21tZW50KClcIiB0ZXh0PVwiKyBBZGQgQ29tbWVudFwiIHN0eWxlVHlwZT1cInlsdy1vdXRsaW5lXCJcbiAgICAgICAgY2xhc3M9XCJtbC1hdXRvXCI+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgIDx2ZXJiZW4tc3ZnIChjbGljayk9XCJnb0JhY2soKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBbd2lkdGhdPVwiMTdcIiBbaGVpZ2h0XT1cIjE3XCIgW2ljb25dPVwiJ2dvLWJhY2snXCI+PC92ZXJiZW4tc3ZnPlxuICAgIDwvZGl2PlxuICA8L2hlYWRlcj5cbiAgPHNlY3Rpb24gY2xhc3M9XCJncmlkIGdyaWQtY29scy0xMlwiPlxuICAgIDxkaXYgY2xhc3M9XCJiZy1bI2ZmZl0gY29sLXNwYW4tNyBwbC0xNiBwdC0yMCByZWxhdGl2ZVwiPlxuICAgICAgPGRpdiAqbmdJZj1cInNob3dDb21tZW50Qm94XCIgY2xhc3M9XCJtYi02IG1yLTEwXCI+XG4gICAgICAgIDxoNCBjbGFzcz1cImZvbnQtYm9sZCB0ZXh0LWxnIG1iLTJcIj5BZGQgQ29tbWVudDwvaDQ+XG4gICAgICAgIDwhLS0gPHZlcmJlbmEtdGV4dGFyZWEgWyhuZ01vZGVsKV09XCJuZXdDb21tZW50XCIgbGFiZWw9XCJDb21tZW50XCIgY2xhc3M9XCJ3LWZ1bGxcIj48L3ZlcmJlbmEtdGV4dGFyZWE+IC0tPlxuICAgICAgICA8dGV4dGFyZWEgWyhuZ01vZGVsKV09XCJuZXdDb21tZW50XCIgbGFiZWw9XCJDb21tZW50XCIgY2xhc3M9XCJ3LWZ1bGwgYm9yZGVyIHJvdW5kZWQtbWQgcC0yXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8ZmlsZS11cGxvYWQgKHNlbGVjdGVkRmlsZXNDaGFuZ2UpPVwib25GaWxlU2VsZWN0KCRldmVudClcIiBbbXVsdGlwbGVdPVwidHJ1ZVwiIGxhYmVsPVwiQXR0YWNoIEZpbGVzXCI+XG4gICAgICAgICAgPC9maWxlLXVwbG9hZD5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRGaWxlcy5sZW5ndGggPiAwXCIgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMyBtdC0zXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWxlIG9mIHNlbGVjdGVkRmlsZXNcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZmlsZS5FeHRlbnNpb25cIj5cbiAgICAgICAgICAgICAgICA8aW1nICpuZ1N3aXRjaENhc2U9XCInanBnJ1wiIFtzcmNdPVwiZmlsZS5EYXRhXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy1bMTAwcHhdIGgtWzEwMHB4XSBvYmplY3QtY292ZXIgcm91bmRlZC1tZCBib3JkZXJcIiAvPlxuICAgICAgICAgICAgICAgIDxpbWcgKm5nU3dpdGNoQ2FzZT1cIidwbmcnXCIgW3NyY109XCJmaWxlLkRhdGFcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LVsxMDBweF0gaC1bMTAwcHhdIG9iamVjdC1jb3ZlciByb3VuZGVkLW1kIGJvcmRlclwiIC8+XG4gICAgICAgICAgICAgICAgPHZpZGVvICpuZ1N3aXRjaENhc2U9XCInbXA0J1wiIFtzcmNdPVwiZmlsZS5EYXRhXCIgY2xhc3M9XCJ3LVsxNTBweF0gcm91bmRlZC1tZCBzaGFkb3dcIiBjb250cm9scz48L3ZpZGVvPlxuICAgICAgICAgICAgICAgIDxhdWRpbyAqbmdTd2l0Y2hDYXNlPVwiJ21wMydcIiBbc3JjXT1cImZpbGUuRGF0YVwiIGNvbnRyb2xzIGNsYXNzPVwidy1bMTUwcHhdXCI+PC9hdWRpbz5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIGdhcC0yIG10LTJcIj5cbiAgICAgICAgICA8dmVyYmVuYS1idXR0b24gKGNsaWNrKT1cImFkZENvbW1lbnQoKVwiIHRleHQ9XCJDYW5jZWxcIiBzdHlsZVR5cGU9XCJ5bHctb3V0bGluZVwiPjwvdmVyYmVuYS1idXR0b24+XG4gICAgICAgICAgPHZlcmJlbmEtYnV0dG9uIChjbGljayk9XCJzYXZlQ29tbWVudCgpXCIgdGV4dD1cIlNhdmVcIiBiZ0NvbG9yPVwiI0ZGRTY4MVwiIHRleHRDb2xvcj1cIiM0MDQwNDBcIiBib3JkZXJSYWRpdXM9XCIxMHB4XCJcbiAgICAgICAgICAgIHBkPVwiMTBweCAyMHB4XCIgd2lkdGg9XCIxMTRweFwiIGhlaWdodD1cIjM5cHhcIj48L3ZlcmJlbmEtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNwYW4gY2xhc3M9XCJhYnNvbHV0ZSBibG9jayBoLVs5MCVdIGgtbmluZXR5IGJvcmRlciBib3JkZXItc2Vjb25kYXJ5LTIwMCBsZWZ0LVsxNTBweF1cIj48L3NwYW4+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB0aW1lbGluZSBvZiBoaXN0b3J5OyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggbWItN1wiPlxuICAgICAgICAgICAgPGg1IGNsYXNzPVwidy1bMTAwcHhdIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNldEFjdGl2ZShpKVwiPlxuICAgICAgICAgICAgICB7eyB0aW1lbGluZT8uQ3JlYXRlZEF0IHwgZGF0ZSB9fVxuICAgICAgICAgICAgPC9oNT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC0yNCBjdXJzb3ItcG9pbnRlciBtaW4tdy1bMjUwcHhdIHAtNiByb3VuZGVkLW1kIGJvcmRlci1sLTJcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ2JnLVsjRkVGQUYxXSBib3JkZXItWyNGRkU2ODFdJzogYWN0aXZlID09PSBpLFxuICAgICAgICAgICAgICAgICdiZy10cmFuc3BhcmVudCBib3JkZXItdHJhbnNwYXJlbnQgaG92ZXI6YmctWyNGOUZBRkJdJzogYWN0aXZlICE9PSBpXG4gICAgICAgICAgICAgIH1cIiAoY2xpY2spPVwic2V0QWN0aXZlKGkpXCI+XG4gICAgICAgICAgICAgIDwhLS0gQWN0aW9uTmFtZSBhcyBwcmltYXJ5IGhlYWRpbmcsIGZhbGxiYWNrIHRvIEFjdGlvblR5cGUgLS0+XG4gICAgICAgICAgICAgIDxoNCBjbGFzcz1cImZvbnQtYm9sZCB0ZXh0LXhsIHRleHQtWyMxMDE4MjhdIG1iLTJcIj5cbiAgICAgICAgICAgICAgICB7eyB0aW1lbGluZS5BY3Rpb25OYW1lIHx8IHRpbWVsaW5lLkFjdGlvblR5cGUgfX1cbiAgICAgICAgICAgICAgPC9oND5cblxuICAgICAgICAgICAgICA8IS0tIEFjdG9yIGluZm9ybWF0aW9uIHdpdGggdG9vbHRpcCAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICA8dmVyYmVuLXRvb2x0aXAgW3RvcF09XCInMHB4J1wiIFtsZWZ0XT1cIicwcHgnXCIgW3RleHRDb2xvcl09XCInIzAwMCdcIiBbYmFja2dyb3VuZENvbG9yXT1cIicjRkZGJ1wiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcENvbnRlbnRdPVwiYWN0b3JUb29sdGlwVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1zbSB0ZXh0LVsjNjY3MDg1XSBjdXJzb3ItaGVscCBpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHZlcmJlbi1zdmcgW3dpZHRoXT1cIjE0XCIgW2hlaWdodF09XCIxNFwiIFtpY29uXT1cIid1c2VyJ1wiIHN0cm9rZT1cIiM2NjcwODVcIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1tZWRpdW0gdGV4dC1bIzM0NDA1NF1cIj57eyB0aW1lbGluZS5BY3Rvci5OYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDwvdmVyYmVuLXRvb2x0aXA+XG5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2FjdG9yVG9vbHRpcFRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLXdoaXRlIGJvcmRlciBib3JkZXItWyNFNEU3RUNdIHJvdW5kZWQtbGcgcC00IHNoYWRvdy1sZyB3LVsyODBweF1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTMgaXRlbXMtc3RhcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctWzQwcHhdIGgtWzQwcHhdIHJvdW5kZWQtZnVsbCBiZy1ncmFkaWVudC10by1yIGZyb20tWyNEOUFFQUVdIHZpYS1bI0UzQzc5Rl0gdG8tWyNGRkU2ODFdIGZsZXgtc2hyaW5rLTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xIG1pbi13LTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtc20gdGV4dC1bIzEwMTgyOF0gbWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0aW1lbGluZS5BY3Rvci5OYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQteHMgdGV4dC1bIzY2NzA4NV0gYnJlYWstd29yZHMgZmxleCBpdGVtcy1zdGFydCBnYXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyYmVuLXN2ZyBbd2lkdGhdPVwiMTJcIiBbaGVpZ2h0XT1cIjEyXCIgW2ljb25dPVwiJ21haWwnXCIgc3Ryb2tlPVwiIzY2NzA4NVwiPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdGltZWxpbmUuQWN0b3IuSWRlbnRpZmllciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiZ2V0VGFnc0Zyb21BY3Rvcih0aW1lbGluZS5BY3RvcilcIiBjbGFzcz1cInRleHQteHMgdGV4dC1bIzY2NzA4NV0gbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbWVkaXVtXCI+VGFnczo8L3NwYW4+IHt7IGdldFRhZ3NGcm9tQWN0b3IodGltZWxpbmUuQWN0b3IpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPCEtLSBBY3Rpb24gVHlwZSAoaWYgZGlmZmVyZW50IGZyb20gQWN0aW9uTmFtZSkgLS0+XG4gICAgICAgICAgICAgIDxwICpuZ0lmPVwidGltZWxpbmUuQWN0aW9uTmFtZVwiIGNsYXNzPVwidGV4dC1zbSB0ZXh0LVsjNjY3MDg1XSBtYi0yXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LW1lZGl1bVwiPk9wZXJhdGlvbjo8L3NwYW4+IHt7IHRpbWVsaW5lLkFjdGlvblR5cGUgfX1cbiAgICAgICAgICAgICAgPC9wPlxuXG4gICAgICAgICAgICAgIDwhLS0gU3RhZ2UgaW5mb3JtYXRpb24gZm9yIHRyYW5zZmVyIGFjdGlvbnMgLS0+XG4gICAgICAgICAgICAgIEBpZiAoc2hvd0Zyb21BbmRUbyh0aW1lbGluZS5BY3Rpb25UeXBlKSkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmctWyNGOUZBRkJdIHJvdW5kZWQtbWQgcC0zIG10LTIgc3BhY2UteS0xLjVcIj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtc20gZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1bIzY2NzA4NV0gZm9udC1tZWRpdW1cIj5Gcm9tOjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1bIzYxNzJGM10gZm9udC1tb25vIHRleHQteHNcIj57eyB0aW1lbGluZS5Gcm9tU3RhZ2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1zbSBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LVsjNjY3MDg1XSBmb250LW1lZGl1bVwiPlRvOjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1bIzYxNzJGM10gZm9udC1tb25vIHRleHQteHNcIj57eyB0aW1lbGluZS5Ub1N0YWdlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICA8IS0tIFZpZXcgY29tbWVudHMgYnV0dG9uIC0tPlxuICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwidGltZWxpbmUuRGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBnYXAtMiBpdGVtcy1jZW50ZXIgdy1maXQgdGV4dC1bIzY2NzA4NV0gdGV4dC1zbSBib3JkZXIgcHgtMyBweS0yIHJvdW5kZWQtbGcgYmctWyNGQ0ZDRkRdIG10LTMgYm9yZGVyLVsjRTRFN0VDXSBob3ZlcjpiZy1bI0Y5RkFGQl0gaG92ZXI6Ym9yZGVyLVsjRDBENUREXSB0cmFuc2l0aW9uLWNvbG9yc1wiPlxuICAgICAgICAgICAgICAgIDx2ZXJiZW4tc3ZnIFt3aWR0aF09XCIxNVwiIFtoZWlnaHRdPVwiMTVcIiBbaWNvbl09XCInY2hhdCdcIj48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgICAgICAgVmlldyBjb21tZW50c1xuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtc3Bhbi01XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiaC1bNTBweF0gYmctWyNmZmZdXCI+PC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiYWN0aXZlID49IDBcIiBjbGFzcz1cInctWzQ4MHB4XSBwbC0xNiBwdC0xMFwiPlxuICAgICAgICA8aDEgY2xhc3M9XCJmb250LWJvbGQgdGV4dC1sZyBweS0yXCI+Q29tbWVudHM8L2gxPlxuICAgICAgICA8cCBjbGFzcz1cInRleHQteHMgdGV4dC1bIzY2NzA4NV0gdGV4dC1yaWdodCBweS0yXCI+XG4gICAgICAgICAge3sgaGlzdG9yeVthY3RpdmVdLkNyZWF0ZWRBdCB8IGRhdGUgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYmctWyNmZmZdIHRleHQtWyMxMDE4MjhdIGxlYWRpbmctcmVsYXhlZCBwLTggc2hhZG93LW1kIHJvdW5kZWQtbWRcIj5cbiAgICAgICAgICB7eyBoaXN0b3J5W2FjdGl2ZV0uRGVzY3JpcHRpb24gfX1cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJoaXN0b3J5W2FjdGl2ZV0/LkZpbGVzPy5sZW5ndGhcIiBjbGFzcz1cIm10LTQgYm9yZGVyLXQgcHQtNFwiPlxuICAgICAgICAgICAgPGg1IGNsYXNzPVwiZm9udC1ib2xkIHRleHQtc20gbWItMlwiPkF0dGFjaG1lbnRzPC9oNT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0yXCI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpbGUgb2YgaGlzdG9yeVthY3RpdmVdPy5GaWxlc1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmaWxlLWNvbnRhaW5lciBwLTIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0zIGJvcmRlciByb3VuZGVkLW1kIGJnLWdyYXktNTBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zbSBvdmVyZmxvdy14LWF1dG8gZm9udC1zZW1pYm9sZFwiPlxuICAgICAgICAgICAgICAgICAge3sgZ2V0RmlsZU5hbWUoZmlsZSkgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwib3BlbkZpbGUoZmlsZSlcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+XG4gICAgICAgICAgICAgICAgICA8dmVyYmVuLXN2ZyBbaWNvbl09XCInZG93bmxvYWQtaWNvbidcIiBbd2lkdGhdPVwiMjBcIiBbaGVpZ2h0XT1cIjIwXCI+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9zZWN0aW9uPlxuPC9kaXY+XG4iXX0=