verben-ticketing-ui 0.8.5 → 0.8.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.
Files changed (31) hide show
  1. package/esm2022/src/lib/components/add-ticket/add-ticket.component.mjs +12 -5
  2. package/esm2022/src/lib/components/ticketing/ticketing.component.mjs +24 -13
  3. package/esm2022/src/lib/components/ticketing/ticketing.service.mjs +12 -8
  4. package/esm2022/src/lib/components/ticketing-detail/ticketing-detail.component.mjs +32 -24
  5. package/esm2022/src/lib/pipes/async-label.pipe.mjs +4 -3
  6. package/esm2022/src/lib/services/environment.service.mjs +1 -1
  7. package/esm2022/src/lib/services/http-web-request.service.mjs +17 -16
  8. package/esm2022/src/lib/services/import.service.mjs +8 -123
  9. package/esm2022/src/lib/services/label.service.mjs +9 -8
  10. package/esm2022/src/lib/services/shared.service.mjs +6 -2
  11. package/fesm2022/verben-ticketing-ui-src-lib-components-add-ticket.mjs +11 -4
  12. package/fesm2022/verben-ticketing-ui-src-lib-components-add-ticket.mjs.map +1 -1
  13. package/fesm2022/verben-ticketing-ui-src-lib-components-ticketing-detail.mjs +31 -23
  14. package/fesm2022/verben-ticketing-ui-src-lib-components-ticketing-detail.mjs.map +1 -1
  15. package/fesm2022/verben-ticketing-ui-src-lib-components-ticketing.mjs +34 -19
  16. package/fesm2022/verben-ticketing-ui-src-lib-components-ticketing.mjs.map +1 -1
  17. package/fesm2022/verben-ticketing-ui-src-lib-pipes.mjs +3 -2
  18. package/fesm2022/verben-ticketing-ui-src-lib-pipes.mjs.map +1 -1
  19. package/fesm2022/verben-ticketing-ui-src-lib-services.mjs +34 -143
  20. package/fesm2022/verben-ticketing-ui-src-lib-services.mjs.map +1 -1
  21. package/package.json +13 -13
  22. package/src/lib/components/add-ticket/add-ticket.component.d.ts +2 -1
  23. package/src/lib/components/ticketing/ticketing.component.d.ts +5 -3
  24. package/src/lib/components/ticketing/ticketing.service.d.ts +2 -0
  25. package/src/lib/components/ticketing-detail/ticketing-detail.component.d.ts +6 -5
  26. package/src/lib/pipes/async-label.pipe.d.ts +1 -1
  27. package/src/lib/services/environment.service.d.ts +0 -1
  28. package/src/lib/services/http-web-request.service.d.ts +6 -6
  29. package/src/lib/services/import.service.d.ts +2 -0
  30. package/src/lib/services/label.service.d.ts +1 -1
  31. package/src/lib/services/shared.service.d.ts +2 -0
@@ -21,6 +21,7 @@ export class AddTicketComponent {
21
21
  // console.log({ Test: this.test });
22
22
  // }
23
23
  createTicketForm;
24
+ overrideToken = null;
24
25
  activeUser = null;
25
26
  activeApp = null;
26
27
  activeTenant = null;
@@ -44,6 +45,7 @@ export class AddTicketComponent {
44
45
  this.server = server;
45
46
  this.sharedService = sharedService;
46
47
  this.envSvc = envSvc;
48
+ this.sharedService.initService(this.overrideToken);
47
49
  this.createTicketForm = this.fb.group({
48
50
  Title: new FormControl({
49
51
  value: null,
@@ -72,6 +74,9 @@ export class AddTicketComponent {
72
74
  }
73
75
  ngOnInit() { }
74
76
  async ngOnChanges(changes) {
77
+ if (changes['overrideToken']) {
78
+ this.sharedService.initService(this.overrideToken);
79
+ }
75
80
  if (changes['selectedTicket'] && this.selectedTicket) {
76
81
  this.createTicketForm.patchValue({
77
82
  Title: this.selectedTicket.Title,
@@ -196,7 +201,7 @@ export class AddTicketComponent {
196
201
  return;
197
202
  }
198
203
  this.utilService.sendBI(true);
199
- const res = await this.server.post(`Ticket/SaveTicket`, [item], this.envSvc.environment.TicketingAPI);
204
+ const res = await this.server.post(`Ticket/SaveTicket`, [item], this.overrideToken || undefined, this.envSvc.environment.TicketingAPI);
200
205
  this.utilService.sendBI(false);
201
206
  if (res instanceof ErrorResponse) {
202
207
  }
@@ -304,12 +309,14 @@ export class AddTicketComponent {
304
309
  };
305
310
  }
306
311
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AddTicketComponent, deps: [{ token: i1.FormBuilder }, { token: i2.UtilService }, { token: i2.HttpWebRequestService }, { token: i2.SharedService }, { token: i2.EnvironmentService }], target: i0.ɵɵFactoryTarget.Component });
307
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AddTicketComponent, selector: "app-add-ticket", inputs: { activeUser: "activeUser", activeApp: "activeApp", activeTenant: "activeTenant", selectedTicket: "selectedTicket", isDisabled: "isDisabled", isVisible: "isVisible", defaultCompany: "defaultCompany" }, outputs: { onOpen: "onOpen", onClose: "onClose", onSave: "onSave" }, usesOnChanges: true, ngImport: i0, template: "<verben-dialogue\n [showCloseIcon]=\"false\"\n [dismissOutsideClick]=\"false\"\n [closeOnEscape]=\"true\"\n [size]=\"'medium'\"\n [mode]=\"'dialogue'\"\n [customClass]=\"'ticket-dialog'\"\n [disableFooter]=\"true\"\n (openModal)=\"onModalOpen($event)\"\n [isVisible]=\"isVisible\"\n [bodyTemplate]=\"bodyTemplate\"\n (closeModal)=\"onModalClose($event)\"\n>\n <ng-template #bodyTemplate>\n <div class=\"dialog-body p-[25px] flex flex-col gap-4\">\n <div class=\"dialog-header flex flex-col gap-1\">\n <div class=\"dialog-title font-bold text-xl\">\n {{ this.selectedTicket ? \"Edit Ticket\" : \"Create Ticket\" }}\n </div>\n <div class=\"dialog-subtitle\">\n {{\n this.selectedTicket\n ? \"Fill the form below to edit selected ticket\"\n : \"Fill the form below to create a ticket\"\n }}\n </div>\n </div>\n <!-- <verbena-textarea name=\"Test\" [(ngModel)]=\"test\" />\n <button (click)=\"logTest()\">Log</button> -->\n <div\n [formGroup]=\"createTicketForm\"\n class=\"add-app-form main-form-container flex flex-col gap-2\"\n >\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Title</div>\n <verbena-input\n name=\"Title\"\n placeHolder=\"Title\"\n formControlName=\"Title\"\n />\n </div>\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Description</div>\n <verbena-input name=\"Description\" formControlName=\"Description\" />\n </div>\n <!-- <div\n *ngIf=\"this.selectedTicket\"\n class=\"form-input-container flex flex-col gap-1\"\n >\n <div class=\"font-medium\">Current Handler</div>\n <verbena-input\n name=\"CurrentHandler\"\n placeHolder=\"Current Handler\"\n [value]=\"createTicketForm.get('CurrentHandler')?.value\"\n [disable]=\"true\"\n />\n </div>\n <div\n *ngIf=\"this.selectedTicket\"\n class=\"form-input-container flex flex-col gap-1\"\n >\n <div class=\"font-medium\">Last Handler</div>\n <verbena-input\n name=\"LastHandler\"\n placeHolder=\"Last Handler\"\n [value]=\"createTicketForm.get('LastHandler')?.value\"\n [disable]=\"true\"\n />\n </div> -->\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Priority</div>\n <verben-drop-down\n width=\"100%\"\n name=\"Priority\"\n placeholder=\"Select Priority\"\n [options]=\"priorityOptions\"\n optionLabel=\"Name\"\n optionValue=\"Code\"\n formControlName=\"Priority\"\n >\n </verben-drop-down>\n </div>\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Status</div>\n <verben-drop-down\n width=\"100%\"\n name=\"Status\"\n [disabled]=\"true\"\n placeholder=\"Select Status\"\n [options]=\"statusOptions\"\n formControlName=\"Status\"\n >\n </verben-drop-down>\n </div>\n <div class=\"attachment-section p-2 flex flex-col gap-3\">\n <div class=\"attachments-container grid grid-cols-3 gap-2\">\n <ng-container *ngFor=\"let file of this.fileUrls\">\n <app-file-render [fileUrl]=\"file\"></app-file-render>\n </ng-container>\n </div>\n <div\n class=\"upload-section flex flex-col flex-1 items-center justify-center gap-2\"\n >\n <div class=\"flex justify-center\">\n <verbena-button\n [useIcon]=\"true\"\n [icon]=\"'upload'\"\n class=\"verben-secondary-button\"\n [text]=\"'Upload'\"\n (click)=\"triggerFileUpload()\"\n [disable]=\"isDisabled\"\n ></verbena-button>\n </div>\n <div class=\"upload-caption text-sm text-center\">\n Include Attachments\n </div>\n </div>\n </div>\n </div>\n <div class=\"dialog-button-container flex justify-end gap-2\">\n <verbena-button\n width=\"100%\"\n class=\"verben-secondary-button\"\n [text]=\"'Close'\"\n (click)=\"onModalClose($event)\"\n >\n </verbena-button>\n <verbena-button\n [disable]=\"!this.checkForm()\"\n width=\"100%\"\n class=\"verben-primary-button\"\n [text]=\"'Save'\"\n (click)=\"save()\"\n >\n </verbena-button>\n </div>\n </div>\n </ng-template>\n</verben-dialogue>\n", styles: [".attachment-section{border:1px solid #ccc6fbb2;border-radius:5px}::ng-deep .ticket-dialog{max-width:60vw}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "useIcon", "svgPosition", "iconPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "svgSize", "weight", "variant", "styleType", "svg", "svgWidth", "svgHeight", "iconColor", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i4.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i4.VerbenDialogueComponent, selector: "verben-dialogue", inputs: ["dialogueWidth", "headerTemplate", "bodyTemplate", "footerTemplate", "showCloseIcon", "dismissOutsideClick", "closeOnEscape", "isVisible", "size", "backdropColor", "customClass", "disableFooter", "margin", "padding", "borderRadius", "dialogueBgColor", "width", "closeIconClass", "boxShadow", "enableTransition", "modalData", "mode", "position", "drawerWidth"], outputs: ["openModal", "closeModal"] }, { kind: "component", type: i4.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i5.FileRenderComponent, selector: "app-file-render", inputs: ["fileUrl"] }] });
312
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AddTicketComponent, selector: "app-add-ticket", inputs: { overrideToken: "overrideToken", activeUser: "activeUser", activeApp: "activeApp", activeTenant: "activeTenant", selectedTicket: "selectedTicket", isDisabled: "isDisabled", isVisible: "isVisible", defaultCompany: "defaultCompany" }, outputs: { onOpen: "onOpen", onClose: "onClose", onSave: "onSave" }, usesOnChanges: true, ngImport: i0, template: "<verben-dialogue\n [showCloseIcon]=\"false\"\n [dismissOutsideClick]=\"false\"\n [closeOnEscape]=\"true\"\n [size]=\"'medium'\"\n [mode]=\"'dialogue'\"\n [customClass]=\"'ticket-dialog'\"\n [disableFooter]=\"true\"\n (openModal)=\"onModalOpen($event)\"\n [isVisible]=\"isVisible\"\n [bodyTemplate]=\"bodyTemplate\"\n (closeModal)=\"onModalClose($event)\"\n>\n <ng-template #bodyTemplate>\n <div class=\"dialog-body p-[25px] flex flex-col gap-4\">\n <div class=\"dialog-header flex flex-col gap-1\">\n <div class=\"dialog-title font-bold text-xl\">\n {{ this.selectedTicket ? \"Edit Ticket\" : \"Create Ticket\" }}\n </div>\n <div class=\"dialog-subtitle\">\n {{\n this.selectedTicket\n ? \"Fill the form below to edit selected ticket\"\n : \"Fill the form below to create a ticket\"\n }}\n </div>\n </div>\n <!-- <verbena-textarea name=\"Test\" [(ngModel)]=\"test\" />\n <button (click)=\"logTest()\">Log</button> -->\n <div\n [formGroup]=\"createTicketForm\"\n class=\"add-app-form main-form-container flex flex-col gap-2\"\n >\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Title</div>\n <verbena-input\n name=\"Title\"\n placeHolder=\"Title\"\n formControlName=\"Title\"\n />\n </div>\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Description</div>\n <verbena-input name=\"Description\" formControlName=\"Description\" />\n </div>\n <!-- <div\n *ngIf=\"this.selectedTicket\"\n class=\"form-input-container flex flex-col gap-1\"\n >\n <div class=\"font-medium\">Current Handler</div>\n <verbena-input\n name=\"CurrentHandler\"\n placeHolder=\"Current Handler\"\n [value]=\"createTicketForm.get('CurrentHandler')?.value\"\n [disable]=\"true\"\n />\n </div>\n <div\n *ngIf=\"this.selectedTicket\"\n class=\"form-input-container flex flex-col gap-1\"\n >\n <div class=\"font-medium\">Last Handler</div>\n <verbena-input\n name=\"LastHandler\"\n placeHolder=\"Last Handler\"\n [value]=\"createTicketForm.get('LastHandler')?.value\"\n [disable]=\"true\"\n />\n </div> -->\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Priority</div>\n <verben-drop-down\n width=\"100%\"\n name=\"Priority\"\n placeholder=\"Select Priority\"\n [options]=\"priorityOptions\"\n optionLabel=\"Name\"\n optionValue=\"Code\"\n formControlName=\"Priority\"\n >\n </verben-drop-down>\n </div>\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Status</div>\n <verben-drop-down\n width=\"100%\"\n name=\"Status\"\n [disabled]=\"true\"\n placeholder=\"Select Status\"\n [options]=\"statusOptions\"\n formControlName=\"Status\"\n >\n </verben-drop-down>\n </div>\n <div class=\"attachment-section p-2 flex flex-col gap-3\">\n <div class=\"attachments-container grid grid-cols-3 gap-2\">\n <ng-container *ngFor=\"let file of this.fileUrls\">\n <app-file-render [fileUrl]=\"file\"></app-file-render>\n </ng-container>\n </div>\n <div\n class=\"upload-section flex flex-col flex-1 items-center justify-center gap-2\"\n >\n <div class=\"flex justify-center\">\n <verbena-button\n [useIcon]=\"true\"\n [icon]=\"'upload'\"\n class=\"verben-secondary-button\"\n [text]=\"'Upload'\"\n (click)=\"triggerFileUpload()\"\n [disable]=\"isDisabled\"\n ></verbena-button>\n </div>\n <div class=\"upload-caption text-sm text-center\">\n Include Attachments\n </div>\n </div>\n </div>\n </div>\n <div class=\"dialog-button-container flex justify-end gap-2\">\n <verbena-button\n width=\"100%\"\n class=\"verben-secondary-button\"\n [text]=\"'Close'\"\n (click)=\"onModalClose($event)\"\n >\n </verbena-button>\n <verbena-button\n [disable]=\"!this.checkForm()\"\n width=\"100%\"\n class=\"verben-primary-button\"\n [text]=\"'Save'\"\n (click)=\"save()\"\n >\n </verbena-button>\n </div>\n </div>\n </ng-template>\n</verben-dialogue>\n", styles: [".attachment-section{border:1px solid #ccc6fbb2;border-radius:5px}::ng-deep .ticket-dialog{max-width:60vw}@media only screen and (max-width: 768px){.attachments-container{grid-template-columns:repeat(2,minmax(0,1fr))!important}}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i4.VerbenaButtonComponent, selector: "verbena-button", inputs: ["text", "icon", "useIcon", "svgPosition", "iconPosition", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "fontSize", "fontWeight", "disable", "svgSize", "weight", "variant", "styleType", "svg", "svgWidth", "svgHeight", "iconColor", "svgColor", "buttonClass", "buttonTextClass", "isLoading", "spinnerSize", "spinnerColor"] }, { kind: "component", type: i4.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i4.VerbenDialogueComponent, selector: "verben-dialogue", inputs: ["dialogueWidth", "headerTemplate", "bodyTemplate", "footerTemplate", "showCloseIcon", "dismissOutsideClick", "closeOnEscape", "isVisible", "size", "backdropColor", "customClass", "disableFooter", "margin", "padding", "borderRadius", "dialogueBgColor", "width", "closeIconClass", "boxShadow", "enableTransition", "modalData", "mode", "position", "drawerWidth"], outputs: ["openModal", "closeModal"] }, { kind: "component", type: i4.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i5.FileRenderComponent, selector: "app-file-render", inputs: ["fileUrl"] }] });
308
313
  }
309
314
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AddTicketComponent, decorators: [{
310
315
  type: Component,
311
- args: [{ selector: 'app-add-ticket', template: "<verben-dialogue\n [showCloseIcon]=\"false\"\n [dismissOutsideClick]=\"false\"\n [closeOnEscape]=\"true\"\n [size]=\"'medium'\"\n [mode]=\"'dialogue'\"\n [customClass]=\"'ticket-dialog'\"\n [disableFooter]=\"true\"\n (openModal)=\"onModalOpen($event)\"\n [isVisible]=\"isVisible\"\n [bodyTemplate]=\"bodyTemplate\"\n (closeModal)=\"onModalClose($event)\"\n>\n <ng-template #bodyTemplate>\n <div class=\"dialog-body p-[25px] flex flex-col gap-4\">\n <div class=\"dialog-header flex flex-col gap-1\">\n <div class=\"dialog-title font-bold text-xl\">\n {{ this.selectedTicket ? \"Edit Ticket\" : \"Create Ticket\" }}\n </div>\n <div class=\"dialog-subtitle\">\n {{\n this.selectedTicket\n ? \"Fill the form below to edit selected ticket\"\n : \"Fill the form below to create a ticket\"\n }}\n </div>\n </div>\n <!-- <verbena-textarea name=\"Test\" [(ngModel)]=\"test\" />\n <button (click)=\"logTest()\">Log</button> -->\n <div\n [formGroup]=\"createTicketForm\"\n class=\"add-app-form main-form-container flex flex-col gap-2\"\n >\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Title</div>\n <verbena-input\n name=\"Title\"\n placeHolder=\"Title\"\n formControlName=\"Title\"\n />\n </div>\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Description</div>\n <verbena-input name=\"Description\" formControlName=\"Description\" />\n </div>\n <!-- <div\n *ngIf=\"this.selectedTicket\"\n class=\"form-input-container flex flex-col gap-1\"\n >\n <div class=\"font-medium\">Current Handler</div>\n <verbena-input\n name=\"CurrentHandler\"\n placeHolder=\"Current Handler\"\n [value]=\"createTicketForm.get('CurrentHandler')?.value\"\n [disable]=\"true\"\n />\n </div>\n <div\n *ngIf=\"this.selectedTicket\"\n class=\"form-input-container flex flex-col gap-1\"\n >\n <div class=\"font-medium\">Last Handler</div>\n <verbena-input\n name=\"LastHandler\"\n placeHolder=\"Last Handler\"\n [value]=\"createTicketForm.get('LastHandler')?.value\"\n [disable]=\"true\"\n />\n </div> -->\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Priority</div>\n <verben-drop-down\n width=\"100%\"\n name=\"Priority\"\n placeholder=\"Select Priority\"\n [options]=\"priorityOptions\"\n optionLabel=\"Name\"\n optionValue=\"Code\"\n formControlName=\"Priority\"\n >\n </verben-drop-down>\n </div>\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Status</div>\n <verben-drop-down\n width=\"100%\"\n name=\"Status\"\n [disabled]=\"true\"\n placeholder=\"Select Status\"\n [options]=\"statusOptions\"\n formControlName=\"Status\"\n >\n </verben-drop-down>\n </div>\n <div class=\"attachment-section p-2 flex flex-col gap-3\">\n <div class=\"attachments-container grid grid-cols-3 gap-2\">\n <ng-container *ngFor=\"let file of this.fileUrls\">\n <app-file-render [fileUrl]=\"file\"></app-file-render>\n </ng-container>\n </div>\n <div\n class=\"upload-section flex flex-col flex-1 items-center justify-center gap-2\"\n >\n <div class=\"flex justify-center\">\n <verbena-button\n [useIcon]=\"true\"\n [icon]=\"'upload'\"\n class=\"verben-secondary-button\"\n [text]=\"'Upload'\"\n (click)=\"triggerFileUpload()\"\n [disable]=\"isDisabled\"\n ></verbena-button>\n </div>\n <div class=\"upload-caption text-sm text-center\">\n Include Attachments\n </div>\n </div>\n </div>\n </div>\n <div class=\"dialog-button-container flex justify-end gap-2\">\n <verbena-button\n width=\"100%\"\n class=\"verben-secondary-button\"\n [text]=\"'Close'\"\n (click)=\"onModalClose($event)\"\n >\n </verbena-button>\n <verbena-button\n [disable]=\"!this.checkForm()\"\n width=\"100%\"\n class=\"verben-primary-button\"\n [text]=\"'Save'\"\n (click)=\"save()\"\n >\n </verbena-button>\n </div>\n </div>\n </ng-template>\n</verben-dialogue>\n", styles: [".attachment-section{border:1px solid #ccc6fbb2;border-radius:5px}::ng-deep .ticket-dialog{max-width:60vw}\n"] }]
312
- }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.UtilService }, { type: i2.HttpWebRequestService }, { type: i2.SharedService }, { type: i2.EnvironmentService }], propDecorators: { activeUser: [{
316
+ args: [{ selector: 'app-add-ticket', template: "<verben-dialogue\n [showCloseIcon]=\"false\"\n [dismissOutsideClick]=\"false\"\n [closeOnEscape]=\"true\"\n [size]=\"'medium'\"\n [mode]=\"'dialogue'\"\n [customClass]=\"'ticket-dialog'\"\n [disableFooter]=\"true\"\n (openModal)=\"onModalOpen($event)\"\n [isVisible]=\"isVisible\"\n [bodyTemplate]=\"bodyTemplate\"\n (closeModal)=\"onModalClose($event)\"\n>\n <ng-template #bodyTemplate>\n <div class=\"dialog-body p-[25px] flex flex-col gap-4\">\n <div class=\"dialog-header flex flex-col gap-1\">\n <div class=\"dialog-title font-bold text-xl\">\n {{ this.selectedTicket ? \"Edit Ticket\" : \"Create Ticket\" }}\n </div>\n <div class=\"dialog-subtitle\">\n {{\n this.selectedTicket\n ? \"Fill the form below to edit selected ticket\"\n : \"Fill the form below to create a ticket\"\n }}\n </div>\n </div>\n <!-- <verbena-textarea name=\"Test\" [(ngModel)]=\"test\" />\n <button (click)=\"logTest()\">Log</button> -->\n <div\n [formGroup]=\"createTicketForm\"\n class=\"add-app-form main-form-container flex flex-col gap-2\"\n >\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Title</div>\n <verbena-input\n name=\"Title\"\n placeHolder=\"Title\"\n formControlName=\"Title\"\n />\n </div>\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Description</div>\n <verbena-input name=\"Description\" formControlName=\"Description\" />\n </div>\n <!-- <div\n *ngIf=\"this.selectedTicket\"\n class=\"form-input-container flex flex-col gap-1\"\n >\n <div class=\"font-medium\">Current Handler</div>\n <verbena-input\n name=\"CurrentHandler\"\n placeHolder=\"Current Handler\"\n [value]=\"createTicketForm.get('CurrentHandler')?.value\"\n [disable]=\"true\"\n />\n </div>\n <div\n *ngIf=\"this.selectedTicket\"\n class=\"form-input-container flex flex-col gap-1\"\n >\n <div class=\"font-medium\">Last Handler</div>\n <verbena-input\n name=\"LastHandler\"\n placeHolder=\"Last Handler\"\n [value]=\"createTicketForm.get('LastHandler')?.value\"\n [disable]=\"true\"\n />\n </div> -->\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Priority</div>\n <verben-drop-down\n width=\"100%\"\n name=\"Priority\"\n placeholder=\"Select Priority\"\n [options]=\"priorityOptions\"\n optionLabel=\"Name\"\n optionValue=\"Code\"\n formControlName=\"Priority\"\n >\n </verben-drop-down>\n </div>\n <div class=\"form-input-container flex flex-col gap-1\">\n <div class=\"font-medium\">Status</div>\n <verben-drop-down\n width=\"100%\"\n name=\"Status\"\n [disabled]=\"true\"\n placeholder=\"Select Status\"\n [options]=\"statusOptions\"\n formControlName=\"Status\"\n >\n </verben-drop-down>\n </div>\n <div class=\"attachment-section p-2 flex flex-col gap-3\">\n <div class=\"attachments-container grid grid-cols-3 gap-2\">\n <ng-container *ngFor=\"let file of this.fileUrls\">\n <app-file-render [fileUrl]=\"file\"></app-file-render>\n </ng-container>\n </div>\n <div\n class=\"upload-section flex flex-col flex-1 items-center justify-center gap-2\"\n >\n <div class=\"flex justify-center\">\n <verbena-button\n [useIcon]=\"true\"\n [icon]=\"'upload'\"\n class=\"verben-secondary-button\"\n [text]=\"'Upload'\"\n (click)=\"triggerFileUpload()\"\n [disable]=\"isDisabled\"\n ></verbena-button>\n </div>\n <div class=\"upload-caption text-sm text-center\">\n Include Attachments\n </div>\n </div>\n </div>\n </div>\n <div class=\"dialog-button-container flex justify-end gap-2\">\n <verbena-button\n width=\"100%\"\n class=\"verben-secondary-button\"\n [text]=\"'Close'\"\n (click)=\"onModalClose($event)\"\n >\n </verbena-button>\n <verbena-button\n [disable]=\"!this.checkForm()\"\n width=\"100%\"\n class=\"verben-primary-button\"\n [text]=\"'Save'\"\n (click)=\"save()\"\n >\n </verbena-button>\n </div>\n </div>\n </ng-template>\n</verben-dialogue>\n", styles: [".attachment-section{border:1px solid #ccc6fbb2;border-radius:5px}::ng-deep .ticket-dialog{max-width:60vw}@media only screen and (max-width: 768px){.attachments-container{grid-template-columns:repeat(2,minmax(0,1fr))!important}}\n"] }]
317
+ }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.UtilService }, { type: i2.HttpWebRequestService }, { type: i2.SharedService }, { type: i2.EnvironmentService }], propDecorators: { overrideToken: [{
318
+ type: Input
319
+ }], activeUser: [{
313
320
  type: Input
314
321
  }], activeApp: [{
315
322
  type: Input
@@ -330,4 +337,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
330
337
  }], defaultCompany: [{
331
338
  type: Input
332
339
  }] } });
333
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXRpY2tldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tdGlja2V0aW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9hZGQtdGlja2V0L2FkZC10aWNrZXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXRpY2tldGluZy11aS9zcmMvbGliL2NvbXBvbmVudHMvYWRkLXRpY2tldC9hZGQtdGlja2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLFdBQVcsRUFFWCxVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRWpFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQVNsRSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7Ozs7OztBQVMzRixNQUFNLE9BQU8sa0JBQWtCO0lBMEJuQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBN0JWLHFCQUFxQjtJQUNyQixjQUFjO0lBQ2Qsc0NBQXNDO0lBQ3RDLElBQUk7SUFDSixnQkFBZ0IsQ0FBWTtJQUNuQixVQUFVLEdBQWtCLElBQUksQ0FBQztJQUNqQyxTQUFTLEdBQWtCLElBQUksQ0FBQztJQUNoQyxZQUFZLEdBQWtCLElBQUksQ0FBQztJQUNuQyxjQUFjLEdBQWtCLElBQUksQ0FBQztJQUNyQyxVQUFVLEdBQVksS0FBSyxDQUFDO0lBQzVCLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDMUIsTUFBTSxH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QUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO1lBQ25CLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFnQixDQUFDO1lBQzNDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQzlDLFVBQVUsRUFDVixDQUFDLEVBQ0QsWUFBWSxDQUNiLENBQUM7WUFDRixJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNuQyxrQ0FBa0M7WUFDcEMsQ0FBQztRQUNILENBQUMsQ0FBQztJQUNKLENBQUM7d0dBelVVLGtCQUFrQjs0RkFBbEIsa0JBQWtCLGtXQ3JDL0IsODNKQTJJQTs7NEZEdEdhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxnQkFBZ0I7Mk1BVWpCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFTRSxjQUFjO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBGb3JtQnVpbGRlcixcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Hcm91cCxcbiAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQXBwbGljYXRpb24gfSBmcm9tICd2ZXJiZW4tdGlja2V0aW5nLXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IFRlbmFudCB9IGZyb20gJ3ZlcmJlbi10aWNrZXRpbmctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgRXJyb3JSZXNwb25zZSB9IGZyb20gJ3ZlcmJlbi10aWNrZXRpbmctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgT2JqZWN0U3RhdGUgfSBmcm9tICd2ZXJiZW4tdGlja2V0aW5nLXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IFRpY2tldCB9IGZyb20gJ3ZlcmJlbi10aWNrZXRpbmctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgVGlja2V0U3RhdHVzIH0gZnJvbSAndmVyYmVuLXRpY2tldGluZy11aS9zcmMvbGliL21vZGVscyc7XG5pbXBvcnQge1xuICBVdGlsU2VydmljZSBhcyBBcHBVdGlsU2VydmljZSxcbiAgRW52aXJvbm1lbnRTZXJ2aWNlLFxufSBmcm9tICd2ZXJiZW4tdGlja2V0aW5nLXVpL3NyYy9saWIvc2VydmljZXMnO1xuaW1wb3J0IHsgSHR0cFdlYlJlcXVlc3RTZXJ2aWNlIH0gZnJvbSAndmVyYmVuLXRpY2tldGluZy11aS9zcmMvbGliL3NlcnZpY2VzJztcblxuaW1wb3J0IHsgVGVuYW50UHJpb3JpdHkgfSBmcm9tICd2ZXJiZW4tdGlja2V0aW5nLXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IFRpY2tldE1lc3NhZ2UgfSBmcm9tICd2ZXJiZW4tdGlja2V0aW5nLXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IERFRkFVTFRfTUVTU0FHRV9GT1JfSU5JVElBTF9VUExPQUQgfSBmcm9tICd2ZXJiZW4tdGlja2V0aW5nLXVpL3NyYy9saWIvY29uc3RhbnRzJztcbmltcG9ydCB7IEZpbGUgfSBmcm9tICd2ZXJiZW4tdGlja2V0aW5nLXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IFNoYXJlZFNlcnZpY2UgfSBmcm9tICd2ZXJiZW4tdGlja2V0aW5nLXVpL3NyYy9saWIvc2VydmljZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtYWRkLXRpY2tldCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZGQtdGlja2V0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2FkZC10aWNrZXQuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIEFkZFRpY2tldENvbXBvbmVudCB7XG4gIC8vIHRlc3Q6IHN0cmluZyA9ICcnO1xuICAvLyBsb2dUZXN0KCkge1xuICAvLyAgIGNvbnNvbGUubG9nKHsgVGVzdDogdGhpcy50ZXN0IH0pO1xuICAvLyB9XG4gIGNyZWF0ZVRpY2tldEZvcm06IEZvcm1Hcm91cDtcbiAgQElucHV0KCkgYWN0aXZlVXNlcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGFjdGl2ZUFwcDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGFjdGl2ZVRlbmFudDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIHNlbGVjdGVkVGlja2V0OiBUaWNrZXQgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgaXNEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQE91dHB1dCgpIG9uT3BlbjogRXZlbnRFbWl0dGVyPEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBvblNhdmU6IEV2ZW50RW1pdHRlcjxUaWNrZXQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHByaW9yaXR5T3B0aW9uczogVGVuYW50UHJpb3JpdHlbXSA9IFtdO1xuICBzdGF0dXNPcHRpb25zOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKFRpY2tldFN0YXR1cyk7XG4gIHBlbmRpbmdSZWY6IFRpY2tldFN0YXR1cyA9IFRpY2tldFN0YXR1cy5QZW5kaW5nO1xuICBmaWxlRGF0YTogRmlsZVtdID0gW107XG4gIGZpbGVVcmxzOiBzdHJpbmdbXSA9IFtdO1xuICAvL2F0dGFjaGVkTWVzc2FnZTogVGlja2V0TWVzc2FnZSB8IG51bGwgPSBudWxsO1xuICBtYXhGaWxlU2l6ZSA9IDE1ICogMTAyNCAqIDEwMjQ7XG4gIEBJbnB1dCgpIGRlZmF1bHRDb21wYW55OiBzdHJpbmcgPSAnJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHV0aWxTZXJ2aWNlOiBBcHBVdGlsU2VydmljZSxcbiAgICBwcml2YXRlIHNlcnZlcjogSHR0cFdlYlJlcXVlc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSxcbiAgICBwcml2YXRlIGVudlN2YzogRW52aXJvbm1lbnRTZXJ2aWNlLFxuICApIHtcbiAgICB0aGlzLmNyZWF0ZVRpY2tldEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIFRpdGxlOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4oXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICBkaXNhYmxlZDogdGhpcy5pc0Rpc2FibGVkLFxuICAgICAgICB9LFxuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgKSxcbiAgICAgIERlc2NyaXB0aW9uOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4oXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICBkaXNhYmxlZDogdGhpcy5pc0Rpc2FibGVkLFxuICAgICAgICB9LFxuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgKSxcbiAgICAgIC8vIEN1cnJlbnRIYW5kbGVyOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4oe1xuICAgICAgLy8gICB2YWx1ZTogbnVsbCxcbiAgICAgIC8vICAgZGlzYWJsZWQ6IHRydWUsXG4gICAgICAvLyB9KSxcbiAgICAgIC8vIExhc3RIYW5kbGVyOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4oe1xuICAgICAgLy8gICB2YWx1ZTogbnVsbCxcbiAgICAgIC8vICAgZGlzYWJsZWQ6IHRydWUsXG4gICAgICAvLyB9KSxcbiAgICAgIFByaW9yaXR5OiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4oXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICBkaXNhYmxlZDogdGhpcy5pc0Rpc2FibGVkLFxuICAgICAgICB9LFxuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgKSxcbiAgICAgIFN0YXR1czogbmV3IEZvcm1Db250cm9sPFRpY2tldFN0YXR1cz4oXG4gICAgICAgIHsgdmFsdWU6IFRpY2tldFN0YXR1cy5QZW5kaW5nLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgKSxcbiAgICB9KTtcblxuICAgIC8vIHRoaXMuY3JlYXRlVGlja2V0Rm9ybS5jb250cm9sc1snQ3VycmVudEhhbmRsZXInXS5kaXNhYmxlKCk7XG4gICAgLy8gdGhpcy5jcmVhdGVUaWNrZXRGb3JtLmNvbnRyb2xzWydMYXN0SGFuZGxlciddLmRpc2FibGUoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge31cblxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGNoYW5nZXNbJ3NlbGVjdGVkVGlja2V0J10gJiYgdGhpcy5zZWxlY3RlZFRpY2tldCkge1xuICAgICAgdGhpcy5jcmVhdGVUaWNrZXRGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICBUaXRsZTogdGhpcy5zZWxlY3RlZFRpY2tldC5UaXRsZSxcbiAgICAgICAgRGVzY3JpcHRpb246IHRoaXMuc2VsZWN0ZWRUaWNrZXQuRGVzY3JpcHRpb24sXG4gICAgICAgIC8vIEN1cnJlbnRIYW5kbGVyOiB0aGlzLnNlbGVjdGVkVGlja2V0LkN1cnJlbnRIYW5kbGVyLFxuICAgICAgICAvLyBMYXN0SGFuZGxlcjogdGhpcy5zZWxlY3RlZFRpY2tldC5MYXN0SGFuZGxlcixcbiAgICAgICAgUHJpb3JpdHk6IHRoaXMuc2VsZWN0ZWRUaWNrZXQuUHJpb3JpdHksXG4gICAgICAgIFN0YXR1czogdGhpcy5zZWxlY3RlZFRpY2tldC5TdGF0dXMsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZmlsZVVybHMgPSBbLi4udGhpcy5zZWxlY3RlZFRpY2tldC5GaWxlVXJsc107XG4gICAgICB0aGlzLmZpbGVEYXRhID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JlYXRlVGlja2V0Rm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgVGl0bGU6IG51bGwsXG4gICAgICAgIERlc2NyaXB0aW9uOiBudWxsLFxuICAgICAgICAvLyBDdXJyZW50SGFuZGxlcjogbnVsbCxcbiAgICAgICAgLy8gTGFzdEhhbmRsZXI6IG51bGwsXG4gICAgICAgIFByaW9yaXR5OiBudWxsLFxuICAgICAgICBTdGF0dXM6IFRpY2tldFN0YXR1cy5QZW5kaW5nLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmZpbGVVcmxzID0gW107XG4gICAgICB0aGlzLmZpbGVEYXRhID0gW107XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZCkge1xuICAgICAgdGhpcy5jcmVhdGVUaWNrZXRGb3JtLmdldCgnVGl0bGUnKT8uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB0aGlzLmNyZWF0ZVRpY2tldEZvcm0uZ2V0KCdEZXNjcmlwdGlvbicpPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIHRoaXMuY3JlYXRlVGlja2V0Rm9ybS5nZXQoJ1ByaW9yaXR5Jyk/LmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNyZWF0ZVRpY2tldEZvcm0uZ2V0KCdUaXRsZScpPy5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5jcmVhdGVUaWNrZXRGb3JtLmdldCgnRGVzY3JpcHRpb24nKT8uZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIHRoaXMuY3JlYXRlVGlja2V0Rm9ybS5nZXQoJ1ByaW9yaXR5Jyk/LmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ2FjdGl2ZVRlbmFudCddICYmIHRoaXMuYWN0aXZlVGVuYW50KSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldEFsbFByaW9yaXRpZXNGb3JUZW5hbnQoXG4gICAgICAgIHRoaXMuYWN0aXZlVGVuYW50LFxuICAgICAgKTtcbiAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgIHRoaXMucHJpb3JpdHlPcHRpb25zID0gb3B0aW9ucy5SZXN1bHQ7XG4gICAgICB9XG4gICAgICAvLyAgY29uc29sZS5sb2coeyBDaGFuZ2VkOiB0aGlzLnByaW9yaXR5T3B0aW9ucyB9KTtcbiAgICB9IGVsc2UgaWYgKGNoYW5nZXNbJ2FjdGl2ZVRlbmFudCddICYmICF0aGlzLmFjdGl2ZVRlbmFudCkge1xuICAgICAgdGhpcy5wcmlvcml0eU9wdGlvbnMgPSBbXTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKHsgVGVuYW50OiB0aGlzLmFjdGl2ZVRlbmFudCwgUmVzZXQ6IHRoaXMucHJpb3JpdHlPcHRpb25zIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrRm9ybSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jcmVhdGVUaWNrZXRGb3JtLnZhbGlkID09IHRydWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBvbk1vZGFsT3BlbihldmVudDogYW55KSB7XG4gICAgdGhpcy5vbk9wZW4uZW1pdCgpO1xuICB9XG5cbiAgb25Nb2RhbENsb3NlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm9uQ2xvc2UuZW1pdChldmVudCk7XG4gIH1cblxuICAvLyBmaWx0ZXJNZXNzYWdlKG1lc3NhZ2U6IFRpY2tldE1lc3NhZ2UpOiBUaWNrZXRNZXNzYWdlIHtcbiAgLy8gICByZXR1cm4ge1xuICAvLyAgICAgLi4ubWVzc2FnZSxcbiAgLy8gICAgIEF0dGFjaG1lbnRVcmxzOiBtZXNzYWdlLkF0dGFjaG1lbnRVcmxzLmZpbHRlcihcbiAgLy8gICAgICAgKHgpID0+IHguc3BsaXQoJy8nKS5sZW5ndGggPiAxXG4gIC8vICAgICApLFxuICAvLyAgIH07XG4gIC8vIH1cblxuICBhc3luYyBzYXZlKCkge1xuICAgIGlmICghdGhpcy5hY3RpdmVBcHApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmFjdGl2ZVRlbmFudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBpZiAodGhpcy5zZWxlY3RlZFRpY2tldCAmJiB0aGlzLmF0dGFjaGVkTWVzc2FnZSkge1xuICAgIC8vICAgaWYgKGlkeCA+IC0xKSB7XG4gICAgLy8gICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuTWVzc2FnZXNbaWR4XSA9IHRoaXMuZmlsdGVyTWVzc2FnZShcbiAgICAvLyAgICAgICB0aGlzLmF0dGFjaGVkTWVzc2FnZVxuICAgIC8vICAgICApO1xuICAgIC8vICAgfSBlbHNlIHtcbiAgICAvLyAgICAgaWYgKHRoaXMuYXR0YWNoZWRNZXNzYWdlLkF0dGFjaG1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAvLyAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0Lk1lc3NhZ2VzLnVuc2hpZnQoXG4gICAgLy8gICAgICAgICB0aGlzLmZpbHRlck1lc3NhZ2UodGhpcy5hdHRhY2hlZE1lc3NhZ2UpXG4gICAgLy8gICAgICAgKTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIGNvbnN0IGl0ZW06IFRpY2tldCA9IHtcbiAgICAgIFRpdGxlOiB0aGlzLmNyZWF0ZVRpY2tldEZvcm0uY29udHJvbHNbJ1RpdGxlJ10udmFsdWUsXG4gICAgICBEZXNjcmlwdGlvbjogdGhpcy5jcmVhdGVUaWNrZXRGb3JtLmNvbnRyb2xzWydEZXNjcmlwdGlvbiddLnZhbHVlLFxuICAgICAgQ3VycmVudEhhbmRsZXI6IHRoaXMuc2VsZWN0ZWRUaWNrZXRcbiAgICAgICAgPyB0aGlzLnNlbGVjdGVkVGlja2V0LkN1cnJlbnRIYW5kbGVyXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgTGFzdEhhbmRsZXI6IHRoaXMuc2VsZWN0ZWRUaWNrZXRcbiAgICAgICAgPyB0aGlzLnNlbGVjdGVkVGlja2V0Lkxhc3RIYW5kbGVyXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgUHJpb3JpdHk6IHRoaXMuY3JlYXRlVGlja2V0Rm9ybS5jb250cm9sc1snUHJpb3JpdHknXS52YWx1ZSxcbiAgICAgIEFwcDogdGhpcy5hY3RpdmVBcHAsXG4gICAgICBpZDogJycsXG4gICAgICBTdGF0dXM6IHRoaXMuY3JlYXRlVGlja2V0Rm9ybS5jb250cm9sc1snU3RhdHVzJ10udmFsdWUsXG4gICAgICBDb21wYW55OiB0aGlzLmRlZmF1bHRDb21wYW55LFxuICAgICAgTWVzc2FnZXM6IHRoaXMuc2VsZWN0ZWRUaWNrZXQgPyB0aGlzLnNlbGVjdGVkVGlja2V0Lk1lc3NhZ2VzIDogW10sXG4gICAgICBGaWxlRGF0YTogdGhpcy5maWxlRGF0YSxcbiAgICAgIEZpbGVVcmxzOiB0aGlzLnNlbGVjdGVkVGlja2V0ID8gdGhpcy5zZWxlY3RlZFRpY2tldC5GaWxlVXJscyA6IFtdLFxuICAgICAgSWQ6ICcnLFxuICAgICAgRXhlY3V0aW9uVGltZTogdGhpcy5zZWxlY3RlZFRpY2tldFxuICAgICAgICA/IHRoaXMuc2VsZWN0ZWRUaWNrZXQuRXhlY3V0aW9uVGltZVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIENvZGU6IHRoaXMuc2VsZWN0ZWRUaWNrZXQgPyB0aGlzLnNlbGVjdGVkVGlja2V0LkNvZGUgOiAnJyxcbiAgICAgIFRlbmFudElkOiB0aGlzLnNlbGVjdGVkVGlja2V0XG4gICAgICAgID8gdGhpcy5zZWxlY3RlZFRpY2tldC5UZW5hbnRJZFxuICAgICAgICA6IHRoaXMuYWN0aXZlVGVuYW50LFxuICAgICAgU2VydmljZU5hbWU6IHRoaXMuc2VsZWN0ZWRUaWNrZXQgPyB0aGlzLnNlbGVjdGVkVGlja2V0LlNlcnZpY2VOYW1lIDogJycsXG4gICAgICBDcmVhdGVkQXQ6IHRoaXMuc2VsZWN0ZWRUaWNrZXRcbiAgICAgICAgPyB0aGlzLnNlbGVjdGVkVGlja2V0LkNyZWF0ZWRBdFxuICAgICAgICA6IG5ldyBEYXRlKCksXG4gICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICBEYXRhU3RhdGU6IHRoaXMuc2VsZWN0ZWRUaWNrZXQgPyBPYmplY3RTdGF0ZS5DaGFuZ2VkIDogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgVGFnOiB0aGlzLmFjdGl2ZVVzZXIgfHwgdW5kZWZpbmVkLFxuICAgIH07XG5cbiAgICBpZiAoaXRlbS5EZXNjcmlwdGlvbi50cmltKCkubGVuZ3RoID09IDApIHtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0luZm8oJ0Rlc2NyaXB0aW9uIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KFxuICAgICAgYFRpY2tldC9TYXZlVGlja2V0YCxcbiAgICAgIFtpdGVtXSxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LlRpY2tldGluZ0FQSSxcbiAgICApO1xuICAgIHRoaXMudXRpbFNlcnZpY2Uuc2VuZEJJKGZhbHNlKTtcbiAgICBpZiAocmVzIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dTdWNjZXNzKCdUaWNrZXQgc2F2ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXMgYXMgVGlja2V0W107XG4gICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIHJlc3VsdEl0ZW0gPSByZXN1bHRbMF07XG4gICAgICAgIHRoaXMub25TYXZlLmVtaXQocmVzdWx0SXRlbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vbkNsb3NlLmVtaXQoKTtcbiAgfVxuXG4gIGdlbmVyYXRlU2l4RGlnaXROdW1iZXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcigxMDAwMDAgKyBNYXRoLnJhbmRvbSgpICogOTAwMDAwKTtcbiAgfVxuXG4gIGdldFRpY2tldE1lc3NhZ2UoKTogVGlja2V0TWVzc2FnZSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRUaWNrZXQpIHtcbiAgICAgIGNvbnN0IGluaXRpYWxNZXNzYWdlID0gdGhpcy5zZWxlY3RlZFRpY2tldC5NZXNzYWdlcy5maW5kKFxuICAgICAgICAoeCkgPT4geC5TdWJqZWN0ID09IERFRkFVTFRfTUVTU0FHRV9GT1JfSU5JVElBTF9VUExPQUQsXG4gICAgICApO1xuICAgICAgaWYgKGluaXRpYWxNZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB7IC4uLmluaXRpYWxNZXNzYWdlLCBEYXRhU3RhdGU6IE9iamVjdFN0YXRlLkNoYW5nZWQgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5ld01lc3NhZ2U6IFRpY2tldE1lc3NhZ2UgPSB7XG4gICAgICAgICAgVGlja2V0Q29kZTogJycsXG4gICAgICAgICAgU3ViamVjdDogREVGQVVMVF9NRVNTQUdFX0ZPUl9JTklUSUFMX1VQTE9BRCxcbiAgICAgICAgICBDb250ZW50OiAnJyxcbiAgICAgICAgICBBdHRhY2htZW50czogW10sXG4gICAgICAgICAgQXR0YWNobWVudFVybHM6IFtdLFxuICAgICAgICAgIENvbXBhbnk6IHRoaXMuZGVmYXVsdENvbXBhbnksXG4gICAgICAgICAgSWQ6ICcnLFxuICAgICAgICAgIENvZGU6ICcnLFxuICAgICAgICAgIFRlbmFudElkOiAnJyxcbiAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXdNZXNzYWdlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXdNZXNzYWdlOiBUaWNrZXRNZXNzYWdlID0ge1xuICAgICAgICBUaWNrZXRDb2RlOiAnJyxcbiAgICAgICAgU3ViamVjdDogREVGQVVMVF9NRVNTQUdFX0ZPUl9JTklUSUFMX1VQTE9BRCxcbiAgICAgICAgQ29udGVudDogJycsXG4gICAgICAgIEF0dGFjaG1lbnRzOiBbXSxcbiAgICAgICAgQXR0YWNobWVudFVybHM6IFtdLFxuICAgICAgICBDb21wYW55OiB0aGlzLmRlZmF1bHRDb21wYW55LFxuICAgICAgICBJZDogJycsXG4gICAgICAgIGlkOiAnJyxcbiAgICAgICAgQ29kZTogJycsXG4gICAgICAgIFRlbmFudElkOiAnJyxcbiAgICAgICAgU2VydmljZU5hbWU6ICcnLFxuICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIFVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIG5ld01lc3NhZ2U7XG4gICAgfVxuICB9XG5cbiAgdHJpZ2dlckZpbGVVcGxvYWQoKTogdm9pZCB7XG4gICAgY29uc3QgZmlsZUlucHV0OiBIVE1MSW5wdXRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICBmaWxlSW5wdXQudHlwZSA9ICdmaWxlJztcbiAgICBmaWxlSW5wdXQuYWNjZXB0ID0gJy5wbmcsIC5qcGcsIC5qcGVnLCAucGRmJztcbiAgICBmaWxlSW5wdXQuc3R5bGUuZGlzcGxheSA9ICdub25lJzsgLy8gSGlkZGVuIGZpbGUgaW5wdXRcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZpbGVJbnB1dCk7IC8vIFRlbXBvcmFyaWx5IGFkZCB0byBET01cblxuICAgIGZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICBjb25zdCBmaWxlID0gZmlsZUlucHV0LmZpbGVzPy5bMF07XG4gICAgICBpZiAoZmlsZSkge1xuICAgICAgICB0aGlzLnByb2Nlc3NGaWxlKGZpbGUpO1xuICAgICAgfVxuICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChmaWxlSW5wdXQpOyAvLyBDbGVhbiB1cCBhZnRlciB1c2VcbiAgICB9KTtcblxuICAgIGZpbGVJbnB1dC5jbGljaygpOyAvLyBQcm9ncmFtbWF0aWNhbGx5IHRyaWdnZXIgY2xpY2tcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc0ZpbGUoc2VsZWN0ZWRGaWxlOiBnbG9iYWxUaGlzLkZpbGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBDaGVjayBmaWxlIHNpemVcbiAgICBpZiAoc2VsZWN0ZWRGaWxlLnNpemUgPiB0aGlzLm1heEZpbGVTaXplKSB7XG4gICAgICBjb25zdCBsaW1pdEluTUIgPSB0aGlzLm1heEZpbGVTaXplIC8gMTAyNCAvIDEwMjQ7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dJbmZvKGBGaWxlIHNpemUgbGltaXQgb2YgJHtsaW1pdEluTUJ9bWIgZXhjZWVkZWRgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBsZXQgZmlsZVRvUHJvY2VzczogZ2xvYmFsVGhpcy5GaWxlIHwgbnVsbCA9IHNlbGVjdGVkRmlsZTtcbiAgICAvLyBjb25zdCBzYWZlTnVtYmVyOiBudW1iZXIgPSAxICogMTAyNCAqIDEwMjQ7XG4gICAgLy8gaWYgKGZpbGVUb1Byb2Nlc3Muc2l6ZSA+IHNhZmVOdW1iZXIpIHtcbiAgICAvLyAgIGZpbGVUb1Byb2Nlc3MgPSBhd2FpdCB0aGlzLnV0aWxTZXJ2aWNlLmNvbXByZXNzSW1hZ2Uoc2VsZWN0ZWRGaWxlKTtcbiAgICAvLyAgIGlmICghZmlsZVRvUHJvY2Vzcykge1xuICAgIC8vICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dFcnJvcignRXJyb3IgY29tcHJlc3NpbmcgaW1hZ2UnKTtcbiAgICAvLyAgICAgcmV0dXJuO1xuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIC8vIFJlYWQgZmlsZSBhbmQgY29udmVydCB0byBiYXNlNjRcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKHNlbGVjdGVkRmlsZSk7XG4gICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGJhc2U2NGRhdGEgPSByZWFkZXIucmVzdWx0IGFzIHN0cmluZztcbiAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLnNoYXJlZFNlcnZpY2UuY3JlYXRlQ3VzdG9tRmlsZShcbiAgICAgICAgYmFzZTY0ZGF0YSxcbiAgICAgICAgMCxcbiAgICAgICAgc2VsZWN0ZWRGaWxlLFxuICAgICAgKTtcbiAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgIHRoaXMuZmlsZURhdGEucHVzaChmaWxlKTtcbiAgICAgICAgdGhpcy5maWxlVXJscy5wdXNoKGAke2ZpbGUuTmFtZX1gKTtcbiAgICAgICAgLy8gdGhpcy5wcm9maWxlSW1hZ2UgPSBiYXNlNjRkYXRhO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBnZXQgaXNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgLy8gICBpZiAoIXRoaXMuc2VsZWN0ZWRUaWNrZXQpIHtcbiAgLy8gICAgIHJldHVybiBmYWxzZTtcbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuICEodGhpcy5zZWxlY3RlZFRpY2tldC5TdGF0dXMgPT0gdGhpcy5wZW5kaW5nUmVmKTtcbiAgLy8gfVxufVxuIiwiPHZlcmJlbi1kaWFsb2d1ZVxuICBbc2hvd0Nsb3NlSWNvbl09XCJmYWxzZVwiXG4gIFtkaXNtaXNzT3V0c2lkZUNsaWNrXT1cImZhbHNlXCJcbiAgW2Nsb3NlT25Fc2NhcGVdPVwidHJ1ZVwiXG4gIFtzaXplXT1cIidtZWRpdW0nXCJcbiAgW21vZGVdPVwiJ2RpYWxvZ3VlJ1wiXG4gIFtjdXN0b21DbGFzc109XCIndGlja2V0LWRpYWxvZydcIlxuICBbZGlzYWJsZUZvb3Rlcl09XCJ0cnVlXCJcbiAgKG9wZW5Nb2RhbCk9XCJvbk1vZGFsT3BlbigkZXZlbnQpXCJcbiAgW2lzVmlzaWJsZV09XCJpc1Zpc2libGVcIlxuICBbYm9keVRlbXBsYXRlXT1cImJvZHlUZW1wbGF0ZVwiXG4gIChjbG9zZU1vZGFsKT1cIm9uTW9kYWxDbG9zZSgkZXZlbnQpXCJcbj5cbiAgPG5nLXRlbXBsYXRlICNib2R5VGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cImRpYWxvZy1ib2R5IHAtWzI1cHhdIGZsZXggZmxleC1jb2wgZ2FwLTRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkaWFsb2ctaGVhZGVyIGZsZXggZmxleC1jb2wgZ2FwLTFcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRpYWxvZy10aXRsZSBmb250LWJvbGQgdGV4dC14bFwiPlxuICAgICAgICAgIHt7IHRoaXMuc2VsZWN0ZWRUaWNrZXQgPyBcIkVkaXQgVGlja2V0XCIgOiBcIkNyZWF0ZSBUaWNrZXRcIiB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRpYWxvZy1zdWJ0aXRsZVwiPlxuICAgICAgICAgIHt7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0XG4gICAgICAgICAgICAgID8gXCJGaWxsIHRoZSBmb3JtIGJlbG93IHRvIGVkaXQgc2VsZWN0ZWQgdGlja2V0XCJcbiAgICAgICAgICAgICAgOiBcIkZpbGwgdGhlIGZvcm0gYmVsb3cgdG8gY3JlYXRlIGEgdGlja2V0XCJcbiAgICAgICAgICB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSA8dmVyYmVuYS10ZXh0YXJlYSBuYW1lPVwiVGVzdFwiIFsobmdNb2RlbCldPVwidGVzdFwiIC8+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJsb2dUZXN0KClcIj5Mb2c8L2J1dHRvbj4gLS0+XG4gICAgICA8ZGl2XG4gICAgICAgIFtmb3JtR3JvdXBdPVwiY3JlYXRlVGlja2V0Rm9ybVwiXG4gICAgICAgIGNsYXNzPVwiYWRkLWFwcC1mb3JtIG1haW4tZm9ybS1jb250YWluZXIgZmxleCBmbGV4LWNvbCBnYXAtMlwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWlucHV0LWNvbnRhaW5lciBmbGV4IGZsZXgtY29sIGdhcC0xXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtbWVkaXVtXCI+VGl0bGU8L2Rpdj5cbiAgICAgICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgICAgICAgbmFtZT1cIlRpdGxlXCJcbiAgICAgICAgICAgIHBsYWNlSG9sZGVyPVwiVGl0bGVcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiVGl0bGVcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1pbnB1dC1jb250YWluZXIgZmxleCBmbGV4LWNvbCBnYXAtMVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LW1lZGl1bVwiPkRlc2NyaXB0aW9uPC9kaXY+XG4gICAgICAgICAgPHZlcmJlbmEtaW5wdXQgbmFtZT1cIkRlc2NyaXB0aW9uXCIgZm9ybUNvbnRyb2xOYW1lPVwiRGVzY3JpcHRpb25cIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPCEtLSA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJ0aGlzLnNlbGVjdGVkVGlja2V0XCJcbiAgICAgICAgICBjbGFzcz1cImZvcm0taW5wdXQtY29udGFpbmVyIGZsZXggZmxleC1jb2wgZ2FwLTFcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtbWVkaXVtXCI+Q3VycmVudCBIYW5kbGVyPC9kaXY+XG4gICAgICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgICAgIG5hbWU9XCJDdXJyZW50SGFuZGxlclwiXG4gICAgICAgICAgICBwbGFjZUhvbGRlcj1cIkN1cnJlbnQgSGFuZGxlclwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiY3JlYXRlVGlja2V0Rm9ybS5nZXQoJ0N1cnJlbnRIYW5kbGVyJyk/LnZhbHVlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlXT1cInRydWVcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJ0aGlzLnNlbGVjdGVkVGlja2V0XCJcbiAgICAgICAgICBjbGFzcz1cImZvcm0taW5wdXQtY29udGFpbmVyIGZsZXggZmxleC1jb2wgZ2FwLTFcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtbWVkaXVtXCI+TGFzdCBIYW5kbGVyPC9kaXY+XG4gICAgICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgICAgIG5hbWU9XCJMYXN0SGFuZGxlclwiXG4gICAgICAgICAgICBwbGFjZUhvbGRlcj1cIkxhc3QgSGFuZGxlclwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiY3JlYXRlVGlja2V0Rm9ybS5nZXQoJ0xhc3RIYW5kbGVyJyk/LnZhbHVlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlXT1cInRydWVcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0taW5wdXQtY29udGFpbmVyIGZsZXggZmxleC1jb2wgZ2FwLTFcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1tZWRpdW1cIj5Qcmlvcml0eTwvZGl2PlxuICAgICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgbmFtZT1cIlByaW9yaXR5XCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFByaW9yaXR5XCJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cInByaW9yaXR5T3B0aW9uc1wiXG4gICAgICAgICAgICBvcHRpb25MYWJlbD1cIk5hbWVcIlxuICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJDb2RlXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIlByaW9yaXR5XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC92ZXJiZW4tZHJvcC1kb3duPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0taW5wdXQtY29udGFpbmVyIGZsZXggZmxleC1jb2wgZ2FwLTFcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1tZWRpdW1cIj5TdGF0dXM8L2Rpdj5cbiAgICAgICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgIG5hbWU9XCJTdGF0dXNcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgU3RhdHVzXCJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cInN0YXR1c09wdGlvbnNcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiU3RhdHVzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC92ZXJiZW4tZHJvcC1kb3duPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF0dGFjaG1lbnQtc2VjdGlvbiBwLTIgZmxleCBmbGV4LWNvbCBnYXAtM1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdHRhY2htZW50cy1jb250YWluZXIgZ3JpZCBncmlkLWNvbHMtMyBnYXAtMlwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmlsZSBvZiB0aGlzLmZpbGVVcmxzXCI+XG4gICAgICAgICAgICAgIDxhcHAtZmlsZS1yZW5kZXIgW2ZpbGVVcmxdPVwiZmlsZVwiPjwvYXBwLWZpbGUtcmVuZGVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJ1cGxvYWQtc2VjdGlvbiBmbGV4IGZsZXgtY29sIGZsZXgtMSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgICAgICAgICAgIFt1c2VJY29uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtpY29uXT1cIid1cGxvYWQnXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInZlcmJlbi1zZWNvbmRhcnktYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbdGV4dF09XCInVXBsb2FkJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRyaWdnZXJGaWxlVXBsb2FkKClcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cImlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgICA+PC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVwbG9hZC1jYXB0aW9uIHRleHQtc20gdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgSW5jbHVkZSBBdHRhY2htZW50c1xuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWJ1dHRvbi1jb250YWluZXIgZmxleCBqdXN0aWZ5LWVuZCBnYXAtMlwiPlxuICAgICAgICA8dmVyYmVuYS1idXR0b25cbiAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgIGNsYXNzPVwidmVyYmVuLXNlY29uZGFyeS1idXR0b25cIlxuICAgICAgICAgIFt0ZXh0XT1cIidDbG9zZSdcIlxuICAgICAgICAgIChjbGljayk9XCJvbk1vZGFsQ2xvc2UoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgICAgPHZlcmJlbmEtYnV0dG9uXG4gICAgICAgICAgW2Rpc2FibGVdPVwiIXRoaXMuY2hlY2tGb3JtKClcIlxuICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgY2xhc3M9XCJ2ZXJiZW4tcHJpbWFyeS1idXR0b25cIlxuICAgICAgICAgIFt0ZXh0XT1cIidTYXZlJ1wiXG4gICAgICAgICAgKGNsaWNrKT1cInNhdmUoKVwiXG4gICAgICAgID5cbiAgICAgICAgPC92ZXJiZW5hLWJ1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC92ZXJiZW4tZGlhbG9ndWU+XG4iXX0=
340
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXRpY2tldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tdGlja2V0aW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9hZGQtdGlja2V0L2FkZC10aWNrZXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXRpY2tldGluZy11aS9zcmMvbGliL2NvbXBvbmVudHMvYWRkLXRpY2tldC9hZGQtdGlja2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLFdBQVcsRUFFWCxVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRWpFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQVNsRSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7Ozs7OztBQVMzRixNQUFNLE9BQU8sa0JBQWtCO0lBMkJuQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBOUJWLHFCQUFxQjtJQUNyQixjQUFjO0lBQ2Qsc0NBQXNDO0lBQ3RDLElBQUk7SUFDSixnQkFBZ0IsQ0FBWTtJQUNuQixhQUFhLEdBQWtCLElBQUksQ0FBQztJQUNwQyxVQUFVLEdBQWtCLElBQUksQ0FBQztJQUNqQyxTQUFTLEdBQWtCLElBQUksQ0FBQztJQUNoQyxZQUFZLEdBQWtCLElBQUksQ0FBQztJQUNuQyxjQUFjLEdBQWtCLElBQUksQ0FBQztJQUNyQyxVQUFVLEdBQVksS0FBSyxDQUFDO0lBQzVCLFNBQVMs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QU87c0JBQWhCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQVNFLGNBQWM7c0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEZvcm1CdWlsZGVyLFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUdyb3VwLFxuICBWYWxpZGF0b3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbiB9IGZyb20gJ3ZlcmJlbi10aWNrZXRpbmctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgVGVuYW50IH0gZnJvbSAndmVyYmVuLXRpY2tldGluZy11aS9zcmMvbGliL21vZGVscyc7XG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlIH0gZnJvbSAndmVyYmVuLXRpY2tldGluZy11aS9zcmMvbGliL21vZGVscyc7XG5pbXBvcnQgeyBPYmplY3RTdGF0ZSB9IGZyb20gJ3ZlcmJlbi10aWNrZXRpbmctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgVGlja2V0IH0gZnJvbSAndmVyYmVuLXRpY2tldGluZy11aS9zcmMvbGliL21vZGVscyc7XG5pbXBvcnQgeyBUaWNrZXRTdGF0dXMgfSBmcm9tICd2ZXJiZW4tdGlja2V0aW5nLXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7XG4gIFV0aWxTZXJ2aWNlIGFzIEFwcFV0aWxTZXJ2aWNlLFxuICBFbnZpcm9ubWVudFNlcnZpY2UsXG59IGZyb20gJ3ZlcmJlbi10aWNrZXRpbmctdWkvc3JjL2xpYi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBIdHRwV2ViUmVxdWVzdFNlcnZpY2UgfSBmcm9tICd2ZXJiZW4tdGlja2V0aW5nLXVpL3NyYy9saWIvc2VydmljZXMnO1xuXG5pbXBvcnQgeyBUZW5hbnRQcmlvcml0eSB9IGZyb20gJ3ZlcmJlbi10aWNrZXRpbmctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgVGlja2V0TWVzc2FnZSB9IGZyb20gJ3ZlcmJlbi10aWNrZXRpbmctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgREVGQVVMVF9NRVNTQUdFX0ZPUl9JTklUSUFMX1VQTE9BRCB9IGZyb20gJ3ZlcmJlbi10aWNrZXRpbmctdWkvc3JjL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0IHsgRmlsZSB9IGZyb20gJ3ZlcmJlbi10aWNrZXRpbmctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgU2hhcmVkU2VydmljZSB9IGZyb20gJ3ZlcmJlbi10aWNrZXRpbmctdWkvc3JjL2xpYi9zZXJ2aWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1hZGQtdGlja2V0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC10aWNrZXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vYWRkLXRpY2tldC5jb21wb25lbnQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgQWRkVGlja2V0Q29tcG9uZW50IHtcbiAgLy8gdGVzdDogc3RyaW5nID0gJyc7XG4gIC8vIGxvZ1Rlc3QoKSB7XG4gIC8vICAgY29uc29sZS5sb2coeyBUZXN0OiB0aGlzLnRlc3QgfSk7XG4gIC8vIH1cbiAgY3JlYXRlVGlja2V0Rm9ybTogRm9ybUdyb3VwO1xuICBASW5wdXQoKSBvdmVycmlkZVRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgYWN0aXZlVXNlcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGFjdGl2ZUFwcDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGFjdGl2ZVRlbmFudDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIHNlbGVjdGVkVGlja2V0OiBUaWNrZXQgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgaXNEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQE91dHB1dCgpIG9uT3BlbjogRXZlbnRFbWl0dGVyPEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBvblNhdmU6IEV2ZW50RW1pdHRlcjxUaWNrZXQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHByaW9yaXR5T3B0aW9uczogVGVuYW50UHJpb3JpdHlbXSA9IFtdO1xuICBzdGF0dXNPcHRpb25zOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKFRpY2tldFN0YXR1cyk7XG4gIHBlbmRpbmdSZWY6IFRpY2tldFN0YXR1cyA9IFRpY2tldFN0YXR1cy5QZW5kaW5nO1xuICBmaWxlRGF0YTogRmlsZVtdID0gW107XG4gIGZpbGVVcmxzOiBzdHJpbmdbXSA9IFtdO1xuICAvL2F0dGFjaGVkTWVzc2FnZTogVGlja2V0TWVzc2FnZSB8IG51bGwgPSBudWxsO1xuICBtYXhGaWxlU2l6ZSA9IDE1ICogMTAyNCAqIDEwMjQ7XG4gIEBJbnB1dCgpIGRlZmF1bHRDb21wYW55OiBzdHJpbmcgPSAnJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHV0aWxTZXJ2aWNlOiBBcHBVdGlsU2VydmljZSxcbiAgICBwcml2YXRlIHNlcnZlcjogSHR0cFdlYlJlcXVlc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSxcbiAgICBwcml2YXRlIGVudlN2YzogRW52aXJvbm1lbnRTZXJ2aWNlLFxuICApIHtcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuaW5pdFNlcnZpY2UodGhpcy5vdmVycmlkZVRva2VuKTtcbiAgICB0aGlzLmNyZWF0ZVRpY2tldEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIFRpdGxlOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4oXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICBkaXNhYmxlZDogdGhpcy5pc0Rpc2FibGVkLFxuICAgICAgICB9LFxuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgKSxcbiAgICAgIERlc2NyaXB0aW9uOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4oXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICBkaXNhYmxlZDogdGhpcy5pc0Rpc2FibGVkLFxuICAgICAgICB9LFxuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgKSxcbiAgICAgIC8vIEN1cnJlbnRIYW5kbGVyOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4oe1xuICAgICAgLy8gICB2YWx1ZTogbnVsbCxcbiAgICAgIC8vICAgZGlzYWJsZWQ6IHRydWUsXG4gICAgICAvLyB9KSxcbiAgICAgIC8vIExhc3RIYW5kbGVyOiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4oe1xuICAgICAgLy8gICB2YWx1ZTogbnVsbCxcbiAgICAgIC8vICAgZGlzYWJsZWQ6IHRydWUsXG4gICAgICAvLyB9KSxcbiAgICAgIFByaW9yaXR5OiBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD4oXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICBkaXNhYmxlZDogdGhpcy5pc0Rpc2FibGVkLFxuICAgICAgICB9LFxuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgKSxcbiAgICAgIFN0YXR1czogbmV3IEZvcm1Db250cm9sPFRpY2tldFN0YXR1cz4oXG4gICAgICAgIHsgdmFsdWU6IFRpY2tldFN0YXR1cy5QZW5kaW5nLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgKSxcbiAgICB9KTtcblxuICAgIC8vIHRoaXMuY3JlYXRlVGlja2V0Rm9ybS5jb250cm9sc1snQ3VycmVudEhhbmRsZXInXS5kaXNhYmxlKCk7XG4gICAgLy8gdGhpcy5jcmVhdGVUaWNrZXRGb3JtLmNvbnRyb2xzWydMYXN0SGFuZGxlciddLmRpc2FibGUoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge31cblxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGNoYW5nZXNbJ292ZXJyaWRlVG9rZW4nXSkge1xuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmluaXRTZXJ2aWNlKHRoaXMub3ZlcnJpZGVUb2tlbik7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ3NlbGVjdGVkVGlja2V0J10gJiYgdGhpcy5zZWxlY3RlZFRpY2tldCkge1xuICAgICAgdGhpcy5jcmVhdGVUaWNrZXRGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICBUaXRsZTogdGhpcy5zZWxlY3RlZFRpY2tldC5UaXRsZSxcbiAgICAgICAgRGVzY3JpcHRpb246IHRoaXMuc2VsZWN0ZWRUaWNrZXQuRGVzY3JpcHRpb24sXG4gICAgICAgIC8vIEN1cnJlbnRIYW5kbGVyOiB0aGlzLnNlbGVjdGVkVGlja2V0LkN1cnJlbnRIYW5kbGVyLFxuICAgICAgICAvLyBMYXN0SGFuZGxlcjogdGhpcy5zZWxlY3RlZFRpY2tldC5MYXN0SGFuZGxlcixcbiAgICAgICAgUHJpb3JpdHk6IHRoaXMuc2VsZWN0ZWRUaWNrZXQuUHJpb3JpdHksXG4gICAgICAgIFN0YXR1czogdGhpcy5zZWxlY3RlZFRpY2tldC5TdGF0dXMsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZmlsZVVybHMgPSBbLi4udGhpcy5zZWxlY3RlZFRpY2tldC5GaWxlVXJsc107XG4gICAgICB0aGlzLmZpbGVEYXRhID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JlYXRlVGlja2V0Rm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgVGl0bGU6IG51bGwsXG4gICAgICAgIERlc2NyaXB0aW9uOiBudWxsLFxuICAgICAgICAvLyBDdXJyZW50SGFuZGxlcjogbnVsbCxcbiAgICAgICAgLy8gTGFzdEhhbmRsZXI6IG51bGwsXG4gICAgICAgIFByaW9yaXR5OiBudWxsLFxuICAgICAgICBTdGF0dXM6IFRpY2tldFN0YXR1cy5QZW5kaW5nLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmZpbGVVcmxzID0gW107XG4gICAgICB0aGlzLmZpbGVEYXRhID0gW107XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZCkge1xuICAgICAgdGhpcy5jcmVhdGVUaWNrZXRGb3JtLmdldCgnVGl0bGUnKT8uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB0aGlzLmNyZWF0ZVRpY2tldEZvcm0uZ2V0KCdEZXNjcmlwdGlvbicpPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIHRoaXMuY3JlYXRlVGlja2V0Rm9ybS5nZXQoJ1ByaW9yaXR5Jyk/LmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNyZWF0ZVRpY2tldEZvcm0uZ2V0KCdUaXRsZScpPy5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5jcmVhdGVUaWNrZXRGb3JtLmdldCgnRGVzY3JpcHRpb24nKT8uZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIHRoaXMuY3JlYXRlVGlja2V0Rm9ybS5nZXQoJ1ByaW9yaXR5Jyk/LmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ2FjdGl2ZVRlbmFudCddICYmIHRoaXMuYWN0aXZlVGVuYW50KSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgdGhpcy5zaGFyZWRTZXJ2aWNlLmdldEFsbFByaW9yaXRpZXNGb3JUZW5hbnQoXG4gICAgICAgIHRoaXMuYWN0aXZlVGVuYW50LFxuICAgICAgKTtcbiAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgIHRoaXMucHJpb3JpdHlPcHRpb25zID0gb3B0aW9ucy5SZXN1bHQ7XG4gICAgICB9XG4gICAgICAvLyAgY29uc29sZS5sb2coeyBDaGFuZ2VkOiB0aGlzLnByaW9yaXR5T3B0aW9ucyB9KTtcbiAgICB9IGVsc2UgaWYgKGNoYW5nZXNbJ2FjdGl2ZVRlbmFudCddICYmICF0aGlzLmFjdGl2ZVRlbmFudCkge1xuICAgICAgdGhpcy5wcmlvcml0eU9wdGlvbnMgPSBbXTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKHsgVGVuYW50OiB0aGlzLmFjdGl2ZVRlbmFudCwgUmVzZXQ6IHRoaXMucHJpb3JpdHlPcHRpb25zIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrRm9ybSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jcmVhdGVUaWNrZXRGb3JtLnZhbGlkID09IHRydWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBvbk1vZGFsT3BlbihldmVudDogYW55KSB7XG4gICAgdGhpcy5vbk9wZW4uZW1pdCgpO1xuICB9XG5cbiAgb25Nb2RhbENsb3NlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm9uQ2xvc2UuZW1pdChldmVudCk7XG4gIH1cblxuICAvLyBmaWx0ZXJNZXNzYWdlKG1lc3NhZ2U6IFRpY2tldE1lc3NhZ2UpOiBUaWNrZXRNZXNzYWdlIHtcbiAgLy8gICByZXR1cm4ge1xuICAvLyAgICAgLi4ubWVzc2FnZSxcbiAgLy8gICAgIEF0dGFjaG1lbnRVcmxzOiBtZXNzYWdlLkF0dGFjaG1lbnRVcmxzLmZpbHRlcihcbiAgLy8gICAgICAgKHgpID0+IHguc3BsaXQoJy8nKS5sZW5ndGggPiAxXG4gIC8vICAgICApLFxuICAvLyAgIH07XG4gIC8vIH1cblxuICBhc3luYyBzYXZlKCkge1xuICAgIGlmICghdGhpcy5hY3RpdmVBcHApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmFjdGl2ZVRlbmFudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBpZiAodGhpcy5zZWxlY3RlZFRpY2tldCAmJiB0aGlzLmF0dGFjaGVkTWVzc2FnZSkge1xuICAgIC8vICAgaWYgKGlkeCA+IC0xKSB7XG4gICAgLy8gICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXQuTWVzc2FnZXNbaWR4XSA9IHRoaXMuZmlsdGVyTWVzc2FnZShcbiAgICAvLyAgICAgICB0aGlzLmF0dGFjaGVkTWVzc2FnZVxuICAgIC8vICAgICApO1xuICAgIC8vICAgfSBlbHNlIHtcbiAgICAvLyAgICAgaWYgKHRoaXMuYXR0YWNoZWRNZXNzYWdlLkF0dGFjaG1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAvLyAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0Lk1lc3NhZ2VzLnVuc2hpZnQoXG4gICAgLy8gICAgICAgICB0aGlzLmZpbHRlck1lc3NhZ2UodGhpcy5hdHRhY2hlZE1lc3NhZ2UpXG4gICAgLy8gICAgICAgKTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIGNvbnN0IGl0ZW06IFRpY2tldCA9IHtcbiAgICAgIFRpdGxlOiB0aGlzLmNyZWF0ZVRpY2tldEZvcm0uY29udHJvbHNbJ1RpdGxlJ10udmFsdWUsXG4gICAgICBEZXNjcmlwdGlvbjogdGhpcy5jcmVhdGVUaWNrZXRGb3JtLmNvbnRyb2xzWydEZXNjcmlwdGlvbiddLnZhbHVlLFxuICAgICAgQ3VycmVudEhhbmRsZXI6IHRoaXMuc2VsZWN0ZWRUaWNrZXRcbiAgICAgICAgPyB0aGlzLnNlbGVjdGVkVGlja2V0LkN1cnJlbnRIYW5kbGVyXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgTGFzdEhhbmRsZXI6IHRoaXMuc2VsZWN0ZWRUaWNrZXRcbiAgICAgICAgPyB0aGlzLnNlbGVjdGVkVGlja2V0Lkxhc3RIYW5kbGVyXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgUHJpb3JpdHk6IHRoaXMuY3JlYXRlVGlja2V0Rm9ybS5jb250cm9sc1snUHJpb3JpdHknXS52YWx1ZSxcbiAgICAgIEFwcDogdGhpcy5hY3RpdmVBcHAsXG4gICAgICBpZDogJycsXG4gICAgICBTdGF0dXM6IHRoaXMuY3JlYXRlVGlja2V0Rm9ybS5jb250cm9sc1snU3RhdHVzJ10udmFsdWUsXG4gICAgICBDb21wYW55OiB0aGlzLmRlZmF1bHRDb21wYW55LFxuICAgICAgTWVzc2FnZXM6IHRoaXMuc2VsZWN0ZWRUaWNrZXQgPyB0aGlzLnNlbGVjdGVkVGlja2V0Lk1lc3NhZ2VzIDogW10sXG4gICAgICBGaWxlRGF0YTogdGhpcy5maWxlRGF0YSxcbiAgICAgIEZpbGVVcmxzOiB0aGlzLnNlbGVjdGVkVGlja2V0ID8gdGhpcy5zZWxlY3RlZFRpY2tldC5GaWxlVXJscyA6IFtdLFxuICAgICAgSWQ6ICcnLFxuICAgICAgRXhlY3V0aW9uVGltZTogdGhpcy5zZWxlY3RlZFRpY2tldFxuICAgICAgICA/IHRoaXMuc2VsZWN0ZWRUaWNrZXQuRXhlY3V0aW9uVGltZVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIENvZGU6IHRoaXMuc2VsZWN0ZWRUaWNrZXQgPyB0aGlzLnNlbGVjdGVkVGlja2V0LkNvZGUgOiAnJyxcbiAgICAgIFRlbmFudElkOiB0aGlzLnNlbGVjdGVkVGlja2V0XG4gICAgICAgID8gdGhpcy5zZWxlY3RlZFRpY2tldC5UZW5hbnRJZFxuICAgICAgICA6IHRoaXMuYWN0aXZlVGVuYW50LFxuICAgICAgU2VydmljZU5hbWU6IHRoaXMuc2VsZWN0ZWRUaWNrZXQgPyB0aGlzLnNlbGVjdGVkVGlja2V0LlNlcnZpY2VOYW1lIDogJycsXG4gICAgICBDcmVhdGVkQXQ6IHRoaXMuc2VsZWN0ZWRUaWNrZXRcbiAgICAgICAgPyB0aGlzLnNlbGVjdGVkVGlja2V0LkNyZWF0ZWRBdFxuICAgICAgICA6IG5ldyBEYXRlKCksXG4gICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICBEYXRhU3RhdGU6IHRoaXMuc2VsZWN0ZWRUaWNrZXQgPyBPYmplY3RTdGF0ZS5DaGFuZ2VkIDogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgVGFnOiB0aGlzLmFjdGl2ZVVzZXIgfHwgdW5kZWZpbmVkLFxuICAgIH07XG5cbiAgICBpZiAoaXRlbS5EZXNjcmlwdGlvbi50cmltKCkubGVuZ3RoID09IDApIHtcbiAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0luZm8oJ0Rlc2NyaXB0aW9uIGNhbm5vdCBiZSBlbXB0eScpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KFxuICAgICAgYFRpY2tldC9TYXZlVGlja2V0YCxcbiAgICAgIFtpdGVtXSxcbiAgICAgIHRoaXMub3ZlcnJpZGVUb2tlbiB8fCB1bmRlZmluZWQsXG4gICAgICB0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5UaWNrZXRpbmdBUEksXG4gICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93U3VjY2VzcygnVGlja2V0IHNhdmVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzIGFzIFRpY2tldFtdO1xuICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciByZXN1bHRJdGVtID0gcmVzdWx0WzBdO1xuICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KHJlc3VsdEl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub25DbG9zZS5lbWl0KCk7XG4gIH1cblxuICBnZW5lcmF0ZVNpeERpZ2l0TnVtYmVyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoMTAwMDAwICsgTWF0aC5yYW5kb20oKSAqIDkwMDAwMCk7XG4gIH1cblxuICBnZXRUaWNrZXRNZXNzYWdlKCk6IFRpY2tldE1lc3NhZ2Uge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkVGlja2V0KSB7XG4gICAgICBjb25zdCBpbml0aWFsTWVzc2FnZSA9IHRoaXMuc2VsZWN0ZWRUaWNrZXQuTWVzc2FnZXMuZmluZChcbiAgICAgICAgKHgpID0+IHguU3ViamVjdCA9PSBERUZBVUxUX01FU1NBR0VfRk9SX0lOSVRJQUxfVVBMT0FELFxuICAgICAgKTtcbiAgICAgIGlmIChpbml0aWFsTWVzc2FnZSkge1xuICAgICAgICByZXR1cm4geyAuLi5pbml0aWFsTWVzc2FnZSwgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5DaGFuZ2VkIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuZXdNZXNzYWdlOiBUaWNrZXRNZXNzYWdlID0ge1xuICAgICAgICAgIFRpY2tldENvZGU6ICcnLFxuICAgICAgICAgIFN1YmplY3Q6IERFRkFVTFRfTUVTU0FHRV9GT1JfSU5JVElBTF9VUExPQUQsXG4gICAgICAgICAgQ29udGVudDogJycsXG4gICAgICAgICAgQXR0YWNobWVudHM6IFtdLFxuICAgICAgICAgIEF0dGFjaG1lbnRVcmxzOiBbXSxcbiAgICAgICAgICBDb21wYW55OiB0aGlzLmRlZmF1bHRDb21wYW55LFxuICAgICAgICAgIElkOiAnJyxcbiAgICAgICAgICBDb2RlOiAnJyxcbiAgICAgICAgICBUZW5hbnRJZDogJycsXG4gICAgICAgICAgaWQ6ICcnLFxuICAgICAgICAgIFNlcnZpY2VOYW1lOiAnJyxcbiAgICAgICAgICBDcmVhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbmV3TWVzc2FnZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmV3TWVzc2FnZTogVGlja2V0TWVzc2FnZSA9IHtcbiAgICAgICAgVGlja2V0Q29kZTogJycsXG4gICAgICAgIFN1YmplY3Q6IERFRkFVTFRfTUVTU0FHRV9GT1JfSU5JVElBTF9VUExPQUQsXG4gICAgICAgIENvbnRlbnQ6ICcnLFxuICAgICAgICBBdHRhY2htZW50czogW10sXG4gICAgICAgIEF0dGFjaG1lbnRVcmxzOiBbXSxcbiAgICAgICAgQ29tcGFueTogdGhpcy5kZWZhdWx0Q29tcGFueSxcbiAgICAgICAgSWQ6ICcnLFxuICAgICAgICBpZDogJycsXG4gICAgICAgIENvZGU6ICcnLFxuICAgICAgICBUZW5hbnRJZDogJycsXG4gICAgICAgIFNlcnZpY2VOYW1lOiAnJyxcbiAgICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgIERhdGFTdGF0ZTogT2JqZWN0U3RhdGUuTmV3LFxuICAgICAgfTtcbiAgICAgIHJldHVybiBuZXdNZXNzYWdlO1xuICAgIH1cbiAgfVxuXG4gIHRyaWdnZXJGaWxlVXBsb2FkKCk6IHZvaWQge1xuICAgIGNvbnN0IGZpbGVJbnB1dDogSFRNTElucHV0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgZmlsZUlucHV0LnR5cGUgPSAnZmlsZSc7XG4gICAgZmlsZUlucHV0LmFjY2VwdCA9ICcucG5nLCAuanBnLCAuanBlZywgLnBkZic7XG4gICAgZmlsZUlucHV0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7IC8vIEhpZGRlbiBmaWxlIGlucHV0XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmaWxlSW5wdXQpOyAvLyBUZW1wb3JhcmlseSBhZGQgdG8gRE9NXG5cbiAgICBmaWxlSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgY29uc3QgZmlsZSA9IGZpbGVJbnB1dC5maWxlcz8uWzBdO1xuICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzRmlsZShmaWxlKTtcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZmlsZUlucHV0KTsgLy8gQ2xlYW4gdXAgYWZ0ZXIgdXNlXG4gICAgfSk7XG5cbiAgICBmaWxlSW5wdXQuY2xpY2soKTsgLy8gUHJvZ3JhbW1hdGljYWxseSB0cmlnZ2VyIGNsaWNrXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NGaWxlKHNlbGVjdGVkRmlsZTogZ2xvYmFsVGhpcy5GaWxlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQ2hlY2sgZmlsZSBzaXplXG4gICAgaWYgKHNlbGVjdGVkRmlsZS5zaXplID4gdGhpcy5tYXhGaWxlU2l6ZSkge1xuICAgICAgY29uc3QgbGltaXRJbk1CID0gdGhpcy5tYXhGaWxlU2l6ZSAvIDEwMjQgLyAxMDI0O1xuICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93SW5mbyhgRmlsZSBzaXplIGxpbWl0IG9mICR7bGltaXRJbk1CfW1iIGV4Y2VlZGVkYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gbGV0IGZpbGVUb1Byb2Nlc3M6IGdsb2JhbFRoaXMuRmlsZSB8IG51bGwgPSBzZWxlY3RlZEZpbGU7XG4gICAgLy8gY29uc3Qgc2FmZU51bWJlcjogbnVtYmVyID0gMSAqIDEwMjQgKiAxMDI0O1xuICAgIC8vIGlmIChmaWxlVG9Qcm9jZXNzLnNpemUgPiBzYWZlTnVtYmVyKSB7XG4gICAgLy8gICBmaWxlVG9Qcm9jZXNzID0gYXdhaXQgdGhpcy51dGlsU2VydmljZS5jb21wcmVzc0ltYWdlKHNlbGVjdGVkRmlsZSk7XG4gICAgLy8gICBpZiAoIWZpbGVUb1Byb2Nlc3MpIHtcbiAgICAvLyAgICAgdGhpcy51dGlsU2VydmljZS5zaG93RXJyb3IoJ0Vycm9yIGNvbXByZXNzaW5nIGltYWdlJyk7XG4gICAgLy8gICAgIHJldHVybjtcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyBSZWFkIGZpbGUgYW5kIGNvbnZlcnQgdG8gYmFzZTY0XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChzZWxlY3RlZEZpbGUpO1xuICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBiYXNlNjRkYXRhID0gcmVhZGVyLnJlc3VsdCBhcyBzdHJpbmc7XG4gICAgICBjb25zdCBmaWxlID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNyZWF0ZUN1c3RvbUZpbGUoXG4gICAgICAgIGJhc2U2NGRhdGEsXG4gICAgICAgIDAsXG4gICAgICAgIHNlbGVjdGVkRmlsZSxcbiAgICAgICk7XG4gICAgICBpZiAoZmlsZSkge1xuICAgICAgICB0aGlzLmZpbGVEYXRhLnB1c2goZmlsZSk7XG4gICAgICAgIHRoaXMuZmlsZVVybHMucHVzaChgJHtmaWxlLk5hbWV9YCk7XG4gICAgICAgIC8vIHRoaXMucHJvZmlsZUltYWdlID0gYmFzZTY0ZGF0YTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gZ2V0IGlzRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gIC8vICAgaWYgKCF0aGlzLnNlbGVjdGVkVGlja2V0KSB7XG4gIC8vICAgICByZXR1cm4gZmFsc2U7XG4gIC8vICAgfVxuICAvLyAgIHJldHVybiAhKHRoaXMuc2VsZWN0ZWRUaWNrZXQuU3RhdHVzID09IHRoaXMucGVuZGluZ1JlZik7XG4gIC8vIH1cbn1cbiIsIjx2ZXJiZW4tZGlhbG9ndWVcbiAgW3Nob3dDbG9zZUljb25dPVwiZmFsc2VcIlxuICBbZGlzbWlzc091dHNpZGVDbGlja109XCJmYWxzZVwiXG4gIFtjbG9zZU9uRXNjYXBlXT1cInRydWVcIlxuICBbc2l6ZV09XCInbWVkaXVtJ1wiXG4gIFttb2RlXT1cIidkaWFsb2d1ZSdcIlxuICBbY3VzdG9tQ2xhc3NdPVwiJ3RpY2tldC1kaWFsb2cnXCJcbiAgW2Rpc2FibGVGb290ZXJdPVwidHJ1ZVwiXG4gIChvcGVuTW9kYWwpPVwib25Nb2RhbE9wZW4oJGV2ZW50KVwiXG4gIFtpc1Zpc2libGVdPVwiaXNWaXNpYmxlXCJcbiAgW2JvZHlUZW1wbGF0ZV09XCJib2R5VGVtcGxhdGVcIlxuICAoY2xvc2VNb2RhbCk9XCJvbk1vZGFsQ2xvc2UoJGV2ZW50KVwiXG4+XG4gIDxuZy10ZW1wbGF0ZSAjYm9keVRlbXBsYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJkaWFsb2ctYm9keSBwLVsyNXB4XSBmbGV4IGZsZXgtY29sIGdhcC00XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWhlYWRlciBmbGV4IGZsZXgtY29sIGdhcC0xXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkaWFsb2ctdGl0bGUgZm9udC1ib2xkIHRleHQteGxcIj5cbiAgICAgICAgICB7eyB0aGlzLnNlbGVjdGVkVGlja2V0ID8gXCJFZGl0IFRpY2tldFwiIDogXCJDcmVhdGUgVGlja2V0XCIgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkaWFsb2ctc3VidGl0bGVcIj5cbiAgICAgICAgICB7e1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldFxuICAgICAgICAgICAgICA/IFwiRmlsbCB0aGUgZm9ybSBiZWxvdyB0byBlZGl0IHNlbGVjdGVkIHRpY2tldFwiXG4gICAgICAgICAgICAgIDogXCJGaWxsIHRoZSBmb3JtIGJlbG93IHRvIGNyZWF0ZSBhIHRpY2tldFwiXG4gICAgICAgICAgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gPHZlcmJlbmEtdGV4dGFyZWEgbmFtZT1cIlRlc3RcIiBbKG5nTW9kZWwpXT1cInRlc3RcIiAvPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9nVGVzdCgpXCI+TG9nPC9idXR0b24+IC0tPlxuICAgICAgPGRpdlxuICAgICAgICBbZm9ybUdyb3VwXT1cImNyZWF0ZVRpY2tldEZvcm1cIlxuICAgICAgICBjbGFzcz1cImFkZC1hcHAtZm9ybSBtYWluLWZvcm0tY29udGFpbmVyIGZsZXggZmxleC1jb2wgZ2FwLTJcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1pbnB1dC1jb250YWluZXIgZmxleCBmbGV4LWNvbCBnYXAtMVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LW1lZGl1bVwiPlRpdGxlPC9kaXY+XG4gICAgICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgICAgIG5hbWU9XCJUaXRsZVwiXG4gICAgICAgICAgICBwbGFjZUhvbGRlcj1cIlRpdGxlXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIlRpdGxlXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0taW5wdXQtY29udGFpbmVyIGZsZXggZmxleC1jb2wgZ2FwLTFcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1tZWRpdW1cIj5EZXNjcmlwdGlvbjwvZGl2PlxuICAgICAgICAgIDx2ZXJiZW5hLWlucHV0IG5hbWU9XCJEZXNjcmlwdGlvblwiIGZvcm1Db250cm9sTmFtZT1cIkRlc2NyaXB0aW9uXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gPGRpdlxuICAgICAgICAgICpuZ0lmPVwidGhpcy5zZWxlY3RlZFRpY2tldFwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWlucHV0LWNvbnRhaW5lciBmbGV4IGZsZXgtY29sIGdhcC0xXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LW1lZGl1bVwiPkN1cnJlbnQgSGFuZGxlcjwvZGl2PlxuICAgICAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgICAgICBuYW1lPVwiQ3VycmVudEhhbmRsZXJcIlxuICAgICAgICAgICAgcGxhY2VIb2xkZXI9XCJDdXJyZW50IEhhbmRsZXJcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImNyZWF0ZVRpY2tldEZvcm0uZ2V0KCdDdXJyZW50SGFuZGxlcicpPy52YWx1ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwidGhpcy5zZWxlY3RlZFRpY2tldFwiXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWlucHV0LWNvbnRhaW5lciBmbGV4IGZsZXgtY29sIGdhcC0xXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LW1lZGl1bVwiPkxhc3QgSGFuZGxlcjwvZGl2PlxuICAgICAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgICAgICBuYW1lPVwiTGFzdEhhbmRsZXJcIlxuICAgICAgICAgICAgcGxhY2VIb2xkZXI9XCJMYXN0IEhhbmRsZXJcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImNyZWF0ZVRpY2tldEZvcm0uZ2V0KCdMYXN0SGFuZGxlcicpPy52YWx1ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWlucHV0LWNvbnRhaW5lciBmbGV4IGZsZXgtY29sIGdhcC0xXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtbWVkaXVtXCI+UHJpb3JpdHk8L2Rpdj5cbiAgICAgICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgIG5hbWU9XCJQcmlvcml0eVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBQcmlvcml0eVwiXG4gICAgICAgICAgICBbb3B0aW9uc109XCJwcmlvcml0eU9wdGlvbnNcIlxuICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJOYW1lXCJcbiAgICAgICAgICAgIG9wdGlvblZhbHVlPVwiQ29kZVwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJQcmlvcml0eVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvdmVyYmVuLWRyb3AtZG93bj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWlucHV0LWNvbnRhaW5lciBmbGV4IGZsZXgtY29sIGdhcC0xXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtbWVkaXVtXCI+U3RhdHVzPC9kaXY+XG4gICAgICAgICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICBuYW1lPVwiU3RhdHVzXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFN0YXR1c1wiXG4gICAgICAgICAgICBbb3B0aW9uc109XCJzdGF0dXNPcHRpb25zXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIlN0YXR1c1wiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvdmVyYmVuLWRyb3AtZG93bj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhdHRhY2htZW50LXNlY3Rpb24gcC0yIGZsZXggZmxleC1jb2wgZ2FwLTNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXR0YWNobWVudHMtY29udGFpbmVyIGdyaWQgZ3JpZC1jb2xzLTMgZ2FwLTJcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpbGUgb2YgdGhpcy5maWxlVXJsc1wiPlxuICAgICAgICAgICAgICA8YXBwLWZpbGUtcmVuZGVyIFtmaWxlVXJsXT1cImZpbGVcIj48L2FwcC1maWxlLXJlbmRlcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwidXBsb2FkLXNlY3Rpb24gZmxleCBmbGV4LWNvbCBmbGV4LTEgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgICA8dmVyYmVuYS1idXR0b25cbiAgICAgICAgICAgICAgICBbdXNlSWNvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbaWNvbl09XCIndXBsb2FkJ1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ2ZXJiZW4tc2Vjb25kYXJ5LWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW3RleHRdPVwiJ1VwbG9hZCdcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0cmlnZ2VyRmlsZVVwbG9hZCgpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgICAgPjwvdmVyYmVuYS1idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtY2FwdGlvbiB0ZXh0LXNtIHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgIEluY2x1ZGUgQXR0YWNobWVudHNcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImRpYWxvZy1idXR0b24tY29udGFpbmVyIGZsZXgganVzdGlmeS1lbmQgZ2FwLTJcIj5cbiAgICAgICAgPHZlcmJlbmEtYnV0dG9uXG4gICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICBjbGFzcz1cInZlcmJlbi1zZWNvbmRhcnktYnV0dG9uXCJcbiAgICAgICAgICBbdGV4dF09XCInQ2xvc2UnXCJcbiAgICAgICAgICAoY2xpY2spPVwib25Nb2RhbENsb3NlKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIDwvdmVyYmVuYS1idXR0b24+XG4gICAgICAgIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgICAgIFtkaXNhYmxlXT1cIiF0aGlzLmNoZWNrRm9ybSgpXCJcbiAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgIGNsYXNzPVwidmVyYmVuLXByaW1hcnktYnV0dG9uXCJcbiAgICAgICAgICBbdGV4dF09XCInU2F2ZSdcIlxuICAgICAgICAgIChjbGljayk9XCJzYXZlKClcIlxuICAgICAgICA+XG4gICAgICAgIDwvdmVyYmVuYS1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvdmVyYmVuLWRpYWxvZ3VlPlxuIl19