@cqa-lib/cqa-ui 1.1.377 → 1.1.378
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.
- package/esm2020/lib/test-case-details/ai-agent-step/ai-agent-step.component.mjs +12 -3
- package/esm2020/lib/test-case-details/ai-verify-step/ai-verify-step.component.mjs +12 -3
- package/esm2020/lib/test-case-details/api-step/api-step.component.mjs +12 -3
- package/esm2020/lib/test-case-details/condition-step/condition-step.component.mjs +3 -3
- package/esm2020/lib/test-case-details/custom-code-step/custom-code-step.component.mjs +12 -3
- package/esm2020/lib/test-case-details/database-step/database-step.component.mjs +12 -3
- package/esm2020/lib/test-case-details/loop-step/loop-step.component.mjs +9 -3
- package/esm2020/lib/test-case-details/normal-step/normal-step.component.mjs +12 -3
- package/esm2020/lib/test-case-details/restore-session-step/restore-session-step.component.mjs +12 -3
- package/esm2020/lib/test-case-details/screenshot-step/screenshot-step.component.mjs +12 -3
- package/esm2020/lib/test-case-details/scroll-step/scroll-step.component.mjs +12 -3
- package/esm2020/lib/test-case-details/step-group/step-group.component.mjs +9 -3
- package/esm2020/lib/test-case-details/test-case-step.models.mjs +1 -1
- package/esm2020/lib/test-case-details/upload-step/upload-step.component.mjs +12 -3
- package/esm2020/lib/test-case-details/verify-url-step/verify-url-step.component.mjs +12 -3
- package/fesm2015/cqa-lib-cqa-ui.mjs +152 -28
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +139 -28
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/test-case-details/ai-agent-step/ai-agent-step.component.d.ts +3 -1
- package/lib/test-case-details/ai-verify-step/ai-verify-step.component.d.ts +3 -1
- package/lib/test-case-details/api-step/api-step.component.d.ts +3 -1
- package/lib/test-case-details/custom-code-step/custom-code-step.component.d.ts +3 -1
- package/lib/test-case-details/database-step/database-step.component.d.ts +3 -1
- package/lib/test-case-details/loop-step/loop-step.component.d.ts +1 -0
- package/lib/test-case-details/normal-step/normal-step.component.d.ts +3 -1
- package/lib/test-case-details/restore-session-step/restore-session-step.component.d.ts +3 -1
- package/lib/test-case-details/screenshot-step/screenshot-step.component.d.ts +3 -1
- package/lib/test-case-details/scroll-step/scroll-step.component.d.ts +3 -1
- package/lib/test-case-details/step-group/step-group.component.d.ts +1 -0
- package/lib/test-case-details/test-case-step.models.d.ts +2 -0
- package/lib/test-case-details/upload-step/upload-step.component.d.ts +3 -1
- package/lib/test-case-details/verify-url-step/verify-url-step.component.d.ts +3 -1
- package/package.json +1 -1
|
@@ -37,6 +37,7 @@ export class TestCaseNormalStepComponent {
|
|
|
37
37
|
this.viewDetails = new EventEmitter();
|
|
38
38
|
this.selectionChange = new EventEmitter();
|
|
39
39
|
this.clickAction = new EventEmitter();
|
|
40
|
+
this.stepUpdate = new EventEmitter();
|
|
40
41
|
this.eventTypeDropdownOpen = false;
|
|
41
42
|
/** Stored test data modal state for reopening with same selections. */
|
|
42
43
|
this.testDataModalState = null;
|
|
@@ -306,6 +307,12 @@ export class TestCaseNormalStepComponent {
|
|
|
306
307
|
onDelete() {
|
|
307
308
|
this.delete.emit();
|
|
308
309
|
}
|
|
310
|
+
onSkipToggle() {
|
|
311
|
+
// Toggle: if currently true → pass false (unskip); if currently false/undefined → pass true (skip)
|
|
312
|
+
const currentlySkipped = !!(this.config?.shouldSkip);
|
|
313
|
+
const shouldSkipNext = !currentlySkipped;
|
|
314
|
+
this.stepUpdate.emit({ ...this.config, shouldSkip: shouldSkipNext });
|
|
315
|
+
}
|
|
309
316
|
onMoreOptions() {
|
|
310
317
|
this.moreOptions.emit();
|
|
311
318
|
}
|
|
@@ -376,10 +383,10 @@ export class TestCaseNormalStepComponent {
|
|
|
376
383
|
}
|
|
377
384
|
}
|
|
378
385
|
TestCaseNormalStepComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestCaseNormalStepComponent, deps: [{ token: i1.CustomEditStepService }, { token: i2.ElementPopupService }, { token: i3.TestDataModalService }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i4.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
|
|
379
|
-
TestCaseNormalStepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TestCaseNormalStepComponent, selector: "cqa-test-case-normal-step", inputs: { config: "config", stepNumber: "stepNumber", index: "index", action: "action", eventType: "eventType", parameters: "parameters", selected: "selected", disabled: "disabled", isNested: "isNested", isInsideLoop: "isInsideLoop", isInsideStepGroup: "isInsideStepGroup", isReorder: "isReorder", editable: "editable", stepIndex: "stepIndex", isDuplicating: "isDuplicating" }, outputs: { eventTypeChange: "eventTypeChange", parameterChange: "parameterChange", edit: "edit", editInDepth: "editInDepth", link: "link", duplicate: "duplicate", delete: "delete", moreOptions: "moreOptions", viewDetails: "viewDetails", selectionChange: "selectionChange", clickAction: "clickAction" }, host: { listeners: { "document:click": "onDocumentClick($event)" }, classAttribute: "cqa-ui-root" }, viewQueries: [{ propertyName: "dropdownContainer", first: true, predicate: ["dropdownContainer"], descendants: true }, { propertyName: "descriptionTrigger", first: true, predicate: ["descriptionTrigger"], descendants: true }, { propertyName: "testDataTrigger", first: true, predicate: ["testDataTrigger"], descendants: true }, { propertyName: "editTrigger", first: true, predicate: ["editTrigger"], descendants: true }, { propertyName: "elementTrigger", first: true, predicate: ["elementTrigger"], descendants: true }, { propertyName: "clickElementTrigger", first: true, predicate: ["clickElementTrigger"], descendants: true }, { propertyName: "viewDetailsTrigger", first: true, predicate: ["viewDetailsTrigger"], descendants: true }], ngImport: i0, template: "<div [class]=\"'step-row cqa-flex cqa-items-center cqa-gap-3 cqa-py-2 cqa-px-4 ' + (isInsideLoop && isInsideStepGroup ? 'cqa-pl-20 cqa-pr-4' : (isInsideLoop || isInsideStepGroup) ? 'cqa-pl-10 cqa-pr-4' : '')\" style=\"border-top: 1px solid #E5E7EB; border-bottom: 1px solid #E5E7EB;\">\n\n <div class=\"cqa-inline-flex cqa-items-center\">\n <!-- Drag Handle Icon (when isReorder is true and not inside step group - steps inside step groups cannot be reordered) -->\n <div *ngIf=\"isReorder && !isInsideStepGroup\" class=\"cqa-mr-2 cqa-cursor-move cqa-text-[#6B7280] hover:cqa-text-[#111827]\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"3\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n </svg>\n </div>\n <!-- Checkbox (when isReorder is false, editable, and not inside step group - hide for steps inside step groups) -->\n <label *ngIf=\"editable && !isReorder && !isInsideStepGroup\" class=\"cqa-flex cqa-items-center cqa-cursor-pointer cqa-relative cqa-mr-2\">\n <input type=\"checkbox\"\n [ngModel]=\"selected\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onSelectionChange($event)\"\n class=\"cqa-h-4 cqa-w-4 cqa-cursor-pointer cqa-transition-all cqa-appearance-none cqa-rounded shadow hover:cqa-shadow-md cqa-border cqa-border-solid cqa-border-slate-300 cqa-flex-shrink-0\"\n [class.cqa-bg-[#3F43EE]]=\"selected\"\n [class.cqa-border-[#3F43EE]]=\"selected\"\n id=\"check\" />\n <span class=\"cqa-absolute cqa-text-white cqa-top-1/2 cqa-left-1/2 cqa--translate-x-1/2 cqa--translate-y-1/2 cqa-pointer-events-none cqa-flex cqa-items-center cqa-justify-center\"\n [class.cqa-opacity-0]=\"!selected\"\n [class.cqa-opacity-100]=\"selected\">\n <svg width=\"12\" height=\"13\" viewBox=\"0 0 12 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10 3.125L4.5 8.625L2 6.125\" stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </span>\n </label>\n </div>\n\n <!-- Step Number -->\n <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-[18px] cqa-min-w-[32px]\">\n {{ stepNumber }}\n </span>\n\n <!-- Event Type Selector (Pill Button) #### (click)=\"toggleEventTypeDropdown(); $event.stopPropagation()\" -->\n <div class=\"cqa-relative\" #dropdownContainer>\n <button type=\"button\" \n [attr.title]=\"getCurrentEventTypeConfig().label\"\n [style.background-color]=\"getCurrentEventTypeConfig().backgroundColor\"\n [style.color]=\"getCurrentEventTypeConfig().color\"\n class=\"cqa-w-8 cqa-h-8 cqa-rounded-lg cqa-flex cqa-items-center cqa-justify-center cqa-flex-shrink-0 cqa-cursor-pointer\">\n <!-- Icon -->\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'paper_plane'\">\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 6.41663L12.8333 1.16663L7.58333 12.25L6.41667 7.58329L1.75 6.41663Z\" stroke=\"currentColor\"\n stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'star'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5.797 9.04165C5.74492 8.83977 5.63969 8.65554 5.49227 8.50812C5.34485 8.3607 5.16062 8.25548 4.95875 8.2034L1.38 7.28057C1.31894 7.26324 1.2652 7.22646 1.22694 7.17583C1.18867 7.12519 1.16797 7.06345 1.16797 6.99998C1.16797 6.93651 1.18867 6.87478 1.22694 6.82414C1.2652 6.7735 1.31894 6.73673 1.38 6.7194L4.95875 5.79598C5.16055 5.74395 5.34473 5.63882 5.49215 5.49151C5.63956 5.34419 5.74483 5.16008 5.797 4.95832L6.71983 1.37957C6.73698 1.31827 6.77372 1.26427 6.82443 1.2258C6.87515 1.18733 6.93705 1.1665 7.0007 1.1665C7.06436 1.1665 7.12626 1.18733 7.17698 1.2258C7.22769 1.26427 7.26442 1.31827 7.28158 1.37957L8.20383 4.95832C8.25591 5.16019 8.36113 5.34442 8.50855 5.49184C8.65597 5.63926 8.8402 5.74449 9.04208 5.79657L12.6208 6.71882C12.6824 6.73579 12.7366 6.77249 12.7753 6.82328C12.814 6.87407 12.8349 6.93614 12.8349 6.99998C12.8349 7.06382 12.814 7.1259 12.7753 7.17669C12.7366 7.22748 12.6824 7.26417 12.6208 7.28115L9.04208 8.2034C8.8402 8.25548 8.65597 8.3607 8.50855 8.50812C8.36113 8.65554 8.25591 8.83977 8.20383 9.04165L7.281 12.6204C7.26384 12.6817 7.22711 12.7357 7.17639 12.7742C7.12568 12.8126 7.06377 12.8335 7.00012 12.8335C6.93647 12.8335 6.87456 12.8126 6.82385 12.7742C6.77314 12.7357 6.7364 12.6817 6.71925 12.6204L5.797 9.04165Z\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M11.666 1.75V4.08333\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M12.8333 2.91663H10.5\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M2.33398 9.91663V11.0833\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M2.91667 10.5H1.75\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'T'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2.33398 4.08325V2.33325H11.6673V4.08325\" stroke=\"currentColor\" stroke-width=\"1.16667\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M5.25 11.6667H8.75\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M7 2.33325V11.6666\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'cursor'\">\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 1.75L5.87417 11.6492L7.33833 7.33833L11.6492 5.87417L1.75 1.75Z\" stroke=\"currentColor\"\n stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M7.58398 7.58325L11.084 11.0833\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'cursor-double'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.16667 2.3916L7 3.49993\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2.97487 4.66662L1.2832 4.19995\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M3.50091 7L2.39258 8.16667\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.19922 1.28345L4.66589 2.97511\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M5.27114 5.65255C5.24852 5.59926 5.24234 5.54043 5.25338 5.48361C5.26443 5.42678 5.2922 5.37455 5.33313 5.33362C5.37407 5.29269 5.4263 5.26492 5.48312 5.25387C5.53994 5.24283 5.59877 5.24901 5.65206 5.27163L12.0687 7.89663C12.1258 7.92006 12.174 7.961 12.2064 8.01357C12.2388 8.06613 12.2536 8.12761 12.2488 8.18915C12.244 8.25069 12.2198 8.30912 12.1797 8.35603C12.1396 8.40295 12.0856 8.43592 12.0256 8.45021L9.48864 9.05746C9.38391 9.08248 9.28815 9.13599 9.21196 9.21208C9.13578 9.28816 9.08213 9.38385 9.05698 9.48855L8.45031 12.026C8.43617 12.0863 8.40323 12.1405 8.35626 12.1808C8.30928 12.2211 8.25071 12.2454 8.189 12.2502C8.1273 12.255 8.06567 12.2401 8.01302 12.2075C7.96037 12.175 7.91944 12.1266 7.89614 12.0692L5.27114 5.65255Z\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'enter'\" class=\"cqa-enter-key-icon cqa-inline-flex cqa-flex-shrink-0\" style=\"width: 20px; height: 20px;\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 32 32\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-w-full cqa-h-full\">\n <path fill=\"#6B7280\" transform=\"translate(14,5)\" d=\"M0 0 C4.29 0 8.58 0 13 0 C13 7.26 13 14.52 13 22 C5.74 22 -1.52 22 -9 22 C-9 16.72 -9 11.44 -9 6 C-6.03 6 -3.06 6 0 6 C0 4.02 0 2.04 0 0 Z M2 2 C2 3.98 2 5.96 2 8 C-0.97 8 -3.94 8 -7 8 C-7 11.96 -7 15.92 -7 20 C-1.06 20 4.88 20 11 20 C11 14.06 11 8.12 11 2 C8.03 2 5.06 2 2 2 Z\"/>\n <path fill=\"#6B7280\" transform=\"translate(19,13)\" d=\"M0 0 C0.66 0 1.32 0 2 0 C2 2.31 2 4.62 2 7 C0.02 7 -1.96 7 -4 7 C-4.33 8.32 -4.66 9.64 -5 11 C-6.65 9.68 -8.3 8.36 -10 7 C-8.63016497 3.83884224 -8.0109362 3.0072908 -5 1 C-4.67 2.32 -4.34 3.64 -4 5 C-2.68 5 -1.36 5 0 5 C0 3.35 0 1.7 0 0 Z\"/>\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'clock'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.99935 12.8334C10.221 12.8334 12.8327 10.2217 12.8327 7.00008C12.8327 3.77842 10.221 1.16675 6.99935 1.16675C3.77769 1.16675 1.16602 3.77842 1.16602 7.00008C1.16602 10.2217 3.77769 12.8334 6.99935 12.8334Z\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M7 3.5V7L9.33333 8.16667\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'settings'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 4.66667C5.71133 4.66667 4.66667 5.71133 4.66667 7C4.66667 8.28867 5.71133 9.33333 7 9.33333C8.28867 9.33333 9.33333 8.28867 9.33333 7C9.33333 5.71133 8.28867 4.66667 7 4.66667Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M11.0833 7.58333C11.1417 7.29167 11.1417 6.70833 11.0833 6.41667L12.25 5.83333C12.4167 5.70833 12.4833 5.48333 12.4167 5.25L11.6667 3.41667C11.6 3.18333 11.3917 3.04167 11.1417 3.04167L9.91667 3.5C9.56667 3.20833 9.19167 2.95833 8.75 2.79167L8.4 1.45833C8.34167 1.225 8.14167 1.16667 7.93333 1.16667H6.06667C5.85833 1.16667 5.65833 1.225 5.6 1.45833L5.25 2.79167C4.80833 2.95833 4.43333 3.20833 4.08333 3.5L2.85833 3.04167C2.60833 3.04167 2.4 3.18333 2.33333 3.41667L1.58333 5.25C1.51667 5.48333 1.58333 5.70833 1.75 5.83333L2.91667 6.41667C2.85833 6.70833 2.85833 7.29167 2.91667 7.58333L1.75 8.16667C1.58333 8.29167 1.51667 8.51667 1.58333 8.75L2.33333 10.5833C2.4 10.8167 2.60833 10.9583 2.85833 10.9583L4.08333 10.5C4.43333 10.7917 4.80833 11.0417 5.25 11.2083L5.6 12.5417C5.65833 12.775 5.85833 12.8333 6.06667 12.8333H7.93333C8.14167 12.8333 8.34167 12.775 8.4 12.5417L8.75 11.2083C9.19167 11.0417 9.56667 10.7917 9.91667 10.5L11.1417 10.9583C11.3917 10.9583 11.6 10.8167 11.6667 10.5833L12.4167 8.75C12.4833 8.51667 12.4167 8.29167 12.25 8.16667L11.0833 7.58333Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'check'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.6667 3.5L5.25 10.5L2.33333 7.58333\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n\n <!-- Label (show only when no icon; all types have icon now \u2013 tooltip on button) -->\n <span *ngIf=\"!getCurrentEventTypeConfig().icon\" class=\"cqa-text-[#432DD7] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium\">{{\n getCurrentEventTypeConfig().label }}</span>\n </button>\n\n <!-- Dropdown Menu -->\n <div *ngIf=\"eventTypeDropdownOpen\" (click)=\"$event.stopPropagation()\"\n class=\"cqa-absolute cqa-top-full cqa-left-0 cqa-mt-1 cqa-bg-white cqa-rounded-lg cqa-shadow-lg cqa-border cqa-border-gray-200 cqa-z-50 cqa-min-w-[150px] cqa-py-1\">\n <button *ngFor=\"let etc of eventTypeConfigs\" type=\"button\" (click)=\"onEventTypeSelect(etc.type)\"\n [class.cqa-bg-primary-50]=\"eventType === etc.type\"\n class=\"cqa-w-full cqa-px-3 cqa-py-2 cqa-text-left cqa-flex cqa-items-center cqa-gap-2 hover:cqa-bg-gray-50 cqa-transition-colors\">\n <span *ngIf=\"etc.icon === 'paper_plane'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1 5.5L11 1M11 1L7.5 11L6 6.5L1 5.5M11 1L1 5.5\" stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'star'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 1L7.5 4.5L11 5L7.5 5.5L6 9L4.5 5.5L1 5L4.5 4.5L6 1Z\" fill=\"currentColor\" />\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'T'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2.33398 4.08325V2.33325H11.6673V4.08325\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M5.25 11.6667H8.75\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 2.33325V11.6666\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'cursor'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 2L9 1L10 8L7 7L5 9L4 7L2 2Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'cursor-double'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.16667 2.3916L7 3.49993\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2.97487 4.66662L1.2832 4.19995\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M3.50091 7L2.39258 8.16667\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.19922 1.28345L4.66589 2.97511\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M5.27114 5.65255C5.24852 5.59926 5.24234 5.54043 5.25338 5.48361C5.26443 5.42678 5.2922 5.37455 5.33313 5.33362C5.37407 5.29269 5.4263 5.26492 5.48312 5.25387C5.53994 5.24283 5.59877 5.24901 5.65206 5.27163L12.0687 7.89663C12.1258 7.92006 12.174 7.961 12.2064 8.01357C12.2388 8.06613 12.2536 8.12761 12.2488 8.18915C12.244 8.25069 12.2198 8.30912 12.1797 8.35603C12.1396 8.40295 12.0856 8.43592 12.0256 8.45021L9.48864 9.05746C9.38391 9.08248 9.28815 9.13599 9.21196 9.21208C9.13578 9.28816 9.08213 9.38385 9.05698 9.48855L8.45031 12.026C8.43617 12.0863 8.40323 12.1405 8.35626 12.1808C8.30928 12.2211 8.25071 12.2454 8.189 12.2502C8.1273 12.255 8.06567 12.2401 8.01302 12.2075C7.96037 12.175 7.91944 12.1266 7.89614 12.0692L5.27114 5.65255Z\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> \n </span>\n <span *ngIf=\"etc.icon === 'enter'\" class=\"cqa-enter-key-icon cqa-inline-flex cqa-flex-shrink-0\" style=\"width: 16px; height: 16px;\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 32 32\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-w-full cqa-h-full\">\n <path fill=\"#6B7280\" transform=\"translate(14,5)\" d=\"M0 0 C4.29 0 8.58 0 13 0 C13 7.26 13 14.52 13 22 C5.74 22 -1.52 22 -9 22 C-9 16.72 -9 11.44 -9 6 C-6.03 6 -3.06 6 0 6 C0 4.02 0 2.04 0 0 Z M2 2 C2 3.98 2 5.96 2 8 C-0.97 8 -3.94 8 -7 8 C-7 11.96 -7 15.92 -7 20 C-1.06 20 4.88 20 11 20 C11 14.06 11 8.12 11 2 C8.03 2 5.06 2 2 2 Z\"/>\n <path fill=\"#6B7280\" transform=\"translate(19,13)\" d=\"M0 0 C0.66 0 1.32 0 2 0 C2 2.31 2 4.62 2 7 C0.02 7 -1.96 7 -4 7 C-4.33 8.32 -4.66 9.64 -5 11 C-6.65 9.68 -8.3 8.36 -10 7 C-8.63016497 3.83884224 -8.0109362 3.0072908 -5 1 C-4.67 2.32 -4.34 3.64 -4 5 C-2.68 5 -1.36 5 0 5 C0 3.35 0 1.7 0 0 Z\"/>\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'clock'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n <path d=\"M6 3V6L8 7\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'settings'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 4.66667C5.71133 4.66667 4.66667 5.71133 4.66667 7C4.66667 8.28867 5.71133 9.33333 7 9.33333C8.28867 9.33333 9.33333 8.28867 9.33333 7C9.33333 5.71133 8.28867 4.66667 7 4.66667Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M11.0833 7.58333C11.1417 7.29167 11.1417 6.70833 11.0833 6.41667L12.25 5.83333C12.4167 5.70833 12.4833 5.48333 12.4167 5.25L11.6667 3.41667C11.6 3.18333 11.3917 3.04167 11.1417 3.04167L9.91667 3.5C9.56667 3.20833 9.19167 2.95833 8.75 2.79167L8.4 1.45833C8.34167 1.225 8.14167 1.16667 7.93333 1.16667H6.06667C5.85833 1.16667 5.65833 1.225 5.6 1.45833L5.25 2.79167C4.80833 2.95833 4.43333 3.20833 4.08333 3.5L2.85833 3.04167C2.60833 3.04167 2.4 3.18333 2.33333 3.41667L1.58333 5.25C1.51667 5.48333 1.58333 5.70833 1.75 5.83333L2.91667 6.41667C2.85833 6.70833 2.85833 7.29167 2.91667 7.58333L1.75 8.16667C1.58333 8.29167 1.51667 8.51667 1.58333 8.75L2.33333 10.5833C2.4 10.8167 2.60833 10.9583 2.85833 10.9583L4.08333 10.5C4.43333 10.7917 4.80833 11.0417 5.25 11.2083L5.6 12.5417C5.65833 12.775 5.85833 12.8333 6.06667 12.8333H7.93333C8.14167 12.8333 8.34167 12.775 8.4 12.5417L8.75 11.2083C9.19167 11.0417 9.56667 10.7917 9.91667 10.5L11.1417 10.9583C11.3917 10.9583 11.6 10.8167 11.6667 10.5833L12.4167 8.75C12.4833 8.51667 12.4167 8.29167 12.25 8.16667L11.0833 7.58333Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'check'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.6667 3.5L5.25 10.5L2.33333 7.58333\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span>{{ etc.label }}</span>\n </button>\n </div>\n </div>\n\n <!-- Action Description: flex-1 + min-w-0 so row can shrink; block flow in step-list SCSS avoids flex breaking innerHTML badges -->\n <span class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px] cqa-action-format cqa-align-middle cqa-min-w-0 cqa-flex-1\" *ngIf=\"getActionDescription()\"\n [innerHTML]=\"getActionDescription()\" (click)=\"clickOnAction($event)\">\n </span>\n <!-- <span class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px]\" *ngIf=\"getActionDescription()\">\n {{ getActionDescription() }}\n </span> -->\n\n <!-- Parameters -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3\" *ngIf=\"false\">\n <!-- Navigate: URL as clickable trigger for Test Data modal -->\n <span *ngIf=\"eventType === 'navigate' && getNavigateUrlParameter()\" #testDataTrigger\n (click)=\"openTestDataModal($event)\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC] cqa-cursor-pointer hover:cqa-opacity-90\">\n {{ getNavigateUrlParameter()?.value || getNavigateUrlParameter()?.displayValue }}\n </span>\n \n <!-- Other event types: loop through parameters (navigate excluded) -->\n <ng-container *ngFor=\"let param of parameters; let i = index\">\n <!-- Skip navigate parameters in the loop (already shown above) -->\n <ng-container *ngIf=\"eventType !== 'navigate'\">\n\n <!-- Type: First param (text value like {{username}}) -->\n <span *ngIf=\"eventType === 'type' && i === 0\" class=\"cqa-text-gray-900 cqa-text-sm\">\n {{ param.value }}\n </span>\n\n <!-- Type: \"into\" text -->\n <span *ngIf=\"eventType === 'type' && i === 0\" class=\"cqa-text-gray-900 cqa-text-sm\">\n into\n </span>\n\n <!-- Type: Second param (selector) -->\n <span *ngIf=\"eventType === 'type' && i === 1\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n\n <!-- Click: Selector input/display -->\n <span *ngIf=\"eventType === 'click' && param.name === 'element'\"\n #clickElementTrigger\n (click)=\"openElementPopup($event)\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-cursor-pointer cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n\n <!-- Click: Suffix text (like \"if Present\") -->\n <span *ngIf=\"eventType === 'click' && param.name === 'suffix'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n {{ param.value }}\n </span>\n\n <!-- Double Click: Selector input/display -->\n <span *ngIf=\"eventType === 'doubleClick' && i === 0\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n\n <!-- Press Enter: Selector input/display with HTML support -->\n <span *ngIf=\"eventType === 'pressEnter' && i === 0\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\"\n [innerHTML]=\"param.displayValue || param.value\">\n </span>\n\n <!-- Enter: Value display with quotes (like click action) -->\n <span *ngIf=\"eventType === 'enter' && param.name === 'value'\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n\n <!-- Enter: \"in the\" text -->\n <span *ngIf=\"eventType === 'enter' && param.name === 'value'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n in the\n </span>\n\n <!-- Enter: Label display with quotes (like click action) -->\n <span *ngIf=\"eventType === 'enter' && param.name === 'label'\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n\n <!-- Enter: \"field\" text -->\n <span *ngIf=\"eventType === 'enter' && param.name === 'label'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n field\n </span>\n\n <!-- Wait: Duration input -->\n <input *ngIf=\"eventType === 'wait' && param.name === 'duration'\" type=\"number\" [value]=\"param.value\"\n (input)=\"onParameterChange(param, $any($event.target).value)\" placeholder=\"2\"\n class=\"cqa-w-16 cqa-px-2 cqa-py-1.5 cqa-rounded-lg cqa-border cqa-border-solid cqa-border-[#9E9EE3] cqa-bg-[#D1C4E9] cqa-text-[#3F43EE] cqa-text-sm cqa-font-medium cqa-outline-none focus:cqa-ring-2 focus:cqa-ring-[#3F43EE] focus:cqa-ring-opacity-50\" />\n <span *ngIf=\"eventType === 'wait' && param.name === 'duration'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n seconds\n </span>\n\n <!-- Wait: Element selector -->\n <span *ngIf=\"eventType === 'wait' && param.name === 'element'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n for element\n </span>\n <span *ngIf=\"eventType === 'wait' && param.name === 'element'\" \n #elementTrigger\n (click)=\"openElementPopup($event)\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-cursor-pointer cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n <span *ngIf=\"eventType === 'wait' && param.name === 'element'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n to be visible\n </span>\n\n <!-- Custom: Description (clickable to open Step Description modal; pass $event so modal opens below this trigger) -->\n <span *ngIf=\"eventType === 'custom'\" #descriptionTrigger\n (click)=\"openStepDescriptionModal($event)\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC] cqa-cursor-pointer hover:cqa-opacity-90\"\n [innerHTML]=\"param.displayValue || param.value\">\n </span>\n\n <!-- AI Agent: Instructions -->\n <span *ngIf=\"eventType === 'ai-agent'\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-ml-auto cqa-self-center\">\n <!-- Action Icons: Edit, Link, Duplicate, Delete (show on hover; hidden when step is inside step-group) - placed first -->\n <div *ngIf=\"editable && !isInsideStepGroup && !isReorder\" class=\"step-actions cqa-flex cqa-items-center cqa-gap-1.5 cqa-pr-2\">\n <button type=\"button\" #editTrigger (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\" stroke-linejoin=\"round\"/>\n <path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\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 <path 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\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path 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\" 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\" stroke-linejoin=\"round\"/>\n </svg>\n </button> -->\n <button\n type=\"button\"\n (click)=\"onDuplicate(); $event.stopPropagation()\"\n [disabled]=\"isDuplicating\"\n [attr.title]=\"isDuplicating ? 'Duplicating...' : 'Duplicate'\"\n class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6] disabled:cqa-opacity-60 disabled:cqa-cursor-not-allowed\"\n >\n <svg *ngIf=\"!isDuplicating\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"isDuplicating\" width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-label=\"Duplicating\">\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" stroke-opacity=\"0.2\" stroke-width=\"2\"></circle>\n <path d=\"M14 8A6 6 0 0 0 8 2\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\">\n <animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 8 8\" to=\"360 8 8\" dur=\"0.8s\" repeatCount=\"indefinite\"/>\n </path>\n </svg>\n </button>\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\" stroke-linejoin=\"round\"/>\n <path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path 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\" 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\" stroke-linejoin=\"round\"/>\n <path d=\"M8.16602 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n\n <!-- View Details Link (show only if description is not empty) -->\n <a *ngIf=\"config.description && config.description.trim() !== ''\" #viewDetailsTrigger href=\"#\" (click)=\"onViewDetails($event)\" class=\"cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1 cqa-no-underline\">View Details<svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.03809 6.74329L2.62809 7.33329L5.96142 3.99996L2.62809 0.666626L2.03809 1.25663L4.78142 3.99996L2.03809 6.74329Z\" fill=\"#3F43EE\"/></svg></a>\n\n <!-- Created Date (from API) - last so aligned across all steps, format: 25 Feb 2026 -->\n <span *ngIf=\"config.createdDate\" class=\"step-date cqa-text-[#6B7280] cqa-text-[12px] cqa-leading-[15px] cqa-ml-auto cqa-flex-shrink-0\">\n {{ config.createdDate | date:'d MMM yyyy' }}\n </span>\n </div>\n</div>", styles: [".step-actions{opacity:0;transition:opacity .15s ease}.step-row:hover .step-actions{opacity:1}.step-row{vertical-align:middle;letter-spacing:normal}\n"], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "date": i5.DatePipe } });
|
|
386
|
+
TestCaseNormalStepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TestCaseNormalStepComponent, selector: "cqa-test-case-normal-step", inputs: { config: "config", stepNumber: "stepNumber", index: "index", action: "action", eventType: "eventType", parameters: "parameters", selected: "selected", disabled: "disabled", isNested: "isNested", isInsideLoop: "isInsideLoop", isInsideStepGroup: "isInsideStepGroup", isReorder: "isReorder", editable: "editable", stepIndex: "stepIndex", isDuplicating: "isDuplicating" }, outputs: { eventTypeChange: "eventTypeChange", parameterChange: "parameterChange", edit: "edit", editInDepth: "editInDepth", link: "link", duplicate: "duplicate", delete: "delete", moreOptions: "moreOptions", viewDetails: "viewDetails", selectionChange: "selectionChange", clickAction: "clickAction", stepUpdate: "stepUpdate" }, host: { listeners: { "document:click": "onDocumentClick($event)" }, classAttribute: "cqa-ui-root" }, viewQueries: [{ propertyName: "dropdownContainer", first: true, predicate: ["dropdownContainer"], descendants: true }, { propertyName: "descriptionTrigger", first: true, predicate: ["descriptionTrigger"], descendants: true }, { propertyName: "testDataTrigger", first: true, predicate: ["testDataTrigger"], descendants: true }, { propertyName: "editTrigger", first: true, predicate: ["editTrigger"], descendants: true }, { propertyName: "elementTrigger", first: true, predicate: ["elementTrigger"], descendants: true }, { propertyName: "clickElementTrigger", first: true, predicate: ["clickElementTrigger"], descendants: true }, { propertyName: "viewDetailsTrigger", first: true, predicate: ["viewDetailsTrigger"], descendants: true }], ngImport: i0, template: "<div [class]=\"'step-row cqa-flex cqa-items-center cqa-gap-3 cqa-py-2 cqa-px-4 ' + (isInsideLoop && isInsideStepGroup ? 'cqa-pl-20 cqa-pr-4' : (isInsideLoop || isInsideStepGroup) ? 'cqa-pl-10 cqa-pr-4' : '') + (config?.shouldSkip ? ' cqa-step-skipped' : '')\" [style.opacity]=\"config?.shouldSkip ? '0.6' : null\" style=\"border-top: 1px solid #E5E7EB; border-bottom: 1px solid #E5E7EB\">\n\n <div class=\"cqa-inline-flex cqa-items-center\">\n <!-- Drag Handle Icon (when isReorder is true and not inside step group - steps inside step groups cannot be reordered) -->\n <div *ngIf=\"isReorder && !isInsideStepGroup\" class=\"cqa-mr-2 cqa-cursor-move cqa-text-[#6B7280] hover:cqa-text-[#111827]\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"3\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n </svg>\n </div>\n <!-- Checkbox (when isReorder is false, editable, and not inside step group - hide for steps inside step groups) -->\n <label *ngIf=\"editable && !isReorder && !isInsideStepGroup\" class=\"cqa-flex cqa-items-center cqa-cursor-pointer cqa-relative cqa-mr-2\">\n <input type=\"checkbox\"\n [ngModel]=\"selected\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onSelectionChange($event)\"\n class=\"cqa-h-4 cqa-w-4 cqa-cursor-pointer cqa-transition-all cqa-appearance-none cqa-rounded shadow hover:cqa-shadow-md cqa-border cqa-border-solid cqa-border-slate-300 cqa-flex-shrink-0\"\n [class.cqa-bg-[#3F43EE]]=\"selected\"\n [class.cqa-border-[#3F43EE]]=\"selected\"\n id=\"check\" />\n <span class=\"cqa-absolute cqa-text-white cqa-top-1/2 cqa-left-1/2 cqa--translate-x-1/2 cqa--translate-y-1/2 cqa-pointer-events-none cqa-flex cqa-items-center cqa-justify-center\"\n [class.cqa-opacity-0]=\"!selected\"\n [class.cqa-opacity-100]=\"selected\">\n <svg width=\"12\" height=\"13\" viewBox=\"0 0 12 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10 3.125L4.5 8.625L2 6.125\" stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </span>\n </label>\n <!-- Lock icon for steps inside a step group (non-editable indicator) -->\n <div *ngIf=\"isInsideStepGroup\" class=\"cqa-ml-1 cqa-mr-1 cqa-text-[#9CA3AF]\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.9998 5.66667H11.3332V4.33333C11.3332 2.49333 9.83984 1 7.99984 1C6.15984 1 4.6665 2.49333 4.6665 4.33333V5.66667H3.99984C3.2665 5.66667 2.6665 6.26667 2.6665 7V13.6667C2.6665 14.4 3.2665 15 3.99984 15H11.9998C12.7332 15 13.3332 14.4 13.3332 13.6667V7C13.3332 6.26667 12.7332 5.66667 11.9998 5.66667ZM5.99984 4.33333C5.99984 3.22667 6.89317 2.33333 7.99984 2.33333C9.1065 2.33333 9.99984 3.22667 9.99984 4.33333V5.66667H5.99984V4.33333ZM11.9998 13.6667H3.99984V7H11.9998V13.6667ZM7.99984 11.6667C8.73317 11.6667 9.33317 11.0667 9.33317 10.3333C9.33317 9.6 8.73317 9 7.99984 9C7.2665 9 6.6665 9.6 6.6665 10.3333C6.6665 11.0667 7.2665 11.6667 7.99984 11.6667Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n </div>\n\n <!-- Step Number -->\n <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-[18px] cqa-min-w-[32px]\">\n {{ stepNumber }}\n </span>\n\n <!-- Event Type Selector (Pill Button) #### (click)=\"toggleEventTypeDropdown(); $event.stopPropagation()\" -->\n <div class=\"cqa-relative\" #dropdownContainer>\n <button type=\"button\" \n [attr.title]=\"getCurrentEventTypeConfig().label\"\n [style.background-color]=\"getCurrentEventTypeConfig().backgroundColor\"\n [style.color]=\"getCurrentEventTypeConfig().color\"\n class=\"cqa-w-8 cqa-h-8 cqa-rounded-lg cqa-flex cqa-items-center cqa-justify-center cqa-flex-shrink-0 cqa-cursor-pointer\">\n <!-- Icon -->\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'paper_plane'\">\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 6.41663L12.8333 1.16663L7.58333 12.25L6.41667 7.58329L1.75 6.41663Z\" stroke=\"currentColor\"\n stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'star'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5.797 9.04165C5.74492 8.83977 5.63969 8.65554 5.49227 8.50812C5.34485 8.3607 5.16062 8.25548 4.95875 8.2034L1.38 7.28057C1.31894 7.26324 1.2652 7.22646 1.22694 7.17583C1.18867 7.12519 1.16797 7.06345 1.16797 6.99998C1.16797 6.93651 1.18867 6.87478 1.22694 6.82414C1.2652 6.7735 1.31894 6.73673 1.38 6.7194L4.95875 5.79598C5.16055 5.74395 5.34473 5.63882 5.49215 5.49151C5.63956 5.34419 5.74483 5.16008 5.797 4.95832L6.71983 1.37957C6.73698 1.31827 6.77372 1.26427 6.82443 1.2258C6.87515 1.18733 6.93705 1.1665 7.0007 1.1665C7.06436 1.1665 7.12626 1.18733 7.17698 1.2258C7.22769 1.26427 7.26442 1.31827 7.28158 1.37957L8.20383 4.95832C8.25591 5.16019 8.36113 5.34442 8.50855 5.49184C8.65597 5.63926 8.8402 5.74449 9.04208 5.79657L12.6208 6.71882C12.6824 6.73579 12.7366 6.77249 12.7753 6.82328C12.814 6.87407 12.8349 6.93614 12.8349 6.99998C12.8349 7.06382 12.814 7.1259 12.7753 7.17669C12.7366 7.22748 12.6824 7.26417 12.6208 7.28115L9.04208 8.2034C8.8402 8.25548 8.65597 8.3607 8.50855 8.50812C8.36113 8.65554 8.25591 8.83977 8.20383 9.04165L7.281 12.6204C7.26384 12.6817 7.22711 12.7357 7.17639 12.7742C7.12568 12.8126 7.06377 12.8335 7.00012 12.8335C6.93647 12.8335 6.87456 12.8126 6.82385 12.7742C6.77314 12.7357 6.7364 12.6817 6.71925 12.6204L5.797 9.04165Z\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M11.666 1.75V4.08333\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M12.8333 2.91663H10.5\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M2.33398 9.91663V11.0833\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M2.91667 10.5H1.75\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'T'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2.33398 4.08325V2.33325H11.6673V4.08325\" stroke=\"currentColor\" stroke-width=\"1.16667\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M5.25 11.6667H8.75\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M7 2.33325V11.6666\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'cursor'\">\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 1.75L5.87417 11.6492L7.33833 7.33833L11.6492 5.87417L1.75 1.75Z\" stroke=\"currentColor\"\n stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M7.58398 7.58325L11.084 11.0833\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'cursor-double'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.16667 2.3916L7 3.49993\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2.97487 4.66662L1.2832 4.19995\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M3.50091 7L2.39258 8.16667\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.19922 1.28345L4.66589 2.97511\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M5.27114 5.65255C5.24852 5.59926 5.24234 5.54043 5.25338 5.48361C5.26443 5.42678 5.2922 5.37455 5.33313 5.33362C5.37407 5.29269 5.4263 5.26492 5.48312 5.25387C5.53994 5.24283 5.59877 5.24901 5.65206 5.27163L12.0687 7.89663C12.1258 7.92006 12.174 7.961 12.2064 8.01357C12.2388 8.06613 12.2536 8.12761 12.2488 8.18915C12.244 8.25069 12.2198 8.30912 12.1797 8.35603C12.1396 8.40295 12.0856 8.43592 12.0256 8.45021L9.48864 9.05746C9.38391 9.08248 9.28815 9.13599 9.21196 9.21208C9.13578 9.28816 9.08213 9.38385 9.05698 9.48855L8.45031 12.026C8.43617 12.0863 8.40323 12.1405 8.35626 12.1808C8.30928 12.2211 8.25071 12.2454 8.189 12.2502C8.1273 12.255 8.06567 12.2401 8.01302 12.2075C7.96037 12.175 7.91944 12.1266 7.89614 12.0692L5.27114 5.65255Z\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'enter'\" class=\"cqa-enter-key-icon cqa-inline-flex cqa-flex-shrink-0\" style=\"width: 20px; height: 20px;\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 32 32\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-w-full cqa-h-full\">\n <path fill=\"#6B7280\" transform=\"translate(14,5)\" d=\"M0 0 C4.29 0 8.58 0 13 0 C13 7.26 13 14.52 13 22 C5.74 22 -1.52 22 -9 22 C-9 16.72 -9 11.44 -9 6 C-6.03 6 -3.06 6 0 6 C0 4.02 0 2.04 0 0 Z M2 2 C2 3.98 2 5.96 2 8 C-0.97 8 -3.94 8 -7 8 C-7 11.96 -7 15.92 -7 20 C-1.06 20 4.88 20 11 20 C11 14.06 11 8.12 11 2 C8.03 2 5.06 2 2 2 Z\"/>\n <path fill=\"#6B7280\" transform=\"translate(19,13)\" d=\"M0 0 C0.66 0 1.32 0 2 0 C2 2.31 2 4.62 2 7 C0.02 7 -1.96 7 -4 7 C-4.33 8.32 -4.66 9.64 -5 11 C-6.65 9.68 -8.3 8.36 -10 7 C-8.63016497 3.83884224 -8.0109362 3.0072908 -5 1 C-4.67 2.32 -4.34 3.64 -4 5 C-2.68 5 -1.36 5 0 5 C0 3.35 0 1.7 0 0 Z\"/>\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'clock'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.99935 12.8334C10.221 12.8334 12.8327 10.2217 12.8327 7.00008C12.8327 3.77842 10.221 1.16675 6.99935 1.16675C3.77769 1.16675 1.16602 3.77842 1.16602 7.00008C1.16602 10.2217 3.77769 12.8334 6.99935 12.8334Z\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M7 3.5V7L9.33333 8.16667\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'settings'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 4.66667C5.71133 4.66667 4.66667 5.71133 4.66667 7C4.66667 8.28867 5.71133 9.33333 7 9.33333C8.28867 9.33333 9.33333 8.28867 9.33333 7C9.33333 5.71133 8.28867 4.66667 7 4.66667Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M11.0833 7.58333C11.1417 7.29167 11.1417 6.70833 11.0833 6.41667L12.25 5.83333C12.4167 5.70833 12.4833 5.48333 12.4167 5.25L11.6667 3.41667C11.6 3.18333 11.3917 3.04167 11.1417 3.04167L9.91667 3.5C9.56667 3.20833 9.19167 2.95833 8.75 2.79167L8.4 1.45833C8.34167 1.225 8.14167 1.16667 7.93333 1.16667H6.06667C5.85833 1.16667 5.65833 1.225 5.6 1.45833L5.25 2.79167C4.80833 2.95833 4.43333 3.20833 4.08333 3.5L2.85833 3.04167C2.60833 3.04167 2.4 3.18333 2.33333 3.41667L1.58333 5.25C1.51667 5.48333 1.58333 5.70833 1.75 5.83333L2.91667 6.41667C2.85833 6.70833 2.85833 7.29167 2.91667 7.58333L1.75 8.16667C1.58333 8.29167 1.51667 8.51667 1.58333 8.75L2.33333 10.5833C2.4 10.8167 2.60833 10.9583 2.85833 10.9583L4.08333 10.5C4.43333 10.7917 4.80833 11.0417 5.25 11.2083L5.6 12.5417C5.65833 12.775 5.85833 12.8333 6.06667 12.8333H7.93333C8.14167 12.8333 8.34167 12.775 8.4 12.5417L8.75 11.2083C9.19167 11.0417 9.56667 10.7917 9.91667 10.5L11.1417 10.9583C11.3917 10.9583 11.6 10.8167 11.6667 10.5833L12.4167 8.75C12.4833 8.51667 12.4167 8.29167 12.25 8.16667L11.0833 7.58333Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'check'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.6667 3.5L5.25 10.5L2.33333 7.58333\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n\n <!-- Label (show only when no icon; all types have icon now \u2013 tooltip on button) -->\n <span *ngIf=\"!getCurrentEventTypeConfig().icon\" class=\"cqa-text-[#432DD7] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium\">{{\n getCurrentEventTypeConfig().label }}</span>\n </button>\n\n <!-- Dropdown Menu -->\n <div *ngIf=\"eventTypeDropdownOpen\" (click)=\"$event.stopPropagation()\"\n class=\"cqa-absolute cqa-top-full cqa-left-0 cqa-mt-1 cqa-bg-white cqa-rounded-lg cqa-shadow-lg cqa-border cqa-border-gray-200 cqa-z-50 cqa-min-w-[150px] cqa-py-1\">\n <button *ngFor=\"let etc of eventTypeConfigs\" type=\"button\" (click)=\"onEventTypeSelect(etc.type)\"\n [class.cqa-bg-primary-50]=\"eventType === etc.type\"\n class=\"cqa-w-full cqa-px-3 cqa-py-2 cqa-text-left cqa-flex cqa-items-center cqa-gap-2 hover:cqa-bg-gray-50 cqa-transition-colors\">\n <span *ngIf=\"etc.icon === 'paper_plane'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1 5.5L11 1M11 1L7.5 11L6 6.5L1 5.5M11 1L1 5.5\" stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'star'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 1L7.5 4.5L11 5L7.5 5.5L6 9L4.5 5.5L1 5L4.5 4.5L6 1Z\" fill=\"currentColor\" />\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'T'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2.33398 4.08325V2.33325H11.6673V4.08325\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M5.25 11.6667H8.75\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 2.33325V11.6666\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'cursor'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 2L9 1L10 8L7 7L5 9L4 7L2 2Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'cursor-double'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.16667 2.3916L7 3.49993\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2.97487 4.66662L1.2832 4.19995\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M3.50091 7L2.39258 8.16667\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.19922 1.28345L4.66589 2.97511\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M5.27114 5.65255C5.24852 5.59926 5.24234 5.54043 5.25338 5.48361C5.26443 5.42678 5.2922 5.37455 5.33313 5.33362C5.37407 5.29269 5.4263 5.26492 5.48312 5.25387C5.53994 5.24283 5.59877 5.24901 5.65206 5.27163L12.0687 7.89663C12.1258 7.92006 12.174 7.961 12.2064 8.01357C12.2388 8.06613 12.2536 8.12761 12.2488 8.18915C12.244 8.25069 12.2198 8.30912 12.1797 8.35603C12.1396 8.40295 12.0856 8.43592 12.0256 8.45021L9.48864 9.05746C9.38391 9.08248 9.28815 9.13599 9.21196 9.21208C9.13578 9.28816 9.08213 9.38385 9.05698 9.48855L8.45031 12.026C8.43617 12.0863 8.40323 12.1405 8.35626 12.1808C8.30928 12.2211 8.25071 12.2454 8.189 12.2502C8.1273 12.255 8.06567 12.2401 8.01302 12.2075C7.96037 12.175 7.91944 12.1266 7.89614 12.0692L5.27114 5.65255Z\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> \n </span>\n <span *ngIf=\"etc.icon === 'enter'\" class=\"cqa-enter-key-icon cqa-inline-flex cqa-flex-shrink-0\" style=\"width: 16px; height: 16px;\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 32 32\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-w-full cqa-h-full\">\n <path fill=\"#6B7280\" transform=\"translate(14,5)\" d=\"M0 0 C4.29 0 8.58 0 13 0 C13 7.26 13 14.52 13 22 C5.74 22 -1.52 22 -9 22 C-9 16.72 -9 11.44 -9 6 C-6.03 6 -3.06 6 0 6 C0 4.02 0 2.04 0 0 Z M2 2 C2 3.98 2 5.96 2 8 C-0.97 8 -3.94 8 -7 8 C-7 11.96 -7 15.92 -7 20 C-1.06 20 4.88 20 11 20 C11 14.06 11 8.12 11 2 C8.03 2 5.06 2 2 2 Z\"/>\n <path fill=\"#6B7280\" transform=\"translate(19,13)\" d=\"M0 0 C0.66 0 1.32 0 2 0 C2 2.31 2 4.62 2 7 C0.02 7 -1.96 7 -4 7 C-4.33 8.32 -4.66 9.64 -5 11 C-6.65 9.68 -8.3 8.36 -10 7 C-8.63016497 3.83884224 -8.0109362 3.0072908 -5 1 C-4.67 2.32 -4.34 3.64 -4 5 C-2.68 5 -1.36 5 0 5 C0 3.35 0 1.7 0 0 Z\"/>\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'clock'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n <path d=\"M6 3V6L8 7\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'settings'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 4.66667C5.71133 4.66667 4.66667 5.71133 4.66667 7C4.66667 8.28867 5.71133 9.33333 7 9.33333C8.28867 9.33333 9.33333 8.28867 9.33333 7C9.33333 5.71133 8.28867 4.66667 7 4.66667Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M11.0833 7.58333C11.1417 7.29167 11.1417 6.70833 11.0833 6.41667L12.25 5.83333C12.4167 5.70833 12.4833 5.48333 12.4167 5.25L11.6667 3.41667C11.6 3.18333 11.3917 3.04167 11.1417 3.04167L9.91667 3.5C9.56667 3.20833 9.19167 2.95833 8.75 2.79167L8.4 1.45833C8.34167 1.225 8.14167 1.16667 7.93333 1.16667H6.06667C5.85833 1.16667 5.65833 1.225 5.6 1.45833L5.25 2.79167C4.80833 2.95833 4.43333 3.20833 4.08333 3.5L2.85833 3.04167C2.60833 3.04167 2.4 3.18333 2.33333 3.41667L1.58333 5.25C1.51667 5.48333 1.58333 5.70833 1.75 5.83333L2.91667 6.41667C2.85833 6.70833 2.85833 7.29167 2.91667 7.58333L1.75 8.16667C1.58333 8.29167 1.51667 8.51667 1.58333 8.75L2.33333 10.5833C2.4 10.8167 2.60833 10.9583 2.85833 10.9583L4.08333 10.5C4.43333 10.7917 4.80833 11.0417 5.25 11.2083L5.6 12.5417C5.65833 12.775 5.85833 12.8333 6.06667 12.8333H7.93333C8.14167 12.8333 8.34167 12.775 8.4 12.5417L8.75 11.2083C9.19167 11.0417 9.56667 10.7917 9.91667 10.5L11.1417 10.9583C11.3917 10.9583 11.6 10.8167 11.6667 10.5833L12.4167 8.75C12.4833 8.51667 12.4167 8.29167 12.25 8.16667L11.0833 7.58333Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'check'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.6667 3.5L5.25 10.5L2.33333 7.58333\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span>{{ etc.label }}</span>\n </button>\n </div>\n </div>\n\n <!-- Action Description: flex-1 + min-w-0 so row can shrink; block flow in step-list SCSS avoids flex breaking innerHTML badges -->\n <span class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px] cqa-action-format cqa-align-middle cqa-min-w-0 cqa-flex-1\" *ngIf=\"getActionDescription()\"\n [innerHTML]=\"getActionDescription()\" (click)=\"clickOnAction($event)\">\n </span>\n <!-- <span class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px]\" *ngIf=\"getActionDescription()\">\n {{ getActionDescription() }}\n </span> -->\n\n <!-- Parameters -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3\" *ngIf=\"false\">\n <!-- Navigate: URL as clickable trigger for Test Data modal -->\n <span *ngIf=\"eventType === 'navigate' && getNavigateUrlParameter()\" #testDataTrigger\n (click)=\"openTestDataModal($event)\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC] cqa-cursor-pointer hover:cqa-opacity-90\">\n {{ getNavigateUrlParameter()?.value || getNavigateUrlParameter()?.displayValue }}\n </span>\n \n <!-- Other event types: loop through parameters (navigate excluded) -->\n <ng-container *ngFor=\"let param of parameters; let i = index\">\n <!-- Skip navigate parameters in the loop (already shown above) -->\n <ng-container *ngIf=\"eventType !== 'navigate'\">\n\n <!-- Type: First param (text value like {{username}}) -->\n <span *ngIf=\"eventType === 'type' && i === 0\" class=\"cqa-text-gray-900 cqa-text-sm\">\n {{ param.value }}\n </span>\n\n <!-- Type: \"into\" text -->\n <span *ngIf=\"eventType === 'type' && i === 0\" class=\"cqa-text-gray-900 cqa-text-sm\">\n into\n </span>\n\n <!-- Type: Second param (selector) -->\n <span *ngIf=\"eventType === 'type' && i === 1\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n\n <!-- Click: Selector input/display -->\n <span *ngIf=\"eventType === 'click' && param.name === 'element'\"\n #clickElementTrigger\n (click)=\"openElementPopup($event)\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-cursor-pointer cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n\n <!-- Click: Suffix text (like \"if Present\") -->\n <span *ngIf=\"eventType === 'click' && param.name === 'suffix'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n {{ param.value }}\n </span>\n\n <!-- Double Click: Selector input/display -->\n <span *ngIf=\"eventType === 'doubleClick' && i === 0\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n\n <!-- Press Enter: Selector input/display with HTML support -->\n <span *ngIf=\"eventType === 'pressEnter' && i === 0\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\"\n [innerHTML]=\"param.displayValue || param.value\">\n </span>\n\n <!-- Enter: Value display with quotes (like click action) -->\n <span *ngIf=\"eventType === 'enter' && param.name === 'value'\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n\n <!-- Enter: \"in the\" text -->\n <span *ngIf=\"eventType === 'enter' && param.name === 'value'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n in the\n </span>\n\n <!-- Enter: Label display with quotes (like click action) -->\n <span *ngIf=\"eventType === 'enter' && param.name === 'label'\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n\n <!-- Enter: \"field\" text -->\n <span *ngIf=\"eventType === 'enter' && param.name === 'label'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n field\n </span>\n\n <!-- Wait: Duration input -->\n <input *ngIf=\"eventType === 'wait' && param.name === 'duration'\" type=\"number\" [value]=\"param.value\"\n (input)=\"onParameterChange(param, $any($event.target).value)\" placeholder=\"2\"\n class=\"cqa-w-16 cqa-px-2 cqa-py-1.5 cqa-rounded-lg cqa-border cqa-border-solid cqa-border-[#9E9EE3] cqa-bg-[#D1C4E9] cqa-text-[#3F43EE] cqa-text-sm cqa-font-medium cqa-outline-none focus:cqa-ring-2 focus:cqa-ring-[#3F43EE] focus:cqa-ring-opacity-50\" />\n <span *ngIf=\"eventType === 'wait' && param.name === 'duration'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n seconds\n </span>\n\n <!-- Wait: Element selector -->\n <span *ngIf=\"eventType === 'wait' && param.name === 'element'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n for element\n </span>\n <span *ngIf=\"eventType === 'wait' && param.name === 'element'\" \n #elementTrigger\n (click)=\"openElementPopup($event)\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-cursor-pointer cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n <span *ngIf=\"eventType === 'wait' && param.name === 'element'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n to be visible\n </span>\n\n <!-- Custom: Description (clickable to open Step Description modal; pass $event so modal opens below this trigger) -->\n <span *ngIf=\"eventType === 'custom'\" #descriptionTrigger\n (click)=\"openStepDescriptionModal($event)\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC] cqa-cursor-pointer hover:cqa-opacity-90\"\n [innerHTML]=\"param.displayValue || param.value\">\n </span>\n\n <!-- AI Agent: Instructions -->\n <span *ngIf=\"eventType === 'ai-agent'\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-ml-auto cqa-self-center\">\n <!-- Skipped badge (when step is marked to skip) -->\n <span *ngIf=\"config?.shouldSkip\" 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] cqa-flex-shrink-0\">Skipped</span>\n <!-- Action Icons: Edit, Link, Duplicate, Delete (show on hover; hidden when step is inside step-group) - placed first -->\n <div *ngIf=\"editable && !isInsideStepGroup && !isReorder\" class=\"step-actions cqa-flex cqa-items-center cqa-gap-1.5 cqa-pr-2\">\n <button type=\"button\" #editTrigger (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\" stroke-linejoin=\"round\"/>\n <path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <button type=\"button\" (click)=\"onSkipToggle(); $event.stopPropagation()\" [attr.title]=\"config?.shouldSkip ? 'Unskip step' : 'Skip step'\" [class.cqa-text-[#1447E6]]=\"config?.shouldSkip\" 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=\"M8.25 8.75C9.2165 8.75 10 7.9665 10 7C10 6.0335 9.2165 5.25 8.25 5.25C7.2835 5.25 6.5 6.0335 6.5 7C6.5 7.9665 7.2835 8.75 8.25 8.75Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M8.75033 2.91663H5.25033C2.99516 2.91663 1.16699 4.7448 1.16699 6.99996C1.16699 9.25512 2.99516 11.0833 5.25033 11.0833H8.75033C11.0055 11.0833 12.8337 9.25512 12.8337 6.99996C12.8337 4.7448 11.0055 2.91663 8.75033 2.91663Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\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 <path 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\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path 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\" 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\" stroke-linejoin=\"round\"/>\n </svg>\n </button> -->\n <button\n type=\"button\"\n (click)=\"onDuplicate(); $event.stopPropagation()\"\n [disabled]=\"isDuplicating\"\n [attr.title]=\"isDuplicating ? 'Duplicating...' : 'Duplicate'\"\n class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6] disabled:cqa-opacity-60 disabled:cqa-cursor-not-allowed\"\n >\n <svg *ngIf=\"!isDuplicating\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"isDuplicating\" width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-label=\"Duplicating\">\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" stroke-opacity=\"0.2\" stroke-width=\"2\"></circle>\n <path d=\"M14 8A6 6 0 0 0 8 2\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\">\n <animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 8 8\" to=\"360 8 8\" dur=\"0.8s\" repeatCount=\"indefinite\"/>\n </path>\n </svg>\n </button>\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\" stroke-linejoin=\"round\"/>\n <path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path 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\" 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\" stroke-linejoin=\"round\"/>\n <path d=\"M8.16602 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n\n <!-- View Details Link (show only if description is not empty) -->\n <a *ngIf=\"config.description && config.description.trim() !== ''\" #viewDetailsTrigger href=\"#\" (click)=\"onViewDetails($event)\" class=\"cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1 cqa-no-underline\">View Details<svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.03809 6.74329L2.62809 7.33329L5.96142 3.99996L2.62809 0.666626L2.03809 1.25663L4.78142 3.99996L2.03809 6.74329Z\" fill=\"#3F43EE\"/></svg></a>\n\n <!-- Created Date (from API) - last so aligned across all steps, format: 25 Feb 2026 -->\n <span *ngIf=\"config.createdDate\" class=\"step-date cqa-text-[#6B7280] cqa-text-[12px] cqa-leading-[15px] cqa-ml-auto cqa-flex-shrink-0\">\n {{ config.createdDate | date:'d MMM yyyy' }}\n </span>\n </div>\n</div>", styles: [".step-actions{opacity:0;transition:opacity .15s ease}.step-row:hover .step-actions{opacity:1}.step-row{vertical-align:middle;letter-spacing:normal}\n"], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "date": i5.DatePipe } });
|
|
380
387
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestCaseNormalStepComponent, decorators: [{
|
|
381
388
|
type: Component,
|
|
382
|
-
args: [{ selector: 'cqa-test-case-normal-step', host: { class: 'cqa-ui-root' }, styles: [STEP_ROW_ACTIONS_STYLES], template: "<div [class]=\"'step-row cqa-flex cqa-items-center cqa-gap-3 cqa-py-2 cqa-px-4 ' + (isInsideLoop && isInsideStepGroup ? 'cqa-pl-20 cqa-pr-4' : (isInsideLoop || isInsideStepGroup) ? 'cqa-pl-10 cqa-pr-4' : '')\" style=\"border-top: 1px solid #E5E7EB; border-bottom: 1px solid #E5E7EB;\">\n\n <div class=\"cqa-inline-flex cqa-items-center\">\n <!-- Drag Handle Icon (when isReorder is true and not inside step group - steps inside step groups cannot be reordered) -->\n <div *ngIf=\"isReorder && !isInsideStepGroup\" class=\"cqa-mr-2 cqa-cursor-move cqa-text-[#6B7280] hover:cqa-text-[#111827]\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"3\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n </svg>\n </div>\n <!-- Checkbox (when isReorder is false, editable, and not inside step group - hide for steps inside step groups) -->\n <label *ngIf=\"editable && !isReorder && !isInsideStepGroup\" class=\"cqa-flex cqa-items-center cqa-cursor-pointer cqa-relative cqa-mr-2\">\n <input type=\"checkbox\"\n [ngModel]=\"selected\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onSelectionChange($event)\"\n class=\"cqa-h-4 cqa-w-4 cqa-cursor-pointer cqa-transition-all cqa-appearance-none cqa-rounded shadow hover:cqa-shadow-md cqa-border cqa-border-solid cqa-border-slate-300 cqa-flex-shrink-0\"\n [class.cqa-bg-[#3F43EE]]=\"selected\"\n [class.cqa-border-[#3F43EE]]=\"selected\"\n id=\"check\" />\n <span class=\"cqa-absolute cqa-text-white cqa-top-1/2 cqa-left-1/2 cqa--translate-x-1/2 cqa--translate-y-1/2 cqa-pointer-events-none cqa-flex cqa-items-center cqa-justify-center\"\n [class.cqa-opacity-0]=\"!selected\"\n [class.cqa-opacity-100]=\"selected\">\n <svg width=\"12\" height=\"13\" viewBox=\"0 0 12 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10 3.125L4.5 8.625L2 6.125\" stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </span>\n </label>\n </div>\n\n <!-- Step Number -->\n <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-[18px] cqa-min-w-[32px]\">\n {{ stepNumber }}\n </span>\n\n <!-- Event Type Selector (Pill Button) #### (click)=\"toggleEventTypeDropdown(); $event.stopPropagation()\" -->\n <div class=\"cqa-relative\" #dropdownContainer>\n <button type=\"button\" \n [attr.title]=\"getCurrentEventTypeConfig().label\"\n [style.background-color]=\"getCurrentEventTypeConfig().backgroundColor\"\n [style.color]=\"getCurrentEventTypeConfig().color\"\n class=\"cqa-w-8 cqa-h-8 cqa-rounded-lg cqa-flex cqa-items-center cqa-justify-center cqa-flex-shrink-0 cqa-cursor-pointer\">\n <!-- Icon -->\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'paper_plane'\">\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 6.41663L12.8333 1.16663L7.58333 12.25L6.41667 7.58329L1.75 6.41663Z\" stroke=\"currentColor\"\n stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'star'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5.797 9.04165C5.74492 8.83977 5.63969 8.65554 5.49227 8.50812C5.34485 8.3607 5.16062 8.25548 4.95875 8.2034L1.38 7.28057C1.31894 7.26324 1.2652 7.22646 1.22694 7.17583C1.18867 7.12519 1.16797 7.06345 1.16797 6.99998C1.16797 6.93651 1.18867 6.87478 1.22694 6.82414C1.2652 6.7735 1.31894 6.73673 1.38 6.7194L4.95875 5.79598C5.16055 5.74395 5.34473 5.63882 5.49215 5.49151C5.63956 5.34419 5.74483 5.16008 5.797 4.95832L6.71983 1.37957C6.73698 1.31827 6.77372 1.26427 6.82443 1.2258C6.87515 1.18733 6.93705 1.1665 7.0007 1.1665C7.06436 1.1665 7.12626 1.18733 7.17698 1.2258C7.22769 1.26427 7.26442 1.31827 7.28158 1.37957L8.20383 4.95832C8.25591 5.16019 8.36113 5.34442 8.50855 5.49184C8.65597 5.63926 8.8402 5.74449 9.04208 5.79657L12.6208 6.71882C12.6824 6.73579 12.7366 6.77249 12.7753 6.82328C12.814 6.87407 12.8349 6.93614 12.8349 6.99998C12.8349 7.06382 12.814 7.1259 12.7753 7.17669C12.7366 7.22748 12.6824 7.26417 12.6208 7.28115L9.04208 8.2034C8.8402 8.25548 8.65597 8.3607 8.50855 8.50812C8.36113 8.65554 8.25591 8.83977 8.20383 9.04165L7.281 12.6204C7.26384 12.6817 7.22711 12.7357 7.17639 12.7742C7.12568 12.8126 7.06377 12.8335 7.00012 12.8335C6.93647 12.8335 6.87456 12.8126 6.82385 12.7742C6.77314 12.7357 6.7364 12.6817 6.71925 12.6204L5.797 9.04165Z\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M11.666 1.75V4.08333\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M12.8333 2.91663H10.5\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M2.33398 9.91663V11.0833\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M2.91667 10.5H1.75\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'T'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2.33398 4.08325V2.33325H11.6673V4.08325\" stroke=\"currentColor\" stroke-width=\"1.16667\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M5.25 11.6667H8.75\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M7 2.33325V11.6666\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'cursor'\">\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 1.75L5.87417 11.6492L7.33833 7.33833L11.6492 5.87417L1.75 1.75Z\" stroke=\"currentColor\"\n stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M7.58398 7.58325L11.084 11.0833\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'cursor-double'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.16667 2.3916L7 3.49993\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2.97487 4.66662L1.2832 4.19995\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M3.50091 7L2.39258 8.16667\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.19922 1.28345L4.66589 2.97511\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M5.27114 5.65255C5.24852 5.59926 5.24234 5.54043 5.25338 5.48361C5.26443 5.42678 5.2922 5.37455 5.33313 5.33362C5.37407 5.29269 5.4263 5.26492 5.48312 5.25387C5.53994 5.24283 5.59877 5.24901 5.65206 5.27163L12.0687 7.89663C12.1258 7.92006 12.174 7.961 12.2064 8.01357C12.2388 8.06613 12.2536 8.12761 12.2488 8.18915C12.244 8.25069 12.2198 8.30912 12.1797 8.35603C12.1396 8.40295 12.0856 8.43592 12.0256 8.45021L9.48864 9.05746C9.38391 9.08248 9.28815 9.13599 9.21196 9.21208C9.13578 9.28816 9.08213 9.38385 9.05698 9.48855L8.45031 12.026C8.43617 12.0863 8.40323 12.1405 8.35626 12.1808C8.30928 12.2211 8.25071 12.2454 8.189 12.2502C8.1273 12.255 8.06567 12.2401 8.01302 12.2075C7.96037 12.175 7.91944 12.1266 7.89614 12.0692L5.27114 5.65255Z\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'enter'\" class=\"cqa-enter-key-icon cqa-inline-flex cqa-flex-shrink-0\" style=\"width: 20px; height: 20px;\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 32 32\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-w-full cqa-h-full\">\n <path fill=\"#6B7280\" transform=\"translate(14,5)\" d=\"M0 0 C4.29 0 8.58 0 13 0 C13 7.26 13 14.52 13 22 C5.74 22 -1.52 22 -9 22 C-9 16.72 -9 11.44 -9 6 C-6.03 6 -3.06 6 0 6 C0 4.02 0 2.04 0 0 Z M2 2 C2 3.98 2 5.96 2 8 C-0.97 8 -3.94 8 -7 8 C-7 11.96 -7 15.92 -7 20 C-1.06 20 4.88 20 11 20 C11 14.06 11 8.12 11 2 C8.03 2 5.06 2 2 2 Z\"/>\n <path fill=\"#6B7280\" transform=\"translate(19,13)\" d=\"M0 0 C0.66 0 1.32 0 2 0 C2 2.31 2 4.62 2 7 C0.02 7 -1.96 7 -4 7 C-4.33 8.32 -4.66 9.64 -5 11 C-6.65 9.68 -8.3 8.36 -10 7 C-8.63016497 3.83884224 -8.0109362 3.0072908 -5 1 C-4.67 2.32 -4.34 3.64 -4 5 C-2.68 5 -1.36 5 0 5 C0 3.35 0 1.7 0 0 Z\"/>\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'clock'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.99935 12.8334C10.221 12.8334 12.8327 10.2217 12.8327 7.00008C12.8327 3.77842 10.221 1.16675 6.99935 1.16675C3.77769 1.16675 1.16602 3.77842 1.16602 7.00008C1.16602 10.2217 3.77769 12.8334 6.99935 12.8334Z\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M7 3.5V7L9.33333 8.16667\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'settings'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 4.66667C5.71133 4.66667 4.66667 5.71133 4.66667 7C4.66667 8.28867 5.71133 9.33333 7 9.33333C8.28867 9.33333 9.33333 8.28867 9.33333 7C9.33333 5.71133 8.28867 4.66667 7 4.66667Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M11.0833 7.58333C11.1417 7.29167 11.1417 6.70833 11.0833 6.41667L12.25 5.83333C12.4167 5.70833 12.4833 5.48333 12.4167 5.25L11.6667 3.41667C11.6 3.18333 11.3917 3.04167 11.1417 3.04167L9.91667 3.5C9.56667 3.20833 9.19167 2.95833 8.75 2.79167L8.4 1.45833C8.34167 1.225 8.14167 1.16667 7.93333 1.16667H6.06667C5.85833 1.16667 5.65833 1.225 5.6 1.45833L5.25 2.79167C4.80833 2.95833 4.43333 3.20833 4.08333 3.5L2.85833 3.04167C2.60833 3.04167 2.4 3.18333 2.33333 3.41667L1.58333 5.25C1.51667 5.48333 1.58333 5.70833 1.75 5.83333L2.91667 6.41667C2.85833 6.70833 2.85833 7.29167 2.91667 7.58333L1.75 8.16667C1.58333 8.29167 1.51667 8.51667 1.58333 8.75L2.33333 10.5833C2.4 10.8167 2.60833 10.9583 2.85833 10.9583L4.08333 10.5C4.43333 10.7917 4.80833 11.0417 5.25 11.2083L5.6 12.5417C5.65833 12.775 5.85833 12.8333 6.06667 12.8333H7.93333C8.14167 12.8333 8.34167 12.775 8.4 12.5417L8.75 11.2083C9.19167 11.0417 9.56667 10.7917 9.91667 10.5L11.1417 10.9583C11.3917 10.9583 11.6 10.8167 11.6667 10.5833L12.4167 8.75C12.4833 8.51667 12.4167 8.29167 12.25 8.16667L11.0833 7.58333Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'check'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.6667 3.5L5.25 10.5L2.33333 7.58333\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n\n <!-- Label (show only when no icon; all types have icon now \u2013 tooltip on button) -->\n <span *ngIf=\"!getCurrentEventTypeConfig().icon\" class=\"cqa-text-[#432DD7] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium\">{{\n getCurrentEventTypeConfig().label }}</span>\n </button>\n\n <!-- Dropdown Menu -->\n <div *ngIf=\"eventTypeDropdownOpen\" (click)=\"$event.stopPropagation()\"\n class=\"cqa-absolute cqa-top-full cqa-left-0 cqa-mt-1 cqa-bg-white cqa-rounded-lg cqa-shadow-lg cqa-border cqa-border-gray-200 cqa-z-50 cqa-min-w-[150px] cqa-py-1\">\n <button *ngFor=\"let etc of eventTypeConfigs\" type=\"button\" (click)=\"onEventTypeSelect(etc.type)\"\n [class.cqa-bg-primary-50]=\"eventType === etc.type\"\n class=\"cqa-w-full cqa-px-3 cqa-py-2 cqa-text-left cqa-flex cqa-items-center cqa-gap-2 hover:cqa-bg-gray-50 cqa-transition-colors\">\n <span *ngIf=\"etc.icon === 'paper_plane'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1 5.5L11 1M11 1L7.5 11L6 6.5L1 5.5M11 1L1 5.5\" stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'star'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 1L7.5 4.5L11 5L7.5 5.5L6 9L4.5 5.5L1 5L4.5 4.5L6 1Z\" fill=\"currentColor\" />\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'T'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2.33398 4.08325V2.33325H11.6673V4.08325\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M5.25 11.6667H8.75\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 2.33325V11.6666\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'cursor'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 2L9 1L10 8L7 7L5 9L4 7L2 2Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'cursor-double'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.16667 2.3916L7 3.49993\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2.97487 4.66662L1.2832 4.19995\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M3.50091 7L2.39258 8.16667\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.19922 1.28345L4.66589 2.97511\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M5.27114 5.65255C5.24852 5.59926 5.24234 5.54043 5.25338 5.48361C5.26443 5.42678 5.2922 5.37455 5.33313 5.33362C5.37407 5.29269 5.4263 5.26492 5.48312 5.25387C5.53994 5.24283 5.59877 5.24901 5.65206 5.27163L12.0687 7.89663C12.1258 7.92006 12.174 7.961 12.2064 8.01357C12.2388 8.06613 12.2536 8.12761 12.2488 8.18915C12.244 8.25069 12.2198 8.30912 12.1797 8.35603C12.1396 8.40295 12.0856 8.43592 12.0256 8.45021L9.48864 9.05746C9.38391 9.08248 9.28815 9.13599 9.21196 9.21208C9.13578 9.28816 9.08213 9.38385 9.05698 9.48855L8.45031 12.026C8.43617 12.0863 8.40323 12.1405 8.35626 12.1808C8.30928 12.2211 8.25071 12.2454 8.189 12.2502C8.1273 12.255 8.06567 12.2401 8.01302 12.2075C7.96037 12.175 7.91944 12.1266 7.89614 12.0692L5.27114 5.65255Z\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> \n </span>\n <span *ngIf=\"etc.icon === 'enter'\" class=\"cqa-enter-key-icon cqa-inline-flex cqa-flex-shrink-0\" style=\"width: 16px; height: 16px;\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 32 32\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-w-full cqa-h-full\">\n <path fill=\"#6B7280\" transform=\"translate(14,5)\" d=\"M0 0 C4.29 0 8.58 0 13 0 C13 7.26 13 14.52 13 22 C5.74 22 -1.52 22 -9 22 C-9 16.72 -9 11.44 -9 6 C-6.03 6 -3.06 6 0 6 C0 4.02 0 2.04 0 0 Z M2 2 C2 3.98 2 5.96 2 8 C-0.97 8 -3.94 8 -7 8 C-7 11.96 -7 15.92 -7 20 C-1.06 20 4.88 20 11 20 C11 14.06 11 8.12 11 2 C8.03 2 5.06 2 2 2 Z\"/>\n <path fill=\"#6B7280\" transform=\"translate(19,13)\" d=\"M0 0 C0.66 0 1.32 0 2 0 C2 2.31 2 4.62 2 7 C0.02 7 -1.96 7 -4 7 C-4.33 8.32 -4.66 9.64 -5 11 C-6.65 9.68 -8.3 8.36 -10 7 C-8.63016497 3.83884224 -8.0109362 3.0072908 -5 1 C-4.67 2.32 -4.34 3.64 -4 5 C-2.68 5 -1.36 5 0 5 C0 3.35 0 1.7 0 0 Z\"/>\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'clock'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n <path d=\"M6 3V6L8 7\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'settings'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 4.66667C5.71133 4.66667 4.66667 5.71133 4.66667 7C4.66667 8.28867 5.71133 9.33333 7 9.33333C8.28867 9.33333 9.33333 8.28867 9.33333 7C9.33333 5.71133 8.28867 4.66667 7 4.66667Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M11.0833 7.58333C11.1417 7.29167 11.1417 6.70833 11.0833 6.41667L12.25 5.83333C12.4167 5.70833 12.4833 5.48333 12.4167 5.25L11.6667 3.41667C11.6 3.18333 11.3917 3.04167 11.1417 3.04167L9.91667 3.5C9.56667 3.20833 9.19167 2.95833 8.75 2.79167L8.4 1.45833C8.34167 1.225 8.14167 1.16667 7.93333 1.16667H6.06667C5.85833 1.16667 5.65833 1.225 5.6 1.45833L5.25 2.79167C4.80833 2.95833 4.43333 3.20833 4.08333 3.5L2.85833 3.04167C2.60833 3.04167 2.4 3.18333 2.33333 3.41667L1.58333 5.25C1.51667 5.48333 1.58333 5.70833 1.75 5.83333L2.91667 6.41667C2.85833 6.70833 2.85833 7.29167 2.91667 7.58333L1.75 8.16667C1.58333 8.29167 1.51667 8.51667 1.58333 8.75L2.33333 10.5833C2.4 10.8167 2.60833 10.9583 2.85833 10.9583L4.08333 10.5C4.43333 10.7917 4.80833 11.0417 5.25 11.2083L5.6 12.5417C5.65833 12.775 5.85833 12.8333 6.06667 12.8333H7.93333C8.14167 12.8333 8.34167 12.775 8.4 12.5417L8.75 11.2083C9.19167 11.0417 9.56667 10.7917 9.91667 10.5L11.1417 10.9583C11.3917 10.9583 11.6 10.8167 11.6667 10.5833L12.4167 8.75C12.4833 8.51667 12.4167 8.29167 12.25 8.16667L11.0833 7.58333Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'check'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.6667 3.5L5.25 10.5L2.33333 7.58333\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span>{{ etc.label }}</span>\n </button>\n </div>\n </div>\n\n <!-- Action Description: flex-1 + min-w-0 so row can shrink; block flow in step-list SCSS avoids flex breaking innerHTML badges -->\n <span class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px] cqa-action-format cqa-align-middle cqa-min-w-0 cqa-flex-1\" *ngIf=\"getActionDescription()\"\n [innerHTML]=\"getActionDescription()\" (click)=\"clickOnAction($event)\">\n </span>\n <!-- <span class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px]\" *ngIf=\"getActionDescription()\">\n {{ getActionDescription() }}\n </span> -->\n\n <!-- Parameters -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3\" *ngIf=\"false\">\n <!-- Navigate: URL as clickable trigger for Test Data modal -->\n <span *ngIf=\"eventType === 'navigate' && getNavigateUrlParameter()\" #testDataTrigger\n (click)=\"openTestDataModal($event)\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC] cqa-cursor-pointer hover:cqa-opacity-90\">\n {{ getNavigateUrlParameter()?.value || getNavigateUrlParameter()?.displayValue }}\n </span>\n \n <!-- Other event types: loop through parameters (navigate excluded) -->\n <ng-container *ngFor=\"let param of parameters; let i = index\">\n <!-- Skip navigate parameters in the loop (already shown above) -->\n <ng-container *ngIf=\"eventType !== 'navigate'\">\n\n <!-- Type: First param (text value like {{username}}) -->\n <span *ngIf=\"eventType === 'type' && i === 0\" class=\"cqa-text-gray-900 cqa-text-sm\">\n {{ param.value }}\n </span>\n\n <!-- Type: \"into\" text -->\n <span *ngIf=\"eventType === 'type' && i === 0\" class=\"cqa-text-gray-900 cqa-text-sm\">\n into\n </span>\n\n <!-- Type: Second param (selector) -->\n <span *ngIf=\"eventType === 'type' && i === 1\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n\n <!-- Click: Selector input/display -->\n <span *ngIf=\"eventType === 'click' && param.name === 'element'\"\n #clickElementTrigger\n (click)=\"openElementPopup($event)\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-cursor-pointer cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n\n <!-- Click: Suffix text (like \"if Present\") -->\n <span *ngIf=\"eventType === 'click' && param.name === 'suffix'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n {{ param.value }}\n </span>\n\n <!-- Double Click: Selector input/display -->\n <span *ngIf=\"eventType === 'doubleClick' && i === 0\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n\n <!-- Press Enter: Selector input/display with HTML support -->\n <span *ngIf=\"eventType === 'pressEnter' && i === 0\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\"\n [innerHTML]=\"param.displayValue || param.value\">\n </span>\n\n <!-- Enter: Value display with quotes (like click action) -->\n <span *ngIf=\"eventType === 'enter' && param.name === 'value'\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n\n <!-- Enter: \"in the\" text -->\n <span *ngIf=\"eventType === 'enter' && param.name === 'value'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n in the\n </span>\n\n <!-- Enter: Label display with quotes (like click action) -->\n <span *ngIf=\"eventType === 'enter' && param.name === 'label'\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n\n <!-- Enter: \"field\" text -->\n <span *ngIf=\"eventType === 'enter' && param.name === 'label'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n field\n </span>\n\n <!-- Wait: Duration input -->\n <input *ngIf=\"eventType === 'wait' && param.name === 'duration'\" type=\"number\" [value]=\"param.value\"\n (input)=\"onParameterChange(param, $any($event.target).value)\" placeholder=\"2\"\n class=\"cqa-w-16 cqa-px-2 cqa-py-1.5 cqa-rounded-lg cqa-border cqa-border-solid cqa-border-[#9E9EE3] cqa-bg-[#D1C4E9] cqa-text-[#3F43EE] cqa-text-sm cqa-font-medium cqa-outline-none focus:cqa-ring-2 focus:cqa-ring-[#3F43EE] focus:cqa-ring-opacity-50\" />\n <span *ngIf=\"eventType === 'wait' && param.name === 'duration'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n seconds\n </span>\n\n <!-- Wait: Element selector -->\n <span *ngIf=\"eventType === 'wait' && param.name === 'element'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n for element\n </span>\n <span *ngIf=\"eventType === 'wait' && param.name === 'element'\" \n #elementTrigger\n (click)=\"openElementPopup($event)\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-cursor-pointer cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n <span *ngIf=\"eventType === 'wait' && param.name === 'element'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n to be visible\n </span>\n\n <!-- Custom: Description (clickable to open Step Description modal; pass $event so modal opens below this trigger) -->\n <span *ngIf=\"eventType === 'custom'\" #descriptionTrigger\n (click)=\"openStepDescriptionModal($event)\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC] cqa-cursor-pointer hover:cqa-opacity-90\"\n [innerHTML]=\"param.displayValue || param.value\">\n </span>\n\n <!-- AI Agent: Instructions -->\n <span *ngIf=\"eventType === 'ai-agent'\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-ml-auto cqa-self-center\">\n <!-- Action Icons: Edit, Link, Duplicate, Delete (show on hover; hidden when step is inside step-group) - placed first -->\n <div *ngIf=\"editable && !isInsideStepGroup && !isReorder\" class=\"step-actions cqa-flex cqa-items-center cqa-gap-1.5 cqa-pr-2\">\n <button type=\"button\" #editTrigger (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\" stroke-linejoin=\"round\"/>\n <path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\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 <path 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\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path 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\" 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\" stroke-linejoin=\"round\"/>\n </svg>\n </button> -->\n <button\n type=\"button\"\n (click)=\"onDuplicate(); $event.stopPropagation()\"\n [disabled]=\"isDuplicating\"\n [attr.title]=\"isDuplicating ? 'Duplicating...' : 'Duplicate'\"\n class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6] disabled:cqa-opacity-60 disabled:cqa-cursor-not-allowed\"\n >\n <svg *ngIf=\"!isDuplicating\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"isDuplicating\" width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-label=\"Duplicating\">\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" stroke-opacity=\"0.2\" stroke-width=\"2\"></circle>\n <path d=\"M14 8A6 6 0 0 0 8 2\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\">\n <animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 8 8\" to=\"360 8 8\" dur=\"0.8s\" repeatCount=\"indefinite\"/>\n </path>\n </svg>\n </button>\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\" stroke-linejoin=\"round\"/>\n <path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path 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\" 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\" stroke-linejoin=\"round\"/>\n <path d=\"M8.16602 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n\n <!-- View Details Link (show only if description is not empty) -->\n <a *ngIf=\"config.description && config.description.trim() !== ''\" #viewDetailsTrigger href=\"#\" (click)=\"onViewDetails($event)\" class=\"cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1 cqa-no-underline\">View Details<svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.03809 6.74329L2.62809 7.33329L5.96142 3.99996L2.62809 0.666626L2.03809 1.25663L4.78142 3.99996L2.03809 6.74329Z\" fill=\"#3F43EE\"/></svg></a>\n\n <!-- Created Date (from API) - last so aligned across all steps, format: 25 Feb 2026 -->\n <span *ngIf=\"config.createdDate\" class=\"step-date cqa-text-[#6B7280] cqa-text-[12px] cqa-leading-[15px] cqa-ml-auto cqa-flex-shrink-0\">\n {{ config.createdDate | date:'d MMM yyyy' }}\n </span>\n </div>\n</div>" }]
|
|
389
|
+
args: [{ selector: 'cqa-test-case-normal-step', host: { class: 'cqa-ui-root' }, styles: [STEP_ROW_ACTIONS_STYLES], template: "<div [class]=\"'step-row cqa-flex cqa-items-center cqa-gap-3 cqa-py-2 cqa-px-4 ' + (isInsideLoop && isInsideStepGroup ? 'cqa-pl-20 cqa-pr-4' : (isInsideLoop || isInsideStepGroup) ? 'cqa-pl-10 cqa-pr-4' : '') + (config?.shouldSkip ? ' cqa-step-skipped' : '')\" [style.opacity]=\"config?.shouldSkip ? '0.6' : null\" style=\"border-top: 1px solid #E5E7EB; border-bottom: 1px solid #E5E7EB\">\n\n <div class=\"cqa-inline-flex cqa-items-center\">\n <!-- Drag Handle Icon (when isReorder is true and not inside step group - steps inside step groups cannot be reordered) -->\n <div *ngIf=\"isReorder && !isInsideStepGroup\" class=\"cqa-mr-2 cqa-cursor-move cqa-text-[#6B7280] hover:cqa-text-[#111827]\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"3\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n </svg>\n </div>\n <!-- Checkbox (when isReorder is false, editable, and not inside step group - hide for steps inside step groups) -->\n <label *ngIf=\"editable && !isReorder && !isInsideStepGroup\" class=\"cqa-flex cqa-items-center cqa-cursor-pointer cqa-relative cqa-mr-2\">\n <input type=\"checkbox\"\n [ngModel]=\"selected\"\n [disabled]=\"disabled\"\n (ngModelChange)=\"onSelectionChange($event)\"\n class=\"cqa-h-4 cqa-w-4 cqa-cursor-pointer cqa-transition-all cqa-appearance-none cqa-rounded shadow hover:cqa-shadow-md cqa-border cqa-border-solid cqa-border-slate-300 cqa-flex-shrink-0\"\n [class.cqa-bg-[#3F43EE]]=\"selected\"\n [class.cqa-border-[#3F43EE]]=\"selected\"\n id=\"check\" />\n <span class=\"cqa-absolute cqa-text-white cqa-top-1/2 cqa-left-1/2 cqa--translate-x-1/2 cqa--translate-y-1/2 cqa-pointer-events-none cqa-flex cqa-items-center cqa-justify-center\"\n [class.cqa-opacity-0]=\"!selected\"\n [class.cqa-opacity-100]=\"selected\">\n <svg width=\"12\" height=\"13\" viewBox=\"0 0 12 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10 3.125L4.5 8.625L2 6.125\" stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </span>\n </label>\n <!-- Lock icon for steps inside a step group (non-editable indicator) -->\n <div *ngIf=\"isInsideStepGroup\" class=\"cqa-ml-1 cqa-mr-1 cqa-text-[#9CA3AF]\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.9998 5.66667H11.3332V4.33333C11.3332 2.49333 9.83984 1 7.99984 1C6.15984 1 4.6665 2.49333 4.6665 4.33333V5.66667H3.99984C3.2665 5.66667 2.6665 6.26667 2.6665 7V13.6667C2.6665 14.4 3.2665 15 3.99984 15H11.9998C12.7332 15 13.3332 14.4 13.3332 13.6667V7C13.3332 6.26667 12.7332 5.66667 11.9998 5.66667ZM5.99984 4.33333C5.99984 3.22667 6.89317 2.33333 7.99984 2.33333C9.1065 2.33333 9.99984 3.22667 9.99984 4.33333V5.66667H5.99984V4.33333ZM11.9998 13.6667H3.99984V7H11.9998V13.6667ZM7.99984 11.6667C8.73317 11.6667 9.33317 11.0667 9.33317 10.3333C9.33317 9.6 8.73317 9 7.99984 9C7.2665 9 6.6665 9.6 6.6665 10.3333C6.6665 11.0667 7.2665 11.6667 7.99984 11.6667Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n </div>\n\n <!-- Step Number -->\n <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-[18px] cqa-min-w-[32px]\">\n {{ stepNumber }}\n </span>\n\n <!-- Event Type Selector (Pill Button) #### (click)=\"toggleEventTypeDropdown(); $event.stopPropagation()\" -->\n <div class=\"cqa-relative\" #dropdownContainer>\n <button type=\"button\" \n [attr.title]=\"getCurrentEventTypeConfig().label\"\n [style.background-color]=\"getCurrentEventTypeConfig().backgroundColor\"\n [style.color]=\"getCurrentEventTypeConfig().color\"\n class=\"cqa-w-8 cqa-h-8 cqa-rounded-lg cqa-flex cqa-items-center cqa-justify-center cqa-flex-shrink-0 cqa-cursor-pointer\">\n <!-- Icon -->\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'paper_plane'\">\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 6.41663L12.8333 1.16663L7.58333 12.25L6.41667 7.58329L1.75 6.41663Z\" stroke=\"currentColor\"\n stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'star'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5.797 9.04165C5.74492 8.83977 5.63969 8.65554 5.49227 8.50812C5.34485 8.3607 5.16062 8.25548 4.95875 8.2034L1.38 7.28057C1.31894 7.26324 1.2652 7.22646 1.22694 7.17583C1.18867 7.12519 1.16797 7.06345 1.16797 6.99998C1.16797 6.93651 1.18867 6.87478 1.22694 6.82414C1.2652 6.7735 1.31894 6.73673 1.38 6.7194L4.95875 5.79598C5.16055 5.74395 5.34473 5.63882 5.49215 5.49151C5.63956 5.34419 5.74483 5.16008 5.797 4.95832L6.71983 1.37957C6.73698 1.31827 6.77372 1.26427 6.82443 1.2258C6.87515 1.18733 6.93705 1.1665 7.0007 1.1665C7.06436 1.1665 7.12626 1.18733 7.17698 1.2258C7.22769 1.26427 7.26442 1.31827 7.28158 1.37957L8.20383 4.95832C8.25591 5.16019 8.36113 5.34442 8.50855 5.49184C8.65597 5.63926 8.8402 5.74449 9.04208 5.79657L12.6208 6.71882C12.6824 6.73579 12.7366 6.77249 12.7753 6.82328C12.814 6.87407 12.8349 6.93614 12.8349 6.99998C12.8349 7.06382 12.814 7.1259 12.7753 7.17669C12.7366 7.22748 12.6824 7.26417 12.6208 7.28115L9.04208 8.2034C8.8402 8.25548 8.65597 8.3607 8.50855 8.50812C8.36113 8.65554 8.25591 8.83977 8.20383 9.04165L7.281 12.6204C7.26384 12.6817 7.22711 12.7357 7.17639 12.7742C7.12568 12.8126 7.06377 12.8335 7.00012 12.8335C6.93647 12.8335 6.87456 12.8126 6.82385 12.7742C6.77314 12.7357 6.7364 12.6817 6.71925 12.6204L5.797 9.04165Z\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M11.666 1.75V4.08333\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M12.8333 2.91663H10.5\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M2.33398 9.91663V11.0833\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M2.91667 10.5H1.75\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'T'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2.33398 4.08325V2.33325H11.6673V4.08325\" stroke=\"currentColor\" stroke-width=\"1.16667\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M5.25 11.6667H8.75\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M7 2.33325V11.6666\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'cursor'\">\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 1.75L5.87417 11.6492L7.33833 7.33833L11.6492 5.87417L1.75 1.75Z\" stroke=\"currentColor\"\n stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M7.58398 7.58325L11.084 11.0833\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'cursor-double'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.16667 2.3916L7 3.49993\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2.97487 4.66662L1.2832 4.19995\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M3.50091 7L2.39258 8.16667\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.19922 1.28345L4.66589 2.97511\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M5.27114 5.65255C5.24852 5.59926 5.24234 5.54043 5.25338 5.48361C5.26443 5.42678 5.2922 5.37455 5.33313 5.33362C5.37407 5.29269 5.4263 5.26492 5.48312 5.25387C5.53994 5.24283 5.59877 5.24901 5.65206 5.27163L12.0687 7.89663C12.1258 7.92006 12.174 7.961 12.2064 8.01357C12.2388 8.06613 12.2536 8.12761 12.2488 8.18915C12.244 8.25069 12.2198 8.30912 12.1797 8.35603C12.1396 8.40295 12.0856 8.43592 12.0256 8.45021L9.48864 9.05746C9.38391 9.08248 9.28815 9.13599 9.21196 9.21208C9.13578 9.28816 9.08213 9.38385 9.05698 9.48855L8.45031 12.026C8.43617 12.0863 8.40323 12.1405 8.35626 12.1808C8.30928 12.2211 8.25071 12.2454 8.189 12.2502C8.1273 12.255 8.06567 12.2401 8.01302 12.2075C7.96037 12.175 7.91944 12.1266 7.89614 12.0692L5.27114 5.65255Z\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'enter'\" class=\"cqa-enter-key-icon cqa-inline-flex cqa-flex-shrink-0\" style=\"width: 20px; height: 20px;\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 32 32\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-w-full cqa-h-full\">\n <path fill=\"#6B7280\" transform=\"translate(14,5)\" d=\"M0 0 C4.29 0 8.58 0 13 0 C13 7.26 13 14.52 13 22 C5.74 22 -1.52 22 -9 22 C-9 16.72 -9 11.44 -9 6 C-6.03 6 -3.06 6 0 6 C0 4.02 0 2.04 0 0 Z M2 2 C2 3.98 2 5.96 2 8 C-0.97 8 -3.94 8 -7 8 C-7 11.96 -7 15.92 -7 20 C-1.06 20 4.88 20 11 20 C11 14.06 11 8.12 11 2 C8.03 2 5.06 2 2 2 Z\"/>\n <path fill=\"#6B7280\" transform=\"translate(19,13)\" d=\"M0 0 C0.66 0 1.32 0 2 0 C2 2.31 2 4.62 2 7 C0.02 7 -1.96 7 -4 7 C-4.33 8.32 -4.66 9.64 -5 11 C-6.65 9.68 -8.3 8.36 -10 7 C-8.63016497 3.83884224 -8.0109362 3.0072908 -5 1 C-4.67 2.32 -4.34 3.64 -4 5 C-2.68 5 -1.36 5 0 5 C0 3.35 0 1.7 0 0 Z\"/>\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'clock'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.99935 12.8334C10.221 12.8334 12.8327 10.2217 12.8327 7.00008C12.8327 3.77842 10.221 1.16675 6.99935 1.16675C3.77769 1.16675 1.16602 3.77842 1.16602 7.00008C1.16602 10.2217 3.77769 12.8334 6.99935 12.8334Z\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M7 3.5V7L9.33333 8.16667\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'settings'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 4.66667C5.71133 4.66667 4.66667 5.71133 4.66667 7C4.66667 8.28867 5.71133 9.33333 7 9.33333C8.28867 9.33333 9.33333 8.28867 9.33333 7C9.33333 5.71133 8.28867 4.66667 7 4.66667Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M11.0833 7.58333C11.1417 7.29167 11.1417 6.70833 11.0833 6.41667L12.25 5.83333C12.4167 5.70833 12.4833 5.48333 12.4167 5.25L11.6667 3.41667C11.6 3.18333 11.3917 3.04167 11.1417 3.04167L9.91667 3.5C9.56667 3.20833 9.19167 2.95833 8.75 2.79167L8.4 1.45833C8.34167 1.225 8.14167 1.16667 7.93333 1.16667H6.06667C5.85833 1.16667 5.65833 1.225 5.6 1.45833L5.25 2.79167C4.80833 2.95833 4.43333 3.20833 4.08333 3.5L2.85833 3.04167C2.60833 3.04167 2.4 3.18333 2.33333 3.41667L1.58333 5.25C1.51667 5.48333 1.58333 5.70833 1.75 5.83333L2.91667 6.41667C2.85833 6.70833 2.85833 7.29167 2.91667 7.58333L1.75 8.16667C1.58333 8.29167 1.51667 8.51667 1.58333 8.75L2.33333 10.5833C2.4 10.8167 2.60833 10.9583 2.85833 10.9583L4.08333 10.5C4.43333 10.7917 4.80833 11.0417 5.25 11.2083L5.6 12.5417C5.65833 12.775 5.85833 12.8333 6.06667 12.8333H7.93333C8.14167 12.8333 8.34167 12.775 8.4 12.5417L8.75 11.2083C9.19167 11.0417 9.56667 10.7917 9.91667 10.5L11.1417 10.9583C11.3917 10.9583 11.6 10.8167 11.6667 10.5833L12.4167 8.75C12.4833 8.51667 12.4167 8.29167 12.25 8.16667L11.0833 7.58333Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span *ngIf=\"getCurrentEventTypeConfig().icon === 'check'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.6667 3.5L5.25 10.5L2.33333 7.58333\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n\n <!-- Label (show only when no icon; all types have icon now \u2013 tooltip on button) -->\n <span *ngIf=\"!getCurrentEventTypeConfig().icon\" class=\"cqa-text-[#432DD7] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium\">{{\n getCurrentEventTypeConfig().label }}</span>\n </button>\n\n <!-- Dropdown Menu -->\n <div *ngIf=\"eventTypeDropdownOpen\" (click)=\"$event.stopPropagation()\"\n class=\"cqa-absolute cqa-top-full cqa-left-0 cqa-mt-1 cqa-bg-white cqa-rounded-lg cqa-shadow-lg cqa-border cqa-border-gray-200 cqa-z-50 cqa-min-w-[150px] cqa-py-1\">\n <button *ngFor=\"let etc of eventTypeConfigs\" type=\"button\" (click)=\"onEventTypeSelect(etc.type)\"\n [class.cqa-bg-primary-50]=\"eventType === etc.type\"\n class=\"cqa-w-full cqa-px-3 cqa-py-2 cqa-text-left cqa-flex cqa-items-center cqa-gap-2 hover:cqa-bg-gray-50 cqa-transition-colors\">\n <span *ngIf=\"etc.icon === 'paper_plane'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1 5.5L11 1M11 1L7.5 11L6 6.5L1 5.5M11 1L1 5.5\" stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'star'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 1L7.5 4.5L11 5L7.5 5.5L6 9L4.5 5.5L1 5L4.5 4.5L6 1Z\" fill=\"currentColor\" />\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'T'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2.33398 4.08325V2.33325H11.6673V4.08325\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M5.25 11.6667H8.75\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M7 2.33325V11.6666\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'cursor'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 2L9 1L10 8L7 7L5 9L4 7L2 2Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'cursor-double'\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.16667 2.3916L7 3.49993\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2.97487 4.66662L1.2832 4.19995\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M3.50091 7L2.39258 8.16667\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.19922 1.28345L4.66589 2.97511\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M5.27114 5.65255C5.24852 5.59926 5.24234 5.54043 5.25338 5.48361C5.26443 5.42678 5.2922 5.37455 5.33313 5.33362C5.37407 5.29269 5.4263 5.26492 5.48312 5.25387C5.53994 5.24283 5.59877 5.24901 5.65206 5.27163L12.0687 7.89663C12.1258 7.92006 12.174 7.961 12.2064 8.01357C12.2388 8.06613 12.2536 8.12761 12.2488 8.18915C12.244 8.25069 12.2198 8.30912 12.1797 8.35603C12.1396 8.40295 12.0856 8.43592 12.0256 8.45021L9.48864 9.05746C9.38391 9.08248 9.28815 9.13599 9.21196 9.21208C9.13578 9.28816 9.08213 9.38385 9.05698 9.48855L8.45031 12.026C8.43617 12.0863 8.40323 12.1405 8.35626 12.1808C8.30928 12.2211 8.25071 12.2454 8.189 12.2502C8.1273 12.255 8.06567 12.2401 8.01302 12.2075C7.96037 12.175 7.91944 12.1266 7.89614 12.0692L5.27114 5.65255Z\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> \n </span>\n <span *ngIf=\"etc.icon === 'enter'\" class=\"cqa-enter-key-icon cqa-inline-flex cqa-flex-shrink-0\" style=\"width: 16px; height: 16px;\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 32 32\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-w-full cqa-h-full\">\n <path fill=\"#6B7280\" transform=\"translate(14,5)\" d=\"M0 0 C4.29 0 8.58 0 13 0 C13 7.26 13 14.52 13 22 C5.74 22 -1.52 22 -9 22 C-9 16.72 -9 11.44 -9 6 C-6.03 6 -3.06 6 0 6 C0 4.02 0 2.04 0 0 Z M2 2 C2 3.98 2 5.96 2 8 C-0.97 8 -3.94 8 -7 8 C-7 11.96 -7 15.92 -7 20 C-1.06 20 4.88 20 11 20 C11 14.06 11 8.12 11 2 C8.03 2 5.06 2 2 2 Z\"/>\n <path fill=\"#6B7280\" transform=\"translate(19,13)\" d=\"M0 0 C0.66 0 1.32 0 2 0 C2 2.31 2 4.62 2 7 C0.02 7 -1.96 7 -4 7 C-4.33 8.32 -4.66 9.64 -5 11 C-6.65 9.68 -8.3 8.36 -10 7 C-8.63016497 3.83884224 -8.0109362 3.0072908 -5 1 C-4.67 2.32 -4.34 3.64 -4 5 C-2.68 5 -1.36 5 0 5 C0 3.35 0 1.7 0 0 Z\"/>\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'clock'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n <path d=\"M6 3V6L8 7\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'settings'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 4.66667C5.71133 4.66667 4.66667 5.71133 4.66667 7C4.66667 8.28867 5.71133 9.33333 7 9.33333C8.28867 9.33333 9.33333 8.28867 9.33333 7C9.33333 5.71133 8.28867 4.66667 7 4.66667Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M11.0833 7.58333C11.1417 7.29167 11.1417 6.70833 11.0833 6.41667L12.25 5.83333C12.4167 5.70833 12.4833 5.48333 12.4167 5.25L11.6667 3.41667C11.6 3.18333 11.3917 3.04167 11.1417 3.04167L9.91667 3.5C9.56667 3.20833 9.19167 2.95833 8.75 2.79167L8.4 1.45833C8.34167 1.225 8.14167 1.16667 7.93333 1.16667H6.06667C5.85833 1.16667 5.65833 1.225 5.6 1.45833L5.25 2.79167C4.80833 2.95833 4.43333 3.20833 4.08333 3.5L2.85833 3.04167C2.60833 3.04167 2.4 3.18333 2.33333 3.41667L1.58333 5.25C1.51667 5.48333 1.58333 5.70833 1.75 5.83333L2.91667 6.41667C2.85833 6.70833 2.85833 7.29167 2.91667 7.58333L1.75 8.16667C1.58333 8.29167 1.51667 8.51667 1.58333 8.75L2.33333 10.5833C2.4 10.8167 2.60833 10.9583 2.85833 10.9583L4.08333 10.5C4.43333 10.7917 4.80833 11.0417 5.25 11.2083L5.6 12.5417C5.65833 12.775 5.85833 12.8333 6.06667 12.8333H7.93333C8.14167 12.8333 8.34167 12.775 8.4 12.5417L8.75 11.2083C9.19167 11.0417 9.56667 10.7917 9.91667 10.5L11.1417 10.9583C11.3917 10.9583 11.6 10.8167 11.6667 10.5833L12.4167 8.75C12.4833 8.51667 12.4167 8.29167 12.25 8.16667L11.0833 7.58333Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span *ngIf=\"etc.icon === 'check'\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.6667 3.5L5.25 10.5L2.33333 7.58333\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span>{{ etc.label }}</span>\n </button>\n </div>\n </div>\n\n <!-- Action Description: flex-1 + min-w-0 so row can shrink; block flow in step-list SCSS avoids flex breaking innerHTML badges -->\n <span class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px] cqa-action-format cqa-align-middle cqa-min-w-0 cqa-flex-1\" *ngIf=\"getActionDescription()\"\n [innerHTML]=\"getActionDescription()\" (click)=\"clickOnAction($event)\">\n </span>\n <!-- <span class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px]\" *ngIf=\"getActionDescription()\">\n {{ getActionDescription() }}\n </span> -->\n\n <!-- Parameters -->\n <div class=\"cqa-flex cqa-items-center cqa-gap-3\" *ngIf=\"false\">\n <!-- Navigate: URL as clickable trigger for Test Data modal -->\n <span *ngIf=\"eventType === 'navigate' && getNavigateUrlParameter()\" #testDataTrigger\n (click)=\"openTestDataModal($event)\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC] cqa-cursor-pointer hover:cqa-opacity-90\">\n {{ getNavigateUrlParameter()?.value || getNavigateUrlParameter()?.displayValue }}\n </span>\n \n <!-- Other event types: loop through parameters (navigate excluded) -->\n <ng-container *ngFor=\"let param of parameters; let i = index\">\n <!-- Skip navigate parameters in the loop (already shown above) -->\n <ng-container *ngIf=\"eventType !== 'navigate'\">\n\n <!-- Type: First param (text value like {{username}}) -->\n <span *ngIf=\"eventType === 'type' && i === 0\" class=\"cqa-text-gray-900 cqa-text-sm\">\n {{ param.value }}\n </span>\n\n <!-- Type: \"into\" text -->\n <span *ngIf=\"eventType === 'type' && i === 0\" class=\"cqa-text-gray-900 cqa-text-sm\">\n into\n </span>\n\n <!-- Type: Second param (selector) -->\n <span *ngIf=\"eventType === 'type' && i === 1\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n\n <!-- Click: Selector input/display -->\n <span *ngIf=\"eventType === 'click' && param.name === 'element'\"\n #clickElementTrigger\n (click)=\"openElementPopup($event)\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-cursor-pointer cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n\n <!-- Click: Suffix text (like \"if Present\") -->\n <span *ngIf=\"eventType === 'click' && param.name === 'suffix'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n {{ param.value }}\n </span>\n\n <!-- Double Click: Selector input/display -->\n <span *ngIf=\"eventType === 'doubleClick' && i === 0\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n\n <!-- Press Enter: Selector input/display with HTML support -->\n <span *ngIf=\"eventType === 'pressEnter' && i === 0\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\"\n [innerHTML]=\"param.displayValue || param.value\">\n </span>\n\n <!-- Enter: Value display with quotes (like click action) -->\n <span *ngIf=\"eventType === 'enter' && param.name === 'value'\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n\n <!-- Enter: \"in the\" text -->\n <span *ngIf=\"eventType === 'enter' && param.name === 'value'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n in the\n </span>\n\n <!-- Enter: Label display with quotes (like click action) -->\n <span *ngIf=\"eventType === 'enter' && param.name === 'label'\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n\n <!-- Enter: \"field\" text -->\n <span *ngIf=\"eventType === 'enter' && param.name === 'label'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n field\n </span>\n\n <!-- Wait: Duration input -->\n <input *ngIf=\"eventType === 'wait' && param.name === 'duration'\" type=\"number\" [value]=\"param.value\"\n (input)=\"onParameterChange(param, $any($event.target).value)\" placeholder=\"2\"\n class=\"cqa-w-16 cqa-px-2 cqa-py-1.5 cqa-rounded-lg cqa-border cqa-border-solid cqa-border-[#9E9EE3] cqa-bg-[#D1C4E9] cqa-text-[#3F43EE] cqa-text-sm cqa-font-medium cqa-outline-none focus:cqa-ring-2 focus:cqa-ring-[#3F43EE] focus:cqa-ring-opacity-50\" />\n <span *ngIf=\"eventType === 'wait' && param.name === 'duration'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n seconds\n </span>\n\n <!-- Wait: Element selector -->\n <span *ngIf=\"eventType === 'wait' && param.name === 'element'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n for element\n </span>\n <span *ngIf=\"eventType === 'wait' && param.name === 'element'\" \n #elementTrigger\n (click)=\"openElementPopup($event)\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-cursor-pointer cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n <span *ngIf=\"eventType === 'wait' && param.name === 'element'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n to be visible\n </span>\n\n <!-- Custom: Description (clickable to open Step Description modal; pass $event so modal opens below this trigger) -->\n <span *ngIf=\"eventType === 'custom'\" #descriptionTrigger\n (click)=\"openStepDescriptionModal($event)\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC] cqa-cursor-pointer hover:cqa-opacity-90\"\n [innerHTML]=\"param.displayValue || param.value\">\n </span>\n\n <!-- AI Agent: Instructions -->\n <span *ngIf=\"eventType === 'ai-agent'\"\n class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\">\n {{ param.displayValue || param.value }}\n </span>\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-ml-auto cqa-self-center\">\n <!-- Skipped badge (when step is marked to skip) -->\n <span *ngIf=\"config?.shouldSkip\" 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] cqa-flex-shrink-0\">Skipped</span>\n <!-- Action Icons: Edit, Link, Duplicate, Delete (show on hover; hidden when step is inside step-group) - placed first -->\n <div *ngIf=\"editable && !isInsideStepGroup && !isReorder\" class=\"step-actions cqa-flex cqa-items-center cqa-gap-1.5 cqa-pr-2\">\n <button type=\"button\" #editTrigger (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\" stroke-linejoin=\"round\"/>\n <path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <button type=\"button\" (click)=\"onSkipToggle(); $event.stopPropagation()\" [attr.title]=\"config?.shouldSkip ? 'Unskip step' : 'Skip step'\" [class.cqa-text-[#1447E6]]=\"config?.shouldSkip\" 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=\"M8.25 8.75C9.2165 8.75 10 7.9665 10 7C10 6.0335 9.2165 5.25 8.25 5.25C7.2835 5.25 6.5 6.0335 6.5 7C6.5 7.9665 7.2835 8.75 8.25 8.75Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M8.75033 2.91663H5.25033C2.99516 2.91663 1.16699 4.7448 1.16699 6.99996C1.16699 9.25512 2.99516 11.0833 5.25033 11.0833H8.75033C11.0055 11.0833 12.8337 9.25512 12.8337 6.99996C12.8337 4.7448 11.0055 2.91663 8.75033 2.91663Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\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 <path 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\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path 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\" 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\" stroke-linejoin=\"round\"/>\n </svg>\n </button> -->\n <button\n type=\"button\"\n (click)=\"onDuplicate(); $event.stopPropagation()\"\n [disabled]=\"isDuplicating\"\n [attr.title]=\"isDuplicating ? 'Duplicating...' : 'Duplicate'\"\n class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6] disabled:cqa-opacity-60 disabled:cqa-cursor-not-allowed\"\n >\n <svg *ngIf=\"!isDuplicating\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"isDuplicating\" width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-label=\"Duplicating\">\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" stroke-opacity=\"0.2\" stroke-width=\"2\"></circle>\n <path d=\"M14 8A6 6 0 0 0 8 2\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\">\n <animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 8 8\" to=\"360 8 8\" dur=\"0.8s\" repeatCount=\"indefinite\"/>\n </path>\n </svg>\n </button>\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\" stroke-linejoin=\"round\"/>\n <path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path 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\" 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\" stroke-linejoin=\"round\"/>\n <path d=\"M8.16602 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n\n <!-- View Details Link (show only if description is not empty) -->\n <a *ngIf=\"config.description && config.description.trim() !== ''\" #viewDetailsTrigger href=\"#\" (click)=\"onViewDetails($event)\" class=\"cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1 cqa-no-underline\">View Details<svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.03809 6.74329L2.62809 7.33329L5.96142 3.99996L2.62809 0.666626L2.03809 1.25663L4.78142 3.99996L2.03809 6.74329Z\" fill=\"#3F43EE\"/></svg></a>\n\n <!-- Created Date (from API) - last so aligned across all steps, format: 25 Feb 2026 -->\n <span *ngIf=\"config.createdDate\" class=\"step-date cqa-text-[#6B7280] cqa-text-[12px] cqa-leading-[15px] cqa-ml-auto cqa-flex-shrink-0\">\n {{ config.createdDate | date:'d MMM yyyy' }}\n </span>\n </div>\n</div>" }]
|
|
383
390
|
}], ctorParameters: function () { return [{ type: i1.CustomEditStepService }, { type: i2.ElementPopupService }, { type: i3.TestDataModalService }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i4.DomSanitizer }]; }, propDecorators: { dropdownContainer: [{
|
|
384
391
|
type: ViewChild,
|
|
385
392
|
args: ['dropdownContainer', { static: false }]
|
|
@@ -453,8 +460,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
453
460
|
type: Output
|
|
454
461
|
}], clickAction: [{
|
|
455
462
|
type: Output
|
|
463
|
+
}], stepUpdate: [{
|
|
464
|
+
type: Output
|
|
456
465
|
}], onDocumentClick: [{
|
|
457
466
|
type: HostListener,
|
|
458
467
|
args: ['document:click', ['$event']]
|
|
459
468
|
}] } });
|
|
460
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsLXN0ZXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy9ub3JtYWwtc3RlcC9ub3JtYWwtc3RlcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL25vcm1hbC1zdGVwL25vcm1hbC1zdGVwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBRVosWUFBWSxFQUNaLFVBQVUsRUFDVixTQUFTLEdBR1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFLckUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFNM0YsT0FBTyxFQUNMLDZCQUE2QixHQUU5QixNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7OztBQVVqRCxNQUFNLE9BQU8sMkJBQTJCO0lBeUN0QyxZQUNtQixjQUFxQyxFQUNyQyxZQUFpQyxFQUNqQyxhQUFtQyxFQUNuQyxHQUFzQixFQUN0QixNQUFjLEVBQ2QsU0FBdUI7UUFMdkIsbUJBQWMsR0FBZCxjQUFjLENBQXVCO1FBQ3JDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxrQkFBYSxHQUFiLGFBQWEsQ0FBc0I7UUFDbkMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFqQ2pDLGVBQVUsR0FBb0IsRUFBRSxDQUFDO1FBQ2pDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGlCQUFZLEdBQVksS0FBSyxD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c0JBQXhCLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBOFdQLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkluaXQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgRWxlbWVudFJlZixcbiAgVmlld0NoaWxkLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgTmdab25lLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5vcm1hbFN0ZXBDb25maWcsIFRlc3RDYXNlRXZlbnRUeXBlLCBFdmVudFR5cGVDb25maWcsIFN0ZXBQYXJhbWV0ZXIsIFRlc3RDYXNlU3RlcENvbmZpZyB9IGZyb20gJy4uL3Rlc3QtY2FzZS1zdGVwLm1vZGVscyc7XG5pbXBvcnQgeyBTVEVQX1JPV19BQ1RJT05TX1NUWUxFUyB9IGZyb20gJy4uL3N0ZXAtcm93LWFjdGlvbnMuc3R5bGVzJztcbmltcG9ydCB7XG4gIEN1c3RvbUVkaXRTdGVwUmVzdWx0LFxuICBDdXN0b21FZGl0U3RlcFNlcnZpY2UsXG59IGZyb20gJy4uL2N1c3RvbS1lZGl0LXN0ZXAvY3VzdG9tLWVkaXQtc3RlcC5zZXJ2aWNlJztcbmltcG9ydCB7IENVU1RPTV9FRElUX1NURVBfRURJVF9JTl9ERVBUSCB9IGZyb20gJy4uL2N1c3RvbS1lZGl0LXN0ZXAvY3VzdG9tLWVkaXQtc3RlcC1kYXRhJztcbmltcG9ydCB7IEVsZW1lbnRQb3B1cFJlc3VsdCwgRWxlbWVudFBvcHVwU2VydmljZSB9IGZyb20gJy4uL2VsZW1lbnQtcG9wdXAvZWxlbWVudC1wb3B1cC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIFRlc3REYXRhTW9kYWxSZXN1bHQsXG4gIFRlc3REYXRhTW9kYWxTZXJ2aWNlLFxufSBmcm9tICcuLi90ZXN0LWRhdGEtbW9kYWwvdGVzdC1kYXRhLW1vZGFsLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgVEVTVF9EQVRBX01PREFMX0VESVRfSU5fREVQVEgsXG4gIFRlc3REYXRhTW9kYWxEYXRhLFxufSBmcm9tICcuLi90ZXN0LWRhdGEtbW9kYWwvdGVzdC1kYXRhLW1vZGFsLWRhdGEnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBWaWV3RGV0YWlsc1BheWxvYWQgfSBmcm9tICcuLi9zdGVwLWRldGFpbHMtbW9kYWwvc3RlcC1kZXRhaWxzLW1vZGFsLWRhdGEnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtdGVzdC1jYXNlLW5vcm1hbC1zdGVwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25vcm1hbC1zdGVwLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxuICBzdHlsZXM6IFtTVEVQX1JPV19BQ1RJT05TX1NUWUxFU10sXG59KVxuZXhwb3J0IGNsYXNzIFRlc3RDYXNlTm9ybWFsU3RlcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duQ29udGFpbmVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGRyb3Bkb3duQ29udGFpbmVyPzogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZGVzY3JpcHRpb25UcmlnZ2VyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGRlc2NyaXB0aW9uVHJpZ2dlcj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCd0ZXN0RGF0YVRyaWdnZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgdGVzdERhdGFUcmlnZ2VyPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2VkaXRUcmlnZ2VyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGVkaXRUcmlnZ2VyPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2VsZW1lbnRUcmlnZ2VyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGVsZW1lbnRUcmlnZ2VyPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ2NsaWNrRWxlbWVudFRyaWdnZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgY2xpY2tFbGVtZW50VHJpZ2dlcj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCd2aWV3RGV0YWlsc1RyaWdnZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgdmlld0RldGFpbHNUcmlnZ2VyPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBJbnB1dCgpIGNvbmZpZyE6IE5vcm1hbFN0ZXBDb25maWc7XG4gIEBJbnB1dCgpIHN0ZXBOdW1iZXIhOiBudW1iZXIgfCBzdHJpbmc7XG4gIC8qKiBBcnJheSBpbmRleCBmcm9tIHBhcmVudCByZW5kZXJlciAtIHVzZSBmb3IgZWRpdEluRGVwdGggKHN0ZXBOdW1iZXIgXCIxMC4zXCIgcGFyc2VzIHdyb25nKSAqL1xuICBASW5wdXQoKSBpbmRleD86IG51bWJlcjtcbiAgQElucHV0KCkgYWN0aW9uITogc3RyaW5nO1xuICBASW5wdXQoKSBldmVudFR5cGUhOiBUZXN0Q2FzZUV2ZW50VHlwZTtcbiAgQElucHV0KCkgcGFyYW1ldGVyczogU3RlcFBhcmFtZXRlcltdID0gW107XG4gIEBJbnB1dCgpIHNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzTmVzdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzSW5zaWRlTG9vcDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0luc2lkZVN0ZXBHcm91cDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc1Jlb3JkZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZWRpdGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBzdGVwSW5kZXg/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGlzRHVwbGljYXRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgZXZlbnRUeXBlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUZXN0Q2FzZUV2ZW50VHlwZT4oKTtcbiAgQE91dHB1dCgpIHBhcmFtZXRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBwYXJhbWV0ZXI6IFN0ZXBQYXJhbWV0ZXI7IHZhbHVlOiBzdHJpbmcgfT4oKTtcbiAgQE91dHB1dCgpIGVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBlZGl0SW5EZXB0aCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWc7IGluZGV4OiBudW1iZXIgfT4oKTtcbiAgQE91dHB1dCgpIGxpbmsgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBkdXBsaWNhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBtb3JlT3B0aW9ucyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHZpZXdEZXRhaWxzID0gbmV3IEV2ZW50RW1pdHRlcjxWaWV3RGV0YWlsc1BheWxvYWQ+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBjbGlja0FjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8TW91c2VFdmVudD4oKTtcblxuICBldmVudFR5cGVEcm9wZG93bk9wZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIFN0b3JlZCB0ZXN0IGRhdGEgbW9kYWwgc3RhdGUgZm9yIHJlb3BlbmluZyB3aXRoIHNhbWUgc2VsZWN0aW9ucy4gKi9cbiAgcHJpdmF0ZSB0ZXN0RGF0YU1vZGFsU3RhdGU6IFRlc3REYXRhTW9kYWxEYXRhIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjdXN0b21FZGl0U3RlcDogQ3VzdG9tRWRpdFN0ZXBTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFBvcHVwOiBFbGVtZW50UG9wdXBTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGVzdERhdGFNb2RhbDogVGVzdERhdGFNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzYW5pdGl6ZXI6IERvbVNhbml0aXplclxuICApIHt9XG5cbiAgLyoqIFVuaXF1ZSBjb2xvcnMgcGVyIGV2ZW50IHR5cGU7IGJhZGdlIHVzZXMgY29uc2lzdGVudCBzaXplICh3LTggaC04IHJvdW5kZWQtbGcpLiAqL1xuICBldmVudFR5cGVDb25maWdzOiBFdmVudFR5cGVDb25maWdbXSA9IFtcbiAgICB7IHR5cGU6ICduYXZpZ2F0ZScsIGxhYmVsOiAnTmF2aWdhdGUnLCBpY29uOiAncGFwZXJfcGxhbmUnLCBjb2xvcjogJyM0MzM4Q0EnLCBiYWNrZ3JvdW5kQ29sb3I6ICcjRTBFN0ZGJyB9LFxuICAgIHsgdHlwZTogJ2N1c3RvbScsIGxhYmVsOiAnQ3VzdG9tJywgaWNvbjogJ3NldHRpbmdzJywgY29sb3I6ICcjNDc1NTY5JywgYmFja2dyb3VuZENvbG9yOiAnI0YxRjVGOScgfSxcbiAgICB7IHR5cGU6ICdhaS1hZ2VudCcsIGxhYmVsOiAnQUkgQWdlbnQnLCBpY29uOiAnc3RhcicsIGNvbG9yOiAnIzdDM0FFRCcsIGJhY2tncm91bmRDb2xvcjogJyNFREU5RkUnIH0sXG4gICAgeyB0eXBlOiAndHlwZScsIGxhYmVsOiAnVHlwZScsIGljb246ICdUJywgY29sb3I6ICcjQTIxQ0FGJywgYmFja2dyb3VuZENvbG9yOiAnI0ZBRThGRicgfSxcbiAgICB7IHR5cGU6ICdjbGljaycsIGxhYmVsOiAnQ2xpY2snLCBpY29uOiAnY3Vyc29yJywgY29sb3I6ICcjMDI4NEM3JywgYmFja2dyb3VuZENvbG9yOiAnI0UwRjJGRScgfSxcbiAgICB7IHR5cGU6ICdkb3VibGVDbGljaycsIGxhYmVsOiAnRG91YmxlIENsaWNrJywgaWNvbjogJ2N1cnNvci1kb3VibGUnLCBjb2xvcjogJyMwODkxQjInLCBiYWNrZ3JvdW5kQ29sb3I6ICcjQ0ZGQUZFJyB9LFxuICAgIHsgdHlwZTogJ3ByZXNzRW50ZXInLCBsYWJlbDogJ1ByZXNzIEVudGVyJywgaWNvbjogJ2VudGVyJywgY29sb3I6ICcjMEQ5NDg4JywgYmFja2dyb3VuZENvbG9yOiAnI0NDRkJGMScgfSxcbiAgICB7IHR5cGU6ICdlbnRlcicsIGxhYmVsOiAnRW50ZXInLCBpY29uOiAnVCcsIGNvbG9yOiAnIzA1OTY2OScsIGJhY2tncm91bmRDb2xvcjogJyNEMUZBRTUnIH0sXG4gICAgeyB0eXBlOiAndmVyaWZ5JywgbGFiZWw6ICdWZXJpZnknLCBpY29uOiAnY2hlY2snLCBjb2xvcjogJyMxNkEzNEEnLCBiYWNrZ3JvdW5kQ29sb3I6ICcjRENGQ0U3JyB9LFxuICAgIHsgdHlwZTogJ3dhaXQnLCBsYWJlbDogJ1dhaXQnLCBpY29uOiAnY2xvY2snLCBjb2xvcjogJyM2QjcyODAnLCBiYWNrZ3JvdW5kQ29sb3I6ICcjRjNGNEY2JyB9XG4gIF07XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICB0aGlzLmFjdGlvbiA9IHRoaXMuY29uZmlnLmFjdGlvbiB8fCAnJztcbiAgICAgIHRoaXMuc3RlcE51bWJlciA9IHRoaXMuY29uZmlnLnN0ZXBOdW1iZXI7XG4gICAgICB0aGlzLmV2ZW50VHlwZSA9IHRoaXMuY29uZmlnLmV2ZW50VHlwZTtcbiAgICAgIHRoaXMucGFyYW1ldGVycyA9IHRoaXMuY29uZmlnLnBhcmFtZXRlcnMgfHwgW107XG4gICAgICB0aGlzLnNlbGVjdGVkID0gdGhpcy5jb25maWcuc2VsZWN0ZWQgfHwgZmFsc2U7XG4gICAgICB0aGlzLmRpc2FibGVkID0gdGhpcy5jb25maWcuZGlzYWJsZWQgfHwgZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q3VycmVudEV2ZW50VHlwZUNvbmZpZygpOiBFdmVudFR5cGVDb25maWcge1xuICAgIHJldHVybiB0aGlzLmV2ZW50VHlwZUNvbmZpZ3MuZmluZChldGMgPT4gZXRjLnR5cGUgPT09IHRoaXMuZXZlbnRUeXBlKSB8fCB0aGlzLmV2ZW50VHlwZUNvbmZpZ3NbMF07XG4gIH1cblxuICBnZXRBY3Rpb25EZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIC8vIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0Q3VycmVudEV2ZW50VHlwZUNvbmZpZygpO1xuICAgIC8vIHN3aXRjaCAodGhpcy5ldmVudFR5cGUpIHtcbiAgICAvLyAgIGNhc2UgJ25hdmlnYXRlJzpcbiAgICAvLyAgICAgcmV0dXJuICdOYXZpZ2F0ZSB0byc7XG4gICAgLy8gICBjYXNlICd0eXBlJzpcbiAgICAvLyAgICAgcmV0dXJuICdUeXBlJztcbiAgICAvLyAgIGNhc2UgJ2NsaWNrJzpcbiAgICAvLyAgICAgcmV0dXJuICdDbGljayBvbic7XG4gICAgLy8gICBjYXNlICdkb3VibGVDbGljayc6XG4gICAgLy8gICAgIHJldHVybiAnRG91YmxlIGNsaWNrIG9uJztcbiAgICAvLyAgIGNhc2UgJ3ByZXNzRW50ZXInOlxuICAgIC8vICAgICByZXR1cm4gJ1ByZXNzIEVudGVyIG9uJztcbiAgICAvLyAgIGNhc2UgJ2VudGVyJzpcbiAgICAvLyAgICAgcmV0dXJuICdFbnRlcic7XG4gICAgLy8gICBjYXNlICd3YWl0JzpcbiAgICAvLyAgICAgcmV0dXJuICdXYWl0JztcbiAgICAvLyAgIGNhc2UgJ3ZlcmlmeSc6XG4gICAgLy8gICAgIHJldHVybiAnVmVyaWZ5JztcbiAgICAvLyAgIGNhc2UgJ2N1c3RvbSc6XG4gICAgLy8gICAgIHJldHVybiAnQ3VzdG9tIHN0ZXAnO1xuICAgIC8vICAgY2FzZSAnYWktYWdlbnQnOlxuICAgIC8vICAgICByZXR1cm4gJ0FJIEFnZW50JztcbiAgICAvLyAgIGRlZmF1bHQ6XG4gICAgLy8gICAgIHJldHVybiAnJztcbiAgICAvLyB9XG4gICAgICBpZiAodGhpcy5hY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aW9uID8gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwodGhpcy5hY3Rpb24pIGFzIHN0cmluZyA6ICcnO1xuICAgICAgfVxuICAgICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZ2V0QWN0aW9uU3VmZml4KCk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0aGlzLmV2ZW50VHlwZSkge1xuICAgICAgY2FzZSAndHlwZSc6XG4gICAgICAgIHJldHVybiAnaW50byc7XG4gICAgICBjYXNlICd3YWl0JzpcbiAgICAgICAgaWYgKHRoaXMucGFyYW1ldGVycy5sZW5ndGggPiAwICYmIHRoaXMucGFyYW1ldGVyc1swXS5uYW1lID09PSAnZHVyYXRpb24nKSB7XG4gICAgICAgICAgcmV0dXJuICdzZWNvbmRzJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ2ZvciBlbGVtZW50JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICAvKiogQ3VycmVudCBkZXNjcmlwdGlvbiBmb3IgY3VzdG9tIGV2ZW50IHR5cGUgKGZpcnN0IHBhcmFtZXRlciB2YWx1ZSkuICovXG4gIGdldEN1c3RvbURlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZXZlbnRUeXBlICE9PSAnY3VzdG9tJyB8fCAhdGhpcy5wYXJhbWV0ZXJzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgZmlyc3QgPSB0aGlzLnBhcmFtZXRlcnNbMF07XG4gICAgcmV0dXJuIGZpcnN0Py52YWx1ZSA/PyBmaXJzdD8uZGlzcGxheVZhbHVlID8/ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgVVJMIHBhcmFtZXRlciBmb3IgbmF2aWdhdGUgc3RlcHMgKG9sZCBVSSBzdHlsZSAtIHNob3cgb25seSBVUkwpXG4gICAqIFJldHVybnMgdGhlIGZpcnN0IHBhcmFtZXRlciB3aXRoIG5hbWUgJ3VybCcgb3IgJ1VSTCcsIG9yIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaWYgbm9uZSBmb3VuZFxuICAgKi9cbiAgZ2V0TmF2aWdhdGVVcmxQYXJhbWV0ZXIoKTogU3RlcFBhcmFtZXRlciB8IG51bGwge1xuICAgIGlmICh0aGlzLmV2ZW50VHlwZSAhPT0gJ25hdmlnYXRlJyB8fCAhdGhpcy5wYXJhbWV0ZXJzIHx8IHRoaXMucGFyYW1ldGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvLyBUcnkgdG8gZmluZCBwYXJhbWV0ZXIgd2l0aCBuYW1lICd1cmwnIG9yICdVUkwnXG4gICAgY29uc3QgdXJsUGFyYW0gPSB0aGlzLnBhcmFtZXRlcnMuZmluZChwID0+IHAubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3VybCcpO1xuICAgIC8vIElmIG5vdCBmb3VuZCwgcmV0dXJuIHRoZSBmaXJzdCBwYXJhbWV0ZXIgKGxpa2VseSB0aGUgVVJMKVxuICAgIHJldHVybiB1cmxQYXJhbSB8fCB0aGlzLnBhcmFtZXRlcnNbMF0gfHwgbnVsbDtcbiAgfVxuXG4gIC8qKiBDdXJyZW50IFVSTCB2YWx1ZSBmb3IgbmF2aWdhdGUgc3RlcCAoZm9yIFRlc3QgRGF0YSBtb2RhbCkuICovXG4gIGdldE5hdmlnYXRlVXJsVmFsdWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJhbSA9IHRoaXMuZ2V0TmF2aWdhdGVVcmxQYXJhbWV0ZXIoKTtcbiAgICByZXR1cm4gcGFyYW0/LnZhbHVlID8/IHBhcmFtPy5kaXNwbGF5VmFsdWUgPz8gJyc7XG4gIH1cblxuICAvKiogT3BlbnMgVGVzdCBEYXRhIG1vZGFsIGJlbG93IHRoZSBnaXZlbiB0cmlnZ2VyOyB1c2VkIHdoZW4gZXZlbnRUeXBlID09PSAnbmF2aWdhdGUnLiAqL1xuICBvcGVuVGVzdERhdGFNb2RhbChvcmlnaW46IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgSFRNTEVsZW1lbnQgfCBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNJbnNpZGVTdGVwR3JvdXAgfHwgdGhpcy5ldmVudFR5cGUgIT09ICduYXZpZ2F0ZScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZWwgPVxuICAgICAgb3JpZ2luIGluc3RhbmNlb2YgTW91c2VFdmVudFxuICAgICAgICA/IChvcmlnaW4uY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudClcbiAgICAgICAgOiBvcmlnaW4gaW5zdGFuY2VvZiBFbGVtZW50UmVmXG4gICAgICAgICAgPyBvcmlnaW4ubmF0aXZlRWxlbWVudFxuICAgICAgICAgIDogKG9yaWdpbiBhcyBIVE1MRWxlbWVudCk7XG4gICAgY29uc3Qgb3JpZ2luUmVmID0gbmV3IEVsZW1lbnRSZWYoZWwpO1xuICAgIFxuICAgIC8vIFVzZSBzdG9yZWQgc3RhdGUgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlIGN1cnJlbnQgVVJMIHZhbHVlXG4gICAgY29uc3QgbW9kYWxEYXRhOiBUZXN0RGF0YU1vZGFsRGF0YSA9IHRoaXMudGVzdERhdGFNb2RhbFN0YXRlID8/IHtcbiAgICAgIHZhbHVlOiB0aGlzLmdldE5hdmlnYXRlVXJsVmFsdWUoKSxcbiAgICB9O1xuICAgIFxuICAgIGNvbnN0IHJlZiA9IHRoaXMudGVzdERhdGFNb2RhbC5vcGVuKG9yaWdpblJlZiwgbW9kYWxEYXRhKTtcbiAgICByZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdDogVGVzdERhdGFNb2RhbFJlc3VsdCkgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gVEVTVF9EQVRBX01PREFMX0VESVRfSU5fREVQVEgpIHtcbiAgICAgICAgICB0aGlzLm1vcmVPcHRpb25zLmVtaXQoKTtcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIEhhbmRsZSBUZXN0RGF0YU1vZGFsRGF0YSBvYmplY3QgKGZ1bGwgc3RhdGUpXG4gICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiAndmFsdWUnIGluIHJlc3VsdCkge1xuICAgICAgICAgIGNvbnN0IG1vZGFsRGF0YVJlc3VsdCA9IHJlc3VsdCBhcyBUZXN0RGF0YU1vZGFsRGF0YTtcbiAgICAgICAgICB0aGlzLnRlc3REYXRhTW9kYWxTdGF0ZSA9IG1vZGFsRGF0YVJlc3VsdDsgLy8gU3RvcmUgc3RhdGUgZm9yIHJlb3BlbmluZ1xuICAgICAgICAgIGNvbnN0IHVybFBhcmFtID0gdGhpcy5nZXROYXZpZ2F0ZVVybFBhcmFtZXRlcigpO1xuICAgICAgICAgIGlmICh1cmxQYXJhbSAmJiBtb2RhbERhdGFSZXN1bHQudmFsdWUpIHtcbiAgICAgICAgICAgIHVybFBhcmFtLnZhbHVlID0gbW9kYWxEYXRhUmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgdXJsUGFyYW0uZGlzcGxheVZhbHVlID0gbW9kYWxEYXRhUmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgdGhpcy5wYXJhbWV0ZXJDaGFuZ2UuZW1pdCh7IHBhcmFtZXRlcjogdXJsUGFyYW0sIHZhbHVlOiBtb2RhbERhdGFSZXN1bHQudmFsdWUgfSk7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBIYW5kbGUgc3RyaW5nIHJlc3VsdCAoYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcbiAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgY29uc3QgdXJsUGFyYW0gPSB0aGlzLmdldE5hdmlnYXRlVXJsUGFyYW1ldGVyKCk7XG4gICAgICAgICAgaWYgKHVybFBhcmFtKSB7XG4gICAgICAgICAgICB1cmxQYXJhbS52YWx1ZSA9IHJlc3VsdDtcbiAgICAgICAgICAgIHVybFBhcmFtLmRpc3BsYXlWYWx1ZSA9IHJlc3VsdDtcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldGVyQ2hhbmdlLmVtaXQoeyBwYXJhbWV0ZXI6IHVybFBhcmFtLCB2YWx1ZTogcmVzdWx0IH0pO1xuICAgICAgICAgICAgLy8gQ2xlYXIgc3RvcmVkIHN0YXRlIHdoZW4gdXNpbmcgc3RyaW5nIHJlc3VsdFxuICAgICAgICAgICAgdGhpcy50ZXN0RGF0YU1vZGFsU3RhdGUgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBPcGVucyBTdGVwIERlc2NyaXB0aW9uIG1vZGFsIGJlbG93IHRoZSBnaXZlbiB0cmlnZ2VyOyB1c2VkIHdoZW4gZXZlbnRUeXBlID09PSAnY3VzdG9tJy4gKi9cbiAgb3BlblN0ZXBEZXNjcmlwdGlvbk1vZGFsKG9yaWdpbjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBIVE1MRWxlbWVudCB8IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ldmVudFR5cGUgIT09ICdjdXN0b20nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVsID1cbiAgICAgIG9yaWdpbiBpbnN0YW5jZW9mIE1vdXNlRXZlbnRcbiAgICAgICAgPyAob3JpZ2luLmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpXG4gICAgICAgIDogb3JpZ2luIGluc3RhbmNlb2YgRWxlbWVudFJlZlxuICAgICAgICAgID8gb3JpZ2luLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgICA6IChvcmlnaW4gYXMgSFRNTEVsZW1lbnQpO1xuICAgIGNvbnN0IG9yaWdpblJlZiA9IG5ldyBFbGVtZW50UmVmKGVsKTtcbiAgICBjb25zdCByZWYgPSB0aGlzLmN1c3RvbUVkaXRTdGVwLm9wZW4ob3JpZ2luUmVmLCB7XG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5nZXRDdXN0b21EZXNjcmlwdGlvbigpLFxuICAgIH0pO1xuICAgIHJlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0OiBDdXN0b21FZGl0U3RlcFJlc3VsdCkgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gQ1VTVE9NX0VESVRfU1RFUF9FRElUX0lOX0RFUFRIKSB7XG4gICAgICAgICAgdGhpcy5tb3JlT3B0aW9ucy5lbWl0KCk7XG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyAmJiB0aGlzLnBhcmFtZXRlcnM/Lmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IGZpcnN0ID0gdGhpcy5wYXJhbWV0ZXJzWzBdO1xuICAgICAgICAgIGlmIChmaXJzdCkge1xuICAgICAgICAgICAgZmlyc3QudmFsdWUgPSByZXN1bHQ7XG4gICAgICAgICAgICBmaXJzdC5kaXNwbGF5VmFsdWUgPSByZXN1bHQ7XG4gICAgICAgICAgICB0aGlzLnBhcmFtZXRlckNoYW5nZS5lbWl0KHsgcGFyYW1ldGVyOiBmaXJzdCwgdmFsdWU6IHJlc3VsdCB9KTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBvcGVuRWxlbWVudFBvcHVwKG9yaWdpbjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBIVE1MRWxlbWVudCB8IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0luc2lkZVN0ZXBHcm91cCkgcmV0dXJuO1xuICAgIGNvbnN0IGVsZW1lbnRQYXJhbSA9IHRoaXMucGFyYW1ldGVycy5maW5kKHAgPT4gcC5uYW1lID09PSAnZWxlbWVudCcpO1xuICAgIGNvbnN0IGVsZW1lbnREYXRhID0gdGhpcy5jb25maWcuZWxlbWVudERhdGE7XG5cbiAgICBsZXQgZWw6IEhUTUxFbGVtZW50O1xuICAgIGlmICh0aGlzLmVsZW1lbnRUcmlnZ2VyPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBlbCA9IHRoaXMuZWxlbWVudFRyaWdnZXIubmF0aXZlRWxlbWVudDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2xpY2tFbGVtZW50VHJpZ2dlcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgZWwgPSB0aGlzLmNsaWNrRWxlbWVudFRyaWdnZXIubmF0aXZlRWxlbWVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwgPVxuICAgICAgICBvcmlnaW4gaW5zdGFuY2VvZiBNb3VzZUV2ZW50XG4gICAgICAgICAgPyAob3JpZ2luLmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpXG4gICAgICAgICAgOiBvcmlnaW4gaW5zdGFuY2VvZiBFbGVtZW50UmVmXG4gICAgICAgICAgICA/IG9yaWdpbi5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICA6IChvcmlnaW4gYXMgSFRNTEVsZW1lbnQpO1xuICAgIH1cbiAgICBjb25zdCBvcmlnaW5SZWYgPSBuZXcgRWxlbWVudFJlZihlbCk7XG4gICAgY29uc3QgZWxlbWVudFRpdGxlID0gZWxlbWVudERhdGE/LmxhYmVsIHx8IGVsZW1lbnRQYXJhbT8udmFsdWUgfHwgJ0VsZW1lbnQnO1xuICAgIGNvbnN0IGVsZW1lbnRTZWxlY3RvciA9IGVsZW1lbnREYXRhPy5zZWxlY3RvciB8fCBlbGVtZW50UGFyYW0/LnZhbHVlIHx8ICcnO1xuICAgIGNvbnN0IGVsZW1lbnRMYWJlbHMgPSBlbGVtZW50RGF0YT8ubGFiZWxzIHx8IChlbGVtZW50RGF0YT8ubGFiZWwgPyBbZWxlbWVudERhdGEubGFiZWxdIDogW10pO1xuICAgIGNvbnN0IGFsbExhYmVscyA9IGVsZW1lbnRMYWJlbHMubGVuZ3RoID4gMCA/IGVsZW1lbnRMYWJlbHMgOiBbJ2NzcycsICd4cGF0aCcsICdpZCddO1xuICAgIFxuICAgIGNvbnN0IGVsZW1lbnRQb3B1cFJlZiA9IHRoaXMuZWxlbWVudFBvcHVwLm9wZW4ob3JpZ2luUmVmLCB7XG4gICAgICBlbGVtZW50OiB7XG4gICAgICAgIHRpdGxlOiBlbGVtZW50VGl0bGUsXG4gICAgICAgIHNlbGVjdG9yOiBlbGVtZW50U2VsZWN0b3IsXG4gICAgICAgIGxhYmVsczogZWxlbWVudExhYmVsc1xuICAgICAgfSxcbiAgICAgIGxhYmVsczogYWxsTGFiZWxzLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuY29uZmlnLmRlc2NyaXB0aW9uIHx8ICdFbGVtZW50IGRldGFpbHMnLFxuICAgICAgaGVscFVybDogJycsXG4gICAgICBlbGVtZW50czogZWxlbWVudERhdGEgPyBbXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogZWxlbWVudFRpdGxlLFxuICAgICAgICAgIHNlbGVjdG9yOiBlbGVtZW50U2VsZWN0b3IsXG4gICAgICAgICAgbGFiZWxzOiBlbGVtZW50TGFiZWxzXG4gICAgICAgIH1cbiAgICAgIF0gOiBbXVxuICAgIH0pO1xuICAgIGVsZW1lbnRQb3B1cFJlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0OiBFbGVtZW50UG9wdXBSZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnBhcmFtZXRlckNoYW5nZS5lbWl0KHsgcGFyYW1ldGVyOiB7IG5hbWU6ICdlbGVtZW50JywgdmFsdWU6IHJlc3VsdCwgZGlzcGxheVZhbHVlOiByZXN1bHQgfSwgdmFsdWU6IHJlc3VsdCB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uRXZlbnRUeXBlU2VsZWN0KGV2ZW50VHlwZTogVGVzdENhc2VFdmVudFR5cGUpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50VHlwZSA9IGV2ZW50VHlwZTtcbiAgICB0aGlzLmV2ZW50VHlwZURyb3Bkb3duT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuZXZlbnRUeXBlQ2hhbmdlLmVtaXQoZXZlbnRUeXBlKTtcbiAgfVxuXG4gIG9uUGFyYW1ldGVyQ2hhbmdlKHBhcmFtZXRlcjogU3RlcFBhcmFtZXRlciwgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHBhcmFtZXRlci52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMucGFyYW1ldGVyQ2hhbmdlLmVtaXQoeyBwYXJhbWV0ZXIsIHZhbHVlIH0pO1xuICB9XG5cbiAgb25FZGl0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmV2ZW50VHlwZSA9PT0gJ2N1c3RvbScgJiYgdGhpcy5kZXNjcmlwdGlvblRyaWdnZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMub3BlblN0ZXBEZXNjcmlwdGlvbk1vZGFsKG5ldyBFbGVtZW50UmVmKHRoaXMuZGVzY3JpcHRpb25UcmlnZ2VyLm5hdGl2ZUVsZW1lbnQpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZXZlbnRUeXBlID09PSAnbmF2aWdhdGUnICYmIHRoaXMudGVzdERhdGFUcmlnZ2VyPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLm9wZW5UZXN0RGF0YU1vZGFsKG5ldyBFbGVtZW50UmVmKHRoaXMudGVzdERhdGFUcmlnZ2VyLm5hdGl2ZUVsZW1lbnQpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gRW1pdCBlZGl0SW5EZXB0aCAtIHByZWZlciByZW5kZXJlciBpbmRleCAoY29ycmVjdCk7IHN0ZXBOdW1iZXIgXCIxMC4zXCIgcGFyc2VzIHRvIDEwIC0gd3JvbmdcbiAgICBjb25zdCBpZHggPSB0eXBlb2YgdGhpcy5pbmRleCA9PT0gJ251bWJlcicgPyB0aGlzLmluZGV4IDogKHR5cGVvZiB0aGlzLnN0ZXBOdW1iZXIgPT09ICdudW1iZXInID8gdGhpcy5zdGVwTnVtYmVyIC0gMSA6ICh0eXBlb2YgdGhpcy5zdGVwTnVtYmVyID09PSAnc3RyaW5nJyA/IHBhcnNlSW50KHRoaXMuc3RlcE51bWJlciwgMTApIC0gMSA6ICh0aGlzLnN0ZXBJbmRleCA/PyAwKSkpO1xuICAgIHRoaXMuZWRpdEluRGVwdGguZW1pdCh7IHN0ZXA6IHRoaXMuY29uZmlnIGFzIFRlc3RDYXNlU3RlcENvbmZpZywgaW5kZXg6IGlzTmFOKGlkeCBhcyBudW1iZXIpID8gMCA6IChpZHggYXMgbnVtYmVyKSB9KTtcbiAgICB0aGlzLmVkaXQuZW1pdCgpO1xuICB9XG5cbiAgb25MaW5rKCk6IHZvaWQge1xuICAgIHRoaXMubGluay5lbWl0KCk7XG4gIH1cblxuICBvbkR1cGxpY2F0ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0R1cGxpY2F0aW5nKSByZXR1cm47XG4gICAgdGhpcy5kdXBsaWNhdGUuZW1pdCgpO1xuICB9XG5cbiAgb25EZWxldGUoKTogdm9pZCB7XG4gICAgdGhpcy5kZWxldGUuZW1pdCgpO1xuICB9XG5cbiAgb25Nb3JlT3B0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLm1vcmVPcHRpb25zLmVtaXQoKTtcbiAgfVxuXG4gIG9uVmlld0RldGFpbHMoZXZlbnQ/OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIFxuICAgIGlmICghdGhpcy5jb25maWcuZGVzY3JpcHRpb24gfHwgdGhpcy5jb25maWcuZGVzY3JpcHRpb24udHJpbSgpID09PSAnJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudCkge1xuICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLmdldFN0ZXBUaXRsZSgpO1xuICAgICAgdGhpcy52aWV3RGV0YWlscy5lbWl0KHtcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5jb25maWcuZGVzY3JpcHRpb24sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFN0ZXBUaXRsZSgpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodGhpcy5ldmVudFR5cGUpIHtcbiAgICAgIGNhc2UgJ2FpLWFnZW50JzpcbiAgICAgICAgcmV0dXJuICdBZ2VudCBJbnN0cnVjdGlvbnMnO1xuICAgICAgY2FzZSAnY3VzdG9tJzpcbiAgICAgICAgcmV0dXJuICdTdGVwIERlc2NyaXB0aW9uJztcbiAgICAgIGNhc2UgJ25hdmlnYXRlJzpcbiAgICAgICAgcmV0dXJuICdOYXZpZ2F0ZSBTdGVwJztcbiAgICAgIGNhc2UgJ3R5cGUnOlxuICAgICAgICByZXR1cm4gJ1R5cGUgU3RlcCc7XG4gICAgICBjYXNlICdjbGljayc6XG4gICAgICAgIHJldHVybiAnQ2xpY2sgU3RlcCc7XG4gICAgICBjYXNlICdkb3VibGVDbGljayc6XG4gICAgICAgIHJldHVybiAnRG91YmxlIENsaWNrIFN0ZXAnO1xuICAgICAgY2FzZSAncHJlc3NFbnRlcic6XG4gICAgICAgIHJldHVybiAnUHJlc3MgRW50ZXIgU3RlcCc7XG4gICAgICBjYXNlICdlbnRlcic6XG4gICAgICAgIHJldHVybiAnRW50ZXIgU3RlcCc7XG4gICAgICBjYXNlICd2ZXJpZnknOlxuICAgICAgICByZXR1cm4gJ1ZlcmlmeSBTdGVwJztcbiAgICAgIGNhc2UgJ3dhaXQnOlxuICAgICAgICByZXR1cm4gJ1dhaXQgU3RlcCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ1N0ZXAgRGV0YWlscyc7XG4gICAgfVxuICB9XG5cbiAgb25TZWxlY3Rpb25DaGFuZ2UoY2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWQgPSBjaGVja2VkO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoY2hlY2tlZCk7XG4gIH1cblxuICB0b2dnbGVFdmVudFR5cGVEcm9wZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50VHlwZURyb3Bkb3duT3BlbiA9ICF0aGlzLmV2ZW50VHlwZURyb3Bkb3duT3BlbjtcbiAgfVxuXG4gIGNsb3NlRXZlbnRUeXBlRHJvcGRvd24oKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudFR5cGVEcm9wZG93bk9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZHJvcGRvd25Db250YWluZXIgJiYgIXRoaXMuZHJvcGRvd25Db250YWluZXIubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICB0aGlzLmNsb3NlRXZlbnRUeXBlRHJvcGRvd24oKTtcbiAgICB9XG4gIH1cblxuICBjbGlja09uQWN0aW9uKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5pc0luc2lkZVN0ZXBHcm91cCkgcmV0dXJuO1xuICAgIHRoaXMuY2xpY2tBY3Rpb24uZW1pdChldmVudCk7XG4gIH1cbn1cbiIsIjxkaXYgW2NsYXNzXT1cIidzdGVwLXJvdyBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtcHktMiBjcWEtcHgtNCAnICsgKGlzSW5zaWRlTG9vcCAmJiBpc0luc2lkZVN0ZXBHcm91cCA/ICdjcWEtcGwtMjAgY3FhLXByLTQnIDogKGlzSW5zaWRlTG9vcCB8fCBpc0luc2lkZVN0ZXBHcm91cCkgPyAnY3FhLXBsLTEwIGNxYS1wci00JyA6ICcnKVwiIHN0eWxlPVwiYm9yZGVyLXRvcDogMXB4IHNvbGlkICNFNUU3RUI7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRTVFN0VCO1wiPlxuXG4gIDxkaXYgY2xhc3M9XCJjcWEtaW5saW5lLWZsZXggY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgIDwhLS0gRHJhZyBIYW5kbGUgSWNvbiAod2hlbiBpc1Jlb3JkZXIgaXMgdHJ1ZSBhbmQgbm90IGluc2lkZSBzdGVwIGdyb3VwIC0gc3RlcHMgaW5zaWRlIHN0ZXAgZ3JvdXBzIGNhbm5vdCBiZSByZW9yZGVyZWQpIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJpc1Jlb3JkZXIgJiYgIWlzSW5zaWRlU3RlcEdyb3VwXCIgY2xhc3M9XCJjcWEtbXItMiBjcWEtY3Vyc29yLW1vdmUgY3FhLXRleHQtWyM2QjcyODBdIGhvdmVyOmNxYS10ZXh0LVsjMTExODI3XVwiPlxuICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgIDxjaXJjbGUgY3g9XCIzXCIgY3k9XCIzXCIgcj1cIjEuNVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIi8+XG4gICAgICAgIDxjaXJjbGUgY3g9XCI4XCIgY3k9XCIzXCIgcj1cIjEuNVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIi8+XG4gICAgICAgIDxjaXJjbGUgY3g9XCIxM1wiIGN5PVwiM1wiIHI9XCIxLjVcIiBmaWxsPVwiY3VycmVudENvbG9yXCIvPlxuICAgICAgICA8Y2lyY2xlIGN4PVwiM1wiIGN5PVwiOFwiIHI9XCIxLjVcIiBmaWxsPVwiY3VycmVudENvbG9yXCIvPlxuICAgICAgICA8Y2lyY2xlIGN4PVwiOFwiIGN5PVwiOFwiIHI9XCIxLjVcIiBmaWxsPVwiY3VycmVudENvbG9yXCIvPlxuICAgICAgICA8Y2lyY2xlIGN4PVwiMTNcIiBjeT1cIjhcIiByPVwiMS41XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiLz5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjNcIiBjeT1cIjEzXCIgcj1cIjEuNVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIi8+XG4gICAgICAgIDxjaXJjbGUgY3g9XCI4XCIgY3k9XCIxM1wiIHI9XCIxLjVcIiBmaWxsPVwiY3VycmVudENvbG9yXCIvPlxuICAgICAgICA8Y2lyY2xlIGN4PVwiMTNcIiBjeT1cIjEzXCIgcj1cIjEuNVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIi8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIENoZWNrYm94ICh3aGVuIGlzUmVvcmRlciBpcyBmYWxzZSwgZWRpdGFibGUsIGFuZCBub3QgaW5zaWRlIHN0ZXAgZ3JvdXAgLSBoaWRlIGZvciBzdGVwcyBpbnNpZGUgc3RlcCBncm91cHMpIC0tPlxuICAgIDxsYWJlbCAqbmdJZj1cImVkaXRhYmxlICYmICFpc1Jlb3JkZXIgJiYgIWlzSW5zaWRlU3RlcEdyb3VwXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1jdXJzb3ItcG9pbnRlciBjcWEtcmVsYXRpdmUgY3FhLW1yLTJcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICBjbGFzcz1cImNxYS1oLTQgY3FhLXctNCBjcWEtY3Vyc29yLXBvaW50ZXIgY3FhLXRyYW5zaXRpb24tYWxsIGNxYS1hcHBlYXJhbmNlLW5vbmUgY3FhLXJvdW5kZWQgc2hhZG93IGhvdmVyOmNxYS1zaGFkb3ctbWQgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItc2xhdGUtMzAwIGNxYS1mbGV4LXNocmluay0wXCJcbiAgICAgICAgW2NsYXNzLmNxYS1iZy1bIzNGNDNFRV1dPVwic2VsZWN0ZWRcIlxuICAgICAgICBbY2xhc3MuY3FhLWJvcmRlci1bIzNGNDNFRV1dPVwic2VsZWN0ZWRcIlxuICAgICAgICBpZD1cImNoZWNrXCIgLz5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLWFic29sdXRlIGNxYS10ZXh0LXdoaXRlIGNxYS10b3AtMS8yIGNxYS1sZWZ0LTEvMiBjcWEtLXRyYW5zbGF0ZS14LTEvMiBjcWEtLXRyYW5zbGF0ZS15LTEvMiBjcWEtcG9pbnRlci1ldmVudHMtbm9uZSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlclwiXG4gICAgICAgIFtjbGFzcy5jcWEtb3BhY2l0eS0wXT1cIiFzZWxlY3RlZFwiXG4gICAgICAgIFtjbGFzcy5jcWEtb3BhY2l0eS0xMDBdPVwic2VsZWN0ZWRcIj5cbiAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTNcIiB2aWV3Qm94PVwiMCAwIDEyIDEzXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0xMCAzLjEyNUw0LjUgOC42MjVMMiA2LjEyNVwiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgICAgPC9zcGFuPlxuICAgIDwvbGFiZWw+XG4gIDwvZGl2PlxuXG4gIDwhLS0gU3RlcCBOdW1iZXIgLS0+XG4gIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyM2QjcyODBdIGNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMThweF0gY3FhLW1pbi13LVszMnB4XVwiPlxuICAgIHt7IHN0ZXBOdW1iZXIgfX1cbiAgPC9zcGFuPlxuXG4gIDwhLS0gRXZlbnQgVHlwZSBTZWxlY3RvciAoUGlsbCBCdXR0b24pICMjIyMgKGNsaWNrKT1cInRvZ2dsZUV2ZW50VHlwZURyb3Bkb3duKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLXJlbGF0aXZlXCIgI2Ryb3Bkb3duQ29udGFpbmVyPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFxuICAgICAgW2F0dHIudGl0bGVdPVwiZ2V0Q3VycmVudEV2ZW50VHlwZUNvbmZpZygpLmxhYmVsXCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImdldEN1cnJlbnRFdmVudFR5cGVDb25maWcoKS5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgW3N0eWxlLmNvbG9yXT1cImdldEN1cnJlbnRFdmVudFR5cGVDb25maWcoKS5jb2xvclwiXG4gICAgICBjbGFzcz1cImNxYS13LTggY3FhLWgtOCBjcWEtcm91bmRlZC1sZyBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtZmxleC1zaHJpbmstMCBjcWEtY3Vyc29yLXBvaW50ZXJcIj5cbiAgICAgIDwhLS0gSWNvbiAtLT5cbiAgICAgIDxzcGFuICpuZ0lmPVwiZ2V0Q3VycmVudEV2ZW50VHlwZUNvbmZpZygpLmljb24gPT09ICdwYXBlcl9wbGFuZSdcIj5cbiAgICAgICAgPHN2ZyB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgPHBhdGggZD1cIk0xLjc1IDYuNDE2NjNMMTIuODMzMyAxLjE2NjYzTDcuNTgzMzMgMTIuMjVMNi40MTY2NyA3LjU4MzI5TDEuNzUgNi40MTY2M1pcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCJnZXRDdXJyZW50RXZlbnRUeXBlQ29uZmlnKCkuaWNvbiA9PT0gJ3N0YXInXCI+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBkPVwiTTUuNzk3IDkuMDQxNjVDNS43NDQ5MiA4LjgzOTc3IDUuNjM5NjkgOC42NTU1NCA1LjQ5MjI3IDguNTA4MTJDNS4zNDQ4NSA4LjM2MDcgNS4xNjA2MiA4LjI1NTQ4IDQuOTU4NzUgOC4yMDM0TDEuMzggNy4yODA1N0MxLjMxODk0IDcuMjYzMjQgMS4yNjUyIDcuMjI2NDYgMS4yMjY5NCA3LjE3NTgzQzEuMTg4NjcgNy4xMjUxOSAxLjE2Nzk3IDcuMDYzNDUgMS4xNjc5NyA2Ljk5OTk4QzEuMTY3OTcgNi45MzY1MSAxLjE4ODY3IDYuODc0NzggMS4yMjY5NCA2LjgyNDE0QzEuMjY1MiA2Ljc3MzUgMS4zMTg5NCA2LjczNjczIDEuMzggNi43MTk0TDQuOTU4NzUgNS43OTU5OEM1LjE2MDU1IDUuNzQzOTUgNS4zNDQ3MyA1LjYzODgyIDUuNDkyMTUgNS40OTE1MUM1LjYzOTU2IDUuMzQ0MTkgNS43NDQ4MyA1LjE2MDA4IDUuNzk3IDQuOTU4MzJMNi43MTk4MyAxLjM3OTU3QzYuNzM2OTggMS4zMTgyNyA2Ljc3MzcyIDEuMjY0MjcgNi44MjQ0MyAxLjIyNThDNi44NzUxNSAxLjE4NzMzIDYuOTM3MDUgMS4xNjY1IDcuMDAwNyAxLjE2NjVDNy4wNjQzNiAxLjE2NjUgNy4xMjYyNiAxLjE4NzMzIDcuMTc2OTggMS4yMjU4QzcuMjI3NjkgMS4yNjQyNyA3LjI2NDQyIDEuMzE4MjcgNy4yODE1OCAxLjM3OTU3TDguMjAzODMgNC45NTgzMkM4LjI1NTkxIDUuMTYwMTkgOC4zNjExMyA1LjM0NDQyIDguNTA4NTUgNS40OTE4NEM4LjY1NTk3IDUuNjM5MjYgOC44NDAyIDUuNzQ0NDkgOS4wNDIwOCA1Ljc5NjU3TDEyLjYyMDggNi43MTg4MkMxMi42ODI0IDYuNzM1NzkgMTIuNzM2NiA2Ljc3MjQ5IDEyLjc3NTMgNi44MjMyOEMxMi44MTQgNi44NzQwNyAxMi44MzQ5IDYuOTM2MTQgMTIuODM0OSA2Ljk5OTk4QzEyLjgzNDkgNy4wNjM4MiAxMi44MTQgNy4xMjU5IDEyLjc3NTMgNy4xNzY2OUMxMi43MzY2IDcuMjI3NDggMTIuNjgyNCA3LjI2NDE3IDEyLjYyMDggNy4yODExNUw5LjA0MjA4IDguMjAzNEM4Ljg0MDIgOC4yNTU0OCA4LjY1NTk3IDguMzYwNyA4LjUwODU1IDguNTA4MTJDOC4zNjExMyA4LjY1NTU0IDguMjU1OTEgOC44Mzk3NyA4LjIwMzgzIDkuMDQxNjVMNy4yODEgMTIuNjIwNEM3LjI2Mzg0IDEyLjY4MTcgNy4yMjcxMSAxMi43MzU3IDcuMTc2MzkgMTIuNzc0MkM3LjEyNTY4IDEyLjgxMjYgNy4wNjM3NyAxMi44MzM1IDcuMDAwMTIgMTIuODMzNUM2LjkzNjQ3IDEyLjgzMzUgNi44NzQ1NiAxMi44MTI2IDYuODIzODUgMTIuNzc0MkM2Ljc3MzE0IDEyLjczNTcgNi43MzY0IDEyLjY4MTcgNi43MTkyNSAxMi42MjA0TDUuNzk3IDkuMDQxNjVaXCJcbiAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNMTEuNjY2IDEuNzVWNC4wODMzM1wiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICA8cGF0aCBkPVwiTTEyLjgzMzMgMi45MTY2M0gxMC41XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNMi4zMzM5OCA5LjkxNjYzVjExLjA4MzNcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgPHBhdGggZD1cIk0yLjkxNjY3IDEwLjVIMS43NVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiAqbmdJZj1cImdldEN1cnJlbnRFdmVudFR5cGVDb25maWcoKS5pY29uID09PSAnVCdcIj5cbiAgICAgICAgPHN2ZyB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgPHBhdGggZD1cIk0yLjMzMzk4IDQuMDgzMjVWMi4zMzMyNUgxMS42NjczVjQuMDgzMjVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgPHBhdGggZD1cIk01LjI1IDExLjY2NjdIOC43NVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICA8cGF0aCBkPVwiTTcgMi4zMzMyNVYxMS42NjY2XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiZ2V0Q3VycmVudEV2ZW50VHlwZUNvbmZpZygpLmljb24gPT09ICdjdXJzb3InXCI+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNMS43NSAxLjc1TDUuODc0MTcgMTEuNjQ5Mkw3LjMzODMzIDcuMzM4MzNMMTEuNjQ5MiA1Ljg3NDE3TDEuNzUgMS43NVpcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgPHBhdGggZD1cIk03LjU4Mzk4IDcuNTgzMjVMMTEuMDg0IDExLjA4MzNcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCJnZXRDdXJyZW50RXZlbnRUeXBlQ29uZmlnKCkuaWNvbiA9PT0gJ2N1cnNvci1kb3VibGUnXCI+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNOC4xNjY2NyAyLjM5MTZMNyAzLjQ5OTkzXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4yNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTIuOTc0ODcgNC42NjY2MkwxLjI4MzIgNC4xOTk5NVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk0zLjUwMDkxIDdMMi4zOTI1OCA4LjE2NjY3XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4yNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTQuMTk5MjIgMS4yODM0NUw0LjY2NTg5IDIuOTc1MTFcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjI1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNS4yNzExNCA1LjY1MjU1QzUuMjQ4NTIgNS41OTkyNiA1LjI0MjM0IDUuNTQwNDMgNS4yNTMzOCA1LjQ4MzYxQzUuMjY0NDMgNS40MjY3OCA1LjI5MjIgNS4zNzQ1NSA1LjMzMzEzIDUuMzMzNjJDNS4zNzQwNyA1LjI5MjY5IDUuNDI2MyA1LjI2NDkyIDUuNDgzMTIgNS4yNTM4N0M1LjUzOTk0IDUuMjQyODMgNS41OTg3NyA1LjI0OTAxIDUuNjUyMDYgNS4yNzE2M0wxMi4wNjg3IDcuODk2NjNDMTIuMTI1OCA3LjkyMDA2IDEyLjE3NCA3Ljk2MSAxMi4yMDY0IDguMDEzNTdDMTIuMjM4OCA4LjA2NjEzIDEyLjI1MzYgOC4xMjc2MSAxMi4yNDg4IDguMTg5MTVDMTIuMjQ0IDguMjUwNjkgMTIuMjE5OCA4LjMwOTEyIDEyLjE3OTcgOC4zNTYwM0MxMi4xMzk2IDguNDAyOTUgMTIuMDg1NiA4LjQzNTkyIDEyLjAyNTYgOC40NTAyMUw5LjQ4ODY0IDkuMDU3NDZDOS4zODM5MSA5LjA4MjQ4IDkuMjg4MTUgOS4xMzU5OSA5LjIxMTk2IDkuMjEyMDhDOS4xMzU3OCA5LjI4ODE2IDkuMDgyMTMgOS4zODM4NSA5LjA1Njk4IDkuNDg4NTVMOC40NTAzMSAxMi4wMjZDOC40MzYxNyAxMi4wODYzIDguNDAzMjMgMTIuMTQwNSA4LjM1NjI2IDEyLjE4MDhDOC4zMDkyOCAxMi4yMjExIDguMjUwNzEgMTIuMjQ1NCA4LjE4OSAxMi4yNTAyQzguMTI3MyAxMi4yNTUgOC4wNjU2NyAxMi4yNDAxIDguMDEzMDIgMTIuMjA3NUM3Ljk2MDM3IDEyLjE3NSA3LjkxOTQ0IDEyLjEyNjYgNy44OTYxNCAxMi4wNjkyTDUuMjcxMTQgNS42NTI1NVpcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjI1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiZ2V0Q3VycmVudEV2ZW50VHlwZUNvbmZpZygpLmljb24gPT09ICdlbnRlcidcIiBjbGFzcz1cImNxYS1lbnRlci1rZXktaWNvbiBjcWEtaW5saW5lLWZsZXggY3FhLWZsZXgtc2hyaW5rLTBcIiBzdHlsZT1cIndpZHRoOiAyMHB4OyBoZWlnaHQ6IDIwcHg7XCI+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAzMiAzMlwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzcz1cImNxYS13LWZ1bGwgY3FhLWgtZnVsbFwiPlxuICAgICAgICAgIDxwYXRoIGZpbGw9XCIjNkI3MjgwXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDE0LDUpXCIgZD1cIk0wIDAgQzQuMjkgMCA4LjU4IDAgMTMgMCBDMTMgNy4yNiAxMyAxNC41MiAxMyAyMiBDNS43NCAyMiAtMS41MiAyMiAtOSAyMiBDLTkgMTYuNzIgLTkgMTEuNDQgLTkgNiBDLTYuMDMgNiAtMy4wNiA2IDAgNiBDMCA0LjAyIDAgMi4wNCAwIDAgWiBNMiAyIEMyIDMuOTggMiA1Ljk2IDIgOCBDLTAuOTcgOCAtMy45NCA4IC03IDggQy03IDExLjk2IC03IDE1LjkyIC03IDIwIEMtMS4wNiAyMCA0Ljg4IDIwIDExIDIwIEMxMSAxNC4wNiAxMSA4LjEyIDExIDIgQzguMDMgMiA1LjA2IDIgMiAyIFpcIi8+XG4gICAgICAgICAgPHBhdGggZmlsbD1cIiM2QjcyODBcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMTksMTMpXCIgZD1cIk0wIDAgQzAuNjYgMCAxLjMyIDAgMiAwIEMyIDIuMzEgMiA0LjYyIDIgNyBDMC4wMiA3IC0xLjk2IDcgLTQgNyBDLTQuMzMgOC4zMiAtNC42NiA5LjY0IC01IDExIEMtNi42NSA5LjY4IC04LjMgOC4zNiAtMTAgNyBDLTguNjMwMTY0OTcgMy44Mzg4NDIyNCAtOC4wMTA5MzYyIDMuMDA3MjkwOCAtNSAxIEMtNC42NyAyLjMyIC00LjM0IDMuNjQgLTQgNSBDLTIuNjggNSAtMS4zNiA1IDAgNSBDMCAzLjM1IDAgMS43IDAgMCBaXCIvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiZ2V0Q3VycmVudEV2ZW50VHlwZUNvbmZpZygpLmljb24gPT09ICdjbG9jaydcIj5cbiAgICAgICAgPHN2ZyB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGQ9XCJNNi45OTkzNSAxMi44MzM0QzEwLjIyMSAxMi44MzM0IDEyLjgzMjcgMTAuMjIxNyAxMi44MzI3IDcuMDAwMDhDMTIuODMyNyAzLjc3ODQyIDEwLjIyMSAxLjE2Njc1IDYuOTk5MzUgMS4xNjY3NUMzLjc3NzY5IDEuMTY2NzUgMS4xNjYwMiAzLjc3ODQyIDEuMTY2MDIgNy4wMDAwOEMxLjE2NjAyIDEwLjIyMTcgMy43Nzc2OSAxMi44MzM0IDYuOTk5MzUgMTIuODMzNFpcIlxuICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgPHBhdGggZD1cIk03IDMuNVY3TDkuMzMzMzMgOC4xNjY2N1wiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiAqbmdJZj1cImdldEN1cnJlbnRFdmVudFR5cGVDb25maWcoKS5pY29uID09PSAnc2V0dGluZ3MnXCI+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNNyA0LjY2NjY3QzUuNzExMzMgNC42NjY2NyA0LjY2NjY3IDUuNzExMzMgNC42NjY2NyA3QzQuNjY2NjcgOC4yODg2NyA1LjcxMTMzIDkuMzMzMzMgNyA5LjMzMzMzQzguMjg4NjcgOS4zMzMzMyA5LjMzMzMzIDguMjg4NjcgOS4zMzMzMyA3QzkuMzMzMzMgNS43MTEzMyA4LjI4ODY3IDQuNjY2NjcgNyA0LjY2NjY3WlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgPHBhdGggZD1cIk0xMS4wODMzIDcuNTgzMzNDMTEuMTQxNyA3LjI5MTY3IDExLjE0MTcgNi43MDgzMyAxMS4wODMzIDYuNDE2NjdMMTIuMjUgNS44MzMzM0MxMi40MTY3IDUuNzA4MzMgMTIuNDgzMyA1LjQ4MzMzIDEyLjQxNjcgNS4yNUwxMS42NjY3IDMuNDE2NjdDMTEuNiAzLjE4MzMzIDExLjM5MTcgMy4wNDE2NyAxMS4xNDE3IDMuMDQxNjdMOS45MTY2NyAzLjVDOS41NjY2NyAzLjIwODMzIDkuMTkxNjcgMi45NTgzMyA4Ljc1IDIuNzkxNjdMOC40IDEuNDU4MzNDOC4zNDE2NyAxLjIyNSA4LjE0MTY3IDEuMTY2NjcgNy45MzMzMyAxLjE2NjY3SDYuMDY2NjdDNS44NTgzMyAxLjE2NjY3IDUuNjU4MzMgMS4yMjUgNS42IDEuNDU4MzNMNS4yNSAyLjc5MTY3QzQuODA4MzMgMi45NTgzMyA0LjQzMzMzIDMuMjA4MzMgNC4wODMzMyAzLjVMMi44NTgzMyAzLjA0MTY3QzIuNjA4MzMgMy4wNDE2NyAyLjQgMy4xODMzMyAyLjMzMzMzIDMuNDE2NjdMMS41ODMzMyA1LjI1QzEuNTE2NjcgNS40ODMzMyAxLjU4MzMzIDUuNzA4MzMgMS43NSA1LjgzMzMzTDIuOTE2NjcgNi40MTY2N0MyLjg1ODMzIDYuNzA4MzMgMi44NTgzMyA3LjI5MTY3IDIuOTE2NjcgNy41ODMzM0wxLjc1IDguMTY2NjdDMS41ODMzMyA4LjI5MTY3IDEuNTE2NjcgOC41MTY2NyAxLjU4MzMzIDguNzVMMi4zMzMzMyAxMC41ODMzQzIuNCAxMC44MTY3IDIuNjA4MzMgMTAuOTU4MyAyLjg1ODMzIDEwLjk1ODNMNC4wODMzMyAxMC41QzQuNDMzMzMgMTAuNzkxNyA0LjgwODMzIDExLjA0MTcgNS4yNSAxMS4yMDgzTDUuNiAxMi41NDE3QzUuNjU4MzMgMTIuNzc1IDUuODU4MzMgMTIuODMzMyA2LjA2NjY3IDEyLjgzMzNINy45MzMzM0M4LjE0MTY3IDEyLjgzMzMgOC4zNDE2NyAxMi43NzUgOC40IDEyLjU0MTdMOC43NSAxMS4yMDgzQzkuMTkxNjcgMTEuMDQxNyA5LjU2NjY3IDEwLjc5MTcgOS45MTY2NyAxMC41TDExLjE0MTcgMTAuOTU4M0MxMS4zOTE3IDEwLjk1ODMgMTEuNiAxMC44MTY3IDExLjY2NjcgMTAuNTgzM0wxMi40MTY3IDguNzVDMTIuNDgzMyA4LjUxNjY3IDEyLjQxNjcgOC4yOTE2NyAxMi4yNSA4LjE2NjY3TDExLjA4MzMgNy41ODMzM1pcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiZ2V0Q3VycmVudEV2ZW50VHlwZUNvbmZpZygpLmljb24gPT09ICdjaGVjaydcIj5cbiAgICAgICAgPHN2ZyB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgPHBhdGggZD1cIk0xMS42NjY3IDMuNUw1LjI1IDEwLjVMMi4zMzMzMyA3LjU4MzMzXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDwhLS0gTGFiZWwgKHNob3cgb25seSB3aGVuIG5vIGljb247IGFsbCB0eXBlcyBoYXZlIGljb24gbm93IOKAkyB0b29sdGlwIG9uIGJ1dHRvbikgLS0+XG4gICAgICA8c3BhbiAqbmdJZj1cIiFnZXRDdXJyZW50RXZlbnRUeXBlQ29uZmlnKCkuaWNvblwiIGNsYXNzPVwiY3FhLXRleHQtWyM0MzJERDddIGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtXCI+e3tcbiAgICAgICAgZ2V0Q3VycmVudEV2ZW50VHlwZUNvbmZpZygpLmxhYmVsIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPCEtLSBEcm9wZG93biBNZW51IC0tPlxuICAgIDxkaXYgKm5nSWY9XCJldmVudFR5cGVEcm9wZG93bk9wZW5cIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgIGNsYXNzPVwiY3FhLWFic29sdXRlIGNxYS10b3AtZnVsbCBjcWEtbGVmdC0wIGNxYS1tdC0xIGNxYS1iZy13aGl0ZSBjcWEtcm91bmRlZC1sZyBjcWEtc2hhZG93LWxnIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1ncmF5LTIwMCBjcWEtei01MCBjcWEtbWluLXctWzE1MHB4XSBjcWEtcHktMVwiPlxuICAgICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgZXRjIG9mIGV2ZW50VHlwZUNvbmZpZ3NcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uRXZlbnRUeXBlU2VsZWN0KGV0Yy50eXBlKVwiXG4gICAgICAgIFtjbGFzcy5jcWEtYmctcHJpbWFyeS01MF09XCJldmVudFR5cGUgPT09IGV0Yy50eXBlXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsIGNxYS1weC0zIGNxYS1weS0yIGNxYS10ZXh0LWxlZnQgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgaG92ZXI6Y3FhLWJnLWdyYXktNTAgY3FhLXRyYW5zaXRpb24tY29sb3JzXCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiZXRjLmljb24gPT09ICdwYXBlcl9wbGFuZSdcIj5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMSA1LjVMMTEgMU0xMSAxTDcuNSAxMUw2IDYuNUwxIDUuNU0xMSAxTDEgNS41XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImV0Yy5pY29uID09PSAnc3RhcidcIj5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNNiAxTDcuNSA0LjVMMTEgNUw3LjUgNS41TDYgOUw0LjUgNS41TDEgNUw0LjUgNC41TDYgMVpcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImV0Yy5pY29uID09PSAnVCdcIj5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMi4zMzM5OCA0LjA4MzI1VjIuMzMzMjVIMTEuNjY3M1Y0LjA4MzI1XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNNS4yNSAxMS42NjY3SDguNzVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgPHBhdGggZD1cIk03IDIuMzMzMjVWMTEuNjY2NlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJldGMuaWNvbiA9PT0gJ2N1cnNvcidcIj5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMiAyTDkgMUwxMCA4TDcgN0w1IDlMNCA3TDIgMlpcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiZXRjLmljb24gPT09ICdjdXJzb3ItZG91YmxlJ1wiPlxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNOC4xNjY2NyAyLjM5MTZMNyAzLjQ5OTkzXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4yNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTIuOTc0ODcgNC42NjY2MkwxLjI4MzIgNC4xOTk5NVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk0zLjUwMDkxIDdMMi4zOTI1OCA4LjE2NjY3XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4yNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTQuMTk5MjIgMS4yODM0NUw0LjY2NTg5IDIuOTc1MTFcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjI1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNNS4yNzExNCA1LjY1MjU1QzUuMjQ4NTIgNS41OTkyNiA1LjI0MjM0IDUuNTQwNDMgNS4yNTMzOCA1LjQ4MzYxQzUuMjY0NDMgNS40MjY3OCA1LjI5MjIgNS4zNzQ1NSA1LjMzMzEzIDUuMzMzNjJDNS4zNzQwNyA1LjI5MjY5IDUuNDI2MyA1LjI2NDkyIDUuNDgzMTIgNS4yNTM4N0M1LjUzOTk0IDUuMjQyODMgNS41OTg3NyA1LjI0OTAxIDUuNjUyMDYgNS4yNzE2M0wxMi4wNjg3IDcuODk2NjNDMTIuMTI1OCA3LjkyMDA2IDEyLjE3NCA3Ljk2MSAxMi4yMDY0IDguMDEzNTdDMTIuMjM4OCA4LjA2NjEzIDEyLjI1MzYgOC4xMjc2MSAxMi4yNDg4IDguMTg5MTVDMTIuMjQ0IDguMjUwNjkgMTIuMjE5OCA4LjMwOTEyIDEyLjE3OTcgOC4zNTYwM0MxMi4xMzk2IDguNDAyOTUgMTIuMDg1NiA4LjQzNTkyIDEyLjAyNTYgOC40NTAyMUw5LjQ4ODY0IDkuMDU3NDZDOS4zODM5MSA5LjA4MjQ4IDkuMjg4MTUgOS4xMzU5OSA5LjIxMTk2IDkuMjEyMDhDOS4xMzU3OCA5LjI4ODE2IDkuMDgyMTMgOS4zODM4NSA5LjA1Njk4IDkuNDg4NTVMOC40NTAzMSAxMi4wMjZDOC40MzYxNyAxMi4wODYzIDguNDAzMjMgMTIuMTQwNSA4LjM1NjI2IDEyLjE4MDhDOC4zMDkyOCAxMi4yMjExIDguMjUwNzEgMTIuMjQ1NCA4LjE4OSAxMi4yNTAyQzguMTI3MyAxMi4yNTUgOC4wNjU2NyAxMi4yNDAxIDguMDEzMDIgMTIuMjA3NUM3Ljk2MDM3IDEyLjE3NSA3LjkxOTQ0IDEyLjEyNjYgNy44OTYxNCAxMi4wNjkyTDUuMjcxMTQgNS42NTI1NVpcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjI1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDwvc3ZnPiAgXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJldGMuaWNvbiA9PT0gJ2VudGVyJ1wiIGNsYXNzPVwiY3FhLWVudGVyLWtleS1pY29uIGNxYS1pbmxpbmUtZmxleCBjcWEtZmxleC1zaHJpbmstMFwiIHN0eWxlPVwid2lkdGg6IDE2cHg7IGhlaWdodDogMTZweDtcIj5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMzIgMzJcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3M9XCJjcWEtdy1mdWxsIGNxYS1oLWZ1bGxcIj5cbiAgICAgICAgICAgIDxwYXRoIGZpbGw9XCIjNkI3MjgwXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDE0LDUpXCIgZD1cIk0wIDAgQzQuMjkgMCA4LjU4IDAgMTMgMCBDMTMgNy4yNiAxMyAxNC41MiAxMyAyMiBDNS43NCAyMiAtMS41MiAyMiAtOSAyMiBDLTkgMTYuNzIgLTkgMTEuNDQgLTkgNiBDLTYuMDMgNiAtMy4wNiA2IDAgNiBDMCA0LjAyIDAgMi4wNCAwIDAgWiBNMiAyIEMyIDMuOTggMiA1Ljk2IDIgOCBDLTAuOTcgOCAtMy45NCA4IC03IDggQy03IDExLjk2IC03IDE1LjkyIC03IDIwIEMtMS4wNiAyMCA0Ljg4IDIwIDExIDIwIEMxMSAxNC4wNiAxMSA4LjEyIDExIDIgQzguMDMgMiA1LjA2IDIgMiAyIFpcIi8+XG4gICAgICAgICAgICA8cGF0aCBmaWxsPVwiIzZCNzI4MFwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgxOSwxMylcIiBkPVwiTTAgMCBDMC42NiAwIDEuMzIgMCAyIDAgQzIgMi4zMSAyIDQuNjIgMiA3IEMwLjAyIDcgLTEuOTYgNyAtNCA3IEMtNC4zMyA4LjMyIC00LjY2IDkuNjQgLTUgMTEgQy02LjY1IDkuNjggLTguMyA4LjM2IC0xMCA3IEMtOC42MzAxNjQ5NyAzLjgzODg0MjI0IC04LjAxMDkzNjIgMy4wMDcyOTA4IC01IDEgQy00LjY3IDIuMzIgLTQuMzQgMy42NCAtNCA1IEMtMi42OCA1IC0xLjM2IDUgMCA1IEMwIDMuMzUgMCAxLjcgMCAwIFpcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJldGMuaWNvbiA9PT0gJ2Nsb2NrJ1wiPlxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjZcIiBjeT1cIjZcIiByPVwiNVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTYgM1Y2TDggN1wiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiAvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiZXRjLmljb24gPT09ICdzZXR0aW5ncydcIj5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNNyA0LjY2NjY3QzUuNzExMzMgNC42NjY2NyA0LjY2NjY3IDUuNzExMzMgNC42NjY2NyA3QzQuNjY2NjcgOC4yODg2NyA1LjcxMTMzIDkuMzMzMzMgNyA5LjMzMzMzQzguMjg4NjcgOS4zMzMzMyA5LjMzMzMzIDguMjg4NjcgOS4zMzMzMyA3QzkuMzMzMzMgNS43MTEzMyA4LjI4ODY3IDQuNjY2NjcgNyA0LjY2NjY3WlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTExLjA4MzMgNy41ODMzM0MxMS4xNDE3IDcuMjkxNjcgMTEuMTQxNyA2LjcwODMzIDExLjA4MzMgNi40MTY2N0wxMi4yNSA1LjgzMzMzQzEyLjQxNjcgNS43MDgzMyAxMi40ODMzIDUuNDgzMzMgMTIuNDE2NyA1LjI1TDExLjY2NjcgMy40MTY2N0MxMS42IDMuMTgzMzMgMTEuMzkxNyAzLjA0MTY3IDExLjE0MTcgMy4wNDE2N0w5LjkxNjY3IDMuNUM5LjU2NjY3IDMuMjA4MzMgOS4xOTE2NyAyLjk1ODMzIDguNzUgMi43OTE2N0w4LjQgMS40NTgzM0M4LjM0MTY3IDEuMjI1IDguMTQxNjcgMS4xNjY2NyA3LjkzMzMzIDEuMTY2NjdINi4wNjY2N0M1Ljg1ODMzIDEuMTY2NjcgNS42NTgzMyAxLjIyNSA1LjYgMS40NTgzM0w1LjI1IDIuNzkxNjdDNC44MDgzMyAyLjk1ODMzIDQuNDMzMzMgMy4yMDgzMyA0LjA4MzMzIDMuNUwyLjg1ODMzIDMuMDQxNjdDMi42MDgzMyAzLjA0MTY3IDIuNCAzLjE4MzMzIDIuMzMzMzMgMy40MTY2N0wxLjU4MzMzIDUuMjVDMS41MTY2NyA1LjQ4MzMzIDEuNTgzMzMgNS43MDgzMyAxLjc1IDUuODMzMzNMMi45MTY2NyA2LjQxNjY3QzIuODU4MzMgNi43MDgzMyAyLjg1ODMzIDcuMjkxNjcgMi45MTY2NyA3LjU4MzMzTDEuNzUgOC4xNjY2N0MxLjU4MzMzIDguMjkxNjcgMS41MTY2NyA4LjUxNjY3IDEuNTgzMzMgOC43NUwyLjMzMzMzIDEwLjU4MzNDMi40IDEwLjgxNjcgMi42MDgzMyAxMC45NTgzIDIuODU4MzMgMTAuOTU4M0w0LjA4MzMzIDEwLjVDNC40MzMzMyAxMC43OTE3IDQuODA4MzMgMTEuMDQxNyA1LjI1IDExLjIwODNMNS42IDEyLjU0MTdDNS42NTgzMyAxMi43NzUgNS44NTgzMyAxMi44MzMzIDYuMDY2NjcgMTIuODMzM0g3LjkzMzMzQzguMTQxNjcgMTIuODMzMyA4LjM0MTY3IDEyLjc3NSA4LjQgMTIuNTQxN0w4Ljc1IDExLjIwODNDOS4xOTE2NyAxMS4wNDE3IDkuNTY2NjcgMTAuNzkxNyA5LjkxNjY3IDEwLjVMMTEuMTQxNyAxMC45NTgzQzExLjM5MTcgMTAuOTU4MyAxMS42IDEwLjgxNjcgMTEuNjY2NyAxMC41ODMzTDEyLjQxNjcgOC43NUMxMi40ODMzIDguNTE2NjcgMTIuNDE2NyA4LjI5MTY3IDEyLjI1IDguMTY2NjdMMTEuMDgzMyA3LjU4MzMzWlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJldGMuaWNvbiA9PT0gJ2NoZWNrJ1wiPlxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xMS42NjY3IDMuNUw1LjI1IDEwLjVMMi4zMzMzMyA3LjU4MzMzXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3Bhbj57eyBldGMubGFiZWwgfX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBBY3Rpb24gRGVzY3JpcHRpb246IGZsZXgtMSArIG1pbi13LTAgc28gcm93IGNhbiBzaHJpbms7IGJsb2NrIGZsb3cgaW4gc3RlcC1saXN0IFNDU1MgYXZvaWRzIGZsZXggYnJlYWtpbmcgaW5uZXJIVE1MIGJhZGdlcyAtLT5cbiAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bIzExMTgyN10gY3FhLXRleHQtWzE0cHhdIGNxYS1sZWFkaW5nLVsxOHB4XSBjcWEtYWN0aW9uLWZvcm1hdCBjcWEtYWxpZ24tbWlkZGxlIGNxYS1taW4tdy0wIGNxYS1mbGV4LTFcIiAqbmdJZj1cImdldEFjdGlvbkRlc2NyaXB0aW9uKClcIlxuICAgW2lubmVySFRNTF09XCJnZXRBY3Rpb25EZXNjcmlwdGlvbigpXCIgKGNsaWNrKT1cImNsaWNrT25BY3Rpb24oJGV2ZW50KVwiPlxuICA8L3NwYW4+XG4gIDwhLS0gPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bIzExMTgyN10gY3FhLXRleHQtWzE0cHhdIGNxYS1sZWFkaW5nLVsxOHB4XVwiICpuZ0lmPVwiZ2V0QWN0aW9uRGVzY3JpcHRpb24oKVwiPlxuICAgIHt7IGdldEFjdGlvbkRlc2NyaXB0aW9uKCkgfX1cbiAgPC9zcGFuPiAtLT5cblxuICA8IS0tIFBhcmFtZXRlcnMgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtM1wiICpuZ0lmPVwiZmFsc2VcIj5cbiAgICA8IS0tIE5hdmlnYXRlOiBVUkwgYXMgY2xpY2thYmxlIHRyaWdnZXIgZm9yIFRlc3QgRGF0YSBtb2RhbCAtLT5cbiAgICA8c3BhbiAqbmdJZj1cImV2ZW50VHlwZSA9PT0gJ25hdmlnYXRlJyAmJiBnZXROYXZpZ2F0ZVVybFBhcmFtZXRlcigpXCIgI3Rlc3REYXRhVHJpZ2dlclxuICAgICAgKGNsaWNrKT1cIm9wZW5UZXN0RGF0YU1vZGFsKCRldmVudClcIlxuICAgICAgY2xhc3M9XCJjcWEtcHktMC41IGNxYS1weC0yIGNxYS10ZXh0LVsjM0Y0M0VFXSBjcWEtdGV4dC1bMTRweF0gY3FhLWxlYWRpbmctWzE3cHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjOEE4Q0Y0XSBjcWEtcm91bmRlZCBjcWEtYmctWyNEOEQ5RkNdIGNxYS1jdXJzb3ItcG9pbnRlciBob3ZlcjpjcWEtb3BhY2l0eS05MFwiPlxuICAgICAge3sgZ2V0TmF2aWdhdGVVcmxQYXJhbWV0ZXIoKT8udmFsdWUgfHwgZ2V0TmF2aWdhdGVVcmxQYXJhbWV0ZXIoKT8uZGlzcGxheVZhbHVlIH19XG4gICAgPC9zcGFuPlxuICAgIFxuICAgIDwhLS0gT3RoZXIgZXZlbnQgdHlwZXM6IGxvb3AgdGhyb3VnaCBwYXJhbWV0ZXJzIChuYXZpZ2F0ZSBleGNsdWRlZCkgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcGFyYW0gb2YgcGFyYW1ldGVyczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgPCEtLSBTa2lwIG5hdmlnYXRlIHBhcmFtZXRlcnMgaW4gdGhlIGxvb3AgKGFscmVhZHkgc2hvd24gYWJvdmUpIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImV2ZW50VHlwZSAhPT0gJ25hdmlnYXRlJ1wiPlxuXG4gICAgICA8IS0tIFR5cGU6IEZpcnN0IHBhcmFtICh0ZXh0IHZhbHVlIGxpa2Uge3t1c2VybmFtZX19KSAtLT5cbiAgICAgIDxzcGFuICpuZ0lmPVwiZXZlbnRUeXBlID09PSAndHlwZScgJiYgaSA9PT0gMFwiIGNsYXNzPVwiY3FhLXRleHQtZ3JheS05MDAgY3FhLXRleHQtc21cIj5cbiAgICAgICAge3sgcGFyYW0udmFsdWUgfX1cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPCEtLSBUeXBlOiBcImludG9cIiB0ZXh0IC0tPlxuICAgICAgPHNwYW4gKm5nSWY9XCJldmVudFR5cGUgPT09ICd0eXBlJyAmJiBpID09PSAwXCIgY2xhc3M9XCJjcWEtdGV4dC1ncmF5LTkwMCBjcWEtdGV4dC1zbVwiPlxuICAgICAgICBpbnRvXG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDwhLS0gVHlwZTogU2Vjb25kIHBhcmFtIChzZWxlY3RvcikgLS0+XG4gICAgICA8c3BhbiAqbmdJZj1cImV2ZW50VHlwZSA9PT0gJ3R5cGUnICYmIGkgPT09IDFcIlxuICAgICAgICBjbGFzcz1cImNxYS1weS0wLjUgY3FhLXB4LTIgY3FhLXRleHQtWyMzRjQzRUVdIGNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMTdweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyM4QThDRjRdIGNxYS1yb3VuZGVkIGNxYS1iZy1bI0Q4RDlGQ11cIj5cbiAgICAgICAge3sgcGFyYW0uZGlzcGxheVZhbHVlIHx8IHBhcmFtLnZhbHVlIH19XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDwhLS0gQ2xpY2s6IFNlbGVjdG9yIGlucHV0L2Rpc3BsYXkgLS0+XG4gICAgICA8c3BhbiAqbmdJZj1cImV2ZW50VHlwZSA9PT0gJ2NsaWNrJyAmJiBwYXJhbS5uYW1lID09PSAnZWxlbWVudCdcIlxuICAgICAgICNjbGlja0VsZW1lbnRUcmlnZ2VyXG4gICAgICAgKGNsaWNrKT1cIm9wZW5FbGVtZW50UG9wdXAoJGV2ZW50KVwiXG4gICAgICAgIGNsYXNzPVwiY3FhLXB5LTAuNSBjcWEtcHgtMiBjcWEtdGV4dC1bIzNGNDNFRV0gY3FhLXRleHQtWzE0cHhdIGNxYS1sZWFkaW5nLVsxN3B4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bIzhBOENGNF0gY3FhLXJvdW5kZWQgY3FhLWN1cnNvci1wb2ludGVyIGNxYS1iZy1bI0Q4RDlGQ11cIj5cbiAgICAgICAge3sgcGFyYW0uZGlzcGxheVZhbHVlIHx8IHBhcmFtLnZhbHVlIH19XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDwhLS0gQ2xpY2s6IFN1ZmZpeCB0ZXh0IChsaWtlIFwiaWYgUHJlc2VudFwiKSAtLT5cbiAgICAgIDxzcGFuICpuZ0lmPVwiZXZlbnRUeXBlID09PSAnY2xpY2snICYmIHBhcmFtLm5hbWUgPT09ICdzdWZmaXgnXCIgY2xhc3M9XCJjcWEtdGV4dC1ncmF5LTkwMCBjcWEtdGV4dC1zbVwiPlxuICAgICAgICB7eyBwYXJhbS52YWx1ZSB9fVxuICAgICAgPC9zcGFuPlxuXG4gICAgICA8IS0tIERvdWJsZSBDbGljazogU2VsZWN0b3IgaW5wdXQvZGlzcGxheSAtLT5cbiAgICAgIDxzcGFuICpuZ0lmPVwiZXZlbnRUeXBlID09PSAnZG91YmxlQ2xpY2snICYmIGkgPT09IDBcIlxuICAgICAgICBjbGFzcz1cImNxYS1weS0wLjUgY3FhLXB4LTIgY3FhLXRleHQtWyMzRjQzRUVdIGNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMTdweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyM4QThDRjRdIGNxYS1yb3VuZGVkIGNxYS1iZy1bI0Q4RDlGQ11cIj5cbiAgICAgICAge3sgcGFyYW0uZGlzcGxheVZhbHVlIHx8IHBhcmFtLnZhbHVlIH19XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDwhLS0gUHJlc3MgRW50ZXI6IFNlbGVjdG9yIGlucHV0L2Rpc3BsYXkgd2l0aCBIVE1MIHN1cHBvcnQgLS0+XG4gICAgICA8c3BhbiAqbmdJZj1cImV2ZW50VHlwZSA9PT0gJ3ByZXNzRW50ZXInICYmIGkgPT09IDBcIlxuICAgICAgICBjbGFzcz1cImNxYS1weS0wLjUgY3FhLXB4LTIgY3FhLXRleHQtWyMzRjQzRUVdIGNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMTdweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyM4QThDRjRdIGNxYS1yb3VuZGVkIGNxYS1iZy1bI0Q4RDlGQ11cIlxuICAgICAgICBbaW5uZXJIVE1MXT1cInBhcmFtLmRpc3BsYXlWYWx1ZSB8fCBwYXJhbS52YWx1ZVwiPlxuICAgICAgPC9zcGFuPlxuXG4gICAgICA8IS0tIEVudGVyOiBWYWx1ZSBkaXNwbGF5IHdpdGggcXVvdGVzIChsaWtlIGNsaWNrIGFjdGlvbikgLS0+XG4gICAgICA8c3BhbiAqbmdJZj1cImV2ZW50VHlwZSA9PT0gJ2VudGVyJyAmJiBwYXJhbS5uYW1lID09PSAndmFsdWUnXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtcHktMC41IGNxYS1weC0yIGNxYS10ZXh0LVsjM0Y0M0VFXSBjcWEtdGV4dC1bMTRweF0gY3FhLWxlYWRpbmctWzE3cHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjOEE4Q0Y0XSBjcWEtcm91bmRlZCBjcWEtYmctWyNEOEQ5RkNdXCI+XG4gICAgICAgIHt7IHBhcmFtLmRpc3BsYXlWYWx1ZSB8fCBwYXJhbS52YWx1ZSB9fVxuICAgICAgPC9zcGFuPlxuXG4gICAgICA8IS0tIEVudGVyOiBcImluIHRoZVwiIHRleHQgLS0+XG4gICAgICA8c3BhbiAqbmdJZj1cImV2ZW50VHlwZSA9PT0gJ2VudGVyJyAmJiBwYXJhbS5uYW1lID09PSAndmFsdWUnXCIgY2xhc3M9XCJjcWEtdGV4dC1ncmF5LTkwMCBjcWEtdGV4dC1zbVwiPlxuICAgICAgICBpbiB0aGVcbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPCEtLSBFbnRlcjogTGFiZWwgZGlzcGxheSB3aXRoIHF1b3RlcyAobGlrZSBjbGljayBhY3Rpb24pIC0tPlxuICAgICAgPHNwYW4gKm5nSWY9XCJldmVudFR5cGUgPT09ICdlbnRlcicgJiYgcGFyYW0ubmFtZSA9PT0gJ2xhYmVsJ1wiXG4gICAgICAgIGNsYXNzPVwiY3FhLXB5LTAuNSBjcWEtcHgtMiBjcWEtdGV4dC1bIzNGNDNFRV0gY3FhLXRleHQtWzE0cHhdIGNxYS1sZWFkaW5nLVsxN3B4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bIzhBOENGNF0gY3FhLXJvdW5kZWQgY3FhLWJnLVsjRDhEOUZDXVwiPlxuICAgICAgICB7eyBwYXJhbS5kaXNwbGF5VmFsdWUgfHwgcGFyYW0udmFsdWUgfX1cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPCEtLSBFbnRlcjogXCJmaWVsZFwiIHRleHQgLS0+XG4gICAgICA8c3BhbiAqbmdJZj1cImV2ZW50VHlwZSA9PT0gJ2VudGVyJyAmJiBwYXJhbS5uYW1lID09PSAnbGFiZWwnXCIgY2xhc3M9XCJjcWEtdGV4dC1ncmF5LTkwMCBjcWEtdGV4dC1zbVwiPlxuICAgICAgICBmaWVsZFxuICAgICAgPC9zcGFuPlxuXG4gICAgICA8IS0tIFdhaXQ6IER1cmF0aW9uIGlucHV0IC0tPlxuICAgICAgPGlucHV0ICpuZ0lmPVwiZXZlbnRUeXBlID09PSAnd2FpdCcgJiYgcGFyYW0ubmFtZSA9PT0gJ2R1cmF0aW9uJ1wiIHR5cGU9XCJudW1iZXJcIiBbdmFsdWVdPVwicGFyYW0udmFsdWVcIlxuICAgICAgICAoaW5wdXQpPVwib25QYXJhbWV0ZXJDaGFuZ2UocGFyYW0sICRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCIgcGxhY2Vob2xkZXI9XCIyXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtdy0xNiBjcWEtcHgtMiBjcWEtcHktMS41IGNxYS1yb3VuZGVkLWxnIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjOUU5RUUzXSBjcWEtYmctWyNEMUM0RTldIGNxYS10ZXh0LVsjM0Y0M0VFXSBjcWEtdGV4dC1zbSBjcWEtZm9udC1tZWRpdW0gY3FhLW91dGxpbmUtbm9uZSBmb2N1czpjcWEtcmluZy0yIGZvY3VzOmNxYS1yaW5nLVsjM0Y0M0VFXSBmb2N1czpjcWEtcmluZy1vcGFjaXR5LTUwXCIgLz5cbiAgICAgIDxzcGFuICpuZ0lmPVwiZXZlbnRUeXBlID09PSAnd2FpdCcgJiYgcGFyYW0ubmFtZSA9PT0gJ2R1cmF0aW9uJ1wiIGNsYXNzPVwiY3FhLXRleHQtZ3JheS05MDAgY3FhLXRleHQtc21cIj5cbiAgICAgICAgc2Vjb25kc1xuICAgICAgPC9zcGFuPlxuXG4gICAgICA8IS0tIFdhaXQ6IEVsZW1lbnQgc2VsZWN0b3IgLS0+XG4gICAgICA8c3BhbiAqbmdJZj1cImV2ZW50VHlwZSA9PT0gJ3dhaXQnICYmIHBhcmFtLm5hbWUgPT09ICdlbGVtZW50J1wiIGNsYXNzPVwiY3FhLXRleHQtZ3JheS05MDAgY3FhLXRleHQtc21cIj5cbiAgICAgICAgZm9yIGVsZW1lbnRcbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiZXZlbnRUeXBlID09PSAnd2FpdCcgJiYgcGFyYW0ubmFtZSA9PT0gJ2VsZW1lbnQnXCIgXG4gICAgICAgI2VsZW1lbnRUcmlnZ2VyXG4gICAgICAgKGNsaWNrKT1cIm9wZW5FbGVtZW50UG9wdXAoJGV2ZW50KVwiXG4gICAgICAgIGNsYXNzPVwiY3FhLXB5LTAuNSBjcWEtcHgtMiBjcWEtdGV4dC1bIzNGNDNFRV0gY3FhLXRleHQtWzE0cHhdIGNxYS1sZWFkaW5nLVsxN3B4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bIzhBOENGNF0gY3FhLXJvdW5kZWQgY3FhLWN1cnNvci1wb2ludGVyIGNxYS1iZy1bI0Q4RDlGQ11cIj5cbiAgICAgICAge3sgcGFyYW0uZGlzcGxheVZhbHVlIHx8IHBhcmFtLnZhbHVlIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiAqbmdJZj1cImV2ZW50VHlwZSA9PT0gJ3dhaXQnICYmIHBhcmFtLm5hbWUgPT09ICdlbGVtZW50J1wiIGNsYXNzPVwiY3FhLXRleHQtZ3JheS05MDAgY3FhLXRleHQtc21cIj5cbiAgICAgICAgdG8gYmUgdmlzaWJsZVxuICAgICAgPC9zcGFuPlxuXG4gICAgICA8IS0tIEN1c3RvbTogRGVzY3JpcHRpb24gKGNsaWNrYWJsZSB0byBvcGVuIFN0ZXAgRGVzY3JpcHRpb24gbW9kYWw7IHBhc3MgJGV2ZW50IHNvIG1vZGFsIG9wZW5zIGJlbG93IHRoaXMgdHJpZ2dlcikgLS0+XG4gICAgICA8c3BhbiAqbmdJZj1cImV2ZW50VHlwZSA9PT0gJ2N1c3RvbSdcIiAjZGVzY3JpcHRpb25UcmlnZ2VyXG4gICAgICAgIChjbGljayk9XCJvcGVuU3RlcERlc2NyaXB0aW9uTW9kYWwoJGV2ZW50KVwiXG4gICAgICAgIGNsYXNzPVwiY3FhLXB5LTAuNSBjcWEtcHgtMiBjcWEtdGV4dC1bIzNGNDNFRV0gY3FhLXRleHQtWzE0cHhdIGNxYS1sZWFkaW5nLVsxN3B4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bIzhBOENGNF0gY3FhLXJvdW5kZWQgY3FhLWJnLVsjRDhEOUZDXSBjcWEtY3Vyc29yLXBvaW50ZXIgaG92ZXI6Y3FhLW9wYWNpdHktOTBcIlxuICAgICAgICBbaW5uZXJIVE1MXT1cInBhcmFtLmRpc3BsYXlWYWx1ZSB8fCBwYXJhbS52YWx1ZVwiPlxuICAgICAgPC9zcGFuPlxuXG4gICAgICA8IS0tIEFJIEFnZW50OiBJbnN0cnVjdGlvbnMgLS0+XG4gICAgICA8c3BhbiAqbmdJZj1cImV2ZW50VHlwZSA9PT0gJ2FpLWFnZW50J1wiXG4gICAgICAgIGNsYXNzPVwiY3FhLXB5LTAuNSBjcWEtcHgtMiBjcWEtdGV4dC1bIzNGNDNFRV0gY3FhLXRleHQtWzE0cHhdIGNxYS1sZWFkaW5nLVsxN3B4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bIzhBOENGNF0gY3FhLXJvdW5kZWQgY3FhLWJnLVsjRDhEOUZDXVwiPlxuICAgICAgICB7eyBwYXJhbS5kaXNwbGF5VmFsdWUgfHwgcGFyYW0udmFsdWUgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLW1sLWF1dG8gY3FhLXNlbGYtY2VudGVyXCI+XG4gICAgPCEtLSBBY3Rpb24gSWNvbnM6IEVkaXQsIExpbmssIER1cGxpY2F0ZSwgRGVsZXRlIChzaG93IG9uIGhvdmVyOyBoaWRkZW4gd2hlbiBzdGVwIGlzIGluc2lkZSBzdGVwLWdyb3VwKSAtIHBsYWNlZCBmaXJzdCAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiZWRpdGFibGUgJiYgIWlzSW5zaWRlU3RlcEdyb3VwICYmICFpc1Jlb3JkZXJcIiBjbGFzcz1cInN0ZXAtYWN0aW9ucyBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMS41IGNxYS1wci0yXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAjZWRpdFRyaWdnZXIgKGNsaWNrKT1cIm9uRWRpdCgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiB0aXRsZT1cIkVkaXRcIiBjbGFzcz1cImNxYS1wLTAgY3FhLXRleHQtWyM5OUExQWZdIGhvdmVyOmNxYS10ZXh0LVsjMTQ0N0U2XVwiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICA8cGF0aCBkPVwiTTcgMTEuNjY2NkgxMi4yNVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgPHBhdGggZD1cIk05LjU1MjA4IDIuMTEyOEM5Ljc4NDMgMS44ODA1OCAxMC4wOTkzIDEuNzUwMTIgMTAuNDI3NyAxLjc1MDEyQzEwLjc1NjEgMS43NTAxMiAxMS4wNzEgMS44ODA1OCAxMS4zMDMzIDIuMTEyOEMxMS41MzU1IDIuMzQ1MDIgMTEuNjY1OSAyLjY1OTk4IDExLjY2NTkgMi45ODgzOEMxMS42NjU5IDMuMzE2NzkgMTEuNTM1NSAzLjYzMTc1IDExLjMwMzMgMy44NjM5N0w0LjI5NzQyIDEwLjg3MDRDNC4xNTg2NCAxMS4wMDkyIDMuOTg3MSAxMS4xMTA3IDMuNzk4NjcgMTEuMTY1NkwyLjEyMzMzIDExLjY1NDRDMi4wNzMxNCAxMS42NjkgMi4wMTk5MyAxMS42Njk5IDEuOTY5MjggMTEuNjU2OUMxLjkxODYzIDExLjY0MzkgMS44NzI0IDExLjYxNzYgMS44MzU0MyAxMS41ODA2QzEuNzk4NDYgMTEuNTQzNyAxLjc3MjEgMTEuNDk3NCAxLjc1OTEzIDExLjQ0NjhDMS43NDYxNSAxMS4zOTYxIDEuNzQ3MDMgMTEuMzQyOSAxLjc2MTY3IDExLjI5MjdMMi4yNTA1IDkuNjE3MzhDMi4zMDU0NiA5LjQyOTE2IDIuNDA2OTggOS4yNTc4MyAyLjU0NTY3IDkuMTE5MjJMOS41NTIwOCAyLjExMjhaXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDwhLS0gPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uTGluaygpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiB0aXRsZT1cIkxpbmtcIiBjbGFzcz1cImNxYS1wLTAgY3FhLXRleHQtWyM5OUExQWZdIGhvdmVyOmNxYS10ZXh0LVsjMTQ0N0U2XVwiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICA8cGF0aCBkPVwiTTUuMDAwNjUgOS45MTY3MUgzLjY2NzMyQzIuNzgzMjYgOS45MTY3MSAxLjkzNTQyIDkuNjA5NDIgMS4zMTAzIDkuMDYyNDRDMC42ODUxNzQgOC41MTU0NSAwLjMzMzk4NCA3Ljc3MzU5IDAuMzMzOTg0IDcuMDAwMDRDMC4zMzM5ODQgNi4yMjY0OSAwLjY4NTE3NCA1LjQ4NDYzIDEuMzEwMyA0LjkzNzY1QzEuOTM1NDIgNC4zOTA2NiAyLjc4MzI2IDQuMDgzMzcgMy42NjczMiA0LjA4MzM3SDUuMDAwNjVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNOSA0LjA4MzM3SDEwLjMzMzNDMTEuMjE3NCA0LjA4MzM3IDEyLjA2NTIgNC4zOTA2NiAxMi42OTA0IDQuOTM3NjVDMTMuMzE1NSA1LjQ4NDYzIDEzLjY2NjcgNi4yMjY0OSAxMy42NjY3IDcuMDAwMDRDMTMuNjY2NyA3Ljc3MzU5IDEzLjMxNTUgOC41MTU0NSAxMi42OTA0IDkuMDYyNDRDMTIuMDY1MiA5LjYwOTQyIDExLjIxNzQgOS45MTY3MSAxMC4zMzMzIDkuOTE2NzFIOVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgPHBhdGggZD1cIk00LjMzMzk4IDdIOS42NjczMlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9idXR0b24+IC0tPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uRHVwbGljYXRlKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0R1cGxpY2F0aW5nXCJcbiAgICAgICAgW2F0dHIudGl0bGVdPVwiaXNEdXBsaWNhdGluZyA/ICdEdXBsaWNhdGluZy4uLicgOiAnRHVwbGljYXRlJ1wiXG4gICAgICAgIGNsYXNzPVwiY3FhLXAtMCBjcWEtdGV4dC1bIzk5QTFBZl0gaG92ZXI6Y3FhLXRleHQtWyMxNDQ3RTZdIGRpc2FibGVkOmNxYS1vcGFjaXR5LTYwIGRpc2FibGVkOmNxYS1jdXJzb3Itbm90LWFsbG93ZWRcIlxuICAgICAgPlxuICAgICAgICA8c3ZnICpuZ0lmPVwiIWlzRHVwbGljYXRpbmdcIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgPHBhdGggZD1cIk0xMS42NjYgNC42NjY2M0g1LjgzMjY4QzUuMTg4MzUgNC42NjY2MyA0LjY2NjAyIDUuMTg4OTYgNC42NjYwMiA1LjgzMzI5VjExLjY2NjZDNC42NjYwMiAxMi4zMTEgNS4xODgzNSAxMi44MzMzIDUuODMyNjggMTIuODMzM0gxMS42NjZDMTIuMzEwMyAxMi44MzMzIDEyLjgzMjcgMTIuMzExIDEyLjgzMjcgMTEuNjY2NlY1LjgzMzI5QzEyLjgzMjcgNS4xODg5NiAxMi4zMTAzIDQuNjY2NjMgMTEuNjY2IDQuNjY2NjNaXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICA8cGF0aCBkPVwiTTIuMzMyNjggOS4zMzMyOUMxLjY5MTAyIDkuMzMzMjkgMS4xNjYwMiA4LjgwODI5IDEuMTY2MDIgOC4xNjY2M1YyLjMzMzI5QzEuMTY2MDIgMS42OTE2MyAxLjY5MTAyIDEuMTY2NjMgMi4zMzI2OCAxLjE2NjYzSDguMTY2MDJDOC44MDc2OCAxLjE2NjYzIDkuMzMyNjggMS42OTE2MyA5LjMzMjY4IDIuMzMzMjlcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgICAgPHN2ZyAqbmdJZj1cImlzRHVwbGljYXRpbmdcIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgYXJpYS1sYWJlbD1cIkR1cGxpY2F0aW5nXCI+XG4gICAgICAgICAgPGNpcmNsZSBjeD1cIjhcIiBjeT1cIjhcIiByPVwiNlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS1vcGFjaXR5PVwiMC4yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiPjwvY2lyY2xlPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNMTQgOEE2IDYgMCAwIDAgOCAyXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIj5cbiAgICAgICAgICAgIDxhbmltYXRlVHJhbnNmb3JtIGF0dHJpYnV0ZU5hbWU9XCJ0cmFuc2Zvcm1cIiB0eXBlPVwicm90YXRlXCIgZnJvbT1cIjAgOCA4XCIgdG89XCIzNjAgOCA4XCIgZHVyPVwiMC44c1wiIHJlcGVhdENvdW50PVwiaW5kZWZpbml0ZVwiLz5cbiAgICAgICAgICA8L3BhdGg+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25EZWxldGUoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgdGl0bGU9XCJEZWxldGVcIiBjbGFzcz1cImNxYS1wLTAgY3FhLXRleHQtWyNmZjY0NjddIGhvdmVyOmNxYS10ZXh0LVsjQzYzNTM1XVwiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICA8cGF0aCBkPVwiTTEuNzUgMy41SDEyLjI1XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICA8cGF0aCBkPVwiTTExLjA4MjcgMy41VjExLjY2NjdDMTEuMDgyNyAxMi4yNSAxMC40OTkzIDEyLjgzMzMgOS45MTYwMiAxMi44MzMzSDQuMDgyNjhDMy40OTkzNSAxMi44MzMzIDIuOTE2MDIgMTIuMjUgMi45MTYwMiAxMS42NjY3VjMuNVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgPHBhdGggZD1cIk00LjY2NjAyIDMuNDk5OTZWMi4zMzMyOUM0LjY2NjAyIDEuNzQ5OTYgNS4yNDkzNSAxLjE2NjYzIDUuODMyNjggMS4xNjY2M0g4LjE2NjAyQzguNzQ5MzUgMS4xNjY2MyA5LjMzMjY4IDEuNzQ5OTYgOS4zMzI2OCAyLjMzMzI5VjMuNDk5OTZcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNNS44MzM5OCA2LjQxNjYzVjkuOTE2NjNcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNOC4xNjYwMiA2LjQxNjYzVjkuOTE2NjNcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBWaWV3IERldGFpbHMgTGluayAoc2hvdyBvbmx5IGlmIGRlc2NyaXB0aW9uIGlzIG5vdCBlbXB0eSkgLS0+XG4gICAgPGEgKm5nSWY9XCJjb25maWcuZGVzY3JpcHRpb24gJiYgY29uZmlnLmRlc2NyaXB0aW9uLnRyaW0oKSAhPT0gJydcIiAjdmlld0RldGFpbHNUcmlnZ2VyIGhyZWY9XCIjXCIgKGNsaWNrKT1cIm9uVmlld0RldGFpbHMoJGV2ZW50KVwiIGNsYXNzPVwiY3FhLXRleHQtWyMzRjQzRUVdIGNxYS10ZXh0LVsxMHB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xIGNxYS1uby11bmRlcmxpbmVcIj5WaWV3IERldGFpbHM8c3ZnIHdpZHRoPVwiOFwiIGhlaWdodD1cIjhcIiB2aWV3Qm94PVwiMCAwIDggOFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxwYXRoIGQ9XCJNMi4wMzgwOSA2Ljc0MzI5TDIuNjI4MDkgNy4zMzMyOUw1Ljk2MTQyIDMuOTk5OTZMMi42MjgwOSAwLjY2NjYyNkwyLjAzODA5IDEuMjU2NjNMNC43ODE0MiAzLjk5OTk2TDIuMDM4MDkgNi43NDMyOVpcIiBmaWxsPVwiIzNGNDNFRVwiLz48L3N2Zz48L2E+XG5cbiAgICA8IS0tIENyZWF0ZWQgRGF0ZSAoZnJvbSBBUEkpIC0gbGFzdCBzbyBhbGlnbmVkIGFjcm9zcyBhbGwgc3RlcHMsIGZvcm1hdDogMjUgRmViIDIwMjYgLS0+XG4gICAgPHNwYW4gKm5nSWY9XCJjb25maWcuY3JlYXRlZERhdGVcIiBjbGFzcz1cInN0ZXAtZGF0ZSBjcWEtdGV4dC1bIzZCNzI4MF0gY3FhLXRleHQtWzEycHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtbWwtYXV0byBjcWEtZmxleC1zaHJpbmstMFwiPlxuICAgICAge3sgY29uZmlnLmNyZWF0ZWREYXRlIHwgZGF0ZTonZCBNTU0geXl5eScgfX1cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+Il19
|
|
469
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9ybWFsLXN0ZXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy9ub3JtYWwtc3RlcC9ub3JtYWwtc3RlcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL25vcm1hbC1zdGVwL25vcm1hbC1zdGVwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBRVosWUFBWSxFQUNaLFVBQVUsRUFDVixTQUFTLEdBR1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFLckUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFNM0YsT0FBTyxFQUNMLDZCQUE2QixHQUU5QixNQUFNLHlDQUF5QyxDQUFDOzs7Ozs7OztBQVVqRCxNQUFNLE9BQU8sMkJBQTJCO0lBMEN0QyxZQUNtQixjQUFxQyxFQUNyQyxZQUFpQyxFQUNqQyxhQUFtQyxFQUNuQyxHQUFzQixFQUN0QixNQUFjLEVBQ2QsU0FBdUI7UUFMdkIsbUJBQWMsR0FBZCxjQUFjLENBQXVCO1FBQ3JDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxrQkFBYSxHQUFiLGFBQWEsQ0FBc0I7UUFDbkMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFsQ2pDLGVBQVUsR0FBb0IsRUFBRSxDQUFDO1FBQ2pDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLGFBQVEsR0FBWSxJQUFJLENBQUM7UUFFekIsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFFOUIsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztRQUN4RCxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUErQyxDQUFDO1FBQ2xGLFNBQUksR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ2hDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQStDLENBQUM7UUFDOUUsU0FBSSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDaEMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDckMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDbEMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3ZDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQXNCLENBQUM7UUFDckQsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQzlDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQUM3QyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQXNCLENBQUM7UUFFOUQsMEJBQXFCLEdBQVksS0FBSyxDQUFDO1FBQ3ZDLHVFQUF1RTtRQUMvRCx1QkFBa0IsR0FBNkIsSUFBSSxDQUFDO1FBVzVELHFGQUFxRjtRQUNyRixxQkFBZ0IsR0FBc0I7WUFDcEMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUU7WUFDMUcsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUU7WUFDbkcsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUU7WUFDbkcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUU7WUFDeEYsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUU7WUFDL0YsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUU7WUFDbkgsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUU7WUFDekcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUU7WUFDMUYsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUU7WUFDaEcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUU7U0FDN0YsQ0FBQztJQWRDLENBQUM7SUFnQkosUUFBUTtR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c0JBQWpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQXFYUCxlQUFlO3NCQURkLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25Jbml0LFxuICBIb3N0TGlzdGVuZXIsXG4gIEVsZW1lbnRSZWYsXG4gIFZpZXdDaGlsZCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIE5nWm9uZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOb3JtYWxTdGVwQ29uZmlnLCBUZXN0Q2FzZUV2ZW50VHlwZSwgRXZlbnRUeXBlQ29uZmlnLCBTdGVwUGFyYW1ldGVyLCBUZXN0Q2FzZVN0ZXBDb25maWcgfSBmcm9tICcuLi90ZXN0LWNhc2Utc3RlcC5tb2RlbHMnO1xuaW1wb3J0IHsgU1RFUF9ST1dfQUNUSU9OU19TVFlMRVMgfSBmcm9tICcuLi9zdGVwLXJvdy1hY3Rpb25zLnN0eWxlcyc7XG5pbXBvcnQge1xuICBDdXN0b21FZGl0U3RlcFJlc3VsdCxcbiAgQ3VzdG9tRWRpdFN0ZXBTZXJ2aWNlLFxufSBmcm9tICcuLi9jdXN0b20tZWRpdC1zdGVwL2N1c3RvbS1lZGl0LXN0ZXAuc2VydmljZSc7XG5pbXBvcnQgeyBDVVNUT01fRURJVF9TVEVQX0VESVRfSU5fREVQVEggfSBmcm9tICcuLi9jdXN0b20tZWRpdC1zdGVwL2N1c3RvbS1lZGl0LXN0ZXAtZGF0YSc7XG5pbXBvcnQgeyBFbGVtZW50UG9wdXBSZXN1bHQsIEVsZW1lbnRQb3B1cFNlcnZpY2UgfSBmcm9tICcuLi9lbGVtZW50LXBvcHVwL2VsZW1lbnQtcG9wdXAuc2VydmljZSc7XG5pbXBvcnQge1xuICBUZXN0RGF0YU1vZGFsUmVzdWx0LFxuICBUZXN0RGF0YU1vZGFsU2VydmljZSxcbn0gZnJvbSAnLi4vdGVzdC1kYXRhLW1vZGFsL3Rlc3QtZGF0YS1tb2RhbC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIFRFU1RfREFUQV9NT0RBTF9FRElUX0lOX0RFUFRILFxuICBUZXN0RGF0YU1vZGFsRGF0YSxcbn0gZnJvbSAnLi4vdGVzdC1kYXRhLW1vZGFsL3Rlc3QtZGF0YS1tb2RhbC1kYXRhJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgVmlld0RldGFpbHNQYXlsb2FkIH0gZnJvbSAnLi4vc3RlcC1kZXRhaWxzLW1vZGFsL3N0ZXAtZGV0YWlscy1tb2RhbC1kYXRhJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXRlc3QtY2FzZS1ub3JtYWwtc3RlcCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9ub3JtYWwtc3RlcC5jb21wb25lbnQuaHRtbCcsXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfSxcbiAgc3R5bGVzOiBbU1RFUF9ST1dfQUNUSU9OU19TVFlMRVNdLFxufSlcbmV4cG9ydCBjbGFzcyBUZXN0Q2FzZU5vcm1hbFN0ZXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBAVmlld0NoaWxkKCdkcm9wZG93bkNvbnRhaW5lcicsIHsgc3RhdGljOiBmYWxzZSB9KSBkcm9wZG93bkNvbnRhaW5lcj86IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2Rlc2NyaXB0aW9uVHJpZ2dlcicsIHsgc3RhdGljOiBmYWxzZSB9KSBkZXNjcmlwdGlvblRyaWdnZXI/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgndGVzdERhdGFUcmlnZ2VyJywgeyBzdGF0aWM6IGZhbHNlIH0pIHRlc3REYXRhVHJpZ2dlcj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdlZGl0VHJpZ2dlcicsIHsgc3RhdGljOiBmYWxzZSB9KSBlZGl0VHJpZ2dlcj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdlbGVtZW50VHJpZ2dlcicsIHsgc3RhdGljOiBmYWxzZSB9KSBlbGVtZW50VHJpZ2dlcj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdjbGlja0VsZW1lbnRUcmlnZ2VyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGNsaWNrRWxlbWVudFRyaWdnZXI/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgndmlld0RldGFpbHNUcmlnZ2VyJywgeyBzdGF0aWM6IGZhbHNlIH0pIHZpZXdEZXRhaWxzVHJpZ2dlcj86IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBASW5wdXQoKSBjb25maWchOiBOb3JtYWxTdGVwQ29uZmlnO1xuICBASW5wdXQoKSBzdGVwTnVtYmVyITogbnVtYmVyIHwgc3RyaW5nO1xuICAvKiogQXJyYXkgaW5kZXggZnJvbSBwYXJlbnQgcmVuZGVyZXIgLSB1c2UgZm9yIGVkaXRJbkRlcHRoIChzdGVwTnVtYmVyIFwiMTAuM1wiIHBhcnNlcyB3cm9uZykgKi9cbiAgQElucHV0KCkgaW5kZXg/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGFjdGlvbiE6IHN0cmluZztcbiAgQElucHV0KCkgZXZlbnRUeXBlITogVGVzdENhc2VFdmVudFR5cGU7XG4gIEBJbnB1dCgpIHBhcmFtZXRlcnM6IFN0ZXBQYXJhbWV0ZXJbXSA9IFtdO1xuICBASW5wdXQoKSBzZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc05lc3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0luc2lkZUxvb3A6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNJbnNpZGVTdGVwR3JvdXA6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNSZW9yZGVyOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVkaXRhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc3RlcEluZGV4PzogbnVtYmVyO1xuICBASW5wdXQoKSBpc0R1cGxpY2F0aW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIGV2ZW50VHlwZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGVzdENhc2VFdmVudFR5cGU+KCk7XG4gIEBPdXRwdXQoKSBwYXJhbWV0ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcGFyYW1ldGVyOiBTdGVwUGFyYW1ldGVyOyB2YWx1ZTogc3RyaW5nIH0+KCk7XG4gIEBPdXRwdXQoKSBlZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZWRpdEluRGVwdGggPSBuZXcgRXZlbnRFbWl0dGVyPHsgc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnOyBpbmRleDogbnVtYmVyIH0+KCk7XG4gIEBPdXRwdXQoKSBsaW5rID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZHVwbGljYXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgbW9yZU9wdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSB2aWV3RGV0YWlscyA9IG5ldyBFdmVudEVtaXR0ZXI8Vmlld0RldGFpbHNQYXlsb2FkPigpO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgY2xpY2tBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBzdGVwVXBkYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxUZXN0Q2FzZVN0ZXBDb25maWc+KCk7XG5cbiAgZXZlbnRUeXBlRHJvcGRvd25PcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBTdG9yZWQgdGVzdCBkYXRhIG1vZGFsIHN0YXRlIGZvciByZW9wZW5pbmcgd2l0aCBzYW1lIHNlbGVjdGlvbnMuICovXG4gIHByaXZhdGUgdGVzdERhdGFNb2RhbFN0YXRlOiBUZXN0RGF0YU1vZGFsRGF0YSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY3VzdG9tRWRpdFN0ZXA6IEN1c3RvbUVkaXRTdGVwU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRQb3B1cDogRWxlbWVudFBvcHVwU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlc3REYXRhTW9kYWw6IFRlc3REYXRhTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXJcbiAgKSB7fVxuXG4gIC8qKiBVbmlxdWUgY29sb3JzIHBlciBldmVudCB0eXBlOyBiYWRnZSB1c2VzIGNvbnNpc3RlbnQgc2l6ZSAody04IGgtOCByb3VuZGVkLWxnKS4gKi9cbiAgZXZlbnRUeXBlQ29uZmlnczogRXZlbnRUeXBlQ29uZmlnW10gPSBbXG4gICAgeyB0eXBlOiAnbmF2aWdhdGUnLCBsYWJlbDogJ05hdmlnYXRlJywgaWNvbjogJ3BhcGVyX3BsYW5lJywgY29sb3I6ICcjNDMzOENBJywgYmFja2dyb3VuZENvbG9yOiAnI0UwRTdGRicgfSxcbiAgICB7IHR5cGU6ICdjdXN0b20nLCBsYWJlbDogJ0N1c3RvbScsIGljb246ICdzZXR0aW5ncycsIGNvbG9yOiAnIzQ3NTU2OScsIGJhY2tncm91bmRDb2xvcjogJyNGMUY1RjknIH0sXG4gICAgeyB0eXBlOiAnYWktYWdlbnQnLCBsYWJlbDogJ0FJIEFnZW50JywgaWNvbjogJ3N0YXInLCBjb2xvcjogJyM3QzNBRUQnLCBiYWNrZ3JvdW5kQ29sb3I6ICcjRURFOUZFJyB9LFxuICAgIHsgdHlwZTogJ3R5cGUnLCBsYWJlbDogJ1R5cGUnLCBpY29uOiAnVCcsIGNvbG9yOiAnI0EyMUNBRicsIGJhY2tncm91bmRDb2xvcjogJyNGQUU4RkYnIH0sXG4gICAgeyB0eXBlOiAnY2xpY2snLCBsYWJlbDogJ0NsaWNrJywgaWNvbjogJ2N1cnNvcicsIGNvbG9yOiAnIzAyODRDNycsIGJhY2tncm91bmRDb2xvcjogJyNFMEYyRkUnIH0sXG4gICAgeyB0eXBlOiAnZG91YmxlQ2xpY2snLCBsYWJlbDogJ0RvdWJsZSBDbGljaycsIGljb246ICdjdXJzb3ItZG91YmxlJywgY29sb3I6ICcjMDg5MUIyJywgYmFja2dyb3VuZENvbG9yOiAnI0NGRkFGRScgfSxcbiAgICB7IHR5cGU6ICdwcmVzc0VudGVyJywgbGFiZWw6ICdQcmVzcyBFbnRlcicsIGljb246ICdlbnRlcicsIGNvbG9yOiAnIzBEOTQ4OCcsIGJhY2tncm91bmRDb2xvcjogJyNDQ0ZCRjEnIH0sXG4gICAgeyB0eXBlOiAnZW50ZXInLCBsYWJlbDogJ0VudGVyJywgaWNvbjogJ1QnLCBjb2xvcjogJyMwNTk2NjknLCBiYWNrZ3JvdW5kQ29sb3I6ICcjRDFGQUU1JyB9LFxuICAgIHsgdHlwZTogJ3ZlcmlmeScsIGxhYmVsOiAnVmVyaWZ5JywgaWNvbjogJ2NoZWNrJywgY29sb3I6ICcjMTZBMzRBJywgYmFja2dyb3VuZENvbG9yOiAnI0RDRkNFNycgfSxcbiAgICB7IHR5cGU6ICd3YWl0JywgbGFiZWw6ICdXYWl0JywgaWNvbjogJ2Nsb2NrJywgY29sb3I6ICcjNkI3MjgwJywgYmFja2dyb3VuZENvbG9yOiAnI0YzRjRGNicgfVxuICBdO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpZykge1xuICAgICAgdGhpcy5hY3Rpb24gPSB0aGlzLmNvbmZpZy5hY3Rpb24gfHwgJyc7XG4gICAgICB0aGlzLnN0ZXBOdW1iZXIgPSB0aGlzLmNvbmZpZy5zdGVwTnVtYmVyO1xuICAgICAgdGhpcy5ldmVudFR5cGUgPSB0aGlzLmNvbmZpZy5ldmVudFR5cGU7XG4gICAgICB0aGlzLnBhcmFtZXRlcnMgPSB0aGlzLmNvbmZpZy5wYXJhbWV0ZXJzIHx8IFtdO1xuICAgICAgdGhpcy5zZWxlY3RlZCA9IHRoaXMuY29uZmlnLnNlbGVjdGVkIHx8IGZhbHNlO1xuICAgICAgdGhpcy5kaXNhYmxlZCA9IHRoaXMuY29uZmlnLmRpc2FibGVkIHx8IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGdldEN1cnJlbnRFdmVudFR5cGVDb25maWcoKTogRXZlbnRUeXBlQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudFR5cGVDb25maWdzLmZpbmQoZXRjID0+IGV0Yy50eXBlID09PSB0aGlzLmV2ZW50VHlwZSkgfHwgdGhpcy5ldmVudFR5cGVDb25maWdzWzBdO1xuICB9XG5cbiAgZ2V0QWN0aW9uRGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICAvLyBjb25zdCBjb25maWcgPSB0aGlzLmdldEN1cnJlbnRFdmVudFR5cGVDb25maWcoKTtcbiAgICAvLyBzd2l0Y2ggKHRoaXMuZXZlbnRUeXBlKSB7XG4gICAgLy8gICBjYXNlICduYXZpZ2F0ZSc6XG4gICAgLy8gICAgIHJldHVybiAnTmF2aWdhdGUgdG8nO1xuICAgIC8vICAgY2FzZSAndHlwZSc6XG4gICAgLy8gICAgIHJldHVybiAnVHlwZSc7XG4gICAgLy8gICBjYXNlICdjbGljayc6XG4gICAgLy8gICAgIHJldHVybiAnQ2xpY2sgb24nO1xuICAgIC8vICAgY2FzZSAnZG91YmxlQ2xpY2snOlxuICAgIC8vICAgICByZXR1cm4gJ0RvdWJsZSBjbGljayBvbic7XG4gICAgLy8gICBjYXNlICdwcmVzc0VudGVyJzpcbiAgICAvLyAgICAgcmV0dXJuICdQcmVzcyBFbnRlciBvbic7XG4gICAgLy8gICBjYXNlICdlbnRlcic6XG4gICAgLy8gICAgIHJldHVybiAnRW50ZXInO1xuICAgIC8vICAgY2FzZSAnd2FpdCc6XG4gICAgLy8gICAgIHJldHVybiAnV2FpdCc7XG4gICAgLy8gICBjYXNlICd2ZXJpZnknOlxuICAgIC8vICAgICByZXR1cm4gJ1ZlcmlmeSc7XG4gICAgLy8gICBjYXNlICdjdXN0b20nOlxuICAgIC8vICAgICByZXR1cm4gJ0N1c3RvbSBzdGVwJztcbiAgICAvLyAgIGNhc2UgJ2FpLWFnZW50JzpcbiAgICAvLyAgICAgcmV0dXJuICdBSSBBZ2VudCc7XG4gICAgLy8gICBkZWZhdWx0OlxuICAgIC8vICAgICByZXR1cm4gJyc7XG4gICAgLy8gfVxuICAgICAgaWYgKHRoaXMuYWN0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGlvbiA/IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHRoaXMuYWN0aW9uKSBhcyBzdHJpbmcgOiAnJztcbiAgICAgIH1cbiAgICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGdldEFjdGlvblN1ZmZpeCgpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodGhpcy5ldmVudFR5cGUpIHtcbiAgICAgIGNhc2UgJ3R5cGUnOlxuICAgICAgICByZXR1cm4gJ2ludG8nO1xuICAgICAgY2FzZSAnd2FpdCc6XG4gICAgICAgIGlmICh0aGlzLnBhcmFtZXRlcnMubGVuZ3RoID4gMCAmJiB0aGlzLnBhcmFtZXRlcnNbMF0ubmFtZSA9PT0gJ2R1cmF0aW9uJykge1xuICAgICAgICAgIHJldHVybiAnc2Vjb25kcyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdmb3IgZWxlbWVudCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgLyoqIEN1cnJlbnQgZGVzY3JpcHRpb24gZm9yIGN1c3RvbSBldmVudCB0eXBlIChmaXJzdCBwYXJhbWV0ZXIgdmFsdWUpLiAqL1xuICBnZXRDdXN0b21EZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmV2ZW50VHlwZSAhPT0gJ2N1c3RvbScgfHwgIXRoaXMucGFyYW1ldGVycz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGNvbnN0IGZpcnN0ID0gdGhpcy5wYXJhbWV0ZXJzWzBdO1xuICAgIHJldHVybiBmaXJzdD8udmFsdWUgPz8gZmlyc3Q/LmRpc3BsYXlWYWx1ZSA/PyAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIFVSTCBwYXJhbWV0ZXIgZm9yIG5hdmlnYXRlIHN0ZXBzIChvbGQgVUkgc3R5bGUgLSBzaG93IG9ubHkgVVJMKVxuICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBwYXJhbWV0ZXIgd2l0aCBuYW1lICd1cmwnIG9yICdVUkwnLCBvciB0aGUgZmlyc3QgcGFyYW1ldGVyIGlmIG5vbmUgZm91bmRcbiAgICovXG4gIGdldE5hdmlnYXRlVXJsUGFyYW1ldGVyKCk6IFN0ZXBQYXJhbWV0ZXIgfCBudWxsIHtcbiAgICBpZiAodGhpcy5ldmVudFR5cGUgIT09ICduYXZpZ2F0ZScgfHwgIXRoaXMucGFyYW1ldGVycyB8fCB0aGlzLnBhcmFtZXRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLy8gVHJ5IHRvIGZpbmQgcGFyYW1ldGVyIHdpdGggbmFtZSAndXJsJyBvciAnVVJMJ1xuICAgIGNvbnN0IHVybFBhcmFtID0gdGhpcy5wYXJhbWV0ZXJzLmZpbmQocCA9PiBwLm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICd1cmwnKTtcbiAgICAvLyBJZiBub3QgZm91bmQsIHJldHVybiB0aGUgZmlyc3QgcGFyYW1ldGVyIChsaWtlbHkgdGhlIFVSTClcbiAgICByZXR1cm4gdXJsUGFyYW0gfHwgdGhpcy5wYXJhbWV0ZXJzWzBdIHx8IG51bGw7XG4gIH1cblxuICAvKiogQ3VycmVudCBVUkwgdmFsdWUgZm9yIG5hdmlnYXRlIHN0ZXAgKGZvciBUZXN0IERhdGEgbW9kYWwpLiAqL1xuICBnZXROYXZpZ2F0ZVVybFZhbHVlKCk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFyYW0gPSB0aGlzLmdldE5hdmlnYXRlVXJsUGFyYW1ldGVyKCk7XG4gICAgcmV0dXJuIHBhcmFtPy52YWx1ZSA/PyBwYXJhbT8uZGlzcGxheVZhbHVlID8/ICcnO1xuICB9XG5cbiAgLyoqIE9wZW5zIFRlc3QgRGF0YSBtb2RhbCBiZWxvdyB0aGUgZ2l2ZW4gdHJpZ2dlcjsgdXNlZCB3aGVuIGV2ZW50VHlwZSA9PT0gJ25hdmlnYXRlJy4gKi9cbiAgb3BlblRlc3REYXRhTW9kYWwob3JpZ2luOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IEhUTUxFbGVtZW50IHwgTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzSW5zaWRlU3RlcEdyb3VwIHx8IHRoaXMuZXZlbnRUeXBlICE9PSAnbmF2aWdhdGUnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVsID1cbiAgICAgIG9yaWdpbiBpbnN0YW5jZW9mIE1vdXNlRXZlbnRcbiAgICAgICAgPyAob3JpZ2luLmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpXG4gICAgICAgIDogb3JpZ2luIGluc3RhbmNlb2YgRWxlbWVudFJlZlxuICAgICAgICAgID8gb3JpZ2luLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgICA6IChvcmlnaW4gYXMgSFRNTEVsZW1lbnQpO1xuICAgIGNvbnN0IG9yaWdpblJlZiA9IG5ldyBFbGVtZW50UmVmKGVsKTtcbiAgICBcbiAgICAvLyBVc2Ugc3RvcmVkIHN0YXRlIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBjdXJyZW50IFVSTCB2YWx1ZVxuICAgIGNvbnN0IG1vZGFsRGF0YTogVGVzdERhdGFNb2RhbERhdGEgPSB0aGlzLnRlc3REYXRhTW9kYWxTdGF0ZSA/PyB7XG4gICAgICB2YWx1ZTogdGhpcy5nZXROYXZpZ2F0ZVVybFZhbHVlKCksXG4gICAgfTtcbiAgICBcbiAgICBjb25zdCByZWYgPSB0aGlzLnRlc3REYXRhTW9kYWwub3BlbihvcmlnaW5SZWYsIG1vZGFsRGF0YSk7XG4gICAgcmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IFRlc3REYXRhTW9kYWxSZXN1bHQpID0+IHtcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IFRFU1RfREFUQV9NT0RBTF9FRElUX0lOX0RFUFRIKSB7XG4gICAgICAgICAgdGhpcy5tb3JlT3B0aW9ucy5lbWl0KCk7XG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBIYW5kbGUgVGVzdERhdGFNb2RhbERhdGEgb2JqZWN0IChmdWxsIHN0YXRlKVxuICAgICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgJ3ZhbHVlJyBpbiByZXN1bHQpIHtcbiAgICAgICAgICBjb25zdCBtb2RhbERhdGFSZXN1bHQgPSByZXN1bHQgYXMgVGVzdERhdGFNb2RhbERhdGE7XG4gICAgICAgICAgdGhpcy50ZXN0RGF0YU1vZGFsU3RhdGUgPSBtb2RhbERhdGFSZXN1bHQ7IC8vIFN0b3JlIHN0YXRlIGZvciByZW9wZW5pbmdcbiAgICAgICAgICBjb25zdCB1cmxQYXJhbSA9IHRoaXMuZ2V0TmF2aWdhdGVVcmxQYXJhbWV0ZXIoKTtcbiAgICAgICAgICBpZiAodXJsUGFyYW0gJiYgbW9kYWxEYXRhUmVzdWx0LnZhbHVlKSB7XG4gICAgICAgICAgICB1cmxQYXJhbS52YWx1ZSA9IG1vZGFsRGF0YVJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgIHVybFBhcmFtLmRpc3BsYXlWYWx1ZSA9IG1vZGFsRGF0YVJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldGVyQ2hhbmdlLmVtaXQoeyBwYXJhbWV0ZXI6IHVybFBhcmFtLCB2YWx1ZTogbW9kYWxEYXRhUmVzdWx0LnZhbHVlIH0pO1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gSGFuZGxlIHN0cmluZyByZXN1bHQgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpXG4gICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGNvbnN0IHVybFBhcmFtID0gdGhpcy5nZXROYXZpZ2F0ZVVybFBhcmFtZXRlcigpO1xuICAgICAgICAgIGlmICh1cmxQYXJhbSkge1xuICAgICAgICAgICAgdXJsUGFyYW0udmFsdWUgPSByZXN1bHQ7XG4gICAgICAgICAgICB1cmxQYXJhbS5kaXNwbGF5VmFsdWUgPSByZXN1bHQ7XG4gICAgICAgICAgICB0aGlzLnBhcmFtZXRlckNoYW5nZS5lbWl0KHsgcGFyYW1ldGVyOiB1cmxQYXJhbSwgdmFsdWU6IHJlc3VsdCB9KTtcbiAgICAgICAgICAgIC8vIENsZWFyIHN0b3JlZCBzdGF0ZSB3aGVuIHVzaW5nIHN0cmluZyByZXN1bHRcbiAgICAgICAgICAgIHRoaXMudGVzdERhdGFNb2RhbFN0YXRlID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogT3BlbnMgU3RlcCBEZXNjcmlwdGlvbiBtb2RhbCBiZWxvdyB0aGUgZ2l2ZW4gdHJpZ2dlcjsgdXNlZCB3aGVuIGV2ZW50VHlwZSA9PT0gJ2N1c3RvbScuICovXG4gIG9wZW5TdGVwRGVzY3JpcHRpb25Nb2RhbChvcmlnaW46IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgSFRNTEVsZW1lbnQgfCBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZXZlbnRUeXBlICE9PSAnY3VzdG9tJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlbCA9XG4gICAgICBvcmlnaW4gaW5zdGFuY2VvZiBNb3VzZUV2ZW50XG4gICAgICAgID8gKG9yaWdpbi5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50KVxuICAgICAgICA6IG9yaWdpbiBpbnN0YW5jZW9mIEVsZW1lbnRSZWZcbiAgICAgICAgICA/IG9yaWdpbi5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgOiAob3JpZ2luIGFzIEhUTUxFbGVtZW50KTtcbiAgICBjb25zdCBvcmlnaW5SZWYgPSBuZXcgRWxlbWVudFJlZihlbCk7XG4gICAgY29uc3QgcmVmID0gdGhpcy5jdXN0b21FZGl0U3RlcC5vcGVuKG9yaWdpblJlZiwge1xuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZ2V0Q3VzdG9tRGVzY3JpcHRpb24oKSxcbiAgICB9KTtcbiAgICByZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdDogQ3VzdG9tRWRpdFN0ZXBSZXN1bHQpID0+IHtcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IENVU1RPTV9FRElUX1NURVBfRURJVF9JTl9ERVBUSCkge1xuICAgICAgICAgIHRoaXMubW9yZU9wdGlvbnMuZW1pdCgpO1xuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycgJiYgdGhpcy5wYXJhbWV0ZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBmaXJzdCA9IHRoaXMucGFyYW1ldGVyc1swXTtcbiAgICAgICAgICBpZiAoZmlyc3QpIHtcbiAgICAgICAgICAgIGZpcnN0LnZhbHVlID0gcmVzdWx0O1xuICAgICAgICAgICAgZmlyc3QuZGlzcGxheVZhbHVlID0gcmVzdWx0O1xuICAgICAgICAgICAgdGhpcy5wYXJhbWV0ZXJDaGFuZ2UuZW1pdCh7IHBhcmFtZXRlcjogZmlyc3QsIHZhbHVlOiByZXN1bHQgfSk7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgb3BlbkVsZW1lbnRQb3B1cChvcmlnaW46IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgSFRNTEVsZW1lbnQgfCBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNJbnNpZGVTdGVwR3JvdXApIHJldHVybjtcbiAgICBjb25zdCBlbGVtZW50UGFyYW0gPSB0aGlzLnBhcmFtZXRlcnMuZmluZChwID0+IHAubmFtZSA9PT0gJ2VsZW1lbnQnKTtcbiAgICBjb25zdCBlbGVtZW50RGF0YSA9IHRoaXMuY29uZmlnLmVsZW1lbnREYXRhO1xuXG4gICAgbGV0IGVsOiBIVE1MRWxlbWVudDtcbiAgICBpZiAodGhpcy5lbGVtZW50VHJpZ2dlcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgZWwgPSB0aGlzLmVsZW1lbnRUcmlnZ2VyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNsaWNrRWxlbWVudFRyaWdnZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGVsID0gdGhpcy5jbGlja0VsZW1lbnRUcmlnZ2VyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsID1cbiAgICAgICAgb3JpZ2luIGluc3RhbmNlb2YgTW91c2VFdmVudFxuICAgICAgICAgID8gKG9yaWdpbi5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50KVxuICAgICAgICAgIDogb3JpZ2luIGluc3RhbmNlb2YgRWxlbWVudFJlZlxuICAgICAgICAgICAgPyBvcmlnaW4ubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgOiAob3JpZ2luIGFzIEhUTUxFbGVtZW50KTtcbiAgICB9XG4gICAgY29uc3Qgb3JpZ2luUmVmID0gbmV3IEVsZW1lbnRSZWYoZWwpO1xuICAgIGNvbnN0IGVsZW1lbnRUaXRsZSA9IGVsZW1lbnREYXRhPy5sYWJlbCB8fCBlbGVtZW50UGFyYW0/LnZhbHVlIHx8ICdFbGVtZW50JztcbiAgICBjb25zdCBlbGVtZW50U2VsZWN0b3IgPSBlbGVtZW50RGF0YT8uc2VsZWN0b3IgfHwgZWxlbWVudFBhcmFtPy52YWx1ZSB8fCAnJztcbiAgICBjb25zdCBlbGVtZW50TGFiZWxzID0gZWxlbWVudERhdGE/LmxhYmVscyB8fCAoZWxlbWVudERhdGE/LmxhYmVsID8gW2VsZW1lbnREYXRhLmxhYmVsXSA6IFtdKTtcbiAgICBjb25zdCBhbGxMYWJlbHMgPSBlbGVtZW50TGFiZWxzLmxlbmd0aCA+IDAgPyBlbGVtZW50TGFiZWxzIDogWydjc3MnLCAneHBhdGgnLCAnaWQnXTtcbiAgICBcbiAgICBjb25zdCBlbGVtZW50UG9wdXBSZWYgPSB0aGlzLmVsZW1lbnRQb3B1cC5vcGVuKG9yaWdpblJlZiwge1xuICAgICAgZWxlbWVudDoge1xuICAgICAgICB0aXRsZTogZWxlbWVudFRpdGxlLFxuICAgICAgICBzZWxlY3RvcjogZWxlbWVudFNlbGVjdG9yLFxuICAgICAgICBsYWJlbHM6IGVsZW1lbnRMYWJlbHNcbiAgICAgIH0sXG4gICAgICBsYWJlbHM6IGFsbExhYmVscyxcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmNvbmZpZy5kZXNjcmlwdGlvbiB8fCAnRWxlbWVudCBkZXRhaWxzJyxcbiAgICAgIGhlbHBVcmw6ICcnLFxuICAgICAgZWxlbWVudHM6IGVsZW1lbnREYXRhID8gW1xuICAgICAgICB7XG4gICAgICAgICAgdGl0bGU6IGVsZW1lbnRUaXRsZSxcbiAgICAgICAgICBzZWxlY3RvcjogZWxlbWVudFNlbGVjdG9yLFxuICAgICAgICAgIGxhYmVsczogZWxlbWVudExhYmVsc1xuICAgICAgICB9XG4gICAgICBdIDogW11cbiAgICB9KTtcbiAgICBlbGVtZW50UG9wdXBSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdDogRWxlbWVudFBvcHVwUmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJDaGFuZ2UuZW1pdCh7IHBhcmFtZXRlcjogeyBuYW1lOiAnZWxlbWVudCcsIHZhbHVlOiByZXN1bHQsIGRpc3BsYXlWYWx1ZTogcmVzdWx0IH0sIHZhbHVlOiByZXN1bHQgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvbkV2ZW50VHlwZVNlbGVjdChldmVudFR5cGU6IFRlc3RDYXNlRXZlbnRUeXBlKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudFR5cGUgPSBldmVudFR5cGU7XG4gICAgdGhpcy5ldmVudFR5cGVEcm9wZG93bk9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmV2ZW50VHlwZUNoYW5nZS5lbWl0KGV2ZW50VHlwZSk7XG4gIH1cblxuICBvblBhcmFtZXRlckNoYW5nZShwYXJhbWV0ZXI6IFN0ZXBQYXJhbWV0ZXIsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBwYXJhbWV0ZXIudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLnBhcmFtZXRlckNoYW5nZS5lbWl0KHsgcGFyYW1ldGVyLCB2YWx1ZSB9KTtcbiAgfVxuXG4gIG9uRWRpdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ldmVudFR5cGUgPT09ICdjdXN0b20nICYmIHRoaXMuZGVzY3JpcHRpb25UcmlnZ2VyPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICB0aGlzLm9wZW5TdGVwRGVzY3JpcHRpb25Nb2RhbChuZXcgRWxlbWVudFJlZih0aGlzLmRlc2NyaXB0aW9uVHJpZ2dlci5uYXRpdmVFbGVtZW50KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmV2ZW50VHlwZSA9PT0gJ25hdmlnYXRlJyAmJiB0aGlzLnRlc3REYXRhVHJpZ2dlcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5vcGVuVGVzdERhdGFNb2RhbChuZXcgRWxlbWVudFJlZih0aGlzLnRlc3REYXRhVHJpZ2dlci5uYXRpdmVFbGVtZW50KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEVtaXQgZWRpdEluRGVwdGggLSBwcmVmZXIgcmVuZGVyZXIgaW5kZXggKGNvcnJlY3QpOyBzdGVwTnVtYmVyIFwiMTAuM1wiIHBhcnNlcyB0byAxMCAtIHdyb25nXG4gICAgY29uc3QgaWR4ID0gdHlwZW9mIHRoaXMuaW5kZXggPT09ICdudW1iZXInID8gdGhpcy5pbmRleCA6ICh0eXBlb2YgdGhpcy5zdGVwTnVtYmVyID09PSAnbnVtYmVyJyA/IHRoaXMuc3RlcE51bWJlciAtIDEgOiAodHlwZW9mIHRoaXMuc3RlcE51bWJlciA9PT0gJ3N0cmluZycgPyBwYXJzZUludCh0aGlzLnN0ZXBOdW1iZXIsIDEwKSAtIDEgOiAodGhpcy5zdGVwSW5kZXggPz8gMCkpKTtcbiAgICB0aGlzLmVkaXRJbkRlcHRoLmVtaXQoeyBzdGVwOiB0aGlzLmNvbmZpZyBhcyBUZXN0Q2FzZVN0ZXBDb25maWcsIGluZGV4OiBpc05hTihpZHggYXMgbnVtYmVyKSA/IDAgOiAoaWR4IGFzIG51bWJlcikgfSk7XG4gICAgdGhpcy5lZGl0LmVtaXQoKTtcbiAgfVxuXG4gIG9uTGluaygpOiB2b2lkIHtcbiAgICB0aGlzLmxpbmsuZW1pdCgpO1xuICB9XG5cbiAgb25EdXBsaWNhdGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEdXBsaWNhdGluZykgcmV0dXJuO1xuICAgIHRoaXMuZHVwbGljYXRlLmVtaXQoKTtcbiAgfVxuXG4gIG9uRGVsZXRlKCk6IHZvaWQge1xuICAgIHRoaXMuZGVsZXRlLmVtaXQoKTtcbiAgfVxuXG4gIG9uU2tpcFRvZ2dsZSgpOiB2b2lkIHtcbiAgICAvLyBUb2dnbGU6IGlmIGN1cnJlbnRseSB0cnVlIOKGkiBwYXNzIGZhbHNlICh1bnNraXApOyBpZiBjdXJyZW50bHkgZmFsc2UvdW5kZWZpbmVkIOKGkiBwYXNzIHRydWUgKHNraXApXG4gICAgY29uc3QgY3VycmVudGx5U2tpcHBlZCA9ICEhKHRoaXMuY29uZmlnPy5zaG91bGRTa2lwKTtcbiAgICBjb25zdCBzaG91bGRTa2lwTmV4dCA9ICFjdXJyZW50bHlTa2lwcGVkO1xuICAgIHRoaXMuc3RlcFVwZGF0ZS5lbWl0KHsgLi4udGhpcy5jb25maWcsIHNob3VsZFNraXA6IHNob3VsZFNraXBOZXh0IH0gYXMgVGVzdENhc2VTdGVwQ29uZmlnKTtcbiAgfVxuXG4gIG9uTW9yZU9wdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5tb3JlT3B0aW9ucy5lbWl0KCk7XG4gIH1cblxuICBvblZpZXdEZXRhaWxzKGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICBcbiAgICBpZiAoIXRoaXMuY29uZmlnLmRlc2NyaXB0aW9uIHx8IHRoaXMuY29uZmlnLmRlc2NyaXB0aW9uLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5nZXRTdGVwVGl0bGUoKTtcbiAgICAgIHRoaXMudmlld0RldGFpbHMuZW1pdCh7XG4gICAgICAgIGV2ZW50LFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuY29uZmlnLmRlc2NyaXB0aW9uLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdGVwVGl0bGUoKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHRoaXMuZXZlbnRUeXBlKSB7XG4gICAgICBjYXNlICdhaS1hZ2VudCc6XG4gICAgICAgIHJldHVybiAnQWdlbnQgSW5zdHJ1Y3Rpb25zJztcbiAgICAgIGNhc2UgJ2N1c3RvbSc6XG4gICAgICAgIHJldHVybiAnU3RlcCBEZXNjcmlwdGlvbic7XG4gICAgICBjYXNlICduYXZpZ2F0ZSc6XG4gICAgICAgIHJldHVybiAnTmF2aWdhdGUgU3RlcCc7XG4gICAgICBjYXNlICd0eXBlJzpcbiAgICAgICAgcmV0dXJuICdUeXBlIFN0ZXAnO1xuICAgICAgY2FzZSAnY2xpY2snOlxuICAgICAgICByZXR1cm4gJ0NsaWNrIFN0ZXAnO1xuICAgICAgY2FzZSAnZG91YmxlQ2xpY2snOlxuICAgICAgICByZXR1cm4gJ0RvdWJsZSBDbGljayBTdGVwJztcbiAgICAgIGNhc2UgJ3ByZXNzRW50ZXInOlxuICAgICAgICByZXR1cm4gJ1ByZXNzIEVudGVyIFN0ZXAnO1xuICAgICAgY2FzZSAnZW50ZXInOlxuICAgICAgICByZXR1cm4gJ0VudGVyIFN0ZXAnO1xuICAgICAgY2FzZSAndmVyaWZ5JzpcbiAgICAgICAgcmV0dXJuICdWZXJpZnkgU3RlcCc7XG4gICAgICBjYXNlICd3YWl0JzpcbiAgICAgICAgcmV0dXJuICdXYWl0IFN0ZXAnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdTdGVwIERldGFpbHMnO1xuICAgIH1cbiAgfVxuXG4gIG9uU2VsZWN0aW9uQ2hhbmdlKGNoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkID0gY2hlY2tlZDtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KGNoZWNrZWQpO1xuICB9XG5cbiAgdG9nZ2xlRXZlbnRUeXBlRHJvcGRvd24oKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudFR5cGVEcm9wZG93bk9wZW4gPSAhdGhpcy5ldmVudFR5cGVEcm9wZG93bk9wZW47XG4gIH1cblxuICBjbG9zZUV2ZW50VHlwZURyb3Bkb3duKCk6IHZvaWQge1xuICAgIHRoaXMuZXZlbnRUeXBlRHJvcGRvd25PcGVuID0gZmFsc2U7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gIG9uRG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRyb3Bkb3duQ29udGFpbmVyICYmICF0aGlzLmRyb3Bkb3duQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgdGhpcy5jbG9zZUV2ZW50VHlwZURyb3Bkb3duKCk7XG4gICAgfVxuICB9XG5cbiAgY2xpY2tPbkFjdGlvbihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuaXNJbnNpZGVTdGVwR3JvdXApIHJldHVybjtcbiAgICB0aGlzLmNsaWNrQWN0aW9uLmVtaXQoZXZlbnQpO1xuICB9XG59XG4iLCI8ZGl2IFtjbGFzc109XCInc3RlcC1yb3cgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTMgY3FhLXB5LTIgY3FhLXB4LTQgJyArIChpc0luc2lkZUxvb3AgJiYgaXNJbnNpZGVTdGVwR3JvdXAgPyAnY3FhLXBsLTIwIGNxYS1wci00JyA6IChpc0luc2lkZUxvb3AgfHwgaXNJbnNpZGVTdGVwR3JvdXApID8gJ2NxYS1wbC0xMCBjcWEtcHItNCcgOiAnJykgKyAoY29uZmlnPy5zaG91bGRTa2lwID8gJyBjcWEtc3RlcC1za2lwcGVkJyA6ICcnKVwiIFtzdHlsZS5vcGFjaXR5XT1cImNvbmZpZz8uc2hvdWxkU2tpcCA/ICcwLjYnIDogbnVsbFwiIHN0eWxlPVwiYm9yZGVyLXRvcDogMXB4IHNvbGlkICNFNUU3RUI7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjRTVFN0VCXCI+XG5cbiAgPGRpdiBjbGFzcz1cImNxYS1pbmxpbmUtZmxleCBjcWEtaXRlbXMtY2VudGVyXCI+XG4gICAgPCEtLSBEcmFnIEhhbmRsZSBJY29uICh3aGVuIGlzUmVvcmRlciBpcyB0cnVlIGFuZCBub3QgaW5zaWRlIHN0ZXAgZ3JvdXAgLSBzdGVwcyBpbnNpZGUgc3RlcCBncm91cHMgY2Fubm90IGJlIHJlb3JkZXJlZCkgLS0+XG4gICAgPGRpdiAqbmdJZj1cImlzUmVvcmRlciAmJiAhaXNJbnNpZGVTdGVwR3JvdXBcIiBjbGFzcz1cImNxYS1tci0yIGNxYS1jdXJzb3ItbW92ZSBjcWEtdGV4dC1bIzZCNzI4MF0gaG92ZXI6Y3FhLXRleHQtWyMxMTE4MjddXCI+XG4gICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjNcIiBjeT1cIjNcIiByPVwiMS41XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiLz5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjhcIiBjeT1cIjNcIiByPVwiMS41XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiLz5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjEzXCIgY3k9XCIzXCIgcj1cIjEuNVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIi8+XG4gICAgICAgIDxjaXJjbGUgY3g9XCIzXCIgY3k9XCI4XCIgcj1cIjEuNVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIi8+XG4gICAgICAgIDxjaXJjbGUgY3g9XCI4XCIgY3k9XCI4XCIgcj1cIjEuNVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIi8+XG4gICAgICAgIDxjaXJjbGUgY3g9XCIxM1wiIGN5PVwiOFwiIHI9XCIxLjVcIiBmaWxsPVwiY3VycmVudENvbG9yXCIvPlxuICAgICAgICA8Y2lyY2xlIGN4PVwiM1wiIGN5PVwiMTNcIiByPVwiMS41XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiLz5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjhcIiBjeT1cIjEzXCIgcj1cIjEuNVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIi8+XG4gICAgICAgIDxjaXJjbGUgY3g9XCIxM1wiIGN5PVwiMTNcIiByPVwiMS41XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gQ2hlY2tib3ggKHdoZW4gaXNSZW9yZGVyIGlzIGZhbHNlLCBlZGl0YWJsZSwgYW5kIG5vdCBpbnNpZGUgc3RlcCBncm91cCAtIGhpZGUgZm9yIHN0ZXBzIGluc2lkZSBzdGVwIGdyb3VwcykgLS0+XG4gICAgPGxhYmVsICpuZ0lmPVwiZWRpdGFibGUgJiYgIWlzUmVvcmRlciAmJiAhaXNJbnNpZGVTdGVwR3JvdXBcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWN1cnNvci1wb2ludGVyIGNxYS1yZWxhdGl2ZSBjcWEtbXItMlwiPlxuICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIGNsYXNzPVwiY3FhLWgtNCBjcWEtdy00IGNxYS1jdXJzb3ItcG9pbnRlciBjcWEtdHJhbnNpdGlvbi1hbGwgY3FhLWFwcGVhcmFuY2Utbm9uZSBjcWEtcm91bmRlZCBzaGFkb3cgaG92ZXI6Y3FhLXNoYWRvdy1tZCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1zbGF0ZS0zMDAgY3FhLWZsZXgtc2hyaW5rLTBcIlxuICAgICAgICBbY2xhc3MuY3FhLWJnLVsjM0Y0M0VFXV09XCJzZWxlY3RlZFwiXG4gICAgICAgIFtjbGFzcy5jcWEtYm9yZGVyLVsjM0Y0M0VFXV09XCJzZWxlY3RlZFwiXG4gICAgICAgIGlkPVwiY2hlY2tcIiAvPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYWJzb2x1dGUgY3FhLXRleHQtd2hpdGUgY3FhLXRvcC0xLzIgY3FhLWxlZnQtMS8yIGNxYS0tdHJhbnNsYXRlLXgtMS8yIGNxYS0tdHJhbnNsYXRlLXktMS8yIGNxYS1wb2ludGVyLWV2ZW50cy1ub25lIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyXCJcbiAgICAgICAgW2NsYXNzLmNxYS1vcGFjaXR5LTBdPVwiIXNlbGVjdGVkXCJcbiAgICAgICAgW2NsYXNzLmNxYS1vcGFjaXR5LTEwMF09XCJzZWxlY3RlZFwiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxM1wiIHZpZXdCb3g9XCIwIDAgMTIgMTNcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTEwIDMuMTI1TDQuNSA4LjYyNUwyIDYuMTI1XCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgICA8L3NwYW4+XG4gICAgPC9sYWJlbD5cbiAgICA8IS0tIExvY2sgaWNvbiBmb3Igc3RlcHMgaW5zaWRlIGEgc3RlcCBncm91cCAobm9uLWVkaXRhYmxlIGluZGljYXRvcikgLS0+XG4gICAgPGRpdiAqbmdJZj1cImlzSW5zaWRlU3RlcEdyb3VwXCIgY2xhc3M9XCJjcWEtbWwtMSBjcWEtbXItMSBjcWEtdGV4dC1bIzlDQTNBRl1cIj5cbiAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICA8cGF0aCBkPVwiTTExLjk5OTggNS42NjY2N0gxMS4zMzMyVjQuMzMzMzNDMTEuMzMzMiAyLjQ5MzMzIDkuODM5ODQgMSA3Ljk5OTg0IDFDNi4xNTk4NCAxIDQuNjY2NSAyLjQ5MzMzIDQuNjY2NSA0LjMzMzMzVjUuNjY2NjdIMy45OTk4NEMzLjI2NjUgNS42NjY2NyAyLjY2NjUgNi4yNjY2NyAyLjY2NjUgN1YxMy42NjY3QzIuNjY2NSAxNC40IDMuMjY2NSAxNSAzLjk5OTg0IDE1SDExLjk5OThDMTIuNzMzMiAxNSAxMy4zMzMyIDE0LjQgMTMuMzMzMiAxMy42NjY3VjdDMTMuMzMzMiA2LjI2NjY3IDEyLjczMzIgNS42NjY2NyAxMS45OTk4IDUuNjY2NjdaTTUuOTk5ODQgNC4zMzMzM0M1Ljk5OTg0IDMuMjI2NjcgNi44OTMxNyAyLjMzMzMzIDcuOTk5ODQgMi4zMzMzM0M5LjEwNjUgMi4zMzMzMyA5Ljk5OTg0IDMuMjI2NjcgOS45OTk4NCA0LjMzMzMzVjUuNjY2NjdINS45OTk4NFY0LjMzMzMzWk0xMS45OTk4IDEzLjY2NjdIMy45OTk4NFY3SDExLjk5OThWMTMuNjY2N1pNNy45OTk4NCAxMS42NjY3QzguNzMzMTcgMTEuNjY2NyA5LjMzMzE3IDExLjA2NjcgOS4zMzMxNyAxMC4zMzMzQzkuMzMzMTcgOS42IDguNzMzMTcgOSA3Ljk5OTg0IDlDNy4yNjY1IDkgNi42NjY1IDkuNiA2LjY2NjUgMTAuMzMzM0M2LjY2NjUgMTEuMDY2NyA3LjI2NjUgMTEuNjY2NyA3Ljk5OTg0IDExLjY2NjdaXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFN0ZXAgTnVtYmVyIC0tPlxuICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjNkI3MjgwXSBjcWEtdGV4dC1bMTRweF0gY3FhLWxlYWRpbmctWzE4cHhdIGNxYS1taW4tdy1bMzJweF1cIj5cbiAgICB7eyBzdGVwTnVtYmVyIH19XG4gIDwvc3Bhbj5cblxuICA8IS0tIEV2ZW50IFR5cGUgU2VsZWN0b3IgKFBpbGwgQnV0dG9uKSAjIyMjIChjbGljayk9XCJ0b2dnbGVFdmVudFR5cGVEcm9wZG93bigpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1yZWxhdGl2ZVwiICNkcm9wZG93bkNvbnRhaW5lcj5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBcbiAgICAgIFthdHRyLnRpdGxlXT1cImdldEN1cnJlbnRFdmVudFR5cGVDb25maWcoKS5sYWJlbFwiXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJnZXRDdXJyZW50RXZlbnRUeXBlQ29uZmlnKCkuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgIFtzdHlsZS5jb2xvcl09XCJnZXRDdXJyZW50RXZlbnRUeXBlQ29uZmlnKCkuY29sb3JcIlxuICAgICAgY2xhc3M9XCJjcWEtdy04IGNxYS1oLTggY3FhLXJvdW5kZWQtbGcgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLWN1cnNvci1wb2ludGVyXCI+XG4gICAgICA8IS0tIEljb24gLS0+XG4gICAgICA8c3BhbiAqbmdJZj1cImdldEN1cnJlbnRFdmVudFR5cGVDb25maWcoKS5pY29uID09PSAncGFwZXJfcGxhbmUnXCI+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNMS43NSA2LjQxNjYzTDEyLjgzMzMgMS4xNjY2M0w3LjU4MzMzIDEyLjI1TDYuNDE2NjcgNy41ODMyOUwxLjc1IDYuNDE2NjNaXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiZ2V0Q3VycmVudEV2ZW50VHlwZUNvbmZpZygpLmljb24gPT09ICdzdGFyJ1wiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgZD1cIk01Ljc5NyA5LjA0MTY1QzUuNzQ0OTIgOC44Mzk3NyA1LjYzOTY5IDguNjU1NTQgNS40OTIyNyA4LjUwODEyQzUuMzQ0ODUgOC4zNjA3IDUuMTYwNjIgOC4yNTU0OCA0Ljk1ODc1IDguMjAzNEwxLjM4IDcuMjgwNTdDMS4zMTg5NCA3LjI2MzI0IDEuMjY1MiA3LjIyNjQ2IDEuMjI2OTQgNy4xNzU4M0MxLjE4ODY3IDcuMTI1MTkgMS4xNjc5NyA3LjA2MzQ1IDEuMTY3OTcgNi45OTk5OEMxLjE2Nzk3IDYuOTM2NTEgMS4xODg2NyA2Ljg3NDc4IDEuMjI2OTQgNi44MjQxNEMxLjI2NTIgNi43NzM1IDEuMzE4OTQgNi43MzY3MyAxLjM4IDYuNzE5NEw0Ljk1ODc1IDUuNzk1OThDNS4xNjA1NSA1Ljc0Mzk1IDUuMzQ0NzMgNS42Mzg4MiA1LjQ5MjE1IDUuNDkxNTFDNS42Mzk1NiA1LjM0NDE5IDUuNzQ0ODMgNS4xNjAwOCA1Ljc5NyA0Ljk1ODMyTDYuNzE5ODMgMS4zNzk1N0M2LjczNjk4IDEuMzE4MjcgNi43NzM3MiAxLjI2NDI3IDYuODI0NDMgMS4yMjU4QzYuODc1MTUgMS4xODczMyA2LjkzNzA1IDEuMTY2NSA3LjAwMDcgMS4xNjY1QzcuMDY0MzYgMS4xNjY1IDcuMTI2MjYgMS4xODczMyA3LjE3Njk4IDEuMjI1OEM3LjIyNzY5IDEuMjY0MjcgNy4yNjQ0MiAxLjMxODI3IDcuMjgxNTggMS4zNzk1N0w4LjIwMzgzIDQuOTU4MzJDOC4yNTU5MSA1LjE2MDE5IDguMzYxMTMgNS4zNDQ0MiA4LjUwODU1IDUuNDkxODRDOC42NTU5NyA1LjYzOTI2IDguODQwMiA1Ljc0NDQ5IDkuMDQyMDggNS43OTY1N0wxMi42MjA4IDYuNzE4ODJDMTIuNjgyNCA2LjczNTc5IDEyLjczNjYgNi43NzI0OSAxMi43NzUzIDYuODIzMjhDMTIuODE0IDYuODc0MDcgMTIuODM0OSA2LjkzNjE0IDEyLjgzNDkgNi45OTk5OEMxMi44MzQ5IDcuMDYzODIgMTIuODE0IDcuMTI1OSAxMi43NzUzIDcuMTc2NjlDMTIuNzM2NiA3LjIyNzQ4IDEyLjY4MjQgNy4yNjQxNyAxMi42MjA4IDcuMjgxMTVMOS4wNDIwOCA4LjIwMzRDOC44NDAyIDguMjU1NDggOC42NTU5NyA4LjM2MDcgOC41MDg1NSA4LjUwODEyQzguMzYxMTMgOC42NTU1NCA4LjI1NTkxIDguODM5NzcgOC4yMDM4MyA5LjA0MTY1TDcuMjgxIDEyLjYyMDRDNy4yNjM4NCAxMi42ODE3IDcuMjI3MTEgMTIuNzM1NyA3LjE3NjM5IDEyLjc3NDJDNy4xMjU2OCAxMi44MTI2IDcuMDYzNzcgMTIuODMzNSA3LjAwMDEyIDEyLjgzMzVDNi45MzY0NyAxMi44MzM1IDYuODc0NTYgMTIuODEyNiA2LjgyMzg1IDEyLjc3NDJDNi43NzMxNCAxMi43MzU3IDYuNzM2NCAxMi42ODE3IDYuNzE5MjUgMTIuNjIwNEw1Ljc5NyA5LjA0MTY1WlwiXG4gICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICA8cGF0aCBkPVwiTTExLjY2NiAxLjc1VjQuMDgzMzNcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgPHBhdGggZD1cIk0xMi44MzMzIDIuOTE2NjNIMTAuNVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICA8cGF0aCBkPVwiTTIuMzMzOTggOS45MTY2M1YxMS4wODMzXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNMi45MTY2NyAxMC41SDEuNzVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCJnZXRDdXJyZW50RXZlbnRUeXBlQ29uZmlnKCkuaWNvbiA9PT0gJ1QnXCI+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNMi4zMzM5OCA0LjA4MzI1VjIuMzMzMjVIMTEuNjY3M1Y0LjA4MzI1XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiXG4gICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNNS4yNSAxMS42NjY3SDguNzVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgPHBhdGggZD1cIk03IDIuMzMzMjVWMTEuNjY2NlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiAqbmdJZj1cImdldEN1cnJlbnRFdmVudFR5cGVDb25maWcoKS5pY29uID09PSAnY3Vyc29yJ1wiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICA8cGF0aCBkPVwiTTEuNzUgMS43NUw1Ljg3NDE3IDExLjY0OTJMNy4zMzgzMyA3LjMzODMzTDExLjY0OTIgNS44NzQxN0wxLjc1IDEuNzVaXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNNy41ODM5OCA3LjU4MzI1TDExLjA4NCAxMS4wODMzXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiZ2V0Q3VycmVudEV2ZW50VHlwZUNvbmZpZygpLmljb24gPT09ICdjdXJzb3ItZG91YmxlJ1wiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTguMTY2NjcgMi4zOTE2TDcgMy40OTk5M1wiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk0yLjk3NDg3IDQuNjY2NjJMMS4yODMyIDQuMTk5OTVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjI1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNMy41MDA5MSA3TDIuMzkyNTggOC4xNjY2N1wiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk00LjE5OTIyIDEuMjgzNDVMNC42NjU4OSAyLjk3NTExXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4yNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTUuMjcxMTQgNS42NTI1NUM1LjI0ODUyIDUuNTk5MjYgNS4yNDIzNCA1LjU0MDQzIDUuMjUzMzggNS40ODM2MUM1LjI2NDQzIDUuNDI2NzggNS4yOTIyIDUuMzc0NTUgNS4zMzMxMyA1LjMzMzYyQzUuMzc0MDcgNS4yOTI2OSA1LjQyNjMgNS4yNjQ5MiA1LjQ4MzEyIDUuMjUzODdDNS41Mzk5NCA1LjI0MjgzIDUuNTk4NzcgNS4yNDkwMSA1LjY1MjA2IDUuMjcxNjNMMTIuMDY4NyA3Ljg5NjYzQzEyLjEyNTggNy45MjAwNiAxMi4xNzQgNy45NjEgMTIuMjA2NCA4LjAxMzU3QzEyLjIzODggOC4wNjYxMyAxMi4yNTM2IDguMTI3NjEgMTIuMjQ4OCA4LjE4OTE1QzEyLjI0NCA4LjI1MDY5IDEyLjIxOTggOC4zMDkxMiAxMi4xNzk3IDguMzU2MDNDMTIuMTM5NiA4LjQwMjk1IDEyLjA4NTYgOC40MzU5MiAxMi4wMjU2IDguNDUwMjFMOS40ODg2NCA5LjA1NzQ2QzkuMzgzOTEgOS4wODI0OCA5LjI4ODE1IDkuMTM1OTkgOS4yMTE5NiA5LjIxMjA4QzkuMTM1NzggOS4yODgxNiA5LjA4MjEzIDkuMzgzODUgOS4wNTY5OCA5LjQ4ODU1TDguNDUwMzEgMTIuMDI2QzguNDM2MTcgMTIuMDg2MyA4LjQwMzIzIDEyLjE0MDUgOC4zNTYyNiAxMi4xODA4QzguMzA5MjggMTIuMjIxMSA4LjI1MDcxIDEyLjI0NTQgOC4xODkgMTIuMjUwMkM4LjEyNzMgMTIuMjU1IDguMDY1NjcgMTIuMjQwMSA4LjAxMzAyIDEyLjIwNzVDNy45NjAzNyAxMi4xNzUgNy45MTk0NCAxMi4xMjY2IDcuODk2MTQgMTIuMDY5Mkw1LjI3MTE0IDUuNjUyNTVaXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4yNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiAqbmdJZj1cImdldEN1cnJlbnRFdmVudFR5cGVDb25maWcoKS5pY29uID09PSAnZW50ZXInXCIgY2xhc3M9XCJjcWEtZW50ZXIta2V5LWljb24gY3FhLWlubGluZS1mbGV4IGNxYS1mbGV4LXNocmluay0wXCIgc3R5bGU9XCJ3aWR0aDogMjBweDsgaGVpZ2h0OiAyMHB4O1wiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMzIgMzJcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3M9XCJjcWEtdy1mdWxsIGNxYS1oLWZ1bGxcIj5cbiAgICAgICAgICA8cGF0aCBmaWxsPVwiIzZCNzI4MFwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgxNCw1KVwiIGQ9XCJNMCAwIEM0LjI5IDAgOC41OCAwIDEzIDAgQzEzIDcuMjYgMTMgMTQuNTIgMTMgMjIgQzUuNzQgMjIgLTEuNTIgMjIgLTkgMjIgQy05IDE2LjcyIC05IDExLjQ0IC05IDYgQy02LjAzIDYgLTMuMDYgNiAwIDYgQzAgNC4wMiAwIDIuMDQgMCAwIFogTTIgMiBDMiAzLjk4IDIgNS45NiAyIDggQy0wLjk3IDggLTMuOTQgOCAtNyA4IEMtNyAxMS45NiAtNyAxNS45MiAtNyAyMCBDLTEuMDYgMjAgNC44OCAyMCAxMSAyMCBDMTEgMTQuMDYgMTEgOC4xMiAxMSAyIEM4LjAzIDIgNS4wNiAyIDIgMiBaXCIvPlxuICAgICAgICAgIDxwYXRoIGZpbGw9XCIjNkI3MjgwXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDE5LDEzKVwiIGQ9XCJNMCAwIEMwLjY2IDAgMS4zMiAwIDIgMCBDMiAyLjMxIDIgNC42MiAyIDcgQzAuMDIgNyAtMS45NiA3IC00IDcgQy00LjMzIDguMzIgLTQuNjYgOS42NCAtNSAxMSBDLTYuNjUgOS42OCAtOC4zIDguMzYgLTEwIDcgQy04LjYzMDE2NDk3IDMuODM4ODQyMjQgLTguMDEwOTM2MiAzLjAwNzI5MDggLTUgMSBDLTQuNjcgMi4zMiAtNC4zNCAzLjY0IC00IDUgQy0yLjY4IDUgLTEuMzYgNSAwIDUgQzAgMy4zNSAwIDEuNyAwIDAgWlwiLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiAqbmdJZj1cImdldEN1cnJlbnRFdmVudFR5cGVDb25maWcoKS5pY29uID09PSAnY2xvY2snXCI+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBkPVwiTTYuOTk5MzUgMTIuODMzNEMxMC4yMjEgMTIuODMzNCAxMi44MzI3IDEwLjIyMTcgMTIuODMyNyA3LjAwMDA4QzEyLjgzMjcgMy43Nzg0MiAxMC4yMjEgMS4xNjY3NSA2Ljk5OTM1IDEuMTY2NzVDMy43Nzc2OSAxLjE2Njc1IDEuMTY2MDIgMy43Nzg0MiAxLjE2NjAyIDcuMDAwMDhDMS4xNjYwMiAxMC4yMjE3IDMuNzc3NjkgMTIuODMzNCA2Ljk5OTM1IDEyLjgzMzRaXCJcbiAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNNyAzLjVWN0w5LjMzMzMzIDguMTY2NjdcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCJnZXRDdXJyZW50RXZlbnRUeXBlQ29uZmlnKCkuaWNvbiA9PT0gJ3NldHRpbmdzJ1wiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICA8cGF0aCBkPVwiTTcgNC42NjY2N0M1LjcxMTMzIDQuNjY2NjcgNC42NjY2NyA1LjcxMTMzIDQuNjY2NjcgN0M0LjY2NjY3IDguMjg4NjcgNS43MTEzMyA5LjMzMzMzIDcgOS4zMzMzM0M4LjI4ODY3IDkuMzMzMzMgOS4zMzMzMyA4LjI4ODY3IDkuMzMzMzMgN0M5LjMzMzMzIDUuNzExMzMgOC4yODg2NyA0LjY2NjY3IDcgNC42NjY2N1pcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNMTEuMDgzMyA3LjU4MzMzQzExLjE0MTcgNy4yOTE2NyAxMS4xNDE3IDYuNzA4MzMgMTEuMDgzMyA2LjQxNjY3TDEyLjI1IDUuODMzMzNDMTIuNDE2NyA1LjcwODMzIDEyLjQ4MzMgNS40ODMzMyAxMi40MTY3IDUuMjVMMTEuNjY2NyAzLjQxNjY3QzExLjYgMy4xODMzMyAxMS4zOTE3IDMuMDQxNjcgMTEuMTQxNyAzLjA0MTY3TDkuOTE2NjcgMy41QzkuNTY2NjcgMy4yMDgzMyA5LjE5MTY3IDIuOTU4MzMgOC43NSAyLjc5MTY3TDguNCAxLjQ1ODMzQzguMzQxNjcgMS4yMjUgOC4xNDE2NyAxLjE2NjY3IDcuOTMzMzMgMS4xNjY2N0g2LjA2NjY3QzUuODU4MzMgMS4xNjY2NyA1LjY1ODMzIDEuMjI1IDUuNiAxLjQ1ODMzTDUuMjUgMi43OTE2N0M0LjgwODMzIDIuOTU4MzMgNC40MzMzMyAzLjIwODMzIDQuMDgzMzMgMy41TDIuODU4MzMgMy4wNDE2N0MyLjYwODMzIDMuMDQxNjcgMi40IDMuMTgzMzMgMi4zMzMzMyAzLjQxNjY3TDEuNTgzMzMgNS4yNUMxLjUxNjY3IDUuNDgzMzMgMS41ODMzMyA1LjcwODMzIDEuNzUgNS44MzMzM0wyLjkxNjY3IDYuNDE2NjdDMi44NTgzMyA2LjcwODMzIDIuODU4MzMgNy4yOTE2NyAyLjkxNjY3IDcuNTgzMzNMMS43NSA4LjE2NjY3QzEuNTgzMzMgOC4yOTE2NyAxLjUxNjY3IDguNTE2NjcgMS41ODMzMyA4Ljc1TDIuMzMzMzMgMTAuNTgzM0MyLjQgMTAuODE2NyAyLjYwODMzIDEwLjk1ODMgMi44NTgzMyAxMC45NTgzTDQuMDgzMzMgMTAuNUM0LjQzMzMzIDEwLjc5MTcgNC44MDgzMyAxMS4wNDE3IDUuMjUgMTEuMjA4M0w1LjYgMTIuNTQxN0M1LjY1ODMzIDEyLjc3NSA1Ljg1ODMzIDEyLjgzMzMgNi4wNjY2NyAxMi44MzMzSDcuOTMzMzNDOC4xNDE2NyAxMi44MzMzIDguMzQxNjcgMTIuNzc1IDguNCAxMi41NDE3TDguNzUgMTEuMjA4M0M5LjE5MTY3IDExLjA0MTcgOS41NjY2NyAxMC43OTE3IDkuOTE2NjcgMTAuNUwxMS4xNDE3IDEwLjk1ODNDMTEuMzkxNyAxMC45NTgzIDExLjYgMTAuODE2NyAxMS42NjY3IDEwLjU4MzNMMTIuNDE2NyA4Ljc1QzEyLjQ4MzMgOC41MTY2NyAxMi40MTY3IDguMjkxNjcgMTIuMjUgOC4xNjY2N0wxMS4wODMzIDcuNTgzMzNaXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiAqbmdJZj1cImdldEN1cnJlbnRFdmVudFR5cGVDb25maWcoKS5pY29uID09PSAnY2hlY2snXCI+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNMTEuNjY2NyAzLjVMNS4yNSAxMC41TDIuMzMzMzMgNy41ODMzM1wiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9zcGFuPlxuXG4gICAgICA8IS0tIExhYmVsIChzaG93IG9ubHkgd2hlbiBubyBpY29uOyBhbGwgdHlwZXMgaGF2ZSBpY29uIG5vdyDigJMgdG9vbHRpcCBvbiBidXR0b24pIC0tPlxuICAgICAgPHNwYW4gKm5nSWY9XCIhZ2V0Q3VycmVudEV2ZW50VHlwZUNvbmZpZygpLmljb25cIiBjbGFzcz1cImNxYS10ZXh0LVsjNDMyREQ3XSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bVwiPnt7XG4gICAgICAgIGdldEN1cnJlbnRFdmVudFR5cGVDb25maWcoKS5sYWJlbCB9fTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDwhLS0gRHJvcGRvd24gTWVudSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiZXZlbnRUeXBlRHJvcGRvd25PcGVuXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICBjbGFzcz1cImNxYS1hYnNvbHV0ZSBjcWEtdG9wLWZ1bGwgY3FhLWxlZnQtMCBjcWEtbXQtMSBjcWEtYmctd2hpdGUgY3FhLXJvdW5kZWQtbGcgY3FhLXNoYWRvdy1sZyBjcWEtYm9yZGVyIGNxYS1ib3JkZXItZ3JheS0yMDAgY3FhLXotNTAgY3FhLW1pbi13LVsxNTBweF0gY3FhLXB5LTFcIj5cbiAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGV0YyBvZiBldmVudFR5cGVDb25maWdzXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkV2ZW50VHlwZVNlbGVjdChldGMudHlwZSlcIlxuICAgICAgICBbY2xhc3MuY3FhLWJnLXByaW1hcnktNTBdPVwiZXZlbnRUeXBlID09PSBldGMudHlwZVwiXG4gICAgICAgIGNsYXNzPVwiY3FhLXctZnVsbCBjcWEtcHgtMyBjcWEtcHktMiBjcWEtdGV4dC1sZWZ0IGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGhvdmVyOmNxYS1iZy1ncmF5LTUwIGNxYS10cmFuc2l0aW9uLWNvbG9yc1wiPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImV0Yy5pY29uID09PSAncGFwZXJfcGxhbmUnXCI+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTEgNS41TDExIDFNMTEgMUw3LjUgMTFMNiA2LjVMMSA1LjVNMTEgMUwxIDUuNVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJldGMuaWNvbiA9PT0gJ3N0YXInXCI+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTYgMUw3LjUgNC41TDExIDVMNy41IDUuNUw2IDlMNC41IDUuNUwxIDVMNC41IDQuNUw2IDFaXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJldGMuaWNvbiA9PT0gJ1QnXCI+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTIuMzMzOTggNC4wODMyNVYyLjMzMzI1SDExLjY2NzNWNC4wODMyNVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTUuMjUgMTEuNjY2N0g4Ljc1XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNNyAyLjMzMzI1VjExLjY2NjZcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiZXRjLmljb24gPT09ICdjdXJzb3InXCI+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTIgMkw5IDFMMTAgOEw3IDdMNSA5TDQgN0wyIDJaXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImV0Yy5pY29uID09PSAnY3Vyc29yLWRvdWJsZSdcIj5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cGF0aCBkPVwiTTguMTY2NjcgMi4zOTE2TDcgMy40OTk5M1wiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk0yLjk3NDg3IDQuNjY2NjJMMS4yODMyIDQuMTk5OTVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjI1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNMy41MDA5MSA3TDIuMzkyNTggOC4xNjY2N1wiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk00LjE5OTIyIDEuMjgzNDVMNC42NjU4OSAyLjk3NTExXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4yNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTUuMjcxMTQgNS42NTI1NUM1LjI0ODUyIDUuNTk5MjYgNS4yNDIzNCA1LjU0MDQzIDUuMjUzMzggNS40ODM2MUM1LjI2NDQzIDUuNDI2NzggNS4yOTIyIDUuMzc0NTUgNS4zMzMxMyA1LjMzMzYyQzUuMzc0MDcgNS4yOTI2OSA1LjQyNjMgNS4yNjQ5MiA1LjQ4MzEyIDUuMjUzODdDNS41Mzk5NCA1LjI0MjgzIDUuNTk4NzcgNS4yNDkwMSA1LjY1MjA2IDUuMjcxNjNMMTIuMDY4NyA3Ljg5NjYzQzEyLjEyNTggNy45MjAwNiAxMi4xNzQgNy45NjEgMTIuMjA2NCA4LjAxMzU3QzEyLjIzODggOC4wNjYxMyAxMi4yNTM2IDguMTI3NjEgMTIuMjQ4OCA4LjE4OTE1QzEyLjI0NCA4LjI1MDY5IDEyLjIxOTggOC4zMDkxMiAxMi4xNzk3IDguMzU2MDNDMTIuMTM5NiA4LjQwMjk1IDEyLjA4NTYgOC40MzU5MiAxMi4wMjU2IDguNDUwMjFMOS40ODg2NCA5LjA1NzQ2QzkuMzgzOTEgOS4wODI0OCA5LjI4ODE1IDkuMTM1OTkgOS4yMTE5NiA5LjIxMjA4QzkuMTM1NzggOS4yODgxNiA5LjA4MjEzIDkuMzgzODUgOS4wNTY5OCA5LjQ4ODU1TDguNDUwMzEgMTIuMDI2QzguNDM2MTcgMTIuMDg2MyA4LjQwMzIzIDEyLjE0MDUgOC4zNTYyNiAxMi4xODA4QzguMzA5MjggMTIuMjIxMSA4LjI1MDcxIDEyLjI0NTQgOC4xODkgMTIuMjUwMkM4LjEyNzMgMTIuMjU1IDguMDY1NjcgMTIuMjQwMSA4LjAxMzAyIDEyLjIwNzVDNy45NjAzNyAxMi4xNzUgNy45MTk0NCAxMi4xMjY2IDcuODk2MTQgMTIuMDY5Mkw1LjI3MTE0IDUuNjUyNTVaXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4yNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICA8L3N2Zz4gIFxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiZXRjLmljb24gPT09ICdlbnRlcidcIiBjbGFzcz1cImNxYS1lbnRlci1rZXktaWNvbiBjcWEtaW5saW5lLWZsZXggY3FhLWZsZXgtc2hyaW5rLTBcIiBzdHlsZT1cIndpZHRoOiAxNnB4OyBoZWlnaHQ6IDE2cHg7XCI+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDMyIDMyXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzPVwiY3FhLXctZnVsbCBjcWEtaC1mdWxsXCI+XG4gICAgICAgICAgICA8cGF0aCBmaWxsPVwiIzZCNzI4MFwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgxNCw1KVwiIGQ9XCJNMCAwIEM0LjI5IDAgOC41OCAwIDEzIDAgQzEzIDcuMjYgMTMgMTQuNTIgMTMgMjIgQzUuNzQgMjIgLTEuNTIgMjIgLTkgMjIgQy05IDE2LjcyIC05IDExLjQ0IC05IDYgQy02LjAzIDYgLTMuMDYgNiAwIDYgQzAgNC4wMiAwIDIuMDQgMCAwIFogTTIgMiBDMiAzLjk4IDIgNS45NiAyIDggQy0wLjk3IDggLTMuOTQgOCAtNyA4IEMtNyAxMS45NiAtNyAxNS45MiAtNyAyMCBDLTEuMDYgMjAgNC44OCAyMCAxMSAyMCBDMTEgMTQuMDYgMTEgOC4xMiAxMSAyIEM4LjAzIDIgNS4wNiAyIDIgMiBaXCIvPlxuICAgICAgICAgICAgPHBhdGggZmlsbD1cIiM2QjcyODBcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMTksMTMpXCIgZD1cIk0wIDAgQzAuNjYgMCAxLjMyIDAgMiAwIEMyIDIuMzEgMiA0LjYyIDIgNyBDMC4wMiA3IC0xLjk2IDcgLTQgNyBDLTQuMzMgOC4zMiAtNC42NiA5LjY0IC01IDExIEMtNi42NSA5LjY4IC04LjMgOC4zNiAtMTAgNyBDLTguNjMwMTY0OTcgMy44Mzg4NDIyNCAtOC4wMTA5MzYyIDMuMDA3MjkwOCAtNSAxIEMtNC42NyAyLjMyIC00LjM0IDMuNjQgLTQgNSBDLTIuNjggNSAtMS4zNiA1IDAgNSBDMCAzLjM1IDAgMS43IDAgMCBaXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiZXRjLmljb24gPT09ICdjbG9jaydcIj5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI2XCIgY3k9XCI2XCIgcj1cIjVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiAvPlxuICAgICAgICAgICAgPHBhdGggZD1cIk02IDNWNkw4IDdcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImV0Yy5pY29uID09PSAnc2V0dGluZ3MnXCI+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTcgNC42NjY2N0M1LjcxMTMzIDQuNjY2NjcgNC42NjY2NyA1LjcxMTMzIDQuNjY2NjcgN0M0LjY2NjY3IDguMjg4NjcgNS43MTEzMyA5LjMzMzMzIDcgOS4zMzMzM0M4LjI4ODY3IDkuMzMzMzMgOS4zMzMzMyA4LjI4ODY3IDkuMzMzMzMgN0M5LjMzMzMzIDUuNzExMzMgOC4yODg2NyA0LjY2NjY3IDcgNC42NjY2N1pcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgPHBhdGggZD1cIk0xMS4wODMzIDcuNTgzMzNDMTEuMTQxNyA3LjI5MTY3IDExLjE0MTcgNi43MDgzMyAxMS4wODMzIDYuNDE2NjdMMTIuMjUgNS44MzMzM0MxMi40MTY3IDUuNzA4MzMgMTIuNDgzMyA1LjQ4MzMzIDEyLjQxNjcgNS4yNUwxMS42NjY3IDMuNDE2NjdDMTEuNiAzLjE4MzMzIDExLjM5MTcgMy4wNDE2NyAxMS4xNDE3IDMuMDQxNjdMOS45MTY2NyAzLjVDOS41NjY2NyAzLjIwODMzIDkuMTkxNjcgMi45NTgzMyA4Ljc1IDIuNzkxNjdMOC40IDEuNDU4MzNDOC4zNDE2NyAxLjIyNSA4LjE0MTY3IDEuMTY2NjcgNy45MzMzMyAxLjE2NjY3SDYuMDY2NjdDNS44NTgzMyAxLjE2NjY3IDUuNjU4MzMgMS4yMjUgNS42IDEuNDU4MzNMNS4yNSAyLjc5MTY3QzQuODA4MzMgMi45NTgzMyA0LjQzMzMzIDMuMjA4MzMgNC4wODMzMyAzLjVMMi44NTgzMyAzLjA0MTY3QzIuNjA4MzMgMy4wNDE2NyAyLjQgMy4xODMzMyAyLjMzMzMzIDMuNDE2NjdMMS41ODMzMyA1LjI1QzEuNTE2NjcgNS40ODMzMyAxLjU4MzMzIDUuNzA4MzMgMS43NSA1LjgzMzMzTDIuOTE2NjcgNi40MTY2N0MyLjg1ODMzIDYuNzA4MzMgMi44NTgzMyA3LjI5MTY3IDIuOTE2NjcgNy41ODMzM0wxLjc1IDguMTY2NjdDMS41ODMzMyA4LjI5MTY3IDEuNTE2NjcgOC41MTY2NyAxLjU4MzMzIDguNzVMMi4zMzMzMyAxMC41ODMzQzIuNCAxMC44MTY3IDIuNjA4MzMgMTAuOTU4MyAyLjg1ODMzIDEwLjk1ODNMNC4wODMzMyAxMC41QzQuNDMzMzMgMTAuNzkxNyA0LjgwODMzIDExLjA0MTcgNS4yNSAxMS4yMDgzTDUuNiAxMi41NDE3QzUuNjU4MzMgMTIuNzc1IDUuODU4MzMgMTIuODMzMyA2LjA2NjY3IDEyLjgzMzNINy45MzMzM0M4LjE0MTY3IDEyLjgzMzMgOC4zNDE2NyAxMi43NzUgOC40IDEyLjU0MTdMOC43NSAxMS4yMDgzQzkuMTkxNjcgMTEuMDQxNyA5LjU2NjY3IDEwLjc5MTcgOS45MTY2NyAxMC41TDExLjE0MTcgMTAuOTU4M0MxMS4zOTE3IDEwLjk1ODMgMTEuNiAxMC44MTY3IDExLjY2NjcgMTAuNTgzM0wxMi40MTY3IDguNzVDMTIuNDgzMyA4LjUxNjY3IDEyLjQxNjcgOC4yOTE2NyAxMi4yNSA4LjE2NjY3TDExLjA4MzMgNy41ODMzM1pcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwiZXRjLmljb24gPT09ICdjaGVjaydcIj5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTEuNjY2NyAzLjVMNS4yNSAxMC41TDIuMzMzMzMgNy41ODMzM1wiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4+e3sgZXRjLmxhYmVsIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQWN0aW9uIERlc2NyaXB0aW9uOiBmbGV4LTEgKyBtaW4tdy0wIHNvIHJvdyBjYW4gc2hyaW5rOyBibG9jayBmbG93IGluIHN0ZXAtbGlzdCBTQ1NTIGF2b2lkcyBmbGV4IGJyZWFraW5nIGlubmVySFRNTCBiYWRnZXMgLS0+XG4gIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyMxMTE4MjddIGNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMThweF0gY3FhLWFjdGlvbi1mb3JtYXQgY3FhLWFsaWduLW1pZGRsZSBjcWEtbWluLXctMCBjcWEtZmxleC0xXCIgKm5nSWY9XCJnZXRBY3Rpb25EZXNjcmlwdGlvbigpXCJcbiAgIFtpbm5lckhUTUxdPVwiZ2V0QWN0aW9uRGVzY3JpcHRpb24oKVwiIChjbGljayk9XCJjbGlja09uQWN0aW9uKCRldmVudClcIj5cbiAgPC9zcGFuPlxuICA8IS0tIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyMxMTE4MjddIGNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMThweF1cIiAqbmdJZj1cImdldEFjdGlvbkRlc2NyaXB0aW9uKClcIj5cbiAgICB7eyBnZXRBY3Rpb25EZXNjcmlwdGlvbigpIH19XG4gIDwvc3Bhbj4gLS0+XG5cbiAgPCEtLSBQYXJhbWV0ZXJzIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTNcIiAqbmdJZj1cImZhbHNlXCI+XG4gICAgPCEtLSBOYXZpZ2F0ZTogVVJMIGFzIGNsaWNrYWJsZSB0cmlnZ2VyIGZvciBUZXN0IERhdGEgbW9kYWwgLS0+XG4gICAgPHNwYW4gKm5nSWY9XCJldmVudFR5cGUgPT09ICduYXZpZ2F0ZScgJiYgZ2V0TmF2aWdhdGVVcmxQYXJhbWV0ZXIoKVwiICN0ZXN0RGF0YVRyaWdnZXJcbiAgICAgIChjbGljayk9XCJvcGVuVGVzdERhdGFNb2RhbCgkZXZlbnQpXCJcbiAgICAgIGNsYXNzPVwiY3FhLXB5LTAuNSBjcWEtcHgtMiBjcWEtdGV4dC1bIzNGNDNFRV0gY3FhLXRleHQtWzE0cHhdIGNxYS1sZWFkaW5nLVsxN3B4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bIzhBOENGNF0gY3FhLXJvdW5kZWQgY3FhLWJnLVsjRDhEOUZDXSBjcWEtY3Vyc29yLXBvaW50ZXIgaG92ZXI6Y3FhLW9wYWNpdHktOTBcIj5cbiAgICAgIHt7IGdldE5hdmlnYXRlVXJsUGFyYW1ldGVyKCk/LnZhbHVlIHx8IGdldE5hdmlnYXRlVXJsUGFyYW1ldGVyKCk/LmRpc3BsYXlWYWx1ZSB9fVxuICAgIDwvc3Bhbj5cbiAgICBcbiAgICA8IS0tIE90aGVyIGV2ZW50IHR5cGVzOiBsb29wIHRocm91Z2ggcGFyYW1ldGVycyAobmF2aWdhdGUgZXhjbHVkZWQpIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBhcmFtIG9mIHBhcmFtZXRlcnM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgIDwhLS0gU2tpcCBuYXZpZ2F0ZSBwYXJhbWV0ZXJzIGluIHRoZSBsb29wIChhbHJlYWR5IHNob3duIGFib3ZlKSAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJldmVudFR5cGUgIT09ICduYXZpZ2F0ZSdcIj5cblxuICAgICAgPCEtLSBUeXBlOiBGaXJzdCBwYXJhbSAodGV4dCB2YWx1ZSBsaWtlIHt7dXNlcm5hbWV9fSkgLS0+XG4gICAgICA8c3BhbiAqbmdJZj1cImV2ZW50VHlwZSA9PT0gJ3R5cGUnICYmIGkgPT09IDBcIiBjbGFzcz1cImNxYS10ZXh0LWdyYXktOTAwIGNxYS10ZXh0LXNtXCI+XG4gICAgICAgIHt7IHBhcmFtLnZhbHVlIH19XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDwhLS0gVHlwZTogXCJpbnRvXCIgdGV4dCAtLT5cbiAgICAgIDxzcGFuICpuZ0lmPVwiZXZlbnRUeXBlID09PSAndHlwZScgJiYgaSA9PT0gMFwiIGNsYXNzPVwiY3FhLXRleHQtZ3JheS05MDAgY3FhLXRleHQtc21cIj5cbiAgICAgICAgaW50b1xuICAgICAgPC9zcGFuPlxuXG4gICAgICA8IS0tIFR5cGU6IFNlY29uZCBwYXJhbSAoc2VsZWN0b3IpIC0tPlxuICAgICAgPHNwYW4gKm5nSWY9XCJldmVudFR5cGUgPT09ICd0eXBlJyAmJiBpID09PSAxXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtcHktMC41IGNxYS1weC0yIGNxYS10ZXh0LVsjM0Y0M0VFXSBjcWEtdGV4dC1bMTRweF0gY3FhLWxlYWRpbmctWzE3cHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjOEE4Q0Y0XSBjcWEtcm91bmRlZCBjcWEtYmctWyNEOEQ5RkNdXCI+XG4gICAgICAgIHt7IHBhcmFtLmRpc3BsYXlWYWx1ZSB8fCBwYXJhbS52YWx1ZSB9fVxuICAgICAgPC9zcGFuPlxuXG4gICAgICA8IS0tIENsaWNrOiBTZWxlY3RvciBpbnB1dC9kaXNwbGF5IC0tPlxuICAgICAgPHNwYW4gKm5nSWY9XCJldmVudFR5cGUgPT09ICdjbGljaycgJiYgcGFyYW0ubmFtZSA9PT0gJ2VsZW1lbnQnXCJcbiAgICAgICAjY2xpY2tFbGVtZW50VHJpZ2dlclxuICAgICAgIChjbGljayk9XCJvcGVuRWxlbWVudFBvcHVwKCRldmVudClcIlxuICAgICAgICBjbGFzcz1cImNxYS1weS0wLjUgY3FhLXB4LTIgY3FhLXRleHQtWyMzRjQzRUVdIGNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMTdweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyM4QThDRjRdIGNxYS1yb3VuZGVkIGNxYS1jdXJzb3ItcG9pbnRlciBjcWEtYmctWyNEOEQ5RkNdXCI+XG4gICAgICAgIHt7IHBhcmFtLmRpc3BsYXlWYWx1ZSB8fCBwYXJhbS52YWx1ZSB9fVxuICAgICAgPC9zcGFuPlxuXG4gICAgICA8IS0tIENsaWNrOiBTdWZmaXggdGV4dCAobGlrZSBcImlmIFByZXNlbnRcIikgLS0+XG4gICAgICA8c3BhbiAqbmdJZj1cImV2ZW50VHlwZSA9PT0gJ2NsaWNrJyAmJiBwYXJhbS5uYW1lID09PSAnc3VmZml4J1wiIGNsYXNzPVwiY3FhLXRleHQtZ3JheS05MDAgY3FhLXRleHQtc21cIj5cbiAgICAgICAge3sgcGFyYW0udmFsdWUgfX1cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPCEtLSBEb3VibGUgQ2xpY2s6IFNlbGVjdG9yIGlucHV0L2Rpc3BsYXkgLS0+XG4gICAgICA8c3BhbiAqbmdJZj1cImV2ZW50VHlwZSA9PT0gJ2RvdWJsZUNsaWNrJyAmJiBpID09PSAwXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtcHktMC41IGNxYS1weC0yIGNxYS10ZXh0LVsjM0Y0M0VFXSBjcWEtdGV4dC1bMTRweF0gY3FhLWxlYWRpbmctWzE3cHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjOEE4Q0Y0XSBjcWEtcm91bmRlZCBjcWEtYmctWyNEOEQ5RkNdXCI+XG4gICAgICAgIHt7IHBhcmFtLmRpc3BsYXlWYWx1ZSB8fCBwYXJhbS52YWx1ZSB9fVxuICAgICAgPC9zcGFuPlxuXG4gICAgICA8IS0tIFByZXNzIEVudGVyOiBTZWxlY3RvciBpbnB1dC9kaXNwbGF5IHdpdGggSFRNTCBzdXBwb3J0IC0tPlxuICAgICAgPHNwYW4gKm5nSWY9XCJldmVudFR5cGUgPT09ICdwcmVzc0VudGVyJyAmJiBpID09PSAwXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtcHktMC41IGNxYS1weC0yIGNxYS10ZXh0LVsjM0Y0M0VFXSBjcWEtdGV4dC1bMTRweF0gY3FhLWxlYWRpbmctWzE3cHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjOEE4Q0Y0XSBjcWEtcm91bmRlZCBjcWEtYmctWyNEOEQ5RkNdXCJcbiAgICAgICAgW2lubmVySFRNTF09XCJwYXJhbS5kaXNwbGF5VmFsdWUgfHwgcGFyYW0udmFsdWVcIj5cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPCEtLSBFbnRlcjogVmFsdWUgZGlzcGxheSB3aXRoIHF1b3RlcyAobGlrZSBjbGljayBhY3Rpb24pIC0tPlxuICAgICAgPHNwYW4gKm5nSWY9XCJldmVudFR5cGUgPT09ICdlbnRlcicgJiYgcGFyYW0ubmFtZSA9PT0gJ3ZhbHVlJ1wiXG4gICAgICAgIGNsYXNzPVwiY3FhLXB5LTAuNSBjcWEtcHgtMiBjcWEtdGV4dC1bIzNGNDNFRV0gY3FhLXRleHQtWzE0cHhdIGNxYS1sZWFkaW5nLVsxN3B4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bIzhBOENGNF0gY3FhLXJvdW5kZWQgY3FhLWJnLVsjRDhEOUZDXVwiPlxuICAgICAgICB7eyBwYXJhbS5kaXNwbGF5VmFsdWUgfHwgcGFyYW0udmFsdWUgfX1cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPCEtLSBFbnRlcjogXCJpbiB0aGVcIiB0ZXh0IC0tPlxuICAgICAgPHNwYW4gKm5nSWY9XCJldmVudFR5cGUgPT09ICdlbnRlcicgJiYgcGFyYW0ubmFtZSA9PT0gJ3ZhbHVlJ1wiIGNsYXNzPVwiY3FhLXRleHQtZ3JheS05MDAgY3FhLXRleHQtc21cIj5cbiAgICAgICAgaW4gdGhlXG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDwhLS0gRW50ZXI6IExhYmVsIGRpc3BsYXkgd2l0aCBxdW90ZXMgKGxpa2UgY2xpY2sgYWN0aW9uKSAtLT5cbiAgICAgIDxzcGFuICpuZ0lmPVwiZXZlbnRUeXBlID09PSAnZW50ZXInICYmIHBhcmFtLm5hbWUgPT09ICdsYWJlbCdcIlxuICAgICAgICBjbGFzcz1cImNxYS1weS0wLjUgY3FhLXB4LTIgY3FhLXRleHQtWyMzRjQzRUVdIGNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMTdweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyM4QThDRjRdIGNxYS1yb3VuZGVkIGNxYS1iZy1bI0Q4RDlGQ11cIj5cbiAgICAgICAge3sgcGFyYW0uZGlzcGxheVZhbHVlIHx8IHBhcmFtLnZhbHVlIH19XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDwhLS0gRW50ZXI6IFwiZmllbGRcIiB0ZXh0IC0tPlxuICAgICAgPHNwYW4gKm5nSWY9XCJldmVudFR5cGUgPT09ICdlbnRlcicgJiYgcGFyYW0ubmFtZSA9PT0gJ2xhYmVsJ1wiIGNsYXNzPVwiY3FhLXRleHQtZ3JheS05MDAgY3FhLXRleHQtc21cIj5cbiAgICAgICAgZmllbGRcbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPCEtLSBXYWl0OiBEdXJhdGlvbiBpbnB1dCAtLT5cbiAgICAgIDxpbnB1dCAqbmdJZj1cImV2ZW50VHlwZSA9PT0gJ3dhaXQnICYmIHBhcmFtLm5hbWUgPT09ICdkdXJhdGlvbidcIiB0eXBlPVwibnVtYmVyXCIgW3ZhbHVlXT1cInBhcmFtLnZhbHVlXCJcbiAgICAgICAgKGlucHV0KT1cIm9uUGFyYW1ldGVyQ2hhbmdlKHBhcmFtLCAkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiIHBsYWNlaG9sZGVyPVwiMlwiXG4gICAgICAgIGNsYXNzPVwiY3FhLXctMTYgY3FhLXB4LTIgY3FhLXB5LTEuNSBjcWEtcm91bmRlZC1sZyBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bIzlFOUVFM10gY3FhLWJnLVsjRDFDNEU5XSBjcWEtdGV4dC1bIzNGNDNFRV0gY3FhLXRleHQtc20gY3FhLWZvbnQtbWVkaXVtIGNxYS1vdXRsaW5lLW5vbmUgZm9jdXM6Y3FhLXJpbmctMiBmb2N1czpjcWEtcmluZy1bIzNGNDNFRV0gZm9jdXM6Y3FhLXJpbmctb3BhY2l0eS01MFwiIC8+XG4gICAgICA8c3BhbiAqbmdJZj1cImV2ZW50VHlwZSA9PT0gJ3dhaXQnICYmIHBhcmFtLm5hbWUgPT09ICdkdXJhdGlvbidcIiBjbGFzcz1cImNxYS10ZXh0LWdyYXktOTAwIGNxYS10ZXh0LXNtXCI+XG4gICAgICAgIHNlY29uZHNcbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPCEtLSBXYWl0OiBFbGVtZW50IHNlbGVjdG9yIC0tPlxuICAgICAgPHNwYW4gKm5nSWY9XCJldmVudFR5cGUgPT09ICd3YWl0JyAmJiBwYXJhbS5uYW1lID09PSAnZWxlbWVudCdcIiBjbGFzcz1cImNxYS10ZXh0LWdyYXktOTAwIGNxYS10ZXh0LXNtXCI+XG4gICAgICAgIGZvciBlbGVtZW50XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiAqbmdJZj1cImV2ZW50VHlwZSA9PT0gJ3dhaXQnICYmIHBhcmFtLm5hbWUgPT09ICdlbGVtZW50J1wiIFxuICAgICAgICNlbGVtZW50VHJpZ2dlclxuICAgICAgIChjbGljayk9XCJvcGVuRWxlbWVudFBvcHVwKCRldmVudClcIlxuICAgICAgICBjbGFzcz1cImNxYS1weS0wLjUgY3FhLXB4LTIgY3FhLXRleHQtWyMzRjQzRUVdIGNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMTdweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyM4QThDRjRdIGNxYS1yb3VuZGVkIGNxYS1jdXJzb3ItcG9pbnRlciBjcWEtYmctWyNEOEQ5RkNdXCI+XG4gICAgICAgIHt7IHBhcmFtLmRpc3BsYXlWYWx1ZSB8fCBwYXJhbS52YWx1ZSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gKm5nSWY9XCJldmVudFR5cGUgPT09ICd3YWl0JyAmJiBwYXJhbS5uYW1lID09PSAnZWxlbWVudCdcIiBjbGFzcz1cImNxYS10ZXh0LWdyYXktOTAwIGNxYS10ZXh0LXNtXCI+XG4gICAgICAgIHRvIGJlIHZpc2libGVcbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPCEtLSBDdXN0b206IERlc2NyaXB0aW9uIChjbGlja2FibGUgdG8gb3BlbiBTdGVwIERlc2NyaXB0aW9uIG1vZGFsOyBwYXNzICRldmVudCBzbyBtb2RhbCBvcGVucyBiZWxvdyB0aGlzIHRyaWdnZXIpIC0tPlxuICAgICAgPHNwYW4gKm5nSWY9XCJldmVudFR5cGUgPT09ICdjdXN0b20nXCIgI2Rlc2NyaXB0aW9uVHJpZ2dlclxuICAgICAgICAoY2xpY2spPVwib3BlblN0ZXBEZXNjcmlwdGlvbk1vZGFsKCRldmVudClcIlxuICAgICAgICBjbGFzcz1cImNxYS1weS0wLjUgY3FhLXB4LTIgY3FhLXRleHQtWyMzRjQzRUVdIGNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMTdweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyM4QThDRjRdIGNxYS1yb3VuZGVkIGNxYS1iZy1bI0Q4RDlGQ10gY3FhLWN1cnNvci1wb2ludGVyIGhvdmVyOmNxYS1vcGFjaXR5LTkwXCJcbiAgICAgICAgW2lubmVySFRNTF09XCJwYXJhbS5kaXNwbGF5VmFsdWUgfHwgcGFyYW0udmFsdWVcIj5cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPCEtLSBBSSBBZ2VudDogSW5zdHJ1Y3Rpb25zIC0tPlxuICAgICAgPHNwYW4gKm5nSWY9XCJldmVudFR5cGUgPT09ICdhaS1hZ2VudCdcIlxuICAgICAgICBjbGFzcz1cImNxYS1weS0wLjUgY3FhLXB4LTIgY3FhLXRleHQtWyMzRjQzRUVdIGNxYS10ZXh0LVsxNHB4XSBjcWEtbGVhZGluZy1bMTdweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyM4QThDRjRdIGNxYS1yb3VuZGVkIGNxYS1iZy1bI0Q4RDlGQ11cIj5cbiAgICAgICAge3sgcGFyYW0uZGlzcGxheVZhbHVlIHx8IHBhcmFtLnZhbHVlIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1tbC1hdXRvIGNxYS1zZWxmLWNlbnRlclwiPlxuICAgIDwhLS0gU2tpcHBlZCBiYWRnZSAod2hlbiBzdGVwIGlzIG1hcmtlZCB0byBza2lwKSAtLT5cbiAgICA8c3BhbiAqbmdJZj1cImNvbmZpZz8uc2hvdWxkU2tpcFwiIGNsYXNzPVwiY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNFNUU1RTVdIGNxYS1yb3VuZGVkLWxnIGNxYS1weS0wLjUgY3FhLXB4LTIgY3FhLXRleHQtWyMwQTBBMEFdIGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMTVweF0gY3FhLWZsZXgtc2hyaW5rLTBcIj5Ta2lwcGVkPC9zcGFuPlxuICAgIDwhLS0gQWN0aW9uIEljb25zOiBFZGl0LCBMaW5rLCBEdXBsaWNhdGUsIERlbGV0ZSAoc2hvdyBvbiBob3ZlcjsgaGlkZGVuIHdoZW4gc3RlcCBpcyBpbnNpZGUgc3RlcC1ncm91cCkgLSBwbGFjZWQgZmlyc3QgLS0+XG4gICAgPGRpdiAqbmdJZj1cImVkaXRhYmxlICYmICFpc0luc2lkZVN0ZXBHcm91cCAmJiAhaXNSZW9yZGVyXCIgY2xhc3M9XCJzdGVwLWFjdGlvbnMgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEuNSBjcWEtcHItMlwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgI2VkaXRUcmlnZ2VyIChjbGljayk9XCJvbkVkaXQoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgdGl0bGU9XCJFZGl0XCIgY2xhc3M9XCJjcWEtcC0wIGNxYS10ZXh0LVsjOTlBMUFmXSBob3ZlcjpjcWEtdGV4dC1bIzE0NDdFNl1cIj5cbiAgICAgICAgPHN2ZyB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgPHBhdGggZD1cIk03IDExLjY2NjZIMTIuMjVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNOS41NTIwOCAyLjExMjhDOS43ODQzIDEuODgwNTggMTAuMDk5MyAxLjc1MDEyIDEwLjQyNzcgMS43NTAxMkMxMC43NTYxIDEuNzUwMTIgMTEuMDcxIDEuODgwNTggMTEuMzAzMyAyLjExMjhDMTEuNTM1NSAyLjM0NTAyIDExLjY2NTkgMi42NTk5OCAxMS42NjU5IDIuOTg4MzhDMTEuNjY1OSAzLjMxNjc5IDExLjUzNTUgMy42MzE3NSAxMS4zMDMzIDMuODYzOTdMNC4yOTc0MiAxMC44NzA0QzQuMTU4NjQgMTEuMDA5MiAzLjk4NzEgMTEuMTEwNyAzLjc5ODY3IDExLjE2NTZMMi4xMjMzMyAxMS42NTQ0QzIuMDczMTQgMTEuNjY5IDIuMDE5OTMgMTEuNjY5OSAxLjk2OTI4IDExLjY1NjlDMS45MTg2MyAxMS42NDM5IDEuODcyNCAxMS42MTc2IDEuODM1NDMgMTEuNTgwNkMxLjc5ODQ2IDExLjU0MzcgMS43NzIxIDExLjQ5NzQgMS43NTkxMyAxMS40NDY4QzEuNzQ2MTUgMTEuMzk2MSAxLjc0NzAzIDExLjM0MjkgMS43NjE2NyAxMS4yOTI3TDIuMjUwNSA5LjYxNzM4QzIuMzA1NDYgOS40MjkxNiAyLjQwNjk4IDkuMjU3ODMgMi41NDU2NyA5LjExOTIyTDkuNTUyMDggMi4xMTI4WlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25Ta2lwVG9nZ2xlKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIFthdHRyLnRpdGxlXT1cImNvbmZpZz8uc2hvdWxkU2tpcCA/ICdVbnNraXAgc3RlcCcgOiAnU2tpcCBzdGVwJ1wiIFtjbGFzcy5jcWEtdGV4dC1bIzE0NDdFNl1dPVwiY29uZmlnPy5zaG91bGRTa2lwXCIgY2xhc3M9XCJjcWEtcC0wIGNxYS10ZXh0LVsjOTlBMUFmXSBob3ZlcjpjcWEtdGV4dC1bIzE0NDdFNl1cIj5cbiAgICAgICAgPHN2ZyB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgPHBhdGggZD1cIk04LjI1IDguNzVDOS4yMTY1IDguNzUgMTAgNy45NjY1IDEwIDdDMTAgNi4wMzM1IDkuMjE2NSA1LjI1IDguMjUgNS4yNUM3LjI4MzUgNS4yNSA2LjUgNi4wMzM1IDYuNSA3QzYuNSA3Ljk2NjUgNy4yODM1IDguNzUgOC4yNSA4Ljc1WlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgPHBhdGggZD1cIk04Ljc1MDMzIDIuOTE2NjNINS4yNTAzM0MyLjk5NTE2IDIuOTE2NjMgMS4xNjY5OSA0Ljc0NDggMS4xNjY5OSA2Ljk5OTk2QzEuMTY2OTkgOS4yNTUxMiAyLjk5NTE2IDExLjA4MzMgNS4yNTAzMyAxMS4wODMzSDguNzUwMzNDMTEuMDA1NSAxMS4wODMzIDEyLjgzMzcgOS4yNTUxMiAxMi44MzM3IDYuOTk5OTZDMTIuODMzNyA0Ljc0NDggMTEuMDA1NSAyLjkxNjYzIDguNzUwMzMgMi45MTY2M1pcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPCEtLSA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25MaW5rKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIHRpdGxlPVwiTGlua1wiIGNsYXNzPVwiY3FhLXAtMCBjcWEtdGV4dC1bIzk5QTFBZl0gaG92ZXI6Y3FhLXRleHQtWyMxNDQ3RTZdXCI+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNNS4wMDA2NSA5LjkxNjcxSDMuNjY3MzJDMi43ODMyNiA5LjkxNjcxIDEuOTM1NDIgOS42MDk0MiAxLjMxMDMgOS4wNjI0NEMwLjY4NTE3NCA4LjUxNTQ1IDAuMzMzOTg0IDcuNzczNTkgMC4zMzM5ODQgNy4wMDAwNEMwLjMzMzk4NCA2LjIyNjQ5IDAuNjg1MTc0IDUuNDg0NjMgMS4zMTAzIDQuOTM3NjVDMS45MzU0MiA0LjM5MDY2IDIuNzgzMjYgNC4wODMzNyAzLjY2NzMyIDQuMDgzMzdINS4wMDA2NVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgPHBhdGggZD1cIk05IDQuMDgzMzdIMTAuMzMzM0MxMS4yMTc0IDQuMDgzMzcgMTIuMDY1MiA0LjM5MDY2IDEyLjY5MDQgNC45Mzc2NUMxMy4zMTU1IDUuNDg0NjMgMTMuNjY2NyA2LjIyNjQ5IDEzLjY2NjcgNy4wMDAwNEMxMy42NjY3IDcuNzczNTkgMTMuMzE1NSA4LjUxNTQ1IDEyLjY5MDQgOS4wNjI0NEMxMi4wNjUyIDkuNjA5NDIgMTEuMjE3NCA5LjkxNjcxIDEwLjMzMzMgOS45MTY3MUg5XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICA8cGF0aCBkPVwiTTQuMzMzOTggN0g5LjY2NzMyXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2J1dHRvbj4gLS0+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwib25EdXBsaWNhdGUoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzRHVwbGljYXRpbmdcIlxuICAgICAgICBbYXR0ci50aXRsZV09XCJpc0R1cGxpY2F0aW5nID8gJ0R1cGxpY2F0aW5nLi4uJyA6ICdEdXBsaWNhdGUnXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtcC0wIGNxYS10ZXh0LVsjOTlBMUFmXSBob3ZlcjpjcWEtdGV4dC1bIzE0NDdFNl0gZGlzYWJsZWQ6Y3FhLW9wYWNpdHktNjAgZGlzYWJsZWQ6Y3FhLWN1cnNvci1ub3QtYWxsb3dlZFwiXG4gICAgICA+XG4gICAgICAgIDxzdmcgKm5nSWY9XCIhaXNEdXBsaWNhdGluZ1wiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICA8cGF0aCBkPVwiTTExLjY2NiA0LjY2NjYzSDUuODMyNjhDNS4xODgzNSA0LjY2NjYzIDQuNjY2MDIgNS4xODg5NiA0LjY2NjAyIDUuODMzMjlWMTEuNjY2NkM0LjY2NjAyIDEyLjMxMSA1LjE4ODM1IDEyLjgzMzMgNS44MzI2OCAxMi44MzMzSDExLjY2NkMxMi4zMTAzIDEyLjgzMzMgMTIuODMyNyAxMi4zMTEgMTIuODMyNyAxMS42NjY2VjUuODMzMjlDMTIuODMyNyA1LjE4ODk2IDEyLjMxMDMgNC42NjY2MyAxMS42NjYgNC42NjY2M1pcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNMi4zMzI2OCA5LjMzMzI5QzEuNjkxMDIgOS4zMzMyOSAxLjE2NjAyIDguODA4MjkgMS4xNjYwMiA4LjE2NjYzVjIuMzMzMjlDMS4xNjYwMiAxLjY5MTYzIDEuNjkxMDIgMS4xNjY2MyAyLjMzMjY4IDEuMTY2NjNIOC4xNjYwMkM4LjgwNzY4IDEuMTY2NjMgOS4zMzI2OCAxLjY5MTYzIDkuMzMyNjggMi4zMzMyOVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgICA8c3ZnICpuZ0lmPVwiaXNEdXBsaWNhdGluZ1wiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBhcmlhLWxhYmVsPVwiRHVwbGljYXRpbmdcIj5cbiAgICAgICAgICA8Y2lyY2xlIGN4PVwiOFwiIGN5PVwiOFwiIHI9XCI2XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLW9wYWNpdHk9XCIwLjJcIiBzdHJva2Utd2lkdGg9XCIyXCI+PC9jaXJjbGU+XG4gICAgICAgICAgPHBhdGggZD1cIk0xNCA4QTYgNiAwIDAgMCA4IDJcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiPlxuICAgICAgICAgICAgPGFuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT1cInRyYW5zZm9ybVwiIHR5cGU9XCJyb3RhdGVcIiBmcm9tPVwiMCA4IDhcIiB0bz1cIjM2MCA4IDhcIiBkdXI9XCIwLjhzXCIgcmVwZWF0Q291bnQ9XCJpbmRlZmluaXRlXCIvPlxuICAgICAgICAgIDwvcGF0aD5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkRlbGV0ZSgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiB0aXRsZT1cIkRlbGV0ZVwiIGNsYXNzPVwiY3FhLXAtMCBjcWEtdGV4dC1bI2ZmNjQ2N10gaG92ZXI6Y3FhLXRleHQtWyNDNjM1MzVdXCI+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNMS43NSAzLjVIMTIuMjVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjE2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgIDxwYXRoIGQ9XCJNMTEuMDgyNyAzLjVWMTEuNjY2N0MxMS4wODI3IDEyLjI1IDEwLjQ5OTMgMTIuODMzMyA5LjkxNjAyIDEyLjgzMzNINC4wODI2OEMzLjQ5OTM1IDEyLjgzMzMgMi45MTYwMiAxMi4yNSAyLjkxNjAyIDExLjY2NjdWMy41XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS4xNjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICA8cGF0aCBkPVwiTTQuNjY2MDIgMy40OTk5NlYyLjMzMzI5QzQuNjY2MDIgMS43NDk5NiA1LjI0OTM1IDEuMTY2NjMgNS44MzI2OCAxLjE2NjYzSDguMTY2MDJDOC43NDkzNSAxLjE2NjYzIDkuMzMyNjggMS43NDk5NiA5LjMzMjY4IDIuMzMzMjlWMy40OTk5NlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgPHBhdGggZD1cIk01LjgzMzk4IDYuNDE2NjNWOS45MTY2M1wiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgPHBhdGggZD1cIk04LjE2NjAyIDYuNDE2NjNWOS45MTY2M1wiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuMTY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFZpZXcgRGV0YWlscyBMaW5rIChzaG93IG9ubHkgaWYgZGVzY3JpcHRpb24gaXMgbm90IGVtcHR5KSAtLT5cbiAgICA8YSAqbmdJZj1cImNvbmZpZy5kZXNjcmlwdGlvbiAmJiBjb25maWcuZGVzY3JpcHRpb24udHJpbSgpICE9PSAnJ1wiICN2aWV3RGV0YWlsc1RyaWdnZXIgaHJlZj1cIiNcIiAoY2xpY2spPVwib25WaWV3RGV0YWlscygkZXZlbnQpXCIgY2xhc3M9XCJjcWEtdGV4dC1bIzNGNDNFRV0gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEgY3FhLW5vLXVuZGVybGluZVwiPlZpZXcgRGV0YWlsczxzdmcgd2lkdGg9XCI4XCIgaGVpZ2h0PVwiOFwiIHZpZXdCb3g9XCIwIDAgOCA4XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHBhdGggZD1cIk0yLjAzODA5IDYuNzQzMjlMMi42MjgwOSA3LjMzMzI5TDUuOTYxNDIgMy45OTk5NkwyLjYyODA5IDAuNjY2NjI2TDIuMDM4MDkgMS4yNTY2M0w0Ljc4MTQyIDMuOTk5OTZMMi4wMzgwOSA2Ljc0MzI5WlwiIGZpbGw9XCIjM0Y0M0VFXCIvPjwvc3ZnPjwvYT5cblxuICAgIDwhLS0gQ3JlYXRlZCBEYXRlIChmcm9tIEFQSSkgLSBsYXN0IHNvIGFsaWduZWQgYWNyb3NzIGFsbCBzdGVwcywgZm9ybWF0OiAyNSBGZWIgMjAyNiAtLT5cbiAgICA8c3BhbiAqbmdJZj1cImNvbmZpZy5jcmVhdGVkRGF0ZVwiIGNsYXNzPVwic3RlcC1kYXRlIGNxYS10ZXh0LVsjNkI3MjgwXSBjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1tbC1hdXRvIGNxYS1mbGV4LXNocmluay0wXCI+XG4gICAgICB7eyBjb25maWcuY3JlYXRlZERhdGUgfCBkYXRlOidkIE1NTSB5eXl5JyB9fVxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
|