@eo-sdk/client 8.16.5 → 8.16.7

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.
@@ -345,11 +345,16 @@ export class InboxDetailsComponent extends UnsubscribeOnDestroy {
345
345
  * Removes the current item from the inbox.
346
346
  */
347
347
  confirmInboxItem() {
348
+ this.preventClickThrough = true;
349
+ setTimeout(() => {
350
+ this.preventClickThrough = false;
351
+ }, 1000);
348
352
  this.actionProcessing = this.inboxService
349
353
  .removeItem(this.item)
350
354
  .subscribe(() => {
351
355
  this.notify.success(this.translate.instant('eo.inbox.activity.confirm.success'));
352
356
  this.eventService.trigger(EnaioEvent.INBOX_ITEM_CONFIRMED, this.item);
357
+ this.item = undefined;
353
358
  this.inboxService.refreshInboxState();
354
359
  }, Utils.catch(null, this.translate.instant('eo.process.item.remove.fail')));
355
360
  }
@@ -415,7 +420,7 @@ export class InboxDetailsComponent extends UnsubscribeOnDestroy {
415
420
  InboxDetailsComponent.decorators = [
416
421
  { type: Component, args: [{
417
422
  selector: 'eo-inbox-details',
418
- template: "<div class=\"inbox-details\" *ngIf=\"item; else noItem\" [ngClass]=\"{bpm: item.type === 'BPM'}\">\n\n <div class=\"eo-head\">\n <header class=\"eo-header\">\n <eo-icon class=\"eo-header-icon\" *ngIf=\"!item.iconId\" title=\"{{item?.type}}\" [iconSrc]=\"'assets/_default/svg/ic_loop.svg'\"></eo-icon>\n <eo-icon class=\"eo-header-icon\" *ngIf=\"item.iconId\" title=\"{{item?.type}}\" [iconId]=\"item.iconId\"></eo-icon>\n <div class=\"eo-header-info\">\n <h2 class=\"eo-header-title\">{{item.title}}</h2>\n <h3 *ngIf=\"item.description\" class=\"eo-header-subtitle\">{{item.description}}</h3>\n <h3 *ngIf=\"workItem && !item.description\" class=\"eo-header-subtitle\">{{workItem.qmodelname}}</h3>\n </div>\n <div class=\"eo-header-actions\">\n <eo-icon class=\"button primary refresh-button\" *ngIf=\"initializing.closed\"\n (click)=\"refresh()\"\n [iconSrc]=\"'assets/_default/svg/ic_refresh.svg'\"\n [iconTitle]=\"('eo.list.refresh' | translate)\"></eo-icon>\n </div>\n </header>\n </div>\n\n <div class=\"eo-body\" *ngIf=\"initializing.closed\">\n\n <div class=\"load-error\" *ngIf=\"loadError\">\n <eo-error-message></eo-error-message>\n </div>\n\n <!-- details for BPM items -->\n <eo-tab-container *ngIf=\"item.type === 'BPM'; else dmsTask\"\n [pluginPanels]=\"externalPanels\"\n [enableSlave]=\"false\"\n [cacheLayout]=\"'inbox-details'\">\n\n <!-- TASK PANEL -->\n <eo-tab-panel [id]=\"'task'\" header=\"{{'eo.process.details.tab.task' | translate}}\">\n\n <div class=\"tab-panel\">\n <div class=\"panel\">\n\n <div class=\"process-description\" *ngIf=\"workItem?.description\">\n <h3 translate>eo.process.details.tab.task.description</h3>\n <div>{{workItem.description}}</div>\n </div>\n\n <!-- show info when we have an overdue -->\n <eo-duetimeInfo *ngIf=\"item?.duetime\" [item]=\"item\"></eo-duetimeInfo>\n\n <!-- list of users that you got the inbox entry for (in substitute of / deputies) -->\n <div class=\"process-performer\" *ngIf=\"workItem?.inSubstituteOf?.length\">\n <div class=\"head\" [ngClass]=\"{performerShow: substituteShow}\">\n <div class=\"label\" translate>eo.process.substitute</div>\n <div class=\"action\" (click)=\"substituteShow = !substituteShow\">\n <div class=\"count\">{{workItem.inSubstituteOf.length}}</div>\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_arrow_down.svg'\"></eo-icon>\n </div>\n </div>\n <div class=\"body\" *ngIf=\"substituteShow\">\n <div class=\"performer\" *ngFor=\"let u of workItem.inSubstituteOf\">\n <div class=\"icon-wrap\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_orga_user.svg'\"></eo-icon>\n </div>\n <div class=\"name\">{{u.firstname}} {{u.lastname}} <span class=\"qname\">{{u.name}}</span></div>\n </div>\n </div>\n </div>\n\n <!-- contents to show when the user has locked the work item -->\n <ng-container *ngIf=\"locked; else unlocked\">\n\n <!-- work item form -->\n <div class=\"process-form\">\n <eo-object-form [formOptions]=\"formOptions\" *ngIf=\"workItem?.form\"\n (statusChanged)=\"onFormStatusChanged($event)\" #bpmForm></eo-object-form>\n </div>\n </ng-container>\n\n <!-- contents to show when work item isn't locked -->\n <ng-template #unlocked>\n\n <div class=\"notice\" translate>eo.process.task.continue</div>\n\n <!-- list of recipients -->\n <div class=\"process-performer\" *ngIf=\"workItem\">\n <div class=\"head\" [ngClass]=\"{performerShow: performerShow}\">\n <div class=\"label\" translate>eo.process.recipients</div>\n <div class=\"action\" (click)=\"performerShow = !performerShow\">\n <div class=\"count\">{{workItem.performer.users.length + workItem.performer.roles.length + workItem.performer.groups.length}}</div>\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_arrow_down.svg'\"></eo-icon>\n </div>\n </div>\n <div class=\"body\" *ngIf=\"performerShow\">\n\n <!-- groups -->\n <div class=\"performer\" *ngFor=\"let g of workItem.performer.groups\">\n <div class=\"icon-wrap\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_orga_group.svg'\"></eo-icon>\n </div>\n <div class=\"name\">{{g.name}}</div>\n </div>\n\n <!-- roles -->\n <div class=\"performer\" *ngFor=\"let r of workItem.performer.roles\">\n <div class=\"icon-wrap\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_orga_role.svg'\"></eo-icon>\n </div>\n <div class=\"name\">{{r.name}}</div>\n </div>\n\n <!-- users -->\n <div class=\"performer\" *ngFor=\"let u of workItem.performer.users\">\n <div class=\"icon-wrap\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_orga_user.svg'\"></eo-icon>\n </div>\n <div class=\"name\">{{u.firstname}} {{u.lastname}} <span class=\"qname\">{{u.name}}</span></div>\n </div>\n </div>\n </div>\n\n <!-- summary of workflows indexdata -->\n <div class=\"indexdata\" *ngIf=\"workItemIndexdata?.data\">\n <h3 translate>eo.process.details.tab.task.indexdata</h3>\n <eo-indexdata-summary [indexdata]=\"workItemIndexdata\"></eo-indexdata-summary>\n </div>\n\n </ng-template>\n </div>\n\n <!-- actions for bpm items -->\n <ng-container *ngIf=\"locked; else unlockedActions\">\n <div class=\"process-actions\" [ngClass]=\"{disabled: !actionProcessing.closed}\">\n\n <div class=\"secondary\">\n <!-- de-personalize the work item -->\n <button class=\"btn-unlock\" (click)=\"unlockWorkItem()\" translate>eo.process.depersonalize</button>\n <!-- save form data -->\n <button class=\"btn-save\" (click)=\"saveWorkItemData()\" *ngIf=\"workItem?.form && !formState?.invalid && formState?.dirty\"\n translate>eo.object.indexdata.save</button>\n </div>\n\n <div class=\"primary\" [ngClass]=\"{disabled: preventClickThrough}\">\n <!-- process actions -->\n <button class=\"primary btn-execute\"\n *ngFor=\"let action of workItem.actions; trackBy: trackByCode\"\n (click)=\"executeWorkItemAction(action)\"\n [ngClass]=\"{ext: action.url}\"\n [disabled]=\"(!!formState && formState?.invalid) || !action.feasible\">{{action.title}}</button>\n </div>\n </div>\n </ng-container>\n\n <!-- actions to show up, when the user has not personalized the work item -->\n <ng-template #unlockedActions>\n <div class=\"process-actions\" [ngClass]=\"{disabled: !actionProcessing.closed || !workItem}\">\n <div class=\"primary\">\n <!-- personalize the work item -->\n <button class=\"primary btn-lock\" (click)=\"lockWorkItem()\" translate>eo.process.personalize</button>\n </div>\n </div>\n </ng-template>\n\n </div>\n </eo-tab-panel>\n\n <!-- HISTORY PANEL -->\n <eo-tab-panel [id]=\"'history'\" header=\"{{'eo.process.details.tab.progress' | translate}}\">\n\n <div class=\"tab-panel\">\n <div class=\"panel process-history\">\n <eo-process-history [history]=\"history\"></eo-process-history>\n </div>\n </div>\n </eo-tab-panel>\n\n <!-- FILE PANEL -->\n <eo-tab-panel [id]=\"'file'\" header=\"{{'eo.process.details.tab.attachments' | translate}}\">\n <div class=\"tab-panel\">\n <!-- list content attached to the work item -->\n <div class=\"panel process-files\">\n <eo-process-file [processFile]=\"workItem?.file\"\n [permissions]=\"workItem?.fileEntryPermissions\"\n [isDisabled]=\"!filesAdding.closed\"\n [clipboard]=\"clipboard\"\n [editable]=\"true\"\n [selectedContentFileId]=\"selectedContentFileId\"\n (onOpenWorkItemContentInContext)=\"openWorkItemContentInContext($event)\"\n (onOpenWorkItemContent)=\"openWorkItemContent($event)\"\n (onRemoveWorkItemContent)=\"removeWorkItemContent($event)\"\n (onPasteProcessFile)=\"addFromClipboard()\">\n </eo-process-file>\n </div>\n </div>\n </eo-tab-panel>\n\n <ng-content></ng-content>\n\n </eo-tab-container>\n\n <!-- body when we have a subscription or a resubmission -->\n <ng-template #dmsTask>\n <div class=\"tab-panel\">\n <div class=\"panel\">\n <div class=\"process-description\">\n <h3 translate>eo.process.details.tab.task.description</h3>\n <div>{{settings?.description}}</div>\n </div>\n </div>\n\n <!-- actions for the current process item -->\n <div class=\"process-actions\" [ngClass]=\"{disabled: !actionProcessing.closed}\">\n <div class=\"primary\">\n <button class=\"primary btn-confirm\" (click)=\"confirmInboxItem()\">{{settings?.actionTitle}}</button>\n </div>\n </div>\n\n </div>\n </ng-template>\n\n </div>\n</div>\n<ng-template #noItem>\n <eo-error-message [emptyState]=\"{icon: emptyState.icon, text: emptyState.text, className: emptyState.className}\">\n <ng-content select=\".error\"></ng-content>\n </eo-error-message>\n</ng-template>\n",
423
+ template: "<div class=\"inbox-details\" *ngIf=\"item; else noItem\" [ngClass]=\"{bpm: item.type === 'BPM'}\">\n\n <div class=\"eo-head\">\n <header class=\"eo-header\">\n <eo-icon class=\"eo-header-icon\" *ngIf=\"!item.iconId\" title=\"{{item?.type}}\" [iconSrc]=\"'assets/_default/svg/ic_loop.svg'\"></eo-icon>\n <eo-icon class=\"eo-header-icon\" *ngIf=\"item.iconId\" title=\"{{item?.type}}\" [iconId]=\"item.iconId\"></eo-icon>\n <div class=\"eo-header-info\">\n <h2 class=\"eo-header-title\">{{item.title}}</h2>\n <h3 *ngIf=\"item.description\" class=\"eo-header-subtitle\">{{item.description}}</h3>\n <h3 *ngIf=\"workItem && !item.description\" class=\"eo-header-subtitle\">{{workItem.qmodelname}}</h3>\n </div>\n <div class=\"eo-header-actions\">\n <eo-icon class=\"button primary refresh-button\" *ngIf=\"initializing.closed\"\n (click)=\"refresh()\"\n [iconSrc]=\"'assets/_default/svg/ic_refresh.svg'\"\n [iconTitle]=\"('eo.list.refresh' | translate)\"></eo-icon>\n </div>\n </header>\n </div>\n\n <div class=\"eo-body\" *ngIf=\"initializing.closed\">\n\n <div class=\"load-error\" *ngIf=\"loadError\">\n <eo-error-message></eo-error-message>\n </div>\n\n <!-- details for BPM items -->\n <eo-tab-container *ngIf=\"item.type === 'BPM'; else dmsTask\"\n [pluginPanels]=\"externalPanels\"\n [enableSlave]=\"false\"\n [cacheLayout]=\"'inbox-details'\">\n\n <!-- TASK PANEL -->\n <eo-tab-panel [id]=\"'task'\" header=\"{{'eo.process.details.tab.task' | translate}}\">\n\n <div class=\"tab-panel\">\n <div class=\"panel\">\n\n <div class=\"process-description\" *ngIf=\"workItem?.description\">\n <h3 translate>eo.process.details.tab.task.description</h3>\n <div>{{workItem.description}}</div>\n </div>\n\n <!-- show info when we have an overdue -->\n <eo-duetimeInfo *ngIf=\"item?.duetime\" [item]=\"item\"></eo-duetimeInfo>\n\n <!-- list of users that you got the inbox entry for (in substitute of / deputies) -->\n <div class=\"process-performer\" *ngIf=\"workItem?.inSubstituteOf?.length\">\n <div class=\"head\" [ngClass]=\"{performerShow: substituteShow}\">\n <div class=\"label\" translate>eo.process.substitute</div>\n <div class=\"action\" (click)=\"substituteShow = !substituteShow\">\n <div class=\"count\">{{workItem.inSubstituteOf.length}}</div>\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_arrow_down.svg'\"></eo-icon>\n </div>\n </div>\n <div class=\"body\" *ngIf=\"substituteShow\">\n <div class=\"performer\" *ngFor=\"let u of workItem.inSubstituteOf\">\n <div class=\"icon-wrap\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_orga_user.svg'\"></eo-icon>\n </div>\n <div class=\"name\">{{u.firstname}} {{u.lastname}} <span class=\"qname\">{{u.name}}</span></div>\n </div>\n </div>\n </div>\n\n <!-- contents to show when the user has locked the work item -->\n <ng-container *ngIf=\"locked; else unlocked\">\n\n <!-- work item form -->\n <div class=\"process-form\">\n <eo-object-form [formOptions]=\"formOptions\" *ngIf=\"workItem?.form\"\n (statusChanged)=\"onFormStatusChanged($event)\" #bpmForm></eo-object-form>\n </div>\n </ng-container>\n\n <!-- contents to show when work item isn't locked -->\n <ng-template #unlocked>\n\n <div class=\"notice\" translate>eo.process.task.continue</div>\n\n <!-- list of recipients -->\n <div class=\"process-performer\" *ngIf=\"workItem\">\n <div class=\"head\" [ngClass]=\"{performerShow: performerShow}\">\n <div class=\"label\" translate>eo.process.recipients</div>\n <div class=\"action\" (click)=\"performerShow = !performerShow\">\n <div class=\"count\">{{workItem.performer.users.length + workItem.performer.roles.length + workItem.performer.groups.length}}</div>\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_arrow_down.svg'\"></eo-icon>\n </div>\n </div>\n <div class=\"body\" *ngIf=\"performerShow\">\n\n <!-- groups -->\n <div class=\"performer\" *ngFor=\"let g of workItem.performer.groups\">\n <div class=\"icon-wrap\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_orga_group.svg'\"></eo-icon>\n </div>\n <div class=\"name\">{{g.name}}</div>\n </div>\n\n <!-- roles -->\n <div class=\"performer\" *ngFor=\"let r of workItem.performer.roles\">\n <div class=\"icon-wrap\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_orga_role.svg'\"></eo-icon>\n </div>\n <div class=\"name\">{{r.name}}</div>\n </div>\n\n <!-- users -->\n <div class=\"performer\" *ngFor=\"let u of workItem.performer.users\">\n <div class=\"icon-wrap\">\n <eo-icon [iconSrc]=\"'assets/_default/svg/ic_orga_user.svg'\"></eo-icon>\n </div>\n <div class=\"name\">{{u.firstname}} {{u.lastname}} <span class=\"qname\">{{u.name}}</span></div>\n </div>\n </div>\n </div>\n\n <!-- summary of workflows indexdata -->\n <div class=\"indexdata\" *ngIf=\"workItemIndexdata?.data\">\n <h3 translate>eo.process.details.tab.task.indexdata</h3>\n <eo-indexdata-summary [indexdata]=\"workItemIndexdata\"></eo-indexdata-summary>\n </div>\n\n </ng-template>\n </div>\n\n <!-- actions for bpm items -->\n <ng-container *ngIf=\"locked; else unlockedActions\">\n <div class=\"process-actions\" [ngClass]=\"{disabled: !actionProcessing.closed}\">\n\n <div class=\"secondary\">\n <!-- de-personalize the work item -->\n <button class=\"btn-unlock\" (click)=\"unlockWorkItem()\" translate>eo.process.depersonalize</button>\n <!-- save form data -->\n <button class=\"btn-save\" (click)=\"saveWorkItemData()\" *ngIf=\"workItem?.form && !formState?.invalid && formState?.dirty\"\n translate>eo.object.indexdata.save</button>\n </div>\n\n <div class=\"primary\" [ngClass]=\"{disabled: preventClickThrough}\">\n <!-- process actions -->\n <button class=\"primary btn-execute\"\n *ngFor=\"let action of workItem.actions; trackBy: trackByCode\"\n (click)=\"executeWorkItemAction(action)\"\n [ngClass]=\"{ext: action.url}\"\n [disabled]=\"(!!formState && formState?.invalid) || !action.feasible\">{{action.title}}</button>\n </div>\n </div>\n </ng-container>\n\n <!-- actions to show up, when the user has not personalized the work item -->\n <ng-template #unlockedActions>\n <div class=\"process-actions\" [ngClass]=\"{disabled: !actionProcessing.closed || !workItem}\">\n <div class=\"primary\">\n <!-- personalize the work item -->\n <button class=\"primary btn-lock\" (click)=\"lockWorkItem()\" translate>eo.process.personalize</button>\n </div>\n </div>\n </ng-template>\n\n </div>\n </eo-tab-panel>\n\n <!-- HISTORY PANEL -->\n <eo-tab-panel [id]=\"'history'\" header=\"{{'eo.process.details.tab.progress' | translate}}\">\n\n <div class=\"tab-panel\">\n <div class=\"panel process-history\">\n <eo-process-history [history]=\"history\"></eo-process-history>\n </div>\n </div>\n </eo-tab-panel>\n\n <!-- FILE PANEL -->\n <eo-tab-panel [id]=\"'file'\" header=\"{{'eo.process.details.tab.attachments' | translate}}\">\n <div class=\"tab-panel\">\n <!-- list content attached to the work item -->\n <div class=\"panel process-files\">\n <eo-process-file [processFile]=\"workItem?.file\"\n [permissions]=\"workItem?.fileEntryPermissions\"\n [isDisabled]=\"!filesAdding.closed\"\n [clipboard]=\"clipboard\"\n [editable]=\"true\"\n [selectedContentFileId]=\"selectedContentFileId\"\n (onOpenWorkItemContentInContext)=\"openWorkItemContentInContext($event)\"\n (onOpenWorkItemContent)=\"openWorkItemContent($event)\"\n (onRemoveWorkItemContent)=\"removeWorkItemContent($event)\"\n (onPasteProcessFile)=\"addFromClipboard()\">\n </eo-process-file>\n </div>\n </div>\n </eo-tab-panel>\n\n <ng-content></ng-content>\n\n </eo-tab-container>\n\n <!-- body when we have a subscription or a resubmission -->\n <ng-template #dmsTask>\n <div class=\"tab-panel\">\n <div class=\"panel\">\n <div class=\"process-description\">\n <h3 translate>eo.process.details.tab.task.description</h3>\n <div>{{settings?.description}}</div>\n </div>\n </div>\n\n <!-- actions for the current process item -->\n <div class=\"process-actions\" [ngClass]=\"{disabled: !actionProcessing.closed}\">\n <div class=\"primary\">\n <button class=\"primary btn-confirm\" [disabled]=\"preventClickThrough\" (click)=\"confirmInboxItem()\">{{settings?.actionTitle}}</button>\n </div>\n </div>\n\n </div>\n </ng-template>\n\n </div>\n</div>\n<ng-template #noItem>\n <eo-error-message [emptyState]=\"{icon: emptyState.icon, text: emptyState.text, className: emptyState.className}\">\n <ng-content select=\".error\"></ng-content>\n </eo-error-message>\n</ng-template>\n",
419
424
  styles: [".inbox-details{background-color:var(--panel-background-grey);height:100%;position:relative}.inbox-details:not(.bpm) .eo-head{border-bottom:1px solid var(--panel-header-border-bottom-color);height:var(--app-pane-header-height)}.inbox-details:not(.bpm) .eo-body{top:var(--app-pane-header-height)}.inbox-details .eo-head{background-color:var(--color-white);height:calc(var(--app-pane-header-height) - 30px)}.inbox-details .eo-body{bottom:0;left:0;position:absolute;right:0;top:calc(var(--app-pane-header-height) - 30px)}.inbox-details .eo-body .load-error{align-items:center;background-color:var(--panel-background-grey);bottom:0;display:flex;flex-flow:column;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:5}.inbox-details .eo-body .load-error eo-icon{color:var(--text-color-hint);opacity:.5;width:20%}.inbox-details .eo-body .tab-panel{display:flex;flex:1;flex-direction:column;height:100%;min-height:0;min-width:0}.inbox-details .eo-body .tab-panel .panel:not(.process-history){display:flex;flex:1;flex-direction:column;min-height:0;min-width:0;overflow-y:auto;padding:var(--app-pane-padding)}.inbox-details .eo-body .tab-panel .panel.process-files,.inbox-details .eo-body .tab-panel .panel.process-history{height:100%}.inbox-details .eo-body .tab-panel .process-actions{display:flex;flex:none;flex-direction:row;flex-wrap:wrap;justify-content:space-between;min-height:0;min-width:0;padding:0 calc(var(--app-pane-padding)*0.75) 0!important}.inbox-details .eo-body .tab-panel .process-actions button{margin:calc(var(--app-pane-padding)/8)}.inbox-details .eo-body .tab-panel .process-actions button.ext{position:relative}.inbox-details .eo-body .tab-panel .process-actions button.ext:after{border-color:rgba(var(--color-white-rgb),.7);border-style:solid;border-width:2px 2px 0 0;box-sizing:border-box;content:\"\";height:calc(var(--app-pane-padding)*0.5);position:absolute;right:calc(var(--app-pane-padding)/8);top:calc(var(--app-pane-padding)/8);width:calc(var(--app-pane-padding)*0.5)}.inbox-details .eo-body .tab-panel .process-actions div.primary{display:flex;flex:none;flex:1 1 auto;flex-direction:row;flex-wrap:wrap;justify-content:flex-end;min-height:0;min-width:0;padding:var(--app-pane-padding) 0}.inbox-details .eo-body .tab-panel .process-actions div.primary.disabled{opacity:.2;pointer-events:none}.inbox-details .eo-body .tab-panel .process-actions div.secondary{display:flex;flex:none;flex-direction:row;min-height:0;min-width:0;padding:var(--app-pane-padding) 0}.inbox-details .eo-body .tab-panel .process-actions.disabled{opacity:.5}.inbox-details .eo-body .tab-panel .process-actions.disabled button{cursor:default;pointer-events:none}.inbox-details .eo-body h3{border-bottom:1px solid rgba(var(--color-black-rgb),.1);color:var(--text-color-caption);font-size:var(--font-subhead);font-weight:var(--font-weight-normal);margin:0 0 calc(var(--app-pane-padding)/2) 0;padding:0 0 calc(var(--app-pane-padding)/4) 0}.inbox-details .eo-body .notice{background-color:rgba(var(--color-black-rgb),.06);border-radius:2px;margin-bottom:var(--app-pane-padding);padding:calc(var(--app-pane-padding)/4) calc(var(--app-pane-padding)/2)}.inbox-details .eo-body .indexdata{margin-top:calc(var(--app-pane-padding)/2)}.inbox-details .eo-body .process-description{margin-bottom:var(--app-pane-padding)}.inbox-details .eo-body .process-performer{margin:calc(var(--app-pane-padding)/4) 0}.inbox-details .eo-body .process-performer .head{align-items:center;display:flex;flex-flow:row nowrap}.inbox-details .eo-body .process-performer .head .label{flex:1 1 auto}.inbox-details .eo-body .process-performer .head .action{-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;align-items:center;border:1px solid rgba(var(--color-black-rgb),.1);border-radius:2px;cursor:pointer;display:flex;flex-flow:row nowrap;overflow:hidden;padding:0 0 0 calc(var(--app-pane-padding)/2);transition:all var(--app-default-transition-duration) ease-in-out}.inbox-details .eo-body .process-performer .head .action .count{color:var(--text-color-caption);line-height:1em}.inbox-details .eo-body .process-performer .head .action eo-icon{-moz-transition:all var(--app-default-transition-duration) ease-in-out;-o-transition:all var(--app-default-transition-duration) ease-in-out;-webkit-transition:all var(--app-default-transition-duration) ease-in-out;color:var(--text-color-hint);transition:all var(--app-default-transition-duration) ease-in-out}.inbox-details .eo-body .process-performer .head .action:hover{background:rgba(var(--color-black-rgb),.1)}.inbox-details .eo-body .process-performer .head.performerShow .action eo-icon{transform:rotate(180deg)}.inbox-details .eo-body .process-performer .body{padding:calc(var(--app-pane-padding)/2) 0}.inbox-details .eo-body .process-performer .body .performer{-moz-user-select:none;-webkit-animation:eoFadeInDown var(--app-default-transition-duration);-webkit-user-select:none;align-items:center;animation:eoFadeInDown var(--app-default-transition-duration);background-color:var(--color-white);border-radius:2px;display:flex;flex-flow:row nowrap;margin-bottom:2px;padding:2px;user-select:none}.inbox-details .eo-body .process-performer .body .performer .icon-wrap{background-color:var(--color-primary-3);border-radius:2px;color:var(--color-white);flex:0 0 auto;padding:2px}.inbox-details .eo-body .process-performer .body .performer .name{flex:1 1 auto;padding:0 var(--app-pane-padding)}.inbox-details .eo-body .process-performer .body .performer .name .qname{background-color:rgba(var(--color-black-rgb),.08);border-radius:2px;color:var(--text-color-caption);display:inline-block;font-size:var(--font-hint);margin:0 calc(var(--app-pane-padding)/2);padding:2px calc(var(--app-pane-padding)/2)}.inbox-details .eo-body .no-files{padding:var(--app-pane-padding)}"]
420
425
  },] }
421
426
  ];
@@ -441,4 +446,4 @@ InboxDetailsComponent.propDecorators = {
441
446
  item: [{ type: Input, args: ['item',] }],
442
447
  dataType: [{ type: HostBinding, args: ['attr.data-type',] }]
443
448
  };
444
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5ib3gtZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9pbmJveC1kZXRhaWxzL2luYm94LWRldGFpbHMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUN4RSxPQUFPLEVBRUwsU0FBUyxFQUNULGVBQWUsRUFDZixXQUFXLEVBQ1gsS0FBSyxFQUVMLFNBQVMsRUFDVCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFtQixNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsVUFBVSxFQUVWLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLFlBQVksRUFFWixTQUFTLEVBQ1QsWUFBWSxFQUNaLG1CQUFtQixFQUNuQixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxLQUFLLEVBSU4sTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxFQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0saUVBQWlFLENBQUM7QUFDdEcsT0FBTyxFQUFrQixnQkFBZ0IsRUFBQyxNQUFNLHFEQUFxRCxDQUFDO0FBSXRHLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBRWpGLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBTy9FLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxvQkFBb0I7SUFvRTdELFlBQ1UsVUFBc0IsRUFDdEIsV0FBd0IsRUFDeEIsWUFBMEIsRUFDMUIsU0FBMkIsRUFDM0IsTUFBYyxFQUNkLFlBQTBCLEVBQzFCLGdCQUFrQyxFQUNsQyxTQUEyQixFQUMzQixjQUFxQyxFQUNyQyxNQUE0QixFQUM1QixjQUFtQztRQUUzQyxLQUFLLEVBQUUsQ0FBQztRQVpBLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsbUJBQWMsR0FBZCxjQUFjLENBQXVCO1FBQ3JDLFdBQU0sR0FBTixNQUFNLENBQXNCO1FBQzVCLG1CQUFjLEdBQWQsY0FBYyxDQUFxQjtRQWhEN0MscUJBQWdCLEdBQXVCLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDO1FBQ3RELGlCQUFZLEdBQXVCLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDO1FBQ2xELGdCQUFXLEdBQXVCLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDO1FBRWpELHlCQUFvQixHQUFHLHFCQUFxQixDQUFDO1FBRTdDLG1CQUFjLEdBQUcsSUFBSSxTQUFTLEVBQXFCLENBQUM7UUFxSDVDLDRCQUF1QixHQUFHLENBQUMsR0FBYSxFQUFZLEVBQUU7O1lBQzVELElBQUksUUFBQyxHQUFHLENBQUMsT0FBTywwQ0FBRSxNQUFNLENBQUEsRUFBRTtnQkFDeEIsR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2FBQzVDO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUE7UUE3RUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHO1lBQzNCLElBQUksRUFBRSxDQUFDO1lBQ1AsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHVDQUF1QyxDQUFDO1lBQ3RFLElBQUksRUFBRSxTQUFTO1NBQ2hCLENBQUM7SUFDSixDQUFDO0lBekNELElBQ0ksSUFBSSxDQUFDLENBQVk7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsRUFBRTtZQUNMLGVBQWU7WUFDZixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUNwQixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDbEM7YUFBTTtZQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzFEO0lBQ0gsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBbUMsUUFBUTtRQUN6QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDN0MsQ0FBQztJQXVCRCxPQUFPO1FBQ0wsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsUUFBUSxFQUFFO1lBQ3pDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1NBQzFCO2FBQU07WUFDTCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsR0FBMkI7UUFDN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7UUFDckIsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRTtZQUN4QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDckI7YUFBTTtZQUNMLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN0QjtJQUNILENBQUM7SUFFTyxZQUFZO1FBQ2xCLHlFQUF5RTtRQUN6RSwrREFBK0Q7UUFDL0QsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksR0FBRyxDQUFDLEVBQUU7WUFDbEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ3REO0lBQ0gsQ0FBQztJQUVPLGFBQWE7UUFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRDs7T0FFRztJQUNLLE9BQU87UUFDYixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFFakMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUN0QixLQUFLLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDN0MsTUFBTTthQUNQO1lBQ0QsS0FBSyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDbkMsTUFBTTthQUNQO1lBQ0QsS0FBSyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDbkMsTUFBTTthQUNQO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQU87UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRztZQUNkLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FDakMsMkJBQTJCLE9BQU8sY0FBYyxDQUNqRDtZQUNELFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FDakMsNkJBQTZCLE9BQU8sU0FBUyxDQUM5QztTQUNGLENBQUM7UUFDRixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEMsQ0FBQztJQVNELGdFQUFnRTtJQUNoRSxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQzthQUM3QyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2FBQ3ZDLFNBQVMsQ0FDUixHQUFHLENBQUMsRUFBRTtZQUNKLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsY0FBYyxDQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUN0QixDQUFDO1lBQ0YscUNBQXFDO1lBQ3JDLElBQUksQ0FBQyxtQkFBbUIsQ0FDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN6RCxDQUFDO1FBQ0osQ0FBQyxFQUNELEdBQUcsRUFBRTtZQUNILElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHVDQUF1QyxDQUFDLEVBQy9ELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUNwQixtREFBbUQsQ0FDcEQsQ0FDRixDQUFDO1FBQ0osQ0FBQyxDQUNGLENBQUM7SUFDTixDQUFDO0lBRU8sY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBeUI7UUFDMUQsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztZQUN4QixJQUFJLENBQUMsV0FBVyxpQkFDWDtnQkFDRCxTQUFTLEVBQUUsSUFBSTtnQkFDZixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3RELDZEQUE2RDtnQkFDN0Qsb0NBQW9DO2dCQUNwQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJO2FBQzVCLENBQ0YsQ0FBQztTQUNIO2FBQU07WUFDTCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE9BQU87UUFDOUIsSUFBSSxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDNUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNsQixJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO2dCQUM1QixDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzthQUNuQjtZQUNELENBQUMsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLEVBQUU7Z0JBQ3RCLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtvQkFDdkIsQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7aUJBQ3BCO2dCQUNELE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUNwQixDQUFDLENBQUM7WUFDRixrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxrQkFBa0IsQ0FBQztJQUM1QixDQUFDO0lBRUQscUNBQXFDO0lBQ3JDLFlBQVk7UUFDVixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVU7YUFDcEMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7YUFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQzthQUN2QyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZixNQUFNLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsR0FBRyxHQUFHLENBQUM7WUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7WUFDcEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ1QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTtnQkFDeEIsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMscUNBQXFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDdEg7aUJBQU07Z0JBQ0wsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQWlDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDbEg7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWM7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNoQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVU7aUJBQ3BDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO2lCQUM3QixTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUMzRztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxxQkFBcUIsQ0FBQyxNQUFzQjtRQUMxQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRTtnQkFDOUMsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFO29CQUNkLDBFQUEwRTtvQkFDMUUsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO3dCQUNsQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7NEJBQ3pELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNqQyxDQUFDLENBQUMsQ0FBQztxQkFDSjt5QkFBTTt3QkFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDaEM7aUJBQ0Y7cUJBQU07b0JBQ0wsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO3dCQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO3dCQUNsRCxtRkFBbUY7d0JBQ25GLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztxQkFDdEI7b0JBQ0QsSUFBSSxDQUFDLFVBQVU7eUJBQ1osZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO3lCQUN0QyxTQUFTLENBQUMsR0FBRyxFQUFFO3dCQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBaUMsQ0FBQyxFQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FDaEIsQ0FBQzt3QkFDRixJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztvQkFDeEIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLCtCQUErQixDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUN2RzthQUNGO1FBQ0gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUVPLGFBQWEsQ0FBQyxHQUFXO1FBQy9CLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFO1lBQy9CLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztTQUM1QjthQUFNO1lBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsbUJBQW1CLENBQUMsSUFBZ0I7UUFDbEMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7WUFDbEMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMxRDtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNyQyxJQUFJLE1BQU0sR0FBRztnQkFDWCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ1gsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2FBQ2hCLENBQUM7WUFDRixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQzVEO1NBQ0Y7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsNEJBQTRCLENBQUMsR0FBRztRQUM5QixNQUFNLElBQUksR0FBYyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QyxNQUFNLFFBQVEsR0FBcUIsRUFBQyxXQUFXLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBQyxFQUFDLENBQUM7UUFDcEUsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO1lBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDL0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUN0RDtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQjtRQUNkLElBQUksQ0FBQyxVQUFVO2FBQ1osNEJBQTRCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO2FBQzNELFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztZQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtnQkFDL0IsMkNBQTJDO2dCQUMzQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNqRDtRQUNILENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxvQ0FBb0MsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDBDQUEwQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gscUJBQXFCLENBQUMsR0FBRztRQUN2QixHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDckIsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3RCLElBQUksR0FBRyxDQUFDLElBQUksRUFBRTtZQUNaLE1BQU0sSUFBSSxHQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDakMsSUFBSSxDQUFDLFVBQVU7aUJBQ1osaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztpQkFDckUsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdEUsSUFBSSxJQUFJLENBQUMscUJBQXFCLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRTtvQkFDMUMsSUFBSSxDQUFDLG1CQUFtQixDQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ3pELENBQUM7aUJBQ0g7WUFDSCxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMscUNBQXFDLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMvSjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQjtRQUNkLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRTtnQkFDckUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO29CQUN6RCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ3JCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDekIsQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxRQUFrQjtRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixNQUFNLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzVDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHdDQUF3QyxDQUFDLENBQ2pFLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNLLFlBQVk7UUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQ3JELEdBQUcsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsRUFDakMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQ2xELFVBQVUsQ0FDUixLQUFLLENBQUMsS0FBSyxDQUNULElBQUksRUFDSixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUMvRCxDQUNGLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQjtRQUNkLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsWUFBWTthQUN0QyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzthQUNyQixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDLENBQzVELENBQUM7WUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RFLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN4QyxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVEOztPQUVHO0lBQ0ssYUFBYTtRQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQztRQUMvQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pELE1BQU0sRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNuQyxNQUFNLFFBQVEsR0FBRyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFeEQsZ0JBQWdCO1FBQ2hCLElBQUksQ0FBQyxVQUFVO2FBQ1osaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7YUFDMUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNkLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2pCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDZixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUNwRTtZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsdURBQXVEO1lBQ3ZELGlDQUFpQztZQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQzthQUNGLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUk7UUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUk7UUFDbkIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUk7UUFDdEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsUUFBUTtRQUNOLG9GQUFvRjtRQUNwRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVTthQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2FBQ3pDLFNBQVMsQ0FDUixDQUFDLFNBQW9CLEVBQUUsRUFBRSxDQUN6QixDQUFDLElBQUksQ0FBQyxTQUFTO1lBQ2IsU0FBUyxDQUFDLE1BQU0sS0FBSyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUNoRSxDQUFDO1FBQ0osK0NBQStDO1FBRS9DLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN2QixJQUFJLENBQUMsU0FBUztpQkFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7aUJBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2lCQUNoRCxTQUFTLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDdkIsSUFBSSxJQUFJLEVBQUU7b0JBQ1IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7b0JBQ2pCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUN0RTtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQ3JCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FDckQsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7OztZQXJnQkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxrQkFBa0I7Z0JBQzVCLHU0VUFBNkM7O2FBRTlDOzs7WUFuQ0MsVUFBVTtZQVlWLFdBQVc7WUFKWCxZQUFZO1lBY1csZ0JBQWdCO1lBeEJmLE1BQU07WUFPOUIsWUFBWTtZQUZaLGdCQUFnQjtZQVFoQixnQkFBZ0I7WUFVVixxQkFBcUI7WUFYM0Isb0JBQW9CO1lBRHBCLG1CQUFtQjs7O3dCQTZCbEIsU0FBUyxTQUFDLFNBQVM7d0JBb0NuQixlQUFlLFNBQUMsaUJBQWlCO3lCQUNqQyxlQUFlLFNBQUMsa0JBQWtCO3lCQUlsQyxLQUFLOzZCQUNMLEtBQUs7bUJBRUwsS0FBSyxTQUFDLE1BQU07dUJBa0JaLFdBQVcsU0FBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NlbGxSZW5kZXJlcn0gZnJvbSAnLi8uLi8uLi9lby1mcmFtZXdvcmstY29yZS9hcGkvZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge05hdmlnYXRpb25FeHRyYXMsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEJwbVNlcnZpY2UsXG4gIENsaXBib2FyZCxcbiAgQ2xpcGJvYXJkQWN0aW9uLFxuICBDbGlwYm9hcmRTZXJ2aWNlLFxuICBFbmFpb0V2ZW50LFxuICBFdmVudFNlcnZpY2UsXG4gIEZpbGVFbnRyeSxcbiAgSW5ib3hJdGVtLFxuICBJbmJveFNlcnZpY2UsXG4gIExvY2FsU3RvcmFnZVNlcnZpY2UsXG4gIE5vdGlmaWNhdGlvbnNTZXJ2aWNlLFxuICBUcmFuc2xhdGVTZXJ2aWNlLFxuICBVc2VyU2VydmljZSxcbiAgVXRpbHMsXG4gIFdvcmtJdGVtLFxuICBXb3JrSXRlbUFjdGlvbixcbiAgV29ya0l0ZW1IaXN0b3J5RW50cnlcbn0gZnJvbSAnQGVvLXNkay9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgbWFwLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7RW1wdHlTdGF0ZX0gZnJvbSAnLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvZW1wdHktc3RhdGUvZW1wdHktc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7UGVuZGluZ0NoYW5nZXNTZXJ2aWNlfSBmcm9tICcuLi8uLi9lby1mcmFtZXdvcmstY29yZS9wZW5kaW5nLWNoYW5nZXMvcGVuZGluZy1jaGFuZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHtTZWxlY3Rpb25Db25maWcsIFNlbGVjdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL3NlbGVjdGlvbi9zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQge0Zvcm1TdGF0dXNDaGFuZ2VkRXZlbnR9IGZyb20gJy4uL29iamVjdC1mb3JtL2Zvcm0tc3RhdHVzLWNoYW5nZWQtZXZlbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7T2JqZWN0Rm9ybU9wdGlvbnN9IGZyb20gJy4uL29iamVjdC1mb3JtL29iamVjdC1mb3JtLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7T2JqZWN0Rm9ybUNvbXBvbmVudH0gZnJvbSAnLi4vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7VGFiUGx1Z2luQ29tcG9uZW50fSBmcm9tICcuLi9wbHVnaW5zL3BsdWdpbi5jb21wb25lbnQnO1xuaW1wb3J0IHtUYWJQYW5lbENvbXBvbmVudH0gZnJvbSAnLi4vdGFiLWNvbnRhaW5lci90YWItcGFuZWwvdGFiLXBhbmVsLmNvbXBvbmVudCc7XG5pbXBvcnQge0luZGV4RGF0YX0gZnJvbSAnLi4vdWkvaW5kZXhkYXRhLXN1bW1hcnkvaW5kZXhkYXRhLXN1bW1hcnkuY29tcG9uZW50JztcbmltcG9ydCB7VW5zdWJzY3JpYmVPbkRlc3Ryb3l9IGZyb20gJy4uL3V0aWwvdW5zdWJzY3JpYmUvdW5zdWJzY3JpYmUuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8taW5ib3gtZGV0YWlscycsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbmJveC1kZXRhaWxzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW5ib3gtZGV0YWlscy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEluYm94RGV0YWlsc0NvbXBvbmVudCBleHRlbmRzIFVuc3Vic2NyaWJlT25EZXN0cm95XG4gIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgnYnBtRm9ybScpIGJwbUZvcm1FbDogT2JqZWN0Rm9ybUNvbXBvbmVudDtcblxuICBwcml2YXRlIGRlZmF1bHRXb3JrSXRlbUFjdGlvbjogV29ya0l0ZW1BY3Rpb247XG5cbiAgLy8gSUQgc2V0IGJ5IHBlbmRpbmdDaGFuZ2VzIHNlcnZpY2Ugd2hlbiBlZGl0aW5nIGluZGV4ZGF0YVxuICAvLyBVc2VkIHRvIGZpbmlzaCB0aGUgcGVuZGluZyB0YXNrIHdoZW4gZWRpdGluZyBpcyBkb25lXG4gIHByaXZhdGUgcGVuZGluZ1Rhc2tJZDogc3RyaW5nO1xuXG4gIHByaXZhdGUgX2l0ZW06IEluYm94SXRlbTtcbiAgd29ya0l0ZW06IFdvcmtJdGVtO1xuICBoaXN0b3J5OiBXb3JrSXRlbUhpc3RvcnlFbnRyeVtdO1xuICAvLyBmbGFnIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdGhlIHdvcmsgaXRlbSBpcyBsb2NrZWQgYnkgdGhlIHVzZXJcbiAgbG9ja2VkOiBib29sZWFuO1xuICAvLyBDT09MLTExNTA2XG4gIHByZXZlbnRDbGlja1Rocm91Z2g6IGJvb2xlYW47XG4gIC8vIGN1cnJlbnQgY2xpcGJvYXJkIGNvbnRlbnRzXG4gIGNsaXBib2FyZDogQ2xpcGJvYXJkO1xuXG4gIC8vIHVzZWQgZm9yIGhhbmRsaW5nIFNVQlNDUklQVElPTlMgYW5kIFJFU1VCTUlTU0lPTlNcbiAgc2V0dGluZ3M6IHtcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIGFjdGlvblRpdGxlOiBzdHJpbmc7XG4gIH07XG4gIGZvcm1TdGF0ZTogRm9ybVN0YXR1c0NoYW5nZWRFdmVudDtcbiAgZm9ybU9wdGlvbnM6IE9iamVjdEZvcm1PcHRpb25zO1xuICBzZWxlY3RlZENvbnRlbnRGaWxlSWQ6IHN0cmluZztcbiAgd29ya0l0ZW1JbmRleGRhdGE6IEluZGV4RGF0YTtcbiAgcGVyZm9ybWVyU2hvdzogYm9vbGVhbjtcbiAgc3Vic3RpdHV0ZVNob3c6IGJvb2xlYW47XG4gIGFjdGlvblByb2Nlc3Npbmc6IFN1YnNjcmlwdGlvbiB8IGFueSA9IHtjbG9zZWQ6IHRydWV9O1xuICBpbml0aWFsaXppbmc6IFN1YnNjcmlwdGlvbiB8IGFueSA9IHtjbG9zZWQ6IHRydWV9O1xuICBmaWxlc0FkZGluZzogU3Vic2NyaXB0aW9uIHwgYW55ID0ge2Nsb3NlZDogdHJ1ZX07XG4gIGxvYWRFcnJvcjogYm9vbGVhbjtcbiAgc3RvcmFnZUtleUxhc3RJdGVtSUQgPSAnZW8uaW5ib3gubGFzdEl0ZW1JRCc7XG5cbiAgZXh0ZXJuYWxQYW5lbHMgPSBuZXcgUXVlcnlMaXN0PFRhYlBhbmVsQ29tcG9uZW50PigpO1xuICBAQ29udGVudENoaWxkcmVuKFRhYlBhbmVsQ29tcG9uZW50KSB0YWJQYW5lbHM6IFF1ZXJ5TGlzdDxUYWJQYW5lbENvbXBvbmVudD47XG4gIEBDb250ZW50Q2hpbGRyZW4oVGFiUGx1Z2luQ29tcG9uZW50KSB0YWJQbHVnaW5zOiBRdWVyeUxpc3Q8XG4gICAgVGFiUGx1Z2luQ29tcG9uZW50XG4gID47XG5cbiAgQElucHV0KCkgZW1wdHlTdGF0ZTogRW1wdHlTdGF0ZTtcbiAgQElucHV0KCkgYXBwbHlTZWxlY3Rpb246IFNlbGVjdGlvbkNvbmZpZztcblxuICBASW5wdXQoJ2l0ZW0nKVxuICBzZXQgaXRlbShpOiBJbmJveEl0ZW0pIHtcbiAgICB0aGlzLl9pdGVtID0gaTtcbiAgICBpZiAoaSkge1xuICAgICAgLy8gcmVzZXQgdmFsdWVzXG4gICAgICB0aGlzLndvcmtJdGVtID0gbnVsbDtcbiAgICAgIHRoaXMuaGlzdG9yeSA9IFtdO1xuICAgICAgdGhpcy5sb2NrZWQgPSBmYWxzZTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5wcm9jZXNzKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5maW5kKHRoaXMuYXBwbHlTZWxlY3Rpb24ub3V0KS5mb2N1cyhudWxsKTtcbiAgICB9XG4gIH1cblxuICBnZXQgaXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXR5cGUnKSBnZXQgZGF0YVR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbSA/IHRoaXMuaXRlbS50eXBlIDogJ25vbmUnO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBicG1TZXJ2aWNlOiBCcG1TZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW5ib3hTZXJ2aWNlOiBJbmJveFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZWxlY3Rpb246IFNlbGVjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGV2ZW50U2VydmljZTogRXZlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2xpcGJvYXJkU2VydmljZTogQ2xpcGJvYXJkU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHBlbmRpbmdDaGFuZ2VzOiBQZW5kaW5nQ2hhbmdlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBub3RpZnk6IE5vdGlmaWNhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmRlZmF1bHRXb3JrSXRlbUFjdGlvbiA9IHtcbiAgICAgIGNvZGU6IDAsXG4gICAgICB0aXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ucHJvY2Vzcy50YXNrLmFjdGlvbnMuZGVmYXVsdC50aXRsZScpLFxuICAgICAgdHlwZTogJ0ZPUldBUkQnXG4gICAgfTtcbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgaWYgKHRoaXMuaXRlbS50eXBlID09PSBJbmJveEl0ZW0uVFlQRV9CUE0pIHtcbiAgICAgIHRoaXMuY3JlYXRlQlBNV29ya0l0ZW0oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pdGVtID0gdGhpcy5faXRlbTtcbiAgICB9XG4gIH1cblxuICBvbkZvcm1TdGF0dXNDaGFuZ2VkKGV2dDogRm9ybVN0YXR1c0NoYW5nZWRFdmVudCkge1xuICAgIHRoaXMuZm9ybVN0YXRlID0gZXZ0O1xuICAgIGlmICh0aGlzLmZvcm1TdGF0ZS5kaXJ0eSkge1xuICAgICAgdGhpcy5zdGFydFBlbmRpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maW5pc2hQZW5kaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFBlbmRpbmcoKSB7XG4gICAgLy8gYmVjYXVzZSB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBmb3JtIHN0YXR1cyBjaGFuZ2VzLFxuICAgIC8vIHBlbmRpbmcgdGFzayB3aWxsIG9ubHkgYmUgc3RhcnRlZCBvbmNlIHVudGlsIGl0IHdhcyBmaW5pc2hlZFxuICAgIGlmICghdGhpcy5wZW5kaW5nQ2hhbmdlcy5oYXNQZW5kaW5nVGFzayh0aGlzLnBlbmRpbmdUYXNrSWQgfHwgJyAnKSkge1xuICAgICAgdGhpcy5wZW5kaW5nVGFza0lkID0gdGhpcy5wZW5kaW5nQ2hhbmdlcy5zdGFydFRhc2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbmlzaFBlbmRpbmcoKSB7XG4gICAgdGhpcy5wZW5kaW5nQ2hhbmdlcy5maW5pc2hUYXNrKHRoaXMucGVuZGluZ1Rhc2tJZCk7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyB0aGUgY3VycmVudCBpbmJveCBpdGVtXG4gICAqL1xuICBwcml2YXRlIHByb2Nlc3MoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLmluaXRpYWxpemluZy5jbG9zZWQgPSBmYWxzZTtcblxuICAgIHN3aXRjaCAodGhpcy5pdGVtLnR5cGUpIHtcbiAgICAgIGNhc2UgSW5ib3hJdGVtLlRZUEVfQlBNOiB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6aW5nID0gdGhpcy5jcmVhdGVCUE1Xb3JrSXRlbSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgSW5ib3hJdGVtLlRZUEVfU1VCU0NSSVBUSU9OOiB7XG4gICAgICAgIHRoaXMuY3JlYXRlRE1TSXRlbSgnc3Vic2NyaXB0aW9uJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBJbmJveEl0ZW0uVFlQRV9SRVNVQk1JU1NJT046IHtcbiAgICAgICAgdGhpcy5jcmVhdGVETVNJdGVtKCdyZXN1Ym1pc3Npb24nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlRE1TSXRlbShkbXNUeXBlKSB7XG4gICAgdGhpcy5zZXR0aW5ncyA9IHtcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICBgZW8ucHJvY2Vzcy5kZXRhaWxzLnRhc2suJHtkbXNUeXBlfS5kZXNjcmlwdGlvbmBcbiAgICAgICksXG4gICAgICBhY3Rpb25UaXRsZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgYGVvLnByb2Nlc3MuZGV0YWlscy5idXR0b24uJHtkbXNUeXBlfS5yZW1vdmVgXG4gICAgICApXG4gICAgfTtcbiAgICB0aGlzLm9wZW5Xb3JrSXRlbUNvbnRlbnQodGhpcy5pdGVtLnRhcmdldCk7XG4gICAgdGhpcy5pbml0aWFsaXppbmcuY2xvc2VkID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRGVmYXVsdEFjdGlvbklmRW1wdHkgPSAocmVzOiBXb3JrSXRlbSk6IFdvcmtJdGVtID0+IHtcbiAgICBpZiAoIXJlcy5hY3Rpb25zPy5sZW5ndGgpIHtcbiAgICAgIHJlcy5hY3Rpb25zID0gW3RoaXMuZGVmYXVsdFdvcmtJdGVtQWN0aW9uXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIC8vIGZvciBpdGVtcyBvZiB0eXBlICdCUE0nIGZldGNoIHdvcmsgaXRlbSBmb3IgbW9yZSBpbmZvcm1hdGlvbnNcbiAgY3JlYXRlQlBNV29ya0l0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuYnBtU2VydmljZVxuICAgICAgLmdldFdvcmtJdGVtKHRoaXMuaXRlbS5zb3VyY2VJZCwgdGhpcy5pdGVtLmlkKVxuICAgICAgLnBpcGUobWFwKHRoaXMuYWRkRGVmYXVsdEFjdGlvbklmRW1wdHkpKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgcmVzID0+IHtcbiAgICAgICAgICB0aGlzLndvcmtJdGVtID0gcmVzO1xuICAgICAgICAgIHRoaXMuc2V0dXBXb3JrSXRlbSgpO1xuICAgICAgICAgIHRoaXMuc2V0Rm9ybU9wdGlvbnMoXG4gICAgICAgICAgICB0aGlzLndvcmtJdGVtLmZvcm0sXG4gICAgICAgICAgICB0aGlzLndvcmtJdGVtLmRhdGEsXG4gICAgICAgICAgICB0aGlzLndvcmtJdGVtLmFjdGlvbnNcbiAgICAgICAgICApO1xuICAgICAgICAgIC8vIGF1dG8tc2VsZWN0IGZpcnN0IGF0dGFjaGVkIGNvbnRlbnRcbiAgICAgICAgICB0aGlzLm9wZW5Xb3JrSXRlbUNvbnRlbnQoXG4gICAgICAgICAgICB0aGlzLndvcmtJdGVtLmZpbGUubGVuZ3RoID8gdGhpcy53b3JrSXRlbS5maWxlWzBdIDogbnVsbFxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgdGhpcy5ub3RpZnkuZXJyb3IoXG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5wcm9jZXNzLmRldGFpbHMud29ya2l0ZW0ubG9hZC5mYWlsJyksXG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICAgICAnZW8ucHJvY2Vzcy5kZXRhaWxzLndvcmtpdGVtLmxvYWQuZmFpbC5kZXNjcmlwdGlvbidcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb3JtT3B0aW9ucyhmb3JtLCBkYXRhLCBhY3Rpb25zOiBXb3JrSXRlbUFjdGlvbltdKSB7XG4gICAgaWYgKGZvcm0pIHtcbiAgICAgIGZvcm0uc2l0dWF0aW9uID0gJ0VESVQnO1xuICAgICAgdGhpcy5mb3JtT3B0aW9ucyA9IHtcbiAgICAgICAgLi4ue1xuICAgICAgICAgIGZvcm1Nb2RlbDogZm9ybSxcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIGFjdGlvbnM6IGFjdGlvbnMgPyB0aGlzLnRyYW5zZm9ybUFjdGlvbnMoYWN0aW9ucykgOiB7fSxcbiAgICAgICAgICAvLyBmb3JtIHNjcmlwdCB3aWxsIGJlIHByb3ZpZGVkIHdpdGggdGhlIGxpc3Qgb2YgZmlsZSBlbnRyaWVzXG4gICAgICAgICAgLy8gYXR0YWNoZWQgdG8gdGhlIGN1cnJlbnQgd29yayBpdGVtXG4gICAgICAgICAgb2JqZWN0czogdGhpcy53b3JrSXRlbS5maWxlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtQWN0aW9ucyhhY3Rpb25zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUluYm94U2F0ZSgpIHtcbiAgICB0aGlzLmluYm94U2VydmljZS5yZWZyZXNoSW5ib3hTdGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1BY3Rpb25zKGFjdGlvbnMpIHtcbiAgICBsZXQgdHJhbnNmb3JtZWRBY3Rpb25zID0ge307XG4gICAgYWN0aW9ucy5mb3JFYWNoKGEgPT4ge1xuICAgICAgaWYgKGEuZmVhc2libGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhLmZlYXNpYmxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGEuZmVhc2liaWxpdHkgPSB2YWx1ZSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYS5mZWFzaWJsZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhLmZlYXNpYmxlO1xuICAgICAgfTtcbiAgICAgIHRyYW5zZm9ybWVkQWN0aW9uc1thLmNvZGUudG9TdHJpbmcoKV0gPSBhO1xuICAgIH0pO1xuICAgIHJldHVybiB0cmFuc2Zvcm1lZEFjdGlvbnM7XG4gIH1cblxuICAvKiBMb2NrcyBhIHdvcmsgaXRlbSAocGVyc29uYWxpemUpICovXG4gIGxvY2tXb3JrSXRlbSgpIHtcbiAgICB0aGlzLmFjdGlvblByb2Nlc3NpbmcgPSB0aGlzLmJwbVNlcnZpY2VcbiAgICAgIC5sb2NrV29ya0l0ZW0odGhpcy53b3JrSXRlbSlcbiAgICAgIC5waXBlKG1hcCh0aGlzLmFkZERlZmF1bHRBY3Rpb25JZkVtcHR5KSlcbiAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgY29uc3Qge2FjdGlvbnMsIGRhdGEsIGZvcm19ID0gcmVzO1xuICAgICAgICB0aGlzLndvcmtJdGVtID0gcmVzO1xuICAgICAgICB0aGlzLnNldHVwV29ya0l0ZW0oKTtcbiAgICAgICAgdGhpcy5zZXRGb3JtT3B0aW9ucyhmb3JtLCBkYXRhLCBhY3Rpb25zKTtcbiAgICAgICAgdGhpcy51cGRhdGVJbmJveFNhdGUoKTtcbiAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDA5KSB7XG4gICAgICAgICAgVXRpbHMudGhyb3cobnVsbCwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uYnBtLmV2ZW50LnNjcmlwdC5leGVjdXRpb24uZXJyb3InKSwgdGhpcy53b3JrSXRlbS50aXRsZSkuY2FsbCh0aGlzLCB7fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgVXRpbHMudGhyb3cobnVsbCwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ucHJvY2Vzcy5hY3Rpdml0eS5sb2NrLmRlbmllZCcpLCB0aGlzLndvcmtJdGVtLnRpdGxlKS5jYWxsKHRoaXMsIHt9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVW4tTG9ja3MgYSB3b3JrIGl0ZW0gKGRlLXBlcnNvbmFsaXplKVxuICAgKi9cbiAgdW5sb2NrV29ya0l0ZW0oKSB7XG4gICAgaWYgKCF0aGlzLnBlbmRpbmdDaGFuZ2VzLmNoZWNrKCkpIHtcbiAgICAgIHRoaXMuYWN0aW9uUHJvY2Vzc2luZyA9IHRoaXMuYnBtU2VydmljZVxuICAgICAgICAudW5sb2NrV29ya0l0ZW0odGhpcy53b3JrSXRlbSlcbiAgICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgIHRoaXMud29ya0l0ZW0gPSByZXM7XG4gICAgICAgICAgdGhpcy5zZXR1cFdvcmtJdGVtKCk7XG4gICAgICAgICAgdGhpcy51cGRhdGVJbmJveFNhdGUoKTtcbiAgICAgICAgfSwgVXRpbHMudGhyb3cobnVsbCwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ucHJvY2Vzcy5hY3Rpdml0eS51bmxvY2suZGVuaWVkJyksIHRoaXMud29ya0l0ZW0udGl0bGUpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgYSB3b3JrIGl0ZW1zIGFjdGlvbi5cbiAgICogQHBhcmFtIGFjdGlvbiBUaGUgYWN0aW9uIHRvIGJlIGV4ZWN1dGVzXG4gICAqL1xuICBleGVjdXRlV29ya0l0ZW1BY3Rpb24oYWN0aW9uOiBXb3JrSXRlbUFjdGlvbikge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvcm1TdGF0ZSB8fCAhdGhpcy5mb3JtU3RhdGUuaW52YWxpZCkge1xuICAgICAgICBpZiAoYWN0aW9uLnVybCkge1xuICAgICAgICAgIC8vIHByb2Nlc3MgZXh0ZXJuYWwgYWN0aW9uIGJ5IHNhdmluZyB3b3JrIGl0ZW0gYW5kIHJlZGlyZWN0IHRvIGFjdGlvbnMgdXJsXG4gICAgICAgICAgaWYgKHRoaXMuYnBtRm9ybUVsKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGlvblByb2Nlc3NpbmcgPSB0aGlzLnNhdmVXb3JrSXRlbSgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMub3BlbkFjdGlvblVybChhY3Rpb24udXJsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5BY3Rpb25VcmwoYWN0aW9uLnVybCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmJwbUZvcm1FbCkge1xuICAgICAgICAgICAgdGhpcy53b3JrSXRlbS5kYXRhID0gdGhpcy5icG1Gb3JtRWwuZ2V0Rm9ybURhdGEoKTtcbiAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gcmVtb3ZlIHBlbmRpbmcgdGFzayBiZWNhdXNlIHRoZSBmb3JtIHdpbGwgYmUgZGVzdHJveWVkIHdpdGhvdXQgc2F2aW5nXG4gICAgICAgICAgICB0aGlzLmZpbmlzaFBlbmRpbmcoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5icG1TZXJ2aWNlXG4gICAgICAgICAgICAuZm9yd2FyZFdvcmtJdGVtKHRoaXMud29ya0l0ZW0sIGFjdGlvbilcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLm5vdGlmeS5zdWNjZXNzKFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLmJwbS5hY3Rpdml0eS5mb3J3YXJkLnN1Y2Nlc3MnKSxcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW0udGl0bGVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgdGhpcy5pdGVtID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSwgVXRpbHMudGhyb3cobnVsbCwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uYnBtLmFjdGl2aXR5LmZvcndhcmQuZXJyb3InKSwgdGhpcy53b3JrSXRlbS50aXRsZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkFjdGlvblVybCh1cmw6IHN0cmluZykge1xuICAgIGlmICh1cmwuc3Vic3RyKDAsIDQpID09PSAnaHR0cCcpIHtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgYSB3b3JrIGl0ZW1zIGZpbGUgZW50cnkuXG4gICAqIEBwYXJhbSBmaWxlIEZpbGVFbnRyeSBlbGVtZW50IHRvIGJlIHNlbGVjdGVkXG4gICAqL1xuICBvcGVuV29ya0l0ZW1Db250ZW50KGZpbGU/OiBGaWxlRW50cnkpIHtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb250ZW50RmlsZUlkID0gbnVsbDtcbiAgICAgIGlmICh0aGlzLmFwcGx5U2VsZWN0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLmZpbmQodGhpcy5hcHBseVNlbGVjdGlvbi5vdXQpLmZvY3VzKG51bGwpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkQ29udGVudEZpbGVJZCA9IGZpbGUuaWQ7XG4gICAgICBsZXQgcGFyYW1zID0ge1xuICAgICAgICBpZDogZmlsZS5pZCxcbiAgICAgICAgdHlwZTogZmlsZS50eXBlXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMuYXBwbHlTZWxlY3Rpb24pIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uZmluZCh0aGlzLmFwcGx5U2VsZWN0aW9uLm91dCkuZm9jdXMocGFyYW1zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIGZpbGUgKGF0dGFjaGVkIERNU09iamVjdCkgaW4gb2JqZWN0IHN0YXRlXG4gICAqIEBwYXJhbSBmaWxlXG4gICAqL1xuICBvcGVuV29ya0l0ZW1Db250ZW50SW5Db250ZXh0KGV2dCkge1xuICAgIGNvbnN0IGZpbGU6IEZpbGVFbnRyeSA9IGV2dC5kYXRhIHx8IHt9O1xuICAgIGNvbnN0IGZpbGVUeXBlOiBOYXZpZ2F0aW9uRXh0cmFzID0ge3F1ZXJ5UGFyYW1zOiB7dHlwZTogZmlsZS50eXBlfX07XG4gICAgaWYgKGV2dC5jdHJsS2V5KSB7XG4gICAgICB3aW5kb3cub3BlbihDZWxsUmVuZGVyZXIud2luZG93VVJJKHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUoWydvYmplY3QnLCBmaWxlLmlkXSwgZmlsZVR5cGUpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL29iamVjdCcsIGZpbGUuaWRdLCBmaWxlVHlwZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgY2xpcGJvYXJkIGNvbnRlbnQgdG8gdGhlIHdvcmsgaXRlbVxuICAgKi9cbiAgYWRkRnJvbUNsaXBib2FyZCgpIHtcbiAgICB0aGlzLmJwbVNlcnZpY2VcbiAgICAgIC5hZGRGaWxlRWxlbWVudHNGcm9tQ2xpcGJvYXJkKHRoaXMud29ya0l0ZW0sIHRoaXMuY2xpcGJvYXJkKVxuICAgICAgLnN1YnNjcmliZSh3b3JrSXRlbSA9PiB7XG4gICAgICAgIHRoaXMud29ya0l0ZW0gPSB3b3JrSXRlbTtcbiAgICAgICAgdGhpcy5jbGlwYm9hcmRTZXJ2aWNlLmNsZWFyKCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQ29udGVudEZpbGVJZCkge1xuICAgICAgICAgIC8vIG9wZW4gZmlyc3QgaXRlbSB3aGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWRcbiAgICAgICAgICB0aGlzLm9wZW5Xb3JrSXRlbUNvbnRlbnQodGhpcy53b3JrSXRlbS5maWxlWzBdKTtcbiAgICAgICAgfVxuICAgICAgfSwgVXRpbHMudGhyb3cobnVsbCwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ucHJvY2Vzcy5maWxlLm5vdGlmaWNhdGlvbi5lcnJvcicpLCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5wcm9jZXNzLmZpbGUubm90aWZpY2F0aW9uLmFkZC5tZXNzYWdlJykpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBmaWxlIGVudHJ5IGZyb20gdGhlIHdvcmsgaXRlbXMgZmlsZVxuICAgKiBAcGFyYW0gZmlsZSBUaGUgZmlsZSBlbnRyeSB0byBiZSByZW1vdmVkXG4gICAqIEBwYXJhbSBldnQgVGhlIGNsaWNrIGV2ZW50XG4gICAqL1xuICByZW1vdmVXb3JrSXRlbUNvbnRlbnQoZXZ0KSB7XG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmIChldnQuZGF0YSkge1xuICAgICAgY29uc3QgZmlsZTogRmlsZUVudHJ5ID0gZXZ0LmRhdGE7XG4gICAgICB0aGlzLmJwbVNlcnZpY2VcbiAgICAgICAgLnJlbW92ZUZpbGVFbGVtZW50KHRoaXMud29ya0l0ZW0ucHJvY2Vzc0lkLCB0aGlzLndvcmtJdGVtLmlkLCBmaWxlLmlkKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLndvcmtJdGVtLmZpbGUgPSB0aGlzLndvcmtJdGVtLmZpbGUuZmlsdGVyKGYgPT4gZi5pZCAhPT0gZmlsZS5pZCk7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb250ZW50RmlsZUlkID09PSBmaWxlLmlkKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5Xb3JrSXRlbUNvbnRlbnQoXG4gICAgICAgICAgICAgIHRoaXMud29ya0l0ZW0uZmlsZS5sZW5ndGggPyB0aGlzLndvcmtJdGVtLmZpbGVbMF0gOiBudWxsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgVXRpbHMudGhyb3cobnVsbCwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ucHJvY2Vzcy5maWxlLm5vdGlmaWNhdGlvbi5yZW1vdmUnKSwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ucHJvY2Vzcy5maWxlLm5vdGlmaWNhdGlvbi5yZW1vdmUubWVzc2FnZScpKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgdGhlIHdvcmsgaXRlbXMgZm9ybSBkYXRhXG4gICAqL1xuICBzYXZlV29ya0l0ZW1EYXRhKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZm9ybVN0YXRlICYmICF0aGlzLmZvcm1TdGF0ZS5pbnZhbGlkICYmIHRoaXMuZm9ybVN0YXRlLmRpcnR5KSB7XG4gICAgICAgIHRoaXMuYWN0aW9uUHJvY2Vzc2luZyA9IHRoaXMuc2F2ZVdvcmtJdGVtKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmZpbmlzaFBlbmRpbmcoKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUluYm94U2F0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LCA1MDApO1xuICB9XG5cbiAgcHJlcGFyZU5ld1dvcmtJdGVtKHdvcmtJdGVtOiBXb3JrSXRlbSk6IGJvb2xlYW4ge1xuICAgIHRoaXMud29ya0l0ZW0gPSB3b3JrSXRlbTtcbiAgICBjb25zdCB7YWN0aW9ucywgZm9ybSwgZGF0YX0gPSB0aGlzLndvcmtJdGVtO1xuICAgIHRoaXMuc2V0dXBXb3JrSXRlbSgpO1xuICAgIHRoaXMuc2V0Rm9ybU9wdGlvbnMoZm9ybSwgZGF0YSwgYWN0aW9ucyk7XG4gICAgdGhpcy5ub3RpZnkuc3VjY2VzcyhcbiAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLmJwbS5hY3Rpdml0eS5pbmRleGRhdGEuc2F2ZS5zdWNjZXNzJylcbiAgICApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRoZSBjdXJyZW50IHdvcmsgaXRlbVxuICAgKi9cbiAgcHJpdmF0ZSBzYXZlV29ya0l0ZW0oKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICB0aGlzLndvcmtJdGVtLmRhdGEgPSB0aGlzLmJwbUZvcm1FbC5nZXRGb3JtRGF0YSgpO1xuICAgIHJldHVybiB0aGlzLmJwbVNlcnZpY2Uuc2F2ZVdvcmtJdGVtKHRoaXMud29ya0l0ZW0pLnBpcGUoXG4gICAgICBtYXAodGhpcy5hZGREZWZhdWx0QWN0aW9uSWZFbXB0eSksXG4gICAgICBtYXAod29ya0l0ZW0gPT4gdGhpcy5wcmVwYXJlTmV3V29ya0l0ZW0od29ya0l0ZW0pKSxcbiAgICAgIGNhdGNoRXJyb3IoXG4gICAgICAgIFV0aWxzLmNhdGNoKFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uYnBtLmFjdGl2aXR5LmluZGV4ZGF0YS5zYXZlLmVycm9yJylcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgY3VycmVudCBpdGVtIGZyb20gdGhlIGluYm94LlxuICAgKi9cbiAgY29uZmlybUluYm94SXRlbSgpIHtcbiAgICB0aGlzLmFjdGlvblByb2Nlc3NpbmcgPSB0aGlzLmluYm94U2VydmljZVxuICAgICAgLnJlbW92ZUl0ZW0odGhpcy5pdGVtKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMubm90aWZ5LnN1Y2Nlc3MoXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uaW5ib3guYWN0aXZpdHkuY29uZmlybS5zdWNjZXNzJylcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5ldmVudFNlcnZpY2UudHJpZ2dlcihFbmFpb0V2ZW50LklOQk9YX0lURU1fQ09ORklSTUVELCB0aGlzLml0ZW0pO1xuICAgICAgICB0aGlzLmluYm94U2VydmljZS5yZWZyZXNoSW5ib3hTdGF0ZSgpO1xuICAgICAgfSwgVXRpbHMuY2F0Y2gobnVsbCwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8ucHJvY2Vzcy5pdGVtLnJlbW92ZS5mYWlsJykpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIHN0YXRlIGFuZCBkYXRhIGZvciB0aGUgY3VycmVudCB3b3JrIGl0ZW0uXG4gICAqL1xuICBwcml2YXRlIHNldHVwV29ya0l0ZW0oKSB7XG4gICAgdGhpcy5sb2NrZWQgPSB0aGlzLndvcmtJdGVtLnN0YXRlID09PSAnUEVSU09OJztcbiAgICB0aGlzLnByZXZlbnRDbGlja1Rocm91Z2ggPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5wcmV2ZW50Q2xpY2tUaHJvdWdoID0gZmFsc2UsIDEwMDApO1xuICAgIGNvbnN0IHtmb3JtLCBkYXRhfSA9IHRoaXMud29ya0l0ZW07XG4gICAgY29uc3Qgd29ya0l0ZW0gPSB7Zm9ybSwgZGF0YX07XG4gICAgdGhpcy53b3JrSXRlbUluZGV4ZGF0YSA9IGZvcm0gJiYgZGF0YSA/IHdvcmtJdGVtIDogbnVsbDtcblxuICAgIC8vIGZldGNoIGhpc3RvcnlcbiAgICB0aGlzLmJwbVNlcnZpY2VcbiAgICAgIC5nZXRQcm9jZXNzSGlzdG9yeSh0aGlzLndvcmtJdGVtLnByb2Nlc3NJZClcbiAgICAgIC5waXBlKG1hcChyZXMgPT4ge1xuICAgICAgICByZXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICBpZiAoaXRlbS5lZGl0b3IpIHtcbiAgICAgICAgICAgIGl0ZW0uZGF0YS5pbWFnZSA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckltYWdlVXJpKGl0ZW0uZWRpdG9yLmlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBzb3J0IGJ5IG51bWJlciBiZWNhdXNlIHRoaXMgaXMgdGhlIGF1dG8taW5jcmVtZW50aW5nXG4gICAgICAgIC8vIGluZGV4IG9mIGFkZGVkIGhpc3RvcnkgZW50cmllc1xuICAgICAgICB0aGlzLmhpc3RvcnkgPSByZXMuc29ydCgoYSwgYikgPT4gYi5udW1iZXIgLSBhLm51bWJlcik7XG4gICAgICB9KSlcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHRyYWNrQnlDb2RlKGluZGV4LCBpdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0uY29kZTtcbiAgfVxuXG4gIHRyYWNrQnlJZChpbmRleCwgaXRlbSkge1xuICAgIHJldHVybiBpdGVtLmlkO1xuICB9XG5cbiAgdHJhY2tCeUluZGV4KGluZGV4LCBpdGVtKSB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gc3Vic2NyaWJlIGZvciBjaGFuZ2VzIHRvIHRoZSBjbGlwYm9hcmQgdG8gZW5hYmxlIGFkZGluZyBjb250ZW50cyB0byB0aGUgd29yayBpdGVtXG4gICAgdGhpcy5jbGlwYm9hcmRTZXJ2aWNlLmNsaXBib2FyZCRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudERlc3Ryb3llZCQpKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgKGNsaXBib2FyZDogQ2xpcGJvYXJkKSA9PlxuICAgICAgICAodGhpcy5jbGlwYm9hcmQgPVxuICAgICAgICAgIGNsaXBib2FyZC5hY3Rpb24gPT09IENsaXBib2FyZEFjdGlvbi5DT1BZID8gY2xpcGJvYXJkIDogbnVsbClcbiAgICAgICk7XG4gICAgLy8gY29tcG9uZW50IGlzIG9ubHkgaW50ZXJlc3RlZCBpbiBjb3BpZWQgaXRlbXNcblxuICAgIGlmICh0aGlzLmFwcGx5U2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvblxuICAgICAgICAuZmluZCh0aGlzLmFwcGx5U2VsZWN0aW9uLmluKVxuICAgICAgICAuZm9jdXMkLnBpcGUodGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkJCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW0gPSBpdGVtO1xuICAgICAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRJdGVtKHRoaXMuc3RvcmFnZUtleUxhc3RJdGVtSUQsIHRoaXMuaXRlbS5pZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgbGV0IHBhbmVscyA9IHRoaXMudGFiUGFuZWxzLnRvQXJyYXkoKTtcbiAgICB0aGlzLnRhYlBsdWdpbnMuZm9yRWFjaChcbiAgICAgIHAgPT4gKHBhbmVscyA9IHBhbmVscy5jb25jYXQocC50YWJQYW5lbHMudG9BcnJheSgpKSlcbiAgICApO1xuICAgIHRoaXMuZXh0ZXJuYWxQYW5lbHMucmVzZXQocGFuZWxzKTtcbiAgfVxufVxuIl19
449
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5ib3gtZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9pbmJveC1kZXRhaWxzL2luYm94LWRldGFpbHMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUN4RSxPQUFPLEVBRUwsU0FBUyxFQUNULGVBQWUsRUFDZixXQUFXLEVBQ1gsS0FBSyxFQUVMLFNBQVMsRUFDVCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFtQixNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsVUFBVSxFQUVWLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLFlBQVksRUFFWixTQUFTLEVBQ1QsWUFBWSxFQUNaLG1CQUFtQixFQUNuQixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxLQUFLLEVBSU4sTUFBTSxjQUFjLENBQUM7QUFFdEIsT0FBTyxFQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0saUVBQWlFLENBQUM7QUFDdEcsT0FBTyxFQUFrQixnQkFBZ0IsRUFBQyxNQUFNLHFEQUFxRCxDQUFDO0FBSXRHLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBRWpGLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBTy9FLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxvQkFBb0I7SUFvRTdELFlBQ1UsVUFBc0IsRUFDdEIsV0FBd0IsRUFDeEIsWUFBMEIsRUFDMUIsU0FB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aUI7eUJBQ2pDLGVBQWUsU0FBQyxrQkFBa0I7eUJBSWxDLEtBQUs7NkJBQ0wsS0FBSzttQkFFTCxLQUFLLFNBQUMsTUFBTTt1QkFrQlosV0FBVyxTQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2VsbFJlbmRlcmVyfSBmcm9tICcuLy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL2FwaS9ncmlkLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmF2aWdhdGlvbkV4dHJhcywgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgQnBtU2VydmljZSxcbiAgQ2xpcGJvYXJkLFxuICBDbGlwYm9hcmRBY3Rpb24sXG4gIENsaXBib2FyZFNlcnZpY2UsXG4gIEVuYWlvRXZlbnQsXG4gIEV2ZW50U2VydmljZSxcbiAgRmlsZUVudHJ5LFxuICBJbmJveEl0ZW0sXG4gIEluYm94U2VydmljZSxcbiAgTG9jYWxTdG9yYWdlU2VydmljZSxcbiAgTm90aWZpY2F0aW9uc1NlcnZpY2UsXG4gIFRyYW5zbGF0ZVNlcnZpY2UsXG4gIFVzZXJTZXJ2aWNlLFxuICBVdGlscyxcbiAgV29ya0l0ZW0sXG4gIFdvcmtJdGVtQWN0aW9uLFxuICBXb3JrSXRlbUhpc3RvcnlFbnRyeVxufSBmcm9tICdAZW8tc2RrL2NvcmUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBtYXAsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtFbXB0eVN0YXRlfSBmcm9tICcuLi8uLi9lby1mcmFtZXdvcmstY29yZS9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHtQZW5kaW5nQ2hhbmdlc1NlcnZpY2V9IGZyb20gJy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL3BlbmRpbmctY2hhbmdlcy9wZW5kaW5nLWNoYW5nZXMuc2VydmljZSc7XG5pbXBvcnQge1NlbGVjdGlvbkNvbmZpZywgU2VsZWN0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvc2VsZWN0aW9uL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7Rm9ybVN0YXR1c0NoYW5nZWRFdmVudH0gZnJvbSAnLi4vb2JqZWN0LWZvcm0vZm9ybS1zdGF0dXMtY2hhbmdlZC1ldmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtPYmplY3RGb3JtT3B0aW9uc30gZnJvbSAnLi4vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0tb3B0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtPYmplY3RGb3JtQ29tcG9uZW50fSBmcm9tICcuLi9vYmplY3QtZm9ybS9vYmplY3QtZm9ybS9vYmplY3QtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHtUYWJQbHVnaW5Db21wb25lbnR9IGZyb20gJy4uL3BsdWdpbnMvcGx1Z2luLmNvbXBvbmVudCc7XG5pbXBvcnQge1RhYlBhbmVsQ29tcG9uZW50fSBmcm9tICcuLi90YWItY29udGFpbmVyL3RhYi1wYW5lbC90YWItcGFuZWwuY29tcG9uZW50JztcbmltcG9ydCB7SW5kZXhEYXRhfSBmcm9tICcuLi91aS9pbmRleGRhdGEtc3VtbWFyeS9pbmRleGRhdGEtc3VtbWFyeS5jb21wb25lbnQnO1xuaW1wb3J0IHtVbnN1YnNjcmliZU9uRGVzdHJveX0gZnJvbSAnLi4vdXRpbC91bnN1YnNjcmliZS91bnN1YnNjcmliZS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlby1pbmJveC1kZXRhaWxzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2luYm94LWRldGFpbHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbmJveC1kZXRhaWxzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSW5ib3hEZXRhaWxzQ29tcG9uZW50IGV4dGVuZHMgVW5zdWJzY3JpYmVPbkRlc3Ryb3lcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKCdicG1Gb3JtJykgYnBtRm9ybUVsOiBPYmplY3RGb3JtQ29tcG9uZW50O1xuXG4gIHByaXZhdGUgZGVmYXVsdFdvcmtJdGVtQWN0aW9uOiBXb3JrSXRlbUFjdGlvbjtcblxuICAvLyBJRCBzZXQgYnkgcGVuZGluZ0NoYW5nZXMgc2VydmljZSB3aGVuIGVkaXRpbmcgaW5kZXhkYXRhXG4gIC8vIFVzZWQgdG8gZmluaXNoIHRoZSBwZW5kaW5nIHRhc2sgd2hlbiBlZGl0aW5nIGlzIGRvbmVcbiAgcHJpdmF0ZSBwZW5kaW5nVGFza0lkOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBfaXRlbTogSW5ib3hJdGVtO1xuICB3b3JrSXRlbTogV29ya0l0ZW07XG4gIGhpc3Rvcnk6IFdvcmtJdGVtSGlzdG9yeUVudHJ5W107XG4gIC8vIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0aGUgd29yayBpdGVtIGlzIGxvY2tlZCBieSB0aGUgdXNlclxuICBsb2NrZWQ6IGJvb2xlYW47XG4gIC8vIENPT0wtMTE1MDZcbiAgcHJldmVudENsaWNrVGhyb3VnaDogYm9vbGVhbjtcbiAgLy8gY3VycmVudCBjbGlwYm9hcmQgY29udGVudHNcbiAgY2xpcGJvYXJkOiBDbGlwYm9hcmQ7XG5cbiAgLy8gdXNlZCBmb3IgaGFuZGxpbmcgU1VCU0NSSVBUSU9OUyBhbmQgUkVTVUJNSVNTSU9OU1xuICBzZXR0aW5nczoge1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgYWN0aW9uVGl0bGU6IHN0cmluZztcbiAgfTtcbiAgZm9ybVN0YXRlOiBGb3JtU3RhdHVzQ2hhbmdlZEV2ZW50O1xuICBmb3JtT3B0aW9uczogT2JqZWN0Rm9ybU9wdGlvbnM7XG4gIHNlbGVjdGVkQ29udGVudEZpbGVJZDogc3RyaW5nO1xuICB3b3JrSXRlbUluZGV4ZGF0YTogSW5kZXhEYXRhO1xuICBwZXJmb3JtZXJTaG93OiBib29sZWFuO1xuICBzdWJzdGl0dXRlU2hvdzogYm9vbGVhbjtcbiAgYWN0aW9uUHJvY2Vzc2luZzogU3Vic2NyaXB0aW9uIHwgYW55ID0ge2Nsb3NlZDogdHJ1ZX07XG4gIGluaXRpYWxpemluZzogU3Vic2NyaXB0aW9uIHwgYW55ID0ge2Nsb3NlZDogdHJ1ZX07XG4gIGZpbGVzQWRkaW5nOiBTdWJzY3JpcHRpb24gfCBhbnkgPSB7Y2xvc2VkOiB0cnVlfTtcbiAgbG9hZEVycm9yOiBib29sZWFuO1xuICBzdG9yYWdlS2V5TGFzdEl0ZW1JRCA9ICdlby5pbmJveC5sYXN0SXRlbUlEJztcblxuICBleHRlcm5hbFBhbmVscyA9IG5ldyBRdWVyeUxpc3Q8VGFiUGFuZWxDb21wb25lbnQ+KCk7XG4gIEBDb250ZW50Q2hpbGRyZW4oVGFiUGFuZWxDb21wb25lbnQpIHRhYlBhbmVsczogUXVlcnlMaXN0PFRhYlBhbmVsQ29tcG9uZW50PjtcbiAgQENvbnRlbnRDaGlsZHJlbihUYWJQbHVnaW5Db21wb25lbnQpIHRhYlBsdWdpbnM6IFF1ZXJ5TGlzdDxcbiAgICBUYWJQbHVnaW5Db21wb25lbnRcbiAgPjtcblxuICBASW5wdXQoKSBlbXB0eVN0YXRlOiBFbXB0eVN0YXRlO1xuICBASW5wdXQoKSBhcHBseVNlbGVjdGlvbjogU2VsZWN0aW9uQ29uZmlnO1xuXG4gIEBJbnB1dCgnaXRlbScpXG4gIHNldCBpdGVtKGk6IEluYm94SXRlbSkge1xuICAgIHRoaXMuX2l0ZW0gPSBpO1xuICAgIGlmIChpKSB7XG4gICAgICAvLyByZXNldCB2YWx1ZXNcbiAgICAgIHRoaXMud29ya0l0ZW0gPSBudWxsO1xuICAgICAgdGhpcy5oaXN0b3J5ID0gW107XG4gICAgICB0aGlzLmxvY2tlZCA9IGZhbHNlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnByb2Nlc3MoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmZpbmQodGhpcy5hcHBseVNlbGVjdGlvbi5vdXQpLmZvY3VzKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpdGVtKCkge1xuICAgIHJldHVybiB0aGlzLl9pdGVtO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtdHlwZScpIGdldCBkYXRhVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtID8gdGhpcy5pdGVtLnR5cGUgOiAnbm9uZSc7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGJwbVNlcnZpY2U6IEJwbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbmJveFNlcnZpY2U6IEluYm94U2VydmljZSxcbiAgICBwcml2YXRlIHNlbGVjdGlvbjogU2VsZWN0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgZXZlbnRTZXJ2aWNlOiBFdmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjbGlwYm9hcmRTZXJ2aWNlOiBDbGlwYm9hcmRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGVuZGluZ0NoYW5nZXM6IFBlbmRpbmdDaGFuZ2VzU2VydmljZSxcbiAgICBwcml2YXRlIG5vdGlmeTogTm90aWZpY2F0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogTG9jYWxTdG9yYWdlU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZGVmYXVsdFdvcmtJdGVtQWN0aW9uID0ge1xuICAgICAgY29kZTogMCxcbiAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5wcm9jZXNzLnRhc2suYWN0aW9ucy5kZWZhdWx0LnRpdGxlJyksXG4gICAgICB0eXBlOiAnRk9SV0FSRCdcbiAgICB9O1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICBpZiAodGhpcy5pdGVtLnR5cGUgPT09IEluYm94SXRlbS5UWVBFX0JQTSkge1xuICAgICAgdGhpcy5jcmVhdGVCUE1Xb3JrSXRlbSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLml0ZW0gPSB0aGlzLl9pdGVtO1xuICAgIH1cbiAgfVxuXG4gIG9uRm9ybVN0YXR1c0NoYW5nZWQoZXZ0OiBGb3JtU3RhdHVzQ2hhbmdlZEV2ZW50KSB7XG4gICAgdGhpcy5mb3JtU3RhdGUgPSBldnQ7XG4gICAgaWYgKHRoaXMuZm9ybVN0YXRlLmRpcnR5KSB7XG4gICAgICB0aGlzLnN0YXJ0UGVuZGluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbmlzaFBlbmRpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0UGVuZGluZygpIHtcbiAgICAvLyBiZWNhdXNlIHRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIGZvcm0gc3RhdHVzIGNoYW5nZXMsXG4gICAgLy8gcGVuZGluZyB0YXNrIHdpbGwgb25seSBiZSBzdGFydGVkIG9uY2UgdW50aWwgaXQgd2FzIGZpbmlzaGVkXG4gICAgaWYgKCF0aGlzLnBlbmRpbmdDaGFuZ2VzLmhhc1BlbmRpbmdUYXNrKHRoaXMucGVuZGluZ1Rhc2tJZCB8fCAnICcpKSB7XG4gICAgICB0aGlzLnBlbmRpbmdUYXNrSWQgPSB0aGlzLnBlbmRpbmdDaGFuZ2VzLnN0YXJ0VGFzaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmluaXNoUGVuZGluZygpIHtcbiAgICB0aGlzLnBlbmRpbmdDaGFuZ2VzLmZpbmlzaFRhc2sodGhpcy5wZW5kaW5nVGFza0lkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIHRoZSBjdXJyZW50IGluYm94IGl0ZW1cbiAgICovXG4gIHByaXZhdGUgcHJvY2VzcygpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRFcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuaW5pdGlhbGl6aW5nLmNsb3NlZCA9IGZhbHNlO1xuXG4gICAgc3dpdGNoICh0aGlzLml0ZW0udHlwZSkge1xuICAgICAgY2FzZSBJbmJveEl0ZW0uVFlQRV9CUE06IHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXppbmcgPSB0aGlzLmNyZWF0ZUJQTVdvcmtJdGVtKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBJbmJveEl0ZW0uVFlQRV9TVUJTQ1JJUFRJT046IHtcbiAgICAgICAgdGhpcy5jcmVhdGVETVNJdGVtKCdzdWJzY3JpcHRpb24nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIEluYm94SXRlbS5UWVBFX1JFU1VCTUlTU0lPTjoge1xuICAgICAgICB0aGlzLmNyZWF0ZURNU0l0ZW0oJ3Jlc3VibWlzc2lvbicpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjcmVhdGVETVNJdGVtKGRtc1R5cGUpIHtcbiAgICB0aGlzLnNldHRpbmdzID0ge1xuICAgICAgZGVzY3JpcHRpb246IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgIGBlby5wcm9jZXNzLmRldGFpbHMudGFzay4ke2Rtc1R5cGV9LmRlc2NyaXB0aW9uYFxuICAgICAgKSxcbiAgICAgIGFjdGlvblRpdGxlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICBgZW8ucHJvY2Vzcy5kZXRhaWxzLmJ1dHRvbi4ke2Rtc1R5cGV9LnJlbW92ZWBcbiAgICAgIClcbiAgICB9O1xuICAgIHRoaXMub3BlbldvcmtJdGVtQ29udGVudCh0aGlzLml0ZW0udGFyZ2V0KTtcbiAgICB0aGlzLmluaXRpYWxpemluZy5jbG9zZWQgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGREZWZhdWx0QWN0aW9uSWZFbXB0eSA9IChyZXM6IFdvcmtJdGVtKTogV29ya0l0ZW0gPT4ge1xuICAgIGlmICghcmVzLmFjdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgcmVzLmFjdGlvbnMgPSBbdGhpcy5kZWZhdWx0V29ya0l0ZW1BY3Rpb25dO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgLy8gZm9yIGl0ZW1zIG9mIHR5cGUgJ0JQTScgZmV0Y2ggd29yayBpdGVtIGZvciBtb3JlIGluZm9ybWF0aW9uc1xuICBjcmVhdGVCUE1Xb3JrSXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy5icG1TZXJ2aWNlXG4gICAgICAuZ2V0V29ya0l0ZW0odGhpcy5pdGVtLnNvdXJjZUlkLCB0aGlzLml0ZW0uaWQpXG4gICAgICAucGlwZShtYXAodGhpcy5hZGREZWZhdWx0QWN0aW9uSWZFbXB0eSkpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICByZXMgPT4ge1xuICAgICAgICAgIHRoaXMud29ya0l0ZW0gPSByZXM7XG4gICAgICAgICAgdGhpcy5zZXR1cFdvcmtJdGVtKCk7XG4gICAgICAgICAgdGhpcy5zZXRGb3JtT3B0aW9ucyhcbiAgICAgICAgICAgIHRoaXMud29ya0l0ZW0uZm9ybSxcbiAgICAgICAgICAgIHRoaXMud29ya0l0ZW0uZGF0YSxcbiAgICAgICAgICAgIHRoaXMud29ya0l0ZW0uYWN0aW9uc1xuICAgICAgICAgICk7XG4gICAgICAgICAgLy8gYXV0by1zZWxlY3QgZmlyc3QgYXR0YWNoZWQgY29udGVudFxuICAgICAgICAgIHRoaXMub3BlbldvcmtJdGVtQ29udGVudChcbiAgICAgICAgICAgIHRoaXMud29ya0l0ZW0uZmlsZS5sZW5ndGggPyB0aGlzLndvcmtJdGVtLmZpbGVbMF0gOiBudWxsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLm5vdGlmeS5lcnJvcihcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnByb2Nlc3MuZGV0YWlscy53b3JraXRlbS5sb2FkLmZhaWwnKSxcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAgICdlby5wcm9jZXNzLmRldGFpbHMud29ya2l0ZW0ubG9hZC5mYWlsLmRlc2NyaXB0aW9uJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvcm1PcHRpb25zKGZvcm0sIGRhdGEsIGFjdGlvbnM6IFdvcmtJdGVtQWN0aW9uW10pIHtcbiAgICBpZiAoZm9ybSkge1xuICAgICAgZm9ybS5zaXR1YXRpb24gPSAnRURJVCc7XG4gICAgICB0aGlzLmZvcm1PcHRpb25zID0ge1xuICAgICAgICAuLi57XG4gICAgICAgICAgZm9ybU1vZGVsOiBmb3JtLFxuICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgYWN0aW9uczogYWN0aW9ucyA/IHRoaXMudHJhbnNmb3JtQWN0aW9ucyhhY3Rpb25zKSA6IHt9LFxuICAgICAgICAgIC8vIGZvcm0gc2NyaXB0IHdpbGwgYmUgcHJvdmlkZWQgd2l0aCB0aGUgbGlzdCBvZiBmaWxlIGVudHJpZXNcbiAgICAgICAgICAvLyBhdHRhY2hlZCB0byB0aGUgY3VycmVudCB3b3JrIGl0ZW1cbiAgICAgICAgICBvYmplY3RzOiB0aGlzLndvcmtJdGVtLmZpbGVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50cmFuc2Zvcm1BY3Rpb25zKGFjdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSW5ib3hTYXRlKCkge1xuICAgIHRoaXMuaW5ib3hTZXJ2aWNlLnJlZnJlc2hJbmJveFN0YXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybUFjdGlvbnMoYWN0aW9ucykge1xuICAgIGxldCB0cmFuc2Zvcm1lZEFjdGlvbnMgPSB7fTtcbiAgICBhY3Rpb25zLmZvckVhY2goYSA9PiB7XG4gICAgICBpZiAoYS5mZWFzaWJsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGEuZmVhc2libGUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgYS5mZWFzaWJpbGl0eSA9IHZhbHVlID0+IHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhLmZlYXNpYmxlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGEuZmVhc2libGU7XG4gICAgICB9O1xuICAgICAgdHJhbnNmb3JtZWRBY3Rpb25zW2EuY29kZS50b1N0cmluZygpXSA9IGE7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRyYW5zZm9ybWVkQWN0aW9ucztcbiAgfVxuXG4gIC8qIExvY2tzIGEgd29yayBpdGVtIChwZXJzb25hbGl6ZSkgKi9cbiAgbG9ja1dvcmtJdGVtKCkge1xuICAgIHRoaXMuYWN0aW9uUHJvY2Vzc2luZyA9IHRoaXMuYnBtU2VydmljZVxuICAgICAgLmxvY2tXb3JrSXRlbSh0aGlzLndvcmtJdGVtKVxuICAgICAgLnBpcGUobWFwKHRoaXMuYWRkRGVmYXVsdEFjdGlvbklmRW1wdHkpKVxuICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICBjb25zdCB7YWN0aW9ucywgZGF0YSwgZm9ybX0gPSByZXM7XG4gICAgICAgIHRoaXMud29ya0l0ZW0gPSByZXM7XG4gICAgICAgIHRoaXMuc2V0dXBXb3JrSXRlbSgpO1xuICAgICAgICB0aGlzLnNldEZvcm1PcHRpb25zKGZvcm0sIGRhdGEsIGFjdGlvbnMpO1xuICAgICAgICB0aGlzLnVwZGF0ZUluYm94U2F0ZSgpO1xuICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzID09PSA0MDkpIHtcbiAgICAgICAgICBVdGlscy50aHJvdyhudWxsLCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5icG0uZXZlbnQuc2NyaXB0LmV4ZWN1dGlvbi5lcnJvcicpLCB0aGlzLndvcmtJdGVtLnRpdGxlKS5jYWxsKHRoaXMsIHt9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBVdGlscy50aHJvdyhudWxsLCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5wcm9jZXNzLmFjdGl2aXR5LmxvY2suZGVuaWVkJyksIHRoaXMud29ya0l0ZW0udGl0bGUpLmNhbGwodGhpcywge30pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbi1Mb2NrcyBhIHdvcmsgaXRlbSAoZGUtcGVyc29uYWxpemUpXG4gICAqL1xuICB1bmxvY2tXb3JrSXRlbSgpIHtcbiAgICBpZiAoIXRoaXMucGVuZGluZ0NoYW5nZXMuY2hlY2soKSkge1xuICAgICAgdGhpcy5hY3Rpb25Qcm9jZXNzaW5nID0gdGhpcy5icG1TZXJ2aWNlXG4gICAgICAgIC51bmxvY2tXb3JrSXRlbSh0aGlzLndvcmtJdGVtKVxuICAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgdGhpcy53b3JrSXRlbSA9IHJlcztcbiAgICAgICAgICB0aGlzLnNldHVwV29ya0l0ZW0oKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUluYm94U2F0ZSgpO1xuICAgICAgICB9LCBVdGlscy50aHJvdyhudWxsLCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5wcm9jZXNzLmFjdGl2aXR5LnVubG9jay5kZW5pZWQnKSwgdGhpcy53b3JrSXRlbS50aXRsZSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIHdvcmsgaXRlbXMgYWN0aW9uLlxuICAgKiBAcGFyYW0gYWN0aW9uIFRoZSBhY3Rpb24gdG8gYmUgZXhlY3V0ZXNcbiAgICovXG4gIGV4ZWN1dGVXb3JrSXRlbUFjdGlvbihhY3Rpb246IFdvcmtJdGVtQWN0aW9uKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9ybVN0YXRlIHx8ICF0aGlzLmZvcm1TdGF0ZS5pbnZhbGlkKSB7XG4gICAgICAgIGlmIChhY3Rpb24udXJsKSB7XG4gICAgICAgICAgLy8gcHJvY2VzcyBleHRlcm5hbCBhY3Rpb24gYnkgc2F2aW5nIHdvcmsgaXRlbSBhbmQgcmVkaXJlY3QgdG8gYWN0aW9ucyB1cmxcbiAgICAgICAgICBpZiAodGhpcy5icG1Gb3JtRWwpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvY2Vzc2luZyA9IHRoaXMuc2F2ZVdvcmtJdGVtKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5vcGVuQWN0aW9uVXJsKGFjdGlvbi51cmwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3BlbkFjdGlvblVybChhY3Rpb24udXJsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuYnBtRm9ybUVsKSB7XG4gICAgICAgICAgICB0aGlzLndvcmtJdGVtLmRhdGEgPSB0aGlzLmJwbUZvcm1FbC5nZXRGb3JtRGF0YSgpO1xuICAgICAgICAgICAgLy8gd2UgbmVlZCB0byByZW1vdmUgcGVuZGluZyB0YXNrIGJlY2F1c2UgdGhlIGZvcm0gd2lsbCBiZSBkZXN0cm95ZWQgd2l0aG91dCBzYXZpbmdcbiAgICAgICAgICAgIHRoaXMuZmluaXNoUGVuZGluZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmJwbVNlcnZpY2VcbiAgICAgICAgICAgIC5mb3J3YXJkV29ya0l0ZW0odGhpcy53b3JrSXRlbSwgYWN0aW9uKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMubm90aWZ5LnN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uYnBtLmFjdGl2aXR5LmZvcndhcmQuc3VjY2VzcycpLFxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbS50aXRsZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB0aGlzLml0ZW0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9LCBVdGlscy50aHJvdyhudWxsLCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5icG0uYWN0aXZpdHkuZm9yd2FyZC5lcnJvcicpLCB0aGlzLndvcmtJdGVtLnRpdGxlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCA1MDApO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuQWN0aW9uVXJsKHVybDogc3RyaW5nKSB7XG4gICAgaWYgKHVybC5zdWJzdHIoMCwgNCkgPT09ICdodHRwJykge1xuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodXJsKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0cyBhIHdvcmsgaXRlbXMgZmlsZSBlbnRyeS5cbiAgICogQHBhcmFtIGZpbGUgRmlsZUVudHJ5IGVsZW1lbnQgdG8gYmUgc2VsZWN0ZWRcbiAgICovXG4gIG9wZW5Xb3JrSXRlbUNvbnRlbnQoZmlsZT86IEZpbGVFbnRyeSkge1xuICAgIGlmICghZmlsZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbnRlbnRGaWxlSWQgPSBudWxsO1xuICAgICAgaWYgKHRoaXMuYXBwbHlTZWxlY3Rpb24pIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uZmluZCh0aGlzLmFwcGx5U2VsZWN0aW9uLm91dCkuZm9jdXMobnVsbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb250ZW50RmlsZUlkID0gZmlsZS5pZDtcbiAgICAgIGxldCBwYXJhbXMgPSB7XG4gICAgICAgIGlkOiBmaWxlLmlkLFxuICAgICAgICB0eXBlOiBmaWxlLnR5cGVcbiAgICAgIH07XG4gICAgICBpZiAodGhpcy5hcHBseVNlbGVjdGlvbikge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5maW5kKHRoaXMuYXBwbHlTZWxlY3Rpb24ub3V0KS5mb2N1cyhwYXJhbXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgZmlsZSAoYXR0YWNoZWQgRE1TT2JqZWN0KSBpbiBvYmplY3Qgc3RhdGVcbiAgICogQHBhcmFtIGZpbGVcbiAgICovXG4gIG9wZW5Xb3JrSXRlbUNvbnRlbnRJbkNvbnRleHQoZXZ0KSB7XG4gICAgY29uc3QgZmlsZTogRmlsZUVudHJ5ID0gZXZ0LmRhdGEgfHwge307XG4gICAgY29uc3QgZmlsZVR5cGU6IE5hdmlnYXRpb25FeHRyYXMgPSB7cXVlcnlQYXJhbXM6IHt0eXBlOiBmaWxlLnR5cGV9fTtcbiAgICBpZiAoZXZ0LmN0cmxLZXkpIHtcbiAgICAgIHdpbmRvdy5vcGVuKENlbGxSZW5kZXJlci53aW5kb3dVUkkodGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbJ29iamVjdCcsIGZpbGUuaWRdLCBmaWxlVHlwZSkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvb2JqZWN0JywgZmlsZS5pZF0sIGZpbGVUeXBlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBjbGlwYm9hcmQgY29udGVudCB0byB0aGUgd29yayBpdGVtXG4gICAqL1xuICBhZGRGcm9tQ2xpcGJvYXJkKCkge1xuICAgIHRoaXMuYnBtU2VydmljZVxuICAgICAgLmFkZEZpbGVFbGVtZW50c0Zyb21DbGlwYm9hcmQodGhpcy53b3JrSXRlbSwgdGhpcy5jbGlwYm9hcmQpXG4gICAgICAuc3Vic2NyaWJlKHdvcmtJdGVtID0+IHtcbiAgICAgICAgdGhpcy53b3JrSXRlbSA9IHdvcmtJdGVtO1xuICAgICAgICB0aGlzLmNsaXBib2FyZFNlcnZpY2UuY2xlYXIoKTtcblxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDb250ZW50RmlsZUlkKSB7XG4gICAgICAgICAgLy8gb3BlbiBmaXJzdCBpdGVtIHdoZW4gbm90aGluZyBpcyBzZWxlY3RlZFxuICAgICAgICAgIHRoaXMub3BlbldvcmtJdGVtQ29udGVudCh0aGlzLndvcmtJdGVtLmZpbGVbMF0pO1xuICAgICAgICB9XG4gICAgICB9LCBVdGlscy50aHJvdyhudWxsLCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5wcm9jZXNzLmZpbGUubm90aWZpY2F0aW9uLmVycm9yJyksIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnByb2Nlc3MuZmlsZS5ub3RpZmljYXRpb24uYWRkLm1lc3NhZ2UnKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIGZpbGUgZW50cnkgZnJvbSB0aGUgd29yayBpdGVtcyBmaWxlXG4gICAqIEBwYXJhbSBmaWxlIFRoZSBmaWxlIGVudHJ5IHRvIGJlIHJlbW92ZWRcbiAgICogQHBhcmFtIGV2dCBUaGUgY2xpY2sgZXZlbnRcbiAgICovXG4gIHJlbW92ZVdvcmtJdGVtQ29udGVudChldnQpIHtcbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGV2dC5kYXRhKSB7XG4gICAgICBjb25zdCBmaWxlOiBGaWxlRW50cnkgPSBldnQuZGF0YTtcbiAgICAgIHRoaXMuYnBtU2VydmljZVxuICAgICAgICAucmVtb3ZlRmlsZUVsZW1lbnQodGhpcy53b3JrSXRlbS5wcm9jZXNzSWQsIHRoaXMud29ya0l0ZW0uaWQsIGZpbGUuaWQpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMud29ya0l0ZW0uZmlsZSA9IHRoaXMud29ya0l0ZW0uZmlsZS5maWx0ZXIoZiA9PiBmLmlkICE9PSBmaWxlLmlkKTtcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbnRlbnRGaWxlSWQgPT09IGZpbGUuaWQpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbldvcmtJdGVtQ29udGVudChcbiAgICAgICAgICAgICAgdGhpcy53b3JrSXRlbS5maWxlLmxlbmd0aCA/IHRoaXMud29ya0l0ZW0uZmlsZVswXSA6IG51bGxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBVdGlscy50aHJvdyhudWxsLCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5wcm9jZXNzLmZpbGUubm90aWZpY2F0aW9uLnJlbW92ZScpLCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5wcm9jZXNzLmZpbGUubm90aWZpY2F0aW9uLnJlbW92ZS5tZXNzYWdlJykpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSB0aGUgd29yayBpdGVtcyBmb3JtIGRhdGFcbiAgICovXG4gIHNhdmVXb3JrSXRlbURhdGEoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5mb3JtU3RhdGUgJiYgIXRoaXMuZm9ybVN0YXRlLmludmFsaWQgJiYgdGhpcy5mb3JtU3RhdGUuZGlydHkpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25Qcm9jZXNzaW5nID0gdGhpcy5zYXZlV29ya0l0ZW0oKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZmluaXNoUGVuZGluZygpO1xuICAgICAgICAgIHRoaXMudXBkYXRlSW5ib3hTYXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIDUwMCk7XG4gIH1cblxuICBwcmVwYXJlTmV3V29ya0l0ZW0od29ya0l0ZW06IFdvcmtJdGVtKTogYm9vbGVhbiB7XG4gICAgdGhpcy53b3JrSXRlbSA9IHdvcmtJdGVtO1xuICAgIGNvbnN0IHthY3Rpb25zLCBmb3JtLCBkYXRhfSA9IHRoaXMud29ya0l0ZW07XG4gICAgdGhpcy5zZXR1cFdvcmtJdGVtKCk7XG4gICAgdGhpcy5zZXRGb3JtT3B0aW9ucyhmb3JtLCBkYXRhLCBhY3Rpb25zKTtcbiAgICB0aGlzLm5vdGlmeS5zdWNjZXNzKFxuICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uYnBtLmFjdGl2aXR5LmluZGV4ZGF0YS5zYXZlLnN1Y2Nlc3MnKVxuICAgICk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgdGhlIGN1cnJlbnQgd29yayBpdGVtXG4gICAqL1xuICBwcml2YXRlIHNhdmVXb3JrSXRlbSgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHRoaXMud29ya0l0ZW0uZGF0YSA9IHRoaXMuYnBtRm9ybUVsLmdldEZvcm1EYXRhKCk7XG4gICAgcmV0dXJuIHRoaXMuYnBtU2VydmljZS5zYXZlV29ya0l0ZW0odGhpcy53b3JrSXRlbSkucGlwZShcbiAgICAgIG1hcCh0aGlzLmFkZERlZmF1bHRBY3Rpb25JZkVtcHR5KSxcbiAgICAgIG1hcCh3b3JrSXRlbSA9PiB0aGlzLnByZXBhcmVOZXdXb3JrSXRlbSh3b3JrSXRlbSkpLFxuICAgICAgY2F0Y2hFcnJvcihcbiAgICAgICAgVXRpbHMuY2F0Y2goXG4gICAgICAgICAgbnVsbCxcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5icG0uYWN0aXZpdHkuaW5kZXhkYXRhLnNhdmUuZXJyb3InKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBjdXJyZW50IGl0ZW0gZnJvbSB0aGUgaW5ib3guXG4gICAqL1xuICBjb25maXJtSW5ib3hJdGVtKCkge1xuICAgIHRoaXMucHJldmVudENsaWNrVGhyb3VnaCA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnByZXZlbnRDbGlja1Rocm91Z2ggPSBmYWxzZTtcbiAgICB9LCAxMDAwKTtcbiAgICB0aGlzLmFjdGlvblByb2Nlc3NpbmcgPSB0aGlzLmluYm94U2VydmljZVxuICAgICAgLnJlbW92ZUl0ZW0odGhpcy5pdGVtKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMubm90aWZ5LnN1Y2Nlc3MoXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uaW5ib3guYWN0aXZpdHkuY29uZmlybS5zdWNjZXNzJylcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5ldmVudFNlcnZpY2UudHJpZ2dlcihFbmFpb0V2ZW50LklOQk9YX0lURU1fQ09ORklSTUVELCB0aGlzLml0ZW0pO1xuICAgICAgICB0aGlzLml0ZW0gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuaW5ib3hTZXJ2aWNlLnJlZnJlc2hJbmJveFN0YXRlKCk7XG4gICAgICB9LCBVdGlscy5jYXRjaChudWxsLCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5wcm9jZXNzLml0ZW0ucmVtb3ZlLmZhaWwnKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgc3RhdGUgYW5kIGRhdGEgZm9yIHRoZSBjdXJyZW50IHdvcmsgaXRlbS5cbiAgICovXG4gIHByaXZhdGUgc2V0dXBXb3JrSXRlbSgpIHtcbiAgICB0aGlzLmxvY2tlZCA9IHRoaXMud29ya0l0ZW0uc3RhdGUgPT09ICdQRVJTT04nO1xuICAgIHRoaXMucHJldmVudENsaWNrVGhyb3VnaCA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnByZXZlbnRDbGlja1Rocm91Z2ggPSBmYWxzZSwgMTAwMCk7XG4gICAgY29uc3Qge2Zvcm0sIGRhdGF9ID0gdGhpcy53b3JrSXRlbTtcbiAgICBjb25zdCB3b3JrSXRlbSA9IHtmb3JtLCBkYXRhfTtcbiAgICB0aGlzLndvcmtJdGVtSW5kZXhkYXRhID0gZm9ybSAmJiBkYXRhID8gd29ya0l0ZW0gOiBudWxsO1xuXG4gICAgLy8gZmV0Y2ggaGlzdG9yeVxuICAgIHRoaXMuYnBtU2VydmljZVxuICAgICAgLmdldFByb2Nlc3NIaXN0b3J5KHRoaXMud29ya0l0ZW0ucHJvY2Vzc0lkKVxuICAgICAgLnBpcGUobWFwKHJlcyA9PiB7XG4gICAgICAgIHJlcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgIGlmIChpdGVtLmVkaXRvcikge1xuICAgICAgICAgICAgaXRlbS5kYXRhLmltYWdlID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VySW1hZ2VVcmkoaXRlbS5lZGl0b3IuaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHNvcnQgYnkgbnVtYmVyIGJlY2F1c2UgdGhpcyBpcyB0aGUgYXV0by1pbmNyZW1lbnRpbmdcbiAgICAgICAgLy8gaW5kZXggb2YgYWRkZWQgaGlzdG9yeSBlbnRyaWVzXG4gICAgICAgIHRoaXMuaGlzdG9yeSA9IHJlcy5zb3J0KChhLCBiKSA9PiBiLm51bWJlciAtIGEubnVtYmVyKTtcbiAgICAgIH0pKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgdHJhY2tCeUNvZGUoaW5kZXgsIGl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbS5jb2RlO1xuICB9XG5cbiAgdHJhY2tCeUlkKGluZGV4LCBpdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0uaWQ7XG4gIH1cblxuICB0cmFja0J5SW5kZXgoaW5kZXgsIGl0ZW0pIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBzdWJzY3JpYmUgZm9yIGNoYW5nZXMgdG8gdGhlIGNsaXBib2FyZCB0byBlbmFibGUgYWRkaW5nIGNvbnRlbnRzIHRvIHRoZSB3b3JrIGl0ZW1cbiAgICB0aGlzLmNsaXBib2FyZFNlcnZpY2UuY2xpcGJvYXJkJFxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkJCkpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAoY2xpcGJvYXJkOiBDbGlwYm9hcmQpID0+XG4gICAgICAgICh0aGlzLmNsaXBib2FyZCA9XG4gICAgICAgICAgY2xpcGJvYXJkLmFjdGlvbiA9PT0gQ2xpcGJvYXJkQWN0aW9uLkNPUFkgPyBjbGlwYm9hcmQgOiBudWxsKVxuICAgICAgKTtcbiAgICAvLyBjb21wb25lbnQgaXMgb25seSBpbnRlcmVzdGVkIGluIGNvcGllZCBpdGVtc1xuXG4gICAgaWYgKHRoaXMuYXBwbHlTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uXG4gICAgICAgIC5maW5kKHRoaXMuYXBwbHlTZWxlY3Rpb24uaW4pXG4gICAgICAgIC5mb2N1cyQucGlwZSh0YWtlVW50aWwodGhpcy5jb21wb25lbnREZXN0cm95ZWQkKSlcbiAgICAgICAgLnN1YnNjcmliZSgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbSA9IGl0ZW07XG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0odGhpcy5zdG9yYWdlS2V5TGFzdEl0ZW1JRCwgdGhpcy5pdGVtLmlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBsZXQgcGFuZWxzID0gdGhpcy50YWJQYW5lbHMudG9BcnJheSgpO1xuICAgIHRoaXMudGFiUGx1Z2lucy5mb3JFYWNoKFxuICAgICAgcCA9PiAocGFuZWxzID0gcGFuZWxzLmNvbmNhdChwLnRhYlBhbmVscy50b0FycmF5KCkpKVxuICAgICk7XG4gICAgdGhpcy5leHRlcm5hbFBhbmVscy5yZXNldChwYW5lbHMpO1xuICB9XG59XG4iXX0=
@@ -76,7 +76,7 @@ export class FormElementTableComponent extends UnsubscribeOnDestroy {
76
76
  });
77
77
  this._cachedColumns = this.storageService.getItem(FormElementTableComponent.COLUMNS_DEFINITION) || [];
78
78
  this._cachedColumnsOverlay = this.storageService.getItem(FormElementTableComponent.COLUMNS_DEFINITION_OVERLAY) || [];
79
- this.showPreview = !!this.storageService.getItem('showPreview');
79
+ this.showPreview = !!this.storageService.getItem('eo.table.showPreview');
80
80
  }
81
81
  set params(p) {
82
82
  if (p) {
@@ -414,7 +414,7 @@ export class FormElementTableComponent extends UnsubscribeOnDestroy {
414
414
  }
415
415
  togglePreview() {
416
416
  this.showPreview = !this.showPreview;
417
- this.storageService.setItem('showPreview', this.showPreview);
417
+ this.storageService.setItem('eo.table.showPreview', this.showPreview);
418
418
  }
419
419
  }
420
420
  FormElementTableComponent.COLUMNS_DEFINITION = 'eo.framework.cache.tables.columns.definition';
@@ -422,7 +422,7 @@ FormElementTableComponent.COLUMNS_DEFINITION_OVERLAY = 'eo.framework.cache.table
422
422
  FormElementTableComponent.decorators = [
423
423
  { type: Component, args: [{
424
424
  selector: 'eo-table',
425
- template: "<div class=\"object-form-table\" [ngClass]=\"{medium: _params.size === 'medium', large: _params.size === 'large'}\">\n <div class=\"label\">\n <span>{{_params.element.label}}</span>\n <ng-container *ngIf=\"_params.situation !== 'SEARCH'\">\n\n <eo-icon class=\"stf\" [iconSrc]=\"'assets/_default/svg/ic_expand.svg'\" [iconTitle]=\"('eo.form.table.options.btn.open'| translate)\" (click)=\"openDialog()\"></eo-icon>\n <eo-icon class=\"stf\" [iconSrc]=\"'assets/_default/svg/ic_size_to_fit.svg'\" [iconTitle]=\"('eo.form.table.options.btn.fit'| translate)\" (click)=\"sizeToFit()\"></eo-icon>\n <eo-icon class=\"stf\" *ngIf=\"gridOptions.rowData.length\" [iconSrc]=\"'assets/_default/svg/ic_content-download.svg'\" [iconTitle]=\"('eo.form.table.options.btn.csv'| translate)\" (click)=\"exportCSV()\"></eo-icon>\n <eo-icon class=\"stf add-row\" *ngIf=\"!_params.element.readonly\" [iconSrc]=\"'assets/_default/svg/ic_add.svg'\" [iconTitle]=\"('eo.form.table.options.btn.add'| translate)\" (click)=\"addRow()\"></eo-icon>\n\n </ng-container>\n </div>\n <div class=\"grid-body size-{{ params.size }}\">\n <ag-grid-angular #agGrid *ngIf=\"gridReady\" class=\"ag-theme-balham\" [modules]=\"modules\"\n [gridOptions]=\"gridOptions\"\n (rowDoubleClicked)=\"editRow($event)\"\n (cellClicked)=\"onCellClicked($event)\"\n (sortChanged)=\"onSortChanged()\"\n (cellValueChanged)=\"onEditComplete($event)\"\n (columnResized)=\"onColumnResized($event.column)\">\n </ag-grid-angular>\n </div>\n</div>\n\n\n<eo-dialog\n[title]=\"params.element.label\"\n[visible]=\"showDialog\"\n[dirtyCheck]=\"rowEdit?.pendingTaskId\"\n[minWidth]=\"_params.situation !== 'SEARCH' ? '97vw' : 200\"\n[styleClass]=\"'object-form-table-dialog'\"\n(hide)=\"onClose()\"\n[isFormTable]=\"true\"\n[hasPreviewFile]=\"!!params.object?.content\"\n[showPreview]=\"showPreview\"\n(onTogglePreview)=\"togglePreview()\">\n\n <div class=\"body\">\n\n <eo-split [gutterSize]=\"16\" [switchable]=\"true\">\n\n <eo-split-area *ngIf=\"_params.situation !== 'SEARCH'\" class=\"table-area\" [size]=\"50\" [minSizePixel]=\"100\" [order]=\"1\">\n <div class=\"table-body\">\n <div class=\"object-form-table\">\n <div class=\"label\">\n <span></span>\n <ng-container>\n <eo-icon class=\"stf\" [iconSrc]=\"'assets/_default/svg/ic_size_to_fit.svg'\" [iconTitle]=\"('eo.form.table.options.btn.fit'| translate)\" (click)=\"sizeToFit(true)\"></eo-icon>\n <eo-icon class=\"stf\" *ngIf=\"gridOptions.rowData.length\" [iconSrc]=\"'assets/_default/svg/ic_content-download.svg'\" [iconTitle]=\"('eo.form.table.options.btn.csv'| translate)\" (click)=\"exportCSV()\"></eo-icon>\n <eo-icon class=\"stf add-row\" *ngIf=\"!_params.element.readonly\" [iconSrc]=\"'assets/_default/svg/ic_add.svg'\" [iconTitle]=\"('eo.form.table.options.btn.add'| translate)\" (click)=\"addRow()\"></eo-icon>\n </ng-container>\n </div>\n <div class=\"grid-body\">\n <ag-grid-angular #agGrid2 *ngIf=\"gridReady\" class=\"ag-theme-balham\" [modules]=\"modules\"\n [gridOptions]=\"overlayGridOptions\"\n (cellClicked)=\"onCellClicked($event);editRow($event)\"\n (mousedown)=\"onMouseDown($event)\"\n (sortChanged)=\"onSortChanged()\"\n (cellValueChanged)=\"onEditComplete($event)\"\n (columnResized)=\"onColumnResized($event.column, true)\">\n </ag-grid-angular>\n </div>\n </div>\n </div>\n </eo-split-area>\n\n <eo-split-area [size]=\"15\" [minSizePixel]=\"300\" *ngIf=\"editingRow\" [order]=\"2\">\n <div class=\"edit-body\">\n <eo-row-edit [row]=\"editingRow\" #rowEdit\n (onSave)=\"updateRow($event)\"\n (onSaveCopy)=\"copyRow($event)\"\n (onDelete)=\"deleteRow($event)\"\n (onCancel)=\"cancelRowEdit()\"></eo-row-edit>\n </div>\n </eo-split-area>\n\n <eo-split-area *ngIf=\"showPreview && !!params.object?.content\" [size]=\"10\" [minSizePixel]=\"150\" [order]=\"3\">\n <eo-media [dmsObject]=\"params.object\" [undockDisabled]=\"true\"\n [useVersion]=\"params.object.id === params.object.content?.id\"></eo-media>\n </eo-split-area>\n </eo-split>\n </div>\n</eo-dialog>\n\n",
425
+ template: "<div class=\"object-form-table\" [ngClass]=\"{medium: _params.size === 'medium', large: _params.size === 'large'}\">\n <div class=\"label\">\n <span>{{_params.element.label}}</span>\n <ng-container *ngIf=\"_params.situation !== 'SEARCH'\">\n\n <eo-icon class=\"stf\" [iconSrc]=\"'assets/_default/svg/ic_expand.svg'\" [iconTitle]=\"('eo.form.table.options.btn.open'| translate)\" (click)=\"openDialog()\"></eo-icon>\n <eo-icon class=\"stf\" [iconSrc]=\"'assets/_default/svg/ic_size_to_fit.svg'\" [iconTitle]=\"('eo.form.table.options.btn.fit'| translate)\" (click)=\"sizeToFit()\"></eo-icon>\n <eo-icon class=\"stf\" *ngIf=\"gridOptions.rowData.length\" [iconSrc]=\"'assets/_default/svg/ic_content-download.svg'\" [iconTitle]=\"('eo.form.table.options.btn.csv'| translate)\" (click)=\"exportCSV()\"></eo-icon>\n <eo-icon class=\"stf add-row\" *ngIf=\"!_params.element.readonly\" [iconSrc]=\"'assets/_default/svg/ic_add.svg'\" [iconTitle]=\"('eo.form.table.options.btn.add'| translate)\" (click)=\"addRow()\"></eo-icon>\n\n </ng-container>\n </div>\n <div class=\"grid-body size-{{ params.size }}\">\n <ag-grid-angular #agGrid *ngIf=\"gridReady\" class=\"ag-theme-balham\" [modules]=\"modules\"\n [gridOptions]=\"gridOptions\"\n (rowDoubleClicked)=\"editRow($event)\"\n (cellClicked)=\"onCellClicked($event)\"\n (sortChanged)=\"onSortChanged()\"\n (cellValueChanged)=\"onEditComplete($event)\"\n (columnResized)=\"onColumnResized($event.column)\">\n </ag-grid-angular>\n </div>\n</div>\n\n\n<eo-dialog\n[title]=\"params.element.label\"\n[visible]=\"showDialog\"\n[dirtyCheck]=\"rowEdit?.pendingTaskId\"\n[minWidth]=\"_params.situation !== 'SEARCH' ? '97vw' : 200\"\n[styleClass]=\"'object-form-table-dialog'\"\n(hide)=\"onClose()\"\n[isFormTable]=\"true\"\n[hasPreviewFile]=\"!!params.object?.content\"\n[showPreview]=\"showPreview\"\n(onTogglePreview)=\"togglePreview()\">\n\n <div class=\"body\">\n\n <eo-split [gutterSize]=\"16\" [switchable]=\"true\" [cacheLayout]=\"'table.state'\">\n\n <eo-split-area *ngIf=\"_params.situation !== 'SEARCH'\" class=\"table-area\" [size]=\"40\" [minSizePixel]=\"100\" [order]=\"1\">\n <div class=\"table-body\">\n <div class=\"object-form-table\">\n <div class=\"label\">\n <span></span>\n <ng-container>\n <eo-icon class=\"stf\" [iconSrc]=\"'assets/_default/svg/ic_size_to_fit.svg'\" [iconTitle]=\"('eo.form.table.options.btn.fit'| translate)\" (click)=\"sizeToFit(true)\"></eo-icon>\n <eo-icon class=\"stf\" *ngIf=\"gridOptions.rowData.length\" [iconSrc]=\"'assets/_default/svg/ic_content-download.svg'\" [iconTitle]=\"('eo.form.table.options.btn.csv'| translate)\" (click)=\"exportCSV()\"></eo-icon>\n <eo-icon class=\"stf add-row\" *ngIf=\"!_params.element.readonly\" [iconSrc]=\"'assets/_default/svg/ic_add.svg'\" [iconTitle]=\"('eo.form.table.options.btn.add'| translate)\" (click)=\"addRow()\"></eo-icon>\n </ng-container>\n </div>\n <div class=\"grid-body\">\n <ag-grid-angular #agGrid2 *ngIf=\"gridReady\" class=\"ag-theme-balham\" [modules]=\"modules\"\n [gridOptions]=\"overlayGridOptions\"\n (cellClicked)=\"onCellClicked($event);editRow($event)\"\n (mousedown)=\"onMouseDown($event)\"\n (sortChanged)=\"onSortChanged()\"\n (cellValueChanged)=\"onEditComplete($event)\"\n (columnResized)=\"onColumnResized($event.column, true)\">\n </ag-grid-angular>\n </div>\n </div>\n </div>\n </eo-split-area>\n\n <eo-split-area [size]=\"20\" [minSizePixel]=\"300\" *ngIf=\"editingRow\" [order]=\"2\">\n <div class=\"edit-body\">\n <eo-row-edit [row]=\"editingRow\" #rowEdit\n (onSave)=\"updateRow($event)\"\n (onSaveCopy)=\"copyRow($event)\"\n (onDelete)=\"deleteRow($event)\"\n (onCancel)=\"cancelRowEdit()\"></eo-row-edit>\n </div>\n </eo-split-area>\n\n <eo-split-area *ngIf=\"showPreview && !!params.object?.content\" [size]=\"40\" [minSizePixel]=\"150\" [order]=\"3\">\n <eo-media [dmsObject]=\"params.object\" [undockDisabled]=\"true\"\n [useVersion]=\"params.object.id === params.object.content?.id\"></eo-media>\n </eo-split-area>\n </eo-split>\n </div>\n</eo-dialog>\n\n",
426
426
  providers: [
427
427
  {
428
428
  provide: NG_VALUE_ACCESSOR,
@@ -451,4 +451,4 @@ FormElementTableComponent.propDecorators = {
451
451
  params: [{ type: Input }],
452
452
  copyCellHandler: [{ type: HostListener, args: ['keydown.control.alt.shift.c', ['$event'],] }, { type: HostListener, args: ['keydown.control.shift.c', ['$event'],] }, { type: HostListener, args: ['keydown.control.alt.c', ['$event'],] }, { type: HostListener, args: ['keydown.control.c', ['$event'],] }]
453
453
  };
454
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lbGVtZW50LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tZnJhbWV3b3JrL29iamVjdC1mb3JtL29iamVjdC1mb3JtL2Zvcm0tZWxlbWVudC10YWJsZS9mb3JtLWVsZW1lbnQtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHlFQUF5RSxDQUFDO0FBQzlHLE9BQU8sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzVGLE9BQU8sRUFBdUIsaUJBQWlCLEVBQUUsYUFBYSxFQUF5QixNQUFNLGdCQUFnQixDQUFDO0FBRzlHLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUMzRSxPQUFPLEVBQXdCLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQzlILE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQ2xGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzlCLE9BQU8sRUFBQyxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0saURBQWlELENBQUM7QUFnRHJGLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxvQkFBb0I7SUF1RGpFLFlBQW9CLGFBQTRCLEVBQVUsY0FBcUMsRUFDdEYsT0FBb0IsRUFBVSxTQUEyQixFQUFVLGNBQW1DLEVBQVUsWUFBMEI7UUFDakosS0FBSyxFQUFFLENBQUM7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QWMsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvRCxDQUFDOztBQXRjTSw0Q0FBa0IsR0FBRyw4Q0FBOEMsQ0FBQztBQUNwRSxvREFBMEIsR0FBRyxzREFBc0QsQ0FBQzs7WUF4QjVGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsVUFBVTtnQkFDcEIsbXFKQUFrRDtnQkFJbEQsU0FBUyxFQUFFO29CQUNUO3dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7d0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMseUJBQXlCLENBQUM7d0JBQ3hELEtBQUssRUFBRSxJQUFJO3FCQUNaO29CQUNEO3dCQUNFLE9BQU8sRUFBRSxhQUFhO3dCQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHlCQUF5QixDQUFDO3dCQUN4RCxLQUFLLEVBQUUsSUFBSTtxQkFDWjtpQkFDRjs7YUFDRjs7O1lBckRpRSxhQUFhO1lBTnZFLHFCQUFxQjtZQUtyQixXQUFXO1lBQzhELGdCQUFnQjtZQUFwRCxtQkFBbUI7WUFBakMsWUFBWTs7O3NCQStEeEMsU0FBUyxTQUFDLFNBQVM7cUJBRW5CLEtBQUs7OEJBb0NMLFlBQVksU0FBQyw2QkFBNkIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxjQUN0RCxZQUFZLFNBQUMseUJBQXlCLEVBQUUsQ0FBQyxRQUFRLENBQUMsY0FDbEQsWUFBWSxTQUFDLHVCQUF1QixFQUFFLENBQUMsUUFBUSxDQUFDLGNBQ2hELFlBQVksU0FBQyxtQkFBbUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UGVuZGluZ0NoYW5nZXNTZXJ2aWNlfSBmcm9tICcuLy4uLy4uLy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL3BlbmRpbmctY2hhbmdlcy9wZW5kaW5nLWNoYW5nZXMuc2VydmljZSc7XG5pbXBvcnQge0NvbXBvbmVudCwgZm9yd2FyZFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIE5HX1ZBTElEQVRPUlMsIFZhbGlkYXRvciwgRm9ybUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7T2JqZWN0Rm9ybU9wdGlvbnN9IGZyb20gJy4uLy4uL29iamVjdC1mb3JtLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7R3JpZE9wdGlvbnMsIENvbERlZiwgTW9kdWxlfSBmcm9tICdAYWctZ3JpZC1jb21tdW5pdHkvY29yZSc7XG5pbXBvcnQge0dyaWRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9lby1mcmFtZXdvcmstY29yZS9hcGkvZ3JpZC5zZXJ2aWNlJztcbmltcG9ydCB7RG1zT2JqZWN0LCBFbmFpb0V2ZW50LCBFdmVudFNlcnZpY2UsIExvY2FsU3RvcmFnZVNlcnZpY2UsIFN5c3RlbVNlcnZpY2UsIFRyYW5zbGF0ZVNlcnZpY2UsIFV0aWxzfSBmcm9tICdAZW8tc2RrL2NvcmUnO1xuaW1wb3J0IHtDbGllbnRTaWRlUm93TW9kZWxNb2R1bGV9IGZyb20gJ0BhZy1ncmlkLWNvbW11bml0eS9jbGllbnQtc2lkZS1yb3ctbW9kZWwnO1xuaW1wb3J0IHtDc3ZFeHBvcnRNb2R1bGV9IGZyb20gJ0BhZy1ncmlkLWNvbW11bml0eS9jc3YtZXhwb3J0JztcbmltcG9ydCB7Zm9ya0pvaW59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXAsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtSb3dFZGl0Q29tcG9uZW50fSBmcm9tICcuL3Jvdy1lZGl0L3Jvdy1lZGl0LmNvbXBvbmVudCc7XG5pbXBvcnQge1Vuc3Vic2NyaWJlT25EZXN0cm95fSBmcm9tICcuLi8uLi8uLi91dGlsL3Vuc3Vic2NyaWJlL3Vuc3Vic2NyaWJlLmNvbXBvbmVudCc7XG5cbi8vIGRhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSB0YWJsZSBjb21wb25lbnRcbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVDb21wb25lbnRQYXJhbXMge1xuICAvLyBjdXJyZW50IGZvcm0gc2l0dWF0aW9uIChFRElULCBTRUFSQ0ggb3IgQ1JFQVRFKVxuICBzaXR1YXRpb246IHN0cmluZztcbiAgLy8gdGFibGUgc2l6ZSAobWVkaXVtLCBsYXJnZSlcbiAgc2l6ZTogc3RyaW5nO1xuICAvLyB0aGUgdGFibGVzIGZyb20gZWxlbWVudFxuICBlbGVtZW50OiBhbnk7XG4gIC8vIHRoZSBkbXMgb2JqZWN0IHRoZSBmb3JtIGlzIGF0dGFjaGVkIHRvIChuZWVkZWQgZm9yIHByZXZpZXcgaW4gZGlhbG9nKVxuICBvYmplY3Q/OiBEbXNPYmplY3Q7XG59XG5cbi8vIHJlcHJlc2VudGF0aW9uIG9mIGEgcm93IHdoaWxlIGVkaXRpbmdcbmV4cG9ydCBpbnRlcmZhY2UgRWRpdFJvdyB7XG4gIHNpdHVhdGlvbjogc3RyaW5nO1xuICBpbmRleDogbnVtYmVyO1xuICBmb3JtT3B0aW9uczogT2JqZWN0Rm9ybU9wdGlvbnM7XG4gIHRhYmxlRWxlbWVudDogYW55O1xufVxuXG4vLyByZXN1bHQgb2YgZWRpdGluZyBhIHRhYmxlcyByb3dcbmV4cG9ydCBpbnRlcmZhY2UgRWRpdFJvd1Jlc3VsdCB7XG4gIGluZGV4OiBudW1iZXI7XG4gIHJvd0RhdGE6IGFueTtcbiAgY3JlYXRlTmV3Um93OiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdlby10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWVsZW1lbnQtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtcbiAgICAnLi9mb3JtLWVsZW1lbnQtdGFibGUuY29tcG9uZW50LnNjc3MnXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRm9ybUVsZW1lbnRUYWJsZUNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZvcm1FbGVtZW50VGFibGVDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1FbGVtZW50VGFibGVDb21wb25lbnQgZXh0ZW5kcyBVbnN1YnNjcmliZU9uRGVzdHJveSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3Ige1xuXG4gIHByaXZhdGUgX2NhY2hlZENvbHVtbnM6IGFueVtdO1xuICBwcml2YXRlIF9jYWNoZWRDb2x1bW5zT3ZlcmxheTogYW55W107XG4gIHN0YXRpYyBDT0xVTU5TX0RFRklOSVRJT04gPSAnZW8uZnJhbWV3b3JrLmNhY2hlLnRhYmxlcy5jb2x1bW5zLmRlZmluaXRpb24nO1xuICBzdGF0aWMgQ09MVU1OU19ERUZJTklUSU9OX09WRVJMQVkgPSAnZW8uZnJhbWV3b3JrLmNhY2hlLnRhYmxlcy5vdmVybGF5LmNvbHVtbnMuZGVmaW5pdGlvbic7XG5cbiAgcHVibGljIG1vZHVsZXM6IE1vZHVsZVtdID0gW0NsaWVudFNpZGVSb3dNb2RlbE1vZHVsZSwgQ3N2RXhwb3J0TW9kdWxlXTtcblxuICBAVmlld0NoaWxkKCdyb3dFZGl0Jykgcm93RWRpdDogUm93RWRpdENvbXBvbmVudDtcblxuICBASW5wdXQoKVxuICBzZXQgcGFyYW1zKHA6IFRhYmxlQ29tcG9uZW50UGFyYW1zKSB7XG4gICAgaWYgKHApIHtcbiAgICAgIHRoaXMuX3BhcmFtcyA9IHA7XG4gICAgICBpZiAodGhpcy5fcGFyYW1zLnNpdHVhdGlvbiA9PT0gJ1NFQVJDSCcpIHtcbiAgICAgICAgdGhpcy5fcGFyYW1zLnNpemUgPSAnc3VwZXJzbWFsbCc7XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLl9wYXJhbXMuc2l6ZSkge1xuICAgICAgICB0aGlzLl9wYXJhbXMuc2l6ZSA9ICdzbWFsbCc7XG4gICAgICB9XG4gICAgICB0aGlzLmdyaWRSZWFkeSA9IGZhbHNlO1xuICAgICAgdGhpcy5fZWxlbWVudHMgPSBwLmVsZW1lbnQuZWxlbWVudHM7XG4gICAgICB0aGlzLmdyaWRPcHRpb25zLmNvbHVtbkRlZnMgPSB0aGlzLmNyZWF0ZUNvbHVtbkRlZmluaXRpb24oKTtcbiAgICAgIGlmICh0aGlzLl9wYXJhbXMuc2l0dWF0aW9uID09PSAnU0VBUkNIJykge1xuICAgICAgICB0aGlzLmdyaWRPcHRpb25zLmNvbHVtbkRlZnMucHVzaCh7aGVhZGVyTmFtZTogJycsIGNvbElkOiAnYWN0aW9ucycsIHdpZHRoOiAzNCwgbWluV2lkdGg6IDM0LCBwaW5uZWQ6ICdyaWdodCcsIGNlbGxSZW5kZXJlcjogdGhpcy5hY3Rpb25zQ2VsbFJlbmRlcmVyfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5jb2x1bW5EZWZzID0gdGhpcy5jcmVhdGVDb2x1bW5EZWZpbml0aW9uKHRydWUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmdyaWRSZWFkeSA9IHRydWU7XG4gICAgfVxuICB9XG4gIGdldCBwYXJhbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmFtcztcbiAgfVxuXG4gIF9wYXJhbXM6IFRhYmxlQ29tcG9uZW50UGFyYW1zO1xuICBwcml2YXRlIF9lbGVtZW50czogYW55W107XG4gIGdyaWRSZWFkeSA9IGZhbHNlO1xuICB2YWx1ZTogYW55W107XG4gIGlubmVyVmFsdWU6IGFueVtdO1xuICBncmlkT3B0aW9uczogR3JpZE9wdGlvbnM7XG4gIG92ZXJsYXlHcmlkT3B0aW9uczogR3JpZE9wdGlvbnM7XG4gIGVkaXRpbmdSb3c6IEVkaXRSb3c7XG4gIHNob3dEaWFsb2cgPSBmYWxzZTtcbiAgc2hvd1ByZXZpZXcgPSBmYWxzZTtcblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmNvbnRyb2wuYWx0LnNoaWZ0LmMnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmNvbnRyb2wuc2hpZnQuYycsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uY29udHJvbC5hbHQuYycsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uY29udHJvbC5jJywgWyckZXZlbnQnXSlcbiAgY29weUNlbGxIYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgdGhpcy5ncmlkQXBpLmNvcHlUb0NsaXBib2FyZChldmVudCwgdGhpcy5ncmlkT3B0aW9ucyk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN5c3RlbVNlcnZpY2U6IFN5c3RlbVNlcnZpY2UsIHByaXZhdGUgcGVuZGluZ0NoYW5nZXM6IFBlbmRpbmdDaGFuZ2VzU2VydmljZSxcbiAgICBwdWJsaWMgZ3JpZEFwaTogR3JpZFNlcnZpY2UsIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlLCBwcml2YXRlIGV2ZW50U2VydmljZTogRXZlbnRTZXJ2aWNlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmdyaWRPcHRpb25zID0gPEdyaWRPcHRpb25zPntcbiAgICAgIGNvbnRleHQ6IHRoaXMuZ3JpZEFwaS5nZXRDb250ZXh0KCksXG4gICAgICBoZWFkZXJIZWlnaHQ6IDMwLFxuICAgICAgcm93SGVpZ2h0OiAzMCxcbiAgICAgIHJvd0J1ZmZlcjogMjAsXG4gICAgICBtdWx0aVNvcnRLZXk6ICdjdHJsJyxcbiAgICAgIGFjY2VudGVkU29ydDogdHJ1ZSxcbiAgICAgIC8vIHN1cHByZXNzQ2VsbFNlbGVjdGlvbjogdHJ1ZSxcbiAgICAgIHJvd1NlbGVjdGlvbjogJ3NpbmdsZScsXG4gICAgICBzdXBwcmVzc01vdmFibGVDb2x1bW5zOiB0cnVlLFxuICAgICAgZW5hYmxlRmlsdGVyOiBmYWxzZSxcbiAgICAgIHN1cHByZXNzTm9Sb3dzT3ZlcmxheTogdHJ1ZSxcbiAgICAgIHN1cHByZXNzTG9hZGluZ092ZXJsYXk6IHRydWUsXG4gICAgICBzdXBwcmVzc0NvbnRleHRNZW51OiB0cnVlXG4gICAgfTtcbiAgICB0aGlzLmdyaWRPcHRpb25zLmNvbnRleHQudGFibGVDb21wb25lbnQgPSB0aGlzO1xuXG4gICAgdGhpcy5vdmVybGF5R3JpZE9wdGlvbnMgPSA8R3JpZE9wdGlvbnM+e1xuICAgICAgY29udGV4dDogdGhpcy5ncmlkQXBpLmdldENvbnRleHQoKSxcbiAgICAgIGhlYWRlckhlaWdodDogMzAsXG4gICAgICByb3dIZWlnaHQ6IDMwLFxuICAgICAgcm93QnVmZmVyOiAyMCxcbiAgICAgIG11bHRpU29ydEtleTogJ2N0cmwnLFxuICAgICAgYWNjZW50ZWRTb3J0OiB0cnVlLFxuICAgICAgLy8gc3VwcHJlc3NDZWxsU2VsZWN0aW9uOiB0cnVlLFxuICAgICAgcm93U2VsZWN0aW9uOiAnc2luZ2xlJyxcbiAgICAgIHN1cHByZXNzTW92YWJsZUNvbHVtbnM6IHRydWUsXG4gICAgICBlbmFibGVGaWx0ZXI6IGZhbHNlLFxuICAgICAgc3VwcHJlc3NOb1Jvd3NPdmVybGF5OiB0cnVlLFxuICAgICAgc3VwcHJlc3NMb2FkaW5nT3ZlcmxheTogdHJ1ZSxcbiAgICAgIHN1cHByZXNzQ29udGV4dE1lbnU6IHRydWVcbiAgICB9O1xuICAgIHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLmNvbnRleHQudGFibGVDb21wb25lbnQgPSB0aGlzO1xuICAgIHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLnJvd0NsYXNzUnVsZXMgPSB7XG4gICAgICAnbmV3LXJvdyc6IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgaWYgKHBhcmFtcy5kYXRhLmlzTmV3Um93KSB7XG4gICAgICAgICAgZGVsZXRlIHBhcmFtcy5kYXRhLmlzTmV3Um93O1xuICAgICAgICAgIGRlbGV0ZSBwYXJhbXMuY29udGV4dC50YWJsZUNvbXBvbmVudC5pbm5lclZhbHVlW3BhcmFtcy5jb250ZXh0LnRhYmxlQ29tcG9uZW50LmlubmVyVmFsdWUubGVuZ3RoIC0gMV0uaXNOZXdSb3c7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nQ2hhbmdlcy50YXNrcyRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5jb21wb25lbnREZXN0cm95ZWQkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh0YXNrcyA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLnN1cHByZXNzUm93Q2xpY2tTZWxlY3Rpb24gPSAhIXRoaXMucm93RWRpdCAmJiAhIXRhc2tzLmluY2x1ZGVzKHRoaXMucm93RWRpdC5wZW5kaW5nVGFza0lkKTtcbiAgICAgICAgfSwgMCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX2NhY2hlZENvbHVtbnMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oRm9ybUVsZW1lbnRUYWJsZUNvbXBvbmVudC5DT0xVTU5TX0RFRklOSVRJT04pIHx8IFtdO1xuICAgIHRoaXMuX2NhY2hlZENvbHVtbnNPdmVybGF5ID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRJdGVtKEZvcm1FbGVtZW50VGFibGVDb21wb25lbnQuQ09MVU1OU19ERUZJTklUSU9OX09WRVJMQVkpIHx8IFtdO1xuICAgIHRoaXMuc2hvd1ByZXZpZXcgPSAhIXRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgnc2hvd1ByZXZpZXcnKTtcbiAgfVxuXG4gIGFjdGlvbnNDZWxsUmVuZGVyZXIocGFyYW1zKSB7XG4gICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgaWYgKHBhcmFtcy5jb250ZXh0LnRhYmxlQ29tcG9uZW50LnBhcmFtcy5zaXR1YXRpb24gPT09ICdTRUFSQ0gnKSB7XG4gICAgICBkaXYuaW5uZXJIVE1MID0gYDxkaXYgY2xhc3M9XCJhY3Rpb24taWNvblwiIGlkPVwiYWN0aW9uSWNvbi0ke3BhcmFtcy5yb3dJbmRleH1cIj5cbiAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgIDxwYXRoIGQ9XCJNMTkgNi40MUwxNy41OSA1IDEyIDEwLjU5IDYuNDEgNSA1IDYuNDEgMTAuNTkgMTIgNSAxNy41OSA2LjQxIDE5IDEyIDEzLjQxIDE3LjU5IDE5IDE5IDE3LjU5IDEzLjQxIDEyelwiLz5cbiAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+YDtcbiAgICAgIGxldCBjbGVhckljb24gPSBkaXYucXVlcnlTZWxlY3RvckFsbChgI2FjdGlvbkljb24tJHtwYXJhbXMucm93SW5kZXh9YClbMF07XG4gICAgICBjbGVhckljb24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBwYXJhbXMuY29udGV4dC50YWJsZUNvbXBvbmVudC5jbGVhclJvdyhwYXJhbXMucm93SW5kZXgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGl2LmlubmVySFRNTCA9IGA8ZGl2IGNsYXNzPVwiYWN0aW9uLWljb25cIiBpZD1cImFjdGlvbkljb24tJHtwYXJhbXMucm93SW5kZXh9XCI+XG4gICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICA8cGF0aCBkPVwiTTYgMTljMCAxLjEuOSAyIDIgMmg4YzEuMSAwIDItLjkgMi0yVjdINnYxMnpNMTkgNGgtMy41bC0xLTFoLTVsLTEgMUg1djJoMTRWNHpcIi8+XG4gICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PmA7XG4gICAgICBsZXQgZGVsZXRlSWNvbiA9IGRpdi5xdWVyeVNlbGVjdG9yQWxsKGAjYWN0aW9uSWNvbi0ke3BhcmFtcy5yb3dJbmRleH1gKVswXTtcbiAgICAgIGRlbGV0ZUljb24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBwYXJhbXMuY29udGV4dC50YWJsZUNvbXBvbmVudC5kZWxldGVSb3cocGFyYW1zLnJvd0luZGV4KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpdjtcbiAgfVxuXG4gIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueVtdKTogdm9pZCB7XG5cbiAgICBpZiAoIXZhbHVlICYmIHRoaXMuX3BhcmFtcy5zaXR1YXRpb24gPT09ICdTRUFSQ0gnKSB7XG4gICAgICAvLyBmb3Igc2VhcmNoIHJvdyBkYXRhIHdpbGwgYWx3YXlzIGJlIG9uZSBlbXB0eSByb3dcbiAgICAgIC8vIHRvZG86IHJlLWVuYWJsZSBhZ2FpbiB3aGVuIHNlYXJjaCBpbiB0YWJsZXMgaXMgc3VwcG9ydGVkXG4gICAgICB2YWx1ZSA9IFt7fV07XG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5ID8gdmFsdWUgOiBbXTtcbiAgICAvLyBjcmVhdGUgYSBjbG9uZSBvZiB0aGUgYWN0dWFsIHZhbHVlIGZvciBpbnRlcm5hbCB1c2FnZVxuICAgIHRoaXMuaW5uZXJWYWx1ZSA9IFV0aWxzLmZvcm1EYXRhUGFyc2UoVXRpbHMuZm9ybURhdGFTdHJpbmdpZnkodGhpcy52YWx1ZSkpO1xuXG4gICAgaWYgKHRoaXMuZ3JpZE9wdGlvbnMuYXBpKSB7XG4gICAgICB0aGlzLmdyaWRPcHRpb25zLmFwaS5zZXRSb3dEYXRhKHRoaXMuaW5uZXJWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ3JpZE9wdGlvbnMucm93RGF0YSA9IHRoaXMuaW5uZXJWYWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vdmVybGF5R3JpZE9wdGlvbnMuYXBpKSB7XG4gICAgICB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5hcGkuc2V0Um93RGF0YSh0aGlzLmlubmVyVmFsdWUpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNlbGVjdEVkaXRSb3coKSwgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLnJvd0RhdGEgPSB0aGlzLmlubmVyVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgY29sdW1uIGRlZmluaXRpb24gZnJvbSBmb3JtIGVsZW1lbnQuXG4gICAqIEByZXR1cm5zIGNvbHVtbiBkZWZpbml0aW9uIHRvIGJlIGFkZGVkIHRvIHRoZSBncmlkT3B0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVDb2x1bW5EZWZpbml0aW9uKG92ZXJsYXk/OiBib29sZWFuKTogQ29sRGVmW10ge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50cy5tYXAoKGVsKSA9PiB7XG4gICAgICBsZXQgY29sOiBDb2xEZWYgPSB0aGlzLmdyaWRBcGkuZ2V0Q29sdW1uRGVmaW5pdGlvbihlbCk7XG4gICAgICBPYmplY3QuYXNzaWduKGNvbCwge1xuICAgICAgICBoZWFkZXJOYW1lOiBlbC5sYWJlbCxcbiAgICAgICAgc3VwcHJlc3NNZW51OiB0cnVlLFxuICAgICAgICBmaWx0ZXI6IGZhbHNlLFxuICAgICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxuICAgICAgICBmaWVsZDogZWwubmFtZSxcbiAgICAgICAgcmVmRGF0YToge1xuICAgICAgICAgIC4uLmNvbC5yZWZEYXRhLFxuICAgICAgICAgIF9lb0Zvcm1FbGVtZW50OiBlbCxcbiAgICAgICAgICBfc2l0dWF0aW9uOiB0aGlzLl9wYXJhbXMuc2l0dWF0aW9uXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbGV0IGNhY2hlZENvbHVtbnMgPSB0aGlzLl9jYWNoZWRDb2x1bW5zO1xuICAgICAgaWYgKG92ZXJsYXkpIHtcbiAgICAgICAgY2FjaGVkQ29sdW1ucyA9IHRoaXMuX2NhY2hlZENvbHVtbnNPdmVybGF5O1xuICAgICAgfVxuICAgICAgbGV0IGNhY2hlZENvbHVtbiA9IGNhY2hlZENvbHVtbnMuZmluZChmID0+IGYucW5hbWUgPT09IGVsLnFuYW1lKTtcbiAgICAgIGlmIChjYWNoZWRDb2x1bW4pIHtcbiAgICAgICAgY29sLndpZHRoID0gY2FjaGVkQ29sdW1uLndpZHRoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbDtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFJvdygpIHtcbiAgICBjb25zdCByb3dEYXRhID0ge307XG4gICAgY29uc3QgYXN5bmNGZXRjaGVzID0gW107XG4gICAgdGhpcy5fZWxlbWVudHNcbiAgICAgIC5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgaWYgKGVsLmRlZmF1bHR2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcm93RGF0YVtlbC5uYW1lXSA9IGVsLmRlZmF1bHR2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChlbC5kZWZhdWx0dmFsdWVmdW5jdGlvbikge1xuICAgICAgICAgIHJvd0RhdGFbZWwubmFtZV0gPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0RGVmYXVsdFZhbHVlKGVsLmRlZmF1bHR2YWx1ZWZ1bmN0aW9uKTtcbiAgICAgICAgICBpZiAoZWwuZGVmYXVsdHZhbHVlZnVuY3Rpb24gPT09ICdDVVJSRU5UX1VTRVInKSB7XG4gICAgICAgICAgICBhc3luY0ZldGNoZXMucHVzaCh0aGlzLnJlc29sdmVPcmdEYXRhTWV0YShlbC5uYW1lLCByb3dEYXRhW2VsLm5hbWVdKSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgaWYgKGFzeW5jRmV0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3JrSm9pbihhc3luY0ZldGNoZXMpLnN1YnNjcmliZSgocmVzOiB7a2V5OiBzdHJpbmcsIHZhbHVlOiBhbnl9W10pID0+IHtcbiAgICAgICAgcmVzLmZvckVhY2gociA9PiB7XG4gICAgICAgICAgcm93RGF0YVtyLmtleV0gPSByLnZhbHVlO1xuICAgICAgICB9KVxuICAgICAgICB0aGlzLnNldEVkaXRSb3coLTEsIHJvd0RhdGEpO1xuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRFZGl0Um93KC0xLCByb3dEYXRhKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVPcmdEYXRhTWV0YShlbGVtZW50TmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuc3lzdGVtU2VydmljZS5nZXRPcmdhbml6YXRpb25PYmplY3QodmFsdWUpLnBpcGUoXG4gICAgICBtYXAocmVzID0+ICh7XG4gICAgICAgIGtleTogYCR7ZWxlbWVudE5hbWV9X21ldGFgLFxuICAgICAgICB2YWx1ZTogcmVzXG4gICAgICB9KSlcbiAgICApXG4gIH1cblxuICBlZGl0Um93KGV2ZW50KSB7XG4gICAgdGhpcy5zZXRFZGl0Um93KGV2ZW50Lm5vZGUuaWQsIGV2ZW50Lm5vZGUuZGF0YSk7XG4gIH1cblxuICBvbkVkaXRDb21wbGV0ZShldmVudCkge1xuICAgIC8vdG9kbzogaXMgaXQgb2Jzb2xldGU/XG4gIH1cblxuICBwcml2YXRlIHNldEVkaXRSb3coaW5kZXg6IG51bWJlciwgZGF0YTogYW55KSB7XG4gICAgLy8gc2V0dXAgdGhlIHJvdyB0byBiZSBlZGl0ZWQuIEJlc2lkZSBzb21lIHByb3BlcnRpZXMsIHRoZVxuICAgIC8vIHJvdyBjb250YWlucyBhIGZvcm0gbW9kZWwgYW5kIGZvcm0gZGF0YS4gSWYgdGhlIHBhcmVudCBmb3JtIG1vZGVsXG4gICAgLy8gcHJvdmlkZWQgYSBzY3JpcHQsIHRoaXMgd2lsbCBiZSBhZGRlZCBhcyB3ZWxsLCBzbyBlZGl0aW5nIGEgcm93IHdpbGxcbiAgICAvLyByZXNwZWN0IHRoZSBmb3JtIHNjcmlwdC5cbiAgICB0aGlzLmVkaXRpbmdSb3cgPSB7XG4gICAgICBzaXR1YXRpb246IHRoaXMuX3BhcmFtcy5zaXR1YXRpb24sXG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICB0YWJsZUVsZW1lbnQ6IHRoaXMuX3BhcmFtcy5lbGVtZW50LFxuICAgICAgZm9ybU9wdGlvbnM6IHtcbiAgICAgICAgZm9ybU1vZGVsOiB7XG4gICAgICAgICAgc2l0dWF0aW9uOiB0aGlzLl9wYXJhbXMuc2l0dWF0aW9uLCAgLy8gcmVxdWlyZWQgYnkgb2JqZWN0IGZvcm0gZm9yIHJlYWRpbmcgZGF0YVxuICAgICAgICAgIGVsZW1lbnRzOiBbe1xuICAgICAgICAgICAgdHlwZTogJ28ybUdyb3VwJyxcbiAgICAgICAgICAgIGVsZW1lbnRzOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuX2VsZW1lbnRzKSlcbiAgICAgICAgICB9XVxuICAgICAgICB9LFxuICAgICAgICBkYXRhLFxuICAgICAgICBkaXNhYmxlZDogdGhpcy5fcGFyYW1zLmVsZW1lbnQucmVhZG9ubHlcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc2hvd0RpYWxvZyA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNlbGVjdEVkaXRSb3coKSwgMCk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdEVkaXRSb3coKSB7XG4gICAgaWYgKHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLmFwaSl7XG4gICAgICB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5hcGkuZGVzZWxlY3RBbGwoKTtcbiAgICAgIGlmICh0aGlzLmVkaXRpbmdSb3cgJiYgdGhpcy5lZGl0aW5nUm93LmluZGV4ICE9PSAtMSkge1xuICAgICAgICBsZXQgcm93Tm9kZSA9IHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLmFwaS5nZXRSb3dOb2RlKCcnICsgdGhpcy5lZGl0aW5nUm93LmluZGV4KTtcbiAgICAgICAgcm93Tm9kZS5zZXRTZWxlY3RlZCh0cnVlLCB0cnVlKTtcbiAgICAgICAgdGhpcy5vdmVybGF5R3JpZE9wdGlvbnMuYXBpLmVuc3VyZU5vZGVWaXNpYmxlKHJvd05vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVGFibGVWYWx1ZSgpIHtcbiAgICB0aGlzLmdyaWRPcHRpb25zLmFwaS5zZXRSb3dEYXRhKHRoaXMuaW5uZXJWYWx1ZSk7XG4gICAgaWYgKHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLmFwaSkge1xuICAgICAgdGhpcy5vdmVybGF5R3JpZE9wdGlvbnMuYXBpLnNldFJvd0RhdGEodGhpcy5pbm5lclZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vdmVybGF5R3JpZE9wdGlvbnMucm93RGF0YSA9IHRoaXMuaW5uZXJWYWx1ZTtcbiAgICB9XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuaW5uZXJWYWx1ZTtcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy52YWx1ZS5pbmNsdWRlcygnaXNOZXdSb3cnKSkpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlWydpc05ld1JvdyddO1xuICAgIH1cbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIGNhbmNlbFJvd0VkaXQoKSB7XG4gICAgaWYgKHRoaXMucm93RWRpdCkge1xuICAgICAgdGhpcy5yb3dFZGl0LmZpbmlzaFBlbmRpbmcoKTtcbiAgICB9XG4gICAgdGhpcy5lZGl0aW5nUm93ID0gbnVsbDtcbiAgICBpZiAodGhpcy5fcGFyYW1zLnNpdHVhdGlvbiA9PT0gJ1NFQVJDSCcpIHtcbiAgICAgIHRoaXMuc2hvd0RpYWxvZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2xvc2UoKSB7XG4gICAgdGhpcy5lZGl0aW5nUm93ID0gbnVsbDtcbiAgICB0aGlzLnNob3dEaWFsb2cgPSBmYWxzZTtcbiAgfVxuXG4gIHVwZGF0ZVJvdyhyb3dSZXN1bHQ6IGFueSkge1xuICAgIGNvbnN0IGlzTmV3Um93ID0gcm93UmVzdWx0LmluZGV4ID09PSAtMTtcbiAgICBpZiAoaXNOZXdSb3cpIHtcbiAgICAgIHRoaXMuaW5uZXJWYWx1ZS5wdXNoKHsuLi5yb3dSZXN1bHQucm93RGF0YSwgLi4ue2lzTmV3Um93OiB0cnVlfX0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9lbGVtZW50cy5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgLy8gdGhpcy5pbm5lclZhbHVlW3Jvd1Jlc3VsdC5pbmRleF0gPSB7Li4udGhpcy5pbm5lclZhbHVlW3Jvd1Jlc3VsdC5pbmRleF0sIC4uLnJvd1Jlc3VsdC5yb3dEYXRhfTtcbiAgICAgICAgdGhpcy5pbm5lclZhbHVlW3Jvd1Jlc3VsdC5pbmRleF1bZWwubmFtZV0gPSByb3dSZXN1bHQucm93RGF0YVtlbC5uYW1lXTtcbiAgICAgICAgaWYgKHRoaXMuaW5uZXJWYWx1ZVtyb3dSZXN1bHQuaW5kZXhdW2VsLm5hbWUgKyAnX21ldGEnXSkge1xuICAgICAgICAgIHRoaXMuaW5uZXJWYWx1ZVtyb3dSZXN1bHQuaW5kZXhdW2VsLm5hbWUgKyAnX21ldGEnXSA9IHJvd1Jlc3VsdC5yb3dEYXRhW2VsLm5hbWUgKyAnX21ldGEnXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlVGFibGVWYWx1ZSgpO1xuICAgIGlmICh0aGlzLl9wYXJhbXMuc2l0dWF0aW9uID09PSAnU0VBUkNIJykge1xuICAgICAgdGhpcy5zaG93RGlhbG9nID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChpc05ld1JvdyAmJiAhcm93UmVzdWx0LmNyZWF0ZU5ld1Jvdykge1xuICAgICAgdGhpcy5zZXRFZGl0Um93KHRoaXMuaW5uZXJWYWx1ZS5sZW5ndGggLSAxLCB0aGlzLmlubmVyVmFsdWVbdGhpcy5pbm5lclZhbHVlLmxlbmd0aCAtIDFdKTtcbiAgICB9IGVsc2UgaWYgKHJvd1Jlc3VsdC5jcmVhdGVOZXdSb3cpIHtcbiAgICAgIHRoaXMuYWRkUm93KCk7XG4gICAgICBsZXQgcm93Tm9kZSA9IHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLmFwaS5nZXRSb3dOb2RlKCcnICsgKHRoaXMuaW5uZXJWYWx1ZS5sZW5ndGggLSAxKSk7XG4gICAgICB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5hcGkuZW5zdXJlTm9kZVZpc2libGUocm93Tm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0RWRpdFJvdyhyb3dSZXN1bHQuaW5kZXgsIHRoaXMuaW5uZXJWYWx1ZVtyb3dSZXN1bHQuaW5kZXhdKTtcbiAgICB9XG4gIH1cblxuICBjb3B5Um93KHJvd1Jlc3VsdDogYW55KSB7XG4gICAgcm93UmVzdWx0LmluZGV4ID0gLTE7XG4gICAgdGhpcy5pbm5lclZhbHVlLnB1c2goey4uLnJvd1Jlc3VsdC5yb3dEYXRhLCAuLi57aXNOZXdSb3c6IHRydWV9fSk7XG4gICAgdGhpcy51cGRhdGVUYWJsZVZhbHVlKCk7XG4gICAgaWYgKHJvd1Jlc3VsdC5jcmVhdGVOZXdSb3cpIHtcbiAgICAgIHRoaXMuYWRkUm93KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0RWRpdFJvdyh0aGlzLmlubmVyVmFsdWUubGVuZ3RoIC0gMSwgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyb3dSZXN1bHQucm93RGF0YSkpKTtcbiAgICB9XG4gIH1cblxuICBkZWxldGVSb3coaW5kZXg6IG51bWJlcikge1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5pbm5lclZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMudXBkYXRlVGFibGVWYWx1ZSgpO1xuICAgICAgICBpZiAodGhpcy5pbm5lclZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IG5leHRJbmRleCA9IGluZGV4ID09IHRoaXMuaW5uZXJWYWx1ZS5sZW5ndGggPyB0aGlzLmlubmVyVmFsdWUubGVuZ3RoIC0gMSA6IGluZGV4O1xuICAgICAgICAgIHRoaXMuc2V0RWRpdFJvdyhuZXh0SW5kZXgsIHRoaXMuaW5uZXJWYWx1ZVtuZXh0SW5kZXhdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNhbmNlbFJvd0VkaXQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICB9XG5cbiAgY2xlYXJSb3coaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuaW5uZXJWYWx1ZVtpbmRleF0gPSB7fTtcbiAgICB0aGlzLnVwZGF0ZVRhYmxlVmFsdWUoKTtcbiAgfVxuXG4gIGV4cG9ydENTVigpIHtcbiAgICB0aGlzLmdyaWRPcHRpb25zLmFwaS5leHBvcnREYXRhQXNDc3Yoe1xuICAgICAgLi4udGhpcy5ncmlkQXBpLmNzdkV4cG9ydFBhcmFtcyxcbiAgICAgIGZpbGVOYW1lOiB0aGlzLl9wYXJhbXMuZWxlbWVudC5sYWJlbFxuICAgIH0pO1xuICB9XG5cbiAgc2l6ZVRvRml0KG92ZXJsYXk/OiBib29sZWFuKSB7XG4gICAgaWYgKG92ZXJsYXkpIHtcbiAgICAgIHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLmFwaS5zaXplQ29sdW1uc1RvRml0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuYXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcbiAgICB9XG4gIH1cblxuICBvcGVuRGlhbG9nKCkge1xuICAgIHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLmFwaS5yZWZyZXNoVmlldygpO1xuICAgIHRoaXMuc2hvd0RpYWxvZyA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlVGFibGVEYXRhKCk6IGJvb2xlYW4ge1xuICAgIC8vIHRvZG86IGltcGxlbWVudFxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVRhYmxlRGF0YSgpID8gbnVsbCA6IHtcbiAgICAgIHRhYmxlOiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBvbk1vdXNlRG93bigkZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5zdXBwcmVzc1Jvd0NsaWNrU2VsZWN0aW9uKSB7XG4gICAgICBpZiAoIXRoaXMucGVuZGluZ0NoYW5nZXMuY2hlY2tGb3JQZW5kaW5nVGFza3ModGhpcy5yb3dFZGl0LnBlbmRpbmdUYXNrSWQpKSB7XG4gICAgICAgIHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLnN1cHByZXNzUm93Q2xpY2tTZWxlY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yb3dFZGl0LmZpbmlzaFBlbmRpbmcoKTtcbiAgICAgICAgbGV0IHJvd0luZGV4ID0gdGhpcy5ncmlkQXBpLmdldFJvd0luZGV4KCRldmVudC50YXJnZXQsICdhZy1ib2R5Jyk7XG4gICAgICAgIGlmIChyb3dJbmRleCAhPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLmFwaS5nZXRSb3dOb2RlKCcnICsgcm93SW5kZXgpLnNldFNlbGVjdGVkKHRydWUsIHRydWUpO1xuICAgICAgICAgICRldmVudC50YXJnZXQuY2xpY2soKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblNvcnRDaGFuZ2VkKCl7XG4gICAgbGV0IHJvd05vZGUgPSB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5hcGkuZ2V0Um93Tm9kZSgnJyArIHRoaXMuZWRpdGluZ1Jvdy5pbmRleCk7XG4gICAgdGhpcy5vdmVybGF5R3JpZE9wdGlvbnMuYXBpLmVuc3VyZU5vZGVWaXNpYmxlKHJvd05vZGUpO1xuICB9XG5cbiAgb25DZWxsQ2xpY2tlZCgkZXZlbnQpIHtcbiAgICBpZiAoJGV2ZW50LnJvd0luZGV4ICE9PSBudWxsKSB7XG4gICAgICBpZiAoISRldmVudC5ub2RlLmdyb3VwICYmICRldmVudC5kYXRhKSB7XG4gICAgICAgIGlmICgkZXZlbnQuY29sRGVmLmNlbGxDbGFzcyA9PT0gJ3JvdXRlci1saW5rLWNlbGwnKSB7XG4gICAgICAgICAgdGhpcy5ncmlkQXBpLm9wZW5Sb3V0ZXJMaW5rKCRldmVudC5ldmVudCwgJ2FnLXJvdycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Db2x1bW5SZXNpemVkKGNvbHVtbjogYW55LCBvdmVybGF5PzogYm9vbGVhbikge1xuICAgIGxldCBjb2x1bW5zRGVmaW5pdGlvbiA9IEZvcm1FbGVtZW50VGFibGVDb21wb25lbnQuQ09MVU1OU19ERUZJTklUSU9OO1xuICAgIGxldCBjYWNoZWRDb2x1bW5zID0gdGhpcy5fY2FjaGVkQ29sdW1ucztcbiAgICBpZiAob3ZlcmxheSkge1xuICAgICAgY29sdW1uc0RlZmluaXRpb24gPSBGb3JtRWxlbWVudFRhYmxlQ29tcG9uZW50LkNPTFVNTlNfREVGSU5JVElPTl9PVkVSTEFZO1xuICAgICAgY2FjaGVkQ29sdW1ucyA9IHRoaXMuX2NhY2hlZENvbHVtbnNPdmVybGF5O1xuICAgIH1cbiAgICBsZXQgY29sID0gY2FjaGVkQ29sdW1ucy5maW5kKGMgPT4gYy5xbmFtZSA9PT0gY29sdW1uLmNvbERlZi5yZWZEYXRhLnFuYW1lKTtcbiAgICBpZiAoY29sKSB7XG4gICAgICBjb2wud2lkdGggPSBjb2x1bW4uYWN0dWFsV2lkdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhY2hlZENvbHVtbnMucHVzaCh7cW5hbWU6IGNvbHVtbi5jb2xEZWYucmVmRGF0YS5xbmFtZSwgd2lkdGg6IGNvbHVtbi5hY3R1YWxXaWR0aH0pO1xuICAgIH1cbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oY29sdW1uc0RlZmluaXRpb24sIGNhY2hlZENvbHVtbnMpO1xuICB9XG5cbiAgdG9nZ2xlUHJldmlldygpIHtcbiAgICB0aGlzLnNob3dQcmV2aWV3ID0gIXRoaXMuc2hvd1ByZXZpZXc7XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRJdGVtKCdzaG93UHJldmlldycsIHRoaXMuc2hvd1ByZXZpZXcpO1xuICB9XG59XG4iXX0=
454
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lbGVtZW50LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvZW8tZnJhbWV3b3JrL29iamVjdC1mb3JtL29iamVjdC1mb3JtL2Zvcm0tZWxlbWVudC10YWJsZS9mb3JtLWVsZW1lbnQtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHlFQUF5RSxDQUFDO0FBQzlHLE9BQU8sRUFBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzVGLE9BQU8sRUFBdUIsaUJBQWlCLEVBQUUsYUFBYSxFQUF5QixNQUFNLGdCQUFnQixDQUFDO0FBRzlHLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUMzRSxPQUFPLEVBQXdCLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQzlILE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQ2xGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzlCLE9BQU8sRUFBQyxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUMsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0saURBQWlELENBQUM7QUFnRHJGLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxvQkFBb0I7SUF1RGpFLFlBQW9CLGFBQTRCLEVBQVUsY0FBcUMsRUFDdEYsT0FBb0IsRUFBVSxTQUEyQixFQUFVLGNBQW1DLEVBQVUsWUFBMEI7UUFDakosS0FBSyxFQUFFLENBQUM7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Y0FBYyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDeEUsQ0FBQzs7QUF0Y00sNENBQWtCLEdBQUcsOENBQThDLENBQUM7QUFDcEUsb0RBQTBCLEdBQUcsc0RBQXNELENBQUM7O1lBeEI1RixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLFVBQVU7Z0JBQ3BCLG1zSkFBa0Q7Z0JBSWxELFNBQVMsRUFBRTtvQkFDVDt3QkFDRSxPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHlCQUF5QixDQUFDO3dCQUN4RCxLQUFLLEVBQUUsSUFBSTtxQkFDWjtvQkFDRDt3QkFDRSxPQUFPLEVBQUUsYUFBYTt3QkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQzt3QkFDeEQsS0FBSyxFQUFFLElBQUk7cUJBQ1o7aUJBQ0Y7O2FBQ0Y7OztZQXJEaUUsYUFBYTtZQU52RSxxQkFBcUI7WUFLckIsV0FBVztZQUM4RCxnQkFBZ0I7WUFBcEQsbUJBQW1CO1lBQWpDLFlBQVk7OztzQkErRHhDLFNBQVMsU0FBQyxTQUFTO3FCQUVuQixLQUFLOzhCQW9DTCxZQUFZLFNBQUMsNkJBQTZCLEVBQUUsQ0FBQyxRQUFRLENBQUMsY0FDdEQsWUFBWSxTQUFDLHlCQUF5QixFQUFFLENBQUMsUUFBUSxDQUFDLGNBQ2xELFlBQVksU0FBQyx1QkFBdUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxjQUNoRCxZQUFZLFNBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1BlbmRpbmdDaGFuZ2VzU2VydmljZX0gZnJvbSAnLi8uLi8uLi8uLi8uLi9lby1mcmFtZXdvcmstY29yZS9wZW5kaW5nLWNoYW5nZXMvcGVuZGluZy1jaGFuZ2VzLnNlcnZpY2UnO1xuaW1wb3J0IHtDb21wb25lbnQsIGZvcndhcmRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SLCBOR19WQUxJREFUT1JTLCBWYWxpZGF0b3IsIEZvcm1Db250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge09iamVjdEZvcm1PcHRpb25zfSBmcm9tICcuLi8uLi9vYmplY3QtZm9ybS1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQge0dyaWRPcHRpb25zLCBDb2xEZWYsIE1vZHVsZX0gZnJvbSAnQGFnLWdyaWQtY29tbXVuaXR5L2NvcmUnO1xuaW1wb3J0IHtHcmlkU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvYXBpL2dyaWQuc2VydmljZSc7XG5pbXBvcnQge0Rtc09iamVjdCwgRW5haW9FdmVudCwgRXZlbnRTZXJ2aWNlLCBMb2NhbFN0b3JhZ2VTZXJ2aWNlLCBTeXN0ZW1TZXJ2aWNlLCBUcmFuc2xhdGVTZXJ2aWNlLCBVdGlsc30gZnJvbSAnQGVvLXNkay9jb3JlJztcbmltcG9ydCB7Q2xpZW50U2lkZVJvd01vZGVsTW9kdWxlfSBmcm9tICdAYWctZ3JpZC1jb21tdW5pdHkvY2xpZW50LXNpZGUtcm93LW1vZGVsJztcbmltcG9ydCB7Q3N2RXhwb3J0TW9kdWxlfSBmcm9tICdAYWctZ3JpZC1jb21tdW5pdHkvY3N2LWV4cG9ydCc7XG5pbXBvcnQge2ZvcmtKb2lufSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7Um93RWRpdENvbXBvbmVudH0gZnJvbSAnLi9yb3ctZWRpdC9yb3ctZWRpdC5jb21wb25lbnQnO1xuaW1wb3J0IHtVbnN1YnNjcmliZU9uRGVzdHJveX0gZnJvbSAnLi4vLi4vLi4vdXRpbC91bnN1YnNjcmliZS91bnN1YnNjcmliZS5jb21wb25lbnQnO1xuXG4vLyBkYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgdGFibGUgY29tcG9uZW50XG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQ29tcG9uZW50UGFyYW1zIHtcbiAgLy8gY3VycmVudCBmb3JtIHNpdHVhdGlvbiAoRURJVCwgU0VBUkNIIG9yIENSRUFURSlcbiAgc2l0dWF0aW9uOiBzdHJpbmc7XG4gIC8vIHRhYmxlIHNpemUgKG1lZGl1bSwgbGFyZ2UpXG4gIHNpemU6IHN0cmluZztcbiAgLy8gdGhlIHRhYmxlcyBmcm9tIGVsZW1lbnRcbiAgZWxlbWVudDogYW55O1xuICAvLyB0aGUgZG1zIG9iamVjdCB0aGUgZm9ybSBpcyBhdHRhY2hlZCB0byAobmVlZGVkIGZvciBwcmV2aWV3IGluIGRpYWxvZylcbiAgb2JqZWN0PzogRG1zT2JqZWN0O1xufVxuXG4vLyByZXByZXNlbnRhdGlvbiBvZiBhIHJvdyB3aGlsZSBlZGl0aW5nXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRSb3cge1xuICBzaXR1YXRpb246IHN0cmluZztcbiAgaW5kZXg6IG51bWJlcjtcbiAgZm9ybU9wdGlvbnM6IE9iamVjdEZvcm1PcHRpb25zO1xuICB0YWJsZUVsZW1lbnQ6IGFueTtcbn1cblxuLy8gcmVzdWx0IG9mIGVkaXRpbmcgYSB0YWJsZXMgcm93XG5leHBvcnQgaW50ZXJmYWNlIEVkaXRSb3dSZXN1bHQge1xuICBpbmRleDogbnVtYmVyO1xuICByb3dEYXRhOiBhbnk7XG4gIGNyZWF0ZU5ld1JvdzogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1lbGVtZW50LXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXG4gICAgJy4vZm9ybS1lbGVtZW50LXRhYmxlLmNvbXBvbmVudC5zY3NzJ1xuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEZvcm1FbGVtZW50VGFibGVDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGb3JtRWxlbWVudFRhYmxlQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBGb3JtRWxlbWVudFRhYmxlQ29tcG9uZW50IGV4dGVuZHMgVW5zdWJzY3JpYmVPbkRlc3Ryb3kgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIHtcblxuICBwcml2YXRlIF9jYWNoZWRDb2x1bW5zOiBhbnlbXTtcbiAgcHJpdmF0ZSBfY2FjaGVkQ29sdW1uc092ZXJsYXk6IGFueVtdO1xuICBzdGF0aWMgQ09MVU1OU19ERUZJTklUSU9OID0gJ2VvLmZyYW1ld29yay5jYWNoZS50YWJsZXMuY29sdW1ucy5kZWZpbml0aW9uJztcbiAgc3RhdGljIENPTFVNTlNfREVGSU5JVElPTl9PVkVSTEFZID0gJ2VvLmZyYW1ld29yay5jYWNoZS50YWJsZXMub3ZlcmxheS5jb2x1bW5zLmRlZmluaXRpb24nO1xuXG4gIHB1YmxpYyBtb2R1bGVzOiBNb2R1bGVbXSA9IFtDbGllbnRTaWRlUm93TW9kZWxNb2R1bGUsIENzdkV4cG9ydE1vZHVsZV07XG5cbiAgQFZpZXdDaGlsZCgncm93RWRpdCcpIHJvd0VkaXQ6IFJvd0VkaXRDb21wb25lbnQ7XG5cbiAgQElucHV0KClcbiAgc2V0IHBhcmFtcyhwOiBUYWJsZUNvbXBvbmVudFBhcmFtcykge1xuICAgIGlmIChwKSB7XG4gICAgICB0aGlzLl9wYXJhbXMgPSBwO1xuICAgICAgaWYgKHRoaXMuX3BhcmFtcy5zaXR1YXRpb24gPT09ICdTRUFSQ0gnKSB7XG4gICAgICAgIHRoaXMuX3BhcmFtcy5zaXplID0gJ3N1cGVyc21hbGwnO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5fcGFyYW1zLnNpemUpIHtcbiAgICAgICAgdGhpcy5fcGFyYW1zLnNpemUgPSAnc21hbGwnO1xuICAgICAgfVxuICAgICAgdGhpcy5ncmlkUmVhZHkgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2VsZW1lbnRzID0gcC5lbGVtZW50LmVsZW1lbnRzO1xuICAgICAgdGhpcy5ncmlkT3B0aW9ucy5jb2x1bW5EZWZzID0gdGhpcy5jcmVhdGVDb2x1bW5EZWZpbml0aW9uKCk7XG4gICAgICBpZiAodGhpcy5fcGFyYW1zLnNpdHVhdGlvbiA9PT0gJ1NFQVJDSCcpIHtcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5jb2x1bW5EZWZzLnB1c2goe2hlYWRlck5hbWU6ICcnLCBjb2xJZDogJ2FjdGlvbnMnLCB3aWR0aDogMzQsIG1pbldpZHRoOiAzNCwgcGlubmVkOiAncmlnaHQnLCBjZWxsUmVuZGVyZXI6IHRoaXMuYWN0aW9uc0NlbGxSZW5kZXJlcn0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdmVybGF5R3JpZE9wdGlvbnMuY29sdW1uRGVmcyA9IHRoaXMuY3JlYXRlQ29sdW1uRGVmaW5pdGlvbih0cnVlKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5ncmlkUmVhZHkgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBnZXQgcGFyYW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9wYXJhbXM7XG4gIH1cblxuICBfcGFyYW1zOiBUYWJsZUNvbXBvbmVudFBhcmFtcztcbiAgcHJpdmF0ZSBfZWxlbWVudHM6IGFueVtdO1xuICBncmlkUmVhZHkgPSBmYWxzZTtcbiAgdmFsdWU6IGFueVtdO1xuICBpbm5lclZhbHVlOiBhbnlbXTtcbiAgZ3JpZE9wdGlvbnM6IEdyaWRPcHRpb25zO1xuICBvdmVybGF5R3JpZE9wdGlvbnM6IEdyaWRPcHRpb25zO1xuICBlZGl0aW5nUm93OiBFZGl0Um93O1xuICBzaG93RGlhbG9nID0gZmFsc2U7XG4gIHNob3dQcmV2aWV3ID0gZmFsc2U7XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5jb250cm9sLmFsdC5zaGlmdC5jJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5jb250cm9sLnNoaWZ0LmMnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmNvbnRyb2wuYWx0LmMnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmNvbnRyb2wuYycsIFsnJGV2ZW50J10pXG4gIGNvcHlDZWxsSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIHRoaXMuZ3JpZEFwaS5jb3B5VG9DbGlwYm9hcmQoZXZlbnQsIHRoaXMuZ3JpZE9wdGlvbnMpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzeXN0ZW1TZXJ2aWNlOiBTeXN0ZW1TZXJ2aWNlLCBwcml2YXRlIHBlbmRpbmdDaGFuZ2VzOiBQZW5kaW5nQ2hhbmdlc1NlcnZpY2UsXG4gICAgcHVibGljIGdyaWRBcGk6IEdyaWRTZXJ2aWNlLCBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogTG9jYWxTdG9yYWdlU2VydmljZSwgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5ncmlkT3B0aW9ucyA9IDxHcmlkT3B0aW9ucz57XG4gICAgICBjb250ZXh0OiB0aGlzLmdyaWRBcGkuZ2V0Q29udGV4dCgpLFxuICAgICAgaGVhZGVySGVpZ2h0OiAzMCxcbiAgICAgIHJvd0hlaWdodDogMzAsXG4gICAgICByb3dCdWZmZXI6IDIwLFxuICAgICAgbXVsdGlTb3J0S2V5OiAnY3RybCcsXG4gICAgICBhY2NlbnRlZFNvcnQ6IHRydWUsXG4gICAgICAvLyBzdXBwcmVzc0NlbGxTZWxlY3Rpb246IHRydWUsXG4gICAgICByb3dTZWxlY3Rpb246ICdzaW5nbGUnLFxuICAgICAgc3VwcHJlc3NNb3ZhYmxlQ29sdW1uczogdHJ1ZSxcbiAgICAgIGVuYWJsZUZpbHRlcjogZmFsc2UsXG4gICAgICBzdXBwcmVzc05vUm93c092ZXJsYXk6IHRydWUsXG4gICAgICBzdXBwcmVzc0xvYWRpbmdPdmVybGF5OiB0cnVlLFxuICAgICAgc3VwcHJlc3NDb250ZXh0TWVudTogdHJ1ZVxuICAgIH07XG4gICAgdGhpcy5ncmlkT3B0aW9ucy5jb250ZXh0LnRhYmxlQ29tcG9uZW50ID0gdGhpcztcblxuICAgIHRoaXMub3ZlcmxheUdyaWRPcHRpb25zID0gPEdyaWRPcHRpb25zPntcbiAgICAgIGNvbnRleHQ6IHRoaXMuZ3JpZEFwaS5nZXRDb250ZXh0KCksXG4gICAgICBoZWFkZXJIZWlnaHQ6IDMwLFxuICAgICAgcm93SGVpZ2h0OiAzMCxcbiAgICAgIHJvd0J1ZmZlcjogMjAsXG4gICAgICBtdWx0aVNvcnRLZXk6ICdjdHJsJyxcbiAgICAgIGFjY2VudGVkU29ydDogdHJ1ZSxcbiAgICAgIC8vIHN1cHByZXNzQ2VsbFNlbGVjdGlvbjogdHJ1ZSxcbiAgICAgIHJvd1NlbGVjdGlvbjogJ3NpbmdsZScsXG4gICAgICBzdXBwcmVzc01vdmFibGVDb2x1bW5zOiB0cnVlLFxuICAgICAgZW5hYmxlRmlsdGVyOiBmYWxzZSxcbiAgICAgIHN1cHByZXNzTm9Sb3dzT3ZlcmxheTogdHJ1ZSxcbiAgICAgIHN1cHByZXNzTG9hZGluZ092ZXJsYXk6IHRydWUsXG4gICAgICBzdXBwcmVzc0NvbnRleHRNZW51OiB0cnVlXG4gICAgfTtcbiAgICB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5jb250ZXh0LnRhYmxlQ29tcG9uZW50ID0gdGhpcztcbiAgICB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5yb3dDbGFzc1J1bGVzID0ge1xuICAgICAgJ25ldy1yb3cnOiBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIGlmIChwYXJhbXMuZGF0YS5pc05ld1Jvdykge1xuICAgICAgICAgIGRlbGV0ZSBwYXJhbXMuZGF0YS5pc05ld1JvdztcbiAgICAgICAgICBkZWxldGUgcGFyYW1zLmNvbnRleHQudGFibGVDb21wb25lbnQuaW5uZXJWYWx1ZVtwYXJhbXMuY29udGV4dC50YWJsZUNvbXBvbmVudC5pbm5lclZhbHVlLmxlbmd0aCAtIDFdLmlzTmV3Um93O1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucGVuZGluZ0NoYW5nZXMudGFza3MkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkJClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodGFza3MgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5zdXBwcmVzc1Jvd0NsaWNrU2VsZWN0aW9uID0gISF0aGlzLnJvd0VkaXQgJiYgISF0YXNrcy5pbmNsdWRlcyh0aGlzLnJvd0VkaXQucGVuZGluZ1Rhc2tJZCk7XG4gICAgICAgIH0sIDApO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl9jYWNoZWRDb2x1bW5zID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRJdGVtKEZvcm1FbGVtZW50VGFibGVDb21wb25lbnQuQ09MVU1OU19ERUZJTklUSU9OKSB8fCBbXTtcbiAgICB0aGlzLl9jYWNoZWRDb2x1bW5zT3ZlcmxheSA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbShGb3JtRWxlbWVudFRhYmxlQ29tcG9uZW50LkNPTFVNTlNfREVGSU5JVElPTl9PVkVSTEFZKSB8fCBbXTtcbiAgICB0aGlzLnNob3dQcmV2aWV3ID0gISF0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2VvLnRhYmxlLnNob3dQcmV2aWV3Jyk7XG4gIH1cblxuICBhY3Rpb25zQ2VsbFJlbmRlcmVyKHBhcmFtcykge1xuICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgIGlmIChwYXJhbXMuY29udGV4dC50YWJsZUNvbXBvbmVudC5wYXJhbXMuc2l0dWF0aW9uID09PSAnU0VBUkNIJykge1xuICAgICAgZGl2LmlubmVySFRNTCA9IGA8ZGl2IGNsYXNzPVwiYWN0aW9uLWljb25cIiBpZD1cImFjdGlvbkljb24tJHtwYXJhbXMucm93SW5kZXh9XCI+XG4gICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICA8cGF0aCBkPVwiTTE5IDYuNDFMMTcuNTkgNSAxMiAxMC41OSA2LjQxIDUgNSA2LjQxIDEwLjU5IDEyIDUgMTcuNTkgNi40MSAxOSAxMiAxMy40MSAxNy41OSAxOSAxOSAxNy41OSAxMy40MSAxMnpcIi8+XG4gICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PmA7XG4gICAgICBsZXQgY2xlYXJJY29uID0gZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoYCNhY3Rpb25JY29uLSR7cGFyYW1zLnJvd0luZGV4fWApWzBdO1xuICAgICAgY2xlYXJJY29uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gcGFyYW1zLmNvbnRleHQudGFibGVDb21wb25lbnQuY2xlYXJSb3cocGFyYW1zLnJvd0luZGV4KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpdi5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz1cImFjdGlvbi1pY29uXCIgaWQ9XCJhY3Rpb25JY29uLSR7cGFyYW1zLnJvd0luZGV4fVwiPlxuICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgPHBhdGggZD1cIk02IDE5YzAgMS4xLjkgMiAyIDJoOGMxLjEgMCAyLS45IDItMlY3SDZ2MTJ6TTE5IDRoLTMuNWwtMS0xaC01bC0xIDFINXYyaDE0VjR6XCIvPlxuICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5gO1xuICAgICAgbGV0IGRlbGV0ZUljb24gPSBkaXYucXVlcnlTZWxlY3RvckFsbChgI2FjdGlvbkljb24tJHtwYXJhbXMucm93SW5kZXh9YClbMF07XG4gICAgICBkZWxldGVJY29uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gcGFyYW1zLmNvbnRleHQudGFibGVDb21wb25lbnQuZGVsZXRlUm93KHBhcmFtcy5yb3dJbmRleCkpO1xuICAgIH1cblxuICAgIHJldHVybiBkaXY7XG4gIH1cblxuICBwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnlbXSk6IHZvaWQge1xuXG4gICAgaWYgKCF2YWx1ZSAmJiB0aGlzLl9wYXJhbXMuc2l0dWF0aW9uID09PSAnU0VBUkNIJykge1xuICAgICAgLy8gZm9yIHNlYXJjaCByb3cgZGF0YSB3aWxsIGFsd2F5cyBiZSBvbmUgZW1wdHkgcm93XG4gICAgICAvLyB0b2RvOiByZS1lbmFibGUgYWdhaW4gd2hlbiBzZWFyY2ggaW4gdGFibGVzIGlzIHN1cHBvcnRlZFxuICAgICAgdmFsdWUgPSBbe31dO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlID0gdmFsdWUgaW5zdGFuY2VvZiBBcnJheSA/IHZhbHVlIDogW107XG4gICAgLy8gY3JlYXRlIGEgY2xvbmUgb2YgdGhlIGFjdHVhbCB2YWx1ZSBmb3IgaW50ZXJuYWwgdXNhZ2VcbiAgICB0aGlzLmlubmVyVmFsdWUgPSBVdGlscy5mb3JtRGF0YVBhcnNlKFV0aWxzLmZvcm1EYXRhU3RyaW5naWZ5KHRoaXMudmFsdWUpKTtcblxuICAgIGlmICh0aGlzLmdyaWRPcHRpb25zLmFwaSkge1xuICAgICAgdGhpcy5ncmlkT3B0aW9ucy5hcGkuc2V0Um93RGF0YSh0aGlzLmlubmVyVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdyaWRPcHRpb25zLnJvd0RhdGEgPSB0aGlzLmlubmVyVmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLmFwaSkge1xuICAgICAgdGhpcy5vdmVybGF5R3JpZE9wdGlvbnMuYXBpLnNldFJvd0RhdGEodGhpcy5pbm5lclZhbHVlKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZWxlY3RFZGl0Um93KCksIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5yb3dEYXRhID0gdGhpcy5pbm5lclZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGNvbHVtbiBkZWZpbml0aW9uIGZyb20gZm9ybSBlbGVtZW50LlxuICAgKiBAcmV0dXJucyBjb2x1bW4gZGVmaW5pdGlvbiB0byBiZSBhZGRlZCB0byB0aGUgZ3JpZE9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlQ29sdW1uRGVmaW5pdGlvbihvdmVybGF5PzogYm9vbGVhbik6IENvbERlZltdIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudHMubWFwKChlbCkgPT4ge1xuICAgICAgbGV0IGNvbDogQ29sRGVmID0gdGhpcy5ncmlkQXBpLmdldENvbHVtbkRlZmluaXRpb24oZWwpO1xuICAgICAgT2JqZWN0LmFzc2lnbihjb2wsIHtcbiAgICAgICAgaGVhZGVyTmFtZTogZWwubGFiZWwsXG4gICAgICAgIHN1cHByZXNzTWVudTogdHJ1ZSxcbiAgICAgICAgZmlsdGVyOiBmYWxzZSxcbiAgICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcbiAgICAgICAgZmllbGQ6IGVsLm5hbWUsXG4gICAgICAgIHJlZkRhdGE6IHtcbiAgICAgICAgICAuLi5jb2wucmVmRGF0YSxcbiAgICAgICAgICBfZW9Gb3JtRWxlbWVudDogZWwsXG4gICAgICAgICAgX3NpdHVhdGlvbjogdGhpcy5fcGFyYW1zLnNpdHVhdGlvblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxldCBjYWNoZWRDb2x1bW5zID0gdGhpcy5fY2FjaGVkQ29sdW1ucztcbiAgICAgIGlmIChvdmVybGF5KSB7XG4gICAgICAgIGNhY2hlZENvbHVtbnMgPSB0aGlzLl9jYWNoZWRDb2x1bW5zT3ZlcmxheTtcbiAgICAgIH1cbiAgICAgIGxldCBjYWNoZWRDb2x1bW4gPSBjYWNoZWRDb2x1bW5zLmZpbmQoZiA9PiBmLnFuYW1lID09PSBlbC5xbmFtZSk7XG4gICAgICBpZiAoY2FjaGVkQ29sdW1uKSB7XG4gICAgICAgIGNvbC53aWR0aCA9IGNhY2hlZENvbHVtbi53aWR0aDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb2w7XG4gICAgfSk7XG4gIH1cblxuICBhZGRSb3coKSB7XG4gICAgY29uc3Qgcm93RGF0YSA9IHt9O1xuICAgIGNvbnN0IGFzeW5jRmV0Y2hlcyA9IFtdO1xuICAgIHRoaXMuX2VsZW1lbnRzXG4gICAgICAuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgIGlmIChlbC5kZWZhdWx0dmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJvd0RhdGFbZWwubmFtZV0gPSBlbC5kZWZhdWx0dmFsdWU7XG4gICAgICAgIH0gZWxzZSBpZiAoZWwuZGVmYXVsdHZhbHVlZnVuY3Rpb24pIHtcbiAgICAgICAgICByb3dEYXRhW2VsLm5hbWVdID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldERlZmF1bHRWYWx1ZShlbC5kZWZhdWx0dmFsdWVmdW5jdGlvbik7XG4gICAgICAgICAgaWYgKGVsLmRlZmF1bHR2YWx1ZWZ1bmN0aW9uID09PSAnQ1VSUkVOVF9VU0VSJykge1xuICAgICAgICAgICAgYXN5bmNGZXRjaGVzLnB1c2godGhpcy5yZXNvbHZlT3JnRGF0YU1ldGEoZWwubmFtZSwgcm93RGF0YVtlbC5uYW1lXSkpXG4gICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIGlmIChhc3luY0ZldGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgZm9ya0pvaW4oYXN5bmNGZXRjaGVzKS5zdWJzY3JpYmUoKHJlczoge2tleTogc3RyaW5nLCB2YWx1ZTogYW55fVtdKSA9PiB7XG4gICAgICAgIHJlcy5mb3JFYWNoKHIgPT4ge1xuICAgICAgICAgIHJvd0RhdGFbci5rZXldID0gci52YWx1ZTtcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5zZXRFZGl0Um93KC0xLCByb3dEYXRhKTtcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0RWRpdFJvdygtMSwgcm93RGF0YSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlT3JnRGF0YU1ldGEoZWxlbWVudE5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHJldHVybiB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uT2JqZWN0KHZhbHVlKS5waXBlKFxuICAgICAgbWFwKHJlcyA9PiAoe1xuICAgICAgICBrZXk6IGAke2VsZW1lbnROYW1lfV9tZXRhYCxcbiAgICAgICAgdmFsdWU6IHJlc1xuICAgICAgfSkpXG4gICAgKVxuICB9XG5cbiAgZWRpdFJvdyhldmVudCkge1xuICAgIHRoaXMuc2V0RWRpdFJvdyhldmVudC5ub2RlLmlkLCBldmVudC5ub2RlLmRhdGEpO1xuICB9XG5cbiAgb25FZGl0Q29tcGxldGUoZXZlbnQpIHtcbiAgICAvL3RvZG86IGlzIGl0IG9ic29sZXRlP1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRFZGl0Um93KGluZGV4OiBudW1iZXIsIGRhdGE6IGFueSkge1xuICAgIC8vIHNldHVwIHRoZSByb3cgdG8gYmUgZWRpdGVkLiBCZXNpZGUgc29tZSBwcm9wZXJ0aWVzLCB0aGVcbiAgICAvLyByb3cgY29udGFpbnMgYSBmb3JtIG1vZGVsIGFuZCBmb3JtIGRhdGEuIElmIHRoZSBwYXJlbnQgZm9ybSBtb2RlbFxuICAgIC8vIHByb3ZpZGVkIGEgc2NyaXB0LCB0aGlzIHdpbGwgYmUgYWRkZWQgYXMgd2VsbCwgc28gZWRpdGluZyBhIHJvdyB3aWxsXG4gICAgLy8gcmVzcGVjdCB0aGUgZm9ybSBzY3JpcHQuXG4gICAgdGhpcy5lZGl0aW5nUm93ID0ge1xuICAgICAgc2l0dWF0aW9uOiB0aGlzLl9wYXJhbXMuc2l0dWF0aW9uLFxuICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgdGFibGVFbGVtZW50OiB0aGlzLl9wYXJhbXMuZWxlbWVudCxcbiAgICAgIGZvcm1PcHRpb25zOiB7XG4gICAgICAgIGZvcm1Nb2RlbDoge1xuICAgICAgICAgIHNpdHVhdGlvbjogdGhpcy5fcGFyYW1zLnNpdHVhdGlvbiwgIC8vIHJlcXVpcmVkIGJ5IG9iamVjdCBmb3JtIGZvciByZWFkaW5nIGRhdGFcbiAgICAgICAgICBlbGVtZW50czogW3tcbiAgICAgICAgICAgIHR5cGU6ICdvMm1Hcm91cCcsXG4gICAgICAgICAgICBlbGVtZW50czogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLl9lbGVtZW50cykpXG4gICAgICAgICAgfV1cbiAgICAgICAgfSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgZGlzYWJsZWQ6IHRoaXMuX3BhcmFtcy5lbGVtZW50LnJlYWRvbmx5XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnNob3dEaWFsb2cgPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZWxlY3RFZGl0Um93KCksIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RFZGl0Um93KCkge1xuICAgIGlmICh0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5hcGkpe1xuICAgICAgdGhpcy5vdmVybGF5R3JpZE9wdGlvbnMuYXBpLmRlc2VsZWN0QWxsKCk7XG4gICAgICBpZiAodGhpcy5lZGl0aW5nUm93ICYmIHRoaXMuZWRpdGluZ1Jvdy5pbmRleCAhPT0gLTEpIHtcbiAgICAgICAgbGV0IHJvd05vZGUgPSB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5hcGkuZ2V0Um93Tm9kZSgnJyArIHRoaXMuZWRpdGluZ1Jvdy5pbmRleCk7XG4gICAgICAgIHJvd05vZGUuc2V0U2VsZWN0ZWQodHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLmFwaS5lbnN1cmVOb2RlVmlzaWJsZShyb3dOb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRhYmxlVmFsdWUoKSB7XG4gICAgdGhpcy5ncmlkT3B0aW9ucy5hcGkuc2V0Um93RGF0YSh0aGlzLmlubmVyVmFsdWUpO1xuICAgIGlmICh0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5hcGkpIHtcbiAgICAgIHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLmFwaS5zZXRSb3dEYXRhKHRoaXMuaW5uZXJWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLnJvd0RhdGEgPSB0aGlzLmlubmVyVmFsdWU7XG4gICAgfVxuICAgIHRoaXMudmFsdWUgPSB0aGlzLmlubmVyVmFsdWU7XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudmFsdWUuaW5jbHVkZXMoJ2lzTmV3Um93JykpKSB7XG4gICAgICBkZWxldGUgdGhpcy52YWx1ZVsnaXNOZXdSb3cnXTtcbiAgICB9XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy52YWx1ZSk7XG4gIH1cblxuICBjYW5jZWxSb3dFZGl0KCkge1xuICAgIGlmICh0aGlzLnJvd0VkaXQpIHtcbiAgICAgIHRoaXMucm93RWRpdC5maW5pc2hQZW5kaW5nKCk7XG4gICAgfVxuICAgIHRoaXMuZWRpdGluZ1JvdyA9IG51bGw7XG4gICAgaWYgKHRoaXMuX3BhcmFtcy5zaXR1YXRpb24gPT09ICdTRUFSQ0gnKSB7XG4gICAgICB0aGlzLnNob3dEaWFsb2cgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBvbkNsb3NlKCkge1xuICAgIHRoaXMuZWRpdGluZ1JvdyA9IG51bGw7XG4gICAgdGhpcy5zaG93RGlhbG9nID0gZmFsc2U7XG4gIH1cblxuICB1cGRhdGVSb3cocm93UmVzdWx0OiBhbnkpIHtcbiAgICBjb25zdCBpc05ld1JvdyA9IHJvd1Jlc3VsdC5pbmRleCA9PT0gLTE7XG4gICAgaWYgKGlzTmV3Um93KSB7XG4gICAgICB0aGlzLmlubmVyVmFsdWUucHVzaCh7Li4ucm93UmVzdWx0LnJvd0RhdGEsIC4uLntpc05ld1JvdzogdHJ1ZX19KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZWxlbWVudHMuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgIC8vIHRoaXMuaW5uZXJWYWx1ZVtyb3dSZXN1bHQuaW5kZXhdID0gey4uLnRoaXMuaW5uZXJWYWx1ZVtyb3dSZXN1bHQuaW5kZXhdLCAuLi5yb3dSZXN1bHQucm93RGF0YX07XG4gICAgICAgIHRoaXMuaW5uZXJWYWx1ZVtyb3dSZXN1bHQuaW5kZXhdW2VsLm5hbWVdID0gcm93UmVzdWx0LnJvd0RhdGFbZWwubmFtZV07XG4gICAgICAgIGlmICh0aGlzLmlubmVyVmFsdWVbcm93UmVzdWx0LmluZGV4XVtlbC5uYW1lICsgJ19tZXRhJ10pIHtcbiAgICAgICAgICB0aGlzLmlubmVyVmFsdWVbcm93UmVzdWx0LmluZGV4XVtlbC5uYW1lICsgJ19tZXRhJ10gPSByb3dSZXN1bHQucm93RGF0YVtlbC5uYW1lICsgJ19tZXRhJ107XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVRhYmxlVmFsdWUoKTtcbiAgICBpZiAodGhpcy5fcGFyYW1zLnNpdHVhdGlvbiA9PT0gJ1NFQVJDSCcpIHtcbiAgICAgIHRoaXMuc2hvd0RpYWxvZyA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoaXNOZXdSb3cgJiYgIXJvd1Jlc3VsdC5jcmVhdGVOZXdSb3cpIHtcbiAgICAgIHRoaXMuc2V0RWRpdFJvdyh0aGlzLmlubmVyVmFsdWUubGVuZ3RoIC0gMSwgdGhpcy5pbm5lclZhbHVlW3RoaXMuaW5uZXJWYWx1ZS5sZW5ndGggLSAxXSk7XG4gICAgfSBlbHNlIGlmIChyb3dSZXN1bHQuY3JlYXRlTmV3Um93KSB7XG4gICAgICB0aGlzLmFkZFJvdygpO1xuICAgICAgbGV0IHJvd05vZGUgPSB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5hcGkuZ2V0Um93Tm9kZSgnJyArICh0aGlzLmlubmVyVmFsdWUubGVuZ3RoIC0gMSkpO1xuICAgICAgdGhpcy5vdmVybGF5R3JpZE9wdGlvbnMuYXBpLmVuc3VyZU5vZGVWaXNpYmxlKHJvd05vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldEVkaXRSb3cocm93UmVzdWx0LmluZGV4LCB0aGlzLmlubmVyVmFsdWVbcm93UmVzdWx0LmluZGV4XSk7XG4gICAgfVxuICB9XG5cbiAgY29weVJvdyhyb3dSZXN1bHQ6IGFueSkge1xuICAgIHJvd1Jlc3VsdC5pbmRleCA9IC0xO1xuICAgIHRoaXMuaW5uZXJWYWx1ZS5wdXNoKHsuLi5yb3dSZXN1bHQucm93RGF0YSwgLi4ue2lzTmV3Um93OiB0cnVlfX0pO1xuICAgIHRoaXMudXBkYXRlVGFibGVWYWx1ZSgpO1xuICAgIGlmIChyb3dSZXN1bHQuY3JlYXRlTmV3Um93KSB7XG4gICAgICB0aGlzLmFkZFJvdygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldEVkaXRSb3codGhpcy5pbm5lclZhbHVlLmxlbmd0aCAtIDEsIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocm93UmVzdWx0LnJvd0RhdGEpKSk7XG4gICAgfVxuICB9XG5cbiAgZGVsZXRlUm93KGluZGV4OiBudW1iZXIpIHtcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMuaW5uZXJWYWx1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnVwZGF0ZVRhYmxlVmFsdWUoKTtcbiAgICAgICAgaWYgKHRoaXMuaW5uZXJWYWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSBpbmRleCA9PSB0aGlzLmlubmVyVmFsdWUubGVuZ3RoID8gdGhpcy5pbm5lclZhbHVlLmxlbmd0aCAtIDEgOiBpbmRleDtcbiAgICAgICAgICB0aGlzLnNldEVkaXRSb3cobmV4dEluZGV4LCB0aGlzLmlubmVyVmFsdWVbbmV4dEluZGV4XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jYW5jZWxSb3dFZGl0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxuXG4gIGNsZWFyUm93KGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLmlubmVyVmFsdWVbaW5kZXhdID0ge307XG4gICAgdGhpcy51cGRhdGVUYWJsZVZhbHVlKCk7XG4gIH1cblxuICBleHBvcnRDU1YoKSB7XG4gICAgdGhpcy5ncmlkT3B0aW9ucy5hcGkuZXhwb3J0RGF0YUFzQ3N2KHtcbiAgICAgIC4uLnRoaXMuZ3JpZEFwaS5jc3ZFeHBvcnRQYXJhbXMsXG4gICAgICBmaWxlTmFtZTogdGhpcy5fcGFyYW1zLmVsZW1lbnQubGFiZWxcbiAgICB9KTtcbiAgfVxuXG4gIHNpemVUb0ZpdChvdmVybGF5PzogYm9vbGVhbikge1xuICAgIGlmIChvdmVybGF5KSB7XG4gICAgICB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5hcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdyaWRPcHRpb25zLmFwaS5zaXplQ29sdW1uc1RvRml0KCk7XG4gICAgfVxuICB9XG5cbiAgb3BlbkRpYWxvZygpIHtcbiAgICB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5hcGkucmVmcmVzaFZpZXcoKTtcbiAgICB0aGlzLnNob3dEaWFsb2cgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVRhYmxlRGF0YSgpOiBib29sZWFuIHtcbiAgICAvLyB0b2RvOiBpbXBsZW1lbnRcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhbGlkYXRlKGM6IEZvcm1Db250cm9sKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdGVUYWJsZURhdGEoKSA/IG51bGwgOiB7XG4gICAgICB0YWJsZToge1xuICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgb25Nb3VzZURvd24oJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vdmVybGF5R3JpZE9wdGlvbnMuc3VwcHJlc3NSb3dDbGlja1NlbGVjdGlvbikge1xuICAgICAgaWYgKCF0aGlzLnBlbmRpbmdDaGFuZ2VzLmNoZWNrRm9yUGVuZGluZ1Rhc2tzKHRoaXMucm93RWRpdC5wZW5kaW5nVGFza0lkKSkge1xuICAgICAgICB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5zdXBwcmVzc1Jvd0NsaWNrU2VsZWN0aW9uID0gZmFsc2U7XG4gICAgICAgIHRoaXMucm93RWRpdC5maW5pc2hQZW5kaW5nKCk7XG4gICAgICAgIGxldCByb3dJbmRleCA9IHRoaXMuZ3JpZEFwaS5nZXRSb3dJbmRleCgkZXZlbnQudGFyZ2V0LCAnYWctYm9keScpO1xuICAgICAgICBpZiAocm93SW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLm92ZXJsYXlHcmlkT3B0aW9ucy5hcGkuZ2V0Um93Tm9kZSgnJyArIHJvd0luZGV4KS5zZXRTZWxlY3RlZCh0cnVlLCB0cnVlKTtcbiAgICAgICAgICAkZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAkZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Tb3J0Q2hhbmdlZCgpe1xuICAgIGxldCByb3dOb2RlID0gdGhpcy5vdmVybGF5R3JpZE9wdGlvbnMuYXBpLmdldFJvd05vZGUoJycgKyB0aGlzLmVkaXRpbmdSb3cuaW5kZXgpO1xuICAgIHRoaXMub3ZlcmxheUdyaWRPcHRpb25zLmFwaS5lbnN1cmVOb2RlVmlzaWJsZShyb3dOb2RlKTtcbiAgfVxuXG4gIG9uQ2VsbENsaWNrZWQoJGV2ZW50KSB7XG4gICAgaWYgKCRldmVudC5yb3dJbmRleCAhPT0gbnVsbCkge1xuICAgICAgaWYgKCEkZXZlbnQubm9kZS5ncm91cCAmJiAkZXZlbnQuZGF0YSkge1xuICAgICAgICBpZiAoJGV2ZW50LmNvbERlZi5jZWxsQ2xhc3MgPT09ICdyb3V0ZXItbGluay1jZWxsJykge1xuICAgICAgICAgIHRoaXMuZ3JpZEFwaS5vcGVuUm91dGVyTGluaygkZXZlbnQuZXZlbnQsICdhZy1yb3cnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ29sdW1uUmVzaXplZChjb2x1bW46IGFueSwgb3ZlcmxheT86IGJvb2xlYW4pIHtcbiAgICBsZXQgY29sdW1uc0RlZmluaXRpb24gPSBGb3JtRWxlbWVudFRhYmxlQ29tcG9uZW50LkNPTFVNTlNfREVGSU5JVElPTjtcbiAgICBsZXQgY2FjaGVkQ29sdW1ucyA9IHRoaXMuX2NhY2hlZENvbHVtbnM7XG4gICAgaWYgKG92ZXJsYXkpIHtcbiAgICAgIGNvbHVtbnNEZWZpbml0aW9uID0gRm9ybUVsZW1lbnRUYWJsZUNvbXBvbmVudC5DT0xVTU5TX0RFRklOSVRJT05fT1ZFUkxBWTtcbiAgICAgIGNhY2hlZENvbHVtbnMgPSB0aGlzLl9jYWNoZWRDb2x1bW5zT3ZlcmxheTtcbiAgICB9XG4gICAgbGV0IGNvbCA9IGNhY2hlZENvbHVtbnMuZmluZChjID0+IGMucW5hbWUgPT09IGNvbHVtbi5jb2xEZWYucmVmRGF0YS5xbmFtZSk7XG4gICAgaWYgKGNvbCkge1xuICAgICAgY29sLndpZHRoID0gY29sdW1uLmFjdHVhbFdpZHRoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWNoZWRDb2x1bW5zLnB1c2goe3FuYW1lOiBjb2x1bW4uY29sRGVmLnJlZkRhdGEucW5hbWUsIHdpZHRoOiBjb2x1bW4uYWN0dWFsV2lkdGh9KTtcbiAgICB9XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRJdGVtKGNvbHVtbnNEZWZpbml0aW9uLCBjYWNoZWRDb2x1bW5zKTtcbiAgfVxuXG4gIHRvZ2dsZVByZXZpZXcoKSB7XG4gICAgdGhpcy5zaG93UHJldmlldyA9ICF0aGlzLnNob3dQcmV2aWV3O1xuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgnZW8udGFibGUuc2hvd1ByZXZpZXcnLCB0aGlzLnNob3dQcmV2aWV3KTtcbiAgfVxufVxuIl19