@cqa-lib/cqa-ui 1.1.266 → 1.1.267

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.
@@ -174,10 +174,10 @@ export class StepBuilderGroupComponent {
174
174
  }
175
175
  }
176
176
  StepBuilderGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderGroupComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
177
- StepBuilderGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepBuilderGroupComponent, selector: "cqa-step-builder-group", inputs: { stepGroupOptions: "stepGroupOptions", hasMoreStepGroups: "hasMoreStepGroups", isLoadingStepGroups: "isLoadingStepGroups", initialStepGroupId: "initialStepGroupId", editMode: "editMode", runtimeVariables: "runtimeVariables", isLoadingRuntimeVariables: "isLoadingRuntimeVariables", existingRuntimeValues: "existingRuntimeValues" }, outputs: { createStep: "createStep", stepGroupSelected: "stepGroupSelected", cancelled: "cancelled", loadMoreStepGroups: "loadMoreStepGroups", searchStepGroups: "searchStepGroups" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-px-4 cqa-py-2 cqa-h-full\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n {{ editMode ? 'Edit Step Group Test Step' : 'Create Step Group Test Step' }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Step Group Selection -->\n <div class=\"cqa-mb-6\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Select Step Group<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select\n [form]=\"stepGroupForm\"\n [config]=\"stepGroupConfig\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Step Group Description -->\n <!-- <div *ngIf=\"selectedStepGroup\" class=\"cqa-mb-6\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#4b5563]\">Description:</span>\n </div>\n <div class=\"cqa-p-3 cqa-bg-[#f9fafb] cqa-rounded cqa-border cqa-border-[#e5e7eb]\">\n <div class=\"cqa-text-[14px] cqa-text-[#374151]\" [innerHTML]=\"getStepGroupDescription()\">\n </div>\n </div>\n </div> -->\n\n <!-- Loading State -->\n <div *ngIf=\"isLoadingStepGroups\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading step groups...</div>\n </div>\n\n <!-- Empty State -->\n <div *ngIf=\"!isLoadingStepGroups && stepGroupOptions.length === 0\" class=\"cqa-text-center cqa-py-8 cqa-text-[#9ca3af] cqa-text-[14px]\">\n No step groups available\n </div>\n <!-- Runtime Variables Section -->\n <div *ngIf=\"selectedStepGroup\" class=\"cqa-mt-6 cqa-mb-4\">\n <h3 class=\"cqa-text-[14px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n Set Parameters Default Value\n </h3>\n <div class=\"cqa-border-t cqa-border-gray-200 cqa-pt-4\">\n <!-- Loading State -->\n <div *ngIf=\"isLoadingRuntimeVariables\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading runtime variables...</div>\n </div>\n\n <!-- Runtime Variables Tables -->\n <div *ngIf=\"!isLoadingRuntimeVariables && runtimeVariables\" class=\"cqa-space-y-6\">\n <div *ngFor=\"let childGroup of runtimeVariables; let i = index\" class=\"cqa-mb-6\">\n <h4 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n ( {{i + 1}} ) {{ childGroup.name }}\n </h4>\n <ng-container *ngIf=\"childGroup.variables && childGroup.variables.length > 0; else noVariables\">\n <div class=\"cqa-border cqa-border-gray-200 cqa-rounded-lg cqa-overflow-hidden\">\n <table class=\"cqa-w-full cqa-text-left\">\n <thead class=\"cqa-bg-gray-50\">\n <tr>\n <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n Parameter Name\n </th>\n <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n Parameter Value\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let variable of childGroup.variables; let j = index\" \n class=\"cqa-border-b cqa-border-gray-100 last:cqa-border-b-0\">\n <td class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-text-[#161617]\">\n {{ variable.name }}\n </td>\n <td class=\"cqa-px-4 cqa-py-2\">\n <cqa-custom-input \n [placeholder]=\"'Enter value'\"\n [value]=\"getRuntimeVariableValue(childGroup.id, variable.name)\"\n [fullWidth]=\"true\"\n (valueChange)=\"onRuntimeVariableChange(childGroup.id, variable.name, $event)\">\n </cqa-custom-input>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </ng-container>\n <ng-template #noVariables>\n <p class=\"cqa-text-[12px] cqa-text-[#EF4444] cqa-py-2\">Runtime variable not available</p>\n </ng-template>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2 cqa-rounded-[10px]\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button class=\"cqa-border-solid cqa-rounded-[9px] cqa-w-1/2 cqa-border cqa-border-[#3F43EE]\" variant=\"filled\" [text]=\"editMode ? 'Update Step' : 'Insert Step Group'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!isFormValid()\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>\n\n", components: [{ type: i2.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i3.CustomInputComponent, selector: "cqa-custom-input", inputs: ["label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i4.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
177
+ StepBuilderGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepBuilderGroupComponent, selector: "cqa-step-builder-group", inputs: { stepGroupOptions: "stepGroupOptions", hasMoreStepGroups: "hasMoreStepGroups", isLoadingStepGroups: "isLoadingStepGroups", initialStepGroupId: "initialStepGroupId", editMode: "editMode", runtimeVariables: "runtimeVariables", isLoadingRuntimeVariables: "isLoadingRuntimeVariables", existingRuntimeValues: "existingRuntimeValues" }, outputs: { createStep: "createStep", stepGroupSelected: "stepGroupSelected", cancelled: "cancelled", loadMoreStepGroups: "loadMoreStepGroups", searchStepGroups: "searchStepGroups" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-px-4 cqa-py-2 cqa-h-full\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n {{ editMode ? 'Edit Step Group Test Step' : 'Create Step Group Test Step' }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Step Group Selection -->\n <div class=\"cqa-mb-6\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Select Step Group<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select\n [form]=\"stepGroupForm\"\n [config]=\"stepGroupConfig\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Step Group Description -->\n <!-- <div *ngIf=\"selectedStepGroup\" class=\"cqa-mb-6\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#4b5563]\">Description:</span>\n </div>\n <div class=\"cqa-p-3 cqa-bg-[#f9fafb] cqa-rounded cqa-border cqa-border-[#e5e7eb]\">\n <div class=\"cqa-text-[14px] cqa-text-[#374151]\" [innerHTML]=\"getStepGroupDescription()\">\n </div>\n </div>\n </div> -->\n\n <!-- Runtime Variables Section -->\n <div *ngIf=\"selectedStepGroup\" class=\"cqa-mt-6 cqa-mb-4\">\n <h3 class=\"cqa-text-[14px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n Set Parameters Default Value\n </h3>\n <div class=\"cqa-border-t cqa-border-gray-200 cqa-pt-4\">\n <!-- Loading State -->\n <div *ngIf=\"isLoadingRuntimeVariables\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading runtime variables...</div>\n </div>\n\n <!-- Runtime Variables Tables -->\n <div *ngIf=\"!isLoadingRuntimeVariables && runtimeVariables\" class=\"cqa-space-y-6\">\n <div *ngFor=\"let childGroup of runtimeVariables; let i = index\" class=\"cqa-mb-6\">\n <h4 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n ( {{i + 1}} ) {{ childGroup.name }}\n </h4>\n <ng-container *ngIf=\"childGroup.variables && childGroup.variables.length > 0; else noVariables\">\n <div class=\"cqa-border cqa-border-gray-200 cqa-rounded-lg cqa-overflow-hidden\">\n <table class=\"cqa-w-full cqa-text-left\">\n <thead class=\"cqa-bg-gray-50\">\n <tr>\n <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n Parameter Name\n </th>\n <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n Parameter Value\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let variable of childGroup.variables; let j = index\" \n class=\"cqa-border-b cqa-border-gray-100 last:cqa-border-b-0\">\n <td class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-text-[#161617]\">\n {{ variable.name }}\n </td>\n <td class=\"cqa-px-4 cqa-py-2\">\n <cqa-custom-input \n [placeholder]=\"'Enter value'\"\n [value]=\"getRuntimeVariableValue(childGroup.id, variable.name)\"\n [fullWidth]=\"true\"\n (valueChange)=\"onRuntimeVariableChange(childGroup.id, variable.name, $event)\">\n </cqa-custom-input>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </ng-container>\n <ng-template #noVariables>\n <p class=\"cqa-text-[12px] cqa-text-[#EF4444] cqa-py-2\">Runtime variable not available</p>\n </ng-template>\n </div>\n </div>\n </div>\n </div>\n <!-- Loading State -->\n <div *ngIf=\"isLoadingStepGroups\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading step groups...</div>\n </div>\n\n <!-- Empty State -->\n <div *ngIf=\"!isLoadingStepGroups && stepGroupOptions.length === 0\" class=\"cqa-text-center cqa-py-8 cqa-text-[#9ca3af] cqa-text-[14px]\">\n No step groups available\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2 cqa-rounded-[10px]\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button class=\"cqa-border-solid cqa-rounded-[9px] cqa-w-1/2 cqa-border cqa-border-[#3F43EE]\" variant=\"filled\" [text]=\"editMode ? 'Update Step' : 'Insert Step Group'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!isFormValid()\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>\n\n", components: [{ type: i2.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i3.CustomInputComponent, selector: "cqa-custom-input", inputs: ["label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i4.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
178
178
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderGroupComponent, decorators: [{
179
179
  type: Component,
180
- args: [{ selector: 'cqa-step-builder-group', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-px-4 cqa-py-2 cqa-h-full\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n {{ editMode ? 'Edit Step Group Test Step' : 'Create Step Group Test Step' }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Step Group Selection -->\n <div class=\"cqa-mb-6\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Select Step Group<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select\n [form]=\"stepGroupForm\"\n [config]=\"stepGroupConfig\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Step Group Description -->\n <!-- <div *ngIf=\"selectedStepGroup\" class=\"cqa-mb-6\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#4b5563]\">Description:</span>\n </div>\n <div class=\"cqa-p-3 cqa-bg-[#f9fafb] cqa-rounded cqa-border cqa-border-[#e5e7eb]\">\n <div class=\"cqa-text-[14px] cqa-text-[#374151]\" [innerHTML]=\"getStepGroupDescription()\">\n </div>\n </div>\n </div> -->\n\n <!-- Loading State -->\n <div *ngIf=\"isLoadingStepGroups\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading step groups...</div>\n </div>\n\n <!-- Empty State -->\n <div *ngIf=\"!isLoadingStepGroups && stepGroupOptions.length === 0\" class=\"cqa-text-center cqa-py-8 cqa-text-[#9ca3af] cqa-text-[14px]\">\n No step groups available\n </div>\n <!-- Runtime Variables Section -->\n <div *ngIf=\"selectedStepGroup\" class=\"cqa-mt-6 cqa-mb-4\">\n <h3 class=\"cqa-text-[14px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n Set Parameters Default Value\n </h3>\n <div class=\"cqa-border-t cqa-border-gray-200 cqa-pt-4\">\n <!-- Loading State -->\n <div *ngIf=\"isLoadingRuntimeVariables\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading runtime variables...</div>\n </div>\n\n <!-- Runtime Variables Tables -->\n <div *ngIf=\"!isLoadingRuntimeVariables && runtimeVariables\" class=\"cqa-space-y-6\">\n <div *ngFor=\"let childGroup of runtimeVariables; let i = index\" class=\"cqa-mb-6\">\n <h4 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n ( {{i + 1}} ) {{ childGroup.name }}\n </h4>\n <ng-container *ngIf=\"childGroup.variables && childGroup.variables.length > 0; else noVariables\">\n <div class=\"cqa-border cqa-border-gray-200 cqa-rounded-lg cqa-overflow-hidden\">\n <table class=\"cqa-w-full cqa-text-left\">\n <thead class=\"cqa-bg-gray-50\">\n <tr>\n <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n Parameter Name\n </th>\n <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n Parameter Value\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let variable of childGroup.variables; let j = index\" \n class=\"cqa-border-b cqa-border-gray-100 last:cqa-border-b-0\">\n <td class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-text-[#161617]\">\n {{ variable.name }}\n </td>\n <td class=\"cqa-px-4 cqa-py-2\">\n <cqa-custom-input \n [placeholder]=\"'Enter value'\"\n [value]=\"getRuntimeVariableValue(childGroup.id, variable.name)\"\n [fullWidth]=\"true\"\n (valueChange)=\"onRuntimeVariableChange(childGroup.id, variable.name, $event)\">\n </cqa-custom-input>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </ng-container>\n <ng-template #noVariables>\n <p class=\"cqa-text-[12px] cqa-text-[#EF4444] cqa-py-2\">Runtime variable not available</p>\n </ng-template>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2 cqa-rounded-[10px]\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button class=\"cqa-border-solid cqa-rounded-[9px] cqa-w-1/2 cqa-border cqa-border-[#3F43EE]\" variant=\"filled\" [text]=\"editMode ? 'Update Step' : 'Insert Step Group'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!isFormValid()\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>\n\n", styles: [] }]
180
+ args: [{ selector: 'cqa-step-builder-group', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-px-4 cqa-py-2 cqa-h-full\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n {{ editMode ? 'Edit Step Group Test Step' : 'Create Step Group Test Step' }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Step Group Selection -->\n <div class=\"cqa-mb-6\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Select Step Group<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select\n [form]=\"stepGroupForm\"\n [config]=\"stepGroupConfig\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Step Group Description -->\n <!-- <div *ngIf=\"selectedStepGroup\" class=\"cqa-mb-6\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#4b5563]\">Description:</span>\n </div>\n <div class=\"cqa-p-3 cqa-bg-[#f9fafb] cqa-rounded cqa-border cqa-border-[#e5e7eb]\">\n <div class=\"cqa-text-[14px] cqa-text-[#374151]\" [innerHTML]=\"getStepGroupDescription()\">\n </div>\n </div>\n </div> -->\n\n <!-- Runtime Variables Section -->\n <div *ngIf=\"selectedStepGroup\" class=\"cqa-mt-6 cqa-mb-4\">\n <h3 class=\"cqa-text-[14px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n Set Parameters Default Value\n </h3>\n <div class=\"cqa-border-t cqa-border-gray-200 cqa-pt-4\">\n <!-- Loading State -->\n <div *ngIf=\"isLoadingRuntimeVariables\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading runtime variables...</div>\n </div>\n\n <!-- Runtime Variables Tables -->\n <div *ngIf=\"!isLoadingRuntimeVariables && runtimeVariables\" class=\"cqa-space-y-6\">\n <div *ngFor=\"let childGroup of runtimeVariables; let i = index\" class=\"cqa-mb-6\">\n <h4 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n ( {{i + 1}} ) {{ childGroup.name }}\n </h4>\n <ng-container *ngIf=\"childGroup.variables && childGroup.variables.length > 0; else noVariables\">\n <div class=\"cqa-border cqa-border-gray-200 cqa-rounded-lg cqa-overflow-hidden\">\n <table class=\"cqa-w-full cqa-text-left\">\n <thead class=\"cqa-bg-gray-50\">\n <tr>\n <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n Parameter Name\n </th>\n <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n Parameter Value\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let variable of childGroup.variables; let j = index\" \n class=\"cqa-border-b cqa-border-gray-100 last:cqa-border-b-0\">\n <td class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-text-[#161617]\">\n {{ variable.name }}\n </td>\n <td class=\"cqa-px-4 cqa-py-2\">\n <cqa-custom-input \n [placeholder]=\"'Enter value'\"\n [value]=\"getRuntimeVariableValue(childGroup.id, variable.name)\"\n [fullWidth]=\"true\"\n (valueChange)=\"onRuntimeVariableChange(childGroup.id, variable.name, $event)\">\n </cqa-custom-input>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </ng-container>\n <ng-template #noVariables>\n <p class=\"cqa-text-[12px] cqa-text-[#EF4444] cqa-py-2\">Runtime variable not available</p>\n </ng-template>\n </div>\n </div>\n </div>\n </div>\n <!-- Loading State -->\n <div *ngIf=\"isLoadingStepGroups\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading step groups...</div>\n </div>\n\n <!-- Empty State -->\n <div *ngIf=\"!isLoadingStepGroups && stepGroupOptions.length === 0\" class=\"cqa-text-center cqa-py-8 cqa-text-[#9ca3af] cqa-text-[14px]\">\n No step groups available\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2 cqa-rounded-[10px]\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button class=\"cqa-border-solid cqa-rounded-[9px] cqa-w-1/2 cqa-border cqa-border-[#3F43EE]\" variant=\"filled\" [text]=\"editMode ? 'Update Step' : 'Insert Step Group'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!isFormValid()\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>\n\n", styles: [] }]
181
181
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }]; }, propDecorators: { stepGroupOptions: [{
182
182
  type: Input
183
183
  }], hasMoreStepGroups: [{
@@ -205,4 +205,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
205
205
  }], searchStepGroups: [{
206
206
  type: Output
207
207
  }] } });
208
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc3RlcC1idWlsZGVyL3N0ZXAtYnVpbGRlci1ncm91cC9zdGVwLWJ1aWxkZXItZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWdyb3VwL3N0ZXAtYnVpbGRlci1ncm91cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQXVDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7O0FBMkJqRixNQUFNLE9BQU8seUJBQXlCO0lBNkNwQyxZQUFvQixFQUFlO1FBQWYsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQTVDbkMsc0NBQXNDO1FBQzdCLHFCQUFnQixHQUFzQixFQUFFLENBQUM7UUFFbEQsOERBQThEO1FBQ3JELHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUU1QyxvQ0FBb0M7UUFDM0Isd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBSzlDLDJCQUEyQjtRQUNsQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBS25DLDBDQUEwQztRQUNqQyw4QkFBeUIsR0FBWSxLQUFLLENBQUM7UUFLcEQsZ0NBQWdDO1FBQ3RCLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztRQUU3RCxrRUFBa0U7UUFDeEQsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUV6RCwwQkFBMEI7UUFDaEIsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFL0MsbURBQW1EO1FBQ3pDLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFMUQsZ0RBQWdEO1FBQ3RDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFJeEQsc0JBQWlCLEdBQTJCLElBQUksQ0FBQztRQUNqRCwwQkFBcUIsR0FBMkQsRUFBRSxDQUFDO1FBR2pGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDakMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7U0FDekMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNyQixHQUFHLEVBQUUsYUFBYTtZQUNsQixXQUFXLEVBQUUsbUJBQW1CO1lBQ2hDLFFBQVEsRUFBRSxLQUFLO1lBQ2YsVUFBVSxFQUFFLElBQUk7WUFDaEIsWUFBWSxFQUFFLElBQUk7WUFDbEIsT0FBTyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7WUFDL0IsU0FBUyxFQUFFLElBQUksQ0FBQyxtQkFBbUI7WUFDbkMsT0FBTyxFQUFFLEVBQUU7WUFDWCxRQUFRLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLENBQUM7WUFDRCxRQUFRLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQyxDQUFDO1lBQ0QsVUFBVSxFQUFFLENBQUMsS0FBYyxFQUFFLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUMzQixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztTQUNqQzthQUFNLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0Msd0NBQXdDO1lBQ3hDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsV0FBVyxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO1lBQ2pHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzdCLDBFQUEwRTtZQUMxRSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7YUFDakM7U0FDRjtRQUNELElBQUksT0FBTyxDQUFDLG9CQUFvQixDQUFDLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzVELElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1NBQ2pDO1FBQ0QsSUFBSSxPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDeEQsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7U0FDeEM7UUFDRCxJQUFJLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUNsRSxJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQztTQUN4QztJQUNILENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDM0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDekYsSUFBSSxVQUFVLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztnQkFDeEUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQzthQUNyQztTQUNGO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixNQUFNLE9BQU8sR0FBbUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEUsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ1osS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ2YsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSTtTQUNsQixDQUFDLENBQUMsQ0FBQztRQUVKLElBQUksQ0FBQyxlQUFlLEdBQUc7WUFDckIsR0FBRyxJQUFJLENBQUMsZUFBZTtZQUN2QixPQUFPLEVBQUUsT0FBTztZQUNoQixPQUFPLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtZQUMvQixTQUFTLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtTQUNwQyxDQUFDO0lBQ0osQ0FBQztJQUVELGlCQUFpQixDQUFDLFdBQW1CO1FBQ25DLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLFdBQVcsQ0FBQyxDQUFDO1FBQzdFLElBQUksVUFBVSxFQUFFO1lBQ2QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQztZQUNwQyxrREFBa0Q7WUFDbEQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztZQUNoQyxvRUFBb0U7WUFDcEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUMxQztJQUNILENBQUM7SUFFRCx1QkFBdUI7UUFDckIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsV0FBVyxFQUFFO1lBQ3ZDLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkQsWUFBWSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDO1lBQzVELE9BQU8sWUFBWSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7U0FDdkM7UUFDRCxPQUFPLDBCQUEwQixDQUFDO0lBQ3BDLENBQUM7SUFFTywrQkFBK0I7UUFDckMsbUVBQW1FO1FBQ25FLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFFaEMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDcEMsSUFBSSxLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDakQsTUFBTSxXQUFXLEdBQW9DLEVBQUUsQ0FBQztvQkFDeEQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7d0JBQ2pDLHdGQUF3Rjt3QkFDeEYsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUM5RSxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsSUFBSSxRQUFRLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQztvQkFDOUUsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUM7aUJBQ3BEO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxPQUFlLEVBQUUsU0FBaUIsRUFBRSxLQUFhO1FBQ3ZFLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDeEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztTQUMxQztRQUNELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDekQsQ0FBQztJQUVELHVCQUF1QixDQUFDLE9BQWUsRUFBRSxTQUFpQjtRQUN4RCxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoRSxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNO1lBQy9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUU7WUFDNUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7WUFDM0MsTUFBTSxRQUFRLEdBQXNCO2dCQUNsQyxXQUFXLEVBQUUsU0FBUyxDQUFDLFdBQVc7Z0JBQ2xDLFNBQVMsRUFBRSxJQUFJLENBQUMsaUJBQWlCO2dCQUNqQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMscUJBQXFCO2FBQzdDLENBQUM7WUFDRixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNoQztJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUM5RCxDQUFDOztzSEF6TVUseUJBQXlCOzBHQUF6Qix5QkFBeUIsdW9CQzVCdEMsMnZLQTRHQTsyRkRoRmEseUJBQXlCO2tCQU5yQyxTQUFTOytCQUNFLHdCQUF3QixRQUc1QixFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7a0dBSXJCLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBR0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUdHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBR0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUdJLFVBQVU7c0JBQW5CLE1BQU07Z0JBR0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUdHLFNBQVM7c0JBQWxCLE1BQU07Z0JBR0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUdHLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEeW5hbWljU2VsZWN0RmllbGRDb25maWcsIFNlbGVjdE9wdGlvbiB9IGZyb20gJy4uLy4uL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LWZpZWxkLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcEdyb3VwVmFyaWFibGUge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIHZhcmlhYmxlcz86IEFycmF5PHsgbmFtZTogc3RyaW5nOyBwYXJhbWV0ZXJWYWx1ZT86IHN0cmluZyB9Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGVwR3JvdXBGb3JtRGF0YSB7XG4gIHN0ZXBHcm91cElkOiBudW1iZXI7XG4gIHN0ZXBHcm91cD86IGFueTsgLy8gVGVzdENhc2Ugb2JqZWN0XG4gIHJ1bnRpbWVWYXJpYWJsZXM/OiB7IFtncm91cElkOiBzdHJpbmddOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHN0cmluZyB9IH07IC8vIFJ1bnRpbWUgdmFyaWFibGUgdmFsdWVzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcEdyb3VwT3B0aW9uIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXN0ZXAtYnVpbGRlci1ncm91cCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGVwLWJ1aWxkZXItZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH1cbn0pXG5leHBvcnQgY2xhc3MgU3RlcEJ1aWxkZXJHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgLyoqIE9wdGlvbnMgZm9yIHN0ZXAgZ3JvdXAgZHJvcGRvd24gKi9cbiAgQElucHV0KCkgc3RlcEdyb3VwT3B0aW9uczogU3RlcEdyb3VwT3B0aW9uW10gPSBbXTtcblxuICAvKiogSW5kaWNhdGVzIGlmIG1vcmUgc3RlcCBncm91cHMgYXJlIGF2YWlsYWJsZSBmb3IgbG9hZGluZyAqL1xuICBASW5wdXQoKSBoYXNNb3JlU3RlcEdyb3VwczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBMb2FkaW5nIHN0YXRlIGZvciBzdGVwIGdyb3VwcyAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmdTdGVwR3JvdXBzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEluaXRpYWwgc3RlcCBncm91cCBJRCBmb3IgZWRpdCBtb2RlICovXG4gIEBJbnB1dCgpIGluaXRpYWxTdGVwR3JvdXBJZD86IG51bWJlcjtcblxuICAvKiogV2hldGhlciBpbiBlZGl0IG1vZGUgKi9cbiAgQElucHV0KCkgZWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogUnVudGltZSB2YXJpYWJsZXMgZm9yIHRoZSBzZWxlY3RlZCBzdGVwIGdyb3VwICovXG4gIEBJbnB1dCgpIHJ1bnRpbWVWYXJpYWJsZXM/OiBTdGVwR3JvdXBWYXJpYWJsZVtdO1xuXG4gIC8qKiBMb2FkaW5nIHN0YXRlIGZvciBydW50aW1lIHZhcmlhYmxlcyAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmdSdW50aW1lVmFyaWFibGVzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEV4aXN0aW5nIHJ1bnRpbWUgdmFyaWFibGUgdmFsdWVzIChmcm9tIHRlc3RTdGVwLnRlc3REYXRhRnVuY3Rpb25BcmdzKSAqL1xuICBASW5wdXQoKSBleGlzdGluZ1J1bnRpbWVWYWx1ZXM/OiB7IFtncm91cElkOiBzdHJpbmddOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHN0cmluZyB9IH07XG5cbiAgLyoqIEVtaXQgd2hlbiBzdGVwIGlzIGNyZWF0ZWQgKi9cbiAgQE91dHB1dCgpIGNyZWF0ZVN0ZXAgPSBuZXcgRXZlbnRFbWl0dGVyPFN0ZXBHcm91cEZvcm1EYXRhPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gc3RlcCBncm91cCBpcyBzZWxlY3RlZCB0byBmZXRjaCBydW50aW1lIHZhcmlhYmxlcyAqL1xuICBAT3V0cHV0KCkgc3RlcEdyb3VwU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAvKiogRW1pdCB3aGVuIGNhbmNlbGxlZCAqL1xuICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gbW9yZSBzdGVwIGdyb3VwcyBuZWVkIHRvIGJlIGxvYWRlZCAqL1xuICBAT3V0cHV0KCkgbG9hZE1vcmVTdGVwR3JvdXBzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLyoqIEVtaXQgd2hlbiBzdGVwIGdyb3VwIHNlYXJjaCBxdWVyeSBjaGFuZ2VzICovXG4gIEBPdXRwdXQoKSBzZWFyY2hTdGVwR3JvdXBzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgc3RlcEdyb3VwRm9ybTogRm9ybUdyb3VwO1xuICBzdGVwR3JvdXBDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZztcbiAgc2VsZWN0ZWRTdGVwR3JvdXA6IFN0ZXBHcm91cE9wdGlvbiB8IG51bGwgPSBudWxsO1xuICBydW50aW1lVmFyaWFibGVWYWx1ZXM6IHsgW2dyb3VwSWQ6IHN0cmluZ106IHsgW3BhcmFtTmFtZTogc3RyaW5nXTogc3RyaW5nIH0gfSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyKSB7XG4gICAgdGhpcy5zdGVwR3JvdXBGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBzdGVwR3JvdXBJZDogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0ZXBHcm91cENvbmZpZyA9IHtcbiAgICAgIGtleTogJ3N0ZXBHcm91cElkJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IFN0ZXAgR3JvdXAnLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgIHNlcnZlclNlYXJjaDogdHJ1ZSxcbiAgICAgIGhhc01vcmU6IHRoaXMuaGFzTW9yZVN0ZXBHcm91cHMsXG4gICAgICBpc0xvYWRpbmc6IHRoaXMuaXNMb2FkaW5nU3RlcEdyb3VwcyxcbiAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMub25TdGVwR3JvdXBDaGFuZ2UodmFsdWUpO1xuICAgICAgfSxcbiAgICAgIG9uU2VhcmNoOiAocXVlcnk6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaFN0ZXBHcm91cHMuZW1pdChxdWVyeSk7XG4gICAgICB9LFxuICAgICAgb25Mb2FkTW9yZTogKHF1ZXJ5Pzogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZE1vcmVTdGVwR3JvdXBzLmVtaXQocXVlcnkgfHwgJycpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVN0ZXBHcm91cENvbmZpZygpO1xuICAgIGlmICh0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCkge1xuICAgICAgdGhpcy5zZXRJbml0aWFsU3RlcEdyb3VwVmFsdWUoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RlcEdyb3VwT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBBdXRvLXNlbGVjdCBmaXJzdCBvcHRpb24gaWYgYXZhaWxhYmxlXG4gICAgICBjb25zdCBmaXJzdE9wdGlvbiA9IHRoaXMuc3RlcEdyb3VwT3B0aW9uc1swXTtcbiAgICAgIHRoaXMuc3RlcEdyb3VwRm9ybS5wYXRjaFZhbHVlKHsgc3RlcEdyb3VwSWQ6IGZpcnN0T3B0aW9uLmlkIH0pO1xuICAgICAgdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCA9IGZpcnN0T3B0aW9uO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snc3RlcEdyb3VwT3B0aW9ucyddIHx8IGNoYW5nZXNbJ2hhc01vcmVTdGVwR3JvdXBzJ10gfHwgY2hhbmdlc1snaXNMb2FkaW5nU3RlcEdyb3VwcyddKSB7XG4gICAgICB0aGlzLnVwZGF0ZVN0ZXBHcm91cENvbmZpZygpO1xuICAgICAgLy8gV2hlbiBzdGVwR3JvdXBPcHRpb25zIGNoYW5nZSwgY2hlY2sgaWYgd2UgbmVlZCB0byBzZXQgdGhlIGluaXRpYWwgdmFsdWVcbiAgICAgIGlmICh0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCkge1xuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGVwR3JvdXBWYWx1ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snaW5pdGlhbFN0ZXBHcm91cElkJ10gJiYgdGhpcy5pbml0aWFsU3RlcEdyb3VwSWQpIHtcbiAgICAgIHRoaXMuc2V0SW5pdGlhbFN0ZXBHcm91cFZhbHVlKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydydW50aW1lVmFyaWFibGVzJ10gJiYgdGhpcy5ydW50aW1lVmFyaWFibGVzKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVSdW50aW1lVmFyaWFibGVWYWx1ZXMoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2V4aXN0aW5nUnVudGltZVZhbHVlcyddICYmIHRoaXMuZXhpc3RpbmdSdW50aW1lVmFsdWVzKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVSdW50aW1lVmFyaWFibGVWYWx1ZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEluaXRpYWxTdGVwR3JvdXBWYWx1ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbml0aWFsU3RlcEdyb3VwSWQpIHtcbiAgICAgIGNvbnN0IGZvdW5kR3JvdXAgPSB0aGlzLnN0ZXBHcm91cE9wdGlvbnMuZmluZChvcHQgPT4gb3B0LmlkID09PSB0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCk7XG4gICAgICBpZiAoZm91bmRHcm91cCkge1xuICAgICAgICB0aGlzLnN0ZXBHcm91cEZvcm0ucGF0Y2hWYWx1ZSh7IHN0ZXBHcm91cElkOiB0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCB9KTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCA9IGZvdW5kR3JvdXA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdGVwR3JvdXBDb25maWcoKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSB0aGlzLnN0ZXBHcm91cE9wdGlvbnMubWFwKGdyb3VwID0+ICh7XG4gICAgICBpZDogZ3JvdXAuaWQsXG4gICAgICB2YWx1ZTogZ3JvdXAuaWQsXG4gICAgICBuYW1lOiBncm91cC5uYW1lLFxuICAgICAgbGFiZWw6IGdyb3VwLm5hbWVcbiAgICB9KSk7XG5cbiAgICB0aGlzLnN0ZXBHcm91cENvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuc3RlcEdyb3VwQ29uZmlnLFxuICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgIGhhc01vcmU6IHRoaXMuaGFzTW9yZVN0ZXBHcm91cHMsXG4gICAgICBpc0xvYWRpbmc6IHRoaXMuaXNMb2FkaW5nU3RlcEdyb3Vwc1xuICAgIH07XG4gIH1cblxuICBvblN0ZXBHcm91cENoYW5nZShzdGVwR3JvdXBJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZm91bmRHcm91cCA9IHRoaXMuc3RlcEdyb3VwT3B0aW9ucy5maW5kKG9wdCA9PiBvcHQuaWQgPT09IHN0ZXBHcm91cElkKTtcbiAgICBpZiAoZm91bmRHcm91cCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCA9IGZvdW5kR3JvdXA7XG4gICAgICAvLyBDbGVhciBydW50aW1lIHZhcmlhYmxlcyB3aGVuIHN0ZXAgZ3JvdXAgY2hhbmdlc1xuICAgICAgdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXMgPSB7fTtcbiAgICAgIC8vIEVtaXQgZXZlbnQgdG8gZmV0Y2ggcnVudGltZSB2YXJpYWJsZXMgZm9yIHRoZSBzZWxlY3RlZCBzdGVwIGdyb3VwXG4gICAgICB0aGlzLnN0ZXBHcm91cFNlbGVjdGVkLmVtaXQoc3RlcEdyb3VwSWQpO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0ZXBHcm91cERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTdGVwR3JvdXA/LmRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCB0ZW1wRGVzY0VsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHRlbXBEZXNjRWxlbS5pbm5lckhUTUwgPSB0aGlzLnNlbGVjdGVkU3RlcEdyb3VwLmRlc2NyaXB0aW9uO1xuICAgICAgcmV0dXJuIHRlbXBEZXNjRWxlbS50ZXh0Q29udGVudCB8fCAnJztcbiAgICB9XG4gICAgcmV0dXJuICdObyBkZXNjcmlwdGlvbiBhdmFpbGFibGUnO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplUnVudGltZVZhcmlhYmxlVmFsdWVzKCk6IHZvaWQge1xuICAgIC8vIEluaXRpYWxpemUgcnVudGltZSB2YXJpYWJsZSB2YWx1ZXMgZnJvbSBleGlzdGluZyB2YWx1ZXMgb3IgZW1wdHlcbiAgICB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlcyA9IHt9O1xuICAgIFxuICAgIGlmICh0aGlzLnJ1bnRpbWVWYXJpYWJsZXMpIHtcbiAgICAgIHRoaXMucnVudGltZVZhcmlhYmxlcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgaWYgKGdyb3VwLnZhcmlhYmxlcyAmJiBncm91cC52YXJpYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IGdyb3VwVmFsdWVzOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgICAgICAgZ3JvdXAudmFyaWFibGVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgICAgICAgICAgLy8gVXNlIGV4aXN0aW5nIHZhbHVlIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBjdXJyZW50IHBhcmFtZXRlclZhbHVlIG9yIGVtcHR5IHN0cmluZ1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdWYWx1ZSA9IHRoaXMuZXhpc3RpbmdSdW50aW1lVmFsdWVzPy5bZ3JvdXAuaWRdPy5bdmFyaWFibGUubmFtZV07XG4gICAgICAgICAgICBncm91cFZhbHVlc1t2YXJpYWJsZS5uYW1lXSA9IGV4aXN0aW5nVmFsdWUgfHwgdmFyaWFibGUucGFyYW1ldGVyVmFsdWUgfHwgJyc7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXNbZ3JvdXAuaWRdID0gZ3JvdXBWYWx1ZXM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uUnVudGltZVZhcmlhYmxlQ2hhbmdlKGdyb3VwSWQ6IG51bWJlciwgcGFyYW1OYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucnVudGltZVZhcmlhYmxlVmFsdWVzW2dyb3VwSWRdKSB7XG4gICAgICB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlc1tncm91cElkXSA9IHt9O1xuICAgIH1cbiAgICB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlc1tncm91cElkXVtwYXJhbU5hbWVdID0gdmFsdWU7XG4gIH1cblxuICBnZXRSdW50aW1lVmFyaWFibGVWYWx1ZShncm91cElkOiBudW1iZXIsIHBhcmFtTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXNbZ3JvdXBJZF0/LltwYXJhbU5hbWVdIHx8ICcnO1xuICB9XG5cbiAgaGFzUnVudGltZVZhcmlhYmxlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnJ1bnRpbWVWYXJpYWJsZXM/Lmxlbmd0aCAmJlxuICAgICAgICAgICB0aGlzLnJ1bnRpbWVWYXJpYWJsZXMuc29tZShncm91cCA9PiAhIWdyb3VwLnZhcmlhYmxlcz8ubGVuZ3RoKTtcbiAgfVxuXG4gIG9uQ3JlYXRlU3RlcCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGVwR3JvdXBGb3JtLnZhbGlkKSB7XG4gICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLnN0ZXBHcm91cEZvcm0udmFsdWU7XG4gICAgICBjb25zdCBzdGVwRGF0YTogU3RlcEdyb3VwRm9ybURhdGEgPSB7XG4gICAgICAgIHN0ZXBHcm91cElkOiBmb3JtVmFsdWUuc3RlcEdyb3VwSWQsXG4gICAgICAgIHN0ZXBHcm91cDogdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCxcbiAgICAgICAgcnVudGltZVZhcmlhYmxlczogdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXNcbiAgICAgIH07XG4gICAgICB0aGlzLmNyZWF0ZVN0ZXAuZW1pdChzdGVwRGF0YSk7XG4gICAgfVxuICB9XG5cbiAgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWxsZWQuZW1pdCgpO1xuICB9XG5cbiAgaXNGb3JtVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcEdyb3VwRm9ybS52YWxpZCAmJiAhIXRoaXMuc2VsZWN0ZWRTdGVwR3JvdXA7XG4gIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtYmctd2hpdGUgY3FhLXB4LTQgY3FhLXB5LTIgY3FhLWgtZnVsbFwiPlxuICA8IS0tIEhlYWRlciAtLT5cbiAgPGgyIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LWJsYWNrLTEwMCBjcWEtbWItNFwiPlxuICAgIHt7IGVkaXRNb2RlID8gJ0VkaXQgU3RlcCBHcm91cCBUZXN0IFN0ZXAnIDogJ0NyZWF0ZSBTdGVwIEdyb3VwIFRlc3QgU3RlcCcgfX1cbiAgPC9oMj5cblxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1mbGV4LTEgY3FhLW92ZXJmbG93LXktYXV0b1wiPlxuICAgIDwhLS0gU3RlcCBHcm91cCBTZWxlY3Rpb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1tYi02XCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtbGVhZGluZy1bMTAwJV0gY3FhLWJsb2NrIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0xXCI+XG4gICAgICAgIFNlbGVjdCBTdGVwIEdyb3VwPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bI0VGNDQ0NF0gY3FhLW1sLTAuNVwiPio8L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICBbZm9ybV09XCJzdGVwR3JvdXBGb3JtXCJcbiAgICAgICAgW2NvbmZpZ109XCJzdGVwR3JvdXBDb25maWdcIj5cbiAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTdGVwIEdyb3VwIERlc2NyaXB0aW9uIC0tPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cInNlbGVjdGVkU3RlcEdyb3VwXCIgY2xhc3M9XCJjcWEtbWItNlwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1tYi0yXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzRiNTU2M11cIj5EZXNjcmlwdGlvbjo8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtcC0zIGNxYS1iZy1bI2Y5ZmFmYl0gY3FhLXJvdW5kZWQgY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjZTVlN2ViXVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS10ZXh0LVsjMzc0MTUxXVwiIFtpbm5lckhUTUxdPVwiZ2V0U3RlcEdyb3VwRGVzY3JpcHRpb24oKVwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cblxuICAgIDwhLS0gTG9hZGluZyBTdGF0ZSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nU3RlcEdyb3Vwc1wiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWp1c3RpZnktY2VudGVyIGNxYS1pdGVtcy1jZW50ZXIgY3FhLXB5LThcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTRweF0gY3FhLXRleHQtWyM2YjcyODBdXCI+TG9hZGluZyBzdGVwIGdyb3Vwcy4uLjwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBFbXB0eSBTdGF0ZSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiIWlzTG9hZGluZ1N0ZXBHcm91cHMgJiYgc3RlcEdyb3VwT3B0aW9ucy5sZW5ndGggPT09IDBcIiBjbGFzcz1cImNxYS10ZXh0LWNlbnRlciBjcWEtcHktOCBjcWEtdGV4dC1bIzljYTNhZl0gY3FhLXRleHQtWzE0cHhdXCI+XG4gICAgICBObyBzdGVwIGdyb3VwcyBhdmFpbGFibGVcbiAgICA8L2Rpdj5cbiAgICA8IS0tIFJ1bnRpbWUgVmFyaWFibGVzIFNlY3Rpb24gLS0+XG4gICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkU3RlcEdyb3VwXCIgY2xhc3M9XCJjcWEtbXQtNiBjcWEtbWItNFwiPlxuICAgICAgPGgzIGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItM1wiPlxuICAgICAgICBTZXQgUGFyYW1ldGVycyBEZWZhdWx0IFZhbHVlXG4gICAgICA8L2gzPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1ib3JkZXItdCBjcWEtYm9yZGVyLWdyYXktMjAwIGNxYS1wdC00XCI+XG4gICAgICAgIDwhLS0gTG9hZGluZyBTdGF0ZSAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ1J1bnRpbWVWYXJpYWJsZXNcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtaXRlbXMtY2VudGVyIGNxYS1weS04XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtdGV4dC1bIzZiNzI4MF1cIj5Mb2FkaW5nIHJ1bnRpbWUgdmFyaWFibGVzLi4uPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gUnVudGltZSBWYXJpYWJsZXMgVGFibGVzIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzTG9hZGluZ1J1bnRpbWVWYXJpYWJsZXMgJiYgcnVudGltZVZhcmlhYmxlc1wiIGNsYXNzPVwiY3FhLXNwYWNlLXktNlwiPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNoaWxkR3JvdXAgb2YgcnVudGltZVZhcmlhYmxlczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwiY3FhLW1iLTZcIj5cbiAgICAgICAgICAgIDxoNCBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTNcIj5cbiAgICAgICAgICAgICAgKCB7e2kgKyAxfX0gKSB7eyBjaGlsZEdyb3VwLm5hbWUgfX1cbiAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hpbGRHcm91cC52YXJpYWJsZXMgJiYgY2hpbGRHcm91cC52YXJpYWJsZXMubGVuZ3RoID4gMDsgZWxzZSBub1ZhcmlhYmxlc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWJvcmRlciBjcWEtYm9yZGVyLWdyYXktMjAwIGNxYS1yb3VuZGVkLWxnIGNxYS1vdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJjcWEtdy1mdWxsIGNxYS10ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgICAgICAgIDx0aGVhZCBjbGFzcz1cImNxYS1iZy1ncmF5LTUwXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjcWEtcHgtNCBjcWEtcHktMiBjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMxNjE2MTddIGNxYS1ib3JkZXItYiBjcWEtYm9yZGVyLWdyYXktMjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBQYXJhbWV0ZXIgTmFtZVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3FhLXB4LTQgY3FhLXB5LTIgY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtYm9yZGVyLWIgY3FhLWJvcmRlci1ncmF5LTIwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgUGFyYW1ldGVyIFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgdmFyaWFibGUgb2YgY2hpbGRHcm91cC52YXJpYWJsZXM7IGxldCBqID0gaW5kZXhcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3FhLWJvcmRlci1iIGNxYS1ib3JkZXItZ3JheS0xMDAgbGFzdDpjcWEtYm9yZGVyLWItMFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImNxYS1weC00IGNxYS1weS0yIGNxYS10ZXh0LVsxMnB4XSBjcWEtdGV4dC1bIzE2MTYxN11cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHZhcmlhYmxlLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImNxYS1weC00IGNxYS1weS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidFbnRlciB2YWx1ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0UnVudGltZVZhcmlhYmxlVmFsdWUoY2hpbGRHcm91cC5pZCwgdmFyaWFibGUubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25SdW50aW1lVmFyaWFibGVDaGFuZ2UoY2hpbGRHcm91cC5pZCwgdmFyaWFibGUubmFtZSwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vVmFyaWFibGVzPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtdGV4dC1bI0VGNDQ0NF0gY3FhLXB5LTJcIj5SdW50aW1lIHZhcmlhYmxlIG5vdCBhdmFpbGFibGU8L3A+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLXctZnVsbCBjcWEtZ2FwLTIgY3FhLW10LWF1dG8gY3FhLXB0LTQgY3FhLWJvcmRlci10IGNxYS1ib3JkZXItZ3JheS0yMDBcIj5cbiAgICA8Y3FhLWJ1dHRvbiBjbGFzcz1cImNxYS13LTEvMiBjcWEtcm91bmRlZC1bMTBweF1cIiB2YXJpYW50PVwib3V0bGluZWRcIiB0ZXh0PVwiQ2FuY2VsXCIgW2N1c3RvbUNsYXNzXT1cIidjcWEtZmxleC0xIGNxYS13LWZ1bGwnXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ2FuY2VsKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gICAgPGNxYS1idXR0b24gY2xhc3M9XCJjcWEtYm9yZGVyLXNvbGlkIGNxYS1yb3VuZGVkLVs5cHhdIGNxYS13LTEvMiBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyMzRjQzRUVdXCIgdmFyaWFudD1cImZpbGxlZFwiIFt0ZXh0XT1cImVkaXRNb2RlID8gJ1VwZGF0ZSBTdGVwJyA6ICdJbnNlcnQgU3RlcCBHcm91cCdcIiBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1mbGV4LTEgY3FhLXctZnVsbCdcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFpc0Zvcm1WYWxpZCgpXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ3JlYXRlU3RlcCgpXCI+XG4gICAgPC9jcWEtYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc3RlcC1idWlsZGVyL3N0ZXAtYnVpbGRlci1ncm91cC9zdGVwLWJ1aWxkZXItZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWdyb3VwL3N0ZXAtYnVpbGRlci1ncm91cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQXVDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7O0FBMkJqRixNQUFNLE9BQU8seUJBQXlCO0lBNkNwQyxZQUFvQixFQUFlO1FBQWYsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQTVDbkMsc0NBQXNDO1FBQzdCLHFCQUFnQixHQUFzQixFQUFFLENBQUM7UUFFbEQsOERBQThEO1FBQ3JELHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUU1QyxvQ0FBb0M7UUFDM0Isd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBSzlDLDJCQUEyQjtRQUNsQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBS25DLDBDQUEwQztRQUNqQyw4QkFBeUIsR0FBWSxLQUFLLENBQUM7UUFLcEQsZ0NBQWdDO1FBQ3RCLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztRQUU3RCxrRUFBa0U7UUFDeEQsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUV6RCwwQkFBMEI7UUFDaEIsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFL0MsbURBQW1EO1FBQ3pDLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFMUQsZ0RBQWdEO1FB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LE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUM5RCxDQUFDOztzSEF6TVUseUJBQXlCOzBHQUF6Qix5QkFBeUIsdW9CQzVCdEMsMnZLQTRHQTsyRkRoRmEseUJBQXlCO2tCQU5yQyxTQUFTOytCQUNFLHdCQUF3QixRQUc1QixFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7a0dBSXJCLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBR0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUdHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBR0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUdJLFVBQVU7c0JBQW5CLE1BQU07Z0JBR0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUdHLFNBQVM7c0JBQWxCLE1BQU07Z0JBR0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUdHLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEeW5hbWljU2VsZWN0RmllbGRDb25maWcsIFNlbGVjdE9wdGlvbiB9IGZyb20gJy4uLy4uL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LWZpZWxkLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcEdyb3VwVmFyaWFibGUge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIHZhcmlhYmxlcz86IEFycmF5PHsgbmFtZTogc3RyaW5nOyBwYXJhbWV0ZXJWYWx1ZT86IHN0cmluZyB9Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGVwR3JvdXBGb3JtRGF0YSB7XG4gIHN0ZXBHcm91cElkOiBudW1iZXI7XG4gIHN0ZXBHcm91cD86IGFueTsgLy8gVGVzdENhc2Ugb2JqZWN0XG4gIHJ1bnRpbWVWYXJpYWJsZXM/OiB7IFtncm91cElkOiBzdHJpbmddOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHN0cmluZyB9IH07IC8vIFJ1bnRpbWUgdmFyaWFibGUgdmFsdWVzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcEdyb3VwT3B0aW9uIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXN0ZXAtYnVpbGRlci1ncm91cCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGVwLWJ1aWxkZXItZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH1cbn0pXG5leHBvcnQgY2xhc3MgU3RlcEJ1aWxkZXJHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgLyoqIE9wdGlvbnMgZm9yIHN0ZXAgZ3JvdXAgZHJvcGRvd24gKi9cbiAgQElucHV0KCkgc3RlcEdyb3VwT3B0aW9uczogU3RlcEdyb3VwT3B0aW9uW10gPSBbXTtcblxuICAvKiogSW5kaWNhdGVzIGlmIG1vcmUgc3RlcCBncm91cHMgYXJlIGF2YWlsYWJsZSBmb3IgbG9hZGluZyAqL1xuICBASW5wdXQoKSBoYXNNb3JlU3RlcEdyb3VwczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBMb2FkaW5nIHN0YXRlIGZvciBzdGVwIGdyb3VwcyAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmdTdGVwR3JvdXBzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEluaXRpYWwgc3RlcCBncm91cCBJRCBmb3IgZWRpdCBtb2RlICovXG4gIEBJbnB1dCgpIGluaXRpYWxTdGVwR3JvdXBJZD86IG51bWJlcjtcblxuICAvKiogV2hldGhlciBpbiBlZGl0IG1vZGUgKi9cbiAgQElucHV0KCkgZWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogUnVudGltZSB2YXJpYWJsZXMgZm9yIHRoZSBzZWxlY3RlZCBzdGVwIGdyb3VwICovXG4gIEBJbnB1dCgpIHJ1bnRpbWVWYXJpYWJsZXM/OiBTdGVwR3JvdXBWYXJpYWJsZVtdO1xuXG4gIC8qKiBMb2FkaW5nIHN0YXRlIGZvciBydW50aW1lIHZhcmlhYmxlcyAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmdSdW50aW1lVmFyaWFibGVzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEV4aXN0aW5nIHJ1bnRpbWUgdmFyaWFibGUgdmFsdWVzIChmcm9tIHRlc3RTdGVwLnRlc3REYXRhRnVuY3Rpb25BcmdzKSAqL1xuICBASW5wdXQoKSBleGlzdGluZ1J1bnRpbWVWYWx1ZXM/OiB7IFtncm91cElkOiBzdHJpbmddOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHN0cmluZyB9IH07XG5cbiAgLyoqIEVtaXQgd2hlbiBzdGVwIGlzIGNyZWF0ZWQgKi9cbiAgQE91dHB1dCgpIGNyZWF0ZVN0ZXAgPSBuZXcgRXZlbnRFbWl0dGVyPFN0ZXBHcm91cEZvcm1EYXRhPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gc3RlcCBncm91cCBpcyBzZWxlY3RlZCB0byBmZXRjaCBydW50aW1lIHZhcmlhYmxlcyAqL1xuICBAT3V0cHV0KCkgc3RlcEdyb3VwU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAvKiogRW1pdCB3aGVuIGNhbmNlbGxlZCAqL1xuICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gbW9yZSBzdGVwIGdyb3VwcyBuZWVkIHRvIGJlIGxvYWRlZCAqL1xuICBAT3V0cHV0KCkgbG9hZE1vcmVTdGVwR3JvdXBzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLyoqIEVtaXQgd2hlbiBzdGVwIGdyb3VwIHNlYXJjaCBxdWVyeSBjaGFuZ2VzICovXG4gIEBPdXRwdXQoKSBzZWFyY2hTdGVwR3JvdXBzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgc3RlcEdyb3VwRm9ybTogRm9ybUdyb3VwO1xuICBzdGVwR3JvdXBDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZztcbiAgc2VsZWN0ZWRTdGVwR3JvdXA6IFN0ZXBHcm91cE9wdGlvbiB8IG51bGwgPSBudWxsO1xuICBydW50aW1lVmFyaWFibGVWYWx1ZXM6IHsgW2dyb3VwSWQ6IHN0cmluZ106IHsgW3BhcmFtTmFtZTogc3RyaW5nXTogc3RyaW5nIH0gfSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyKSB7XG4gICAgdGhpcy5zdGVwR3JvdXBGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBzdGVwR3JvdXBJZDogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0ZXBHcm91cENvbmZpZyA9IHtcbiAgICAgIGtleTogJ3N0ZXBHcm91cElkJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IFN0ZXAgR3JvdXAnLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgIHNlcnZlclNlYXJjaDogdHJ1ZSxcbiAgICAgIGhhc01vcmU6IHRoaXMuaGFzTW9yZVN0ZXBHcm91cHMsXG4gICAgICBpc0xvYWRpbmc6IHRoaXMuaXNMb2FkaW5nU3RlcEdyb3VwcyxcbiAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMub25TdGVwR3JvdXBDaGFuZ2UodmFsdWUpO1xuICAgICAgfSxcbiAgICAgIG9uU2VhcmNoOiAocXVlcnk6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaFN0ZXBHcm91cHMuZW1pdChxdWVyeSk7XG4gICAgICB9LFxuICAgICAgb25Mb2FkTW9yZTogKHF1ZXJ5Pzogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZE1vcmVTdGVwR3JvdXBzLmVtaXQocXVlcnkgfHwgJycpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVN0ZXBHcm91cENvbmZpZygpO1xuICAgIGlmICh0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCkge1xuICAgICAgdGhpcy5zZXRJbml0aWFsU3RlcEdyb3VwVmFsdWUoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RlcEdyb3VwT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBBdXRvLXNlbGVjdCBmaXJzdCBvcHRpb24gaWYgYXZhaWxhYmxlXG4gICAgICBjb25zdCBmaXJzdE9wdGlvbiA9IHRoaXMuc3RlcEdyb3VwT3B0aW9uc1swXTtcbiAgICAgIHRoaXMuc3RlcEdyb3VwRm9ybS5wYXRjaFZhbHVlKHsgc3RlcEdyb3VwSWQ6IGZpcnN0T3B0aW9uLmlkIH0pO1xuICAgICAgdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCA9IGZpcnN0T3B0aW9uO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snc3RlcEdyb3VwT3B0aW9ucyddIHx8IGNoYW5nZXNbJ2hhc01vcmVTdGVwR3JvdXBzJ10gfHwgY2hhbmdlc1snaXNMb2FkaW5nU3RlcEdyb3VwcyddKSB7XG4gICAgICB0aGlzLnVwZGF0ZVN0ZXBHcm91cENvbmZpZygpO1xuICAgICAgLy8gV2hlbiBzdGVwR3JvdXBPcHRpb25zIGNoYW5nZSwgY2hlY2sgaWYgd2UgbmVlZCB0byBzZXQgdGhlIGluaXRpYWwgdmFsdWVcbiAgICAgIGlmICh0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCkge1xuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGVwR3JvdXBWYWx1ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snaW5pdGlhbFN0ZXBHcm91cElkJ10gJiYgdGhpcy5pbml0aWFsU3RlcEdyb3VwSWQpIHtcbiAgICAgIHRoaXMuc2V0SW5pdGlhbFN0ZXBHcm91cFZhbHVlKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydydW50aW1lVmFyaWFibGVzJ10gJiYgdGhpcy5ydW50aW1lVmFyaWFibGVzKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVSdW50aW1lVmFyaWFibGVWYWx1ZXMoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2V4aXN0aW5nUnVudGltZVZhbHVlcyddICYmIHRoaXMuZXhpc3RpbmdSdW50aW1lVmFsdWVzKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVSdW50aW1lVmFyaWFibGVWYWx1ZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEluaXRpYWxTdGVwR3JvdXBWYWx1ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbml0aWFsU3RlcEdyb3VwSWQpIHtcbiAgICAgIGNvbnN0IGZvdW5kR3JvdXAgPSB0aGlzLnN0ZXBHcm91cE9wdGlvbnMuZmluZChvcHQgPT4gb3B0LmlkID09PSB0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCk7XG4gICAgICBpZiAoZm91bmRHcm91cCkge1xuICAgICAgICB0aGlzLnN0ZXBHcm91cEZvcm0ucGF0Y2hWYWx1ZSh7IHN0ZXBHcm91cElkOiB0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCB9KTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCA9IGZvdW5kR3JvdXA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdGVwR3JvdXBDb25maWcoKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSB0aGlzLnN0ZXBHcm91cE9wdGlvbnMubWFwKGdyb3VwID0+ICh7XG4gICAgICBpZDogZ3JvdXAuaWQsXG4gICAgICB2YWx1ZTogZ3JvdXAuaWQsXG4gICAgICBuYW1lOiBncm91cC5uYW1lLFxuICAgICAgbGFiZWw6IGdyb3VwLm5hbWVcbiAgICB9KSk7XG5cbiAgICB0aGlzLnN0ZXBHcm91cENvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuc3RlcEdyb3VwQ29uZmlnLFxuICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgIGhhc01vcmU6IHRoaXMuaGFzTW9yZVN0ZXBHcm91cHMsXG4gICAgICBpc0xvYWRpbmc6IHRoaXMuaXNMb2FkaW5nU3RlcEdyb3Vwc1xuICAgIH07XG4gIH1cblxuICBvblN0ZXBHcm91cENoYW5nZShzdGVwR3JvdXBJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZm91bmRHcm91cCA9IHRoaXMuc3RlcEdyb3VwT3B0aW9ucy5maW5kKG9wdCA9PiBvcHQuaWQgPT09IHN0ZXBHcm91cElkKTtcbiAgICBpZiAoZm91bmRHcm91cCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCA9IGZvdW5kR3JvdXA7XG4gICAgICAvLyBDbGVhciBydW50aW1lIHZhcmlhYmxlcyB3aGVuIHN0ZXAgZ3JvdXAgY2hhbmdlc1xuICAgICAgdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXMgPSB7fTtcbiAgICAgIC8vIEVtaXQgZXZlbnQgdG8gZmV0Y2ggcnVudGltZSB2YXJpYWJsZXMgZm9yIHRoZSBzZWxlY3RlZCBzdGVwIGdyb3VwXG4gICAgICB0aGlzLnN0ZXBHcm91cFNlbGVjdGVkLmVtaXQoc3RlcEdyb3VwSWQpO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0ZXBHcm91cERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTdGVwR3JvdXA/LmRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCB0ZW1wRGVzY0VsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHRlbXBEZXNjRWxlbS5pbm5lckhUTUwgPSB0aGlzLnNlbGVjdGVkU3RlcEdyb3VwLmRlc2NyaXB0aW9uO1xuICAgICAgcmV0dXJuIHRlbXBEZXNjRWxlbS50ZXh0Q29udGVudCB8fCAnJztcbiAgICB9XG4gICAgcmV0dXJuICdObyBkZXNjcmlwdGlvbiBhdmFpbGFibGUnO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplUnVudGltZVZhcmlhYmxlVmFsdWVzKCk6IHZvaWQge1xuICAgIC8vIEluaXRpYWxpemUgcnVudGltZSB2YXJpYWJsZSB2YWx1ZXMgZnJvbSBleGlzdGluZyB2YWx1ZXMgb3IgZW1wdHlcbiAgICB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlcyA9IHt9O1xuICAgIFxuICAgIGlmICh0aGlzLnJ1bnRpbWVWYXJpYWJsZXMpIHtcbiAgICAgIHRoaXMucnVudGltZVZhcmlhYmxlcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgaWYgKGdyb3VwLnZhcmlhYmxlcyAmJiBncm91cC52YXJpYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IGdyb3VwVmFsdWVzOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgICAgICAgZ3JvdXAudmFyaWFibGVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgICAgICAgICAgLy8gVXNlIGV4aXN0aW5nIHZhbHVlIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBjdXJyZW50IHBhcmFtZXRlclZhbHVlIG9yIGVtcHR5IHN0cmluZ1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdWYWx1ZSA9IHRoaXMuZXhpc3RpbmdSdW50aW1lVmFsdWVzPy5bZ3JvdXAuaWRdPy5bdmFyaWFibGUubmFtZV07XG4gICAgICAgICAgICBncm91cFZhbHVlc1t2YXJpYWJsZS5uYW1lXSA9IGV4aXN0aW5nVmFsdWUgfHwgdmFyaWFibGUucGFyYW1ldGVyVmFsdWUgfHwgJyc7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXNbZ3JvdXAuaWRdID0gZ3JvdXBWYWx1ZXM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uUnVudGltZVZhcmlhYmxlQ2hhbmdlKGdyb3VwSWQ6IG51bWJlciwgcGFyYW1OYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucnVudGltZVZhcmlhYmxlVmFsdWVzW2dyb3VwSWRdKSB7XG4gICAgICB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlc1tncm91cElkXSA9IHt9O1xuICAgIH1cbiAgICB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlc1tncm91cElkXVtwYXJhbU5hbWVdID0gdmFsdWU7XG4gIH1cblxuICBnZXRSdW50aW1lVmFyaWFibGVWYWx1ZShncm91cElkOiBudW1iZXIsIHBhcmFtTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXNbZ3JvdXBJZF0/LltwYXJhbU5hbWVdIHx8ICcnO1xuICB9XG5cbiAgaGFzUnVudGltZVZhcmlhYmxlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnJ1bnRpbWVWYXJpYWJsZXM/Lmxlbmd0aCAmJlxuICAgICAgICAgICB0aGlzLnJ1bnRpbWVWYXJpYWJsZXMuc29tZShncm91cCA9PiAhIWdyb3VwLnZhcmlhYmxlcz8ubGVuZ3RoKTtcbiAgfVxuXG4gIG9uQ3JlYXRlU3RlcCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGVwR3JvdXBGb3JtLnZhbGlkKSB7XG4gICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLnN0ZXBHcm91cEZvcm0udmFsdWU7XG4gICAgICBjb25zdCBzdGVwRGF0YTogU3RlcEdyb3VwRm9ybURhdGEgPSB7XG4gICAgICAgIHN0ZXBHcm91cElkOiBmb3JtVmFsdWUuc3RlcEdyb3VwSWQsXG4gICAgICAgIHN0ZXBHcm91cDogdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCxcbiAgICAgICAgcnVudGltZVZhcmlhYmxlczogdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXNcbiAgICAgIH07XG4gICAgICB0aGlzLmNyZWF0ZVN0ZXAuZW1pdChzdGVwRGF0YSk7XG4gICAgfVxuICB9XG5cbiAgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWxsZWQuZW1pdCgpO1xuICB9XG5cbiAgaXNGb3JtVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcEdyb3VwRm9ybS52YWxpZCAmJiAhIXRoaXMuc2VsZWN0ZWRTdGVwR3JvdXA7XG4gIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtYmctd2hpdGUgY3FhLXB4LTQgY3FhLXB5LTIgY3FhLWgtZnVsbFwiPlxuICA8IS0tIEhlYWRlciAtLT5cbiAgPGgyIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LWJsYWNrLTEwMCBjcWEtbWItNFwiPlxuICAgIHt7IGVkaXRNb2RlID8gJ0VkaXQgU3RlcCBHcm91cCBUZXN0IFN0ZXAnIDogJ0NyZWF0ZSBTdGVwIEdyb3VwIFRlc3QgU3RlcCcgfX1cbiAgPC9oMj5cblxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1mbGV4LTEgY3FhLW92ZXJmbG93LXktYXV0b1wiPlxuICAgIDwhLS0gU3RlcCBHcm91cCBTZWxlY3Rpb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1tYi02XCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtbGVhZGluZy1bMTAwJV0gY3FhLWJsb2NrIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0xXCI+XG4gICAgICAgIFNlbGVjdCBTdGVwIEdyb3VwPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bI0VGNDQ0NF0gY3FhLW1sLTAuNVwiPio8L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICBbZm9ybV09XCJzdGVwR3JvdXBGb3JtXCJcbiAgICAgICAgW2NvbmZpZ109XCJzdGVwR3JvdXBDb25maWdcIj5cbiAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTdGVwIEdyb3VwIERlc2NyaXB0aW9uIC0tPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cInNlbGVjdGVkU3RlcEdyb3VwXCIgY2xhc3M9XCJjcWEtbWItNlwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1tYi0yXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzRiNTU2M11cIj5EZXNjcmlwdGlvbjo8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtcC0zIGNxYS1iZy1bI2Y5ZmFmYl0gY3FhLXJvdW5kZWQgY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjZTVlN2ViXVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS10ZXh0LVsjMzc0MTUxXVwiIFtpbm5lckhUTUxdPVwiZ2V0U3RlcEdyb3VwRGVzY3JpcHRpb24oKVwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cblxuICAgIDwhLS0gUnVudGltZSBWYXJpYWJsZXMgU2VjdGlvbiAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRTdGVwR3JvdXBcIiBjbGFzcz1cImNxYS1tdC02IGNxYS1tYi00XCI+XG4gICAgICA8aDMgY2xhc3M9XCJjcWEtdGV4dC1bMTRweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0zXCI+XG4gICAgICAgIFNldCBQYXJhbWV0ZXJzIERlZmF1bHQgVmFsdWVcbiAgICAgIDwvaDM+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWJvcmRlci10IGNxYS1ib3JkZXItZ3JheS0yMDAgY3FhLXB0LTRcIj5cbiAgICAgICAgPCEtLSBMb2FkaW5nIFN0YXRlIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nUnVudGltZVZhcmlhYmxlc1wiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWp1c3RpZnktY2VudGVyIGNxYS1pdGVtcy1jZW50ZXIgY3FhLXB5LThcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS10ZXh0LVsjNmI3MjgwXVwiPkxvYWRpbmcgcnVudGltZSB2YXJpYWJsZXMuLi48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBSdW50aW1lIFZhcmlhYmxlcyBUYWJsZXMgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhaXNMb2FkaW5nUnVudGltZVZhcmlhYmxlcyAmJiBydW50aW1lVmFyaWFibGVzXCIgY2xhc3M9XCJjcWEtc3BhY2UteS02XCI+XG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY2hpbGRHcm91cCBvZiBydW50aW1lVmFyaWFibGVzOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJjcWEtbWItNlwiPlxuICAgICAgICAgICAgPGg0IGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItM1wiPlxuICAgICAgICAgICAgICAoIHt7aSArIDF9fSApIHt7IGNoaWxkR3JvdXAubmFtZSB9fVxuICAgICAgICAgICAgPC9oND5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGlsZEdyb3VwLnZhcmlhYmxlcyAmJiBjaGlsZEdyb3VwLnZhcmlhYmxlcy5sZW5ndGggPiAwOyBlbHNlIG5vVmFyaWFibGVzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYm9yZGVyIGNxYS1ib3JkZXItZ3JheS0yMDAgY3FhLXJvdW5kZWQtbGcgY3FhLW92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImNxYS13LWZ1bGwgY3FhLXRleHQtbGVmdFwiPlxuICAgICAgICAgICAgICAgICAgPHRoZWFkIGNsYXNzPVwiY3FhLWJnLWdyYXktNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImNxYS1weC00IGNxYS1weS0yIGNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLWJvcmRlci1iIGNxYS1ib3JkZXItZ3JheS0yMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFtZXRlciBOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjcWEtcHgtNCBjcWEtcHktMiBjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMxNjE2MTddIGNxYS1ib3JkZXItYiBjcWEtYm9yZGVyLWdyYXktMjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBQYXJhbWV0ZXIgVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCB2YXJpYWJsZSBvZiBjaGlsZEdyb3VwLnZhcmlhYmxlczsgbGV0IGogPSBpbmRleFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtYm9yZGVyLWIgY3FhLWJvcmRlci1ncmF5LTEwMCBsYXN0OmNxYS1ib3JkZXItYi0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY3FhLXB4LTQgY3FhLXB5LTIgY3FhLXRleHQtWzEycHhdIGNxYS10ZXh0LVsjMTYxNjE3XVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgdmFyaWFibGUubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiY3FhLXB4LTQgY3FhLXB5LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxjcWEtY3VzdG9tLWlucHV0IFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0VudGVyIHZhbHVlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRSdW50aW1lVmFyaWFibGVWYWx1ZShjaGlsZEdyb3VwLmlkLCB2YXJpYWJsZS5uYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvblJ1bnRpbWVWYXJpYWJsZUNoYW5nZShjaGlsZEdyb3VwLmlkLCB2YXJpYWJsZS5uYW1lLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9WYXJpYWJsZXM+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS10ZXh0LVsjRUY0NDQ0XSBjcWEtcHktMlwiPlJ1bnRpbWUgdmFyaWFibGUgbm90IGF2YWlsYWJsZTwvcD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBMb2FkaW5nIFN0YXRlIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdTdGVwR3JvdXBzXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlciBjcWEtcHktOFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtdGV4dC1bIzZiNzI4MF1cIj5Mb2FkaW5nIHN0ZXAgZ3JvdXBzLi4uPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEVtcHR5IFN0YXRlIC0tPlxuICAgIDxkaXYgKm5nSWY9XCIhaXNMb2FkaW5nU3RlcEdyb3VwcyAmJiBzdGVwR3JvdXBPcHRpb25zLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwiY3FhLXRleHQtY2VudGVyIGNxYS1weS04IGNxYS10ZXh0LVsjOWNhM2FmXSBjcWEtdGV4dC1bMTRweF1cIj5cbiAgICAgIE5vIHN0ZXAgZ3JvdXBzIGF2YWlsYWJsZVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLXctZnVsbCBjcWEtZ2FwLTIgY3FhLW10LWF1dG8gY3FhLXB0LTQgY3FhLWJvcmRlci10IGNxYS1ib3JkZXItZ3JheS0yMDBcIj5cbiAgICA8Y3FhLWJ1dHRvbiBjbGFzcz1cImNxYS13LTEvMiBjcWEtcm91bmRlZC1bMTBweF1cIiB2YXJpYW50PVwib3V0bGluZWRcIiB0ZXh0PVwiQ2FuY2VsXCIgW2N1c3RvbUNsYXNzXT1cIidjcWEtZmxleC0xIGNxYS13LWZ1bGwnXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ2FuY2VsKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gICAgPGNxYS1idXR0b24gY2xhc3M9XCJjcWEtYm9yZGVyLXNvbGlkIGNxYS1yb3VuZGVkLVs5cHhdIGNxYS13LTEvMiBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyMzRjQzRUVdXCIgdmFyaWFudD1cImZpbGxlZFwiIFt0ZXh0XT1cImVkaXRNb2RlID8gJ1VwZGF0ZSBTdGVwJyA6ICdJbnNlcnQgU3RlcCBHcm91cCdcIiBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1mbGV4LTEgY3FhLXctZnVsbCdcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFpc0Zvcm1WYWxpZCgpXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ3JlYXRlU3RlcCgpXCI+XG4gICAgPC9jcWEtYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=