@cqa-lib/cqa-ui 1.1.185 → 1.1.187

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 (26) hide show
  1. package/esm2020/lib/execution-screen/main-step-collapse/main-step-collapse.component.mjs +20 -3
  2. package/esm2020/lib/simulator/simulator.component.mjs +188 -346
  3. package/esm2020/lib/step-builder/step-builder-api/step-builder-api.component.mjs +132 -7
  4. package/esm2020/lib/step-builder/step-builder-database/step-builder-database.component.mjs +4 -5
  5. package/esm2020/lib/test-case-details/condition-step/condition-step.component.mjs +1 -1
  6. package/esm2020/lib/test-case-details/loop-step/loop-step.component.mjs +1 -1
  7. package/esm2020/lib/test-case-details/normal-step/normal-step.component.mjs +24 -32
  8. package/esm2020/lib/test-case-details/step-group/step-group.component.mjs +1 -1
  9. package/esm2020/lib/test-case-details/test-case-details-renderer/test-case-details-renderer.component.mjs +15 -3
  10. package/esm2020/lib/test-case-details/test-case-step.models.mjs +1 -1
  11. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal-data.mjs +1 -1
  12. package/esm2020/lib/test-case-details/test-data-modal/test-data-modal.component.mjs +51 -17
  13. package/fesm2015/cqa-lib-cqa-ui.mjs +436 -416
  14. package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
  15. package/fesm2020/cqa-lib-cqa-ui.mjs +424 -404
  16. package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
  17. package/lib/execution-screen/main-step-collapse/main-step-collapse.component.d.ts +6 -3
  18. package/lib/simulator/simulator.component.d.ts +10 -22
  19. package/lib/step-builder/step-builder-api/step-builder-api.component.d.ts +6 -0
  20. package/lib/test-case-details/normal-step/normal-step.component.d.ts +7 -2
  21. package/lib/test-case-details/test-case-details-renderer/test-case-details-renderer.component.d.ts +7 -1
  22. package/lib/test-case-details/test-case-step.models.d.ts +1 -0
  23. package/lib/test-case-details/test-data-modal/test-data-modal-data.d.ts +6 -1
  24. package/lib/test-case-details/test-data-modal/test-data-modal.component.d.ts +11 -7
  25. package/package.json +1 -1
  26. package/styles.css +1 -1
@@ -207,7 +207,7 @@ export class TestCaseStepGroupComponent {
207
207
  }
208
208
  }
209
209
  TestCaseStepGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestCaseStepGroupComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
210
- TestCaseStepGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TestCaseStepGroupComponent, selector: "cqa-test-case-step-group", inputs: { config: "config", id: "id", stepNumber: "stepNumber", groupName: "groupName", description: "description", reusable: "reusable", nestedSteps: "nestedSteps", expanded: "expanded", isNested: "isNested", isInsideLoop: "isInsideLoop", isReorder: "isReorder", loading: "loading" }, outputs: { toggleExpanded: "toggleExpanded", groupNameChange: "groupNameChange", descriptionChange: "descriptionChange", reusableChange: "reusableChange", nestedStepChange: "nestedStepChange", addStep: "addStep", deleteStep: "deleteStep", openExternal: "openExternal", edit: "edit", link: "link", duplicate: "duplicate", delete: "delete", dndDropInZone: "dndDropInZone" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div [class]=\"'cqa-flex cqa-flex-col'\">\n <!-- Step Group Header -->\n <div [class]=\"'step-row cqa-flex cqa-gap-3 cqa-items-center cqa-py-2 ' + (isInsideLoop ? 'cqa-pl-10 cqa-pr-4' : 'cqa-px-4')\">\n <!-- Expand/Collapse Icon -->\n <button type=\"button\" (click)=\"onToggleExpanded()\" class=\"cqa-p-0\">\n <svg [class.cqa-rotate-180]=\"expanded\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"#6B7280\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </button>\n\n <!-- Folder Icon -->\n <div>\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M15 15C15.3978 15 15.7794 14.842 16.0607 14.5607C16.342 14.2794 16.5 13.8978 16.5 13.5V6C16.5 5.60217 16.342 5.22064 16.0607 4.93934C15.7794 4.65804 15.3978 4.5 15 4.5H9.075C8.82413 4.50246 8.57666 4.44196 8.35523 4.32403C8.13379 4.20611 7.94547 4.03453 7.8075 3.825L7.2 2.925C7.06342 2.7176 6.87748 2.54736 6.65887 2.42955C6.44027 2.31174 6.19583 2.25004 5.9475 2.25H3C2.60218 2.25 2.22064 2.40804 1.93934 2.68934C1.65804 2.97064 1.5 3.35218 1.5 3.75V13.5C1.5 13.8978 1.65804 14.2794 1.93934 14.5607C2.22064 14.842 2.60218 15 3 15H15Z\"\n fill=\"#EFF6FF\" stroke=\"#60A5FA\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </div>\n\n <!-- Group Name and Description -->\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-gap-[2px]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <!-- Group Name Input -->\n <p class=\"cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[18px] cqa-font-bold\">{{groupName}}</p>\n <!-- Reusable Tag -->\n <span *ngIf=\"reusable\"\n class=\"cqa-px-2 cqa-py-[1.5px] cqa-rounded-lg cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-bg-[#D8D9FC] cqa-border cqa-border-solid cqa-border-[#8A8CF4]\">\n Reusable\n </span>\n </div>\n\n <!-- Description -->\n <p class=\"cqa-text-[#6B7280] cqa-text-[12px] cqa-leading-[15px]\">{{description}}</p>\n </div>\n\n <!-- Steps Summary and Action Icons -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n\n <!-- External Link Icon -->\n <button type=\"button\" (click)=\"onOpenExternal(); $event.stopPropagation()\" title=\"Open in new tab\"\n class=\"cqa-p-0 cqa-text-[#99999E] hover:cqa-text-[#1447E6]\">\n <svg width=\"16\" height=\"17\" viewBox=\"0 0 16 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M12 8.66667V12.6667C12 13.0203 11.8595 13.3594 11.6095 13.6095C11.3594 13.8595 11.0203 14 10.6667 14H3.33333C2.97971 14 2.64057 13.8595 2.39052 13.6095C2.14048 13.3594 2 13.0203 2 12.6667V5.33333C2 4.97971 2.14048 4.64057 2.39052 4.39052C2.64057 4.14048 2.97971 4 3.33333 4H7.33333M10 2H14M14 2V6M14 2L6.66667 9.33333\"\n stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n\n <!-- Steps Summary -->\n <span class=\"cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-lg cqa-py-0.5 cqa-px-2 cqa-text-[#0A0A0A] cqa-text-[12px] cqa-leading-[15px]\">\n {{ getStepsSummary() }}\n </span>\n\n <!-- Action Icons (show on hover, same as API step) -->\n <div class=\"step-actions cqa-flex cqa-items-center cqa-gap-[14px] cqa-ml-auto cqa-px-[7px]\">\n\n <!-- Edit Icon -->\n <button type=\"button\" (click)=\"onEdit(); $event.stopPropagation()\" title=\"Edit\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 11.6666H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M9.55208 2.1128C9.7843 1.88058 10.0993 1.75012 10.4277 1.75012C10.7561 1.75012 11.071 1.88058 11.3033 2.1128C11.5355 2.34502 11.6659 2.65998 11.6659 2.98838C11.6659 3.31679 11.5355 3.63175 11.3033 3.86397L4.29742 10.8704C4.15864 11.0092 3.9871 11.1107 3.79867 11.1656L2.12333 11.6544C2.07314 11.669 2.01993 11.6699 1.96928 11.6569C1.91863 11.6439 1.8724 11.6176 1.83543 11.5806C1.79846 11.5437 1.7721 11.4974 1.75913 11.4468C1.74615 11.3961 1.74703 11.3429 1.76167 11.2927L2.2505 9.61738C2.30546 9.42916 2.40698 9.25783 2.54567 9.11922L9.55208 2.1128Z\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n\n <!-- Link Icon -->\n <button type=\"button\" (click)=\"onLink(); $event.stopPropagation()\" title=\"Link\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_609_26588)\">\n <path\n d=\"M5.00065 9.91671H3.66732C2.78326 9.91671 1.93542 9.60942 1.3103 9.06244C0.685174 8.51545 0.333984 7.77359 0.333984 7.00004C0.333984 6.22649 0.685174 5.48463 1.3103 4.93765C1.93542 4.39066 2.78326 4.08337 3.66732 4.08337H5.00065\"\n stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M9 4.08337H10.3333C11.2174 4.08337 12.0652 4.39066 12.6904 4.93765C13.3155 5.48463 13.6667 6.22649 13.6667 7.00004C13.6667 7.77359 13.3155 8.51545 12.6904 9.06244C12.0652 9.60942 11.2174 9.91671 10.3333 9.91671H9\"\n stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M4.33398 7H9.66732\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_609_26588\">\n <rect width=\"14\" height=\"14\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </button>\n\n <!-- Duplicate Icon -->\n <button type=\"button\" (click)=\"onDuplicate(); $event.stopPropagation()\" title=\"Duplicate\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.666 4.66663H5.83268C5.18835 4.66663 4.66602 5.18896 4.66602 5.83329V11.6666C4.66602 12.311 5.18835 12.8333 5.83268 12.8333H11.666C12.3103 12.8333 12.8327 12.311 12.8327 11.6666V5.83329C12.8327 5.18896 12.3103 4.66663 11.666 4.66663Z\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M2.33268 9.33329C1.69102 9.33329 1.16602 8.80829 1.16602 8.16663V2.33329C1.16602 1.69163 1.69102 1.16663 2.33268 1.16663H8.16602C8.80768 1.16663 9.33268 1.69163 9.33268 2.33329\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n\n <!-- Delete Icon -->\n <button type=\"button\" (click)=\"onDelete(); $event.stopPropagation()\" title=\"Delete\" class=\"cqa-p-0 cqa-text-[#ff6467] hover:cqa-text-[#C63535]\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1.75 3.5H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M11.0827 3.5V11.6667C11.0827 12.25 10.4993 12.8333 9.91602 12.8333H4.08268C3.49935 12.8333 2.91602 12.25 2.91602 11.6667V3.5\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M4.66602 3.49996V2.33329C4.66602 1.74996 5.24935 1.16663 5.83268 1.16663H8.16602C8.74935 1.16663 9.33268 1.74996 9.33268 2.33329V3.49996\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M5.83398 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M8.16602 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n\n <!-- Expanded Content with Nested Steps (renderer dispatches by step type, n-level nesting) -->\n <div *ngIf=\"expanded\" class=\"cqa-flex cqa-flex-col\">\n <!-- Loading Indicator -->\n <div *ngIf=\"loading\" class=\"cqa-flex cqa-items-center cqa-justify-center cqa-py-8 cqa-px-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-items-center cqa-gap-3\">\n <!-- Spinner -->\n <svg class=\"cqa-animate-spin cqa-h-6 cqa-w-6 cqa-text-[#3F43EE]\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"cqa-opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"cqa-opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n <span class=\"cqa-text-[#6B7280] cqa-text-sm\">Loading steps...</span>\n </div>\n </div>\n \n <!-- Nested Steps Content (only show when not loading) -->\n <div *ngIf=\"!loading\" class=\"cqa-flex cqa-flex-col\">\n <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"!isReorder\">\n <cqa-test-case-details-renderer\n *ngFor=\"let step of nestedSteps; let i = index\"\n [step]=\"step\"\n [index]=\"i\"\n [isNested]=\"true\"\n [isReorder]=\"isReorder\"\n (nestedStepChange)=\"onNestedStepChange($event.step, $event.index)\"\n (addStep)=\"onAddStep()\"\n (deleteStep)=\"onDeleteStep($event)\"\n (toggleExpanded)=\"onNestedToggleExpanded($event, step, i)\"\n (groupNameChange)=\"$any(step).groupName = $event; onNestedStepChange(step, i)\"\n (descriptionChange)=\"$any(step).description = $event; onNestedStepChange(step, i)\"\n (reusableChange)=\"$any(step).reusable = $event; onNestedStepChange(step, i)\"\n (openExternal)=\"onNestedStepChange(step, i)\"\n (edit)=\"onNestedStepChange(step, i)\"\n (link)=\"onNestedStepChange(step, i)\"\n (duplicate)=\"onNestedStepChange(step, i)\"\n (delete)=\"onDeleteStep(i)\"\n (conditionChange)=\"$any(step).condition = $event; onNestedStepChange(step, i)\"\n (branchStepChange)=\"onNestedStepChange(step, i)\"\n (addBranch)=\"onNestedConditionAddBranch($any(step), i)\"\n (deleteBranch)=\"onNestedConditionDeleteBranch($any(step), $event, i)\"\n (testDataProfileChange)=\"$any(step).testDataProfile = $event; onNestedStepChange(step, i)\"\n (startStepChange)=\"$any(step).startStep = $event; onNestedStepChange(step, i)\"\n (endStepChange)=\"$any(step).endStep = $event; onNestedStepChange(step, i)\"\n (maxIterationsChange)=\"$any(step).maxIterations = $event; onNestedStepChange(step, i)\"\n (eventTypeChange)=\"$any(step).eventType = $event; onNestedStepChange(step, i)\"\n (parameterChange)=\"onNestedStepChange(step, i)\"\n (selectionChange)=\"$any(step).selected = $event; onNestedStepChange(step, i)\"\n (dndDropInZone)=\"dndDropInZone.emit($event)\"\n >\n </cqa-test-case-details-renderer>\n </div>\n <div *ngIf=\"isReorder\" class=\"cqa-flex cqa-flex-col nested-step-drop-list\"\n [dndDropzone]=\"['step']\"\n dndEffectAllowed=\"move\"\n dndDragoverClass=\"dndDragover\"\n (dndDrop)=\"onDndDrop($event)\">\n <div dndPlaceholderRef class=\"step-drag-placeholder-nested cqa-my-1 cqa-min-h-[50px] cqa-border-2 cqa-border-dashed cqa-border-[#3F43EE] cqa-rounded cqa-bg-[rgba(63,67,238,0.08)] cqa-flex cqa-items-center cqa-justify-center cqa-text-[#3F43EE] cqa-text-xs\">Drop here</div>\n <div *ngFor=\"let step of nestedSteps; let i = index\" class=\"nested-step-drag-item\"\n [dndDraggable]=\"step\"\n dndEffectAllowed=\"move\"\n dndType=\"step\">\n <cqa-test-case-details-renderer\n [step]=\"step\"\n [index]=\"i\"\n [isNested]=\"true\"\n [isReorder]=\"isReorder\"\n (nestedStepChange)=\"onNestedStepChange($event.step, $event.index)\"\n (addStep)=\"onAddStep()\"\n (deleteStep)=\"onDeleteStep($event)\"\n (toggleExpanded)=\"onNestedToggleExpanded($event, step, i)\"\n (groupNameChange)=\"$any(step).groupName = $event; onNestedStepChange(step, i)\"\n (descriptionChange)=\"$any(step).description = $event; onNestedStepChange(step, i)\"\n (reusableChange)=\"$any(step).reusable = $event; onNestedStepChange(step, i)\"\n (openExternal)=\"onNestedStepChange(step, i)\"\n (edit)=\"onNestedStepChange(step, i)\"\n (link)=\"onNestedStepChange(step, i)\"\n (duplicate)=\"onNestedStepChange(step, i)\"\n (delete)=\"onDeleteStep(i)\"\n (conditionChange)=\"$any(step).condition = $event; onNestedStepChange(step, i)\"\n (branchStepChange)=\"onNestedStepChange(step, i)\"\n (addBranch)=\"onNestedConditionAddBranch($any(step), i)\"\n (deleteBranch)=\"onNestedConditionDeleteBranch($any(step), $event, i)\"\n (testDataProfileChange)=\"$any(step).testDataProfile = $event; onNestedStepChange(step, i)\"\n (startStepChange)=\"$any(step).startStep = $event; onNestedStepChange(step, i)\"\n (endStepChange)=\"$any(step).endStep = $event; onNestedStepChange(step, i)\"\n (maxIterationsChange)=\"$any(step).maxIterations = $event; onNestedStepChange(step, i)\"\n (eventTypeChange)=\"$any(step).eventType = $event; onNestedStepChange(step, i)\"\n (parameterChange)=\"onNestedStepChange(step, i)\"\n (selectionChange)=\"$any(step).selected = $event; onNestedStepChange(step, i)\"\n (dndDropInZone)=\"dndDropInZone.emit($event)\"\n >\n </cqa-test-case-details-renderer>\n </div>\n </div>\n\n <!-- END GROUP Marker -->\n <div [class]=\"'cqa-pl-8 cqa-py-2 cqa-border-t cqa-border-[#D1C4E9] cqa-bg-[#D1C4E9]'\">\n <span class=\"cqa-font-bold cqa-text-white cqa-text-sm cqa-uppercase\">\n END GROUP\n </span>\n </div>\n </div>\n </div>\n</div>", styles: [".step-actions{opacity:0;transition:opacity .15s ease}.step-row:hover .step-actions{opacity:1}\n"], components: [{ type: i1.TestCaseDetailsRendererComponent, selector: "cqa-test-case-details-renderer", inputs: ["step", "index", "isNested", "isInsideLoop", "branch", "isReorder"], outputs: ["nestedStepChange", "addStep", "deleteStep", "toggleExpanded", "groupNameChange", "descriptionChange", "reusableChange", "openExternal", "edit", "link", "duplicate", "delete", "viewDetails", "selectionChange", "conditionChange", "branchStepChange", "addStepForBranch", "deleteStepWithBranch", "addBranch", "deleteBranch", "testDataProfileChange", "startStepChange", "endStepChange", "maxIterationsChange", "eventTypeChange", "parameterChange", "dndDropInZone"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.DndDropzoneDirective, selector: "[dndDropzone]", inputs: ["dndDropzone", "dndEffectAllowed", "dndAllowExternal", "dndHorizontal", "dndDragoverClass", "dndDropzoneDisabledClass", "dndDisableIf", "dndDisableDropIf"], outputs: ["dndDragover", "dndDrop"] }, { type: i3.DndPlaceholderRefDirective, selector: "[dndPlaceholderRef]" }, { type: i3.DndDraggableDirective, selector: "[dndDraggable]", inputs: ["dndDraggable", "dndEffectAllowed", "dndType", "dndDraggingClass", "dndDraggingSourceClass", "dndDraggableDisabledClass", "dndDragImageOffsetFunction", "dndDisableIf", "dndDisableDragIf"], outputs: ["dndStart", "dndDrag", "dndEnd", "dndMoved", "dndCopied", "dndLinked", "dndCanceled"] }] });
210
+ TestCaseStepGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TestCaseStepGroupComponent, selector: "cqa-test-case-step-group", inputs: { config: "config", id: "id", stepNumber: "stepNumber", groupName: "groupName", description: "description", reusable: "reusable", nestedSteps: "nestedSteps", expanded: "expanded", isNested: "isNested", isInsideLoop: "isInsideLoop", isReorder: "isReorder", loading: "loading" }, outputs: { toggleExpanded: "toggleExpanded", groupNameChange: "groupNameChange", descriptionChange: "descriptionChange", reusableChange: "reusableChange", nestedStepChange: "nestedStepChange", addStep: "addStep", deleteStep: "deleteStep", openExternal: "openExternal", edit: "edit", link: "link", duplicate: "duplicate", delete: "delete", dndDropInZone: "dndDropInZone" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div [class]=\"'cqa-flex cqa-flex-col'\">\n <!-- Step Group Header -->\n <div [class]=\"'step-row cqa-flex cqa-gap-3 cqa-items-center cqa-py-2 ' + (isInsideLoop ? 'cqa-pl-10 cqa-pr-4' : 'cqa-px-4')\">\n <!-- Expand/Collapse Icon -->\n <button type=\"button\" (click)=\"onToggleExpanded()\" class=\"cqa-p-0\">\n <svg [class.cqa-rotate-180]=\"expanded\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"#6B7280\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </button>\n\n <!-- Folder Icon -->\n <div>\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M15 15C15.3978 15 15.7794 14.842 16.0607 14.5607C16.342 14.2794 16.5 13.8978 16.5 13.5V6C16.5 5.60217 16.342 5.22064 16.0607 4.93934C15.7794 4.65804 15.3978 4.5 15 4.5H9.075C8.82413 4.50246 8.57666 4.44196 8.35523 4.32403C8.13379 4.20611 7.94547 4.03453 7.8075 3.825L7.2 2.925C7.06342 2.7176 6.87748 2.54736 6.65887 2.42955C6.44027 2.31174 6.19583 2.25004 5.9475 2.25H3C2.60218 2.25 2.22064 2.40804 1.93934 2.68934C1.65804 2.97064 1.5 3.35218 1.5 3.75V13.5C1.5 13.8978 1.65804 14.2794 1.93934 14.5607C2.22064 14.842 2.60218 15 3 15H15Z\"\n fill=\"#EFF6FF\" stroke=\"#60A5FA\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </div>\n\n <!-- Group Name and Description -->\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-gap-[2px]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <!-- Group Name Input -->\n <p class=\"cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[18px] cqa-font-bold\">{{groupName}}</p>\n <!-- Reusable Tag -->\n <span *ngIf=\"reusable\"\n class=\"cqa-px-2 cqa-py-[1.5px] cqa-rounded-lg cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-bg-[#D8D9FC] cqa-border cqa-border-solid cqa-border-[#8A8CF4]\">\n Reusable\n </span>\n </div>\n\n <!-- Description -->\n <p class=\"cqa-text-[#6B7280] cqa-text-[12px] cqa-leading-[15px]\">{{description}}</p>\n </div>\n\n <!-- Steps Summary and Action Icons -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n\n <!-- External Link Icon -->\n <button type=\"button\" (click)=\"onOpenExternal(); $event.stopPropagation()\" title=\"Open in new tab\"\n class=\"cqa-p-0 cqa-text-[#99999E] hover:cqa-text-[#1447E6]\">\n <svg width=\"16\" height=\"17\" viewBox=\"0 0 16 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M12 8.66667V12.6667C12 13.0203 11.8595 13.3594 11.6095 13.6095C11.3594 13.8595 11.0203 14 10.6667 14H3.33333C2.97971 14 2.64057 13.8595 2.39052 13.6095C2.14048 13.3594 2 13.0203 2 12.6667V5.33333C2 4.97971 2.14048 4.64057 2.39052 4.39052C2.64057 4.14048 2.97971 4 3.33333 4H7.33333M10 2H14M14 2V6M14 2L6.66667 9.33333\"\n stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n\n <!-- Steps Summary -->\n <span class=\"cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-lg cqa-py-0.5 cqa-px-2 cqa-text-[#0A0A0A] cqa-text-[12px] cqa-leading-[15px]\">\n {{ getStepsSummary() }}\n </span>\n\n <!-- Action Icons (show on hover, same as API step) -->\n <div class=\"step-actions cqa-flex cqa-items-center cqa-gap-[14px] cqa-ml-auto cqa-px-[7px]\">\n\n <!-- Edit Icon -->\n <button type=\"button\" (click)=\"onEdit(); $event.stopPropagation()\" title=\"Edit\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 11.6666H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M9.55208 2.1128C9.7843 1.88058 10.0993 1.75012 10.4277 1.75012C10.7561 1.75012 11.071 1.88058 11.3033 2.1128C11.5355 2.34502 11.6659 2.65998 11.6659 2.98838C11.6659 3.31679 11.5355 3.63175 11.3033 3.86397L4.29742 10.8704C4.15864 11.0092 3.9871 11.1107 3.79867 11.1656L2.12333 11.6544C2.07314 11.669 2.01993 11.6699 1.96928 11.6569C1.91863 11.6439 1.8724 11.6176 1.83543 11.5806C1.79846 11.5437 1.7721 11.4974 1.75913 11.4468C1.74615 11.3961 1.74703 11.3429 1.76167 11.2927L2.2505 9.61738C2.30546 9.42916 2.40698 9.25783 2.54567 9.11922L9.55208 2.1128Z\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n\n <!-- Link Icon -->\n <button type=\"button\" (click)=\"onLink(); $event.stopPropagation()\" title=\"Link\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_609_26588)\">\n <path\n d=\"M5.00065 9.91671H3.66732C2.78326 9.91671 1.93542 9.60942 1.3103 9.06244C0.685174 8.51545 0.333984 7.77359 0.333984 7.00004C0.333984 6.22649 0.685174 5.48463 1.3103 4.93765C1.93542 4.39066 2.78326 4.08337 3.66732 4.08337H5.00065\"\n stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M9 4.08337H10.3333C11.2174 4.08337 12.0652 4.39066 12.6904 4.93765C13.3155 5.48463 13.6667 6.22649 13.6667 7.00004C13.6667 7.77359 13.3155 8.51545 12.6904 9.06244C12.0652 9.60942 11.2174 9.91671 10.3333 9.91671H9\"\n stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M4.33398 7H9.66732\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_609_26588\">\n <rect width=\"14\" height=\"14\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </button>\n\n <!-- Duplicate Icon -->\n <button type=\"button\" (click)=\"onDuplicate(); $event.stopPropagation()\" title=\"Duplicate\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.666 4.66663H5.83268C5.18835 4.66663 4.66602 5.18896 4.66602 5.83329V11.6666C4.66602 12.311 5.18835 12.8333 5.83268 12.8333H11.666C12.3103 12.8333 12.8327 12.311 12.8327 11.6666V5.83329C12.8327 5.18896 12.3103 4.66663 11.666 4.66663Z\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M2.33268 9.33329C1.69102 9.33329 1.16602 8.80829 1.16602 8.16663V2.33329C1.16602 1.69163 1.69102 1.16663 2.33268 1.16663H8.16602C8.80768 1.16663 9.33268 1.69163 9.33268 2.33329\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n\n <!-- Delete Icon -->\n <button type=\"button\" (click)=\"onDelete(); $event.stopPropagation()\" title=\"Delete\" class=\"cqa-p-0 cqa-text-[#ff6467] hover:cqa-text-[#C63535]\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1.75 3.5H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M11.0827 3.5V11.6667C11.0827 12.25 10.4993 12.8333 9.91602 12.8333H4.08268C3.49935 12.8333 2.91602 12.25 2.91602 11.6667V3.5\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M4.66602 3.49996V2.33329C4.66602 1.74996 5.24935 1.16663 5.83268 1.16663H8.16602C8.74935 1.16663 9.33268 1.74996 9.33268 2.33329V3.49996\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M5.83398 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M8.16602 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n\n <!-- Expanded Content with Nested Steps (renderer dispatches by step type, n-level nesting) -->\n <div *ngIf=\"expanded\" class=\"cqa-flex cqa-flex-col\">\n <!-- Loading Indicator -->\n <div *ngIf=\"loading\" class=\"cqa-flex cqa-items-center cqa-justify-center cqa-py-8 cqa-px-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-items-center cqa-gap-3\">\n <!-- Spinner -->\n <svg class=\"cqa-animate-spin cqa-h-6 cqa-w-6 cqa-text-[#3F43EE]\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"cqa-opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"cqa-opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n <span class=\"cqa-text-[#6B7280] cqa-text-sm\">Loading steps...</span>\n </div>\n </div>\n \n <!-- Nested Steps Content (only show when not loading) -->\n <div *ngIf=\"!loading\" class=\"cqa-flex cqa-flex-col\">\n <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"!isReorder\">\n <cqa-test-case-details-renderer\n *ngFor=\"let step of nestedSteps; let i = index\"\n [step]=\"step\"\n [index]=\"i\"\n [isNested]=\"true\"\n [isReorder]=\"isReorder\"\n (nestedStepChange)=\"onNestedStepChange($event.step, $event.index)\"\n (addStep)=\"onAddStep()\"\n (deleteStep)=\"onDeleteStep($event)\"\n (toggleExpanded)=\"onNestedToggleExpanded($event, step, i)\"\n (groupNameChange)=\"$any(step).groupName = $event; onNestedStepChange(step, i)\"\n (descriptionChange)=\"$any(step).description = $event; onNestedStepChange(step, i)\"\n (reusableChange)=\"$any(step).reusable = $event; onNestedStepChange(step, i)\"\n (openExternal)=\"onNestedStepChange(step, i)\"\n (edit)=\"onNestedStepChange(step, i)\"\n (link)=\"onNestedStepChange(step, i)\"\n (duplicate)=\"onNestedStepChange(step, i)\"\n (delete)=\"onDeleteStep(i)\"\n (conditionChange)=\"$any(step).condition = $event; onNestedStepChange(step, i)\"\n (branchStepChange)=\"onNestedStepChange(step, i)\"\n (addBranch)=\"onNestedConditionAddBranch($any(step), i)\"\n (deleteBranch)=\"onNestedConditionDeleteBranch($any(step), $event, i)\"\n (testDataProfileChange)=\"$any(step).testDataProfile = $event; onNestedStepChange(step, i)\"\n (startStepChange)=\"$any(step).startStep = $event; onNestedStepChange(step, i)\"\n (endStepChange)=\"$any(step).endStep = $event; onNestedStepChange(step, i)\"\n (maxIterationsChange)=\"$any(step).maxIterations = $event; onNestedStepChange(step, i)\"\n (eventTypeChange)=\"$any(step).eventType = $event; onNestedStepChange(step, i)\"\n (parameterChange)=\"onNestedStepChange(step, i)\"\n (selectionChange)=\"$any(step).selected = $event; onNestedStepChange(step, i)\"\n (dndDropInZone)=\"dndDropInZone.emit($event)\"\n >\n </cqa-test-case-details-renderer>\n </div>\n <div *ngIf=\"isReorder\" class=\"cqa-flex cqa-flex-col nested-step-drop-list\"\n [dndDropzone]=\"['step']\"\n dndEffectAllowed=\"move\"\n dndDragoverClass=\"dndDragover\"\n (dndDrop)=\"onDndDrop($event)\">\n <div dndPlaceholderRef class=\"step-drag-placeholder-nested cqa-my-1 cqa-min-h-[50px] cqa-border-2 cqa-border-dashed cqa-border-[#3F43EE] cqa-rounded cqa-bg-[rgba(63,67,238,0.08)] cqa-flex cqa-items-center cqa-justify-center cqa-text-[#3F43EE] cqa-text-xs\">Drop here</div>\n <div *ngFor=\"let step of nestedSteps; let i = index\" class=\"nested-step-drag-item\"\n [dndDraggable]=\"step\"\n dndEffectAllowed=\"move\"\n dndType=\"step\">\n <cqa-test-case-details-renderer\n [step]=\"step\"\n [index]=\"i\"\n [isNested]=\"true\"\n [isReorder]=\"isReorder\"\n (nestedStepChange)=\"onNestedStepChange($event.step, $event.index)\"\n (addStep)=\"onAddStep()\"\n (deleteStep)=\"onDeleteStep($event)\"\n (toggleExpanded)=\"onNestedToggleExpanded($event, step, i)\"\n (groupNameChange)=\"$any(step).groupName = $event; onNestedStepChange(step, i)\"\n (descriptionChange)=\"$any(step).description = $event; onNestedStepChange(step, i)\"\n (reusableChange)=\"$any(step).reusable = $event; onNestedStepChange(step, i)\"\n (openExternal)=\"onNestedStepChange(step, i)\"\n (edit)=\"onNestedStepChange(step, i)\"\n (link)=\"onNestedStepChange(step, i)\"\n (duplicate)=\"onNestedStepChange(step, i)\"\n (delete)=\"onDeleteStep(i)\"\n (conditionChange)=\"$any(step).condition = $event; onNestedStepChange(step, i)\"\n (branchStepChange)=\"onNestedStepChange(step, i)\"\n (addBranch)=\"onNestedConditionAddBranch($any(step), i)\"\n (deleteBranch)=\"onNestedConditionDeleteBranch($any(step), $event, i)\"\n (testDataProfileChange)=\"$any(step).testDataProfile = $event; onNestedStepChange(step, i)\"\n (startStepChange)=\"$any(step).startStep = $event; onNestedStepChange(step, i)\"\n (endStepChange)=\"$any(step).endStep = $event; onNestedStepChange(step, i)\"\n (maxIterationsChange)=\"$any(step).maxIterations = $event; onNestedStepChange(step, i)\"\n (eventTypeChange)=\"$any(step).eventType = $event; onNestedStepChange(step, i)\"\n (parameterChange)=\"onNestedStepChange(step, i)\"\n (selectionChange)=\"$any(step).selected = $event; onNestedStepChange(step, i)\"\n (dndDropInZone)=\"dndDropInZone.emit($event)\"\n >\n </cqa-test-case-details-renderer>\n </div>\n </div>\n\n <!-- END GROUP Marker -->\n <div [class]=\"'cqa-pl-8 cqa-py-2 cqa-border-t cqa-border-[#D1C4E9] cqa-bg-[#D1C4E9]'\">\n <span class=\"cqa-font-bold cqa-text-white cqa-text-sm cqa-uppercase\">\n END GROUP\n </span>\n </div>\n </div>\n </div>\n</div>", styles: [".step-actions{opacity:0;transition:opacity .15s ease}.step-row:hover .step-actions{opacity:1}\n"], components: [{ type: i1.TestCaseDetailsRendererComponent, selector: "cqa-test-case-details-renderer", inputs: ["step", "index", "isNested", "isInsideLoop", "branch", "isReorder", "addStepBetween"], outputs: ["nestedStepChange", "addStep", "deleteStep", "toggleExpanded", "groupNameChange", "descriptionChange", "reusableChange", "openExternal", "edit", "link", "duplicate", "delete", "viewDetails", "selectionChange", "conditionChange", "branchStepChange", "addStepForBranch", "deleteStepWithBranch", "addBranch", "deleteBranch", "testDataProfileChange", "startStepChange", "endStepChange", "maxIterationsChange", "eventTypeChange", "parameterChange", "clickAction", "dndDropInZone", "addStepBetweenClick"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.DndDropzoneDirective, selector: "[dndDropzone]", inputs: ["dndDropzone", "dndEffectAllowed", "dndAllowExternal", "dndHorizontal", "dndDragoverClass", "dndDropzoneDisabledClass", "dndDisableIf", "dndDisableDropIf"], outputs: ["dndDragover", "dndDrop"] }, { type: i3.DndPlaceholderRefDirective, selector: "[dndPlaceholderRef]" }, { type: i3.DndDraggableDirective, selector: "[dndDraggable]", inputs: ["dndDraggable", "dndEffectAllowed", "dndType", "dndDraggingClass", "dndDraggingSourceClass", "dndDraggableDisabledClass", "dndDragImageOffsetFunction", "dndDisableIf", "dndDisableDragIf"], outputs: ["dndStart", "dndDrag", "dndEnd", "dndMoved", "dndCopied", "dndLinked", "dndCanceled"] }] });
211
211
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestCaseStepGroupComponent, decorators: [{
212
212
  type: Component,
213
213
  args: [{ selector: 'cqa-test-case-step-group', host: { class: 'cqa-ui-root' }, styles: [STEP_ROW_ACTIONS_STYLES], template: "<div [class]=\"'cqa-flex cqa-flex-col'\">\n <!-- Step Group Header -->\n <div [class]=\"'step-row cqa-flex cqa-gap-3 cqa-items-center cqa-py-2 ' + (isInsideLoop ? 'cqa-pl-10 cqa-pr-4' : 'cqa-px-4')\">\n <!-- Expand/Collapse Icon -->\n <button type=\"button\" (click)=\"onToggleExpanded()\" class=\"cqa-p-0\">\n <svg [class.cqa-rotate-180]=\"expanded\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"#6B7280\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </button>\n\n <!-- Folder Icon -->\n <div>\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M15 15C15.3978 15 15.7794 14.842 16.0607 14.5607C16.342 14.2794 16.5 13.8978 16.5 13.5V6C16.5 5.60217 16.342 5.22064 16.0607 4.93934C15.7794 4.65804 15.3978 4.5 15 4.5H9.075C8.82413 4.50246 8.57666 4.44196 8.35523 4.32403C8.13379 4.20611 7.94547 4.03453 7.8075 3.825L7.2 2.925C7.06342 2.7176 6.87748 2.54736 6.65887 2.42955C6.44027 2.31174 6.19583 2.25004 5.9475 2.25H3C2.60218 2.25 2.22064 2.40804 1.93934 2.68934C1.65804 2.97064 1.5 3.35218 1.5 3.75V13.5C1.5 13.8978 1.65804 14.2794 1.93934 14.5607C2.22064 14.842 2.60218 15 3 15H15Z\"\n fill=\"#EFF6FF\" stroke=\"#60A5FA\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </div>\n\n <!-- Group Name and Description -->\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-gap-[2px]\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <!-- Group Name Input -->\n <p class=\"cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[18px] cqa-font-bold\">{{groupName}}</p>\n <!-- Reusable Tag -->\n <span *ngIf=\"reusable\"\n class=\"cqa-px-2 cqa-py-[1.5px] cqa-rounded-lg cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-bg-[#D8D9FC] cqa-border cqa-border-solid cqa-border-[#8A8CF4]\">\n Reusable\n </span>\n </div>\n\n <!-- Description -->\n <p class=\"cqa-text-[#6B7280] cqa-text-[12px] cqa-leading-[15px]\">{{description}}</p>\n </div>\n\n <!-- Steps Summary and Action Icons -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n\n <!-- External Link Icon -->\n <button type=\"button\" (click)=\"onOpenExternal(); $event.stopPropagation()\" title=\"Open in new tab\"\n class=\"cqa-p-0 cqa-text-[#99999E] hover:cqa-text-[#1447E6]\">\n <svg width=\"16\" height=\"17\" viewBox=\"0 0 16 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M12 8.66667V12.6667C12 13.0203 11.8595 13.3594 11.6095 13.6095C11.3594 13.8595 11.0203 14 10.6667 14H3.33333C2.97971 14 2.64057 13.8595 2.39052 13.6095C2.14048 13.3594 2 13.0203 2 12.6667V5.33333C2 4.97971 2.14048 4.64057 2.39052 4.39052C2.64057 4.14048 2.97971 4 3.33333 4H7.33333M10 2H14M14 2V6M14 2L6.66667 9.33333\"\n stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n\n <!-- Steps Summary -->\n <span class=\"cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-lg cqa-py-0.5 cqa-px-2 cqa-text-[#0A0A0A] cqa-text-[12px] cqa-leading-[15px]\">\n {{ getStepsSummary() }}\n </span>\n\n <!-- Action Icons (show on hover, same as API step) -->\n <div class=\"step-actions cqa-flex cqa-items-center cqa-gap-[14px] cqa-ml-auto cqa-px-[7px]\">\n\n <!-- Edit Icon -->\n <button type=\"button\" (click)=\"onEdit(); $event.stopPropagation()\" title=\"Edit\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 11.6666H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M9.55208 2.1128C9.7843 1.88058 10.0993 1.75012 10.4277 1.75012C10.7561 1.75012 11.071 1.88058 11.3033 2.1128C11.5355 2.34502 11.6659 2.65998 11.6659 2.98838C11.6659 3.31679 11.5355 3.63175 11.3033 3.86397L4.29742 10.8704C4.15864 11.0092 3.9871 11.1107 3.79867 11.1656L2.12333 11.6544C2.07314 11.669 2.01993 11.6699 1.96928 11.6569C1.91863 11.6439 1.8724 11.6176 1.83543 11.5806C1.79846 11.5437 1.7721 11.4974 1.75913 11.4468C1.74615 11.3961 1.74703 11.3429 1.76167 11.2927L2.2505 9.61738C2.30546 9.42916 2.40698 9.25783 2.54567 9.11922L9.55208 2.1128Z\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n\n <!-- Link Icon -->\n <button type=\"button\" (click)=\"onLink(); $event.stopPropagation()\" title=\"Link\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <g clip-path=\"url(#clip0_609_26588)\">\n <path\n d=\"M5.00065 9.91671H3.66732C2.78326 9.91671 1.93542 9.60942 1.3103 9.06244C0.685174 8.51545 0.333984 7.77359 0.333984 7.00004C0.333984 6.22649 0.685174 5.48463 1.3103 4.93765C1.93542 4.39066 2.78326 4.08337 3.66732 4.08337H5.00065\"\n stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M9 4.08337H10.3333C11.2174 4.08337 12.0652 4.39066 12.6904 4.93765C13.3155 5.48463 13.6667 6.22649 13.6667 7.00004C13.6667 7.77359 13.3155 8.51545 12.6904 9.06244C12.0652 9.60942 11.2174 9.91671 10.3333 9.91671H9\"\n stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M4.33398 7H9.66732\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_609_26588\">\n <rect width=\"14\" height=\"14\" fill=\"white\" />\n </clipPath>\n </defs>\n </svg>\n </button>\n\n <!-- Duplicate Icon -->\n <button type=\"button\" (click)=\"onDuplicate(); $event.stopPropagation()\" title=\"Duplicate\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.666 4.66663H5.83268C5.18835 4.66663 4.66602 5.18896 4.66602 5.83329V11.6666C4.66602 12.311 5.18835 12.8333 5.83268 12.8333H11.666C12.3103 12.8333 12.8327 12.311 12.8327 11.6666V5.83329C12.8327 5.18896 12.3103 4.66663 11.666 4.66663Z\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M2.33268 9.33329C1.69102 9.33329 1.16602 8.80829 1.16602 8.16663V2.33329C1.16602 1.69163 1.69102 1.16663 2.33268 1.16663H8.16602C8.80768 1.16663 9.33268 1.69163 9.33268 2.33329\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n\n <!-- Delete Icon -->\n <button type=\"button\" (click)=\"onDelete(); $event.stopPropagation()\" title=\"Delete\" class=\"cqa-p-0 cqa-text-[#ff6467] hover:cqa-text-[#C63535]\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1.75 3.5H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M11.0827 3.5V11.6667C11.0827 12.25 10.4993 12.8333 9.91602 12.8333H4.08268C3.49935 12.8333 2.91602 12.25 2.91602 11.6667V3.5\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M4.66602 3.49996V2.33329C4.66602 1.74996 5.24935 1.16663 5.83268 1.16663H8.16602C8.74935 1.16663 9.33268 1.74996 9.33268 2.33329V3.49996\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M5.83398 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M8.16602 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </button>\n </div>\n </div>\n </div>\n\n <!-- Expanded Content with Nested Steps (renderer dispatches by step type, n-level nesting) -->\n <div *ngIf=\"expanded\" class=\"cqa-flex cqa-flex-col\">\n <!-- Loading Indicator -->\n <div *ngIf=\"loading\" class=\"cqa-flex cqa-items-center cqa-justify-center cqa-py-8 cqa-px-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-items-center cqa-gap-3\">\n <!-- Spinner -->\n <svg class=\"cqa-animate-spin cqa-h-6 cqa-w-6 cqa-text-[#3F43EE]\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"cqa-opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"cqa-opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n <span class=\"cqa-text-[#6B7280] cqa-text-sm\">Loading steps...</span>\n </div>\n </div>\n \n <!-- Nested Steps Content (only show when not loading) -->\n <div *ngIf=\"!loading\" class=\"cqa-flex cqa-flex-col\">\n <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"!isReorder\">\n <cqa-test-case-details-renderer\n *ngFor=\"let step of nestedSteps; let i = index\"\n [step]=\"step\"\n [index]=\"i\"\n [isNested]=\"true\"\n [isReorder]=\"isReorder\"\n (nestedStepChange)=\"onNestedStepChange($event.step, $event.index)\"\n (addStep)=\"onAddStep()\"\n (deleteStep)=\"onDeleteStep($event)\"\n (toggleExpanded)=\"onNestedToggleExpanded($event, step, i)\"\n (groupNameChange)=\"$any(step).groupName = $event; onNestedStepChange(step, i)\"\n (descriptionChange)=\"$any(step).description = $event; onNestedStepChange(step, i)\"\n (reusableChange)=\"$any(step).reusable = $event; onNestedStepChange(step, i)\"\n (openExternal)=\"onNestedStepChange(step, i)\"\n (edit)=\"onNestedStepChange(step, i)\"\n (link)=\"onNestedStepChange(step, i)\"\n (duplicate)=\"onNestedStepChange(step, i)\"\n (delete)=\"onDeleteStep(i)\"\n (conditionChange)=\"$any(step).condition = $event; onNestedStepChange(step, i)\"\n (branchStepChange)=\"onNestedStepChange(step, i)\"\n (addBranch)=\"onNestedConditionAddBranch($any(step), i)\"\n (deleteBranch)=\"onNestedConditionDeleteBranch($any(step), $event, i)\"\n (testDataProfileChange)=\"$any(step).testDataProfile = $event; onNestedStepChange(step, i)\"\n (startStepChange)=\"$any(step).startStep = $event; onNestedStepChange(step, i)\"\n (endStepChange)=\"$any(step).endStep = $event; onNestedStepChange(step, i)\"\n (maxIterationsChange)=\"$any(step).maxIterations = $event; onNestedStepChange(step, i)\"\n (eventTypeChange)=\"$any(step).eventType = $event; onNestedStepChange(step, i)\"\n (parameterChange)=\"onNestedStepChange(step, i)\"\n (selectionChange)=\"$any(step).selected = $event; onNestedStepChange(step, i)\"\n (dndDropInZone)=\"dndDropInZone.emit($event)\"\n >\n </cqa-test-case-details-renderer>\n </div>\n <div *ngIf=\"isReorder\" class=\"cqa-flex cqa-flex-col nested-step-drop-list\"\n [dndDropzone]=\"['step']\"\n dndEffectAllowed=\"move\"\n dndDragoverClass=\"dndDragover\"\n (dndDrop)=\"onDndDrop($event)\">\n <div dndPlaceholderRef class=\"step-drag-placeholder-nested cqa-my-1 cqa-min-h-[50px] cqa-border-2 cqa-border-dashed cqa-border-[#3F43EE] cqa-rounded cqa-bg-[rgba(63,67,238,0.08)] cqa-flex cqa-items-center cqa-justify-center cqa-text-[#3F43EE] cqa-text-xs\">Drop here</div>\n <div *ngFor=\"let step of nestedSteps; let i = index\" class=\"nested-step-drag-item\"\n [dndDraggable]=\"step\"\n dndEffectAllowed=\"move\"\n dndType=\"step\">\n <cqa-test-case-details-renderer\n [step]=\"step\"\n [index]=\"i\"\n [isNested]=\"true\"\n [isReorder]=\"isReorder\"\n (nestedStepChange)=\"onNestedStepChange($event.step, $event.index)\"\n (addStep)=\"onAddStep()\"\n (deleteStep)=\"onDeleteStep($event)\"\n (toggleExpanded)=\"onNestedToggleExpanded($event, step, i)\"\n (groupNameChange)=\"$any(step).groupName = $event; onNestedStepChange(step, i)\"\n (descriptionChange)=\"$any(step).description = $event; onNestedStepChange(step, i)\"\n (reusableChange)=\"$any(step).reusable = $event; onNestedStepChange(step, i)\"\n (openExternal)=\"onNestedStepChange(step, i)\"\n (edit)=\"onNestedStepChange(step, i)\"\n (link)=\"onNestedStepChange(step, i)\"\n (duplicate)=\"onNestedStepChange(step, i)\"\n (delete)=\"onDeleteStep(i)\"\n (conditionChange)=\"$any(step).condition = $event; onNestedStepChange(step, i)\"\n (branchStepChange)=\"onNestedStepChange(step, i)\"\n (addBranch)=\"onNestedConditionAddBranch($any(step), i)\"\n (deleteBranch)=\"onNestedConditionDeleteBranch($any(step), $event, i)\"\n (testDataProfileChange)=\"$any(step).testDataProfile = $event; onNestedStepChange(step, i)\"\n (startStepChange)=\"$any(step).startStep = $event; onNestedStepChange(step, i)\"\n (endStepChange)=\"$any(step).endStep = $event; onNestedStepChange(step, i)\"\n (maxIterationsChange)=\"$any(step).maxIterations = $event; onNestedStepChange(step, i)\"\n (eventTypeChange)=\"$any(step).eventType = $event; onNestedStepChange(step, i)\"\n (parameterChange)=\"onNestedStepChange(step, i)\"\n (selectionChange)=\"$any(step).selected = $event; onNestedStepChange(step, i)\"\n (dndDropInZone)=\"dndDropInZone.emit($event)\"\n >\n </cqa-test-case-details-renderer>\n </div>\n </div>\n\n <!-- END GROUP Marker -->\n <div [class]=\"'cqa-pl-8 cqa-py-2 cqa-border-t cqa-border-[#D1C4E9] cqa-bg-[#D1C4E9]'\">\n <span class=\"cqa-font-bold cqa-text-white cqa-text-sm cqa-uppercase\">\n END GROUP\n </span>\n </div>\n </div>\n </div>\n</div>" }]
@@ -2,6 +2,7 @@ import { Component, Input, Output, EventEmitter, ViewChild, ViewContainerRef, In
2
2
  import { TEST_CASE_STEP_COMPONENT_MAP } from '../test-case-step-components.token';
3
3
  import { isStepGroupConfig, isConditionStepConfig, isLoopStepConfig, isNormalStepConfig, isApiStepConfig, isDatabaseStepConfig, isAiAgentStepConfig, isAiVerifyStepConfig, isUploadStepConfig, isScreenshotStepConfig, isScrollStepConfig, isVerifyUrlStepConfig, isRestoreSessionStepConfig, isCustomCodeStepConfig, } from '../test-case-step.models';
4
4
  import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
5
6
  export class TestCaseDetailsRendererComponent {
6
7
  constructor(componentMap, cdr) {
7
8
  this.componentMap = componentMap;
@@ -10,6 +11,7 @@ export class TestCaseDetailsRendererComponent {
10
11
  this.isInsideLoop = false;
11
12
  /** When true, enables drag-and-drop reordering and shows drag handle icon instead of checkbox */
12
13
  this.isReorder = false;
14
+ this.addStepBetween = false;
13
15
  this.nestedStepChange = new EventEmitter();
14
16
  this.addStep = new EventEmitter();
15
17
  this.deleteStep = new EventEmitter();
@@ -36,8 +38,10 @@ export class TestCaseDetailsRendererComponent {
36
38
  this.maxIterationsChange = new EventEmitter();
37
39
  this.eventTypeChange = new EventEmitter();
38
40
  this.parameterChange = new EventEmitter();
41
+ this.clickAction = new EventEmitter();
39
42
  /** Emitted when a step is dropped in a nested dropzone (step-group, loop, condition). Payload: { event, targetList }. */
40
43
  this.dndDropInZone = new EventEmitter();
44
+ this.addStepBetweenClick = new EventEmitter();
41
45
  this.componentRef = null;
42
46
  }
43
47
  ngAfterViewInit() {
@@ -158,14 +162,16 @@ export class TestCaseDetailsRendererComponent {
158
162
  wire('maxIterationsChange', this.maxIterationsChange);
159
163
  wire('eventTypeChange', this.eventTypeChange);
160
164
  wire('parameterChange', this.parameterChange);
165
+ wire('clickAction', this.clickAction);
161
166
  wire('dndDropInZone', this.dndDropInZone);
167
+ wire('addStepBetweenClick', this.addStepBetweenClick);
162
168
  }
163
169
  }
164
170
  TestCaseDetailsRendererComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestCaseDetailsRendererComponent, deps: [{ token: TEST_CASE_STEP_COMPONENT_MAP }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
165
- TestCaseDetailsRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TestCaseDetailsRendererComponent, selector: "cqa-test-case-details-renderer", inputs: { step: "step", index: "index", isNested: "isNested", isInsideLoop: "isInsideLoop", branch: "branch", isReorder: "isReorder" }, outputs: { nestedStepChange: "nestedStepChange", addStep: "addStep", deleteStep: "deleteStep", toggleExpanded: "toggleExpanded", groupNameChange: "groupNameChange", descriptionChange: "descriptionChange", reusableChange: "reusableChange", openExternal: "openExternal", edit: "edit", link: "link", duplicate: "duplicate", delete: "delete", viewDetails: "viewDetails", selectionChange: "selectionChange", conditionChange: "conditionChange", branchStepChange: "branchStepChange", addStepForBranch: "addStepForBranch", deleteStepWithBranch: "deleteStepWithBranch", addBranch: "addBranch", deleteBranch: "deleteBranch", testDataProfileChange: "testDataProfileChange", startStepChange: "startStepChange", endStepChange: "endStepChange", maxIterationsChange: "maxIterationsChange", eventTypeChange: "eventTypeChange", parameterChange: "parameterChange", dndDropInZone: "dndDropInZone" }, host: { classAttribute: "cqa-ui-root" }, viewQueries: [{ propertyName: "stepHost", first: true, predicate: ["stepHost"], descendants: true, read: ViewContainerRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-relative\">\n <ng-container #stepHost></ng-container>\n <button class=\"cqa-absolute cqa-top-[calc(100%-12px)] cqa-left-[50%] cqa-translate-x-[-50%] cqa-p-0 cqa-z-[1] cqa-hidden\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" fill=\"white\"/><rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" stroke=\"#3F43EE\" stroke-width=\"2\"/><path d=\"M8.5 12H15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M12 8.5V15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </button>\n</div>" });
171
+ TestCaseDetailsRendererComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TestCaseDetailsRendererComponent, selector: "cqa-test-case-details-renderer", inputs: { step: "step", index: "index", isNested: "isNested", isInsideLoop: "isInsideLoop", branch: "branch", isReorder: "isReorder", addStepBetween: "addStepBetween" }, outputs: { nestedStepChange: "nestedStepChange", addStep: "addStep", deleteStep: "deleteStep", toggleExpanded: "toggleExpanded", groupNameChange: "groupNameChange", descriptionChange: "descriptionChange", reusableChange: "reusableChange", openExternal: "openExternal", edit: "edit", link: "link", duplicate: "duplicate", delete: "delete", viewDetails: "viewDetails", selectionChange: "selectionChange", conditionChange: "conditionChange", branchStepChange: "branchStepChange", addStepForBranch: "addStepForBranch", deleteStepWithBranch: "deleteStepWithBranch", addBranch: "addBranch", deleteBranch: "deleteBranch", testDataProfileChange: "testDataProfileChange", startStepChange: "startStepChange", endStepChange: "endStepChange", maxIterationsChange: "maxIterationsChange", eventTypeChange: "eventTypeChange", parameterChange: "parameterChange", clickAction: "clickAction", dndDropInZone: "dndDropInZone", addStepBetweenClick: "addStepBetweenClick" }, host: { classAttribute: "cqa-ui-root" }, viewQueries: [{ propertyName: "stepHost", first: true, predicate: ["stepHost"], descendants: true, read: ViewContainerRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-relative\">\n <button *ngIf=\"addStepBetween\" class=\"cqa-absolute cqa-top-[calc(100%-12px)] cqa-left-[50%] cqa-translate-x-[-50%] cqa-p-0 cqa-z-[1]\" (click)=\"addStepBetweenClick.emit({step: step, index: index})\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" fill=\"white\"/><rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" stroke=\"#3F43EE\" stroke-width=\"2\"/><path d=\"M8.5 12H15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M12 8.5V15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </button>\n <ng-container #stepHost></ng-container>\n <button *ngIf=\"addStepBetween\" class=\"cqa-absolute cqa-top-[calc(100%-12px)] cqa-left-[50%] cqa-translate-x-[-50%] cqa-p-0 cqa-z-[1]\" (click)=\"addStepBetweenClick.emit({step: step, index: index})\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" fill=\"white\"/><rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" stroke=\"#3F43EE\" stroke-width=\"2\"/><path d=\"M8.5 12H15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M12 8.5V15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </button>\n</div>", directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
166
172
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestCaseDetailsRendererComponent, decorators: [{
167
173
  type: Component,
168
- args: [{ selector: 'cqa-test-case-details-renderer', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-relative\">\n <ng-container #stepHost></ng-container>\n <button class=\"cqa-absolute cqa-top-[calc(100%-12px)] cqa-left-[50%] cqa-translate-x-[-50%] cqa-p-0 cqa-z-[1] cqa-hidden\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" fill=\"white\"/><rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" stroke=\"#3F43EE\" stroke-width=\"2\"/><path d=\"M8.5 12H15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M12 8.5V15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </button>\n</div>" }]
174
+ args: [{ selector: 'cqa-test-case-details-renderer', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-relative\">\n <button *ngIf=\"addStepBetween\" class=\"cqa-absolute cqa-top-[calc(100%-12px)] cqa-left-[50%] cqa-translate-x-[-50%] cqa-p-0 cqa-z-[1]\" (click)=\"addStepBetweenClick.emit({step: step, index: index})\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" fill=\"white\"/><rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" stroke=\"#3F43EE\" stroke-width=\"2\"/><path d=\"M8.5 12H15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M12 8.5V15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </button>\n <ng-container #stepHost></ng-container>\n <button *ngIf=\"addStepBetween\" class=\"cqa-absolute cqa-top-[calc(100%-12px)] cqa-left-[50%] cqa-translate-x-[-50%] cqa-p-0 cqa-z-[1]\" (click)=\"addStepBetweenClick.emit({step: step, index: index})\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" fill=\"white\"/><rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" stroke=\"#3F43EE\" stroke-width=\"2\"/><path d=\"M8.5 12H15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M12 8.5V15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </button>\n</div>" }]
169
175
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
170
176
  type: Inject,
171
177
  args: [TEST_CASE_STEP_COMPONENT_MAP]
@@ -184,6 +190,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
184
190
  type: Input
185
191
  }], isReorder: [{
186
192
  type: Input
193
+ }], addStepBetween: [{
194
+ type: Input
187
195
  }], nestedStepChange: [{
188
196
  type: Output
189
197
  }], addStep: [{
@@ -236,7 +244,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
236
244
  type: Output
237
245
  }], parameterChange: [{
238
246
  type: Output
247
+ }], clickAction: [{
248
+ type: Output
239
249
  }], dndDropInZone: [{
240
250
  type: Output
251
+ }], addStepBetweenClick: [{
252
+ type: Output
241
253
  }] } });
242
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jYXNlLWRldGFpbHMtcmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy90ZXN0LWNhc2UtZGV0YWlscy1yZW5kZXJlci90ZXN0LWNhc2UtZGV0YWlscy1yZW5kZXJlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL3Rlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyL3Rlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUNULGdCQUFnQixFQUdoQixNQUFNLEdBSVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLDRCQUE0QixFQUE0QixNQUFNLG9DQUFvQyxDQUFDO0FBQzVHLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLG9CQUFvQixFQUNwQixtQkFBbUIsRUFDbkIsb0JBQW9CLEVBQ3BCLGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUNyQiwwQkFBMEIsRUFDMUIsc0JBQXNCLEdBRXZCLE1BQU0sMEJBQTBCLENBQUM7O0FBT2xDLE1BQU0sT0FBTyxnQ0FBZ0M7SUEyQzNDLFlBQ2dELFlBQXNDLEVBQzVFLEdBQXNCO1FBRGdCLGlCQUFZLEdBQVosWUFBWSxDQUEwQjtRQUM1RSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQXhDdkIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUd2QyxpR0FBaUc7UUFDeEYsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUUxQixxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBK0MsQ0FBQztRQUNuRixZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNuQyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN4QyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUE2RCxDQUFDO1FBQy9GLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUM3QyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQy9DLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUM3QyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUE4QixDQUFDO1FBQzlELFNBQUksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ2hDLFNBQUksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ2hDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3JDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ2xDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN2QyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDOUMsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzdDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUE0RSxDQUFDO1FBQ2hILHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUErQixDQUFDO1FBQ25FLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFrRCxDQUFDO1FBQzFGLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3JDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFDbkQsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUNuRCxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDN0Msa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzNDLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDakQsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQzFDLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNwRCx5SEFBeUg7UUFDL0csa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBb0QsQ0FBQztRQUV2RixpQkFBWSxHQUE2QixJQUFJLENBQUM7SUFLbkQsQ0FBQztJQUVKLGVBQWU7UUFDYixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDakgsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ25CO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUFDLElBQXdCO1FBQy9DLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQztRQUNoRSxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUM7UUFDeEUsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO1FBQzlELElBQUksZUFBZSxDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUM7UUFDNUQsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDO1FBQ3RFLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUNwRSxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7UUFDdEUsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDO1FBQ2xFLElBQUksc0JBQXNCLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQztRQUMxRSxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUM7UUFDbEUsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDO1FBQ3hFLElBQUksMEJBQTBCLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDO1FBQ2xGLElBQUksc0JBQXNCLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQztRQUMxRSxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUM7UUFDbEUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTztRQUV6QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTztRQUUzQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7UUFFNUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzVCLFFBQVEsQ0FBQyxVQUFVLEdBQUksSUFBSSxDQUFDLElBQVksQ0FBQyxVQUFVLENBQUM7UUFDcEQsUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2xDLFFBQVEsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUMxQyxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDcEMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDckMsSUFBSSxHQUFHLEtBQUssVUFBVSxJQUFJLEdBQUcsS0FBSyxhQUFhLElBQUksR0FBRyxLQUFLLFVBQVUsRUFBRTtnQkFDcEUsUUFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBSSxJQUFJLENBQUMsSUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2xEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFLLElBQUksQ0FBQyxJQUFZLENBQUMsV0FBVztZQUFHLFFBQWdCLENBQUMsV0FBVyxHQUFJLElBQUksQ0FBQyxJQUFZLENBQUMsV0FBVyxDQUFDO1FBQ25HLElBQUssSUFBSSxDQUFDLElBQVksQ0FBQyxRQUFRO1lBQUcsUUFBZ0IsQ0FBQyxRQUFRLEdBQUksSUFBSSxDQUFDLElBQVksQ0FBQyxRQUFRLENBQUM7UUFFMUYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTyxXQUFXLENBQUMsUUFBYTtRQUMvQixNQUFNLElBQUksR0FBRyxDQUFDLEdBQVcsRUFBRSxPQUEwQixFQUFFLEVBQUU7WUFDdkQsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRTtnQkFDbEUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3REO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxnQkFBdUIsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDZCxJQUFJLEVBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDZixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLFFBQVEsSUFBSSxDQUFDO29CQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7O29CQUNsRixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixDQUFDO1NBQ0ssQ0FBQyxDQUFDO1FBQ1YsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNqQixJQUFJLEVBQUUsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDZixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLFFBQVEsSUFBSSxDQUFDLElBQUksV0FBVyxJQUFJLENBQUM7b0JBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzs7b0JBQzFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9CLENBQUM7U0FDSyxDQUFDLENBQUM7UUFDVixJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDckIsSUFBSSxFQUFFLENBQUMsQ0FBTSxFQUFFLEVBQUU7Z0JBQ2YseUNBQXlDO2dCQUN6Qyw0REFBNEQ7Z0JBQzVELHdDQUF3QztnQkFDeEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUIsQ0FBQztTQUNLLENBQUMsQ0FBQztRQUNWLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsZUFBc0IsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsaUJBQXdCLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGNBQXFCLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxZQUFtQixDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBVyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBVyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBZ0IsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQWEsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQWtCLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGVBQXNCLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGVBQXNCLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGdCQUF1QixDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxnQkFBdUIsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsb0JBQTJCLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFnQixDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsWUFBbUIsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMscUJBQTRCLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGVBQXNCLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFvQixDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxtQkFBMEIsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsZUFBc0IsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsZUFBc0IsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQW9CLENBQUMsQ0FBQztJQUNuRCxDQUFDOzs2SEF6SlUsZ0NBQWdDLGtCQTRDakMsNEJBQTRCO2lIQTVDM0IsZ0NBQWdDLHlyQ0FDWixnQkFBZ0Isa0RDeENqRCw4dEJBS007MkZEa0NPLGdDQUFnQztrQkFMNUMsU0FBUzsrQkFDRSxnQ0FBZ0MsUUFFcEMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFOzswQkE4QzNCLE1BQU07MkJBQUMsNEJBQTRCOzRFQTNDYSxRQUFRO3NCQUExRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFFeEMsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBRUcsYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgSW5qZWN0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50UmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRFU1RfQ0FTRV9TVEVQX0NPTVBPTkVOVF9NQVAsIFRlc3RDYXNlU3RlcENvbXBvbmVudE1hcCB9IGZyb20gJy4uL3Rlc3QtY2FzZS1zdGVwLWNvbXBvbmVudHMudG9rZW4nO1xuaW1wb3J0IHtcbiAgVGVzdENhc2VTdGVwQ29uZmlnLFxuICBpc1N0ZXBHcm91cENvbmZpZyxcbiAgaXNDb25kaXRpb25TdGVwQ29uZmlnLFxuICBpc0xvb3BTdGVwQ29uZmlnLFxuICBpc05vcm1hbFN0ZXBDb25maWcsXG4gIGlzQXBpU3RlcENvbmZpZyxcbiAgaXNEYXRhYmFzZVN0ZXBDb25maWcsXG4gIGlzQWlBZ2VudFN0ZXBDb25maWcsXG4gIGlzQWlWZXJpZnlTdGVwQ29uZmlnLFxuICBpc1VwbG9hZFN0ZXBDb25maWcsXG4gIGlzU2NyZWVuc2hvdFN0ZXBDb25maWcsXG4gIGlzU2Nyb2xsU3RlcENvbmZpZyxcbiAgaXNWZXJpZnlVcmxTdGVwQ29uZmlnLFxuICBpc1Jlc3RvcmVTZXNzaW9uU3RlcENvbmZpZyxcbiAgaXNDdXN0b21Db2RlU3RlcENvbmZpZyxcbiAgQ29uZGl0aW9uQnJhbmNoLFxufSBmcm9tICcuLi90ZXN0LWNhc2Utc3RlcC5tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtdGVzdC1jYXNlLWRldGFpbHMtcmVuZGVyZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vdGVzdC1jYXNlLWRldGFpbHMtcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH0sXG59KVxuZXhwb3J0IGNsYXNzIFRlc3RDYXNlRGV0YWlsc1JlbmRlcmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgnc3RlcEhvc3QnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgc3RlcEhvc3QhOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gIEBJbnB1dCgpIHN0ZXAhOiBUZXN0Q2FzZVN0ZXBDb25maWc7XG4gIEBJbnB1dCgpIGluZGV4ITogbnVtYmVyO1xuICBASW5wdXQoKSBpc05lc3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0luc2lkZUxvb3A6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIFdoZW4gcmVuZGVyaW5nIGEgc3RlcCBpbnNpZGUgYSBjb25kaXRpb24gYnJhbmNoLCB0aGUgYnJhbmNoIGNvbnRleHQgKGZvciBhZGRTdGVwRm9yQnJhbmNoIC8gZGVsZXRlU3RlcFdpdGhCcmFuY2gpLiAqL1xuICBASW5wdXQoKSBicmFuY2g/OiBDb25kaXRpb25CcmFuY2g7XG4gIC8qKiBXaGVuIHRydWUsIGVuYWJsZXMgZHJhZy1hbmQtZHJvcCByZW9yZGVyaW5nIGFuZCBzaG93cyBkcmFnIGhhbmRsZSBpY29uIGluc3RlYWQgb2YgY2hlY2tib3ggKi9cbiAgQElucHV0KCkgaXNSZW9yZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIG5lc3RlZFN0ZXBDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnOyBpbmRleDogbnVtYmVyIH0+KCk7XG4gIEBPdXRwdXQoKSBhZGRTdGVwID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZGVsZXRlU3RlcCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgdG9nZ2xlRXhwYW5kZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4gfCB7Y29uZmlnOiBUZXN0Q2FzZVN0ZXBDb25maWcsIGV4cGFuZGVkOiBib29sZWFufT4oKTtcbiAgQE91dHB1dCgpIGdyb3VwTmFtZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgZGVzY3JpcHRpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHJldXNhYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgb3BlbkV4dGVybmFsID0gbmV3IEV2ZW50RW1pdHRlcjx7c3RlcDogVGVzdENhc2VTdGVwQ29uZmlnfT4oKTtcbiAgQE91dHB1dCgpIGVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBsaW5rID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZHVwbGljYXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgdmlld0RldGFpbHMgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBjb25kaXRpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGJyYW5jaFN0ZXBDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgYnJhbmNoOiBDb25kaXRpb25CcmFuY2g7IHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZzsgc3RlcEluZGV4OiBudW1iZXIgfT4oKTtcbiAgQE91dHB1dCgpIGFkZFN0ZXBGb3JCcmFuY2ggPSBuZXcgRXZlbnRFbWl0dGVyPHsgYnJhbmNoOiBDb25kaXRpb25CcmFuY2ggfT4oKTtcbiAgQE91dHB1dCgpIGRlbGV0ZVN0ZXBXaXRoQnJhbmNoID0gbmV3IEV2ZW50RW1pdHRlcjx7IGJyYW5jaDogQ29uZGl0aW9uQnJhbmNoOyBzdGVwSW5kZXg6IG51bWJlciB9PigpO1xuICBAT3V0cHV0KCkgYWRkQnJhbmNoID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZGVsZXRlQnJhbmNoID0gbmV3IEV2ZW50RW1pdHRlcjxDb25kaXRpb25CcmFuY2g+KCk7XG4gIEBPdXRwdXQoKSB0ZXN0RGF0YVByb2ZpbGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHN0YXJ0U3RlcENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgZW5kU3RlcENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgbWF4SXRlcmF0aW9uc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgZXZlbnRUeXBlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBwYXJhbWV0ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiBhIHN0ZXAgaXMgZHJvcHBlZCBpbiBhIG5lc3RlZCBkcm9wem9uZSAoc3RlcC1ncm91cCwgbG9vcCwgY29uZGl0aW9uKS4gUGF5bG9hZDogeyBldmVudCwgdGFyZ2V0TGlzdCB9LiAqL1xuICBAT3V0cHV0KCkgZG5kRHJvcEluWm9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogYW55OyB0YXJnZXRMaXN0OiBUZXN0Q2FzZVN0ZXBDb25maWdbXSB9PigpO1xuXG4gIHByaXZhdGUgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoVEVTVF9DQVNFX1NURVBfQ09NUE9ORU5UX01BUCkgcHJpdmF0ZSBjb21wb25lbnRNYXA6IFRlc3RDYXNlU3RlcENvbXBvbmVudE1hcCxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlclN0ZXAoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snc3RlcCddIHx8IGNoYW5nZXNbJ2luZGV4J10gfHwgY2hhbmdlc1snaXNOZXN0ZWQnXSB8fCBjaGFuZ2VzWydpc0luc2lkZUxvb3AnXSB8fCBjaGFuZ2VzWydpc1Jlb3JkZXInXSkge1xuICAgICAgdGhpcy5yZW5kZXJTdGVwKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb21wb25lbnRUeXBlKHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyk6IGFueSB7XG4gICAgaWYgKGlzU3RlcEdyb3VwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAuc3RlcEdyb3VwO1xuICAgIGlmIChpc0NvbmRpdGlvblN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5jb25kaXRpb25TdGVwO1xuICAgIGlmIChpc0xvb3BTdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAubG9vcFN0ZXA7XG4gICAgaWYgKGlzQXBpU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLmFwaVN0ZXA7XG4gICAgaWYgKGlzRGF0YWJhc2VTdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAuZGF0YWJhc2VTdGVwO1xuICAgIGlmIChpc0FpQWdlbnRTdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAuYWlBZ2VudFN0ZXA7XG4gICAgaWYgKGlzQWlWZXJpZnlTdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAuYWlWZXJpZnlTdGVwO1xuICAgIGlmIChpc1VwbG9hZFN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC51cGxvYWRTdGVwO1xuICAgIGlmIChpc1NjcmVlbnNob3RTdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAuc2NyZWVuc2hvdFN0ZXA7XG4gICAgaWYgKGlzU2Nyb2xsU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLnNjcm9sbFN0ZXA7XG4gICAgaWYgKGlzVmVyaWZ5VXJsU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLnZlcmlmeVVybFN0ZXA7XG4gICAgaWYgKGlzUmVzdG9yZVNlc3Npb25TdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAucmVzdG9yZVNlc3Npb25TdGVwO1xuICAgIGlmIChpc0N1c3RvbUNvZGVTdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAuY3VzdG9tQ29kZVN0ZXA7XG4gICAgaWYgKGlzTm9ybWFsU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLm5vcm1hbFN0ZXA7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclN0ZXAoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnN0ZXBIb3N0IHx8ICF0aGlzLnN0ZXApIHJldHVybjtcblxuICAgIGNvbnN0IGNvbXBvbmVudFR5cGUgPSB0aGlzLmdldENvbXBvbmVudFR5cGUodGhpcy5zdGVwKTtcbiAgICBpZiAoIWNvbXBvbmVudFR5cGUpIHJldHVybjtcblxuICAgIHRoaXMuc3RlcEhvc3QuY2xlYXIoKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMuc3RlcEhvc3QuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudFR5cGUpO1xuICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2U7XG5cbiAgICBpbnN0YW5jZS5jb25maWcgPSB0aGlzLnN0ZXA7XG4gICAgaW5zdGFuY2Uuc3RlcE51bWJlciA9ICh0aGlzLnN0ZXAgYXMgYW55KS5zdGVwTnVtYmVyO1xuICAgIGluc3RhbmNlLmlzTmVzdGVkID0gdGhpcy5pc05lc3RlZDtcbiAgICBpbnN0YW5jZS5pc0luc2lkZUxvb3AgPSB0aGlzLmlzSW5zaWRlTG9vcDtcbiAgICBpbnN0YW5jZS5pc1Jlb3JkZXIgPSB0aGlzLmlzUmVvcmRlcjtcbiAgICBPYmplY3Qua2V5cyh0aGlzLnN0ZXApLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGtleSAhPT0gJ3N0ZXBUeXBlJyAmJiBrZXkgIT09ICduZXN0ZWRTdGVwcycgJiYga2V5ICE9PSAnYnJhbmNoZXMnKSB7XG4gICAgICAgIChpbnN0YW5jZSBhcyBhbnkpW2tleV0gPSAodGhpcy5zdGVwIGFzIGFueSlba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoKHRoaXMuc3RlcCBhcyBhbnkpLm5lc3RlZFN0ZXBzKSAoaW5zdGFuY2UgYXMgYW55KS5uZXN0ZWRTdGVwcyA9ICh0aGlzLnN0ZXAgYXMgYW55KS5uZXN0ZWRTdGVwcztcbiAgICBpZiAoKHRoaXMuc3RlcCBhcyBhbnkpLmJyYW5jaGVzKSAoaW5zdGFuY2UgYXMgYW55KS5icmFuY2hlcyA9ICh0aGlzLnN0ZXAgYXMgYW55KS5icmFuY2hlcztcblxuICAgIHRoaXMud2lyZU91dHB1dHMoaW5zdGFuY2UpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgd2lyZU91dHB1dHMoaW5zdGFuY2U6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHdpcmUgPSAoa2V5OiBzdHJpbmcsIGVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+KSA9PiB7XG4gICAgICBpZiAoaW5zdGFuY2Vba2V5XSAmJiB0eXBlb2YgaW5zdGFuY2Vba2V5XS5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2Vba2V5XS5zdWJzY3JpYmUoKHY6IGFueSkgPT4gZW1pdHRlci5lbWl0KHYpKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdpcmUoJ25lc3RlZFN0ZXBDaGFuZ2UnLCB0aGlzLm5lc3RlZFN0ZXBDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdhZGRTdGVwJywge1xuICAgICAgZW1pdDogKHY6IGFueSkgPT4ge1xuICAgICAgICBpZiAodiAhPSBudWxsICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiAnYnJhbmNoJyBpbiB2KSB0aGlzLmFkZFN0ZXBGb3JCcmFuY2guZW1pdCh2KTtcbiAgICAgICAgZWxzZSB0aGlzLmFkZFN0ZXAuZW1pdCh2KTtcbiAgICAgIH0sXG4gICAgfSBhcyBhbnkpO1xuICAgIHdpcmUoJ2RlbGV0ZVN0ZXAnLCB7XG4gICAgICBlbWl0OiAodjogYW55KSA9PiB7XG4gICAgICAgIGlmICh2ICE9IG51bGwgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICdicmFuY2gnIGluIHYgJiYgJ3N0ZXBJbmRleCcgaW4gdikgdGhpcy5kZWxldGVTdGVwV2l0aEJyYW5jaC5lbWl0KHYpO1xuICAgICAgICBlbHNlIHRoaXMuZGVsZXRlU3RlcC5lbWl0KHYpO1xuICAgICAgfSxcbiAgICB9IGFzIGFueSk7XG4gICAgd2lyZSgndG9nZ2xlRXhwYW5kZWQnLCB7XG4gICAgICBlbWl0OiAodjogYW55KSA9PiB7XG4gICAgICAgIC8vIEhhbmRsZSBib3RoIGJvb2xlYW4gYW5kIG9iamVjdCBmb3JtYXRzXG4gICAgICAgIC8vIElmIGl0J3MgYW4gb2JqZWN0IHdpdGggY29uZmlnIGFuZCBleHBhbmRlZCwgZW1pdCBpdCBhcy1pc1xuICAgICAgICAvLyBJZiBpdCdzIGp1c3QgYSBib29sZWFuLCBlbWl0IGl0IGFzLWlzXG4gICAgICAgIHRoaXMudG9nZ2xlRXhwYW5kZWQuZW1pdCh2KTtcbiAgICAgIH0sXG4gICAgfSBhcyBhbnkpO1xuICAgIHdpcmUoJ2dyb3VwTmFtZUNoYW5nZScsIHRoaXMuZ3JvdXBOYW1lQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnZGVzY3JpcHRpb25DaGFuZ2UnLCB0aGlzLmRlc2NyaXB0aW9uQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgncmV1c2FibGVDaGFuZ2UnLCB0aGlzLnJldXNhYmxlQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnb3BlbkV4dGVybmFsJywgdGhpcy5vcGVuRXh0ZXJuYWwgYXMgYW55KTtcbiAgICB3aXJlKCdlZGl0JywgdGhpcy5lZGl0IGFzIGFueSk7XG4gICAgd2lyZSgnbGluaycsIHRoaXMubGluayBhcyBhbnkpO1xuICAgIHdpcmUoJ2R1cGxpY2F0ZScsIHRoaXMuZHVwbGljYXRlIGFzIGFueSk7XG4gICAgd2lyZSgnZGVsZXRlJywgdGhpcy5kZWxldGUgYXMgYW55KTtcbiAgICB3aXJlKCd2aWV3RGV0YWlscycsIHRoaXMudmlld0RldGFpbHMgYXMgYW55KTtcbiAgICB3aXJlKCdzZWxlY3Rpb25DaGFuZ2UnLCB0aGlzLnNlbGVjdGlvbkNoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ2NvbmRpdGlvbkNoYW5nZScsIHRoaXMuY29uZGl0aW9uQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnYnJhbmNoU3RlcENoYW5nZScsIHRoaXMuYnJhbmNoU3RlcENoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ2FkZFN0ZXBGb3JCcmFuY2gnLCB0aGlzLmFkZFN0ZXBGb3JCcmFuY2ggYXMgYW55KTtcbiAgICB3aXJlKCdkZWxldGVTdGVwV2l0aEJyYW5jaCcsIHRoaXMuZGVsZXRlU3RlcFdpdGhCcmFuY2ggYXMgYW55KTtcbiAgICB3aXJlKCdhZGRCcmFuY2gnLCB0aGlzLmFkZEJyYW5jaCBhcyBhbnkpO1xuICAgIHdpcmUoJ2RlbGV0ZUJyYW5jaCcsIHRoaXMuZGVsZXRlQnJhbmNoIGFzIGFueSk7XG4gICAgd2lyZSgndGVzdERhdGFQcm9maWxlQ2hhbmdlJywgdGhpcy50ZXN0RGF0YVByb2ZpbGVDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdzdGFydFN0ZXBDaGFuZ2UnLCB0aGlzLnN0YXJ0U3RlcENoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ2VuZFN0ZXBDaGFuZ2UnLCB0aGlzLmVuZFN0ZXBDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdtYXhJdGVyYXRpb25zQ2hhbmdlJywgdGhpcy5tYXhJdGVyYXRpb25zQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnZXZlbnRUeXBlQ2hhbmdlJywgdGhpcy5ldmVudFR5cGVDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdwYXJhbWV0ZXJDaGFuZ2UnLCB0aGlzLnBhcmFtZXRlckNoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ2RuZERyb3BJblpvbmUnLCB0aGlzLmRuZERyb3BJblpvbmUgYXMgYW55KTtcbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiY3FhLXJlbGF0aXZlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAjc3RlcEhvc3Q+PC9uZy1jb250YWluZXI+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImNxYS1hYnNvbHV0ZSBjcWEtdG9wLVtjYWxjKDEwMCUtMTJweCldIGNxYS1sZWZ0LVs1MCVdIGNxYS10cmFuc2xhdGUteC1bLTUwJV0gY3FhLXAtMCBjcWEtei1bMV0gY3FhLWhpZGRlblwiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCB4PVwiMVwiIHk9XCIxXCIgd2lkdGg9XCIyMS4xODIyXCIgaGVpZ2h0PVwiMjJcIiByeD1cIjEwLjU5MTFcIiBmaWxsPVwid2hpdGVcIi8+PHJlY3QgeD1cIjFcIiB5PVwiMVwiIHdpZHRoPVwiMjEuMTgyMlwiIGhlaWdodD1cIjIyXCIgcng9XCIxMC41OTExXCIgc3Ryb2tlPVwiIzNGNDNFRVwiIHN0cm9rZS13aWR0aD1cIjJcIi8+PHBhdGggZD1cIk04LjUgMTJIMTUuNVwiIHN0cm9rZT1cIiMzRjQzRUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk0xMiA4LjVWMTUuNVwiIHN0cm9rZT1cIiMzRjQzRUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgPC9idXR0b24+XG48L2Rpdj4iXX0=
254
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jYXNlLWRldGFpbHMtcmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy90ZXN0LWNhc2UtZGV0YWlscy1yZW5kZXJlci90ZXN0LWNhc2UtZGV0YWlscy1yZW5kZXJlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL3Rlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyL3Rlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUNULGdCQUFnQixFQUdoQixNQUFNLEdBSVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLDRCQUE0QixFQUE0QixNQUFNLG9DQUFvQyxDQUFDO0FBQzVHLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLG9CQUFvQixFQUNwQixtQkFBbUIsRUFDbkIsb0JBQW9CLEVBQ3BCLGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUNyQiwwQkFBMEIsRUFDMUIsc0JBQXNCLEdBRXZCLE1BQU0sMEJBQTBCLENBQUM7OztBQU9sQyxNQUFNLE9BQU8sZ0NBQWdDO0lBOEMzQyxZQUNnRCxZQUFzQyxFQUM1RSxHQUFzQjtRQURnQixpQkFBWSxHQUFaLFlBQVksQ0FBMEI7UUFDNUUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUEzQ3ZCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFHdkMsaUdBQWlHO1FBQ3hGLGNBQVMsR0FBWSxLQUFL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UUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFFRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgSW5qZWN0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50UmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRFU1RfQ0FTRV9TVEVQX0NPTVBPTkVOVF9NQVAsIFRlc3RDYXNlU3RlcENvbXBvbmVudE1hcCB9IGZyb20gJy4uL3Rlc3QtY2FzZS1zdGVwLWNvbXBvbmVudHMudG9rZW4nO1xuaW1wb3J0IHtcbiAgVGVzdENhc2VTdGVwQ29uZmlnLFxuICBpc1N0ZXBHcm91cENvbmZpZyxcbiAgaXNDb25kaXRpb25TdGVwQ29uZmlnLFxuICBpc0xvb3BTdGVwQ29uZmlnLFxuICBpc05vcm1hbFN0ZXBDb25maWcsXG4gIGlzQXBpU3RlcENvbmZpZyxcbiAgaXNEYXRhYmFzZVN0ZXBDb25maWcsXG4gIGlzQWlBZ2VudFN0ZXBDb25maWcsXG4gIGlzQWlWZXJpZnlTdGVwQ29uZmlnLFxuICBpc1VwbG9hZFN0ZXBDb25maWcsXG4gIGlzU2NyZWVuc2hvdFN0ZXBDb25maWcsXG4gIGlzU2Nyb2xsU3RlcENvbmZpZyxcbiAgaXNWZXJpZnlVcmxTdGVwQ29uZmlnLFxuICBpc1Jlc3RvcmVTZXNzaW9uU3RlcENvbmZpZyxcbiAgaXNDdXN0b21Db2RlU3RlcENvbmZpZyxcbiAgQ29uZGl0aW9uQnJhbmNoLFxufSBmcm9tICcuLi90ZXN0LWNhc2Utc3RlcC5tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtdGVzdC1jYXNlLWRldGFpbHMtcmVuZGVyZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vdGVzdC1jYXNlLWRldGFpbHMtcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH0sXG59KVxuZXhwb3J0IGNsYXNzIFRlc3RDYXNlRGV0YWlsc1JlbmRlcmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgnc3RlcEhvc3QnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgc3RlcEhvc3QhOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gIEBJbnB1dCgpIHN0ZXAhOiBUZXN0Q2FzZVN0ZXBDb25maWc7XG4gIEBJbnB1dCgpIGluZGV4ITogbnVtYmVyO1xuICBASW5wdXQoKSBpc05lc3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0luc2lkZUxvb3A6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIFdoZW4gcmVuZGVyaW5nIGEgc3RlcCBpbnNpZGUgYSBjb25kaXRpb24gYnJhbmNoLCB0aGUgYnJhbmNoIGNvbnRleHQgKGZvciBhZGRTdGVwRm9yQnJhbmNoIC8gZGVsZXRlU3RlcFdpdGhCcmFuY2gpLiAqL1xuICBASW5wdXQoKSBicmFuY2g/OiBDb25kaXRpb25CcmFuY2g7XG4gIC8qKiBXaGVuIHRydWUsIGVuYWJsZXMgZHJhZy1hbmQtZHJvcCByZW9yZGVyaW5nIGFuZCBzaG93cyBkcmFnIGhhbmRsZSBpY29uIGluc3RlYWQgb2YgY2hlY2tib3ggKi9cbiAgQElucHV0KCkgaXNSZW9yZGVyOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFkZFN0ZXBCZXR3ZWVuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIG5lc3RlZFN0ZXBDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnOyBpbmRleDogbnVtYmVyIH0+KCk7XG4gIEBPdXRwdXQoKSBhZGRTdGVwID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZGVsZXRlU3RlcCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgdG9nZ2xlRXhwYW5kZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4gfCB7Y29uZmlnOiBUZXN0Q2FzZVN0ZXBDb25maWcsIGV4cGFuZGVkOiBib29sZWFufT4oKTtcbiAgQE91dHB1dCgpIGdyb3VwTmFtZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgZGVzY3JpcHRpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHJldXNhYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgb3BlbkV4dGVybmFsID0gbmV3IEV2ZW50RW1pdHRlcjx7c3RlcDogVGVzdENhc2VTdGVwQ29uZmlnfT4oKTtcbiAgQE91dHB1dCgpIGVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBsaW5rID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZHVwbGljYXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgdmlld0RldGFpbHMgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBjb25kaXRpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGJyYW5jaFN0ZXBDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgYnJhbmNoOiBDb25kaXRpb25CcmFuY2g7IHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZzsgc3RlcEluZGV4OiBudW1iZXIgfT4oKTtcbiAgQE91dHB1dCgpIGFkZFN0ZXBGb3JCcmFuY2ggPSBuZXcgRXZlbnRFbWl0dGVyPHsgYnJhbmNoOiBDb25kaXRpb25CcmFuY2ggfT4oKTtcbiAgQE91dHB1dCgpIGRlbGV0ZVN0ZXBXaXRoQnJhbmNoID0gbmV3IEV2ZW50RW1pdHRlcjx7IGJyYW5jaDogQ29uZGl0aW9uQnJhbmNoOyBzdGVwSW5kZXg6IG51bWJlciB9PigpO1xuICBAT3V0cHV0KCkgYWRkQnJhbmNoID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZGVsZXRlQnJhbmNoID0gbmV3IEV2ZW50RW1pdHRlcjxDb25kaXRpb25CcmFuY2g+KCk7XG4gIEBPdXRwdXQoKSB0ZXN0RGF0YVByb2ZpbGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHN0YXJ0U3RlcENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgZW5kU3RlcENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgbWF4SXRlcmF0aW9uc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgZXZlbnRUeXBlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBwYXJhbWV0ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGNsaWNrQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuICAvKiogRW1pdHRlZCB3aGVuIGEgc3RlcCBpcyBkcm9wcGVkIGluIGEgbmVzdGVkIGRyb3B6b25lIChzdGVwLWdyb3VwLCBsb29wLCBjb25kaXRpb24pLiBQYXlsb2FkOiB7IGV2ZW50LCB0YXJnZXRMaXN0IH0uICovXG4gIEBPdXRwdXQoKSBkbmREcm9wSW5ab25lID0gbmV3IEV2ZW50RW1pdHRlcjx7IGV2ZW50OiBhbnk7IHRhcmdldExpc3Q6IFRlc3RDYXNlU3RlcENvbmZpZ1tdIH0+KCk7XG4gIEBPdXRwdXQoKSBhZGRTdGVwQmV0d2VlbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx7c3RlcDogVGVzdENhc2VTdGVwQ29uZmlnLCBpbmRleDogbnVtYmVyfT4oKTtcblxuICBwcml2YXRlIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPGFueT4gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KFRFU1RfQ0FTRV9TVEVQX0NPTVBPTkVOVF9NQVApIHByaXZhdGUgY29tcG9uZW50TWFwOiBUZXN0Q2FzZVN0ZXBDb21wb25lbnRNYXAsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJTdGVwKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3N0ZXAnXSB8fCBjaGFuZ2VzWydpbmRleCddIHx8IGNoYW5nZXNbJ2lzTmVzdGVkJ10gfHwgY2hhbmdlc1snaXNJbnNpZGVMb29wJ10gfHwgY2hhbmdlc1snaXNSZW9yZGVyJ10pIHtcbiAgICAgIHRoaXMucmVuZGVyU3RlcCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29tcG9uZW50VHlwZShzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWcpOiBhbnkge1xuICAgIGlmIChpc1N0ZXBHcm91cENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLnN0ZXBHcm91cDtcbiAgICBpZiAoaXNDb25kaXRpb25TdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAuY29uZGl0aW9uU3RlcDtcbiAgICBpZiAoaXNMb29wU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLmxvb3BTdGVwO1xuICAgIGlmIChpc0FwaVN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5hcGlTdGVwO1xuICAgIGlmIChpc0RhdGFiYXNlU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLmRhdGFiYXNlU3RlcDtcbiAgICBpZiAoaXNBaUFnZW50U3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLmFpQWdlbnRTdGVwO1xuICAgIGlmIChpc0FpVmVyaWZ5U3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLmFpVmVyaWZ5U3RlcDtcbiAgICBpZiAoaXNVcGxvYWRTdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAudXBsb2FkU3RlcDtcbiAgICBpZiAoaXNTY3JlZW5zaG90U3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLnNjcmVlbnNob3RTdGVwO1xuICAgIGlmIChpc1Njcm9sbFN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5zY3JvbGxTdGVwO1xuICAgIGlmIChpc1ZlcmlmeVVybFN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC52ZXJpZnlVcmxTdGVwO1xuICAgIGlmIChpc1Jlc3RvcmVTZXNzaW9uU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLnJlc3RvcmVTZXNzaW9uU3RlcDtcbiAgICBpZiAoaXNDdXN0b21Db2RlU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLmN1c3RvbUNvZGVTdGVwO1xuICAgIGlmIChpc05vcm1hbFN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5ub3JtYWxTdGVwO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJTdGVwKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zdGVwSG9zdCB8fCAhdGhpcy5zdGVwKSByZXR1cm47XG5cbiAgICBjb25zdCBjb21wb25lbnRUeXBlID0gdGhpcy5nZXRDb21wb25lbnRUeXBlKHRoaXMuc3RlcCk7XG4gICAgaWYgKCFjb21wb25lbnRUeXBlKSByZXR1cm47XG5cbiAgICB0aGlzLnN0ZXBIb3N0LmNsZWFyKCk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLnN0ZXBIb3N0LmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRUeXBlKTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlO1xuXG4gICAgaW5zdGFuY2UuY29uZmlnID0gdGhpcy5zdGVwO1xuICAgIGluc3RhbmNlLnN0ZXBOdW1iZXIgPSAodGhpcy5zdGVwIGFzIGFueSkuc3RlcE51bWJlcjtcbiAgICBpbnN0YW5jZS5pc05lc3RlZCA9IHRoaXMuaXNOZXN0ZWQ7XG4gICAgaW5zdGFuY2UuaXNJbnNpZGVMb29wID0gdGhpcy5pc0luc2lkZUxvb3A7XG4gICAgaW5zdGFuY2UuaXNSZW9yZGVyID0gdGhpcy5pc1Jlb3JkZXI7XG4gICAgT2JqZWN0LmtleXModGhpcy5zdGVwKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmIChrZXkgIT09ICdzdGVwVHlwZScgJiYga2V5ICE9PSAnbmVzdGVkU3RlcHMnICYmIGtleSAhPT0gJ2JyYW5jaGVzJykge1xuICAgICAgICAoaW5zdGFuY2UgYXMgYW55KVtrZXldID0gKHRoaXMuc3RlcCBhcyBhbnkpW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCh0aGlzLnN0ZXAgYXMgYW55KS5uZXN0ZWRTdGVwcykgKGluc3RhbmNlIGFzIGFueSkubmVzdGVkU3RlcHMgPSAodGhpcy5zdGVwIGFzIGFueSkubmVzdGVkU3RlcHM7XG4gICAgaWYgKCh0aGlzLnN0ZXAgYXMgYW55KS5icmFuY2hlcykgKGluc3RhbmNlIGFzIGFueSkuYnJhbmNoZXMgPSAodGhpcy5zdGVwIGFzIGFueSkuYnJhbmNoZXM7XG5cbiAgICB0aGlzLndpcmVPdXRwdXRzKGluc3RhbmNlKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIHdpcmVPdXRwdXRzKGluc3RhbmNlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCB3aXJlID0gKGtleTogc3RyaW5nLCBlbWl0dGVyOiBFdmVudEVtaXR0ZXI8YW55PikgPT4ge1xuICAgICAgaWYgKGluc3RhbmNlW2tleV0gJiYgdHlwZW9mIGluc3RhbmNlW2tleV0uc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGluc3RhbmNlW2tleV0uc3Vic2NyaWJlKCh2OiBhbnkpID0+IGVtaXR0ZXIuZW1pdCh2KSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aXJlKCduZXN0ZWRTdGVwQ2hhbmdlJywgdGhpcy5uZXN0ZWRTdGVwQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnYWRkU3RlcCcsIHtcbiAgICAgIGVtaXQ6ICh2OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHYgIT0gbnVsbCAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgJ2JyYW5jaCcgaW4gdikgdGhpcy5hZGRTdGVwRm9yQnJhbmNoLmVtaXQodik7XG4gICAgICAgIGVsc2UgdGhpcy5hZGRTdGVwLmVtaXQodik7XG4gICAgICB9LFxuICAgIH0gYXMgYW55KTtcbiAgICB3aXJlKCdkZWxldGVTdGVwJywge1xuICAgICAgZW1pdDogKHY6IGFueSkgPT4ge1xuICAgICAgICBpZiAodiAhPSBudWxsICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiAnYnJhbmNoJyBpbiB2ICYmICdzdGVwSW5kZXgnIGluIHYpIHRoaXMuZGVsZXRlU3RlcFdpdGhCcmFuY2guZW1pdCh2KTtcbiAgICAgICAgZWxzZSB0aGlzLmRlbGV0ZVN0ZXAuZW1pdCh2KTtcbiAgICAgIH0sXG4gICAgfSBhcyBhbnkpO1xuICAgIHdpcmUoJ3RvZ2dsZUV4cGFuZGVkJywge1xuICAgICAgZW1pdDogKHY6IGFueSkgPT4ge1xuICAgICAgICAvLyBIYW5kbGUgYm90aCBib29sZWFuIGFuZCBvYmplY3QgZm9ybWF0c1xuICAgICAgICAvLyBJZiBpdCdzIGFuIG9iamVjdCB3aXRoIGNvbmZpZyBhbmQgZXhwYW5kZWQsIGVtaXQgaXQgYXMtaXNcbiAgICAgICAgLy8gSWYgaXQncyBqdXN0IGEgYm9vbGVhbiwgZW1pdCBpdCBhcy1pc1xuICAgICAgICB0aGlzLnRvZ2dsZUV4cGFuZGVkLmVtaXQodik7XG4gICAgICB9LFxuICAgIH0gYXMgYW55KTtcbiAgICB3aXJlKCdncm91cE5hbWVDaGFuZ2UnLCB0aGlzLmdyb3VwTmFtZUNoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ2Rlc2NyaXB0aW9uQ2hhbmdlJywgdGhpcy5kZXNjcmlwdGlvbkNoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ3JldXNhYmxlQ2hhbmdlJywgdGhpcy5yZXVzYWJsZUNoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ29wZW5FeHRlcm5hbCcsIHRoaXMub3BlbkV4dGVybmFsIGFzIGFueSk7XG4gICAgd2lyZSgnZWRpdCcsIHRoaXMuZWRpdCBhcyBhbnkpO1xuICAgIHdpcmUoJ2xpbmsnLCB0aGlzLmxpbmsgYXMgYW55KTtcbiAgICB3aXJlKCdkdXBsaWNhdGUnLCB0aGlzLmR1cGxpY2F0ZSBhcyBhbnkpO1xuICAgIHdpcmUoJ2RlbGV0ZScsIHRoaXMuZGVsZXRlIGFzIGFueSk7XG4gICAgd2lyZSgndmlld0RldGFpbHMnLCB0aGlzLnZpZXdEZXRhaWxzIGFzIGFueSk7XG4gICAgd2lyZSgnc2VsZWN0aW9uQ2hhbmdlJywgdGhpcy5zZWxlY3Rpb25DaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdjb25kaXRpb25DaGFuZ2UnLCB0aGlzLmNvbmRpdGlvbkNoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ2JyYW5jaFN0ZXBDaGFuZ2UnLCB0aGlzLmJyYW5jaFN0ZXBDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdhZGRTdGVwRm9yQnJhbmNoJywgdGhpcy5hZGRTdGVwRm9yQnJhbmNoIGFzIGFueSk7XG4gICAgd2lyZSgnZGVsZXRlU3RlcFdpdGhCcmFuY2gnLCB0aGlzLmRlbGV0ZVN0ZXBXaXRoQnJhbmNoIGFzIGFueSk7XG4gICAgd2lyZSgnYWRkQnJhbmNoJywgdGhpcy5hZGRCcmFuY2ggYXMgYW55KTtcbiAgICB3aXJlKCdkZWxldGVCcmFuY2gnLCB0aGlzLmRlbGV0ZUJyYW5jaCBhcyBhbnkpO1xuICAgIHdpcmUoJ3Rlc3REYXRhUHJvZmlsZUNoYW5nZScsIHRoaXMudGVzdERhdGFQcm9maWxlQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnc3RhcnRTdGVwQ2hhbmdlJywgdGhpcy5zdGFydFN0ZXBDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdlbmRTdGVwQ2hhbmdlJywgdGhpcy5lbmRTdGVwQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnbWF4SXRlcmF0aW9uc0NoYW5nZScsIHRoaXMubWF4SXRlcmF0aW9uc0NoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ2V2ZW50VHlwZUNoYW5nZScsIHRoaXMuZXZlbnRUeXBlQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgncGFyYW1ldGVyQ2hhbmdlJywgdGhpcy5wYXJhbWV0ZXJDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdjbGlja0FjdGlvbicsIHRoaXMuY2xpY2tBY3Rpb24gYXMgYW55KTtcbiAgICB3aXJlKCdkbmREcm9wSW5ab25lJywgdGhpcy5kbmREcm9wSW5ab25lIGFzIGFueSk7XG4gICAgd2lyZSgnYWRkU3RlcEJldHdlZW5DbGljaycsIHRoaXMuYWRkU3RlcEJldHdlZW5DbGljayBhcyBhbnkpO1xuICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJjcWEtcmVsYXRpdmVcIj5cbiAgICA8YnV0dG9uICpuZ0lmPVwiYWRkU3RlcEJldHdlZW5cIiBjbGFzcz1cImNxYS1hYnNvbHV0ZSBjcWEtdG9wLVtjYWxjKDEwMCUtMTJweCldIGNxYS1sZWZ0LVs1MCVdIGNxYS10cmFuc2xhdGUteC1bLTUwJV0gY3FhLXAtMCBjcWEtei1bMV1cIiAoY2xpY2spPVwiYWRkU3RlcEJldHdlZW5DbGljay5lbWl0KHtzdGVwOiBzdGVwLCBpbmRleDogaW5kZXh9KVwiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCB4PVwiMVwiIHk9XCIxXCIgd2lkdGg9XCIyMS4xODIyXCIgaGVpZ2h0PVwiMjJcIiByeD1cIjEwLjU5MTFcIiBmaWxsPVwid2hpdGVcIi8+PHJlY3QgeD1cIjFcIiB5PVwiMVwiIHdpZHRoPVwiMjEuMTgyMlwiIGhlaWdodD1cIjIyXCIgcng9XCIxMC41OTExXCIgc3Ryb2tlPVwiIzNGNDNFRVwiIHN0cm9rZS13aWR0aD1cIjJcIi8+PHBhdGggZD1cIk04LjUgMTJIMTUuNVwiIHN0cm9rZT1cIiMzRjQzRUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk0xMiA4LjVWMTUuNVwiIHN0cm9rZT1cIiMzRjQzRUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgPC9idXR0b24+XG4gICAgPG5nLWNvbnRhaW5lciAjc3RlcEhvc3Q+PC9uZy1jb250YWluZXI+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImFkZFN0ZXBCZXR3ZWVuXCIgY2xhc3M9XCJjcWEtYWJzb2x1dGUgY3FhLXRvcC1bY2FsYygxMDAlLTEycHgpXSBjcWEtbGVmdC1bNTAlXSBjcWEtdHJhbnNsYXRlLXgtWy01MCVdIGNxYS1wLTAgY3FhLXotWzFdXCIgKGNsaWNrKT1cImFkZFN0ZXBCZXR3ZWVuQ2xpY2suZW1pdCh7c3RlcDogc3RlcCwgaW5kZXg6IGluZGV4fSlcIj5cbiAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3QgeD1cIjFcIiB5PVwiMVwiIHdpZHRoPVwiMjEuMTgyMlwiIGhlaWdodD1cIjIyXCIgcng9XCIxMC41OTExXCIgZmlsbD1cIndoaXRlXCIvPjxyZWN0IHg9XCIxXCIgeT1cIjFcIiB3aWR0aD1cIjIxLjE4MjJcIiBoZWlnaHQ9XCIyMlwiIHJ4PVwiMTAuNTkxMVwiIHN0cm9rZT1cIiMzRjQzRUVcIiBzdHJva2Utd2lkdGg9XCIyXCIvPjxwYXRoIGQ9XCJNOC41IDEySDE1LjVcIiBzdHJva2U9XCIjM0Y0M0VFXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNMTIgOC41VjE1LjVcIiBzdHJva2U9XCIjM0Y0M0VFXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuPC9kaXY+Il19
@@ -64,4 +64,4 @@ export function isRestoreSessionStepConfig(step) {
64
64
  export function isCustomCodeStepConfig(step) {
65
65
  return step != null && 'stepType' in step && step.stepType === StepTypes.CUSTOM_CODE;
66
66
  }
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jYXNlLXN0ZXAubW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy90ZXN0LWNhc2Utc3RlcC5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFLSCxNQUFNLENBQU4sSUFBWSxTQWtCWDtBQWxCRCxXQUFZLFNBQVM7SUFDbkIsOEJBQWlCLENBQUE7SUFDakIsd0JBQVcsQ0FBQTtJQUNYLGtDQUFxQixDQUFBO0lBQ3JCLGtDQUFxQixDQUFBO0lBQ3JCLG9DQUF1QixDQUFBO0lBQ3ZCLDhCQUFpQixDQUFBO0lBQ2pCLHNDQUF5QixDQUFBO0lBQ3pCLHNDQUF5QixDQUFBO0lBQ3pCLGdEQUFtQyxDQUFBO0lBQ25DLHdDQUEyQixDQUFBO0lBQzNCLGtDQUFxQixDQUFBO0lBQ3JCLHNDQUF5QixDQUFBO0lBQ3pCLHNDQUF5QixDQUFBO0lBQ3pCLDRDQUErQixDQUFBO0lBQy9CLDBDQUE2QixDQUFBO0lBQzdCLHNDQUF3QixDQUFBO0lBQ3hCLDhCQUFpQixDQUFBO0FBQ25CLENBQUMsRUFsQlcsU0FBUyxLQUFULFNBQVMsUUFrQnBCO0FBc0tELGlGQUFpRjtBQUNqRixNQUFNLFVBQVUsa0JBQWtCLENBQUMsSUFBd0I7SUFDekQsT0FBTyxJQUFJLElBQUksSUFBSSxJQUFJLFdBQVcsSUFBSSxJQUFJLElBQUksWUFBWSxJQUFJLElBQUksQ0FBQztBQUNyRSxDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLElBQXdCO0lBQ3ZELE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDO0FBQzVDLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQUMsSUFBd0I7SUFDNUQsT0FBTyxJQUFJLElBQUksSUFBSSxJQUFJLFdBQVcsSUFBSSxJQUFJLElBQUksVUFBVSxJQUFJLElBQUksQ0FBQztBQUNuRSxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLElBQXdCO0lBQ3hELE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxXQUFXLElBQUksSUFBSSxDQUFDO0FBQzdDLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLElBQXdCO0lBQ3RELE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxVQUFVLElBQUksSUFBSSxJQUFLLElBQXNCLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxHQUFHLENBQUM7QUFDbEcsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxJQUF3QjtJQUMzRCxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksVUFBVSxJQUFJLElBQUksSUFBSyxJQUEyQixDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsUUFBUSxDQUFDO0FBQzVHLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsSUFBd0I7SUFDMUQsT0FBTyxJQUFJLElBQUksSUFBSSxJQUFJLFVBQVUsSUFBSSxJQUFJLElBQUssSUFBMEIsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FBQztBQUMzRyxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLElBQXdCO0lBQzNELE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxVQUFVLElBQUksSUFBSSxJQUFLLElBQTJCLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxTQUFTLENBQUM7QUFDN0csQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxJQUF3QjtJQUN6RCxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksVUFBVSxJQUFJLElBQUksSUFBSyxJQUF5QixDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsTUFBTSxDQUFDO0FBQ3hHLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsSUFBd0I7SUFDN0QsT0FBTyxJQUFJLElBQUksSUFBSSxJQUFJLFVBQVUsSUFBSSxJQUFJLElBQUssSUFBNkIsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLFVBQVUsQ0FBQztBQUNoSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLElBQXdCO0lBQ3pELE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxVQUFVLElBQUksSUFBSSxJQUFLLElBQXlCLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDeEcsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxJQUF3QjtJQUM1RCxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksVUFBVSxJQUFJLElBQUksSUFBSyxJQUE0QixDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsVUFBVSxDQUFDO0FBQy9HLENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsSUFBd0I7SUFDakUsT0FBTyxJQUFJLElBQUksSUFBSSxJQUFJLFVBQVUsSUFBSSxJQUFJLElBQUssSUFBaUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLGVBQWUsQ0FBQztBQUN6SCxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLElBQXdCO0lBQzdELE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxVQUFVLElBQUksSUFBSSxJQUFLLElBQTZCLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxXQUFXLENBQUM7QUFDakgsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kZWxzIGFuZCBpbnRlcmZhY2VzIGZvciB0ZXN0IGNhc2UgZGV0YWlscyBzdGVwIGNvbXBvbmVudHNcbiAqL1xuXG5leHBvcnQgdHlwZSBUZXN0Q2FzZUV2ZW50VHlwZSA9ICduYXZpZ2F0ZScgfCAnY3VzdG9tJyB8ICdhaS1hZ2VudCcgfCAndHlwZScgfCAnY2xpY2snIHwgJ2RvdWJsZUNsaWNrJyB8ICdwcmVzc0VudGVyJyB8ICdlbnRlcicgfCAndmVyaWZ5JyB8ICd3YWl0JztcblxuXG5leHBvcnQgZW51bSBTdGVwVHlwZXMge1xuICBOT1JNQUwgPSAnTk9STUFMJyxcbiAgQVBJID0gJ0FQSScsXG4gIERBVEFCQVNFID0gJ0RBVEFCQVNFJyxcbiAgQUlfQUdFTlQgPSAnQUlfQUdFTlQnLFxuICBBSV9WRVJJRlkgPSAnQUlfVkVSSUZZJyxcbiAgVVBMT0FEID0gJ1VQTE9BRCcsXG4gIFNDUkVFTlNIT1QgPSAnU0NSRUVOU0hPVCcsXG4gIFZFUklGWV9VUkwgPSAnVkVSSUZZX1VSTCcsXG4gIFJFU1RPUkVfU0VTU0lPTiA9ICdSRVNUT1JFX1NFU1NJT04nLFxuICBDVVNUT01fQ09ERSA9ICdDVVNUT01fQ09ERScsXG4gIEZPUl9MT09QID0gJ0ZPUl9MT09QJyxcbiAgV0hJTEVfTE9PUCA9ICdXSElMRV9MT09QJyxcbiAgQlJFQUtfTE9PUCA9ICdCUkVBS19MT09QJyxcbiAgQ09OVElOVUVfTE9PUCA9ICdDT05USU5VRV9MT09QJyxcbiAgQ09ORElUSU9OX0lGID0gJ0NPTkRJVElPTl9JRicsXG4gIFNURVBfR1JPVVA9ICdTVEVQX0dST1VQJyxcbiAgU0NST0xMID0gJ1NDUk9MTCdcbn1cblxuLy8gZXhwb3J0IHR5cGUgU3RlcFR5cGUgPSBTdGVwVHlwZXMuTk9STUFMIHwgU3RlcFR5cGVzLkFQSSB8IFN0ZXBUeXBlcy5EQVRBQkFTRSB8IFN0ZXBUeXBlcy5BSV9BR0VOVCB8IFN0ZXBUeXBlcy5VUExPQUQgfCBTdGVwVHlwZXMuU0NSRUVOU0hPVCB8IFN0ZXBUeXBlcy5DVVNUT01fQ09ERSB8IFN0ZXBUeXBlcy5GT1JfTE9PUCB8IFN0ZXBUeXBlcy5XSElMRV9MT09QIHwgU3RlcFR5cGVzLkJSRUFLX0xPT1AgfCBTdGVwVHlwZXMuQ09OVElOVUVfTE9PUDtcblxuZXhwb3J0IGludGVyZmFjZSBFdmVudFR5cGVDb25maWcge1xuICB0eXBlOiBUZXN0Q2FzZUV2ZW50VHlwZTtcbiAgbGFiZWw6IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgY29sb3I6IHN0cmluZztcbiAgYmFja2dyb3VuZENvbG9yOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcFBhcmFtZXRlciB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgZGlzcGxheVZhbHVlPzogc3RyaW5nOyAvLyBGb3IgZGlzcGxheSBwdXJwb3NlcyAoZS5nLiwgd2l0aCBxdW90ZXMpXG59XG5cbi8qKiBCYXNlIGludGVyZmFjZSBjb250YWluaW5nIGNvbW1vbiBwcm9wZXJ0aWVzIGZvciBhbGwgc3RlcCBjb25maWd1cmF0aW9ucyAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlU3RlcENvbmZpZyB7XG4gIGlkOiBzdHJpbmc7XG4gIHN0ZXBOdW1iZXI6IG51bWJlciB8IHN0cmluZztcbiAgc3RlcFR5cGU6IFN0ZXBUeXBlcztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHNlbGVjdGVkPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBleHBhbmRlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm9ybWFsU3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgc3RlcFR5cGU6IFN0ZXBUeXBlcy5OT1JNQUw7XG4gIGV2ZW50VHlwZTogVGVzdENhc2VFdmVudFR5cGU7XG4gIHBhcmFtZXRlcnM6IFN0ZXBQYXJhbWV0ZXJbXTtcbn1cblxuLyoqIEFQSSBTdGVwIENvbmZpZ3VyYXRpb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpU3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgc3RlcFR5cGU6IFN0ZXBUeXBlcy5BUEk7XG4gIG1ldGhvZDogJ0dFVCcgfCAnUE9TVCcgfCAnUFVUJyB8ICdERUxFVEUnIHwgJ1BBVENIJztcbiAgZW5kcG9pbnQ6IHN0cmluZztcbiAgYmFzZVVybD86IHN0cmluZztcbiAgcmVxdWVzdEJvZHk/OiBzdHJpbmc7XG4gIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBoZWFkZXJzQ291bnQ/OiBudW1iZXI7XG4gIGhhc0JvZHk/OiBib29sZWFuO1xuICBzYXZlVG8/OiBzdHJpbmc7XG4gIGV4cGVjdGVkU3RhdHVzPzogbnVtYmVyO1xufVxuXG4vKiogRGF0YWJhc2UgU3RlcCBDb25maWd1cmF0aW9uICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlU3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgc3RlcFR5cGU6IFN0ZXBUeXBlcy5EQVRBQkFTRTtcbiAgcXVlcnk6IHN0cmluZztcbiAgZGF0YWJhc2VUeXBlPzogJ215c3FsJyB8ICdwb3N0Z3Jlc3FsJyB8ICdtb25nb2RiJyB8ICdtc3NxbCcgfCAnb3JhY2xlJztcbiAgY29ubmVjdGlvbk5hbWU/OiBzdHJpbmc7XG4gIHNhdmVUbz86IHN0cmluZztcbn1cblxuLyoqIEFJIEFnZW50IFN0ZXAgQ29uZmlndXJhdGlvbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBaUFnZW50U3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgc3RlcFR5cGU6IFN0ZXBUeXBlcy5BSV9BR0VOVDtcbiAgaW5zdHJ1Y3Rpb25zOiBzdHJpbmc7XG59XG5cbi8qKiBBSSBWZXJpZnkgU3RlcCBDb25maWd1cmF0aW9uICovXG5leHBvcnQgaW50ZXJmYWNlIEFpVmVyaWZ5U3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgc3RlcFR5cGU6IFN0ZXBUeXBlcy5BSV9WRVJJRlk7XG4gIGluc3RydWN0aW9uczogc3RyaW5nO1xufVxuXG4vKiogVXBsb2FkIFN0ZXAgQ29uZmlndXJhdGlvbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGxvYWRTdGVwQ29uZmlnIGV4dGVuZHMgQmFzZVN0ZXBDb25maWcge1xuICBzdGVwVHlwZTogU3RlcFR5cGVzLlVQTE9BRDtcbiAgc2VsZWN0b3I6IHN0cmluZztcbiAgZmlsZU5hbWU6IHN0cmluZztcbiAgc291cmNlOiAnRGF0YSBMaWJyYXJ5JyB8ICdMb2NhbCcgfCAnVVJMJztcbiAgc291cmNlUGF0aDogc3RyaW5nO1xufVxuXG4vKiogU2NyZWVuc2hvdCBTdGVwIENvbmZpZ3VyYXRpb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NyZWVuc2hvdFN0ZXBDb25maWcgZXh0ZW5kcyBCYXNlU3RlcENvbmZpZyB7XG4gIHN0ZXBUeXBlOiBTdGVwVHlwZXMuU0NSRUVOU0hPVDtcbiAgbmFtZT86IHN0cmluZztcbiAgZnVsbFBhZ2U/OiBib29sZWFuO1xuICBzZWxlY3Rvcj86IHN0cmluZztcbn1cblxuLyoqIFNjcm9sbCBTdGVwIENvbmZpZ3VyYXRpb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Nyb2xsU3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgc3RlcFR5cGU6IFN0ZXBUeXBlcy5TQ1JPTEw7XG4gIHNlbGVjdG9yOiBzdHJpbmc7XG4gIGRpcmVjdGlvbj86ICd0b3AnIHwgJ2JvdHRvbScgfCAndXAnIHwgJ2Rvd24nIHwgJ2xlZnQnIHwgJ3JpZ2h0JztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKiBWZXJpZnkgVVJMIFN0ZXAgQ29uZmlndXJhdGlvbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlVcmxTdGVwQ29uZmlnIGV4dGVuZHMgQmFzZVN0ZXBDb25maWcge1xuICBzdGVwVHlwZTogU3RlcFR5cGVzLlZFUklGWV9VUkw7XG4gIGFjdGlvbj86IHN0cmluZzsgLy8gZS5nLiwgXCJWZXJpZnkgdGhhdCB0aGUgVVJMIG9mIGN1cnJlbnQgcGFnZSBpc1wiXG4gIHVybD86IHN0cmluZzsgLy8gVGhlIFVSTCB0byB2ZXJpZnlcbn1cblxuLyoqIFJlc3RvcmUgU2Vzc2lvbiBTdGVwIENvbmZpZ3VyYXRpb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdG9yZVNlc3Npb25TdGVwQ29uZmlnIGV4dGVuZHMgQmFzZVN0ZXBDb25maWcge1xuICBzdGVwVHlwZTogU3RlcFR5cGVzLlJFU1RPUkVfU0VTU0lPTjtcbiAgYWN0aW9uPzogc3RyaW5nOyAvLyBBY3Rpb24gdGV4dC9IVE1MIGZvciB0aGUgcmVzdG9yZSBzZXNzaW9uIHN0ZXBcbn1cblxuLyoqIEN1c3RvbSBDb2RlIFN0ZXAgQ29uZmlndXJhdGlvbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXN0b21Db2RlU3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgc3RlcFR5cGU6IFN0ZXBUeXBlcy5DVVNUT01fQ09ERTtcbiAgbGFuZ3VhZ2U6ICdqYXZhc2NyaXB0JyB8ICdweXRob24nIHwgJ3R5cGVzY3JpcHQnO1xuICBjb2RlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9vcFN0ZXBDb25maWcgZXh0ZW5kcyBCYXNlU3RlcENvbmZpZyB7XG4gIGxvb3BUeXBlOiAnZm9yJyB8ICd3aGlsZSc7XG4gIHN0ZXBUeXBlOiBTdGVwVHlwZXMuRk9SX0xPT1AgfCBTdGVwVHlwZXMuV0hJTEVfTE9PUDtcbiAgY29uZGl0aW9uPzogc3RyaW5nOyAvLyBGb3Igd2hpbGUgbG9vcDogXCJXaGlsZSBlbGVtZW50IFxcXCIubm90aWZpY2F0aW9uLWJhZGdlXFxcIiBleGlzdHMgKG1heCA1IGl0ZXJhdGlvbnMpXCJcbiAgbWF4SXRlcmF0aW9ucz86IG51bWJlcjsgLy8gRm9yIHdoaWxlIGxvb3BcbiAgdGVzdERhdGFQcm9maWxlPzogc3RyaW5nOyAvLyBGb3IgZm9yIGxvb3BcbiAgc3RhcnRTdGVwPzogbnVtYmVyO1xuICBlbmRTdGVwPzogbnVtYmVyO1xuICBuZXN0ZWRTdGVwczogVGVzdENhc2VTdGVwQ29uZmlnW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZGl0aW9uQnJhbmNoIHtcbiAgdHlwZTogJ2lmJyB8ICdlbHNlJyB8ICdlbHNlLWlmJztcbiAgc3RlcFR5cGU6IFN0ZXBUeXBlcy5DT05ESVRJT05fSUY7XG4gIGxhYmVsOiBzdHJpbmc7IC8vIGUuZy4sIFwiSUYgVFJVRVwiLCBcIkVMU0VcIlxuICBhY3Rpb24/OiBzdHJpbmc7IC8vIEFjdGlvbiB0ZXh0L0hUTUwgZm9yIHRoZSBicmFuY2ggKGUuZy4sIFwiQ2hlY2sgdGhlIHRleHQgJ0tpc2hhbicgaXMgcHJlc2VudCBvbiB0aGUgY3VycmVudCBwYWdlXCIpXG4gIG5lc3RlZFN0ZXBzOiBUZXN0Q2FzZVN0ZXBDb25maWdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25kaXRpb25TdGVwQ29uZmlnIGV4dGVuZHMgQmFzZVN0ZXBDb25maWcge1xuICBjb25kaXRpb246IHN0cmluZzsgLy8gZS5nLiwgXCJJZiBlbGVtZW50IGAuc3VjY2Vzcy1tZXNzYWdlYCBpcyB2aXNpYmxlXCJcbiAgYnJhbmNoZXM6IENvbmRpdGlvbkJyYW5jaFtdO1xuICBuZXN0ZWRTdGVwczogVGVzdENhc2VTdGVwQ29uZmlnW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcEdyb3VwQ29uZmlnIGV4dGVuZHMgQmFzZVN0ZXBDb25maWcge1xuICBzdGVwR3JvdXBJZDogbnVtYmVyO1xuICBncm91cE5hbWU6IHN0cmluZzsgLy8gZS5nLiwgXCJDaGVja291dCBGbG93XCJcbiAgcmV1c2FibGU/OiBib29sZWFuOyAvLyBXaGV0aGVyIHRoZSBncm91cCBpcyByZXVzYWJsZVxuICBzdGVwVHlwZTogU3RlcFR5cGVzLlNURVBfR1JPVVBcbiAgbmVzdGVkU3RlcHM6IFRlc3RDYXNlU3RlcENvbmZpZ1tdO1xuICBsb2FkaW5nPzogYm9vbGVhbjsgLy8gTG9hZGluZyBzdGF0ZSB3aGVuIGZldGNoaW5nIG5lc3RlZCBzdGVwc1xufVxuXG4vLyBVbmlvbiB0eXBlIGZvciBhbGwgdGVzdCBjYXNlIHN0ZXAgY29uZmlndXJhdGlvbnMgKHN1cHBvcnRzIHJlY3Vyc2l2ZSBuZXN0aW5nKVxuZXhwb3J0IHR5cGUgVGVzdENhc2VTdGVwQ29uZmlnID1cbiAgfCBOb3JtYWxTdGVwQ29uZmlnXG4gIHwgTG9vcFN0ZXBDb25maWdcbiAgfCBDb25kaXRpb25TdGVwQ29uZmlnXG4gIHwgU3RlcEdyb3VwQ29uZmlnXG4gIHwgQXBpU3RlcENvbmZpZ1xuICB8IERhdGFiYXNlU3RlcENvbmZpZ1xuICB8IEFpQWdlbnRTdGVwQ29uZmlnXG4gIHwgQWlWZXJpZnlTdGVwQ29uZmlnXG4gIHwgVXBsb2FkU3RlcENvbmZpZ1xuICB8IFNjcmVlbnNob3RTdGVwQ29uZmlnXG4gIHwgU2Nyb2xsU3RlcENvbmZpZ1xuICB8IFZlcmlmeVVybFN0ZXBDb25maWdcbiAgfCBSZXN0b3JlU2Vzc2lvblN0ZXBDb25maWdcbiAgfCBDdXN0b21Db2RlU3RlcENvbmZpZztcblxuLyoqIFR5cGUgZ3VhcmRzIGZvciBkaXNwYXRjaGluZyBzdGVwIHR5cGUgKGUuZy4gaW4gdGVzdC1jYXNlLWRldGFpbHMtcmVuZGVyZXIpICovXG5leHBvcnQgZnVuY3Rpb24gaXNOb3JtYWxTdGVwQ29uZmlnKHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyk6IHN0ZXAgaXMgTm9ybWFsU3RlcENvbmZpZyB7XG4gIHJldHVybiBzdGVwICE9IG51bGwgJiYgJ2V2ZW50VHlwZScgaW4gc3RlcCAmJiAncGFyYW1ldGVycycgaW4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTG9vcFN0ZXBDb25maWcoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnKTogc3RlcCBpcyBMb29wU3RlcENvbmZpZyB7XG4gIHJldHVybiBzdGVwICE9IG51bGwgJiYgJ2xvb3BUeXBlJyBpbiBzdGVwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb25kaXRpb25TdGVwQ29uZmlnKHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyk6IHN0ZXAgaXMgQ29uZGl0aW9uU3RlcENvbmZpZyB7XG4gIHJldHVybiBzdGVwICE9IG51bGwgJiYgJ2NvbmRpdGlvbicgaW4gc3RlcCAmJiAnYnJhbmNoZXMnIGluIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1N0ZXBHcm91cENvbmZpZyhzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWcpOiBzdGVwIGlzIFN0ZXBHcm91cENvbmZpZyB7XG4gIHJldHVybiBzdGVwICE9IG51bGwgJiYgJ2dyb3VwTmFtZScgaW4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQXBpU3RlcENvbmZpZyhzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWcpOiBzdGVwIGlzIEFwaVN0ZXBDb25maWcge1xuICByZXR1cm4gc3RlcCAhPSBudWxsICYmICdzdGVwVHlwZScgaW4gc3RlcCAmJiAoc3RlcCBhcyBBcGlTdGVwQ29uZmlnKS5zdGVwVHlwZSA9PT0gU3RlcFR5cGVzLkFQSTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YWJhc2VTdGVwQ29uZmlnKHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyk6IHN0ZXAgaXMgRGF0YWJhc2VTdGVwQ29uZmlnIHtcbiAgcmV0dXJuIHN0ZXAgIT0gbnVsbCAmJiAnc3RlcFR5cGUnIGluIHN0ZXAgJiYgKHN0ZXAgYXMgRGF0YWJhc2VTdGVwQ29uZmlnKS5zdGVwVHlwZSA9PT0gU3RlcFR5cGVzLkRBVEFCQVNFO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBaUFnZW50U3RlcENvbmZpZyhzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWcpOiBzdGVwIGlzIEFpQWdlbnRTdGVwQ29uZmlnIHtcbiAgcmV0dXJuIHN0ZXAgIT0gbnVsbCAmJiAnc3RlcFR5cGUnIGluIHN0ZXAgJiYgKHN0ZXAgYXMgQWlBZ2VudFN0ZXBDb25maWcpLnN0ZXBUeXBlID09PSBTdGVwVHlwZXMuQUlfQUdFTlQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0FpVmVyaWZ5U3RlcENvbmZpZyhzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWcpOiBzdGVwIGlzIEFpVmVyaWZ5U3RlcENvbmZpZyB7XG4gIHJldHVybiBzdGVwICE9IG51bGwgJiYgJ3N0ZXBUeXBlJyBpbiBzdGVwICYmIChzdGVwIGFzIEFpVmVyaWZ5U3RlcENvbmZpZykuc3RlcFR5cGUgPT09IFN0ZXBUeXBlcy5BSV9WRVJJRlk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1VwbG9hZFN0ZXBDb25maWcoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnKTogc3RlcCBpcyBVcGxvYWRTdGVwQ29uZmlnIHtcbiAgcmV0dXJuIHN0ZXAgIT0gbnVsbCAmJiAnc3RlcFR5cGUnIGluIHN0ZXAgJiYgKHN0ZXAgYXMgVXBsb2FkU3RlcENvbmZpZykuc3RlcFR5cGUgPT09IFN0ZXBUeXBlcy5VUExPQUQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NjcmVlbnNob3RTdGVwQ29uZmlnKHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyk6IHN0ZXAgaXMgU2NyZWVuc2hvdFN0ZXBDb25maWcge1xuICByZXR1cm4gc3RlcCAhPSBudWxsICYmICdzdGVwVHlwZScgaW4gc3RlcCAmJiAoc3RlcCBhcyBTY3JlZW5zaG90U3RlcENvbmZpZykuc3RlcFR5cGUgPT09IFN0ZXBUeXBlcy5TQ1JFRU5TSE9UO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTY3JvbGxTdGVwQ29uZmlnKHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyk6IHN0ZXAgaXMgU2Nyb2xsU3RlcENvbmZpZyB7XG4gIHJldHVybiBzdGVwICE9IG51bGwgJiYgJ3N0ZXBUeXBlJyBpbiBzdGVwICYmIChzdGVwIGFzIFNjcm9sbFN0ZXBDb25maWcpLnN0ZXBUeXBlID09PSBTdGVwVHlwZXMuU0NST0xMO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWZXJpZnlVcmxTdGVwQ29uZmlnKHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyk6IHN0ZXAgaXMgVmVyaWZ5VXJsU3RlcENvbmZpZyB7XG4gIHJldHVybiBzdGVwICE9IG51bGwgJiYgJ3N0ZXBUeXBlJyBpbiBzdGVwICYmIChzdGVwIGFzIFZlcmlmeVVybFN0ZXBDb25maWcpLnN0ZXBUeXBlID09PSBTdGVwVHlwZXMuVkVSSUZZX1VSTDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVzdG9yZVNlc3Npb25TdGVwQ29uZmlnKHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyk6IHN0ZXAgaXMgUmVzdG9yZVNlc3Npb25TdGVwQ29uZmlnIHtcbiAgcmV0dXJuIHN0ZXAgIT0gbnVsbCAmJiAnc3RlcFR5cGUnIGluIHN0ZXAgJiYgKHN0ZXAgYXMgUmVzdG9yZVNlc3Npb25TdGVwQ29uZmlnKS5zdGVwVHlwZSA9PT0gU3RlcFR5cGVzLlJFU1RPUkVfU0VTU0lPTjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ3VzdG9tQ29kZVN0ZXBDb25maWcoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnKTogc3RlcCBpcyBDdXN0b21Db2RlU3RlcENvbmZpZyB7XG4gIHJldHVybiBzdGVwICE9IG51bGwgJiYgJ3N0ZXBUeXBlJyBpbiBzdGVwICYmIChzdGVwIGFzIEN1c3RvbUNvZGVTdGVwQ29uZmlnKS5zdGVwVHlwZSA9PT0gU3RlcFR5cGVzLkNVU1RPTV9DT0RFO1xufVxuIl19
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jYXNlLXN0ZXAubW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy90ZXN0LWNhc2Utc3RlcC5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFLSCxNQUFNLENBQU4sSUFBWSxTQWtCWDtBQWxCRCxXQUFZLFNBQVM7SUFDbkIsOEJBQWlCLENBQUE7SUFDakIsd0JBQVcsQ0FBQTtJQUNYLGtDQUFxQixDQUFBO0lBQ3JCLGtDQUFxQixDQUFBO0lBQ3JCLG9DQUF1QixDQUFBO0lBQ3ZCLDhCQUFpQixDQUFBO0lBQ2pCLHNDQUF5QixDQUFBO0lBQ3pCLHNDQUF5QixDQUFBO0lBQ3pCLGdEQUFtQyxDQUFBO0lBQ25DLHdDQUEyQixDQUFBO0lBQzNCLGtDQUFxQixDQUFBO0lBQ3JCLHNDQUF5QixDQUFBO0lBQ3pCLHNDQUF5QixDQUFBO0lBQ3pCLDRDQUErQixDQUFBO0lBQy9CLDBDQUE2QixDQUFBO0lBQzdCLHNDQUF3QixDQUFBO0lBQ3hCLDhCQUFpQixDQUFBO0FBQ25CLENBQUMsRUFsQlcsU0FBUyxLQUFULFNBQVMsUUFrQnBCO0FBdUtELGlGQUFpRjtBQUNqRixNQUFNLFVBQVUsa0JBQWtCLENBQUMsSUFBd0I7SUFDekQsT0FBTyxJQUFJLElBQUksSUFBSSxJQUFJLFdBQVcsSUFBSSxJQUFJLElBQUksWUFBWSxJQUFJLElBQUksQ0FBQztBQUNyRSxDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLElBQXdCO0lBQ3ZELE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDO0FBQzVDLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQUMsSUFBd0I7SUFDNUQsT0FBTyxJQUFJLElBQUksSUFBSSxJQUFJLFdBQVcsSUFBSSxJQUFJLElBQUksVUFBVSxJQUFJLElBQUksQ0FBQztBQUNuRSxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLElBQXdCO0lBQ3hELE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxXQUFXLElBQUksSUFBSSxDQUFDO0FBQzdDLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLElBQXdCO0lBQ3RELE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxVQUFVLElBQUksSUFBSSxJQUFLLElBQXNCLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxHQUFHLENBQUM7QUFDbEcsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxJQUF3QjtJQUMzRCxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksVUFBVSxJQUFJLElBQUksSUFBSyxJQUEyQixDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsUUFBUSxDQUFDO0FBQzVHLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsSUFBd0I7SUFDMUQsT0FBTyxJQUFJLElBQUksSUFBSSxJQUFJLFVBQVUsSUFBSSxJQUFJLElBQUssSUFBMEIsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FBQztBQUMzRyxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLElBQXdCO0lBQzNELE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxVQUFVLElBQUksSUFBSSxJQUFLLElBQTJCLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxTQUFTLENBQUM7QUFDN0csQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxJQUF3QjtJQUN6RCxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksVUFBVSxJQUFJLElBQUksSUFBSyxJQUF5QixDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsTUFBTSxDQUFDO0FBQ3hHLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsSUFBd0I7SUFDN0QsT0FBTyxJQUFJLElBQUksSUFBSSxJQUFJLFVBQVUsSUFBSSxJQUFJLElBQUssSUFBNkIsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLFVBQVUsQ0FBQztBQUNoSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLElBQXdCO0lBQ3pELE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxVQUFVLElBQUksSUFBSSxJQUFLLElBQXlCLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDeEcsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxJQUF3QjtJQUM1RCxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksVUFBVSxJQUFJLElBQUksSUFBSyxJQUE0QixDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsVUFBVSxDQUFDO0FBQy9HLENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsSUFBd0I7SUFDakUsT0FBTyxJQUFJLElBQUksSUFBSSxJQUFJLFVBQVUsSUFBSSxJQUFJLElBQUssSUFBaUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLGVBQWUsQ0FBQztBQUN6SCxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLElBQXdCO0lBQzdELE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxVQUFVLElBQUksSUFBSSxJQUFLLElBQTZCLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxXQUFXLENBQUM7QUFDakgsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTW9kZWxzIGFuZCBpbnRlcmZhY2VzIGZvciB0ZXN0IGNhc2UgZGV0YWlscyBzdGVwIGNvbXBvbmVudHNcbiAqL1xuXG5leHBvcnQgdHlwZSBUZXN0Q2FzZUV2ZW50VHlwZSA9ICduYXZpZ2F0ZScgfCAnY3VzdG9tJyB8ICdhaS1hZ2VudCcgfCAndHlwZScgfCAnY2xpY2snIHwgJ2RvdWJsZUNsaWNrJyB8ICdwcmVzc0VudGVyJyB8ICdlbnRlcicgfCAndmVyaWZ5JyB8ICd3YWl0JztcblxuXG5leHBvcnQgZW51bSBTdGVwVHlwZXMge1xuICBOT1JNQUwgPSAnTk9STUFMJyxcbiAgQVBJID0gJ0FQSScsXG4gIERBVEFCQVNFID0gJ0RBVEFCQVNFJyxcbiAgQUlfQUdFTlQgPSAnQUlfQUdFTlQnLFxuICBBSV9WRVJJRlkgPSAnQUlfVkVSSUZZJyxcbiAgVVBMT0FEID0gJ1VQTE9BRCcsXG4gIFNDUkVFTlNIT1QgPSAnU0NSRUVOU0hPVCcsXG4gIFZFUklGWV9VUkwgPSAnVkVSSUZZX1VSTCcsXG4gIFJFU1RPUkVfU0VTU0lPTiA9ICdSRVNUT1JFX1NFU1NJT04nLFxuICBDVVNUT01fQ09ERSA9ICdDVVNUT01fQ09ERScsXG4gIEZPUl9MT09QID0gJ0ZPUl9MT09QJyxcbiAgV0hJTEVfTE9PUCA9ICdXSElMRV9MT09QJyxcbiAgQlJFQUtfTE9PUCA9ICdCUkVBS19MT09QJyxcbiAgQ09OVElOVUVfTE9PUCA9ICdDT05USU5VRV9MT09QJyxcbiAgQ09ORElUSU9OX0lGID0gJ0NPTkRJVElPTl9JRicsXG4gIFNURVBfR1JPVVA9ICdTVEVQX0dST1VQJyxcbiAgU0NST0xMID0gJ1NDUk9MTCdcbn1cblxuLy8gZXhwb3J0IHR5cGUgU3RlcFR5cGUgPSBTdGVwVHlwZXMuTk9STUFMIHwgU3RlcFR5cGVzLkFQSSB8IFN0ZXBUeXBlcy5EQVRBQkFTRSB8IFN0ZXBUeXBlcy5BSV9BR0VOVCB8IFN0ZXBUeXBlcy5VUExPQUQgfCBTdGVwVHlwZXMuU0NSRUVOU0hPVCB8IFN0ZXBUeXBlcy5DVVNUT01fQ09ERSB8IFN0ZXBUeXBlcy5GT1JfTE9PUCB8IFN0ZXBUeXBlcy5XSElMRV9MT09QIHwgU3RlcFR5cGVzLkJSRUFLX0xPT1AgfCBTdGVwVHlwZXMuQ09OVElOVUVfTE9PUDtcblxuZXhwb3J0IGludGVyZmFjZSBFdmVudFR5cGVDb25maWcge1xuICB0eXBlOiBUZXN0Q2FzZUV2ZW50VHlwZTtcbiAgbGFiZWw6IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgY29sb3I6IHN0cmluZztcbiAgYmFja2dyb3VuZENvbG9yOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcFBhcmFtZXRlciB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgZGlzcGxheVZhbHVlPzogc3RyaW5nOyAvLyBGb3IgZGlzcGxheSBwdXJwb3NlcyAoZS5nLiwgd2l0aCBxdW90ZXMpXG59XG5cbi8qKiBCYXNlIGludGVyZmFjZSBjb250YWluaW5nIGNvbW1vbiBwcm9wZXJ0aWVzIGZvciBhbGwgc3RlcCBjb25maWd1cmF0aW9ucyAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlU3RlcENvbmZpZyB7XG4gIGlkOiBzdHJpbmc7XG4gIGFjdGlvbj86IHN0cmluZztcbiAgc3RlcE51bWJlcjogbnVtYmVyIHwgc3RyaW5nO1xuICBzdGVwVHlwZTogU3RlcFR5cGVzO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgc2VsZWN0ZWQ/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGV4cGFuZGVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOb3JtYWxTdGVwQ29uZmlnIGV4dGVuZHMgQmFzZVN0ZXBDb25maWcge1xuICBzdGVwVHlwZTogU3RlcFR5cGVzLk5PUk1BTDtcbiAgZXZlbnRUeXBlOiBUZXN0Q2FzZUV2ZW50VHlwZTtcbiAgcGFyYW1ldGVyczogU3RlcFBhcmFtZXRlcltdO1xufVxuXG4vKiogQVBJIFN0ZXAgQ29uZmlndXJhdGlvbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcGlTdGVwQ29uZmlnIGV4dGVuZHMgQmFzZVN0ZXBDb25maWcge1xuICBzdGVwVHlwZTogU3RlcFR5cGVzLkFQSTtcbiAgbWV0aG9kOiAnR0VUJyB8ICdQT1NUJyB8ICdQVVQnIHwgJ0RFTEVURScgfCAnUEFUQ0gnO1xuICBlbmRwb2ludDogc3RyaW5nO1xuICBiYXNlVXJsPzogc3RyaW5nO1xuICByZXF1ZXN0Qm9keT86IHN0cmluZztcbiAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGhlYWRlcnNDb3VudD86IG51bWJlcjtcbiAgaGFzQm9keT86IGJvb2xlYW47XG4gIHNhdmVUbz86IHN0cmluZztcbiAgZXhwZWN0ZWRTdGF0dXM/OiBudW1iZXI7XG59XG5cbi8qKiBEYXRhYmFzZSBTdGVwIENvbmZpZ3VyYXRpb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VTdGVwQ29uZmlnIGV4dGVuZHMgQmFzZVN0ZXBDb25maWcge1xuICBzdGVwVHlwZTogU3RlcFR5cGVzLkRBVEFCQVNFO1xuICBxdWVyeTogc3RyaW5nO1xuICBkYXRhYmFzZVR5cGU/OiAnbXlzcWwnIHwgJ3Bvc3RncmVzcWwnIHwgJ21vbmdvZGInIHwgJ21zc3FsJyB8ICdvcmFjbGUnO1xuICBjb25uZWN0aW9uTmFtZT86IHN0cmluZztcbiAgc2F2ZVRvPzogc3RyaW5nO1xufVxuXG4vKiogQUkgQWdlbnQgU3RlcCBDb25maWd1cmF0aW9uICovXG5leHBvcnQgaW50ZXJmYWNlIEFpQWdlbnRTdGVwQ29uZmlnIGV4dGVuZHMgQmFzZVN0ZXBDb25maWcge1xuICBzdGVwVHlwZTogU3RlcFR5cGVzLkFJX0FHRU5UO1xuICBpbnN0cnVjdGlvbnM6IHN0cmluZztcbn1cblxuLyoqIEFJIFZlcmlmeSBTdGVwIENvbmZpZ3VyYXRpb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWlWZXJpZnlTdGVwQ29uZmlnIGV4dGVuZHMgQmFzZVN0ZXBDb25maWcge1xuICBzdGVwVHlwZTogU3RlcFR5cGVzLkFJX1ZFUklGWTtcbiAgaW5zdHJ1Y3Rpb25zOiBzdHJpbmc7XG59XG5cbi8qKiBVcGxvYWQgU3RlcCBDb25maWd1cmF0aW9uICovXG5leHBvcnQgaW50ZXJmYWNlIFVwbG9hZFN0ZXBDb25maWcgZXh0ZW5kcyBCYXNlU3RlcENvbmZpZyB7XG4gIHN0ZXBUeXBlOiBTdGVwVHlwZXMuVVBMT0FEO1xuICBzZWxlY3Rvcjogc3RyaW5nO1xuICBmaWxlTmFtZTogc3RyaW5nO1xuICBzb3VyY2U6ICdEYXRhIExpYnJhcnknIHwgJ0xvY2FsJyB8ICdVUkwnO1xuICBzb3VyY2VQYXRoOiBzdHJpbmc7XG59XG5cbi8qKiBTY3JlZW5zaG90IFN0ZXAgQ29uZmlndXJhdGlvbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY3JlZW5zaG90U3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgc3RlcFR5cGU6IFN0ZXBUeXBlcy5TQ1JFRU5TSE9UO1xuICBuYW1lPzogc3RyaW5nO1xuICBmdWxsUGFnZT86IGJvb2xlYW47XG4gIHNlbGVjdG9yPzogc3RyaW5nO1xufVxuXG4vKiogU2Nyb2xsIFN0ZXAgQ29uZmlndXJhdGlvbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY3JvbGxTdGVwQ29uZmlnIGV4dGVuZHMgQmFzZVN0ZXBDb25maWcge1xuICBzdGVwVHlwZTogU3RlcFR5cGVzLlNDUk9MTDtcbiAgc2VsZWN0b3I6IHN0cmluZztcbiAgZGlyZWN0aW9uPzogJ3RvcCcgfCAnYm90dG9tJyB8ICd1cCcgfCAnZG93bicgfCAnbGVmdCcgfCAncmlnaHQnO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLyoqIFZlcmlmeSBVUkwgU3RlcCBDb25maWd1cmF0aW9uICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeVVybFN0ZXBDb25maWcgZXh0ZW5kcyBCYXNlU3RlcENvbmZpZyB7XG4gIHN0ZXBUeXBlOiBTdGVwVHlwZXMuVkVSSUZZX1VSTDtcbiAgYWN0aW9uPzogc3RyaW5nOyAvLyBlLmcuLCBcIlZlcmlmeSB0aGF0IHRoZSBVUkwgb2YgY3VycmVudCBwYWdlIGlzXCJcbiAgdXJsPzogc3RyaW5nOyAvLyBUaGUgVVJMIHRvIHZlcmlmeVxufVxuXG4vKiogUmVzdG9yZSBTZXNzaW9uIFN0ZXAgQ29uZmlndXJhdGlvbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXN0b3JlU2Vzc2lvblN0ZXBDb25maWcgZXh0ZW5kcyBCYXNlU3RlcENvbmZpZyB7XG4gIHN0ZXBUeXBlOiBTdGVwVHlwZXMuUkVTVE9SRV9TRVNTSU9OO1xuICBhY3Rpb24/OiBzdHJpbmc7IC8vIEFjdGlvbiB0ZXh0L0hUTUwgZm9yIHRoZSByZXN0b3JlIHNlc3Npb24gc3RlcFxufVxuXG4vKiogQ3VzdG9tIENvZGUgU3RlcCBDb25maWd1cmF0aW9uICovXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbUNvZGVTdGVwQ29uZmlnIGV4dGVuZHMgQmFzZVN0ZXBDb25maWcge1xuICBzdGVwVHlwZTogU3RlcFR5cGVzLkNVU1RPTV9DT0RFO1xuICBsYW5ndWFnZTogJ2phdmFzY3JpcHQnIHwgJ3B5dGhvbicgfCAndHlwZXNjcmlwdCc7XG4gIGNvZGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb29wU3RlcENvbmZpZyBleHRlbmRzIEJhc2VTdGVwQ29uZmlnIHtcbiAgbG9vcFR5cGU6ICdmb3InIHwgJ3doaWxlJztcbiAgc3RlcFR5cGU6IFN0ZXBUeXBlcy5GT1JfTE9PUCB8IFN0ZXBUeXBlcy5XSElMRV9MT09QO1xuICBjb25kaXRpb24/OiBzdHJpbmc7IC8vIEZvciB3aGlsZSBsb29wOiBcIldoaWxlIGVsZW1lbnQgXFxcIi5ub3RpZmljYXRpb24tYmFkZ2VcXFwiIGV4aXN0cyAobWF4IDUgaXRlcmF0aW9ucylcIlxuICBtYXhJdGVyYXRpb25zPzogbnVtYmVyOyAvLyBGb3Igd2hpbGUgbG9vcFxuICB0ZXN0RGF0YVByb2ZpbGU/OiBzdHJpbmc7IC8vIEZvciBmb3IgbG9vcFxuICBzdGFydFN0ZXA/OiBudW1iZXI7XG4gIGVuZFN0ZXA/OiBudW1iZXI7XG4gIG5lc3RlZFN0ZXBzOiBUZXN0Q2FzZVN0ZXBDb25maWdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25kaXRpb25CcmFuY2gge1xuICB0eXBlOiAnaWYnIHwgJ2Vsc2UnIHwgJ2Vsc2UtaWYnO1xuICBzdGVwVHlwZTogU3RlcFR5cGVzLkNPTkRJVElPTl9JRjtcbiAgbGFiZWw6IHN0cmluZzsgLy8gZS5nLiwgXCJJRiBUUlVFXCIsIFwiRUxTRVwiXG4gIGFjdGlvbj86IHN0cmluZzsgLy8gQWN0aW9uIHRleHQvSFRNTCBmb3IgdGhlIGJyYW5jaCAoZS5nLiwgXCJDaGVjayB0aGUgdGV4dCAnS2lzaGFuJyBpcyBwcmVzZW50IG9uIHRoZSBjdXJyZW50IHBhZ2VcIilcbiAgbmVzdGVkU3RlcHM6IFRlc3RDYXNlU3RlcENvbmZpZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbmRpdGlvblN0ZXBDb25maWcgZXh0ZW5kcyBCYXNlU3RlcENvbmZpZyB7XG4gIGNvbmRpdGlvbjogc3RyaW5nOyAvLyBlLmcuLCBcIklmIGVsZW1lbnQgYC5zdWNjZXNzLW1lc3NhZ2VgIGlzIHZpc2libGVcIlxuICBicmFuY2hlczogQ29uZGl0aW9uQnJhbmNoW107XG4gIG5lc3RlZFN0ZXBzOiBUZXN0Q2FzZVN0ZXBDb25maWdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGVwR3JvdXBDb25maWcgZXh0ZW5kcyBCYXNlU3RlcENvbmZpZyB7XG4gIHN0ZXBHcm91cElkOiBudW1iZXI7XG4gIGdyb3VwTmFtZTogc3RyaW5nOyAvLyBlLmcuLCBcIkNoZWNrb3V0IEZsb3dcIlxuICByZXVzYWJsZT86IGJvb2xlYW47IC8vIFdoZXRoZXIgdGhlIGdyb3VwIGlzIHJldXNhYmxlXG4gIHN0ZXBUeXBlOiBTdGVwVHlwZXMuU1RFUF9HUk9VUFxuICBuZXN0ZWRTdGVwczogVGVzdENhc2VTdGVwQ29uZmlnW107XG4gIGxvYWRpbmc/OiBib29sZWFuOyAvLyBMb2FkaW5nIHN0YXRlIHdoZW4gZmV0Y2hpbmcgbmVzdGVkIHN0ZXBzXG59XG5cbi8vIFVuaW9uIHR5cGUgZm9yIGFsbCB0ZXN0IGNhc2Ugc3RlcCBjb25maWd1cmF0aW9ucyAoc3VwcG9ydHMgcmVjdXJzaXZlIG5lc3RpbmcpXG5leHBvcnQgdHlwZSBUZXN0Q2FzZVN0ZXBDb25maWcgPVxuICB8IE5vcm1hbFN0ZXBDb25maWdcbiAgfCBMb29wU3RlcENvbmZpZ1xuICB8IENvbmRpdGlvblN0ZXBDb25maWdcbiAgfCBTdGVwR3JvdXBDb25maWdcbiAgfCBBcGlTdGVwQ29uZmlnXG4gIHwgRGF0YWJhc2VTdGVwQ29uZmlnXG4gIHwgQWlBZ2VudFN0ZXBDb25maWdcbiAgfCBBaVZlcmlmeVN0ZXBDb25maWdcbiAgfCBVcGxvYWRTdGVwQ29uZmlnXG4gIHwgU2NyZWVuc2hvdFN0ZXBDb25maWdcbiAgfCBTY3JvbGxTdGVwQ29uZmlnXG4gIHwgVmVyaWZ5VXJsU3RlcENvbmZpZ1xuICB8IFJlc3RvcmVTZXNzaW9uU3RlcENvbmZpZ1xuICB8IEN1c3RvbUNvZGVTdGVwQ29uZmlnO1xuXG4vKiogVHlwZSBndWFyZHMgZm9yIGRpc3BhdGNoaW5nIHN0ZXAgdHlwZSAoZS5nLiBpbiB0ZXN0LWNhc2UtZGV0YWlscy1yZW5kZXJlcikgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05vcm1hbFN0ZXBDb25maWcoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnKTogc3RlcCBpcyBOb3JtYWxTdGVwQ29uZmlnIHtcbiAgcmV0dXJuIHN0ZXAgIT0gbnVsbCAmJiAnZXZlbnRUeXBlJyBpbiBzdGVwICYmICdwYXJhbWV0ZXJzJyBpbiBzdGVwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMb29wU3RlcENvbmZpZyhzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWcpOiBzdGVwIGlzIExvb3BTdGVwQ29uZmlnIHtcbiAgcmV0dXJuIHN0ZXAgIT0gbnVsbCAmJiAnbG9vcFR5cGUnIGluIHN0ZXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbmRpdGlvblN0ZXBDb25maWcoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnKTogc3RlcCBpcyBDb25kaXRpb25TdGVwQ29uZmlnIHtcbiAgcmV0dXJuIHN0ZXAgIT0gbnVsbCAmJiAnY29uZGl0aW9uJyBpbiBzdGVwICYmICdicmFuY2hlcycgaW4gc3RlcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RlcEdyb3VwQ29uZmlnKHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyk6IHN0ZXAgaXMgU3RlcEdyb3VwQ29uZmlnIHtcbiAgcmV0dXJuIHN0ZXAgIT0gbnVsbCAmJiAnZ3JvdXBOYW1lJyBpbiBzdGVwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBcGlTdGVwQ29uZmlnKHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyk6IHN0ZXAgaXMgQXBpU3RlcENvbmZpZyB7XG4gIHJldHVybiBzdGVwICE9IG51bGwgJiYgJ3N0ZXBUeXBlJyBpbiBzdGVwICYmIChzdGVwIGFzIEFwaVN0ZXBDb25maWcpLnN0ZXBUeXBlID09PSBTdGVwVHlwZXMuQVBJO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhYmFzZVN0ZXBDb25maWcoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnKTogc3RlcCBpcyBEYXRhYmFzZVN0ZXBDb25maWcge1xuICByZXR1cm4gc3RlcCAhPSBudWxsICYmICdzdGVwVHlwZScgaW4gc3RlcCAmJiAoc3RlcCBhcyBEYXRhYmFzZVN0ZXBDb25maWcpLnN0ZXBUeXBlID09PSBTdGVwVHlwZXMuREFUQUJBU0U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0FpQWdlbnRTdGVwQ29uZmlnKHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyk6IHN0ZXAgaXMgQWlBZ2VudFN0ZXBDb25maWcge1xuICByZXR1cm4gc3RlcCAhPSBudWxsICYmICdzdGVwVHlwZScgaW4gc3RlcCAmJiAoc3RlcCBhcyBBaUFnZW50U3RlcENvbmZpZykuc3RlcFR5cGUgPT09IFN0ZXBUeXBlcy5BSV9BR0VOVDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQWlWZXJpZnlTdGVwQ29uZmlnKHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyk6IHN0ZXAgaXMgQWlWZXJpZnlTdGVwQ29uZmlnIHtcbiAgcmV0dXJuIHN0ZXAgIT0gbnVsbCAmJiAnc3RlcFR5cGUnIGluIHN0ZXAgJiYgKHN0ZXAgYXMgQWlWZXJpZnlTdGVwQ29uZmlnKS5zdGVwVHlwZSA9PT0gU3RlcFR5cGVzLkFJX1ZFUklGWTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVXBsb2FkU3RlcENvbmZpZyhzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWcpOiBzdGVwIGlzIFVwbG9hZFN0ZXBDb25maWcge1xuICByZXR1cm4gc3RlcCAhPSBudWxsICYmICdzdGVwVHlwZScgaW4gc3RlcCAmJiAoc3RlcCBhcyBVcGxvYWRTdGVwQ29uZmlnKS5zdGVwVHlwZSA9PT0gU3RlcFR5cGVzLlVQTE9BRDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2NyZWVuc2hvdFN0ZXBDb25maWcoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnKTogc3RlcCBpcyBTY3JlZW5zaG90U3RlcENvbmZpZyB7XG4gIHJldHVybiBzdGVwICE9IG51bGwgJiYgJ3N0ZXBUeXBlJyBpbiBzdGVwICYmIChzdGVwIGFzIFNjcmVlbnNob3RTdGVwQ29uZmlnKS5zdGVwVHlwZSA9PT0gU3RlcFR5cGVzLlNDUkVFTlNIT1Q7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Njcm9sbFN0ZXBDb25maWcoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnKTogc3RlcCBpcyBTY3JvbGxTdGVwQ29uZmlnIHtcbiAgcmV0dXJuIHN0ZXAgIT0gbnVsbCAmJiAnc3RlcFR5cGUnIGluIHN0ZXAgJiYgKHN0ZXAgYXMgU2Nyb2xsU3RlcENvbmZpZykuc3RlcFR5cGUgPT09IFN0ZXBUeXBlcy5TQ1JPTEw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1ZlcmlmeVVybFN0ZXBDb25maWcoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnKTogc3RlcCBpcyBWZXJpZnlVcmxTdGVwQ29uZmlnIHtcbiAgcmV0dXJuIHN0ZXAgIT0gbnVsbCAmJiAnc3RlcFR5cGUnIGluIHN0ZXAgJiYgKHN0ZXAgYXMgVmVyaWZ5VXJsU3RlcENvbmZpZykuc3RlcFR5cGUgPT09IFN0ZXBUeXBlcy5WRVJJRllfVVJMO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZXN0b3JlU2Vzc2lvblN0ZXBDb25maWcoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnKTogc3RlcCBpcyBSZXN0b3JlU2Vzc2lvblN0ZXBDb25maWcge1xuICByZXR1cm4gc3RlcCAhPSBudWxsICYmICdzdGVwVHlwZScgaW4gc3RlcCAmJiAoc3RlcCBhcyBSZXN0b3JlU2Vzc2lvblN0ZXBDb25maWcpLnN0ZXBUeXBlID09PSBTdGVwVHlwZXMuUkVTVE9SRV9TRVNTSU9OO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDdXN0b21Db2RlU3RlcENvbmZpZyhzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWcpOiBzdGVwIGlzIEN1c3RvbUNvZGVTdGVwQ29uZmlnIHtcbiAgcmV0dXJuIHN0ZXAgIT0gbnVsbCAmJiAnc3RlcFR5cGUnIGluIHN0ZXAgJiYgKHN0ZXAgYXMgQ3VzdG9tQ29kZVN0ZXBDb25maWcpLnN0ZXBUeXBlID09PSBTdGVwVHlwZXMuQ1VTVE9NX0NPREU7XG59XG4iXX0=
@@ -2,4 +2,4 @@ import { InjectionToken } from '@angular/core';
2
2
  /** Sentinel returned from afterClosed() when user clicked "Edit in depth". */
3
3
  export const TEST_DATA_MODAL_EDIT_IN_DEPTH = Symbol('TestDataModalEditInDepth');
4
4
  export const TEST_DATA_MODAL_DATA = new InjectionToken('TEST_DATA_MODAL_DATA');
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1kYXRhLW1vZGFsLWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL3Rlc3QtZGF0YS1tb2RhbC90ZXN0LWRhdGEtbW9kYWwtZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBK0IvQyw4RUFBOEU7QUFDOUUsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFFaEYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxjQUFjLENBQ3BELHNCQUFzQixDQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgUGFyYW1ldGVyU2NvcGVGaWx0ZXIgfSBmcm9tICcuL3Rlc3QtZGF0YS1tb2RhbC1wYXJhbWV0ZXIubW9kZWwnO1xuXG5leHBvcnQgdHlwZSBUZXN0RGF0YU1vZGFsVGFiID0gJ3BsYWluLXRleHQnIHwgJ3BhcmFtZXRlcicgfCAnZW52aXJvbm1lbnQnIHwgJ3J1bnRpbWUnO1xuXG4vKipcbiAqIENvbmZpZy9kYXRhIGZvciBUZXN0IERhdGEgTW9kYWwgY29udHJvbHMuXG4gKiBNaXJyb3JzIExvb3AgU3RlcCBwYXR0ZXJuOiBzaW5nbGUgY29uZmlnIG9iamVjdCBob2xkcyBhbGwgY29udHJvbCBzdGF0ZTtcbiAqIHZhbHVlcyBhcmUgaW5pdGlhbGl6ZWQgZnJvbSBjb25maWcgYW5kIGJvdW5kIHRvIGVkaXRGb3JtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlc3REYXRhTW9kYWxEYXRhIHtcbiAgLyoqIEluaXRpYWwgdmFsdWUgZm9yIFBsYWluIFRleHQgdGFiIChlLmcuIFVSTCBmb3IgbmF2aWdhdGUgc3RlcCkuICovXG4gIHZhbHVlPzogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgaGVscCBVUkwgZm9yIFwiTmVlZCBoZWxwP1wiIGxpbmsuICovXG4gIGhlbHBVcmw/OiBzdHJpbmc7XG4gIC8qKiBJbml0aWFsbHkgc2VsZWN0ZWQgdGFiLiBEZWZhdWx0cyB0byAncGxhaW4tdGV4dCcuICovXG4gIGFjdGl2ZVRhYj86IFRlc3REYXRhTW9kYWxUYWI7XG4gIC8qKiBQYXJhbWV0ZXIgdGFiOiBzY29wZSBmaWx0ZXIgKEFsbCAvIEdsb2JhbCAvIExvY2FsKS4gKi9cbiAgcGFyYW1ldGVyU2NvcGVGaWx0ZXI/OiBQYXJhbWV0ZXJTY29wZUZpbHRlcjtcbiAgLyoqIFBhcmFtZXRlciB0YWI6IHNlYXJjaCBxdWVyeS4gKi9cbiAgcGFyYW1ldGVyU2VhcmNoUXVlcnk/OiBzdHJpbmc7XG4gIC8qKiBQYXJhbWV0ZXIgdGFiOiBzZWxlY3RlZCBwYXJhbWV0ZXIgaWQgKGZvciBoaWdobGlnaHQpLiAqL1xuICBzZWxlY3RlZFBhcmFtZXRlcklkPzogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIEVudmlyb25tZW50IHRhYjogc2VhcmNoIHF1ZXJ5LiAqL1xuICBlbnZpcm9ubWVudFNlYXJjaFF1ZXJ5Pzogc3RyaW5nO1xuICAvKiogRW52aXJvbm1lbnQgdGFiOiBzZWxlY3RlZCBlbnZpcm9ubWVudCBpZCAoZm9yIGhpZ2hsaWdodCkuICovXG4gIHNlbGVjdGVkRW52aXJvbm1lbnRJZD86IHN0cmluZyB8IG51bGw7XG4gIC8qKiBSdW50aW1lIHRhYjogdmFsdWUgKGluZGVwZW5kZW50IGZyb20gUGxhaW4gVGV4dCAvIFBhcmFtZXRlciAvIEVudmlyb25tZW50KS4gKi9cbiAgcnVudGltZVZhbHVlPzogc3RyaW5nO1xufVxuXG4vKiogU2VudGluZWwgcmV0dXJuZWQgZnJvbSBhZnRlckNsb3NlZCgpIHdoZW4gdXNlciBjbGlja2VkIFwiRWRpdCBpbiBkZXB0aFwiLiAqL1xuZXhwb3J0IGNvbnN0IFRFU1RfREFUQV9NT0RBTF9FRElUX0lOX0RFUFRIID0gU3ltYm9sKCdUZXN0RGF0YU1vZGFsRWRpdEluRGVwdGgnKTtcblxuZXhwb3J0IGNvbnN0IFRFU1RfREFUQV9NT0RBTF9EQVRBID0gbmV3IEluamVjdGlvblRva2VuPFRlc3REYXRhTW9kYWxEYXRhPihcbiAgJ1RFU1RfREFUQV9NT0RBTF9EQVRBJ1xuKTtcbiJdfQ==
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1kYXRhLW1vZGFsLWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL3Rlc3QtZGF0YS1tb2RhbC90ZXN0LWRhdGEtbW9kYWwtZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBb0MvQyw4RUFBOEU7QUFDOUUsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFFaEYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxjQUFjLENBQ3BELHNCQUFzQixDQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgUGFyYW1ldGVyU2NvcGVGaWx0ZXIsIFBhcmFtZXRlckl0ZW0gfSBmcm9tICcuL3Rlc3QtZGF0YS1tb2RhbC1wYXJhbWV0ZXIubW9kZWwnO1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudEl0ZW0gfSBmcm9tICcuL3Rlc3QtZGF0YS1tb2RhbC1lbnZpcm9ubWVudC5tb2RlbCc7XG5cbmV4cG9ydCB0eXBlIFRlc3REYXRhTW9kYWxUYWIgPSAncGxhaW4tdGV4dCcgfCAncGFyYW1ldGVyJyB8ICdlbnZpcm9ubWVudCcgfCAncnVudGltZSc7XG5cbi8qKlxuICogQ29uZmlnL2RhdGEgZm9yIFRlc3QgRGF0YSBNb2RhbCBjb250cm9scy5cbiAqIE1pcnJvcnMgTG9vcCBTdGVwIHBhdHRlcm46IHNpbmdsZSBjb25maWcgb2JqZWN0IGhvbGRzIGFsbCBjb250cm9sIHN0YXRlO1xuICogdmFsdWVzIGFyZSBpbml0aWFsaXplZCBmcm9tIGNvbmZpZyBhbmQgYm91bmQgdG8gZWRpdEZvcm0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdERhdGFNb2RhbERhdGEge1xuICAvKiogSW5pdGlhbCB2YWx1ZSBmb3IgUGxhaW4gVGV4dCB0YWIgKGUuZy4gVVJMIGZvciBuYXZpZ2F0ZSBzdGVwKS4gKi9cbiAgdmFsdWU/OiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBoZWxwIFVSTCBmb3IgXCJOZWVkIGhlbHA/XCIgbGluay4gKi9cbiAgaGVscFVybD86IHN0cmluZztcbiAgLyoqIEluaXRpYWxseSBzZWxlY3RlZCB0YWIuIERlZmF1bHRzIHRvICdwbGFpbi10ZXh0Jy4gKi9cbiAgYWN0aXZlVGFiPzogVGVzdERhdGFNb2RhbFRhYjtcbiAgLyoqIFBhcmFtZXRlciB0YWI6IHNjb3BlIGZpbHRlciAoQWxsIC8gR2xvYmFsIC8gTG9jYWwpLiAqL1xuICBwYXJhbWV0ZXJTY29wZUZpbHRlcj86IFBhcmFtZXRlclNjb3BlRmlsdGVyO1xuICAvKiogUGFyYW1ldGVyIHRhYjogc2VhcmNoIHF1ZXJ5LiAqL1xuICBwYXJhbWV0ZXJTZWFyY2hRdWVyeT86IHN0cmluZztcbiAgLyoqIFBhcmFtZXRlciB0YWI6IHNlbGVjdGVkIHBhcmFtZXRlciBpZCAoZm9yIGhpZ2hsaWdodCkuICovXG4gIHNlbGVjdGVkUGFyYW1ldGVySWQ/OiBzdHJpbmcgfCBudWxsO1xuICAvKiogUGFyYW1ldGVyIHRhYjogbGlzdCBvZiBwYXJhbWV0ZXJzIHRvIGRpc3BsYXkuICovXG4gIHBhcmFtZXRlcnM/OiBQYXJhbWV0ZXJJdGVtW107XG4gIC8qKiBFbnZpcm9ubWVudCB0YWI6IHNlYXJjaCBxdWVyeS4gKi9cbiAgZW52aXJvbm1lbnRTZWFyY2hRdWVyeT86IHN0cmluZztcbiAgLyoqIEVudmlyb25tZW50IHRhYjogc2VsZWN0ZWQgZW52aXJvbm1lbnQgaWQgKGZvciBoaWdobGlnaHQpLiAqL1xuICBzZWxlY3RlZEVudmlyb25tZW50SWQ/OiBzdHJpbmcgfCBudWxsO1xuICAvKiogRW52aXJvbm1lbnQgdGFiOiBsaXN0IG9mIGVudmlyb25tZW50IGl0ZW1zIHRvIGRpc3BsYXkuICovXG4gIGVudmlyb25tZW50SXRlbXM/OiBFbnZpcm9ubWVudEl0ZW1bXTtcbiAgLyoqIFJ1bnRpbWUgdGFiOiB2YWx1ZSAoaW5kZXBlbmRlbnQgZnJvbSBQbGFpbiBUZXh0IC8gUGFyYW1ldGVyIC8gRW52aXJvbm1lbnQpLiAqL1xuICBydW50aW1lVmFsdWU/OiBzdHJpbmc7XG59XG5cbi8qKiBTZW50aW5lbCByZXR1cm5lZCBmcm9tIGFmdGVyQ2xvc2VkKCkgd2hlbiB1c2VyIGNsaWNrZWQgXCJFZGl0IGluIGRlcHRoXCIuICovXG5leHBvcnQgY29uc3QgVEVTVF9EQVRBX01PREFMX0VESVRfSU5fREVQVEggPSBTeW1ib2woJ1Rlc3REYXRhTW9kYWxFZGl0SW5EZXB0aCcpO1xuXG5leHBvcnQgY29uc3QgVEVTVF9EQVRBX01PREFMX0RBVEEgPSBuZXcgSW5qZWN0aW9uVG9rZW48VGVzdERhdGFNb2RhbERhdGE+KFxuICAnVEVTVF9EQVRBX01PREFMX0RBVEEnXG4pO1xuIl19