@cqa-lib/cqa-ui 1.1.541-gamma.8 → 1.1.542

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/.github/workflows/README.md +1 -8
  2. package/esm2020/lib/compare-runs/compare-runs.component.mjs +1 -1
  3. package/esm2020/lib/execution-screen/condition-debug-step/condition-branch-editor.component.mjs +3 -32
  4. package/esm2020/lib/execution-screen/db-query-execution-item/db-query-execution-item.component.mjs +1 -1
  5. package/esm2020/lib/execution-screen/db-verification-step/db-verification-step.component.mjs +1 -1
  6. package/esm2020/lib/iterations-loop/iterations-loop.component.mjs +1 -1
  7. package/esm2020/lib/mixed-variable-input/mixed-variable-input.component.mjs +10 -30
  8. package/esm2020/lib/new-global-variable-dialog/new-global-variable-dialog.component.mjs +5 -16
  9. package/esm2020/lib/new-global-variable-dialog/new-global-variable-dialog.models.mjs +1 -1
  10. package/esm2020/lib/new-test-data-profile-dialog/new-test-data-profile-dialog.component.mjs +51 -50
  11. package/esm2020/lib/new-test-data-profile-dialog/new-test-data-profile-dialog.models.mjs +1 -1
  12. package/esm2020/lib/segment-control/segment-control.component.mjs +4 -12
  13. package/esm2020/lib/step-builder/step-builder-action/step-builder-action.component.mjs +3 -21
  14. package/esm2020/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.mjs +23 -47
  15. package/esm2020/lib/step-builder/step-builder-condition/step-builder-condition.component.mjs +3 -21
  16. package/esm2020/lib/step-builder/step-builder-database/step-builder-database.component.mjs +47 -76
  17. package/esm2020/lib/step-builder/step-builder-loop/step-builder-loop.component.mjs +3 -16
  18. package/esm2020/lib/step-builder/template-variables-form/template-variables-form.component.mjs +170 -326
  19. package/esm2020/lib/templates/table-template.component.mjs +3 -5
  20. package/esm2020/lib/test-case-details/ai-agent-step/ai-agent-step.component.mjs +3 -3
  21. package/esm2020/lib/test-case-details/ai-verify-step/ai-verify-step.component.mjs +3 -3
  22. package/esm2020/lib/test-case-details/api-edit-step/api-edit-step.component.mjs +7 -20
  23. package/esm2020/lib/test-case-details/test-case-details-edit/test-case-details-edit.component.mjs +4 -43
  24. package/esm2020/lib/test-case-details/test-case-details.models.mjs +1 -3
  25. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal-data.mjs +1 -1
  26. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal.component.mjs +7 -137
  27. package/esm2020/lib/ui-kit.module.mjs +3 -23
  28. package/esm2020/public-api.mjs +1 -6
  29. package/fesm2015/cqa-lib-cqa-ui.mjs +404 -1245
  30. package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
  31. package/fesm2020/cqa-lib-cqa-ui.mjs +330 -1156
  32. package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
  33. package/lib/execution-screen/condition-debug-step/condition-branch-editor.component.d.ts +1 -26
  34. package/lib/new-global-variable-dialog/new-global-variable-dialog.component.d.ts +2 -5
  35. package/lib/new-global-variable-dialog/new-global-variable-dialog.models.d.ts +0 -8
  36. package/lib/new-test-data-profile-dialog/new-test-data-profile-dialog.component.d.ts +10 -9
  37. package/lib/new-test-data-profile-dialog/new-test-data-profile-dialog.models.d.ts +1 -1
  38. package/lib/segment-control/segment-control.component.d.ts +1 -3
  39. package/lib/step-builder/step-builder-action/step-builder-action.component.d.ts +1 -19
  40. package/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.d.ts +2 -16
  41. package/lib/step-builder/step-builder-condition/step-builder-condition.component.d.ts +1 -19
  42. package/lib/step-builder/step-builder-database/step-builder-database.component.d.ts +11 -33
  43. package/lib/step-builder/step-builder-loop/step-builder-loop.component.d.ts +1 -15
  44. package/lib/step-builder/template-variables-form/template-variables-form.component.d.ts +20 -75
  45. package/lib/templates/table-template.component.d.ts +1 -8
  46. package/lib/test-case-details/api-edit-step/api-edit-step.component.d.ts +1 -7
  47. package/lib/test-case-details/test-case-details-edit/test-case-details-edit.component.d.ts +0 -7
  48. package/lib/test-case-details/test-case-details.models.d.ts +0 -2
  49. package/lib/test-case-details/test-data-modal/test-data-modal-data.d.ts +1 -23
  50. package/lib/test-case-details/test-data-modal/test-data-modal.component.d.ts +6 -40
  51. package/lib/ui-kit.module.d.ts +96 -100
  52. package/package.json +1 -1
  53. package/public-api.d.ts +0 -5
  54. package/styles.css +1 -1
  55. package/esm2020/lib/new-global-variable-dialog/global-variable-tags-input.component.mjs +0 -129
  56. package/esm2020/lib/test-case-details/data-library-panel/data-library-panel.component.mjs +0 -116
  57. package/esm2020/lib/test-case-details/data-library-panel/data-library-panel.models.mjs +0 -2
  58. package/esm2020/lib/test-case-details/data-library-panel/element-card.component.mjs +0 -36
  59. package/esm2020/lib/test-case-details/data-library-panel/test-data-profile-card.component.mjs +0 -38
  60. package/lib/new-global-variable-dialog/global-variable-tags-input.component.d.ts +0 -39
  61. package/lib/test-case-details/data-library-panel/data-library-panel.component.d.ts +0 -42
  62. package/lib/test-case-details/data-library-panel/data-library-panel.models.d.ts +0 -17
  63. package/lib/test-case-details/data-library-panel/element-card.component.d.ts +0 -13
  64. package/lib/test-case-details/data-library-panel/test-data-profile-card.component.d.ts +0 -13
@@ -41,16 +41,6 @@ export class ConditionBranchEditorComponent {
41
41
  this.environmentOptions = [];
42
42
  this.hasMoreEnvironments = false;
43
43
  this.isLoadingEnvironments = false;
44
- /** When true (or `isInsideForLoopStep` true), the inner form shows the Test
45
- * Data Profile segment. Without this, the lib defaults the segment in,
46
- * even though the test case has no TDP — which is what shows the tab in the
47
- * debug-screen condition-branch editor. */
48
- this.hasTestDataProfile = false;
49
- /** True when this branch lives inside a FOR-loop step. */
50
- this.isInsideForLoopStep = false;
51
- /** Workspace-scoped global variables for the Global Data tab. */
52
- this.globalVariableOptions = [];
53
- this.isLoadingGlobalVariables = false;
54
44
  /** True while the parent is saving (disables/shows loader on Save button) */
55
45
  this.isSaving = false;
56
46
  this.save = new EventEmitter();
@@ -66,7 +56,6 @@ export class ConditionBranchEditorComponent {
66
56
  this.loadMoreParameters = new EventEmitter();
67
57
  this.searchEnvironments = new EventEmitter();
68
58
  this.loadMoreEnvironments = new EventEmitter();
69
- this.searchGlobalVariables = new EventEmitter();
70
59
  this.selectedTemplate = null;
71
60
  this.templateVariables = [];
72
61
  this.advancedSettingsVariables = [];
@@ -349,10 +338,10 @@ export class ConditionBranchEditorComponent {
349
338
  }
350
339
  }
351
340
  ConditionBranchEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ConditionBranchEditorComponent, deps: [{ token: i1.FormBuilder }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
352
- ConditionBranchEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ConditionBranchEditorComponent, selector: "cqa-condition-branch-editor", inputs: { mode: "mode", conditionTemplates: "conditionTemplates", setConditionTemplateVariables: "setConditionTemplateVariables", setAdvancedSettingsVariables: "setAdvancedSettingsVariables", computeHtmlGrammarFn: "computeHtmlGrammarFn", elementOptions: "elementOptions", hasMoreElements: "hasMoreElements", isLoadingElements: "isLoadingElements", screenNameOptions: "screenNameOptions", hasMoreScreenNames: "hasMoreScreenNames", isLoadingScreenNames: "isLoadingScreenNames", parameterOptions: "parameterOptions", hasMoreParameters: "hasMoreParameters", isLoadingParameters: "isLoadingParameters", environmentOptions: "environmentOptions", hasMoreEnvironments: "hasMoreEnvironments", isLoadingEnvironments: "isLoadingEnvironments", testCaseEnvironmentName: "testCaseEnvironmentName", testCaseEnvironmentLabelSuffix: "testCaseEnvironmentLabelSuffix", environmentLegacyDeprecationMessage: "environmentLegacyDeprecationMessage", testCaseTestDataId: "testCaseTestDataId", hasTestDataProfile: "hasTestDataProfile", isInsideForLoopStep: "isInsideForLoopStep", globalVariableOptions: "globalVariableOptions", isLoadingGlobalVariables: "isLoadingGlobalVariables", defaultTestDataProfileId: "defaultTestDataProfileId", defaultTestDataStartIndex: "defaultTestDataStartIndex", initialConditionData: "initialConditionData", editTestStep: "editTestStep", branchLabel: "branchLabel", isSaving: "isSaving" }, outputs: { save: "save", cancelled: "cancelled", loadMoreElements: "loadMoreElements", searchElements: "searchElements", searchElementsByScreenName: "searchElementsByScreenName", createElement: "createElement", searchScreenName: "searchScreenName", loadMoreScreenNames: "loadMoreScreenNames", createScreenNameRequest: "createScreenNameRequest", searchParameters: "searchParameters", loadMoreParameters: "loadMoreParameters", searchEnvironments: "searchEnvironments", loadMoreEnvironments: "loadMoreEnvironments", searchGlobalVariables: "searchGlobalVariables" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-bg-white cqa-px-4 cqa-py-2\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n {{ title }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Condition Builder Section -->\n <div class=\"cqa-mb-6\">\n <div class=\"cqa-mb-3\">\n <h3 class=\"cqa-text-sm cqa-text-[12px] cqa-font-semibold cqa-text-gray-900\">\n Condition Builder\n </h3>\n </div>\n\n <!-- Single Condition Row -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\" [formGroup]=\"conditionForm\">\n <!-- Condition Label + Template Dropdown -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <!-- Label -->\n <div class=\"cqa-text-[12px] cqa-font-semibold\">\n {{ conditionRowLabel }}\n </div>\n\n <!-- Value Template Dropdown -->\n <div class=\"cqa-flex-1 cqa-min-w-[150px] cqa-text-[10px]\">\n <cqa-dynamic-select [form]=\"conditionForm\" [config]=\"getValueConfig()\">\n </cqa-dynamic-select>\n </div>\n </div>\n\n <!-- Template Variables Section (shown when template is selected) -->\n <div *ngIf=\"hasSelectedTemplate\" class=\"cqa-mt-2\">\n <!-- Template Grammar Display -->\n <div class=\"cqa-mb-4 cqa-flex cqa-items-center cqa-flex-wrap cqa-gap-1 cqa-text-sm cqa-text-gray-700\">\n <div class=\"cqa-action-format cqa-text-[12px] cqa-leading-[23px] cqa-text-black-100\"\n [innerHTML]=\"currentHtmlGrammar\">\n </div>\n </div>\n\n <!-- Template Variables Form -->\n <cqa-template-variables-form\n style=\"width: 100%;\"\n [templateVariables]=\"getTemplateVariables()\"\n [variablesForm]=\"getVariablesForm()\"\n [metadata]=\"conditionForm.get('metadata')?.value || ''\"\n [description]=\"conditionForm.get('description')?.value || ''\"\n [elementOptions]=\"elementOptions\"\n [hasMoreElements]=\"hasMoreElements\"\n [isLoadingElements]=\"isLoadingElements\"\n [screenNameOptions]=\"screenNameOptions\"\n [hasMoreScreenNames]=\"hasMoreScreenNames\"\n [isLoadingScreenNames]=\"isLoadingScreenNames\"\n [parameterOptions]=\"parameterOptions\"\n [hasMoreParameters]=\"hasMoreParameters\"\n [isLoadingParameters]=\"isLoadingParameters\"\n [environmentOptions]=\"environmentOptions\"\n [hasMoreEnvironments]=\"hasMoreEnvironments\"\n [isLoadingEnvironments]=\"isLoadingEnvironments\"\n [testCaseEnvironmentName]=\"testCaseEnvironmentName\"\n [testCaseEnvironmentLabelSuffix]=\"testCaseEnvironmentLabelSuffix\"\n [environmentLegacyDeprecationMessage]=\"environmentLegacyDeprecationMessage\"\n [testCaseTestDataId]=\"testCaseTestDataId\"\n [hasTestDataProfile]=\"hasTestDataProfile\"\n [isInsideForLoopStep]=\"isInsideForLoopStep\"\n [globalVariableOptions]=\"globalVariableOptions\"\n [isLoadingGlobalVariables]=\"isLoadingGlobalVariables\"\n [defaultTestDataProfileId]=\"defaultTestDataProfileId\"\n [defaultTestDataStartIndex]=\"defaultTestDataStartIndex\"\n (variableValueChange)=\"onVariableValueChange($event.name, $event.value)\"\n (variableBooleanChange)=\"onVariableBooleanChange($event.name, $event.value)\"\n (metadataChange)=\"conditionForm.get('metadata')?.setValue($event)\"\n (descriptionChange)=\"conditionForm.get('description')?.setValue($event)\"\n (loadMoreElements)=\"loadMoreElements.emit()\"\n (searchElements)=\"searchElements.emit($event)\"\n (searchElementsByScreenName)=\"searchElementsByScreenName.emit($event)\"\n (createElement)=\"createElement.emit($event)\"\n (searchScreenName)=\"searchScreenName.emit($event)\"\n (loadMoreScreenNames)=\"loadMoreScreenNames.emit($event)\"\n (createScreenNameRequest)=\"createScreenNameRequest.emit($event)\"\n (searchParameters)=\"searchParameters.emit($event)\"\n (loadMoreParameters)=\"loadMoreParameters.emit()\"\n (searchEnvironments)=\"searchEnvironments.emit($event)\"\n (loadMoreEnvironments)=\"loadMoreEnvironments.emit()\"\n (searchGlobalVariables)=\"searchGlobalVariables.emit($event)\">\n </cqa-template-variables-form>\n\n <!-- Advanced Settings Variables Form -->\n <div *ngIf=\"getAdvancedVariables().length > 0\" class=\"cqa-mt-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-w-full\">\n <button type=\"button\"\n class=\"cqa-flex cqa-w-full cqa-items-center cqa-justify-between cqa-gap-2 cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-bg-transparent cqa-border-none cqa-cursor-pointer cqa-p-0 cqa-mb-1.5\"\n (click)=\"toggleAdvanced()\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-base\" [class.cqa-rotate-180]=\"isAdvancedExpanded\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"isAdvancedExpanded\" class=\"cqa-mt-2\">\n <cqa-advanced-variables-form\n [advancedVariables]=\"getAdvancedVariables()\"\n [advancedVariableForm]=\"getAdvancedVariablesForm()\"\n (variableBooleanChange)=\"onAdvancedVariableBooleanChange($event.name, $event.value)\"\n (variableValueChange)=\"onAdvancedVariableValueChange($event.name, $event.value)\">\n </cqa-advanced-variables-form>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button *ngIf=\"!isSaving\" class=\"cqa-w-1/2\" variant=\"filled\" [text]=\"saveButtonLabel\"\n [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!isFormValid()\"\n (clicked)=\"onSave()\">\n </cqa-button>\n <div *ngIf=\"isSaving\" class=\"cqa-w-1/2 cqa-flex-1 cqa-min-h-[38px] cqa-rounded-[8px]\">\n <cqa-badge label=\"Saving\u2026\" icon=\"autorenew\" [isLoading]=\"true\" [fullWidth]=\"true\" [centerContent]=\"true\"\n [inlineStyles]=\"'min-height: 38px; height: 38px; box-sizing: border-box; display: flex; align-items: center; justify-content: center;'\"\n variant=\"info\" size=\"medium\"></cqa-badge>\n </div>\n </div>\n</div>\n", components: [{ type: i2.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i3.TemplateVariablesFormComponent, selector: "cqa-template-variables-form", inputs: ["templateVariables", "variablesForm", "metadata", "description", "elementOptions", "hasMoreElements", "isLoadingElements", "screenNameOptions", "hasMoreScreenNames", "isLoadingScreenNames", "parameterOptions", "hasMoreParameters", "isLoadingParameters", "uploadOptions", "hasMoreUploads", "isLoadingUploads", "environmentOptions", "hasMoreEnvironments", "isLoadingEnvironments", "globalVariableOptions", "isLoadingGlobalVariables", "testCaseEnvironmentName", "testCaseEnvironmentLabelSuffix", "environmentLegacyDeprecationMessage", "testCaseTestDataId", "defaultTestDataProfileId", "defaultTestDataStartIndex", "defaultTestDataEndIndex", "isInsideForLoopStep", "hasTestDataProfile", "isEditInDepth", "isDebug", "createElementVisible"], outputs: ["variableValueChange", "variableBooleanChange", "metadataChange", "descriptionChange", "loadMoreElements", "searchElements", "searchElementsByScreenName", "createElement", "searchScreenName", "loadMoreScreenNames", "createScreenNameRequest", "searchParameters", "loadMoreParameters", "searchUploads", "loadMoreUploads", "searchEnvironments", "loadMoreEnvironments", "searchGlobalVariables", "cancelElementForm", "elementFormVisibilityChange"] }, { type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5.AdvancedVariablesFormComponent, selector: "cqa-advanced-variables-form", inputs: ["advancedVariables", "advancedVariableForm"], outputs: ["variableBooleanChange", "variableValueChange"] }, { type: i6.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "loading", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i7.BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading", "fullWidth", "centerContent", "title"] }], directives: [{ type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
341
+ ConditionBranchEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ConditionBranchEditorComponent, selector: "cqa-condition-branch-editor", inputs: { mode: "mode", conditionTemplates: "conditionTemplates", setConditionTemplateVariables: "setConditionTemplateVariables", setAdvancedSettingsVariables: "setAdvancedSettingsVariables", computeHtmlGrammarFn: "computeHtmlGrammarFn", elementOptions: "elementOptions", hasMoreElements: "hasMoreElements", isLoadingElements: "isLoadingElements", screenNameOptions: "screenNameOptions", hasMoreScreenNames: "hasMoreScreenNames", isLoadingScreenNames: "isLoadingScreenNames", parameterOptions: "parameterOptions", hasMoreParameters: "hasMoreParameters", isLoadingParameters: "isLoadingParameters", environmentOptions: "environmentOptions", hasMoreEnvironments: "hasMoreEnvironments", isLoadingEnvironments: "isLoadingEnvironments", defaultTestDataProfileId: "defaultTestDataProfileId", defaultTestDataStartIndex: "defaultTestDataStartIndex", initialConditionData: "initialConditionData", editTestStep: "editTestStep", branchLabel: "branchLabel", isSaving: "isSaving" }, outputs: { save: "save", cancelled: "cancelled", loadMoreElements: "loadMoreElements", searchElements: "searchElements", searchElementsByScreenName: "searchElementsByScreenName", createElement: "createElement", searchScreenName: "searchScreenName", loadMoreScreenNames: "loadMoreScreenNames", createScreenNameRequest: "createScreenNameRequest", searchParameters: "searchParameters", loadMoreParameters: "loadMoreParameters", searchEnvironments: "searchEnvironments", loadMoreEnvironments: "loadMoreEnvironments" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-bg-white cqa-px-4 cqa-py-2\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n {{ title }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Condition Builder Section -->\n <div class=\"cqa-mb-6\">\n <div class=\"cqa-mb-3\">\n <h3 class=\"cqa-text-sm cqa-text-[12px] cqa-font-semibold cqa-text-gray-900\">\n Condition Builder\n </h3>\n </div>\n\n <!-- Single Condition Row -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\" [formGroup]=\"conditionForm\">\n <!-- Condition Label + Template Dropdown -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <!-- Label -->\n <div class=\"cqa-text-[12px] cqa-font-semibold\">\n {{ conditionRowLabel }}\n </div>\n\n <!-- Value Template Dropdown -->\n <div class=\"cqa-flex-1 cqa-min-w-[150px] cqa-text-[10px]\">\n <cqa-dynamic-select [form]=\"conditionForm\" [config]=\"getValueConfig()\">\n </cqa-dynamic-select>\n </div>\n </div>\n\n <!-- Template Variables Section (shown when template is selected) -->\n <div *ngIf=\"hasSelectedTemplate\" class=\"cqa-mt-2\">\n <!-- Template Grammar Display -->\n <div class=\"cqa-mb-4 cqa-flex cqa-items-center cqa-flex-wrap cqa-gap-1 cqa-text-sm cqa-text-gray-700\">\n <div class=\"cqa-action-format cqa-text-[12px] cqa-leading-[23px] cqa-text-black-100\"\n [innerHTML]=\"currentHtmlGrammar\">\n </div>\n </div>\n\n <!-- Template Variables Form -->\n <cqa-template-variables-form\n style=\"width: 100%;\"\n [templateVariables]=\"getTemplateVariables()\"\n [variablesForm]=\"getVariablesForm()\"\n [metadata]=\"conditionForm.get('metadata')?.value || ''\"\n [description]=\"conditionForm.get('description')?.value || ''\"\n [elementOptions]=\"elementOptions\"\n [hasMoreElements]=\"hasMoreElements\"\n [isLoadingElements]=\"isLoadingElements\"\n [screenNameOptions]=\"screenNameOptions\"\n [hasMoreScreenNames]=\"hasMoreScreenNames\"\n [isLoadingScreenNames]=\"isLoadingScreenNames\"\n [parameterOptions]=\"parameterOptions\"\n [hasMoreParameters]=\"hasMoreParameters\"\n [isLoadingParameters]=\"isLoadingParameters\"\n [environmentOptions]=\"environmentOptions\"\n [hasMoreEnvironments]=\"hasMoreEnvironments\"\n [isLoadingEnvironments]=\"isLoadingEnvironments\"\n [defaultTestDataProfileId]=\"defaultTestDataProfileId\"\n [defaultTestDataStartIndex]=\"defaultTestDataStartIndex\"\n (variableValueChange)=\"onVariableValueChange($event.name, $event.value)\"\n (variableBooleanChange)=\"onVariableBooleanChange($event.name, $event.value)\"\n (metadataChange)=\"conditionForm.get('metadata')?.setValue($event)\"\n (descriptionChange)=\"conditionForm.get('description')?.setValue($event)\"\n (loadMoreElements)=\"loadMoreElements.emit()\"\n (searchElements)=\"searchElements.emit($event)\"\n (searchElementsByScreenName)=\"searchElementsByScreenName.emit($event)\"\n (createElement)=\"createElement.emit($event)\"\n (searchScreenName)=\"searchScreenName.emit($event)\"\n (loadMoreScreenNames)=\"loadMoreScreenNames.emit($event)\"\n (createScreenNameRequest)=\"createScreenNameRequest.emit($event)\"\n (searchParameters)=\"searchParameters.emit($event)\"\n (loadMoreParameters)=\"loadMoreParameters.emit()\"\n (searchEnvironments)=\"searchEnvironments.emit($event)\"\n (loadMoreEnvironments)=\"loadMoreEnvironments.emit()\">\n </cqa-template-variables-form>\n\n <!-- Advanced Settings Variables Form -->\n <div *ngIf=\"getAdvancedVariables().length > 0\" class=\"cqa-mt-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-w-full\">\n <button type=\"button\"\n class=\"cqa-flex cqa-w-full cqa-items-center cqa-justify-between cqa-gap-2 cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-bg-transparent cqa-border-none cqa-cursor-pointer cqa-p-0 cqa-mb-1.5\"\n (click)=\"toggleAdvanced()\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-base\" [class.cqa-rotate-180]=\"isAdvancedExpanded\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"isAdvancedExpanded\" class=\"cqa-mt-2\">\n <cqa-advanced-variables-form\n [advancedVariables]=\"getAdvancedVariables()\"\n [advancedVariableForm]=\"getAdvancedVariablesForm()\"\n (variableBooleanChange)=\"onAdvancedVariableBooleanChange($event.name, $event.value)\"\n (variableValueChange)=\"onAdvancedVariableValueChange($event.name, $event.value)\">\n </cqa-advanced-variables-form>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button *ngIf=\"!isSaving\" class=\"cqa-w-1/2\" variant=\"filled\" [text]=\"saveButtonLabel\"\n [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!isFormValid()\"\n (clicked)=\"onSave()\">\n </cqa-button>\n <div *ngIf=\"isSaving\" class=\"cqa-w-1/2 cqa-flex-1 cqa-min-h-[38px] cqa-rounded-[8px]\">\n <cqa-badge label=\"Saving\u2026\" icon=\"autorenew\" [isLoading]=\"true\" [fullWidth]=\"true\" [centerContent]=\"true\"\n [inlineStyles]=\"'min-height: 38px; height: 38px; box-sizing: border-box; display: flex; align-items: center; justify-content: center;'\"\n variant=\"info\" size=\"medium\"></cqa-badge>\n </div>\n </div>\n</div>\n", components: [{ type: i2.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i3.TemplateVariablesFormComponent, selector: "cqa-template-variables-form", inputs: ["templateVariables", "variablesForm", "metadata", "description", "elementOptions", "hasMoreElements", "isLoadingElements", "screenNameOptions", "hasMoreScreenNames", "isLoadingScreenNames", "parameterOptions", "hasMoreParameters", "isLoadingParameters", "uploadOptions", "hasMoreUploads", "isLoadingUploads", "environmentOptions", "hasMoreEnvironments", "isLoadingEnvironments", "defaultTestDataProfileId", "defaultTestDataStartIndex", "defaultTestDataEndIndex", "isInsideForLoopStep", "hasTestDataProfile", "isEditInDepth", "isDebug", "createElementVisible"], outputs: ["variableValueChange", "variableBooleanChange", "metadataChange", "descriptionChange", "loadMoreElements", "searchElements", "searchElementsByScreenName", "createElement", "searchScreenName", "loadMoreScreenNames", "createScreenNameRequest", "searchParameters", "loadMoreParameters", "searchUploads", "loadMoreUploads", "searchEnvironments", "loadMoreEnvironments", "cancelElementForm", "elementFormVisibilityChange"] }, { type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5.AdvancedVariablesFormComponent, selector: "cqa-advanced-variables-form", inputs: ["advancedVariables", "advancedVariableForm"], outputs: ["variableBooleanChange", "variableValueChange"] }, { type: i6.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "loading", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }, { type: i7.BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading", "fullWidth", "centerContent", "title"] }], directives: [{ type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
353
342
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ConditionBranchEditorComponent, decorators: [{
354
343
  type: Component,
355
- args: [{ selector: 'cqa-condition-branch-editor', host: { class: 'cqa-ui-root' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-bg-white cqa-px-4 cqa-py-2\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n {{ title }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Condition Builder Section -->\n <div class=\"cqa-mb-6\">\n <div class=\"cqa-mb-3\">\n <h3 class=\"cqa-text-sm cqa-text-[12px] cqa-font-semibold cqa-text-gray-900\">\n Condition Builder\n </h3>\n </div>\n\n <!-- Single Condition Row -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\" [formGroup]=\"conditionForm\">\n <!-- Condition Label + Template Dropdown -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <!-- Label -->\n <div class=\"cqa-text-[12px] cqa-font-semibold\">\n {{ conditionRowLabel }}\n </div>\n\n <!-- Value Template Dropdown -->\n <div class=\"cqa-flex-1 cqa-min-w-[150px] cqa-text-[10px]\">\n <cqa-dynamic-select [form]=\"conditionForm\" [config]=\"getValueConfig()\">\n </cqa-dynamic-select>\n </div>\n </div>\n\n <!-- Template Variables Section (shown when template is selected) -->\n <div *ngIf=\"hasSelectedTemplate\" class=\"cqa-mt-2\">\n <!-- Template Grammar Display -->\n <div class=\"cqa-mb-4 cqa-flex cqa-items-center cqa-flex-wrap cqa-gap-1 cqa-text-sm cqa-text-gray-700\">\n <div class=\"cqa-action-format cqa-text-[12px] cqa-leading-[23px] cqa-text-black-100\"\n [innerHTML]=\"currentHtmlGrammar\">\n </div>\n </div>\n\n <!-- Template Variables Form -->\n <cqa-template-variables-form\n style=\"width: 100%;\"\n [templateVariables]=\"getTemplateVariables()\"\n [variablesForm]=\"getVariablesForm()\"\n [metadata]=\"conditionForm.get('metadata')?.value || ''\"\n [description]=\"conditionForm.get('description')?.value || ''\"\n [elementOptions]=\"elementOptions\"\n [hasMoreElements]=\"hasMoreElements\"\n [isLoadingElements]=\"isLoadingElements\"\n [screenNameOptions]=\"screenNameOptions\"\n [hasMoreScreenNames]=\"hasMoreScreenNames\"\n [isLoadingScreenNames]=\"isLoadingScreenNames\"\n [parameterOptions]=\"parameterOptions\"\n [hasMoreParameters]=\"hasMoreParameters\"\n [isLoadingParameters]=\"isLoadingParameters\"\n [environmentOptions]=\"environmentOptions\"\n [hasMoreEnvironments]=\"hasMoreEnvironments\"\n [isLoadingEnvironments]=\"isLoadingEnvironments\"\n [testCaseEnvironmentName]=\"testCaseEnvironmentName\"\n [testCaseEnvironmentLabelSuffix]=\"testCaseEnvironmentLabelSuffix\"\n [environmentLegacyDeprecationMessage]=\"environmentLegacyDeprecationMessage\"\n [testCaseTestDataId]=\"testCaseTestDataId\"\n [hasTestDataProfile]=\"hasTestDataProfile\"\n [isInsideForLoopStep]=\"isInsideForLoopStep\"\n [globalVariableOptions]=\"globalVariableOptions\"\n [isLoadingGlobalVariables]=\"isLoadingGlobalVariables\"\n [defaultTestDataProfileId]=\"defaultTestDataProfileId\"\n [defaultTestDataStartIndex]=\"defaultTestDataStartIndex\"\n (variableValueChange)=\"onVariableValueChange($event.name, $event.value)\"\n (variableBooleanChange)=\"onVariableBooleanChange($event.name, $event.value)\"\n (metadataChange)=\"conditionForm.get('metadata')?.setValue($event)\"\n (descriptionChange)=\"conditionForm.get('description')?.setValue($event)\"\n (loadMoreElements)=\"loadMoreElements.emit()\"\n (searchElements)=\"searchElements.emit($event)\"\n (searchElementsByScreenName)=\"searchElementsByScreenName.emit($event)\"\n (createElement)=\"createElement.emit($event)\"\n (searchScreenName)=\"searchScreenName.emit($event)\"\n (loadMoreScreenNames)=\"loadMoreScreenNames.emit($event)\"\n (createScreenNameRequest)=\"createScreenNameRequest.emit($event)\"\n (searchParameters)=\"searchParameters.emit($event)\"\n (loadMoreParameters)=\"loadMoreParameters.emit()\"\n (searchEnvironments)=\"searchEnvironments.emit($event)\"\n (loadMoreEnvironments)=\"loadMoreEnvironments.emit()\"\n (searchGlobalVariables)=\"searchGlobalVariables.emit($event)\">\n </cqa-template-variables-form>\n\n <!-- Advanced Settings Variables Form -->\n <div *ngIf=\"getAdvancedVariables().length > 0\" class=\"cqa-mt-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-w-full\">\n <button type=\"button\"\n class=\"cqa-flex cqa-w-full cqa-items-center cqa-justify-between cqa-gap-2 cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-bg-transparent cqa-border-none cqa-cursor-pointer cqa-p-0 cqa-mb-1.5\"\n (click)=\"toggleAdvanced()\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-base\" [class.cqa-rotate-180]=\"isAdvancedExpanded\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"isAdvancedExpanded\" class=\"cqa-mt-2\">\n <cqa-advanced-variables-form\n [advancedVariables]=\"getAdvancedVariables()\"\n [advancedVariableForm]=\"getAdvancedVariablesForm()\"\n (variableBooleanChange)=\"onAdvancedVariableBooleanChange($event.name, $event.value)\"\n (variableValueChange)=\"onAdvancedVariableValueChange($event.name, $event.value)\">\n </cqa-advanced-variables-form>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button *ngIf=\"!isSaving\" class=\"cqa-w-1/2\" variant=\"filled\" [text]=\"saveButtonLabel\"\n [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!isFormValid()\"\n (clicked)=\"onSave()\">\n </cqa-button>\n <div *ngIf=\"isSaving\" class=\"cqa-w-1/2 cqa-flex-1 cqa-min-h-[38px] cqa-rounded-[8px]\">\n <cqa-badge label=\"Saving\u2026\" icon=\"autorenew\" [isLoading]=\"true\" [fullWidth]=\"true\" [centerContent]=\"true\"\n [inlineStyles]=\"'min-height: 38px; height: 38px; box-sizing: border-box; display: flex; align-items: center; justify-content: center;'\"\n variant=\"info\" size=\"medium\"></cqa-badge>\n </div>\n </div>\n</div>\n", styles: [] }]
344
+ args: [{ selector: 'cqa-condition-branch-editor', host: { class: 'cqa-ui-root' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-bg-white cqa-px-4 cqa-py-2\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n {{ title }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- Condition Builder Section -->\n <div class=\"cqa-mb-6\">\n <div class=\"cqa-mb-3\">\n <h3 class=\"cqa-text-sm cqa-text-[12px] cqa-font-semibold cqa-text-gray-900\">\n Condition Builder\n </h3>\n </div>\n\n <!-- Single Condition Row -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\" [formGroup]=\"conditionForm\">\n <!-- Condition Label + Template Dropdown -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <!-- Label -->\n <div class=\"cqa-text-[12px] cqa-font-semibold\">\n {{ conditionRowLabel }}\n </div>\n\n <!-- Value Template Dropdown -->\n <div class=\"cqa-flex-1 cqa-min-w-[150px] cqa-text-[10px]\">\n <cqa-dynamic-select [form]=\"conditionForm\" [config]=\"getValueConfig()\">\n </cqa-dynamic-select>\n </div>\n </div>\n\n <!-- Template Variables Section (shown when template is selected) -->\n <div *ngIf=\"hasSelectedTemplate\" class=\"cqa-mt-2\">\n <!-- Template Grammar Display -->\n <div class=\"cqa-mb-4 cqa-flex cqa-items-center cqa-flex-wrap cqa-gap-1 cqa-text-sm cqa-text-gray-700\">\n <div class=\"cqa-action-format cqa-text-[12px] cqa-leading-[23px] cqa-text-black-100\"\n [innerHTML]=\"currentHtmlGrammar\">\n </div>\n </div>\n\n <!-- Template Variables Form -->\n <cqa-template-variables-form\n style=\"width: 100%;\"\n [templateVariables]=\"getTemplateVariables()\"\n [variablesForm]=\"getVariablesForm()\"\n [metadata]=\"conditionForm.get('metadata')?.value || ''\"\n [description]=\"conditionForm.get('description')?.value || ''\"\n [elementOptions]=\"elementOptions\"\n [hasMoreElements]=\"hasMoreElements\"\n [isLoadingElements]=\"isLoadingElements\"\n [screenNameOptions]=\"screenNameOptions\"\n [hasMoreScreenNames]=\"hasMoreScreenNames\"\n [isLoadingScreenNames]=\"isLoadingScreenNames\"\n [parameterOptions]=\"parameterOptions\"\n [hasMoreParameters]=\"hasMoreParameters\"\n [isLoadingParameters]=\"isLoadingParameters\"\n [environmentOptions]=\"environmentOptions\"\n [hasMoreEnvironments]=\"hasMoreEnvironments\"\n [isLoadingEnvironments]=\"isLoadingEnvironments\"\n [defaultTestDataProfileId]=\"defaultTestDataProfileId\"\n [defaultTestDataStartIndex]=\"defaultTestDataStartIndex\"\n (variableValueChange)=\"onVariableValueChange($event.name, $event.value)\"\n (variableBooleanChange)=\"onVariableBooleanChange($event.name, $event.value)\"\n (metadataChange)=\"conditionForm.get('metadata')?.setValue($event)\"\n (descriptionChange)=\"conditionForm.get('description')?.setValue($event)\"\n (loadMoreElements)=\"loadMoreElements.emit()\"\n (searchElements)=\"searchElements.emit($event)\"\n (searchElementsByScreenName)=\"searchElementsByScreenName.emit($event)\"\n (createElement)=\"createElement.emit($event)\"\n (searchScreenName)=\"searchScreenName.emit($event)\"\n (loadMoreScreenNames)=\"loadMoreScreenNames.emit($event)\"\n (createScreenNameRequest)=\"createScreenNameRequest.emit($event)\"\n (searchParameters)=\"searchParameters.emit($event)\"\n (loadMoreParameters)=\"loadMoreParameters.emit()\"\n (searchEnvironments)=\"searchEnvironments.emit($event)\"\n (loadMoreEnvironments)=\"loadMoreEnvironments.emit()\">\n </cqa-template-variables-form>\n\n <!-- Advanced Settings Variables Form -->\n <div *ngIf=\"getAdvancedVariables().length > 0\" class=\"cqa-mt-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-w-full\">\n <button type=\"button\"\n class=\"cqa-flex cqa-w-full cqa-items-center cqa-justify-between cqa-gap-2 cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-bg-transparent cqa-border-none cqa-cursor-pointer cqa-p-0 cqa-mb-1.5\"\n (click)=\"toggleAdvanced()\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-base\" [class.cqa-rotate-180]=\"isAdvancedExpanded\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"isAdvancedExpanded\" class=\"cqa-mt-2\">\n <cqa-advanced-variables-form\n [advancedVariables]=\"getAdvancedVariables()\"\n [advancedVariableForm]=\"getAdvancedVariablesForm()\"\n (variableBooleanChange)=\"onAdvancedVariableBooleanChange($event.name, $event.value)\"\n (variableValueChange)=\"onAdvancedVariableValueChange($event.name, $event.value)\">\n </cqa-advanced-variables-form>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button *ngIf=\"!isSaving\" class=\"cqa-w-1/2\" variant=\"filled\" [text]=\"saveButtonLabel\"\n [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!isFormValid()\"\n (clicked)=\"onSave()\">\n </cqa-button>\n <div *ngIf=\"isSaving\" class=\"cqa-w-1/2 cqa-flex-1 cqa-min-h-[38px] cqa-rounded-[8px]\">\n <cqa-badge label=\"Saving\u2026\" icon=\"autorenew\" [isLoading]=\"true\" [fullWidth]=\"true\" [centerContent]=\"true\"\n [inlineStyles]=\"'min-height: 38px; height: 38px; box-sizing: border-box; display: flex; align-items: center; justify-content: center;'\"\n variant=\"info\" size=\"medium\"></cqa-badge>\n </div>\n </div>\n</div>\n", styles: [] }]
356
345
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { mode: [{
357
346
  type: Input
358
347
  }], conditionTemplates: [{
@@ -387,22 +376,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
387
376
  type: Input
388
377
  }], isLoadingEnvironments: [{
389
378
  type: Input
390
- }], testCaseEnvironmentName: [{
391
- type: Input
392
- }], testCaseEnvironmentLabelSuffix: [{
393
- type: Input
394
- }], environmentLegacyDeprecationMessage: [{
395
- type: Input
396
- }], testCaseTestDataId: [{
397
- type: Input
398
- }], hasTestDataProfile: [{
399
- type: Input
400
- }], isInsideForLoopStep: [{
401
- type: Input
402
- }], globalVariableOptions: [{
403
- type: Input
404
- }], isLoadingGlobalVariables: [{
405
- type: Input
406
379
  }], defaultTestDataProfileId: [{
407
380
  type: Input
408
381
  }], defaultTestDataStartIndex: [{
@@ -441,7 +414,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
441
414
  type: Output
442
415
  }], loadMoreEnvironments: [{
443
416
  type: Output
444
- }], searchGlobalVariables: [{
445
- type: Output
446
417
  }] } });
447
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLWJyYW5jaC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9leGVjdXRpb24tc2NyZWVuL2NvbmRpdGlvbi1kZWJ1Zy1zdGVwL2NvbmRpdGlvbi1icmFuY2gtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9jb25kaXRpb24tZGVidWctc3RlcC9jb25kaXRpb24tYnJhbmNoLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUN0Qyx1QkFBdUIsRUFDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBMEIsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBbUI1Rjs7Ozs7O0dBTUc7QUFRSCxNQUFNLE9BQU8sOEJBQThCO0lBNkd6QyxZQUFvQixFQUFlLEVBQVUsR0FBc0I7UUFBL0MsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBM0duRSxpR0FBaUc7UUFDeEYsU0FBSSxHQUEyQixhQUFhLENBQUM7UUFFdEQseUVBQXlFO1FBQ2hFLHVCQUFrQixHQUFxQixFQUFFLENBQUM7UUFFbkQsbUVBQW1FO1FBQzFELGtDQUE2QixHQUF3RCxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFFdkcsbURBQW1EO1FBQzFDLGlDQUE0QixHQUF3RCxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFLdEcseUNBQXlDO1FBQ2hDLG1CQUFjLEdBQVUsRUFBRSxDQUFDO1FBQzNCLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyxzQkFBaUIs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LCBPbkluaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZywgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vLi4vZHluYW1pYy1zZWxlY3QvZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IEFjdGlvblRlbXBsYXRlIH0gZnJvbSAnLi4vLi4vc3RlcC1idWlsZGVyL3N0ZXAtYnVpbGRlci1hY3Rpb24vc3RlcC1idWlsZGVyLWFjdGlvbi5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbmRpdGlvbkJyYW5jaFNhdmVEYXRhIHtcbiAgdGVtcGxhdGU6IEFjdGlvblRlbXBsYXRlIHwgbnVsbDtcbiAgdGVtcGxhdGVWYXJpYWJsZXM6IGFueVtdO1xuICBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOiBhbnlbXTtcbiAgYWN0aW9uOiBzdHJpbmc7XG4gIC8qKiBSZXNvbHZlZCBIVE1MIGdyYW1tYXIgd2l0aCBhY3R1YWwgdmFyaWFibGUgdmFsdWVzIHN1YnN0aXR1dGVkIOKAlCB1c2UgZm9yIGRpc3BsYXkvY29uZGl0aW9uVGV4dCAqL1xuICByZXNvbHZlZEFjdGlvbjogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBtZXRhZGF0YTogc3RyaW5nO1xuICAvKiogRGVyaXZlZCBmcm9tIGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgJ3Nob3VsZFNraXAnIGVudHJ5IOKAlCBzdGVwIHNob3VsZCBiZSBza2lwcGVkIGR1cmluZyBleGVjdXRpb24gKi9cbiAgc2hvdWxkU2tpcDogYm9vbGVhbjtcbiAgLyoqIERlcml2ZWQgZnJvbSBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzICdpc1N0ZXBPcHRpb25hbCcgZW50cnkg4oCUIHN0ZXAgZmFpbHVyZSBzaG91bGQgbm90IGZhaWwgdGhlIHRlc3QgKi9cbiAgaWdub3JlU3RlcFJlc3VsdDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBMaWdodHdlaWdodCBzaW5nbGUtY29uZGl0aW9uIGVkaXRvciB1c2VkIGluIGRlYnVnIG1vZGUgdG86XG4gKiAgLSBBZGQgYSBuZXcgRUxTRSBJRiBicmFuY2ggKG1vZGUgPSAnYWRkLWVsc2UtaWYnKVxuICogIC0gRWRpdCBhbiBleGlzdGluZyBJRiBvciBFTFNFIElGIGNvbmRpdGlvbiAobW9kZSA9ICdlZGl0JylcbiAqXG4gKiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2YXJpYW50IG9mIFN0ZXBCdWlsZGVyQ29uZGl0aW9uQ29tcG9uZW50IHdpdGggb25lIGNvbmRpdGlvbiByb3cuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1jb25kaXRpb24tYnJhbmNoLWVkaXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb25kaXRpb24tYnJhbmNoLWVkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uQnJhbmNoRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuXG4gIC8qKiAnYWRkLWVsc2UtaWYnIHNob3dzIFwiQWRkIEVMU0UgSUZcIiB0aXRsZS9idXR0b247ICdlZGl0JyBzaG93cyBcIkVkaXQgQ29uZGl0aW9uXCIgdGl0bGUvYnV0dG9uICovXG4gIEBJbnB1dCgpIG1vZGU6ICdhZGQtZWxzZS1pZicgfCAnZWRpdCcgPSAnYWRkLWVsc2UtaWYnO1xuXG4gIC8qKiBMaXN0IG9mIGNvbmRpdGlvbiBhY3Rpb24gdGVtcGxhdGVzIChmaWx0ZXJlZCB0byBJRl9DT05ESVRJT04gdHlwZSkgKi9cbiAgQElucHV0KCkgY29uZGl0aW9uVGVtcGxhdGVzOiBBY3Rpb25UZW1wbGF0ZVtdID0gW107XG5cbiAgLyoqIENhbGxlZCB0byBkZXJpdmUgdGVtcGxhdGUgdmFyaWFibGVzIGZyb20gYSBzZWxlY3RlZCB0ZW1wbGF0ZSAqL1xuICBASW5wdXQoKSBzZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlczogKHRlbXBsYXRlOiBBY3Rpb25UZW1wbGF0ZSwgdGVzdFN0ZXA/OiBhbnkpID0+IGFueVtdID0gKCkgPT4gW107XG5cbiAgLyoqIENhbGxlZCB0byBkZXJpdmUgYWR2YW5jZWQgc2V0dGluZ3MgdmFyaWFibGVzICovXG4gIEBJbnB1dCgpIHNldEFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXM6ICh0ZW1wbGF0ZTogQWN0aW9uVGVtcGxhdGUsIHRlc3RTdGVwPzogYW55KSA9PiBhbnlbXSA9ICgpID0+IFtdO1xuXG4gIC8qKiBDZW50cmFsaXNlZCBIVE1MIGdyYW1tYXIgY29tcHV0YXRpb24gZnVuY3Rpb24gKi9cbiAgQElucHV0KCkgY29tcHV0ZUh0bWxHcmFtbWFyRm4/OiAodGVtcGxhdGU6IGFueSwgdmFyaWFibGVzOiBhbnlbXSkgPT4gc3RyaW5nO1xuXG4gIC8qKiBFbGVtZW50IG9wdGlvbnMgZm9yIHZhcmlhYmxlIGZvcm1zICovXG4gIEBJbnB1dCgpIGVsZW1lbnRPcHRpb25zOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBoYXNNb3JlRWxlbWVudHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNMb2FkaW5nRWxlbWVudHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2NyZWVuTmFtZU9wdGlvbnM6IHsgaWQ/OiBudW1iZXI7IG5hbWU6IHN0cmluZyB9W10gPSBbXTtcbiAgQElucHV0KCkgaGFzTW9yZVNjcmVlbk5hbWVzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzTG9hZGluZ1NjcmVlbk5hbWVzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHBhcmFtZXRlck9wdGlvbnM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGhhc01vcmVQYXJhbWV0ZXJzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzTG9hZGluZ1BhcmFtZXRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZW52aXJvbm1lbnRPcHRpb25zOiB7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZzsgZW52aXJvbm1lbnQ6IHN0cmluZyB9W10gPSBbXTtcbiAgQElucHV0KCkgaGFzTW9yZUVudmlyb25tZW50czogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0xvYWRpbmdFbnZpcm9ubWVudHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIFJlc29sdmVkIHRlc3QtY2FzZSBlbnYgbmFtZTsgZHJpdmVzIGJhbm5lciArIGVudi1kcm9wZG93biBhdXRvLXNlbGVjdCArIGxvY2sgaW4gaW5uZXIgdGVtcGxhdGUtdmFyaWFibGVzLWZvcm0uICovXG4gIEBJbnB1dCgpIHRlc3RDYXNlRW52aXJvbm1lbnROYW1lPzogc3RyaW5nO1xuICAvKiogU3VmZml4IG9uIHRoZSBlbnYtbmFtZSBvcHRpb24gbGFiZWwgKGUuZy4gJyhkZWZhdWx0KScpLiBBbHNvIGxvY2tzIHRoZSBlbnYgZHJvcGRvd24uICovXG4gIEBJbnB1dCgpIHRlc3RDYXNlRW52aXJvbm1lbnRMYWJlbFN1ZmZpeD86IHN0cmluZztcbiAgLyoqIEl0YWxpYyBub3RlIHJlbmRlcmVkIHVuZGVyIGVudiBkcm9wZG93biBpbiB0aGUgaW5uZXIgZm9ybS4gKi9cbiAgQElucHV0KCkgZW52aXJvbm1lbnRMZWdhY3lEZXByZWNhdGlvbk1lc3NhZ2U/OiBzdHJpbmc7XG4gIC8qKiBUZXN0IGNhc2UncyBURFAgaWQg4oCUIGdhdGVzIHRoZSBUZXN0IERhdGEgUHJvZmlsZSB0YWIgaW4gdGhlIGlubmVyIGZvcm0uICovXG4gIEBJbnB1dCgpIHRlc3RDYXNlVGVzdERhdGFJZD86IG51bWJlciB8IG51bGw7XG4gIC8qKiBXaGVuIHRydWUgKG9yIGBpc0luc2lkZUZvckxvb3BTdGVwYCB0cnVlKSwgdGhlIGlubmVyIGZvcm0gc2hvd3MgdGhlIFRlc3RcbiAgICogIERhdGEgUHJvZmlsZSBzZWdtZW50LiBXaXRob3V0IHRoaXMsIHRoZSBsaWIgZGVmYXVsdHMgdGhlIHNlZ21lbnQgaW4sXG4gICAqICBldmVuIHRob3VnaCB0aGUgdGVzdCBjYXNlIGhhcyBubyBURFAg4oCUIHdoaWNoIGlzIHdoYXQgc2hvd3MgdGhlIHRhYiBpbiB0aGVcbiAgICogIGRlYnVnLXNjcmVlbiBjb25kaXRpb24tYnJhbmNoIGVkaXRvci4gKi9cbiAgQElucHV0KCkgaGFzVGVzdERhdGFQcm9maWxlOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBUcnVlIHdoZW4gdGhpcyBicmFuY2ggbGl2ZXMgaW5zaWRlIGEgRk9SLWxvb3Agc3RlcC4gKi9cbiAgQElucHV0KCkgaXNJbnNpZGVGb3JMb29wU3RlcDogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogV29ya3NwYWNlLXNjb3BlZCBnbG9iYWwgdmFyaWFibGVzIGZvciB0aGUgR2xvYmFsIERhdGEgdGFiLiAqL1xuICBASW5wdXQoKSBnbG9iYWxWYXJpYWJsZU9wdGlvbnM6IHsgaWQ6IG51bWJlciB8IHN0cmluZzsgbmFtZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nOyB0eXBlPzogc3RyaW5nOyByZWFkV3JpdGVNb2RlPzogc3RyaW5nIH1bXSA9IFtdO1xuICBASW5wdXQoKSBpc0xvYWRpbmdHbG9iYWxWYXJpYWJsZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZGVmYXVsdFRlc3REYXRhUHJvZmlsZUlkPzogbnVtYmVyO1xuICBASW5wdXQoKSBkZWZhdWx0VGVzdERhdGFTdGFydEluZGV4PzogbnVtYmVyO1xuXG4gIC8qKiBXaGVuIHByb3ZpZGVkLCBwcmUtcG9wdWxhdGVzIHRoZSBmb3JtIGZvciBlZGl0IG1vZGUuIHNoYXBlOiB7IHRlbXBsYXRlSWQsIHRlbXBsYXRlVmFyaWFibGVzLCBhY3Rpb24gfSAqL1xuICBASW5wdXQoKSBpbml0aWFsQ29uZGl0aW9uRGF0YT86IHtcbiAgICB0ZW1wbGF0ZUlkPzogc3RyaW5nIHwgbnVtYmVyO1xuICAgIHRlbXBsYXRlVmFyaWFibGVzPzogYW55W107XG4gICAgYWN0aW9uPzogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIG1ldGFkYXRhPzogc3RyaW5nO1xuICB9O1xuXG4gIC8qKiBSYXcgYnJhbmNoIHN0ZXAgb2JqZWN0IOKAlCBwYXNzZWQgdGhyb3VnaCB0byBzZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcyBzbyB0aGUgc2VydmljZSBjYW4gZXh0cmFjdCBzYXZlZCB2YWx1ZXMgZnJvbSBzdGVwLmV2ZW50ICovXG4gIEBJbnB1dCgpIGVkaXRUZXN0U3RlcD86IGFueTtcblxuICAvKiogTGFiZWwgc2hvd24gbmV4dCB0byB0aGUgY29uZGl0aW9uIHRlbXBsYXRlIGRyb3Bkb3duIChlLmcuICdJRicsICdFTFNFIElGJykuIEluZmVycmVkIGZyb20gbW9kZSB3aGVuIG5vdCBwcm92aWRlZC4gKi9cbiAgQElucHV0KCkgYnJhbmNoTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqIFRydWUgd2hpbGUgdGhlIHBhcmVudCBpcyBzYXZpbmcgKGRpc2FibGVzL3Nob3dzIGxvYWRlciBvbiBTYXZlIGJ1dHRvbikgKi9cbiAgQElucHV0KCkgaXNTYXZpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q29uZGl0aW9uQnJhbmNoU2F2ZURhdGE+KCk7XG4gIEBPdXRwdXQoKSBjYW5jZWxsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBsb2FkTW9yZUVsZW1lbnRzID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgc2VhcmNoRWxlbWVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHNlYXJjaEVsZW1lbnRzQnlTY3JlZW5OYW1lID0gbmV3IEV2ZW50RW1pdHRlcjx7IHNjcmVlbk5hbWVJZDogbnVtYmVyOyBzZWFyY2hUZXJtPzogc3RyaW5nIH0+KCk7XG4gIEBPdXRwdXQoKSBjcmVhdGVFbGVtZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBzZWFyY2hTY3JlZW5OYW1lID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBsb2FkTW9yZVNjcmVlbk5hbWVzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBjcmVhdGVTY3JlZW5OYW1lUmVxdWVzdCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgc2VhcmNoUGFyYW1ldGVycyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgbG9hZE1vcmVQYXJhbWV0ZXJzID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgc2VhcmNoRW52aXJvbm1lbnRzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBsb2FkTW9yZUVudmlyb25tZW50cyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHNlYXJjaEdsb2JhbFZhcmlhYmxlcyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIGNvbmRpdGlvbkZvcm0hOiBGb3JtR3JvdXA7XG5cbiAgcHJpdmF0ZSBzZWxlY3RlZFRlbXBsYXRlOiBBY3Rpb25UZW1wbGF0ZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHRlbXBsYXRlVmFyaWFibGVzOiBhbnlbXSA9IFtdO1xuICBwcml2YXRlIHZhcmlhYmxlc0Zvcm0hOiBGb3JtQXJyYXk7XG4gIHByaXZhdGUgYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlczogYW55W10gPSBbXTtcbiAgcHJpdmF0ZSBhZHZhbmNlZFZhcmlhYmxlc0Zvcm0hOiBGb3JtQXJyYXk7XG4gIHByaXZhdGUgYWR2YW5jZWRFeHBhbmRlZCA9IGZhbHNlO1xuICBwcml2YXRlIHVwZGF0ZWRIdG1sR3JhbW1hciA9ICcnO1xuXG4gIHByaXZhdGUgdmFsdWVDb25maWdDYWNoZTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdmFsdWVDb25maWdXaXRoSGFuZGxlcjogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHwgbnVsbCA9IG51bGw7XG5cbiAgZ2V0IHRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ2VkaXQnID8gJ0VkaXQgQ29uZGl0aW9uJyA6ICdBZGQgRUxTRSBJRic7XG4gIH1cblxuICBnZXQgc2F2ZUJ1dHRvbkxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gJ2VkaXQnID8gJ1NhdmUnIDogJ0FkZCBFTFNFIElGJztcbiAgfVxuXG4gIGdldCBjb25kaXRpb25Sb3dMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmJyYW5jaExhYmVsID8/ICh0aGlzLm1vZGUgPT09ICdlZGl0JyA/ICdJRicgOiAnRUxTRSBJRicpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnZhcmlhYmxlc0Zvcm0gPSB0aGlzLmZiLmFycmF5KFtdKTtcbiAgICB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybSA9IHRoaXMuZmIuYXJyYXkoW10pO1xuXG4gICAgdGhpcy5jb25kaXRpb25Gb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICB2YWx1ZTogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgZGVzY3JpcHRpb246IFsnJ10sXG4gICAgICBtZXRhZGF0YTogWycnXSxcbiAgICB9KTtcblxuICAgIHRoaXMudXBkYXRlVmFsdWVDb25maWdDYWNoZSgpO1xuXG4gICAgLy8gUHJlLXBvcHVsYXRlIGZvciBlZGl0IG1vZGVcbiAgICBpZiAodGhpcy5tb2RlID09PSAnZWRpdCcgJiYgdGhpcy5pbml0aWFsQ29uZGl0aW9uRGF0YSkge1xuICAgICAgdGhpcy5wcmVmaWxsRnJvbUluaXRpYWxEYXRhKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2NvbmRpdGlvblRlbXBsYXRlcyddICYmICFjaGFuZ2VzWydjb25kaXRpb25UZW1wbGF0ZXMnXS5maXJzdENoYW5nZSkge1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZUNvbmZpZ0NhY2hlKCk7XG4gICAgICB0aGlzLnZhbHVlQ29uZmlnV2l0aEhhbmRsZXIgPSBudWxsO1xuICAgICAgLy8gUmUtcHJlZmlsbCBpZiB3ZSBub3cgaGF2ZSB0ZW1wbGF0ZXMgYW5kIHdlcmUgd2FpdGluZ1xuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ2VkaXQnICYmIHRoaXMuaW5pdGlhbENvbmRpdGlvbkRhdGEgJiYgIXRoaXMuc2VsZWN0ZWRUZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLnByZWZpbGxGcm9tSW5pdGlhbERhdGEoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIHByZWZpbGxGcm9tSW5pdGlhbERhdGEoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmluaXRpYWxDb25kaXRpb25EYXRhIHx8ICF0aGlzLmNvbmRpdGlvblRlbXBsYXRlcz8ubGVuZ3RoKSByZXR1cm47XG5cbiAgICBjb25zdCB7IHRlbXBsYXRlSWQsIGFjdGlvbiwgZGVzY3JpcHRpb24sIG1ldGFkYXRhIH0gPSB0aGlzLmluaXRpYWxDb25kaXRpb25EYXRhO1xuXG4gICAgLy8gRmluZCBtYXRjaGluZyB0ZW1wbGF0ZVxuICAgIGxldCB0ZW1wbGF0ZTogQWN0aW9uVGVtcGxhdGUgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHRlbXBsYXRlSWQgIT0gbnVsbCkge1xuICAgICAgdGVtcGxhdGUgPSB0aGlzLmNvbmRpdGlvblRlbXBsYXRlcy5maW5kKFxuICAgICAgICB0ID0+IFN0cmluZyh0LmlkKSA9PT0gU3RyaW5nKHRlbXBsYXRlSWQpIHx8IHQuZGlzcGxheU5hbWUgPT09IFN0cmluZyh0ZW1wbGF0ZUlkKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCF0ZW1wbGF0ZSAmJiBhY3Rpb24pIHtcbiAgICAgIHRlbXBsYXRlID0gdGhpcy5jb25kaXRpb25UZW1wbGF0ZXMuZmluZChcbiAgICAgICAgdCA9PiB0Lm5hdHVyYWxUZXh0ID09PSBhY3Rpb24gfHwgdC5odG1sR3JhbW1hciA9PT0gYWN0aW9uIHx8IHQuZGlzcGxheU5hbWUgPT09IGFjdGlvblxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGVtcGxhdGUpIHtcbiAgICAgIGNvbnN0IHNlbGVjdElkID0gdGVtcGxhdGUuaWQ/LnRvU3RyaW5nKCkgfHwgdGVtcGxhdGUuZGlzcGxheU5hbWUgfHwgJyc7XG4gICAgICB0aGlzLmNvbmRpdGlvbkZvcm0/LmdldCgndmFsdWUnKT8uc2V0VmFsdWUoc2VsZWN0SWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuXG4gICAgICAvLyBHZXQgZnJlc2ggdmFyaWFibGVzIHN0cnVjdHVyZSB3aXRoIHNhdmVkIHZhbHVlcyBieSBwYXNzaW5nIHRoZSByYXcgc3RlcFxuICAgICAgY29uc3QgdmFycyA9IHRoaXMuc2V0Q29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXModGVtcGxhdGUsIHRoaXMuZWRpdFRlc3RTdGVwKTtcbiAgICAgIHRoaXMudGVtcGxhdGVWYXJpYWJsZXMgPSB2YXJzO1xuXG4gICAgICB0aGlzLmJ1aWxkVmFyaWFibGVzRm9ybSgpO1xuICAgICAgdGhpcy51cGRhdGVIdG1sR3JhbW1hcigpO1xuXG4gICAgICAvLyBBZHZhbmNlZCB2YXJpYWJsZXNcbiAgICAgIGlmICh0aGlzLnNldEFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMpIHtcbiAgICAgICAgdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzID0gdGhpcy5zZXRBZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzKHRlbXBsYXRlLCB0aGlzLmVkaXRUZXN0U3RlcCk7XG4gICAgICAgIHRoaXMuYnVpbGRBZHZhbmNlZFZhcmlhYmxlc0Zvcm0oKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGVzY3JpcHRpb24pIHRoaXMuY29uZGl0aW9uRm9ybT8uZ2V0KCdkZXNjcmlwdGlvbicpPy5zZXRWYWx1ZShkZXNjcmlwdGlvbiwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIGlmIChtZXRhZGF0YSkgdGhpcy5jb25kaXRpb25Gb3JtPy5nZXQoJ21ldGFkYXRhJyk/LnNldFZhbHVlKG1ldGFkYXRhLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVZhbHVlQ29uZmlnQ2FjaGUoKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0czogU2VsZWN0T3B0aW9uW10gPSAodGhpcy5jb25kaXRpb25UZW1wbGF0ZXMgfHwgW10pLm1hcCh0ID0+ICh7XG4gICAgICBpZDogdC5pZD8udG9TdHJpbmcoKSB8fCB0LmRpc3BsYXlOYW1lIHx8ICcnLFxuICAgICAgdmFsdWU6IHQuaWQ/LnRvU3RyaW5nKCkgfHwgdC5kaXNwbGF5TmFtZSB8fCAnJyxcbiAgICAgIG5hbWU6IHQuaHRtbEdyYW1tYXIgfHwgdC5uYXR1cmFsVGV4dCB8fCAnJyxcbiAgICAgIGxhYmVsOiB0Lmh0bWxHcmFtbWFyIHx8IHQubmF0dXJhbFRleHQgfHwgJydcbiAgICB9KSk7XG4gICAgdGhpcy52YWx1ZUNvbmZpZ0NhY2hlID0ge1xuICAgICAga2V5OiAndmFsdWUnLFxuICAgICAgcGxhY2Vob2xkZXI6ICdTZWxlY3QgQ29uZGl0aW9uIFRlbXBsYXRlKicsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgZGlzcGxheUxhYmVsQXNJbm5lckh0bWw6IHRydWUsXG4gICAgICBvcHRpb25zOiBvcHRzXG4gICAgfTtcbiAgfVxuXG4gIGdldFZhbHVlQ29uZmlnKCk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgaWYgKHRoaXMudmFsdWVDb25maWdXaXRoSGFuZGxlcikgcmV0dXJuIHRoaXMudmFsdWVDb25maWdXaXRoSGFuZGxlcjtcbiAgICBpZiAoIXRoaXMudmFsdWVDb25maWdDYWNoZSkgdGhpcy51cGRhdGVWYWx1ZUNvbmZpZ0NhY2hlKCk7XG4gICAgdGhpcy52YWx1ZUNvbmZpZ1dpdGhIYW5kbGVyID0ge1xuICAgICAgLi4udGhpcy52YWx1ZUNvbmZpZ0NhY2hlISxcbiAgICAgIG9uQ2hhbmdlOiAodjogYW55KSA9PiB0aGlzLm9uVGVtcGxhdGVWYWx1ZUNoYW5nZSh2KVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMudmFsdWVDb25maWdXaXRoSGFuZGxlcjtcbiAgfVxuXG4gIG9uVGVtcGxhdGVWYWx1ZUNoYW5nZSh0ZW1wbGF0ZUlkOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMuY29uZGl0aW9uVGVtcGxhdGVzLmZpbmQoXG4gICAgICB0ID0+IFN0cmluZyh0LmlkKSA9PT0gU3RyaW5nKHRlbXBsYXRlSWQpIHx8IHQuZGlzcGxheU5hbWUgPT09IFN0cmluZyh0ZW1wbGF0ZUlkKVxuICAgICk7XG4gICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICAgIHRoaXMudGVtcGxhdGVWYXJpYWJsZXMgPSB0aGlzLnNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzKHRlbXBsYXRlKTtcbiAgICAgIHRoaXMuYnVpbGRWYXJpYWJsZXNGb3JtKCk7XG4gICAgICB0aGlzLnVwZGF0ZUh0bWxHcmFtbWFyKCk7XG4gICAgICBpZiAodGhpcy5zZXRBZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzKSB7XG4gICAgICAgIHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyA9IHRoaXMuc2V0QWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyh0ZW1wbGF0ZSk7XG4gICAgICAgIHRoaXMuYnVpbGRBZHZhbmNlZFZhcmlhYmxlc0Zvcm0oKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZFRlbXBsYXRlID0gbnVsbDtcbiAgICAgIHRoaXMudGVtcGxhdGVWYXJpYWJsZXMgPSBbXTtcbiAgICAgIHRoaXMuY2xlYXJWYXJpYWJsZXNGb3JtKCk7XG4gICAgICB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgPSBbXTtcbiAgICAgIHRoaXMuY2xlYXJBZHZhbmNlZFZhcmlhYmxlc0Zvcm0oKTtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkVmFyaWFibGVzRm9ybSgpOiB2b2lkIHtcbiAgICB3aGlsZSAodGhpcy52YXJpYWJsZXNGb3JtLmxlbmd0aCkgdGhpcy52YXJpYWJsZXNGb3JtLnJlbW92ZUF0KDApO1xuICAgIHRoaXMudGVtcGxhdGVWYXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB2YXJpYWJsZS50eXBlID09PSAnYm9vbGVhbidcbiAgICAgICAgPyAodmFyaWFibGUudmFsdWUgPT09IHRydWUgfHwgdmFyaWFibGUudmFsdWUgPT09ICd0cnVlJyB8fCB2YXJpYWJsZS52YWx1ZSA9PT0gMSlcbiAgICAgICAgOiAodmFyaWFibGUudmFsdWUgfHwgJycpO1xuICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgbmFtZTogW3ZhcmlhYmxlLm5hbWVdLFxuICAgICAgICB2YWx1ZTogW2RlZmF1bHRWYWx1ZV0sXG4gICAgICAgIHR5cGU6IFt2YXJpYWJsZS50eXBlIHx8ICdzdHJpbmcnXSxcbiAgICAgICAgbGFiZWw6IFt2YXJpYWJsZS5sYWJlbCB8fCAnJ10sXG4gICAgICAgIG9wdGlvbnM6IFt2YXJpYWJsZS5vcHRpb25zIHx8IFtdXVxuICAgICAgfSk7XG4gICAgICBjb25zdCBsYWJlbCA9IHZhcmlhYmxlLmxhYmVsPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuICAgICAgaWYgKGxhYmVsID09PSAndGVzdC1kYXRhJyB8fCBsYWJlbCA9PT0gJ3NvdXJjZS12YWx1ZScgfHwgbGFiZWwgPT09ICd0YXJnZXQtdmFsdWUnIHx8XG4gICAgICAgICAgbGFiZWwgPT09ICdzb3VyY2VfdmFsdWUnIHx8IGxhYmVsID09PSAndGFyZ2V0X3ZhbHVlJykge1xuICAgICAgICBjb25zdCB2YWx1ZVN0ciA9IFN0cmluZyhkZWZhdWx0VmFsdWUgfHwgJycpO1xuICAgICAgICBsZXQgZGF0YVR5cGUgPSAncGxhaW4tdGV4dCc7XG4gICAgICAgIGlmICh2YWx1ZVN0ci5zdGFydHNXaXRoKCdAfCcpICYmIHZhbHVlU3RyLmVuZHNXaXRoKCd8JykpIGRhdGFUeXBlID0gJ3BhcmFtZXRlcic7XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlU3RyLnN0YXJ0c1dpdGgoJyR8JykgJiYgdmFsdWVTdHIuZW5kc1dpdGgoJ3wnKSkgZGF0YVR5cGUgPSAncnVudGltZSc7XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlU3RyLnN0YXJ0c1dpdGgoJyp8JykgJiYgdmFsdWVTdHIuZW5kc1dpdGgoJ3wnKSkgZGF0YVR5cGUgPSAnZW52aXJvbm1lbnQnO1xuICAgICAgICBncm91cC5hZGRDb250cm9sKCdkYXRhVHlwZScsIG5ldyBGb3JtQ29udHJvbChkYXRhVHlwZSkpO1xuICAgICAgfVxuICAgICAgdGhpcy52YXJpYWJsZXNGb3JtLnB1c2goZ3JvdXApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclZhcmlhYmxlc0Zvcm0oKTogdm9pZCB7XG4gICAgd2hpbGUgKHRoaXMudmFyaWFibGVzRm9ybS5sZW5ndGgpIHRoaXMudmFyaWFibGVzRm9ybS5yZW1vdmVBdCgwKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRBZHZhbmNlZFZhcmlhYmxlc0Zvcm0oKTogdm9pZCB7XG4gICAgd2hpbGUgKHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmxlbmd0aCkgdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0ucmVtb3ZlQXQoMCk7XG4gICAgdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgICAgbGV0IGRlZmF1bHRWYWx1ZTogYW55O1xuICAgICAgaWYgKHZhcmlhYmxlLnR5cGUgPT09ICdzdHJfbGlzdCcpIHtcbiAgICAgICAgY29uc3QgYXJyID0gQXJyYXkuaXNBcnJheSh2YXJpYWJsZS52YWx1ZSkgPyB2YXJpYWJsZS52YWx1ZSA6IFtdO1xuICAgICAgICBkZWZhdWx0VmFsdWUgPSB0aGlzLmZiLmFycmF5KGFyci5sZW5ndGggPiAwID8gYXJyLm1hcCgoaTogc3RyaW5nKSA9PiB0aGlzLmZiLmNvbnRyb2woaSkpIDogW3RoaXMuZmIuY29udHJvbCgnJyldKTtcbiAgICAgIH0gZWxzZSBpZiAodmFyaWFibGUudHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IHZhcmlhYmxlLnZhbHVlID09PSB0cnVlIHx8IHZhcmlhYmxlLnZhbHVlID09PSAndHJ1ZScgfHwgdmFyaWFibGUudmFsdWUgPT09IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0VmFsdWUgPSB2YXJpYWJsZS52YWx1ZSB8fCAnJztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG5hbWU6IFt2YXJpYWJsZS5uYW1lXSxcbiAgICAgICAgdmFsdWU6IHZhcmlhYmxlLnR5cGUgPT09ICdzdHJfbGlzdCcgPyBkZWZhdWx0VmFsdWUgOiBbZGVmYXVsdFZhbHVlXSxcbiAgICAgICAgdHlwZTogW3ZhcmlhYmxlLnR5cGUgfHwgJ3N0cmluZyddLFxuICAgICAgICBsYWJlbDogW3ZhcmlhYmxlLmxhYmVsIHx8ICcnXVxuICAgICAgfSk7XG4gICAgICB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5wdXNoKGdyb3VwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJBZHZhbmNlZFZhcmlhYmxlc0Zvcm0oKTogdm9pZCB7XG4gICAgd2hpbGUgKHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmxlbmd0aCkgdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0ucmVtb3ZlQXQoMCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUh0bWxHcmFtbWFyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZFRlbXBsYXRlPy5odG1sR3JhbW1hcikgeyB0aGlzLnVwZGF0ZWRIdG1sR3JhbW1hciA9ICcnOyByZXR1cm47IH1cbiAgICBpZiAodGhpcy5jb21wdXRlSHRtbEdyYW1tYXJGbikge1xuICAgICAgdGhpcy51cGRhdGVkSHRtbEdyYW1tYXIgPSB0aGlzLmNvbXB1dGVIdG1sR3JhbW1hckZuKHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZSwgdGhpcy50ZW1wbGF0ZVZhcmlhYmxlcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBnID0gdGhpcy5zZWxlY3RlZFRlbXBsYXRlLmh0bWxHcmFtbWFyO1xuICAgIHRoaXMudGVtcGxhdGVWYXJpYWJsZXMuZm9yRWFjaCh2ID0+IHtcbiAgICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgPHNwYW5bXj5dKmRhdGEtZXZlbnQta2V5PVwiJHt2Lm5hbWV9XCJbXj5dKj4uKj88L3NwYW4+YCwgJ2dpJyk7XG4gICAgICBjb25zdCBlc2NhcGVkID0gU3RyaW5nKHYudmFsdWUgfHwgJycpLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcbiAgICAgIGcgPSBnLnJlcGxhY2UocmUsIGVzY2FwZWQpO1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlZEh0bWxHcmFtbWFyID0gZztcbiAgfVxuXG4gIGdldCBjdXJyZW50SHRtbEdyYW1tYXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy51cGRhdGVkSHRtbEdyYW1tYXIgfHwgdGhpcy5zZWxlY3RlZFRlbXBsYXRlPy5odG1sR3JhbW1hciB8fCB0aGlzLnNlbGVjdGVkVGVtcGxhdGU/Lm5hdHVyYWxUZXh0IHx8ICcnO1xuICB9XG5cbiAgZ2V0VGVtcGxhdGVWYXJpYWJsZXMoKTogYW55W10geyByZXR1cm4gdGhpcy50ZW1wbGF0ZVZhcmlhYmxlczsgfVxuICBnZXRWYXJpYWJsZXNGb3JtKCk6IEZvcm1BcnJheSB7IHJldHVybiB0aGlzLnZhcmlhYmxlc0Zvcm07IH1cbiAgZ2V0QWR2YW5jZWRWYXJpYWJsZXMoKTogYW55W10geyByZXR1cm4gdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOyB9XG4gIGdldEFkdmFuY2VkVmFyaWFibGVzRm9ybSgpOiBGb3JtQXJyYXkgeyByZXR1cm4gdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm07IH1cbiAgZ2V0IGlzQWR2YW5jZWRFeHBhbmRlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuYWR2YW5jZWRFeHBhbmRlZDsgfVxuICB0b2dnbGVBZHZhbmNlZCgpOiB2b2lkIHsgdGhpcy5hZHZhbmNlZEV4cGFuZGVkID0gIXRoaXMuYWR2YW5jZWRFeHBhbmRlZDsgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7IH1cbiAgZ2V0IGhhc1NlbGVjdGVkVGVtcGxhdGUoKTogQWN0aW9uVGVtcGxhdGUgfCBudWxsIHsgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZTsgfVxuXG4gIG9uVmFyaWFibGVWYWx1ZUNoYW5nZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCB2ID0gdGhpcy50ZW1wbGF0ZVZhcmlhYmxlcy5maW5kKHR2ID0+IHR2Lm5hbWUgPT09IG5hbWUpO1xuICAgIGlmICh2KSB2LnZhbHVlID0gdmFsdWU7XG4gICAgY29uc3QgaWR4ID0gdGhpcy52YXJpYWJsZXNGb3JtLmNvbnRyb2xzLmZpbmRJbmRleChjID0+IGMuZ2V0KCduYW1lJyk/LnZhbHVlID09PSBuYW1lKTtcbiAgICBpZiAoaWR4ICE9PSAtMSkgdGhpcy52YXJpYWJsZXNGb3JtLmF0KGlkeCkuZ2V0KCd2YWx1ZScpPy5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMudXBkYXRlSHRtbEdyYW1tYXIoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uVmFyaWFibGVCb29sZWFuQ2hhbmdlKG5hbWU6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLm9uVmFyaWFibGVWYWx1ZUNoYW5nZShuYW1lLCB2YWx1ZSk7XG4gIH1cblxuICBvbkFkdmFuY2VkVmFyaWFibGVWYWx1ZUNoYW5nZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCB2ID0gdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmZpbmQodHYgPT4gdHYubmFtZSA9PT0gbmFtZSk7XG4gICAgaWYgKHYpIHYudmFsdWUgPSB2YWx1ZTtcbiAgICBjb25zdCBpZHggPSB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5jb250cm9scy5maW5kSW5kZXgoYyA9PiBjLmdldCgnbmFtZScpPy52YWx1ZSA9PT0gbmFtZSk7XG4gICAgaWYgKGlkeCAhPT0gLTEgJiYgdj8udHlwZSAhPT0gJ3N0cl9saXN0Jykge1xuICAgICAgKHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmF0KGlkeCkgYXMgRm9ybUdyb3VwKS5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgb25BZHZhbmNlZFZhcmlhYmxlQm9vbGVhbkNoYW5nZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5vbkFkdmFuY2VkVmFyaWFibGVWYWx1ZUNoYW5nZShuYW1lLCB2YWx1ZSk7XG4gIH1cblxuICBpc0Zvcm1WYWxpZCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY29uZGl0aW9uRm9ybS52YWxpZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlVmFyaWFibGVzLmV2ZXJ5KHYgPT4ge1xuICAgICAgaWYgKHYuZGF0YUtleSA9PT0gJ2VsZW1lbnQnIHx8IHYuZGF0YUtleSA9PT0gJ3Rlc3RfZGF0YScgfHwgdi5kYXRhS2V5ID09PSAnc291cmNlX3ZhbHVlJyB8fCB2LmRhdGFLZXkgPT09ICd0YXJnZXRfdmFsdWUnKSB7XG4gICAgICAgIHJldHVybiB2LnZhbHVlICE9PSBudWxsICYmIHYudmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2LnZhbHVlICE9PSAnJztcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgb25DYW5jZWwoKTogdm9pZCB7IHRoaXMuY2FuY2VsbGVkLmVtaXQoKTsgfVxuXG4gIG9uU2F2ZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNGb3JtVmFsaWQoKSkgcmV0dXJuO1xuICAgIC8vIFN5bmMgYWR2YW5jZWQgZm9ybSB2YWx1ZXMgYmFjayB0byBhcnJheVxuICAgIHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5mb3JFYWNoKCh2YXJpYWJsZSwgaSkgPT4ge1xuICAgICAgY29uc3QgZmcgPSB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5hdChpKSBhcyBGb3JtR3JvdXA7XG4gICAgICBpZiAoIWZnKSByZXR1cm47XG4gICAgICBjb25zdCBmdiA9IGZnLmdldCgndmFsdWUnKT8udmFsdWU7XG4gICAgICBpZiAodmFyaWFibGUudHlwZSA9PT0gJ3N0cl9saXN0JyAmJiBmdiBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgICB2YXJpYWJsZS52YWx1ZSA9IGZ2LmNvbnRyb2xzLm1hcChjID0+IGMudmFsdWUpLmZpbHRlcigodmFsOiBzdHJpbmcpID0+IHZhbD8udHJpbSgpICE9PSAnJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXJpYWJsZS52YWx1ZSA9IGZ2O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZmluYWxBZHZhbmNlZFZhcnMgPSBbLi4udGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzXTtcbiAgICBjb25zdCBzaG91bGRTa2lwVmFyID0gZmluYWxBZHZhbmNlZFZhcnMuZmluZCh2ID0+IHYubmFtZSA9PT0gJ3Nob3VsZFNraXAnKTtcbiAgICBjb25zdCBpc1N0ZXBPcHRpb25hbFZhciA9IGZpbmFsQWR2YW5jZWRWYXJzLmZpbmQodiA9PiB2Lm5hbWUgPT09ICdpc1N0ZXBPcHRpb25hbCcpO1xuXG4gICAgdGhpcy5zYXZlLmVtaXQoe1xuICAgICAgdGVtcGxhdGU6IHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZSxcbiAgICAgIHRlbXBsYXRlVmFyaWFibGVzOiBbLi4udGhpcy50ZW1wbGF0ZVZhcmlhYmxlc10sXG4gICAgICBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOiBmaW5hbEFkdmFuY2VkVmFycyxcbiAgICAgIGFjdGlvbjogdGhpcy5zZWxlY3RlZFRlbXBsYXRlPy5uYXR1cmFsVGV4dCB8fCB0aGlzLnNlbGVjdGVkVGVtcGxhdGU/Lmh0bWxHcmFtbWFyIHx8ICcnLFxuICAgICAgcmVzb2x2ZWRBY3Rpb246IHRoaXMuY3VycmVudEh0bWxHcmFtbWFyLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuY29uZGl0aW9uRm9ybS5nZXQoJ2Rlc2NyaXB0aW9uJyk/LnZhbHVlIHx8ICcnLFxuICAgICAgbWV0YWRhdGE6IHRoaXMuY29uZGl0aW9uRm9ybS5nZXQoJ21ldGFkYXRhJyk/LnZhbHVlIHx8ICcnLFxuICAgICAgc2hvdWxkU2tpcDogc2hvdWxkU2tpcFZhciA/ICEhc2hvdWxkU2tpcFZhci52YWx1ZSA6IGZhbHNlLFxuICAgICAgaWdub3JlU3RlcFJlc3VsdDogaXNTdGVwT3B0aW9uYWxWYXIgPyAhIWlzU3RlcE9wdGlvbmFsVmFyLnZhbHVlIDogZmFsc2UsXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWgtZnVsbCBjcWEtYmctd2hpdGUgY3FhLXB4LTQgY3FhLXB5LTJcIj5cbiAgPCEtLSBIZWFkZXIgLS0+XG4gIDxoMiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1ibGFjay0xMDAgY3FhLW1iLTRcIj5cbiAgICB7eyB0aXRsZSB9fVxuICA8L2gyPlxuXG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWZsZXgtMSBjcWEtb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgPCEtLSBDb25kaXRpb24gQnVpbGRlciBTZWN0aW9uIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItNlwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1tYi0zXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1ncmF5LTkwMFwiPlxuICAgICAgICAgIENvbmRpdGlvbiBCdWlsZGVyXG4gICAgICAgIDwvaDM+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBTaW5nbGUgQ29uZGl0aW9uIFJvdyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yXCIgW2Zvcm1Hcm91cF09XCJjb25kaXRpb25Gb3JtXCI+XG4gICAgICAgIDwhLS0gQ29uZGl0aW9uIExhYmVsICsgVGVtcGxhdGUgRHJvcGRvd24gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgICAgIDwhLS0gTGFiZWwgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1zZW1pYm9sZFwiPlxuICAgICAgICAgICAge3sgY29uZGl0aW9uUm93TGFiZWwgfX1cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gVmFsdWUgVGVtcGxhdGUgRHJvcGRvd24gLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLW1pbi13LVsxNTBweF0gY3FhLXRleHQtWzEwcHhdXCI+XG4gICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFtmb3JtXT1cImNvbmRpdGlvbkZvcm1cIiBbY29uZmlnXT1cImdldFZhbHVlQ29uZmlnKClcIj5cbiAgICAgICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFRlbXBsYXRlIFZhcmlhYmxlcyBTZWN0aW9uIChzaG93biB3aGVuIHRlbXBsYXRlIGlzIHNlbGVjdGVkKSAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cImhhc1NlbGVjdGVkVGVtcGxhdGVcIiBjbGFzcz1cImNxYS1tdC0yXCI+XG4gICAgICAgICAgPCEtLSBUZW1wbGF0ZSBHcmFtbWFyIERpc3BsYXkgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1tYi00IGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWZsZXgtd3JhcCBjcWEtZ2FwLTEgY3FhLXRleHQtc20gY3FhLXRleHQtZ3JheS03MDBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYWN0aW9uLWZvcm1hdCBjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctWzIzcHhdIGNxYS10ZXh0LWJsYWNrLTEwMFwiXG4gICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiY3VycmVudEh0bWxHcmFtbWFyXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gVGVtcGxhdGUgVmFyaWFibGVzIEZvcm0gLS0+XG4gICAgICAgICAgPGNxYS10ZW1wbGF0ZS12YXJpYWJsZXMtZm9ybVxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIlxuICAgICAgICAgICAgW3RlbXBsYXRlVmFyaWFibGVzXT1cImdldFRlbXBsYXRlVmFyaWFibGVzKClcIlxuICAgICAgICAgICAgW3ZhcmlhYmxlc0Zvcm1dPVwiZ2V0VmFyaWFibGVzRm9ybSgpXCJcbiAgICAgICAgICAgIFttZXRhZGF0YV09XCJjb25kaXRpb25Gb3JtLmdldCgnbWV0YWRhdGEnKT8udmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cImNvbmRpdGlvbkZvcm0uZ2V0KCdkZXNjcmlwdGlvbicpPy52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICBbZWxlbWVudE9wdGlvbnNdPVwiZWxlbWVudE9wdGlvbnNcIlxuICAgICAgICAgICAgW2hhc01vcmVFbGVtZW50c109XCJoYXNNb3JlRWxlbWVudHNcIlxuICAgICAgICAgICAgW2lzTG9hZGluZ0VsZW1lbnRzXT1cImlzTG9hZGluZ0VsZW1lbnRzXCJcbiAgICAgICAgICAgIFtzY3JlZW5OYW1lT3B0aW9uc109XCJzY3JlZW5OYW1lT3B0aW9uc1wiXG4gICAgICAgICAgICBbaGFzTW9yZVNjcmVlbk5hbWVzXT1cImhhc01vcmVTY3JlZW5OYW1lc1wiXG4gICAgICAgICAgICBbaXNMb2FkaW5nU2NyZWVuTmFtZXNdPVwiaXNMb2FkaW5nU2NyZWVuTmFtZXNcIlxuICAgICAgICAgICAgW3BhcmFtZXRlck9wdGlvbnNdPVwicGFyYW1ldGVyT3B0aW9uc1wiXG4gICAgICAgICAgICBbaGFzTW9yZVBhcmFtZXRlcnNdPVwiaGFzTW9yZVBhcmFtZXRlcnNcIlxuICAgICAgICAgICAgW2lzTG9hZGluZ1BhcmFtZXRlcnNdPVwiaXNMb2FkaW5nUGFyYW1ldGVyc1wiXG4gICAgICAgICAgICBbZW52aXJvbm1lbnRPcHRpb25zXT1cImVudmlyb25tZW50T3B0aW9uc1wiXG4gICAgICAgICAgICBbaGFzTW9yZUVudmlyb25tZW50c109XCJoYXNNb3JlRW52aXJvbm1lbnRzXCJcbiAgICAgICAgICAgIFtpc0xvYWRpbmdFbnZpcm9ubWVudHNdPVwiaXNMb2FkaW5nRW52aXJvbm1lbnRzXCJcbiAgICAgICAgICAgIFt0ZXN0Q2FzZUVudmlyb25tZW50TmFtZV09XCJ0ZXN0Q2FzZUVudmlyb25tZW50TmFtZVwiXG4gICAgICAgICAgICBbdGVzdENhc2VFbnZpcm9ubWVudExhYmVsU3VmZml4XT1cInRlc3RDYXNlRW52aXJvbm1lbnRMYWJlbFN1ZmZpeFwiXG4gICAgICAgICAgICBbZW52aXJvbm1lbnRMZWdhY3lEZXByZWNhdGlvbk1lc3NhZ2VdPVwiZW52aXJvbm1lbnRMZWdhY3lEZXByZWNhdGlvbk1lc3NhZ2VcIlxuICAgICAgICAgICAgW3Rlc3RDYXNlVGVzdERhdGFJZF09XCJ0ZXN0Q2FzZVRlc3REYXRhSWRcIlxuICAgICAgICAgICAgW2hhc1Rlc3REYXRhUHJvZmlsZV09XCJoYXNUZXN0RGF0YVByb2ZpbGVcIlxuICAgICAgICAgICAgW2lzSW5zaWRlRm9yTG9vcFN0ZXBdPVwiaXNJbnNpZGVGb3JMb29wU3RlcFwiXG4gICAgICAgICAgICBbZ2xvYmFsVmFyaWFibGVPcHRpb25zXT1cImdsb2JhbFZhcmlhYmxlT3B0aW9uc1wiXG4gICAgICAgICAgICBbaXNMb2FkaW5nR2xvYmFsVmFyaWFibGVzXT1cImlzTG9hZGluZ0dsb2JhbFZhcmlhYmxlc1wiXG4gICAgICAgICAgICBbZGVmYXVsdFRlc3REYXRhUHJvZmlsZUlkXT1cImRlZmF1bHRUZXN0RGF0YVByb2ZpbGVJZFwiXG4gICAgICAgICAgICBbZGVmYXVsdFRlc3REYXRhU3RhcnRJbmRleF09XCJkZWZhdWx0VGVzdERhdGFTdGFydEluZGV4XCJcbiAgICAgICAgICAgICh2YXJpYWJsZVZhbHVlQ2hhbmdlKT1cIm9uVmFyaWFibGVWYWx1ZUNoYW5nZSgkZXZlbnQubmFtZSwgJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgICAgICAodmFyaWFibGVCb29sZWFuQ2hhbmdlKT1cIm9uVmFyaWFibGVCb29sZWFuQ2hhbmdlKCRldmVudC5uYW1lLCAkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICAgIChtZXRhZGF0YUNoYW5nZSk9XCJjb25kaXRpb25Gb3JtLmdldCgnbWV0YWRhdGEnKT8uc2V0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoZGVzY3JpcHRpb25DaGFuZ2UpPVwiY29uZGl0aW9uRm9ybS5nZXQoJ2Rlc2NyaXB0aW9uJyk/LnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgKGxvYWRNb3JlRWxlbWVudHMpPVwibG9hZE1vcmVFbGVtZW50cy5lbWl0KClcIlxuICAgICAgICAgICAgKHNlYXJjaEVsZW1lbnRzKT1cInNlYXJjaEVsZW1lbnRzLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2VhcmNoRWxlbWVudHNCeVNjcmVlbk5hbWUpPVwic2VhcmNoRWxlbWVudHNCeVNjcmVlbk5hbWUuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjcmVhdGVFbGVtZW50KT1cImNyZWF0ZUVsZW1lbnQuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChzZWFyY2hTY3JlZW5OYW1lKT1cInNlYXJjaFNjcmVlbk5hbWUuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChsb2FkTW9yZVNjcmVlbk5hbWVzKT1cImxvYWRNb3JlU2NyZWVuTmFtZXMuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjcmVhdGVTY3JlZW5OYW1lUmVxdWVzdCk9XCJjcmVhdGVTY3JlZW5OYW1lUmVxdWVzdC5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgKHNlYXJjaFBhcmFtZXRlcnMpPVwic2VhcmNoUGFyYW1ldGVycy5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgKGxvYWRNb3JlUGFyYW1ldGVycyk9XCJsb2FkTW9yZVBhcmFtZXRlcnMuZW1pdCgpXCJcbiAgICAgICAgICAgIChzZWFyY2hFbnZpcm9ubWVudHMpPVwic2VhcmNoRW52aXJvbm1lbnRzLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAobG9hZE1vcmVFbnZpcm9ubWVudHMpPVwibG9hZE1vcmVFbnZpcm9ubWVudHMuZW1pdCgpXCJcbiAgICAgICAgICAgIChzZWFyY2hHbG9iYWxWYXJpYWJsZXMpPVwic2VhcmNoR2xvYmFsVmFyaWFibGVzLmVtaXQoJGV2ZW50KVwiPlxuICAgICAgICAgIDwvY3FhLXRlbXBsYXRlLXZhcmlhYmxlcy1mb3JtPlxuXG4gICAgICAgICAgPCEtLSBBZHZhbmNlZCBTZXR0aW5ncyBWYXJpYWJsZXMgRm9ybSAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0QWR2YW5jZWRWYXJpYWJsZXMoKS5sZW5ndGggPiAwXCIgY2xhc3M9XCJjcWEtbXQtNFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtdy1mdWxsIGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtZ2FwLTIgY3FhLXRleHQtc20gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LWdyYXktNzAwIGNxYS1iZy10cmFuc3BhcmVudCBjcWEtYm9yZGVyLW5vbmUgY3FhLWN1cnNvci1wb2ludGVyIGNxYS1wLTAgY3FhLW1iLTEuNVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFkdmFuY2VkKClcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxMHB4XVwiPkFkdmFuY2VkPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LWJhc2VcIiBbY2xhc3MuY3FhLXJvdGF0ZS0xODBdPVwiaXNBZHZhbmNlZEV4cGFuZGVkXCI+XG4gICAgICAgICAgICAgICAgICBleHBhbmRfbW9yZVxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNBZHZhbmNlZEV4cGFuZGVkXCIgY2xhc3M9XCJjcWEtbXQtMlwiPlxuICAgICAgICAgICAgICAgIDxjcWEtYWR2YW5jZWQtdmFyaWFibGVzLWZvcm1cbiAgICAgICAgICAgICAgICAgIFthZHZhbmNlZFZhcmlhYmxlc109XCJnZXRBZHZhbmNlZFZhcmlhYmxlcygpXCJcbiAgICAgICAgICAgICAgICAgIFthZHZhbmNlZFZhcmlhYmxlRm9ybV09XCJnZXRBZHZhbmNlZFZhcmlhYmxlc0Zvcm0oKVwiXG4gICAgICAgICAgICAgICAgICAodmFyaWFibGVCb29sZWFuQ2hhbmdlKT1cIm9uQWR2YW5jZWRWYXJpYWJsZUJvb2xlYW5DaGFuZ2UoJGV2ZW50Lm5hbWUsICRldmVudC52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgKHZhcmlhYmxlVmFsdWVDaGFuZ2UpPVwib25BZHZhbmNlZFZhcmlhYmxlVmFsdWVDaGFuZ2UoJGV2ZW50Lm5hbWUsICRldmVudC52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgICA8L2NxYS1hZHZhbmNlZC12YXJpYWJsZXMtZm9ybT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBBY3Rpb24gQnV0dG9ucyAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS13LWZ1bGwgY3FhLWdhcC0yIGNxYS1tdC1hdXRvIGNxYS1wdC00IGNxYS1ib3JkZXItdCBjcWEtYm9yZGVyLWdyYXktMjAwXCI+XG4gICAgPGNxYS1idXR0b24gY2xhc3M9XCJjcWEtdy0xLzJcIiB2YXJpYW50PVwib3V0bGluZWRcIiB0ZXh0PVwiQ2FuY2VsXCIgW2N1c3RvbUNsYXNzXT1cIidjcWEtZmxleC0xIGNxYS13LWZ1bGwnXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ2FuY2VsKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gICAgPGNxYS1idXR0b24gKm5nSWY9XCIhaXNTYXZpbmdcIiBjbGFzcz1cImNxYS13LTEvMlwiIHZhcmlhbnQ9XCJmaWxsZWRcIiBbdGV4dF09XCJzYXZlQnV0dG9uTGFiZWxcIlxuICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtZmxleC0xIGNxYS13LWZ1bGwnXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhaXNGb3JtVmFsaWQoKVwiXG4gICAgICAoY2xpY2tlZCk9XCJvblNhdmUoKVwiPlxuICAgIDwvY3FhLWJ1dHRvbj5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNTYXZpbmdcIiBjbGFzcz1cImNxYS13LTEvMiBjcWEtZmxleC0xIGNxYS1taW4taC1bMzhweF0gY3FhLXJvdW5kZWQtWzhweF1cIj5cbiAgICAgIDxjcWEtYmFkZ2UgbGFiZWw9XCJTYXZpbmfigKZcIiBpY29uPVwiYXV0b3JlbmV3XCIgW2lzTG9hZGluZ109XCJ0cnVlXCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCIgW2NlbnRlckNvbnRlbnRdPVwidHJ1ZVwiXG4gICAgICAgIFtpbmxpbmVTdHlsZXNdPVwiJ21pbi1oZWlnaHQ6IDM4cHg7IGhlaWdodDogMzhweDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7J1wiXG4gICAgICAgIHZhcmlhbnQ9XCJpbmZvXCIgc2l6ZT1cIm1lZGl1bVwiPjwvY3FhLWJhZGdlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
418
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLWJyYW5jaC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9leGVjdXRpb24tc2NyZWVuL2NvbmRpdGlvbi1kZWJ1Zy1zdGVwL2NvbmRpdGlvbi1icmFuY2gtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZXhlY3V0aW9uLXNjcmVlbi9jb25kaXRpb24tZGVidWctc3RlcC9jb25kaXRpb24tYnJhbmNoLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUN0Qyx1QkFBdUIsRUFDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBMEIsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBbUI1Rjs7Ozs7O0dBTUc7QUFRSCxNQUFNLE9BQU8sOEJBQThCO0lBMEZ6QyxZQUFvQixFQUFlLEVBQVUsR0FBc0I7UUFBL0MsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBeEZuRSxpR0FBaUc7UUFDeEYsU0FBSSxHQUEyQixhQUFhLENBQUM7UUFFdEQseUVBQXlFO1FBQ2hFLHVCQUFrQixHQUFxQixFQUFFLENBQUM7UUFFbkQsbUVBQW1FO1FBQzFELGtDQUE2QixHQUF3RCxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFFdkcsbURBQW1EO1FBQzFDLGlDQUE0QixHQUF3RCxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFLdEcseUNBQXlDO1FBQ2hDLG1CQUFjLEdBQVUsRUFBRSxDQUFDO1FBQzNCLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBQ2pDLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyxzQkFBaUIs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QUs7Z0JBR0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQVNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLDBCQUEwQjtzQkFBbkMsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csdUJBQXVCO3NCQUFoQyxNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZywgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vLi4vZHluYW1pYy1zZWxlY3QvZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IEFjdGlvblRlbXBsYXRlIH0gZnJvbSAnLi4vLi4vc3RlcC1idWlsZGVyL3N0ZXAtYnVpbGRlci1hY3Rpb24vc3RlcC1idWlsZGVyLWFjdGlvbi5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbmRpdGlvbkJyYW5jaFNhdmVEYXRhIHtcbiAgdGVtcGxhdGU6IEFjdGlvblRlbXBsYXRlIHwgbnVsbDtcbiAgdGVtcGxhdGVWYXJpYWJsZXM6IGFueVtdO1xuICBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOiBhbnlbXTtcbiAgYWN0aW9uOiBzdHJpbmc7XG4gIC8qKiBSZXNvbHZlZCBIVE1MIGdyYW1tYXIgd2l0aCBhY3R1YWwgdmFyaWFibGUgdmFsdWVzIHN1YnN0aXR1dGVkIOKAlCB1c2UgZm9yIGRpc3BsYXkvY29uZGl0aW9uVGV4dCAqL1xuICByZXNvbHZlZEFjdGlvbjogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBtZXRhZGF0YTogc3RyaW5nO1xuICAvKiogRGVyaXZlZCBmcm9tIGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgJ3Nob3VsZFNraXAnIGVudHJ5IOKAlCBzdGVwIHNob3VsZCBiZSBza2lwcGVkIGR1cmluZyBleGVjdXRpb24gKi9cbiAgc2hvdWxkU2tpcDogYm9vbGVhbjtcbiAgLyoqIERlcml2ZWQgZnJvbSBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzICdpc1N0ZXBPcHRpb25hbCcgZW50cnkg4oCUIHN0ZXAgZmFpbHVyZSBzaG91bGQgbm90IGZhaWwgdGhlIHRlc3QgKi9cbiAgaWdub3JlU3RlcFJlc3VsdDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBMaWdodHdlaWdodCBzaW5nbGUtY29uZGl0aW9uIGVkaXRvciB1c2VkIGluIGRlYnVnIG1vZGUgdG86XG4gKiAgLSBBZGQgYSBuZXcgRUxTRSBJRiBicmFuY2ggKG1vZGUgPSAnYWRkLWVsc2UtaWYnKVxuICogIC0gRWRpdCBhbiBleGlzdGluZyBJRiBvciBFTFNFIElGIGNvbmRpdGlvbiAobW9kZSA9ICdlZGl0JylcbiAqXG4gKiBUaGlzIGlzIGEgc2ltcGxpZmllZCB2YXJpYW50IG9mIFN0ZXBCdWlsZGVyQ29uZGl0aW9uQ29tcG9uZW50IHdpdGggb25lIGNvbmRpdGlvbiByb3cuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1jb25kaXRpb24tYnJhbmNoLWVkaXRvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb25kaXRpb24tYnJhbmNoLWVkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uQnJhbmNoRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuXG4gIC8qKiAnYWRkLWVsc2UtaWYnIHNob3dzIFwiQWRkIEVMU0UgSUZcIiB0aXRsZS9idXR0b247ICdlZGl0JyBzaG93cyBcIkVkaXQgQ29uZGl0aW9uXCIgdGl0bGUvYnV0dG9uICovXG4gIEBJbnB1dCgpIG1vZGU6ICdhZGQtZWxzZS1pZicgfCAnZWRpdCcgPSAnYWRkLWVsc2UtaWYnO1xuXG4gIC8qKiBMaXN0IG9mIGNvbmRpdGlvbiBhY3Rpb24gdGVtcGxhdGVzIChmaWx0ZXJlZCB0byBJRl9DT05ESVRJT04gdHlwZSkgKi9cbiAgQElucHV0KCkgY29uZGl0aW9uVGVtcGxhdGVzOiBBY3Rpb25UZW1wbGF0ZVtdID0gW107XG5cbiAgLyoqIENhbGxlZCB0byBkZXJpdmUgdGVtcGxhdGUgdmFyaWFibGVzIGZyb20gYSBzZWxlY3RlZCB0ZW1wbGF0ZSAqL1xuICBASW5wdXQoKSBzZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlczogKHRlbXBsYXRlOiBBY3Rpb25UZW1wbGF0ZSwgdGVzdFN0ZXA/OiBhbnkpID0+IGFueVtdID0gKCkgPT4gW107XG5cbiAgLyoqIENhbGxlZCB0byBkZXJpdmUgYWR2YW5jZWQgc2V0dGluZ3MgdmFyaWFibGVzICovXG4gIEBJbnB1dCgpIHNldEFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXM6ICh0ZW1wbGF0ZTogQWN0aW9uVGVtcGxhdGUsIHRlc3RTdGVwPzogYW55KSA9PiBhbnlbXSA9ICgpID0+IFtdO1xuXG4gIC8qKiBDZW50cmFsaXNlZCBIVE1MIGdyYW1tYXIgY29tcHV0YXRpb24gZnVuY3Rpb24gKi9cbiAgQElucHV0KCkgY29tcHV0ZUh0bWxHcmFtbWFyRm4/OiAodGVtcGxhdGU6IGFueSwgdmFyaWFibGVzOiBhbnlbXSkgPT4gc3RyaW5nO1xuXG4gIC8qKiBFbGVtZW50IG9wdGlvbnMgZm9yIHZhcmlhYmxlIGZvcm1zICovXG4gIEBJbnB1dCgpIGVsZW1lbnRPcHRpb25zOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBoYXNNb3JlRWxlbWVudHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNMb2FkaW5nRWxlbWVudHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2NyZWVuTmFtZU9wdGlvbnM6IHsgaWQ/OiBudW1iZXI7IG5hbWU6IHN0cmluZyB9W10gPSBbXTtcbiAgQElucHV0KCkgaGFzTW9yZVNjcmVlbk5hbWVzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzTG9hZGluZ1NjcmVlbk5hbWVzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHBhcmFtZXRlck9wdGlvbnM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGhhc01vcmVQYXJhbWV0ZXJzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzTG9hZGluZ1BhcmFtZXRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZW52aXJvbm1lbnRPcHRpb25zOiB7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZzsgZW52aXJvbm1lbnQ6IHN0cmluZyB9W10gPSBbXTtcbiAgQElucHV0KCkgaGFzTW9yZUVudmlyb25tZW50czogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0xvYWRpbmdFbnZpcm9ubWVudHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZGVmYXVsdFRlc3REYXRhUHJvZmlsZUlkPzogbnVtYmVyO1xuICBASW5wdXQoKSBkZWZhdWx0VGVzdERhdGFTdGFydEluZGV4PzogbnVtYmVyO1xuXG4gIC8qKiBXaGVuIHByb3ZpZGVkLCBwcmUtcG9wdWxhdGVzIHRoZSBmb3JtIGZvciBlZGl0IG1vZGUuIHNoYXBlOiB7IHRlbXBsYXRlSWQsIHRlbXBsYXRlVmFyaWFibGVzLCBhY3Rpb24gfSAqL1xuICBASW5wdXQoKSBpbml0aWFsQ29uZGl0aW9uRGF0YT86IHtcbiAgICB0ZW1wbGF0ZUlkPzogc3RyaW5nIHwgbnVtYmVyO1xuICAgIHRlbXBsYXRlVmFyaWFibGVzPzogYW55W107XG4gICAgYWN0aW9uPzogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIG1ldGFkYXRhPzogc3RyaW5nO1xuICB9O1xuXG4gIC8qKiBSYXcgYnJhbmNoIHN0ZXAgb2JqZWN0IOKAlCBwYXNzZWQgdGhyb3VnaCB0byBzZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcyBzbyB0aGUgc2VydmljZSBjYW4gZXh0cmFjdCBzYXZlZCB2YWx1ZXMgZnJvbSBzdGVwLmV2ZW50ICovXG4gIEBJbnB1dCgpIGVkaXRUZXN0U3RlcD86IGFueTtcblxuICAvKiogTGFiZWwgc2hvd24gbmV4dCB0byB0aGUgY29uZGl0aW9uIHRlbXBsYXRlIGRyb3Bkb3duIChlLmcuICdJRicsICdFTFNFIElGJykuIEluZmVycmVkIGZyb20gbW9kZSB3aGVuIG5vdCBwcm92aWRlZC4gKi9cbiAgQElucHV0KCkgYnJhbmNoTGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqIFRydWUgd2hpbGUgdGhlIHBhcmVudCBpcyBzYXZpbmcgKGRpc2FibGVzL3Nob3dzIGxvYWRlciBvbiBTYXZlIGJ1dHRvbikgKi9cbiAgQElucHV0KCkgaXNTYXZpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q29uZGl0aW9uQnJhbmNoU2F2ZURhdGE+KCk7XG4gIEBPdXRwdXQoKSBjYW5jZWxsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBsb2FkTW9yZUVsZW1lbnRzID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgc2VhcmNoRWxlbWVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHNlYXJjaEVsZW1lbnRzQnlTY3JlZW5OYW1lID0gbmV3IEV2ZW50RW1pdHRlcjx7IHNjcmVlbk5hbWVJZDogbnVtYmVyOyBzZWFyY2hUZXJtPzogc3RyaW5nIH0+KCk7XG4gIEBPdXRwdXQoKSBjcmVhdGVFbGVtZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBzZWFyY2hTY3JlZW5OYW1lID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBsb2FkTW9yZVNjcmVlbk5hbWVzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBjcmVhdGVTY3JlZW5OYW1lUmVxdWVzdCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgc2VhcmNoUGFyYW1ldGVycyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgbG9hZE1vcmVQYXJhbWV0ZXJzID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgc2VhcmNoRW52aXJvbm1lbnRzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBsb2FkTW9yZUVudmlyb25tZW50cyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBjb25kaXRpb25Gb3JtITogRm9ybUdyb3VwO1xuXG4gIHByaXZhdGUgc2VsZWN0ZWRUZW1wbGF0ZTogQWN0aW9uVGVtcGxhdGUgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB0ZW1wbGF0ZVZhcmlhYmxlczogYW55W10gPSBbXTtcbiAgcHJpdmF0ZSB2YXJpYWJsZXNGb3JtITogRm9ybUFycmF5O1xuICBwcml2YXRlIGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXM6IGFueVtdID0gW107XG4gIHByaXZhdGUgYWR2YW5jZWRWYXJpYWJsZXNGb3JtITogRm9ybUFycmF5O1xuICBwcml2YXRlIGFkdmFuY2VkRXhwYW5kZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSB1cGRhdGVkSHRtbEdyYW1tYXIgPSAnJztcblxuICBwcml2YXRlIHZhbHVlQ29uZmlnQ2FjaGU6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHZhbHVlQ29uZmlnV2l0aEhhbmRsZXI6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB8IG51bGwgPSBudWxsO1xuXG4gIGdldCB0aXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT09ICdlZGl0JyA/ICdFZGl0IENvbmRpdGlvbicgOiAnQWRkIEVMU0UgSUYnO1xuICB9XG5cbiAgZ2V0IHNhdmVCdXR0b25MYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm1vZGUgPT09ICdlZGl0JyA/ICdTYXZlJyA6ICdBZGQgRUxTRSBJRic7XG4gIH1cblxuICBnZXQgY29uZGl0aW9uUm93TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5icmFuY2hMYWJlbCA/PyAodGhpcy5tb2RlID09PSAnZWRpdCcgPyAnSUYnIDogJ0VMU0UgSUYnKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy52YXJpYWJsZXNGb3JtID0gdGhpcy5mYi5hcnJheShbXSk7XG4gICAgdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0gPSB0aGlzLmZiLmFycmF5KFtdKTtcblxuICAgIHRoaXMuY29uZGl0aW9uRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgdmFsdWU6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIGRlc2NyaXB0aW9uOiBbJyddLFxuICAgICAgbWV0YWRhdGE6IFsnJ10sXG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZVZhbHVlQ29uZmlnQ2FjaGUoKTtcblxuICAgIC8vIFByZS1wb3B1bGF0ZSBmb3IgZWRpdCBtb2RlXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ2VkaXQnICYmIHRoaXMuaW5pdGlhbENvbmRpdGlvbkRhdGEpIHtcbiAgICAgIHRoaXMucHJlZmlsbEZyb21Jbml0aWFsRGF0YSgpO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydjb25kaXRpb25UZW1wbGF0ZXMnXSAmJiAhY2hhbmdlc1snY29uZGl0aW9uVGVtcGxhdGVzJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMudXBkYXRlVmFsdWVDb25maWdDYWNoZSgpO1xuICAgICAgdGhpcy52YWx1ZUNvbmZpZ1dpdGhIYW5kbGVyID0gbnVsbDtcbiAgICAgIC8vIFJlLXByZWZpbGwgaWYgd2Ugbm93IGhhdmUgdGVtcGxhdGVzIGFuZCB3ZXJlIHdhaXRpbmdcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdlZGl0JyAmJiB0aGlzLmluaXRpYWxDb25kaXRpb25EYXRhICYmICF0aGlzLnNlbGVjdGVkVGVtcGxhdGUpIHtcbiAgICAgICAgdGhpcy5wcmVmaWxsRnJvbUluaXRpYWxEYXRhKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVmaWxsRnJvbUluaXRpYWxEYXRhKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pbml0aWFsQ29uZGl0aW9uRGF0YSB8fCAhdGhpcy5jb25kaXRpb25UZW1wbGF0ZXM/Lmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgY29uc3QgeyB0ZW1wbGF0ZUlkLCBhY3Rpb24sIGRlc2NyaXB0aW9uLCBtZXRhZGF0YSB9ID0gdGhpcy5pbml0aWFsQ29uZGl0aW9uRGF0YTtcblxuICAgIC8vIEZpbmQgbWF0Y2hpbmcgdGVtcGxhdGVcbiAgICBsZXQgdGVtcGxhdGU6IEFjdGlvblRlbXBsYXRlIHwgdW5kZWZpbmVkO1xuICAgIGlmICh0ZW1wbGF0ZUlkICE9IG51bGwpIHtcbiAgICAgIHRlbXBsYXRlID0gdGhpcy5jb25kaXRpb25UZW1wbGF0ZXMuZmluZChcbiAgICAgICAgdCA9PiBTdHJpbmcodC5pZCkgPT09IFN0cmluZyh0ZW1wbGF0ZUlkKSB8fCB0LmRpc3BsYXlOYW1lID09PSBTdHJpbmcodGVtcGxhdGVJZClcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghdGVtcGxhdGUgJiYgYWN0aW9uKSB7XG4gICAgICB0ZW1wbGF0ZSA9IHRoaXMuY29uZGl0aW9uVGVtcGxhdGVzLmZpbmQoXG4gICAgICAgIHQgPT4gdC5uYXR1cmFsVGV4dCA9PT0gYWN0aW9uIHx8IHQuaHRtbEdyYW1tYXIgPT09IGFjdGlvbiB8fCB0LmRpc3BsYXlOYW1lID09PSBhY3Rpb25cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICBjb25zdCBzZWxlY3RJZCA9IHRlbXBsYXRlLmlkPy50b1N0cmluZygpIHx8IHRlbXBsYXRlLmRpc3BsYXlOYW1lIHx8ICcnO1xuICAgICAgdGhpcy5jb25kaXRpb25Gb3JtPy5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKHNlbGVjdElkLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB0aGlzLnNlbGVjdGVkVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcblxuICAgICAgLy8gR2V0IGZyZXNoIHZhcmlhYmxlcyBzdHJ1Y3R1cmUgd2l0aCBzYXZlZCB2YWx1ZXMgYnkgcGFzc2luZyB0aGUgcmF3IHN0ZXBcbiAgICAgIGNvbnN0IHZhcnMgPSB0aGlzLnNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzKHRlbXBsYXRlLCB0aGlzLmVkaXRUZXN0U3RlcCk7XG4gICAgICB0aGlzLnRlbXBsYXRlVmFyaWFibGVzID0gdmFycztcblxuICAgICAgdGhpcy5idWlsZFZhcmlhYmxlc0Zvcm0oKTtcbiAgICAgIHRoaXMudXBkYXRlSHRtbEdyYW1tYXIoKTtcblxuICAgICAgLy8gQWR2YW5jZWQgdmFyaWFibGVzXG4gICAgICBpZiAodGhpcy5zZXRBZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzKSB7XG4gICAgICAgIHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyA9IHRoaXMuc2V0QWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyh0ZW1wbGF0ZSwgdGhpcy5lZGl0VGVzdFN0ZXApO1xuICAgICAgICB0aGlzLmJ1aWxkQWR2YW5jZWRWYXJpYWJsZXNGb3JtKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlc2NyaXB0aW9uKSB0aGlzLmNvbmRpdGlvbkZvcm0/LmdldCgnZGVzY3JpcHRpb24nKT8uc2V0VmFsdWUoZGVzY3JpcHRpb24sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICBpZiAobWV0YWRhdGEpIHRoaXMuY29uZGl0aW9uRm9ybT8uZ2V0KCdtZXRhZGF0YScpPy5zZXRWYWx1ZShtZXRhZGF0YSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVWYWx1ZUNvbmZpZ0NhY2hlKCk6IHZvaWQge1xuICAgIGNvbnN0IG9wdHM6IFNlbGVjdE9wdGlvbltdID0gKHRoaXMuY29uZGl0aW9uVGVtcGxhdGVzIHx8IFtdKS5tYXAodCA9PiAoe1xuICAgICAgaWQ6IHQuaWQ/LnRvU3RyaW5nKCkgfHwgdC5kaXNwbGF5TmFtZSB8fCAnJyxcbiAgICAgIHZhbHVlOiB0LmlkPy50b1N0cmluZygpIHx8IHQuZGlzcGxheU5hbWUgfHwgJycsXG4gICAgICBuYW1lOiB0Lmh0bWxHcmFtbWFyIHx8IHQubmF0dXJhbFRleHQgfHwgJycsXG4gICAgICBsYWJlbDogdC5odG1sR3JhbW1hciB8fCB0Lm5hdHVyYWxUZXh0IHx8ICcnXG4gICAgfSkpO1xuICAgIHRoaXMudmFsdWVDb25maWdDYWNoZSA9IHtcbiAgICAgIGtleTogJ3ZhbHVlJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IENvbmRpdGlvbiBUZW1wbGF0ZSonLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgIGRpc3BsYXlMYWJlbEFzSW5uZXJIdG1sOiB0cnVlLFxuICAgICAgb3B0aW9uczogb3B0c1xuICAgIH07XG4gIH1cblxuICBnZXRWYWx1ZUNvbmZpZygpOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICAgIGlmICh0aGlzLnZhbHVlQ29uZmlnV2l0aEhhbmRsZXIpIHJldHVybiB0aGlzLnZhbHVlQ29uZmlnV2l0aEhhbmRsZXI7XG4gICAgaWYgKCF0aGlzLnZhbHVlQ29uZmlnQ2FjaGUpIHRoaXMudXBkYXRlVmFsdWVDb25maWdDYWNoZSgpO1xuICAgIHRoaXMudmFsdWVDb25maWdXaXRoSGFuZGxlciA9IHtcbiAgICAgIC4uLnRoaXMudmFsdWVDb25maWdDYWNoZSEsXG4gICAgICBvbkNoYW5nZTogKHY6IGFueSkgPT4gdGhpcy5vblRlbXBsYXRlVmFsdWVDaGFuZ2UodilcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLnZhbHVlQ29uZmlnV2l0aEhhbmRsZXI7XG4gIH1cblxuICBvblRlbXBsYXRlVmFsdWVDaGFuZ2UodGVtcGxhdGVJZDogYW55KTogdm9pZCB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLmNvbmRpdGlvblRlbXBsYXRlcy5maW5kKFxuICAgICAgdCA9PiBTdHJpbmcodC5pZCkgPT09IFN0cmluZyh0ZW1wbGF0ZUlkKSB8fCB0LmRpc3BsYXlOYW1lID09PSBTdHJpbmcodGVtcGxhdGVJZClcbiAgICApO1xuICAgIGlmICh0ZW1wbGF0ZSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgICB0aGlzLnRlbXBsYXRlVmFyaWFibGVzID0gdGhpcy5zZXRDb25kaXRpb25UZW1wbGF0ZVZhcmlhYmxlcyh0ZW1wbGF0ZSk7XG4gICAgICB0aGlzLmJ1aWxkVmFyaWFibGVzRm9ybSgpO1xuICAgICAgdGhpcy51cGRhdGVIdG1sR3JhbW1hcigpO1xuICAgICAgaWYgKHRoaXMuc2V0QWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcykge1xuICAgICAgICB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgPSB0aGlzLnNldEFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXModGVtcGxhdGUpO1xuICAgICAgICB0aGlzLmJ1aWxkQWR2YW5jZWRWYXJpYWJsZXNGb3JtKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZSA9IG51bGw7XG4gICAgICB0aGlzLnRlbXBsYXRlVmFyaWFibGVzID0gW107XG4gICAgICB0aGlzLmNsZWFyVmFyaWFibGVzRm9ybSgpO1xuICAgICAgdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzID0gW107XG4gICAgICB0aGlzLmNsZWFyQWR2YW5jZWRWYXJpYWJsZXNGb3JtKCk7XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFZhcmlhYmxlc0Zvcm0oKTogdm9pZCB7XG4gICAgd2hpbGUgKHRoaXMudmFyaWFibGVzRm9ybS5sZW5ndGgpIHRoaXMudmFyaWFibGVzRm9ybS5yZW1vdmVBdCgwKTtcbiAgICB0aGlzLnRlbXBsYXRlVmFyaWFibGVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gdmFyaWFibGUudHlwZSA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgID8gKHZhcmlhYmxlLnZhbHVlID09PSB0cnVlIHx8IHZhcmlhYmxlLnZhbHVlID09PSAndHJ1ZScgfHwgdmFyaWFibGUudmFsdWUgPT09IDEpXG4gICAgICAgIDogKHZhcmlhYmxlLnZhbHVlIHx8ICcnKTtcbiAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG5hbWU6IFt2YXJpYWJsZS5uYW1lXSxcbiAgICAgICAgdmFsdWU6IFtkZWZhdWx0VmFsdWVdLFxuICAgICAgICB0eXBlOiBbdmFyaWFibGUudHlwZSB8fCAnc3RyaW5nJ10sXG4gICAgICAgIGxhYmVsOiBbdmFyaWFibGUubGFiZWwgfHwgJyddLFxuICAgICAgICBvcHRpb25zOiBbdmFyaWFibGUub3B0aW9ucyB8fCBbXV1cbiAgICAgIH0pO1xuICAgICAgY29uc3QgbGFiZWwgPSB2YXJpYWJsZS5sYWJlbD8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICAgIGlmIChsYWJlbCA9PT0gJ3Rlc3QtZGF0YScgfHwgbGFiZWwgPT09ICdzb3VyY2UtdmFsdWUnIHx8IGxhYmVsID09PSAndGFyZ2V0LXZhbHVlJyB8fFxuICAgICAgICAgIGxhYmVsID09PSAnc291cmNlX3ZhbHVlJyB8fCBsYWJlbCA9PT0gJ3RhcmdldF92YWx1ZScpIHtcbiAgICAgICAgY29uc3QgdmFsdWVTdHIgPSBTdHJpbmcoZGVmYXVsdFZhbHVlIHx8ICcnKTtcbiAgICAgICAgbGV0IGRhdGFUeXBlID0gJ3BsYWluLXRleHQnO1xuICAgICAgICBpZiAodmFsdWVTdHIuc3RhcnRzV2l0aCgnQHwnKSAmJiB2YWx1ZVN0ci5lbmRzV2l0aCgnfCcpKSBkYXRhVHlwZSA9ICdwYXJhbWV0ZXInO1xuICAgICAgICBlbHNlIGlmICh2YWx1ZVN0ci5zdGFydHNXaXRoKCckfCcpICYmIHZhbHVlU3RyLmVuZHNXaXRoKCd8JykpIGRhdGFUeXBlID0gJ3J1bnRpbWUnO1xuICAgICAgICBlbHNlIGlmICh2YWx1ZVN0ci5zdGFydHNXaXRoKCcqfCcpICYmIHZhbHVlU3RyLmVuZHNXaXRoKCd8JykpIGRhdGFUeXBlID0gJ2Vudmlyb25tZW50JztcbiAgICAgICAgZ3JvdXAuYWRkQ29udHJvbCgnZGF0YVR5cGUnLCBuZXcgRm9ybUNvbnRyb2woZGF0YVR5cGUpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudmFyaWFibGVzRm9ybS5wdXNoKGdyb3VwKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJWYXJpYWJsZXNGb3JtKCk6IHZvaWQge1xuICAgIHdoaWxlICh0aGlzLnZhcmlhYmxlc0Zvcm0ubGVuZ3RoKSB0aGlzLnZhcmlhYmxlc0Zvcm0ucmVtb3ZlQXQoMCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQWR2YW5jZWRWYXJpYWJsZXNGb3JtKCk6IHZvaWQge1xuICAgIHdoaWxlICh0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5sZW5ndGgpIHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLnJlbW92ZUF0KDApO1xuICAgIHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5mb3JFYWNoKHZhcmlhYmxlID0+IHtcbiAgICAgIGxldCBkZWZhdWx0VmFsdWU6IGFueTtcbiAgICAgIGlmICh2YXJpYWJsZS50eXBlID09PSAnc3RyX2xpc3QnKSB7XG4gICAgICAgIGNvbnN0IGFyciA9IEFycmF5LmlzQXJyYXkodmFyaWFibGUudmFsdWUpID8gdmFyaWFibGUudmFsdWUgOiBbXTtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gdGhpcy5mYi5hcnJheShhcnIubGVuZ3RoID4gMCA/IGFyci5tYXAoKGk6IHN0cmluZykgPT4gdGhpcy5mYi5jb250cm9sKGkpKSA6IFt0aGlzLmZiLmNvbnRyb2woJycpXSk7XG4gICAgICB9IGVsc2UgaWYgKHZhcmlhYmxlLnR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICBkZWZhdWx0VmFsdWUgPSB2YXJpYWJsZS52YWx1ZSA9PT0gdHJ1ZSB8fCB2YXJpYWJsZS52YWx1ZSA9PT0gJ3RydWUnIHx8IHZhcmlhYmxlLnZhbHVlID09PSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gdmFyaWFibGUudmFsdWUgfHwgJyc7XG4gICAgICB9XG4gICAgICBjb25zdCBncm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBuYW1lOiBbdmFyaWFibGUubmFtZV0sXG4gICAgICAgIHZhbHVlOiB2YXJpYWJsZS50eXBlID09PSAnc3RyX2xpc3QnID8gZGVmYXVsdFZhbHVlIDogW2RlZmF1bHRWYWx1ZV0sXG4gICAgICAgIHR5cGU6IFt2YXJpYWJsZS50eXBlIHx8ICdzdHJpbmcnXSxcbiAgICAgICAgbGFiZWw6IFt2YXJpYWJsZS5sYWJlbCB8fCAnJ11cbiAgICAgIH0pO1xuICAgICAgdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0ucHVzaChncm91cCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyQWR2YW5jZWRWYXJpYWJsZXNGb3JtKCk6IHZvaWQge1xuICAgIHdoaWxlICh0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5sZW5ndGgpIHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLnJlbW92ZUF0KDApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVIdG1sR3JhbW1hcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRUZW1wbGF0ZT8uaHRtbEdyYW1tYXIpIHsgdGhpcy51cGRhdGVkSHRtbEdyYW1tYXIgPSAnJzsgcmV0dXJuOyB9XG4gICAgaWYgKHRoaXMuY29tcHV0ZUh0bWxHcmFtbWFyRm4pIHtcbiAgICAgIHRoaXMudXBkYXRlZEh0bWxHcmFtbWFyID0gdGhpcy5jb21wdXRlSHRtbEdyYW1tYXJGbih0aGlzLnNlbGVjdGVkVGVtcGxhdGUsIHRoaXMudGVtcGxhdGVWYXJpYWJsZXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgZyA9IHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZS5odG1sR3JhbW1hcjtcbiAgICB0aGlzLnRlbXBsYXRlVmFyaWFibGVzLmZvckVhY2godiA9PiB7XG4gICAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoYDxzcGFuW14+XSpkYXRhLWV2ZW50LWtleT1cIiR7di5uYW1lfVwiW14+XSo+Lio/PC9zcGFuPmAsICdnaScpO1xuICAgICAgY29uc3QgZXNjYXBlZCA9IFN0cmluZyh2LnZhbHVlIHx8ICcnKS5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG4gICAgICBnID0gZy5yZXBsYWNlKHJlLCBlc2NhcGVkKTtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZWRIdG1sR3JhbW1hciA9IGc7XG4gIH1cblxuICBnZXQgY3VycmVudEh0bWxHcmFtbWFyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlZEh0bWxHcmFtbWFyIHx8IHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZT8uaHRtbEdyYW1tYXIgfHwgdGhpcy5zZWxlY3RlZFRlbXBsYXRlPy5uYXR1cmFsVGV4dCB8fCAnJztcbiAgfVxuXG4gIGdldFRlbXBsYXRlVmFyaWFibGVzKCk6IGFueVtdIHsgcmV0dXJuIHRoaXMudGVtcGxhdGVWYXJpYWJsZXM7IH1cbiAgZ2V0VmFyaWFibGVzRm9ybSgpOiBGb3JtQXJyYXkgeyByZXR1cm4gdGhpcy52YXJpYWJsZXNGb3JtOyB9XG4gIGdldEFkdmFuY2VkVmFyaWFibGVzKCk6IGFueVtdIHsgcmV0dXJuIHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlczsgfVxuICBnZXRBZHZhbmNlZFZhcmlhYmxlc0Zvcm0oKTogRm9ybUFycmF5IHsgcmV0dXJuIHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtOyB9XG4gIGdldCBpc0FkdmFuY2VkRXhwYW5kZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmFkdmFuY2VkRXhwYW5kZWQ7IH1cbiAgdG9nZ2xlQWR2YW5jZWQoKTogdm9pZCB7IHRoaXMuYWR2YW5jZWRFeHBhbmRlZCA9ICF0aGlzLmFkdmFuY2VkRXhwYW5kZWQ7IHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpOyB9XG4gIGdldCBoYXNTZWxlY3RlZFRlbXBsYXRlKCk6IEFjdGlvblRlbXBsYXRlIHwgbnVsbCB7IHJldHVybiB0aGlzLnNlbGVjdGVkVGVtcGxhdGU7IH1cblxuICBvblZhcmlhYmxlVmFsdWVDaGFuZ2UobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgdiA9IHRoaXMudGVtcGxhdGVWYXJpYWJsZXMuZmluZCh0diA9PiB0di5uYW1lID09PSBuYW1lKTtcbiAgICBpZiAodikgdi52YWx1ZSA9IHZhbHVlO1xuICAgIGNvbnN0IGlkeCA9IHRoaXMudmFyaWFibGVzRm9ybS5jb250cm9scy5maW5kSW5kZXgoYyA9PiBjLmdldCgnbmFtZScpPy52YWx1ZSA9PT0gbmFtZSk7XG4gICAgaWYgKGlkeCAhPT0gLTEpIHRoaXMudmFyaWFibGVzRm9ybS5hdChpZHgpLmdldCgndmFsdWUnKT8uc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLnVwZGF0ZUh0bWxHcmFtbWFyKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvblZhcmlhYmxlQm9vbGVhbkNoYW5nZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5vblZhcmlhYmxlVmFsdWVDaGFuZ2UobmFtZSwgdmFsdWUpO1xuICB9XG5cbiAgb25BZHZhbmNlZFZhcmlhYmxlVmFsdWVDaGFuZ2UobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgdiA9IHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5maW5kKHR2ID0+IHR2Lm5hbWUgPT09IG5hbWUpO1xuICAgIGlmICh2KSB2LnZhbHVlID0gdmFsdWU7XG4gICAgY29uc3QgaWR4ID0gdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0uY29udHJvbHMuZmluZEluZGV4KGMgPT4gYy5nZXQoJ25hbWUnKT8udmFsdWUgPT09IG5hbWUpO1xuICAgIGlmIChpZHggIT09IC0xICYmIHY/LnR5cGUgIT09ICdzdHJfbGlzdCcpIHtcbiAgICAgICh0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5hdChpZHgpIGFzIEZvcm1Hcm91cCkuZ2V0KCd2YWx1ZScpPy5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uQWR2YW5jZWRWYXJpYWJsZUJvb2xlYW5DaGFuZ2UobmFtZTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMub25BZHZhbmNlZFZhcmlhYmxlVmFsdWVDaGFuZ2UobmFtZSwgdmFsdWUpO1xuICB9XG5cbiAgaXNGb3JtVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNvbmRpdGlvbkZvcm0udmFsaWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVZhcmlhYmxlcy5ldmVyeSh2ID0+IHtcbiAgICAgIGlmICh2LmRhdGFLZXkgPT09ICdlbGVtZW50JyB8fCB2LmRhdGFLZXkgPT09ICd0ZXN0X2RhdGEnIHx8IHYuZGF0YUtleSA9PT0gJ3NvdXJjZV92YWx1ZScgfHwgdi5kYXRhS2V5ID09PSAndGFyZ2V0X3ZhbHVlJykge1xuICAgICAgICByZXR1cm4gdi52YWx1ZSAhPT0gbnVsbCAmJiB2LnZhbHVlICE9PSB1bmRlZmluZWQgJiYgdi52YWx1ZSAhPT0gJyc7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQgeyB0aGlzLmNhbmNlbGxlZC5lbWl0KCk7IH1cblxuICBvblNhdmUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzRm9ybVZhbGlkKCkpIHJldHVybjtcbiAgICAvLyBTeW5jIGFkdmFuY2VkIGZvcm0gdmFsdWVzIGJhY2sgdG8gYXJyYXlcbiAgICB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZm9yRWFjaCgodmFyaWFibGUsIGkpID0+IHtcbiAgICAgIGNvbnN0IGZnID0gdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0uYXQoaSkgYXMgRm9ybUdyb3VwO1xuICAgICAgaWYgKCFmZykgcmV0dXJuO1xuICAgICAgY29uc3QgZnYgPSBmZy5nZXQoJ3ZhbHVlJyk/LnZhbHVlO1xuICAgICAgaWYgKHZhcmlhYmxlLnR5cGUgPT09ICdzdHJfbGlzdCcgJiYgZnYgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgICAgdmFyaWFibGUudmFsdWUgPSBmdi5jb250cm9scy5tYXAoYyA9PiBjLnZhbHVlKS5maWx0ZXIoKHZhbDogc3RyaW5nKSA9PiB2YWw/LnRyaW0oKSAhPT0gJycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyaWFibGUudmFsdWUgPSBmdjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGZpbmFsQWR2YW5jZWRWYXJzID0gWy4uLnRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlc107XG4gICAgY29uc3Qgc2hvdWxkU2tpcFZhciA9IGZpbmFsQWR2YW5jZWRWYXJzLmZpbmQodiA9PiB2Lm5hbWUgPT09ICdzaG91bGRTa2lwJyk7XG4gICAgY29uc3QgaXNTdGVwT3B0aW9uYWxWYXIgPSBmaW5hbEFkdmFuY2VkVmFycy5maW5kKHYgPT4gdi5uYW1lID09PSAnaXNTdGVwT3B0aW9uYWwnKTtcblxuICAgIHRoaXMuc2F2ZS5lbWl0KHtcbiAgICAgIHRlbXBsYXRlOiB0aGlzLnNlbGVjdGVkVGVtcGxhdGUsXG4gICAgICB0ZW1wbGF0ZVZhcmlhYmxlczogWy4uLnRoaXMudGVtcGxhdGVWYXJpYWJsZXNdLFxuICAgICAgYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlczogZmluYWxBZHZhbmNlZFZhcnMsXG4gICAgICBhY3Rpb246IHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZT8ubmF0dXJhbFRleHQgfHwgdGhpcy5zZWxlY3RlZFRlbXBsYXRlPy5odG1sR3JhbW1hciB8fCAnJyxcbiAgICAgIHJlc29sdmVkQWN0aW9uOiB0aGlzLmN1cnJlbnRIdG1sR3JhbW1hcixcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmNvbmRpdGlvbkZvcm0uZ2V0KCdkZXNjcmlwdGlvbicpPy52YWx1ZSB8fCAnJyxcbiAgICAgIG1ldGFkYXRhOiB0aGlzLmNvbmRpdGlvbkZvcm0uZ2V0KCdtZXRhZGF0YScpPy52YWx1ZSB8fCAnJyxcbiAgICAgIHNob3VsZFNraXA6IHNob3VsZFNraXBWYXIgPyAhIXNob3VsZFNraXBWYXIudmFsdWUgOiBmYWxzZSxcbiAgICAgIGlnbm9yZVN0ZXBSZXN1bHQ6IGlzU3RlcE9wdGlvbmFsVmFyID8gISFpc1N0ZXBPcHRpb25hbFZhci52YWx1ZSA6IGZhbHNlLFxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1oLWZ1bGwgY3FhLWJnLXdoaXRlIGNxYS1weC00IGNxYS1weS0yXCI+XG4gIDwhLS0gSGVhZGVyIC0tPlxuICA8aDIgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtYmxhY2stMTAwIGNxYS1tYi00XCI+XG4gICAge3sgdGl0bGUgfX1cbiAgPC9oMj5cblxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1mbGV4LTEgY3FhLW92ZXJmbG93LXktYXV0b1wiPlxuICAgIDwhLS0gQ29uZGl0aW9uIEJ1aWxkZXIgU2VjdGlvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTZcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItM1wiPlxuICAgICAgICA8aDMgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtZ3JheS05MDBcIj5cbiAgICAgICAgICBDb25kaXRpb24gQnVpbGRlclxuICAgICAgICA8L2gzPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gU2luZ2xlIENvbmRpdGlvbiBSb3cgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMlwiIFtmb3JtR3JvdXBdPVwiY29uZGl0aW9uRm9ybVwiPlxuICAgICAgICA8IS0tIENvbmRpdGlvbiBMYWJlbCArIFRlbXBsYXRlIERyb3Bkb3duIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICA8IS0tIExhYmVsIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGRcIj5cbiAgICAgICAgICAgIHt7IGNvbmRpdGlvblJvd0xhYmVsIH19XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFZhbHVlIFRlbXBsYXRlIERyb3Bkb3duIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1taW4tdy1bMTUwcHhdIGNxYS10ZXh0LVsxMHB4XVwiPlxuICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBbZm9ybV09XCJjb25kaXRpb25Gb3JtXCIgW2NvbmZpZ109XCJnZXRWYWx1ZUNvbmZpZygpXCI+XG4gICAgICAgICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBUZW1wbGF0ZSBWYXJpYWJsZXMgU2VjdGlvbiAoc2hvd24gd2hlbiB0ZW1wbGF0ZSBpcyBzZWxlY3RlZCkgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJoYXNTZWxlY3RlZFRlbXBsYXRlXCIgY2xhc3M9XCJjcWEtbXQtMlwiPlxuICAgICAgICAgIDwhLS0gVGVtcGxhdGUgR3JhbW1hciBEaXNwbGF5IC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItNCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1mbGV4LXdyYXAgY3FhLWdhcC0xIGNxYS10ZXh0LXNtIGNxYS10ZXh0LWdyYXktNzAwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWFjdGlvbi1mb3JtYXQgY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLVsyM3B4XSBjcWEtdGV4dC1ibGFjay0xMDBcIlxuICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImN1cnJlbnRIdG1sR3JhbW1hclwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFRlbXBsYXRlIFZhcmlhYmxlcyBGb3JtIC0tPlxuICAgICAgICAgIDxjcWEtdGVtcGxhdGUtdmFyaWFibGVzLWZvcm1cbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7XCJcbiAgICAgICAgICAgIFt0ZW1wbGF0ZVZhcmlhYmxlc109XCJnZXRUZW1wbGF0ZVZhcmlhYmxlcygpXCJcbiAgICAgICAgICAgIFt2YXJpYWJsZXNGb3JtXT1cImdldFZhcmlhYmxlc0Zvcm0oKVwiXG4gICAgICAgICAgICBbbWV0YWRhdGFdPVwiY29uZGl0aW9uRm9ybS5nZXQoJ21ldGFkYXRhJyk/LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCJjb25kaXRpb25Gb3JtLmdldCgnZGVzY3JpcHRpb24nKT8udmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgW2VsZW1lbnRPcHRpb25zXT1cImVsZW1lbnRPcHRpb25zXCJcbiAgICAgICAgICAgIFtoYXNNb3JlRWxlbWVudHNdPVwiaGFzTW9yZUVsZW1lbnRzXCJcbiAgICAgICAgICAgIFtpc0xvYWRpbmdFbGVtZW50c109XCJpc0xvYWRpbmdFbGVtZW50c1wiXG4gICAgICAgICAgICBbc2NyZWVuTmFtZU9wdGlvbnNdPVwic2NyZWVuTmFtZU9wdGlvbnNcIlxuICAgICAgICAgICAgW2hhc01vcmVTY3JlZW5OYW1lc109XCJoYXNNb3JlU2NyZWVuTmFtZXNcIlxuICAgICAgICAgICAgW2lzTG9hZGluZ1NjcmVlbk5hbWVzXT1cImlzTG9hZGluZ1NjcmVlbk5hbWVzXCJcbiAgICAgICAgICAgIFtwYXJhbWV0ZXJPcHRpb25zXT1cInBhcmFtZXRlck9wdGlvbnNcIlxuICAgICAgICAgICAgW2hhc01vcmVQYXJhbWV0ZXJzXT1cImhhc01vcmVQYXJhbWV0ZXJzXCJcbiAgICAgICAgICAgIFtpc0xvYWRpbmdQYXJhbWV0ZXJzXT1cImlzTG9hZGluZ1BhcmFtZXRlcnNcIlxuICAgICAgICAgICAgW2Vudmlyb25tZW50T3B0aW9uc109XCJlbnZpcm9ubWVudE9wdGlvbnNcIlxuICAgICAgICAgICAgW2hhc01vcmVFbnZpcm9ubWVudHNdPVwiaGFzTW9yZUVudmlyb25tZW50c1wiXG4gICAgICAgICAgICBbaXNMb2FkaW5nRW52aXJvbm1lbnRzXT1cImlzTG9hZGluZ0Vudmlyb25tZW50c1wiXG4gICAgICAgICAgICBbZGVmYXVsdFRlc3REYXRhUHJvZmlsZUlkXT1cImRlZmF1bHRUZXN0RGF0YVByb2ZpbGVJZFwiXG4gICAgICAgICAgICBbZGVmYXVsdFRlc3REYXRhU3RhcnRJbmRleF09XCJkZWZhdWx0VGVzdERhdGFTdGFydEluZGV4XCJcbiAgICAgICAgICAgICh2YXJpYWJsZVZhbHVlQ2hhbmdlKT1cIm9uVmFyaWFibGVWYWx1ZUNoYW5nZSgkZXZlbnQubmFtZSwgJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgICAgICAodmFyaWFibGVCb29sZWFuQ2hhbmdlKT1cIm9uVmFyaWFibGVCb29sZWFuQ2hhbmdlKCRldmVudC5uYW1lLCAkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICAgIChtZXRhZGF0YUNoYW5nZSk9XCJjb25kaXRpb25Gb3JtLmdldCgnbWV0YWRhdGEnKT8uc2V0VmFsdWUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoZGVzY3JpcHRpb25DaGFuZ2UpPVwiY29uZGl0aW9uRm9ybS5nZXQoJ2Rlc2NyaXB0aW9uJyk/LnNldFZhbHVlKCRldmVudClcIlxuICAgICAgICAgICAgKGxvYWRNb3JlRWxlbWVudHMpPVwibG9hZE1vcmVFbGVtZW50cy5lbWl0KClcIlxuICAgICAgICAgICAgKHNlYXJjaEVsZW1lbnRzKT1cInNlYXJjaEVsZW1lbnRzLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2VhcmNoRWxlbWVudHNCeVNjcmVlbk5hbWUpPVwic2VhcmNoRWxlbWVudHNCeVNjcmVlbk5hbWUuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjcmVhdGVFbGVtZW50KT1cImNyZWF0ZUVsZW1lbnQuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChzZWFyY2hTY3JlZW5OYW1lKT1cInNlYXJjaFNjcmVlbk5hbWUuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChsb2FkTW9yZVNjcmVlbk5hbWVzKT1cImxvYWRNb3JlU2NyZWVuTmFtZXMuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjcmVhdGVTY3JlZW5OYW1lUmVxdWVzdCk9XCJjcmVhdGVTY3JlZW5OYW1lUmVxdWVzdC5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgKHNlYXJjaFBhcmFtZXRlcnMpPVwic2VhcmNoUGFyYW1ldGVycy5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgKGxvYWRNb3JlUGFyYW1ldGVycyk9XCJsb2FkTW9yZVBhcmFtZXRlcnMuZW1pdCgpXCJcbiAgICAgICAgICAgIChzZWFyY2hFbnZpcm9ubWVudHMpPVwic2VhcmNoRW52aXJvbm1lbnRzLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAobG9hZE1vcmVFbnZpcm9ubWVudHMpPVwibG9hZE1vcmVFbnZpcm9ubWVudHMuZW1pdCgpXCI+XG4gICAgICAgICAgPC9jcWEtdGVtcGxhdGUtdmFyaWFibGVzLWZvcm0+XG5cbiAgICAgICAgICA8IS0tIEFkdmFuY2VkIFNldHRpbmdzIFZhcmlhYmxlcyBGb3JtIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRBZHZhbmNlZFZhcmlhYmxlcygpLmxlbmd0aCA+IDBcIiBjbGFzcz1cImNxYS1tdC00XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS13LWZ1bGwgY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1nYXAtMiBjcWEtdGV4dC1zbSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtZ3JheS03MDAgY3FhLWJnLXRyYW5zcGFyZW50IGNxYS1ib3JkZXItbm9uZSBjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLXAtMCBjcWEtbWItMS41XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWR2YW5jZWQoKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdXCI+QWR2YW5jZWQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtYmFzZVwiIFtjbGFzcy5jcWEtcm90YXRlLTE4MF09XCJpc0FkdmFuY2VkRXhwYW5kZWRcIj5cbiAgICAgICAgICAgICAgICAgIGV4cGFuZF9tb3JlXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0FkdmFuY2VkRXhwYW5kZWRcIiBjbGFzcz1cImNxYS1tdC0yXCI+XG4gICAgICAgICAgICAgICAgPGNxYS1hZHZhbmNlZC12YXJpYWJsZXMtZm9ybVxuICAgICAgICAgICAgICAgICAgW2FkdmFuY2VkVmFyaWFibGVzXT1cImdldEFkdmFuY2VkVmFyaWFibGVzKClcIlxuICAgICAgICAgICAgICAgICAgW2FkdmFuY2VkVmFyaWFibGVGb3JtXT1cImdldEFkdmFuY2VkVmFyaWFibGVzRm9ybSgpXCJcbiAgICAgICAgICAgICAgICAgICh2YXJpYWJsZUJvb2xlYW5DaGFuZ2UpPVwib25BZHZhbmNlZFZhcmlhYmxlQm9vbGVhbkNoYW5nZSgkZXZlbnQubmFtZSwgJGV2ZW50LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAodmFyaWFibGVWYWx1ZUNoYW5nZSk9XCJvbkFkdmFuY2VkVmFyaWFibGVWYWx1ZUNoYW5nZSgkZXZlbnQubmFtZSwgJGV2ZW50LnZhbHVlKVwiPlxuICAgICAgICAgICAgICAgIDwvY3FhLWFkdmFuY2VkLXZhcmlhYmxlcy1mb3JtPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLXctZnVsbCBjcWEtZ2FwLTIgY3FhLW10LWF1dG8gY3FhLXB0LTQgY3FhLWJvcmRlci10IGNxYS1ib3JkZXItZ3JheS0yMDBcIj5cbiAgICA8Y3FhLWJ1dHRvbiBjbGFzcz1cImNxYS13LTEvMlwiIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIHRleHQ9XCJDYW5jZWxcIiBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1mbGV4LTEgY3FhLXctZnVsbCdcIlxuICAgICAgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiPlxuICAgIDwvY3FhLWJ1dHRvbj5cbiAgICA8Y3FhLWJ1dHRvbiAqbmdJZj1cIiFpc1NhdmluZ1wiIGNsYXNzPVwiY3FhLXctMS8yXCIgdmFyaWFudD1cImZpbGxlZFwiIFt0ZXh0XT1cInNhdmVCdXR0b25MYWJlbFwiXG4gICAgICBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1mbGV4LTEgY3FhLXctZnVsbCdcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFpc0Zvcm1WYWxpZCgpXCJcbiAgICAgIChjbGlja2VkKT1cIm9uU2F2ZSgpXCI+XG4gICAgPC9jcWEtYnV0dG9uPlxuICAgIDxkaXYgKm5nSWY9XCJpc1NhdmluZ1wiIGNsYXNzPVwiY3FhLXctMS8yIGNxYS1mbGV4LTEgY3FhLW1pbi1oLVszOHB4XSBjcWEtcm91bmRlZC1bOHB4XVwiPlxuICAgICAgPGNxYS1iYWRnZSBsYWJlbD1cIlNhdmluZ+KAplwiIGljb249XCJhdXRvcmVuZXdcIiBbaXNMb2FkaW5nXT1cInRydWVcIiBbZnVsbFdpZHRoXT1cInRydWVcIiBbY2VudGVyQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgW2lubGluZVN0eWxlc109XCInbWluLWhlaWdodDogMzhweDsgaGVpZ2h0OiAzOHB4OyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsnXCJcbiAgICAgICAgdmFyaWFudD1cImluZm9cIiBzaXplPVwibWVkaXVtXCI+PC9jcWEtYmFkZ2U+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -169,7 +169,7 @@ export class DbQueryExecutionItemComponent {
169
169
  }
170
170
  }
171
171
  DbQueryExecutionItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DbQueryExecutionItemComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
172
- DbQueryExecutionItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DbQueryExecutionItemComponent, selector: "cqa-db-query-execution-item", inputs: { queryNumber: "queryNumber", queryKey: "queryKey", queryResult: "queryResult", status: "status", variableName: "variableName", onJsonPathCopiedHandler: "onJsonPathCopiedHandler" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-border !cqa-border-b-2 cqa-border-solid cqa-rounded-lg cqa-overflow-hidden\" [ngClass]=\"{'cqa-bg-[#F8FAFC] cqa-border-[#E2E8F0]': status === 'passed', 'cqa-bg-[#FEF2F2] cqa-border-[#FFC9C9]': status === 'failed'}\">\n <!-- Header (Collapsed View) -->\n <div \n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-px-4 cqa-py-2 cqa-cursor-pointer cqa-flex-wrap\"\n (click)=\"toggle()\"\n role=\"button\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-flex-wrap cqa-gap-2 cqa-w-[calc(100%-15px)]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-1\">\n <span class=\"cqa-font-semibold cqa-text-[10px] cqa-text-[#314158] cqa-min-w-max\">Query {{ queryNumber }}</span>\n \n <!-- Status Badge -->\n <cqa-badge class=\"cqa-mb-0.5\"\n *ngIf=\"status === 'passed'\"\n label=\"Passed\"\n backgroundColor=\"#DCFCE7\"\n textColor=\"#22C55E\"\n inlineStyles=\"border-radius: 50px; margin-top: 2px;\"\n icon=\"check_circle\"\n size=\"small\">\n </cqa-badge>\n <cqa-badge class=\"cqa-mb-0.5\"\n *ngIf=\"status === 'failed'\"\n label=\"Failed\"\n backgroundColor=\"#FEE2E2\"\n textColor=\"#DC2626\"\n icon=\"error\"\n inlineStyles=\"border-radius: 50px; margin-top: 2px;\"\n size=\"small\">\n </cqa-badge>\n \n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#62748E] cqa-min-w-max\" *ngIf=\"queryResult?.duration || queryResult?.data?.length > 0\">\n {{ formatDuration(queryResult?.duration) }}\n <span *ngIf=\"queryResult?.data?.length > 0 && queryResult?.duration\"> \u2022 </span>\n <span *ngIf=\"queryResult?.data?.length > 0\">{{ queryResult?.data?.length || 0 }} rows</span>\n </span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <button\n (click)=\"copyQueryCollapsed(); $event.stopPropagation()\"\n class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-bg-transparent cqa-cursor-pointer cqa-relative\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n Copy Query\n \n <!-- Copied Tooltip -->\n <div \n *ngIf=\"showQueryCopiedCollapsed\" \n class=\"cqa-absolute cqa-top-0 cqa-left-7 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n style=\"animation: fadeInOut 0.2s ease-in-out;\">\n Copied!\n </div>\n </button>\n <button\n (click)=\"copyResponseCollapsed(); $event.stopPropagation()\"\n class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-bg-transparent cqa-cursor-pointer cqa-relative\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n Copy Response\n \n <!-- Copied Tooltip -->\n <div \n *ngIf=\"showResponseCopiedCollapsed\" \n class=\"cqa-absolute cqa-top-0 cqa-left-7 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n style=\"animation: fadeInOut 0.2s ease-in-out;\">\n Copied!\n </div>\n </button>\n </div>\n </div>\n \n <div class=\"cqa-flex cqa-items-center cqa-min-w-max\">\n <svg \n [class.cqa-rotate-180]=\"isExpanded\" \n [matTooltip]=\"isExpanded ? 'Collapse' : 'Expand to view the query and response.'\"\n matTooltipPosition=\"above\"\n class=\"cqa-transition-transform cqa-min-w-max\" \n width=\"14\" \n height=\"14\" \n viewBox=\"0 0 14 14\" \n fill=\"none\" \n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded === true\" class=\"cqa-bg-white cqa-border-t cqa-border-b-0 cqa-border-l-0 cqa-border-r-0 cqa-border-solid\" [ngClass]=\"{'cqa-border-[#E2E8F0]': status === 'passed', 'cqa-border-[#FFC9C9]': status === 'failed'}\">\n <!-- Query Section -->\n <div class=\"cqa-px-4 cqa-py-3\">\n <div class=\"cqa-text-[12px] cqa-leading-[16px] cqa-font-semibold cqa-text-[#314158] cqa-mb-2\">Query</div>\n <div class=\"cqa-relative cqa-bg-[#0F172B] cqa-rounded-[10px] cqa-p-3 cqa-overflow-hidden\">\n <button\n (click)=\"copyQueryExpanded()\"\n class=\"cqa-absolute cqa-top-2 cqa-right-2 cqa-p-1.5 cqa-cursor-pointer hover:cqa-bg-[#334155] cqa-rounded\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#94A3B8\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n \n <!-- Copied Tooltip -->\n <div \n *ngIf=\"showQueryCopiedExpanded\" \n class=\"cqa-absolute cqa-right-0 cqa-top-full cqa-mt-1 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n style=\"animation: fadeInOut 0.2s ease-in-out;\">\n Copied!\n </div>\n </button>\n <pre class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#F1F5F9] cqa-font-mono cqa-whitespace-pre-wrap cqa-overflow-x-auto cqa-m-0\"><code>{{ queryResult?.query }}</code></pre>\n </div>\n <div *ngIf=\"variableName\" class=\"cqa-mt-4 cqa-text-[10px] cqa-leading-[15px] cqa-text-[#45556C]\">\n Stored as variable: <span class=\"cqa-font-medium cqa-bg-[#F1F5F9] cqa-px-1 cqa-rounded-[4px] cqa-text-[#45556C]\">{{ variableName }}</span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mt-4\" *ngIf=\"queryResult?.data\">\n <div class=\"cqa-text-[12px] cqa-text-[#314158]\">Response</div>\n <button\n (click)=\"copyResponseExpanded()\"\n class=\"cqa-cursor-pointer cqa-rounded cqa-relative\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n \n <!-- Copied Tooltip -->\n <div \n *ngIf=\"showResponseCopiedExpanded\" \n class=\"cqa-absolute cqa-right-0 cqa-top-full cqa-mt-1 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n style=\"animation: fadeInOut 0.2s ease-in-out;\">\n Copied!\n </div>\n </button>\n </div>\n \n <cqa-table-template\n *ngIf=\"!isEmptyResponse && queryResult?.data\"\n [columns]=\"responseTableColumns\"\n [data]=\"queryResult?.data || []\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [isEmptyState]=\"isEmptyResponse\"\n [emptyStateConfig]=\"emptyStateConfig\"\n [showSearchBar]=\"false\"\n [showFilterButton]=\"false\"\n [showSettingsButton]=\"false\"\n [showAutoRefreshButton]=\"false\"\n [showOtherButton]=\"false\"\n [showFilterPanel]=\"false\"\n [serverSidePagination]=\"false\"\n [cellJsonPathGetter]=\"cellJsonPathGetter\"\n [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\"\n (pageChange)=\"onPageChange($event)\">\n </cqa-table-template>\n \n <div *ngIf=\"isEmptyResponse\" class=\"cqa-text-[10px] cqa-text-[#45556C] cqa-py-4 cqa-text-center\">\n No data returned from this query.\n </div>\n </div>\n </div>\n</div>\n\n", components: [{ type: i1.BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading", "fullWidth", "centerContent", "title"] }, { type: i2.TableTemplateComponent, selector: "cqa-table-template", inputs: ["searchPlaceholder", "searchValue", "showClear", "showSearchBar", "showExportButton", "isExporting", "filterConfig", "filterModel", "showFilterPanel", "showFilterButton", "otherButtons", "otherDropDownButtons", "otherSelectDropDownButtons", "tagFilterTemplate", "otherButtonLabel", "otherButtonVariant", "showOtherButton", "showActionButton", "showSettingsButton", "showAutoRefreshButton", "showViewModeToggle", "viewMode", "viewModeLabels", "data", "isEmptyState", "emptyStateConfig", "actions", "chips", "filterApplied", "columns", "rowSelectable", "selectedAutoRefreshInterval", "pageIndex", "pageSize", "pageSizeOptions", "pageSizeMenuDirection", "serverSidePagination", "totalElements", "enableLocalSort", "isTableLoading", "isTableDataLoading", "cellJsonPathGetter", "onJsonPathCopiedHandler", "selectedItems", "showSelectAllInToolbar", "showDismissInToolbar", "allSelectedInToolbar", "columnVisibility"], outputs: ["onSearchChange", "onExportClick", "onApplyFilterClick", "onResetFilterClick", "onClearAll", "removeChip", "viewModeChange", "pageChange", "sortChange", "onReload", "onAutoRefreshClick", "columnVisibilityChange", "autoRefreshIntervalChange", "bulkActionClick", "bulkSelectAllChange", "bulkDismiss", "selectedItemsChange"] }], directives: [{ type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
172
+ DbQueryExecutionItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DbQueryExecutionItemComponent, selector: "cqa-db-query-execution-item", inputs: { queryNumber: "queryNumber", queryKey: "queryKey", queryResult: "queryResult", status: "status", variableName: "variableName", onJsonPathCopiedHandler: "onJsonPathCopiedHandler" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div class=\"cqa-border !cqa-border-b-2 cqa-border-solid cqa-rounded-lg cqa-overflow-hidden\" [ngClass]=\"{'cqa-bg-[#F8FAFC] cqa-border-[#E2E8F0]': status === 'passed', 'cqa-bg-[#FEF2F2] cqa-border-[#FFC9C9]': status === 'failed'}\">\n <!-- Header (Collapsed View) -->\n <div \n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-px-4 cqa-py-2 cqa-cursor-pointer cqa-flex-wrap\"\n (click)=\"toggle()\"\n role=\"button\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-flex-wrap cqa-gap-2 cqa-w-[calc(100%-15px)]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-1\">\n <span class=\"cqa-font-semibold cqa-text-[10px] cqa-text-[#314158] cqa-min-w-max\">Query {{ queryNumber }}</span>\n \n <!-- Status Badge -->\n <cqa-badge class=\"cqa-mb-0.5\"\n *ngIf=\"status === 'passed'\"\n label=\"Passed\"\n backgroundColor=\"#DCFCE7\"\n textColor=\"#22C55E\"\n inlineStyles=\"border-radius: 50px; margin-top: 2px;\"\n icon=\"check_circle\"\n size=\"small\">\n </cqa-badge>\n <cqa-badge class=\"cqa-mb-0.5\"\n *ngIf=\"status === 'failed'\"\n label=\"Failed\"\n backgroundColor=\"#FEE2E2\"\n textColor=\"#DC2626\"\n icon=\"error\"\n inlineStyles=\"border-radius: 50px; margin-top: 2px;\"\n size=\"small\">\n </cqa-badge>\n \n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#62748E] cqa-min-w-max\" *ngIf=\"queryResult?.duration || queryResult?.data?.length > 0\">\n {{ formatDuration(queryResult?.duration) }}\n <span *ngIf=\"queryResult?.data?.length > 0 && queryResult?.duration\"> \u2022 </span>\n <span *ngIf=\"queryResult?.data?.length > 0\">{{ queryResult?.data?.length || 0 }} rows</span>\n </span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <button\n (click)=\"copyQueryCollapsed(); $event.stopPropagation()\"\n class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-bg-transparent cqa-cursor-pointer cqa-relative\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n Copy Query\n \n <!-- Copied Tooltip -->\n <div \n *ngIf=\"showQueryCopiedCollapsed\" \n class=\"cqa-absolute cqa-top-0 cqa-left-7 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n style=\"animation: fadeInOut 0.2s ease-in-out;\">\n Copied!\n </div>\n </button>\n <button\n (click)=\"copyResponseCollapsed(); $event.stopPropagation()\"\n class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-bg-transparent cqa-cursor-pointer cqa-relative\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n Copy Response\n \n <!-- Copied Tooltip -->\n <div \n *ngIf=\"showResponseCopiedCollapsed\" \n class=\"cqa-absolute cqa-top-0 cqa-left-7 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n style=\"animation: fadeInOut 0.2s ease-in-out;\">\n Copied!\n </div>\n </button>\n </div>\n </div>\n \n <div class=\"cqa-flex cqa-items-center cqa-min-w-max\">\n <svg \n [class.cqa-rotate-180]=\"isExpanded\" \n [matTooltip]=\"isExpanded ? 'Collapse' : 'Expand to view the query and response.'\"\n matTooltipPosition=\"above\"\n class=\"cqa-transition-transform cqa-min-w-max\" \n width=\"14\" \n height=\"14\" \n viewBox=\"0 0 14 14\" \n fill=\"none\" \n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded === true\" class=\"cqa-bg-white cqa-border-t cqa-border-b-0 cqa-border-l-0 cqa-border-r-0 cqa-border-solid\" [ngClass]=\"{'cqa-border-[#E2E8F0]': status === 'passed', 'cqa-border-[#FFC9C9]': status === 'failed'}\">\n <!-- Query Section -->\n <div class=\"cqa-px-4 cqa-py-3\">\n <div class=\"cqa-text-[12px] cqa-leading-[16px] cqa-font-semibold cqa-text-[#314158] cqa-mb-2\">Query</div>\n <div class=\"cqa-relative cqa-bg-[#0F172B] cqa-rounded-[10px] cqa-p-3 cqa-overflow-hidden\">\n <button\n (click)=\"copyQueryExpanded()\"\n class=\"cqa-absolute cqa-top-2 cqa-right-2 cqa-p-1.5 cqa-cursor-pointer hover:cqa-bg-[#334155] cqa-rounded\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#94A3B8\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n \n <!-- Copied Tooltip -->\n <div \n *ngIf=\"showQueryCopiedExpanded\" \n class=\"cqa-absolute cqa-right-0 cqa-top-full cqa-mt-1 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n style=\"animation: fadeInOut 0.2s ease-in-out;\">\n Copied!\n </div>\n </button>\n <pre class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#F1F5F9] cqa-font-mono cqa-whitespace-pre-wrap cqa-overflow-x-auto cqa-m-0\"><code>{{ queryResult?.query }}</code></pre>\n </div>\n <div *ngIf=\"variableName\" class=\"cqa-mt-4 cqa-text-[10px] cqa-leading-[15px] cqa-text-[#45556C]\">\n Stored as variable: <span class=\"cqa-font-medium cqa-bg-[#F1F5F9] cqa-px-1 cqa-rounded-[4px] cqa-text-[#45556C]\">{{ variableName }}</span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mt-4\" *ngIf=\"queryResult?.data\">\n <div class=\"cqa-text-[12px] cqa-text-[#314158]\">Response</div>\n <button\n (click)=\"copyResponseExpanded()\"\n class=\"cqa-cursor-pointer cqa-rounded cqa-relative\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n \n <!-- Copied Tooltip -->\n <div \n *ngIf=\"showResponseCopiedExpanded\" \n class=\"cqa-absolute cqa-right-0 cqa-top-full cqa-mt-1 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n style=\"animation: fadeInOut 0.2s ease-in-out;\">\n Copied!\n </div>\n </button>\n </div>\n \n <cqa-table-template\n *ngIf=\"!isEmptyResponse && queryResult?.data\"\n [columns]=\"responseTableColumns\"\n [data]=\"queryResult?.data || []\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [isEmptyState]=\"isEmptyResponse\"\n [emptyStateConfig]=\"emptyStateConfig\"\n [showSearchBar]=\"false\"\n [showFilterButton]=\"false\"\n [showSettingsButton]=\"false\"\n [showAutoRefreshButton]=\"false\"\n [showOtherButton]=\"false\"\n [showFilterPanel]=\"false\"\n [serverSidePagination]=\"false\"\n [cellJsonPathGetter]=\"cellJsonPathGetter\"\n [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\"\n (pageChange)=\"onPageChange($event)\">\n </cqa-table-template>\n \n <div *ngIf=\"isEmptyResponse\" class=\"cqa-text-[10px] cqa-text-[#45556C] cqa-py-4 cqa-text-center\">\n No data returned from this query.\n </div>\n </div>\n </div>\n</div>\n\n", components: [{ type: i1.BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading", "fullWidth", "centerContent", "title"] }, { type: i2.TableTemplateComponent, selector: "cqa-table-template", inputs: ["searchPlaceholder", "searchValue", "showClear", "showSearchBar", "showExportButton", "isExporting", "filterConfig", "filterModel", "showFilterPanel", "showFilterButton", "otherButtons", "otherDropDownButtons", "otherSelectDropDownButtons", "otherButtonLabel", "otherButtonVariant", "showOtherButton", "showActionButton", "showSettingsButton", "showAutoRefreshButton", "showViewModeToggle", "viewMode", "viewModeLabels", "data", "isEmptyState", "emptyStateConfig", "actions", "chips", "filterApplied", "columns", "rowSelectable", "selectedAutoRefreshInterval", "pageIndex", "pageSize", "pageSizeOptions", "pageSizeMenuDirection", "serverSidePagination", "totalElements", "enableLocalSort", "isTableLoading", "isTableDataLoading", "cellJsonPathGetter", "onJsonPathCopiedHandler", "selectedItems", "showSelectAllInToolbar", "showDismissInToolbar", "allSelectedInToolbar", "columnVisibility"], outputs: ["onSearchChange", "onExportClick", "onApplyFilterClick", "onResetFilterClick", "onClearAll", "removeChip", "viewModeChange", "pageChange", "sortChange", "onReload", "onAutoRefreshClick", "columnVisibilityChange", "autoRefreshIntervalChange", "bulkActionClick", "bulkSelectAllChange", "bulkDismiss", "selectedItemsChange"] }], directives: [{ type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
173
173
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DbQueryExecutionItemComponent, decorators: [{
174
174
  type: Component,
175
175
  args: [{ selector: 'cqa-db-query-execution-item', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-border !cqa-border-b-2 cqa-border-solid cqa-rounded-lg cqa-overflow-hidden\" [ngClass]=\"{'cqa-bg-[#F8FAFC] cqa-border-[#E2E8F0]': status === 'passed', 'cqa-bg-[#FEF2F2] cqa-border-[#FFC9C9]': status === 'failed'}\">\n <!-- Header (Collapsed View) -->\n <div \n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-px-4 cqa-py-2 cqa-cursor-pointer cqa-flex-wrap\"\n (click)=\"toggle()\"\n role=\"button\">\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-flex-wrap cqa-gap-2 cqa-w-[calc(100%-15px)]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-1\">\n <span class=\"cqa-font-semibold cqa-text-[10px] cqa-text-[#314158] cqa-min-w-max\">Query {{ queryNumber }}</span>\n \n <!-- Status Badge -->\n <cqa-badge class=\"cqa-mb-0.5\"\n *ngIf=\"status === 'passed'\"\n label=\"Passed\"\n backgroundColor=\"#DCFCE7\"\n textColor=\"#22C55E\"\n inlineStyles=\"border-radius: 50px; margin-top: 2px;\"\n icon=\"check_circle\"\n size=\"small\">\n </cqa-badge>\n <cqa-badge class=\"cqa-mb-0.5\"\n *ngIf=\"status === 'failed'\"\n label=\"Failed\"\n backgroundColor=\"#FEE2E2\"\n textColor=\"#DC2626\"\n icon=\"error\"\n inlineStyles=\"border-radius: 50px; margin-top: 2px;\"\n size=\"small\">\n </cqa-badge>\n \n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#62748E] cqa-min-w-max\" *ngIf=\"queryResult?.duration || queryResult?.data?.length > 0\">\n {{ formatDuration(queryResult?.duration) }}\n <span *ngIf=\"queryResult?.data?.length > 0 && queryResult?.duration\"> \u2022 </span>\n <span *ngIf=\"queryResult?.data?.length > 0\">{{ queryResult?.data?.length || 0 }} rows</span>\n </span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <button\n (click)=\"copyQueryCollapsed(); $event.stopPropagation()\"\n class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-bg-transparent cqa-cursor-pointer cqa-relative\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n Copy Query\n \n <!-- Copied Tooltip -->\n <div \n *ngIf=\"showQueryCopiedCollapsed\" \n class=\"cqa-absolute cqa-top-0 cqa-left-7 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n style=\"animation: fadeInOut 0.2s ease-in-out;\">\n Copied!\n </div>\n </button>\n <button\n (click)=\"copyResponseCollapsed(); $event.stopPropagation()\"\n class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-bg-transparent cqa-cursor-pointer cqa-relative\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n Copy Response\n \n <!-- Copied Tooltip -->\n <div \n *ngIf=\"showResponseCopiedCollapsed\" \n class=\"cqa-absolute cqa-top-0 cqa-left-7 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n style=\"animation: fadeInOut 0.2s ease-in-out;\">\n Copied!\n </div>\n </button>\n </div>\n </div>\n \n <div class=\"cqa-flex cqa-items-center cqa-min-w-max\">\n <svg \n [class.cqa-rotate-180]=\"isExpanded\" \n [matTooltip]=\"isExpanded ? 'Collapse' : 'Expand to view the query and response.'\"\n matTooltipPosition=\"above\"\n class=\"cqa-transition-transform cqa-min-w-max\" \n width=\"14\" \n height=\"14\" \n viewBox=\"0 0 14 14\" \n fill=\"none\" \n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded === true\" class=\"cqa-bg-white cqa-border-t cqa-border-b-0 cqa-border-l-0 cqa-border-r-0 cqa-border-solid\" [ngClass]=\"{'cqa-border-[#E2E8F0]': status === 'passed', 'cqa-border-[#FFC9C9]': status === 'failed'}\">\n <!-- Query Section -->\n <div class=\"cqa-px-4 cqa-py-3\">\n <div class=\"cqa-text-[12px] cqa-leading-[16px] cqa-font-semibold cqa-text-[#314158] cqa-mb-2\">Query</div>\n <div class=\"cqa-relative cqa-bg-[#0F172B] cqa-rounded-[10px] cqa-p-3 cqa-overflow-hidden\">\n <button\n (click)=\"copyQueryExpanded()\"\n class=\"cqa-absolute cqa-top-2 cqa-right-2 cqa-p-1.5 cqa-cursor-pointer hover:cqa-bg-[#334155] cqa-rounded\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#94A3B8\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n \n <!-- Copied Tooltip -->\n <div \n *ngIf=\"showQueryCopiedExpanded\" \n class=\"cqa-absolute cqa-right-0 cqa-top-full cqa-mt-1 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n style=\"animation: fadeInOut 0.2s ease-in-out;\">\n Copied!\n </div>\n </button>\n <pre class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#F1F5F9] cqa-font-mono cqa-whitespace-pre-wrap cqa-overflow-x-auto cqa-m-0\"><code>{{ queryResult?.query }}</code></pre>\n </div>\n <div *ngIf=\"variableName\" class=\"cqa-mt-4 cqa-text-[10px] cqa-leading-[15px] cqa-text-[#45556C]\">\n Stored as variable: <span class=\"cqa-font-medium cqa-bg-[#F1F5F9] cqa-px-1 cqa-rounded-[4px] cqa-text-[#45556C]\">{{ variableName }}</span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mt-4\" *ngIf=\"queryResult?.data\">\n <div class=\"cqa-text-[12px] cqa-text-[#314158]\">Response</div>\n <button\n (click)=\"copyResponseExpanded()\"\n class=\"cqa-cursor-pointer cqa-rounded cqa-relative\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n \n <!-- Copied Tooltip -->\n <div \n *ngIf=\"showResponseCopiedExpanded\" \n class=\"cqa-absolute cqa-right-0 cqa-top-full cqa-mt-1 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n style=\"animation: fadeInOut 0.2s ease-in-out;\">\n Copied!\n </div>\n </button>\n </div>\n \n <cqa-table-template\n *ngIf=\"!isEmptyResponse && queryResult?.data\"\n [columns]=\"responseTableColumns\"\n [data]=\"queryResult?.data || []\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [isEmptyState]=\"isEmptyResponse\"\n [emptyStateConfig]=\"emptyStateConfig\"\n [showSearchBar]=\"false\"\n [showFilterButton]=\"false\"\n [showSettingsButton]=\"false\"\n [showAutoRefreshButton]=\"false\"\n [showOtherButton]=\"false\"\n [showFilterPanel]=\"false\"\n [serverSidePagination]=\"false\"\n [cellJsonPathGetter]=\"cellJsonPathGetter\"\n [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\"\n (pageChange)=\"onPageChange($event)\">\n </cqa-table-template>\n \n <div *ngIf=\"isEmptyResponse\" class=\"cqa-text-[10px] cqa-text-[#45556C] cqa-py-4 cqa-text-center\">\n No data returned from this query.\n </div>\n </div>\n </div>\n</div>\n\n", styles: [] }]