@cqa-lib/cqa-ui 1.1.268 → 1.1.270

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/esm2020/lib/autocomplete/autocomplete.component.mjs +3 -3
  2. package/esm2020/lib/execution-screen/api-step/api-step.component.mjs +31 -1
  3. package/esm2020/lib/execution-screen/basic-step/basic-step.component.mjs +31 -1
  4. package/esm2020/lib/execution-screen/db-verification-step/db-verification-step.component.mjs +31 -1
  5. package/esm2020/lib/execution-screen/live-execution-step/live-execution-step.component.mjs +31 -1
  6. package/esm2020/lib/execution-screen/loop-step/loop-step.component.mjs +31 -1
  7. package/esm2020/lib/test-case-details/ai-agent-step/ai-agent-step.component.mjs +3 -3
  8. package/esm2020/lib/test-case-details/ai-verify-step/ai-verify-step.component.mjs +3 -3
  9. package/esm2020/lib/test-case-details/api-step/api-step.component.mjs +3 -3
  10. package/esm2020/lib/test-case-details/condition-step/condition-step.component.mjs +29 -3
  11. package/esm2020/lib/test-case-details/custom-code-step/custom-code-step.component.mjs +3 -3
  12. package/esm2020/lib/test-case-details/database-step/database-step.component.mjs +3 -3
  13. package/esm2020/lib/test-case-details/delete-steps/delete-steps.component.mjs +8 -3
  14. package/esm2020/lib/test-case-details/loop-step/loop-step.component.mjs +34 -3
  15. package/esm2020/lib/test-case-details/normal-step/normal-step.component.mjs +3 -3
  16. package/esm2020/lib/test-case-details/restore-session-step/restore-session-step.component.mjs +3 -3
  17. package/esm2020/lib/test-case-details/screenshot-step/screenshot-step.component.mjs +3 -3
  18. package/esm2020/lib/test-case-details/scroll-step/scroll-step.component.mjs +3 -3
  19. package/esm2020/lib/test-case-details/step-group/step-group.component.mjs +61 -15
  20. package/esm2020/lib/test-case-details/upload-step/upload-step.component.mjs +3 -3
  21. package/esm2020/lib/test-case-details/verify-url-step/verify-url-step.component.mjs +3 -3
  22. package/fesm2015/cqa-lib-cqa-ui.mjs +308 -44
  23. package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
  24. package/fesm2020/cqa-lib-cqa-ui.mjs +302 -44
  25. package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
  26. package/lib/execution-screen/api-step/api-step.component.d.ts +1 -0
  27. package/lib/execution-screen/basic-step/basic-step.component.d.ts +1 -0
  28. package/lib/execution-screen/db-verification-step/db-verification-step.component.d.ts +1 -0
  29. package/lib/execution-screen/live-execution-step/live-execution-step.component.d.ts +1 -0
  30. package/lib/execution-screen/loop-step/loop-step.component.d.ts +1 -0
  31. package/lib/test-case-details/condition-step/condition-step.component.d.ts +4 -0
  32. package/lib/test-case-details/delete-steps/delete-steps.component.d.ts +5 -1
  33. package/lib/test-case-details/loop-step/loop-step.component.d.ts +6 -0
  34. package/lib/test-case-details/step-group/step-group.component.d.ts +15 -1
  35. package/package.json +1 -1
  36. package/styles.css +1 -1
@@ -121,10 +121,10 @@ export class AutocompleteComponent {
121
121
  }
122
122
  }
123
123
  AutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AutocompleteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
124
- AutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: AutocompleteComponent, selector: "cqa-autocomplete", inputs: { placeholder: "placeholder", options: "options", value: "value", disabled: "disabled", showClear: "showClear", ariaLabel: "ariaLabel", autoFocus: "autoFocus", size: "size", fullWidth: "fullWidth" }, outputs: { valueChange: "valueChange", optionSelect: "optionSelect", cleared: "cleared" }, host: { listeners: { "document:keydown.escape": "onEscape()" }, classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"cqa-autocomplete-root cqa-relative\"\n [style.display]=\"fullWidth ? 'block' : 'inline-block'\"\n [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <!-- Field: same styling as search bar -->\n <div\n class=\"cqa-inline-flex cqa-items-center cqa-gap-2 cqa-px-6 cqa-py-3 cqa-text-[14px] cqa-border cqa-border-solid cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-shadow-sm cqa-transition-colors\"\n [ngClass]=\"[fullWidth ? 'cqa-w-full' : widthClasses[size]]\">\n <input\n type=\"text\"\n class=\"cqa-flex-1 cqa-min-w-0 cqa-border-none cqa-outline-none cqa-bg-transparent placeholder:cqa-text-gray-300 disabled:cqa-text-gray-400 disabled:cqa-cursor-not-allowed cqa-font-['SF_Pro_Text'] cqa-font-normal cqa-text-[12.3px] cqa-leading-none cqa-tracking-normal cqa-align-middle cqa-text-black-100\"\n [placeholder]=\"placeholder\"\n [value]=\"inputValue\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-expanded]=\"panelOpen\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n autocomplete=\"off\"\n autocapitalize=\"none\"\n spellcheck=\"false\"\n [attr.autofocus]=\"autoFocus ? '' : null\"\n />\n <button\n *ngIf=\"showClear && inputValue\"\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-p-0 cqa-w-4 cqa-h-4 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer cqa-text-gray-500 cqa-hover:cqa-text-gray-700 disabled:cqa-text-gray-300 cqa-transition-colors cqa-leading-none\"\n (click)=\"clear()\"\n [disabled]=\"disabled\"\n aria-label=\"Clear\">\n <mat-icon\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-leading-none cqa-p-0\"\n [style.width.px]=\"16\"\n [style.height.px]=\"16\"\n [style.fontSize.px]=\"16\"\n [ngClass]=\"{ 'cqa-opacity-[0.38]': disabled }\">\n close\n </mat-icon>\n </button>\n </div>\n <!-- List box: below field, same width as field -->\n <ul\n *ngIf=\"panelOpen\"\n role=\"listbox\"\n class=\"cqa-autocomplete-list cqa-absolute cqa-left-0 cqa-right-0 cqa-top-full cqa-mt-1 cqa-py-1 cqa-border cqa-border-solid cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-shadow-sm cqa-max-h-[240px] cqa-overflow-y-auto cqa-scrollbar-thin cqa-z-10 cqa-list-none cqa-m-0 cqa-p-0\"\n [class.cqa-w-full]=\"fullWidth\">\n <li\n *ngFor=\"let option of displayOptions; trackBy: trackByValue\"\n role=\"option\"\n (mousedown)=\"selectOption(option); $event.preventDefault()\"\n class=\"cqa-px-4 cqa-py-2 cqa-text-[12.3px] cqa-leading-none cqa-tracking-normal cqa-text-black-100 cqa-cursor-pointer cqa-font-['SF_Pro_Text'] hover:cqa-bg-gray-100 cqa-transition-colors\">\n {{ getOptionLabel(option) }}\n </li>\n <li\n *ngIf=\"displayOptions.length === 0\"\n class=\"cqa-px-4 cqa-py-3 cqa-text-[12.3px] cqa-text-gray-400 cqa-cursor-default\">\n No matches\n </li>\n </ul>\n</div>\n", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
124
+ AutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: AutocompleteComponent, selector: "cqa-autocomplete", inputs: { placeholder: "placeholder", options: "options", value: "value", disabled: "disabled", showClear: "showClear", ariaLabel: "ariaLabel", autoFocus: "autoFocus", size: "size", fullWidth: "fullWidth" }, outputs: { valueChange: "valueChange", optionSelect: "optionSelect", cleared: "cleared" }, host: { listeners: { "document:keydown.escape": "onEscape()" }, classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"cqa-autocomplete-root cqa-relative\"\n [style.display]=\"fullWidth ? 'block' : 'inline-block'\"\n [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <!-- Field: same styling as search bar -->\n <div\n class=\"cqa-inline-flex cqa-items-center cqa-gap-2 cqa-px-6 cqa-py-3 cqa-text-[14px] cqa-border cqa-border-solid cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-shadow-sm cqa-transition-colors\"\n [ngClass]=\"[fullWidth ? 'cqa-w-full' : widthClasses[size]]\">\n <input\n type=\"text\"\n class=\"cqa-flex-1 cqa-min-w-0 cqa-border-none cqa-outline-none cqa-bg-transparent placeholder:cqa-text-gray-300 disabled:cqa-text-gray-400 disabled:cqa-cursor-not-allowed cqa-font-['SF_Pro_Text'] cqa-font-normal cqa-text-[12.3px] cqa-leading-none cqa-tracking-normal cqa-align-middle cqa-text-black-100\"\n [placeholder]=\"placeholder\"\n [value]=\"inputValue\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-expanded]=\"panelOpen\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n autocomplete=\"off\"\n autocapitalize=\"none\"\n spellcheck=\"false\"\n [attr.autofocus]=\"autoFocus ? '' : null\"\n />\n <button\n *ngIf=\"showClear && inputValue\"\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-p-0 cqa-w-4 cqa-h-4 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer cqa-text-gray-500 cqa-hover:cqa-text-gray-700 disabled:cqa-text-gray-300 cqa-transition-colors cqa-leading-none\"\n (click)=\"clear()\"\n [disabled]=\"disabled\"\n aria-label=\"Clear\">\n <mat-icon\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-leading-none cqa-p-0\"\n [style.width.px]=\"16\"\n [style.height.px]=\"16\"\n [style.fontSize.px]=\"16\"\n [ngClass]=\"{ 'cqa-opacity-[0.38]': disabled }\">\n close\n </mat-icon>\n </button>\n </div>\n <!-- List box: below field, same width as field -->\n <ul\n *ngIf=\"panelOpen\"\n role=\"listbox\"\n class=\"cqa-autocomplete-list cqa-absolute cqa-left-0 cqa-right-0 cqa-top-full cqa-mt-1 cqa-py-1 cqa-border cqa-border-solid cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-shadow-sm cqa-max-h-[240px] cqa-overflow-y-auto cqa-scrollbar-thin cqa-z-[1100] cqa-list-none cqa-m-0 cqa-p-0\"\n [class.cqa-w-full]=\"fullWidth\">\n <li\n *ngFor=\"let option of displayOptions; trackBy: trackByValue\"\n role=\"option\"\n (mousedown)=\"selectOption(option); $event.preventDefault()\"\n class=\"cqa-px-4 cqa-py-2 cqa-text-[12.3px] cqa-leading-none cqa-tracking-normal cqa-text-black-100 cqa-cursor-pointer cqa-font-['SF_Pro_Text'] hover:cqa-bg-gray-100 cqa-transition-colors\">\n {{ getOptionLabel(option) }}\n </li>\n <li\n *ngIf=\"displayOptions.length === 0\"\n class=\"cqa-px-4 cqa-py-3 cqa-text-[12.3px] cqa-text-gray-400 cqa-cursor-default\">\n No matches\n </li>\n </ul>\n</div>\n", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
125
125
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: AutocompleteComponent, decorators: [{
126
126
  type: Component,
127
- args: [{ selector: 'cqa-autocomplete', host: { class: 'cqa-ui-root' }, template: "<div\n class=\"cqa-autocomplete-root cqa-relative\"\n [style.display]=\"fullWidth ? 'block' : 'inline-block'\"\n [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <!-- Field: same styling as search bar -->\n <div\n class=\"cqa-inline-flex cqa-items-center cqa-gap-2 cqa-px-6 cqa-py-3 cqa-text-[14px] cqa-border cqa-border-solid cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-shadow-sm cqa-transition-colors\"\n [ngClass]=\"[fullWidth ? 'cqa-w-full' : widthClasses[size]]\">\n <input\n type=\"text\"\n class=\"cqa-flex-1 cqa-min-w-0 cqa-border-none cqa-outline-none cqa-bg-transparent placeholder:cqa-text-gray-300 disabled:cqa-text-gray-400 disabled:cqa-cursor-not-allowed cqa-font-['SF_Pro_Text'] cqa-font-normal cqa-text-[12.3px] cqa-leading-none cqa-tracking-normal cqa-align-middle cqa-text-black-100\"\n [placeholder]=\"placeholder\"\n [value]=\"inputValue\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-expanded]=\"panelOpen\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n autocomplete=\"off\"\n autocapitalize=\"none\"\n spellcheck=\"false\"\n [attr.autofocus]=\"autoFocus ? '' : null\"\n />\n <button\n *ngIf=\"showClear && inputValue\"\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-p-0 cqa-w-4 cqa-h-4 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer cqa-text-gray-500 cqa-hover:cqa-text-gray-700 disabled:cqa-text-gray-300 cqa-transition-colors cqa-leading-none\"\n (click)=\"clear()\"\n [disabled]=\"disabled\"\n aria-label=\"Clear\">\n <mat-icon\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-leading-none cqa-p-0\"\n [style.width.px]=\"16\"\n [style.height.px]=\"16\"\n [style.fontSize.px]=\"16\"\n [ngClass]=\"{ 'cqa-opacity-[0.38]': disabled }\">\n close\n </mat-icon>\n </button>\n </div>\n <!-- List box: below field, same width as field -->\n <ul\n *ngIf=\"panelOpen\"\n role=\"listbox\"\n class=\"cqa-autocomplete-list cqa-absolute cqa-left-0 cqa-right-0 cqa-top-full cqa-mt-1 cqa-py-1 cqa-border cqa-border-solid cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-shadow-sm cqa-max-h-[240px] cqa-overflow-y-auto cqa-scrollbar-thin cqa-z-10 cqa-list-none cqa-m-0 cqa-p-0\"\n [class.cqa-w-full]=\"fullWidth\">\n <li\n *ngFor=\"let option of displayOptions; trackBy: trackByValue\"\n role=\"option\"\n (mousedown)=\"selectOption(option); $event.preventDefault()\"\n class=\"cqa-px-4 cqa-py-2 cqa-text-[12.3px] cqa-leading-none cqa-tracking-normal cqa-text-black-100 cqa-cursor-pointer cqa-font-['SF_Pro_Text'] hover:cqa-bg-gray-100 cqa-transition-colors\">\n {{ getOptionLabel(option) }}\n </li>\n <li\n *ngIf=\"displayOptions.length === 0\"\n class=\"cqa-px-4 cqa-py-3 cqa-text-[12.3px] cqa-text-gray-400 cqa-cursor-default\">\n No matches\n </li>\n </ul>\n</div>\n" }]
127
+ args: [{ selector: 'cqa-autocomplete', host: { class: 'cqa-ui-root' }, template: "<div\n class=\"cqa-autocomplete-root cqa-relative\"\n [style.display]=\"fullWidth ? 'block' : 'inline-block'\"\n [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <!-- Field: same styling as search bar -->\n <div\n class=\"cqa-inline-flex cqa-items-center cqa-gap-2 cqa-px-6 cqa-py-3 cqa-text-[14px] cqa-border cqa-border-solid cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-shadow-sm cqa-transition-colors\"\n [ngClass]=\"[fullWidth ? 'cqa-w-full' : widthClasses[size]]\">\n <input\n type=\"text\"\n class=\"cqa-flex-1 cqa-min-w-0 cqa-border-none cqa-outline-none cqa-bg-transparent placeholder:cqa-text-gray-300 disabled:cqa-text-gray-400 disabled:cqa-cursor-not-allowed cqa-font-['SF_Pro_Text'] cqa-font-normal cqa-text-[12.3px] cqa-leading-none cqa-tracking-normal cqa-align-middle cqa-text-black-100\"\n [placeholder]=\"placeholder\"\n [value]=\"inputValue\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-expanded]=\"panelOpen\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n autocomplete=\"off\"\n autocapitalize=\"none\"\n spellcheck=\"false\"\n [attr.autofocus]=\"autoFocus ? '' : null\"\n />\n <button\n *ngIf=\"showClear && inputValue\"\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-p-0 cqa-w-4 cqa-h-4 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer cqa-text-gray-500 cqa-hover:cqa-text-gray-700 disabled:cqa-text-gray-300 cqa-transition-colors cqa-leading-none\"\n (click)=\"clear()\"\n [disabled]=\"disabled\"\n aria-label=\"Clear\">\n <mat-icon\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-leading-none cqa-p-0\"\n [style.width.px]=\"16\"\n [style.height.px]=\"16\"\n [style.fontSize.px]=\"16\"\n [ngClass]=\"{ 'cqa-opacity-[0.38]': disabled }\">\n close\n </mat-icon>\n </button>\n </div>\n <!-- List box: below field, same width as field -->\n <ul\n *ngIf=\"panelOpen\"\n role=\"listbox\"\n class=\"cqa-autocomplete-list cqa-absolute cqa-left-0 cqa-right-0 cqa-top-full cqa-mt-1 cqa-py-1 cqa-border cqa-border-solid cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-shadow-sm cqa-max-h-[240px] cqa-overflow-y-auto cqa-scrollbar-thin cqa-z-[1100] cqa-list-none cqa-m-0 cqa-p-0\"\n [class.cqa-w-full]=\"fullWidth\">\n <li\n *ngFor=\"let option of displayOptions; trackBy: trackByValue\"\n role=\"option\"\n (mousedown)=\"selectOption(option); $event.preventDefault()\"\n class=\"cqa-px-4 cqa-py-2 cqa-text-[12.3px] cqa-leading-none cqa-tracking-normal cqa-text-black-100 cqa-cursor-pointer cqa-font-['SF_Pro_Text'] hover:cqa-bg-gray-100 cqa-transition-colors\">\n {{ getOptionLabel(option) }}\n </li>\n <li\n *ngIf=\"displayOptions.length === 0\"\n class=\"cqa-px-4 cqa-py-3 cqa-text-[12.3px] cqa-text-gray-400 cqa-cursor-default\">\n No matches\n </li>\n </ul>\n</div>\n" }]
128
128
  }], propDecorators: { placeholder: [{
129
129
  type: Input
130
130
  }], options: [{
@@ -153,4 +153,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
153
153
  type: HostListener,
154
154
  args: ['document:keydown.escape']
155
155
  }] } });
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7Ozs7QUFVdkIsTUFBTSxPQUFPLHFCQUFxQjtJQUxsQztRQU1FLHFDQUFxQztRQUM1QixnQkFBVyxHQUFHLHFCQUFxQixDQUFDO1FBRTdDLGtFQUFrRTtRQUN6RCxZQUFPLEdBQTRCLEVBQUUsQ0FBQztRQUUvQywyREFBMkQ7UUFDbEQsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVwQix3QkFBd0I7UUFDZixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRTFCLDBEQUEwRDtRQUNqRCxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBRTFCLHFDQUFxQztRQUM1QixjQUFTLEdBQUcsZUFBZSxDQUFDO1FBRXJDLHlDQUF5QztRQUNoQyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRTNCLCtDQUErQztRQUN0QyxTQUFJLEdBQXFCLElBQUksQ0FBQztRQUV2Qyx5Q0FBeUM7UUFDaEMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUUzQixtRUFBbUU7UUFDekQsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRW5ELHdFQUF3RTtRQUM5RCxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUF5QixDQUFDO1FBRW5FLDBEQUEwRDtRQUNoRCxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUU3QyxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFD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LEVBQUUsYUFBYSxFQUFFOzhCQUlyQixXQUFXO3NCQUFuQixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFHRyxLQUFLO3NCQUFiLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxJQUFJO3NCQUFaLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFHSSxXQUFXO3NCQUFwQixNQUFNO2dCQUdHLFlBQVk7c0JBQXJCLE1BQU07Z0JBR0csT0FBTztzQkFBaEIsTUFBTTtnQkFvR1AsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENxYUF1dG9jb21wbGV0ZU9wdGlvbiB9IGZyb20gJy4vYXV0b2NvbXBsZXRlLm1vZGVsJztcblxudHlwZSBBdXRvY29tcGxldGVTaXplID0gJ3NtJyB8ICdtZCcgfCAnbGcnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtYXV0b2NvbXBsZXRlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCcsXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfSxcbn0pXG5leHBvcnQgY2xhc3MgQXV0b2NvbXBsZXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAvKiogUGxhY2Vob2xkZXIgdGV4dCBmb3IgdGhlIGlucHV0ICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1NlYXJjaCBvciBzZWxlY3QuLi4nO1xuXG4gIC8qKiBPcHRpb25zIHNob3duIGluIHRoZSBkcm9wZG93biAoZmlsdGVyZWQgYnkgaW5wdXQgd2hlbiBvcGVuKSAqL1xuICBASW5wdXQoKSBvcHRpb25zOiBDcWFBdXRvY29tcGxldGVPcHRpb25bXSA9IFtdO1xuXG4gIC8qKiBJbml0aWFsIG9yIGNvbnRyb2xsZWQgdmFsdWUgKGRpc3BsYXllZCBpbiB0aGUgaW5wdXQpICovXG4gIEBJbnB1dCgpIHZhbHVlID0gJyc7XG5cbiAgLyoqIERpc2FibGUgdGhlIGlucHV0ICovXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyB0aGUgY2xlYXIgYnV0dG9uIHdoZW4gdGhlcmUgaXMgdGV4dCAqL1xuICBASW5wdXQoKSBzaG93Q2xlYXIgPSB0cnVlO1xuXG4gIC8qKiBBY2Nlc3NpYmxlIGxhYmVsIGZvciB0aGUgaW5wdXQgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsID0gJ0F1dG8tY29tcGxldGUnO1xuXG4gIC8qKiBBdXRvIGZvY3VzIHRoZSBpbnB1dCB3aGVuIHJlbmRlcmVkICovXG4gIEBJbnB1dCgpIGF1dG9Gb2N1cyA9IGZhbHNlO1xuXG4gIC8qKiBTaXplIHZhcmlhbnQgKG1hdGNoZXMgc2VhcmNoIGJhciB3aWR0aHMpICovXG4gIEBJbnB1dCgpIHNpemU6IEF1dG9jb21wbGV0ZVNpemUgPSAnbWQnO1xuXG4gIC8qKiBTdHJldGNoIHRvIGZ1bGwgd2lkdGggb2YgY29udGFpbmVyICovXG4gIEBJbnB1dCgpIGZ1bGxXaWR0aCA9IGZhbHNlO1xuXG4gIC8qKiBFbWl0IHdoZW4gdGhlIGlucHV0IHZhbHVlIGNoYW5nZXMgKGUuZy4gZm9yIHR3by13YXkgYmluZGluZykgKi9cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLyoqIEVtaXQgd2hlbiBhbiBvcHRpb24gaXMgc2VsZWN0ZWQgZnJvbSB0aGUgbGlzdCAodmFsdWUgZnJvbSBvcHRpb24pICovXG4gIEBPdXRwdXQoKSBvcHRpb25TZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPENxYUF1dG9jb21wbGV0ZU9wdGlvbj4oKTtcblxuICAvKiogRW1pdCB3aGVuIHRoZSB2YWx1ZSBpcyBjbGVhcmVkIHZpYSB0aGUgY2xlYXIgYnV0dG9uICovXG4gIEBPdXRwdXQoKSBjbGVhcmVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGlucHV0VmFsdWUgPSAnJztcbiAgcGFuZWxPcGVuID0gZmFsc2U7XG4gIHByaXZhdGUgYmx1clRpbWVvdXQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gSW5pdGlhbGl6ZSBpbnB1dFZhbHVlIGZyb20gdmFsdWUgaW5wdXRcbiAgICBpZiAodGhpcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmFsdWUgIT09IG51bGwgJiYgdGhpcy52YWx1ZSAhPT0gJycpIHtcbiAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IFN0cmluZyh0aGlzLnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWyd2YWx1ZSddKSB7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IGNoYW5nZXNbJ3ZhbHVlJ10uY3VycmVudFZhbHVlO1xuICAgICAgaWYgKG5ld1ZhbHVlICE9PSB1bmRlZmluZWQgJiYgbmV3VmFsdWUgIT09IG51bGwgJiYgbmV3VmFsdWUgIT09ICcnKSB7XG4gICAgICAgIGNvbnN0IHN0cmluZ1ZhbHVlID0gU3RyaW5nKG5ld1ZhbHVlKTtcbiAgICAgICAgaWYgKHN0cmluZ1ZhbHVlICE9PSB0aGlzLmlucHV0VmFsdWUpIHtcbiAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSBzdHJpbmdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ2xlYXIgaW5wdXQgaWYgdmFsdWUgaXMgZW1wdHkvbnVsbC91bmRlZmluZWRcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRWYWx1ZSAhPT0gJycpIHtcbiAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlYWRvbmx5IHdpZHRoQ2xhc3NlczogUmVjb3JkPEF1dG9jb21wbGV0ZVNpemUsIHN0cmluZz4gPSB7XG4gICAgc206ICdjcWEtdy1bMjk1cHhdJyxcbiAgICBtZDogJ2NxYS13LVszOTVweF0nLFxuICAgIGxnOiAnY3FhLXctWzQ5NXB4XScsXG4gIH07XG5cbiAgZ2V0IGRpc3BsYXlPcHRpb25zKCk6IENxYUF1dG9jb21wbGV0ZU9wdGlvbltdIHtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5vcHRpb25zID8/IFtdO1xuICAgIGNvbnN0IHEgPSAodGhpcy5pbnB1dFZhbHVlID8/ICcnKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBpZiAoIXEpIHtcbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cbiAgICByZXR1cm4gbGlzdC5maWx0ZXIoKG9wdCkgPT4ge1xuICAgICAgY29uc3QgbGFiZWwgPSAob3B0LmxhYmVsID8/IG9wdC52YWx1ZSA/PyAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiBsYWJlbC5pbmNsdWRlcyhxKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uSW5wdXQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsO1xuICAgIGNvbnN0IG5leHRWYWx1ZSA9IHRhcmdldD8udmFsdWUgPz8gJyc7XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gbmV4dFZhbHVlO1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmlucHV0VmFsdWUpO1xuICAgIHRoaXMucGFuZWxPcGVuID0gdHJ1ZTtcbiAgfVxuXG4gIG9uRm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYmx1clRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmJsdXJUaW1lb3V0KTtcbiAgICAgIHRoaXMuYmx1clRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnBhbmVsT3BlbiA9IHRydWU7XG4gIH1cblxuICBvbkJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5ibHVyVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5wYW5lbE9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuYmx1clRpbWVvdXQgPSBudWxsO1xuICAgIH0sIDE1MCk7XG4gIH1cblxuICBzZWxlY3RPcHRpb24ob3B0aW9uOiBDcWFBdXRvY29tcGxldGVPcHRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBkaXNwbGF5TGFiZWwgPSBvcHRpb24ubGFiZWwgPz8gb3B0aW9uLnZhbHVlO1xuICAgIHRoaXMuaW5wdXRWYWx1ZSA9IGRpc3BsYXlMYWJlbDtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5pbnB1dFZhbHVlKTtcbiAgICB0aGlzLm9wdGlvblNlbGVjdC5lbWl0KG9wdGlvbik7XG4gICAgdGhpcy5wYW5lbE9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMuaW5wdXRWYWx1ZSA9PT0gJycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KCcnKTtcbiAgICB0aGlzLmNsZWFyZWQuZW1pdCgpO1xuICAgIHRoaXMucGFuZWxPcGVuID0gZmFsc2U7XG4gIH1cblxuICBnZXRPcHRpb25MYWJlbChvcHRpb246IENxYUF1dG9jb21wbGV0ZU9wdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIG9wdGlvbi5sYWJlbCA/PyBvcHRpb24udmFsdWUgPz8gJyc7XG4gIH1cblxuICB0cmFja0J5VmFsdWUoX2luZGV4OiBudW1iZXIsIG9wdGlvbjogQ3FhQXV0b2NvbXBsZXRlT3B0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gb3B0aW9uLnZhbHVlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnKVxuICBvbkVzY2FwZSgpOiB2b2lkIHtcbiAgICB0aGlzLnBhbmVsT3BlbiA9IGZhbHNlO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiY3FhLWF1dG9jb21wbGV0ZS1yb290IGNxYS1yZWxhdGl2ZVwiXG4gIFtzdHlsZS5kaXNwbGF5XT1cImZ1bGxXaWR0aCA/ICdibG9jaycgOiAnaW5saW5lLWJsb2NrJ1wiXG4gIFtzdHlsZS53aWR0aF09XCJmdWxsV2lkdGggPyAnMTAwJScgOiAnYXV0bydcIj5cbiAgPCEtLSBGaWVsZDogc2FtZSBzdHlsaW5nIGFzIHNlYXJjaCBiYXIgLS0+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNxYS1pbmxpbmUtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtcHgtNiBjcWEtcHktMyBjcWEtdGV4dC1bMTRweF0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItZ3JheS0yMDAgY3FhLXJvdW5kZWQtbWQgY3FhLWJnLXdoaXRlIGNxYS1zaGFkb3ctc20gY3FhLXRyYW5zaXRpb24tY29sb3JzXCJcbiAgICBbbmdDbGFzc109XCJbZnVsbFdpZHRoID8gJ2NxYS13LWZ1bGwnIDogd2lkdGhDbGFzc2VzW3NpemVdXVwiPlxuICAgIDxpbnB1dFxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1taW4tdy0wIGNxYS1ib3JkZXItbm9uZSBjcWEtb3V0bGluZS1ub25lIGNxYS1iZy10cmFuc3BhcmVudCBwbGFjZWhvbGRlcjpjcWEtdGV4dC1ncmF5LTMwMCBkaXNhYmxlZDpjcWEtdGV4dC1ncmF5LTQwMCBkaXNhYmxlZDpjcWEtY3Vyc29yLW5vdC1hbGxvd2VkIGNxYS1mb250LVsnU0ZfUHJvX1RleHQnXSBjcWEtZm9udC1ub3JtYWwgY3FhLXRleHQtWzEyLjNweF0gY3FhLWxlYWRpbmctbm9uZSBjcWEtdHJhY2tpbmctbm9ybWFsIGNxYS1hbGlnbi1taWRkbGUgY3FhLXRleHQtYmxhY2stMTAwXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICBbdmFsdWVdPVwiaW5wdXRWYWx1ZVwiXG4gICAgICAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQpXCJcbiAgICAgIChmb2N1cyk9XCJvbkZvY3VzKClcIlxuICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwicGFuZWxPcGVuXCJcbiAgICAgIGFyaWEtYXV0b2NvbXBsZXRlPVwibGlzdFwiXG4gICAgICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG4gICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgYXV0b2NhcGl0YWxpemU9XCJub25lXCJcbiAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgICBbYXR0ci5hdXRvZm9jdXNdPVwiYXV0b0ZvY3VzID8gJycgOiBudWxsXCJcbiAgICAvPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwic2hvd0NsZWFyICYmIGlucHV0VmFsdWVcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS1wLTAgY3FhLXctNCBjcWEtaC00IGNxYS1ib3JkZXItMCBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLWN1cnNvci1wb2ludGVyIGNxYS10ZXh0LWdyYXktNTAwIGNxYS1ob3ZlcjpjcWEtdGV4dC1ncmF5LTcwMCBkaXNhYmxlZDpjcWEtdGV4dC1ncmF5LTMwMCBjcWEtdHJhbnNpdGlvbi1jb2xvcnMgY3FhLWxlYWRpbmctbm9uZVwiXG4gICAgICAoY2xpY2spPVwiY2xlYXIoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCI+XG4gICAgICA8bWF0LWljb25cbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtbGVhZGluZy1ub25lIGNxYS1wLTBcIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiMTZcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIjE2XCJcbiAgICAgICAgW3N0eWxlLmZvbnRTaXplLnB4XT1cIjE2XCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnY3FhLW9wYWNpdHktWzAuMzhdJzogZGlzYWJsZWQgfVwiPlxuICAgICAgICBjbG9zZVxuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDwhLS0gTGlzdCBib3g6IGJlbG93IGZpZWxkLCBzYW1lIHdpZHRoIGFzIGZpZWxkIC0tPlxuICA8dWxcbiAgICAqbmdJZj1cInBhbmVsT3BlblwiXG4gICAgcm9sZT1cImxpc3Rib3hcIlxuICAgIGNsYXNzPVwiY3FhLWF1dG9jb21wbGV0ZS1saXN0IGNxYS1hYnNvbHV0ZSBjcWEtbGVmdC0wIGNxYS1yaWdodC0wIGNxYS10b3AtZnVsbCBjcWEtbXQtMSBjcWEtcHktMSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1ncmF5LTIwMCBjcWEtcm91bmRlZC1tZCBjcWEtYmctd2hpdGUgY3FhLXNoYWRvdy1zbSBjcWEtbWF4LWgtWzI0MHB4XSBjcWEtb3ZlcmZsb3cteS1hdXRvIGNxYS1zY3JvbGxiYXItdGhpbiBjcWEtei0xMCBjcWEtbGlzdC1ub25lIGNxYS1tLTAgY3FhLXAtMFwiXG4gICAgW2NsYXNzLmNxYS13LWZ1bGxdPVwiZnVsbFdpZHRoXCI+XG4gICAgPGxpXG4gICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGRpc3BsYXlPcHRpb25zOyB0cmFja0J5OiB0cmFja0J5VmFsdWVcIlxuICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAobW91c2Vkb3duKT1cInNlbGVjdE9wdGlvbihvcHRpb24pOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICBjbGFzcz1cImNxYS1weC00IGNxYS1weS0yIGNxYS10ZXh0LVsxMi4zcHhdIGNxYS1sZWFkaW5nLW5vbmUgY3FhLXRyYWNraW5nLW5vcm1hbCBjcWEtdGV4dC1ibGFjay0xMDAgY3FhLWN1cnNvci1wb2ludGVyIGNxYS1mb250LVsnU0ZfUHJvX1RleHQnXSBob3ZlcjpjcWEtYmctZ3JheS0xMDAgY3FhLXRyYW5zaXRpb24tY29sb3JzXCI+XG4gICAgICB7eyBnZXRPcHRpb25MYWJlbChvcHRpb24pIH19XG4gICAgPC9saT5cbiAgICA8bGlcbiAgICAgICpuZ0lmPVwiZGlzcGxheU9wdGlvbnMubGVuZ3RoID09PSAwXCJcbiAgICAgIGNsYXNzPVwiY3FhLXB4LTQgY3FhLXB5LTMgY3FhLXRleHQtWzEyLjNweF0gY3FhLXRleHQtZ3JheS00MDAgY3FhLWN1cnNvci1kZWZhdWx0XCI+XG4gICAgICBObyBtYXRjaGVzXG4gICAgPC9saT5cbiAgPC91bD5cbjwvZGl2PlxuIl19
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7Ozs7QUFVdkIsTUFBTSxPQUFPLHFCQUFxQjtJQUxsQztRQU1FLHFDQUFxQztRQUM1QixnQkFBVyxHQUFHLHFCQUFxQixDQUFDO1FBRTdDLGtFQUFrRTtRQUN6RCxZQUFPLEdBQTRCLEVBQUUsQ0FBQztRQUUvQywyREFBMkQ7UUFDbEQsVUFBSyxHQUFHLEVBQUUsQ0FBQztRQUVwQix3QkFBd0I7UUFDZixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRTFCLDBEQUEwRDtRQUNqRCxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBRTFCLHFDQUFxQztRQUM1QixjQUFTLEdBQUcsZUFBZSxDQUFDO1FBRXJDLHlDQUF5QztRQUNoQyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRTNCLCtDQUErQztRQUN0QyxTQUFJLEdBQXFCLElBQUksQ0FBQztRQUV2Qyx5Q0FBeUM7UUFDaEMsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUUzQixtRUFBbUU7UUFDekQsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRW5ELHdFQUF3RTtRQUM5RCxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUF5QixDQUFDO1FBRW5FLDBEQUEwRDtRQUNoRCxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUU3QyxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFD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LEVBQUUsYUFBYSxFQUFFOzhCQUlyQixXQUFXO3NCQUFuQixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFHRyxLQUFLO3NCQUFiLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxJQUFJO3NCQUFaLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFHSSxXQUFXO3NCQUFwQixNQUFNO2dCQUdHLFlBQVk7c0JBQXJCLE1BQU07Z0JBR0csT0FBTztzQkFBaEIsTUFBTTtnQkFvR1AsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENxYUF1dG9jb21wbGV0ZU9wdGlvbiB9IGZyb20gJy4vYXV0b2NvbXBsZXRlLm1vZGVsJztcblxudHlwZSBBdXRvY29tcGxldGVTaXplID0gJ3NtJyB8ICdtZCcgfCAnbGcnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtYXV0b2NvbXBsZXRlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCcsXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfSxcbn0pXG5leHBvcnQgY2xhc3MgQXV0b2NvbXBsZXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAvKiogUGxhY2Vob2xkZXIgdGV4dCBmb3IgdGhlIGlucHV0ICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ1NlYXJjaCBvciBzZWxlY3QuLi4nO1xuXG4gIC8qKiBPcHRpb25zIHNob3duIGluIHRoZSBkcm9wZG93biAoZmlsdGVyZWQgYnkgaW5wdXQgd2hlbiBvcGVuKSAqL1xuICBASW5wdXQoKSBvcHRpb25zOiBDcWFBdXRvY29tcGxldGVPcHRpb25bXSA9IFtdO1xuXG4gIC8qKiBJbml0aWFsIG9yIGNvbnRyb2xsZWQgdmFsdWUgKGRpc3BsYXllZCBpbiB0aGUgaW5wdXQpICovXG4gIEBJbnB1dCgpIHZhbHVlID0gJyc7XG5cbiAgLyoqIERpc2FibGUgdGhlIGlucHV0ICovXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyB0aGUgY2xlYXIgYnV0dG9uIHdoZW4gdGhlcmUgaXMgdGV4dCAqL1xuICBASW5wdXQoKSBzaG93Q2xlYXIgPSB0cnVlO1xuXG4gIC8qKiBBY2Nlc3NpYmxlIGxhYmVsIGZvciB0aGUgaW5wdXQgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsID0gJ0F1dG8tY29tcGxldGUnO1xuXG4gIC8qKiBBdXRvIGZvY3VzIHRoZSBpbnB1dCB3aGVuIHJlbmRlcmVkICovXG4gIEBJbnB1dCgpIGF1dG9Gb2N1cyA9IGZhbHNlO1xuXG4gIC8qKiBTaXplIHZhcmlhbnQgKG1hdGNoZXMgc2VhcmNoIGJhciB3aWR0aHMpICovXG4gIEBJbnB1dCgpIHNpemU6IEF1dG9jb21wbGV0ZVNpemUgPSAnbWQnO1xuXG4gIC8qKiBTdHJldGNoIHRvIGZ1bGwgd2lkdGggb2YgY29udGFpbmVyICovXG4gIEBJbnB1dCgpIGZ1bGxXaWR0aCA9IGZhbHNlO1xuXG4gIC8qKiBFbWl0IHdoZW4gdGhlIGlucHV0IHZhbHVlIGNoYW5nZXMgKGUuZy4gZm9yIHR3by13YXkgYmluZGluZykgKi9cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLyoqIEVtaXQgd2hlbiBhbiBvcHRpb24gaXMgc2VsZWN0ZWQgZnJvbSB0aGUgbGlzdCAodmFsdWUgZnJvbSBvcHRpb24pICovXG4gIEBPdXRwdXQoKSBvcHRpb25TZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPENxYUF1dG9jb21wbGV0ZU9wdGlvbj4oKTtcblxuICAvKiogRW1pdCB3aGVuIHRoZSB2YWx1ZSBpcyBjbGVhcmVkIHZpYSB0aGUgY2xlYXIgYnV0dG9uICovXG4gIEBPdXRwdXQoKSBjbGVhcmVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGlucHV0VmFsdWUgPSAnJztcbiAgcGFuZWxPcGVuID0gZmFsc2U7XG4gIHByaXZhdGUgYmx1clRpbWVvdXQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gSW5pdGlhbGl6ZSBpbnB1dFZhbHVlIGZyb20gdmFsdWUgaW5wdXRcbiAgICBpZiAodGhpcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmFsdWUgIT09IG51bGwgJiYgdGhpcy52YWx1ZSAhPT0gJycpIHtcbiAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IFN0cmluZyh0aGlzLnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWyd2YWx1ZSddKSB7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IGNoYW5nZXNbJ3ZhbHVlJ10uY3VycmVudFZhbHVlO1xuICAgICAgaWYgKG5ld1ZhbHVlICE9PSB1bmRlZmluZWQgJiYgbmV3VmFsdWUgIT09IG51bGwgJiYgbmV3VmFsdWUgIT09ICcnKSB7XG4gICAgICAgIGNvbnN0IHN0cmluZ1ZhbHVlID0gU3RyaW5nKG5ld1ZhbHVlKTtcbiAgICAgICAgaWYgKHN0cmluZ1ZhbHVlICE9PSB0aGlzLmlucHV0VmFsdWUpIHtcbiAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSBzdHJpbmdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ2xlYXIgaW5wdXQgaWYgdmFsdWUgaXMgZW1wdHkvbnVsbC91bmRlZmluZWRcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRWYWx1ZSAhPT0gJycpIHtcbiAgICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlYWRvbmx5IHdpZHRoQ2xhc3NlczogUmVjb3JkPEF1dG9jb21wbGV0ZVNpemUsIHN0cmluZz4gPSB7XG4gICAgc206ICdjcWEtdy1bMjk1cHhdJyxcbiAgICBtZDogJ2NxYS13LVszOTVweF0nLFxuICAgIGxnOiAnY3FhLXctWzQ5NXB4XScsXG4gIH07XG5cbiAgZ2V0IGRpc3BsYXlPcHRpb25zKCk6IENxYUF1dG9jb21wbGV0ZU9wdGlvbltdIHtcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5vcHRpb25zID8/IFtdO1xuICAgIGNvbnN0IHEgPSAodGhpcy5pbnB1dFZhbHVlID8/ICcnKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBpZiAoIXEpIHtcbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cbiAgICByZXR1cm4gbGlzdC5maWx0ZXIoKG9wdCkgPT4ge1xuICAgICAgY29uc3QgbGFiZWwgPSAob3B0LmxhYmVsID8/IG9wdC52YWx1ZSA/PyAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgIHJldHVybiBsYWJlbC5pbmNsdWRlcyhxKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uSW5wdXQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsO1xuICAgIGNvbnN0IG5leHRWYWx1ZSA9IHRhcmdldD8udmFsdWUgPz8gJyc7XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gbmV4dFZhbHVlO1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmlucHV0VmFsdWUpO1xuICAgIHRoaXMucGFuZWxPcGVuID0gdHJ1ZTtcbiAgfVxuXG4gIG9uRm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYmx1clRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmJsdXJUaW1lb3V0KTtcbiAgICAgIHRoaXMuYmx1clRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnBhbmVsT3BlbiA9IHRydWU7XG4gIH1cblxuICBvbkJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5ibHVyVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5wYW5lbE9wZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuYmx1clRpbWVvdXQgPSBudWxsO1xuICAgIH0sIDE1MCk7XG4gIH1cblxuICBzZWxlY3RPcHRpb24ob3B0aW9uOiBDcWFBdXRvY29tcGxldGVPcHRpb24pOiB2b2lkIHtcbiAgICBjb25zdCBkaXNwbGF5TGFiZWwgPSBvcHRpb24ubGFiZWwgPz8gb3B0aW9uLnZhbHVlO1xuICAgIHRoaXMuaW5wdXRWYWx1ZSA9IGRpc3BsYXlMYWJlbDtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy5pbnB1dFZhbHVlKTtcbiAgICB0aGlzLm9wdGlvblNlbGVjdC5lbWl0KG9wdGlvbik7XG4gICAgdGhpcy5wYW5lbE9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMuaW5wdXRWYWx1ZSA9PT0gJycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KCcnKTtcbiAgICB0aGlzLmNsZWFyZWQuZW1pdCgpO1xuICAgIHRoaXMucGFuZWxPcGVuID0gZmFsc2U7XG4gIH1cblxuICBnZXRPcHRpb25MYWJlbChvcHRpb246IENxYUF1dG9jb21wbGV0ZU9wdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIG9wdGlvbi5sYWJlbCA/PyBvcHRpb24udmFsdWUgPz8gJyc7XG4gIH1cblxuICB0cmFja0J5VmFsdWUoX2luZGV4OiBudW1iZXIsIG9wdGlvbjogQ3FhQXV0b2NvbXBsZXRlT3B0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gb3B0aW9uLnZhbHVlO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnKVxuICBvbkVzY2FwZSgpOiB2b2lkIHtcbiAgICB0aGlzLnBhbmVsT3BlbiA9IGZhbHNlO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiY3FhLWF1dG9jb21wbGV0ZS1yb290IGNxYS1yZWxhdGl2ZVwiXG4gIFtzdHlsZS5kaXNwbGF5XT1cImZ1bGxXaWR0aCA/ICdibG9jaycgOiAnaW5saW5lLWJsb2NrJ1wiXG4gIFtzdHlsZS53aWR0aF09XCJmdWxsV2lkdGggPyAnMTAwJScgOiAnYXV0bydcIj5cbiAgPCEtLSBGaWVsZDogc2FtZSBzdHlsaW5nIGFzIHNlYXJjaCBiYXIgLS0+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNxYS1pbmxpbmUtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtcHgtNiBjcWEtcHktMyBjcWEtdGV4dC1bMTRweF0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItZ3JheS0yMDAgY3FhLXJvdW5kZWQtbWQgY3FhLWJnLXdoaXRlIGNxYS1zaGFkb3ctc20gY3FhLXRyYW5zaXRpb24tY29sb3JzXCJcbiAgICBbbmdDbGFzc109XCJbZnVsbFdpZHRoID8gJ2NxYS13LWZ1bGwnIDogd2lkdGhDbGFzc2VzW3NpemVdXVwiPlxuICAgIDxpbnB1dFxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1taW4tdy0wIGNxYS1ib3JkZXItbm9uZSBjcWEtb3V0bGluZS1ub25lIGNxYS1iZy10cmFuc3BhcmVudCBwbGFjZWhvbGRlcjpjcWEtdGV4dC1ncmF5LTMwMCBkaXNhYmxlZDpjcWEtdGV4dC1ncmF5LTQwMCBkaXNhYmxlZDpjcWEtY3Vyc29yLW5vdC1hbGxvd2VkIGNxYS1mb250LVsnU0ZfUHJvX1RleHQnXSBjcWEtZm9udC1ub3JtYWwgY3FhLXRleHQtWzEyLjNweF0gY3FhLWxlYWRpbmctbm9uZSBjcWEtdHJhY2tpbmctbm9ybWFsIGNxYS1hbGlnbi1taWRkbGUgY3FhLXRleHQtYmxhY2stMTAwXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICBbdmFsdWVdPVwiaW5wdXRWYWx1ZVwiXG4gICAgICAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQpXCJcbiAgICAgIChmb2N1cyk9XCJvbkZvY3VzKClcIlxuICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwicGFuZWxPcGVuXCJcbiAgICAgIGFyaWEtYXV0b2NvbXBsZXRlPVwibGlzdFwiXG4gICAgICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG4gICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgYXV0b2NhcGl0YWxpemU9XCJub25lXCJcbiAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgICBbYXR0ci5hdXRvZm9jdXNdPVwiYXV0b0ZvY3VzID8gJycgOiBudWxsXCJcbiAgICAvPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwic2hvd0NsZWFyICYmIGlucHV0VmFsdWVcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS1wLTAgY3FhLXctNCBjcWEtaC00IGNxYS1ib3JkZXItMCBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLWN1cnNvci1wb2ludGVyIGNxYS10ZXh0LWdyYXktNTAwIGNxYS1ob3ZlcjpjcWEtdGV4dC1ncmF5LTcwMCBkaXNhYmxlZDpjcWEtdGV4dC1ncmF5LTMwMCBjcWEtdHJhbnNpdGlvbi1jb2xvcnMgY3FhLWxlYWRpbmctbm9uZVwiXG4gICAgICAoY2xpY2spPVwiY2xlYXIoKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCI+XG4gICAgICA8bWF0LWljb25cbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtbGVhZGluZy1ub25lIGNxYS1wLTBcIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiMTZcIlxuICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIjE2XCJcbiAgICAgICAgW3N0eWxlLmZvbnRTaXplLnB4XT1cIjE2XCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnY3FhLW9wYWNpdHktWzAuMzhdJzogZGlzYWJsZWQgfVwiPlxuICAgICAgICBjbG9zZVxuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDwhLS0gTGlzdCBib3g6IGJlbG93IGZpZWxkLCBzYW1lIHdpZHRoIGFzIGZpZWxkIC0tPlxuICA8dWxcbiAgICAqbmdJZj1cInBhbmVsT3BlblwiXG4gICAgcm9sZT1cImxpc3Rib3hcIlxuICAgIGNsYXNzPVwiY3FhLWF1dG9jb21wbGV0ZS1saXN0IGNxYS1hYnNvbHV0ZSBjcWEtbGVmdC0wIGNxYS1yaWdodC0wIGNxYS10b3AtZnVsbCBjcWEtbXQtMSBjcWEtcHktMSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1ncmF5LTIwMCBjcWEtcm91bmRlZC1tZCBjcWEtYmctd2hpdGUgY3FhLXNoYWRvdy1zbSBjcWEtbWF4LWgtWzI0MHB4XSBjcWEtb3ZlcmZsb3cteS1hdXRvIGNxYS1zY3JvbGxiYXItdGhpbiBjcWEtei1bMTEwMF0gY3FhLWxpc3Qtbm9uZSBjcWEtbS0wIGNxYS1wLTBcIlxuICAgIFtjbGFzcy5jcWEtdy1mdWxsXT1cImZ1bGxXaWR0aFwiPlxuICAgIDxsaVxuICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBkaXNwbGF5T3B0aW9uczsgdHJhY2tCeTogdHJhY2tCeVZhbHVlXCJcbiAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgKG1vdXNlZG93bik9XCJzZWxlY3RPcHRpb24ob3B0aW9uKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgY2xhc3M9XCJjcWEtcHgtNCBjcWEtcHktMiBjcWEtdGV4dC1bMTIuM3B4XSBjcWEtbGVhZGluZy1ub25lIGNxYS10cmFja2luZy1ub3JtYWwgY3FhLXRleHQtYmxhY2stMTAwIGNxYS1jdXJzb3ItcG9pbnRlciBjcWEtZm9udC1bJ1NGX1Byb19UZXh0J10gaG92ZXI6Y3FhLWJnLWdyYXktMTAwIGNxYS10cmFuc2l0aW9uLWNvbG9yc1wiPlxuICAgICAge3sgZ2V0T3B0aW9uTGFiZWwob3B0aW9uKSB9fVxuICAgIDwvbGk+XG4gICAgPGxpXG4gICAgICAqbmdJZj1cImRpc3BsYXlPcHRpb25zLmxlbmd0aCA9PT0gMFwiXG4gICAgICBjbGFzcz1cImNxYS1weC00IGNxYS1weS0zIGNxYS10ZXh0LVsxMi4zcHhdIGNxYS10ZXh0LWdyYXktNDAwIGNxYS1jdXJzb3ItZGVmYXVsdFwiPlxuICAgICAgTm8gbWF0Y2hlc1xuICAgIDwvbGk+XG4gIDwvdWw+XG48L2Rpdj5cbiJdfQ==