@cqa-lib/cqa-ui 1.1.192 → 1.1.193

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 (30) hide show
  1. package/esm2020/lib/autocomplete/autocomplete.component.mjs +156 -0
  2. package/esm2020/lib/autocomplete/autocomplete.model.mjs +2 -0
  3. package/esm2020/lib/test-case-details/condition-step/condition-step.component.mjs +505 -17
  4. package/esm2020/lib/test-case-details/delete-steps/delete-steps.component.mjs +32 -11
  5. package/esm2020/lib/test-case-details/loop-step/loop-step.component.mjs +131 -9
  6. package/esm2020/lib/test-case-details/step-details-drawer/step-details-drawer-data.mjs +67 -1
  7. package/esm2020/lib/test-case-details/step-details-drawer/step-details-drawer-field.config.mjs +66 -1
  8. package/esm2020/lib/test-case-details/step-details-drawer/step-details-drawer.component.mjs +112 -191
  9. package/esm2020/lib/test-case-details/step-group/step-group.component.mjs +31 -3
  10. package/esm2020/lib/test-case-details/test-case-details-renderer/test-case-details-renderer.component.mjs +114 -5
  11. package/esm2020/lib/ui-kit.module.mjs +6 -1
  12. package/esm2020/public-api.mjs +3 -1
  13. package/fesm2015/cqa-lib-cqa-ui.mjs +1423 -444
  14. package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
  15. package/fesm2020/cqa-lib-cqa-ui.mjs +1415 -440
  16. package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
  17. package/lib/autocomplete/autocomplete.component.d.ts +48 -0
  18. package/lib/autocomplete/autocomplete.model.d.ts +10 -0
  19. package/lib/test-case-details/condition-step/condition-step.component.d.ts +73 -4
  20. package/lib/test-case-details/delete-steps/delete-steps.component.d.ts +18 -2
  21. package/lib/test-case-details/loop-step/loop-step.component.d.ts +34 -4
  22. package/lib/test-case-details/step-details-drawer/step-details-drawer-data.d.ts +56 -0
  23. package/lib/test-case-details/step-details-drawer/step-details-drawer-field.config.d.ts +6 -0
  24. package/lib/test-case-details/step-details-drawer/step-details-drawer.component.d.ts +33 -27
  25. package/lib/test-case-details/step-group/step-group.component.d.ts +15 -1
  26. package/lib/test-case-details/test-case-details-renderer/test-case-details-renderer.component.d.ts +27 -4
  27. package/lib/ui-kit.module.d.ts +127 -126
  28. package/package.json +1 -1
  29. package/public-api.d.ts +2 -0
  30. package/styles.css +1 -1
@@ -1,4 +1,5 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
1
+ import { Component, EventEmitter, Output, Inject, Optional } from '@angular/core';
2
+ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
2
3
  import { isNormalStepConfig, } from '../test-case-step.models';
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "../../button/button.component";
@@ -9,13 +10,22 @@ import * as i2 from "@angular/common";
9
10
  * warning text, and Cancel / Delete actions. Steps are shown with red/danger styling.
10
11
  */
11
12
  export class DeleteStepsComponent {
12
- constructor() {
13
+ constructor(data) {
14
+ this.data = data;
13
15
  /** Steps that will be deleted (shown in the list). */
14
16
  this.stepsToDelete = [];
15
17
  /** Context label for the sub-heading, e.g. "IF lane", "ELSE", "For loop". */
16
18
  this.contextLabel = '';
19
+ /** Optional step images/screenshots map: stepId -> imageUrl */
20
+ this.stepImages = new Map();
17
21
  this.confirmDelete = new EventEmitter();
18
22
  this.cancelled = new EventEmitter();
23
+ // Initialize from dialog data if provided
24
+ if (data) {
25
+ this.stepsToDelete = data.stepsToDelete || [];
26
+ this.contextLabel = data.contextLabel || '';
27
+ this.stepImages = data.stepImages || new Map();
28
+ }
19
29
  }
20
30
  get stepsCount() {
21
31
  return this.stepsToDelete?.length ?? 0;
@@ -86,19 +96,30 @@ export class DeleteStepsComponent {
86
96
  onDelete() {
87
97
  this.confirmDelete.emit();
88
98
  }
99
+ /** Get step image URL if available */
100
+ getStepImage(step) {
101
+ if (!step?.id)
102
+ return null;
103
+ return this.stepImages.get(step.id) || null;
104
+ }
105
+ /** Check if step has an image */
106
+ hasStepImage(step) {
107
+ return this.getStepImage(step) !== null;
108
+ }
89
109
  }
90
- DeleteStepsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DeleteStepsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
91
- DeleteStepsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DeleteStepsComponent, selector: "cqa-delete-steps", inputs: { stepsToDelete: "stepsToDelete", contextLabel: "contextLabel" }, outputs: { confirmDelete: "confirmDelete", cancelled: "cancelled" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n <!-- Header: title + close (X) -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n <h2 class=\"cqa-font-medium cqa-text-[22px] cqa-leading-[28px] cqa-tracking-normal cqa-text-[#101828] cqa-m-0\">\n {{ titleText }}\n </h2>\n <p class=\"cqa-font-normal cqa-text-[14px] cqa-leading-[21px] cqa-tracking-[-0.15px] cqa-text-[#4A5565] cqa-m-0\">\n This action cannot be undone, but you can use the undo function in the toolbar.\n </p>\n </div>\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n title=\"Close\"\n aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Selected steps for [context] (N) \u2013 scroll when many steps, scrollbar hidden (same as create-step-group) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-min-h-0\">\n <label class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[100%] cqa-tracking-normal cqa-text-[#0A0A0A] cqa-align-middle\">\n {{ selectedStepsSubtitle }}\n </label>\n <div class=\"cqa-scrollbar-hide cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[200px] cqa-min-h-0 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-rounded-[8px] cqa-p-[6px] cqa-border cqa-border-solid cqa-border-[rgba(0,0,0,0.1)]\">\n <div\n *ngFor=\"let step of stepsToDelete; let i = index\"\n class=\"cqa-flex cqa-items-center cqa-gap-[8px] cqa-rounded-[4px] cqa-pt-[4px] cqa-pb-[4px] cqa-pl-[8px] cqa-pr-[8px] cqa-bg-[rgba(238,63,63,0.1)]\">\n <!-- Numbered badge (red) -->\n <span\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-rounded-full cqa-bg-[#C63535] cqa-text-white cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex-shrink-0\">\n {{ i + 1 }}\n </span>\n <span class=\"cqa-font-medium cqa-text-[10px] cqa-leading-[15px] cqa-tracking-[0px] cqa-text-[#DC2626] cqa-flex-1 cqa-min-w-0 cqa-truncate\">\n {{ getStepDisplayLabel(step, i) }}\n </span>\n </div>\n </div>\n </div> \n\n <!-- Actions: Cancel | Delete (right-aligned) -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-end cqa-w-full cqa-gap-3\">\n <cqa-button\n variant=\"outlined\"\n btnSize=\"lg\"\n text=\"Cancel\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-bg-white cqa-border cqa-border-solid cqa-border-[#414146] cqa-text-[#414146]'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button\n variant=\"filled\"\n btnSize=\"lg\"\n text=\"Delete\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-rounded-[8px] cqa-border-0 cqa-bg-[#EE3F3F] cqa-text-white'\"\n (clicked)=\"onDelete()\">\n </cqa-button>\n </div>\n</div>\n", components: [{ type: i1.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
110
+ DeleteStepsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DeleteStepsComponent, deps: [{ token: MAT_DIALOG_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component });
111
+ DeleteStepsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DeleteStepsComponent, selector: "cqa-delete-steps", outputs: { confirmDelete: "confirmDelete", cancelled: "cancelled" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n <!-- Header: title + close (X) -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n <h2 class=\"cqa-font-medium cqa-text-[22px] cqa-leading-[28px] cqa-tracking-normal cqa-text-[#101828] cqa-m-0\">\n {{ titleText }}\n </h2>\n <p class=\"cqa-font-normal cqa-text-[14px] cqa-leading-[21px] cqa-tracking-[-0.15px] cqa-text-[#4A5565] cqa-m-0\">\n This action cannot be undone, but you can use the undo function in the toolbar.\n </p>\n </div>\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n title=\"Close\"\n aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Selected steps for [context] (N) \u2013 scroll when many steps, scrollbar hidden (same as create-step-group) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-min-h-0\">\n <label class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[100%] cqa-tracking-normal cqa-text-[#0A0A0A] cqa-align-middle\">\n {{ selectedStepsSubtitle }}\n </label>\n <div *ngIf=\"stepsCount === 0\" class=\"cqa-text-[14px] cqa-text-[#6B7280] cqa-p-4 cqa-text-center\">\n No steps selected. Please select at least one step to delete.\n </div>\n <div *ngIf=\"stepsCount > 0\" class=\"cqa-scrollbar-hide cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[200px] cqa-min-h-0 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-rounded-[8px] cqa-p-[6px] cqa-border cqa-border-solid cqa-border-[rgba(0,0,0,0.1)]\">\n <div\n *ngFor=\"let step of stepsToDelete; let i = index\"\n class=\"cqa-flex cqa-items-center cqa-gap-[8px] cqa-rounded-[4px] cqa-pt-[4px] cqa-pb-[4px] cqa-pl-[8px] cqa-pr-[8px] cqa-bg-[rgba(238,63,63,0.1)]\">\n <!-- Numbered badge (red) -->\n <span\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-rounded-full cqa-bg-[#C63535] cqa-text-white cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex-shrink-0\">\n {{ i + 1 }}\n </span>\n <!-- Step image if available -->\n <img\n *ngIf=\"hasStepImage(step)\"\n [src]=\"getStepImage(step)\"\n [alt]=\"'Step ' + (i + 1)\"\n class=\"cqa-w-8 cqa-h-8 cqa-rounded-[4px] cqa-object-cover cqa-flex-shrink-0 cqa-border cqa-border-solid cqa-border-[rgba(220,38,38,0.2)]\">\n <span class=\"cqa-font-medium cqa-text-[10px] cqa-leading-[15px] cqa-tracking-[0px] cqa-text-[#DC2626] cqa-flex-1 cqa-min-w-0 cqa-truncate\">\n {{ getStepDisplayLabel(step, i) }}\n </span>\n </div>\n </div>\n </div> \n\n <!-- Actions: Cancel | Delete (right-aligned) -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-end cqa-w-full cqa-gap-3\">\n <cqa-button\n variant=\"outlined\"\n btnSize=\"lg\"\n text=\"Cancel\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-bg-white cqa-border cqa-border-solid cqa-border-[#414146] cqa-text-[#414146]'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button\n variant=\"filled\"\n btnSize=\"lg\"\n text=\"Delete\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-rounded-[8px] cqa-border-0 cqa-bg-[#EE3F3F] cqa-text-white'\"\n [disabled]=\"stepsCount === 0\"\n (clicked)=\"onDelete()\">\n </cqa-button>\n </div>\n</div>\n", components: [{ type: i1.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
92
112
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DeleteStepsComponent, decorators: [{
93
113
  type: Component,
94
- args: [{ selector: 'cqa-delete-steps', host: { class: 'cqa-ui-root' }, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n <!-- Header: title + close (X) -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n <h2 class=\"cqa-font-medium cqa-text-[22px] cqa-leading-[28px] cqa-tracking-normal cqa-text-[#101828] cqa-m-0\">\n {{ titleText }}\n </h2>\n <p class=\"cqa-font-normal cqa-text-[14px] cqa-leading-[21px] cqa-tracking-[-0.15px] cqa-text-[#4A5565] cqa-m-0\">\n This action cannot be undone, but you can use the undo function in the toolbar.\n </p>\n </div>\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n title=\"Close\"\n aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Selected steps for [context] (N) \u2013 scroll when many steps, scrollbar hidden (same as create-step-group) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-min-h-0\">\n <label class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[100%] cqa-tracking-normal cqa-text-[#0A0A0A] cqa-align-middle\">\n {{ selectedStepsSubtitle }}\n </label>\n <div class=\"cqa-scrollbar-hide cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[200px] cqa-min-h-0 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-rounded-[8px] cqa-p-[6px] cqa-border cqa-border-solid cqa-border-[rgba(0,0,0,0.1)]\">\n <div\n *ngFor=\"let step of stepsToDelete; let i = index\"\n class=\"cqa-flex cqa-items-center cqa-gap-[8px] cqa-rounded-[4px] cqa-pt-[4px] cqa-pb-[4px] cqa-pl-[8px] cqa-pr-[8px] cqa-bg-[rgba(238,63,63,0.1)]\">\n <!-- Numbered badge (red) -->\n <span\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-rounded-full cqa-bg-[#C63535] cqa-text-white cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex-shrink-0\">\n {{ i + 1 }}\n </span>\n <span class=\"cqa-font-medium cqa-text-[10px] cqa-leading-[15px] cqa-tracking-[0px] cqa-text-[#DC2626] cqa-flex-1 cqa-min-w-0 cqa-truncate\">\n {{ getStepDisplayLabel(step, i) }}\n </span>\n </div>\n </div>\n </div> \n\n <!-- Actions: Cancel | Delete (right-aligned) -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-end cqa-w-full cqa-gap-3\">\n <cqa-button\n variant=\"outlined\"\n btnSize=\"lg\"\n text=\"Cancel\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-bg-white cqa-border cqa-border-solid cqa-border-[#414146] cqa-text-[#414146]'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button\n variant=\"filled\"\n btnSize=\"lg\"\n text=\"Delete\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-rounded-[8px] cqa-border-0 cqa-bg-[#EE3F3F] cqa-text-white'\"\n (clicked)=\"onDelete()\">\n </cqa-button>\n </div>\n</div>\n" }]
95
- }], propDecorators: { stepsToDelete: [{
96
- type: Input
97
- }], contextLabel: [{
98
- type: Input
99
- }], confirmDelete: [{
114
+ args: [{ selector: 'cqa-delete-steps', host: { class: 'cqa-ui-root' }, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n <!-- Header: title + close (X) -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n <h2 class=\"cqa-font-medium cqa-text-[22px] cqa-leading-[28px] cqa-tracking-normal cqa-text-[#101828] cqa-m-0\">\n {{ titleText }}\n </h2>\n <p class=\"cqa-font-normal cqa-text-[14px] cqa-leading-[21px] cqa-tracking-[-0.15px] cqa-text-[#4A5565] cqa-m-0\">\n This action cannot be undone, but you can use the undo function in the toolbar.\n </p>\n </div>\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n title=\"Close\"\n aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Selected steps for [context] (N) \u2013 scroll when many steps, scrollbar hidden (same as create-step-group) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-min-h-0\">\n <label class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[100%] cqa-tracking-normal cqa-text-[#0A0A0A] cqa-align-middle\">\n {{ selectedStepsSubtitle }}\n </label>\n <div *ngIf=\"stepsCount === 0\" class=\"cqa-text-[14px] cqa-text-[#6B7280] cqa-p-4 cqa-text-center\">\n No steps selected. Please select at least one step to delete.\n </div>\n <div *ngIf=\"stepsCount > 0\" class=\"cqa-scrollbar-hide cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[200px] cqa-min-h-0 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-rounded-[8px] cqa-p-[6px] cqa-border cqa-border-solid cqa-border-[rgba(0,0,0,0.1)]\">\n <div\n *ngFor=\"let step of stepsToDelete; let i = index\"\n class=\"cqa-flex cqa-items-center cqa-gap-[8px] cqa-rounded-[4px] cqa-pt-[4px] cqa-pb-[4px] cqa-pl-[8px] cqa-pr-[8px] cqa-bg-[rgba(238,63,63,0.1)]\">\n <!-- Numbered badge (red) -->\n <span\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-rounded-full cqa-bg-[#C63535] cqa-text-white cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex-shrink-0\">\n {{ i + 1 }}\n </span>\n <!-- Step image if available -->\n <img\n *ngIf=\"hasStepImage(step)\"\n [src]=\"getStepImage(step)\"\n [alt]=\"'Step ' + (i + 1)\"\n class=\"cqa-w-8 cqa-h-8 cqa-rounded-[4px] cqa-object-cover cqa-flex-shrink-0 cqa-border cqa-border-solid cqa-border-[rgba(220,38,38,0.2)]\">\n <span class=\"cqa-font-medium cqa-text-[10px] cqa-leading-[15px] cqa-tracking-[0px] cqa-text-[#DC2626] cqa-flex-1 cqa-min-w-0 cqa-truncate\">\n {{ getStepDisplayLabel(step, i) }}\n </span>\n </div>\n </div>\n </div> \n\n <!-- Actions: Cancel | Delete (right-aligned) -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-end cqa-w-full cqa-gap-3\">\n <cqa-button\n variant=\"outlined\"\n btnSize=\"lg\"\n text=\"Cancel\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-bg-white cqa-border cqa-border-solid cqa-border-[#414146] cqa-text-[#414146]'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button\n variant=\"filled\"\n btnSize=\"lg\"\n text=\"Delete\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-rounded-[8px] cqa-border-0 cqa-bg-[#EE3F3F] cqa-text-white'\"\n [disabled]=\"stepsCount === 0\"\n (clicked)=\"onDelete()\">\n </cqa-button>\n </div>\n</div>\n" }]
115
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
116
+ type: Optional
117
+ }, {
118
+ type: Inject,
119
+ args: [MAT_DIALOG_DATA]
120
+ }] }]; }, propDecorators: { confirmDelete: [{
100
121
  type: Output
101
122
  }], cancelled: [{
102
123
  type: Output
103
124
  }] } });
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLXN0ZXBzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdGVzdC1jYXNlLWRldGFpbHMvZGVsZXRlLXN0ZXBzL2RlbGV0ZS1zdGVwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2RlbGV0ZS1zdGVwcy9kZWxldGUtc3RlcHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBSUwsa0JBQWtCLEdBQ25CLE1BQU0sMEJBQTBCLENBQUM7Ozs7QUFFbEM7Ozs7R0FJRztBQU1ILE1BQU0sT0FBTyxvQkFBb0I7SUFMakM7UUFNRSxzREFBc0Q7UUFDN0Msa0JBQWEsR0FBeUIsRUFBRSxDQUFDO1FBRWxELDZFQUE2RTtRQUNwRSxpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUVqQixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDekMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7S0FnRmhEO0lBOUVDLElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzFCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7SUFDM0QsQ0FBQztJQUVELElBQUkscUJBQXFCO1FBQ3ZCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLElBQUksVUFBVSxDQUFD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LFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzNELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLGFBQWEsQ0FBQzthQUNuQztZQUNEO2dCQUNFLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUM7U0FDbkU7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7O2lIQXZGVSxvQkFBb0I7cUdBQXBCLG9CQUFvQixnUENsQmpDLG8xR0ErREE7MkZEN0NhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxrQkFBa0IsUUFFdEIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFOzhCQUlyQixhQUFhO3NCQUFyQixLQUFLO2dCQUdHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIFRlc3RDYXNlU3RlcENvbmZpZyxcbiAgTm9ybWFsU3RlcENvbmZpZyxcbiAgVGVzdENhc2VFdmVudFR5cGUsXG4gIGlzTm9ybWFsU3RlcENvbmZpZyxcbn0gZnJvbSAnLi4vdGVzdC1jYXNlLXN0ZXAubW9kZWxzJztcblxuLyoqXG4gKiBEZWxldGUgU3RlcHMgY29uZmlybWF0aW9uIG1vZGFsIGZvciBUZXN0IENhc2UgRGV0YWlscy5cbiAqIE1hdGNoZXMgdGhlIGRlc2lnbiBvZiBDcmVhdGUgU3RlcCBHcm91cDogc2hvd3Mgc2VsZWN0ZWQgc3RlcHMgd2l0aCBjb250ZXh0IChlLmcuIFwiSUYgbGFuZVwiKSxcbiAqIHdhcm5pbmcgdGV4dCwgYW5kIENhbmNlbCAvIERlbGV0ZSBhY3Rpb25zLiBTdGVwcyBhcmUgc2hvd24gd2l0aCByZWQvZGFuZ2VyIHN0eWxpbmcuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1kZWxldGUtc3RlcHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGVsZXRlLXN0ZXBzLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxufSlcbmV4cG9ydCBjbGFzcyBEZWxldGVTdGVwc0NvbXBvbmVudCB7XG4gIC8qKiBTdGVwcyB0aGF0IHdpbGwgYmUgZGVsZXRlZCAoc2hvd24gaW4gdGhlIGxpc3QpLiAqL1xuICBASW5wdXQoKSBzdGVwc1RvRGVsZXRlOiBUZXN0Q2FzZVN0ZXBDb25maWdbXSA9IFtdO1xuXG4gIC8qKiBDb250ZXh0IGxhYmVsIGZvciB0aGUgc3ViLWhlYWRpbmcsIGUuZy4gXCJJRiBsYW5lXCIsIFwiRUxTRVwiLCBcIkZvciBsb29wXCIuICovXG4gIEBJbnB1dCgpIGNvbnRleHRMYWJlbCA9ICcnO1xuXG4gIEBPdXRwdXQoKSBjb25maXJtRGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGdldCBzdGVwc0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcHNUb0RlbGV0ZT8ubGVuZ3RoID8/IDA7XG4gIH1cblxuICBnZXQgdGl0bGVUZXh0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgbiA9IHRoaXMuc3RlcHNDb3VudDtcbiAgICByZXR1cm4gbiA9PT0gMSA/ICdEZWxldGUgMSBzdGVwPycgOiBgRGVsZXRlICR7bn0gc3RlcHM/YDtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZFN0ZXBzU3VidGl0bGUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjdHggPSB0aGlzLmNvbnRleHRMYWJlbD8udHJpbSgpIHx8ICdzZWxlY3RlZCc7XG4gICAgcmV0dXJuIGBTZWxlY3RlZCBzdGVwcyBmb3IgJHtjdHh9ICgke3RoaXMuc3RlcHNDb3VudH0pYDtcbiAgfVxuXG4gIC8qKiBEaXNwbGF5IGxhYmVsIGZvciBhIHN0ZXAgaW4gdGhlIGxpc3QgKHNhbWUgcGF0dGVybiBhcyBjcmVhdGUtc3RlcC1ncm91cCkuICovXG4gIGdldFN0ZXBEaXNwbGF5TGFiZWwoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoaXNOb3JtYWxTdGVwQ29uZmlnKHN0ZXApKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXROb3JtYWxTdGVwTGFiZWwoc3RlcCk7XG4gICAgfVxuICAgIGlmICgnZ3JvdXBOYW1lJyBpbiBzdGVwICYmIHN0ZXAuZ3JvdXBOYW1lKSB7XG4gICAgICByZXR1cm4gc3RlcC5ncm91cE5hbWU7XG4gICAgfVxuICAgIGlmICgnY29uZGl0aW9uJyBpbiBzdGVwICYmIHN0ZXAuY29uZGl0aW9uKSB7XG4gICAgICByZXR1cm4gc3RlcC5jb25kaXRpb247XG4gICAgfVxuICAgIGlmICgnbG9vcFR5cGUnIGluIHN0ZXApIHtcbiAgICAgIGNvbnN0IGxvb3AgPSBzdGVwIGFzIHsgbG9vcFR5cGU6IHN0cmluZzsgdGVzdERhdGFQcm9maWxlPzogc3RyaW5nOyBjb25kaXRpb24/OiBzdHJpbmcgfTtcbiAgICAgIGlmIChsb29wLmxvb3BUeXBlID09PSAnZm9yJyAmJiBsb29wLnRlc3REYXRhUHJvZmlsZSkge1xuICAgICAgICByZXR1cm4gYEZvciBsb29wOiAke2xvb3AudGVzdERhdGFQcm9maWxlfWA7XG4gICAgICB9XG4gICAgICBpZiAobG9vcC5sb29wVHlwZSA9PT0gJ3doaWxlJyAmJiBsb29wLmNvbmRpdGlvbikge1xuICAgICAgICByZXR1cm4gYFdoaWxlOiAke2xvb3AuY29uZGl0aW9ufWA7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzdGVwLmRlc2NyaXB0aW9uKSB7XG4gICAgICByZXR1cm4gc3RlcC5kZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGBTdGVwICR7aW5kZXggKyAxfWA7XG4gIH1cblxuICBwcml2YXRlIGdldE5vcm1hbFN0ZXBMYWJlbChzdGVwOiBOb3JtYWxTdGVwQ29uZmlnKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJhbXMgPSBzdGVwLnBhcmFtZXRlcnMgPz8gW107XG4gICAgY29uc3QgZ2V0UGFyYW0gPSAobmFtZTogc3RyaW5nKSA9PlxuICAgICAgcGFyYW1zLmZpbmQoKHApID0+IHAubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICBjb25zdCB2YWwgPSAocDogeyB2YWx1ZT86IHN0cmluZzsgZGlzcGxheVZhbHVlPzogc3RyaW5nIH0gfCB1bmRlZmluZWQpID0+XG4gICAgICBwPy5kaXNwbGF5VmFsdWUgPz8gcD8udmFsdWUgPz8gJyc7XG5cbiAgICBzd2l0Y2ggKHN0ZXAuZXZlbnRUeXBlIGFzIFRlc3RDYXNlRXZlbnRUeXBlKSB7XG4gICAgICBjYXNlICduYXZpZ2F0ZSc6IHtcbiAgICAgICAgY29uc3QgdXJsID0gZ2V0UGFyYW0oJ3VybCcpO1xuICAgICAgICByZXR1cm4gdXJsID8gYE5hdmlnYXRlIHRvICR7dmFsKHVybCl9YCA6ICdOYXZpZ2F0ZSB0byc7XG4gICAgICB9XG4gICAgICBjYXNlICdhaS1hZ2VudCc6IHtcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gZ2V0UGFyYW0oJ2luc3RydWN0aW9ucycpID8/IGdldFBhcmFtKCdkZXNjcmlwdGlvbicpO1xuICAgICAgICByZXR1cm4gdmFsKGluc3RydWN0aW9ucykgfHwgJ0FJIEFnZW50IHN0ZXAnO1xuICAgICAgfVxuICAgICAgY2FzZSAndHlwZSc6XG4gICAgICAgIHJldHVybiB2YWwoZ2V0UGFyYW0oJ3RleHQnKSkgfHwgJ1R5cGUnO1xuICAgICAgY2FzZSAnY2xpY2snOlxuICAgICAgICByZXR1cm4gdmFsKGdldFBhcmFtKCdzZWxlY3RvcicpKSA/IGBDbGljayAke3ZhbChnZXRQYXJhbSgnc2VsZWN0b3InKSl9YCA6ICdDbGljayc7XG4gICAgICBjYXNlICd2ZXJpZnknOlxuICAgICAgICByZXR1cm4gdmFsKGdldFBhcmFtKCdkZXNjcmlwdGlvbicpKSB8fCAnVmVyaWZ5JztcbiAgICAgIGNhc2UgJ2N1c3RvbSc6IHtcbiAgICAgICAgY29uc3QgZGVzYyA9IGdldFBhcmFtKCdkZXNjcmlwdGlvbicpID8/IGdldFBhcmFtKCdhY3Rpb24nKTtcbiAgICAgICAgcmV0dXJuIHZhbChkZXNjKSB8fCAnQ3VzdG9tIHN0ZXAnO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHZhbChnZXRQYXJhbSgnZGVzY3JpcHRpb24nKSkgfHwgdmFsKHBhcmFtc1swXSkgfHwgJ1N0ZXAnO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsbGVkLmVtaXQoKTtcbiAgfVxuXG4gIG9uRGVsZXRlKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlybURlbGV0ZS5lbWl0KCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJjcWEtYmctd2hpdGUgY3FhLXJvdW5kZWQtWzEycHhdIGNxYS1zaGFkb3ctbGcgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNFNUU3RUJdIGNxYS13LWZ1bGwgY3FhLW1heC13LVs1MDBweF0gY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtNCBjcWEtcC02IGNxYS1ib3gtYm9yZGVyIGNxYS1taW4taC0wXCI+XG4gIDwhLS0gSGVhZGVyOiB0aXRsZSArIGNsb3NlIChYKSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1zdGFydCBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1nYXAtMlwiPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xIGNxYS1taW4tdy0wXCI+XG4gICAgICA8aDIgY2xhc3M9XCJjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWzIycHhdIGNxYS1sZWFkaW5nLVsyOHB4XSBjcWEtdHJhY2tpbmctbm9ybWFsIGNxYS10ZXh0LVsjMTAxODI4XSBjcWEtbS0wXCI+XG4gICAgICAgIHt7IHRpdGxlVGV4dCB9fVxuICAgICAgPC9oMj5cbiAgICAgIDxwIGNsYXNzPVwiY3FhLWZvbnQtbm9ybWFsIGNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMjFweF0gY3FhLXRyYWNraW5nLVstMC4xNXB4XSBjcWEtdGV4dC1bIzRBNTU2NV0gY3FhLW0tMFwiPlxuICAgICAgICBUaGlzIGFjdGlvbiBjYW5ub3QgYmUgdW5kb25lLCBidXQgeW91IGNhbiB1c2UgdGhlIHVuZG8gZnVuY3Rpb24gaW4gdGhlIHRvb2xiYXIuXG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwib25DYW5jZWwoKVwiXG4gICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS1taW4taC03IGNxYS1taW4tdy03IGNxYS1yb3VuZGVkIGNxYS10ZXh0LVsjNkI3MjgwXSBob3ZlcjpjcWEtYmctWyNGM0Y0RjZdIGNxYS1wLTAgY3FhLWZsZXgtc2hyaW5rLTBcIlxuICAgICAgdGl0bGU9XCJDbG9zZVwiXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIj5cbiAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICA8cGF0aCBkPVwiTTE4IDZMNiAxOE02IDZsMTIgMTJcIiAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDwhLS0gU2VsZWN0ZWQgc3RlcHMgZm9yIFtjb250ZXh0XSAoTikg4oCTIHNjcm9sbCB3aGVuIG1hbnkgc3RlcHMsIHNjcm9sbGJhciBoaWRkZW4gKHNhbWUgYXMgY3JlYXRlLXN0ZXAtZ3JvdXApIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMiBjcWEtbWluLWgtMFwiPlxuICAgIDxsYWJlbCBjbGFzcz1cImNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMTAwJV0gY3FhLXRyYWNraW5nLW5vcm1hbCBjcWEtdGV4dC1bIzBBMEEwQV0gY3FhLWFsaWduLW1pZGRsZVwiPlxuICAgICAge3sgc2VsZWN0ZWRTdGVwc1N1YnRpdGxlIH19XG4gICAgPC9sYWJlbD5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLXNjcm9sbGJhci1oaWRlIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIgY3FhLW1heC1oLVsyMDBweF0gY3FhLW1pbi1oLTAgY3FhLW92ZXJmbG93LXktYXV0byBjcWEtb3ZlcmZsb3cteC1oaWRkZW4gY3FhLXJvdW5kZWQtWzhweF0gY3FhLXAtWzZweF0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItW3JnYmEoMCwwLDAsMC4xKV1cIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IHN0ZXAgb2Ygc3RlcHNUb0RlbGV0ZTsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLVs4cHhdIGNxYS1yb3VuZGVkLVs0cHhdIGNxYS1wdC1bNHB4XSBjcWEtcGItWzRweF0gY3FhLXBsLVs4cHhdIGNxYS1wci1bOHB4XSBjcWEtYmctW3JnYmEoMjM4LDYzLDYzLDAuMSldXCI+XG4gICAgICAgIDwhLS0gTnVtYmVyZWQgYmFkZ2UgKHJlZCkgLS0+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtdy03IGNxYS1oLTcgY3FhLXJvdW5kZWQtZnVsbCBjcWEtYmctWyNDNjM1MzVdIGNxYS10ZXh0LXdoaXRlIGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS1mbGV4LXNocmluay0wXCI+XG4gICAgICAgICAge3sgaSArIDEgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS10cmFja2luZy1bMHB4XSBjcWEtdGV4dC1bI0RDMjYyNl0gY3FhLWZsZXgtMSBjcWEtbWluLXctMCBjcWEtdHJ1bmNhdGVcIj5cbiAgICAgICAgICB7eyBnZXRTdGVwRGlzcGxheUxhYmVsKHN0ZXAsIGkpIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj4gIFxuXG4gIDwhLS0gQWN0aW9uczogQ2FuY2VsIHwgRGVsZXRlIChyaWdodC1hbGlnbmVkKSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktZW5kIGNxYS13LWZ1bGwgY3FhLWdhcC0zXCI+XG4gICAgPGNxYS1idXR0b25cbiAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXG4gICAgICBidG5TaXplPVwibGdcIlxuICAgICAgdGV4dD1cIkNhbmNlbFwiXG4gICAgICBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS10ZXh0LVsxNHB4XSBjcWEtcHktWzlweF0gY3FhLWJnLXdoaXRlIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjNDE0MTQ2XSBjcWEtdGV4dC1bIzQxNDE0Nl0nXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ2FuY2VsKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gICAgPGNxYS1idXR0b25cbiAgICAgIHZhcmlhbnQ9XCJmaWxsZWRcIlxuICAgICAgYnRuU2l6ZT1cImxnXCJcbiAgICAgIHRleHQ9XCJEZWxldGVcIlxuICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtdGV4dC1bMTRweF0gY3FhLXB5LVs5cHhdIGNxYS1yb3VuZGVkLVs4cHhdIGNxYS1ib3JkZXItMCBjcWEtYmctWyNFRTNGM0ZdIGNxYS10ZXh0LXdoaXRlJ1wiXG4gICAgICAoY2xpY2tlZCk9XCJvbkRlbGV0ZSgpXCI+XG4gICAgPC9jcWEtYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLXN0ZXBzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdGVzdC1jYXNlLWRldGFpbHMvZGVsZXRlLXN0ZXBzL2RlbGV0ZS1zdGVwcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2RlbGV0ZS1zdGVwcy9kZWxldGUtc3RlcHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFJTCxrQkFBa0IsR0FDbkIsTUFBTSwwQkFBMEIsQ0FBQzs7OztBQUVsQzs7OztHQUlHO0FBTUgsTUFBTSxPQUFPLG9CQUFvQjtJQVUvQixZQUF3RCxJQUl2RDtRQUp1RCxTQUFJLEdBQUosSUFBSSxDQUkzRDtRQWJELHNEQUFzRDtRQUN0RCxrQkFBYSxHQUF5QixFQUFFLENBQUM7UUFFekMsNkVBQTZFO1FBQzdFLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBRWxCLCtEQUErRDtRQUMvRCxlQUFVLEdBQWlDLElBQUksR0FBRyxFQUFFLENBQUM7UUFlM0Msa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3pDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBVDdDLDBDQUEwQztRQUMxQyxJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsVUFBVSxHQUFHLElB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QUFZLENBQUMsSUFBd0I7UUFDbkMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQztJQUMxQyxDQUFDOztpSEFsSFUsb0JBQW9CLGtCQVVDLGVBQWU7cUdBVnBDLG9CQUFvQixzS0NuQmpDLHU1SEF5RUE7MkZEdERhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxrQkFBa0IsUUFFdEIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFOzswQkFZakIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxlQUFlOzRDQWFyQyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgSW5qZWN0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7XG4gIFRlc3RDYXNlU3RlcENvbmZpZyxcbiAgTm9ybWFsU3RlcENvbmZpZyxcbiAgVGVzdENhc2VFdmVudFR5cGUsXG4gIGlzTm9ybWFsU3RlcENvbmZpZyxcbn0gZnJvbSAnLi4vdGVzdC1jYXNlLXN0ZXAubW9kZWxzJztcblxuLyoqXG4gKiBEZWxldGUgU3RlcHMgY29uZmlybWF0aW9uIG1vZGFsIGZvciBUZXN0IENhc2UgRGV0YWlscy5cbiAqIE1hdGNoZXMgdGhlIGRlc2lnbiBvZiBDcmVhdGUgU3RlcCBHcm91cDogc2hvd3Mgc2VsZWN0ZWQgc3RlcHMgd2l0aCBjb250ZXh0IChlLmcuIFwiSUYgbGFuZVwiKSxcbiAqIHdhcm5pbmcgdGV4dCwgYW5kIENhbmNlbCAvIERlbGV0ZSBhY3Rpb25zLiBTdGVwcyBhcmUgc2hvd24gd2l0aCByZWQvZGFuZ2VyIHN0eWxpbmcuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1kZWxldGUtc3RlcHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGVsZXRlLXN0ZXBzLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxufSlcbmV4cG9ydCBjbGFzcyBEZWxldGVTdGVwc0NvbXBvbmVudCB7XG4gIC8qKiBTdGVwcyB0aGF0IHdpbGwgYmUgZGVsZXRlZCAoc2hvd24gaW4gdGhlIGxpc3QpLiAqL1xuICBzdGVwc1RvRGVsZXRlOiBUZXN0Q2FzZVN0ZXBDb25maWdbXSA9IFtdO1xuXG4gIC8qKiBDb250ZXh0IGxhYmVsIGZvciB0aGUgc3ViLWhlYWRpbmcsIGUuZy4gXCJJRiBsYW5lXCIsIFwiRUxTRVwiLCBcIkZvciBsb29wXCIuICovXG4gIGNvbnRleHRMYWJlbCA9ICcnO1xuXG4gIC8qKiBPcHRpb25hbCBzdGVwIGltYWdlcy9zY3JlZW5zaG90cyBtYXA6IHN0ZXBJZCAtPiBpbWFnZVVybCAqL1xuICBzdGVwSW1hZ2VzOiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YT86IHtcbiAgICBzdGVwc1RvRGVsZXRlPzogVGVzdENhc2VTdGVwQ29uZmlnW107XG4gICAgY29udGV4dExhYmVsPzogc3RyaW5nO1xuICAgIHN0ZXBJbWFnZXM/OiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBzdHJpbmc+O1xuICB9KSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBmcm9tIGRpYWxvZyBkYXRhIGlmIHByb3ZpZGVkXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHRoaXMuc3RlcHNUb0RlbGV0ZSA9IGRhdGEuc3RlcHNUb0RlbGV0ZSB8fCBbXTtcbiAgICAgIHRoaXMuY29udGV4dExhYmVsID0gZGF0YS5jb250ZXh0TGFiZWwgfHwgJyc7XG4gICAgICB0aGlzLnN0ZXBJbWFnZXMgPSBkYXRhLnN0ZXBJbWFnZXMgfHwgbmV3IE1hcCgpO1xuICAgIH1cbiAgfVxuXG4gIEBPdXRwdXQoKSBjb25maXJtRGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGdldCBzdGVwc0NvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcHNUb0RlbGV0ZT8ubGVuZ3RoID8/IDA7XG4gIH1cblxuICBnZXQgdGl0bGVUZXh0KCk6IHN0cmluZyB7XG4gICAgY29uc3QgbiA9IHRoaXMuc3RlcHNDb3VudDtcbiAgICByZXR1cm4gbiA9PT0gMSA/ICdEZWxldGUgMSBzdGVwPycgOiBgRGVsZXRlICR7bn0gc3RlcHM/YDtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZFN0ZXBzU3VidGl0bGUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjdHggPSB0aGlzLmNvbnRleHRMYWJlbD8udHJpbSgpIHx8ICdzZWxlY3RlZCc7XG4gICAgcmV0dXJuIGBTZWxlY3RlZCBzdGVwcyBmb3IgJHtjdHh9ICgke3RoaXMuc3RlcHNDb3VudH0pYDtcbiAgfVxuXG4gIC8qKiBEaXNwbGF5IGxhYmVsIGZvciBhIHN0ZXAgaW4gdGhlIGxpc3QgKHNhbWUgcGF0dGVybiBhcyBjcmVhdGUtc3RlcC1ncm91cCkuICovXG4gIGdldFN0ZXBEaXNwbGF5TGFiZWwoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoaXNOb3JtYWxTdGVwQ29uZmlnKHN0ZXApKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXROb3JtYWxTdGVwTGFiZWwoc3RlcCk7XG4gICAgfVxuICAgIGlmICgnZ3JvdXBOYW1lJyBpbiBzdGVwICYmIHN0ZXAuZ3JvdXBOYW1lKSB7XG4gICAgICByZXR1cm4gc3RlcC5ncm91cE5hbWU7XG4gICAgfVxuICAgIGlmICgnY29uZGl0aW9uJyBpbiBzdGVwICYmIHN0ZXAuY29uZGl0aW9uKSB7XG4gICAgICByZXR1cm4gc3RlcC5jb25kaXRpb247XG4gICAgfVxuICAgIGlmICgnbG9vcFR5cGUnIGluIHN0ZXApIHtcbiAgICAgIGNvbnN0IGxvb3AgPSBzdGVwIGFzIHsgbG9vcFR5cGU6IHN0cmluZzsgdGVzdERhdGFQcm9maWxlPzogc3RyaW5nOyBjb25kaXRpb24/OiBzdHJpbmcgfTtcbiAgICAgIGlmIChsb29wLmxvb3BUeXBlID09PSAnZm9yJyAmJiBsb29wLnRlc3REYXRhUHJvZmlsZSkge1xuICAgICAgICByZXR1cm4gYEZvciBsb29wOiAke2xvb3AudGVzdERhdGFQcm9maWxlfWA7XG4gICAgICB9XG4gICAgICBpZiAobG9vcC5sb29wVHlwZSA9PT0gJ3doaWxlJyAmJiBsb29wLmNvbmRpdGlvbikge1xuICAgICAgICByZXR1cm4gYFdoaWxlOiAke2xvb3AuY29uZGl0aW9ufWA7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzdGVwLmRlc2NyaXB0aW9uKSB7XG4gICAgICByZXR1cm4gc3RlcC5kZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGBTdGVwICR7aW5kZXggKyAxfWA7XG4gIH1cblxuICBwcml2YXRlIGdldE5vcm1hbFN0ZXBMYWJlbChzdGVwOiBOb3JtYWxTdGVwQ29uZmlnKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJhbXMgPSBzdGVwLnBhcmFtZXRlcnMgPz8gW107XG4gICAgY29uc3QgZ2V0UGFyYW0gPSAobmFtZTogc3RyaW5nKSA9PlxuICAgICAgcGFyYW1zLmZpbmQoKHApID0+IHAubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICBjb25zdCB2YWwgPSAocDogeyB2YWx1ZT86IHN0cmluZzsgZGlzcGxheVZhbHVlPzogc3RyaW5nIH0gfCB1bmRlZmluZWQpID0+XG4gICAgICBwPy5kaXNwbGF5VmFsdWUgPz8gcD8udmFsdWUgPz8gJyc7XG5cbiAgICBzd2l0Y2ggKHN0ZXAuZXZlbnRUeXBlIGFzIFRlc3RDYXNlRXZlbnRUeXBlKSB7XG4gICAgICBjYXNlICduYXZpZ2F0ZSc6IHtcbiAgICAgICAgY29uc3QgdXJsID0gZ2V0UGFyYW0oJ3VybCcpO1xuICAgICAgICByZXR1cm4gdXJsID8gYE5hdmlnYXRlIHRvICR7dmFsKHVybCl9YCA6ICdOYXZpZ2F0ZSB0byc7XG4gICAgICB9XG4gICAgICBjYXNlICdhaS1hZ2VudCc6IHtcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gZ2V0UGFyYW0oJ2luc3RydWN0aW9ucycpID8/IGdldFBhcmFtKCdkZXNjcmlwdGlvbicpO1xuICAgICAgICByZXR1cm4gdmFsKGluc3RydWN0aW9ucykgfHwgJ0FJIEFnZW50IHN0ZXAnO1xuICAgICAgfVxuICAgICAgY2FzZSAndHlwZSc6XG4gICAgICAgIHJldHVybiB2YWwoZ2V0UGFyYW0oJ3RleHQnKSkgfHwgJ1R5cGUnO1xuICAgICAgY2FzZSAnY2xpY2snOlxuICAgICAgICByZXR1cm4gdmFsKGdldFBhcmFtKCdzZWxlY3RvcicpKSA/IGBDbGljayAke3ZhbChnZXRQYXJhbSgnc2VsZWN0b3InKSl9YCA6ICdDbGljayc7XG4gICAgICBjYXNlICd2ZXJpZnknOlxuICAgICAgICByZXR1cm4gdmFsKGdldFBhcmFtKCdkZXNjcmlwdGlvbicpKSB8fCAnVmVyaWZ5JztcbiAgICAgIGNhc2UgJ2N1c3RvbSc6IHtcbiAgICAgICAgY29uc3QgZGVzYyA9IGdldFBhcmFtKCdkZXNjcmlwdGlvbicpID8/IGdldFBhcmFtKCdhY3Rpb24nKTtcbiAgICAgICAgcmV0dXJuIHZhbChkZXNjKSB8fCAnQ3VzdG9tIHN0ZXAnO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHZhbChnZXRQYXJhbSgnZGVzY3JpcHRpb24nKSkgfHwgdmFsKHBhcmFtc1swXSkgfHwgJ1N0ZXAnO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsbGVkLmVtaXQoKTtcbiAgfVxuXG4gIG9uRGVsZXRlKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlybURlbGV0ZS5lbWl0KCk7XG4gIH1cblxuICAvKiogR2V0IHN0ZXAgaW1hZ2UgVVJMIGlmIGF2YWlsYWJsZSAqL1xuICBnZXRTdGVwSW1hZ2Uoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCFzdGVwPy5pZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuc3RlcEltYWdlcy5nZXQoc3RlcC5pZCkgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKiBDaGVjayBpZiBzdGVwIGhhcyBhbiBpbWFnZSAqL1xuICBoYXNTdGVwSW1hZ2Uoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RlcEltYWdlKHN0ZXApICE9PSBudWxsO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiY3FhLWJnLXdoaXRlIGNxYS1yb3VuZGVkLVsxMnB4XSBjcWEtc2hhZG93LWxnIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTVFN0VCXSBjcWEtdy1mdWxsIGNxYS1tYXgtdy1bNTAwcHhdIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTQgY3FhLXAtNiBjcWEtYm94LWJvcmRlciBjcWEtbWluLWgtMFwiPlxuICA8IS0tIEhlYWRlcjogdGl0bGUgKyBjbG9zZSAoWCkgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtc3RhcnQgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtZ2FwLTJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMSBjcWEtbWluLXctMFwiPlxuICAgICAgPGgyIGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsyMnB4XSBjcWEtbGVhZGluZy1bMjhweF0gY3FhLXRyYWNraW5nLW5vcm1hbCBjcWEtdGV4dC1bIzEwMTgyOF0gY3FhLW0tMFwiPlxuICAgICAgICB7eyB0aXRsZVRleHQgfX1cbiAgICAgIDwvaDI+XG4gICAgICA8cCBjbGFzcz1cImNxYS1mb250LW5vcm1hbCBjcWEtdGV4dC1bMTRweF0gY3FhLWxlYWRpbmctWzIxcHhdIGNxYS10cmFja2luZy1bLTAuMTVweF0gY3FhLXRleHQtWyM0QTU1NjVdIGNxYS1tLTBcIj5cbiAgICAgICAgVGhpcyBhY3Rpb24gY2Fubm90IGJlIHVuZG9uZSwgYnV0IHlvdSBjYW4gdXNlIHRoZSB1bmRvIGZ1bmN0aW9uIGluIHRoZSB0b29sYmFyLlxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIlxuICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtbWluLWgtNyBjcWEtbWluLXctNyBjcWEtcm91bmRlZCBjcWEtdGV4dC1bIzZCNzI4MF0gaG92ZXI6Y3FhLWJnLVsjRjNGNEY2XSBjcWEtcC0wIGNxYS1mbGV4LXNocmluay0wXCJcbiAgICAgIHRpdGxlPVwiQ2xvc2VcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XG4gICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgPHBhdGggZD1cIk0xOCA2TDYgMThNNiA2bDEyIDEyXCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8IS0tIFNlbGVjdGVkIHN0ZXBzIGZvciBbY29udGV4dF0gKE4pIOKAkyBzY3JvbGwgd2hlbiBtYW55IHN0ZXBzLCBzY3JvbGxiYXIgaGlkZGVuIChzYW1lIGFzIGNyZWF0ZS1zdGVwLWdyb3VwKSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIgY3FhLW1pbi1oLTBcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctWzEwMCVdIGNxYS10cmFja2luZy1ub3JtYWwgY3FhLXRleHQtWyMwQTBBMEFdIGNxYS1hbGlnbi1taWRkbGVcIj5cbiAgICAgIHt7IHNlbGVjdGVkU3RlcHNTdWJ0aXRsZSB9fVxuICAgIDwvbGFiZWw+XG4gICAgPGRpdiAqbmdJZj1cInN0ZXBzQ291bnQgPT09IDBcIiBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtdGV4dC1bIzZCNzI4MF0gY3FhLXAtNCBjcWEtdGV4dC1jZW50ZXJcIj5cbiAgICAgIE5vIHN0ZXBzIHNlbGVjdGVkLiBQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBzdGVwIHRvIGRlbGV0ZS5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwic3RlcHNDb3VudCA+IDBcIiBjbGFzcz1cImNxYS1zY3JvbGxiYXItaGlkZSBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yIGNxYS1tYXgtaC1bMjAwcHhdIGNxYS1taW4taC0wIGNxYS1vdmVyZmxvdy15LWF1dG8gY3FhLW92ZXJmbG93LXgtaGlkZGVuIGNxYS1yb3VuZGVkLVs4cHhdIGNxYS1wLVs2cHhdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVtyZ2JhKDAsMCwwLDAuMSldXCI+XG4gICAgICA8ZGl2XG4gICAgICAgICpuZ0Zvcj1cImxldCBzdGVwIG9mIHN0ZXBzVG9EZWxldGU7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC1bOHB4XSBjcWEtcm91bmRlZC1bNHB4XSBjcWEtcHQtWzRweF0gY3FhLXBiLVs0cHhdIGNxYS1wbC1bOHB4XSBjcWEtcHItWzhweF0gY3FhLWJnLVtyZ2JhKDIzOCw2Myw2MywwLjEpXVwiPlxuICAgICAgICA8IS0tIE51bWJlcmVkIGJhZGdlIChyZWQpIC0tPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXctNyBjcWEtaC03IGNxYS1yb3VuZGVkLWZ1bGwgY3FhLWJnLVsjQzYzNTM1XSBjcWEtdGV4dC13aGl0ZSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtZmxleC1zaHJpbmstMFwiPlxuICAgICAgICAgIHt7IGkgKyAxIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPCEtLSBTdGVwIGltYWdlIGlmIGF2YWlsYWJsZSAtLT5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICpuZ0lmPVwiaGFzU3RlcEltYWdlKHN0ZXApXCJcbiAgICAgICAgICBbc3JjXT1cImdldFN0ZXBJbWFnZShzdGVwKVwiXG4gICAgICAgICAgW2FsdF09XCInU3RlcCAnICsgKGkgKyAxKVwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtdy04IGNxYS1oLTggY3FhLXJvdW5kZWQtWzRweF0gY3FhLW9iamVjdC1jb3ZlciBjcWEtZmxleC1zaHJpbmstMCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bcmdiYSgyMjAsMzgsMzgsMC4yKV1cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtdHJhY2tpbmctWzBweF0gY3FhLXRleHQtWyNEQzI2MjZdIGNxYS1mbGV4LTEgY3FhLW1pbi13LTAgY3FhLXRydW5jYXRlXCI+XG4gICAgICAgICAge3sgZ2V0U3RlcERpc3BsYXlMYWJlbChzdGVwLCBpKSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+ICBcblxuICA8IS0tIEFjdGlvbnM6IENhbmNlbCB8IERlbGV0ZSAocmlnaHQtYWxpZ25lZCkgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWVuZCBjcWEtdy1mdWxsIGNxYS1nYXAtM1wiPlxuICAgIDxjcWEtYnV0dG9uXG4gICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgYnRuU2l6ZT1cImxnXCJcbiAgICAgIHRleHQ9XCJDYW5jZWxcIlxuICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtdGV4dC1bMTRweF0gY3FhLXB5LVs5cHhdIGNxYS1iZy13aGl0ZSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bIzQxNDE0Nl0gY3FhLXRleHQtWyM0MTQxNDZdJ1wiXG4gICAgICAoY2xpY2tlZCk9XCJvbkNhbmNlbCgpXCI+XG4gICAgPC9jcWEtYnV0dG9uPlxuICAgIDxjcWEtYnV0dG9uXG4gICAgICB2YXJpYW50PVwiZmlsbGVkXCJcbiAgICAgIGJ0blNpemU9XCJsZ1wiXG4gICAgICB0ZXh0PVwiRGVsZXRlXCJcbiAgICAgIFtjdXN0b21DbGFzc109XCInY3FhLXRleHQtWzE0cHhdIGNxYS1weS1bOXB4XSBjcWEtcm91bmRlZC1bOHB4XSBjcWEtYm9yZGVyLTAgY3FhLWJnLVsjRUUzRjNGXSBjcWEtdGV4dC13aGl0ZSdcIlxuICAgICAgW2Rpc2FibGVkXT1cInN0ZXBzQ291bnQgPT09IDBcIlxuICAgICAgKGNsaWNrZWQpPVwib25EZWxldGUoKVwiPlxuICAgIDwvY3FhLWJ1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==