@cqa-lib/cqa-ui 1.1.267 → 1.1.269
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/autocomplete/autocomplete.component.mjs +3 -3
- package/esm2020/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.mjs +31 -4
- package/esm2020/lib/test-case-details/ai-agent-step/ai-agent-step.component.mjs +3 -3
- package/esm2020/lib/test-case-details/ai-verify-step/ai-verify-step.component.mjs +3 -3
- package/esm2020/lib/test-case-details/api-step/api-step.component.mjs +3 -3
- package/esm2020/lib/test-case-details/condition-step/condition-step.component.mjs +29 -3
- package/esm2020/lib/test-case-details/custom-code-step/custom-code-step.component.mjs +3 -3
- package/esm2020/lib/test-case-details/database-step/database-step.component.mjs +3 -3
- package/esm2020/lib/test-case-details/delete-steps/delete-steps.component.mjs +8 -3
- package/esm2020/lib/test-case-details/loop-step/loop-step.component.mjs +34 -3
- package/esm2020/lib/test-case-details/normal-step/normal-step.component.mjs +3 -3
- package/esm2020/lib/test-case-details/restore-session-step/restore-session-step.component.mjs +3 -3
- package/esm2020/lib/test-case-details/screenshot-step/screenshot-step.component.mjs +3 -3
- package/esm2020/lib/test-case-details/scroll-step/scroll-step.component.mjs +3 -3
- package/esm2020/lib/test-case-details/step-group/step-group.component.mjs +61 -15
- package/esm2020/lib/test-case-details/upload-step/upload-step.component.mjs +3 -3
- package/esm2020/lib/test-case-details/verify-url-step/verify-url-step.component.mjs +3 -3
- package/fesm2015/cqa-lib-cqa-ui.mjs +188 -47
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +182 -47
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.d.ts +9 -1
- package/lib/test-case-details/condition-step/condition-step.component.d.ts +4 -0
- package/lib/test-case-details/delete-steps/delete-steps.component.d.ts +5 -1
- package/lib/test-case-details/loop-step/loop-step.component.d.ts +6 -0
- package/lib/test-case-details/step-group/step-group.component.d.ts +15 -1
- package/package.json +1 -1
- 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-
|
|
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-
|
|
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==
|
|
@@ -16,6 +16,10 @@ export class StepBuilderAiAgentComponent {
|
|
|
16
16
|
this.typeOptions = [];
|
|
17
17
|
/** Options for environments dropdown */
|
|
18
18
|
this.environmentOptions = [];
|
|
19
|
+
/** Indicates if more environments are available for loading */
|
|
20
|
+
this.hasMoreEnvironments = false;
|
|
21
|
+
/** Loading state for environments */
|
|
22
|
+
this.isLoadingEnvironments = false;
|
|
19
23
|
/** Options for retry count dropdown */
|
|
20
24
|
this.retryCountOptions = [];
|
|
21
25
|
/** Options for iframe locator dropdown */
|
|
@@ -27,6 +31,10 @@ export class StepBuilderAiAgentComponent {
|
|
|
27
31
|
this.createStep = new EventEmitter();
|
|
28
32
|
/** Emit when cancelled */
|
|
29
33
|
this.cancelled = new EventEmitter();
|
|
34
|
+
/** Emit when user searches for environments */
|
|
35
|
+
this.searchEnvironments = new EventEmitter();
|
|
36
|
+
/** Emit when user scrolls to load more environments */
|
|
37
|
+
this.loadMoreEnvironments = new EventEmitter();
|
|
30
38
|
this.showAdvanced = false;
|
|
31
39
|
this.hasLoadedInitialData = false;
|
|
32
40
|
// Advanced settings variables (can be provided from parent or initialized from form)
|
|
@@ -248,8 +256,19 @@ export class StepBuilderAiAgentComponent {
|
|
|
248
256
|
key: 'environments',
|
|
249
257
|
placeholder: 'Select environment',
|
|
250
258
|
multiple: false,
|
|
251
|
-
searchable:
|
|
252
|
-
|
|
259
|
+
searchable: true,
|
|
260
|
+
serverSearch: true,
|
|
261
|
+
options: this.environmentOptions,
|
|
262
|
+
hasMore: this.hasMoreEnvironments,
|
|
263
|
+
isLoading: this.isLoadingEnvironments,
|
|
264
|
+
onSearch: (searchTerm) => {
|
|
265
|
+
this.searchEnvironments.emit(searchTerm);
|
|
266
|
+
},
|
|
267
|
+
onLoadMore: () => {
|
|
268
|
+
if (this.hasMoreEnvironments && !this.isLoadingEnvironments) {
|
|
269
|
+
this.loadMoreEnvironments.emit();
|
|
270
|
+
}
|
|
271
|
+
}
|
|
253
272
|
};
|
|
254
273
|
}
|
|
255
274
|
getRetryCountConfig() {
|
|
@@ -366,7 +385,7 @@ export class StepBuilderAiAgentComponent {
|
|
|
366
385
|
}
|
|
367
386
|
}
|
|
368
387
|
StepBuilderAiAgentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderAiAgentComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
369
|
-
StepBuilderAiAgentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepBuilderAiAgentComponent, selector: "cqa-step-builder-ai-agent", inputs: { typeOptions: "typeOptions", environmentOptions: "environmentOptions", retryCountOptions: "retryCountOptions", iframeLocatorOptions: "iframeLocatorOptions", otherLocatorsOptions: "otherLocatorsOptions", initialQuery: "initialQuery", initialType: "initialType", initialDescription: "initialDescription", initialEnvironments: "initialEnvironments", initialMetadata: "initialMetadata", initialDisabled: "initialDisabled", initialContinueOnError: "initialContinueOnError", initialRetryCount: "initialRetryCount", initialIframeLocator: "initialIframeLocator", initialOtherLocators: "initialOtherLocators", editMode: "editMode", advancedSettingsVariables: "advancedSettingsVariables" }, outputs: { createStep: "createStep", cancelled: "cancelled" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-px-4 cqa-py-2 cqa-h-full\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n {{ editMode ? 'Edit AI Step' : 'Create AI Step' }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- What should the agent achieve? -->\n <div class=\"cqa-mb-6\">\n <label class=\"cqa-text-[14px] cqa-font-medium cqa-text-gray-700 cqa-mb-1 cqa-block\">\n What should the agent achieve?<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-custom-textarea\n class=\"cqa-step-builder-ai-agent-textarea\"\n [placeholder]=\"'What should the agent achieve?'\"\n [value]=\"aiAgentForm.get('query')?.value\"\n [fullWidth]=\"true\"\n [rows]=\"4\"\n (valueChange)=\"aiAgentForm.get('query')?.setValue($event)\">\n </cqa-custom-textarea>\n <p class=\"cqa-text-[12px] cqa-text-[#0A0A0A] \">\n Tip: Use numbered steps or bullet points for complex tasks.\n </p>\n </div>\n <div class=\"cqa-flex cqa-flex-wrap cqa-custom-form-fields\">\n <!-- Type Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Type<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select class=\"cqa-w-full\" [form]=\"aiAgentForm\" [config]=\"getTypeConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Environments Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pl-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Envioronments<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getEnvironmentConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Metadata Input -->\n <div class=\"cqa-mb-2 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Metadata\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('metadata')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('metadata')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Description Input -->\n <div class=\"cqa-w-1/2 cqa-pl-2 \">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Description\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('description')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('description')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n\n <!-- Advanced Section -->\n <div class=\"cqa-mb-2\">\n <button\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-w-full cqa-text-left cqa-text-[12px] cqa-font-medium cqa-text-gray-700 cqa-py-2 cqa-border-b cqa-border-gray-200\"\n (click)=\"toggleAdvanced()\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-lg cqa-transition-transform\" [class.cqa-rotate-180]=\"showAdvanced\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"showAdvanced\" class=\" cqa-custom-form-fields cqa-flex cqa-flex-col\">\n <cqa-advanced-variables-form \n [advancedVariables]=\"advancedSettingsVariables\"\n [advancedVariableForm]=\"advancedVariablesForm\"\n (variableBooleanChange)=\"onAdvancedVariableBooleanChange($event.name, $event.value)\"\n (variableValueChange)=\"onAdvancedVariableValueChange($event.name, $event.value)\">\n </cqa-advanced-variables-form>\n <!-- Continue on Error -->\n <!-- <div class=\"cqa-mb-1\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[10px] cqa-text-[#737373]\">Continue on Error</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <mat-slide-toggle\n class=\"cqa-step-builder-toggle-section\"\n [checked]=\"aiAgentForm.get('continueOnError')?.value || false\"\n (change)=\"aiAgentForm.get('continueOnError')?.setValue($event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Don't fail the test if this step fails.\n </label>\n </div>\n </div> -->\n\n <!-- Disabled -->\n <!-- <div class=\"cqa-mb-1\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[10px] cqa-font-medium cqa-text-[#737373]\">Disabled</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <mat-slide-toggle\n class=\"cqa-step-builder-toggle-section\"\n [checked]=\"aiAgentForm.get('disabled')?.value || false\"\n (change)=\"aiAgentForm.get('disabled')?.setValue($event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Skip this step during execution.\n </label>\n </div>\n </div> -->\n\n <!-- Retry Count -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Retry Count\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getRetryCountConfig()\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Iframe locator -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Iframe locator\n </label>\n <cqa-dynamic-select class=\"cqa-text-[#414146]\" [form]=\"aiAgentForm\" [config]=\"getIframeLocatorConfig()\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Other Locators -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Other Locators\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getOtherLocatorsConfig()\">\n </cqa-dynamic-select>\n </div> -->\n </div>\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2 cqa-rounded-[10px]\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button class=\"cqa-border-solid cqa-rounded-[9px] cqa-w-1/2 cqa-border cqa-border-[#3F43EE]\" variant=\"filled\" [text]=\"editMode ? 'Update Step' : 'Create Step'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!aiAgentForm.valid\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>\n\n", components: [{ type: i2.CustomTextareaComponent, selector: "cqa-custom-textarea", inputs: ["label", "placeholder", "value", "enableMarkdown", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "rows", "cols", "resize", "textareaInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused"] }, { type: i3.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i4.CustomInputComponent, selector: "cqa-custom-input", inputs: ["label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.AdvancedVariablesFormComponent, selector: "cqa-advanced-variables-form", inputs: ["advancedVariables", "advancedVariableForm"], outputs: ["variableBooleanChange", "variableValueChange"] }, { type: i7.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
388
|
+
StepBuilderAiAgentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepBuilderAiAgentComponent, selector: "cqa-step-builder-ai-agent", inputs: { typeOptions: "typeOptions", environmentOptions: "environmentOptions", hasMoreEnvironments: "hasMoreEnvironments", isLoadingEnvironments: "isLoadingEnvironments", retryCountOptions: "retryCountOptions", iframeLocatorOptions: "iframeLocatorOptions", otherLocatorsOptions: "otherLocatorsOptions", initialQuery: "initialQuery", initialType: "initialType", initialDescription: "initialDescription", initialEnvironments: "initialEnvironments", initialMetadata: "initialMetadata", initialDisabled: "initialDisabled", initialContinueOnError: "initialContinueOnError", initialRetryCount: "initialRetryCount", initialIframeLocator: "initialIframeLocator", initialOtherLocators: "initialOtherLocators", editMode: "editMode", advancedSettingsVariables: "advancedSettingsVariables" }, outputs: { createStep: "createStep", cancelled: "cancelled", searchEnvironments: "searchEnvironments", loadMoreEnvironments: "loadMoreEnvironments" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-px-4 cqa-py-2 cqa-h-full\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n {{ editMode ? 'Edit AI Step' : 'Create AI Step' }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- What should the agent achieve? -->\n <div class=\"cqa-mb-6\">\n <label class=\"cqa-text-[14px] cqa-font-medium cqa-text-gray-700 cqa-mb-1 cqa-block\">\n What should the agent achieve?<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-custom-textarea\n class=\"cqa-step-builder-ai-agent-textarea\"\n [placeholder]=\"'What should the agent achieve?'\"\n [value]=\"aiAgentForm.get('query')?.value\"\n [fullWidth]=\"true\"\n [rows]=\"4\"\n (valueChange)=\"aiAgentForm.get('query')?.setValue($event)\">\n </cqa-custom-textarea>\n <p class=\"cqa-text-[12px] cqa-text-[#0A0A0A] \">\n Tip: Use numbered steps or bullet points for complex tasks.\n </p>\n </div>\n <div class=\"cqa-flex cqa-flex-wrap cqa-custom-form-fields\">\n <!-- Type Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Type<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select class=\"cqa-w-full\" [form]=\"aiAgentForm\" [config]=\"getTypeConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Environments Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pl-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Envioronments<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getEnvironmentConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Metadata Input -->\n <div class=\"cqa-mb-2 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Metadata\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('metadata')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('metadata')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Description Input -->\n <div class=\"cqa-w-1/2 cqa-pl-2 \">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Description\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('description')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('description')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n\n <!-- Advanced Section -->\n <div class=\"cqa-mb-2\">\n <button\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-w-full cqa-text-left cqa-text-[12px] cqa-font-medium cqa-text-gray-700 cqa-py-2 cqa-border-b cqa-border-gray-200\"\n (click)=\"toggleAdvanced()\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-lg cqa-transition-transform\" [class.cqa-rotate-180]=\"showAdvanced\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"showAdvanced\" class=\" cqa-custom-form-fields cqa-flex cqa-flex-col\">\n <cqa-advanced-variables-form \n [advancedVariables]=\"advancedSettingsVariables\"\n [advancedVariableForm]=\"advancedVariablesForm\"\n (variableBooleanChange)=\"onAdvancedVariableBooleanChange($event.name, $event.value)\"\n (variableValueChange)=\"onAdvancedVariableValueChange($event.name, $event.value)\">\n </cqa-advanced-variables-form>\n <!-- Continue on Error -->\n <!-- <div class=\"cqa-mb-1\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[10px] cqa-text-[#737373]\">Continue on Error</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <mat-slide-toggle\n class=\"cqa-step-builder-toggle-section\"\n [checked]=\"aiAgentForm.get('continueOnError')?.value || false\"\n (change)=\"aiAgentForm.get('continueOnError')?.setValue($event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Don't fail the test if this step fails.\n </label>\n </div>\n </div> -->\n\n <!-- Disabled -->\n <!-- <div class=\"cqa-mb-1\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[10px] cqa-font-medium cqa-text-[#737373]\">Disabled</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <mat-slide-toggle\n class=\"cqa-step-builder-toggle-section\"\n [checked]=\"aiAgentForm.get('disabled')?.value || false\"\n (change)=\"aiAgentForm.get('disabled')?.setValue($event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Skip this step during execution.\n </label>\n </div>\n </div> -->\n\n <!-- Retry Count -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Retry Count\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getRetryCountConfig()\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Iframe locator -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Iframe locator\n </label>\n <cqa-dynamic-select class=\"cqa-text-[#414146]\" [form]=\"aiAgentForm\" [config]=\"getIframeLocatorConfig()\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Other Locators -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Other Locators\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getOtherLocatorsConfig()\">\n </cqa-dynamic-select>\n </div> -->\n </div>\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2 cqa-rounded-[10px]\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button class=\"cqa-border-solid cqa-rounded-[9px] cqa-w-1/2 cqa-border cqa-border-[#3F43EE]\" variant=\"filled\" [text]=\"editMode ? 'Update Step' : 'Create Step'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!aiAgentForm.valid\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>\n\n", components: [{ type: i2.CustomTextareaComponent, selector: "cqa-custom-textarea", inputs: ["label", "placeholder", "value", "enableMarkdown", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "rows", "cols", "resize", "textareaInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused"] }, { type: i3.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i4.CustomInputComponent, selector: "cqa-custom-input", inputs: ["label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.AdvancedVariablesFormComponent, selector: "cqa-advanced-variables-form", inputs: ["advancedVariables", "advancedVariableForm"], outputs: ["variableBooleanChange", "variableValueChange"] }, { type: i7.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
370
389
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderAiAgentComponent, decorators: [{
|
|
371
390
|
type: Component,
|
|
372
391
|
args: [{ selector: 'cqa-step-builder-ai-agent', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-px-4 cqa-py-2 cqa-h-full\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n {{ editMode ? 'Edit AI Step' : 'Create AI Step' }}\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n <!-- What should the agent achieve? -->\n <div class=\"cqa-mb-6\">\n <label class=\"cqa-text-[14px] cqa-font-medium cqa-text-gray-700 cqa-mb-1 cqa-block\">\n What should the agent achieve?<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-custom-textarea\n class=\"cqa-step-builder-ai-agent-textarea\"\n [placeholder]=\"'What should the agent achieve?'\"\n [value]=\"aiAgentForm.get('query')?.value\"\n [fullWidth]=\"true\"\n [rows]=\"4\"\n (valueChange)=\"aiAgentForm.get('query')?.setValue($event)\">\n </cqa-custom-textarea>\n <p class=\"cqa-text-[12px] cqa-text-[#0A0A0A] \">\n Tip: Use numbered steps or bullet points for complex tasks.\n </p>\n </div>\n <div class=\"cqa-flex cqa-flex-wrap cqa-custom-form-fields\">\n <!-- Type Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Type<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select class=\"cqa-w-full\" [form]=\"aiAgentForm\" [config]=\"getTypeConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Environments Dropdown -->\n <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pl-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Envioronments<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getEnvironmentConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Metadata Input -->\n <div class=\"cqa-mb-2 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Metadata\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('metadata')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('metadata')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Description Input -->\n <div class=\"cqa-w-1/2 cqa-pl-2 \">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Description\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"aiAgentForm.get('description')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"aiAgentForm.get('description')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n\n <!-- Advanced Section -->\n <div class=\"cqa-mb-2\">\n <button\n type=\"button\"\n class=\"cqa-flex cqa-items-center cqa-justify-between cqa-w-full cqa-text-left cqa-text-[12px] cqa-font-medium cqa-text-gray-700 cqa-py-2 cqa-border-b cqa-border-gray-200\"\n (click)=\"toggleAdvanced()\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-lg cqa-transition-transform\" [class.cqa-rotate-180]=\"showAdvanced\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"showAdvanced\" class=\" cqa-custom-form-fields cqa-flex cqa-flex-col\">\n <cqa-advanced-variables-form \n [advancedVariables]=\"advancedSettingsVariables\"\n [advancedVariableForm]=\"advancedVariablesForm\"\n (variableBooleanChange)=\"onAdvancedVariableBooleanChange($event.name, $event.value)\"\n (variableValueChange)=\"onAdvancedVariableValueChange($event.name, $event.value)\">\n </cqa-advanced-variables-form>\n <!-- Continue on Error -->\n <!-- <div class=\"cqa-mb-1\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[10px] cqa-text-[#737373]\">Continue on Error</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <mat-slide-toggle\n class=\"cqa-step-builder-toggle-section\"\n [checked]=\"aiAgentForm.get('continueOnError')?.value || false\"\n (change)=\"aiAgentForm.get('continueOnError')?.setValue($event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Don't fail the test if this step fails.\n </label>\n </div>\n </div> -->\n\n <!-- Disabled -->\n <!-- <div class=\"cqa-mb-1\">\n <div class=\"cqa-mb-2\">\n <span class=\"cqa-text-[10px] cqa-font-medium cqa-text-[#737373]\">Disabled</span>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n <mat-slide-toggle\n class=\"cqa-step-builder-toggle-section\"\n [checked]=\"aiAgentForm.get('disabled')?.value || false\"\n (change)=\"aiAgentForm.get('disabled')?.setValue($event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n Skip this step during execution.\n </label>\n </div>\n </div> -->\n\n <!-- Retry Count -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Retry Count\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getRetryCountConfig()\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Iframe locator -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Iframe locator\n </label>\n <cqa-dynamic-select class=\"cqa-text-[#414146]\" [form]=\"aiAgentForm\" [config]=\"getIframeLocatorConfig()\">\n </cqa-dynamic-select>\n </div> -->\n\n <!-- Other Locators -->\n <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n Other Locators\n </label>\n <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getOtherLocatorsConfig()\">\n </cqa-dynamic-select>\n </div> -->\n </div>\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2 cqa-rounded-[10px]\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button class=\"cqa-border-solid cqa-rounded-[9px] cqa-w-1/2 cqa-border cqa-border-[#3F43EE]\" variant=\"filled\" [text]=\"editMode ? 'Update Step' : 'Create Step'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!aiAgentForm.valid\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>\n\n", styles: [] }]
|
|
@@ -374,6 +393,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
374
393
|
type: Input
|
|
375
394
|
}], environmentOptions: [{
|
|
376
395
|
type: Input
|
|
396
|
+
}], hasMoreEnvironments: [{
|
|
397
|
+
type: Input
|
|
398
|
+
}], isLoadingEnvironments: [{
|
|
399
|
+
type: Input
|
|
377
400
|
}], retryCountOptions: [{
|
|
378
401
|
type: Input
|
|
379
402
|
}], iframeLocatorOptions: [{
|
|
@@ -406,7 +429,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
406
429
|
type: Output
|
|
407
430
|
}], cancelled: [{
|
|
408
431
|
type: Output
|
|
432
|
+
}], searchEnvironments: [{
|
|
433
|
+
type: Output
|
|
434
|
+
}], loadMoreEnvironments: [{
|
|
435
|
+
type: Output
|
|
409
436
|
}], advancedSettingsVariables: [{
|
|
410
437
|
type: Input
|
|
411
438
|
}] } });
|
|
412
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWFpLWFnZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc3RlcC1idWlsZGVyL3N0ZXAtYnVpbGRlci1haS1hZ2VudC9zdGVwLWJ1aWxkZXItYWktYWdlbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWFpLWFnZW50L3N0ZXAtYnVpbGRlci1haS1hZ2VudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQTBCLFVBQVUsRUFBYSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBdUIvRSxNQUFNLE9BQU8sMkJBQTJCO0lBMEN0QyxZQUFvQixFQUFlO1FBQWYsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQXpDbkMsZ0NBQWdDO1FBQ3ZCLGdCQUFXLEdBQW1CLEVBQUUsQ0FBQztRQUUxQyx3Q0FBd0M7UUFDL0IsdUJBQWtCLEdBQW1CLEVBQUUsQ0FBQztRQUVqRCx1Q0FBdUM7UUFDOUIsc0JBQWlCLEdBQW1CLEVBQUUsQ0FBQztRQUVoRCwwQ0FBMEM7UUFDakMseUJBQW9CLEdBQW1CLEVBQUUsQ0FBQztRQUVuRCwwQ0FBMEM7UUFDakMseUJBQW9CLEdBQW1CLEVBQUUsQ0FBQztRQWExQyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRW5DLGdDQUFnQztRQUN0QixlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFFM0QsMEJBQTBCO1FBQ2hCLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRy9DLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQ3RCLHlCQUFvQixHQUFZLEtBQUssQ0FBQztRQUM5QyxxRkFBcUY7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a0JBTnZDLFNBQVM7K0JBQ0UsMkJBQTJCLFFBRy9CLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRTtrR0FJckIsV0FBVztzQkFBbkIsS0FBSztnQkFHRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBR0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUdHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFHRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdJLFVBQVU7c0JBQW5CLE1BQU07Z0JBR0csU0FBUztzQkFBbEIsTUFBTTtnQkFNRSx5QkFBeUI7c0JBQWpDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIEZvcm1BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZywgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vLi4vZHluYW1pYy1zZWxlY3QvZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBBaUFnZW50Rm9ybURhdGEge1xuICBxdWVyeTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGVudmlyb25tZW50czogc3RyaW5nO1xuICBtZXRhZGF0YT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNvbnRpbnVlT25FcnJvcj86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgcmV0cnlDb3VudD86IHN0cmluZztcbiAgaWZyYW1lTG9jYXRvcj86IHN0cmluZztcbiAgb3RoZXJMb2NhdG9ycz86IHN0cmluZztcbiAgYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcz86IGFueVtdO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtc3RlcC1idWlsZGVyLWFpLWFnZW50JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0ZXAtYnVpbGRlci1haS1hZ2VudC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfVxufSlcbmV4cG9ydCBjbGFzcyBTdGVwQnVpbGRlckFpQWdlbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKiBPcHRpb25zIGZvciB0eXBlIGRyb3Bkb3duICovXG4gIEBJbnB1dCgpIHR5cGVPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xuXG4gIC8qKiBPcHRpb25zIGZvciBlbnZpcm9ubWVudHMgZHJvcGRvd24gKi9cbiAgQElucHV0KCkgZW52aXJvbm1lbnRPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xuXG4gIC8qKiBPcHRpb25zIGZvciByZXRyeSBjb3VudCBkcm9wZG93biAqL1xuICBASW5wdXQoKSByZXRyeUNvdW50T3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXTtcblxuICAvKiogT3B0aW9ucyBmb3IgaWZyYW1lIGxvY2F0b3IgZHJvcGRvd24gKi9cbiAgQElucHV0KCkgaWZyYW1lTG9jYXRvck9wdGlvbnM6IFNlbGVjdE9wdGlvbltdID0gW107XG5cbiAgLyoqIE9wdGlvbnMgZm9yIG90aGVyIGxvY2F0b3JzIGRyb3Bkb3duICovXG4gIEBJbnB1dCgpIG90aGVyTG9jYXRvcnNPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xuXG4gIC8qKiBJbml0aWFsIHZhbHVlcyBmb3IgZWRpdCBtb2RlICovXG4gIEBJbnB1dCgpIGluaXRpYWxRdWVyeT86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbFR5cGU/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGluaXRpYWxEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbEVudmlyb25tZW50cz86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbE1ldGFkYXRhPzogc3RyaW5nO1xuICBASW5wdXQoKSBpbml0aWFsRGlzYWJsZWQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBpbml0aWFsQ29udGludWVPbkVycm9yPzogYm9vbGVhbjtcbiAgQElucHV0KCkgaW5pdGlhbFJldHJ5Q291bnQ/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGluaXRpYWxJZnJhbWVMb2NhdG9yPzogc3RyaW5nO1xuICBASW5wdXQoKSBpbml0aWFsT3RoZXJMb2NhdG9ycz86IHN0cmluZztcbiAgQElucHV0KCkgZWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogRW1pdCB3aGVuIHN0ZXAgaXMgY3JlYXRlZCAqL1xuICBAT3V0cHV0KCkgY3JlYXRlU3RlcCA9IG5ldyBFdmVudEVtaXR0ZXI8QWlBZ2VudEZvcm1EYXRhPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gY2FuY2VsbGVkICovXG4gIEBPdXRwdXQoKSBjYW5jZWxsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgYWlBZ2VudEZvcm06IEZvcm1Hcm91cDtcbiAgc2hvd0FkdmFuY2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaGFzTG9hZGVkSW5pdGlhbERhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gQWR2YW5jZWQgc2V0dGluZ3MgdmFyaWFibGVzIChjYW4gYmUgcHJvdmlkZWQgZnJvbSBwYXJlbnQgb3IgaW5pdGlhbGl6ZWQgZnJvbSBmb3JtKVxuICBASW5wdXQoKSBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOiBhbnlbXSA9IFtdO1xuICBhZHZhbmNlZFZhcmlhYmxlc0Zvcm06IEZvcm1BcnJheTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge1xuICAgIHRoaXMuYWlBZ2VudEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIHF1ZXJ5OiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgdHlwZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIGVudmlyb25tZW50czogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIG1ldGFkYXRhOiBbJyddLFxuICAgICAgZGVzY3JpcHRpb246IFsnJ10sXG4gICAgICBjb250aW51ZU9uRXJyb3I6IFtmYWxzZV0sXG4gICAgICBkaXNhYmxlZDogW2ZhbHNlXSxcbiAgICAgIHJldHJ5Q291bnQ6IFsnJ10sXG4gICAgICBpZnJhbWVMb2NhdG9yOiBbJyddLFxuICAgICAgb3RoZXJMb2NhdG9yczogWycnXVxuICAgIH0pO1xuXG4gICAgdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0gPSB0aGlzLmZiLmFycmF5KFtdKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIExvYWQgaW5pdGlhbCBkYXRhIGlmIHByb3ZpZGVkIChlZGl0IG1vZGUpXG4gICAgaWYgKHRoaXMuaGFzSW5pdGlhbERhdGEoKSkge1xuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGEoKTtcbiAgICAgIHRoaXMuaGFzTG9hZGVkSW5pdGlhbERhdGEgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgYWR2YW5jZWQgc2V0dGluZ3MgdmFyaWFibGVzXG4gICAgaWYgKHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyAmJiB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gV2hlbiBwcm92aWRlZCBieSBwYXJlbnQsIGFwcGx5IHRvIGZvcm0gYW5kIGJ1aWxkIGNvbnRyb2xzXG4gICAgICB0aGlzLmFwcGx5QWR2YW5jZWRTZXR0aW5nc1RvRm9ybSgpO1xuICAgICAgdGhpcy5idWlsZEFkdmFuY2VkVmFyaWFibGVzRm9ybSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGYWxsYmFjazogZGVyaXZlIGZyb20gY3VycmVudCBmb3JtIHZhbHVlc1xuICAgICAgdGhpcy5pbml0aWFsaXplQWR2YW5jZWRTZXR0aW5ncygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiBhbnkgaW5pdGlhbCB2YWx1ZSBpbnB1dHMgY2hhbmdlZFxuICAgIGNvbnN0IGluaXRpYWxWYWx1ZUtleXMgPSBbXG4gICAgICAnaW5pdGlhbFF1ZXJ5JywgJ2luaXRpYWxUeXBlJywgJ2luaXRpYWxEZXNjcmlwdGlvbicsICdpbml0aWFsRW52aXJvbm1lbnRzJyxcbiAgICAgICdpbml0aWFsTWV0YWRhdGEnLCAnaW5pdGlhbERpc2FibGVkJywgJ2luaXRpYWxDb250aW51ZU9uRXJyb3InLFxuICAgICAgJ2luaXRpYWxSZXRyeUNvdW50JywgJ2luaXRpYWxJZnJhbWVMb2NhdG9yJywgJ2luaXRpYWxPdGhlckxvY2F0b3JzJywgJ2VkaXRNb2RlJ1xuICAgIF07XG4gICAgXG4gICAgY29uc3QgaGFzSW5pdGlhbFZhbHVlQ2hhbmdlcyA9IGluaXRpYWxWYWx1ZUtleXMuc29tZShrZXkgPT4gXG4gICAgICBjaGFuZ2VzW2tleV0gJiYgIWNoYW5nZXNba2V5XS5maXJzdENoYW5nZVxuICAgICk7XG4gICAgXG4gICAgLy8gTG9hZCBpbml0aWFsIGRhdGEgaWYgaXQncyBzZXQgYWZ0ZXIgY29tcG9uZW50IGluaXRpYWxpemF0aW9uIG9yIGlmIGluaXRpYWwgdmFsdWVzIGNoYW5nZWRcbiAgICBpZiAoaGFzSW5pdGlhbFZhbHVlQ2hhbmdlcyB8fCAodGhpcy5oYXNJbml0aWFsRGF0YSgpICYmICF0aGlzLmhhc0xvYWRlZEluaXRpYWxEYXRhKSkge1xuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGEoKTtcbiAgICAgIHRoaXMuaGFzTG9hZGVkSW5pdGlhbERhdGEgPSB0cnVlO1xuICAgICAgLy8gUmUtaW5pdGlhbGl6ZSBhZHZhbmNlZCBzZXR0aW5ncyB3aGVuIGluaXRpYWwgdmFsdWVzIGNoYW5nZSAodW5sZXNzIHBhcmVudCBwcm92aWRlZCB0aGVtKVxuICAgICAgaWYgKCF0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgfHwgdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVBZHZhbmNlZFNldHRpbmdzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV2hlbiBwYXJlbnQgdXBkYXRlcyBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLCByZWJ1aWxkIGZvcm0gYW5kIHN5bmMgdG8gYWlBZ2VudEZvcm1cbiAgICBpZiAoY2hhbmdlc1snYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyddICYmIHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcykge1xuICAgICAgaWYgKHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuYXBwbHlBZHZhbmNlZFNldHRpbmdzVG9Gb3JtKCk7XG4gICAgICAgIHRoaXMuYnVpbGRBZHZhbmNlZFZhcmlhYmxlc0Zvcm0oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIGNsZWFyZWQsIHJlYnVpbGQgZnJvbSBmb3JtIHZhbHVlc1xuICAgICAgICB0aGlzLmluaXRpYWxpemVBZHZhbmNlZFNldHRpbmdzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYXNJbml0aWFsRGF0YSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5pbml0aWFsUXVlcnkgfHwgdGhpcy5pbml0aWFsVHlwZSB8fCB0aGlzLmluaXRpYWxEZXNjcmlwdGlvbiB8fCBcbiAgICAgICAgICAgICAgdGhpcy5pbml0aWFsRW52aXJvbm1lbnRzIHx8IHRoaXMuaW5pdGlhbE1ldGFkYXRhICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgdGhpcy5pbml0aWFsRGlzYWJsZWQgIT09IHVuZGVmaW5lZCB8fCB0aGlzLmluaXRpYWxDb250aW51ZU9uRXJyb3IgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICB0aGlzLmluaXRpYWxSZXRyeUNvdW50ICE9PSB1bmRlZmluZWQgfHwgdGhpcy5pbml0aWFsSWZyYW1lTG9jYXRvciB8fCBcbiAgICAgICAgICAgICAgdGhpcy5pbml0aWFsT3RoZXJMb2NhdG9ycyk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRJbml0aWFsRGF0YSgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnbG9hZEluaXRpYWxEYXRhOiBMb2FkaW5nIEFJLWFnZW50IGRhdGEnLCB7XG4gICAgICBpbml0aWFsUXVlcnk6IHRoaXMuaW5pdGlhbFF1ZXJ5LFxuICAgICAgaW5pdGlhbFR5cGU6IHRoaXMuaW5pdGlhbFR5cGUsXG4gICAgICBpbml0aWFsRGVzY3JpcHRpb246IHRoaXMuaW5pdGlhbERlc2NyaXB0aW9uLFxuICAgICAgaW5pdGlhbEVudmlyb25tZW50czogdGhpcy5pbml0aWFsRW52aXJvbm1lbnRzLFxuICAgICAgaW5pdGlhbE1ldGFkYXRhOiB0aGlzLmluaXRpYWxNZXRhZGF0YSxcbiAgICAgIGluaXRpYWxEaXNhYmxlZDogdGhpcy5pbml0aWFsRGlzYWJsZWQsXG4gICAgICBpbml0aWFsQ29udGludWVPbkVycm9yOiB0aGlzLmluaXRpYWxDb250aW51ZU9uRXJyb3IsXG4gICAgICBpbml0aWFsUmV0cnlDb3VudDogdGhpcy5pbml0aWFsUmV0cnlDb3VudCxcbiAgICAgIGluaXRpYWxJZnJhbWVMb2NhdG9yOiB0aGlzLmluaXRpYWxJZnJhbWVMb2NhdG9yLFxuICAgICAgaW5pdGlhbE90aGVyTG9jYXRvcnM6IHRoaXMuaW5pdGlhbE90aGVyTG9jYXRvcnMsXG4gICAgICBlZGl0TW9kZTogdGhpcy5lZGl0TW9kZVxuICAgIH0pO1xuXG4gICAgLy8gUG9wdWxhdGUgZm9ybSB3aXRoIGluaXRpYWwgdmFsdWVzXG4gICAgdGhpcy5haUFnZW50Rm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIHF1ZXJ5OiB0aGlzLmluaXRpYWxRdWVyeSB8fCAnJyxcbiAgICAgIHR5cGU6IHRoaXMuaW5pdGlhbFR5cGUgfHwgJycsXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5pbml0aWFsRGVzY3JpcHRpb24gfHwgJycsXG4gICAgICBlbnZpcm9ubWVudHM6IHRoaXMuaW5pdGlhbEVudmlyb25tZW50cyB8fCAnJyxcbiAgICAgIG1ldGFkYXRhOiB0aGlzLmluaXRpYWxNZXRhZGF0YSB8fCAnJyxcbiAgICAgIGRpc2FibGVkOiB0aGlzLmluaXRpYWxEaXNhYmxlZCAhPT0gdW5kZWZpbmVkID8gdGhpcy5pbml0aWFsRGlzYWJsZWQgOiBmYWxzZSxcbiAgICAgIGNvbnRpbnVlT25FcnJvcjogdGhpcy5pbml0aWFsQ29udGludWVPbkVycm9yICE9PSB1bmRlZmluZWQgPyB0aGlzLmluaXRpYWxDb250aW51ZU9uRXJyb3IgOiB0cnVlLFxuICAgICAgcmV0cnlDb3VudDogdGhpcy5pbml0aWFsUmV0cnlDb3VudCAhPT0gdW5kZWZpbmVkID8gU3RyaW5nKHRoaXMuaW5pdGlhbFJldHJ5Q291bnQpIDogJycsXG4gICAgICBpZnJhbWVMb2NhdG9yOiB0aGlzLmluaXRpYWxJZnJhbWVMb2NhdG9yIHx8ICcnLFxuICAgICAgb3RoZXJMb2NhdG9yczogdGhpcy5pbml0aWFsT3RoZXJMb2NhdG9ycyB8fCAnJ1xuICAgIH0pO1xuXG4gICAgLy8gRXhwYW5kIGFkdmFuY2VkIHNlY3Rpb24gaWYgYW55IGFkdmFuY2VkIGZpZWxkcyBoYXZlIHZhbHVlc1xuICAgIGlmICh0aGlzLmluaXRpYWxEaXNhYmxlZCAhPT0gdW5kZWZpbmVkIHx8IHRoaXMuaW5pdGlhbENvbnRpbnVlT25FcnJvciAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIHRoaXMuaW5pdGlhbFJldHJ5Q291bnQgIT09IHVuZGVmaW5lZCB8fCB0aGlzLmluaXRpYWxJZnJhbWVMb2NhdG9yIHx8IFxuICAgICAgICB0aGlzLmluaXRpYWxPdGhlckxvY2F0b3JzKSB7XG4gICAgICB0aGlzLnNob3dBZHZhbmNlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYWR2YW5jZWQgc2V0dGluZ3MgdmFyaWFibGVzIGJhc2VkIG9uIGN1cnJlbnQgZm9ybSB2YWx1ZXMgd2hlblxuICAgKiBwYXJlbnQgaGFzIG5vdCBwcm92aWRlZCBhbnkgYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5cbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUFkdmFuY2VkU2V0dGluZ3MoKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5haUFnZW50Rm9ybS52YWx1ZTtcblxuICAgIHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2lzU3RlcE9wdGlvbmFsJyxcbiAgICAgICAgbGFiZWw6IFwiRG9uJ3QgZmFpbCB0aGUgdGVzdCBpZiB0aGlzIHN0ZXAgZmFpbHMuXCIsXG4gICAgICAgIHZhbHVlOiBmb3JtVmFsdWUuY29udGludWVPbkVycm9yICE9PSB1bmRlZmluZWQgPyBmb3JtVmFsdWUuY29udGludWVPbkVycm9yIDogdHJ1ZSxcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnc2hvdWxkU2tpcCcsXG4gICAgICAgIGxhYmVsOiAnU2tpcCB0aGlzIHN0ZXAgZHVyaW5nIGV4ZWN1dGlvbi4nLFxuICAgICAgICB2YWx1ZTogZm9ybVZhbHVlLmRpc2FibGVkICE9PSB1bmRlZmluZWQgPyBmb3JtVmFsdWUuZGlzYWJsZWQgOiBmYWxzZSxcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAncHdMb2NhdG9yJyxcbiAgICAgICAgbGFiZWw6ICdPdGhlciBMb2NhdG9ycycsXG4gICAgICAgIHZhbHVlOiB0aGlzLmNvbnZlcnRPdGhlckxvY2F0b3JzVG9BcnJheShmb3JtVmFsdWUub3RoZXJMb2NhdG9ycyksXG4gICAgICAgIHR5cGU6ICdzdHJfbGlzdCdcbiAgICAgIH1cbiAgICBdO1xuXG4gICAgdGhpcy5idWlsZEFkdmFuY2VkVmFyaWFibGVzRm9ybSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGluY29taW5nIGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgdG8gdGhlIHVuZGVybHlpbmcgZm9ybSBjb250cm9scy5cbiAgICogVXNlZCB3aGVuIHBhcmVudCBwYXNzZXMgYWR2YW5jZWQgdmFyaWFibGVzIChlLmcuIGZyb20gU3RlcEJ1aWxkZXJTZXJ2aWNlKS5cbiAgICovXG4gIHByaXZhdGUgYXBwbHlBZHZhbmNlZFNldHRpbmdzVG9Gb3JtKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzIHx8IHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICBpZiAodmFyaWFibGUubmFtZSA9PT0gJ2lzU3RlcE9wdGlvbmFsJykge1xuICAgICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnY29udGludWVPbkVycm9yJyk/LnNldFZhbHVlKCEhdmFyaWFibGUudmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZS5uYW1lID09PSAnc2hvdWxkU2tpcCcpIHtcbiAgICAgICAgdGhpcy5haUFnZW50Rm9ybS5nZXQoJ2Rpc2FibGVkJyk/LnNldFZhbHVlKCEhdmFyaWFibGUudmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZS5uYW1lID09PSAncHdMb2NhdG9yJykge1xuICAgICAgICBjb25zdCB2YWx1ZXNBcnJheTogc3RyaW5nW10gPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlLnZhbHVlKVxuICAgICAgICAgID8gdmFyaWFibGUudmFsdWVcbiAgICAgICAgICA6IHRoaXMuY29udmVydE90aGVyTG9jYXRvcnNUb0FycmF5KFN0cmluZyh2YXJpYWJsZS52YWx1ZSB8fCAnJykpO1xuICAgICAgICBjb25zdCBqb2luZWQgPSB2YWx1ZXNBcnJheS5qb2luKCcsICcpO1xuICAgICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnb3RoZXJMb2NhdG9ycycpPy5zZXRWYWx1ZShqb2luZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIG90aGVyTG9jYXRvcnMgZm9ybSB2YWx1ZSB0byBhIHN0cmluZyBhcnJheSBmb3Igc3RyX2xpc3QuXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRPdGhlckxvY2F0b3JzVG9BcnJheSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgLy8gU3BsaXQgYnkgY29tbWEgYW5kIHRyaW0gd2hpdGVzcGFjZVxuICAgIHJldHVybiB2YWx1ZVxuICAgICAgLnNwbGl0KCcsJylcbiAgICAgIC5tYXAoaXRlbSA9PiBpdGVtLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLmxlbmd0aCA+IDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHJlYWN0aXZlIGZvcm0gZm9yIGFkdmFuY2VkIHNldHRpbmdzIHZhcmlhYmxlcyAoc2FtZSBwYXR0ZXJuIGFzIGFjdGlvbiBzdGVwKS5cbiAgICovXG4gIHByaXZhdGUgYnVpbGRBZHZhbmNlZFZhcmlhYmxlc0Zvcm0oKTogdm9pZCB7XG4gICAgLy8gQ2xlYXIgZXhpc3RpbmcgZm9ybSBhcnJheVxuICAgIHdoaWxlICh0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5sZW5ndGggIT09IDApIHtcbiAgICAgIHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLnJlbW92ZUF0KDApO1xuICAgIH1cblxuICAgIC8vIEFkZCBmb3JtIGdyb3VwcyBmb3IgZWFjaCBhZHZhbmNlZCB2YXJpYWJsZVxuICAgIHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5mb3JFYWNoKHZhcmlhYmxlID0+IHtcbiAgICAgIGxldCBkZWZhdWx0VmFsdWU6IGFueTtcbiAgICAgIGlmICh2YXJpYWJsZS50eXBlID09PSAnc3RyX2xpc3QnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlQXJyYXkgPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlLnZhbHVlKSA/IHZhcmlhYmxlLnZhbHVlIDogW107XG4gICAgICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZmIuYXJyYXkoXG4gICAgICAgICAgdmFsdWVBcnJheS5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IHZhbHVlQXJyYXkubWFwKChpdGVtOiBzdHJpbmcpID0+IHRoaXMuZmIuY29udHJvbChpdGVtKSlcbiAgICAgICAgICAgIDogW3RoaXMuZmIuY29udHJvbCgnJyldIC8vIFN0YXJ0IHdpdGggb25lIGVtcHR5IGNvbnRyb2xcbiAgICAgICAgKTtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gZm9ybUFycmF5O1xuICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZS50eXBlID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIHZhcmlhYmxlLnZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gdmFyaWFibGUudmFsdWUgPT09IHRydWUgfHwgdmFyaWFibGUudmFsdWUgPT09ICd0cnVlJyB8fCB2YXJpYWJsZS52YWx1ZSA9PT0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IHZhcmlhYmxlLnZhbHVlIHx8ICcnO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YXJpYWJsZUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG5hbWU6IFt2YXJpYWJsZS5uYW1lXSxcbiAgICAgICAgdmFsdWU6IHZhcmlhYmxlLnR5cGUgPT09ICdzdHJfbGlzdCcgPyBkZWZhdWx0VmFsdWUgOiBbZGVmYXVsdFZhbHVlXSxcbiAgICAgICAgdHlwZTogW3ZhcmlhYmxlLnR5cGUgfHwgJ3N0cmluZyddLFxuICAgICAgICBsYWJlbDogW3ZhcmlhYmxlLmxhYmVsIHx8ICcnXVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLnB1c2godmFyaWFibGVHcm91cCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRUeXBlQ29uZmlnKCk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogJ3R5cGUnLFxuICAgICAgcGxhY2Vob2xkZXI6ICdTZWxlY3QgdHlwZScsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMudHlwZU9wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgZ2V0RW52aXJvbm1lbnRDb25maWcoKTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiAnZW52aXJvbm1lbnRzJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IGVudmlyb25tZW50JyxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgICAgb3B0aW9uczogdGhpcy5lbnZpcm9ubWVudE9wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgZ2V0UmV0cnlDb3VudENvbmZpZygpOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICBrZXk6ICdyZXRyeUNvdW50JyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnRHluYW1pYyBzZWFyY2ggc2VsZWN0b3IgZnJvbSBsaWJyYXJ5IG9yIG1hbnVhbCcsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgb3B0aW9uczogdGhpcy5yZXRyeUNvdW50T3B0aW9uc1xuICAgIH07XG4gIH1cblxuICBnZXRJZnJhbWVMb2NhdG9yQ29uZmlnKCk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogJ2lmcmFtZUxvY2F0b3InLFxuICAgICAgcGxhY2Vob2xkZXI6ICdEeW5hbWljIHNlYXJjaCBzZWxlY3RvciBmcm9tIGxpYnJhcnkgb3IgbWFudWFsJyxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgICBvcHRpb25zOiB0aGlzLmlmcmFtZUxvY2F0b3JPcHRpb25zXG4gICAgfTtcbiAgfVxuXG4gIGdldE90aGVyTG9jYXRvcnNDb25maWcoKTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiAnb3RoZXJMb2NhdG9ycycsXG4gICAgICBwbGFjZWhvbGRlcjogJ0R5bmFtaWMgc2VhcmNoIHNlbGVjdG9yIGZyb20gbGlicmFyeSBvciBtYW51YWwnLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMub3RoZXJMb2NhdG9yc09wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgdG9nZ2xlQWR2YW5jZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93QWR2YW5jZWQgPSAhdGhpcy5zaG93QWR2YW5jZWQ7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFkdmFuY2VkIGJvb2xlYW4gdmFyaWFibGUgY2hhbmdlcyBhbmQgc3luYyB0byBmb3JtLlxuICAgKi9cbiAgb25BZHZhbmNlZFZhcmlhYmxlQm9vbGVhbkNoYW5nZSh2YXJpYWJsZU5hbWU6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCB2YXJpYWJsZSA9IHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5maW5kKHYgPT4gdi5uYW1lID09PSB2YXJpYWJsZU5hbWUpO1xuICAgIGlmICh2YXJpYWJsZSkge1xuICAgICAgdmFyaWFibGUudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgY29ycmVzcG9uZGluZyBmb3JtIGNvbnRyb2xzXG4gICAgaWYgKHZhcmlhYmxlTmFtZSA9PT0gJ2lzU3RlcE9wdGlvbmFsJykge1xuICAgICAgdGhpcy5haUFnZW50Rm9ybS5nZXQoJ2NvbnRpbnVlT25FcnJvcicpPy5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmICh2YXJpYWJsZU5hbWUgPT09ICdzaG91bGRTa2lwJykge1xuICAgICAgdGhpcy5haUFnZW50Rm9ybS5nZXQoJ2Rpc2FibGVkJyk/LnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBLZWVwIGFkdmFuY2VkVmFyaWFibGVzRm9ybSBpbiBzeW5jXG4gICAgY29uc3QgdmFyaWFibGVJbmRleCA9IHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmNvbnRyb2xzLmZpbmRJbmRleChcbiAgICAgIGNvbnRyb2wgPT4gY29udHJvbC5nZXQoJ25hbWUnKT8udmFsdWUgPT09IHZhcmlhYmxlTmFtZVxuICAgICk7XG4gICAgaWYgKHZhcmlhYmxlSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5hdCh2YXJpYWJsZUluZGV4KS5nZXQoJ3ZhbHVlJyk/LnNldFZhbHVlKHZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBhZHZhbmNlZCBub24tYm9vbGVhbiB2YWx1ZSBjaGFuZ2VzIChlLmcuIHB3TG9jYXRvcikgYW5kIHN5bmMgdG8gZm9ybS5cbiAgICovXG4gIG9uQWR2YW5jZWRWYXJpYWJsZVZhbHVlQ2hhbmdlKHZhcmlhYmxlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZmluZCh2ID0+IHYubmFtZSA9PT0gdmFyaWFibGVOYW1lKTtcbiAgICBpZiAodmFyaWFibGUpIHtcbiAgICAgIHZhcmlhYmxlLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHZhcmlhYmxlTmFtZSA9PT0gJ3B3TG9jYXRvcicpIHtcbiAgICAgIC8vIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIHN0cmluZ1tdIGZyb20gc3RyX2xpc3RcbiAgICAgIGNvbnN0IHZhbHVlc0FycmF5OiBzdHJpbmdbXSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiB0aGlzLmNvbnZlcnRPdGhlckxvY2F0b3JzVG9BcnJheShTdHJpbmcodmFsdWUgfHwgJycpKTtcbiAgICAgIGNvbnN0IGpvaW5lZCA9IHZhbHVlc0FycmF5LmpvaW4oJywgJyk7XG4gICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnb3RoZXJMb2NhdG9ycycpPy5zZXRWYWx1ZShqb2luZWQpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhcmlhYmxlSW5kZXggPSB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5jb250cm9scy5maW5kSW5kZXgoXG4gICAgICBjb250cm9sID0+IGNvbnRyb2wuZ2V0KCduYW1lJyk/LnZhbHVlID09PSB2YXJpYWJsZU5hbWVcbiAgICApO1xuICAgIGlmICh2YXJpYWJsZUluZGV4ICE9PSAtMSkge1xuICAgICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0uYXQodmFyaWFibGVJbmRleCk7XG4gICAgICBjb25zdCBpc1N0ckxpc3QgPSB2YXJpYWJsZSAmJiB2YXJpYWJsZS50eXBlID09PSAnc3RyX2xpc3QnO1xuICAgICAgaWYgKCFpc1N0ckxpc3QpIHtcbiAgICAgICAgZm9ybUdyb3VwLmdldCgndmFsdWUnKT8uc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhbmNlbGxlZC5lbWl0KCk7XG4gIH1cblxuICBvbkNyZWF0ZVN0ZXAoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWlBZ2VudEZvcm0udmFsaWQpIHtcbiAgICAgIC8vIEVuc3VyZSBhZHZhbmNlZCB2YXJpYWJsZSB2YWx1ZXMgYXJlIHN5bmNlZCBiYWNrIHRvIHRoZSBmb3JtIGJlZm9yZSBlbWl0dGluZ1xuICAgICAgdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgICAgICBpZiAodmFyaWFibGUubmFtZSA9PT0gJ2lzU3RlcE9wdGlvbmFsJykge1xuICAgICAgICAgIHRoaXMuYWlBZ2VudEZvcm0uZ2V0KCdjb250aW51ZU9uRXJyb3InKT8uc2V0VmFsdWUoISF2YXJpYWJsZS52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFyaWFibGUubmFtZSA9PT0gJ3Nob3VsZFNraXAnKSB7XG4gICAgICAgICAgdGhpcy5haUFnZW50Rm9ybS5nZXQoJ2Rpc2FibGVkJyk/LnNldFZhbHVlKCEhdmFyaWFibGUudmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhcmlhYmxlLm5hbWUgPT09ICdwd0xvY2F0b3InKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWVzQXJyYXk6IHN0cmluZ1tdID0gQXJyYXkuaXNBcnJheSh2YXJpYWJsZS52YWx1ZSlcbiAgICAgICAgICAgID8gdmFyaWFibGUudmFsdWVcbiAgICAgICAgICAgIDogdGhpcy5jb252ZXJ0T3RoZXJMb2NhdG9yc1RvQXJyYXkoU3RyaW5nKHZhcmlhYmxlLnZhbHVlIHx8ICcnKSk7XG4gICAgICAgICAgY29uc3Qgam9pbmVkID0gdmFsdWVzQXJyYXkuam9pbignLCAnKTtcbiAgICAgICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnb3RoZXJMb2NhdG9ycycpPy5zZXRWYWx1ZShqb2luZWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5haUFnZW50Rm9ybS52YWx1ZTtcbiAgICAgIGNvbnN0IHN0ZXBEYXRhOiBBaUFnZW50Rm9ybURhdGEgPSB7XG4gICAgICAgIHF1ZXJ5OiBmb3JtVmFsdWUucXVlcnkgfHwgJycsXG4gICAgICAgIHR5cGU6IGZvcm1WYWx1ZS50eXBlIHx8ICcnLFxuICAgICAgICBlbnZpcm9ubWVudHM6IGZvcm1WYWx1ZS5lbnZpcm9ubWVudHMgfHwgJycsXG4gICAgICAgIG1ldGFkYXRhOiBmb3JtVmFsdWUubWV0YWRhdGEgfHwgJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBmb3JtVmFsdWUuZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgIGNvbnRpbnVlT25FcnJvcjogZm9ybVZhbHVlLmNvbnRpbnVlT25FcnJvciB8fCBmYWxzZSxcbiAgICAgICAgZGlzYWJsZWQ6IGZvcm1WYWx1ZS5kaXNhYmxlZCB8fCBmYWxzZSxcbiAgICAgICAgcmV0cnlDb3VudDogZm9ybVZhbHVlLnJldHJ5Q291bnQgfHwgJycsXG4gICAgICAgIGlmcmFtZUxvY2F0b3I6IGZvcm1WYWx1ZS5pZnJhbWVMb2NhdG9yIHx8ICcnLFxuICAgICAgICBvdGhlckxvY2F0b3JzOiBmb3JtVmFsdWUub3RoZXJMb2NhdG9ycyB8fCAnJyxcbiAgICAgICAgYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlczogdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzXG4gICAgICB9O1xuICAgICAgdGhpcy5jcmVhdGVTdGVwLmVtaXQoc3RlcERhdGEpO1xuICAgIH1cbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1iZy13aGl0ZSBjcWEtcHgtNCBjcWEtcHktMiBjcWEtaC1mdWxsXCI+XG4gIDwhLS0gSGVhZGVyIC0tPlxuICA8aDIgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtYmxhY2stMTAwIGNxYS1tYi00XCI+XG4gICAge3sgZWRpdE1vZGUgPyAnRWRpdCBBSSBTdGVwJyA6ICdDcmVhdGUgQUkgU3RlcCcgfX1cbiAgPC9oMj5cblxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1mbGV4LTEgY3FhLW92ZXJmbG93LXktYXV0b1wiPlxuICAgIDwhLS0gV2hhdCBzaG91bGQgdGhlIGFnZW50IGFjaGlldmU/IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItNlwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1ncmF5LTcwMCBjcWEtbWItMSBjcWEtYmxvY2tcIj5cbiAgICAgICAgV2hhdCBzaG91bGQgdGhlIGFnZW50IGFjaGlldmU/PHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bI0VGNDQ0NF0gY3FhLW1sLTAuNVwiPio8L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGNxYS1jdXN0b20tdGV4dGFyZWFcbiAgICAgICBjbGFzcz1cImNxYS1zdGVwLWJ1aWxkZXItYWktYWdlbnQtdGV4dGFyZWFcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1doYXQgc2hvdWxkIHRoZSBhZ2VudCBhY2hpZXZlPydcIlxuICAgICAgICBbdmFsdWVdPVwiYWlBZ2VudEZvcm0uZ2V0KCdxdWVyeScpPy52YWx1ZVwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIFtyb3dzXT1cIjRcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwiYWlBZ2VudEZvcm0uZ2V0KCdxdWVyeScpPy5zZXRWYWx1ZSgkZXZlbnQpXCI+XG4gICAgICA8L2NxYS1jdXN0b20tdGV4dGFyZWE+XG4gICAgICA8cCBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtdGV4dC1bIzBBMEEwQV0gXCI+XG4gICAgICAgIFRpcDogVXNlIG51bWJlcmVkIHN0ZXBzIG9yIGJ1bGxldCBwb2ludHMgZm9yIGNvbXBsZXggdGFza3MuXG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LXdyYXAgY3FhLWN1c3RvbS1mb3JtLWZpZWxkc1wiPlxuICAgIDwhLS0gVHlwZSBEcm9wZG93biAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTYgY3FhLXctMS8yIGNxYS1wci0yXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtbGVhZGluZy1bMTAwJV0gY3FhLWJsb2NrIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0xXCI+XG4gICAgICAgIFR5cGU8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjRUY0NDQ0XSBjcWEtbWwtMC41XCI+Kjwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IGNsYXNzPVwiY3FhLXctZnVsbFwiIFtmb3JtXT1cImFpQWdlbnRGb3JtXCIgW2NvbmZpZ109XCJnZXRUeXBlQ29uZmlnKClcIj5cbiAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBFbnZpcm9ubWVudHMgRHJvcGRvd24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1tYi02IGNxYS13LTEvMiBjcWEtcGwtMlwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS1ibG9jayBjcWEtdGV4dC1bMTRweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItMVwiPlxuICAgICAgICBFbnZpb3Jvbm1lbnRzPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bI0VGNDQ0NF0gY3FhLW1sLTAuNVwiPio8L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBbZm9ybV09XCJhaUFnZW50Rm9ybVwiIFtjb25maWddPVwiZ2V0RW52aXJvbm1lbnRDb25maWcoKVwiPlxuICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIE1ldGFkYXRhIElucHV0IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItMiBjcWEtdy0xLzIgY3FhLXByLTJcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS1sZWFkaW5nLVsxMDAlXSBjcWEtYmxvY2sgY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTFcIj5cbiAgICAgICAgTWV0YWRhdGFcbiAgICAgIDwvbGFiZWw+XG4gICAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1RleHQgSW5wdXQnXCJcbiAgICAgICAgW3ZhbHVlXT1cImFpQWdlbnRGb3JtLmdldCgnbWV0YWRhdGEnKT8udmFsdWVcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwiYWlBZ2VudEZvcm0uZ2V0KCdtZXRhZGF0YScpPy5zZXRWYWx1ZSgkZXZlbnQpXCI+XG4gICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIERlc2NyaXB0aW9uIElucHV0IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtdy0xLzIgY3FhLXBsLTIgXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtbGVhZGluZy1bMTAwJV0gY3FhLWJsb2NrIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0xXCI+XG4gICAgICAgIERlc2NyaXB0aW9uXG4gICAgICA8L2xhYmVsPlxuICAgICAgPGNxYS1jdXN0b20taW5wdXRcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidUZXh0IElucHV0J1wiXG4gICAgICAgIFt2YWx1ZV09XCJhaUFnZW50Rm9ybS5nZXQoJ2Rlc2NyaXB0aW9uJyk/LnZhbHVlXCJcbiAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImFpQWdlbnRGb3JtLmdldCgnZGVzY3JpcHRpb24nKT8uc2V0VmFsdWUoJGV2ZW50KVwiPlxuICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG5cbiAgICA8IS0tIEFkdmFuY2VkIFNlY3Rpb24gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1tYi0yXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtdy1mdWxsIGNxYS10ZXh0LWxlZnQgY3FhLXRleHQtWzEycHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1ncmF5LTcwMCBjcWEtcHktMiBjcWEtYm9yZGVyLWIgY3FhLWJvcmRlci1ncmF5LTIwMFwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVBZHZhbmNlZCgpXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdXCI+QWR2YW5jZWQ8L3NwYW4+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LWxnIGNxYS10cmFuc2l0aW9uLXRyYW5zZm9ybVwiIFtjbGFzcy5jcWEtcm90YXRlLTE4MF09XCJzaG93QWR2YW5jZWRcIj5cbiAgICAgICAgICBleHBhbmRfbW9yZVxuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8ZGl2ICpuZ0lmPVwic2hvd0FkdmFuY2VkXCIgY2xhc3M9XCIgY3FhLWN1c3RvbS1mb3JtLWZpZWxkcyBjcWEtZmxleCBjcWEtZmxleC1jb2xcIj5cbiAgICAgICAgPGNxYS1hZHZhbmNlZC12YXJpYWJsZXMtZm9ybSBcbiAgICAgICAgICBbYWR2YW5jZWRWYXJpYWJsZXNdPVwiYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlc1wiXG4gICAgICAgICAgW2FkdmFuY2VkVmFyaWFibGVGb3JtXT1cImFkdmFuY2VkVmFyaWFibGVzRm9ybVwiXG4gICAgICAgICAgKHZhcmlhYmxlQm9vbGVhbkNoYW5nZSk9XCJvbkFkdmFuY2VkVmFyaWFibGVCb29sZWFuQ2hhbmdlKCRldmVudC5uYW1lLCAkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICAodmFyaWFibGVWYWx1ZUNoYW5nZSk9XCJvbkFkdmFuY2VkVmFyaWFibGVWYWx1ZUNoYW5nZSgkZXZlbnQubmFtZSwgJGV2ZW50LnZhbHVlKVwiPlxuICAgICAgICA8L2NxYS1hZHZhbmNlZC12YXJpYWJsZXMtZm9ybT5cbiAgICAgICAgPCEtLSBDb250aW51ZSBvbiBFcnJvciAtLT5cbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY3FhLW1iLTFcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdIGNxYS10ZXh0LVsjNzM3MzczXVwiPkNvbnRpbnVlIG9uIEVycm9yPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtc3RlcC1idWlsZGVyLXRvZ2dsZS1zZWN0aW9uXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiYWlBZ2VudEZvcm0uZ2V0KCdjb250aW51ZU9uRXJyb3InKT8udmFsdWUgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cImFpQWdlbnRGb3JtLmdldCgnY29udGludWVPbkVycm9yJyk/LnNldFZhbHVlKCRldmVudC5jaGVja2VkKVwiXG4gICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS1mb250LW5vcm1hbCBjcWEtdGV4dC1bIzBBMEEwQV1cIj5cbiAgICAgICAgICAgICAgRG9uJ3QgZmFpbCB0aGUgdGVzdCBpZiB0aGlzIHN0ZXAgZmFpbHMuXG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgPCEtLSBEaXNhYmxlZCAtLT5cbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY3FhLW1iLTFcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzEwcHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzczNzM3M11cIj5EaXNhYmxlZDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3FhLXN0ZXAtYnVpbGRlci10b2dnbGUtc2VjdGlvblwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cImFpQWdlbnRGb3JtLmdldCgnZGlzYWJsZWQnKT8udmFsdWUgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cImFpQWdlbnRGb3JtLmdldCgnZGlzYWJsZWQnKT8uc2V0VmFsdWUoJGV2ZW50LmNoZWNrZWQpXCJcbiAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbm9ybWFsIGNxYS10ZXh0LVsjMEEwQTBBXVwiPlxuICAgICAgICAgICAgICBTa2lwIHRoaXMgc3RlcCBkdXJpbmcgZXhlY3V0aW9uLlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgIDwhLS0gUmV0cnkgQ291bnQgLS0+XG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtbWItMVwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS1sZWFkaW5nLVsxMDAlXSBjcWEtdGV4dC1bMTRweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItMSBjcWEtYmxvY2tcIj5cbiAgICAgICAgICAgIFJldHJ5IENvdW50XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFtmb3JtXT1cImFpQWdlbnRGb3JtXCIgW2NvbmZpZ109XCJnZXRSZXRyeUNvdW50Q29uZmlnKClcIj5cbiAgICAgICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgIDwhLS0gSWZyYW1lIGxvY2F0b3IgLS0+XG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtbWItMVwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS1sZWFkaW5nLVsxMDAlXSBjcWEtdGV4dC1bMTRweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItMSBjcWEtYmxvY2tcIj5cbiAgICAgICAgICAgIElmcmFtZSBsb2NhdG9yXG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IGNsYXNzPVwiY3FhLXRleHQtWyM0MTQxNDZdXCIgW2Zvcm1dPVwiYWlBZ2VudEZvcm1cIiBbY29uZmlnXT1cImdldElmcmFtZUxvY2F0b3JDb25maWcoKVwiPlxuICAgICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgPCEtLSBPdGhlciBMb2NhdG9ycyAtLT5cbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1tYi0xXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0xIGNxYS1ibG9ja1wiPlxuICAgICAgICAgICAgT3RoZXIgTG9jYXRvcnNcbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgW2Zvcm1dPVwiYWlBZ2VudEZvcm1cIiBbY29uZmlnXT1cImdldE90aGVyTG9jYXRvcnNDb25maWcoKVwiPlxuICAgICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBBY3Rpb24gQnV0dG9ucyAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS13LWZ1bGwgY3FhLWdhcC0yIGNxYS1tdC1hdXRvIGNxYS1wdC00IGNxYS1ib3JkZXItdCBjcWEtYm9yZGVyLWdyYXktMjAwXCI+XG4gICAgPGNxYS1idXR0b24gY2xhc3M9XCJjcWEtdy0xLzIgY3FhLXJvdW5kZWQtWzEwcHhdXCIgdmFyaWFudD1cIm91dGxpbmVkXCIgdGV4dD1cIkNhbmNlbFwiIFtjdXN0b21DbGFzc109XCInY3FhLWZsZXgtMSBjcWEtdy1mdWxsJ1wiXG4gICAgICAoY2xpY2tlZCk9XCJvbkNhbmNlbCgpXCI+XG4gICAgPC9jcWEtYnV0dG9uPlxuICAgIDxjcWEtYnV0dG9uIGNsYXNzPVwiY3FhLWJvcmRlci1zb2xpZCBjcWEtcm91bmRlZC1bOXB4XSBjcWEtdy0xLzIgY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjM0Y0M0VFXVwiIHZhcmlhbnQ9XCJmaWxsZWRcIiBbdGV4dF09XCJlZGl0TW9kZSA/ICdVcGRhdGUgU3RlcCcgOiAnQ3JlYXRlIFN0ZXAnXCIgW2N1c3RvbUNsYXNzXT1cIidjcWEtZmxleC0xIGNxYS13LWZ1bGwnXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhYWlBZ2VudEZvcm0udmFsaWRcIlxuICAgICAgKGNsaWNrZWQpPVwib25DcmVhdGVTdGVwKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbiJdfQ==
|
|
439
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWFpLWFnZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc3RlcC1idWlsZGVyL3N0ZXAtYnVpbGRlci1haS1hZ2VudC9zdGVwLWJ1aWxkZXItYWktYWdlbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWFpLWFnZW50L3N0ZXAtYnVpbGRlci1haS1hZ2VudC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQTBCLFVBQVUsRUFBYSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBdUIvRSxNQUFNLE9BQU8sMkJBQTJCO0lBa0R0QyxZQUFvQixFQUFlO1FBQWYsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQWpEbkMsZ0NBQWdDO1FBQ3ZCLGdCQUFXLEdBQW1CLEVBQUUsQ0FBQztRQUUxQyx3Q0FBd0M7UUFDL0IsdUJBQWtCLEdBQW1CLEVBQUUsQ0FBQztRQUNqRCwrREFBK0Q7UUFDdEQsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBQzlDLHFDQUFxQztRQUM1QiwwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFFaEQsdUNBQXVDO1FBQzlCLHNCQUFpQixHQUFtQixFQUFFLENBQUM7UUFFaEQsMENBQTBDO1FBQ2pDLHlCQUFvQixHQUFtQixFQUFFLENBQUM7UUFFbkQsMENBQTBDO1FBQ2pDLHlCQUFvQixHQUFtQixFQUFFLENBQUM7UUFhMUMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUVuQyxnQ0FBZ0M7UUFDdEIsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO1FBRTNELDBCQUEwQjtRQUNoQixjQUFTLEdBQUcsSUFBSSxZ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c0I7c0JBQTlCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFHSSxVQUFVO3NCQUFuQixNQUFNO2dCQUdHLFNBQVM7c0JBQWxCLE1BQU07Z0JBRUcsa0JBQWtCO3NCQUEzQixNQUFNO2dCQUVHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFNRSx5QkFBeUI7c0JBQWpDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIEZvcm1BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZywgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vLi4vZHluYW1pYy1zZWxlY3QvZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBBaUFnZW50Rm9ybURhdGEge1xuICBxdWVyeTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGVudmlyb25tZW50czogc3RyaW5nO1xuICBtZXRhZGF0YT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNvbnRpbnVlT25FcnJvcj86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgcmV0cnlDb3VudD86IHN0cmluZztcbiAgaWZyYW1lTG9jYXRvcj86IHN0cmluZztcbiAgb3RoZXJMb2NhdG9ycz86IHN0cmluZztcbiAgYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcz86IGFueVtdO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtc3RlcC1idWlsZGVyLWFpLWFnZW50JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0ZXAtYnVpbGRlci1haS1hZ2VudC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfVxufSlcbmV4cG9ydCBjbGFzcyBTdGVwQnVpbGRlckFpQWdlbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKiBPcHRpb25zIGZvciB0eXBlIGRyb3Bkb3duICovXG4gIEBJbnB1dCgpIHR5cGVPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xuXG4gIC8qKiBPcHRpb25zIGZvciBlbnZpcm9ubWVudHMgZHJvcGRvd24gKi9cbiAgQElucHV0KCkgZW52aXJvbm1lbnRPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xuICAvKiogSW5kaWNhdGVzIGlmIG1vcmUgZW52aXJvbm1lbnRzIGFyZSBhdmFpbGFibGUgZm9yIGxvYWRpbmcgKi9cbiAgQElucHV0KCkgaGFzTW9yZUVudmlyb25tZW50czogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogTG9hZGluZyBzdGF0ZSBmb3IgZW52aXJvbm1lbnRzICovXG4gIEBJbnB1dCgpIGlzTG9hZGluZ0Vudmlyb25tZW50czogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBPcHRpb25zIGZvciByZXRyeSBjb3VudCBkcm9wZG93biAqL1xuICBASW5wdXQoKSByZXRyeUNvdW50T3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXTtcblxuICAvKiogT3B0aW9ucyBmb3IgaWZyYW1lIGxvY2F0b3IgZHJvcGRvd24gKi9cbiAgQElucHV0KCkgaWZyYW1lTG9jYXRvck9wdGlvbnM6IFNlbGVjdE9wdGlvbltdID0gW107XG5cbiAgLyoqIE9wdGlvbnMgZm9yIG90aGVyIGxvY2F0b3JzIGRyb3Bkb3duICovXG4gIEBJbnB1dCgpIG90aGVyTG9jYXRvcnNPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xuXG4gIC8qKiBJbml0aWFsIHZhbHVlcyBmb3IgZWRpdCBtb2RlICovXG4gIEBJbnB1dCgpIGluaXRpYWxRdWVyeT86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbFR5cGU/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGluaXRpYWxEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbEVudmlyb25tZW50cz86IHN0cmluZztcbiAgQElucHV0KCkgaW5pdGlhbE1ldGFkYXRhPzogc3RyaW5nO1xuICBASW5wdXQoKSBpbml0aWFsRGlzYWJsZWQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBpbml0aWFsQ29udGludWVPbkVycm9yPzogYm9vbGVhbjtcbiAgQElucHV0KCkgaW5pdGlhbFJldHJ5Q291bnQ/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGluaXRpYWxJZnJhbWVMb2NhdG9yPzogc3RyaW5nO1xuICBASW5wdXQoKSBpbml0aWFsT3RoZXJMb2NhdG9ycz86IHN0cmluZztcbiAgQElucHV0KCkgZWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogRW1pdCB3aGVuIHN0ZXAgaXMgY3JlYXRlZCAqL1xuICBAT3V0cHV0KCkgY3JlYXRlU3RlcCA9IG5ldyBFdmVudEVtaXR0ZXI8QWlBZ2VudEZvcm1EYXRhPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gY2FuY2VsbGVkICovXG4gIEBPdXRwdXQoKSBjYW5jZWxsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKiBFbWl0IHdoZW4gdXNlciBzZWFyY2hlcyBmb3IgZW52aXJvbm1lbnRzICovXG4gIEBPdXRwdXQoKSBzZWFyY2hFbnZpcm9ubWVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLyoqIEVtaXQgd2hlbiB1c2VyIHNjcm9sbHMgdG8gbG9hZCBtb3JlIGVudmlyb25tZW50cyAqL1xuICBAT3V0cHV0KCkgbG9hZE1vcmVFbnZpcm9ubWVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgYWlBZ2VudEZvcm06IEZvcm1Hcm91cDtcbiAgc2hvd0FkdmFuY2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaGFzTG9hZGVkSW5pdGlhbERhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gQWR2YW5jZWQgc2V0dGluZ3MgdmFyaWFibGVzIChjYW4gYmUgcHJvdmlkZWQgZnJvbSBwYXJlbnQgb3IgaW5pdGlhbGl6ZWQgZnJvbSBmb3JtKVxuICBASW5wdXQoKSBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOiBhbnlbXSA9IFtdO1xuICBhZHZhbmNlZFZhcmlhYmxlc0Zvcm06IEZvcm1BcnJheTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge1xuICAgIHRoaXMuYWlBZ2VudEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIHF1ZXJ5OiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgdHlwZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIGVudmlyb25tZW50czogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIG1ldGFkYXRhOiBbJyddLFxuICAgICAgZGVzY3JpcHRpb246IFsnJ10sXG4gICAgICBjb250aW51ZU9uRXJyb3I6IFtmYWxzZV0sXG4gICAgICBkaXNhYmxlZDogW2ZhbHNlXSxcbiAgICAgIHJldHJ5Q291bnQ6IFsnJ10sXG4gICAgICBpZnJhbWVMb2NhdG9yOiBbJyddLFxuICAgICAgb3RoZXJMb2NhdG9yczogWycnXVxuICAgIH0pO1xuXG4gICAgdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0gPSB0aGlzLmZiLmFycmF5KFtdKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIExvYWQgaW5pdGlhbCBkYXRhIGlmIHByb3ZpZGVkIChlZGl0IG1vZGUpXG4gICAgaWYgKHRoaXMuaGFzSW5pdGlhbERhdGEoKSkge1xuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGEoKTtcbiAgICAgIHRoaXMuaGFzTG9hZGVkSW5pdGlhbERhdGEgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgYWR2YW5jZWQgc2V0dGluZ3MgdmFyaWFibGVzXG4gICAgaWYgKHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyAmJiB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gV2hlbiBwcm92aWRlZCBieSBwYXJlbnQsIGFwcGx5IHRvIGZvcm0gYW5kIGJ1aWxkIGNvbnRyb2xzXG4gICAgICB0aGlzLmFwcGx5QWR2YW5jZWRTZXR0aW5nc1RvRm9ybSgpO1xuICAgICAgdGhpcy5idWlsZEFkdmFuY2VkVmFyaWFibGVzRm9ybSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGYWxsYmFjazogZGVyaXZlIGZyb20gY3VycmVudCBmb3JtIHZhbHVlc1xuICAgICAgdGhpcy5pbml0aWFsaXplQWR2YW5jZWRTZXR0aW5ncygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiBhbnkgaW5pdGlhbCB2YWx1ZSBpbnB1dHMgY2hhbmdlZFxuICAgIGNvbnN0IGluaXRpYWxWYWx1ZUtleXMgPSBbXG4gICAgICAnaW5pdGlhbFF1ZXJ5JywgJ2luaXRpYWxUeXBlJywgJ2luaXRpYWxEZXNjcmlwdGlvbicsICdpbml0aWFsRW52aXJvbm1lbnRzJyxcbiAgICAgICdpbml0aWFsTWV0YWRhdGEnLCAnaW5pdGlhbERpc2FibGVkJywgJ2luaXRpYWxDb250aW51ZU9uRXJyb3InLFxuICAgICAgJ2luaXRpYWxSZXRyeUNvdW50JywgJ2luaXRpYWxJZnJhbWVMb2NhdG9yJywgJ2luaXRpYWxPdGhlckxvY2F0b3JzJywgJ2VkaXRNb2RlJ1xuICAgIF07XG4gICAgXG4gICAgY29uc3QgaGFzSW5pdGlhbFZhbHVlQ2hhbmdlcyA9IGluaXRpYWxWYWx1ZUtleXMuc29tZShrZXkgPT4gXG4gICAgICBjaGFuZ2VzW2tleV0gJiYgIWNoYW5nZXNba2V5XS5maXJzdENoYW5nZVxuICAgICk7XG4gICAgXG4gICAgLy8gTG9hZCBpbml0aWFsIGRhdGEgaWYgaXQncyBzZXQgYWZ0ZXIgY29tcG9uZW50IGluaXRpYWxpemF0aW9uIG9yIGlmIGluaXRpYWwgdmFsdWVzIGNoYW5nZWRcbiAgICBpZiAoaGFzSW5pdGlhbFZhbHVlQ2hhbmdlcyB8fCAodGhpcy5oYXNJbml0aWFsRGF0YSgpICYmICF0aGlzLmhhc0xvYWRlZEluaXRpYWxEYXRhKSkge1xuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGEoKTtcbiAgICAgIHRoaXMuaGFzTG9hZGVkSW5pdGlhbERhdGEgPSB0cnVlO1xuICAgICAgLy8gUmUtaW5pdGlhbGl6ZSBhZHZhbmNlZCBzZXR0aW5ncyB3aGVuIGluaXRpYWwgdmFsdWVzIGNoYW5nZSAodW5sZXNzIHBhcmVudCBwcm92aWRlZCB0aGVtKVxuICAgICAgaWYgKCF0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgfHwgdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVBZHZhbmNlZFNldHRpbmdzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV2hlbiBwYXJlbnQgdXBkYXRlcyBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLCByZWJ1aWxkIGZvcm0gYW5kIHN5bmMgdG8gYWlBZ2VudEZvcm1cbiAgICBpZiAoY2hhbmdlc1snYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyddICYmIHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcykge1xuICAgICAgaWYgKHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuYXBwbHlBZHZhbmNlZFNldHRpbmdzVG9Gb3JtKCk7XG4gICAgICAgIHRoaXMuYnVpbGRBZHZhbmNlZFZhcmlhYmxlc0Zvcm0oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIGNsZWFyZWQsIHJlYnVpbGQgZnJvbSBmb3JtIHZhbHVlc1xuICAgICAgICB0aGlzLmluaXRpYWxpemVBZHZhbmNlZFNldHRpbmdzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYXNJbml0aWFsRGF0YSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5pbml0aWFsUXVlcnkgfHwgdGhpcy5pbml0aWFsVHlwZSB8fCB0aGlzLmluaXRpYWxEZXNjcmlwdGlvbiB8fCBcbiAgICAgICAgICAgICAgdGhpcy5pbml0aWFsRW52aXJvbm1lbnRzIHx8IHRoaXMuaW5pdGlhbE1ldGFkYXRhICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgdGhpcy5pbml0aWFsRGlzYWJsZWQgIT09IHVuZGVmaW5lZCB8fCB0aGlzLmluaXRpYWxDb250aW51ZU9uRXJyb3IgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICB0aGlzLmluaXRpYWxSZXRyeUNvdW50ICE9PSB1bmRlZmluZWQgfHwgdGhpcy5pbml0aWFsSWZyYW1lTG9jYXRvciB8fCBcbiAgICAgICAgICAgICAgdGhpcy5pbml0aWFsT3RoZXJMb2NhdG9ycyk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRJbml0aWFsRGF0YSgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnbG9hZEluaXRpYWxEYXRhOiBMb2FkaW5nIEFJLWFnZW50IGRhdGEnLCB7XG4gICAgICBpbml0aWFsUXVlcnk6IHRoaXMuaW5pdGlhbFF1ZXJ5LFxuICAgICAgaW5pdGlhbFR5cGU6IHRoaXMuaW5pdGlhbFR5cGUsXG4gICAgICBpbml0aWFsRGVzY3JpcHRpb246IHRoaXMuaW5pdGlhbERlc2NyaXB0aW9uLFxuICAgICAgaW5pdGlhbEVudmlyb25tZW50czogdGhpcy5pbml0aWFsRW52aXJvbm1lbnRzLFxuICAgICAgaW5pdGlhbE1ldGFkYXRhOiB0aGlzLmluaXRpYWxNZXRhZGF0YSxcbiAgICAgIGluaXRpYWxEaXNhYmxlZDogdGhpcy5pbml0aWFsRGlzYWJsZWQsXG4gICAgICBpbml0aWFsQ29udGludWVPbkVycm9yOiB0aGlzLmluaXRpYWxDb250aW51ZU9uRXJyb3IsXG4gICAgICBpbml0aWFsUmV0cnlDb3VudDogdGhpcy5pbml0aWFsUmV0cnlDb3VudCxcbiAgICAgIGluaXRpYWxJZnJhbWVMb2NhdG9yOiB0aGlzLmluaXRpYWxJZnJhbWVMb2NhdG9yLFxuICAgICAgaW5pdGlhbE90aGVyTG9jYXRvcnM6IHRoaXMuaW5pdGlhbE90aGVyTG9jYXRvcnMsXG4gICAgICBlZGl0TW9kZTogdGhpcy5lZGl0TW9kZVxuICAgIH0pO1xuXG4gICAgLy8gUG9wdWxhdGUgZm9ybSB3aXRoIGluaXRpYWwgdmFsdWVzXG4gICAgdGhpcy5haUFnZW50Rm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIHF1ZXJ5OiB0aGlzLmluaXRpYWxRdWVyeSB8fCAnJyxcbiAgICAgIHR5cGU6IHRoaXMuaW5pdGlhbFR5cGUgfHwgJycsXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5pbml0aWFsRGVzY3JpcHRpb24gfHwgJycsXG4gICAgICBlbnZpcm9ubWVudHM6IHRoaXMuaW5pdGlhbEVudmlyb25tZW50cyB8fCAnJyxcbiAgICAgIG1ldGFkYXRhOiB0aGlzLmluaXRpYWxNZXRhZGF0YSB8fCAnJyxcbiAgICAgIGRpc2FibGVkOiB0aGlzLmluaXRpYWxEaXNhYmxlZCAhPT0gdW5kZWZpbmVkID8gdGhpcy5pbml0aWFsRGlzYWJsZWQgOiBmYWxzZSxcbiAgICAgIGNvbnRpbnVlT25FcnJvcjogdGhpcy5pbml0aWFsQ29udGludWVPbkVycm9yICE9PSB1bmRlZmluZWQgPyB0aGlzLmluaXRpYWxDb250aW51ZU9uRXJyb3IgOiB0cnVlLFxuICAgICAgcmV0cnlDb3VudDogdGhpcy5pbml0aWFsUmV0cnlDb3VudCAhPT0gdW5kZWZpbmVkID8gU3RyaW5nKHRoaXMuaW5pdGlhbFJldHJ5Q291bnQpIDogJycsXG4gICAgICBpZnJhbWVMb2NhdG9yOiB0aGlzLmluaXRpYWxJZnJhbWVMb2NhdG9yIHx8ICcnLFxuICAgICAgb3RoZXJMb2NhdG9yczogdGhpcy5pbml0aWFsT3RoZXJMb2NhdG9ycyB8fCAnJ1xuICAgIH0pO1xuXG4gICAgLy8gRXhwYW5kIGFkdmFuY2VkIHNlY3Rpb24gaWYgYW55IGFkdmFuY2VkIGZpZWxkcyBoYXZlIHZhbHVlc1xuICAgIGlmICh0aGlzLmluaXRpYWxEaXNhYmxlZCAhPT0gdW5kZWZpbmVkIHx8IHRoaXMuaW5pdGlhbENvbnRpbnVlT25FcnJvciAhPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIHRoaXMuaW5pdGlhbFJldHJ5Q291bnQgIT09IHVuZGVmaW5lZCB8fCB0aGlzLmluaXRpYWxJZnJhbWVMb2NhdG9yIHx8IFxuICAgICAgICB0aGlzLmluaXRpYWxPdGhlckxvY2F0b3JzKSB7XG4gICAgICB0aGlzLnNob3dBZHZhbmNlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYWR2YW5jZWQgc2V0dGluZ3MgdmFyaWFibGVzIGJhc2VkIG9uIGN1cnJlbnQgZm9ybSB2YWx1ZXMgd2hlblxuICAgKiBwYXJlbnQgaGFzIG5vdCBwcm92aWRlZCBhbnkgYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5cbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUFkdmFuY2VkU2V0dGluZ3MoKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5haUFnZW50Rm9ybS52YWx1ZTtcblxuICAgIHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2lzU3RlcE9wdGlvbmFsJyxcbiAgICAgICAgbGFiZWw6IFwiRG9uJ3QgZmFpbCB0aGUgdGVzdCBpZiB0aGlzIHN0ZXAgZmFpbHMuXCIsXG4gICAgICAgIHZhbHVlOiBmb3JtVmFsdWUuY29udGludWVPbkVycm9yICE9PSB1bmRlZmluZWQgPyBmb3JtVmFsdWUuY29udGludWVPbkVycm9yIDogdHJ1ZSxcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnc2hvdWxkU2tpcCcsXG4gICAgICAgIGxhYmVsOiAnU2tpcCB0aGlzIHN0ZXAgZHVyaW5nIGV4ZWN1dGlvbi4nLFxuICAgICAgICB2YWx1ZTogZm9ybVZhbHVlLmRpc2FibGVkICE9PSB1bmRlZmluZWQgPyBmb3JtVmFsdWUuZGlzYWJsZWQgOiBmYWxzZSxcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAncHdMb2NhdG9yJyxcbiAgICAgICAgbGFiZWw6ICdPdGhlciBMb2NhdG9ycycsXG4gICAgICAgIHZhbHVlOiB0aGlzLmNvbnZlcnRPdGhlckxvY2F0b3JzVG9BcnJheShmb3JtVmFsdWUub3RoZXJMb2NhdG9ycyksXG4gICAgICAgIHR5cGU6ICdzdHJfbGlzdCdcbiAgICAgIH1cbiAgICBdO1xuXG4gICAgdGhpcy5idWlsZEFkdmFuY2VkVmFyaWFibGVzRm9ybSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGluY29taW5nIGFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMgdG8gdGhlIHVuZGVybHlpbmcgZm9ybSBjb250cm9scy5cbiAgICogVXNlZCB3aGVuIHBhcmVudCBwYXNzZXMgYWR2YW5jZWQgdmFyaWFibGVzIChlLmcuIGZyb20gU3RlcEJ1aWxkZXJTZXJ2aWNlKS5cbiAgICovXG4gIHByaXZhdGUgYXBwbHlBZHZhbmNlZFNldHRpbmdzVG9Gb3JtKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzIHx8IHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICBpZiAodmFyaWFibGUubmFtZSA9PT0gJ2lzU3RlcE9wdGlvbmFsJykge1xuICAgICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnY29udGludWVPbkVycm9yJyk/LnNldFZhbHVlKCEhdmFyaWFibGUudmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZS5uYW1lID09PSAnc2hvdWxkU2tpcCcpIHtcbiAgICAgICAgdGhpcy5haUFnZW50Rm9ybS5nZXQoJ2Rpc2FibGVkJyk/LnNldFZhbHVlKCEhdmFyaWFibGUudmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZS5uYW1lID09PSAncHdMb2NhdG9yJykge1xuICAgICAgICBjb25zdCB2YWx1ZXNBcnJheTogc3RyaW5nW10gPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlLnZhbHVlKVxuICAgICAgICAgID8gdmFyaWFibGUudmFsdWVcbiAgICAgICAgICA6IHRoaXMuY29udmVydE90aGVyTG9jYXRvcnNUb0FycmF5KFN0cmluZyh2YXJpYWJsZS52YWx1ZSB8fCAnJykpO1xuICAgICAgICBjb25zdCBqb2luZWQgPSB2YWx1ZXNBcnJheS5qb2luKCcsICcpO1xuICAgICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnb3RoZXJMb2NhdG9ycycpPy5zZXRWYWx1ZShqb2luZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIG90aGVyTG9jYXRvcnMgZm9ybSB2YWx1ZSB0byBhIHN0cmluZyBhcnJheSBmb3Igc3RyX2xpc3QuXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRPdGhlckxvY2F0b3JzVG9BcnJheSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgLy8gU3BsaXQgYnkgY29tbWEgYW5kIHRyaW0gd2hpdGVzcGFjZVxuICAgIHJldHVybiB2YWx1ZVxuICAgICAgLnNwbGl0KCcsJylcbiAgICAgIC5tYXAoaXRlbSA9PiBpdGVtLnRyaW0oKSlcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLmxlbmd0aCA+IDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHJlYWN0aXZlIGZvcm0gZm9yIGFkdmFuY2VkIHNldHRpbmdzIHZhcmlhYmxlcyAoc2FtZSBwYXR0ZXJuIGFzIGFjdGlvbiBzdGVwKS5cbiAgICovXG4gIHByaXZhdGUgYnVpbGRBZHZhbmNlZFZhcmlhYmxlc0Zvcm0oKTogdm9pZCB7XG4gICAgLy8gQ2xlYXIgZXhpc3RpbmcgZm9ybSBhcnJheVxuICAgIHdoaWxlICh0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5sZW5ndGggIT09IDApIHtcbiAgICAgIHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLnJlbW92ZUF0KDApO1xuICAgIH1cblxuICAgIC8vIEFkZCBmb3JtIGdyb3VwcyBmb3IgZWFjaCBhZHZhbmNlZCB2YXJpYWJsZVxuICAgIHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5mb3JFYWNoKHZhcmlhYmxlID0+IHtcbiAgICAgIGxldCBkZWZhdWx0VmFsdWU6IGFueTtcbiAgICAgIGlmICh2YXJpYWJsZS50eXBlID09PSAnc3RyX2xpc3QnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlQXJyYXkgPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlLnZhbHVlKSA/IHZhcmlhYmxlLnZhbHVlIDogW107XG4gICAgICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZmIuYXJyYXkoXG4gICAgICAgICAgdmFsdWVBcnJheS5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IHZhbHVlQXJyYXkubWFwKChpdGVtOiBzdHJpbmcpID0+IHRoaXMuZmIuY29udHJvbChpdGVtKSlcbiAgICAgICAgICAgIDogW3RoaXMuZmIuY29udHJvbCgnJyldIC8vIFN0YXJ0IHdpdGggb25lIGVtcHR5IGNvbnRyb2xcbiAgICAgICAgKTtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gZm9ybUFycmF5O1xuICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZS50eXBlID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIHZhcmlhYmxlLnZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gdmFyaWFibGUudmFsdWUgPT09IHRydWUgfHwgdmFyaWFibGUudmFsdWUgPT09ICd0cnVlJyB8fCB2YXJpYWJsZS52YWx1ZSA9PT0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IHZhcmlhYmxlLnZhbHVlIHx8ICcnO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YXJpYWJsZUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIG5hbWU6IFt2YXJpYWJsZS5uYW1lXSxcbiAgICAgICAgdmFsdWU6IHZhcmlhYmxlLnR5cGUgPT09ICdzdHJfbGlzdCcgPyBkZWZhdWx0VmFsdWUgOiBbZGVmYXVsdFZhbHVlXSxcbiAgICAgICAgdHlwZTogW3ZhcmlhYmxlLnR5cGUgfHwgJ3N0cmluZyddLFxuICAgICAgICBsYWJlbDogW3ZhcmlhYmxlLmxhYmVsIHx8ICcnXVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLnB1c2godmFyaWFibGVHcm91cCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRUeXBlQ29uZmlnKCk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogJ3R5cGUnLFxuICAgICAgcGxhY2Vob2xkZXI6ICdTZWxlY3QgdHlwZScsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMudHlwZU9wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgZ2V0RW52aXJvbm1lbnRDb25maWcoKTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiAnZW52aXJvbm1lbnRzJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IGVudmlyb25tZW50JyxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgICBzZXJ2ZXJTZWFyY2g6IHRydWUsXG4gICAgICBvcHRpb25zOiB0aGlzLmVudmlyb25tZW50T3B0aW9ucyxcbiAgICAgIGhhc01vcmU6IHRoaXMuaGFzTW9yZUVudmlyb25tZW50cyxcbiAgICAgIGlzTG9hZGluZzogdGhpcy5pc0xvYWRpbmdFbnZpcm9ubWVudHMsXG4gICAgICBvblNlYXJjaDogKHNlYXJjaFRlcm06IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaEVudmlyb25tZW50cy5lbWl0KHNlYXJjaFRlcm0pO1xuICAgICAgfSxcbiAgICAgIG9uTG9hZE1vcmU6ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzTW9yZUVudmlyb25tZW50cyAmJiAhdGhpcy5pc0xvYWRpbmdFbnZpcm9ubWVudHMpIHtcbiAgICAgICAgICB0aGlzLmxvYWRNb3JlRW52aXJvbm1lbnRzLmVtaXQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBnZXRSZXRyeUNvdW50Q29uZmlnKCk6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogJ3JldHJ5Q291bnQnLFxuICAgICAgcGxhY2Vob2xkZXI6ICdEeW5hbWljIHNlYXJjaCBzZWxlY3RvciBmcm9tIGxpYnJhcnkgb3IgbWFudWFsJyxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgICBvcHRpb25zOiB0aGlzLnJldHJ5Q291bnRPcHRpb25zXG4gICAgfTtcbiAgfVxuXG4gIGdldElmcmFtZUxvY2F0b3JDb25maWcoKTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiAnaWZyYW1lTG9jYXRvcicsXG4gICAgICBwbGFjZWhvbGRlcjogJ0R5bmFtaWMgc2VhcmNoIHNlbGVjdG9yIGZyb20gbGlicmFyeSBvciBtYW51YWwnLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMuaWZyYW1lTG9jYXRvck9wdGlvbnNcbiAgICB9O1xuICB9XG5cbiAgZ2V0T3RoZXJMb2NhdG9yc0NvbmZpZygpOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICBrZXk6ICdvdGhlckxvY2F0b3JzJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnRHluYW1pYyBzZWFyY2ggc2VsZWN0b3IgZnJvbSBsaWJyYXJ5IG9yIG1hbnVhbCcsXG4gICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgb3B0aW9uczogdGhpcy5vdGhlckxvY2F0b3JzT3B0aW9uc1xuICAgIH07XG4gIH1cblxuICB0b2dnbGVBZHZhbmNlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dBZHZhbmNlZCA9ICF0aGlzLnNob3dBZHZhbmNlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYWR2YW5jZWQgYm9vbGVhbiB2YXJpYWJsZSBjaGFuZ2VzIGFuZCBzeW5jIHRvIGZvcm0uXG4gICAqL1xuICBvbkFkdmFuY2VkVmFyaWFibGVCb29sZWFuQ2hhbmdlKHZhcmlhYmxlTmFtZTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHZhcmlhYmxlID0gdGhpcy5hZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzLmZpbmQodiA9PiB2Lm5hbWUgPT09IHZhcmlhYmxlTmFtZSk7XG4gICAgaWYgKHZhcmlhYmxlKSB7XG4gICAgICB2YXJpYWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBjb3JyZXNwb25kaW5nIGZvcm0gY29udHJvbHNcbiAgICBpZiAodmFyaWFibGVOYW1lID09PSAnaXNTdGVwT3B0aW9uYWwnKSB7XG4gICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnY29udGludWVPbkVycm9yJyk/LnNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHZhcmlhYmxlTmFtZSA9PT0gJ3Nob3VsZFNraXAnKSB7XG4gICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnZGlzYWJsZWQnKT8uc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIEtlZXAgYWR2YW5jZWRWYXJpYWJsZXNGb3JtIGluIHN5bmNcbiAgICBjb25zdCB2YXJpYWJsZUluZGV4ID0gdGhpcy5hZHZhbmNlZFZhcmlhYmxlc0Zvcm0uY29udHJvbHMuZmluZEluZGV4KFxuICAgICAgY29udHJvbCA9PiBjb250cm9sLmdldCgnbmFtZScpPy52YWx1ZSA9PT0gdmFyaWFibGVOYW1lXG4gICAgKTtcbiAgICBpZiAodmFyaWFibGVJbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmF0KHZhcmlhYmxlSW5kZXgpLmdldCgndmFsdWUnKT8uc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFkdmFuY2VkIG5vbi1ib29sZWFuIHZhbHVlIGNoYW5nZXMgKGUuZy4gcHdMb2NhdG9yKSBhbmQgc3luYyB0byBmb3JtLlxuICAgKi9cbiAgb25BZHZhbmNlZFZhcmlhYmxlVmFsdWVDaGFuZ2UodmFyaWFibGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCB2YXJpYWJsZSA9IHRoaXMuYWR2YW5jZWRTZXR0aW5nc1ZhcmlhYmxlcy5maW5kKHYgPT4gdi5uYW1lID09PSB2YXJpYWJsZU5hbWUpO1xuICAgIGlmICh2YXJpYWJsZSkge1xuICAgICAgdmFyaWFibGUudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFyaWFibGVOYW1lID09PSAncHdMb2NhdG9yJykge1xuICAgICAgLy8gdmFsdWUgaXMgZXhwZWN0ZWQgdG8gYmUgc3RyaW5nW10gZnJvbSBzdHJfbGlzdFxuICAgICAgY29uc3QgdmFsdWVzQXJyYXk6IHN0cmluZ1tdID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IHRoaXMuY29udmVydE90aGVyTG9jYXRvcnNUb0FycmF5KFN0cmluZyh2YWx1ZSB8fCAnJykpO1xuICAgICAgY29uc3Qgam9pbmVkID0gdmFsdWVzQXJyYXkuam9pbignLCAnKTtcbiAgICAgIHRoaXMuYWlBZ2VudEZvcm0uZ2V0KCdvdGhlckxvY2F0b3JzJyk/LnNldFZhbHVlKGpvaW5lZCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFyaWFibGVJbmRleCA9IHRoaXMuYWR2YW5jZWRWYXJpYWJsZXNGb3JtLmNvbnRyb2xzLmZpbmRJbmRleChcbiAgICAgIGNvbnRyb2wgPT4gY29udHJvbC5nZXQoJ25hbWUnKT8udmFsdWUgPT09IHZhcmlhYmxlTmFtZVxuICAgICk7XG4gICAgaWYgKHZhcmlhYmxlSW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmFkdmFuY2VkVmFyaWFibGVzRm9ybS5hdCh2YXJpYWJsZUluZGV4KTtcbiAgICAgIGNvbnN0IGlzU3RyTGlzdCA9IHZhcmlhYmxlICYmIHZhcmlhYmxlLnR5cGUgPT09ICdzdHJfbGlzdCc7XG4gICAgICBpZiAoIWlzU3RyTGlzdCkge1xuICAgICAgICBmb3JtR3JvdXAuZ2V0KCd2YWx1ZScpPy5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsbGVkLmVtaXQoKTtcbiAgfVxuXG4gIG9uQ3JlYXRlU3RlcCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5haUFnZW50Rm9ybS52YWxpZCkge1xuICAgICAgLy8gRW5zdXJlIGFkdmFuY2VkIHZhcmlhYmxlIHZhbHVlcyBhcmUgc3luY2VkIGJhY2sgdG8gdGhlIGZvcm0gYmVmb3JlIGVtaXR0aW5nXG4gICAgICB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICAgIGlmICh2YXJpYWJsZS5uYW1lID09PSAnaXNTdGVwT3B0aW9uYWwnKSB7XG4gICAgICAgICAgdGhpcy5haUFnZW50Rm9ybS5nZXQoJ2NvbnRpbnVlT25FcnJvcicpPy5zZXRWYWx1ZSghIXZhcmlhYmxlLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YXJpYWJsZS5uYW1lID09PSAnc2hvdWxkU2tpcCcpIHtcbiAgICAgICAgICB0aGlzLmFpQWdlbnRGb3JtLmdldCgnZGlzYWJsZWQnKT8uc2V0VmFsdWUoISF2YXJpYWJsZS52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFyaWFibGUubmFtZSA9PT0gJ3B3TG9jYXRvcicpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZXNBcnJheTogc3RyaW5nW10gPSBBcnJheS5pc0FycmF5KHZhcmlhYmxlLnZhbHVlKVxuICAgICAgICAgICAgPyB2YXJpYWJsZS52YWx1ZVxuICAgICAgICAgICAgOiB0aGlzLmNvbnZlcnRPdGhlckxvY2F0b3JzVG9BcnJheShTdHJpbmcodmFyaWFibGUudmFsdWUgfHwgJycpKTtcbiAgICAgICAgICBjb25zdCBqb2luZWQgPSB2YWx1ZXNBcnJheS5qb2luKCcsICcpO1xuICAgICAgICAgIHRoaXMuYWlBZ2VudEZvcm0uZ2V0KCdvdGhlckxvY2F0b3JzJyk/LnNldFZhbHVlKGpvaW5lZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmFpQWdlbnRGb3JtLnZhbHVlO1xuICAgICAgY29uc3Qgc3RlcERhdGE6IEFpQWdlbnRGb3JtRGF0YSA9IHtcbiAgICAgICAgcXVlcnk6IGZvcm1WYWx1ZS5xdWVyeSB8fCAnJyxcbiAgICAgICAgdHlwZTogZm9ybVZhbHVlLnR5cGUgfHwgJycsXG4gICAgICAgIGVudmlyb25tZW50czogZm9ybVZhbHVlLmVudmlyb25tZW50cyB8fCAnJyxcbiAgICAgICAgbWV0YWRhdGE6IGZvcm1WYWx1ZS5tZXRhZGF0YSB8fCAnJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGZvcm1WYWx1ZS5kZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgICAgY29udGludWVPbkVycm9yOiBmb3JtVmFsdWUuY29udGludWVPbkVycm9yIHx8IGZhbHNlLFxuICAgICAgICBkaXNhYmxlZDogZm9ybVZhbHVlLmRpc2FibGVkIHx8IGZhbHNlLFxuICAgICAgICByZXRyeUNvdW50OiBmb3JtVmFsdWUucmV0cnlDb3VudCB8fCAnJyxcbiAgICAgICAgaWZyYW1lTG9jYXRvcjogZm9ybVZhbHVlLmlmcmFtZUxvY2F0b3IgfHwgJycsXG4gICAgICAgIG90aGVyTG9jYXRvcnM6IGZvcm1WYWx1ZS5vdGhlckxvY2F0b3JzIHx8ICcnLFxuICAgICAgICBhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzOiB0aGlzLmFkdmFuY2VkU2V0dGluZ3NWYXJpYWJsZXNcbiAgICAgIH07XG4gICAgICB0aGlzLmNyZWF0ZVN0ZXAuZW1pdChzdGVwRGF0YSk7XG4gICAgfVxuICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWJnLXdoaXRlIGNxYS1weC00IGNxYS1weS0yIGNxYS1oLWZ1bGxcIj5cbiAgPCEtLSBIZWFkZXIgLS0+XG4gIDxoMiBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1ibGFjay0xMDAgY3FhLW1iLTRcIj5cbiAgICB7eyBlZGl0TW9kZSA/ICdFZGl0IEFJIFN0ZXAnIDogJ0NyZWF0ZSBBSSBTdGVwJyB9fVxuICA8L2gyPlxuXG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWZsZXgtMSBjcWEtb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgPCEtLSBXaGF0IHNob3VsZCB0aGUgYWdlbnQgYWNoaWV2ZT8gLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1tYi02XCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1bMTRweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LWdyYXktNzAwIGNxYS1tYi0xIGNxYS1ibG9ja1wiPlxuICAgICAgICBXaGF0IHNob3VsZCB0aGUgYWdlbnQgYWNoaWV2ZT88c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjRUY0NDQ0XSBjcWEtbWwtMC41XCI+Kjwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8Y3FhLWN1c3RvbS10ZXh0YXJlYVxuICAgICAgIGNsYXNzPVwiY3FhLXN0ZXAtYnVpbGRlci1haS1hZ2VudC10ZXh0YXJlYVwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCInV2hhdCBzaG91bGQgdGhlIGFnZW50IGFjaGlldmU/J1wiXG4gICAgICAgIFt2YWx1ZV09XCJhaUFnZW50Rm9ybS5nZXQoJ3F1ZXJ5Jyk/LnZhbHVlXCJcbiAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgW3Jvd3NdPVwiNFwiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJhaUFnZW50Rm9ybS5nZXQoJ3F1ZXJ5Jyk/LnNldFZhbHVlKCRldmVudClcIj5cbiAgICAgIDwvY3FhLWN1c3RvbS10ZXh0YXJlYT5cbiAgICAgIDxwIGNsYXNzPVwiY3FhLXRleHQtWzEycHhdIGNxYS10ZXh0LVsjMEEwQTBBXSBcIj5cbiAgICAgICAgVGlwOiBVc2UgbnVtYmVyZWQgc3RlcHMgb3IgYnVsbGV0IHBvaW50cyBmb3IgY29tcGxleCB0YXNrcy5cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtd3JhcCBjcWEtY3VzdG9tLWZvcm0tZmllbGRzXCI+XG4gICAgPCEtLSBUeXBlIERyb3Bkb3duIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItNiBjcWEtdy0xLzIgY3FhLXByLTJcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS1sZWFkaW5nLVsxMDAlXSBjcWEtYmxvY2sgY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTFcIj5cbiAgICAgICAgVHlwZTxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyNFRjQ0NDRdIGNxYS1tbC0wLjVcIj4qPC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgY2xhc3M9XCJjcWEtdy1mdWxsXCIgW2Zvcm1dPVwiYWlBZ2VudEZvcm1cIiBbY29uZmlnXT1cImdldFR5cGVDb25maWcoKVwiPlxuICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEVudmlyb25tZW50cyBEcm9wZG93biAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTYgY3FhLXctMS8yIGNxYS1wbC0yXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtbGVhZGluZy1bMTAwJV0gY3FhLWJsb2NrIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0xXCI+XG4gICAgICAgIEVudmlvcm9ubWVudHM8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjRUY0NDQ0XSBjcWEtbWwtMC41XCI+Kjwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFtmb3JtXT1cImFpQWdlbnRGb3JtXCIgW2NvbmZpZ109XCJnZXRFbnZpcm9ubWVudENvbmZpZygpXCI+XG4gICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gTWV0YWRhdGEgSW5wdXQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1tYi0yIGNxYS13LTEvMiBjcWEtcHItMlwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS1ibG9jayBjcWEtdGV4dC1bMTRweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItMVwiPlxuICAgICAgICBNZXRhZGF0YVxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCInVGV4dCBJbnB1dCdcIlxuICAgICAgICBbdmFsdWVdPVwiYWlBZ2VudEZvcm0uZ2V0KCdtZXRhZGF0YScpPy52YWx1ZVwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJhaUFnZW50Rm9ybS5nZXQoJ21ldGFkYXRhJyk/LnNldFZhbHVlKCRldmVudClcIj5cbiAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRGVzY3JpcHRpb24gSW5wdXQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS13LTEvMiBjcWEtcGwtMiBcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS1sZWFkaW5nLVsxMDAlXSBjcWEtYmxvY2sgY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTFcIj5cbiAgICAgICAgRGVzY3JpcHRpb25cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1RleHQgSW5wdXQnXCJcbiAgICAgICAgW3ZhbHVlXT1cImFpQWdlbnRGb3JtLmdldCgnZGVzY3JpcHRpb24nKT8udmFsdWVcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwiYWlBZ2VudEZvcm0uZ2V0KCdkZXNjcmlwdGlvbicpPy5zZXRWYWx1ZSgkZXZlbnQpXCI+XG4gICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cblxuICAgIDwhLS0gQWR2YW5jZWQgU2VjdGlvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTJcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS13LWZ1bGwgY3FhLXRleHQtbGVmdCBjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LWdyYXktNzAwIGNxYS1weS0yIGNxYS1ib3JkZXItYiBjcWEtYm9yZGVyLWdyYXktMjAwXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFkdmFuY2VkKClcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTBweF1cIj5BZHZhbmNlZDwvc3Bhbj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtbGcgY3FhLXRyYW5zaXRpb24tdHJhbnNmb3JtXCIgW2NsYXNzLmNxYS1yb3RhdGUtMTgwXT1cInNob3dBZHZhbmNlZFwiPlxuICAgICAgICAgIGV4cGFuZF9tb3JlXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93QWR2YW5jZWRcIiBjbGFzcz1cIiBjcWEtY3VzdG9tLWZvcm0tZmllbGRzIGNxYS1mbGV4IGNxYS1mbGV4LWNvbFwiPlxuICAgICAgICA8Y3FhLWFkdmFuY2VkLXZhcmlhYmxlcy1mb3JtIFxuICAgICAgICAgIFthZHZhbmNlZFZhcmlhYmxlc109XCJhZHZhbmNlZFNldHRpbmdzVmFyaWFibGVzXCJcbiAgICAgICAgICBbYWR2YW5jZWRWYXJpYWJsZUZvcm1dPVwiYWR2YW5jZWRWYXJpYWJsZXNGb3JtXCJcbiAgICAgICAgICAodmFyaWFibGVCb29sZWFuQ2hhbmdlKT1cIm9uQWR2YW5jZWRWYXJpYWJsZUJvb2xlYW5DaGFuZ2UoJGV2ZW50Lm5hbWUsICRldmVudC52YWx1ZSlcIlxuICAgICAgICAgICh2YXJpYWJsZVZhbHVlQ2hhbmdlKT1cIm9uQWR2YW5jZWRWYXJpYWJsZVZhbHVlQ2hhbmdlKCRldmVudC5uYW1lLCAkZXZlbnQudmFsdWUpXCI+XG4gICAgICAgIDwvY3FhLWFkdmFuY2VkLXZhcmlhYmxlcy1mb3JtPlxuICAgICAgICA8IS0tIENvbnRpbnVlIG9uIEVycm9yIC0tPlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjcWEtbWItMVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItMlwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLXRleHQtWyM3MzczNzNdXCI+Q29udGludWUgb24gRXJyb3I8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgICAgICAgICBjbGFzcz1cImNxYS1zdGVwLWJ1aWxkZXItdG9nZ2xlLXNlY3Rpb25cIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJhaUFnZW50Rm9ybS5nZXQoJ2NvbnRpbnVlT25FcnJvcicpPy52YWx1ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiYWlBZ2VudEZvcm0uZ2V0KCdjb250aW51ZU9uRXJyb3InKT8uc2V0VmFsdWUoJGV2ZW50LmNoZWNrZWQpXCJcbiAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbm9ybWFsIGNxYS10ZXh0LVsjMEEwQTBBXVwiPlxuICAgICAgICAgICAgICBEb24ndCBmYWlsIHRoZSB0ZXN0IGlmIHRoaXMgc3RlcCBmYWlscy5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICA8IS0tIERpc2FibGVkIC0tPlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjcWEtbWItMVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtbWItMlwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTBweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjNzM3MzczXVwiPkRpc2FibGVkPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtc3RlcC1idWlsZGVyLXRvZ2dsZS1zZWN0aW9uXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiYWlBZ2VudEZvcm0uZ2V0KCdkaXNhYmxlZCcpPy52YWx1ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiYWlBZ2VudEZvcm0uZ2V0KCdkaXNhYmxlZCcpPy5zZXRWYWx1ZSgkZXZlbnQuY2hlY2tlZClcIlxuICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1ub3JtYWwgY3FhLXRleHQtWyMwQTBBMEFdXCI+XG4gICAgICAgICAgICAgIFNraXAgdGhpcyBzdGVwIGR1cmluZyBleGVjdXRpb24uXG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgPCEtLSBSZXRyeSBDb3VudCAtLT5cbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1tYi0xXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0xIGNxYS1ibG9ja1wiPlxuICAgICAgICAgICAgUmV0cnkgQ291bnRcbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgW2Zvcm1dPVwiYWlBZ2VudEZvcm1cIiBbY29uZmlnXT1cImdldFJldHJ5Q291bnRDb25maWcoKVwiPlxuICAgICAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgPCEtLSBJZnJhbWUgbG9jYXRvciAtLT5cbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1tYi0xXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0xIGNxYS1ibG9ja1wiPlxuICAgICAgICAgICAgSWZyYW1lIGxvY2F0b3JcbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgY2xhc3M9XCJjcWEtdGV4dC1bIzQxNDE0Nl1cIiBbZm9ybV09XCJhaUFnZW50Rm9ybVwiIFtjb25maWddPVwiZ2V0SWZyYW1lTG9jYXRvckNvbmZpZygpXCI+XG4gICAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICA8IS0tIE90aGVyIExvY2F0b3JzIC0tPlxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLW1iLTFcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtbGVhZGluZy1bMTAwJV0gY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTEgY3FhLWJsb2NrXCI+XG4gICAgICAgICAgICBPdGhlciBMb2NhdG9yc1xuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBbZm9ybV09XCJhaUFnZW50Rm9ybVwiIFtjb25maWddPVwiZ2V0T3RoZXJMb2NhdG9yc0NvbmZpZygpXCI+XG4gICAgICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PiAtLT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLXctZnVsbCBjcWEtZ2FwLTIgY3FhLW10LWF1dG8gY3FhLXB0LTQgY3FhLWJvcmRlci10IGNxYS1ib3JkZXItZ3JheS0yMDBcIj5cbiAgICA8Y3FhLWJ1dHRvbiBjbGFzcz1cImNxYS13LTEvMiBjcWEtcm91bmRlZC1bMTBweF1cIiB2YXJpYW50PVwib3V0bGluZWRcIiB0ZXh0PVwiQ2FuY2VsXCIgW2N1c3RvbUNsYXNzXT1cIidjcWEtZmxleC0xIGNxYS13LWZ1bGwnXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ2FuY2VsKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gICAgPGNxYS1idXR0b24gY2xhc3M9XCJjcWEtYm9yZGVyLXNvbGlkIGNxYS1yb3VuZGVkLVs5cHhdIGNxYS13LTEvMiBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyMzRjQzRUVdXCIgdmFyaWFudD1cImZpbGxlZFwiIFt0ZXh0XT1cImVkaXRNb2RlID8gJ1VwZGF0ZSBTdGVwJyA6ICdDcmVhdGUgU3RlcCdcIiBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS1mbGV4LTEgY3FhLXctZnVsbCdcIlxuICAgICAgW2Rpc2FibGVkXT1cIiFhaUFnZW50Rm9ybS52YWxpZFwiXG4gICAgICAoY2xpY2tlZCk9XCJvbkNyZWF0ZVN0ZXAoKVwiPlxuICAgIDwvY3FhLWJ1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuIl19
|