@cqa-lib/cqa-ui 1.1.300 → 1.1.302

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.
@@ -385,10 +385,10 @@ export class StepBuilderAiAgentComponent {
385
385
  }
386
386
  }
387
387
  StepBuilderAiAgentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderAiAgentComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
388
- StepBuilderAiAgentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepBuilderAiAgentComponent, selector: "cqa-step-builder-ai-agent", inputs: { typeOptions: "typeOptions", environmentOptions: "environmentOptions", hasMoreEnvironments: "hasMoreEnvironments", isLoadingEnvironments: "isLoadingEnvironments", retryCountOptions: "retryCountOptions", iframeLocatorOptions: "iframeLocatorOptions", otherLocatorsOptions: "otherLocatorsOptions", initialQuery: "initialQuery", initialType: "initialType", initialDescription: "initialDescription", initialEnvironments: "initialEnvironments", initialMetadata: "initialMetadata", initialDisabled: "initialDisabled", initialContinueOnError: "initialContinueOnError", initialRetryCount: "initialRetryCount", initialIframeLocator: "initialIframeLocator", initialOtherLocators: "initialOtherLocators", editMode: "editMode", advancedSettingsVariables: "advancedSettingsVariables" }, outputs: { createStep: "createStep", cancelled: "cancelled", searchEnvironments: "searchEnvironments", loadMoreEnvironments: "loadMoreEnvironments" }, 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 AI Step' : 'Create AI Step' }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- What should the agent achieve? -->\n <div class=\"cqa-mb-6\">\n <label class=\"cqa-text-[14px] cqa-font-medium cqa-text-gray-700 cqa-mb-1 cqa-block\">\n What should the agent achieve?<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-custom-textarea\n class=\"cqa-step-builder-ai-agent-textarea\"\n [placeholder]=\"'What should the agent achieve?'\"\n [value]=\"aiAgentForm.get('query')?.value\"\n [fullWidth]=\"true\"\n [rows]=\"4\"\n (valueChange)=\"aiAgentForm.get('query')?.setValue($event)\">\n </cqa-custom-textarea>\n <p class=\"cqa-text-[12px] cqa-text-[#0A0A0A] \">\n Tip: Use numbered steps or bullet points for complex tasks.\n </p>\n </div>\n <div class=\"cqa-flex cqa-flex-wrap cqa-custom-form-fields\">\n <!-- Type Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Type<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select class=\"cqa-w-full\" [form]=\"aiAgentForm\" [config]=\"getTypeConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Environments Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pl-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Envioronments<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getEnvironmentConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Metadata Input -->\n <div class=\"cqa-mb-2 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Metadata\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('metadata')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('metadata')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Description Input -->\n <div class=\"cqa-w-1/2 cqa-pl-2 \">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Description\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('description')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('description')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n\n <!-- Advanced Section -->\n <div class=\"cqa-mb-2\">\n <button\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-w-full cqa-text-left cqa-text-[12px] cqa-font-medium cqa-text-gray-700 cqa-py-2 cqa-border-b cqa-border-gray-200\"\n (click)=\"toggleAdvanced()\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-lg cqa-transition-transform\" [class.cqa-rotate-180]=\"showAdvanced\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"showAdvanced\" class=\" cqa-custom-form-fields cqa-flex cqa-flex-col\">\n <cqa-advanced-variables-form \n [advancedVariables]=\"advancedSettingsVariables\"\n [advancedVariableForm]=\"advancedVariablesForm\"\n (variableBooleanChange)=\"onAdvancedVariableBooleanChange($event.name, $event.value)\"\n (variableValueChange)=\"onAdvancedVariableValueChange($event.name, $event.value)\">\n </cqa-advanced-variables-form>\n <!-- Continue on Error -->\n <!-- <div class=\"cqa-mb-1\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[10px] cqa-text-[#737373]\">Continue on Error</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <mat-slide-toggle\n class=\"cqa-step-builder-toggle-section\"\n [checked]=\"aiAgentForm.get('continueOnError')?.value || false\"\n (change)=\"aiAgentForm.get('continueOnError')?.setValue($event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Don't fail the test if this step fails.\n </label>\n </div>\n </div> -->\n\n <!-- Disabled -->\n <!-- <div class=\"cqa-mb-1\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[10px] cqa-font-medium cqa-text-[#737373]\">Disabled</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <mat-slide-toggle\n class=\"cqa-step-builder-toggle-section\"\n [checked]=\"aiAgentForm.get('disabled')?.value || false\"\n (change)=\"aiAgentForm.get('disabled')?.setValue($event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Skip this step during execution.\n </label>\n </div>\n </div> -->\n\n <!-- Retry Count -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Retry Count\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getRetryCountConfig()\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Iframe locator -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Iframe locator\n </label>\n <cqa-dynamic-select class=\"cqa-text-[#414146]\" [form]=\"aiAgentForm\" [config]=\"getIframeLocatorConfig()\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Other Locators -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Other Locators\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getOtherLocatorsConfig()\">\n </cqa-dynamic-select>\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' : 'Create Step'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!aiAgentForm.valid\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>\n\n", components: [{ type: i2.CustomTextareaComponent, selector: "cqa-custom-textarea", inputs: ["label", "placeholder", "value", "enableMarkdown", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "rows", "cols", "resize", "textareaInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused"] }, { type: i3.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i4.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: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.AdvancedVariablesFormComponent, selector: "cqa-advanced-variables-form", inputs: ["advancedVariables", "advancedVariableForm"], outputs: ["variableBooleanChange", "variableValueChange"] }, { type: i7.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
388
+ StepBuilderAiAgentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepBuilderAiAgentComponent, selector: "cqa-step-builder-ai-agent", inputs: { typeOptions: "typeOptions", environmentOptions: "environmentOptions", hasMoreEnvironments: "hasMoreEnvironments", isLoadingEnvironments: "isLoadingEnvironments", retryCountOptions: "retryCountOptions", iframeLocatorOptions: "iframeLocatorOptions", otherLocatorsOptions: "otherLocatorsOptions", initialQuery: "initialQuery", initialType: "initialType", initialDescription: "initialDescription", initialEnvironments: "initialEnvironments", initialMetadata: "initialMetadata", initialDisabled: "initialDisabled", initialContinueOnError: "initialContinueOnError", initialRetryCount: "initialRetryCount", initialIframeLocator: "initialIframeLocator", initialOtherLocators: "initialOtherLocators", editMode: "editMode", advancedSettingsVariables: "advancedSettingsVariables" }, outputs: { createStep: "createStep", cancelled: "cancelled", searchEnvironments: "searchEnvironments", loadMoreEnvironments: "loadMoreEnvironments" }, 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 cqa-overflow-y-auto\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n {{ editMode ? 'Edit AI Step' : 'Create AI Step' }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 \">\n <!-- What should the agent achieve? -->\n <div class=\"cqa-mb-6\">\n <label class=\"cqa-text-[14px] cqa-font-medium cqa-text-gray-700 cqa-mb-1 cqa-block\">\n What should the agent achieve?<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-custom-textarea\n class=\"cqa-step-builder-ai-agent-textarea\"\n [placeholder]=\"'What should the agent achieve?'\"\n [value]=\"aiAgentForm.get('query')?.value\"\n [fullWidth]=\"true\"\n [rows]=\"4\"\n [textareaInlineStyle]=\"'resize: vertical;max-height: 400px;'\"\n (valueChange)=\"aiAgentForm.get('query')?.setValue($event)\">\n </cqa-custom-textarea>\n <p class=\"cqa-text-[12px] cqa-text-[#0A0A0A] \">\n Tip: Use numbered steps or bullet points for complex tasks.\n </p>\n </div>\n <div class=\"cqa-flex cqa-flex-wrap cqa-custom-form-fields\">\n <!-- Type Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Type<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select class=\"cqa-w-full\" [form]=\"aiAgentForm\" [config]=\"getTypeConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Environments Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pl-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Envioronments<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getEnvironmentConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Metadata Input -->\n <div class=\"cqa-mb-2 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Metadata\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('metadata')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('metadata')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Description Input -->\n <div class=\"cqa-w-1/2 cqa-pl-2 \">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Description\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('description')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('description')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n\n <!-- Advanced Section -->\n <div class=\"cqa-mb-2\">\n <button\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-w-full cqa-text-left cqa-text-[12px] cqa-font-medium cqa-text-gray-700 cqa-py-2 cqa-border-b cqa-border-gray-200\"\n (click)=\"toggleAdvanced()\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-lg cqa-transition-transform\" [class.cqa-rotate-180]=\"showAdvanced\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"showAdvanced\" class=\" cqa-custom-form-fields cqa-flex cqa-flex-col\">\n <cqa-advanced-variables-form \n [advancedVariables]=\"advancedSettingsVariables\"\n [advancedVariableForm]=\"advancedVariablesForm\"\n (variableBooleanChange)=\"onAdvancedVariableBooleanChange($event.name, $event.value)\"\n (variableValueChange)=\"onAdvancedVariableValueChange($event.name, $event.value)\">\n </cqa-advanced-variables-form>\n <!-- Continue on Error -->\n <!-- <div class=\"cqa-mb-1\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[10px] cqa-text-[#737373]\">Continue on Error</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <mat-slide-toggle\n class=\"cqa-step-builder-toggle-section\"\n [checked]=\"aiAgentForm.get('continueOnError')?.value || false\"\n (change)=\"aiAgentForm.get('continueOnError')?.setValue($event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Don't fail the test if this step fails.\n </label>\n </div>\n </div> -->\n\n <!-- Disabled -->\n <!-- <div class=\"cqa-mb-1\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[10px] cqa-font-medium cqa-text-[#737373]\">Disabled</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <mat-slide-toggle\n class=\"cqa-step-builder-toggle-section\"\n [checked]=\"aiAgentForm.get('disabled')?.value || false\"\n (change)=\"aiAgentForm.get('disabled')?.setValue($event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Skip this step during execution.\n </label>\n </div>\n </div> -->\n\n <!-- Retry Count -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Retry Count\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getRetryCountConfig()\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Iframe locator -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Iframe locator\n </label>\n <cqa-dynamic-select class=\"cqa-text-[#414146]\" [form]=\"aiAgentForm\" [config]=\"getIframeLocatorConfig()\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Other Locators -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Other Locators\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getOtherLocatorsConfig()\">\n </cqa-dynamic-select>\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' : 'Create Step'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!aiAgentForm.valid\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>\n\n", components: [{ type: i2.CustomTextareaComponent, selector: "cqa-custom-textarea", inputs: ["label", "placeholder", "value", "enableMarkdown", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "rows", "cols", "resize", "textareaInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused"] }, { type: i3.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i4.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: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.AdvancedVariablesFormComponent, selector: "cqa-advanced-variables-form", inputs: ["advancedVariables", "advancedVariableForm"], outputs: ["variableBooleanChange", "variableValueChange"] }, { type: i7.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
389
389
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderAiAgentComponent, decorators: [{
390
390
  type: Component,
391
- args: [{ selector: 'cqa-step-builder-ai-agent', 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 AI Step' : 'Create AI Step' }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- What should the agent achieve? -->\n <div class=\"cqa-mb-6\">\n <label class=\"cqa-text-[14px] cqa-font-medium cqa-text-gray-700 cqa-mb-1 cqa-block\">\n What should the agent achieve?<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-custom-textarea\n class=\"cqa-step-builder-ai-agent-textarea\"\n [placeholder]=\"'What should the agent achieve?'\"\n [value]=\"aiAgentForm.get('query')?.value\"\n [fullWidth]=\"true\"\n [rows]=\"4\"\n (valueChange)=\"aiAgentForm.get('query')?.setValue($event)\">\n </cqa-custom-textarea>\n <p class=\"cqa-text-[12px] cqa-text-[#0A0A0A] \">\n Tip: Use numbered steps or bullet points for complex tasks.\n </p>\n </div>\n <div class=\"cqa-flex cqa-flex-wrap cqa-custom-form-fields\">\n <!-- Type Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Type<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select class=\"cqa-w-full\" [form]=\"aiAgentForm\" [config]=\"getTypeConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Environments Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pl-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Envioronments<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getEnvironmentConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Metadata Input -->\n <div class=\"cqa-mb-2 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Metadata\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('metadata')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('metadata')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Description Input -->\n <div class=\"cqa-w-1/2 cqa-pl-2 \">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Description\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('description')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('description')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n\n <!-- Advanced Section -->\n <div class=\"cqa-mb-2\">\n <button\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-w-full cqa-text-left cqa-text-[12px] cqa-font-medium cqa-text-gray-700 cqa-py-2 cqa-border-b cqa-border-gray-200\"\n (click)=\"toggleAdvanced()\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-lg cqa-transition-transform\" [class.cqa-rotate-180]=\"showAdvanced\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"showAdvanced\" class=\" cqa-custom-form-fields cqa-flex cqa-flex-col\">\n <cqa-advanced-variables-form \n [advancedVariables]=\"advancedSettingsVariables\"\n [advancedVariableForm]=\"advancedVariablesForm\"\n (variableBooleanChange)=\"onAdvancedVariableBooleanChange($event.name, $event.value)\"\n (variableValueChange)=\"onAdvancedVariableValueChange($event.name, $event.value)\">\n </cqa-advanced-variables-form>\n <!-- Continue on Error -->\n <!-- <div class=\"cqa-mb-1\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[10px] cqa-text-[#737373]\">Continue on Error</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <mat-slide-toggle\n class=\"cqa-step-builder-toggle-section\"\n [checked]=\"aiAgentForm.get('continueOnError')?.value || false\"\n (change)=\"aiAgentForm.get('continueOnError')?.setValue($event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Don't fail the test if this step fails.\n </label>\n </div>\n </div> -->\n\n <!-- Disabled -->\n <!-- <div class=\"cqa-mb-1\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[10px] cqa-font-medium cqa-text-[#737373]\">Disabled</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <mat-slide-toggle\n class=\"cqa-step-builder-toggle-section\"\n [checked]=\"aiAgentForm.get('disabled')?.value || false\"\n (change)=\"aiAgentForm.get('disabled')?.setValue($event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Skip this step during execution.\n </label>\n </div>\n </div> -->\n\n <!-- Retry Count -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Retry Count\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getRetryCountConfig()\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Iframe locator -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Iframe locator\n </label>\n <cqa-dynamic-select class=\"cqa-text-[#414146]\" [form]=\"aiAgentForm\" [config]=\"getIframeLocatorConfig()\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Other Locators -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Other Locators\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getOtherLocatorsConfig()\">\n </cqa-dynamic-select>\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' : 'Create Step'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!aiAgentForm.valid\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>\n\n", styles: [] }]
391
+ args: [{ selector: 'cqa-step-builder-ai-agent', 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 cqa-overflow-y-auto\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n {{ editMode ? 'Edit AI Step' : 'Create AI Step' }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 \">\n <!-- What should the agent achieve? -->\n <div class=\"cqa-mb-6\">\n <label class=\"cqa-text-[14px] cqa-font-medium cqa-text-gray-700 cqa-mb-1 cqa-block\">\n What should the agent achieve?<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-custom-textarea\n class=\"cqa-step-builder-ai-agent-textarea\"\n [placeholder]=\"'What should the agent achieve?'\"\n [value]=\"aiAgentForm.get('query')?.value\"\n [fullWidth]=\"true\"\n [rows]=\"4\"\n [textareaInlineStyle]=\"'resize: vertical;max-height: 400px;'\"\n (valueChange)=\"aiAgentForm.get('query')?.setValue($event)\">\n </cqa-custom-textarea>\n <p class=\"cqa-text-[12px] cqa-text-[#0A0A0A] \">\n Tip: Use numbered steps or bullet points for complex tasks.\n </p>\n </div>\n <div class=\"cqa-flex cqa-flex-wrap cqa-custom-form-fields\">\n <!-- Type Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Type<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select class=\"cqa-w-full\" [form]=\"aiAgentForm\" [config]=\"getTypeConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Environments Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pl-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Envioronments<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getEnvironmentConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Metadata Input -->\n <div class=\"cqa-mb-2 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Metadata\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('metadata')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('metadata')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Description Input -->\n <div class=\"cqa-w-1/2 cqa-pl-2 \">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Description\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('description')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('description')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n\n <!-- Advanced Section -->\n <div class=\"cqa-mb-2\">\n <button\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-w-full cqa-text-left cqa-text-[12px] cqa-font-medium cqa-text-gray-700 cqa-py-2 cqa-border-b cqa-border-gray-200\"\n (click)=\"toggleAdvanced()\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-lg cqa-transition-transform\" [class.cqa-rotate-180]=\"showAdvanced\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"showAdvanced\" class=\" cqa-custom-form-fields cqa-flex cqa-flex-col\">\n <cqa-advanced-variables-form \n [advancedVariables]=\"advancedSettingsVariables\"\n [advancedVariableForm]=\"advancedVariablesForm\"\n (variableBooleanChange)=\"onAdvancedVariableBooleanChange($event.name, $event.value)\"\n (variableValueChange)=\"onAdvancedVariableValueChange($event.name, $event.value)\">\n </cqa-advanced-variables-form>\n <!-- Continue on Error -->\n <!-- <div class=\"cqa-mb-1\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[10px] cqa-text-[#737373]\">Continue on Error</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <mat-slide-toggle\n class=\"cqa-step-builder-toggle-section\"\n [checked]=\"aiAgentForm.get('continueOnError')?.value || false\"\n (change)=\"aiAgentForm.get('continueOnError')?.setValue($event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Don't fail the test if this step fails.\n </label>\n </div>\n </div> -->\n\n <!-- Disabled -->\n <!-- <div class=\"cqa-mb-1\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[10px] cqa-font-medium cqa-text-[#737373]\">Disabled</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <mat-slide-toggle\n class=\"cqa-step-builder-toggle-section\"\n [checked]=\"aiAgentForm.get('disabled')?.value || false\"\n (change)=\"aiAgentForm.get('disabled')?.setValue($event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Skip this step during execution.\n </label>\n </div>\n </div> -->\n\n <!-- Retry Count -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Retry Count\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getRetryCountConfig()\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Iframe locator -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Iframe locator\n </label>\n <cqa-dynamic-select class=\"cqa-text-[#414146]\" [form]=\"aiAgentForm\" [config]=\"getIframeLocatorConfig()\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Other Locators -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Other Locators\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getOtherLocatorsConfig()\">\n </cqa-dynamic-select>\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' : 'Create Step'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!aiAgentForm.valid\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>\n\n", styles: [] }]
392
392
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }]; }, propDecorators: { typeOptions: [{
393
393
  type: Input
394
394
  }], environmentOptions: [{
@@ -436,4 +436,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
436
436
  }], advancedSettingsVariables: [{
437
437
  type: Input
438
438
  }] } });
439
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWFpLWFnZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc3RlcC1idWlsZGVyL3N0ZXAtYnVpbGRlci1haS1hZ2VudC9zdGVwLWJ1aWxkZXItYWktYWdlbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWFpLWFnZW50L3N0ZXAtYnVpbGRlci1haS1hZ2VudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQTBCLFVBQVUsRUFBYSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBdUIvRSxNQUFNLE9BQU8sMkJBQTJCO0lBa0R0QyxZQUFvQixFQUFlO1FBQWYsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQWpEbkMsZ0NBQWdDO1FBQ3ZCLGdCQUFXLEdBQW1CLEVBQUUsQ0FBQztRQUUxQyx3Q0FBd0M7UUFDL0IsdUJBQWtCLEdBQW1CLEVBQUUsQ0FBQztRQUNqRCwrREFBK0Q7UUFDdEQsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBQzlDLHFDQUFxQztRQUM1QiwwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFFaEQsdUNBQXVDO1FBQzlCLHNCQUFpQixHQUFtQixFQUFFLENBQUM7UUFFaEQsMENBQTBDO1FBQ2pDLHlCQUFvQixHQUFtQixFQUFFLENBQUM7UUFFbkQsMENBQTBDO1FBQ2pDLHlCQUFvQixHQUFtQixFQUFFLENBQUM7UUFhMUMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUVuQyxnQ0FBZ0M7UUFDdEIsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO1FBRTNELDBCQUEwQjtRQUNoQixjQUFTLEdBQUcsSUFBSSxZ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c0I7c0JBQTlCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFHSSxVQUFVO3NCQUFuQixNQUFNO2dCQUdHLFNBQVM7c0JBQWxCLE1BQU07Z0JBRUcsa0JBQWtCO3NCQUEzQixNQUFNO2dCQUVHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFNRSx5QkFBeUI7c0JBQWpDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIEZvcm1BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZywgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vLi4vZHluYW1pYy1zZWxlY3QvZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBBaUFnZW50Rm9ybURhdGEge1xuICBxdWVyeTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGVudmlyb25tZW50czogc3RyaW5nO1xuICBtZXRhZGF0YT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNvbnRpbnVlT25FcnJvcj86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgcmV0cnlDb3VudD86IHN0cmluZztcbiAgaWZyYW1lTG9jYXRvcj86IHN0cmluZztcbiAgb3RoZXJMb2NhdG9ycz86IHN0cmluZztcbiAgYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcz86IGFueVtdO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtc3RlcC1idWlsZGVyLWFpLWFnZW50JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0ZXAtYnVpbGRlci1haS1hZ2VudC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfVxufSlcbmV4cG9ydCBjbGFzcyBTdGVwQnVpbGRlckFpQWdlbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKiBPcHRpb25zIGZvciB0eXBlIGRyb3Bkb3duICovXG4gIEBJbnB1dCgpIHR5cGVPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xuXG4gIC8qKiBPcHRpb25zIGZvciBlbnZpcm9ubWVudHMgZHJvcGRvd24gKi9cbiAgQElucHV0KCkgZW52aXJvbm1lbnRPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xuICAvKiogSW5kaWNhdGVzIGlmIG1vcmUgZW52aXJvbm1lbnRzIGFyZSBhdmFpbGFibGUgZm9yIGxvYWRpbmcgKi9cbiAgQElucHV0KCkgaGFzTW9yZUVudmlyb25tZW50czogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogTG9hZGluZyBzdGF0ZSBmb3IgZW52aXJvbm1lbnRzICovXG4gIEBJbnB1dCgpIGlzTG9hZGluZ0Vudmlyb25tZW50czogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBPcHRpb25zIGZvciByZXRyeSBjb3VudCBkcm9wZG93biAqL1xuICBASW5wdXQoKSByZXRyeUNvdW50T3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXTtcblxuICAvKiogT3B0aW9ucyBmb3IgaWZyYW1lIGxvY2F0b3IgZHJvcGRvd24gKi9cbiAgQElucHV0KCkgaWZyYW1lTG9jYXRvck9wdGlvbnM6IFNlbGVjdE9wdGlvbltdID0gW107XG5cbiAgLyoqIE9wdGlvbnMgZm9yIG90aGVyIGxvY2F0b3JzIGRyb3Bkb3duICovXG4gIEBJbnB1dCgpIG90aGVyTG9jYXRvcnNPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xuXG4gIC8qKiBJbml0aWFsIHZhbHVlcyBmb3IgZWRpdCBtb2RlICovXG4gIEBJbnB1dCgpIGluaXRpYWxRdWVyeT86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbFR5cGU/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGluaXRpYWxEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbEVudmlyb25tZW50cz86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbE1ldGFkYXRhPzogc3RyaW5nO1xuICBASW5wdXQoKSBpbml0aWFsRGlzYWJsZWQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBpbml0aWFsQ29udGludWVPbkVycm9yPzogYm9vbGVhbjtcbiAgQElucHV0KCkgaW5pdGlhbFJldHJ5Q291bnQ/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGluaXRpYWxJZnJhbWVMb2NhdG9yPzogc3RyaW5nO1xuICBASW5wdXQoKSBpbml0aWFsT3RoZXJMb2NhdG9ycz86IHN0cmluZztcbiAgQElucHV0KCkgZWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogRW1pdCB3aGVuIHN0ZXAgaXMgY3JlYXRlZCAqL1xuICBAT3V0cHV0KCkgY3JlYXRlU3RlcCA9IG5ldyBFdmVudEVtaXR0ZXI8QWlBZ2VudEZvcm1EYXRhPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gY2FuY2VsbGVkICovXG4gIEBPdXRwdXQoKSBjYW5jZWxsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKiBFbWl0IHdoZW4gdXNlciBzZWFyY2hlcyBmb3IgZW52aXJvbm1lbnRzICovXG4gIEBPdXRwdXQoKSBzZWFyY2hFbnZpcm9ubWVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLyoqIEVtaXQgd2hlbiB1c2VyIHNjcm9sbHMgdG8gbG9hZCBtb3JlIGVudmlyb25tZW50cyAqL1xuICBAT3V0cHV0KCkgbG9hZE1vcmVFbnZpcm9ubWVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgYWlBZ2VudEZvcm06IEZvcm1Hcm91cDtcbiAgc2hvd0FkdmFuY2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaGFzTG9hZGVkSW5pdGlhbERhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gQWR2YW5jZWQgc2V0dGluZ3MgdmFyaWFibGVzIChjYW4gYmUgcHJvdmlkZWQgZnJvbSBwYXJlbnQgb3IgaW5pdGlhbGl6ZWQgZnJvbSBmb3JtKVxuICBASW5wdXQoKSBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOiBhbnlbXSA9IFtdO1xuICBhZHZhbmNlZFZhcmlhYmxlc0Zvcm06IEZvcm1BcnJheTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge1xuICAgIHRoaXMuYWlBZ2VudEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIHF1ZXJ5OiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgdHlwZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIGVudmlyb25tZW50czogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIG1ldGFkYXRhOiBbJyddLFxuICAgICAgZGVzY3JpcHRpb246IFsnJ10sXG4gICAgICBjb250aW51ZU9uRXJyb3I6IFtmYWxzZV0sXG4gICAgICBkaXNhYmxlZDogW2ZhbHNlXSxcbiAgICAgIHJldHJ5Q291bnQ6IFsnJ10sXG4gICAgICBpZnJhbWVMb2NhdG9yOiBbJyddLFxuICAgICAgb3RoZXJMb2NhdG9yczogWycnXVxuICAgIH0pO1xuXG4gICAgdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0gPSB0aGlzLmZiLmFycmF5KFtdKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIExvYWQgaW5pdGlhbCBkYXRhIGlmIHByb3ZpZGVkIChlZGl0IG1vZGUpXG4gICAgaWYgKHRoaXMuaGFzSW5pdGlhbERhdGEoKSkge1xuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGEoKTtcbiAgICAgIHRoaXMuaGFzTG9hZGVkSW5pdGlhbERhdGEgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgYWR2YW5jZWQgc2V0dGluZ3MgdmFyaWFibGVzXG4gICAgaWYgKHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyAmJiB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gV2hlbiBwcm92aWRlZCBieSBwYXJlbnQsIGFwcGx5IHRvIGZvcm0gYW5kIGJ1aWxkIGNvbnRyb2xzXG4gICAgICB0aGlzLmFwcGx5QWR2YW5jZWRTZXR0aW5nc1RvRm9ybSgpO1xuICAgICAgdGhpcy5idWlsZEFkdmFuY2VkVmFyaWFibGVzRm9ybSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGYWxsYmFjazogZGVyaXZlIGZyb20gY3VycmVudCBmb3JtIHZhbHVlc1xuICAgICAgdGhpcy5pbml0aWFsaXplQWR2YW5jZWRTZXR0aW5ncygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiBhbnkgaW5pdGlhbCB2YWx1ZSBpbnB1dHMgY2hhbmdlZFxuICAgIGNvbnN0IGluaXRpYWxWYWx1ZUtleXMgPSBbXG4gICAgICAnaW5pdGlhbFF1ZXJ5JywgJ2luaXRpYWxUeXBlJywgJ2luaXRpYWxEZXNjcmlwdGlvbicsICdpbml0aWFsRW52aXJvbm1lbnRzJyxcbiAgICAgICdpbml0aWFsTWV0YWRhdGEnLCAnaW5pdGlhbERpc2FibGVkJywgJ2luaXRpYWxDb250aW51ZU9uRXJyb3InLFxuICAgICAgJ2luaXRpYWxSZXRyeUNvdW50JywgJ2luaXRpYWxJZnJhbWVMb2NhdG9yJywgJ2luaXRpYWxPdGhlckxvY2F0b3JzJywgJ2VkaXRNb2RlJ1xuICAgIF07XG4gICAgXG4gICAgY29uc3QgaGFzSW5pdGlhbFZhbHVlQ2hhbmdlcyA9IGluaXRpYWxWYWx1ZUtleXMuc29tZShrZXkgPT4gXG4gICAgICBjaGFuZ2VzW2tleV0gJiYgIWNoYW5nZXNba2V5XS5maXJzdENoYW5nZVxuICAgICk7XG4gICAgXG4gICAgLy8gTG9hZCBpbml0aWFsIGRhdGEgaWYgaXQncyBzZXQgYWZ0ZXIgY29tcG9uZW50IGluaXRpYWxpemF0aW9uIG9yIGlmIGluaXRpYWwgdmFsdWVzIGNoYW5nZWRcbiAgICBpZiAoaGFzSW5pdGlhbFZhbHVlQ2hhbmdlcyB8fCAodGhpcy5oYXNJbml0aWFsRGF0YSgpICYmICF0aGlzLmhhc0xvYWRlZEluaXRpYWxEYXRhKSkge1xuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGEoKTtcbiAgICAgIHRoaXMuaGFzTG9hZGVkSW5pdGlhbERhdGEgPSB0cnVlO1xuICAgICAgLy8gUmUtaW5pdGlhbGl6ZSBhZHZhbmNlZCBzZXR0aW5ncyB3aGVuIGluaXRpYWwgdmFsdWVzIGNoYW5nZSAodW5sZXNzIHBhcmVudCBwcm92aWRlZCB0aGVtKVxuICAgICAgaWYgKCF0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgfHwgdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVBZHZhbmNlZFNldHRpbmdzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV2hlbiBwYXJlbnQgdXBkYXRlcyBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLCByZWJ1aWxkIGZvcm0gYW5kIHN5bmMgdG8gYWlBZ2VudEZvcm1cbiAgICBpZiAoY2hhbmdlc1snYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyddICYmIHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcykge1xuICAgICAgaWYgKHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuYXBwbHlBZHZhbmNlZFNldHRpbmdzVG9Gb3JtKCk7XG4gICAgICAgIHRoaXMuYnVpbGRBZHZhbmNlZFZhcmlhYmxlc0Zvcm0oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIGNsZWFyZWQsIHJlYnVpbGQgZnJvbSBmb3JtIHZhbHVlc1xuICAgICAgICB0aGlzLmluaXRpYWxpemVBZHZhbmNlZFNldHRpbmdzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYXNJbml0aWFsRGF0YSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5pbml0aWFsUXVlcnkgfHwgdGhpcy5pbml0aWFsVHlwZSB8fCB0aGlzLmluaXRpYWxEZXNjcmlwdGlvbiB8fCBcbiAgICAgICAgICAgICAgdGhpcy5pbml0aWFsRW52aXJvbm1lbnRzIHx8IHRoaXMuaW5pdGlhbE1ldGFkYXRhICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgdGhpcy5pbml0aWFsRGlzYWJsZWQgIT09IHVuZGVmaW5lZCB8fCB0aGlzLmluaXRpYWxDb250aW51ZU9uRXJyb3IgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICB0aGlzLmluaXRpYWxSZXRyeUNvdW50ICE9PSB1bmRlZmluZWQgfHwgdGhpcy5pbml0aWFsSWZyYW1lTG9jYXRvciB8fCBcbiAgICAgICAgICAgICAgdGhpcy5pbml0aWFsT3RoZXJMb2NhdG9ycyk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRJbml0aWFsRGF0YSgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnbG9hZEluaXRpYWxEYXRhOiBMb2FkaW5nIEFJLWFnZW50IGRhdGEnLCB7XG4gICAgICBpbml0aWFsUXVlcnk6IHRoaXMuaW5pdGlhbFF1ZXJ5LFxuICAgICAgaW5pdGlhbFR5cGU6IHRoaXMuaW5pdGlhbFR5cGUsXG4gICAgICBpbml0aWFsRGVzY3JpcHRpb246IHRoaXMuaW5pdGlhbERlc2NyaXB0aW9uLFxuICAgICAgaW5pdGlhbEVudmlyb25tZW50czogdGhpcy5pbml0aWFsRW52aXJvbm1lbnRzLFxuICAgICAgaW5pdGlhbE1ldGFkYXRhOiB0aGlzLmluaXRpYWxNZXRhZGF0YSxcbiAgICAgIGluaXRpYWxEaXNhYmxlZDogdGhpcy5pbml0aWFsRGlzYWJsZWQsXG4gICAgICBpbml0aWFsQ29udGludWVPbkVycm9yOiB0aGlzLmluaXRpYWxDb250aW51ZU9uRXJyb3IsXG4gICAgICBpbml0aWFsUmV0cnlDb3VudDogdGhpcy5pbml0aWFsUmV0cnlDb3VudCxcbiAgICAgIGluaXRpYWxJZnJhbWVMb2NhdG9yOiB0aGlzLmluaXRpYWxJZnJhbWVMb2NhdG9yLFxuICAgICAgaW5pdGlhbE90aGVyTG9jYXRvcnM6IHRoaXMuaW5pdGlhbE90aGVyTG9jYXRvcnMsXG4gICAgICBlZGl0TW9kZTogdGhpcy5lZGl0TW9kZVxuICAgIH0pO1xuXG4gICAgLy8gUG9wdWxhdGUgZm9ybSB3aXRoIGluaXRpYWwgdmFsdWVzXG4gICAgdGhpcy5haUFnZW50Rm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIHF1ZXJ5OiB0aGlzLmluaXRpYWxRdWVyeSB8fCAnJyxcbiAgICAgIHR5cGU6IHRoaXMuaW5pdGlhbFR5cGUgfHwgJycsXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5pbml0aWFsRGVzY3JpcHRpb24gfHwgJycsXG4gICAgICBlbnZpcm9ubWVudHM6IHRoaXMuaW5pdGlhbEVudmlyb25tZW50cyB8fCAnJyxcbiAgICAgIG1ldGFkYXRhOiB0aGlzLmluaXRpYWxNZXRhZGF0YSB8fCAnJyxcbiAgICAgIGRpc2FibGVkOiB0aGlzLmluaXRpYWxEaXNhYmxlZCAhPT0gdW5kZWZpbmVkID8gdGhpcy5pbml0aWFsRGlzYWJsZWQgOiBmYWxzZSxcbiAgICAgIGNvbnRpbnVlT25FcnJvcjogdGhpcy5pbml0aWFsQ29udGludWVPbkVycm9yICE9PSB1bmRlZmluZWQgPyB0aGlzLmluaXRpYWxDb250aW51ZU9uRXJyb3IgOiB0cnVlLFxuICAgICAgcmV0cnlDb3VudDogdGhpcy5pbml0aWFsUmV0cnlDb3VudCAhPT0gdW5kZWZpbmVkID8gU3RyaW5nKHRoaXMuaW5pdGlhbFJldHJ5Q291bnQpIDogJycsXG4gICAgICBpZnJhbWVMb2NhdG9yOiB0aGlzLmluaXRpYWxJZnJhbWVMb2NhdG9yIHx8ICcnLFxuICAgICAgb3RoZXJMb2NhdG9yczogdGhpcy5pbml0aWFsT3RoZXJMb2NhdG9ycyB8fCAnJ1xuICAgIH0pO1xuXG4gICAgLy8gRXhwYW5kIGFkdmFuY2VkIHNlY3Rpb24gaWYgYW55IGFkdmFuY2VkIGZpZWxkcyBoYXZlIHZhbHVlc1xuICAgIGlmICh0aGlzLmluaXRpYWxEaXNhYmxlZCAhPT0gdW5kZWZpbmVkIHx8IHRoaXMuaW5pdGlhbENvbnRpbnVlT25FcnJvciAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIHRoaXMuaW5pdGlhbFJldHJ5Q291bnQgIT09IHVuZGVmaW5lZCB8fCB0aGlzLmluaXRpYWxJZnJhbWVMb2NhdG9yIHx8IFxuICAgICAgICB0aGlzLmluaXRpYWxPdGhlckxvY2F0b3JzKSB7XG4gICAgICB0aGlzLnNob3dBZHZhbmNlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYWR2YW5jZWQgc2V0dGluZ3MgdmFyaWFibGVzIGJhc2VkIG9uIGN1cnJlbnQgZm9ybSB2YWx1ZXMgd2hlblxuICAgKiBwYXJlbnQgaGFzIG5vdCBwcm92aWRlZCBhbnkgYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5cbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUFkdmFuY2VkU2V0dGluZ3MoKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5haUFnZW50Rm9ybS52YWx1ZTtcblxuICAgIHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2lzU3RlcE9wdGlvbmFsJyxcbiAgICAgICAgbGFiZWw6IFwiRG9uJ3QgZmFpbCB0aGUgdGVzdCBpZiB0aGlzIHN0ZXAgZmFpbHMuXCIsXG4gICAgICAgIHZhbHVlOiBmb3JtVmFsdWUuY29udGludWVPbkVycm9yICE9PSB1bmRlZmluZWQgPyBmb3JtVmFsdWUuY29udGludWVPbkVycm9yIDogdHJ1ZSxcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnc2hvdWxkU2tpcCcsXG4gICAgICAgIGxhYmVsOiAnU2tpcCB0aGlzIHN0ZXAgZHVyaW5nIGV4ZWN1dGlvbi4nLFxuICAgICAgICB2YWx1ZTogZm9ybVZhbHVlLmRpc2FibGVkICE9PSB1bmRlZmluZWQgPyBmb3JtVmFsdWUuZGlzYWJsZWQgOiBmYWxzZSxcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAncHdMb2NhdG9yJyxcbiAgICAgICAgbGFiZWw6ICdPdGhlciBMb2NhdG9ycycsXG4gICAgICAgIHZhbHVlOiB0aGlzLmNvbnZlcnRPdGhlckxvY2F0b3JzVG9BcnJheShmb3JtVmFsdWUub3RoZXJMb2NhdG9ycyksXG4gICAgICAgIHR5cGU6ICdzdHJfbGlzdCdcbiAgICAgIH1cbiAgICBdO1xuXG4gICAgdGhpcy5idWlsZEFkdmFuY2VkVmFyaWFibGVzRm9ybSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGluY29taW5nIGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgdG8gdGhlIHVuZGVybHlpbmcgZm9ybSBjb250cm9scy5cbiAgICogVXNlZCB3aGVuIHBhcmVudCBwYXNzZXMgYWR2YW5jZWQgdmFyaWFibGVzIChlLmcuIGZyb20gU3RlcEJ1aWxkZXJTZXJ2aWNlKS5cbiAgICovXG4gIHByaXZhdGUgYXBwbHlBZHZhbmNlZFNldHRpbmdzVG9Gb3JtKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzIHx8IHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICBpZiAodmFyaWFibGUubmFtZSA9PT0gJ2lzU3RlcE9wdGlvbmFsJykge1xuICAgICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnY29udGludWVPbkVycm9yJyk/LnNldFZhbHVlKCEhdmFyaWFibGUudmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZS5uYW1lID09PSAnc2hvdWxkU2tpcCcpIHtcbiAgICAgICAgdGhpcy5haUFnZW50Rm9ybS5nZXQoJ2Rpc2FibGVkJyk/LnNldFZhbHVlKCEhdmFyaWFibGUudmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZS5uYW1lID09PSAncHdMb2NhdG9yJykge1xuICAgICAgICBjb25zdCB2YWx1ZXNBcnJheTogc3RyaW5nW10gPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlLnZhbHVlKVxuICAgICAgICAgID8gdmFyaWFibGUudmFsdWVcbiAgICAgICAgICA6IHRoaXMuY29udmVydE90aGVyTG9jYXRvcnNUb0FycmF5KFN0cmluZyh2YXJpYWJsZS52YWx1ZSB8fCAnJykpO1xuICAgICAgICBjb25zdCBqb2luZWQgPSB2YWx1ZXNBcnJheS5qb2luKCcsICcpO1xuICAgICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnb3RoZXJMb2NhdG9ycycpPy5zZXRWYWx1ZShqb2luZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIG90aGVyTG9jYXRvcnMgZm9ybSB2YWx1ZSB0byBhIHN0cmluZyBhcnJheSBmb3Igc3RyX2xpc3QuXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRPdGhlckxvY2F0b3JzVG9BcnJheSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgLy8gU3BsaXQgYnkgY29tbWEgYW5kIHRyaW0gd2hpdGVzcGFjZVxuICAgIHJldHVybiB2YWx1ZVxuICAgICAgLnNwbGl0KCcsJylcbiAgICAgIC5tYXAoaXRlbSA9PiBpdGVtLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLmxlbmd0aCA+IDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHJlYWN0aXZlIGZvcm0gZm9yIGFkdmFuY2VkIHNldHRpbmdzIHZhcmlhYmxlcyAoc2FtZSBwYXR0ZXJuIGFzIGFjdGlvbiBzdGVwKS5cbiAgICovXG4gIHByaXZhdGUgYnVpbGRBZHZhbmNlZFZhcmlhYmxlc0Zvcm0oKTogdm9pZCB7XG4gICAgLy8gQ2xlYXIgZXhpc3RpbmcgZm9ybSBhcnJheVxuICAgIHdoaWxlICh0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5sZW5ndGggIT09IDApIHtcbiAgICAgIHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLnJlbW92ZUF0KDApO1xuICAgIH1cblxuICAgIC8vIEFkZCBmb3JtIGdyb3VwcyBmb3IgZWFjaCBhZHZhbmNlZCB2YXJpYWJsZVxuICAgIHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5mb3JFYWNoKHZhcmlhYmxlID0+IHtcbiAgICAgIGxldCBkZWZhdWx0VmFsdWU6IGFueTtcbiAgICAgIGlmICh2YXJpYWJsZS50eXBlID09PSAnc3RyX2xpc3QnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlQXJyYXkgPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlLnZhbHVlKSA/IHZhcmlhYmxlLnZhbHVlIDogW107XG4gICAgICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZmIuYXJyYXkoXG4gICAgICAgICAgdmFsdWVBcnJheS5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IHZhbHVlQXJyYXkubWFwKChpdGVtOiBzdHJpbmcpID0+IHRoaXMuZmIuY29udHJvbChpdGVtKSlcbiAgICAgICAgICAgIDogW3RoaXMuZmIuY29udHJvbCgnJyldIC8vIFN0YXJ0IHdpdGggb25lIGVtcHR5IGNvbnRyb2xcbiAgICAgICAgKTtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gZm9ybUFycmF5O1xuICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZS50eXBlID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIHZhcmlhYmxlLnZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gdmFyaWFibGUudmFsdWUgPT09IHRydWUgfHwgdmFyaWFibGUudmFsdWUgPT09ICd0cnVlJyB8fCB2YXJpYWJsZS52YWx1ZSA9PT0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IHZhcmlhYmxlLnZhbHVlIHx8ICcnO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YXJpYWJsZUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG5hbWU6IFt2YXJpYWJsZS5uYW1lXSxcbiAgICAgICAgdmFsdWU6IHZhcmlhYmxlLnR5cGUgPT09ICdzdHJfbGlzdCcgPyBkZWZhdWx0VmFsdWUgOiBbZGVmYXVsdFZhbHVlXSxcbiAgICAgICAgdHlwZTogW3ZhcmlhYmxlLnR5cGUgfHwgJ3N0cmluZyddLFxuICAgICAgICBsYWJlbDogW3ZhcmlhYmxlLmxhYmVsIHx8ICcnXVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLnB1c2godmFyaWFibGVHcm91cCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRUeXBlQ29uZmlnKCk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogJ3R5cGUnLFxuICAgICAgcGxhY2Vob2xkZXI6ICdTZWxlY3QgdHlwZScsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMudHlwZU9wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgZ2V0RW52aXJvbm1lbnRDb25maWcoKTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiAnZW52aXJvbm1lbnRzJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IGVudmlyb25tZW50JyxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgICBzZXJ2ZXJTZWFyY2g6IHRydWUsXG4gICAgICBvcHRpb25zOiB0aGlzLmVudmlyb25tZW50T3B0aW9ucyxcbiAgICAgIGhhc01vcmU6IHRoaXMuaGFzTW9yZUVudmlyb25tZW50cyxcbiAgICAgIGlzTG9hZGluZzogdGhpcy5pc0xvYWRpbmdFbnZpcm9ubWVudHMsXG4gICAgICBvblNlYXJjaDogKHNlYXJjaFRlcm06IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaEVudmlyb25tZW50cy5lbWl0KHNlYXJjaFRlcm0pO1xuICAgICAgfSxcbiAgICAgIG9uTG9hZE1vcmU6ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzTW9yZUVudmlyb25tZW50cyAmJiAhdGhpcy5pc0xvYWRpbmdFbnZpcm9ubWVudHMpIHtcbiAgICAgICAgICB0aGlzLmxvYWRNb3JlRW52aXJvbm1lbnRzLmVtaXQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBnZXRSZXRyeUNvdW50Q29uZmlnKCk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogJ3JldHJ5Q291bnQnLFxuICAgICAgcGxhY2Vob2xkZXI6ICdEeW5hbWljIHNlYXJjaCBzZWxlY3RvciBmcm9tIGxpYnJhcnkgb3IgbWFudWFsJyxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgICBvcHRpb25zOiB0aGlzLnJldHJ5Q291bnRPcHRpb25zXG4gICAgfTtcbiAgfVxuXG4gIGdldElmcmFtZUxvY2F0b3JDb25maWcoKTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiAnaWZyYW1lTG9jYXRvcicsXG4gICAgICBwbGFjZWhvbGRlcjogJ0R5bmFtaWMgc2VhcmNoIHNlbGVjdG9yIGZyb20gbGlicmFyeSBvciBtYW51YWwnLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMuaWZyYW1lTG9jYXRvck9wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgZ2V0T3RoZXJMb2NhdG9yc0NvbmZpZygpOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICBrZXk6ICdvdGhlckxvY2F0b3JzJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnRHluYW1pYyBzZWFyY2ggc2VsZWN0b3IgZnJvbSBsaWJyYXJ5IG9yIG1hbnVhbCcsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgb3B0aW9uczogdGhpcy5vdGhlckxvY2F0b3JzT3B0aW9uc1xuICAgIH07XG4gIH1cblxuICB0b2dnbGVBZHZhbmNlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dBZHZhbmNlZCA9ICF0aGlzLnNob3dBZHZhbmNlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYWR2YW5jZWQgYm9vbGVhbiB2YXJpYWJsZSBjaGFuZ2VzIGFuZCBzeW5jIHRvIGZvcm0uXG4gICAqL1xuICBvbkFkdmFuY2VkVmFyaWFibGVCb29sZWFuQ2hhbmdlKHZhcmlhYmxlTmFtZTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHZhcmlhYmxlID0gdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBjb3JyZXNwb25kaW5nIGZvcm0gY29udHJvbHNcbiAgICBpZiAodmFyaWFibGVOYW1lID09PSAnaXNTdGVwT3B0aW9uYWwnKSB7XG4gICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnY29udGludWVPbkVycm9yJyk/LnNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHZhcmlhYmxlTmFtZSA9PT0gJ3Nob3VsZFNraXAnKSB7XG4gICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnZGlzYWJsZWQnKT8uc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIEtlZXAgYWR2YW5jZWRWYXJpYWJsZXNGb3JtIGluIHN5bmNcbiAgICBjb25zdCB2YXJpYWJsZUluZGV4ID0gdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0uY29udHJvbHMuZmluZEluZGV4KFxuICAgICAgY29udHJvbCA9PiBjb250cm9sLmdldCgnbmFtZScpPy52YWx1ZSA9PT0gdmFyaWFibGVOYW1lXG4gICAgKTtcbiAgICBpZiAodmFyaWFibGVJbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmF0KHZhcmlhYmxlSW5kZXgpLmdldCgndmFsdWUnKT8uc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFkdmFuY2VkIG5vbi1ib29sZWFuIHZhbHVlIGNoYW5nZXMgKGUuZy4gcHdMb2NhdG9yKSBhbmQgc3luYyB0byBmb3JtLlxuICAgKi9cbiAgb25BZHZhbmNlZFZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCB2YXJpYWJsZSA9IHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5maW5kKHYgPT4gdi5uYW1lID09PSB2YXJpYWJsZU5hbWUpO1xuICAgIGlmICh2YXJpYWJsZSkge1xuICAgICAgdmFyaWFibGUudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFyaWFibGVOYW1lID09PSAncHdMb2NhdG9yJykge1xuICAgICAgLy8gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgc3RyaW5nW10gZnJvbSBzdHJfbGlzdFxuICAgICAgY29uc3QgdmFsdWVzQXJyYXk6IHN0cmluZ1tdID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IHRoaXMuY29udmVydE90aGVyTG9jYXRvcnNUb0FycmF5KFN0cmluZyh2YWx1ZSB8fCAnJykpO1xuICAgICAgY29uc3Qgam9pbmVkID0gdmFsdWVzQXJyYXkuam9pbignLCAnKTtcbiAgICAgIHRoaXMuYWlBZ2VudEZvcm0uZ2V0KCdvdGhlckxvY2F0b3JzJyk/LnNldFZhbHVlKGpvaW5lZCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFyaWFibGVJbmRleCA9IHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmNvbnRyb2xzLmZpbmRJbmRleChcbiAgICAgIGNvbnRyb2wgPT4gY29udHJvbC5nZXQoJ25hbWUnKT8udmFsdWUgPT09IHZhcmlhYmxlTmFtZVxuICAgICk7XG4gICAgaWYgKHZhcmlhYmxlSW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5hdCh2YXJpYWJsZUluZGV4KTtcbiAgICAgIGNvbnN0IGlzU3RyTGlzdCA9IHZhcmlhYmxlICYmIHZhcmlhYmxlLnR5cGUgPT09ICdzdHJfbGlzdCc7XG4gICAgICBpZiAoIWlzU3RyTGlzdCkge1xuICAgICAgICBmb3JtR3JvdXAuZ2V0KCd2YWx1ZScpPy5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsbGVkLmVtaXQoKTtcbiAgfVxuXG4gIG9uQ3JlYXRlU3RlcCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5haUFnZW50Rm9ybS52YWxpZCkge1xuICAgICAgLy8gRW5zdXJlIGFkdmFuY2VkIHZhcmlhYmxlIHZhbHVlcyBhcmUgc3luY2VkIGJhY2sgdG8gdGhlIGZvcm0gYmVmb3JlIGVtaXR0aW5nXG4gICAgICB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICAgIGlmICh2YXJpYWJsZS5uYW1lID09PSAnaXNTdGVwT3B0aW9uYWwnKSB7XG4gICAgICAgICAgdGhpcy5haUFnZW50Rm9ybS5nZXQoJ2NvbnRpbnVlT25FcnJvcicpPy5zZXRWYWx1ZSghIXZhcmlhYmxlLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZS5uYW1lID09PSAnc2hvdWxkU2tpcCcpIHtcbiAgICAgICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnZGlzYWJsZWQnKT8uc2V0VmFsdWUoISF2YXJpYWJsZS52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFyaWFibGUubmFtZSA9PT0gJ3B3TG9jYXRvcicpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZXNBcnJheTogc3RyaW5nW10gPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlLnZhbHVlKVxuICAgICAgICAgICAgPyB2YXJpYWJsZS52YWx1ZVxuICAgICAgICAgICAgOiB0aGlzLmNvbnZlcnRPdGhlckxvY2F0b3JzVG9BcnJheShTdHJpbmcodmFyaWFibGUudmFsdWUgfHwgJycpKTtcbiAgICAgICAgICBjb25zdCBqb2luZWQgPSB2YWx1ZXNBcnJheS5qb2luKCcsICcpO1xuICAgICAgICAgIHRoaXMuYWlBZ2VudEZvcm0uZ2V0KCdvdGhlckxvY2F0b3JzJyk/LnNldFZhbHVlKGpvaW5lZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmFpQWdlbnRGb3JtLnZhbHVlO1xuICAgICAgY29uc3Qgc3RlcERhdGE6IEFpQWdlbnRGb3JtRGF0YSA9IHtcbiAgICAgICAgcXVlcnk6IGZvcm1WYWx1ZS5xdWVyeSB8fCAnJyxcbiAgICAgICAgdHlwZTogZm9ybVZhbHVlLnR5cGUgfHwgJycsXG4gICAgICAgIGVudmlyb25tZW50czogZm9ybVZhbHVlLmVudmlyb25tZW50cyB8fCAnJyxcbiAgICAgICAgbWV0YWRhdGE6IGZvcm1WYWx1ZS5tZXRhZGF0YSB8fCAnJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGZvcm1WYWx1ZS5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgY29udGludWVPbkVycm9yOiBmb3JtVmFsdWUuY29udGludWVPbkVycm9yIHx8IGZhbHNlLFxuICAgICAgICBkaXNhYmxlZDogZm9ybVZhbHVlLmRpc2FibGVkIHx8IGZhbHNlLFxuICAgICAgICByZXRyeUNvdW50OiBmb3JtVmFsdWUucmV0cnlDb3VudCB8fCAnJyxcbiAgICAgICAgaWZyYW1lTG9jYXRvcjogZm9ybVZhbHVlLmlmcmFtZUxvY2F0b3IgfHwgJycsXG4gICAgICAgIG90aGVyTG9jYXRvcnM6IGZvcm1WYWx1ZS5vdGhlckxvY2F0b3JzIHx8ICcnLFxuICAgICAgICBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOiB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXNcbiAgICAgIH07XG4gICAgICB0aGlzLmNyZWF0ZVN0ZXAuZW1pdChzdGVwRGF0YSk7XG4gICAgfVxuICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWJnLXdoaXRlIGNxYS1weC00IGNxYS1weS0yIGNxYS1oLWZ1bGxcIj5cbiAgPCEtLSBIZWFkZXIgLS0+XG4gIDxoMiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1ibGFjay0xMDAgY3FhLW1iLTRcIj5cbiAgICB7eyBlZGl0TW9kZSA/ICdFZGl0IEFJIFN0ZXAnIDogJ0NyZWF0ZSBBSSBTdGVwJyB9fVxuICA8L2gyPlxuXG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWZsZXgtMSBjcWEtb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgPCEtLSBXaGF0IHNob3VsZCB0aGUgYWdlbnQgYWNoaWV2ZT8gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1tYi02XCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1bMTRweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LWdyYXktNzAwIGNxYS1tYi0xIGNxYS1ibG9ja1wiPlxuICAgICAgICBXaGF0IHNob3VsZCB0aGUgYWdlbnQgYWNoaWV2ZT88c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjRUY0NDQ0XSBjcWEtbWwtMC41XCI+Kjwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8Y3FhLWN1c3RvbS10ZXh0YXJlYVxuICAgICAgIGNsYXNzPVwiY3FhLXN0ZXAtYnVpbGRlci1haS1hZ2VudC10ZXh0YXJlYVwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCInV2hhdCBzaG91bGQgdGhlIGFnZW50IGFjaGlldmU/J1wiXG4gICAgICAgIFt2YWx1ZV09XCJhaUFnZW50Rm9ybS5nZXQoJ3F1ZXJ5Jyk/LnZhbHVlXCJcbiAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgW3Jvd3NdPVwiNFwiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJhaUFnZW50Rm9ybS5nZXQoJ3F1ZXJ5Jyk/LnNldFZhbHVlKCRldmVudClcIj5cbiAgICAgIDwvY3FhLWN1c3RvbS10ZXh0YXJlYT5cbiAgICAgIDxwIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS10ZXh0LVsjMEEwQTBBXSBcIj5cbiAgICAgICAgVGlwOiBVc2UgbnVtYmVyZWQgc3RlcHMgb3IgYnVsbGV0IHBvaW50cyBmb3IgY29tcGxleCB0YXNrcy5cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtd3JhcCBjcWEtY3VzdG9tLWZvcm0tZmllbGRzXCI+XG4gICAgPCEtLSBUeXBlIERyb3Bkb3duIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItNiBjcWEtdy0xLzIgY3FhLXByLTJcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS1sZWFkaW5nLVsxMDAlXSBjcWEtYmxvY2sgY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTFcIj5cbiAgICAgICAgVHlwZTxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyNFRjQ0NDRdIGNxYS1tbC0wLjVcIj4qPC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgY2xhc3M9XCJjcWEtdy1mdWxsXCIgW2Zvcm1dPVwiYWlBZ2VudEZvcm1cIiBbY29uZmlnXT1cImdldFR5cGVDb25maWcoKVwiPlxuICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEVudmlyb25tZW50cyBEcm9wZG93biAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTYgY3FhLXctMS8yIGNxYS1wbC0yXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtbGVhZGluZy1bMTAwJV0gY3FhLWJsb2NrIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0xXCI+XG4gICAgICAgIEVudmlvcm9ubWVudHM8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjRUY0NDQ0XSBjcWEtbWwtMC41XCI+Kjwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFtmb3JtXT1cImFpQWdlbnRGb3JtXCIgW2NvbmZpZ109XCJnZXRFbnZpcm9ubWVudENvbmZpZygpXCI+XG4gICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gTWV0YWRhdGEgSW5wdXQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1tYi0yIGNxYS13LTEvMiBjcWEtcHItMlwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS1ibG9jayBjcWEtdGV4dC1bMTRweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItMVwiPlxuICAgICAgICBNZXRhZGF0YVxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCInVGV4dCBJbnB1dCdcIlxuICAgICAgICBbdmFsdWVdPVwiYWlBZ2VudEZvcm0uZ2V0KCdtZXRhZGF0YScpPy52YWx1ZVwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJhaUFnZW50Rm9ybS5nZXQoJ21ldGFkYXRhJyk/LnNldFZhbHVlKCRldmVudClcIj5cbiAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRGVzY3JpcHRpb24gSW5wdXQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS13LTEvMiBjcWEtcGwtMiBcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS1sZWFkaW5nLVsxMDAlXSBjcWEtYmxvY2sgY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTFcIj5cbiAgICAgICAgRGVzY3JpcHRpb25cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1RleHQgSW5wdXQnXCJcbiAgICAgICAgW3ZhbHVlXT1cImFpQWdlbnRGb3JtLmdldCgnZGVzY3JpcHRpb24nKT8udmFsdWVcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwiYWlBZ2VudEZvcm0uZ2V0KCdkZXNjcmlwdGlvbicpPy5zZXRWYWx1ZSgkZXZlbnQpXCI+XG4gICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cblxuICAgIDwhLS0gQWR2YW5jZWQgU2VjdGlvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTJcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS13LWZ1bGwgY3FhLXRleHQtbGVmdCBjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LWdyYXktNzAwIGNxYS1weS0yIGNxYS1ib3JkZXItYiBjcWEtYm9yZGVyLWdyYXktMjAwXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFkdmFuY2VkKClcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTBweF1cIj5BZHZhbmNlZDwvc3Bhbj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtbGcgY3FhLXRyYW5zaXRpb24tdHJhbnNmb3JtXCIgW2NsYXNzLmNxYS1yb3RhdGUtMTgwXT1cInNob3dBZHZhbmNlZFwiPlxuICAgICAgICAgIGV4cGFuZF9tb3JlXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93QWR2YW5jZWRcIiBjbGFzcz1cIiBjcWEtY3VzdG9tLWZvcm0tZmllbGRzIGNxYS1mbGV4IGNxYS1mbGV4LWNvbFwiPlxuICAgICAgICA8Y3FhLWFkdmFuY2VkLXZhcmlhYmxlcy1mb3JtIFxuICAgICAgICAgIFthZHZhbmNlZFZhcmlhYmxlc109XCJhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzXCJcbiAgICAgICAgICBbYWR2YW5jZWRWYXJpYWJsZUZvcm1dPVwiYWR2YW5jZWRWYXJpYWJsZXNGb3JtXCJcbiAgICAgICAgICAodmFyaWFibGVCb29sZWFuQ2hhbmdlKT1cIm9uQWR2YW5jZWRWYXJpYWJsZUJvb2xlYW5DaGFuZ2UoJGV2ZW50Lm5hbWUsICRldmVudC52YWx1ZSlcIlxuICAgICAgICAgICh2YXJpYWJsZVZhbHVlQ2hhbmdlKT1cIm9uQWR2YW5jZWRWYXJpYWJsZVZhbHVlQ2hhbmdlKCRldmVudC5uYW1lLCAkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgIDwvY3FhLWFkdmFuY2VkLXZhcmlhYmxlcy1mb3JtPlxuICAgICAgICA8IS0tIENvbnRpbnVlIG9uIEVycm9yIC0tPlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjcWEtbWItMVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItMlwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLXRleHQtWyM3MzczNzNdXCI+Q29udGludWUgb24gRXJyb3I8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgICAgICAgICBjbGFzcz1cImNxYS1zdGVwLWJ1aWxkZXItdG9nZ2xlLXNlY3Rpb25cIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJhaUFnZW50Rm9ybS5nZXQoJ2NvbnRpbnVlT25FcnJvcicpPy52YWx1ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiYWlBZ2VudEZvcm0uZ2V0KCdjb250aW51ZU9uRXJyb3InKT8uc2V0VmFsdWUoJGV2ZW50LmNoZWNrZWQpXCJcbiAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbm9ybWFsIGNxYS10ZXh0LVsjMEEwQTBBXVwiPlxuICAgICAgICAgICAgICBEb24ndCBmYWlsIHRoZSB0ZXN0IGlmIHRoaXMgc3RlcCBmYWlscy5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICA8IS0tIERpc2FibGVkIC0tPlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjcWEtbWItMVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItMlwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjNzM3MzczXVwiPkRpc2FibGVkPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtc3RlcC1idWlsZGVyLXRvZ2dsZS1zZWN0aW9uXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiYWlBZ2VudEZvcm0uZ2V0KCdkaXNhYmxlZCcpPy52YWx1ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiYWlBZ2VudEZvcm0uZ2V0KCdkaXNhYmxlZCcpPy5zZXRWYWx1ZSgkZXZlbnQuY2hlY2tlZClcIlxuICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1ub3JtYWwgY3FhLXRleHQtWyMwQTBBMEFdXCI+XG4gICAgICAgICAgICAgIFNraXAgdGhpcyBzdGVwIGR1cmluZyBleGVjdXRpb24uXG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgPCEtLSBSZXRyeSBDb3VudCAtLT5cbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1tYi0xXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0xIGNxYS1ibG9ja1wiPlxuICAgICAgICAgICAgUmV0cnkgQ291bnRcbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgW2Zvcm1dPVwiYWlBZ2VudEZvcm1cIiBbY29uZmlnXT1cImdldFJldHJ5Q291bnRDb25maWcoKVwiPlxuICAgICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgPCEtLSBJZnJhbWUgbG9jYXRvciAtLT5cbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1tYi0xXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0xIGNxYS1ibG9ja1wiPlxuICAgICAgICAgICAgSWZyYW1lIGxvY2F0b3JcbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgY2xhc3M9XCJjcWEtdGV4dC1bIzQxNDE0Nl1cIiBbZm9ybV09XCJhaUFnZW50Rm9ybVwiIFtjb25maWddPVwiZ2V0SWZyYW1lTG9jYXRvckNvbmZpZygpXCI+XG4gICAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICA8IS0tIE90aGVyIExvY2F0b3JzIC0tPlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLW1iLTFcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtbGVhZGluZy1bMTAwJV0gY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTEgY3FhLWJsb2NrXCI+XG4gICAgICAgICAgICBPdGhlciBMb2NhdG9yc1xuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBbZm9ybV09XCJhaUFnZW50Rm9ybVwiIFtjb25maWddPVwiZ2V0T3RoZXJMb2NhdG9yc0NvbmZpZygpXCI+XG4gICAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PiAtLT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLXctZnVsbCBjcWEtZ2FwLTIgY3FhLW10LWF1dG8gY3FhLXB0LTQgY3FhLWJvcmRlci10IGNxYS1ib3JkZXItZ3JheS0yMDBcIj5cbiAgICA8Y3FhLWJ1dHRvbiBjbGFzcz1cImNxYS13LTEvMiBjcWEtcm91bmRlZC1bMTBweF1cIiB2YXJpYW50PVwib3V0bGluZWRcIiB0ZXh0PVwiQ2FuY2VsXCIgW2N1c3RvbUNsYXNzXT1cIidjcWEtZmxleC0xIGNxYS13LWZ1bGwnXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ2FuY2VsKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gICAgPGNxYS1idXR0b24gY2xhc3M9XCJjcWEtYm9yZGVyLXNvbGlkIGNxYS1yb3VuZGVkLVs5cHhdIGNxYS13LTEvMiBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyMzRjQzRUVdXCIgdmFyaWFudD1cImZpbGxlZFwiIFt0ZXh0XT1cImVkaXRNb2RlID8gJ1VwZGF0ZSBTdGVwJyA6ICdDcmVhdGUgU3RlcCdcIiBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1mbGV4LTEgY3FhLXctZnVsbCdcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFhaUFnZW50Rm9ybS52YWxpZFwiXG4gICAgICAoY2xpY2tlZCk9XCJvbkNyZWF0ZVN0ZXAoKVwiPlxuICAgIDwvY3FhLWJ1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuIl19
439
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWFpLWFnZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc3RlcC1idWlsZGVyL3N0ZXAtYnVpbGRlci1haS1hZ2VudC9zdGVwLWJ1aWxkZXItYWktYWdlbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWFpLWFnZW50L3N0ZXAtYnVpbGRlci1haS1hZ2VudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQTBCLFVBQVUsRUFBYSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBdUIvRSxNQUFNLE9BQU8sMkJBQTJCO0lBa0R0QyxZQUFvQixFQUFlO1FBQWYsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQWpEbkMsZ0NBQWdDO1FBQ3ZCLGdCQUFXLEdBQW1CLEVBQUUsQ0FBQztRQUUxQyx3Q0FBd0M7UUFDL0IsdUJBQWtCLEdBQW1CLEVBQUUsQ0FBQztRQUNqRCwrREFBK0Q7UUFDdEQsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBQzlDLHFDQUFxQztRQUM1QiwwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFFaEQsdUNBQXVDO1FBQzlCLHNCQUFpQixHQUFtQixFQUFFLENBQUM7UUFFaEQsMENBQTBDO1FBQ2pDLHlCQUFvQixHQUFtQixFQUFFLENBQUM7UUFFbkQsMENBQTBDO1FBQ2pDLHlCQUFvQixHQUFtQixFQUFFLENBQUM7UUFhMUMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUVuQyxnQ0FBZ0M7UUFDdEIsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO1FBRTNELDBCQUEwQjtRQUNoQixjQUFTLEdBQUcsSUFBSSxZ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c0I7c0JBQTlCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFHSSxVQUFVO3NCQUFuQixNQUFNO2dCQUdHLFNBQVM7c0JBQWxCLE1BQU07Z0JBRUcsa0JBQWtCO3NCQUEzQixNQUFNO2dCQUVHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFNRSx5QkFBeUI7c0JBQWpDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIEZvcm1BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZywgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vLi4vZHluYW1pYy1zZWxlY3QvZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBBaUFnZW50Rm9ybURhdGEge1xuICBxdWVyeTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGVudmlyb25tZW50czogc3RyaW5nO1xuICBtZXRhZGF0YT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNvbnRpbnVlT25FcnJvcj86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgcmV0cnlDb3VudD86IHN0cmluZztcbiAgaWZyYW1lTG9jYXRvcj86IHN0cmluZztcbiAgb3RoZXJMb2NhdG9ycz86IHN0cmluZztcbiAgYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcz86IGFueVtdO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtc3RlcC1idWlsZGVyLWFpLWFnZW50JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0ZXAtYnVpbGRlci1haS1hZ2VudC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfVxufSlcbmV4cG9ydCBjbGFzcyBTdGVwQnVpbGRlckFpQWdlbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKiBPcHRpb25zIGZvciB0eXBlIGRyb3Bkb3duICovXG4gIEBJbnB1dCgpIHR5cGVPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xuXG4gIC8qKiBPcHRpb25zIGZvciBlbnZpcm9ubWVudHMgZHJvcGRvd24gKi9cbiAgQElucHV0KCkgZW52aXJvbm1lbnRPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xuICAvKiogSW5kaWNhdGVzIGlmIG1vcmUgZW52aXJvbm1lbnRzIGFyZSBhdmFpbGFibGUgZm9yIGxvYWRpbmcgKi9cbiAgQElucHV0KCkgaGFzTW9yZUVudmlyb25tZW50czogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogTG9hZGluZyBzdGF0ZSBmb3IgZW52aXJvbm1lbnRzICovXG4gIEBJbnB1dCgpIGlzTG9hZGluZ0Vudmlyb25tZW50czogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBPcHRpb25zIGZvciByZXRyeSBjb3VudCBkcm9wZG93biAqL1xuICBASW5wdXQoKSByZXRyeUNvdW50T3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXTtcblxuICAvKiogT3B0aW9ucyBmb3IgaWZyYW1lIGxvY2F0b3IgZHJvcGRvd24gKi9cbiAgQElucHV0KCkgaWZyYW1lTG9jYXRvck9wdGlvbnM6IFNlbGVjdE9wdGlvbltdID0gW107XG5cbiAgLyoqIE9wdGlvbnMgZm9yIG90aGVyIGxvY2F0b3JzIGRyb3Bkb3duICovXG4gIEBJbnB1dCgpIG90aGVyTG9jYXRvcnNPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xuXG4gIC8qKiBJbml0aWFsIHZhbHVlcyBmb3IgZWRpdCBtb2RlICovXG4gIEBJbnB1dCgpIGluaXRpYWxRdWVyeT86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbFR5cGU/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGluaXRpYWxEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbEVudmlyb25tZW50cz86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbE1ldGFkYXRhPzogc3RyaW5nO1xuICBASW5wdXQoKSBpbml0aWFsRGlzYWJsZWQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBpbml0aWFsQ29udGludWVPbkVycm9yPzogYm9vbGVhbjtcbiAgQElucHV0KCkgaW5pdGlhbFJldHJ5Q291bnQ/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGluaXRpYWxJZnJhbWVMb2NhdG9yPzogc3RyaW5nO1xuICBASW5wdXQoKSBpbml0aWFsT3RoZXJMb2NhdG9ycz86IHN0cmluZztcbiAgQElucHV0KCkgZWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogRW1pdCB3aGVuIHN0ZXAgaXMgY3JlYXRlZCAqL1xuICBAT3V0cHV0KCkgY3JlYXRlU3RlcCA9IG5ldyBFdmVudEVtaXR0ZXI8QWlBZ2VudEZvcm1EYXRhPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gY2FuY2VsbGVkICovXG4gIEBPdXRwdXQoKSBjYW5jZWxsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKiBFbWl0IHdoZW4gdXNlciBzZWFyY2hlcyBmb3IgZW52aXJvbm1lbnRzICovXG4gIEBPdXRwdXQoKSBzZWFyY2hFbnZpcm9ubWVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLyoqIEVtaXQgd2hlbiB1c2VyIHNjcm9sbHMgdG8gbG9hZCBtb3JlIGVudmlyb25tZW50cyAqL1xuICBAT3V0cHV0KCkgbG9hZE1vcmVFbnZpcm9ubWVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgYWlBZ2VudEZvcm06IEZvcm1Hcm91cDtcbiAgc2hvd0FkdmFuY2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaGFzTG9hZGVkSW5pdGlhbERhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gQWR2YW5jZWQgc2V0dGluZ3MgdmFyaWFibGVzIChjYW4gYmUgcHJvdmlkZWQgZnJvbSBwYXJlbnQgb3IgaW5pdGlhbGl6ZWQgZnJvbSBmb3JtKVxuICBASW5wdXQoKSBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOiBhbnlbXSA9IFtdO1xuICBhZHZhbmNlZFZhcmlhYmxlc0Zvcm06IEZvcm1BcnJheTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge1xuICAgIHRoaXMuYWlBZ2VudEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIHF1ZXJ5OiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgdHlwZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIGVudmlyb25tZW50czogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIG1ldGFkYXRhOiBbJyddLFxuICAgICAgZGVzY3JpcHRpb246IFsnJ10sXG4gICAgICBjb250aW51ZU9uRXJyb3I6IFtmYWxzZV0sXG4gICAgICBkaXNhYmxlZDogW2ZhbHNlXSxcbiAgICAgIHJldHJ5Q291bnQ6IFsnJ10sXG4gICAgICBpZnJhbWVMb2NhdG9yOiBbJyddLFxuICAgICAgb3RoZXJMb2NhdG9yczogWycnXVxuICAgIH0pO1xuXG4gICAgdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0gPSB0aGlzLmZiLmFycmF5KFtdKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIExvYWQgaW5pdGlhbCBkYXRhIGlmIHByb3ZpZGVkIChlZGl0IG1vZGUpXG4gICAgaWYgKHRoaXMuaGFzSW5pdGlhbERhdGEoKSkge1xuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGEoKTtcbiAgICAgIHRoaXMuaGFzTG9hZGVkSW5pdGlhbERhdGEgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgYWR2YW5jZWQgc2V0dGluZ3MgdmFyaWFibGVzXG4gICAgaWYgKHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyAmJiB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gV2hlbiBwcm92aWRlZCBieSBwYXJlbnQsIGFwcGx5IHRvIGZvcm0gYW5kIGJ1aWxkIGNvbnRyb2xzXG4gICAgICB0aGlzLmFwcGx5QWR2YW5jZWRTZXR0aW5nc1RvRm9ybSgpO1xuICAgICAgdGhpcy5idWlsZEFkdmFuY2VkVmFyaWFibGVzRm9ybSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGYWxsYmFjazogZGVyaXZlIGZyb20gY3VycmVudCBmb3JtIHZhbHVlc1xuICAgICAgdGhpcy5pbml0aWFsaXplQWR2YW5jZWRTZXR0aW5ncygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiBhbnkgaW5pdGlhbCB2YWx1ZSBpbnB1dHMgY2hhbmdlZFxuICAgIGNvbnN0IGluaXRpYWxWYWx1ZUtleXMgPSBbXG4gICAgICAnaW5pdGlhbFF1ZXJ5JywgJ2luaXRpYWxUeXBlJywgJ2luaXRpYWxEZXNjcmlwdGlvbicsICdpbml0aWFsRW52aXJvbm1lbnRzJyxcbiAgICAgICdpbml0aWFsTWV0YWRhdGEnLCAnaW5pdGlhbERpc2FibGVkJywgJ2luaXRpYWxDb250aW51ZU9uRXJyb3InLFxuICAgICAgJ2luaXRpYWxSZXRyeUNvdW50JywgJ2luaXRpYWxJZnJhbWVMb2NhdG9yJywgJ2luaXRpYWxPdGhlckxvY2F0b3JzJywgJ2VkaXRNb2RlJ1xuICAgIF07XG4gICAgXG4gICAgY29uc3QgaGFzSW5pdGlhbFZhbHVlQ2hhbmdlcyA9IGluaXRpYWxWYWx1ZUtleXMuc29tZShrZXkgPT4gXG4gICAgICBjaGFuZ2VzW2tleV0gJiYgIWNoYW5nZXNba2V5XS5maXJzdENoYW5nZVxuICAgICk7XG4gICAgXG4gICAgLy8gTG9hZCBpbml0aWFsIGRhdGEgaWYgaXQncyBzZXQgYWZ0ZXIgY29tcG9uZW50IGluaXRpYWxpemF0aW9uIG9yIGlmIGluaXRpYWwgdmFsdWVzIGNoYW5nZWRcbiAgICBpZiAoaGFzSW5pdGlhbFZhbHVlQ2hhbmdlcyB8fCAodGhpcy5oYXNJbml0aWFsRGF0YSgpICYmICF0aGlzLmhhc0xvYWRlZEluaXRpYWxEYXRhKSkge1xuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGEoKTtcbiAgICAgIHRoaXMuaGFzTG9hZGVkSW5pdGlhbERhdGEgPSB0cnVlO1xuICAgICAgLy8gUmUtaW5pdGlhbGl6ZSBhZHZhbmNlZCBzZXR0aW5ncyB3aGVuIGluaXRpYWwgdmFsdWVzIGNoYW5nZSAodW5sZXNzIHBhcmVudCBwcm92aWRlZCB0aGVtKVxuICAgICAgaWYgKCF0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgfHwgdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVBZHZhbmNlZFNldHRpbmdzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV2hlbiBwYXJlbnQgdXBkYXRlcyBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLCByZWJ1aWxkIGZvcm0gYW5kIHN5bmMgdG8gYWlBZ2VudEZvcm1cbiAgICBpZiAoY2hhbmdlc1snYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyddICYmIHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcykge1xuICAgICAgaWYgKHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuYXBwbHlBZHZhbmNlZFNldHRpbmdzVG9Gb3JtKCk7XG4gICAgICAgIHRoaXMuYnVpbGRBZHZhbmNlZFZhcmlhYmxlc0Zvcm0oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIGNsZWFyZWQsIHJlYnVpbGQgZnJvbSBmb3JtIHZhbHVlc1xuICAgICAgICB0aGlzLmluaXRpYWxpemVBZHZhbmNlZFNldHRpbmdzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYXNJbml0aWFsRGF0YSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5pbml0aWFsUXVlcnkgfHwgdGhpcy5pbml0aWFsVHlwZSB8fCB0aGlzLmluaXRpYWxEZXNjcmlwdGlvbiB8fCBcbiAgICAgICAgICAgICAgdGhpcy5pbml0aWFsRW52aXJvbm1lbnRzIHx8IHRoaXMuaW5pdGlhbE1ldGFkYXRhICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgdGhpcy5pbml0aWFsRGlzYWJsZWQgIT09IHVuZGVmaW5lZCB8fCB0aGlzLmluaXRpYWxDb250aW51ZU9uRXJyb3IgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICB0aGlzLmluaXRpYWxSZXRyeUNvdW50ICE9PSB1bmRlZmluZWQgfHwgdGhpcy5pbml0aWFsSWZyYW1lTG9jYXRvciB8fCBcbiAgICAgICAgICAgICAgdGhpcy5pbml0aWFsT3RoZXJMb2NhdG9ycyk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRJbml0aWFsRGF0YSgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnbG9hZEluaXRpYWxEYXRhOiBMb2FkaW5nIEFJLWFnZW50IGRhdGEnLCB7XG4gICAgICBpbml0aWFsUXVlcnk6IHRoaXMuaW5pdGlhbFF1ZXJ5LFxuICAgICAgaW5pdGlhbFR5cGU6IHRoaXMuaW5pdGlhbFR5cGUsXG4gICAgICBpbml0aWFsRGVzY3JpcHRpb246IHRoaXMuaW5pdGlhbERlc2NyaXB0aW9uLFxuICAgICAgaW5pdGlhbEVudmlyb25tZW50czogdGhpcy5pbml0aWFsRW52aXJvbm1lbnRzLFxuICAgICAgaW5pdGlhbE1ldGFkYXRhOiB0aGlzLmluaXRpYWxNZXRhZGF0YSxcbiAgICAgIGluaXRpYWxEaXNhYmxlZDogdGhpcy5pbml0aWFsRGlzYWJsZWQsXG4gICAgICBpbml0aWFsQ29udGludWVPbkVycm9yOiB0aGlzLmluaXRpYWxDb250aW51ZU9uRXJyb3IsXG4gICAgICBpbml0aWFsUmV0cnlDb3VudDogdGhpcy5pbml0aWFsUmV0cnlDb3VudCxcbiAgICAgIGluaXRpYWxJZnJhbWVMb2NhdG9yOiB0aGlzLmluaXRpYWxJZnJhbWVMb2NhdG9yLFxuICAgICAgaW5pdGlhbE90aGVyTG9jYXRvcnM6IHRoaXMuaW5pdGlhbE90aGVyTG9jYXRvcnMsXG4gICAgICBlZGl0TW9kZTogdGhpcy5lZGl0TW9kZVxuICAgIH0pO1xuXG4gICAgLy8gUG9wdWxhdGUgZm9ybSB3aXRoIGluaXRpYWwgdmFsdWVzXG4gICAgdGhpcy5haUFnZW50Rm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIHF1ZXJ5OiB0aGlzLmluaXRpYWxRdWVyeSB8fCAnJyxcbiAgICAgIHR5cGU6IHRoaXMuaW5pdGlhbFR5cGUgfHwgJycsXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5pbml0aWFsRGVzY3JpcHRpb24gfHwgJycsXG4gICAgICBlbnZpcm9ubWVudHM6IHRoaXMuaW5pdGlhbEVudmlyb25tZW50cyB8fCAnJyxcbiAgICAgIG1ldGFkYXRhOiB0aGlzLmluaXRpYWxNZXRhZGF0YSB8fCAnJyxcbiAgICAgIGRpc2FibGVkOiB0aGlzLmluaXRpYWxEaXNhYmxlZCAhPT0gdW5kZWZpbmVkID8gdGhpcy5pbml0aWFsRGlzYWJsZWQgOiBmYWxzZSxcbiAgICAgIGNvbnRpbnVlT25FcnJvcjogdGhpcy5pbml0aWFsQ29udGludWVPbkVycm9yICE9PSB1bmRlZmluZWQgPyB0aGlzLmluaXRpYWxDb250aW51ZU9uRXJyb3IgOiB0cnVlLFxuICAgICAgcmV0cnlDb3VudDogdGhpcy5pbml0aWFsUmV0cnlDb3VudCAhPT0gdW5kZWZpbmVkID8gU3RyaW5nKHRoaXMuaW5pdGlhbFJldHJ5Q291bnQpIDogJycsXG4gICAgICBpZnJhbWVMb2NhdG9yOiB0aGlzLmluaXRpYWxJZnJhbWVMb2NhdG9yIHx8ICcnLFxuICAgICAgb3RoZXJMb2NhdG9yczogdGhpcy5pbml0aWFsT3RoZXJMb2NhdG9ycyB8fCAnJ1xuICAgIH0pO1xuXG4gICAgLy8gRXhwYW5kIGFkdmFuY2VkIHNlY3Rpb24gaWYgYW55IGFkdmFuY2VkIGZpZWxkcyBoYXZlIHZhbHVlc1xuICAgIGlmICh0aGlzLmluaXRpYWxEaXNhYmxlZCAhPT0gdW5kZWZpbmVkIHx8IHRoaXMuaW5pdGlhbENvbnRpbnVlT25FcnJvciAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIHRoaXMuaW5pdGlhbFJldHJ5Q291bnQgIT09IHVuZGVmaW5lZCB8fCB0aGlzLmluaXRpYWxJZnJhbWVMb2NhdG9yIHx8IFxuICAgICAgICB0aGlzLmluaXRpYWxPdGhlckxvY2F0b3JzKSB7XG4gICAgICB0aGlzLnNob3dBZHZhbmNlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYWR2YW5jZWQgc2V0dGluZ3MgdmFyaWFibGVzIGJhc2VkIG9uIGN1cnJlbnQgZm9ybSB2YWx1ZXMgd2hlblxuICAgKiBwYXJlbnQgaGFzIG5vdCBwcm92aWRlZCBhbnkgYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5cbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUFkdmFuY2VkU2V0dGluZ3MoKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5haUFnZW50Rm9ybS52YWx1ZTtcblxuICAgIHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2lzU3RlcE9wdGlvbmFsJyxcbiAgICAgICAgbGFiZWw6IFwiRG9uJ3QgZmFpbCB0aGUgdGVzdCBpZiB0aGlzIHN0ZXAgZmFpbHMuXCIsXG4gICAgICAgIHZhbHVlOiBmb3JtVmFsdWUuY29udGludWVPbkVycm9yICE9PSB1bmRlZmluZWQgPyBmb3JtVmFsdWUuY29udGludWVPbkVycm9yIDogdHJ1ZSxcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnc2hvdWxkU2tpcCcsXG4gICAgICAgIGxhYmVsOiAnU2tpcCB0aGlzIHN0ZXAgZHVyaW5nIGV4ZWN1dGlvbi4nLFxuICAgICAgICB2YWx1ZTogZm9ybVZhbHVlLmRpc2FibGVkICE9PSB1bmRlZmluZWQgPyBmb3JtVmFsdWUuZGlzYWJsZWQgOiBmYWxzZSxcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAncHdMb2NhdG9yJyxcbiAgICAgICAgbGFiZWw6ICdPdGhlciBMb2NhdG9ycycsXG4gICAgICAgIHZhbHVlOiB0aGlzLmNvbnZlcnRPdGhlckxvY2F0b3JzVG9BcnJheShmb3JtVmFsdWUub3RoZXJMb2NhdG9ycyksXG4gICAgICAgIHR5cGU6ICdzdHJfbGlzdCdcbiAgICAgIH1cbiAgICBdO1xuXG4gICAgdGhpcy5idWlsZEFkdmFuY2VkVmFyaWFibGVzRm9ybSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGluY29taW5nIGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgdG8gdGhlIHVuZGVybHlpbmcgZm9ybSBjb250cm9scy5cbiAgICogVXNlZCB3aGVuIHBhcmVudCBwYXNzZXMgYWR2YW5jZWQgdmFyaWFibGVzIChlLmcuIGZyb20gU3RlcEJ1aWxkZXJTZXJ2aWNlKS5cbiAgICovXG4gIHByaXZhdGUgYXBwbHlBZHZhbmNlZFNldHRpbmdzVG9Gb3JtKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzIHx8IHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICBpZiAodmFyaWFibGUubmFtZSA9PT0gJ2lzU3RlcE9wdGlvbmFsJykge1xuICAgICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnY29udGludWVPbkVycm9yJyk/LnNldFZhbHVlKCEhdmFyaWFibGUudmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZS5uYW1lID09PSAnc2hvdWxkU2tpcCcpIHtcbiAgICAgICAgdGhpcy5haUFnZW50Rm9ybS5nZXQoJ2Rpc2FibGVkJyk/LnNldFZhbHVlKCEhdmFyaWFibGUudmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZS5uYW1lID09PSAncHdMb2NhdG9yJykge1xuICAgICAgICBjb25zdCB2YWx1ZXNBcnJheTogc3RyaW5nW10gPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlLnZhbHVlKVxuICAgICAgICAgID8gdmFyaWFibGUudmFsdWVcbiAgICAgICAgICA6IHRoaXMuY29udmVydE90aGVyTG9jYXRvcnNUb0FycmF5KFN0cmluZyh2YXJpYWJsZS52YWx1ZSB8fCAnJykpO1xuICAgICAgICBjb25zdCBqb2luZWQgPSB2YWx1ZXNBcnJheS5qb2luKCcsICcpO1xuICAgICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnb3RoZXJMb2NhdG9ycycpPy5zZXRWYWx1ZShqb2luZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIG90aGVyTG9jYXRvcnMgZm9ybSB2YWx1ZSB0byBhIHN0cmluZyBhcnJheSBmb3Igc3RyX2xpc3QuXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRPdGhlckxvY2F0b3JzVG9BcnJheSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgLy8gU3BsaXQgYnkgY29tbWEgYW5kIHRyaW0gd2hpdGVzcGFjZVxuICAgIHJldHVybiB2YWx1ZVxuICAgICAgLnNwbGl0KCcsJylcbiAgICAgIC5tYXAoaXRlbSA9PiBpdGVtLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLmxlbmd0aCA+IDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHJlYWN0aXZlIGZvcm0gZm9yIGFkdmFuY2VkIHNldHRpbmdzIHZhcmlhYmxlcyAoc2FtZSBwYXR0ZXJuIGFzIGFjdGlvbiBzdGVwKS5cbiAgICovXG4gIHByaXZhdGUgYnVpbGRBZHZhbmNlZFZhcmlhYmxlc0Zvcm0oKTogdm9pZCB7XG4gICAgLy8gQ2xlYXIgZXhpc3RpbmcgZm9ybSBhcnJheVxuICAgIHdoaWxlICh0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5sZW5ndGggIT09IDApIHtcbiAgICAgIHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLnJlbW92ZUF0KDApO1xuICAgIH1cblxuICAgIC8vIEFkZCBmb3JtIGdyb3VwcyBmb3IgZWFjaCBhZHZhbmNlZCB2YXJpYWJsZVxuICAgIHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5mb3JFYWNoKHZhcmlhYmxlID0+IHtcbiAgICAgIGxldCBkZWZhdWx0VmFsdWU6IGFueTtcbiAgICAgIGlmICh2YXJpYWJsZS50eXBlID09PSAnc3RyX2xpc3QnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlQXJyYXkgPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlLnZhbHVlKSA/IHZhcmlhYmxlLnZhbHVlIDogW107XG4gICAgICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZmIuYXJyYXkoXG4gICAgICAgICAgdmFsdWVBcnJheS5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IHZhbHVlQXJyYXkubWFwKChpdGVtOiBzdHJpbmcpID0+IHRoaXMuZmIuY29udHJvbChpdGVtKSlcbiAgICAgICAgICAgIDogW3RoaXMuZmIuY29udHJvbCgnJyldIC8vIFN0YXJ0IHdpdGggb25lIGVtcHR5IGNvbnRyb2xcbiAgICAgICAgKTtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gZm9ybUFycmF5O1xuICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZS50eXBlID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIHZhcmlhYmxlLnZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gdmFyaWFibGUudmFsdWUgPT09IHRydWUgfHwgdmFyaWFibGUudmFsdWUgPT09ICd0cnVlJyB8fCB2YXJpYWJsZS52YWx1ZSA9PT0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IHZhcmlhYmxlLnZhbHVlIHx8ICcnO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YXJpYWJsZUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG5hbWU6IFt2YXJpYWJsZS5uYW1lXSxcbiAgICAgICAgdmFsdWU6IHZhcmlhYmxlLnR5cGUgPT09ICdzdHJfbGlzdCcgPyBkZWZhdWx0VmFsdWUgOiBbZGVmYXVsdFZhbHVlXSxcbiAgICAgICAgdHlwZTogW3ZhcmlhYmxlLnR5cGUgfHwgJ3N0cmluZyddLFxuICAgICAgICBsYWJlbDogW3ZhcmlhYmxlLmxhYmVsIHx8ICcnXVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLnB1c2godmFyaWFibGVHcm91cCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRUeXBlQ29uZmlnKCk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogJ3R5cGUnLFxuICAgICAgcGxhY2Vob2xkZXI6ICdTZWxlY3QgdHlwZScsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMudHlwZU9wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgZ2V0RW52aXJvbm1lbnRDb25maWcoKTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiAnZW52aXJvbm1lbnRzJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IGVudmlyb25tZW50JyxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgICBzZXJ2ZXJTZWFyY2g6IHRydWUsXG4gICAgICBvcHRpb25zOiB0aGlzLmVudmlyb25tZW50T3B0aW9ucyxcbiAgICAgIGhhc01vcmU6IHRoaXMuaGFzTW9yZUVudmlyb25tZW50cyxcbiAgICAgIGlzTG9hZGluZzogdGhpcy5pc0xvYWRpbmdFbnZpcm9ubWVudHMsXG4gICAgICBvblNlYXJjaDogKHNlYXJjaFRlcm06IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaEVudmlyb25tZW50cy5lbWl0KHNlYXJjaFRlcm0pO1xuICAgICAgfSxcbiAgICAgIG9uTG9hZE1vcmU6ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzTW9yZUVudmlyb25tZW50cyAmJiAhdGhpcy5pc0xvYWRpbmdFbnZpcm9ubWVudHMpIHtcbiAgICAgICAgICB0aGlzLmxvYWRNb3JlRW52aXJvbm1lbnRzLmVtaXQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBnZXRSZXRyeUNvdW50Q29uZmlnKCk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogJ3JldHJ5Q291bnQnLFxuICAgICAgcGxhY2Vob2xkZXI6ICdEeW5hbWljIHNlYXJjaCBzZWxlY3RvciBmcm9tIGxpYnJhcnkgb3IgbWFudWFsJyxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgICBvcHRpb25zOiB0aGlzLnJldHJ5Q291bnRPcHRpb25zXG4gICAgfTtcbiAgfVxuXG4gIGdldElmcmFtZUxvY2F0b3JDb25maWcoKTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiAnaWZyYW1lTG9jYXRvcicsXG4gICAgICBwbGFjZWhvbGRlcjogJ0R5bmFtaWMgc2VhcmNoIHNlbGVjdG9yIGZyb20gbGlicmFyeSBvciBtYW51YWwnLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMuaWZyYW1lTG9jYXRvck9wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgZ2V0T3RoZXJMb2NhdG9yc0NvbmZpZygpOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICBrZXk6ICdvdGhlckxvY2F0b3JzJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnRHluYW1pYyBzZWFyY2ggc2VsZWN0b3IgZnJvbSBsaWJyYXJ5IG9yIG1hbnVhbCcsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgb3B0aW9uczogdGhpcy5vdGhlckxvY2F0b3JzT3B0aW9uc1xuICAgIH07XG4gIH1cblxuICB0b2dnbGVBZHZhbmNlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dBZHZhbmNlZCA9ICF0aGlzLnNob3dBZHZhbmNlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYWR2YW5jZWQgYm9vbGVhbiB2YXJpYWJsZSBjaGFuZ2VzIGFuZCBzeW5jIHRvIGZvcm0uXG4gICAqL1xuICBvbkFkdmFuY2VkVmFyaWFibGVCb29sZWFuQ2hhbmdlKHZhcmlhYmxlTmFtZTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHZhcmlhYmxlID0gdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBjb3JyZXNwb25kaW5nIGZvcm0gY29udHJvbHNcbiAgICBpZiAodmFyaWFibGVOYW1lID09PSAnaXNTdGVwT3B0aW9uYWwnKSB7XG4gICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnY29udGludWVPbkVycm9yJyk/LnNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHZhcmlhYmxlTmFtZSA9PT0gJ3Nob3VsZFNraXAnKSB7XG4gICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnZGlzYWJsZWQnKT8uc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIEtlZXAgYWR2YW5jZWRWYXJpYWJsZXNGb3JtIGluIHN5bmNcbiAgICBjb25zdCB2YXJpYWJsZUluZGV4ID0gdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0uY29udHJvbHMuZmluZEluZGV4KFxuICAgICAgY29udHJvbCA9PiBjb250cm9sLmdldCgnbmFtZScpPy52YWx1ZSA9PT0gdmFyaWFibGVOYW1lXG4gICAgKTtcbiAgICBpZiAodmFyaWFibGVJbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmF0KHZhcmlhYmxlSW5kZXgpLmdldCgndmFsdWUnKT8uc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFkdmFuY2VkIG5vbi1ib29sZWFuIHZhbHVlIGNoYW5nZXMgKGUuZy4gcHdMb2NhdG9yKSBhbmQgc3luYyB0byBmb3JtLlxuICAgKi9cbiAgb25BZHZhbmNlZFZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCB2YXJpYWJsZSA9IHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5maW5kKHYgPT4gdi5uYW1lID09PSB2YXJpYWJsZU5hbWUpO1xuICAgIGlmICh2YXJpYWJsZSkge1xuICAgICAgdmFyaWFibGUudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFyaWFibGVOYW1lID09PSAncHdMb2NhdG9yJykge1xuICAgICAgLy8gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgc3RyaW5nW10gZnJvbSBzdHJfbGlzdFxuICAgICAgY29uc3QgdmFsdWVzQXJyYXk6IHN0cmluZ1tdID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IHRoaXMuY29udmVydE90aGVyTG9jYXRvcnNUb0FycmF5KFN0cmluZyh2YWx1ZSB8fCAnJykpO1xuICAgICAgY29uc3Qgam9pbmVkID0gdmFsdWVzQXJyYXkuam9pbignLCAnKTtcbiAgICAgIHRoaXMuYWlBZ2VudEZvcm0uZ2V0KCdvdGhlckxvY2F0b3JzJyk/LnNldFZhbHVlKGpvaW5lZCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFyaWFibGVJbmRleCA9IHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmNvbnRyb2xzLmZpbmRJbmRleChcbiAgICAgIGNvbnRyb2wgPT4gY29udHJvbC5nZXQoJ25hbWUnKT8udmFsdWUgPT09IHZhcmlhYmxlTmFtZVxuICAgICk7XG4gICAgaWYgKHZhcmlhYmxlSW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5hdCh2YXJpYWJsZUluZGV4KTtcbiAgICAgIGNvbnN0IGlzU3RyTGlzdCA9IHZhcmlhYmxlICYmIHZhcmlhYmxlLnR5cGUgPT09ICdzdHJfbGlzdCc7XG4gICAgICBpZiAoIWlzU3RyTGlzdCkge1xuICAgICAgICBmb3JtR3JvdXAuZ2V0KCd2YWx1ZScpPy5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsbGVkLmVtaXQoKTtcbiAgfVxuXG4gIG9uQ3JlYXRlU3RlcCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5haUFnZW50Rm9ybS52YWxpZCkge1xuICAgICAgLy8gRW5zdXJlIGFkdmFuY2VkIHZhcmlhYmxlIHZhbHVlcyBhcmUgc3luY2VkIGJhY2sgdG8gdGhlIGZvcm0gYmVmb3JlIGVtaXR0aW5nXG4gICAgICB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICAgIGlmICh2YXJpYWJsZS5uYW1lID09PSAnaXNTdGVwT3B0aW9uYWwnKSB7XG4gICAgICAgICAgdGhpcy5haUFnZW50Rm9ybS5nZXQoJ2NvbnRpbnVlT25FcnJvcicpPy5zZXRWYWx1ZSghIXZhcmlhYmxlLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZS5uYW1lID09PSAnc2hvdWxkU2tpcCcpIHtcbiAgICAgICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnZGlzYWJsZWQnKT8uc2V0VmFsdWUoISF2YXJpYWJsZS52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFyaWFibGUubmFtZSA9PT0gJ3B3TG9jYXRvcicpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZXNBcnJheTogc3RyaW5nW10gPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlLnZhbHVlKVxuICAgICAgICAgICAgPyB2YXJpYWJsZS52YWx1ZVxuICAgICAgICAgICAgOiB0aGlzLmNvbnZlcnRPdGhlckxvY2F0b3JzVG9BcnJheShTdHJpbmcodmFyaWFibGUudmFsdWUgfHwgJycpKTtcbiAgICAgICAgICBjb25zdCBqb2luZWQgPSB2YWx1ZXNBcnJheS5qb2luKCcsICcpO1xuICAgICAgICAgIHRoaXMuYWlBZ2VudEZvcm0uZ2V0KCdvdGhlckxvY2F0b3JzJyk/LnNldFZhbHVlKGpvaW5lZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmFpQWdlbnRGb3JtLnZhbHVlO1xuICAgICAgY29uc3Qgc3RlcERhdGE6IEFpQWdlbnRGb3JtRGF0YSA9IHtcbiAgICAgICAgcXVlcnk6IGZvcm1WYWx1ZS5xdWVyeSB8fCAnJyxcbiAgICAgICAgdHlwZTogZm9ybVZhbHVlLnR5cGUgfHwgJycsXG4gICAgICAgIGVudmlyb25tZW50czogZm9ybVZhbHVlLmVudmlyb25tZW50cyB8fCAnJyxcbiAgICAgICAgbWV0YWRhdGE6IGZvcm1WYWx1ZS5tZXRhZGF0YSB8fCAnJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGZvcm1WYWx1ZS5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgY29udGludWVPbkVycm9yOiBmb3JtVmFsdWUuY29udGludWVPbkVycm9yIHx8IGZhbHNlLFxuICAgICAgICBkaXNhYmxlZDogZm9ybVZhbHVlLmRpc2FibGVkIHx8IGZhbHNlLFxuICAgICAgICByZXRyeUNvdW50OiBmb3JtVmFsdWUucmV0cnlDb3VudCB8fCAnJyxcbiAgICAgICAgaWZyYW1lTG9jYXRvcjogZm9ybVZhbHVlLmlmcmFtZUxvY2F0b3IgfHwgJycsXG4gICAgICAgIG90aGVyTG9jYXRvcnM6IGZvcm1WYWx1ZS5vdGhlckxvY2F0b3JzIHx8ICcnLFxuICAgICAgICBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOiB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXNcbiAgICAgIH07XG4gICAgICB0aGlzLmNyZWF0ZVN0ZXAuZW1pdChzdGVwRGF0YSk7XG4gICAgfVxuICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWJnLXdoaXRlIGNxYS1weC00IGNxYS1weS0yIGNxYS1oLWZ1bGwgY3FhLW92ZXJmbG93LXktYXV0b1wiPlxuICA8IS0tIEhlYWRlciAtLT5cbiAgPGgyIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LWJsYWNrLTEwMCBjcWEtbWItNFwiPlxuICAgIHt7IGVkaXRNb2RlID8gJ0VkaXQgQUkgU3RlcCcgOiAnQ3JlYXRlIEFJIFN0ZXAnIH19XG4gIDwvaDI+XG5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZmxleC0xIFwiPlxuICAgIDwhLS0gV2hhdCBzaG91bGQgdGhlIGFnZW50IGFjaGlldmU/IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItNlwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1ncmF5LTcwMCBjcWEtbWItMSBjcWEtYmxvY2tcIj5cbiAgICAgICAgV2hhdCBzaG91bGQgdGhlIGFnZW50IGFjaGlldmU/PHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bI0VGNDQ0NF0gY3FhLW1sLTAuNVwiPio8L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGNxYS1jdXN0b20tdGV4dGFyZWFcbiAgICAgICBjbGFzcz1cImNxYS1zdGVwLWJ1aWxkZXItYWktYWdlbnQtdGV4dGFyZWFcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1doYXQgc2hvdWxkIHRoZSBhZ2VudCBhY2hpZXZlPydcIlxuICAgICAgICBbdmFsdWVdPVwiYWlBZ2VudEZvcm0uZ2V0KCdxdWVyeScpPy52YWx1ZVwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIFtyb3dzXT1cIjRcIlxuICAgICAgICBbdGV4dGFyZWFJbmxpbmVTdHlsZV09XCIncmVzaXplOiB2ZXJ0aWNhbDttYXgtaGVpZ2h0OiA0MDBweDsnXCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImFpQWdlbnRGb3JtLmdldCgncXVlcnknKT8uc2V0VmFsdWUoJGV2ZW50KVwiPlxuICAgICAgPC9jcWEtY3VzdG9tLXRleHRhcmVhPlxuICAgICAgPHAgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyMwQTBBMEFdIFwiPlxuICAgICAgICBUaXA6IFVzZSBudW1iZXJlZCBzdGVwcyBvciBidWxsZXQgcG9pbnRzIGZvciBjb21wbGV4IHRhc2tzLlxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC13cmFwIGNxYS1jdXN0b20tZm9ybS1maWVsZHNcIj5cbiAgICA8IS0tIFR5cGUgRHJvcGRvd24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1tYi02IGNxYS13LTEvMiBjcWEtcHItMlwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS1ibG9jayBjcWEtdGV4dC1bMTRweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItMVwiPlxuICAgICAgICBUeXBlPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bI0VGNDQ0NF0gY3FhLW1sLTAuNVwiPio8L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBjbGFzcz1cImNxYS13LWZ1bGxcIiBbZm9ybV09XCJhaUFnZW50Rm9ybVwiIFtjb25maWddPVwiZ2V0VHlwZUNvbmZpZygpXCI+XG4gICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRW52aXJvbm1lbnRzIERyb3Bkb3duIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItNiBjcWEtdy0xLzIgY3FhLXBsLTJcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS1sZWFkaW5nLVsxMDAlXSBjcWEtYmxvY2sgY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTFcIj5cbiAgICAgICAgRW52aW9yb25tZW50czxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyNFRjQ0NDRdIGNxYS1tbC0wLjVcIj4qPC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgW2Zvcm1dPVwiYWlBZ2VudEZvcm1cIiBbY29uZmlnXT1cImdldEVudmlyb25tZW50Q29uZmlnKClcIj5cbiAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBNZXRhZGF0YSBJbnB1dCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTIgY3FhLXctMS8yIGNxYS1wci0yXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtbGVhZGluZy1bMTAwJV0gY3FhLWJsb2NrIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0xXCI+XG4gICAgICAgIE1ldGFkYXRhXG4gICAgICA8L2xhYmVsPlxuICAgICAgPGNxYS1jdXN0b20taW5wdXRcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidUZXh0IElucHV0J1wiXG4gICAgICAgIFt2YWx1ZV09XCJhaUFnZW50Rm9ybS5nZXQoJ21ldGFkYXRhJyk/LnZhbHVlXCJcbiAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImFpQWdlbnRGb3JtLmdldCgnbWV0YWRhdGEnKT8uc2V0VmFsdWUoJGV2ZW50KVwiPlxuICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBEZXNjcmlwdGlvbiBJbnB1dCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLXctMS8yIGNxYS1wbC0yIFwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS1ibG9jayBjcWEtdGV4dC1bMTRweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItMVwiPlxuICAgICAgICBEZXNjcmlwdGlvblxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCInVGV4dCBJbnB1dCdcIlxuICAgICAgICBbdmFsdWVdPVwiYWlBZ2VudEZvcm0uZ2V0KCdkZXNjcmlwdGlvbicpPy52YWx1ZVwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJhaUFnZW50Rm9ybS5nZXQoJ2Rlc2NyaXB0aW9uJyk/LnNldFZhbHVlKCRldmVudClcIj5cbiAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuXG4gICAgPCEtLSBBZHZhbmNlZCBTZWN0aW9uIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItMlwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLXctZnVsbCBjcWEtdGV4dC1sZWZ0IGNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDAgY3FhLXB5LTIgY3FhLWJvcmRlci1iIGNxYS1ib3JkZXItZ3JheS0yMDBcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWR2YW5jZWQoKVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XVwiPkFkdmFuY2VkPC9zcGFuPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1sZyBjcWEtdHJhbnNpdGlvbi10cmFuc2Zvcm1cIiBbY2xhc3MuY3FhLXJvdGF0ZS0xODBdPVwic2hvd0FkdmFuY2VkXCI+XG4gICAgICAgICAgZXhwYW5kX21vcmVcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGRpdiAqbmdJZj1cInNob3dBZHZhbmNlZFwiIGNsYXNzPVwiIGNxYS1jdXN0b20tZm9ybS1maWVsZHMgY3FhLWZsZXggY3FhLWZsZXgtY29sXCI+XG4gICAgICAgIDxjcWEtYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0gXG4gICAgICAgICAgW2FkdmFuY2VkVmFyaWFibGVzXT1cImFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXNcIlxuICAgICAgICAgIFthZHZhbmNlZFZhcmlhYmxlRm9ybV09XCJhZHZhbmNlZFZhcmlhYmxlc0Zvcm1cIlxuICAgICAgICAgICh2YXJpYWJsZUJvb2xlYW5DaGFuZ2UpPVwib25BZHZhbmNlZFZhcmlhYmxlQm9vbGVhbkNoYW5nZSgkZXZlbnQubmFtZSwgJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgICAgKHZhcmlhYmxlVmFsdWVDaGFuZ2UpPVwib25BZHZhbmNlZFZhcmlhYmxlVmFsdWVDaGFuZ2UoJGV2ZW50Lm5hbWUsICRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgPC9jcWEtYWR2YW5jZWQtdmFyaWFibGVzLWZvcm0+XG4gICAgICAgIDwhLS0gQ29udGludWUgb24gRXJyb3IgLS0+XG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNxYS1tYi0xXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1tYi0yXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtdGV4dC1bIzczNzM3M11cIj5Db250aW51ZSBvbiBFcnJvcjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3FhLXN0ZXAtYnVpbGRlci10b2dnbGUtc2VjdGlvblwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cImFpQWdlbnRGb3JtLmdldCgnY29udGludWVPbkVycm9yJyk/LnZhbHVlIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJhaUFnZW50Rm9ybS5nZXQoJ2NvbnRpbnVlT25FcnJvcicpPy5zZXRWYWx1ZSgkZXZlbnQuY2hlY2tlZClcIlxuICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1ub3JtYWwgY3FhLXRleHQtWyMwQTBBMEFdXCI+XG4gICAgICAgICAgICAgIERvbid0IGZhaWwgdGhlIHRlc3QgaWYgdGhpcyBzdGVwIGZhaWxzLlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgIDwhLS0gRGlzYWJsZWQgLS0+XG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNxYS1tYi0xXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1tYi0yXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyM3MzczNzNdXCI+RGlzYWJsZWQ8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgICAgICAgICBjbGFzcz1cImNxYS1zdGVwLWJ1aWxkZXItdG9nZ2xlLXNlY3Rpb25cIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJhaUFnZW50Rm9ybS5nZXQoJ2Rpc2FibGVkJyk/LnZhbHVlIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJhaUFnZW50Rm9ybS5nZXQoJ2Rpc2FibGVkJyk/LnNldFZhbHVlKCRldmVudC5jaGVja2VkKVwiXG4gICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LW5vcm1hbCBjcWEtdGV4dC1bIzBBMEEwQV1cIj5cbiAgICAgICAgICAgICAgU2tpcCB0aGlzIHN0ZXAgZHVyaW5nIGV4ZWN1dGlvbi5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICA8IS0tIFJldHJ5IENvdW50IC0tPlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLW1iLTFcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtbGVhZGluZy1bMTAwJV0gY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTEgY3FhLWJsb2NrXCI+XG4gICAgICAgICAgICBSZXRyeSBDb3VudFxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBbZm9ybV09XCJhaUFnZW50Rm9ybVwiIFtjb25maWddPVwiZ2V0UmV0cnlDb3VudENvbmZpZygpXCI+XG4gICAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICA8IS0tIElmcmFtZSBsb2NhdG9yIC0tPlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLW1iLTFcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtbGVhZGluZy1bMTAwJV0gY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTEgY3FhLWJsb2NrXCI+XG4gICAgICAgICAgICBJZnJhbWUgbG9jYXRvclxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBjbGFzcz1cImNxYS10ZXh0LVsjNDE0MTQ2XVwiIFtmb3JtXT1cImFpQWdlbnRGb3JtXCIgW2NvbmZpZ109XCJnZXRJZnJhbWVMb2NhdG9yQ29uZmlnKClcIj5cbiAgICAgICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgIDwhLS0gT3RoZXIgTG9jYXRvcnMgLS0+XG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtbWItMVwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS1sZWFkaW5nLVsxMDAlXSBjcWEtdGV4dC1bMTRweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItMSBjcWEtYmxvY2tcIj5cbiAgICAgICAgICAgIE90aGVyIExvY2F0b3JzXG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFtmb3JtXT1cImFpQWdlbnRGb3JtXCIgW2NvbmZpZ109XCJnZXRPdGhlckxvY2F0b3JzQ29uZmlnKClcIj5cbiAgICAgICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQWN0aW9uIEJ1dHRvbnMgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtdy1mdWxsIGNxYS1nYXAtMiBjcWEtbXQtYXV0byBjcWEtcHQtNCBjcWEtYm9yZGVyLXQgY3FhLWJvcmRlci1ncmF5LTIwMFwiPlxuICAgIDxjcWEtYnV0dG9uIGNsYXNzPVwiY3FhLXctMS8yIGNxYS1yb3VuZGVkLVsxMHB4XVwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIHRleHQ9XCJDYW5jZWxcIiBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1mbGV4LTEgY3FhLXctZnVsbCdcIlxuICAgICAgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiPlxuICAgIDwvY3FhLWJ1dHRvbj5cbiAgICA8Y3FhLWJ1dHRvbiBjbGFzcz1cImNxYS1ib3JkZXItc29saWQgY3FhLXJvdW5kZWQtWzlweF0gY3FhLXctMS8yIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bIzNGNDNFRV1cIiB2YXJpYW50PVwiZmlsbGVkXCIgW3RleHRdPVwiZWRpdE1vZGUgPyAnVXBkYXRlIFN0ZXAnIDogJ0NyZWF0ZSBTdGVwJ1wiIFtjdXN0b21DbGFzc109XCInY3FhLWZsZXgtMSBjcWEtdy1mdWxsJ1wiXG4gICAgICBbZGlzYWJsZWRdPVwiIWFpQWdlbnRGb3JtLnZhbGlkXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ3JlYXRlU3RlcCgpXCI+XG4gICAgPC9jcWEtYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
@@ -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 <!-- 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"] }] });
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: only show when initially loading (no options yet). Load-more loading is shown inside the dropdown. -->\n <div *ngIf=\"isLoadingStepGroups && stepGroupOptions.length === 0\" 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 <!-- 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: [] }]
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: only show when initially loading (no options yet). Load-more loading is shown inside the dropdown. -->\n <div *ngIf=\"isLoadingStepGroups && stepGroupOptions.length === 0\" 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,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=
208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc3RlcC1idWlsZGVyL3N0ZXAtYnVpbGRlci1ncm91cC9zdGVwLWJ1aWxkZXItZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWdyb3VwL3N0ZXAtYnVpbGRlci1ncm91cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQXVDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7O0FBMkJqRixNQUFNLE9BQU8seUJBQXlCO0lBNkNwQyxZQUFvQixFQUFlO1FBQWYsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQTVDbkMsc0NBQXNDO1FBQzdCLHFCQUFnQixHQUFzQixFQUFFLENBQUM7UUFFbEQsOERBQThEO1FBQ3JELHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUU1QyxvQ0FBb0M7UUFDM0Isd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBSzlDLDJCQUEyQjtRQUNsQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBS25DLDBDQUEwQztRQUNqQyw4QkFBeUIsR0FBWSxLQUFLLENBQUM7UUFLcEQsZ0NBQWdDO1FBQ3RCLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztRQUU3RCxrRUFBa0U7UUFDeEQsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUV6RCwwQkFBMEI7UUFDaEIsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFL0MsbURBQW1EO1FBQ3pDLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFMUQsZ0RBQWdEO1FB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LE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUM5RCxDQUFDOztzSEF6TVUseUJBQXlCOzBHQUF6Qix5QkFBeUIsdW9CQzVCdEMsZzRLQTRHQTsyRkRoRmEseUJBQXlCO2tCQU5yQyxTQUFTOytCQUNFLHdCQUF3QixRQUc1QixFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7a0dBSXJCLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBR0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUdHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBR0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUdJLFVBQVU7c0JBQW5CLE1BQU07Z0JBR0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUdHLFNBQVM7c0JBQWxCLE1BQU07Z0JBR0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUdHLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEeW5hbWljU2VsZWN0RmllbGRDb25maWcsIFNlbGVjdE9wdGlvbiB9IGZyb20gJy4uLy4uL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LWZpZWxkLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcEdyb3VwVmFyaWFibGUge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIHZhcmlhYmxlcz86IEFycmF5PHsgbmFtZTogc3RyaW5nOyBwYXJhbWV0ZXJWYWx1ZT86IHN0cmluZyB9Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGVwR3JvdXBGb3JtRGF0YSB7XG4gIHN0ZXBHcm91cElkOiBudW1iZXI7XG4gIHN0ZXBHcm91cD86IGFueTsgLy8gVGVzdENhc2Ugb2JqZWN0XG4gIHJ1bnRpbWVWYXJpYWJsZXM/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+XG4gICAgPCEtLSBMb2FkaW5nIFN0YXRlOiBvbmx5IHNob3cgd2hlbiBpbml0aWFsbHkgbG9hZGluZyAobm8gb3B0aW9ucyB5ZXQpLiBMb2FkLW1vcmUgbG9hZGluZyBpcyBzaG93biBpbnNpZGUgdGhlIGRyb3Bkb3duLiAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nU3RlcEdyb3VwcyAmJiBzdGVwR3JvdXBPcHRpb25zLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWp1c3RpZnktY2VudGVyIGNxYS1pdGVtcy1jZW50ZXIgY3FhLXB5LThcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTRweF0gY3FhLXRleHQtWyM2YjcyODBdXCI+TG9hZGluZyBzdGVwIGdyb3Vwcy4uLjwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBFbXB0eSBTdGF0ZSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiIWlzTG9hZGluZ1N0ZXBHcm91cHMgJiYgc3RlcEdyb3VwT3B0aW9ucy5sZW5ndGggPT09IDBcIiBjbGFzcz1cImNxYS10ZXh0LWNlbnRlciBjcWEtcHktOCBjcWEtdGV4dC1bIzljYTNhZl0gY3FhLXRleHQtWzE0cHhdXCI+XG4gICAgICBObyBzdGVwIGdyb3VwcyBhdmFpbGFibGVcbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBBY3Rpb24gQnV0dG9ucyAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS13LWZ1bGwgY3FhLWdhcC0yIGNxYS1tdC1hdXRvIGNxYS1wdC00IGNxYS1ib3JkZXItdCBjcWEtYm9yZGVyLWdyYXktMjAwXCI+XG4gICAgPGNxYS1idXR0b24gY2xhc3M9XCJjcWEtdy0xLzIgY3FhLXJvdW5kZWQtWzEwcHhdXCIgdmFyaWFudD1cIm91dGxpbmVkXCIgdGV4dD1cIkNhbmNlbFwiIFtjdXN0b21DbGFzc109XCInY3FhLWZsZXgtMSBjcWEtdy1mdWxsJ1wiXG4gICAgICAoY2xpY2tlZCk9XCJvbkNhbmNlbCgpXCI+XG4gICAgPC9jcWEtYnV0dG9uPlxuICAgIDxjcWEtYnV0dG9uIGNsYXNzPVwiY3FhLWJvcmRlci1zb2xpZCBjcWEtcm91bmRlZC1bOXB4XSBjcWEtdy0xLzIgY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjM0Y0M0VFXVwiIHZhcmlhbnQ9XCJmaWxsZWRcIiBbdGV4dF09XCJlZGl0TW9kZSA/ICdVcGRhdGUgU3RlcCcgOiAnSW5zZXJ0IFN0ZXAgR3JvdXAnXCIgW2N1c3RvbUNsYXNzXT1cIidjcWEtZmxleC0xIGNxYS13LWZ1bGwnXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhaXNGb3JtVmFsaWQoKVwiXG4gICAgICAoY2xpY2tlZCk9XCJvbkNyZWF0ZVN0ZXAoKVwiPlxuICAgIDwvY3FhLWJ1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuIl19