verben-workflow-ui 0.5.72 → 0.5.73

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.
@@ -3,15 +3,18 @@ import * as i0 from "@angular/core";
3
3
  import * as i1 from "@angular/forms";
4
4
  import * as i2 from "../workflow-data.service";
5
5
  import * as i3 from "../services/swimlane.service";
6
- import * as i4 from "verben-ng-ui";
6
+ import * as i4 from "@angular/common";
7
+ import * as i5 from "verben-ng-ui";
7
8
  export class SwimlaneDialogComponent {
8
9
  fb;
9
10
  dataService;
10
11
  swimlaneService;
11
12
  visible = false;
13
+ isEditing = false;
12
14
  swimlaneData = input(null);
13
15
  closed = new EventEmitter();
14
16
  created = new EventEmitter();
17
+ deleted = new EventEmitter();
15
18
  searchQuery = '';
16
19
  workflowName = '';
17
20
  // Track selected tags in a separate array
@@ -79,6 +82,9 @@ export class SwimlaneDialogComponent {
79
82
  this.selectedTagNames.push(tagName);
80
83
  }
81
84
  }
85
+ onDeleteSwimlane() {
86
+ this.deleted.emit();
87
+ }
82
88
  onDialogClose(eventData) {
83
89
  console.log('Dialog closed, received data:', eventData);
84
90
  this.searchQuery = '';
@@ -106,16 +112,20 @@ export class SwimlaneDialogComponent {
106
112
  this.searchQuery = '';
107
113
  }
108
114
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SwimlaneDialogComponent, deps: [{ token: i1.FormBuilder }, { token: i2.WorkflowDataService }, { token: i3.SwimlaneService }], target: i0.ɵɵFactoryTarget.Component });
109
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: SwimlaneDialogComponent, selector: "lib-swimlane-dialog", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: false, isRequired: false, transformFunction: null }, swimlaneData: { classPropertyName: "swimlaneData", publicName: "swimlaneData", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", created: "created" }, ngImport: i0, template: "<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [size]=\"'medium'\"\n [mode]=\"'drawer'\"\n [disableFooter]=\"false\"\n [isVisible]=\"visible\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [footerTemplate]=\"footerTemplate\"\n (openModal)=\"onDialogOpen($event)\"\n (closeModal)=\"onDialogClose($event)\"\n>\n</verben-dialogue>\n\n<ng-template #headerTemplate>\n <div\n class=\"flex items-center justify-between p-3 text-xs border-b-4 border-[#FFE681]\"\n >\n <button class=\"mr-4\" type=\"button\" (click)=\"onDialogClose($event)\">\n <span\n class=\"block w-2.5 h-2.5 border-t border-l border-[#3E3E3E]/70 transform -rotate-45\"\n ></span>\n </button>\n <div class=\"text-center\">\n <h2 class=\"text-sm font-medium\">Select Tags</h2>\n <span class=\"text-xs text-[#3E3E3E]/70\"\n >{{ this.selectedTags.length }}/{{ tags.length }}</span\n >\n </div>\n <span\n class=\"font-medium cursor-pointer text-[#3E3E3E]/70\"\n (click)=\"applySelection()\"\n >Create</span\n >\n </div>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div class=\"p-3\">\n <div class=\"mb-4 grid gap-4\">\n <!-- <input\n type=\"text\"\n placeholder=\"Enter Name\"\n class=\"w-full px-4 py-2 rounded-lg border border-[#E7C10B] outline-none\"\n [(ngModel)]=\"workflowName\"\n />\n\n <input\n type=\"search\"\n placeholder=\"Filter Tags\"\n class=\"w-full px-4 py-2 rounded-lg border border-[#E7C10B] outline-none\"\n [(ngModel)]=\"searchQuery\"\n />\n </div>\n\n <div class=\"\">\n <div class=\"py-3\">\n <label class=\"flex items-center\">\n <input type=\"checkbox\" class=\"mr-3\" [(ngModel)]=\"allSelected\" />\n <span class=\"text-sm\">Select All</span>\n </label>\n </div>\n\n <div *ngFor=\"let tag of filteredTags\" class=\"py-3\">\n <label class=\"flex items-center\">\n <input\n type=\"checkbox\"\n class=\"mr-3\"\n [checked]=\"isTagSelected(tag.Name)\"\n (change)=\"toggleTagSelection(tag.Name)\"\n />\n <span class=\"text-sm\">{{ tag.Name }}</span>\n <span *ngIf=\"!tag.IsOptional\" class=\"ml-2 text-xs text-red-500\"\n >(Required)</span\n >\n </label>\n </div> -->\n\n <verbena-input\n [(ngModel)]=\"workflowName\"\n [border]=\"'1px solid #9A9FBF66'\"\n placeHolder=\"Enter Swimlane Label\"\n [bgColor]=\"'white'\"\n ></verbena-input>\n\n <verben-drop-down\n selectKey=\"Code\"\n label=\"Tags\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"true\"\n placeholder=\"Select\"\n [options]=\"tags\"\n optionLabel=\"Name\"\n id=\"tags\"\n [(ngModel)]=\"selectedTags\"\n class=\"form-control\"\n [filter]=\"true\"\n [filterBy]=\"'Name'\"\n [showClear]=\"true\"\n >\n </verben-drop-down>\n </div>\n </div>\n</ng-template>\n\n<ng-template #footerTemplate>\n <div\n class=\"flex justify-between w-full items-center p-4 border-t border-gray-200\"\n >\n <!-- <button\n class=\"px-4 py-2 mr-2 bg-white border border-gray-200 rounded text-sm font-medium\"\n (click)=\"onDialogClose($event)\"\n >\n Cancel\n </button> -->\n\n <verbena-button\n (click)=\"onDialogClose($event)\"\n text=\"Cancel\"\n styleType=\"ylw-outline\"\n ></verbena-button>\n\n <verbena-button\n type=\"submit\"\n text=\"Save\"\n bgColor=\"#FFE681\"\n textColor=\"#404040\"\n borderRadius=\"10px\"\n pd=\"10px 20px\"\n width=\"114px\"\n height=\"39px\"\n [disable]=\"selectedTags.length < 1\"\n (click)=\"applySelection()\"\n ></verbena-button>\n\n <!-- <verbena-button\n width=\"114px\"\n height=\"39px\"\n text=\"Delete\"\n bgColor=\"#999999\"\n textColor=\"#404040\"\n borderRadius=\"10px\"\n ></verbena-button> -->\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ 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: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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.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"] }] });
115
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: SwimlaneDialogComponent, selector: "lib-swimlane-dialog", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: false, isRequired: false, transformFunction: null }, isEditing: { classPropertyName: "isEditing", publicName: "isEditing", isSignal: false, isRequired: false, transformFunction: null }, swimlaneData: { classPropertyName: "swimlaneData", publicName: "swimlaneData", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", created: "created", deleted: "deleted" }, ngImport: i0, template: "<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [size]=\"'medium'\"\n [mode]=\"'drawer'\"\n [disableFooter]=\"false\"\n [isVisible]=\"visible\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [footerTemplate]=\"footerTemplate\"\n (openModal)=\"onDialogOpen($event)\"\n (closeModal)=\"onDialogClose($event)\"\n>\n</verben-dialogue>\n\n<ng-template #headerTemplate>\n <div\n class=\"flex items-center justify-between p-3 text-xs border-b-4 border-[#FFE681]\"\n >\n <button class=\"mr-4\" type=\"button\" (click)=\"onDialogClose($event)\">\n <span\n class=\"block w-2.5 h-2.5 border-t border-l border-[#3E3E3E]/70 transform -rotate-45\"\n ></span>\n </button>\n <div class=\"text-center\">\n <h2 class=\"text-sm font-medium\">Select Tags</h2>\n <span class=\"text-xs text-[#3E3E3E]/70\"\n >{{ this.selectedTags.length }}/{{ tags.length }}</span\n >\n </div>\n <span\n class=\"font-medium cursor-pointer text-[#3E3E3E]/70\"\n (click)=\"applySelection()\"\n >Create</span\n >\n </div>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div class=\"p-3\">\n <div class=\"mb-4 grid gap-4\">\n <!-- <input\n type=\"text\"\n placeholder=\"Enter Name\"\n class=\"w-full px-4 py-2 rounded-lg border border-[#E7C10B] outline-none\"\n [(ngModel)]=\"workflowName\"\n />\n\n <input\n type=\"search\"\n placeholder=\"Filter Tags\"\n class=\"w-full px-4 py-2 rounded-lg border border-[#E7C10B] outline-none\"\n [(ngModel)]=\"searchQuery\"\n />\n </div>\n\n <div class=\"\">\n <div class=\"py-3\">\n <label class=\"flex items-center\">\n <input type=\"checkbox\" class=\"mr-3\" [(ngModel)]=\"allSelected\" />\n <span class=\"text-sm\">Select All</span>\n </label>\n </div>\n\n <div *ngFor=\"let tag of filteredTags\" class=\"py-3\">\n <label class=\"flex items-center\">\n <input\n type=\"checkbox\"\n class=\"mr-3\"\n [checked]=\"isTagSelected(tag.Name)\"\n (change)=\"toggleTagSelection(tag.Name)\"\n />\n <span class=\"text-sm\">{{ tag.Name }}</span>\n <span *ngIf=\"!tag.IsOptional\" class=\"ml-2 text-xs text-red-500\"\n >(Required)</span\n >\n </label>\n </div> -->\n\n <verbena-input\n [(ngModel)]=\"workflowName\"\n [border]=\"'1px solid #9A9FBF66'\"\n placeHolder=\"Enter Swimlane Label\"\n [bgColor]=\"'white'\"\n ></verbena-input>\n\n <verben-drop-down\n selectKey=\"Code\"\n label=\"Tags\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"true\"\n placeholder=\"Select\"\n [options]=\"tags\"\n optionLabel=\"Name\"\n id=\"tags\"\n [(ngModel)]=\"selectedTags\"\n class=\"form-control\"\n [filter]=\"true\"\n [filterBy]=\"'Name'\"\n [showClear]=\"true\"\n >\n </verben-drop-down>\n </div>\n </div>\n</ng-template>\n\n<ng-template #footerTemplate>\n <div\n class=\"flex justify-between w-full items-center p-4 border-t border-gray-200\"\n >\n <!-- <button\n class=\"px-4 py-2 mr-2 bg-white border border-gray-200 rounded text-sm font-medium\"\n (click)=\"onDialogClose($event)\"\n >\n Cancel\n </button> -->\n\n <verbena-button\n (click)=\"onDialogClose($event)\"\n text=\"Cancel\"\n styleType=\"ylw-outline\"\n ></verbena-button>\n\n <verbena-button\n type=\"submit\"\n text=\"Save\"\n bgColor=\"#FFE681\"\n textColor=\"#404040\"\n borderRadius=\"10px\"\n pd=\"10px 20px\"\n width=\"114px\"\n height=\"39px\"\n [disable]=\"selectedTags.length < 1\"\n (click)=\"applySelection()\"\n ></verbena-button>\n\n <verbena-button\n *ngIf=\"isEditing\"\n width=\"114px\"\n height=\"39px\"\n text=\"Delete\"\n bgColor=\"#999999\"\n textColor=\"#404040\"\n borderRadius=\"10px\"\n pd=\"10px 20px\"\n (click)=\"onDeleteSwimlane()\"\n ></verbena-button>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.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: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.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: i5.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: i5.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"] }] });
110
116
  }
111
117
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SwimlaneDialogComponent, decorators: [{
112
118
  type: Component,
113
- args: [{ selector: 'lib-swimlane-dialog', template: "<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [size]=\"'medium'\"\n [mode]=\"'drawer'\"\n [disableFooter]=\"false\"\n [isVisible]=\"visible\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [footerTemplate]=\"footerTemplate\"\n (openModal)=\"onDialogOpen($event)\"\n (closeModal)=\"onDialogClose($event)\"\n>\n</verben-dialogue>\n\n<ng-template #headerTemplate>\n <div\n class=\"flex items-center justify-between p-3 text-xs border-b-4 border-[#FFE681]\"\n >\n <button class=\"mr-4\" type=\"button\" (click)=\"onDialogClose($event)\">\n <span\n class=\"block w-2.5 h-2.5 border-t border-l border-[#3E3E3E]/70 transform -rotate-45\"\n ></span>\n </button>\n <div class=\"text-center\">\n <h2 class=\"text-sm font-medium\">Select Tags</h2>\n <span class=\"text-xs text-[#3E3E3E]/70\"\n >{{ this.selectedTags.length }}/{{ tags.length }}</span\n >\n </div>\n <span\n class=\"font-medium cursor-pointer text-[#3E3E3E]/70\"\n (click)=\"applySelection()\"\n >Create</span\n >\n </div>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div class=\"p-3\">\n <div class=\"mb-4 grid gap-4\">\n <!-- <input\n type=\"text\"\n placeholder=\"Enter Name\"\n class=\"w-full px-4 py-2 rounded-lg border border-[#E7C10B] outline-none\"\n [(ngModel)]=\"workflowName\"\n />\n\n <input\n type=\"search\"\n placeholder=\"Filter Tags\"\n class=\"w-full px-4 py-2 rounded-lg border border-[#E7C10B] outline-none\"\n [(ngModel)]=\"searchQuery\"\n />\n </div>\n\n <div class=\"\">\n <div class=\"py-3\">\n <label class=\"flex items-center\">\n <input type=\"checkbox\" class=\"mr-3\" [(ngModel)]=\"allSelected\" />\n <span class=\"text-sm\">Select All</span>\n </label>\n </div>\n\n <div *ngFor=\"let tag of filteredTags\" class=\"py-3\">\n <label class=\"flex items-center\">\n <input\n type=\"checkbox\"\n class=\"mr-3\"\n [checked]=\"isTagSelected(tag.Name)\"\n (change)=\"toggleTagSelection(tag.Name)\"\n />\n <span class=\"text-sm\">{{ tag.Name }}</span>\n <span *ngIf=\"!tag.IsOptional\" class=\"ml-2 text-xs text-red-500\"\n >(Required)</span\n >\n </label>\n </div> -->\n\n <verbena-input\n [(ngModel)]=\"workflowName\"\n [border]=\"'1px solid #9A9FBF66'\"\n placeHolder=\"Enter Swimlane Label\"\n [bgColor]=\"'white'\"\n ></verbena-input>\n\n <verben-drop-down\n selectKey=\"Code\"\n label=\"Tags\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"true\"\n placeholder=\"Select\"\n [options]=\"tags\"\n optionLabel=\"Name\"\n id=\"tags\"\n [(ngModel)]=\"selectedTags\"\n class=\"form-control\"\n [filter]=\"true\"\n [filterBy]=\"'Name'\"\n [showClear]=\"true\"\n >\n </verben-drop-down>\n </div>\n </div>\n</ng-template>\n\n<ng-template #footerTemplate>\n <div\n class=\"flex justify-between w-full items-center p-4 border-t border-gray-200\"\n >\n <!-- <button\n class=\"px-4 py-2 mr-2 bg-white border border-gray-200 rounded text-sm font-medium\"\n (click)=\"onDialogClose($event)\"\n >\n Cancel\n </button> -->\n\n <verbena-button\n (click)=\"onDialogClose($event)\"\n text=\"Cancel\"\n styleType=\"ylw-outline\"\n ></verbena-button>\n\n <verbena-button\n type=\"submit\"\n text=\"Save\"\n bgColor=\"#FFE681\"\n textColor=\"#404040\"\n borderRadius=\"10px\"\n pd=\"10px 20px\"\n width=\"114px\"\n height=\"39px\"\n [disable]=\"selectedTags.length < 1\"\n (click)=\"applySelection()\"\n ></verbena-button>\n\n <!-- <verbena-button\n width=\"114px\"\n height=\"39px\"\n text=\"Delete\"\n bgColor=\"#999999\"\n textColor=\"#404040\"\n borderRadius=\"10px\"\n ></verbena-button> -->\n </div>\n</ng-template>\n" }]
119
+ args: [{ selector: 'lib-swimlane-dialog', template: "<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [size]=\"'medium'\"\n [mode]=\"'drawer'\"\n [disableFooter]=\"false\"\n [isVisible]=\"visible\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [footerTemplate]=\"footerTemplate\"\n (openModal)=\"onDialogOpen($event)\"\n (closeModal)=\"onDialogClose($event)\"\n>\n</verben-dialogue>\n\n<ng-template #headerTemplate>\n <div\n class=\"flex items-center justify-between p-3 text-xs border-b-4 border-[#FFE681]\"\n >\n <button class=\"mr-4\" type=\"button\" (click)=\"onDialogClose($event)\">\n <span\n class=\"block w-2.5 h-2.5 border-t border-l border-[#3E3E3E]/70 transform -rotate-45\"\n ></span>\n </button>\n <div class=\"text-center\">\n <h2 class=\"text-sm font-medium\">Select Tags</h2>\n <span class=\"text-xs text-[#3E3E3E]/70\"\n >{{ this.selectedTags.length }}/{{ tags.length }}</span\n >\n </div>\n <span\n class=\"font-medium cursor-pointer text-[#3E3E3E]/70\"\n (click)=\"applySelection()\"\n >Create</span\n >\n </div>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div class=\"p-3\">\n <div class=\"mb-4 grid gap-4\">\n <!-- <input\n type=\"text\"\n placeholder=\"Enter Name\"\n class=\"w-full px-4 py-2 rounded-lg border border-[#E7C10B] outline-none\"\n [(ngModel)]=\"workflowName\"\n />\n\n <input\n type=\"search\"\n placeholder=\"Filter Tags\"\n class=\"w-full px-4 py-2 rounded-lg border border-[#E7C10B] outline-none\"\n [(ngModel)]=\"searchQuery\"\n />\n </div>\n\n <div class=\"\">\n <div class=\"py-3\">\n <label class=\"flex items-center\">\n <input type=\"checkbox\" class=\"mr-3\" [(ngModel)]=\"allSelected\" />\n <span class=\"text-sm\">Select All</span>\n </label>\n </div>\n\n <div *ngFor=\"let tag of filteredTags\" class=\"py-3\">\n <label class=\"flex items-center\">\n <input\n type=\"checkbox\"\n class=\"mr-3\"\n [checked]=\"isTagSelected(tag.Name)\"\n (change)=\"toggleTagSelection(tag.Name)\"\n />\n <span class=\"text-sm\">{{ tag.Name }}</span>\n <span *ngIf=\"!tag.IsOptional\" class=\"ml-2 text-xs text-red-500\"\n >(Required)</span\n >\n </label>\n </div> -->\n\n <verbena-input\n [(ngModel)]=\"workflowName\"\n [border]=\"'1px solid #9A9FBF66'\"\n placeHolder=\"Enter Swimlane Label\"\n [bgColor]=\"'white'\"\n ></verbena-input>\n\n <verben-drop-down\n selectKey=\"Code\"\n label=\"Tags\"\n styleClass=\"w-full\"\n width=\"100%\"\n [multiselect]=\"true\"\n placeholder=\"Select\"\n [options]=\"tags\"\n optionLabel=\"Name\"\n id=\"tags\"\n [(ngModel)]=\"selectedTags\"\n class=\"form-control\"\n [filter]=\"true\"\n [filterBy]=\"'Name'\"\n [showClear]=\"true\"\n >\n </verben-drop-down>\n </div>\n </div>\n</ng-template>\n\n<ng-template #footerTemplate>\n <div\n class=\"flex justify-between w-full items-center p-4 border-t border-gray-200\"\n >\n <!-- <button\n class=\"px-4 py-2 mr-2 bg-white border border-gray-200 rounded text-sm font-medium\"\n (click)=\"onDialogClose($event)\"\n >\n Cancel\n </button> -->\n\n <verbena-button\n (click)=\"onDialogClose($event)\"\n text=\"Cancel\"\n styleType=\"ylw-outline\"\n ></verbena-button>\n\n <verbena-button\n type=\"submit\"\n text=\"Save\"\n bgColor=\"#FFE681\"\n textColor=\"#404040\"\n borderRadius=\"10px\"\n pd=\"10px 20px\"\n width=\"114px\"\n height=\"39px\"\n [disable]=\"selectedTags.length < 1\"\n (click)=\"applySelection()\"\n ></verbena-button>\n\n <verbena-button\n *ngIf=\"isEditing\"\n width=\"114px\"\n height=\"39px\"\n text=\"Delete\"\n bgColor=\"#999999\"\n textColor=\"#404040\"\n borderRadius=\"10px\"\n pd=\"10px 20px\"\n (click)=\"onDeleteSwimlane()\"\n ></verbena-button>\n </div>\n</ng-template>\n" }]
114
120
  }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.WorkflowDataService }, { type: i3.SwimlaneService }], propDecorators: { visible: [{
115
121
  type: Input
122
+ }], isEditing: [{
123
+ type: Input
116
124
  }], closed: [{
117
125
  type: Output
118
126
  }], created: [{
119
127
  type: Output
128
+ }], deleted: [{
129
+ type: Output
120
130
  }] } });
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpbWxhbmUtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvd29ya2Zsb3ctZGVzaWduZXIvc3dpbWxhbmUtZGlhbG9nL3N3aW1sYW5lLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3N3aW1sYW5lLWRpYWxvZy9zd2ltbGFuZS1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sWUFBWSxFQUNaLEtBQUssRUFDTCxLQUFLLEVBRUwsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFXdkIsTUFBTSxPQUFPLHVCQUF1QjtJQWlCeEI7SUFDQTtJQUNBO0lBbEJELE9BQU8sR0FBWSxLQUFLLENBQUM7SUFDbEMsWUFBWSxHQUFHLEtBQUssQ0FBdUMsSUFBSSxDQUFDLENBQUM7SUFDdkQsTUFBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDNUIsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFpQyxDQUFDO0lBRXRFLFdBQVcsR0FBVyxFQUFFLENBQUM7SUFDekIsWUFBWSxHQUFXLEVBQUUsQ0FBQztJQUUxQiwwQ0FBMEM7SUFDMUMsZ0JBQWdCLEdBQWEsRUFBRSxDQUFDO0lBQ2hDLFlBQVksR0FBVSxFQUFFLENBQUM7SUFFekIsWUFBWTtJQUNaLElBQUksR0FBVSxFQUFFLENBQUM7SUFFakIsWUFDVSxFQUFlLEVBQ2YsV0FBZ0MsRUFDaEMsZUFBZ0M7UUFGaEMsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjtR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Q0csT0FBTztzQkFBaEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgZWZmZWN0LFxuICBFdmVudEVtaXR0ZXIsXG4gIGlucHV0LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFnIH0gZnJvbSAndmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvbW9kZWxzJztcbmltcG9ydCB7IFdvcmtmbG93RGF0YVNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3dpbWxhbmVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3dpbWxhbmUuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItc3dpbWxhbmUtZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N3aW1sYW5lLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zd2ltbGFuZS1kaWFsb2cuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIFN3aW1sYW5lRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgdmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBzd2ltbGFuZURhdGEgPSBpbnB1dDx7IG5hbWU6IHN0cmluZzsgdGFnczogVGFnW10gfSB8IG51bGw+KG51bGwpO1xuICBAT3V0cHV0KCkgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgY3JlYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyB0YWdzOiBUYWdbXTsgbmFtZTogc3RyaW5nIH0+KCk7XG5cbiAgc2VhcmNoUXVlcnk6IHN0cmluZyA9ICcnO1xuICB3b3JrZmxvd05hbWU6IHN0cmluZyA9ICcnO1xuXG4gIC8vIFRyYWNrIHNlbGVjdGVkIHRhZ3MgaW4gYSBzZXBhcmF0ZSBhcnJheVxuICBzZWxlY3RlZFRhZ05hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICBzZWxlY3RlZFRhZ3M6IFRhZ1tdID0gW107XG5cbiAgLy8gVGFncyBsaXN0XG4gIHRhZ3M6IFRhZ1tdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogV29ya2Zsb3dEYXRhU2VydmljZSxcbiAgICBwcml2YXRlIHN3aW1sYW5lU2VydmljZTogU3dpbWxhbmVTZXJ2aWNlXG4gICkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBzRGF0YSA9IHRoaXMuc3dpbWxhbmVEYXRhKCk7XG4gICAgICAvLyBJZiBlZGl0aW5nIGFuIGV4aXN0aW5nIHN3aW1sYW5lLCBwb3B1bGF0ZSB0aGUgZm9ybVxuICAgICAgaWYgKHNEYXRhKSB7XG4gICAgICAgIHRoaXMud29ya2Zsb3dOYW1lID0gc0RhdGEubmFtZSB8fCAnJztcbiAgICAgICAgLy8gU2V0IHNlbGVjdGVkIHRhZ3NcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhZ3MgPSBzRGF0YS50YWdzO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1N3aW1sYW5lIGRpYWxvZyBpbml0aWFsaXplZCB3aXRoIGRhdGE6JywgdGhpcy5zd2ltbGFuZURhdGEpO1xuXG4gICAgLy8gUmVzZXQgZm9ybSBmaWVsZHMgd2hlbiBkaWFsb2cgb3BlbnNcbiAgICAvLyB0aGlzLnNlbGVjdGVkVGFnTmFtZXMgPSBbXTtcbiAgICB0aGlzLndvcmtmbG93TmFtZSA9ICcnO1xuICAgIHRoaXMuc2VhcmNoUXVlcnkgPSAnJztcblxuICAgIC8vIExvYWQgdGFncyBmcm9tIHRoZSBkYXRhIHNlcnZpY2VcbiAgICB0aGlzLmxvYWRUYWdzKCk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCB0YWdzIGZyb20gdGhlIGRhdGEgc2VydmljZVxuICAgKi9cbiAgcHJpdmF0ZSBsb2FkVGFncygpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldFRhZ3MoKS50aGVuKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLnRhZ3MgPSBkYXRhLlJlc3VsdDtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBhbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy50YWdzLmxlbmd0aCA+IDAgJiYgdGhpcy5zZWxlY3RlZFRhZ05hbWVzLmxlbmd0aCA9PT0gdGhpcy50YWdzLmxlbmd0aFxuICAgICk7XG4gIH1cblxuICBzZXQgYWxsU2VsZWN0ZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWdOYW1lcyA9IHRoaXMudGFncy5tYXAoKHRhZykgPT4gdGFnLk5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFnTmFtZXMgPSBbXTtcbiAgICB9XG4gIH1cblxuICBnZXQgZmlsdGVyZWRUYWdzKCk6IFRhZ1tdIHtcbiAgICBpZiAoIXRoaXMuc2VhcmNoUXVlcnkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhZ3M7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudGFncy5maWx0ZXIoKHRhZykgPT5cbiAgICAgIHRhZy5OYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hRdWVyeS50b0xvd2VyQ2FzZSgpKVxuICAgICk7XG4gIH1cblxuICBpc1RhZ1NlbGVjdGVkKHRhZ05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVGFnTmFtZXMuaW5jbHVkZXModGFnTmFtZSk7XG4gIH1cblxuICB0b2dnbGVUYWdTZWxlY3Rpb24odGFnTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkVGFnTmFtZXMuaW5kZXhPZih0YWdOYW1lKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhZ05hbWVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWdOYW1lcy5wdXNoKHRhZ05hbWUpO1xuICAgIH1cbiAgfVxuXG4gIG9uRGlhbG9nQ2xvc2UoZXZlbnREYXRhOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygnRGlhbG9nIGNsb3NlZCwgcmVjZWl2ZWQgZGF0YTonLCBldmVudERhdGEpO1xuICAgIHRoaXMuc2VhcmNoUXVlcnkgPSAnJztcbiAgICB0aGlzLndvcmtmbG93TmFtZSA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRUYWdOYW1lcyA9IFtdO1xuICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgfVxuXG4gIG9uRGlhbG9nT3BlbihldmVudERhdGE6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKCdEaWFsb2cgb3BlbmVkLCByZWNlaXZlZCBkYXRhOicsIGV2ZW50RGF0YSk7XG4gIH1cblxuICBhcHBseVNlbGVjdGlvbigpIHtcbiAgICBjb25zdCBzZWxlY3RlZFRhZ3MgPSB0aGlzLnRhZ3MuZmlsdGVyKCh0YWcpID0+XG4gICAgICB0aGlzLnNlbGVjdGVkVGFnTmFtZXMuaW5jbHVkZXModGFnLk5hbWUpXG4gICAgKTtcblxuICAgIGNvbnNvbGUubG9nKCdTdWJtaXR0aW5nIHN3aW1sYW5lIGRhdGE6Jywge1xuICAgICAgbmFtZTogdGhpcy53b3JrZmxvd05hbWUsXG4gICAgICB0YWdzOiBzZWxlY3RlZFRhZ3MsXG4gICAgfSk7XG5cbiAgICB0aGlzLmNyZWF0ZWQuZW1pdCh7XG4gICAgICB0YWdzOiB0aGlzLnNlbGVjdGVkVGFncyxcbiAgICAgIG5hbWU6IHRoaXMud29ya2Zsb3dOYW1lLFxuICAgIH0pO1xuXG4gICAgLy8gUmVzZXQgZm9ybSBmaWVsZHMgd2hlbiBkaWFsb2cgb3BlbnNcbiAgICB0aGlzLnNlbGVjdGVkVGFnTmFtZXMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkVGFncyA9IFtdO1xuICAgIHRoaXMud29ya2Zsb3dOYW1lID0gJyc7XG4gICAgdGhpcy5zZWFyY2hRdWVyeSA9ICcnO1xuICB9XG59XG4iLCI8dmVyYmVuLWRpYWxvZ3VlXG4gIFtzaG93Q2xvc2VJY29uXT1cInRydWVcIlxuICBbZGlzbWlzc091dHNpZGVDbGlja109XCJ0cnVlXCJcbiAgW2Nsb3NlT25Fc2NhcGVdPVwidHJ1ZVwiXG4gIFtzaXplXT1cIidtZWRpdW0nXCJcbiAgW21vZGVdPVwiJ2RyYXdlcidcIlxuICBbZGlzYWJsZUZvb3Rlcl09XCJmYWxzZVwiXG4gIFtpc1Zpc2libGVdPVwidmlzaWJsZVwiXG4gIFtoZWFkZXJUZW1wbGF0ZV09XCJoZWFkZXJUZW1wbGF0ZVwiXG4gIFtib2R5VGVtcGxhdGVdPVwiYm9keVRlbXBsYXRlXCJcbiAgW2Zvb3RlclRlbXBsYXRlXT1cImZvb3RlclRlbXBsYXRlXCJcbiAgKG9wZW5Nb2RhbCk9XCJvbkRpYWxvZ09wZW4oJGV2ZW50KVwiXG4gIChjbG9zZU1vZGFsKT1cIm9uRGlhbG9nQ2xvc2UoJGV2ZW50KVwiXG4+XG48L3ZlcmJlbi1kaWFsb2d1ZT5cblxuPG5nLXRlbXBsYXRlICNoZWFkZXJUZW1wbGF0ZT5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHAtMyB0ZXh0LXhzIGJvcmRlci1iLTQgYm9yZGVyLVsjRkZFNjgxXVwiXG4gID5cbiAgICA8YnV0dG9uIGNsYXNzPVwibXItNFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25EaWFsb2dDbG9zZSgkZXZlbnQpXCI+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cImJsb2NrIHctMi41IGgtMi41IGJvcmRlci10IGJvcmRlci1sIGJvcmRlci1bIzNFM0UzRV0vNzAgdHJhbnNmb3JtIC1yb3RhdGUtNDVcIlxuICAgICAgPjwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgIDxoMiBjbGFzcz1cInRleHQtc20gZm9udC1tZWRpdW1cIj5TZWxlY3QgVGFnczwvaDI+XG4gICAgICA8c3BhbiBjbGFzcz1cInRleHQteHMgdGV4dC1bIzNFM0UzRV0vNzBcIlxuICAgICAgICA+e3sgdGhpcy5zZWxlY3RlZFRhZ3MubGVuZ3RoIH19L3t7IHRhZ3MubGVuZ3RoIH19PC9zcGFuXG4gICAgICA+XG4gICAgPC9kaXY+XG4gICAgPHNwYW5cbiAgICAgIGNsYXNzPVwiZm9udC1tZWRpdW0gY3Vyc29yLXBvaW50ZXIgdGV4dC1bIzNFM0UzRV0vNzBcIlxuICAgICAgKGNsaWNrKT1cImFwcGx5U2VsZWN0aW9uKClcIlxuICAgICAgPkNyZWF0ZTwvc3BhblxuICAgID5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2JvZHlUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInAtM1wiPlxuICAgIDxkaXYgY2xhc3M9XCJtYi00IGdyaWQgZ2FwLTRcIj5cbiAgICAgIDwhLS0gPGlucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBOYW1lXCJcbiAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcHgtNCBweS0yIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1bI0U3QzEwQl0gb3V0bGluZS1ub25lXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJ3b3JrZmxvd05hbWVcIlxuICAgICAgLz5cblxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlciBUYWdzXCJcbiAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgcHgtNCBweS0yIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1bI0U3QzEwQl0gb3V0bGluZS1ub25lXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hRdWVyeVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIlwiPlxuICAgICAgPGRpdiBjbGFzcz1cInB5LTNcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJtci0zXCIgWyhuZ01vZGVsKV09XCJhbGxTZWxlY3RlZFwiIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtXCI+U2VsZWN0IEFsbDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB0YWcgb2YgZmlsdGVyZWRUYWdzXCIgY2xhc3M9XCJweS0zXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgY2xhc3M9XCJtci0zXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImlzVGFnU2VsZWN0ZWQodGFnLk5hbWUpXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlVGFnU2VsZWN0aW9uKHRhZy5OYW1lKVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc21cIj57eyB0YWcuTmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF0YWcuSXNPcHRpb25hbFwiIGNsYXNzPVwibWwtMiB0ZXh0LXhzIHRleHQtcmVkLTUwMFwiXG4gICAgICAgICAgICA+KFJlcXVpcmVkKTwvc3BhblxuICAgICAgICAgID5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgWyhuZ01vZGVsKV09XCJ3b3JrZmxvd05hbWVcIlxuICAgICAgICBbYm9yZGVyXT1cIicxcHggc29saWQgIzlBOUZCRjY2J1wiXG4gICAgICAgIHBsYWNlSG9sZGVyPVwiRW50ZXIgU3dpbWxhbmUgTGFiZWxcIlxuICAgICAgICBbYmdDb2xvcl09XCInd2hpdGUnXCJcbiAgICAgID48L3ZlcmJlbmEtaW5wdXQ+XG5cbiAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgIHNlbGVjdEtleT1cIkNvZGVcIlxuICAgICAgICBsYWJlbD1cIlRhZ3NcIlxuICAgICAgICBzdHlsZUNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgW211bHRpc2VsZWN0XT1cInRydWVcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdFwiXG4gICAgICAgIFtvcHRpb25zXT1cInRhZ3NcIlxuICAgICAgICBvcHRpb25MYWJlbD1cIk5hbWVcIlxuICAgICAgICBpZD1cInRhZ3NcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkVGFnc1wiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgW2ZpbHRlcl09XCJ0cnVlXCJcbiAgICAgICAgW2ZpbHRlckJ5XT1cIidOYW1lJ1wiXG4gICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgICA+XG4gICAgICA8L3ZlcmJlbi1kcm9wLWRvd24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNmb290ZXJUZW1wbGF0ZT5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gdy1mdWxsIGl0ZW1zLWNlbnRlciBwLTQgYm9yZGVyLXQgYm9yZGVyLWdyYXktMjAwXCJcbiAgPlxuICAgIDwhLS0gPGJ1dHRvblxuICAgICAgY2xhc3M9XCJweC00IHB5LTIgbXItMiBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQgdGV4dC1zbSBmb250LW1lZGl1bVwiXG4gICAgICAoY2xpY2spPVwib25EaWFsb2dDbG9zZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgICBDYW5jZWxcbiAgICA8L2J1dHRvbj4gLS0+XG5cbiAgICA8dmVyYmVuYS1idXR0b25cbiAgICAgIChjbGljayk9XCJvbkRpYWxvZ0Nsb3NlKCRldmVudClcIlxuICAgICAgdGV4dD1cIkNhbmNlbFwiXG4gICAgICBzdHlsZVR5cGU9XCJ5bHctb3V0bGluZVwiXG4gICAgPjwvdmVyYmVuYS1idXR0b24+XG5cbiAgICA8dmVyYmVuYS1idXR0b25cbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgdGV4dD1cIlNhdmVcIlxuICAgICAgYmdDb2xvcj1cIiNGRkU2ODFcIlxuICAgICAgdGV4dENvbG9yPVwiIzQwNDA0MFwiXG4gICAgICBib3JkZXJSYWRpdXM9XCIxMHB4XCJcbiAgICAgIHBkPVwiMTBweCAyMHB4XCJcbiAgICAgIHdpZHRoPVwiMTE0cHhcIlxuICAgICAgaGVpZ2h0PVwiMzlweFwiXG4gICAgICBbZGlzYWJsZV09XCJzZWxlY3RlZFRhZ3MubGVuZ3RoIDwgMVwiXG4gICAgICAoY2xpY2spPVwiYXBwbHlTZWxlY3Rpb24oKVwiXG4gICAgPjwvdmVyYmVuYS1idXR0b24+XG5cbiAgICA8IS0tIDx2ZXJiZW5hLWJ1dHRvblxuICAgICAgd2lkdGg9XCIxMTRweFwiXG4gICAgICBoZWlnaHQ9XCIzOXB4XCJcbiAgICAgIHRleHQ9XCJEZWxldGVcIlxuICAgICAgYmdDb2xvcj1cIiM5OTk5OTlcIlxuICAgICAgdGV4dENvbG9yPVwiIzQwNDA0MFwiXG4gICAgICBib3JkZXJSYWRpdXM9XCIxMHB4XCJcbiAgICA+PC92ZXJiZW5hLWJ1dHRvbj4gLS0+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpbWxhbmUtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvd29ya2Zsb3ctZGVzaWduZXIvc3dpbWxhbmUtZGlhbG9nL3N3aW1sYW5lLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3N3aW1sYW5lLWRpYWxvZy9zd2ltbGFuZS1kaWFsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sWUFBWSxFQUNaLEtBQUssRUFDTCxLQUFLLEVBRUwsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBV3ZCLE1BQU0sT0FBTyx1QkFBdUI7SUFtQnhCO0lBQ0E7SUFDQTtJQXBCRCxPQUFPLEdBQVksS0FBSyxDQUFDO0lBQ3pCLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDcEMsWUFBWSxHQUFHLEtBQUssQ0FBdUMsSUFBSSxDQUFDLENBQUM7SUFDdkQsTUFBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDNUIsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFpQyxDQUFDO0lBQzVELE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBRTdDLFdBQVcsR0FBVyxFQUFFLENBQUM7SUFDekIsWUFBWSxHQUFXLEVBQUUsQ0FBQztJQUUxQiwwQ0FBMEM7SUFDMUMsZ0JBQWdCLEdBQWEsRUFBRSxDQUFDO0lBQ2hDLFlBQVksR0FBVSxFQUFFLENBQUM7SUFFekIsWUFBWTtJQUNaLElBQUksR0FBVSxFQUFFLENBQUM7SUFFakIsWUFDVSxFQUFlLEVBQ2YsV0FBZ0MsRUFD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LHVCQUF1Qjs0RkFBdkIsdUJBQXVCLCtoQkNuQnBDLG90SUF1SkE7OzRGRHBJYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UscUJBQXFCO2dKQUt0QixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFFSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBlZmZlY3QsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5wdXQsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUYWcgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgV29ya2Zsb3dEYXRhU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBTd2ltbGFuZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zd2ltbGFuZS5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1zd2ltbGFuZS1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3dpbWxhbmUtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3N3aW1sYW5lLWRpYWxvZy5jb21wb25lbnQuY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgU3dpbWxhbmVEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSB2aXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzRWRpdGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBzd2ltbGFuZURhdGEgPSBpbnB1dDx7IG5hbWU6IHN0cmluZzsgdGFnczogVGFnW10gfSB8IG51bGw+KG51bGwpO1xuICBAT3V0cHV0KCkgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgY3JlYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyB0YWdzOiBUYWdbXTsgbmFtZTogc3RyaW5nIH0+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIHNlYXJjaFF1ZXJ5OiBzdHJpbmcgPSAnJztcbiAgd29ya2Zsb3dOYW1lOiBzdHJpbmcgPSAnJztcblxuICAvLyBUcmFjayBzZWxlY3RlZCB0YWdzIGluIGEgc2VwYXJhdGUgYXJyYXlcbiAgc2VsZWN0ZWRUYWdOYW1lczogc3RyaW5nW10gPSBbXTtcbiAgc2VsZWN0ZWRUYWdzOiBUYWdbXSA9IFtdO1xuXG4gIC8vIFRhZ3MgbGlzdFxuICB0YWdzOiBUYWdbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IFdvcmtmbG93RGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzd2ltbGFuZVNlcnZpY2U6IFN3aW1sYW5lU2VydmljZVxuICApIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3Qgc0RhdGEgPSB0aGlzLnN3aW1sYW5lRGF0YSgpO1xuICAgICAgLy8gSWYgZWRpdGluZyBhbiBleGlzdGluZyBzd2ltbGFuZSwgcG9wdWxhdGUgdGhlIGZvcm1cbiAgICAgIGlmIChzRGF0YSkge1xuICAgICAgICB0aGlzLndvcmtmbG93TmFtZSA9IHNEYXRhLm5hbWUgfHwgJyc7XG4gICAgICAgIC8vIFNldCBzZWxlY3RlZCB0YWdzXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWdzID0gc0RhdGEudGFncztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdTd2ltbGFuZSBkaWFsb2cgaW5pdGlhbGl6ZWQgd2l0aCBkYXRhOicsIHRoaXMuc3dpbWxhbmVEYXRhKTtcblxuICAgIC8vIFJlc2V0IGZvcm0gZmllbGRzIHdoZW4gZGlhbG9nIG9wZW5zXG4gICAgLy8gdGhpcy5zZWxlY3RlZFRhZ05hbWVzID0gW107XG4gICAgdGhpcy53b3JrZmxvd05hbWUgPSAnJztcbiAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gJyc7XG5cbiAgICAvLyBMb2FkIHRhZ3MgZnJvbSB0aGUgZGF0YSBzZXJ2aWNlXG4gICAgdGhpcy5sb2FkVGFncygpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGFncyBmcm9tIHRoZSBkYXRhIHNlcnZpY2VcbiAgICovXG4gIHByaXZhdGUgbG9hZFRhZ3MoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhU2VydmljZS5nZXRUYWdzKCkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgdGhpcy50YWdzID0gZGF0YS5SZXN1bHQ7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgYWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudGFncy5sZW5ndGggPiAwICYmIHRoaXMuc2VsZWN0ZWRUYWdOYW1lcy5sZW5ndGggPT09IHRoaXMudGFncy5sZW5ndGhcbiAgICApO1xuICB9XG5cbiAgc2V0IGFsbFNlbGVjdGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFnTmFtZXMgPSB0aGlzLnRhZ3MubWFwKCh0YWcpID0+IHRhZy5OYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhZ05hbWVzID0gW107XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZpbHRlcmVkVGFncygpOiBUYWdbXSB7XG4gICAgaWYgKCF0aGlzLnNlYXJjaFF1ZXJ5KSB7XG4gICAgICByZXR1cm4gdGhpcy50YWdzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRhZ3MuZmlsdGVyKCh0YWcpID0+XG4gICAgICB0YWcuTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc2VhcmNoUXVlcnkudG9Mb3dlckNhc2UoKSlcbiAgICApO1xuICB9XG5cbiAgaXNUYWdTZWxlY3RlZCh0YWdOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRhZ05hbWVzLmluY2x1ZGVzKHRhZ05hbWUpO1xuICB9XG5cbiAgdG9nZ2xlVGFnU2VsZWN0aW9uKHRhZ05hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZFRhZ05hbWVzLmluZGV4T2YodGFnTmFtZSk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWdOYW1lcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGFnTmFtZXMucHVzaCh0YWdOYW1lKTtcbiAgICB9XG4gIH1cblxuICBvbkRlbGV0ZVN3aW1sYW5lKCkge1xuICAgIHRoaXMuZGVsZXRlZC5lbWl0KCk7XG4gIH1cblxuICBvbkRpYWxvZ0Nsb3NlKGV2ZW50RGF0YTogYW55KSB7XG4gICAgY29uc29sZS5sb2coJ0RpYWxvZyBjbG9zZWQsIHJlY2VpdmVkIGRhdGE6JywgZXZlbnREYXRhKTtcbiAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gJyc7XG4gICAgdGhpcy53b3JrZmxvd05hbWUgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkVGFnTmFtZXMgPSBbXTtcbiAgICB0aGlzLmNsb3NlZC5lbWl0KCk7XG4gIH1cblxuICBvbkRpYWxvZ09wZW4oZXZlbnREYXRhOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygnRGlhbG9nIG9wZW5lZCwgcmVjZWl2ZWQgZGF0YTonLCBldmVudERhdGEpO1xuICB9XG5cbiAgYXBwbHlTZWxlY3Rpb24oKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRUYWdzID0gdGhpcy50YWdzLmZpbHRlcigodGFnKSA9PlxuICAgICAgdGhpcy5zZWxlY3RlZFRhZ05hbWVzLmluY2x1ZGVzKHRhZy5OYW1lKVxuICAgICk7XG5cbiAgICBjb25zb2xlLmxvZygnU3VibWl0dGluZyBzd2ltbGFuZSBkYXRhOicsIHtcbiAgICAgIG5hbWU6IHRoaXMud29ya2Zsb3dOYW1lLFxuICAgICAgdGFnczogc2VsZWN0ZWRUYWdzLFxuICAgIH0pO1xuXG4gICAgdGhpcy5jcmVhdGVkLmVtaXQoe1xuICAgICAgdGFnczogdGhpcy5zZWxlY3RlZFRhZ3MsXG4gICAgICBuYW1lOiB0aGlzLndvcmtmbG93TmFtZSxcbiAgICB9KTtcblxuICAgIC8vIFJlc2V0IGZvcm0gZmllbGRzIHdoZW4gZGlhbG9nIG9wZW5zXG4gICAgdGhpcy5zZWxlY3RlZFRhZ05hbWVzID0gW107XG4gICAgdGhpcy5zZWxlY3RlZFRhZ3MgPSBbXTtcbiAgICB0aGlzLndvcmtmbG93TmFtZSA9ICcnO1xuICAgIHRoaXMuc2VhcmNoUXVlcnkgPSAnJztcbiAgfVxufVxuIiwiPHZlcmJlbi1kaWFsb2d1ZVxuICBbc2hvd0Nsb3NlSWNvbl09XCJ0cnVlXCJcbiAgW2Rpc21pc3NPdXRzaWRlQ2xpY2tdPVwidHJ1ZVwiXG4gIFtjbG9zZU9uRXNjYXBlXT1cInRydWVcIlxuICBbc2l6ZV09XCInbWVkaXVtJ1wiXG4gIFttb2RlXT1cIidkcmF3ZXInXCJcbiAgW2Rpc2FibGVGb290ZXJdPVwiZmFsc2VcIlxuICBbaXNWaXNpYmxlXT1cInZpc2libGVcIlxuICBbaGVhZGVyVGVtcGxhdGVdPVwiaGVhZGVyVGVtcGxhdGVcIlxuICBbYm9keVRlbXBsYXRlXT1cImJvZHlUZW1wbGF0ZVwiXG4gIFtmb290ZXJUZW1wbGF0ZV09XCJmb290ZXJUZW1wbGF0ZVwiXG4gIChvcGVuTW9kYWwpPVwib25EaWFsb2dPcGVuKCRldmVudClcIlxuICAoY2xvc2VNb2RhbCk9XCJvbkRpYWxvZ0Nsb3NlKCRldmVudClcIlxuPlxuPC92ZXJiZW4tZGlhbG9ndWU+XG5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyVGVtcGxhdGU+XG4gIDxkaXZcbiAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBwLTMgdGV4dC14cyBib3JkZXItYi00IGJvcmRlci1bI0ZGRTY4MV1cIlxuICA+XG4gICAgPGJ1dHRvbiBjbGFzcz1cIm1yLTRcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uRGlhbG9nQ2xvc2UoJGV2ZW50KVwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJibG9jayB3LTIuNSBoLTIuNSBib3JkZXItdCBib3JkZXItbCBib3JkZXItWyMzRTNFM0VdLzcwIHRyYW5zZm9ybSAtcm90YXRlLTQ1XCJcbiAgICAgID48L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICA8aDIgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+U2VsZWN0IFRhZ3M8L2gyPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXhzIHRleHQtWyMzRTNFM0VdLzcwXCJcbiAgICAgICAgPnt7IHRoaXMuc2VsZWN0ZWRUYWdzLmxlbmd0aCB9fS97eyB0YWdzLmxlbmd0aCB9fTwvc3BhblxuICAgICAgPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuXG4gICAgICBjbGFzcz1cImZvbnQtbWVkaXVtIGN1cnNvci1wb2ludGVyIHRleHQtWyMzRTNFM0VdLzcwXCJcbiAgICAgIChjbGljayk9XCJhcHBseVNlbGVjdGlvbigpXCJcbiAgICAgID5DcmVhdGU8L3NwYW5cbiAgICA+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNib2R5VGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJwLTNcIj5cbiAgICA8ZGl2IGNsYXNzPVwibWItNCBncmlkIGdhcC00XCI+XG4gICAgICA8IS0tIDxpbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgTmFtZVwiXG4gICAgICAgIGNsYXNzPVwidy1mdWxsIHB4LTQgcHktMiByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItWyNFN0MxMEJdIG91dGxpbmUtbm9uZVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwid29ya2Zsb3dOYW1lXCJcbiAgICAgIC8+XG5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwic2VhcmNoXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJGaWx0ZXIgVGFnc1wiXG4gICAgICAgIGNsYXNzPVwidy1mdWxsIHB4LTQgcHktMiByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItWyNFN0MxMEJdIG91dGxpbmUtbm9uZVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoUXVlcnlcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJweS0zXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwibXItM1wiIFsobmdNb2RlbCldPVwiYWxsU2VsZWN0ZWRcIiAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbVwiPlNlbGVjdCBBbGw8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdGFnIG9mIGZpbHRlcmVkVGFnc1wiIGNsYXNzPVwicHktM1wiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIGNsYXNzPVwibXItM1wiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJpc1RhZ1NlbGVjdGVkKHRhZy5OYW1lKVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVRhZ1NlbGVjdGlvbih0YWcuTmFtZSlcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtXCI+e3sgdGFnLk5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCIhdGFnLklzT3B0aW9uYWxcIiBjbGFzcz1cIm1sLTIgdGV4dC14cyB0ZXh0LXJlZC01MDBcIlxuICAgICAgICAgICAgPihSZXF1aXJlZCk8L3NwYW5cbiAgICAgICAgICA+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgIFsobmdNb2RlbCldPVwid29ya2Zsb3dOYW1lXCJcbiAgICAgICAgW2JvcmRlcl09XCInMXB4IHNvbGlkICM5QTlGQkY2NidcIlxuICAgICAgICBwbGFjZUhvbGRlcj1cIkVudGVyIFN3aW1sYW5lIExhYmVsXCJcbiAgICAgICAgW2JnQ29sb3JdPVwiJ3doaXRlJ1wiXG4gICAgICA+PC92ZXJiZW5hLWlucHV0PlxuXG4gICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICBzZWxlY3RLZXk9XCJDb2RlXCJcbiAgICAgICAgbGFiZWw9XCJUYWdzXCJcbiAgICAgICAgc3R5bGVDbGFzcz1cInctZnVsbFwiXG4gICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgIFttdWx0aXNlbGVjdF09XCJ0cnVlXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3RcIlxuICAgICAgICBbb3B0aW9uc109XCJ0YWdzXCJcbiAgICAgICAgb3B0aW9uTGFiZWw9XCJOYW1lXCJcbiAgICAgICAgaWQ9XCJ0YWdzXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFRhZ3NcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgIFtmaWx0ZXJdPVwidHJ1ZVwiXG4gICAgICAgIFtmaWx0ZXJCeV09XCInTmFtZSdcIlxuICAgICAgICBbc2hvd0NsZWFyXT1cInRydWVcIlxuICAgICAgPlxuICAgICAgPC92ZXJiZW4tZHJvcC1kb3duPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZm9vdGVyVGVtcGxhdGU+XG4gIDxkaXZcbiAgICBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIHctZnVsbCBpdGVtcy1jZW50ZXIgcC00IGJvcmRlci10IGJvcmRlci1ncmF5LTIwMFwiXG4gID5cbiAgICA8IS0tIDxidXR0b25cbiAgICAgIGNsYXNzPVwicHgtNCBweS0yIG1yLTIgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkIHRleHQtc20gZm9udC1tZWRpdW1cIlxuICAgICAgKGNsaWNrKT1cIm9uRGlhbG9nQ2xvc2UoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgQ2FuY2VsXG4gICAgPC9idXR0b24+IC0tPlxuXG4gICAgPHZlcmJlbmEtYnV0dG9uXG4gICAgICAoY2xpY2spPVwib25EaWFsb2dDbG9zZSgkZXZlbnQpXCJcbiAgICAgIHRleHQ9XCJDYW5jZWxcIlxuICAgICAgc3R5bGVUeXBlPVwieWx3LW91dGxpbmVcIlxuICAgID48L3ZlcmJlbmEtYnV0dG9uPlxuXG4gICAgPHZlcmJlbmEtYnV0dG9uXG4gICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgIHRleHQ9XCJTYXZlXCJcbiAgICAgIGJnQ29sb3I9XCIjRkZFNjgxXCJcbiAgICAgIHRleHRDb2xvcj1cIiM0MDQwNDBcIlxuICAgICAgYm9yZGVyUmFkaXVzPVwiMTBweFwiXG4gICAgICBwZD1cIjEwcHggMjBweFwiXG4gICAgICB3aWR0aD1cIjExNHB4XCJcbiAgICAgIGhlaWdodD1cIjM5cHhcIlxuICAgICAgW2Rpc2FibGVdPVwic2VsZWN0ZWRUYWdzLmxlbmd0aCA8IDFcIlxuICAgICAgKGNsaWNrKT1cImFwcGx5U2VsZWN0aW9uKClcIlxuICAgID48L3ZlcmJlbmEtYnV0dG9uPlxuXG4gICAgPHZlcmJlbmEtYnV0dG9uXG4gICAgICAqbmdJZj1cImlzRWRpdGluZ1wiXG4gICAgICB3aWR0aD1cIjExNHB4XCJcbiAgICAgIGhlaWdodD1cIjM5cHhcIlxuICAgICAgdGV4dD1cIkRlbGV0ZVwiXG4gICAgICBiZ0NvbG9yPVwiIzk5OTk5OVwiXG4gICAgICB0ZXh0Q29sb3I9XCIjNDA0MDQwXCJcbiAgICAgIGJvcmRlclJhZGl1cz1cIjEwcHhcIlxuICAgICAgcGQ9XCIxMHB4IDIwcHhcIlxuICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlU3dpbWxhbmUoKVwiXG4gICAgPjwvdmVyYmVuYS1idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -39,6 +39,10 @@ export class WorkflowDataService {
39
39
  const url = `DeleteWorkflowAction`;
40
40
  return this.httpService.post(url, requests, this.envSvc.environment.WorkFlowAPI);
41
41
  }
42
+ deleteSwimLanes(requests) {
43
+ const url = `DeleteSwimLane`;
44
+ return this.httpService.post(url, requests, this.envSvc.environment.WorkFlowAPI);
45
+ }
42
46
  saveEscalations(requests) {
43
47
  const url = `SaveEscalations`;
44
48
  // console.log('Saving workflows', requests);
@@ -161,4 +165,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
161
165
  providedIn: 'root',
162
166
  }]
163
167
  }], ctorParameters: () => [{ type: i1.HttpWebRequestService }, { type: i1.EnvironmentService }] });
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy93b3JrZmxvdy1kZXNpZ25lci93b3JrZmxvdy1kYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQTZELFdBQVcsRUFBMEMsY0FBYyxFQUFFLE1BQU0sRUFBTyxrQkFBa0IsRUFBMkIsTUFBTSxtQ0FBbUMsQ0FBQzs7O0FBTTdPLE1BQU0sT0FBTyxtQkFBbUI7SUFHcEI7SUFDQTtJQUZWLFlBQ1UsV0FBa0MsRUFDbEMsTUFBMEI7UUFEMUIsZ0JBQVcsR0FBWCxXQUFXLENBQXVCO1FBQ2xDLFdBQU0sR0FBTixNQUFNLENBQW9CO0lBQ2hDLENBQUM7SUFFTCxvQkFBb0IsQ0FDbEIsS0FBYSxFQUNiLE9BQWUsQ0FBQyxFQUNoQixRQUFnQixDQUFDLEVBQ2pCLFlBQW9CLFdBQVcsRUFDL0IsWUFBb0IsS0FBSztRQUV6QixNQUFNLEdBQUcsR0FBRyx5QkFBeUIsS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksU0FBUyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ3hGLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUE2QixDQUFDO0lBQy9ELENBQUM7SUFFRCxZQUFZLENBQUMsT0FBZSxDQUFDLEVBQUUsUUFBZ0IsQ0FBQztRQUM5QyxNQUFNLEdBQUcsR0FBRyxnQkFBZ0IsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQ3pCLEdBQUcsRUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQ1IsQ0FBQztJQUNoQyxDQUFD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ci9jb3JlJztcbmltcG9ydCB7IEFjdG9yVGFnLCBFcnJvclJlc3BvbnNlLCBFc2NhbGF0aW9uLCBGbG93YWJsZVN0YXR1cywgRm9ybSwgT2JqZWN0U3RhdGUsIE9wZXJhdGlvbkFjdGlvbiwgUGFnZWQsIFJlcG9ydFNjaGVkdWxlLCBTdGFnZUFjdG9yUnVsZSwgU3RhdHVzLCBUYWcsIFRhc2tBc3NpZ25tZW50VHlwZSwgV29ya2Zsb3csIFdvcmtmbG93U3RhZ2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlLCBIdHRwV2ViUmVxdWVzdFNlcnZpY2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9zZXJ2aWNlcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBXb3JrZmxvd0RhdGFTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHBTZXJ2aWNlOiBIdHRwV2ViUmVxdWVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbnZTdmM6IEVudmlyb25tZW50U2VydmljZVxuICApIHsgfVxuXG4gIGdldFdvcmtmbG93V2l0aFBhcmFtKFxuICAgIHBhcmFtOiBzdHJpbmcsXG4gICAgc2tpcDogbnVtYmVyID0gMCxcbiAgICBsaW1pdDogbnVtYmVyID0gMSxcbiAgICBzb3J0UGFyYW06IHN0cmluZyA9ICdDcmVhdGVkQXQnLFxuICAgIHNvcnRPcmRlcjogc3RyaW5nID0gJ0FzYydcbiAgKTogUHJvbWlzZTxQYWdlZDxXb3JrZmxvdz4+IHtcbiAgICBjb25zdCB1cmwgPSBgR2V0V29ya2Zsb3dzV2l0aFBhcmFtLyR7cGFyYW19LyR7c2tpcH0vJHtsaW1pdH0vJHtzb3J0UGFyYW19LyR7c29ydE9yZGVyfWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuZ2V0KHVybCkgYXMgUHJvbWlzZTxQYWdlZDxXb3JrZmxvdz4+O1xuICB9XG5cbiAgZ2V0V29ya2Zsb3dzKHNraXA6IG51bWJlciA9IDAsIGxpbWl0OiBudW1iZXIgPSAwKTogUHJvbWlzZTxQYWdlZDxXb3JrZmxvdz4+IHtcbiAgICBjb25zdCB1cmwgPSBgR2V0V29ya2Zsb3dzLyR7c2tpcH0vJHtsaW1pdH1gO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldChcbiAgICAgIHVybCxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKSBhcyBQcm9taXNlPFBhZ2VkPFdvcmtmbG93Pj47XG4gIH1cblxuICBnZXRGb3Jtcyhza2lwOiBudW1iZXIgPSAwLCBsaW1pdDogbnVtYmVyID0gMCk6IFByb21pc2U8UGFnZWQ8Rm9ybT4+IHtcbiAgICBjb25zdCB1cmwgPSBgR2V0Rm9ybXMvJHtza2lwfS8ke2xpbWl0fWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuZ2V0KFxuICAgICAgdXJsLFxuICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICApIGFzIFByb21pc2U8UGFnZWQ8Rm9ybT4+O1xuICB9XG5cbiAgZ2V0VGFncyhza2lwOiBudW1iZXIgPSAwLCBsaW1pdDogbnVtYmVyID0gMCk6IFByb21pc2U8UGFnZWQ8VGFnPj4ge1xuICAgIGNvbnN0IHVybCA9IGBHZXRUYWdzLyR7c2tpcH0vJHtsaW1pdH1gO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldChcbiAgICAgIHVybCxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkF1dGhBUElcbiAgICApIGFzIFByb21pc2U8UGFnZWQ8VGFnPj47XG4gIH1cblxuICBzYXZlV29ya2Zsb3dzKHJlcXVlc3RzOiBQYXJ0aWFsPFdvcmtmbG93PltdKTogUHJvbWlzZTxhbnkgfCBFcnJvclJlc3BvbnNlPiB7XG4gICAgY29uc3QgdXJsID0gYFNhdmVXb3JrZmxvd3NgO1xuICAgIC8vIGNvbnNvbGUubG9nKCdTYXZpbmcgd29ya2Zsb3dzJywgcmVxdWVzdHMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoXG4gICAgICB1cmwsXG4gICAgICByZXF1ZXN0cyxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZVdvcmtmbG93U3RhZ2VzKHJlcXVlc3RzOiBXb3JrZmxvd1N0YWdlWydDb2RlJ11bXSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdXJsID0gYERlbGV0ZVdvcmtmbG93U3RhZ2VgO1xuICAgIC8vIGNvbnNvbGUubG9nKCdTYXZpbmcgd29ya2Zsb3dzJywgcmVxdWVzdHMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoXG4gICAgICB1cmwsXG4gICAgICByZXF1ZXN0cyxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZVdvcmtmbG93QWN0aW9ucyhyZXF1ZXN0czogc3RyaW5nW10pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHVybCA9IGBEZWxldGVXb3JrZmxvd0FjdGlvbmA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UucG9zdChcbiAgICAgIHVybCxcbiAgICAgIHJlcXVlc3RzLFxuICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICApO1xuICB9XG5cbiAgc2F2ZUVzY2FsYXRpb25zKHJlcXVlc3RzOiBQYXJ0aWFsPEVzY2FsYXRpb24+W10pOiBQcm9taXNlPEVzY2FsYXRpb25bXT4ge1xuICAgIGNvbnN0IHVybCA9IGBTYXZlRXNjYWxhdGlvbnNgO1xuICAgIC8vIGNvbnNvbGUubG9nKCdTYXZpbmcgd29ya2Zsb3dzJywgcmVxdWVzdHMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoXG4gICAgICB1cmwsXG4gICAgICByZXF1ZXN0cyxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUVzY2FsYXRpb25zKHJlcXVlc3RzOiBFc2NhbGF0aW9uWydDb2RlJ11bXSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdXJsID0gYERlbGV0ZUVzY2FsYXRpb25gO1xuICAgIC8vIGNvbnNvbGUubG9nKCdTYXZpbmcgd29ya2Zsb3dzJywgcmVxdWVzdHMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoXG4gICAgICB1cmwsXG4gICAgICByZXF1ZXN0cyxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKTtcbiAgfVxuXG4gIHNlYXJjaEVzY2FsYXRpb25XaXRoUGFyYW0oXG4gICAgcGFyYW1zOiBQaWNrPEVzY2FsYXRpb24sICdXb3JrZmxvdycgfCAnU3RhZ2UnIHwgJ1R5cGUnPixcbiAgICBza2lwOiBudW1iZXIgPSAwLFxuICAgIGxpbWl0OiBudW1iZXIgPSAxLFxuICAgIHNvcnRPcmRlcjogc3RyaW5nID0gJ0FzYydcbiAgKTogUHJvbWlzZTxQYWdlZDxFc2NhbGF0aW9uPj4ge1xuICAgIGNvbnN0IHVybCA9IGBTZWFyY2hFc2NhbGF0aW9ucy8ke3NraXB9LyR7bGltaXR9YDtcbiAgICBjb25zdCBwYXlsb2FkID0gT2JqZWN0LmVudHJpZXMocGFyYW1zKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgIElzQXV0b0Zyb21EYXRlOiB0cnVlLFxuICAgICAgSXNBdXRvRW5kRGF0ZTogdHJ1ZSxcbiAgICAgIFByb3BlcnR5TmFtZToga2V5LFxuICAgICAgRW50aXR5VmFsdWU6IHZhbHVlLFxuICAgICAgVHlwZTogJ1N0cmluZycsXG4gICAgICBPcGVyYXRvcjogJ0FuZCcsXG4gICAgICBTaWduOiAnRVEnLFxuICAgICAgU29ydDogc29ydE9yZGVyLFxuICAgICAgLy8gRmllbGRzOiBbJ3N0cmluZyddLFxuICAgIH0pKTtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5wb3N0KHVybCwgcGF5bG9hZCkgYXMgUHJvbWlzZTxQYWdlZDxFc2NhbGF0aW9uPj47XG4gIH1cblxuICBnZXRFc2NhbGF0aW9uV2l0aFBhcmFtKFxuICAgIHBhcmFtOiBzdHJpbmcsXG4gICAgc2tpcDogbnVtYmVyID0gMCxcbiAgICBsaW1pdDogbnVtYmVyID0gMSxcbiAgICBzb3J0UGFyYW06IHN0cmluZyA9ICdDcmVhdGVkQXQnLFxuICAgIHNvcnRPcmRlcjogc3RyaW5nID0gJ0FzYydcbiAgKTogUHJvbWlzZTxQYWdlZDxFc2NhbGF0aW9uPj4ge1xuICAgIGNvbnN0IHVybCA9IGBHZXRFc2NhbGF0aW9uc1dpdGhQYXJhbS8ke3BhcmFtfS8ke3NraXB9LyR7bGltaXR9LyR7c29ydFBhcmFtfS8ke3NvcnRPcmRlcn1gO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldCh1cmwpIGFzIFByb21pc2U8UGFnZWQ8RXNjYWxhdGlvbj4+O1xuICB9XG5cbiAgZ2V0UmVwb3J0U2NoZWR1bGVzKFxuICAgIHNraXA6IG51bWJlciA9IDAsXG4gICAgbGltaXQ6IG51bWJlciA9IDBcbiAgKTogUHJvbWlzZTxQYWdlZDxSZXBvcnRTY2hlZHVsZT4+IHtcbiAgICBjb25zdCB1cmwgPSBgR2V0UmVwb3J0U2NoZWR1bGVzLyR7c2tpcH0vJHtsaW1pdH1gO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldChcbiAgICAgIHVybCxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LlJlcG9ydGluZ0FQSVxuICAgICkgYXMgUHJvbWlzZTxQYWdlZDxSZXBvcnRTY2hlZHVsZT4+O1xuICB9XG5cbiAgZ2V0T3BlcmF0aW9uQWN0aW9ucyhcbiAgICBza2lwOiBudW1iZXIgPSAwLFxuICAgIGxpbWl0OiBudW1iZXIgPSAwXG4gICk6IFByb21pc2U8UGFnZWQ8T3BlcmF0aW9uQWN0aW9uPj4ge1xuICAgIGNvbnN0IHVybCA9IGBHZXRPcGVyYXRpb25BY3Rpb25gO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldChcbiAgICAgIHVybCxcbiAgICAgIC8vIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkdMQVBJXG4gICAgKSBhcyBQcm9taXNlPFBhZ2VkPE9wZXJhdGlvbkFjdGlvbj4+O1xuICB9XG5cbiAgc2F2ZUFjdG9yVGFncyhyZXF1ZXN0czogQWN0b3JUYWdbXSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdXJsID0gYFNhdmVBY3RvclRhZ3NgO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoXG4gICAgICB1cmwsXG4gICAgICByZXF1ZXN0cyxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKTtcbiAgfVxuXG4gIGdldEZsb3dhYmxlU3RhdHVzZXMoXG4gICAgc2tpcDogbnVtYmVyID0gMCxcbiAgICBsaW1pdDogbnVtYmVyID0gMFxuICApOiBQcm9taXNlPFBhZ2VkPEZsb3dhYmxlU3RhdHVzPj4ge1xuICAgIGNvbnN0IHVybCA9IGBHZXRGbG93YWJsZVN0YXR1cy8ke3NraXB9LyR7bGltaXR9L0NyZWF0ZWRBdC9EZXNjYDtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5nZXQodXJsKSBhcyBQcm9taXNlPFBhZ2VkPEZsb3dhYmxlU3RhdHVzPj47XG4gIH1cblxuICAvLyBIZWxwZXIgdG8gY3JlYXRlIGEgbW9jayB3b3JrZmxvdyAoanVzdCBmb3IgZGVtbylcbiAgcHJpdmF0ZSBjcmVhdGVNb2NrV29ya2Zsb3coY29kZTogc3RyaW5nKTogV29ya2Zsb3cge1xuICAgIC8vIFJldHVybiBhIHNpbXBsZSB3b3JrZmxvdyB3aXRoIG9uZSBsYW5lIGFuZCBvbmUgc3RhZ2VcbiAgICBjb25zdCB3b3JrZmxvdzogV29ya2Zsb3cgPSB7XG4gICAgICBJZDogJ3dvcmtmbG93LTEyMycsXG4gICAgICBDb2RlOiBjb2RlLFxuICAgICAgVGVuYW50SWQ6ICd0ZW5hbnQtMScsXG4gICAgICBpZDogJ3dvcmtmbG93LTEyMycsXG4gICAgICBTZXJ2aWNlTmFtZTogJ3dvcmtmbG93LXNlcnZpY2UnLFxuICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5VbmNoYW5nZWQsXG4gICAgICBOYW1lOiAnU2FtcGxlIFdvcmtmbG93JyxcbiAgICAgIERlc2NyaXB0aW9uOiAnQSBzYW1wbGUgd29ya2Zsb3cgbG9hZGVkIGZyb20gQVBJJyxcbiAgICAgIFN0YWdlRW50cnlSdWxlOiAnJyxcbiAgICAgIEFzc2lnbm1lbnRUeXBlOiBUYXNrQXNzaWdubWVudFR5cGUuQXV0b1JvdXRlLFxuICAgICAgU3RhdHVzOiBTdGF0dXMuQWN0aXZlLFxuICAgICAgQWN0aW9uczogW10sXG4gICAgICBMYW5lczogW1xuICAgICAgICB7XG4gICAgICAgICAgSWQ6ICdsYW5lLTAnLFxuICAgICAgICAgIENvZGU6ICdsYW5lLTAnLFxuICAgICAgICAgIFRlbmFudElkOiAndGVuYW50LTEnLFxuICAgICAgICAgIGlkOiAnbGFuZS0wJyxcbiAgICAgICAgICBTZXJ2aWNlTmFtZTogJ3dvcmtmbG93LXNlcnZpY2UnLFxuICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5VbmNoYW5nZWQsXG4gICAgICAgICAgV29ya2Zsb3c6ICd3b3JrZmxvdy0xMjMnLFxuICAgICAgICAgIFRhZ3M6IFtdLFxuICAgICAgICAgIFBvc2l0aW9uOiAwLFxuICAgICAgICAgIENvb3JkaW5hdGVzOiB7IFg6IDAsIFk6IDAgfSxcbiAgICAgICAgICBTaXplOiB7IFdpZHRoOiAzMDAwLCBIZWlnaHQ6IDI2MyB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIFN0YWdlczogW1xuICAgICAgICB7XG4gICAgICAgICAgSWQ6ICdzdGFnZS0xMjMnLFxuICAgICAgICAgIENvZGU6ICdzdGFnZS0xMjMnLFxuICAgICAgICAgIFRlbmFudElkOiAndGVuYW50LTEnLFxuICAgICAgICAgIGlkOiAnc3RhZ2UtMTIzJyxcbiAgICAgICAgICBTZXJ2aWNlTmFtZTogJ3dvcmtmbG93LXNlcnZpY2UnLFxuICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5VbmNoYW5nZWQsXG4gICAgICAgICAgV29ya2Zsb3c6ICd3b3JrZmxvdy0xMjMnLFxuICAgICAgICAgIE5hbWU6ICdJbml0aWFsIFN0YWdlJyxcbiAgICAgICAgICBEZXNjcmlwdGlvbjogJ1N0YXJ0aW5nIHBvaW50JyxcbiAgICAgICAgICBEdXJhdGlvbjogMjQsXG4gICAgICAgICAgUGFzc09uUnVsZTogJycsXG4gICAgICAgICAgQWN0b3JSdWxlOiBTdGFnZUFjdG9yUnVsZS5Ob25lLFxuICAgICAgICAgIE1pbk5vT2ZBY3RvcjogMSxcbiAgICAgICAgICBJc1BhcmFsbGVsOiBmYWxzZSxcbiAgICAgICAgICBJc0VudHJ5UG9pbnQ6IHRydWUsXG4gICAgICAgICAgSXNFeGl0UG9pbnQ6IGZhbHNlLFxuICAgICAgICAgIFRhZ3M6IFtdLFxuICAgICAgICAgIEZvcm06ICcnLFxuICAgICAgICAgIEFsbG93TXVsdGlTdWJQcm9jZXNzOiBmYWxzZSxcbiAgICAgICAgICBBc3NpZ25tZW50VHlwZTogVGFza0Fzc2lnbm1lbnRUeXBlLkF1dG9Sb3V0ZSxcbiAgICAgICAgICBTdWJXb3JrRmxvdzogJycsXG4gICAgICAgICAgU3dpbUxhbmU6ICdsYW5lLTAnLFxuICAgICAgICAgIENvb3JkaW5hdGVzOiB7IFg6IDEwMCwgWTogNTAgfSxcbiAgICAgICAgICBJc1N1YlByb2Nlc3M6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHdvcmtmbG93O1xuICB9XG59XG4iXX0=
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy93b3JrZmxvdy1kZXNpZ25lci93b3JrZmxvdy1kYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQTZELFdBQVcsRUFBMEMsY0FBYyxFQUFFLE1BQU0sRUFBaUIsa0JBQWtCLEVBQTJCLE1BQU0sbUNBQW1DLENBQUM7OztBQU12UCxNQUFNLE9BQU8sbUJBQW1CO0lBR3BCO0lBQ0E7SUFGVixZQUNVLFdBQWtDLEVBQ2xDLE1BQTBCO1FBRDFCLGdCQUFXLEdBQVgsV0FBVyxDQUF1QjtRQUNsQyxXQUFNLEdBQU4sTUFBTSxDQUFvQjtJQUNoQyxDQUFDO0lBRUwsb0JBQW9CLENBQ2xCLEtBQWEsRUFDYixPQUFlLENBQUMsRUFDaEIsUUFBZ0IsQ0FBQyxFQUNqQixZQUFvQixXQUFXLEVBQy9CLFlBQW9CLEtBQUs7UUFFekIsTUFBTSxHQUFHLEdBQUcseUJBQXlCLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLFNBQVMsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUN4RixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBNkIsQ0FBQztJQUMvRCxDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQWUsQ0FBQyxFQUFFLFFBQWdCLENBQUM7UUFDOUMsTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUM1QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUN6QixHQUFHLEVBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUNSLENBQUM7SUFDaEMsQ0FB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QVEsQ0FBQztJQUNsQixDQUFDO3dHQS9PVSxtQkFBbUI7NEdBQW5CLG1CQUFtQixjQUZsQixNQUFNOzs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0b3JUYWcsIEVycm9yUmVzcG9uc2UsIEVzY2FsYXRpb24sIEZsb3dhYmxlU3RhdHVzLCBGb3JtLCBPYmplY3RTdGF0ZSwgT3BlcmF0aW9uQWN0aW9uLCBQYWdlZCwgUmVwb3J0U2NoZWR1bGUsIFN0YWdlQWN0b3JSdWxlLCBTdGF0dXMsIFN3aW1MYW5lLCBUYWcsIFRhc2tBc3NpZ25tZW50VHlwZSwgV29ya2Zsb3csIFdvcmtmbG93U3RhZ2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRTZXJ2aWNlLCBIdHRwV2ViUmVxdWVzdFNlcnZpY2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9zZXJ2aWNlcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBXb3JrZmxvd0RhdGFTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHBTZXJ2aWNlOiBIdHRwV2ViUmVxdWVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbnZTdmM6IEVudmlyb25tZW50U2VydmljZVxuICApIHsgfVxuXG4gIGdldFdvcmtmbG93V2l0aFBhcmFtKFxuICAgIHBhcmFtOiBzdHJpbmcsXG4gICAgc2tpcDogbnVtYmVyID0gMCxcbiAgICBsaW1pdDogbnVtYmVyID0gMSxcbiAgICBzb3J0UGFyYW06IHN0cmluZyA9ICdDcmVhdGVkQXQnLFxuICAgIHNvcnRPcmRlcjogc3RyaW5nID0gJ0FzYydcbiAgKTogUHJvbWlzZTxQYWdlZDxXb3JrZmxvdz4+IHtcbiAgICBjb25zdCB1cmwgPSBgR2V0V29ya2Zsb3dzV2l0aFBhcmFtLyR7cGFyYW19LyR7c2tpcH0vJHtsaW1pdH0vJHtzb3J0UGFyYW19LyR7c29ydE9yZGVyfWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuZ2V0KHVybCkgYXMgUHJvbWlzZTxQYWdlZDxXb3JrZmxvdz4+O1xuICB9XG5cbiAgZ2V0V29ya2Zsb3dzKHNraXA6IG51bWJlciA9IDAsIGxpbWl0OiBudW1iZXIgPSAwKTogUHJvbWlzZTxQYWdlZDxXb3JrZmxvdz4+IHtcbiAgICBjb25zdCB1cmwgPSBgR2V0V29ya2Zsb3dzLyR7c2tpcH0vJHtsaW1pdH1gO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldChcbiAgICAgIHVybCxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKSBhcyBQcm9taXNlPFBhZ2VkPFdvcmtmbG93Pj47XG4gIH1cblxuICBnZXRGb3Jtcyhza2lwOiBudW1iZXIgPSAwLCBsaW1pdDogbnVtYmVyID0gMCk6IFByb21pc2U8UGFnZWQ8Rm9ybT4+IHtcbiAgICBjb25zdCB1cmwgPSBgR2V0Rm9ybXMvJHtza2lwfS8ke2xpbWl0fWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuZ2V0KFxuICAgICAgdXJsLFxuICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICApIGFzIFByb21pc2U8UGFnZWQ8Rm9ybT4+O1xuICB9XG5cbiAgZ2V0VGFncyhza2lwOiBudW1iZXIgPSAwLCBsaW1pdDogbnVtYmVyID0gMCk6IFByb21pc2U8UGFnZWQ8VGFnPj4ge1xuICAgIGNvbnN0IHVybCA9IGBHZXRUYWdzLyR7c2tpcH0vJHtsaW1pdH1gO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldChcbiAgICAgIHVybCxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkF1dGhBUElcbiAgICApIGFzIFByb21pc2U8UGFnZWQ8VGFnPj47XG4gIH1cblxuICBzYXZlV29ya2Zsb3dzKHJlcXVlc3RzOiBQYXJ0aWFsPFdvcmtmbG93PltdKTogUHJvbWlzZTxhbnkgfCBFcnJvclJlc3BvbnNlPiB7XG4gICAgY29uc3QgdXJsID0gYFNhdmVXb3JrZmxvd3NgO1xuICAgIC8vIGNvbnNvbGUubG9nKCdTYXZpbmcgd29ya2Zsb3dzJywgcmVxdWVzdHMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoXG4gICAgICB1cmwsXG4gICAgICByZXF1ZXN0cyxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZVdvcmtmbG93U3RhZ2VzKHJlcXVlc3RzOiBXb3JrZmxvd1N0YWdlWydDb2RlJ11bXSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdXJsID0gYERlbGV0ZVdvcmtmbG93U3RhZ2VgO1xuICAgIC8vIGNvbnNvbGUubG9nKCdTYXZpbmcgd29ya2Zsb3dzJywgcmVxdWVzdHMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoXG4gICAgICB1cmwsXG4gICAgICByZXF1ZXN0cyxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZVdvcmtmbG93QWN0aW9ucyhyZXF1ZXN0czogc3RyaW5nW10pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHVybCA9IGBEZWxldGVXb3JrZmxvd0FjdGlvbmA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UucG9zdChcbiAgICAgIHVybCxcbiAgICAgIHJlcXVlc3RzLFxuICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlU3dpbUxhbmVzKHJlcXVlc3RzOiBTd2ltTGFuZVsnQ29kZSddW10pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHVybCA9IGBEZWxldGVTd2ltTGFuZWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UucG9zdChcbiAgICAgIHVybCxcbiAgICAgIHJlcXVlc3RzLFxuICAgICAgdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuV29ya0Zsb3dBUElcbiAgICApO1xuICB9XG5cbiAgc2F2ZUVzY2FsYXRpb25zKHJlcXVlc3RzOiBQYXJ0aWFsPEVzY2FsYXRpb24+W10pOiBQcm9taXNlPEVzY2FsYXRpb25bXT4ge1xuICAgIGNvbnN0IHVybCA9IGBTYXZlRXNjYWxhdGlvbnNgO1xuICAgIC8vIGNvbnNvbGUubG9nKCdTYXZpbmcgd29ya2Zsb3dzJywgcmVxdWVzdHMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoXG4gICAgICB1cmwsXG4gICAgICByZXF1ZXN0cyxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUVzY2FsYXRpb25zKHJlcXVlc3RzOiBFc2NhbGF0aW9uWydDb2RlJ11bXSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdXJsID0gYERlbGV0ZUVzY2FsYXRpb25gO1xuICAgIC8vIGNvbnNvbGUubG9nKCdTYXZpbmcgd29ya2Zsb3dzJywgcmVxdWVzdHMpO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoXG4gICAgICB1cmwsXG4gICAgICByZXF1ZXN0cyxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKTtcbiAgfVxuXG4gIHNlYXJjaEVzY2FsYXRpb25XaXRoUGFyYW0oXG4gICAgcGFyYW1zOiBQaWNrPEVzY2FsYXRpb24sICdXb3JrZmxvdycgfCAnU3RhZ2UnIHwgJ1R5cGUnPixcbiAgICBza2lwOiBudW1iZXIgPSAwLFxuICAgIGxpbWl0OiBudW1iZXIgPSAxLFxuICAgIHNvcnRPcmRlcjogc3RyaW5nID0gJ0FzYydcbiAgKTogUHJvbWlzZTxQYWdlZDxFc2NhbGF0aW9uPj4ge1xuICAgIGNvbnN0IHVybCA9IGBTZWFyY2hFc2NhbGF0aW9ucy8ke3NraXB9LyR7bGltaXR9YDtcbiAgICBjb25zdCBwYXlsb2FkID0gT2JqZWN0LmVudHJpZXMocGFyYW1zKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgIElzQXV0b0Zyb21EYXRlOiB0cnVlLFxuICAgICAgSXNBdXRvRW5kRGF0ZTogdHJ1ZSxcbiAgICAgIFByb3BlcnR5TmFtZToga2V5LFxuICAgICAgRW50aXR5VmFsdWU6IHZhbHVlLFxuICAgICAgVHlwZTogJ1N0cmluZycsXG4gICAgICBPcGVyYXRvcjogJ0FuZCcsXG4gICAgICBTaWduOiAnRVEnLFxuICAgICAgU29ydDogc29ydE9yZGVyLFxuICAgICAgLy8gRmllbGRzOiBbJ3N0cmluZyddLFxuICAgIH0pKTtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5wb3N0KHVybCwgcGF5bG9hZCkgYXMgUHJvbWlzZTxQYWdlZDxFc2NhbGF0aW9uPj47XG4gIH1cblxuICBnZXRFc2NhbGF0aW9uV2l0aFBhcmFtKFxuICAgIHBhcmFtOiBzdHJpbmcsXG4gICAgc2tpcDogbnVtYmVyID0gMCxcbiAgICBsaW1pdDogbnVtYmVyID0gMSxcbiAgICBzb3J0UGFyYW06IHN0cmluZyA9ICdDcmVhdGVkQXQnLFxuICAgIHNvcnRPcmRlcjogc3RyaW5nID0gJ0FzYydcbiAgKTogUHJvbWlzZTxQYWdlZDxFc2NhbGF0aW9uPj4ge1xuICAgIGNvbnN0IHVybCA9IGBHZXRFc2NhbGF0aW9uc1dpdGhQYXJhbS8ke3BhcmFtfS8ke3NraXB9LyR7bGltaXR9LyR7c29ydFBhcmFtfS8ke3NvcnRPcmRlcn1gO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldCh1cmwpIGFzIFByb21pc2U8UGFnZWQ8RXNjYWxhdGlvbj4+O1xuICB9XG5cbiAgZ2V0UmVwb3J0U2NoZWR1bGVzKFxuICAgIHNraXA6IG51bWJlciA9IDAsXG4gICAgbGltaXQ6IG51bWJlciA9IDBcbiAgKTogUHJvbWlzZTxQYWdlZDxSZXBvcnRTY2hlZHVsZT4+IHtcbiAgICBjb25zdCB1cmwgPSBgR2V0UmVwb3J0U2NoZWR1bGVzLyR7c2tpcH0vJHtsaW1pdH1gO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldChcbiAgICAgIHVybCxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LlJlcG9ydGluZ0FQSVxuICAgICkgYXMgUHJvbWlzZTxQYWdlZDxSZXBvcnRTY2hlZHVsZT4+O1xuICB9XG5cbiAgZ2V0T3BlcmF0aW9uQWN0aW9ucyhcbiAgICBza2lwOiBudW1iZXIgPSAwLFxuICAgIGxpbWl0OiBudW1iZXIgPSAwXG4gICk6IFByb21pc2U8UGFnZWQ8T3BlcmF0aW9uQWN0aW9uPj4ge1xuICAgIGNvbnN0IHVybCA9IGBHZXRPcGVyYXRpb25BY3Rpb25gO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldChcbiAgICAgIHVybCxcbiAgICAgIC8vIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkdMQVBJXG4gICAgKSBhcyBQcm9taXNlPFBhZ2VkPE9wZXJhdGlvbkFjdGlvbj4+O1xuICB9XG5cbiAgc2F2ZUFjdG9yVGFncyhyZXF1ZXN0czogQWN0b3JUYWdbXSk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgdXJsID0gYFNhdmVBY3RvclRhZ3NgO1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLnBvc3QoXG4gICAgICB1cmwsXG4gICAgICByZXF1ZXN0cyxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LldvcmtGbG93QVBJXG4gICAgKTtcbiAgfVxuXG4gIGdldEZsb3dhYmxlU3RhdHVzZXMoXG4gICAgc2tpcDogbnVtYmVyID0gMCxcbiAgICBsaW1pdDogbnVtYmVyID0gMFxuICApOiBQcm9taXNlPFBhZ2VkPEZsb3dhYmxlU3RhdHVzPj4ge1xuICAgIGNvbnN0IHVybCA9IGBHZXRGbG93YWJsZVN0YXR1cy8ke3NraXB9LyR7bGltaXR9L0NyZWF0ZWRBdC9EZXNjYDtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5nZXQodXJsKSBhcyBQcm9taXNlPFBhZ2VkPEZsb3dhYmxlU3RhdHVzPj47XG4gIH1cblxuICAvLyBIZWxwZXIgdG8gY3JlYXRlIGEgbW9jayB3b3JrZmxvdyAoanVzdCBmb3IgZGVtbylcbiAgcHJpdmF0ZSBjcmVhdGVNb2NrV29ya2Zsb3coY29kZTogc3RyaW5nKTogV29ya2Zsb3cge1xuICAgIC8vIFJldHVybiBhIHNpbXBsZSB3b3JrZmxvdyB3aXRoIG9uZSBsYW5lIGFuZCBvbmUgc3RhZ2VcbiAgICBjb25zdCB3b3JrZmxvdzogV29ya2Zsb3cgPSB7XG4gICAgICBJZDogJ3dvcmtmbG93LTEyMycsXG4gICAgICBDb2RlOiBjb2RlLFxuICAgICAgVGVuYW50SWQ6ICd0ZW5hbnQtMScsXG4gICAgICBpZDogJ3dvcmtmbG93LTEyMycsXG4gICAgICBTZXJ2aWNlTmFtZTogJ3dvcmtmbG93LXNlcnZpY2UnLFxuICAgICAgQ3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgVXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5VbmNoYW5nZWQsXG4gICAgICBOYW1lOiAnU2FtcGxlIFdvcmtmbG93JyxcbiAgICAgIERlc2NyaXB0aW9uOiAnQSBzYW1wbGUgd29ya2Zsb3cgbG9hZGVkIGZyb20gQVBJJyxcbiAgICAgIFN0YWdlRW50cnlSdWxlOiAnJyxcbiAgICAgIEFzc2lnbm1lbnRUeXBlOiBUYXNrQXNzaWdubWVudFR5cGUuQXV0b1JvdXRlLFxuICAgICAgU3RhdHVzOiBTdGF0dXMuQWN0aXZlLFxuICAgICAgQWN0aW9uczogW10sXG4gICAgICBMYW5lczogW1xuICAgICAgICB7XG4gICAgICAgICAgSWQ6ICdsYW5lLTAnLFxuICAgICAgICAgIENvZGU6ICdsYW5lLTAnLFxuICAgICAgICAgIFRlbmFudElkOiAndGVuYW50LTEnLFxuICAgICAgICAgIGlkOiAnbGFuZS0wJyxcbiAgICAgICAgICBTZXJ2aWNlTmFtZTogJ3dvcmtmbG93LXNlcnZpY2UnLFxuICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5VbmNoYW5nZWQsXG4gICAgICAgICAgV29ya2Zsb3c6ICd3b3JrZmxvdy0xMjMnLFxuICAgICAgICAgIFRhZ3M6IFtdLFxuICAgICAgICAgIFBvc2l0aW9uOiAwLFxuICAgICAgICAgIENvb3JkaW5hdGVzOiB7IFg6IDAsIFk6IDAgfSxcbiAgICAgICAgICBTaXplOiB7IFdpZHRoOiAzMDAwLCBIZWlnaHQ6IDI2MyB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIFN0YWdlczogW1xuICAgICAgICB7XG4gICAgICAgICAgSWQ6ICdzdGFnZS0xMjMnLFxuICAgICAgICAgIENvZGU6ICdzdGFnZS0xMjMnLFxuICAgICAgICAgIFRlbmFudElkOiAndGVuYW50LTEnLFxuICAgICAgICAgIGlkOiAnc3RhZ2UtMTIzJyxcbiAgICAgICAgICBTZXJ2aWNlTmFtZTogJ3dvcmtmbG93LXNlcnZpY2UnLFxuICAgICAgICAgIENyZWF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgICBVcGRhdGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5VbmNoYW5nZWQsXG4gICAgICAgICAgV29ya2Zsb3c6ICd3b3JrZmxvdy0xMjMnLFxuICAgICAgICAgIE5hbWU6ICdJbml0aWFsIFN0YWdlJyxcbiAgICAgICAgICBEZXNjcmlwdGlvbjogJ1N0YXJ0aW5nIHBvaW50JyxcbiAgICAgICAgICBEdXJhdGlvbjogMjQsXG4gICAgICAgICAgUGFzc09uUnVsZTogJycsXG4gICAgICAgICAgQWN0b3JSdWxlOiBTdGFnZUFjdG9yUnVsZS5Ob25lLFxuICAgICAgICAgIE1pbk5vT2ZBY3RvcjogMSxcbiAgICAgICAgICBJc1BhcmFsbGVsOiBmYWxzZSxcbiAgICAgICAgICBJc0VudHJ5UG9pbnQ6IHRydWUsXG4gICAgICAgICAgSXNFeGl0UG9pbnQ6IGZhbHNlLFxuICAgICAgICAgIFRhZ3M6IFtdLFxuICAgICAgICAgIEZvcm06ICcnLFxuICAgICAgICAgIEFsbG93TXVsdGlTdWJQcm9jZXNzOiBmYWxzZSxcbiAgICAgICAgICBBc3NpZ25tZW50VHlwZTogVGFza0Fzc2lnbm1lbnRUeXBlLkF1dG9Sb3V0ZSxcbiAgICAgICAgICBTdWJXb3JrRmxvdzogJycsXG4gICAgICAgICAgU3dpbUxhbmU6ICdsYW5lLTAnLFxuICAgICAgICAgIENvb3JkaW5hdGVzOiB7IFg6IDEwMCwgWTogNTAgfSxcbiAgICAgICAgICBJc1N1YlByb2Nlc3M6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHdvcmtmbG93O1xuICB9XG59XG4iXX0=
@@ -344,6 +344,48 @@ export class WorkflowDesignerComponent {
344
344
  this.showSwimlaneDialog = false;
345
345
  this.editingSwimlaneIndex = null;
346
346
  }
347
+ onSwimlaneDialogDeleted() {
348
+ if (this.editingSwimlaneIndex === null) {
349
+ return;
350
+ }
351
+ const index = this.editingSwimlaneIndex;
352
+ const swimlane = this.state.swimlanes[index];
353
+ // Guard: stages must be moved out first (also enforced in state.deleteSwimlane).
354
+ if (swimlane?.nodes?.length) {
355
+ this.utilService.showError('Move all stages out of this swimlane before deleting it.');
356
+ return;
357
+ }
358
+ // A loaded lane keeps its backend Code in swimlaneRecord (keyed by id/Code).
359
+ const backendRecord = swimlane?.id
360
+ ? this.state.swimlaneRecord[swimlane.id]
361
+ : undefined;
362
+ if (backendRecord?.Code) {
363
+ // Path A: backend-persisted lane — delete on the server first.
364
+ this.dataService
365
+ .deleteSwimLanes([backendRecord.Code])
366
+ .then(() => {
367
+ this.finishSwimlaneDelete(index);
368
+ })
369
+ .catch((error) => {
370
+ console.error('Error deleting swimlane:', error);
371
+ this.utilService.showError('Failed to delete swimlane');
372
+ });
373
+ }
374
+ else {
375
+ // Path B: never-saved lane — remove from state directly, no API call.
376
+ this.finishSwimlaneDelete(index);
377
+ }
378
+ }
379
+ finishSwimlaneDelete(index) {
380
+ const deleted = this.state.deleteSwimlane(index);
381
+ if (!deleted) {
382
+ this.utilService.showError('Move all stages out of this swimlane before deleting it.');
383
+ return;
384
+ }
385
+ this.showSwimlaneDialog = false;
386
+ this.editingSwimlaneIndex = null;
387
+ this.canvasRef?.updateCanvasSize();
388
+ }
347
389
  onSubflowSelected() {
348
390
  // Reset the selected tool after placing a subflow node
349
391
  this.selectedTool = null;
@@ -352,15 +394,15 @@ export class WorkflowDesignerComponent {
352
394
  this.showActorTagsDialog = true;
353
395
  }
354
396
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WorkflowDesignerComponent, deps: [{ token: i1.WorkflowDesignerState }, { token: i2.WorkflowDataService }, { token: i3.UtilService }], target: i0.ɵɵFactoryTarget.Component });
355
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: WorkflowDesignerComponent, selector: "lib-workflow-designer", inputs: { workflowCode: "workflowCode" }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["canvasRef"], descendants: true }], ngImport: i0, template: "<div class=\"workflow-designer\">\n <div class=\"workflow-header\">\n <h1>{{ state.workflow?.Name }}</h1>\n </div>\n\n <!-- Toolbar Component -->\n <lib-designer-toolbar [selectedTool]=\"selectedTool\" [isSaving]=\"isSaving\"\n [workflowCode]=\"state.workflow?.Code || null\" (toolSelected)=\"onToolSelected($event)\"\n (saveWorkflow)=\"saveWorkflow()\" (openActorTags)=\"openActorTagsDialog()\">\n </lib-designer-toolbar>\n\n <!-- Show loading indicator if needed -->\n <div *ngIf=\"isLoading\" class=\"loading-overlay\">\n <div class=\"loading-spinner\"></div>\n <div class=\"loading-text\">Loading workflow...</div>\n </div>\n\n <!-- Canvas Component -->\n <lib-designer-canvas [selectedTool]=\"selectedTool\" (clickedPosition)=\"handleCanvasPositionClick($event)\"\n (subflowSelected)=\"onSubflowSelected()\" #canvasRef>\n </lib-designer-canvas>\n\n <lib-swimlane-dialog [visible]=\"showSwimlaneDialog\" [swimlaneData]=\"editingSwimlane()\"\n (created)=\"onSwimlaneDialogFilled($event)\" (closed)=\"showSwimlaneDialog = false\"></lib-swimlane-dialog>\n\n <lib-actor-tags-dialog [visible]=\"showActorTagsDialog\" [workflowCode]=\"state.workflow?.Code || null\"\n (closed)=\"showActorTagsDialog = false\"></lib-actor-tags-dialog>\n</div>\n", styles: [".workflow-designer{display:flex;flex-direction:column;height:100vh;background-color:#f8fafc}.workflow-header{padding:1rem;background-color:#fff;border-bottom:1px solid #e2e8f0;text-align:center}.workflow-header h1{font-size:1.25rem;font-weight:600;color:#334155;margin:0}.loading-overlay{position:absolute;inset:0;background-color:#ffffffb3;display:flex;flex-direction:column;justify-content:center;align-items:center;z-index:1000}.loading-spinner{border:4px solid #f3f3f3;border-top:4px solid #d8b4fe;border-radius:50%;width:40px;height:40px;animation:spin 1s linear infinite}.loading-text{margin-top:1rem;font-size:1rem;color:#7e22ce}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.DesignerToolbarComponent, selector: "lib-designer-toolbar", inputs: ["selectedTool", "isSaving", "workflowCode"], outputs: ["openActorTags", "toolSelected", "saveWorkflow"] }, { kind: "component", type: i6.DesignerCanvasComponent, selector: "lib-designer-canvas", inputs: ["selectedTool"], outputs: ["clickedPosition", "subflowSelected", "stagePropertiesUpdated", "actionPropertiesUpdated"] }, { kind: "component", type: i7.SwimlaneDialogComponent, selector: "lib-swimlane-dialog", inputs: ["visible", "swimlaneData"], outputs: ["closed", "created"] }, { kind: "component", type: i8.ActorTagsDialogComponent, selector: "lib-actor-tags-dialog", inputs: ["visible", "workflowCode"], outputs: ["closed"] }] });
397
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: WorkflowDesignerComponent, selector: "lib-workflow-designer", inputs: { workflowCode: "workflowCode" }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["canvasRef"], descendants: true }], ngImport: i0, template: "<div class=\"workflow-designer\">\n <div class=\"workflow-header\">\n <h1>{{ state.workflow?.Name }}</h1>\n </div>\n\n <!-- Toolbar Component -->\n <lib-designer-toolbar [selectedTool]=\"selectedTool\" [isSaving]=\"isSaving\"\n [workflowCode]=\"state.workflow?.Code || null\" (toolSelected)=\"onToolSelected($event)\"\n (saveWorkflow)=\"saveWorkflow()\" (openActorTags)=\"openActorTagsDialog()\">\n </lib-designer-toolbar>\n\n <!-- Show loading indicator if needed -->\n <div *ngIf=\"isLoading\" class=\"loading-overlay\">\n <div class=\"loading-spinner\"></div>\n <div class=\"loading-text\">Loading workflow...</div>\n </div>\n\n <!-- Canvas Component -->\n <lib-designer-canvas [selectedTool]=\"selectedTool\" (clickedPosition)=\"handleCanvasPositionClick($event)\"\n (subflowSelected)=\"onSubflowSelected()\" #canvasRef>\n </lib-designer-canvas>\n\n <lib-swimlane-dialog [visible]=\"showSwimlaneDialog\" [swimlaneData]=\"editingSwimlane()\"\n [isEditing]=\"editingSwimlaneIndex !== null\" (created)=\"onSwimlaneDialogFilled($event)\"\n (deleted)=\"onSwimlaneDialogDeleted()\" (closed)=\"showSwimlaneDialog = false\"></lib-swimlane-dialog>\n\n <lib-actor-tags-dialog [visible]=\"showActorTagsDialog\" [workflowCode]=\"state.workflow?.Code || null\"\n (closed)=\"showActorTagsDialog = false\"></lib-actor-tags-dialog>\n</div>\n", styles: [".workflow-designer{display:flex;flex-direction:column;height:100vh;background-color:#f8fafc}.workflow-header{padding:1rem;background-color:#fff;border-bottom:1px solid #e2e8f0;text-align:center}.workflow-header h1{font-size:1.25rem;font-weight:600;color:#334155;margin:0}.loading-overlay{position:absolute;inset:0;background-color:#ffffffb3;display:flex;flex-direction:column;justify-content:center;align-items:center;z-index:1000}.loading-spinner{border:4px solid #f3f3f3;border-top:4px solid #d8b4fe;border-radius:50%;width:40px;height:40px;animation:spin 1s linear infinite}.loading-text{margin-top:1rem;font-size:1rem;color:#7e22ce}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.DesignerToolbarComponent, selector: "lib-designer-toolbar", inputs: ["selectedTool", "isSaving", "workflowCode"], outputs: ["openActorTags", "toolSelected", "saveWorkflow"] }, { kind: "component", type: i6.DesignerCanvasComponent, selector: "lib-designer-canvas", inputs: ["selectedTool"], outputs: ["clickedPosition", "subflowSelected", "stagePropertiesUpdated", "actionPropertiesUpdated"] }, { kind: "component", type: i7.SwimlaneDialogComponent, selector: "lib-swimlane-dialog", inputs: ["visible", "isEditing", "swimlaneData"], outputs: ["closed", "created", "deleted"] }, { kind: "component", type: i8.ActorTagsDialogComponent, selector: "lib-actor-tags-dialog", inputs: ["visible", "workflowCode"], outputs: ["closed"] }] });
356
398
  }
357
399
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WorkflowDesignerComponent, decorators: [{
358
400
  type: Component,
359
- args: [{ selector: 'lib-workflow-designer', template: "<div class=\"workflow-designer\">\n <div class=\"workflow-header\">\n <h1>{{ state.workflow?.Name }}</h1>\n </div>\n\n <!-- Toolbar Component -->\n <lib-designer-toolbar [selectedTool]=\"selectedTool\" [isSaving]=\"isSaving\"\n [workflowCode]=\"state.workflow?.Code || null\" (toolSelected)=\"onToolSelected($event)\"\n (saveWorkflow)=\"saveWorkflow()\" (openActorTags)=\"openActorTagsDialog()\">\n </lib-designer-toolbar>\n\n <!-- Show loading indicator if needed -->\n <div *ngIf=\"isLoading\" class=\"loading-overlay\">\n <div class=\"loading-spinner\"></div>\n <div class=\"loading-text\">Loading workflow...</div>\n </div>\n\n <!-- Canvas Component -->\n <lib-designer-canvas [selectedTool]=\"selectedTool\" (clickedPosition)=\"handleCanvasPositionClick($event)\"\n (subflowSelected)=\"onSubflowSelected()\" #canvasRef>\n </lib-designer-canvas>\n\n <lib-swimlane-dialog [visible]=\"showSwimlaneDialog\" [swimlaneData]=\"editingSwimlane()\"\n (created)=\"onSwimlaneDialogFilled($event)\" (closed)=\"showSwimlaneDialog = false\"></lib-swimlane-dialog>\n\n <lib-actor-tags-dialog [visible]=\"showActorTagsDialog\" [workflowCode]=\"state.workflow?.Code || null\"\n (closed)=\"showActorTagsDialog = false\"></lib-actor-tags-dialog>\n</div>\n", styles: [".workflow-designer{display:flex;flex-direction:column;height:100vh;background-color:#f8fafc}.workflow-header{padding:1rem;background-color:#fff;border-bottom:1px solid #e2e8f0;text-align:center}.workflow-header h1{font-size:1.25rem;font-weight:600;color:#334155;margin:0}.loading-overlay{position:absolute;inset:0;background-color:#ffffffb3;display:flex;flex-direction:column;justify-content:center;align-items:center;z-index:1000}.loading-spinner{border:4px solid #f3f3f3;border-top:4px solid #d8b4fe;border-radius:50%;width:40px;height:40px;animation:spin 1s linear infinite}.loading-text{margin-top:1rem;font-size:1rem;color:#7e22ce}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
401
+ args: [{ selector: 'lib-workflow-designer', template: "<div class=\"workflow-designer\">\n <div class=\"workflow-header\">\n <h1>{{ state.workflow?.Name }}</h1>\n </div>\n\n <!-- Toolbar Component -->\n <lib-designer-toolbar [selectedTool]=\"selectedTool\" [isSaving]=\"isSaving\"\n [workflowCode]=\"state.workflow?.Code || null\" (toolSelected)=\"onToolSelected($event)\"\n (saveWorkflow)=\"saveWorkflow()\" (openActorTags)=\"openActorTagsDialog()\">\n </lib-designer-toolbar>\n\n <!-- Show loading indicator if needed -->\n <div *ngIf=\"isLoading\" class=\"loading-overlay\">\n <div class=\"loading-spinner\"></div>\n <div class=\"loading-text\">Loading workflow...</div>\n </div>\n\n <!-- Canvas Component -->\n <lib-designer-canvas [selectedTool]=\"selectedTool\" (clickedPosition)=\"handleCanvasPositionClick($event)\"\n (subflowSelected)=\"onSubflowSelected()\" #canvasRef>\n </lib-designer-canvas>\n\n <lib-swimlane-dialog [visible]=\"showSwimlaneDialog\" [swimlaneData]=\"editingSwimlane()\"\n [isEditing]=\"editingSwimlaneIndex !== null\" (created)=\"onSwimlaneDialogFilled($event)\"\n (deleted)=\"onSwimlaneDialogDeleted()\" (closed)=\"showSwimlaneDialog = false\"></lib-swimlane-dialog>\n\n <lib-actor-tags-dialog [visible]=\"showActorTagsDialog\" [workflowCode]=\"state.workflow?.Code || null\"\n (closed)=\"showActorTagsDialog = false\"></lib-actor-tags-dialog>\n</div>\n", styles: [".workflow-designer{display:flex;flex-direction:column;height:100vh;background-color:#f8fafc}.workflow-header{padding:1rem;background-color:#fff;border-bottom:1px solid #e2e8f0;text-align:center}.workflow-header h1{font-size:1.25rem;font-weight:600;color:#334155;margin:0}.loading-overlay{position:absolute;inset:0;background-color:#ffffffb3;display:flex;flex-direction:column;justify-content:center;align-items:center;z-index:1000}.loading-spinner{border:4px solid #f3f3f3;border-top:4px solid #d8b4fe;border-radius:50%;width:40px;height:40px;animation:spin 1s linear infinite}.loading-text{margin-top:1rem;font-size:1rem;color:#7e22ce}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
360
402
  }], ctorParameters: () => [{ type: i1.WorkflowDesignerState }, { type: i2.WorkflowDataService }, { type: i3.UtilService }], propDecorators: { canvasRef: [{
361
403
  type: ViewChild,
362
404
  args: ['canvasRef']
363
405
  }], workflowCode: [{
364
406
  type: Input
365
407
  }] } });
366
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVzaWduZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy93b3JrZmxvdy1kZXNpZ25lci93b3JrZmxvdy1kZXNpZ25lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3dvcmtmbG93LWRlc2lnbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBaUIsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7OztBQVlqRixNQUFNLE9BQU8seUJBQXlCO0lBaUIzQjtJQUNDO0lBQ0E7SUFsQmMsU0FBUyxDQUEyQjtJQUNuRCxZQUFZLEdBQWtCLElBQUksQ0FBQztJQUU1QywwQkFBMEI7SUFDMUIsWUFBWSxHQUFhLElBQUksQ0FBQztJQUM5QixrQkFBa0IsR0FBWSxLQUFLLENBQUM7SUFDcEMsbUJBQW1CLEdBQVksS0FBSyxDQUFDO0lBRXJDLG9CQUFvQixHQUFrQixJQUFJLENBQUM7SUFDM0MsZUFBZSxHQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVmLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDM0IsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUUxQixZQUNTLEtBQTRCLEVBQzNCLFdBQWdDLEVBQ2hDLFdBQXdCO1FBRnpCLFVBQUssR0FBTCxLQUFLLENBQXVCO1FBQzNCLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjtRQUNoQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtJQUM5QixDQUFD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QUMsb0JBQW9CLENBQzFCLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN2QywyQkFBMkI7WUFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FDVCxzQ0FBc0MsRUFDdEMsSUFBSSxDQUFDLG9CQUFvQixDQUMxQixDQUFDO1lBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsRUFDekIsS0FBSyxDQUFDLElBQUksRUFDVixLQUFLLENBQUMsSUFBSSxDQUNYLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLHNCQUFzQjtZQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUVELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztJQUNuQyxDQUFDO0lBSUQsaUJBQWlCO1FBQ2YsdURBQXVEO1FBQ3ZELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztJQUNsQyxDQUFDO3dHQTFiVSx5QkFBeUI7NEZBQXpCLHlCQUF5QiwrTUNuQnRDLGd3Q0E0QkE7OzRGRFRhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSx1QkFBdUI7c0pBS1QsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNiLFlBQVk7c0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBzaWduYWwsXG4gIFZpZXdDaGlsZCxcbiAgV3JpdGFibGVTaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXJyb3JSZXNwb25zZSwgVGFnLCBXb3JrZmxvdyB9IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL21vZGVscyc7XG5pbXBvcnQgeyBVdGlsU2VydmljZSB9IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL3NlcnZpY2VzJztcbmltcG9ydCB7IERlc2lnbmVyQ2FudmFzQ29tcG9uZW50IH0gZnJvbSAnLi9kZXNpZ25lci1jYW52YXMvZGVzaWduZXItY2FudmFzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBXb3JrZmxvd0RhdGFTZXJ2aWNlIH0gZnJvbSAnLi93b3JrZmxvdy1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgV29ya2Zsb3dEZXNpZ25lclN0YXRlIH0gZnJvbSAnLi93b3JrZmxvdy1kZXNpZ25lci5zdGF0ZSc7XG5pbXBvcnQgeyBOb2RlLCBUb29sVHlwZSB9IGZyb20gJy4vd29ya2Zsb3ctZGVzaWduZXIudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItd29ya2Zsb3ctZGVzaWduZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vd29ya2Zsb3ctZGVzaWduZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vd29ya2Zsb3ctZGVzaWduZXIuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIFdvcmtmbG93RGVzaWduZXJDb21wb25lbnQge1xuICBAVmlld0NoaWxkKCdjYW52YXNSZWYnKSBjYW52YXNSZWYhOiBEZXNpZ25lckNhbnZhc0NvbXBvbmVudDtcbiAgQElucHV0KCkgd29ya2Zsb3dDb2RlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvLyBDdXJyZW50bHkgc2VsZWN0ZWQgdG9vbFxuICBzZWxlY3RlZFRvb2w6IFRvb2xUeXBlID0gbnVsbDtcbiAgc2hvd1N3aW1sYW5lRGlhbG9nOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dBY3RvclRhZ3NEaWFsb2c6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBlZGl0aW5nU3dpbWxhbmVJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIGVkaXRpbmdTd2ltbGFuZTogV3JpdGFibGVTaWduYWw8eyBuYW1lOiBzdHJpbmc7IHRhZ3M6IFRhZ1tdIH0gfCBudWxsPiA9XG4gICAgc2lnbmFsKG51bGwpO1xuXG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1NhdmluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzdGF0ZTogV29ya2Zsb3dEZXNpZ25lclN0YXRlLFxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IFdvcmtmbG93RGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1dGlsU2VydmljZTogVXRpbFNlcnZpY2VcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBMb2FkIHdvcmtmbG93IGRhdGEgaWYgY29kZSBpcyBwcm92aWRlZFxuICAgIGlmICh0aGlzLndvcmtmbG93Q29kZSkge1xuICAgICAgdGhpcy5sb2FkV29ya2Zsb3codGhpcy53b3JrZmxvd0NvZGUpO1xuICAgIH1cbiAgfVxuXG4gIHNhdmVXb3JrZmxvdygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1NhdmluZykgcmV0dXJuO1xuXG4gICAgdGhpcy5pc1NhdmluZyA9IHRydWU7XG5cbiAgICAvLyBUcmFuc2Zvcm0gdGhlIFVJIG1vZGVsIHRvIHRoZSBBUEkgbW9kZWxcbiAgICBjb25zdCB3b3JrZmxvd01vZGVsID0gdGhpcy5zdGF0ZS50cmFuc2Zvcm1Ub1dvcmtmbG93TW9kZWwoKTtcblxuICAgIGlmICh3b3JrZmxvd01vZGVsKSB7XG4gICAgICAvLyBTYXZlIHRvIHRoZSBiYWNrZW5kXG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlXG4gICAgICAgIC5zYXZlV29ya2Zsb3dzKFt3b3JrZmxvd01vZGVsXSlcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgdGhpcy51dGlsU2VydmljZS5zaG93RXJyb3IocmVzcG9uc2UuRXJyb3JNc2cpO1xuICAgICAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnV29ya2Zsb3cgc2F2ZWQgc3VjY2Vzc2Z1bGx5OicsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ1dvcmtmbG93IHNhdmVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgICAgICAgLy8gSWYgdGhlIEFQSSByZXR1cm5zIGFuIHVwZGF0ZWQgd29ya2Zsb3csIHdlIG1pZ2h0IHdhbnQgdG8gcmVsb2FkIGl0XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkV29ya2Zsb3cgPSByZXNwb25zZVswXTtcbiAgICAgICAgICAgIGlmICh1cGRhdGVkV29ya2Zsb3cpIHtcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5zZXRXb3JrZmxvd0lkKHVwZGF0ZWRXb3JrZmxvdy5Db2RlKTtcbiAgICAgICAgICAgICAgdGhpcy5wYXJzZVdvcmtmbG93RGF0YSh1cGRhdGVkV29ya2Zsb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNhdmluZyB3b3JrZmxvdzonLCBlcnJvcik7XG4gICAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xuICAgICAgICAgIC8vIEhhbmRsZSBlcnJvciAtIHNob3cgYSBub3RpZmljYXRpb24sIGV0Yy5cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbG9hZFdvcmtmbG93KGNvZGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmRhdGFTZXJ2aWNlXG4gICAgICAuZ2V0V29ya2Zsb3dXaXRoUGFyYW0oY29kZSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuUmVzdWx0KSB7XG4gICAgICAgICAgLy8gU3RvcmUgdGhlIHdvcmtmbG93IElEXG4gICAgICAgICAgY29uc3Qgd2YgPSByZXNwb25zZS5SZXN1bHRbMF07XG4gICAgICAgICAgdGhpcy5zdGF0ZS5zZXRXb3JrZmxvd0lkKHdmLkNvZGUpO1xuICAgICAgICAgIHRoaXMucGFyc2VXb3JrZmxvd0RhdGEod2YpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHdvcmtmbG93OicsIGVycm9yKTtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gTWV0aG9kIHRvIHBhcnNlIHdvcmtmbG93IGRhdGEgZnJvbSBBUEkgYW5kIHBvcHVsYXRlIHRoZSBkZXNpZ25lclxuICBwYXJzZVdvcmtmbG93RGF0YSh3b3JrZmxvdzogV29ya2Zsb3cpOiB2b2lkIHtcbiAgICAvLyBTdG9yZSB0aGUgY29tcGxldGUgd29ya2Zsb3dcbiAgICB0aGlzLnN0YXRlLndvcmtmbG93ID0gd29ya2Zsb3c7XG5cbiAgICAvLyBDbGVhciBleGlzdGluZyBzdGF0ZVxuICAgIHRoaXMuc3RhdGUuc3dpbWxhbmVzID0gW107XG4gICAgdGhpcy5zdGF0ZS5jb25uZWN0aW9ucyA9IFtdO1xuICAgIHRoaXMuc3RhdGUuc3dpbWxhbmVSZWNvcmQgPSB7fTtcbiAgICB0aGlzLnN0YXRlLnN0YWdlUmVjb3JkID0ge307XG4gICAgdGhpcy5zdGF0ZS5hY3Rpb25SZWNvcmQgPSB7fTtcblxuICAgIC8vIFNldCB3b3JrZmxvdyBmb3JtIGlmIGV4aXN0c1xuICAgIGlmICh3b3JrZmxvdy5Gb3JtKSB7XG4gICAgICB0aGlzLnN0YXRlLnNldFdvcmtmbG93Rm9ybShcbiAgICAgICAgd29ya2Zsb3cuRm9ybSxcbiAgICAgICAgd29ya2Zsb3cuRm9ybU5hbWUgfHwgJ1dvcmtmbG93IEZvcm0nXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFN0b3JlIHRoZSB3b3JrZmxvdyBJRFxuICAgIHRoaXMuc3RhdGUuc2V0V29ya2Zsb3dJZCh3b3JrZmxvdy5Db2RlKTtcblxuICAgIC8vIFByb2Nlc3Mgc3dpbWxhbmVzIGZpcnN0XG4gICAgaWYgKHdvcmtmbG93LkxhbmVzICYmIHdvcmtmbG93LkxhbmVzLmxlbmd0aCkge1xuICAgICAgd29ya2Zsb3cuTGFuZXMuc29ydCgoYSwgYikgPT4gYS5Qb3NpdGlvbiAtIGIuUG9zaXRpb24pLmZvckVhY2goKGxhbmUpID0+IHtcbiAgICAgICAgLy8gU3RvcmUgb3JpZ2luYWwgbGFuZSBpbiByZWNvcmRcbiAgICAgICAgdGhpcy5zdGF0ZS5zd2ltbGFuZVJlY29yZFtsYW5lLkNvZGVdID0gbGFuZTtcblxuICAgICAgICAvLyBBZGQgc3dpbWxhbmUgdG8gVUkgbW9kZWwgd2l0aCB0aGUgb3JpZ2luYWwgSURcbiAgICAgICAgY29uc3Qgc3dpbWxhbmUgPSB7XG4gICAgICAgICAgb3JkZXI6IGxhbmUuUG9zaXRpb24sXG4gICAgICAgICAgbGFiZWw6IGxhbmUuTmFtZSB8fCBgTGFuZSAke2xhbmUuUG9zaXRpb259YCxcbiAgICAgICAgICB0YWdzOiBsYW5lLlRhZ3MgfHwgW10sXG4gICAgICAgICAgbm9kZXM6IFtdLFxuICAgICAgICAgIGlkOiBsYW5lLkNvZGUsIC8vIFN0b3JlIHRoZSBvcmlnaW5hbCBJRFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc3RhdGUuc3dpbWxhbmVzLnB1c2goc3dpbWxhbmUpO1xuXG4gICAgICAgIC8vIFJlZ2lzdGVyIGxvYWRlZCBvYmplY3RcbiAgICAgICAgdGhpcy5zdGF0ZS5yZWdpc3RlckxvYWRlZE9iamVjdChsYW5lLklkLCBsYW5lLkNvZGUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBzdGFnZXNcbiAgICBpZiAod29ya2Zsb3cuU3RhZ2VzICYmIHdvcmtmbG93LlN0YWdlcy5sZW5ndGgpIHtcbiAgICAgIHdvcmtmbG93LlN0YWdlcy5mb3JFYWNoKChzdGFnZSkgPT4ge1xuICAgICAgICAvLyBTdG9yZSBvcmlnaW5hbCBzdGFnZSBpbiByZWNvcmRcbiAgICAgICAgdGhpcy5zdGF0ZS5zdGFnZVJlY29yZFtzdGFnZS5Db2RlXSA9IHN0YWdlO1xuXG4gICAgICAgIC8vIEZpbmQgc3dpbWxhbmUgaW5kZXggYnkgU3dpbUxhbmUgSURcbiAgICAgICAgY29uc3Qgc3dpbWxhbmVJbmRleCA9IHRoaXMuc3RhdGUuc3dpbWxhbmVzLmZpbmRJbmRleChcbiAgICAgICAgICAobGFuZSkgPT4gbGFuZS5pZCA9PT0gc3RhZ2UuU3dpbUxhbmVcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoc3dpbWxhbmVJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICBjb25zdCB4ID0gc3RhZ2UuQ29vcmRpbmF0ZXM/LlggfHwgMTAwO1xuICAgICAgICAgIGNvbnN0IHkgPSBzdGFnZS5Db29yZGluYXRlcz8uWSB8fCA1MDtcblxuICAgICAgICAgIC8vIENyZWF0ZSBub2RlIHdpdGggb3JpZ2luYWwgSURcbiAgICAgICAgICBjb25zdCBub2RlOiBOb2RlID0ge1xuICAgICAgICAgICAgaWQ6IHN0YWdlLkNvZGUsIC8vIFVzZSBvcmlnaW5hbCBJRFxuICAgICAgICAgICAgdHlwZTogc3RhZ2UuSXNTdWJQcm9jZXNzID8gJ3N1YmZsb3cnIDogKCdzdGFnZScgYXMgY29uc3QpLFxuICAgICAgICAgICAgeDogeCxcbiAgICAgICAgICAgIHk6IHksXG4gICAgICAgICAgICB3aWR0aDogMTY5LFxuICAgICAgICAgICAgaGVpZ2h0OiAxMDAsXG4gICAgICAgICAgICBpc1N0YXJ0Tm9kZTogc3RhZ2UuSXNFbnRyeVBvaW50LFxuICAgICAgICAgICAgc3RhZ2VEYXRhOiB7XG4gICAgICAgICAgICAgIE5hbWU6IHN0YWdlLk5hbWUsXG4gICAgICAgICAgICAgIERlc2NyaXB0aW9uOiBzdGFnZS5EZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgRHVyYXRpb246IHN0YWdlLkR1cmF0aW9uLFxuICAgICAgICAgICAgICBQYXNzT25SdWxlOiBzdGFnZS5QYXNzT25SdWxlLFxuICAgICAgICAgICAgICBBY3RvclJ1bGU6IHN0YWdlLkFjdG9yUnVsZSxcbiAgICAgICAgICAgICAgTWluTm9PZkFjdG9yOiBzdGFnZS5NaW5Ob09mQWN0b3IsXG4gICAgICAgICAgICAgIFRhZ3M6IHN0YWdlLlRhZ3MgfHwgW10sXG4gICAgICAgICAgICAgIElzUGFyYWxsZWw6IHN0YWdlLklzUGFyYWxsZWwsXG4gICAgICAgICAgICAgIElzRW50cnlQb2ludDogc3RhZ2UuSXNFbnRyeVBvaW50LFxuICAgICAgICAgICAgICBJc0V4aXRQb2ludDogc3RhZ2UuSXNFeGl0UG9pbnQsXG4gICAgICAgICAgICAgIElzU3ViUHJvY2Vzczogc3RhZ2UuSXNTdWJQcm9jZXNzLFxuICAgICAgICAgICAgICBBc3NpZ25tZW50VHlwZTogc3RhZ2UuQXNzaWdubWVudFR5cGUsXG4gICAgICAgICAgICAgIElkOiBzdGFnZS5JZCwgLy8gS2VlcCBvcmlnaW5hbCBJRFxuICAgICAgICAgICAgICBDb2RlOiBzdGFnZS5Db2RlLFxuICAgICAgICAgICAgICBGb3JtOiBzdGFnZS5Gb3JtLFxuICAgICAgICAgICAgICBmb3JtSWQ6IHN0YWdlLkZvcm0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29ubmVjdGlvblBvaW50czogW10sIC8vIEluaXRpYWxpemUgd2l0aCBlbXB0eSBhcnJheVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICAvLyBHZW5lcmF0ZSBjb25uZWN0aW9uIHBvaW50c1xuICAgICAgICAgIG5vZGUuY29ubmVjdGlvblBvaW50cyA9IHRoaXMuc3RhdGUuZ2VuZXJhdGVDb25uZWN0aW9uUG9pbnRzKG5vZGUpO1xuXG4gICAgICAgICAgLy8gQWRkIG5vZGUgdG8gc3dpbWxhbmVcbiAgICAgICAgICB0aGlzLnN0YXRlLnN3aW1sYW5lc1tzd2ltbGFuZUluZGV4XS5ub2RlcyA9XG4gICAgICAgICAgICB0aGlzLnN0YXRlLnN3aW1sYW5lc1tzd2ltbGFuZUluZGV4XS5ub2RlcyB8fCBbXTtcbiAgICAgICAgICB0aGlzLnN0YXRlLnN3aW1sYW5lc1tzd2ltbGFuZUluZGV4XS5ub2Rlcy5wdXNoKG5vZGUpO1xuXG4gICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHN0YXJ0IG5vZGUsIHVwZGF0ZSBzdGF0ZVxuICAgICAgICAgIGlmIChzdGFnZS5Jc0VudHJ5UG9pbnQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuc3RhcnROb2RlSWQgPSBzdGFnZS5Db2RlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFJlZ2lzdGVyIGxvYWRlZCBzdGFnZVxuICAgICAgICAgIHRoaXMuc3RhdGUucmVnaXN0ZXJMb2FkZWRPYmplY3Qoc3RhZ2UuSWQsIHN0YWdlLkNvZGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIGNvbm5lY3Rpb25zL2FjdGlvbnNcbiAgICBpZiAod29ya2Zsb3cuQWN0aW9ucyAmJiB3b3JrZmxvdy5BY3Rpb25zLmxlbmd0aCkge1xuICAgICAgd29ya2Zsb3cuQWN0aW9ucy5mb3JFYWNoKChhY3Rpb24pID0+IHtcbiAgICAgICAgLy8gU3RvcmUgb3JpZ2luYWwgYWN0aW9uIGluIHJlY29yZFxuICAgICAgICB0aGlzLnN0YXRlLmFjdGlvblJlY29yZFthY3Rpb24uQ29kZV0gPSBhY3Rpb247XG5cbiAgICAgICAgLy8gRmluZCBzb3VyY2UgYW5kIHRhcmdldCBub2Rlc1xuICAgICAgICBjb25zdCBzb3VyY2VOb2RlSW5mbyA9IHRoaXMuc3RhdGUuZmluZE5vZGVCeUlkKGFjdGlvbi5Gcm9tU3RhZ2UpO1xuICAgICAgICBjb25zdCB0YXJnZXROb2RlSW5mbyA9IHRoaXMuc3RhdGUuZmluZE5vZGVCeUlkKGFjdGlvbi5Ub1N0YWdlKTtcblxuICAgICAgICBjb25zb2xlLmxvZyhzb3VyY2VOb2RlSW5mbywgdGFyZ2V0Tm9kZUluZm8pO1xuXG4gICAgICAgIGlmIChzb3VyY2VOb2RlSW5mbyAmJiB0YXJnZXROb2RlSW5mbykge1xuICAgICAgICAgIC8vIEZpbmQgc3VpdGFibGUgY29ubmVjdGlvbiBwb2ludHNcbiAgICAgICAgICAvLyBjb25zdCBzb3VyY2VOb2RlID0gc291cmNlTm9kZUluZm8ubm9kZTtcbiAgICAgICAgICAvLyBjb25zdCB0YXJnZXROb2RlID0gdGFyZ2V0Tm9kZUluZm8ubm9kZTtcblxuICAgICAgICAgIC8vIGNvbnN0IHNvdXJjZVBvaW50ID0gc291cmNlTm9kZS5jb25uZWN0aW9uUG9pbnRzPy5maW5kKFxuICAgICAgICAgIC8vICAgKHApID0+IHAudHlwZSA9PT0gJ3JpZ2h0JyB8fCBwLnR5cGUgPT09ICdib3R0b20nXG4gICAgICAgICAgLy8gKTtcblxuICAgICAgICAgIC8vIGNvbnN0IHRhcmdldFBvaW50ID0gdGFyZ2V0Tm9kZS5jb25uZWN0aW9uUG9pbnRzPy5maW5kKFxuICAgICAgICAgIC8vICAgKHApID0+IHAudHlwZSA9PT0gJ2xlZnQnIHx8IHAudHlwZSA9PT0gJ3RvcCdcbiAgICAgICAgICAvLyApO1xuXG4gICAgICAgICAgY29uc3Qgc291cmNlTm9kZSA9IHNvdXJjZU5vZGVJbmZvLm5vZGU7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRhcmdldE5vZGVJbmZvLm5vZGU7XG5cbiAgICAgICAgICBsZXQgc291cmNlUG9pbnRJZCwgdGFyZ2V0UG9pbnRJZDtcblxuICAgICAgICAgIGNvbnNvbGUubG9nKGFjdGlvbi5Tb3VyY2VQb2ludFR5cGUsIGFjdGlvbi5UYXJnZXRQb2ludFR5cGUpO1xuXG4gICAgICAgICAgaWYgKGFjdGlvbi5Tb3VyY2VQb2ludFR5cGUpIHtcbiAgICAgICAgICAgIC8vIEZpbmQgYSBwb2ludCB3aXRoIG1hdGNoaW5nIHR5cGVcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZVBvaW50ID0gc291cmNlTm9kZS5jb25uZWN0aW9uUG9pbnRzPy5maW5kKFxuICAgICAgICAgICAgICAocCkgPT4gcC50eXBlID09PSBhY3Rpb24uU291cmNlUG9pbnRUeXBlPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgc291cmNlUG9pbnRJZCA9IHNvdXJjZVBvaW50Py5pZDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8gZmluZGluZyBhIHN1aXRhYmxlIHBvaW50XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VQb2ludCA9IHNvdXJjZU5vZGUuY29ubmVjdGlvblBvaW50cz8uZmluZChcbiAgICAgICAgICAgICAgKHApID0+IHAudHlwZSA9PT0gJ3JpZ2h0JyB8fCBwLnR5cGUgPT09ICdib3R0b20nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgc291cmNlUG9pbnRJZCA9IHNvdXJjZVBvaW50Py5pZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYWN0aW9uLlRhcmdldFBvaW50VHlwZSkge1xuICAgICAgICAgICAgLy8gRmluZCBhIHBvaW50IHdpdGggbWF0Y2hpbmcgdHlwZVxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0UG9pbnQgPSB0YXJnZXROb2RlLmNvbm5lY3Rpb25Qb2ludHM/LmZpbmQoXG4gICAgICAgICAgICAgIChwKSA9PiBwLnR5cGUgPT09IGFjdGlvbi5UYXJnZXRQb2ludFR5cGU/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0YXJnZXRQb2ludElkID0gdGFyZ2V0UG9pbnQ/LmlkO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBGYWxsYmFjayB0byBmaW5kaW5nIGEgc3VpdGFibGUgcG9pbnRcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldFBvaW50ID0gdGFyZ2V0Tm9kZS5jb25uZWN0aW9uUG9pbnRzPy5maW5kKFxuICAgICAgICAgICAgICAocCkgPT4gcC50eXBlID09PSAnbGVmdCcgfHwgcC50eXBlID09PSAndG9wJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRhcmdldFBvaW50SWQgPSB0YXJnZXRQb2ludD8uaWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc29sZS5sb2coJ1NvdXJjZSBwb2ludDonLCBzb3VyY2VQb2ludElkKTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnVGFyZ2V0IHBvaW50OicsIHRhcmdldFBvaW50SWQpO1xuXG4gICAgICAgICAgaWYgKHNvdXJjZVBvaW50SWQgJiYgdGFyZ2V0UG9pbnRJZCkge1xuICAgICAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IHtcbiAgICAgICAgICAgICAgaWQ6IGFjdGlvbi5Db2RlLCAvLyBVc2Ugb3JpZ2luYWwgSURcbiAgICAgICAgICAgICAgc291cmNlTm9kZUlkOiBhY3Rpb24uRnJvbVN0YWdlLFxuICAgICAgICAgICAgICB0YXJnZXROb2RlSWQ6IGFjdGlvbi5Ub1N0YWdlLFxuICAgICAgICAgICAgICBzb3VyY2VQb2ludElkOiBzb3VyY2VQb2ludElkLFxuICAgICAgICAgICAgICB0YXJnZXRQb2ludElkOiB0YXJnZXRQb2ludElkLFxuICAgICAgICAgICAgICBzb3VyY2VTd2ltbGFuZUluZGV4OiBzb3VyY2VOb2RlSW5mby5zd2ltbGFuZUluZGV4LFxuICAgICAgICAgICAgICB0YXJnZXRTd2ltbGFuZUluZGV4OiB0YXJnZXROb2RlSW5mby5zd2ltbGFuZUluZGV4LFxuICAgICAgICAgICAgICBjb25kaXRpb246IGFjdGlvbi5QYXNzT25SdWxlIHx8ICcnLFxuICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uLk5hbWUgfHwgJycsXG4gICAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uLk9wZXJhdGlvbkFjdGlvbiB8fCBudWxsLFxuICAgICAgICAgICAgICB0YXJnZXRTdGF0dXM6IGFjdGlvbi5UYXJnZXRTdGF0dXMgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5jb25uZWN0aW9ucy5wdXNoKGNvbm5lY3Rpb24pO1xuXG4gICAgICAgICAgICAvLyBSZWdpc3RlciBsb2FkZWQgYWN0aW9uXG4gICAgICAgICAgICB0aGlzLnN0YXRlLnJlZ2lzdGVyTG9hZGVkT2JqZWN0KGFjdGlvbi5JZCwgYWN0aW9uLkNvZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBmaW5kIHN3aW1sYW5lIGluZGV4IGJ5IExhbmUgSURcbiAgZmluZFN3aW1sYW5lSW5kZXhCeUxhbmVJZChsYW5lSWQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgLy8gRmlyc3QgY2hlY2sgb3VyIG1hcHBpbmdcbiAgICBpZiAodGhpcy5zdGF0ZS5sYW5lSWRUb0luZGV4TWFwLmhhcyhsYW5lSWQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGF0ZS5sYW5lSWRUb0luZGV4TWFwLmdldChsYW5lSWQpITtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayB0byB0aGUgb3JpZ2luYWwgbG9naWMgKGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KVxuICAgIGNvbnN0IHBhcnRzID0gbGFuZUlkLnNwbGl0KCctJyk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQocGFydHNbMV0pO1xuICAgICAgaWYgKCFpc05hTihpbmRleCkgJiYgaW5kZXggPCB0aGlzLnN0YXRlLnN3aW1sYW5lcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8vIEhhbmRsZSB0b29sIHNlbGVjdGlvbiBmcm9tIHRvb2xiYXJcbiAgb25Ub29sU2VsZWN0ZWQodG9vbDogVG9vbFR5cGUpOiB2b2lkIHtcbiAgICAvLyBUb2dnbGUgc2VsZWN0aW9uIGlmIHRoZSBzYW1lIHRvb2wgaXMgY2xpY2tlZCBhZ2FpblxuICAgIHRoaXMuc2VsZWN0ZWRUb29sID0gdGhpcy5zZWxlY3RlZFRvb2wgPT09IHRvb2wgPyBudWxsIDogdG9vbDtcbiAgICBjb25zb2xlLmxvZygnU2VsZWN0ZWQgdG9vbDonLCB0aGlzLnNlbGVjdGVkVG9vbCk7XG4gIH1cblxuICBvcGVuU3dpbWxhbmVEaWFsb2coKSB7XG4gICAgY29uc29sZS5sb2coJ1NNTCBJTkRFWCcsIHRoaXMuZWRpdGluZ1N3aW1sYW5lSW5kZXgpO1xuICAgIGlmICh0aGlzLmVkaXRpbmdTd2ltbGFuZUluZGV4ICE9PSBudWxsKSB7XG4gICAgICBjb25zb2xlLmxvZygnU01MJywgdGhpcy5zdGF0ZS5zd2ltbGFuZXNbdGhpcy5lZGl0aW5nU3dpbWxhbmVJbmRleF0pO1xuICAgICAgdGhpcy5lZGl0aW5nU3dpbWxhbmUuc2V0KHtcbiAgICAgICAgbmFtZTogdGhpcy5zdGF0ZS5zd2ltbGFuZXNbdGhpcy5lZGl0aW5nU3dpbWxhbmVJbmRleF0ubGFiZWwsXG4gICAgICAgIHRhZ3M6IHRoaXMuc3RhdGUuc3dpbWxhbmVzW3RoaXMuZWRpdGluZ1N3aW1sYW5lSW5kZXhdLnRhZ3MsXG4gICAgICB9KTtcbiAgICAgIGNvbnNvbGUubG9nKCdTTUxfRURUJywgdGhpcy5lZGl0aW5nU3dpbWxhbmUoKSk7XG4gICAgfVxuICAgIHRoaXMuc2hvd1N3aW1sYW5lRGlhbG9nID0gdHJ1ZTtcbiAgfVxuXG5cblxuICBoYW5kbGVDYW52YXNQb3NpdGlvbkNsaWNrKGV2ZW50OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pIHtcbiAgICBjb25zb2xlLmxvZyhldmVudCk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGFuIGVkaXQgc3dpbWxhbmUgZXZlbnRcbiAgICBpZiAoXG4gICAgICBldmVudC54ID09PSAtMSAmJlxuICAgICAgZXZlbnQueSA+PSAwICYmXG4gICAgICBldmVudC55IDwgdGhpcy5zdGF0ZS5zd2ltbGFuZXMubGVuZ3RoXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZygnRWRpdGluZyBzd2ltbGFuZScsIGV2ZW50LnkpO1xuICAgICAgdGhpcy5lZGl0aW5nU3dpbWxhbmVJbmRleCA9IGV2ZW50Lnk7XG4gICAgICB0aGlzLm9wZW5Td2ltbGFuZURpYWxvZygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIE5vcm1hbCBjYW52YXMgY2xpY2sgaGFuZGxpbmdcbiAgICBjb25zdCBzd2ltbGFuZUluZGV4ID0gTWF0aC5mbG9vcihldmVudC55IC8gMjYzKTtcblxuICAgIHN3aXRjaCAodGhpcy5zZWxlY3RlZFRvb2wpIHtcbiAgICAgIGNhc2UgJ3N3aW1sYW5lJzpcbiAgICAgICAgY29uc29sZS5sb2coJ09wZW5pbmcgc3dpbWxhbmUgZGlhbG9nIGZvciBuZXcgc3dpbWxhbmUnKTtcbiAgICAgICAgdGhpcy5lZGl0aW5nU3dpbWxhbmVJbmRleCA9IG51bGw7IC8vIFNldCB0byBudWxsIHRvIGluZGljYXRlIGNyZWF0aW5nIGEgbmV3IHN3aW1sYW5lXG4gICAgICAgIHRoaXMub3BlblN3aW1sYW5lRGlhbG9nKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUb29sID0gbnVsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzdGFnZSc6XG4gICAgICAgIGlmIChzd2ltbGFuZUluZGV4ID49IDAgJiYgc3dpbWxhbmVJbmRleCA8IHRoaXMuc3RhdGUuc3dpbWxhbmVzLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYEFkZGluZyAke3RoaXMuc2VsZWN0ZWRUb29sfSB0byBzd2ltbGFuZSAke3N3aW1sYW5lSW5kZXh9YFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyBDcmVhdGUgdGhlIHN0YWdlIGRpcmVjdGx5IHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzXG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhdGUuYWRkTm9kZShcbiAgICAgICAgICAgIHN3aW1sYW5lSW5kZXgsXG4gICAgICAgICAgICAnc3RhZ2UnLFxuICAgICAgICAgICAgZXZlbnQueCxcbiAgICAgICAgICAgIGV2ZW50LnksXG4gICAgICAgICAgICB7IE5hbWU6ICdOZXcgU3RhZ2UnIH0gLy8gQWRkIGRlZmF1bHQgcHJvcGVydGllc1xuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgLy8gUmVzZXQgdGhlIHNlbGVjdGVkIHRvb2wgYWZ0ZXIgcGxhY2luZyBhIG5vZGVcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUb29sID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkZWNpc2lvbic6XG4gICAgICBjYXNlICdmb3JtJzpcbiAgICAgICAgaWYgKHN3aW1sYW5lSW5kZXggPj0gMCAmJiBzd2ltbGFuZUluZGV4IDwgdGhpcy5zdGF0ZS5zd2ltbGFuZXMubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgQWRkaW5nICR7dGhpcy5zZWxlY3RlZFRvb2x9IHRvIHN3aW1sYW5lICR7c3dpbWxhbmVJbmRleH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5zdGF0ZS5hZGROb2RlKFxuICAgICAgICAgICAgc3dpbWxhbmVJbmRleCxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUb29sLFxuICAgICAgICAgICAgZXZlbnQueCxcbiAgICAgICAgICAgIGV2ZW50LnlcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAvLyBSZXNldCB0aGUgc2VsZWN0ZWQgdG9vbCBhZnRlciBwbGFjaW5nIGEgbm9kZVxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRvb2wgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3N1YmZsb3cnOlxuICAgICAgICBpZiAoc3dpbWxhbmVJbmRleCA+PSAwICYmIHN3aW1sYW5lSW5kZXggPCB0aGlzLnN0YXRlLnN3aW1sYW5lcy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBBZGRpbmcgJHt0aGlzLnNlbGVjdGVkVG9vbH0gdG8gc3dpbWxhbmUgJHtzd2ltbGFuZUluZGV4fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIC8vIFNob3cgc3ViZmxvdyB3b3JrZmxvdyBzZWxlY3Rpb24gcG9wdXBcbiAgICAgICAgICB0aGlzLmNhbnZhc1JlZi5zaG93U3ViZmxvd1NlbGVjdGlvblBvcHVwKFxuICAgICAgICAgICAgZXZlbnQueCxcbiAgICAgICAgICAgIGV2ZW50LnksXG4gICAgICAgICAgICBzd2ltbGFuZUluZGV4XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uU3dpbWxhbmVEaWFsb2dGaWxsZWQoZXZlbnQ6IHsgdGFnczogVGFnW107IG5hbWU6IHN0cmluZyB9KSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICAnU3dpbWxhbmUgZGlhbG9nIGZpbGxlZDonLFxuICAgICAgZXZlbnQsXG4gICAgICAnRWRpdGluZyBpbmRleDonLFxuICAgICAgdGhpcy5lZGl0aW5nU3dpbWxhbmVJbmRleFxuICAgICk7XG5cbiAgICBpZiAodGhpcy5lZGl0aW5nU3dpbWxhbmVJbmRleCAhPT0gbnVsbCkge1xuICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIHN3aW1sYW5lXG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgJ1VwZGF0aW5nIGV4aXN0aW5nIHN3aW1sYW5lIGF0IGluZGV4OicsXG4gICAgICAgIHRoaXMuZWRpdGluZ1N3aW1sYW5lSW5kZXhcbiAgICAgICk7XG4gICAgICB0aGlzLnN0YXRlLnVwZGF0ZVN3aW1sYW5lKFxuICAgICAgICB0aGlzLmVkaXRpbmdTd2ltbGFuZUluZGV4LFxuICAgICAgICBldmVudC5uYW1lLFxuICAgICAgICBldmVudC50YWdzXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDcmVhdGUgbmV3IHN3aW1sYW5lXG4gICAgICBjb25zb2xlLmxvZygnQ3JlYXRpbmcgbmV3IHN3aW1sYW5lJyk7XG4gICAgICB0aGlzLnN0YXRlLmFkZFN3aW1sYW5lKGV2ZW50Lm5hbWUsIGV2ZW50LnRhZ3MpO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd1N3aW1sYW5lRGlhbG9nID0gZmFsc2U7XG4gICAgdGhpcy5lZGl0aW5nU3dpbWxhbmVJbmRleCA9IG51bGw7XG4gIH1cblxuXG5cbiAgb25TdWJmbG93U2VsZWN0ZWQoKSB7XG4gICAgLy8gUmVzZXQgdGhlIHNlbGVjdGVkIHRvb2wgYWZ0ZXIgcGxhY2luZyBhIHN1YmZsb3cgbm9kZVxuICAgIHRoaXMuc2VsZWN0ZWRUb29sID0gbnVsbDtcbiAgfVxuXG4gIG9wZW5BY3RvclRhZ3NEaWFsb2coKSB7XG4gICAgdGhpcy5zaG93QWN0b3JUYWdzRGlhbG9nID0gdHJ1ZTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIndvcmtmbG93LWRlc2lnbmVyXCI+XG4gIDxkaXYgY2xhc3M9XCJ3b3JrZmxvdy1oZWFkZXJcIj5cbiAgICA8aDE+e3sgc3RhdGUud29ya2Zsb3c/Lk5hbWUgfX08L2gxPlxuICA8L2Rpdj5cblxuICA8IS0tIFRvb2xiYXIgQ29tcG9uZW50IC0tPlxuICA8bGliLWRlc2lnbmVyLXRvb2xiYXIgW3NlbGVjdGVkVG9vbF09XCJzZWxlY3RlZFRvb2xcIiBbaXNTYXZpbmddPVwiaXNTYXZpbmdcIlxuICAgIFt3b3JrZmxvd0NvZGVdPVwic3RhdGUud29ya2Zsb3c/LkNvZGUgfHwgbnVsbFwiICh0b29sU2VsZWN0ZWQpPVwib25Ub29sU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgKHNhdmVXb3JrZmxvdyk9XCJzYXZlV29ya2Zsb3coKVwiIChvcGVuQWN0b3JUYWdzKT1cIm9wZW5BY3RvclRhZ3NEaWFsb2coKVwiPlxuICA8L2xpYi1kZXNpZ25lci10b29sYmFyPlxuXG4gIDwhLS0gU2hvdyBsb2FkaW5nIGluZGljYXRvciBpZiBuZWVkZWQgLS0+XG4gIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdcIiBjbGFzcz1cImxvYWRpbmctb3ZlcmxheVwiPlxuICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLXNwaW5uZXJcIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy10ZXh0XCI+TG9hZGluZyB3b3JrZmxvdy4uLjwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIENhbnZhcyBDb21wb25lbnQgLS0+XG4gIDxsaWItZGVzaWduZXItY2FudmFzIFtzZWxlY3RlZFRvb2xdPVwic2VsZWN0ZWRUb29sXCIgKGNsaWNrZWRQb3NpdGlvbik9XCJoYW5kbGVDYW52YXNQb3NpdGlvbkNsaWNrKCRldmVudClcIlxuICAgIChzdWJmbG93U2VsZWN0ZWQpPVwib25TdWJmbG93U2VsZWN0ZWQoKVwiICNjYW52YXNSZWY+XG4gIDwvbGliLWRlc2lnbmVyLWNhbnZhcz5cblxuICA8bGliLXN3aW1sYW5lLWRpYWxvZyBbdmlzaWJsZV09XCJzaG93U3dpbWxhbmVEaWFsb2dcIiBbc3dpbWxhbmVEYXRhXT1cImVkaXRpbmdTd2ltbGFuZSgpXCJcbiAgICAoY3JlYXRlZCk9XCJvblN3aW1sYW5lRGlhbG9nRmlsbGVkKCRldmVudClcIiAoY2xvc2VkKT1cInNob3dTd2ltbGFuZURpYWxvZyA9IGZhbHNlXCI+PC9saWItc3dpbWxhbmUtZGlhbG9nPlxuXG4gIDxsaWItYWN0b3ItdGFncy1kaWFsb2cgW3Zpc2libGVdPVwic2hvd0FjdG9yVGFnc0RpYWxvZ1wiIFt3b3JrZmxvd0NvZGVdPVwic3RhdGUud29ya2Zsb3c/LkNvZGUgfHwgbnVsbFwiXG4gICAgKGNsb3NlZCk9XCJzaG93QWN0b3JUYWdzRGlhbG9nID0gZmFsc2VcIj48L2xpYi1hY3Rvci10YWdzLWRpYWxvZz5cbjwvZGl2PlxuIl19
408
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctZGVzaWduZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLXdvcmtmbG93LXVpL3NyYy9saWIvY29tcG9uZW50cy93b3JrZmxvdy1kZXNpZ25lci93b3JrZmxvdy1kZXNpZ25lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL3dvcmtmbG93LWRlc2lnbmVyL3dvcmtmbG93LWRlc2lnbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBaUIsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7OztBQVlqRixNQUFNLE9BQU8seUJBQXlCO0lBaUIzQjtJQUNDO0lBQ0E7SUFsQmMsU0FBUyxDQUEyQjtJQUNuRCxZQUFZLEdBQWtCLElBQUksQ0FBQztJQUU1QywwQkFBMEI7SUFDMUIsWUFBWSxHQUFhLElBQUksQ0FBQztJQUM5QixrQkFBa0IsR0FBWSxLQUFLLENBQUM7SUFDcEMsbUJBQW1CLEdBQVksS0FBSyxDQUFDO0lBRXJDLG9CQUFvQixHQUFrQixJQUFJLENBQUM7SUFDM0MsZUFBZSxHQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVmLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDM0IsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUUxQixZQUNTLEtBQTRCLEVBQzNCLFdBQWdDLEVBQ2hDLFdBQXdCO1FBRnpCLFVBQUssR0FBTCxLQUFLLENBQXVCO1FBQzNCLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjtRQUNoQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtJQUM5QixDQUFD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LElBQUksQ0FBQztJQUMzQixDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7SUFDbEMsQ0FBQzt3R0E5ZVUseUJBQXlCOzRGQUF6Qix5QkFBeUIsK01DbkJ0QywyMUNBNkJBOzs0RkRWYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0UsdUJBQXVCO3NKQUtULFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDYixZQUFZO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgc2lnbmFsLFxuICBWaWV3Q2hpbGQsXG4gIFdyaXRhYmxlU2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVycm9yUmVzcG9uc2UsIFRhZywgV29ya2Zsb3cgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgVXRpbFNlcnZpY2UgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBEZXNpZ25lckNhbnZhc0NvbXBvbmVudCB9IGZyb20gJy4vZGVzaWduZXItY2FudmFzL2Rlc2lnbmVyLWNhbnZhcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgV29ya2Zsb3dEYXRhU2VydmljZSB9IGZyb20gJy4vd29ya2Zsb3ctZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IFdvcmtmbG93RGVzaWduZXJTdGF0ZSB9IGZyb20gJy4vd29ya2Zsb3ctZGVzaWduZXIuc3RhdGUnO1xuaW1wb3J0IHsgTm9kZSwgVG9vbFR5cGUgfSBmcm9tICcuL3dvcmtmbG93LWRlc2lnbmVyLnR5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXdvcmtmbG93LWRlc2lnbmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dvcmtmbG93LWRlc2lnbmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3dvcmtmbG93LWRlc2lnbmVyLmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBXb3JrZmxvd0Rlc2lnbmVyQ29tcG9uZW50IHtcbiAgQFZpZXdDaGlsZCgnY2FudmFzUmVmJykgY2FudmFzUmVmITogRGVzaWduZXJDYW52YXNDb21wb25lbnQ7XG4gIEBJbnB1dCgpIHdvcmtmbG93Q29kZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gQ3VycmVudGx5IHNlbGVjdGVkIHRvb2xcbiAgc2VsZWN0ZWRUb29sOiBUb29sVHlwZSA9IG51bGw7XG4gIHNob3dTd2ltbGFuZURpYWxvZzogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93QWN0b3JUYWdzRGlhbG9nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZWRpdGluZ1N3aW1sYW5lSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBlZGl0aW5nU3dpbWxhbmU6IFdyaXRhYmxlU2lnbmFsPHsgbmFtZTogc3RyaW5nOyB0YWdzOiBUYWdbXSB9IHwgbnVsbD4gPVxuICAgIHNpZ25hbChudWxsKTtcblxuICBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNTYXZpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc3RhdGU6IFdvcmtmbG93RGVzaWduZXJTdGF0ZSxcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBXb3JrZmxvd0RhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXRpbFNlcnZpY2U6IFV0aWxTZXJ2aWNlXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gTG9hZCB3b3JrZmxvdyBkYXRhIGlmIGNvZGUgaXMgcHJvdmlkZWRcbiAgICBpZiAodGhpcy53b3JrZmxvd0NvZGUpIHtcbiAgICAgIHRoaXMubG9hZFdvcmtmbG93KHRoaXMud29ya2Zsb3dDb2RlKTtcbiAgICB9XG4gIH1cblxuICBzYXZlV29ya2Zsb3coKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNTYXZpbmcpIHJldHVybjtcblxuICAgIHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xuXG4gICAgLy8gVHJhbnNmb3JtIHRoZSBVSSBtb2RlbCB0byB0aGUgQVBJIG1vZGVsXG4gICAgY29uc3Qgd29ya2Zsb3dNb2RlbCA9IHRoaXMuc3RhdGUudHJhbnNmb3JtVG9Xb3JrZmxvd01vZGVsKCk7XG5cbiAgICBpZiAod29ya2Zsb3dNb2RlbCkge1xuICAgICAgLy8gU2F2ZSB0byB0aGUgYmFja2VuZFxuICAgICAgdGhpcy5kYXRhU2VydmljZVxuICAgICAgICAuc2F2ZVdvcmtmbG93cyhbd29ya2Zsb3dNb2RlbF0pXG4gICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZSBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHRoaXMudXRpbFNlcnZpY2Uuc2hvd0Vycm9yKHJlc3BvbnNlLkVycm9yTXNnKTtcbiAgICAgICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ1dvcmtmbG93IHNhdmVkIHN1Y2Nlc3NmdWxseTonLCByZXNwb25zZSk7XG4gICAgICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dTdWNjZXNzKCdXb3JrZmxvdyBzYXZlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgICAgICAgIC8vIElmIHRoZSBBUEkgcmV0dXJucyBhbiB1cGRhdGVkIHdvcmtmbG93LCB3ZSBtaWdodCB3YW50IHRvIHJlbG9hZCBpdFxuICAgICAgICAgICAgY29uc3QgdXBkYXRlZFdvcmtmbG93ID0gcmVzcG9uc2VbMF07XG4gICAgICAgICAgICBpZiAodXBkYXRlZFdvcmtmbG93KSB7XG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUuc2V0V29ya2Zsb3dJZCh1cGRhdGVkV29ya2Zsb3cuQ29kZSk7XG4gICAgICAgICAgICAgIHRoaXMucGFyc2VXb3JrZmxvd0RhdGEodXBkYXRlZFdvcmtmbG93KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzYXZpbmcgd29ya2Zsb3c6JywgZXJyb3IpO1xuICAgICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgICAvLyBIYW5kbGUgZXJyb3IgLSBzaG93IGEgbm90aWZpY2F0aW9uLCBldGMuXG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGxvYWRXb3JrZmxvdyhjb2RlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5kYXRhU2VydmljZVxuICAgICAgLmdldFdvcmtmbG93V2l0aFBhcmFtKGNvZGUpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLlJlc3VsdCkge1xuICAgICAgICAgIC8vIFN0b3JlIHRoZSB3b3JrZmxvdyBJRFxuICAgICAgICAgIGNvbnN0IHdmID0gcmVzcG9uc2UuUmVzdWx0WzBdO1xuICAgICAgICAgIHRoaXMuc3RhdGUuc2V0V29ya2Zsb3dJZCh3Zi5Db2RlKTtcbiAgICAgICAgICB0aGlzLnBhcnNlV29ya2Zsb3dEYXRhKHdmKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyB3b3JrZmxvdzonLCBlcnJvcik7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIE1ldGhvZCB0byBwYXJzZSB3b3JrZmxvdyBkYXRhIGZyb20gQVBJIGFuZCBwb3B1bGF0ZSB0aGUgZGVzaWduZXJcbiAgcGFyc2VXb3JrZmxvd0RhdGEod29ya2Zsb3c6IFdvcmtmbG93KTogdm9pZCB7XG4gICAgLy8gU3RvcmUgdGhlIGNvbXBsZXRlIHdvcmtmbG93XG4gICAgdGhpcy5zdGF0ZS53b3JrZmxvdyA9IHdvcmtmbG93O1xuXG4gICAgLy8gQ2xlYXIgZXhpc3Rpbmcgc3RhdGVcbiAgICB0aGlzLnN0YXRlLnN3aW1sYW5lcyA9IFtdO1xuICAgIHRoaXMuc3RhdGUuY29ubmVjdGlvbnMgPSBbXTtcbiAgICB0aGlzLnN0YXRlLnN3aW1sYW5lUmVjb3JkID0ge307XG4gICAgdGhpcy5zdGF0ZS5zdGFnZVJlY29yZCA9IHt9O1xuICAgIHRoaXMuc3RhdGUuYWN0aW9uUmVjb3JkID0ge307XG5cbiAgICAvLyBTZXQgd29ya2Zsb3cgZm9ybSBpZiBleGlzdHNcbiAgICBpZiAod29ya2Zsb3cuRm9ybSkge1xuICAgICAgdGhpcy5zdGF0ZS5zZXRXb3JrZmxvd0Zvcm0oXG4gICAgICAgIHdvcmtmbG93LkZvcm0sXG4gICAgICAgIHdvcmtmbG93LkZvcm1OYW1lIHx8ICdXb3JrZmxvdyBGb3JtJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBTdG9yZSB0aGUgd29ya2Zsb3cgSURcbiAgICB0aGlzLnN0YXRlLnNldFdvcmtmbG93SWQod29ya2Zsb3cuQ29kZSk7XG5cbiAgICAvLyBQcm9jZXNzIHN3aW1sYW5lcyBmaXJzdFxuICAgIGlmICh3b3JrZmxvdy5MYW5lcyAmJiB3b3JrZmxvdy5MYW5lcy5sZW5ndGgpIHtcbiAgICAgIHdvcmtmbG93LkxhbmVzLnNvcnQoKGEsIGIpID0+IGEuUG9zaXRpb24gLSBiLlBvc2l0aW9uKS5mb3JFYWNoKChsYW5lKSA9PiB7XG4gICAgICAgIC8vIFN0b3JlIG9yaWdpbmFsIGxhbmUgaW4gcmVjb3JkXG4gICAgICAgIHRoaXMuc3RhdGUuc3dpbWxhbmVSZWNvcmRbbGFuZS5Db2RlXSA9IGxhbmU7XG5cbiAgICAgICAgLy8gQWRkIHN3aW1sYW5lIHRvIFVJIG1vZGVsIHdpdGggdGhlIG9yaWdpbmFsIElEXG4gICAgICAgIGNvbnN0IHN3aW1sYW5lID0ge1xuICAgICAgICAgIG9yZGVyOiBsYW5lLlBvc2l0aW9uLFxuICAgICAgICAgIGxhYmVsOiBsYW5lLk5hbWUgfHwgYExhbmUgJHtsYW5lLlBvc2l0aW9ufWAsXG4gICAgICAgICAgdGFnczogbGFuZS5UYWdzIHx8IFtdLFxuICAgICAgICAgIG5vZGVzOiBbXSxcbiAgICAgICAgICBpZDogbGFuZS5Db2RlLCAvLyBTdG9yZSB0aGUgb3JpZ2luYWwgSURcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnN0YXRlLnN3aW1sYW5lcy5wdXNoKHN3aW1sYW5lKTtcblxuICAgICAgICAvLyBSZWdpc3RlciBsb2FkZWQgb2JqZWN0XG4gICAgICAgIHRoaXMuc3RhdGUucmVnaXN0ZXJMb2FkZWRPYmplY3QobGFuZS5JZCwgbGFuZS5Db2RlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFByb2Nlc3Mgc3RhZ2VzXG4gICAgaWYgKHdvcmtmbG93LlN0YWdlcyAmJiB3b3JrZmxvdy5TdGFnZXMubGVuZ3RoKSB7XG4gICAgICB3b3JrZmxvdy5TdGFnZXMuZm9yRWFjaCgoc3RhZ2UpID0+IHtcbiAgICAgICAgLy8gU3RvcmUgb3JpZ2luYWwgc3RhZ2UgaW4gcmVjb3JkXG4gICAgICAgIHRoaXMuc3RhdGUuc3RhZ2VSZWNvcmRbc3RhZ2UuQ29kZV0gPSBzdGFnZTtcblxuICAgICAgICAvLyBGaW5kIHN3aW1sYW5lIGluZGV4IGJ5IFN3aW1MYW5lIElEXG4gICAgICAgIGNvbnN0IHN3aW1sYW5lSW5kZXggPSB0aGlzLnN0YXRlLnN3aW1sYW5lcy5maW5kSW5kZXgoXG4gICAgICAgICAgKGxhbmUpID0+IGxhbmUuaWQgPT09IHN0YWdlLlN3aW1MYW5lXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHN3aW1sYW5lSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgY29uc3QgeCA9IHN0YWdlLkNvb3JkaW5hdGVzPy5YIHx8IDEwMDtcbiAgICAgICAgICBjb25zdCB5ID0gc3RhZ2UuQ29vcmRpbmF0ZXM/LlkgfHwgNTA7XG5cbiAgICAgICAgICAvLyBDcmVhdGUgbm9kZSB3aXRoIG9yaWdpbmFsIElEXG4gICAgICAgICAgY29uc3Qgbm9kZTogTm9kZSA9IHtcbiAgICAgICAgICAgIGlkOiBzdGFnZS5Db2RlLCAvLyBVc2Ugb3JpZ2luYWwgSURcbiAgICAgICAgICAgIHR5cGU6IHN0YWdlLklzU3ViUHJvY2VzcyA/ICdzdWJmbG93JyA6ICgnc3RhZ2UnIGFzIGNvbnN0KSxcbiAgICAgICAgICAgIHg6IHgsXG4gICAgICAgICAgICB5OiB5LFxuICAgICAgICAgICAgd2lkdGg6IDE2OSxcbiAgICAgICAgICAgIGhlaWdodDogMTAwLFxuICAgICAgICAgICAgaXNTdGFydE5vZGU6IHN0YWdlLklzRW50cnlQb2ludCxcbiAgICAgICAgICAgIHN0YWdlRGF0YToge1xuICAgICAgICAgICAgICBOYW1lOiBzdGFnZS5OYW1lLFxuICAgICAgICAgICAgICBEZXNjcmlwdGlvbjogc3RhZ2UuRGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgIER1cmF0aW9uOiBzdGFnZS5EdXJhdGlvbixcbiAgICAgICAgICAgICAgUGFzc09uUnVsZTogc3RhZ2UuUGFzc09uUnVsZSxcbiAgICAgICAgICAgICAgQWN0b3JSdWxlOiBzdGFnZS5BY3RvclJ1bGUsXG4gICAgICAgICAgICAgIE1pbk5vT2ZBY3Rvcjogc3RhZ2UuTWluTm9PZkFjdG9yLFxuICAgICAgICAgICAgICBUYWdzOiBzdGFnZS5UYWdzIHx8IFtdLFxuICAgICAgICAgICAgICBJc1BhcmFsbGVsOiBzdGFnZS5Jc1BhcmFsbGVsLFxuICAgICAgICAgICAgICBJc0VudHJ5UG9pbnQ6IHN0YWdlLklzRW50cnlQb2ludCxcbiAgICAgICAgICAgICAgSXNFeGl0UG9pbnQ6IHN0YWdlLklzRXhpdFBvaW50LFxuICAgICAgICAgICAgICBJc1N1YlByb2Nlc3M6IHN0YWdlLklzU3ViUHJvY2VzcyxcbiAgICAgICAgICAgICAgQXNzaWdubWVudFR5cGU6IHN0YWdlLkFzc2lnbm1lbnRUeXBlLFxuICAgICAgICAgICAgICBJZDogc3RhZ2UuSWQsIC8vIEtlZXAgb3JpZ2luYWwgSURcbiAgICAgICAgICAgICAgQ29kZTogc3RhZ2UuQ29kZSxcbiAgICAgICAgICAgICAgRm9ybTogc3RhZ2UuRm9ybSxcbiAgICAgICAgICAgICAgZm9ybUlkOiBzdGFnZS5Gb3JtLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbm5lY3Rpb25Qb2ludHM6IFtdLCAvLyBJbml0aWFsaXplIHdpdGggZW1wdHkgYXJyYXlcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy8gR2VuZXJhdGUgY29ubmVjdGlvbiBwb2ludHNcbiAgICAgICAgICBub2RlLmNvbm5lY3Rpb25Qb2ludHMgPSB0aGlzLnN0YXRlLmdlbmVyYXRlQ29ubmVjdGlvblBvaW50cyhub2RlKTtcblxuICAgICAgICAgIC8vIEFkZCBub2RlIHRvIHN3aW1sYW5lXG4gICAgICAgICAgdGhpcy5zdGF0ZS5zd2ltbGFuZXNbc3dpbWxhbmVJbmRleF0ubm9kZXMgPVxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5zd2ltbGFuZXNbc3dpbWxhbmVJbmRleF0ubm9kZXMgfHwgW107XG4gICAgICAgICAgdGhpcy5zdGF0ZS5zd2ltbGFuZXNbc3dpbWxhbmVJbmRleF0ubm9kZXMucHVzaChub2RlKTtcblxuICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBzdGFydCBub2RlLCB1cGRhdGUgc3RhdGVcbiAgICAgICAgICBpZiAoc3RhZ2UuSXNFbnRyeVBvaW50KSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlLnN0YXJ0Tm9kZUlkID0gc3RhZ2UuQ29kZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBSZWdpc3RlciBsb2FkZWQgc3RhZ2VcbiAgICAgICAgICB0aGlzLnN0YXRlLnJlZ2lzdGVyTG9hZGVkT2JqZWN0KHN0YWdlLklkLCBzdGFnZS5Db2RlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBjb25uZWN0aW9ucy9hY3Rpb25zXG4gICAgaWYgKHdvcmtmbG93LkFjdGlvbnMgJiYgd29ya2Zsb3cuQWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHdvcmtmbG93LkFjdGlvbnMuZm9yRWFjaCgoYWN0aW9uKSA9PiB7XG4gICAgICAgIC8vIFN0b3JlIG9yaWdpbmFsIGFjdGlvbiBpbiByZWNvcmRcbiAgICAgICAgdGhpcy5zdGF0ZS5hY3Rpb25SZWNvcmRbYWN0aW9uLkNvZGVdID0gYWN0aW9uO1xuXG4gICAgICAgIC8vIEZpbmQgc291cmNlIGFuZCB0YXJnZXQgbm9kZXNcbiAgICAgICAgY29uc3Qgc291cmNlTm9kZUluZm8gPSB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChhY3Rpb24uRnJvbVN0YWdlKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0Tm9kZUluZm8gPSB0aGlzLnN0YXRlLmZpbmROb2RlQnlJZChhY3Rpb24uVG9TdGFnZSk7XG5cbiAgICAgICAgY29uc29sZS5sb2coc291cmNlTm9kZUluZm8sIHRhcmdldE5vZGVJbmZvKTtcblxuICAgICAgICBpZiAoc291cmNlTm9kZUluZm8gJiYgdGFyZ2V0Tm9kZUluZm8pIHtcbiAgICAgICAgICAvLyBGaW5kIHN1aXRhYmxlIGNvbm5lY3Rpb24gcG9pbnRzXG4gICAgICAgICAgLy8gY29uc3Qgc291cmNlTm9kZSA9IHNvdXJjZU5vZGVJbmZvLm5vZGU7XG4gICAgICAgICAgLy8gY29uc3QgdGFyZ2V0Tm9kZSA9IHRhcmdldE5vZGVJbmZvLm5vZGU7XG5cbiAgICAgICAgICAvLyBjb25zdCBzb3VyY2VQb2ludCA9IHNvdXJjZU5vZGUuY29ubmVjdGlvblBvaW50cz8uZmluZChcbiAgICAgICAgICAvLyAgIChwKSA9PiBwLnR5cGUgPT09ICdyaWdodCcgfHwgcC50eXBlID09PSAnYm90dG9tJ1xuICAgICAgICAgIC8vICk7XG5cbiAgICAgICAgICAvLyBjb25zdCB0YXJnZXRQb2ludCA9IHRhcmdldE5vZGUuY29ubmVjdGlvblBvaW50cz8uZmluZChcbiAgICAgICAgICAvLyAgIChwKSA9PiBwLnR5cGUgPT09ICdsZWZ0JyB8fCBwLnR5cGUgPT09ICd0b3AnXG4gICAgICAgICAgLy8gKTtcblxuICAgICAgICAgIGNvbnN0IHNvdXJjZU5vZGUgPSBzb3VyY2VOb2RlSW5mby5ub2RlO1xuICAgICAgICAgIGNvbnN0IHRhcmdldE5vZGUgPSB0YXJnZXROb2RlSW5mby5ub2RlO1xuXG4gICAgICAgICAgbGV0IHNvdXJjZVBvaW50SWQsIHRhcmdldFBvaW50SWQ7XG5cbiAgICAgICAgICBjb25zb2xlLmxvZyhhY3Rpb24uU291cmNlUG9pbnRUeXBlLCBhY3Rpb24uVGFyZ2V0UG9pbnRUeXBlKTtcblxuICAgICAgICAgIGlmIChhY3Rpb24uU291cmNlUG9pbnRUeXBlKSB7XG4gICAgICAgICAgICAvLyBGaW5kIGEgcG9pbnQgd2l0aCBtYXRjaGluZyB0eXBlXG4gICAgICAgICAgICBjb25zdCBzb3VyY2VQb2ludCA9IHNvdXJjZU5vZGUuY29ubmVjdGlvblBvaW50cz8uZmluZChcbiAgICAgICAgICAgICAgKHApID0+IHAudHlwZSA9PT0gYWN0aW9uLlNvdXJjZVBvaW50VHlwZT8udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHNvdXJjZVBvaW50SWQgPSBzb3VyY2VQb2ludD8uaWQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIGZpbmRpbmcgYSBzdWl0YWJsZSBwb2ludFxuICAgICAgICAgICAgY29uc3Qgc291cmNlUG9pbnQgPSBzb3VyY2VOb2RlLmNvbm5lY3Rpb25Qb2ludHM/LmZpbmQoXG4gICAgICAgICAgICAgIChwKSA9PiBwLnR5cGUgPT09ICdyaWdodCcgfHwgcC50eXBlID09PSAnYm90dG9tJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHNvdXJjZVBvaW50SWQgPSBzb3VyY2VQb2ludD8uaWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGFjdGlvbi5UYXJnZXRQb2ludFR5cGUpIHtcbiAgICAgICAgICAgIC8vIEZpbmQgYSBwb2ludCB3aXRoIG1hdGNoaW5nIHR5cGVcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldFBvaW50ID0gdGFyZ2V0Tm9kZS5jb25uZWN0aW9uUG9pbnRzPy5maW5kKFxuICAgICAgICAgICAgICAocCkgPT4gcC50eXBlID09PSBhY3Rpb24uVGFyZ2V0UG9pbnRUeXBlPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGFyZ2V0UG9pbnRJZCA9IHRhcmdldFBvaW50Py5pZDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8gZmluZGluZyBhIHN1aXRhYmxlIHBvaW50XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRQb2ludCA9IHRhcmdldE5vZGUuY29ubmVjdGlvblBvaW50cz8uZmluZChcbiAgICAgICAgICAgICAgKHApID0+IHAudHlwZSA9PT0gJ2xlZnQnIHx8IHAudHlwZSA9PT0gJ3RvcCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0YXJnZXRQb2ludElkID0gdGFyZ2V0UG9pbnQ/LmlkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnNvbGUubG9nKCdTb3VyY2UgcG9pbnQ6Jywgc291cmNlUG9pbnRJZCk7XG4gICAgICAgICAgY29uc29sZS5sb2coJ1RhcmdldCBwb2ludDonLCB0YXJnZXRQb2ludElkKTtcblxuICAgICAgICAgIGlmIChzb3VyY2VQb2ludElkICYmIHRhcmdldFBvaW50SWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB7XG4gICAgICAgICAgICAgIGlkOiBhY3Rpb24uQ29kZSwgLy8gVXNlIG9yaWdpbmFsIElEXG4gICAgICAgICAgICAgIHNvdXJjZU5vZGVJZDogYWN0aW9uLkZyb21TdGFnZSxcbiAgICAgICAgICAgICAgdGFyZ2V0Tm9kZUlkOiBhY3Rpb24uVG9TdGFnZSxcbiAgICAgICAgICAgICAgc291cmNlUG9pbnRJZDogc291cmNlUG9pbnRJZCxcbiAgICAgICAgICAgICAgdGFyZ2V0UG9pbnRJZDogdGFyZ2V0UG9pbnRJZCxcbiAgICAgICAgICAgICAgc291cmNlU3dpbWxhbmVJbmRleDogc291cmNlTm9kZUluZm8uc3dpbWxhbmVJbmRleCxcbiAgICAgICAgICAgICAgdGFyZ2V0U3dpbWxhbmVJbmRleDogdGFyZ2V0Tm9kZUluZm8uc3dpbWxhbmVJbmRleCxcbiAgICAgICAgICAgICAgY29uZGl0aW9uOiBhY3Rpb24uUGFzc09uUnVsZSB8fCAnJyxcbiAgICAgICAgICAgICAgbGFiZWw6IGFjdGlvbi5OYW1lIHx8ICcnLFxuICAgICAgICAgICAgICBhY3Rpb246IGFjdGlvbi5PcGVyYXRpb25BY3Rpb24gfHwgbnVsbCxcbiAgICAgICAgICAgICAgdGFyZ2V0U3RhdHVzOiBhY3Rpb24uVGFyZ2V0U3RhdHVzIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuc3RhdGUuY29ubmVjdGlvbnMucHVzaChjb25uZWN0aW9uKTtcblxuICAgICAgICAgICAgLy8gUmVnaXN0ZXIgbG9hZGVkIGFjdGlvblxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5yZWdpc3RlckxvYWRlZE9iamVjdChhY3Rpb24uSWQsIGFjdGlvbi5Db2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gZmluZCBzd2ltbGFuZSBpbmRleCBieSBMYW5lIElEXG4gIGZpbmRTd2ltbGFuZUluZGV4QnlMYW5lSWQobGFuZUlkOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIC8vIEZpcnN0IGNoZWNrIG91ciBtYXBwaW5nXG4gICAgaWYgKHRoaXMuc3RhdGUubGFuZUlkVG9JbmRleE1hcC5oYXMobGFuZUlkKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdGUubGFuZUlkVG9JbmRleE1hcC5nZXQobGFuZUlkKSE7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgdG8gdGhlIG9yaWdpbmFsIGxvZ2ljIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcbiAgICBjb25zdCBwYXJ0cyA9IGxhbmVJZC5zcGxpdCgnLScpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHBhcnNlSW50KHBhcnRzWzFdKTtcbiAgICAgIGlmICghaXNOYU4oaW5kZXgpICYmIGluZGV4IDwgdGhpcy5zdGF0ZS5zd2ltbGFuZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICAvLyBIYW5kbGUgdG9vbCBzZWxlY3Rpb24gZnJvbSB0b29sYmFyXG4gIG9uVG9vbFNlbGVjdGVkKHRvb2w6IFRvb2xUeXBlKTogdm9pZCB7XG4gICAgLy8gVG9nZ2xlIHNlbGVjdGlvbiBpZiB0aGUgc2FtZSB0b29sIGlzIGNsaWNrZWQgYWdhaW5cbiAgICB0aGlzLnNlbGVjdGVkVG9vbCA9IHRoaXMuc2VsZWN0ZWRUb29sID09PSB0b29sID8gbnVsbCA6IHRvb2w7XG4gICAgY29uc29sZS5sb2coJ1NlbGVjdGVkIHRvb2w6JywgdGhpcy5zZWxlY3RlZFRvb2wpO1xuICB9XG5cbiAgb3BlblN3aW1sYW5lRGlhbG9nKCkge1xuICAgIGNvbnNvbGUubG9nKCdTTUwgSU5ERVgnLCB0aGlzLmVkaXRpbmdTd2ltbGFuZUluZGV4KTtcbiAgICBpZiAodGhpcy5lZGl0aW5nU3dpbWxhbmVJbmRleCAhPT0gbnVsbCkge1xuICAgICAgY29uc29sZS5sb2coJ1NNTCcsIHRoaXMuc3RhdGUuc3dpbWxhbmVzW3RoaXMuZWRpdGluZ1N3aW1sYW5lSW5kZXhdKTtcbiAgICAgIHRoaXMuZWRpdGluZ1N3aW1sYW5lLnNldCh7XG4gICAgICAgIG5hbWU6IHRoaXMuc3RhdGUuc3dpbWxhbmVzW3RoaXMuZWRpdGluZ1N3aW1sYW5lSW5kZXhdLmxhYmVsLFxuICAgICAgICB0YWdzOiB0aGlzLnN0YXRlLnN3aW1sYW5lc1t0aGlzLmVkaXRpbmdTd2ltbGFuZUluZGV4XS50YWdzLFxuICAgICAgfSk7XG4gICAgICBjb25zb2xlLmxvZygnU01MX0VEVCcsIHRoaXMuZWRpdGluZ1N3aW1sYW5lKCkpO1xuICAgIH1cbiAgICB0aGlzLnNob3dTd2ltbGFuZURpYWxvZyA9IHRydWU7XG4gIH1cblxuXG5cbiAgaGFuZGxlQ2FudmFzUG9zaXRpb25DbGljayhldmVudDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9KSB7XG4gICAgY29uc29sZS5sb2coZXZlbnQpO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhbiBlZGl0IHN3aW1sYW5lIGV2ZW50XG4gICAgaWYgKFxuICAgICAgZXZlbnQueCA9PT0gLTEgJiZcbiAgICAgIGV2ZW50LnkgPj0gMCAmJlxuICAgICAgZXZlbnQueSA8IHRoaXMuc3RhdGUuc3dpbWxhbmVzLmxlbmd0aFxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coJ0VkaXRpbmcgc3dpbWxhbmUnLCBldmVudC55KTtcbiAgICAgIHRoaXMuZWRpdGluZ1N3aW1sYW5lSW5kZXggPSBldmVudC55O1xuICAgICAgdGhpcy5vcGVuU3dpbWxhbmVEaWFsb2coKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBOb3JtYWwgY2FudmFzIGNsaWNrIGhhbmRsaW5nXG4gICAgY29uc3Qgc3dpbWxhbmVJbmRleCA9IE1hdGguZmxvb3IoZXZlbnQueSAvIDI2Myk7XG5cbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRUb29sKSB7XG4gICAgICBjYXNlICdzd2ltbGFuZSc6XG4gICAgICAgIGNvbnNvbGUubG9nKCdPcGVuaW5nIHN3aW1sYW5lIGRpYWxvZyBmb3IgbmV3IHN3aW1sYW5lJyk7XG4gICAgICAgIHRoaXMuZWRpdGluZ1N3aW1sYW5lSW5kZXggPSBudWxsOyAvLyBTZXQgdG8gbnVsbCB0byBpbmRpY2F0ZSBjcmVhdGluZyBhIG5ldyBzd2ltbGFuZVxuICAgICAgICB0aGlzLm9wZW5Td2ltbGFuZURpYWxvZygpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVG9vbCA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc3RhZ2UnOlxuICAgICAgICBpZiAoc3dpbWxhbmVJbmRleCA+PSAwICYmIHN3aW1sYW5lSW5kZXggPCB0aGlzLnN0YXRlLnN3aW1sYW5lcy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBBZGRpbmcgJHt0aGlzLnNlbGVjdGVkVG9vbH0gdG8gc3dpbWxhbmUgJHtzd2ltbGFuZUluZGV4fWBcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gQ3JlYXRlIHRoZSBzdGFnZSBkaXJlY3RseSB3aXRoIGRlZmF1bHQgcHJvcGVydGllc1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLnN0YXRlLmFkZE5vZGUoXG4gICAgICAgICAgICBzd2ltbGFuZUluZGV4LFxuICAgICAgICAgICAgJ3N0YWdlJyxcbiAgICAgICAgICAgIGV2ZW50LngsXG4gICAgICAgICAgICBldmVudC55LFxuICAgICAgICAgICAgeyBOYW1lOiAnTmV3IFN0YWdlJyB9IC8vIEFkZCBkZWZhdWx0IHByb3BlcnRpZXNcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBzZWxlY3RlZCB0b29sIGFmdGVyIHBsYWNpbmcgYSBub2RlXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVG9vbCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGVjaXNpb24nOlxuICAgICAgY2FzZSAnZm9ybSc6XG4gICAgICAgIGlmIChzd2ltbGFuZUluZGV4ID49IDAgJiYgc3dpbWxhbmVJbmRleCA8IHRoaXMuc3RhdGUuc3dpbWxhbmVzLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYEFkZGluZyAke3RoaXMuc2VsZWN0ZWRUb29sfSB0byBzd2ltbGFuZSAke3N3aW1sYW5lSW5kZXh9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuc3RhdGUuYWRkTm9kZShcbiAgICAgICAgICAgIHN3aW1sYW5lSW5kZXgsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVG9vbCxcbiAgICAgICAgICAgIGV2ZW50LngsXG4gICAgICAgICAgICBldmVudC55XG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgLy8gUmVzZXQgdGhlIHNlbGVjdGVkIHRvb2wgYWZ0ZXIgcGxhY2luZyBhIG5vZGVcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUb29sID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzdWJmbG93JzpcbiAgICAgICAgaWYgKHN3aW1sYW5lSW5kZXggPj0gMCAmJiBzd2ltbGFuZUluZGV4IDwgdGhpcy5zdGF0ZS5zd2ltbGFuZXMubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgQWRkaW5nICR7dGhpcy5zZWxlY3RlZFRvb2x9IHRvIHN3aW1sYW5lICR7c3dpbWxhbmVJbmRleH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICAvLyBTaG93IHN1YmZsb3cgd29ya2Zsb3cgc2VsZWN0aW9uIHBvcHVwXG4gICAgICAgICAgdGhpcy5jYW52YXNSZWYuc2hvd1N1YmZsb3dTZWxlY3Rpb25Qb3B1cChcbiAgICAgICAgICAgIGV2ZW50LngsXG4gICAgICAgICAgICBldmVudC55LFxuICAgICAgICAgICAgc3dpbWxhbmVJbmRleFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvblN3aW1sYW5lRGlhbG9nRmlsbGVkKGV2ZW50OiB7IHRhZ3M6IFRhZ1tdOyBuYW1lOiBzdHJpbmcgfSkge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgJ1N3aW1sYW5lIGRpYWxvZyBmaWxsZWQ6JyxcbiAgICAgIGV2ZW50LFxuICAgICAgJ0VkaXRpbmcgaW5kZXg6JyxcbiAgICAgIHRoaXMuZWRpdGluZ1N3aW1sYW5lSW5kZXhcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuZWRpdGluZ1N3aW1sYW5lSW5kZXggIT09IG51bGwpIHtcbiAgICAgIC8vIFVwZGF0ZSBleGlzdGluZyBzd2ltbGFuZVxuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICdVcGRhdGluZyBleGlzdGluZyBzd2ltbGFuZSBhdCBpbmRleDonLFxuICAgICAgICB0aGlzLmVkaXRpbmdTd2ltbGFuZUluZGV4XG4gICAgICApO1xuICAgICAgdGhpcy5zdGF0ZS51cGRhdGVTd2ltbGFuZShcbiAgICAgICAgdGhpcy5lZGl0aW5nU3dpbWxhbmVJbmRleCxcbiAgICAgICAgZXZlbnQubmFtZSxcbiAgICAgICAgZXZlbnQudGFnc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3JlYXRlIG5ldyBzd2ltbGFuZVxuICAgICAgY29uc29sZS5sb2coJ0NyZWF0aW5nIG5ldyBzd2ltbGFuZScpO1xuICAgICAgdGhpcy5zdGF0ZS5hZGRTd2ltbGFuZShldmVudC5uYW1lLCBldmVudC50YWdzKTtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dTd2ltbGFuZURpYWxvZyA9IGZhbHNlO1xuICAgIHRoaXMuZWRpdGluZ1N3aW1sYW5lSW5kZXggPSBudWxsO1xuICB9XG5cblxuXG4gIG9uU3dpbWxhbmVEaWFsb2dEZWxldGVkKCkge1xuICAgIGlmICh0aGlzLmVkaXRpbmdTd2ltbGFuZUluZGV4ID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmVkaXRpbmdTd2ltbGFuZUluZGV4O1xuICAgIGNvbnN0IHN3aW1sYW5lID0gdGhpcy5zdGF0ZS5zd2ltbGFuZXNbaW5kZXhdO1xuXG4gICAgLy8gR3VhcmQ6IHN0YWdlcyBtdXN0IGJlIG1vdmVkIG91dCBmaXJzdCAoYWxzbyBlbmZvcmNlZCBpbiBzdGF0ZS5kZWxldGVTd2ltbGFuZSkuXG4gICAgaWYgKHN3aW1sYW5lPy5ub2Rlcz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dFcnJvcihcbiAgICAgICAgJ01vdmUgYWxsIHN0YWdlcyBvdXQgb2YgdGhpcyBzd2ltbGFuZSBiZWZvcmUgZGVsZXRpbmcgaXQuJ1xuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBIGxvYWRlZCBsYW5lIGtlZXBzIGl0cyBiYWNrZW5kIENvZGUgaW4gc3dpbWxhbmVSZWNvcmQgKGtleWVkIGJ5IGlkL0NvZGUpLlxuICAgIGNvbnN0IGJhY2tlbmRSZWNvcmQgPSBzd2ltbGFuZT8uaWRcbiAgICAgID8gdGhpcy5zdGF0ZS5zd2ltbGFuZVJlY29yZFtzd2ltbGFuZS5pZF1cbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGJhY2tlbmRSZWNvcmQ/LkNvZGUpIHtcbiAgICAgIC8vIFBhdGggQTogYmFja2VuZC1wZXJzaXN0ZWQgbGFuZSDigJQgZGVsZXRlIG9uIHRoZSBzZXJ2ZXIgZmlyc3QuXG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlXG4gICAgICAgIC5kZWxldGVTd2ltTGFuZXMoW2JhY2tlbmRSZWNvcmQuQ29kZV0pXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmZpbmlzaFN3aW1sYW5lRGVsZXRlKGluZGV4KTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRlbGV0aW5nIHN3aW1sYW5lOicsIGVycm9yKTtcbiAgICAgICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dFcnJvcignRmFpbGVkIHRvIGRlbGV0ZSBzd2ltbGFuZScpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUGF0aCBCOiBuZXZlci1zYXZlZCBsYW5lIOKAlCByZW1vdmUgZnJvbSBzdGF0ZSBkaXJlY3RseSwgbm8gQVBJIGNhbGwuXG4gICAgICB0aGlzLmZpbmlzaFN3aW1sYW5lRGVsZXRlKGluZGV4KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbmlzaFN3aW1sYW5lRGVsZXRlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBkZWxldGVkID0gdGhpcy5zdGF0ZS5kZWxldGVTd2ltbGFuZShpbmRleCk7XG4gICAgaWYgKCFkZWxldGVkKSB7XG4gICAgICB0aGlzLnV0aWxTZXJ2aWNlLnNob3dFcnJvcihcbiAgICAgICAgJ01vdmUgYWxsIHN0YWdlcyBvdXQgb2YgdGhpcyBzd2ltbGFuZSBiZWZvcmUgZGVsZXRpbmcgaXQuJ1xuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dTd2ltbGFuZURpYWxvZyA9IGZhbHNlO1xuICAgIHRoaXMuZWRpdGluZ1N3aW1sYW5lSW5kZXggPSBudWxsO1xuICAgIHRoaXMuY2FudmFzUmVmPy51cGRhdGVDYW52YXNTaXplKCk7XG4gIH1cblxuICBvblN1YmZsb3dTZWxlY3RlZCgpIHtcbiAgICAvLyBSZXNldCB0aGUgc2VsZWN0ZWQgdG9vbCBhZnRlciBwbGFjaW5nIGEgc3ViZmxvdyBub2RlXG4gICAgdGhpcy5zZWxlY3RlZFRvb2wgPSBudWxsO1xuICB9XG5cbiAgb3BlbkFjdG9yVGFnc0RpYWxvZygpIHtcbiAgICB0aGlzLnNob3dBY3RvclRhZ3NEaWFsb2cgPSB0cnVlO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwid29ya2Zsb3ctZGVzaWduZXJcIj5cbiAgPGRpdiBjbGFzcz1cIndvcmtmbG93LWhlYWRlclwiPlxuICAgIDxoMT57eyBzdGF0ZS53b3JrZmxvdz8uTmFtZSB9fTwvaDE+XG4gIDwvZGl2PlxuXG4gIDwhLS0gVG9vbGJhciBDb21wb25lbnQgLS0+XG4gIDxsaWItZGVzaWduZXItdG9vbGJhciBbc2VsZWN0ZWRUb29sXT1cInNlbGVjdGVkVG9vbFwiIFtpc1NhdmluZ109XCJpc1NhdmluZ1wiXG4gICAgW3dvcmtmbG93Q29kZV09XCJzdGF0ZS53b3JrZmxvdz8uQ29kZSB8fCBudWxsXCIgKHRvb2xTZWxlY3RlZCk9XCJvblRvb2xTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAoc2F2ZVdvcmtmbG93KT1cInNhdmVXb3JrZmxvdygpXCIgKG9wZW5BY3RvclRhZ3MpPVwib3BlbkFjdG9yVGFnc0RpYWxvZygpXCI+XG4gIDwvbGliLWRlc2lnbmVyLXRvb2xiYXI+XG5cbiAgPCEtLSBTaG93IGxvYWRpbmcgaW5kaWNhdG9yIGlmIG5lZWRlZCAtLT5cbiAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ1wiIGNsYXNzPVwibG9hZGluZy1vdmVybGF5XCI+XG4gICAgPGRpdiBjbGFzcz1cImxvYWRpbmctc3Bpbm5lclwiPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLXRleHRcIj5Mb2FkaW5nIHdvcmtmbG93Li4uPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQ2FudmFzIENvbXBvbmVudCAtLT5cbiAgPGxpYi1kZXNpZ25lci1jYW52YXMgW3NlbGVjdGVkVG9vbF09XCJzZWxlY3RlZFRvb2xcIiAoY2xpY2tlZFBvc2l0aW9uKT1cImhhbmRsZUNhbnZhc1Bvc2l0aW9uQ2xpY2soJGV2ZW50KVwiXG4gICAgKHN1YmZsb3dTZWxlY3RlZCk9XCJvblN1YmZsb3dTZWxlY3RlZCgpXCIgI2NhbnZhc1JlZj5cbiAgPC9saWItZGVzaWduZXItY2FudmFzPlxuXG4gIDxsaWItc3dpbWxhbmUtZGlhbG9nIFt2aXNpYmxlXT1cInNob3dTd2ltbGFuZURpYWxvZ1wiIFtzd2ltbGFuZURhdGFdPVwiZWRpdGluZ1N3aW1sYW5lKClcIlxuICAgIFtpc0VkaXRpbmddPVwiZWRpdGluZ1N3aW1sYW5lSW5kZXggIT09IG51bGxcIiAoY3JlYXRlZCk9XCJvblN3aW1sYW5lRGlhbG9nRmlsbGVkKCRldmVudClcIlxuICAgIChkZWxldGVkKT1cIm9uU3dpbWxhbmVEaWFsb2dEZWxldGVkKClcIiAoY2xvc2VkKT1cInNob3dTd2ltbGFuZURpYWxvZyA9IGZhbHNlXCI+PC9saWItc3dpbWxhbmUtZGlhbG9nPlxuXG4gIDxsaWItYWN0b3ItdGFncy1kaWFsb2cgW3Zpc2libGVdPVwic2hvd0FjdG9yVGFnc0RpYWxvZ1wiIFt3b3JrZmxvd0NvZGVdPVwic3RhdGUud29ya2Zsb3c/LkNvZGUgfHwgbnVsbFwiXG4gICAgKGNsb3NlZCk9XCJzaG93QWN0b3JUYWdzRGlhbG9nID0gZmFsc2VcIj48L2xpYi1hY3Rvci10YWdzLWRpYWxvZz5cbjwvZGl2PlxuIl19