@cqa-lib/cqa-ui 1.1.317 → 1.1.319
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/segment-control/segment-control.component.mjs +4 -3
- package/esm2020/lib/step-builder/step-builder-action/step-builder-action.component.mjs +24 -3
- package/esm2020/lib/step-builder/step-builder-loop/step-builder-loop.component.mjs +1 -1
- package/esm2020/lib/test-case-details/condition-step/condition-step.component.mjs +11 -6
- package/esm2020/lib/test-case-details/create-step-group/create-step-group.component.mjs +3 -3
- package/fesm2015/cqa-lib-cqa-ui.mjs +38 -12
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +38 -12
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/segment-control/segment-control.component.d.ts +1 -0
- package/lib/step-builder/step-builder-action/step-builder-action.component.d.ts +10 -1
- package/lib/test-case-details/condition-step/condition-step.component.d.ts +2 -2
- package/package.json +1 -1
|
@@ -157,10 +157,10 @@ export class CreateStepGroupComponent {
|
|
|
157
157
|
}
|
|
158
158
|
}
|
|
159
159
|
CreateStepGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CreateStepGroupComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
160
|
-
CreateStepGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: CreateStepGroupComponent, selector: "cqa-create-step-group", inputs: { stepsToGroup: "stepsToGroup", stepLabels: "stepLabels" }, outputs: { createGroup: "createGroup", cancelled: "cancelled" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n <!-- Header: title + close (X) -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n <h2 class=\"cqa-text-[16px] cqa-leading-[24px] cqa-font-bold cqa-text-[#111827] cqa-m-0\">\n Create step group\n </h2>\n <p class=\"cqa-text-[14px] cqa-leading-[20px] cqa-text-[#64748B] cqa-m-0\">\n {{ subtitleText }}\n </p>\n </div>\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n title=\"Close\"\n aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Group name * -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-[#161617]\">\n Group name <span class=\"cqa-text-red-500\">*</span>\n </label>\n <cqa-custom-input\n placeholder=\"e.g., Authentication flow\"\n [value]=\"form.get('groupName')?.value\"\n [fullWidth]=\"true\"\n size=\"md\"\n (valueChange)=\"form.get('groupName')?.setValue($event); form.get('groupName')?.updateValueAndValidity()\">\n </cqa-custom-input>\n <p *ngIf=\"form.get('groupName')?.invalid && form.get('groupName')?.touched\" class=\"cqa-text-xs cqa-text-red-500 cqa-m-0\">\n Group name is required.\n </p>\n </div>\n\n <!-- Steps to group (N) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <label class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[100%] cqa-tracking-normal cqa-text-[#0A0A0A] cqa-align-middle\">\n Steps to group ({{ stepsCount }})\n </label>\n <div class=\"cqa-scrollbar-hide cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[200px] cqa-overflow-y-auto cqa-rounded-[8px] cqa-p-[6px] cqa-border cqa-border-solid cqa-border-[rgba(0,0,0,0.1)]\">\n <div\n *ngFor=\"let step of stepsToGroup; let i = index\"\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-rounded-[4px] cqa-py-[4px] cqa-px-[8px] cqa-bg-[rgba(216,217,252,0.3)]\">\n <!-- Numbered badge -->\n <span\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-rounded-full cqa-bg-[#3F43EE] cqa-text-white cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex-shrink-0\">\n {{ i + 1 }}\n </span>\n <span [innerHTML]=\"getStepDisplayLabel(step, i)\" class=\"cqa-action-format cqa-font-medium cqa-text-[10px] cqa-leading-[15px] cqa-tracking-[0px] cqa-text-[#0B0B0C] cqa-flex-1 cqa-min-w-0 cqa-truncate\">\n </span>\n </div>\n </div>\n </div>\n\n <!-- Actions: Cancel | Create group | Create and replace -->\n <div class=\"cqa-flex cqa-items-
|
|
160
|
+
CreateStepGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: CreateStepGroupComponent, selector: "cqa-create-step-group", inputs: { stepsToGroup: "stepsToGroup", stepLabels: "stepLabels" }, outputs: { createGroup: "createGroup", cancelled: "cancelled" }, host: { classAttribute: "cqa-ui-root" }, ngImport: i0, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n <!-- Header: title + close (X) -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n <h2 class=\"cqa-text-[16px] cqa-leading-[24px] cqa-font-bold cqa-text-[#111827] cqa-m-0\">\n Create step group\n </h2>\n <p class=\"cqa-text-[14px] cqa-leading-[20px] cqa-text-[#64748B] cqa-m-0\">\n {{ subtitleText }}\n </p>\n </div>\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n title=\"Close\"\n aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Group name * -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-[#161617]\">\n Group name <span class=\"cqa-text-red-500\">*</span>\n </label>\n <cqa-custom-input\n placeholder=\"e.g., Authentication flow\"\n [value]=\"form.get('groupName')?.value\"\n [fullWidth]=\"true\"\n size=\"md\"\n (valueChange)=\"form.get('groupName')?.setValue($event); form.get('groupName')?.updateValueAndValidity()\">\n </cqa-custom-input>\n <p *ngIf=\"form.get('groupName')?.invalid && form.get('groupName')?.touched\" class=\"cqa-text-xs cqa-text-red-500 cqa-m-0\">\n Group name is required.\n </p>\n </div>\n\n <!-- Steps to group (N) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <label class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[100%] cqa-tracking-normal cqa-text-[#0A0A0A] cqa-align-middle\">\n Steps to group ({{ stepsCount }})\n </label>\n <div class=\"cqa-scrollbar-hide cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[200px] cqa-overflow-y-auto cqa-rounded-[8px] cqa-p-[6px] cqa-border cqa-border-solid cqa-border-[rgba(0,0,0,0.1)]\">\n <div\n *ngFor=\"let step of stepsToGroup; let i = index\"\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-rounded-[4px] cqa-py-[4px] cqa-px-[8px] cqa-bg-[rgba(216,217,252,0.3)]\">\n <!-- Numbered badge -->\n <span\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-rounded-full cqa-bg-[#3F43EE] cqa-text-white cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex-shrink-0\">\n {{ i + 1 }}\n </span>\n <span [innerHTML]=\"getStepDisplayLabel(step, i)\" class=\"cqa-action-format cqa-font-medium cqa-text-[10px] cqa-leading-[15px] cqa-tracking-[0px] cqa-text-[#0B0B0C] cqa-flex-1 cqa-min-w-0 cqa-truncate\">\n </span>\n </div>\n </div>\n </div>\n\n <!-- Actions: Cancel | Create group | Create and replace -->\n <div class=\"cqa-flex cqa-items-center cqa-w-full cqa-gap-3\">\n <cqa-button\n variant=\"outlined\"\n btnSize=\"lg\"\n text=\"Cancel\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146] cqa-whitespace-nowrap'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button\n variant=\"filled\"\n btnSize=\"lg\"\n text=\"Create\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#3F43EE] cqa-bg-[#3F43EE] cqa-whitespace-nowrap'\"\n (clicked)=\"onCreateGroup(false)\">\n </cqa-button>\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <cqa-button\n variant=\"filled\"\n btnSize=\"lg\"\n text=\"Create and replace\"\n [fullWidth]=\"true\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#3F43EE] cqa-bg-[#3F43EE] cqa-whitespace-nowrap'\"\n (clicked)=\"onCreateGroup(true)\">\n </cqa-button>\n </div>\n </div>\n</div>\n", components: [{ type: i2.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: i3.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
161
161
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CreateStepGroupComponent, decorators: [{
|
|
162
162
|
type: Component,
|
|
163
|
-
args: [{ selector: 'cqa-create-step-group', host: { class: 'cqa-ui-root' }, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n <!-- Header: title + close (X) -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n <h2 class=\"cqa-text-[16px] cqa-leading-[24px] cqa-font-bold cqa-text-[#111827] cqa-m-0\">\n Create step group\n </h2>\n <p class=\"cqa-text-[14px] cqa-leading-[20px] cqa-text-[#64748B] cqa-m-0\">\n {{ subtitleText }}\n </p>\n </div>\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n title=\"Close\"\n aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Group name * -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-[#161617]\">\n Group name <span class=\"cqa-text-red-500\">*</span>\n </label>\n <cqa-custom-input\n placeholder=\"e.g., Authentication flow\"\n [value]=\"form.get('groupName')?.value\"\n [fullWidth]=\"true\"\n size=\"md\"\n (valueChange)=\"form.get('groupName')?.setValue($event); form.get('groupName')?.updateValueAndValidity()\">\n </cqa-custom-input>\n <p *ngIf=\"form.get('groupName')?.invalid && form.get('groupName')?.touched\" class=\"cqa-text-xs cqa-text-red-500 cqa-m-0\">\n Group name is required.\n </p>\n </div>\n\n <!-- Steps to group (N) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <label class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[100%] cqa-tracking-normal cqa-text-[#0A0A0A] cqa-align-middle\">\n Steps to group ({{ stepsCount }})\n </label>\n <div class=\"cqa-scrollbar-hide cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[200px] cqa-overflow-y-auto cqa-rounded-[8px] cqa-p-[6px] cqa-border cqa-border-solid cqa-border-[rgba(0,0,0,0.1)]\">\n <div\n *ngFor=\"let step of stepsToGroup; let i = index\"\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-rounded-[4px] cqa-py-[4px] cqa-px-[8px] cqa-bg-[rgba(216,217,252,0.3)]\">\n <!-- Numbered badge -->\n <span\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-rounded-full cqa-bg-[#3F43EE] cqa-text-white cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex-shrink-0\">\n {{ i + 1 }}\n </span>\n <span [innerHTML]=\"getStepDisplayLabel(step, i)\" class=\"cqa-action-format cqa-font-medium cqa-text-[10px] cqa-leading-[15px] cqa-tracking-[0px] cqa-text-[#0B0B0C] cqa-flex-1 cqa-min-w-0 cqa-truncate\">\n </span>\n </div>\n </div>\n </div>\n\n <!-- Actions: Cancel | Create group | Create and replace -->\n <div class=\"cqa-flex cqa-items-
|
|
163
|
+
args: [{ selector: 'cqa-create-step-group', host: { class: 'cqa-ui-root' }, template: "<div\n class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n <!-- Header: title + close (X) -->\n <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n <h2 class=\"cqa-text-[16px] cqa-leading-[24px] cqa-font-bold cqa-text-[#111827] cqa-m-0\">\n Create step group\n </h2>\n <p class=\"cqa-text-[14px] cqa-leading-[20px] cqa-text-[#64748B] cqa-m-0\">\n {{ subtitleText }}\n </p>\n </div>\n <button\n type=\"button\"\n (click)=\"onCancel()\"\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n title=\"Close\"\n aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <!-- Group name * -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-[#161617]\">\n Group name <span class=\"cqa-text-red-500\">*</span>\n </label>\n <cqa-custom-input\n placeholder=\"e.g., Authentication flow\"\n [value]=\"form.get('groupName')?.value\"\n [fullWidth]=\"true\"\n size=\"md\"\n (valueChange)=\"form.get('groupName')?.setValue($event); form.get('groupName')?.updateValueAndValidity()\">\n </cqa-custom-input>\n <p *ngIf=\"form.get('groupName')?.invalid && form.get('groupName')?.touched\" class=\"cqa-text-xs cqa-text-red-500 cqa-m-0\">\n Group name is required.\n </p>\n </div>\n\n <!-- Steps to group (N) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n <label class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[100%] cqa-tracking-normal cqa-text-[#0A0A0A] cqa-align-middle\">\n Steps to group ({{ stepsCount }})\n </label>\n <div class=\"cqa-scrollbar-hide cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[200px] cqa-overflow-y-auto cqa-rounded-[8px] cqa-p-[6px] cqa-border cqa-border-solid cqa-border-[rgba(0,0,0,0.1)]\">\n <div\n *ngFor=\"let step of stepsToGroup; let i = index\"\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-rounded-[4px] cqa-py-[4px] cqa-px-[8px] cqa-bg-[rgba(216,217,252,0.3)]\">\n <!-- Numbered badge -->\n <span\n class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-rounded-full cqa-bg-[#3F43EE] cqa-text-white cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex-shrink-0\">\n {{ i + 1 }}\n </span>\n <span [innerHTML]=\"getStepDisplayLabel(step, i)\" class=\"cqa-action-format cqa-font-medium cqa-text-[10px] cqa-leading-[15px] cqa-tracking-[0px] cqa-text-[#0B0B0C] cqa-flex-1 cqa-min-w-0 cqa-truncate\">\n </span>\n </div>\n </div>\n </div>\n\n <!-- Actions: Cancel | Create group | Create and replace -->\n <div class=\"cqa-flex cqa-items-center cqa-w-full cqa-gap-3\">\n <cqa-button\n variant=\"outlined\"\n btnSize=\"lg\"\n text=\"Cancel\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146] cqa-whitespace-nowrap'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button\n variant=\"filled\"\n btnSize=\"lg\"\n text=\"Create\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#3F43EE] cqa-bg-[#3F43EE] cqa-whitespace-nowrap'\"\n (clicked)=\"onCreateGroup(false)\">\n </cqa-button>\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <cqa-button\n variant=\"filled\"\n btnSize=\"lg\"\n text=\"Create and replace\"\n [fullWidth]=\"true\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#3F43EE] cqa-bg-[#3F43EE] cqa-whitespace-nowrap'\"\n (clicked)=\"onCreateGroup(true)\">\n </cqa-button>\n </div>\n </div>\n</div>\n" }]
|
|
164
164
|
}], ctorParameters: function () { return [{ type: i1.FormBuilder }]; }, propDecorators: { stepsToGroup: [{
|
|
165
165
|
type: Input
|
|
166
166
|
}], stepLabels: [{
|
|
@@ -170,4 +170,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
170
170
|
}], cancelled: [{
|
|
171
171
|
type: Output
|
|
172
172
|
}] } });
|
|
173
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXN0ZXAtZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy9jcmVhdGUtc3RlcC1ncm91cC9jcmVhdGUtc3RlcC1ncm91cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2NyZWF0ZS1zdGVwLWdyb3VwL2NyZWF0ZS1zdGVwLWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBSUwsa0JBQWtCLEdBQ25CLE1BQU0sMEJBQTBCLENBQUM7Ozs7OztBQVFsQzs7Ozs7R0FLRztBQU1ILE1BQU0sT0FBTyx3QkFBd0I7SUFVbkMsWUFBNkIsRUFBZTtRQUFmLE9BQUUsR0FBRixFQUFFLENBQWE7UUFUbkMsaUJBQVksR0FBeUIsRUFBRSxDQUFDO1FBQ2pELDhIQUE4SDtRQUNySCxlQUFVLEdBQWEsRUFBRSxDQUFDO1FBRXpCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQTJCLENBQUM7UUFDMUQsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFLN0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUN4QixTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoRSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxF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QztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxhQUFhLENBQUMsU0FBUyxHQUFHLEtBQUs7UUFDN0IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLENBQUMsRUFBRTtZQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDN0IsT0FBTztTQUNSO1FBQ0QsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkUsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzFELE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQzs7cUhBdEpVLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLDJPQzFCckMsMnVJQStGQTsyRkRyRWEsd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNFLHVCQUF1QixRQUUzQixFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7a0dBR3JCLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIFRlc3RDYXNlU3RlcENvbmZpZyxcbiAgTm9ybWFsU3RlcENvbmZpZyxcbiAgVGVzdENhc2VFdmVudFR5cGUsXG4gIGlzTm9ybWFsU3RlcENvbmZpZyxcbn0gZnJvbSAnLi4vdGVzdC1jYXNlLXN0ZXAubW9kZWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVTdGVwR3JvdXBGb3JtRGF0YSB7XG4gIGdyb3VwTmFtZTogc3RyaW5nO1xuICAvKiogV2hlbiB0cnVlLCByZXBsYWNlIHNlbGVjdGVkIHN0ZXBzIHdpdGggdGhlIG5ldyBncm91cCAoc2FtZSBhcyBjYXNlcyBzY3JlZW4gQ3JlYXRlIGFuZCByZXBsYWNlKS4gKi9cbiAgaXNSZXBsYWNlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgU3RlcCBHcm91cCBwYW5lbC9tb2RhbCBmb3IgVGVzdCBDYXNlIERldGFpbHMuXG4gKiBGb2xsb3dzIHRoZSBzYW1lIHN0cnVjdHVyZSBhbmQgdmFsaWRhdGlvbiBwYXR0ZXJuIGFzIFRlc3QgRGF0YSBNb2RhbCBhbmQgTG9vcCBTdGVwLlxuICogRGlzcGxheXMgc2VsZWN0ZWQgc3RlcHMgYW5kIGFsbG93cyBuYW1pbmcgdGhlIG5ldyBncm91cDsgZW1pdHMgY3JlYXRlR3JvdXAgd2l0aCBncm91cCBuYW1lXG4gKiBzbyB0aGUgaG9zdCBjYW4gY3JlYXRlIHRoZSBzdGVwIGdyb3VwIGFuZCByZXBsYWNlIHNlbGVjdGVkIHN0ZXBzIHdpdGggaXQuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1jcmVhdGUtc3RlcC1ncm91cCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUtc3RlcC1ncm91cC5jb21wb25lbnQuaHRtbCcsXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfSxcbn0pXG5leHBvcnQgY2xhc3MgQ3JlYXRlU3RlcEdyb3VwQ29tcG9uZW50IHtcbiAgQElucHV0KCkgc3RlcHNUb0dyb3VwOiBUZXN0Q2FzZVN0ZXBDb25maWdbXSA9IFtdO1xuICAvKiogUHJlLWNvbXB1dGVkIGRpc3BsYXkgbGFiZWxzIGZyb20gaG9zdCAoc2FtZSBvcmRlciBhcyBzdGVwc1RvR3JvdXApLiBXaGVuIHByb3ZpZGVkLCB1c2VkIGluc3RlYWQgb2YgY29tcHV0aW5nIGZyb20gc3RlcC4gKi9cbiAgQElucHV0KCkgc3RlcExhYmVsczogc3RyaW5nW10gPSBbXTtcblxuICBAT3V0cHV0KCkgY3JlYXRlR3JvdXAgPSBuZXcgRXZlbnRFbWl0dGVyPENyZWF0ZVN0ZXBHcm91cEZvcm1EYXRhPigpO1xuICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGZvcm06IEZvcm1Hcm91cDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlcikge1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgZ3JvdXBOYW1lOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgxKV1dLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IHN0ZXBzQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwc1RvR3JvdXA/Lmxlbmd0aCA/PyAwO1xuICB9XG5cbiAgZ2V0IHN1YnRpdGxlVGV4dCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG4gPSB0aGlzLnN0ZXBzQ291bnQ7XG4gICAgcmV0dXJuIG4gPT09IDFcbiAgICAgID8gJ0dyb3VwIDEgc2VsZWN0ZWQgc3RlcCBpbnRvIGEgY29udGFpbmVyJ1xuICAgICAgOiBgR3JvdXAgJHtufSBzZWxlY3RlZCBzdGVwcyBpbnRvIGEgY29udGFpbmVyYDtcbiAgfVxuXG4gIC8qKiBEaXNwbGF5IGxhYmVsIGZvciBhIHN0ZXAgaW4gdGhlIFwiU3RlcHMgdG8gZ3JvdXBcIiBsaXN0IChzYW1lIGFzIG1haW4gc3RlcCBsaXN0IC0gdXNlIHN0ZXBMYWJlbHMgd2hlbiBwcm92aWRlZCkuICovXG4gIGdldFN0ZXBEaXNwbGF5TGFiZWwoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5zdGVwTGFiZWxzPy5sZW5ndGggPiBpbmRleCAmJiB0aGlzLnN0ZXBMYWJlbHNbaW5kZXhdICE9IG51bGwgJiYgdGhpcy5zdGVwTGFiZWxzW2luZGV4XSAhPT0gJycpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0ZXBMYWJlbHNbaW5kZXhdO1xuICAgIH1cbiAgICAvLyBQcmVmZXIgc3RlcC5hY3Rpb24gLSBpdCBtYXRjaGVzIHRoZSBmdWxsIGRpc3BsYXkgaW4gdGhlIHN0ZXAgbGlzdCAoZS5nLiBcIkVudGVyIEB8cGFzc3dvcmR8IGluIHRoZSBFbWFpbFwiKVxuICAgIGNvbnN0IHJhd0FjdGlvbiA9IHN0ZXAuYWN0aW9uICE9IG51bGwgJiYgU3RyaW5nKHN0ZXAuYWN0aW9uKS50cmltKCkgIT09ICcnID8gU3RyaW5nKHN0ZXAuYWN0aW9uKSA6ICcnO1xuICAgIGlmIChyYXdBY3Rpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmlwSHRtbChyYXdBY3Rpb24pO1xuICAgIH1cbiAgICBpZiAoaXNOb3JtYWxTdGVwQ29uZmlnKHN0ZXApKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXROb3JtYWxTdGVwTGFiZWwoc3RlcCk7XG4gICAgfVxuICAgIGlmICgnZ3JvdXBOYW1lJyBpbiBzdGVwICYmIHN0ZXAuZ3JvdXBOYW1lKSB7XG4gICAgICByZXR1cm4gc3RlcC5ncm91cE5hbWU7XG4gICAgfVxuICAgIGlmICgnY29uZGl0aW9uJyBpbiBzdGVwICYmIHN0ZXAuY29uZGl0aW9uKSB7XG4gICAgICByZXR1cm4gc3RlcC5jb25kaXRpb247XG4gICAgfVxuICAgIGlmICgnbG9vcFR5cGUnIGluIHN0ZXApIHtcbiAgICAgIGNvbnN0IGxvb3AgPSBzdGVwIGFzIHsgbG9vcFR5cGU6IHN0cmluZzsgdGVzdERhdGFQcm9maWxlPzogc3RyaW5nOyBjb25kaXRpb24/OiBzdHJpbmcgfTtcbiAgICAgIGlmIChsb29wLmxvb3BUeXBlID09PSAnZm9yJyAmJiBsb29wLnRlc3REYXRhUHJvZmlsZSkge1xuICAgICAgICByZXR1cm4gYEZvciBsb29wOiAke2xvb3AudGVzdERhdGFQcm9maWxlfWA7XG4gICAgICB9XG4gICAgICBpZiAobG9vcC5sb29wVHlwZSA9PT0gJ3doaWxlJyAmJiBsb29wLmNvbmRpdGlvbikge1xuICAgICAgICByZXR1cm4gYFdoaWxlOiAke2xvb3AuY29uZGl0aW9ufWA7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzdGVwLmRlc2NyaXB0aW9uKSB7XG4gICAgICByZXR1cm4gc3RlcC5kZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGBTdGVwICR7aW5kZXggKyAxfWA7XG4gIH1cblxuICAvKiogU3RyaXAgSFRNTCB0YWdzIGZvciBwbGFpbi10ZXh0IGRpc3BsYXkgKGFjdGlvbiBtYXkgY29udGFpbiBzcGFucyBmb3IgYmFkZ2VzKS4gKi9cbiAgcHJpdmF0ZSBzdHJpcEh0bWwoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3QgdG1wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICB0bXAuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgIHJldHVybiAodG1wLnRleHRDb250ZW50IHx8IHRtcC5pbm5lclRleHQgfHwgJycpLnRyaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIGh0bWwucmVwbGFjZSgvPFtePl0qPi9nLCAnJykucmVwbGFjZSgvJm5ic3A7L2csICcgJykudHJpbSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROb3JtYWxTdGVwTGFiZWwoc3RlcDogTm9ybWFsU3RlcENvbmZpZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFyYW1zID0gc3RlcC5wYXJhbWV0ZXJzID8/IFtdO1xuICAgIGNvbnN0IGdldFBhcmFtID0gKG5hbWU6IHN0cmluZykgPT5cbiAgICAgIHBhcmFtcy5maW5kKChwKSA9PiBwLm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgY29uc3QgdmFsID0gKHA6IHsgdmFsdWU/OiBzdHJpbmc7IGRpc3BsYXlWYWx1ZT86IHN0cmluZyB9IHwgdW5kZWZpbmVkKSA9PlxuICAgICAgcD8uZGlzcGxheVZhbHVlID8/IHA/LnZhbHVlID8/ICcnO1xuICAgIC8qKiBVc2UgcmF3IHZhbHVlIChzdHJpcCBzdXJyb3VuZGluZyBxdW90ZXMgZnJvbSBkaXNwbGF5VmFsdWUpIGZvciBidWlsZGluZyBmdWxsIHNlbnRlbmNlcyAqL1xuICAgIGNvbnN0IHJhd1ZhbCA9IChwOiB7IHZhbHVlPzogc3RyaW5nOyBkaXNwbGF5VmFsdWU/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgY29uc3QgdiA9IHA/LnZhbHVlID8/IHA/LmRpc3BsYXlWYWx1ZSA/PyAnJztcbiAgICAgIGNvbnN0IHMgPSBTdHJpbmcodik7XG4gICAgICByZXR1cm4gcy5yZXBsYWNlKC9eW1wiJ118W1wiJ10kL2csICcnKS50cmltKCkgfHwgcztcbiAgICB9O1xuXG4gICAgc3dpdGNoIChzdGVwLmV2ZW50VHlwZSBhcyBUZXN0Q2FzZUV2ZW50VHlwZSkge1xuICAgICAgY2FzZSAnbmF2aWdhdGUnOiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGdldFBhcmFtKCd1cmwnKSA/PyBwYXJhbXMuZmluZCgocCkgPT4gL3VybHxiYXNlVXJsL2kudGVzdChwLm5hbWUgfHwgJycpKTtcbiAgICAgICAgcmV0dXJuIHVybCA/IGBOYXZpZ2F0ZSB0byAke3Jhd1ZhbCh1cmwpfWAgOiAnTmF2aWdhdGUnO1xuICAgICAgfVxuICAgICAgY2FzZSAnZW50ZXInOiB7XG4gICAgICAgIGNvbnN0IHZhbHVlUGFyYW0gPSBnZXRQYXJhbSgndmFsdWUnKTtcbiAgICAgICAgY29uc3QgbGFiZWxQYXJhbSA9IGdldFBhcmFtKCdsYWJlbCcpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJhd1ZhbCh2YWx1ZVBhcmFtKTtcbiAgICAgICAgY29uc3QgbGFiZWwgPSByYXdWYWwobGFiZWxQYXJhbSk7XG4gICAgICAgIGlmICh2YWx1ZSAmJiBsYWJlbCkgcmV0dXJuIGBFbnRlciAke3ZhbHVlfSBpbiB0aGUgJHtsYWJlbH1gO1xuICAgICAgICBpZiAodmFsdWUpIHJldHVybiBgRW50ZXIgJHt2YWx1ZX1gO1xuICAgICAgICBpZiAobGFiZWwpIHJldHVybiBgRW50ZXIgaW4gdGhlICR7bGFiZWx9YDtcbiAgICAgICAgcmV0dXJuICdFbnRlcic7XG4gICAgICB9XG4gICAgICBjYXNlICdhaS1hZ2VudCc6IHtcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gZ2V0UGFyYW0oJ2luc3RydWN0aW9ucycpID8/IGdldFBhcmFtKCdkZXNjcmlwdGlvbicpO1xuICAgICAgICByZXR1cm4gdmFsKGluc3RydWN0aW9ucykgfHwgJ0FJIEFnZW50IHN0ZXAnO1xuICAgICAgfVxuICAgICAgY2FzZSAndHlwZSc6IHtcbiAgICAgICAgY29uc3QgdGV4dFBhcmFtID0gZ2V0UGFyYW0oJ3RleHQnKSA/PyBnZXRQYXJhbSgndmFsdWUnKTtcbiAgICAgICAgY29uc3QgZWxlbWVudFBhcmFtID0gZ2V0UGFyYW0oJ2VsZW1lbnQnKSA/PyBnZXRQYXJhbSgnbGFiZWwnKSA/PyBnZXRQYXJhbSgnc2VsZWN0b3InKTtcbiAgICAgICAgY29uc3QgdGV4dCA9IHJhd1ZhbCh0ZXh0UGFyYW0pO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gcmF3VmFsKGVsZW1lbnRQYXJhbSk7XG4gICAgICAgIGlmICh0ZXh0ICYmIGVsZW1lbnQpIHJldHVybiBgRW50ZXIgJHt0ZXh0fSBpbiB0aGUgJHtlbGVtZW50fWA7XG4gICAgICAgIGlmICh0ZXh0KSByZXR1cm4gYEVudGVyICR7dGV4dH1gO1xuICAgICAgICByZXR1cm4gJ1R5cGUnO1xuICAgICAgfVxuICAgICAgY2FzZSAnY2xpY2snOiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0UGFyYW0oJ2VsZW1lbnQnKSA/PyBnZXRQYXJhbSgnc2VsZWN0b3InKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yID8gYENsaWNrIG9uICR7cmF3VmFsKHNlbGVjdG9yKX1gIDogJ0NsaWNrJztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2RvdWJsZUNsaWNrJzoge1xuICAgICAgICBjb25zdCBzZWxlY3RvciA9IGdldFBhcmFtKCdlbGVtZW50JykgPz8gZ2V0UGFyYW0oJ3NlbGVjdG9yJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RvciA/IGBEb3VibGUgY2xpY2sgb24gJHtyYXdWYWwoc2VsZWN0b3IpfWAgOiAnRG91YmxlIGNsaWNrJztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3ByZXNzRW50ZXInOiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBnZXRQYXJhbSgnZWxlbWVudCcpO1xuICAgICAgICByZXR1cm4gZWxlbWVudCA/IGBQcmVzcyBFbnRlciBvbiAke3Jhd1ZhbChlbGVtZW50KX1gIDogJ1ByZXNzIEVudGVyJztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3ZlcmlmeSc6XG4gICAgICAgIHJldHVybiB2YWwoZ2V0UGFyYW0oJ2Rlc2NyaXB0aW9uJykpIHx8ICdWZXJpZnknO1xuICAgICAgY2FzZSAnY3VzdG9tJzoge1xuICAgICAgICBjb25zdCBkZXNjID0gZ2V0UGFyYW0oJ2Rlc2NyaXB0aW9uJykgPz8gZ2V0UGFyYW0oJ2FjdGlvbicpO1xuICAgICAgICByZXR1cm4gdmFsKGRlc2MpIHx8ICdDdXN0b20gc3RlcCc7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdmFsKGdldFBhcmFtKCdkZXNjcmlwdGlvbicpKSB8fCB2YWwocGFyYW1zWzBdKSB8fCAnU3RlcCc7XG4gICAgfVxuICB9XG5cbiAgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWxsZWQuZW1pdCgpO1xuICB9XG5cbiAgb25DcmVhdGVHcm91cChpc1JlcGxhY2UgPSBmYWxzZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCB8fCB0aGlzLnN0ZXBzQ291bnQgPT09IDApIHtcbiAgICAgIHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGdyb3VwTmFtZSA9ICh0aGlzLmZvcm0uZ2V0KCdncm91cE5hbWUnKT8udmFsdWUgPz8gJycpLnRyaW0oKTtcbiAgICBpZiAoIWdyb3VwTmFtZSkge1xuICAgICAgdGhpcy5mb3JtLmdldCgnZ3JvdXBOYW1lJyk/LnNldEVycm9ycyh7IHJlcXVpcmVkOiB0cnVlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNyZWF0ZUdyb3VwLmVtaXQoeyBncm91cE5hbWUsIGlzUmVwbGFjZSB9KTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImNxYS1iZy13aGl0ZSBjcWEtcm91bmRlZC1bMTJweF0gY3FhLXNoYWRvdy1sZyBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bI0U1RTdFQl0gY3FhLXctZnVsbCBjcWEtbWF4LXctWzUwMHB4XSBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC00IGNxYS1wLTYgY3FhLWJveC1ib3JkZXIgY3FhLW1pbi1oLTBcIj5cbiAgPCEtLSBIZWFkZXI6IHRpdGxlICsgY2xvc2UgKFgpIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLXN0YXJ0IGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWdhcC0yXCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEgY3FhLW1pbi13LTBcIj5cbiAgICAgIDxoMiBjbGFzcz1cImNxYS10ZXh0LVsxNnB4XSBjcWEtbGVhZGluZy1bMjRweF0gY3FhLWZvbnQtYm9sZCBjcWEtdGV4dC1bIzExMTgyN10gY3FhLW0tMFwiPlxuICAgICAgICBDcmVhdGUgc3RlcCBncm91cFxuICAgICAgPC9oMj5cbiAgICAgIDxwIGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS1sZWFkaW5nLVsyMHB4XSBjcWEtdGV4dC1bIzY0NzQ4Ql0gY3FhLW0tMFwiPlxuICAgICAgICB7eyBzdWJ0aXRsZVRleHQgfX1cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJvbkNhbmNlbCgpXCJcbiAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLW1pbi1oLTcgY3FhLW1pbi13LTcgY3FhLXJvdW5kZWQgY3FhLXRleHQtWyM2QjcyODBdIGhvdmVyOmNxYS1iZy1bI0YzRjRGNl0gY3FhLXAtMCBjcWEtZmxleC1zaHJpbmstMFwiXG4gICAgICB0aXRsZT1cIkNsb3NlXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJDbG9zZVwiPlxuICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgIDxwYXRoIGQ9XCJNMTggNkw2IDE4TTYgNmwxMiAxMlwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBHcm91cCBuYW1lICogLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xLjVcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddXCI+XG4gICAgICBHcm91cCBuYW1lIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtcmVkLTUwMFwiPio8L3NwYW4+XG4gICAgPC9sYWJlbD5cbiAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuLCBBdXRoZW50aWNhdGlvbiBmbG93XCJcbiAgICAgIFt2YWx1ZV09XCJmb3JtLmdldCgnZ3JvdXBOYW1lJyk/LnZhbHVlXCJcbiAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICBzaXplPVwibWRcIlxuICAgICAgKHZhbHVlQ2hhbmdlKT1cImZvcm0uZ2V0KCdncm91cE5hbWUnKT8uc2V0VmFsdWUoJGV2ZW50KTsgZm9ybS5nZXQoJ2dyb3VwTmFtZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcIj5cbiAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgPHAgKm5nSWY9XCJmb3JtLmdldCgnZ3JvdXBOYW1lJyk/LmludmFsaWQgJiYgZm9ybS5nZXQoJ2dyb3VwTmFtZScpPy50b3VjaGVkXCIgY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1yZWQtNTAwIGNxYS1tLTBcIj5cbiAgICAgIEdyb3VwIG5hbWUgaXMgcmVxdWlyZWQuXG4gICAgPC9wPlxuICA8L2Rpdj5cblxuICA8IS0tIFN0ZXBzIHRvIGdyb3VwIChOKSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctWzEwMCVdIGNxYS10cmFja2luZy1ub3JtYWwgY3FhLXRleHQtWyMwQTBBMEFdIGNxYS1hbGlnbi1taWRkbGVcIj5cbiAgICAgIFN0ZXBzIHRvIGdyb3VwICh7eyBzdGVwc0NvdW50IH19KVxuICAgIDwvbGFiZWw+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1zY3JvbGxiYXItaGlkZSBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yIGNxYS1tYXgtaC1bMjAwcHhdIGNxYS1vdmVyZmxvdy15LWF1dG8gY3FhLXJvdW5kZWQtWzhweF0gY3FhLXAtWzZweF0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItW3JnYmEoMCwwLDAsMC4xKV1cIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IHN0ZXAgb2Ygc3RlcHNUb0dyb3VwOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtcm91bmRlZC1bNHB4XSBjcWEtcHktWzRweF0gY3FhLXB4LVs4cHhdIGNxYS1iZy1bcmdiYSgyMTYsMjE3LDI1MiwwLjMpXVwiPlxuICAgICAgICA8IS0tIE51bWJlcmVkIGJhZGdlIC0tPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXctNyBjcWEtaC03IGNxYS1yb3VuZGVkLWZ1bGwgY3FhLWJnLVsjM0Y0M0VFXSBjcWEtdGV4dC13aGl0ZSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtZmxleC1zaHJpbmstMFwiPlxuICAgICAgICAgIHt7IGkgKyAxIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJnZXRTdGVwRGlzcGxheUxhYmVsKHN0ZXAsIGkpXCIgY2xhc3M9XCJjcWEtYWN0aW9uLWZvcm1hdCBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtdHJhY2tpbmctWzBweF0gY3FhLXRleHQtWyMwQjBCMENdIGNxYS1mbGV4LTEgY3FhLW1pbi13LTAgY3FhLXRydW5jYXRlXCI+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEFjdGlvbnM6IENhbmNlbCB8IENyZWF0ZSBncm91cCB8IENyZWF0ZSBhbmQgcmVwbGFjZSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1zdHJldGNoIGNxYS13LWZ1bGwgY3FhLWdhcC0zXCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLW1pbi13LTBcIj5cbiAgICAgIDxjcWEtYnV0dG9uXG4gICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXG4gICAgICAgIGJ0blNpemU9XCJsZ1wiXG4gICAgICAgIHRleHQ9XCJDYW5jZWxcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS10ZXh0LVsxNHB4XSBjcWEtcHktWzlweF0gY3FhLWJvcmRlci1bIzQxNDE0Nl0nXCJcbiAgICAgICAgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiPlxuICAgICAgPC9jcWEtYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1taW4tdy0wXCI+XG4gICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICB2YXJpYW50PVwiZmlsbGVkXCJcbiAgICAgICAgYnRuU2l6ZT1cImxnXCJcbiAgICAgICAgdGV4dD1cIkNyZWF0ZVwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIFtjdXN0b21DbGFzc109XCInY3FhLXRleHQtWzE0cHhdIGNxYS1weS1bOXB4XSBjcWEtYm9yZGVyLVsjM0Y0M0VFXSBjcWEtYmctWyMzRjQzRUVdJ1wiXG4gICAgICAgIChjbGlja2VkKT1cIm9uQ3JlYXRlR3JvdXAoZmFsc2UpXCI+XG4gICAgICA8L2NxYS1idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLW1pbi13LTBcIj5cbiAgICAgIDxjcWEtYnV0dG9uXG4gICAgICAgIHZhcmlhbnQ9XCJmaWxsZWRcIlxuICAgICAgICBidG5TaXplPVwibGdcIlxuICAgICAgICB0ZXh0PVwiQ3JlYXRlIGFuZCByZXBsYWNlXCJcbiAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtdGV4dC1bMTRweF0gY3FhLXB5LVs5cHhdIGNxYS1ib3JkZXItWyMzRjQzRUVdIGNxYS1iZy1bIzNGNDNFRV0nXCJcbiAgICAgICAgKGNsaWNrZWQpPVwib25DcmVhdGVHcm91cCh0cnVlKVwiPlxuICAgICAgPC9jcWEtYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXN0ZXAtZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy9jcmVhdGUtc3RlcC1ncm91cC9jcmVhdGUtc3RlcC1ncm91cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL2NyZWF0ZS1zdGVwLWdyb3VwL2NyZWF0ZS1zdGVwLWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkUsT0FBTyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBSUwsa0JBQWtCLEdBQ25CLE1BQU0sMEJBQTBCLENBQUM7Ozs7OztBQVFsQzs7Ozs7R0FLRztBQU1ILE1BQU0sT0FBTyx3QkFBd0I7SUFVbkMsWUFBNkIsRUFBZTtRQUFmLE9BQUUsR0FBRixFQUFFLENBQWE7UUFUbkMsaUJBQVksR0FBeUIsRUFBRSxDQUFDO1FBQ2pELDhIQUE4SDtRQUNySCxlQUFVLEdBQWEsRUFBRSxDQUFDO1FBRXpCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQTJCLENBQUM7UUFDMUQsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFLN0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUN4QixTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoRSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxF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QztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxhQUFhLENBQUMsU0FBUyxHQUFHLEtBQUs7UUFDN0IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLENBQUMsRUFBRTtZQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDN0IsT0FBTztTQUNSO1FBQ0QsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkUsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzFELE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQzs7cUhBdEpVLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLDJPQzFCckMsb21JQXlGQTsyRkQvRGEsd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNFLHVCQUF1QixRQUUzQixFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7a0dBR3JCLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIFRlc3RDYXNlU3RlcENvbmZpZyxcbiAgTm9ybWFsU3RlcENvbmZpZyxcbiAgVGVzdENhc2VFdmVudFR5cGUsXG4gIGlzTm9ybWFsU3RlcENvbmZpZyxcbn0gZnJvbSAnLi4vdGVzdC1jYXNlLXN0ZXAubW9kZWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVTdGVwR3JvdXBGb3JtRGF0YSB7XG4gIGdyb3VwTmFtZTogc3RyaW5nO1xuICAvKiogV2hlbiB0cnVlLCByZXBsYWNlIHNlbGVjdGVkIHN0ZXBzIHdpdGggdGhlIG5ldyBncm91cCAoc2FtZSBhcyBjYXNlcyBzY3JlZW4gQ3JlYXRlIGFuZCByZXBsYWNlKS4gKi9cbiAgaXNSZXBsYWNlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgU3RlcCBHcm91cCBwYW5lbC9tb2RhbCBmb3IgVGVzdCBDYXNlIERldGFpbHMuXG4gKiBGb2xsb3dzIHRoZSBzYW1lIHN0cnVjdHVyZSBhbmQgdmFsaWRhdGlvbiBwYXR0ZXJuIGFzIFRlc3QgRGF0YSBNb2RhbCBhbmQgTG9vcCBTdGVwLlxuICogRGlzcGxheXMgc2VsZWN0ZWQgc3RlcHMgYW5kIGFsbG93cyBuYW1pbmcgdGhlIG5ldyBncm91cDsgZW1pdHMgY3JlYXRlR3JvdXAgd2l0aCBncm91cCBuYW1lXG4gKiBzbyB0aGUgaG9zdCBjYW4gY3JlYXRlIHRoZSBzdGVwIGdyb3VwIGFuZCByZXBsYWNlIHNlbGVjdGVkIHN0ZXBzIHdpdGggaXQuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1jcmVhdGUtc3RlcC1ncm91cCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUtc3RlcC1ncm91cC5jb21wb25lbnQuaHRtbCcsXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfSxcbn0pXG5leHBvcnQgY2xhc3MgQ3JlYXRlU3RlcEdyb3VwQ29tcG9uZW50IHtcbiAgQElucHV0KCkgc3RlcHNUb0dyb3VwOiBUZXN0Q2FzZVN0ZXBDb25maWdbXSA9IFtdO1xuICAvKiogUHJlLWNvbXB1dGVkIGRpc3BsYXkgbGFiZWxzIGZyb20gaG9zdCAoc2FtZSBvcmRlciBhcyBzdGVwc1RvR3JvdXApLiBXaGVuIHByb3ZpZGVkLCB1c2VkIGluc3RlYWQgb2YgY29tcHV0aW5nIGZyb20gc3RlcC4gKi9cbiAgQElucHV0KCkgc3RlcExhYmVsczogc3RyaW5nW10gPSBbXTtcblxuICBAT3V0cHV0KCkgY3JlYXRlR3JvdXAgPSBuZXcgRXZlbnRFbWl0dGVyPENyZWF0ZVN0ZXBHcm91cEZvcm1EYXRhPigpO1xuICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGZvcm06IEZvcm1Hcm91cDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlcikge1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgZ3JvdXBOYW1lOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgxKV1dLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IHN0ZXBzQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwc1RvR3JvdXA/Lmxlbmd0aCA/PyAwO1xuICB9XG5cbiAgZ2V0IHN1YnRpdGxlVGV4dCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IG4gPSB0aGlzLnN0ZXBzQ291bnQ7XG4gICAgcmV0dXJuIG4gPT09IDFcbiAgICAgID8gJ0dyb3VwIDEgc2VsZWN0ZWQgc3RlcCBpbnRvIGEgY29udGFpbmVyJ1xuICAgICAgOiBgR3JvdXAgJHtufSBzZWxlY3RlZCBzdGVwcyBpbnRvIGEgY29udGFpbmVyYDtcbiAgfVxuXG4gIC8qKiBEaXNwbGF5IGxhYmVsIGZvciBhIHN0ZXAgaW4gdGhlIFwiU3RlcHMgdG8gZ3JvdXBcIiBsaXN0IChzYW1lIGFzIG1haW4gc3RlcCBsaXN0IC0gdXNlIHN0ZXBMYWJlbHMgd2hlbiBwcm92aWRlZCkuICovXG4gIGdldFN0ZXBEaXNwbGF5TGFiZWwoc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5zdGVwTGFiZWxzPy5sZW5ndGggPiBpbmRleCAmJiB0aGlzLnN0ZXBMYWJlbHNbaW5kZXhdICE9IG51bGwgJiYgdGhpcy5zdGVwTGFiZWxzW2luZGV4XSAhPT0gJycpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0ZXBMYWJlbHNbaW5kZXhdO1xuICAgIH1cbiAgICAvLyBQcmVmZXIgc3RlcC5hY3Rpb24gLSBpdCBtYXRjaGVzIHRoZSBmdWxsIGRpc3BsYXkgaW4gdGhlIHN0ZXAgbGlzdCAoZS5nLiBcIkVudGVyIEB8cGFzc3dvcmR8IGluIHRoZSBFbWFpbFwiKVxuICAgIGNvbnN0IHJhd0FjdGlvbiA9IHN0ZXAuYWN0aW9uICE9IG51bGwgJiYgU3RyaW5nKHN0ZXAuYWN0aW9uKS50cmltKCkgIT09ICcnID8gU3RyaW5nKHN0ZXAuYWN0aW9uKSA6ICcnO1xuICAgIGlmIChyYXdBY3Rpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmlwSHRtbChyYXdBY3Rpb24pO1xuICAgIH1cbiAgICBpZiAoaXNOb3JtYWxTdGVwQ29uZmlnKHN0ZXApKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXROb3JtYWxTdGVwTGFiZWwoc3RlcCk7XG4gICAgfVxuICAgIGlmICgnZ3JvdXBOYW1lJyBpbiBzdGVwICYmIHN0ZXAuZ3JvdXBOYW1lKSB7XG4gICAgICByZXR1cm4gc3RlcC5ncm91cE5hbWU7XG4gICAgfVxuICAgIGlmICgnY29uZGl0aW9uJyBpbiBzdGVwICYmIHN0ZXAuY29uZGl0aW9uKSB7XG4gICAgICByZXR1cm4gc3RlcC5jb25kaXRpb247XG4gICAgfVxuICAgIGlmICgnbG9vcFR5cGUnIGluIHN0ZXApIHtcbiAgICAgIGNvbnN0IGxvb3AgPSBzdGVwIGFzIHsgbG9vcFR5cGU6IHN0cmluZzsgdGVzdERhdGFQcm9maWxlPzogc3RyaW5nOyBjb25kaXRpb24/OiBzdHJpbmcgfTtcbiAgICAgIGlmIChsb29wLmxvb3BUeXBlID09PSAnZm9yJyAmJiBsb29wLnRlc3REYXRhUHJvZmlsZSkge1xuICAgICAgICByZXR1cm4gYEZvciBsb29wOiAke2xvb3AudGVzdERhdGFQcm9maWxlfWA7XG4gICAgICB9XG4gICAgICBpZiAobG9vcC5sb29wVHlwZSA9PT0gJ3doaWxlJyAmJiBsb29wLmNvbmRpdGlvbikge1xuICAgICAgICByZXR1cm4gYFdoaWxlOiAke2xvb3AuY29uZGl0aW9ufWA7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzdGVwLmRlc2NyaXB0aW9uKSB7XG4gICAgICByZXR1cm4gc3RlcC5kZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGBTdGVwICR7aW5kZXggKyAxfWA7XG4gIH1cblxuICAvKiogU3RyaXAgSFRNTCB0YWdzIGZvciBwbGFpbi10ZXh0IGRpc3BsYXkgKGFjdGlvbiBtYXkgY29udGFpbiBzcGFucyBmb3IgYmFkZ2VzKS4gKi9cbiAgcHJpdmF0ZSBzdHJpcEh0bWwoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3QgdG1wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICB0bXAuaW5uZXJIVE1MID0gaHRtbDtcbiAgICAgIHJldHVybiAodG1wLnRleHRDb250ZW50IHx8IHRtcC5pbm5lclRleHQgfHwgJycpLnRyaW0oKTtcbiAgICB9XG4gICAgcmV0dXJuIGh0bWwucmVwbGFjZSgvPFtePl0qPi9nLCAnJykucmVwbGFjZSgvJm5ic3A7L2csICcgJykudHJpbSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXROb3JtYWxTdGVwTGFiZWwoc3RlcDogTm9ybWFsU3RlcENvbmZpZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFyYW1zID0gc3RlcC5wYXJhbWV0ZXJzID8/IFtdO1xuICAgIGNvbnN0IGdldFBhcmFtID0gKG5hbWU6IHN0cmluZykgPT5cbiAgICAgIHBhcmFtcy5maW5kKChwKSA9PiBwLm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgY29uc3QgdmFsID0gKHA6IHsgdmFsdWU/OiBzdHJpbmc7IGRpc3BsYXlWYWx1ZT86IHN0cmluZyB9IHwgdW5kZWZpbmVkKSA9PlxuICAgICAgcD8uZGlzcGxheVZhbHVlID8/IHA/LnZhbHVlID8/ICcnO1xuICAgIC8qKiBVc2UgcmF3IHZhbHVlIChzdHJpcCBzdXJyb3VuZGluZyBxdW90ZXMgZnJvbSBkaXNwbGF5VmFsdWUpIGZvciBidWlsZGluZyBmdWxsIHNlbnRlbmNlcyAqL1xuICAgIGNvbnN0IHJhd1ZhbCA9IChwOiB7IHZhbHVlPzogc3RyaW5nOyBkaXNwbGF5VmFsdWU/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgY29uc3QgdiA9IHA/LnZhbHVlID8/IHA/LmRpc3BsYXlWYWx1ZSA/PyAnJztcbiAgICAgIGNvbnN0IHMgPSBTdHJpbmcodik7XG4gICAgICByZXR1cm4gcy5yZXBsYWNlKC9eW1wiJ118W1wiJ10kL2csICcnKS50cmltKCkgfHwgcztcbiAgICB9O1xuXG4gICAgc3dpdGNoIChzdGVwLmV2ZW50VHlwZSBhcyBUZXN0Q2FzZUV2ZW50VHlwZSkge1xuICAgICAgY2FzZSAnbmF2aWdhdGUnOiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGdldFBhcmFtKCd1cmwnKSA/PyBwYXJhbXMuZmluZCgocCkgPT4gL3VybHxiYXNlVXJsL2kudGVzdChwLm5hbWUgfHwgJycpKTtcbiAgICAgICAgcmV0dXJuIHVybCA/IGBOYXZpZ2F0ZSB0byAke3Jhd1ZhbCh1cmwpfWAgOiAnTmF2aWdhdGUnO1xuICAgICAgfVxuICAgICAgY2FzZSAnZW50ZXInOiB7XG4gICAgICAgIGNvbnN0IHZhbHVlUGFyYW0gPSBnZXRQYXJhbSgndmFsdWUnKTtcbiAgICAgICAgY29uc3QgbGFiZWxQYXJhbSA9IGdldFBhcmFtKCdsYWJlbCcpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJhd1ZhbCh2YWx1ZVBhcmFtKTtcbiAgICAgICAgY29uc3QgbGFiZWwgPSByYXdWYWwobGFiZWxQYXJhbSk7XG4gICAgICAgIGlmICh2YWx1ZSAmJiBsYWJlbCkgcmV0dXJuIGBFbnRlciAke3ZhbHVlfSBpbiB0aGUgJHtsYWJlbH1gO1xuICAgICAgICBpZiAodmFsdWUpIHJldHVybiBgRW50ZXIgJHt2YWx1ZX1gO1xuICAgICAgICBpZiAobGFiZWwpIHJldHVybiBgRW50ZXIgaW4gdGhlICR7bGFiZWx9YDtcbiAgICAgICAgcmV0dXJuICdFbnRlcic7XG4gICAgICB9XG4gICAgICBjYXNlICdhaS1hZ2VudCc6IHtcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zID0gZ2V0UGFyYW0oJ2luc3RydWN0aW9ucycpID8/IGdldFBhcmFtKCdkZXNjcmlwdGlvbicpO1xuICAgICAgICByZXR1cm4gdmFsKGluc3RydWN0aW9ucykgfHwgJ0FJIEFnZW50IHN0ZXAnO1xuICAgICAgfVxuICAgICAgY2FzZSAndHlwZSc6IHtcbiAgICAgICAgY29uc3QgdGV4dFBhcmFtID0gZ2V0UGFyYW0oJ3RleHQnKSA/PyBnZXRQYXJhbSgndmFsdWUnKTtcbiAgICAgICAgY29uc3QgZWxlbWVudFBhcmFtID0gZ2V0UGFyYW0oJ2VsZW1lbnQnKSA/PyBnZXRQYXJhbSgnbGFiZWwnKSA/PyBnZXRQYXJhbSgnc2VsZWN0b3InKTtcbiAgICAgICAgY29uc3QgdGV4dCA9IHJhd1ZhbCh0ZXh0UGFyYW0pO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gcmF3VmFsKGVsZW1lbnRQYXJhbSk7XG4gICAgICAgIGlmICh0ZXh0ICYmIGVsZW1lbnQpIHJldHVybiBgRW50ZXIgJHt0ZXh0fSBpbiB0aGUgJHtlbGVtZW50fWA7XG4gICAgICAgIGlmICh0ZXh0KSByZXR1cm4gYEVudGVyICR7dGV4dH1gO1xuICAgICAgICByZXR1cm4gJ1R5cGUnO1xuICAgICAgfVxuICAgICAgY2FzZSAnY2xpY2snOiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0UGFyYW0oJ2VsZW1lbnQnKSA/PyBnZXRQYXJhbSgnc2VsZWN0b3InKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdG9yID8gYENsaWNrIG9uICR7cmF3VmFsKHNlbGVjdG9yKX1gIDogJ0NsaWNrJztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2RvdWJsZUNsaWNrJzoge1xuICAgICAgICBjb25zdCBzZWxlY3RvciA9IGdldFBhcmFtKCdlbGVtZW50JykgPz8gZ2V0UGFyYW0oJ3NlbGVjdG9yJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RvciA/IGBEb3VibGUgY2xpY2sgb24gJHtyYXdWYWwoc2VsZWN0b3IpfWAgOiAnRG91YmxlIGNsaWNrJztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3ByZXNzRW50ZXInOiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBnZXRQYXJhbSgnZWxlbWVudCcpO1xuICAgICAgICByZXR1cm4gZWxlbWVudCA/IGBQcmVzcyBFbnRlciBvbiAke3Jhd1ZhbChlbGVtZW50KX1gIDogJ1ByZXNzIEVudGVyJztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3ZlcmlmeSc6XG4gICAgICAgIHJldHVybiB2YWwoZ2V0UGFyYW0oJ2Rlc2NyaXB0aW9uJykpIHx8ICdWZXJpZnknO1xuICAgICAgY2FzZSAnY3VzdG9tJzoge1xuICAgICAgICBjb25zdCBkZXNjID0gZ2V0UGFyYW0oJ2Rlc2NyaXB0aW9uJykgPz8gZ2V0UGFyYW0oJ2FjdGlvbicpO1xuICAgICAgICByZXR1cm4gdmFsKGRlc2MpIHx8ICdDdXN0b20gc3RlcCc7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdmFsKGdldFBhcmFtKCdkZXNjcmlwdGlvbicpKSB8fCB2YWwocGFyYW1zWzBdKSB8fCAnU3RlcCc7XG4gICAgfVxuICB9XG5cbiAgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWxsZWQuZW1pdCgpO1xuICB9XG5cbiAgb25DcmVhdGVHcm91cChpc1JlcGxhY2UgPSBmYWxzZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCB8fCB0aGlzLnN0ZXBzQ291bnQgPT09IDApIHtcbiAgICAgIHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGdyb3VwTmFtZSA9ICh0aGlzLmZvcm0uZ2V0KCdncm91cE5hbWUnKT8udmFsdWUgPz8gJycpLnRyaW0oKTtcbiAgICBpZiAoIWdyb3VwTmFtZSkge1xuICAgICAgdGhpcy5mb3JtLmdldCgnZ3JvdXBOYW1lJyk/LnNldEVycm9ycyh7IHJlcXVpcmVkOiB0cnVlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNyZWF0ZUdyb3VwLmVtaXQoeyBncm91cE5hbWUsIGlzUmVwbGFjZSB9KTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImNxYS1iZy13aGl0ZSBjcWEtcm91bmRlZC1bMTJweF0gY3FhLXNoYWRvdy1sZyBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bI0U1RTdFQl0gY3FhLXctZnVsbCBjcWEtbWF4LXctWzUwMHB4XSBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC00IGNxYS1wLTYgY3FhLWJveC1ib3JkZXIgY3FhLW1pbi1oLTBcIj5cbiAgPCEtLSBIZWFkZXI6IHRpdGxlICsgY2xvc2UgKFgpIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLXN0YXJ0IGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWdhcC0yXCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEgY3FhLW1pbi13LTBcIj5cbiAgICAgIDxoMiBjbGFzcz1cImNxYS10ZXh0LVsxNnB4XSBjcWEtbGVhZGluZy1bMjRweF0gY3FhLWZvbnQtYm9sZCBjcWEtdGV4dC1bIzExMTgyN10gY3FhLW0tMFwiPlxuICAgICAgICBDcmVhdGUgc3RlcCBncm91cFxuICAgICAgPC9oMj5cbiAgICAgIDxwIGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS1sZWFkaW5nLVsyMHB4XSBjcWEtdGV4dC1bIzY0NzQ4Ql0gY3FhLW0tMFwiPlxuICAgICAgICB7eyBzdWJ0aXRsZVRleHQgfX1cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJvbkNhbmNlbCgpXCJcbiAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLW1pbi1oLTcgY3FhLW1pbi13LTcgY3FhLXJvdW5kZWQgY3FhLXRleHQtWyM2QjcyODBdIGhvdmVyOmNxYS1iZy1bI0YzRjRGNl0gY3FhLXAtMCBjcWEtZmxleC1zaHJpbmstMFwiXG4gICAgICB0aXRsZT1cIkNsb3NlXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJDbG9zZVwiPlxuICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgIDxwYXRoIGQ9XCJNMTggNkw2IDE4TTYgNmwxMiAxMlwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBHcm91cCBuYW1lICogLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xLjVcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxNjE2MTddXCI+XG4gICAgICBHcm91cCBuYW1lIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtcmVkLTUwMFwiPio8L3NwYW4+XG4gICAgPC9sYWJlbD5cbiAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgcGxhY2Vob2xkZXI9XCJlLmcuLCBBdXRoZW50aWNhdGlvbiBmbG93XCJcbiAgICAgIFt2YWx1ZV09XCJmb3JtLmdldCgnZ3JvdXBOYW1lJyk/LnZhbHVlXCJcbiAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICBzaXplPVwibWRcIlxuICAgICAgKHZhbHVlQ2hhbmdlKT1cImZvcm0uZ2V0KCdncm91cE5hbWUnKT8uc2V0VmFsdWUoJGV2ZW50KTsgZm9ybS5nZXQoJ2dyb3VwTmFtZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcIj5cbiAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgPHAgKm5nSWY9XCJmb3JtLmdldCgnZ3JvdXBOYW1lJyk/LmludmFsaWQgJiYgZm9ybS5nZXQoJ2dyb3VwTmFtZScpPy50b3VjaGVkXCIgY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1yZWQtNTAwIGNxYS1tLTBcIj5cbiAgICAgIEdyb3VwIG5hbWUgaXMgcmVxdWlyZWQuXG4gICAgPC9wPlxuICA8L2Rpdj5cblxuICA8IS0tIFN0ZXBzIHRvIGdyb3VwIChOKSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bMTJweF0gY3FhLWxlYWRpbmctWzEwMCVdIGNxYS10cmFja2luZy1ub3JtYWwgY3FhLXRleHQtWyMwQTBBMEFdIGNxYS1hbGlnbi1taWRkbGVcIj5cbiAgICAgIFN0ZXBzIHRvIGdyb3VwICh7eyBzdGVwc0NvdW50IH19KVxuICAgIDwvbGFiZWw+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1zY3JvbGxiYXItaGlkZSBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yIGNxYS1tYXgtaC1bMjAwcHhdIGNxYS1vdmVyZmxvdy15LWF1dG8gY3FhLXJvdW5kZWQtWzhweF0gY3FhLXAtWzZweF0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItW3JnYmEoMCwwLDAsMC4xKV1cIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IHN0ZXAgb2Ygc3RlcHNUb0dyb3VwOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtcm91bmRlZC1bNHB4XSBjcWEtcHktWzRweF0gY3FhLXB4LVs4cHhdIGNxYS1iZy1bcmdiYSgyMTYsMjE3LDI1MiwwLjMpXVwiPlxuICAgICAgICA8IS0tIE51bWJlcmVkIGJhZGdlIC0tPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXctNyBjcWEtaC03IGNxYS1yb3VuZGVkLWZ1bGwgY3FhLWJnLVsjM0Y0M0VFXSBjcWEtdGV4dC13aGl0ZSBjcWEtdGV4dC1bMTBweF0gY3FhLWxlYWRpbmctWzE1cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtZmxleC1zaHJpbmstMFwiPlxuICAgICAgICAgIHt7IGkgKyAxIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJnZXRTdGVwRGlzcGxheUxhYmVsKHN0ZXAsIGkpXCIgY2xhc3M9XCJjcWEtYWN0aW9uLWZvcm1hdCBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWzEwcHhdIGNxYS1sZWFkaW5nLVsxNXB4XSBjcWEtdHJhY2tpbmctWzBweF0gY3FhLXRleHQtWyMwQjBCMENdIGNxYS1mbGV4LTEgY3FhLW1pbi13LTAgY3FhLXRydW5jYXRlXCI+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEFjdGlvbnM6IENhbmNlbCB8IENyZWF0ZSBncm91cCB8IENyZWF0ZSBhbmQgcmVwbGFjZSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLXctZnVsbCBjcWEtZ2FwLTNcIj5cbiAgICA8Y3FhLWJ1dHRvblxuICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgIGJ0blNpemU9XCJsZ1wiXG4gICAgICB0ZXh0PVwiQ2FuY2VsXCJcbiAgICAgIFtjdXN0b21DbGFzc109XCInY3FhLXRleHQtWzE0cHhdIGNxYS1weS1bOXB4XSBjcWEtYm9yZGVyLVsjNDE0MTQ2XSBjcWEtd2hpdGVzcGFjZS1ub3dyYXAnXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ2FuY2VsKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gICAgPGNxYS1idXR0b25cbiAgICAgIHZhcmlhbnQ9XCJmaWxsZWRcIlxuICAgICAgYnRuU2l6ZT1cImxnXCJcbiAgICAgIHRleHQ9XCJDcmVhdGVcIlxuICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtdGV4dC1bMTRweF0gY3FhLXB5LVs5cHhdIGNxYS1ib3JkZXItWyMzRjQzRUVdIGNxYS1iZy1bIzNGNDNFRV0gY3FhLXdoaXRlc3BhY2Utbm93cmFwJ1wiXG4gICAgICAoY2xpY2tlZCk9XCJvbkNyZWF0ZUdyb3VwKGZhbHNlKVwiPlxuICAgIDwvY3FhLWJ1dHRvbj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtbWluLXctMFwiPlxuICAgICAgPGNxYS1idXR0b25cbiAgICAgICAgdmFyaWFudD1cImZpbGxlZFwiXG4gICAgICAgIGJ0blNpemU9XCJsZ1wiXG4gICAgICAgIHRleHQ9XCJDcmVhdGUgYW5kIHJlcGxhY2VcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICBbY3VzdG9tQ2xhc3NdPVwiJ2NxYS10ZXh0LVsxNHB4XSBjcWEtcHktWzlweF0gY3FhLWJvcmRlci1bIzNGNDNFRV0gY3FhLWJnLVsjM0Y0M0VFXSBjcWEtd2hpdGVzcGFjZS1ub3dyYXAnXCJcbiAgICAgICAgKGNsaWNrZWQpPVwib25DcmVhdGVHcm91cCh0cnVlKVwiPlxuICAgICAgPC9jcWEtYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|