ctt-puro 0.71.3 → 0.71.4
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/esm2022/lib/components/puro-contact-form/puro-contact-form.component.mjs +48 -5
- package/esm2022/lib/components/puro-top-slider/puro-top-slider.component.mjs +9 -3
- package/esm2022/lib/components/puro-top-slider/puro-top-slider.interface.mjs +1 -1
- package/esm2022/lib/interfaces/puro-tags.interface.mjs +1 -1
- package/esm2022/lib/interfaces/puro-texts-colors.interface.mjs +1 -1
- package/esm2022/lib/services/mapper/mapper.service.mjs +22 -9
- package/fesm2022/ctt-puro.mjs +75 -14
- package/fesm2022/ctt-puro.mjs.map +1 -1
- package/lib/components/puro-contact-form/puro-contact-form.component.d.ts +6 -0
- package/lib/components/puro-top-slider/puro-top-slider.component.d.ts +4 -2
- package/lib/components/puro-top-slider/puro-top-slider.interface.d.ts +3 -1
- package/lib/interfaces/puro-tags.interface.d.ts +1 -0
- package/lib/interfaces/puro-texts-colors.interface.d.ts +1 -0
- package/package.json +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { CommonModule, isPlatformBrowser } from '@angular/common';
|
|
2
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, inject, Input, Output, PLATFORM_ID, signal, ViewChild, } from '@angular/core';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, DestroyRef, EventEmitter, inject, Input, Output, PLATFORM_ID, signal, ViewChild, } from '@angular/core';
|
|
3
3
|
import { FormsModule, ReactiveFormsModule, Validators, } from '@angular/forms';
|
|
4
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
5
|
import { RecaptchaModule } from 'ng-recaptcha';
|
|
5
6
|
import { PuroLinkTypeDirective } from '../../directives';
|
|
6
7
|
import { PuroDynamicHeadingComponent } from '../../shared/puro-dynamic-heading';
|
|
@@ -17,6 +18,7 @@ export class PuroContactFormComponent {
|
|
|
17
18
|
this.siteKey = '6LcF8LssAAAAAGEDU0AVbdd7KC64D6ux2PoY-d2Y';
|
|
18
19
|
this.submitFormValue = new EventEmitter();
|
|
19
20
|
this.platformId = inject(PLATFORM_ID);
|
|
21
|
+
this.destroyRef = inject(DestroyRef);
|
|
20
22
|
this.formReady$ = signal(false);
|
|
21
23
|
}
|
|
22
24
|
ngOnInit() {
|
|
@@ -103,6 +105,9 @@ export class PuroContactFormComponent {
|
|
|
103
105
|
// BUILD FORM
|
|
104
106
|
// -------------------------
|
|
105
107
|
this.form = this.fb.group(controls);
|
|
108
|
+
this.form.valueChanges
|
|
109
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
110
|
+
.subscribe(() => this.clearSubmitMessage());
|
|
106
111
|
this.formReady$.set(true);
|
|
107
112
|
this.cdr.markForCheck();
|
|
108
113
|
}
|
|
@@ -171,7 +176,7 @@ export class PuroContactFormComponent {
|
|
|
171
176
|
}
|
|
172
177
|
}
|
|
173
178
|
resetForm() {
|
|
174
|
-
this.form?.reset();
|
|
179
|
+
this.form?.reset(this.getResetValue());
|
|
175
180
|
if (this.textarea)
|
|
176
181
|
this.textarea.value = '';
|
|
177
182
|
[
|
|
@@ -189,6 +194,44 @@ export class PuroContactFormComponent {
|
|
|
189
194
|
});
|
|
190
195
|
this.cdr.markForCheck();
|
|
191
196
|
}
|
|
197
|
+
getResetValue() {
|
|
198
|
+
const resetValue = {};
|
|
199
|
+
if (this.dropdown) {
|
|
200
|
+
resetValue['dropdown'] =
|
|
201
|
+
this.isHotels && this.hotelID ? this.hotelID : '';
|
|
202
|
+
}
|
|
203
|
+
if (this.ndDropdown)
|
|
204
|
+
resetValue['ndDropdown'] = '';
|
|
205
|
+
if (this.prefix)
|
|
206
|
+
resetValue['prefix'] = '';
|
|
207
|
+
if (this.textarea)
|
|
208
|
+
resetValue['mensaje'] = '';
|
|
209
|
+
if (this.emailInput)
|
|
210
|
+
resetValue['email'] = '';
|
|
211
|
+
if (this.nameInput)
|
|
212
|
+
resetValue['nombre'] = '';
|
|
213
|
+
if (this.surnameInput)
|
|
214
|
+
resetValue['apellidos'] = '';
|
|
215
|
+
if (this.phoneInput)
|
|
216
|
+
resetValue['telefono'] = '';
|
|
217
|
+
if (this.conditionsLink)
|
|
218
|
+
resetValue['conditions'] = false;
|
|
219
|
+
if (this.promotions)
|
|
220
|
+
resetValue['promotions'] = false;
|
|
221
|
+
return resetValue;
|
|
222
|
+
}
|
|
223
|
+
setSubmitMessage(message, type) {
|
|
224
|
+
this.submitMessage = message;
|
|
225
|
+
this.submitMessageType = type;
|
|
226
|
+
this.cdr.markForCheck();
|
|
227
|
+
}
|
|
228
|
+
clearSubmitMessage() {
|
|
229
|
+
if (!this.submitMessage)
|
|
230
|
+
return;
|
|
231
|
+
this.submitMessage = undefined;
|
|
232
|
+
this.submitMessageType = undefined;
|
|
233
|
+
this.cdr.markForCheck();
|
|
234
|
+
}
|
|
192
235
|
phoneValidator() {
|
|
193
236
|
return (control) => {
|
|
194
237
|
if (!control.value)
|
|
@@ -240,7 +283,7 @@ export class PuroContactFormComponent {
|
|
|
240
283
|
}
|
|
241
284
|
}
|
|
242
285
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PuroContactFormComponent, deps: [{ token: i1.FormBuilder }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
243
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: PuroContactFormComponent, isStandalone: true, selector: "lib-puro-contact-form", inputs: { title: "title", subtitle: "subtitle", promotions: "promotions", requiredLabel: "requiredLabel", img: "img", conditionsLink: "conditionsLink", prefix: "prefix", dropdown: "dropdown", ndDropdown: "ndDropdown", textarea: "textarea", button: "button", emailInput: "emailInput", nameInput: "nameInput", surnameInput: "surnameInput", phoneInput: "phoneInput", tags: "tags", textColors: "textColors", isHotels: "isHotels", hotelID: "hotelID" }, outputs: { submitFormValue: "submitFormValue" }, viewQueries: [{ propertyName: "captchaRef", first: true, predicate: ["captchaRef"], descendants: true }], ngImport: i0, template: "<section class=\"contactForm generalMargin\">\n <!-- @if (title) {\n <lib-puro-dynamic-heading\n [tag]=\"tags?.title || 'span'\"\n cssClass=\"contactForm__title\"\n [color]=\"textColors?.title\"\n [content]=\"title\"\n ></lib-puro-dynamic-heading>\n } -->\n\n <div class=\"contactForm__inner\">\n <div class=\"contactForm__graphic\">\n <div class=\"contactForm__graphicInner\">\n @if (img) {\n <img\n [src]=\"img.src\"\n [alt]=\"img.alt\"\n width=\"467\"\n height=\"551\"\n class=\"contactForm__graphicInner--img\"\n loading=\"lazy\"\n />\n }\n </div>\n </div>\n\n <div class=\"contactForm__content\">\n @if (title) {\n <lib-puro-dynamic-heading\n [tag]=\"tags?.title || 'span'\"\n cssClass=\"contactForm__title\"\n [color]=\"textColors?.title\"\n [content]=\"title\"\n ></lib-puro-dynamic-heading>\n }\n @if (subtitle) {\n <div\n class=\"contactForm__paragraph\"\n [innerHtml]=\"subtitle\"\n ></div>\n }\n\n @if (formReady$()) {\n <form [formGroup]=\"form\" class=\"form\">\n <!-- Dropdown 1 -->\n <div class=\"contactForm__row\">\n <div class=\"contactForm__col\">\n @if (dropdown && !isHotels) {\n <div class=\"form__group withIcon\">\n <select\n class=\"form__control\"\n formControlName=\"dropdown\"\n >\n <option value=\"\">\n {{ dropdown.placeholder }}\n </option>\n @for (\n option of dropdown.options;\n track $index\n ) {\n @if (option) {\n <option [value]=\"option.code\">\n {{ option.name }}\n </option>\n }\n }\n </select>\n <span class=\"icon-right\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"15\"\n height=\"8\"\n >\n <use href=\"#select-arrow\"></use>\n </svg>\n </span>\n </div>\n }\n </div>\n </div>\n\n <!-- Dropdown 2 + Email -->\n <div class=\"contactForm__row\">\n <div class=\"contactForm__col\">\n @if (ndDropdown) {\n <div class=\"form__group withIcon\">\n <select\n class=\"form__control\"\n formControlName=\"ndDropdown\"\n >\n <option value=\"\">\n {{ ndDropdown.title }}\n </option>\n @for (\n option of ndDropdown.options;\n track $index\n ) {\n <option [value]=\"option.code\">\n {{ option.name }}\n </option>\n }\n </select>\n <span class=\"icon-right\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"15\"\n height=\"8\"\n >\n <use href=\"#select-arrow\"></use>\n </svg>\n </span>\n </div>\n }\n\n @if (emailInput) {\n <div class=\"form__group withIcon\">\n <input\n type=\"email\"\n class=\"form__control\"\n [placeholder]=\"emailInput.placeholder\"\n formControlName=\"email\"\n (blur)=\"validateInput(emailInput)\"\n (input)=\"\n inputChange($event, emailInput)\n \"\n />\n <span class=\"icon-right\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"19\"\n height=\"15\"\n >\n <use href=\"#email\"></use>\n </svg>\n </span>\n </div>\n\n @if (emailInput?.valid && !emailInput.valid()) {\n <span class=\"form-error\">{{\n emailInput.error\n }}</span>\n }\n }\n </div>\n </div>\n\n <!-- Nombre y Apellidos -->\n <div class=\"contactForm__row\">\n <div class=\"contactForm__col\">\n @if (nameInput) {\n <div class=\"form__group withIcon\">\n <input\n type=\"text\"\n class=\"form__control\"\n [placeholder]=\"nameInput.placeholder\"\n formControlName=\"nombre\"\n (blur)=\"validateInput(nameInput)\"\n (input)=\"inputChange($event, nameInput)\"\n />\n <span class=\"icon-right\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"18\"\n height=\"20\"\n >\n <use href=\"#user\"></use>\n </svg>\n </span>\n </div>\n @if (nameInput?.valid && !nameInput.valid()) {\n <span class=\"form-error\">{{\n nameInput.error\n }}</span>\n }\n }\n </div>\n\n <div class=\"contactForm__col\">\n @if (surnameInput) {\n <div class=\"form__group withIcon\">\n <input\n type=\"text\"\n class=\"form__control\"\n [placeholder]=\"surnameInput.placeholder\"\n formControlName=\"apellidos\"\n (blur)=\"validateInput(surnameInput)\"\n (input)=\"\n inputChange($event, surnameInput)\n \"\n />\n <span class=\"icon-right\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"18\"\n height=\"20\"\n >\n <use href=\"#user\"></use>\n </svg>\n </span>\n </div>\n @if (\n surnameInput?.valid && !surnameInput.valid()\n ) {\n <span class=\"form-error\">{{\n surnameInput.error\n }}</span>\n }\n }\n </div>\n </div>\n\n <!-- Prefijo y Tel\u00E9fono -->\n <div class=\"contactForm__row\">\n <div\n class=\"contactForm__col\"\n style=\"position: relative\"\n >\n @if (prefix) {\n <div class=\"form__group withIcon\">\n <lib-puro-prefix-select\n formControlName=\"prefix\"\n [options]=\"prefix.options\"\n [placeholder]=\"prefix.placeholder\"\n >\n </lib-puro-prefix-select>\n </div>\n }\n </div>\n\n <div class=\"contactForm__col\">\n @if (phoneInput) {\n <div class=\"form__group withIcon\">\n <input\n type=\"tel\"\n class=\"form__control\"\n [placeholder]=\"phoneInput.placeholder\"\n formControlName=\"telefono\"\n (blur)=\"validateInput(phoneInput)\"\n (input)=\"\n inputChange($event, phoneInput)\n \"\n />\n <span class=\"icon-right\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"17\"\n height=\"17\"\n >\n <use href=\"#phone\"></use>\n </svg>\n </span>\n </div>\n @if (phoneInput?.valid && !phoneInput.valid()) {\n <span class=\"form-error\">{{\n phoneInput.error\n }}</span>\n }\n }\n </div>\n </div>\n\n <!-- Mensaje -->\n <div class=\"contactForm__row\">\n <div class=\"contactForm__col\">\n @if (textarea) {\n <div class=\"form__group no-dot\">\n <textarea\n class=\"form__control\"\n [placeholder]=\"textarea.placeholder\"\n formControlName=\"mensaje\"\n ></textarea>\n </div>\n }\n </div>\n </div>\n\n <!-- Checkboxes -->\n <div class=\"contactForm__row\">\n <div class=\"contactForm__col\">\n <div class=\"block-checkbox\">\n @if (requiredLabel) {\n <span class=\"required-label\">{{\n requiredLabel\n }}</span>\n }\n @if (conditionsLink) {\n <label class=\"form__checkbox\">\n <input\n type=\"checkbox\"\n class=\"checkbox\"\n formControlName=\"conditions\"\n />\n <span class=\"box\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"9\"\n height=\"7\"\n >\n <use\n href=\"#checkbox-tick\"\n ></use>\n </svg>\n </span>\n <span\n [innerHTML]=\"conditionsLink\"\n ></span>\n </label>\n }\n @if (promotions) {\n <label class=\"form__checkbox\">\n <input\n type=\"checkbox\"\n class=\"checkbox\"\n formControlName=\"promotions\"\n />\n <span class=\"box\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"9\"\n height=\"7\"\n >\n <use\n href=\"#checkbox-tick\"\n ></use>\n </svg>\n </span>\n <span>{{ promotions }}</span>\n </label>\n }\n </div>\n </div>\n </div>\n\n <!-- Bot\u00F3n -->\n <div class=\"btn__group\">\n @if (button) {\n @if (button.url) {\n <a\n [href]=\"button.url\"\n [linkType]=\"button.linkType\"\n >\n <button\n class=\"btn btn__primary--outline\"\n type=\"submit\"\n [attr.aria-label]=\"button.label\"\n [disabled]=\"form.invalid\"\n (click)=\"submitForm($event)\"\n >\n <span>{{ button.label }}</span>\n </button>\n </a>\n } @else {\n <button\n class=\"btn btn__primary--outline\"\n type=\"button\"\n [attr.aria-label]=\"button.label\"\n [disabled]=\"form.invalid\"\n (click)=\"executeCaptcha()\"\n >\n <span>{{ button.label }}</span>\n </button>\n <re-captcha\n #captchaRef\n [siteKey]=\"siteKey\"\n size=\"invisible\"\n (resolved)=\"onCaptchaResolved($event)\"\n >\n </re-captcha>\n }\n }\n </div>\n </form>\n }\n </div>\n </div>\n</section>\n", styles: [".form-error{position:relative;color:var(--grey);z-index:1;bottom:20px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: PuroLinkTypeDirective, selector: "[linkType]", inputs: ["linkType", "href", "modalClick"], outputs: ["bookClick", "anchorClicked"] }, { kind: "component", type: PuroDynamicHeadingComponent, selector: "lib-puro-dynamic-heading", inputs: ["tag", "wrapper", "cssClass", "content", "color"] }, { kind: "component", type: PuroPrefixSelectComponent, selector: "lib-puro-prefix-select", inputs: ["options", "placeholder"] }, { kind: "ngmodule", type: RecaptchaModule }, { kind: "component", type: i2.RecaptchaComponent, selector: "re-captcha", inputs: ["id", "siteKey", "theme", "type", "size", "tabIndex", "badge", "errorMode"], outputs: ["resolved", "error", "errored"], exportAs: ["reCaptcha"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
286
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: PuroContactFormComponent, isStandalone: true, selector: "lib-puro-contact-form", inputs: { title: "title", subtitle: "subtitle", promotions: "promotions", requiredLabel: "requiredLabel", img: "img", conditionsLink: "conditionsLink", prefix: "prefix", dropdown: "dropdown", ndDropdown: "ndDropdown", textarea: "textarea", button: "button", emailInput: "emailInput", nameInput: "nameInput", surnameInput: "surnameInput", phoneInput: "phoneInput", tags: "tags", textColors: "textColors", isHotels: "isHotels", hotelID: "hotelID" }, outputs: { submitFormValue: "submitFormValue" }, viewQueries: [{ propertyName: "captchaRef", first: true, predicate: ["captchaRef"], descendants: true }], ngImport: i0, template: "<section class=\"contactForm generalMargin\">\n <!-- @if (title) {\n <lib-puro-dynamic-heading\n [tag]=\"tags?.title || 'span'\"\n cssClass=\"contactForm__title\"\n [color]=\"textColors?.title\"\n [content]=\"title\"\n ></lib-puro-dynamic-heading>\n } -->\n\n <div class=\"contactForm__inner\">\n <div class=\"contactForm__graphic\">\n <div class=\"contactForm__graphicInner\">\n @if (img) {\n <img\n [src]=\"img.src\"\n [alt]=\"img.alt\"\n width=\"467\"\n height=\"551\"\n class=\"contactForm__graphicInner--img\"\n loading=\"lazy\"\n />\n }\n </div>\n </div>\n\n <div class=\"contactForm__content\">\n @if (title) {\n <lib-puro-dynamic-heading\n [tag]=\"tags?.title || 'span'\"\n cssClass=\"contactForm__title\"\n [color]=\"textColors?.title\"\n [content]=\"title\"\n ></lib-puro-dynamic-heading>\n }\n @if (subtitle) {\n <div\n class=\"contactForm__paragraph\"\n [innerHtml]=\"subtitle\"\n ></div>\n }\n\n @if (formReady$()) {\n <form [formGroup]=\"form\" class=\"form\">\n <!-- Dropdown 1 -->\n <div class=\"contactForm__row\">\n <div class=\"contactForm__col\">\n @if (dropdown && !isHotels) {\n <div class=\"form__group withIcon\">\n <select\n class=\"form__control\"\n formControlName=\"dropdown\"\n >\n <option value=\"\">\n {{ dropdown.placeholder }}\n </option>\n @for (\n option of dropdown.options;\n track $index\n ) {\n @if (option) {\n <option [value]=\"option.code\">\n {{ option.name }}\n </option>\n }\n }\n </select>\n <span class=\"icon-right\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"15\"\n height=\"8\"\n >\n <use href=\"#select-arrow\"></use>\n </svg>\n </span>\n </div>\n }\n </div>\n </div>\n\n <!-- Dropdown 2 + Email -->\n <div class=\"contactForm__row\">\n <div class=\"contactForm__col\">\n @if (ndDropdown) {\n <div class=\"form__group withIcon\">\n <select\n class=\"form__control\"\n formControlName=\"ndDropdown\"\n >\n <option value=\"\">\n {{ ndDropdown.title }}\n </option>\n @for (\n option of ndDropdown.options;\n track $index\n ) {\n <option [value]=\"option.code\">\n {{ option.name }}\n </option>\n }\n </select>\n <span class=\"icon-right\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"15\"\n height=\"8\"\n >\n <use href=\"#select-arrow\"></use>\n </svg>\n </span>\n </div>\n }\n\n @if (emailInput) {\n <div class=\"form__group withIcon\">\n <input\n type=\"email\"\n class=\"form__control\"\n [placeholder]=\"emailInput.placeholder\"\n formControlName=\"email\"\n (blur)=\"validateInput(emailInput)\"\n (input)=\"\n inputChange($event, emailInput)\n \"\n />\n <span class=\"icon-right\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"19\"\n height=\"15\"\n >\n <use href=\"#email\"></use>\n </svg>\n </span>\n </div>\n\n @if (emailInput?.valid && !emailInput.valid()) {\n <span class=\"form-error\">{{\n emailInput.error\n }}</span>\n }\n }\n </div>\n </div>\n\n <!-- Nombre y Apellidos -->\n <div class=\"contactForm__row\">\n <div class=\"contactForm__col\">\n @if (nameInput) {\n <div class=\"form__group withIcon\">\n <input\n type=\"text\"\n class=\"form__control\"\n [placeholder]=\"nameInput.placeholder\"\n formControlName=\"nombre\"\n (blur)=\"validateInput(nameInput)\"\n (input)=\"inputChange($event, nameInput)\"\n />\n <span class=\"icon-right\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"18\"\n height=\"20\"\n >\n <use href=\"#user\"></use>\n </svg>\n </span>\n </div>\n @if (nameInput?.valid && !nameInput.valid()) {\n <span class=\"form-error\">{{\n nameInput.error\n }}</span>\n }\n }\n </div>\n\n <div class=\"contactForm__col\">\n @if (surnameInput) {\n <div class=\"form__group withIcon\">\n <input\n type=\"text\"\n class=\"form__control\"\n [placeholder]=\"surnameInput.placeholder\"\n formControlName=\"apellidos\"\n (blur)=\"validateInput(surnameInput)\"\n (input)=\"\n inputChange($event, surnameInput)\n \"\n />\n <span class=\"icon-right\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"18\"\n height=\"20\"\n >\n <use href=\"#user\"></use>\n </svg>\n </span>\n </div>\n @if (\n surnameInput?.valid && !surnameInput.valid()\n ) {\n <span class=\"form-error\">{{\n surnameInput.error\n }}</span>\n }\n }\n </div>\n </div>\n\n <!-- Prefijo y Tel\u00E9fono -->\n <div class=\"contactForm__row\">\n <div\n class=\"contactForm__col\"\n style=\"position: relative\"\n >\n @if (prefix) {\n <div class=\"form__group withIcon\">\n <lib-puro-prefix-select\n formControlName=\"prefix\"\n [options]=\"prefix.options\"\n [placeholder]=\"prefix.placeholder\"\n >\n </lib-puro-prefix-select>\n </div>\n }\n </div>\n\n <div class=\"contactForm__col\">\n @if (phoneInput) {\n <div class=\"form__group withIcon\">\n <input\n type=\"tel\"\n class=\"form__control\"\n [placeholder]=\"phoneInput.placeholder\"\n formControlName=\"telefono\"\n (blur)=\"validateInput(phoneInput)\"\n (input)=\"\n inputChange($event, phoneInput)\n \"\n />\n <span class=\"icon-right\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"17\"\n height=\"17\"\n >\n <use href=\"#phone\"></use>\n </svg>\n </span>\n </div>\n @if (phoneInput?.valid && !phoneInput.valid()) {\n <span class=\"form-error\">{{\n phoneInput.error\n }}</span>\n }\n }\n </div>\n </div>\n\n <!-- Mensaje -->\n <div class=\"contactForm__row\">\n <div class=\"contactForm__col\">\n @if (textarea) {\n <div class=\"form__group no-dot\">\n <textarea\n class=\"form__control\"\n [placeholder]=\"textarea.placeholder\"\n formControlName=\"mensaje\"\n ></textarea>\n </div>\n }\n </div>\n </div>\n\n <!-- Checkboxes -->\n <div class=\"contactForm__row\">\n <div class=\"contactForm__col\">\n <div class=\"block-checkbox\">\n @if (requiredLabel) {\n <span class=\"required-label\">{{\n requiredLabel\n }}</span>\n }\n @if (conditionsLink) {\n <label class=\"form__checkbox\">\n <input\n type=\"checkbox\"\n class=\"checkbox\"\n formControlName=\"conditions\"\n />\n <span class=\"box\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"9\"\n height=\"7\"\n >\n <use\n href=\"#checkbox-tick\"\n ></use>\n </svg>\n </span>\n <span\n [innerHTML]=\"conditionsLink\"\n ></span>\n </label>\n }\n @if (promotions) {\n <label class=\"form__checkbox\">\n <input\n type=\"checkbox\"\n class=\"checkbox\"\n formControlName=\"promotions\"\n />\n <span class=\"box\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"9\"\n height=\"7\"\n >\n <use\n href=\"#checkbox-tick\"\n ></use>\n </svg>\n </span>\n <span>{{ promotions }}</span>\n </label>\n }\n </div>\n </div>\n </div>\n\n <!-- Bot\u00F3n -->\n <div class=\"btn__group\">\n @if (button) {\n @if (button.url) {\n <a\n [href]=\"button.url\"\n [linkType]=\"button.linkType\"\n >\n <button\n class=\"btn btn__primary--outline\"\n type=\"submit\"\n [attr.aria-label]=\"button.label\"\n [disabled]=\"form.invalid\"\n (click)=\"submitForm($event)\"\n >\n <span>{{ button.label }}</span>\n </button>\n </a>\n } @else {\n <button\n class=\"btn btn__primary--outline\"\n type=\"button\"\n [attr.aria-label]=\"button.label\"\n [disabled]=\"form.invalid\"\n (click)=\"executeCaptcha()\"\n >\n <span>{{ button.label }}</span>\n </button>\n }\n }\n </div>\n\n <re-captcha\n #captchaRef\n [siteKey]=\"siteKey\"\n size=\"invisible\"\n (resolved)=\"onCaptchaResolved($event)\"\n >\n </re-captcha>\n \n @if (submitMessage) {\n <p\n class=\"form-feedback\"\n [class.form-success]=\"\n submitMessageType === 'success'\n \"\n [class.form-error]=\"submitMessageType === 'error'\"\n >\n {{ submitMessage }}\n </p>\n }\n </form>\n }\n </div>\n </div>\n</section>\n", styles: [".form-error{position:relative;color:var(--grey);z-index:1;bottom:2rem}.form-feedback{position:relative;z-index:1;bottom:auto;display:block;margin:1rem auto 0rem;text-align:center}.form-feedback.form-success{color:var(--primary)}.btn__group button:disabled{cursor:default!important;opacity:.3!important}.btn__group button:disabled.btn__primary--outline{background-color:transparent!important;border-color:var(--primary)!important;color:var(--primary)!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: PuroLinkTypeDirective, selector: "[linkType]", inputs: ["linkType", "href", "modalClick"], outputs: ["bookClick", "anchorClicked"] }, { kind: "component", type: PuroDynamicHeadingComponent, selector: "lib-puro-dynamic-heading", inputs: ["tag", "wrapper", "cssClass", "content", "color"] }, { kind: "component", type: PuroPrefixSelectComponent, selector: "lib-puro-prefix-select", inputs: ["options", "placeholder"] }, { kind: "ngmodule", type: RecaptchaModule }, { kind: "component", type: i2.RecaptchaComponent, selector: "re-captcha", inputs: ["id", "siteKey", "theme", "type", "size", "tabIndex", "badge", "errorMode"], outputs: ["resolved", "error", "errored"], exportAs: ["reCaptcha"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
244
287
|
}
|
|
245
288
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PuroContactFormComponent, decorators: [{
|
|
246
289
|
type: Component,
|
|
@@ -252,7 +295,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
252
295
|
PuroDynamicHeadingComponent,
|
|
253
296
|
PuroPrefixSelectComponent,
|
|
254
297
|
RecaptchaModule,
|
|
255
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"contactForm generalMargin\">\n <!-- @if (title) {\n <lib-puro-dynamic-heading\n [tag]=\"tags?.title || 'span'\"\n cssClass=\"contactForm__title\"\n [color]=\"textColors?.title\"\n [content]=\"title\"\n ></lib-puro-dynamic-heading>\n } -->\n\n <div class=\"contactForm__inner\">\n <div class=\"contactForm__graphic\">\n <div class=\"contactForm__graphicInner\">\n @if (img) {\n <img\n [src]=\"img.src\"\n [alt]=\"img.alt\"\n width=\"467\"\n height=\"551\"\n class=\"contactForm__graphicInner--img\"\n loading=\"lazy\"\n />\n }\n </div>\n </div>\n\n <div class=\"contactForm__content\">\n @if (title) {\n <lib-puro-dynamic-heading\n [tag]=\"tags?.title || 'span'\"\n cssClass=\"contactForm__title\"\n [color]=\"textColors?.title\"\n [content]=\"title\"\n ></lib-puro-dynamic-heading>\n }\n @if (subtitle) {\n <div\n class=\"contactForm__paragraph\"\n [innerHtml]=\"subtitle\"\n ></div>\n }\n\n @if (formReady$()) {\n <form [formGroup]=\"form\" class=\"form\">\n <!-- Dropdown 1 -->\n <div class=\"contactForm__row\">\n <div class=\"contactForm__col\">\n @if (dropdown && !isHotels) {\n <div class=\"form__group withIcon\">\n <select\n class=\"form__control\"\n formControlName=\"dropdown\"\n >\n <option value=\"\">\n {{ dropdown.placeholder }}\n </option>\n @for (\n option of dropdown.options;\n track $index\n ) {\n @if (option) {\n <option [value]=\"option.code\">\n {{ option.name }}\n </option>\n }\n }\n </select>\n <span class=\"icon-right\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"15\"\n height=\"8\"\n >\n <use href=\"#select-arrow\"></use>\n </svg>\n </span>\n </div>\n }\n </div>\n </div>\n\n <!-- Dropdown 2 + Email -->\n <div class=\"contactForm__row\">\n <div class=\"contactForm__col\">\n @if (ndDropdown) {\n <div class=\"form__group withIcon\">\n <select\n class=\"form__control\"\n formControlName=\"ndDropdown\"\n >\n <option value=\"\">\n {{ ndDropdown.title }}\n </option>\n @for (\n option of ndDropdown.options;\n track $index\n ) {\n <option [value]=\"option.code\">\n {{ option.name }}\n </option>\n }\n </select>\n <span class=\"icon-right\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"15\"\n height=\"8\"\n >\n <use href=\"#select-arrow\"></use>\n </svg>\n </span>\n </div>\n }\n\n @if (emailInput) {\n <div class=\"form__group withIcon\">\n <input\n type=\"email\"\n class=\"form__control\"\n [placeholder]=\"emailInput.placeholder\"\n formControlName=\"email\"\n (blur)=\"validateInput(emailInput)\"\n (input)=\"\n inputChange($event, emailInput)\n \"\n />\n <span class=\"icon-right\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"19\"\n height=\"15\"\n >\n <use href=\"#email\"></use>\n </svg>\n </span>\n </div>\n\n @if (emailInput?.valid && !emailInput.valid()) {\n <span class=\"form-error\">{{\n emailInput.error\n }}</span>\n }\n }\n </div>\n </div>\n\n <!-- Nombre y Apellidos -->\n <div class=\"contactForm__row\">\n <div class=\"contactForm__col\">\n @if (nameInput) {\n <div class=\"form__group withIcon\">\n <input\n type=\"text\"\n class=\"form__control\"\n [placeholder]=\"nameInput.placeholder\"\n formControlName=\"nombre\"\n (blur)=\"validateInput(nameInput)\"\n (input)=\"inputChange($event, nameInput)\"\n />\n <span class=\"icon-right\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"18\"\n height=\"20\"\n >\n <use href=\"#user\"></use>\n </svg>\n </span>\n </div>\n @if (nameInput?.valid && !nameInput.valid()) {\n <span class=\"form-error\">{{\n nameInput.error\n }}</span>\n }\n }\n </div>\n\n <div class=\"contactForm__col\">\n @if (surnameInput) {\n <div class=\"form__group withIcon\">\n <input\n type=\"text\"\n class=\"form__control\"\n [placeholder]=\"surnameInput.placeholder\"\n formControlName=\"apellidos\"\n (blur)=\"validateInput(surnameInput)\"\n (input)=\"\n inputChange($event, surnameInput)\n \"\n />\n <span class=\"icon-right\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"18\"\n height=\"20\"\n >\n <use href=\"#user\"></use>\n </svg>\n </span>\n </div>\n @if (\n surnameInput?.valid && !surnameInput.valid()\n ) {\n <span class=\"form-error\">{{\n surnameInput.error\n }}</span>\n }\n }\n </div>\n </div>\n\n <!-- Prefijo y Tel\u00E9fono -->\n <div class=\"contactForm__row\">\n <div\n class=\"contactForm__col\"\n style=\"position: relative\"\n >\n @if (prefix) {\n <div class=\"form__group withIcon\">\n <lib-puro-prefix-select\n formControlName=\"prefix\"\n [options]=\"prefix.options\"\n [placeholder]=\"prefix.placeholder\"\n >\n </lib-puro-prefix-select>\n </div>\n }\n </div>\n\n <div class=\"contactForm__col\">\n @if (phoneInput) {\n <div class=\"form__group withIcon\">\n <input\n type=\"tel\"\n class=\"form__control\"\n [placeholder]=\"phoneInput.placeholder\"\n formControlName=\"telefono\"\n (blur)=\"validateInput(phoneInput)\"\n (input)=\"\n inputChange($event, phoneInput)\n \"\n />\n <span class=\"icon-right\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"17\"\n height=\"17\"\n >\n <use href=\"#phone\"></use>\n </svg>\n </span>\n </div>\n @if (phoneInput?.valid && !phoneInput.valid()) {\n <span class=\"form-error\">{{\n phoneInput.error\n }}</span>\n }\n }\n </div>\n </div>\n\n <!-- Mensaje -->\n <div class=\"contactForm__row\">\n <div class=\"contactForm__col\">\n @if (textarea) {\n <div class=\"form__group no-dot\">\n <textarea\n class=\"form__control\"\n [placeholder]=\"textarea.placeholder\"\n formControlName=\"mensaje\"\n ></textarea>\n </div>\n }\n </div>\n </div>\n\n <!-- Checkboxes -->\n <div class=\"contactForm__row\">\n <div class=\"contactForm__col\">\n <div class=\"block-checkbox\">\n @if (requiredLabel) {\n <span class=\"required-label\">{{\n requiredLabel\n }}</span>\n }\n @if (conditionsLink) {\n <label class=\"form__checkbox\">\n <input\n type=\"checkbox\"\n class=\"checkbox\"\n formControlName=\"conditions\"\n />\n <span class=\"box\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"9\"\n height=\"7\"\n >\n <use\n href=\"#checkbox-tick\"\n ></use>\n </svg>\n </span>\n <span\n [innerHTML]=\"conditionsLink\"\n ></span>\n </label>\n }\n @if (promotions) {\n <label class=\"form__checkbox\">\n <input\n type=\"checkbox\"\n class=\"checkbox\"\n formControlName=\"promotions\"\n />\n <span class=\"box\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"9\"\n height=\"7\"\n >\n <use\n href=\"#checkbox-tick\"\n ></use>\n </svg>\n </span>\n <span>{{ promotions }}</span>\n </label>\n }\n </div>\n </div>\n </div>\n\n <!-- Bot\u00F3n -->\n <div class=\"btn__group\">\n @if (button) {\n @if (button.url) {\n <a\n [href]=\"button.url\"\n [linkType]=\"button.linkType\"\n >\n <button\n class=\"btn btn__primary--outline\"\n type=\"submit\"\n [attr.aria-label]=\"button.label\"\n [disabled]=\"form.invalid\"\n (click)=\"submitForm($event)\"\n >\n <span>{{ button.label }}</span>\n </button>\n </a>\n } @else {\n <button\n class=\"btn btn__primary--outline\"\n type=\"button\"\n [attr.aria-label]=\"button.label\"\n [disabled]=\"form.invalid\"\n (click)=\"executeCaptcha()\"\n >\n <span>{{ button.label }}</span>\n </button>\n <re-captcha\n #captchaRef\n [siteKey]=\"siteKey\"\n size=\"invisible\"\n (resolved)=\"onCaptchaResolved($event)\"\n >\n </re-captcha>\n }\n }\n </div>\n </form>\n }\n </div>\n </div>\n</section>\n", styles: [".form-error{position:relative;color:var(--grey);z-index:1;bottom:20px}\n"] }]
|
|
298
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"contactForm generalMargin\">\n <!-- @if (title) {\n <lib-puro-dynamic-heading\n [tag]=\"tags?.title || 'span'\"\n cssClass=\"contactForm__title\"\n [color]=\"textColors?.title\"\n [content]=\"title\"\n ></lib-puro-dynamic-heading>\n } -->\n\n <div class=\"contactForm__inner\">\n <div class=\"contactForm__graphic\">\n <div class=\"contactForm__graphicInner\">\n @if (img) {\n <img\n [src]=\"img.src\"\n [alt]=\"img.alt\"\n width=\"467\"\n height=\"551\"\n class=\"contactForm__graphicInner--img\"\n loading=\"lazy\"\n />\n }\n </div>\n </div>\n\n <div class=\"contactForm__content\">\n @if (title) {\n <lib-puro-dynamic-heading\n [tag]=\"tags?.title || 'span'\"\n cssClass=\"contactForm__title\"\n [color]=\"textColors?.title\"\n [content]=\"title\"\n ></lib-puro-dynamic-heading>\n }\n @if (subtitle) {\n <div\n class=\"contactForm__paragraph\"\n [innerHtml]=\"subtitle\"\n ></div>\n }\n\n @if (formReady$()) {\n <form [formGroup]=\"form\" class=\"form\">\n <!-- Dropdown 1 -->\n <div class=\"contactForm__row\">\n <div class=\"contactForm__col\">\n @if (dropdown && !isHotels) {\n <div class=\"form__group withIcon\">\n <select\n class=\"form__control\"\n formControlName=\"dropdown\"\n >\n <option value=\"\">\n {{ dropdown.placeholder }}\n </option>\n @for (\n option of dropdown.options;\n track $index\n ) {\n @if (option) {\n <option [value]=\"option.code\">\n {{ option.name }}\n </option>\n }\n }\n </select>\n <span class=\"icon-right\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"15\"\n height=\"8\"\n >\n <use href=\"#select-arrow\"></use>\n </svg>\n </span>\n </div>\n }\n </div>\n </div>\n\n <!-- Dropdown 2 + Email -->\n <div class=\"contactForm__row\">\n <div class=\"contactForm__col\">\n @if (ndDropdown) {\n <div class=\"form__group withIcon\">\n <select\n class=\"form__control\"\n formControlName=\"ndDropdown\"\n >\n <option value=\"\">\n {{ ndDropdown.title }}\n </option>\n @for (\n option of ndDropdown.options;\n track $index\n ) {\n <option [value]=\"option.code\">\n {{ option.name }}\n </option>\n }\n </select>\n <span class=\"icon-right\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"15\"\n height=\"8\"\n >\n <use href=\"#select-arrow\"></use>\n </svg>\n </span>\n </div>\n }\n\n @if (emailInput) {\n <div class=\"form__group withIcon\">\n <input\n type=\"email\"\n class=\"form__control\"\n [placeholder]=\"emailInput.placeholder\"\n formControlName=\"email\"\n (blur)=\"validateInput(emailInput)\"\n (input)=\"\n inputChange($event, emailInput)\n \"\n />\n <span class=\"icon-right\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"19\"\n height=\"15\"\n >\n <use href=\"#email\"></use>\n </svg>\n </span>\n </div>\n\n @if (emailInput?.valid && !emailInput.valid()) {\n <span class=\"form-error\">{{\n emailInput.error\n }}</span>\n }\n }\n </div>\n </div>\n\n <!-- Nombre y Apellidos -->\n <div class=\"contactForm__row\">\n <div class=\"contactForm__col\">\n @if (nameInput) {\n <div class=\"form__group withIcon\">\n <input\n type=\"text\"\n class=\"form__control\"\n [placeholder]=\"nameInput.placeholder\"\n formControlName=\"nombre\"\n (blur)=\"validateInput(nameInput)\"\n (input)=\"inputChange($event, nameInput)\"\n />\n <span class=\"icon-right\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"18\"\n height=\"20\"\n >\n <use href=\"#user\"></use>\n </svg>\n </span>\n </div>\n @if (nameInput?.valid && !nameInput.valid()) {\n <span class=\"form-error\">{{\n nameInput.error\n }}</span>\n }\n }\n </div>\n\n <div class=\"contactForm__col\">\n @if (surnameInput) {\n <div class=\"form__group withIcon\">\n <input\n type=\"text\"\n class=\"form__control\"\n [placeholder]=\"surnameInput.placeholder\"\n formControlName=\"apellidos\"\n (blur)=\"validateInput(surnameInput)\"\n (input)=\"\n inputChange($event, surnameInput)\n \"\n />\n <span class=\"icon-right\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"18\"\n height=\"20\"\n >\n <use href=\"#user\"></use>\n </svg>\n </span>\n </div>\n @if (\n surnameInput?.valid && !surnameInput.valid()\n ) {\n <span class=\"form-error\">{{\n surnameInput.error\n }}</span>\n }\n }\n </div>\n </div>\n\n <!-- Prefijo y Tel\u00E9fono -->\n <div class=\"contactForm__row\">\n <div\n class=\"contactForm__col\"\n style=\"position: relative\"\n >\n @if (prefix) {\n <div class=\"form__group withIcon\">\n <lib-puro-prefix-select\n formControlName=\"prefix\"\n [options]=\"prefix.options\"\n [placeholder]=\"prefix.placeholder\"\n >\n </lib-puro-prefix-select>\n </div>\n }\n </div>\n\n <div class=\"contactForm__col\">\n @if (phoneInput) {\n <div class=\"form__group withIcon\">\n <input\n type=\"tel\"\n class=\"form__control\"\n [placeholder]=\"phoneInput.placeholder\"\n formControlName=\"telefono\"\n (blur)=\"validateInput(phoneInput)\"\n (input)=\"\n inputChange($event, phoneInput)\n \"\n />\n <span class=\"icon-right\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"17\"\n height=\"17\"\n >\n <use href=\"#phone\"></use>\n </svg>\n </span>\n </div>\n @if (phoneInput?.valid && !phoneInput.valid()) {\n <span class=\"form-error\">{{\n phoneInput.error\n }}</span>\n }\n }\n </div>\n </div>\n\n <!-- Mensaje -->\n <div class=\"contactForm__row\">\n <div class=\"contactForm__col\">\n @if (textarea) {\n <div class=\"form__group no-dot\">\n <textarea\n class=\"form__control\"\n [placeholder]=\"textarea.placeholder\"\n formControlName=\"mensaje\"\n ></textarea>\n </div>\n }\n </div>\n </div>\n\n <!-- Checkboxes -->\n <div class=\"contactForm__row\">\n <div class=\"contactForm__col\">\n <div class=\"block-checkbox\">\n @if (requiredLabel) {\n <span class=\"required-label\">{{\n requiredLabel\n }}</span>\n }\n @if (conditionsLink) {\n <label class=\"form__checkbox\">\n <input\n type=\"checkbox\"\n class=\"checkbox\"\n formControlName=\"conditions\"\n />\n <span class=\"box\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"9\"\n height=\"7\"\n >\n <use\n href=\"#checkbox-tick\"\n ></use>\n </svg>\n </span>\n <span\n [innerHTML]=\"conditionsLink\"\n ></span>\n </label>\n }\n @if (promotions) {\n <label class=\"form__checkbox\">\n <input\n type=\"checkbox\"\n class=\"checkbox\"\n formControlName=\"promotions\"\n />\n <span class=\"box\">\n <svg\n aria-hidden=\"true\"\n focusable=\"false\"\n width=\"9\"\n height=\"7\"\n >\n <use\n href=\"#checkbox-tick\"\n ></use>\n </svg>\n </span>\n <span>{{ promotions }}</span>\n </label>\n }\n </div>\n </div>\n </div>\n\n <!-- Bot\u00F3n -->\n <div class=\"btn__group\">\n @if (button) {\n @if (button.url) {\n <a\n [href]=\"button.url\"\n [linkType]=\"button.linkType\"\n >\n <button\n class=\"btn btn__primary--outline\"\n type=\"submit\"\n [attr.aria-label]=\"button.label\"\n [disabled]=\"form.invalid\"\n (click)=\"submitForm($event)\"\n >\n <span>{{ button.label }}</span>\n </button>\n </a>\n } @else {\n <button\n class=\"btn btn__primary--outline\"\n type=\"button\"\n [attr.aria-label]=\"button.label\"\n [disabled]=\"form.invalid\"\n (click)=\"executeCaptcha()\"\n >\n <span>{{ button.label }}</span>\n </button>\n }\n }\n </div>\n\n <re-captcha\n #captchaRef\n [siteKey]=\"siteKey\"\n size=\"invisible\"\n (resolved)=\"onCaptchaResolved($event)\"\n >\n </re-captcha>\n \n @if (submitMessage) {\n <p\n class=\"form-feedback\"\n [class.form-success]=\"\n submitMessageType === 'success'\n \"\n [class.form-error]=\"submitMessageType === 'error'\"\n >\n {{ submitMessage }}\n </p>\n }\n </form>\n }\n </div>\n </div>\n</section>\n", styles: [".form-error{position:relative;color:var(--grey);z-index:1;bottom:2rem}.form-feedback{position:relative;z-index:1;bottom:auto;display:block;margin:1rem auto 0rem;text-align:center}.form-feedback.form-success{color:var(--primary)}.btn__group button:disabled{cursor:default!important;opacity:.3!important}.btn__group button:disabled.btn__primary--outline{background-color:transparent!important;border-color:var(--primary)!important;color:var(--primary)!important}\n"] }]
|
|
256
299
|
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i0.ChangeDetectorRef }], propDecorators: { captchaRef: [{
|
|
257
300
|
type: ViewChild,
|
|
258
301
|
args: ['captchaRef']
|
|
@@ -297,4 +340,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
297
340
|
}], submitFormValue: [{
|
|
298
341
|
type: Output
|
|
299
342
|
}] } });
|
|
300
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVyby1jb250YWN0LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHVyby9zcmMvbGliL2NvbXBvbmVudHMvcHVyby1jb250YWN0LWZvcm0vcHVyby1jb250YWN0LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHVyby9zcmMvbGliL2NvbXBvbmVudHMvcHVyby1jb250YWN0LWZvcm0vcHVyby1jb250YWN0LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFDSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixXQUFXLEVBQ1gsTUFBTSxFQUNOLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBSUgsV0FBVyxFQUNYLG1CQUFtQixFQUduQixVQUFVLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQXNCLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQVN6RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7QUFrQjFDLE1BQU0sT0FBTyx3QkFBd0I7SUFtQ2pDLFlBQ3FCLEVBQWUsRUFDeEIsR0FBc0I7UUFEYixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ3hCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBbENsQyxpQkFBWSxHQUFr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Q1osV0FBVyx1dUNBQ1gsbUJBQW1CLGdWQUNuQixxQkFBcUIsNElBQ3JCLDJCQUEyQixpSUFDM0IseUJBQXlCLHNHQUN6QixlQUFlOzs0RkFNVix3QkFBd0I7a0JBaEJwQyxTQUFTOytCQUNJLHVCQUF1QixjQUNyQixJQUFJLFdBQ1A7d0JBQ0wsWUFBWTt3QkFDWixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIscUJBQXFCO3dCQUNyQiwyQkFBMkI7d0JBQzNCLHlCQUF5Qjt3QkFDekIsZUFBZTtxQkFDbEIsbUJBR2dCLHVCQUF1QixDQUFDLE1BQU07Z0hBR3RCLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFLZCxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVJLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBQTEFURk9STV9JRCxcbiAgICBzaWduYWwsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQWJzdHJhY3RDb250cm9sLFxuICAgIEZvcm1CdWlsZGVyLFxuICAgIEZvcm1Hcm91cCxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFZhbGlkYXRpb25FcnJvcnMsXG4gICAgVmFsaWRhdG9yRm4sXG4gICAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUmVjYXB0Y2hhQ29tcG9uZW50LCBSZWNhcHRjaGFNb2R1bGUgfSBmcm9tICduZy1yZWNhcHRjaGEnO1xuaW1wb3J0IHsgUHVyb0xpbmtUeXBlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQge1xuICAgIFB1cm9CdXR0b25JLFxuICAgIFB1cm9JbWFnZUksXG4gICAgUHVyb0lucHV0SSxcbiAgICBQdXJvVGFnc0ksXG4gICAgUHVyb1RleHRzQ29sb3JzSSxcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBQdXJvRHJvcGRvd25JIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9wdXJvLWRyb3Bkb3duLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQdXJvRHluYW1pY0hlYWRpbmdDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvcHVyby1keW5hbWljLWhlYWRpbmcnO1xuaW1wb3J0IHsgUHVyb1ByZWZpeFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9wdXJvLXByZWZpeC1zZWxlY3QnO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGliLXB1cm8tY29udGFjdC1mb3JtJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgUHVyb0xpbmtUeXBlRGlyZWN0aXZlLFxuICAgICAgICBQdXJvRHluYW1pY0hlYWRpbmdDb21wb25lbnQsXG4gICAgICAgIFB1cm9QcmVmaXhTZWxlY3RDb21wb25lbnQsXG4gICAgICAgIFJlY2FwdGNoYU1vZHVsZSxcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9wdXJvLWNvbnRhY3QtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL3B1cm8tY29udGFjdC1mb3JtLmNvbXBvbmVudC5zY3NzJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUHVyb0NvbnRhY3RGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBAVmlld0NoaWxkKCdjYXB0Y2hhUmVmJykgY2FwdGNoYVJlZiE6IFJlY2FwdGNoYUNvbXBvbmVudDtcblxuICAgIGNhcHRjaGFUb2tlbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgc2l0ZUtleSA9ICc2TGNGOExzc0FBQUFBR0VEVTBBVmJkZDdLQzY0RDZ1eDJQb1ktZDJZJztcblxuICAgIEBJbnB1dCgpIHRpdGxlPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHN1YnRpdGxlPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHByb21vdGlvbnM/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgcmVxdWlyZWRMYWJlbD86IHN0cmluZztcbiAgICBASW5wdXQoKSBpbWc/OiBQdXJvSW1hZ2VJO1xuICAgIEBJbnB1dCgpIGNvbmRpdGlvbnNMaW5rPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHByZWZpeD86IFB1cm9Ecm9wZG93bkk7XG4gICAgQElucHV0KCkgZHJvcGRvd24/OiBQdXJvRHJvcGRvd25JO1xuICAgIEBJbnB1dCgpIG5kRHJvcGRvd24/OiBQdXJvRHJvcGRvd25JO1xuICAgIEBJbnB1dCgpIHRleHRhcmVhPzogUHVyb0lucHV0STtcbiAgICBASW5wdXQoKSBidXR0b24/OiBQdXJvQnV0dG9uSTtcblxuICAgIEBJbnB1dCgpIGVtYWlsSW5wdXQ/OiBQdXJvSW5wdXRJO1xuICAgIEBJbnB1dCgpIG5hbWVJbnB1dD86IFB1cm9JbnB1dEk7XG4gICAgQElucHV0KCkgc3VybmFtZUlucHV0PzogUHVyb0lucHV0STtcbiAgICBASW5wdXQoKSBwaG9uZUlucHV0PzogUHVyb0lucHV0STtcbiAgICBASW5wdXQoKSB0YWdzPzogUHVyb1RhZ3NJO1xuICAgIEBJbnB1dCgpIHRleHRDb2xvcnM/OiBQdXJvVGV4dHNDb2xvcnNJO1xuXG4gICAgQElucHV0KCkgaXNIb3RlbHM/OiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGhvdGVsSUQ/OiBudW1iZXI7XG5cbiAgICBAT3V0cHV0KCkgc3VibWl0Rm9ybVZhbHVlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuICAgIFxuICAgIGZvcm0hOiBGb3JtR3JvdXA7XG4gICAgZm9ybVJlYWR5JCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICAgICkge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkRm9ybSgpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzSG90ZWxzICYmIHRoaXMuaG90ZWxJRCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBkcm9wZG93bjogdGhpcy5ob3RlbElEIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBkcm9wZG93bkN0cmwgPSB0aGlzLmZvcm0uZ2V0KCdkcm9wZG93bicpO1xuICAgICAgICAgICAgaWYgKGRyb3Bkb3duQ3RybCkge1xuICAgICAgICAgICAgICAgIGRyb3Bkb3duQ3RybC5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgICAgICAgICBkcm9wZG93bkN0cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGV2dWVsdmUgZWwgbm9tYnJlIChvIGxhYmVsKSBkZSBsYSBvcGNpw7NuIHNlbGVjY2lvbmFkYSBlbiB1biBkcm9wZG93biBkYWRvLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0U2VsZWN0ZWREcm9wZG93bk5hbWUoXG4gICAgICAgIGRyb3Bkb3duOiBQdXJvRHJvcGRvd25JIHwgdW5kZWZpbmVkLFxuICAgICAgICBjb250cm9sTmFtZTogc3RyaW5nXG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFkcm9wZG93biB8fCAhQXJyYXkuaXNBcnJheShkcm9wZG93bi5vcHRpb25zKSkgcmV0dXJuICcnO1xuICAgICAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gdGhpcy5mb3JtLmdldChjb250cm9sTmFtZSk/LnZhbHVlO1xuICAgICAgICAvLyBCdXNjYXIgcG9yICdjb2RlJyB5IGNvbXBhcmFyIGNvbiA9PSBwYXJhIHNvcG9ydGFyIHN0cmluZy9udW1iZXJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBkcm9wZG93bi5vcHRpb25zLmZpbmQoXG4gICAgICAgICAgICAob3B0OiBhbnkpID0+IG9wdC5jb2RlID09IHNlbGVjdGVkVmFsdWVcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkICYmIHR5cGVvZiBzZWxlY3RlZC5uYW1lID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBzZWxlY3RlZC5uYW1lXG4gICAgICAgICAgICA6ICcnO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRGb3JtKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb250cm9sczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgLy8gVEVYVEFSRUFcbiAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICBpZiAodGhpcy50ZXh0YXJlYSkge1xuICAgICAgICAgICAgY29udHJvbHNbJ21lbnNhamUnXSA9IFtcbiAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICBVdGlscy5zYWZlVmFsaWRhdG9ycyh0aGlzLnRleHRhcmVhLnZhbGlkYXRvcnMpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgLy8gU0VMRUNUU1xuICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgIGlmICh0aGlzLmRyb3Bkb3duKSBjb250cm9sc1snZHJvcGRvd24nXSA9IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF07XG4gICAgICAgIGlmICh0aGlzLm5kRHJvcGRvd24pIGNvbnRyb2xzWyduZERyb3Bkb3duJ10gPSBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdO1xuICAgICAgICBpZiAodGhpcy5wcmVmaXgpIGNvbnRyb2xzWydwcmVmaXgnXSA9IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF07XG5cbiAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAvLyBJTlBVVFNcbiAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAvLyBFTUFJTFxuICAgICAgICBpZiAodGhpcy5lbWFpbElucHV0KSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gVXRpbHMuc2FmZVZhbGlkYXRvcnModGhpcy5lbWFpbElucHV0LnZhbGlkYXRvcnMpO1xuICAgICAgICAgICAgY29udHJvbHNbJ2VtYWlsJ10gPSBbXG4gICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgdi5sZW5ndGggPyB2IDogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5PTUJSRVxuICAgICAgICBpZiAodGhpcy5uYW1lSW5wdXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBVdGlscy5zYWZlVmFsaWRhdG9ycyh0aGlzLm5hbWVJbnB1dC52YWxpZGF0b3JzKTtcbiAgICAgICAgICAgIGNvbnRyb2xzWydub21icmUnXSA9IFsnJywgdi5sZW5ndGggPyB2IDogW1ZhbGlkYXRvcnMucmVxdWlyZWRdXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFQRUxMSURPU1xuICAgICAgICBpZiAodGhpcy5zdXJuYW1lSW5wdXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBVdGlscy5zYWZlVmFsaWRhdG9ycyh0aGlzLnN1cm5hbWVJbnB1dC52YWxpZGF0b3JzKTtcbiAgICAgICAgICAgIGNvbnRyb2xzWydhcGVsbGlkb3MnXSA9IFsnJywgdi5sZW5ndGggPyB2IDogW1ZhbGlkYXRvcnMucmVxdWlyZWRdXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRFTMOJRk9OT1xuICAgICAgICBpZiAodGhpcy5waG9uZUlucHV0KSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gVXRpbHMuc2FmZVZhbGlkYXRvcnModGhpcy5waG9uZUlucHV0LnZhbGlkYXRvcnMpO1xuICAgICAgICAgICAgY29udHJvbHNbJ3RlbGVmb25vJ10gPSBbJycsIFsuLi52LCB0aGlzLnBob25lVmFsaWRhdG9yKCldXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgLy8gQ0hFQ0tCT1hFU1xuICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgIGlmICh0aGlzLmNvbmRpdGlvbnNMaW5rKSB7XG4gICAgICAgICAgICBjb250cm9sc1snY29uZGl0aW9ucyddID0gW2ZhbHNlLCBWYWxpZGF0b3JzLnJlcXVpcmVkVHJ1ZV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wcm9tb3Rpb25zKSB7XG4gICAgICAgICAgICBjb250cm9sc1sncHJvbW90aW9ucyddID0gW2ZhbHNlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgLy8gQlVJTEQgRk9STVxuICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoY29udHJvbHMpO1xuICAgICAgICB0aGlzLmZvcm1SZWFkeSQuc2V0KHRydWUpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBzdWJtaXRGb3JtKGU/OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBlPy5wcmV2ZW50RGVmYXVsdD8uKCk7XG4gICAgICAgIHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkKSB7XG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuZm9ybS5jb250cm9scykuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgICAgIGMubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICAgICAgICAgIGMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB0aGlzLmVtYWlsSW5wdXQsXG4gICAgICAgICAgICAgICAgdGhpcy5uYW1lSW5wdXQsXG4gICAgICAgICAgICAgICAgdGhpcy5zdXJuYW1lSW5wdXQsXG4gICAgICAgICAgICAgICAgdGhpcy5waG9uZUlucHV0LFxuICAgICAgICAgICAgICAgIHRoaXMudGV4dGFyZWEsXG4gICAgICAgICAgICBdLmZvckVhY2goKGkpID0+IGkgJiYgdGhpcy52YWxpZGF0ZUlucHV0KGkpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9idGVuZXIgbG9zIG5vbWJyZXMgZGUgbG9zIHNlbGVjdHMgZGUgZm9ybWEgZWZpY2llbnRlXG4gICAgICAgIGNvbnN0IGRhdGFXaXRoTmFtZXMgPSB7XG4gICAgICAgICAgICAuLi50aGlzLmZvcm0udmFsdWUsXG4gICAgICAgICAgICBkcm9wZG93bk5hbWU6IHRoaXMuZ2V0U2VsZWN0ZWREcm9wZG93bk5hbWUoXG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bixcbiAgICAgICAgICAgICAgICAnZHJvcGRvd24nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgbmREcm9wZG93bk5hbWU6IHRoaXMuZ2V0U2VsZWN0ZWREcm9wZG93bk5hbWUoXG4gICAgICAgICAgICAgICAgdGhpcy5uZERyb3Bkb3duLFxuICAgICAgICAgICAgICAgICduZERyb3Bkb3duJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zdWJtaXRGb3JtVmFsdWUuZW1pdChkYXRhV2l0aE5hbWVzKTtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUFmdGVyU3VibWl0KCk7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVJbnB1dChpbnB1dDogUHVyb0lucHV0SSk6IHZvaWQge1xuICAgICAgICBpZiAoIWlucHV0Py5uYW1lKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGN0cmwgPSB0aGlzLmZvcm0uZ2V0KHRoaXMuZ2V0Q29udHJvbE5hbWUoaW5wdXQpKTtcbiAgICAgICAgaWYgKCFjdHJsKSByZXR1cm47XG4gICAgICAgIGlucHV0LnZhbGlkPy5zZXQoY3RybC5lcnJvcnMgPT09IG51bGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29udHJvbE5hbWUoaW5wdXQ6IFB1cm9JbnB1dEkpOiBzdHJpbmcge1xuICAgICAgICBpZiAoaW5wdXQgPT09IHRoaXMubmFtZUlucHV0KSByZXR1cm4gJ25vbWJyZSc7XG4gICAgICAgIGlmIChpbnB1dCA9PT0gdGhpcy5zdXJuYW1lSW5wdXQpIHJldHVybiAnYXBlbGxpZG9zJztcbiAgICAgICAgaWYgKGlucHV0ID09PSB0aGlzLmVtYWlsSW5wdXQpIHJldHVybiAnZW1haWwnO1xuICAgICAgICBpZiAoaW5wdXQgPT09IHRoaXMucGhvbmVJbnB1dCkgcmV0dXJuICd0ZWxlZm9ubyc7XG4gICAgICAgIGlmIChpbnB1dCA9PT0gdGhpcy50ZXh0YXJlYSkgcmV0dXJuICdtZW5zYWplJztcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGlucHV0Q2hhbmdlKGV2ZW50OiBFdmVudCwgaW5wdXQ6IFB1cm9JbnB1dEkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWwgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcblxuICAgICAgICBpZiAoaW5wdXQudHlwZSA9PT0gJ3RlbCcpIHtcbiAgICAgICAgICAgIGVsLnZhbHVlID0gZWwudmFsdWUucmVwbGFjZSgvW14wLTkrXS9nLCAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZSA9IGVsLnZhbHVlLnRyaW0oKTtcbiAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICBpZiAoaW5wdXQubmFtZSkge1xuICAgICAgICAgICAgY29uc3QgY3RybCA9IHRoaXMuZm9ybS5nZXQoaW5wdXQubmFtZSk7XG4gICAgICAgICAgICBpZiAoY3RybCkge1xuICAgICAgICAgICAgICAgIGN0cmwuc2V0VmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIGN0cmwubWFya0FzRGlydHkoKTtcbiAgICAgICAgICAgICAgICBjdHJsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldEZvcm0oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybT8ucmVzZXQoKTtcbiAgICAgICAgaWYgKHRoaXMudGV4dGFyZWEpIHRoaXMudGV4dGFyZWEudmFsdWUgPSAnJztcbiAgICAgICAgW1xuICAgICAgICAgICAgdGhpcy5lbWFpbElucHV0LFxuICAgICAgICAgICAgdGhpcy5uYW1lSW5wdXQsXG4gICAgICAgICAgICB0aGlzLnN1cm5hbWVJbnB1dCxcbiAgICAgICAgICAgIHRoaXMucGhvbmVJbnB1dCxcbiAgICAgICAgXS5mb3JFYWNoKChpKSA9PiB7XG4gICAgICAgICAgICBpZiAoaSkgaS52YWx1ZSA9ICcnO1xuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLmZvcm0uY29udHJvbHMpLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgIGMubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgICAgIGMubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBob25lVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcbiAgICAgICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICAgICAgICBpZiAoIWNvbnRyb2wudmFsdWUpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY29uc3QgcGhvbmVSZWdleCA9IC9eKD86WysgXT8pW1xcZCAtXXs3LDE1fSQvO1xuICAgICAgICAgICAgcmV0dXJuIHBob25lUmVnZXgudGVzdChjb250cm9sLnZhbHVlKVxuICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgIDogeyBpbnZhbGlkUGhvbmU6IHRydWUgfTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBleGVjdXRlQ2FwdGNoYSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkKSB7XG4gICAgICAgICAgICBPYmplY3QudmFsdWVzKHRoaXMuZm9ybS5jb250cm9scykuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgICAgIGMubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhcHRjaGFSZWYuZXhlY3V0ZSgpO1xuICAgIH1cblxuICAgIG9uQ2FwdGNoYVJlc29sdmVkKHRva2VuOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmICghdG9rZW4pIHJldHVybjtcblxuICAgICAgICB0aGlzLmNhcHRjaGFUb2tlbiA9IHRva2VuO1xuXG4gICAgICAgIGNvbnN0IGRhdGFXaXRoTmFtZXMgPSB7XG4gICAgICAgICAgICAuLi50aGlzLmZvcm0udmFsdWUsXG4gICAgICAgICAgICBjYXB0Y2hhOiB0b2tlbixcbiAgICAgICAgICAgIGRyb3Bkb3duTmFtZTogdGhpcy5nZXRTZWxlY3RlZERyb3Bkb3duTmFtZShcbiAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duLFxuICAgICAgICAgICAgICAgICdkcm9wZG93bidcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBuZERyb3Bkb3duTmFtZTogdGhpcy5nZXRTZWxlY3RlZERyb3Bkb3duTmFtZShcbiAgICAgICAgICAgICAgICB0aGlzLm5kRHJvcGRvd24sXG4gICAgICAgICAgICAgICAgJ25kRHJvcGRvd24nXG4gICAgICAgICAgICApLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc3VibWl0Rm9ybVZhbHVlLmVtaXQoZGF0YVdpdGhOYW1lcyk7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XG5cbiAgICAgICAgLy8gcmVzZXQgY2FwdGNoYSBwYXJhIGZ1dHVyb3MgZW52w61vc1xuICAgICAgICB0aGlzLmNhcHRjaGFSZWYucmVzZXQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5hdmlnYXRlQWZ0ZXJTdWJtaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuYnV0dG9uPy51cmw7XG4gICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLmJ1dHRvbj8ubGlua1R5cGU7XG5cbiAgICAgICAgaWYgKCF1cmwgfHwgIXR5cGUpIHJldHVybjtcblxuICAgICAgICBpZiAodHlwZSA9PT0gJ2ludGVybmFsJyB8fCB0eXBlID09PSAnaW50ZXJuYWxfbGluaycpIHtcbiAgICAgICAgICAgIC8vIG5hdmVnYWNpw7NuIFNQQVxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZXh0ZXJuYWxcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPHNlY3Rpb24gY2xhc3M9XCJjb250YWN0Rm9ybSBnZW5lcmFsTWFyZ2luXCI+XG4gICAgPCEtLSBAaWYgKHRpdGxlKSB7XG4gICAgICAgIDxsaWItcHVyby1keW5hbWljLWhlYWRpbmdcbiAgICAgICAgICAgIFt0YWddPVwidGFncz8udGl0bGUgfHwgJ3NwYW4nXCJcbiAgICAgICAgICAgIGNzc0NsYXNzPVwiY29udGFjdEZvcm1fX3RpdGxlXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJ0ZXh0Q29sb3JzPy50aXRsZVwiXG4gICAgICAgICAgICBbY29udGVudF09XCJ0aXRsZVwiXG4gICAgICAgID48L2xpYi1wdXJvLWR5bmFtaWMtaGVhZGluZz5cbiAgICB9IC0tPlxuXG4gICAgPGRpdiBjbGFzcz1cImNvbnRhY3RGb3JtX19pbm5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdEZvcm1fX2dyYXBoaWNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0Rm9ybV9fZ3JhcGhpY0lubmVyXCI+XG4gICAgICAgICAgICAgICAgQGlmIChpbWcpIHtcbiAgICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJpbWcuc3JjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthbHRdPVwiaW1nLmFsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjQ2N1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCI1NTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb250YWN0Rm9ybV9fZ3JhcGhpY0lubmVyLS1pbWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZz1cImxhenlcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdEZvcm1fX2NvbnRlbnRcIj5cbiAgICAgICAgICAgIEBpZiAodGl0bGUpIHtcbiAgICAgICAgICAgICAgICA8bGliLXB1cm8tZHluYW1pYy1oZWFkaW5nXG4gICAgICAgICAgICAgICAgICAgIFt0YWddPVwidGFncz8udGl0bGUgfHwgJ3NwYW4nXCJcbiAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3M9XCJjb250YWN0Rm9ybV9fdGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwidGV4dENvbG9ycz8udGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICBbY29udGVudF09XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgPjwvbGliLXB1cm8tZHluYW1pYy1oZWFkaW5nPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChzdWJ0aXRsZSkge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb250YWN0Rm9ybV9fcGFyYWdyYXBoXCJcbiAgICAgICAgICAgICAgICAgICAgW2lubmVySHRtbF09XCJzdWJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGZvcm1SZWFkeSQoKSkge1xuICAgICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiZm9ybVwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIERyb3Bkb3duIDEgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0Rm9ybV9fcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdEZvcm1fX2NvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZHJvcGRvd24gJiYgIWlzSG90ZWxzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtX19ncm91cCB3aXRoSWNvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybV9fY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZHJvcGRvd24ucGxhY2Vob2xkZXIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uIG9mIGRyb3Bkb3duLm9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrICRpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKG9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwib3B0aW9uLmNvZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24ubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbi1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNhYmxlPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiOFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dXNlIGhyZWY9XCIjc2VsZWN0LWFycm93XCI+PC91c2U+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIERyb3Bkb3duIDIgKyBFbWFpbCAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3RGb3JtX19yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0Rm9ybV9fY29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChuZERyb3Bkb3duKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtX19ncm91cCB3aXRoSWNvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybV9fY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmREcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBuZERyb3Bkb3duLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiBvZiBuZERyb3Bkb3duLm9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrICRpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJvcHRpb24uY29kZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24tcmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVzZSBocmVmPVwiI3NlbGVjdC1hcnJvd1wiPjwvdXNlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGVtYWlsSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm1fX2dyb3VwIHdpdGhJY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZW1haWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybV9fY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImVtYWlsSW5wdXQucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJ2YWxpZGF0ZUlucHV0KGVtYWlsSW5wdXQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0Q2hhbmdlKCRldmVudCwgZW1haWxJbnB1dClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbi1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNhYmxlPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVzZSBocmVmPVwiI2VtYWlsXCI+PC91c2U+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZW1haWxJbnB1dD8udmFsaWQgJiYgIWVtYWlsSW5wdXQudmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWVycm9yXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWFpbElucHV0LmVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIE5vbWJyZSB5IEFwZWxsaWRvcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3RGb3JtX19yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0Rm9ybV9fY29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChuYW1lSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm1fX2dyb3VwIHdpdGhJY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtX19jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibmFtZUlucHV0LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJub21icmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlSW5wdXQobmFtZUlucHV0KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImlucHV0Q2hhbmdlKCRldmVudCwgbmFtZUlucHV0KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uLXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c2FibGU9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMThcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dXNlIGhyZWY9XCIjdXNlclwiPjwvdXNlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChuYW1lSW5wdXQ/LnZhbGlkICYmICFuYW1lSW5wdXQudmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWVycm9yXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lSW5wdXQuZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0Rm9ybV9fY29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChzdXJuYW1lSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm1fX2dyb3VwIHdpdGhJY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtX19jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic3VybmFtZUlucHV0LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhcGVsbGlkb3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlSW5wdXQoc3VybmFtZUlucHV0KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dENoYW5nZSgkZXZlbnQsIHN1cm5hbWVJbnB1dClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbi1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNhYmxlPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVzZSBocmVmPVwiI3VzZXJcIj48L3VzZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXJuYW1lSW5wdXQ/LnZhbGlkICYmICFzdXJuYW1lSW5wdXQudmFsaWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1lcnJvclwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VybmFtZUlucHV0LmVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIFByZWZpam8geSBUZWzDqWZvbm8gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0Rm9ybV9fcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb250YWN0Rm9ybV9fY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChwcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm1fX2dyb3VwIHdpdGhJY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXB1cm8tcHJlZml4LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInByZWZpeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwicHJlZml4Lm9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwcmVmaXgucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItcHVyby1wcmVmaXgtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3RGb3JtX19jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHBob25lSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm1fX2dyb3VwIHdpdGhJY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm1fX2NvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwaG9uZUlucHV0LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0ZWxlZm9ub1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwidmFsaWRhdGVJbnB1dChwaG9uZUlucHV0KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dENoYW5nZSgkZXZlbnQsIHBob25lSW5wdXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24tcmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxN1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE3XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1c2UgaHJlZj1cIiNwaG9uZVwiPjwvdXNlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChwaG9uZUlucHV0Py52YWxpZCAmJiAhcGhvbmVJbnB1dC52YWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tZXJyb3JcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBob25lSW5wdXQuZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gTWVuc2FqZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3RGb3JtX19yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0Rm9ybV9fY29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICh0ZXh0YXJlYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybV9fZ3JvdXAgbm8tZG90XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm1fX2NvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJ0ZXh0YXJlYS5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWVuc2FqZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gQ2hlY2tib3hlcyAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3RGb3JtX19yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0Rm9ybV9fY29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJsb2NrLWNoZWNrYm94XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAocmVxdWlyZWRMYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZC1sYWJlbFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRMYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjb25kaXRpb25zTGluaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybV9fY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbmRpdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiOVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCI3XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCIjY2hlY2tib3gtdGlja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC91c2U+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImNvbmRpdGlvbnNMaW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHByb21vdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm1fX2NoZWNrYm94XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwcm9tb3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYm94XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c2FibGU9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiN1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1c2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwiI2NoZWNrYm94LXRpY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdXNlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgcHJvbW90aW9ucyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIEJvdMOzbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bl9fZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChidXR0b24udXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJidXR0b24udXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsaW5rVHlwZV09XCJidXR0b24ubGlua1R5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuX19wcmltYXJ5LS1vdXRsaW5lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImJ1dHRvbi5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN1Ym1pdEZvcm0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgYnV0dG9uLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuX19wcmltYXJ5LS1vdXRsaW5lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJidXR0b24ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXhlY3V0ZUNhcHRjaGEoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGJ1dHRvbi5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZS1jYXB0Y2hhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjY2FwdGNoYVJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NpdGVLZXldPVwic2l0ZUtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwiaW52aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXNvbHZlZCk9XCJvbkNhcHRjaGFSZXNvbHZlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JlLWNhcHRjaGE+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9zZWN0aW9uPlxuIl19
|
|
343
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVyby1jb250YWN0LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHVyby9zcmMvbGliL2NvbXBvbmVudHMvcHVyby1jb250YWN0LWZvcm0vcHVyby1jb250YWN0LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHVyby9zcmMvbGliL2NvbXBvbmVudHMvcHVyby1jb250YWN0LWZvcm0vcHVyby1jb250YWN0LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFDSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxFQUNYLE1BQU0sRUFDTixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUlILFdBQVcsRUFDWCxtQkFBbUIsRUFHbkIsVUFBVSxHQUNiLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFzQixlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFTekQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7O0FBa0IxQyxNQUFNLE9BQU8sd0JBQXdCO0lBc0NqQyxZQUNxQixFQUFlLEVBQ3hCLEdBQXNCO1FBRGIsT0FBRSxHQUFG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QUFyQixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFFSSxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBEZXN0cm95UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBQTEFURk9STV9JRCxcbiAgICBzaWduYWwsXG4gICAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQWJzdHJhY3RDb250cm9sLFxuICAgIEZvcm1CdWlsZGVyLFxuICAgIEZvcm1Hcm91cCxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFZhbGlkYXRpb25FcnJvcnMsXG4gICAgVmFsaWRhdG9yRm4sXG4gICAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgUmVjYXB0Y2hhQ29tcG9uZW50LCBSZWNhcHRjaGFNb2R1bGUgfSBmcm9tICduZy1yZWNhcHRjaGEnO1xuaW1wb3J0IHsgUHVyb0xpbmtUeXBlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQge1xuICAgIFB1cm9CdXR0b25JLFxuICAgIFB1cm9JbWFnZUksXG4gICAgUHVyb0lucHV0SSxcbiAgICBQdXJvVGFnc0ksXG4gICAgUHVyb1RleHRzQ29sb3JzSSxcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBQdXJvRHJvcGRvd25JIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9wdXJvLWRyb3Bkb3duLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQdXJvRHluYW1pY0hlYWRpbmdDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvcHVyby1keW5hbWljLWhlYWRpbmcnO1xuaW1wb3J0IHsgUHVyb1ByZWZpeFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9wdXJvLXByZWZpeC1zZWxlY3QnO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGliLXB1cm8tY29udGFjdC1mb3JtJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgUHVyb0xpbmtUeXBlRGlyZWN0aXZlLFxuICAgICAgICBQdXJvRHluYW1pY0hlYWRpbmdDb21wb25lbnQsXG4gICAgICAgIFB1cm9QcmVmaXhTZWxlY3RDb21wb25lbnQsXG4gICAgICAgIFJlY2FwdGNoYU1vZHVsZSxcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9wdXJvLWNvbnRhY3QtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL3B1cm8tY29udGFjdC1mb3JtLmNvbXBvbmVudC5zY3NzJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUHVyb0NvbnRhY3RGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBAVmlld0NoaWxkKCdjYXB0Y2hhUmVmJykgY2FwdGNoYVJlZiE6IFJlY2FwdGNoYUNvbXBvbmVudDtcblxuICAgIGNhcHRjaGFUb2tlbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgc2l0ZUtleSA9ICc2TGNGOExzc0FBQUFBR0VEVTBBVmJkZDdLQzY0RDZ1eDJQb1ktZDJZJztcblxuICAgIEBJbnB1dCgpIHRpdGxlPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHN1YnRpdGxlPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHByb21vdGlvbnM/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgcmVxdWlyZWRMYWJlbD86IHN0cmluZztcbiAgICBASW5wdXQoKSBpbWc/OiBQdXJvSW1hZ2VJO1xuICAgIEBJbnB1dCgpIGNvbmRpdGlvbnNMaW5rPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHByZWZpeD86IFB1cm9Ecm9wZG93bkk7XG4gICAgQElucHV0KCkgZHJvcGRvd24/OiBQdXJvRHJvcGRvd25JO1xuICAgIEBJbnB1dCgpIG5kRHJvcGRvd24/OiBQdXJvRHJvcGRvd25JO1xuICAgIEBJbnB1dCgpIHRleHRhcmVhPzogUHVyb0lucHV0STtcbiAgICBASW5wdXQoKSBidXR0b24/OiBQdXJvQnV0dG9uSTtcblxuICAgIEBJbnB1dCgpIGVtYWlsSW5wdXQ/OiBQdXJvSW5wdXRJO1xuICAgIEBJbnB1dCgpIG5hbWVJbnB1dD86IFB1cm9JbnB1dEk7XG4gICAgQElucHV0KCkgc3VybmFtZUlucHV0PzogUHVyb0lucHV0STtcbiAgICBASW5wdXQoKSBwaG9uZUlucHV0PzogUHVyb0lucHV0STtcbiAgICBASW5wdXQoKSB0YWdzPzogUHVyb1RhZ3NJO1xuICAgIEBJbnB1dCgpIHRleHRDb2xvcnM/OiBQdXJvVGV4dHNDb2xvcnNJO1xuXG4gICAgQElucHV0KCkgaXNIb3RlbHM/OiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGhvdGVsSUQ/OiBudW1iZXI7XG5cbiAgICBAT3V0cHV0KCkgc3VibWl0Rm9ybVZhbHVlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIGZvcm0hOiBGb3JtR3JvdXA7XG4gICAgZm9ybVJlYWR5JCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gICAgc3VibWl0TWVzc2FnZT86IHN0cmluZztcbiAgICBzdWJtaXRNZXNzYWdlVHlwZT86ICdzdWNjZXNzJyB8ICdlcnJvcic7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICAgICkge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkRm9ybSgpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzSG90ZWxzICYmIHRoaXMuaG90ZWxJRCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBkcm9wZG93bjogdGhpcy5ob3RlbElEIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBkcm9wZG93bkN0cmwgPSB0aGlzLmZvcm0uZ2V0KCdkcm9wZG93bicpO1xuICAgICAgICAgICAgaWYgKGRyb3Bkb3duQ3RybCkge1xuICAgICAgICAgICAgICAgIGRyb3Bkb3duQ3RybC5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgICAgICAgICBkcm9wZG93bkN0cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGV2dWVsdmUgZWwgbm9tYnJlIChvIGxhYmVsKSBkZSBsYSBvcGNpw7NuIHNlbGVjY2lvbmFkYSBlbiB1biBkcm9wZG93biBkYWRvLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0U2VsZWN0ZWREcm9wZG93bk5hbWUoXG4gICAgICAgIGRyb3Bkb3duOiBQdXJvRHJvcGRvd25JIHwgdW5kZWZpbmVkLFxuICAgICAgICBjb250cm9sTmFtZTogc3RyaW5nXG4gICAgKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFkcm9wZG93biB8fCAhQXJyYXkuaXNBcnJheShkcm9wZG93bi5vcHRpb25zKSkgcmV0dXJuICcnO1xuICAgICAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gdGhpcy5mb3JtLmdldChjb250cm9sTmFtZSk/LnZhbHVlO1xuICAgICAgICAvLyBCdXNjYXIgcG9yICdjb2RlJyB5IGNvbXBhcmFyIGNvbiA9PSBwYXJhIHNvcG9ydGFyIHN0cmluZy9udW1iZXJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBkcm9wZG93bi5vcHRpb25zLmZpbmQoXG4gICAgICAgICAgICAob3B0OiBhbnkpID0+IG9wdC5jb2RlID09IHNlbGVjdGVkVmFsdWVcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkICYmIHR5cGVvZiBzZWxlY3RlZC5uYW1lID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBzZWxlY3RlZC5uYW1lXG4gICAgICAgICAgICA6ICcnO1xuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRGb3JtKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb250cm9sczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgLy8gVEVYVEFSRUFcbiAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICBpZiAodGhpcy50ZXh0YXJlYSkge1xuICAgICAgICAgICAgY29udHJvbHNbJ21lbnNhamUnXSA9IFtcbiAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICBVdGlscy5zYWZlVmFsaWRhdG9ycyh0aGlzLnRleHRhcmVhLnZhbGlkYXRvcnMpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgLy8gU0VMRUNUU1xuICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgIGlmICh0aGlzLmRyb3Bkb3duKSBjb250cm9sc1snZHJvcGRvd24nXSA9IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF07XG4gICAgICAgIGlmICh0aGlzLm5kRHJvcGRvd24pIGNvbnRyb2xzWyduZERyb3Bkb3duJ10gPSBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdO1xuICAgICAgICBpZiAodGhpcy5wcmVmaXgpIGNvbnRyb2xzWydwcmVmaXgnXSA9IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF07XG5cbiAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAvLyBJTlBVVFNcbiAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICAvLyBFTUFJTFxuICAgICAgICBpZiAodGhpcy5lbWFpbElucHV0KSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gVXRpbHMuc2FmZVZhbGlkYXRvcnModGhpcy5lbWFpbElucHV0LnZhbGlkYXRvcnMpO1xuICAgICAgICAgICAgY29udHJvbHNbJ2VtYWlsJ10gPSBbXG4gICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgdi5sZW5ndGggPyB2IDogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5PTUJSRVxuICAgICAgICBpZiAodGhpcy5uYW1lSW5wdXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBVdGlscy5zYWZlVmFsaWRhdG9ycyh0aGlzLm5hbWVJbnB1dC52YWxpZGF0b3JzKTtcbiAgICAgICAgICAgIGNvbnRyb2xzWydub21icmUnXSA9IFsnJywgdi5sZW5ndGggPyB2IDogW1ZhbGlkYXRvcnMucmVxdWlyZWRdXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFQRUxMSURPU1xuICAgICAgICBpZiAodGhpcy5zdXJuYW1lSW5wdXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBVdGlscy5zYWZlVmFsaWRhdG9ycyh0aGlzLnN1cm5hbWVJbnB1dC52YWxpZGF0b3JzKTtcbiAgICAgICAgICAgIGNvbnRyb2xzWydhcGVsbGlkb3MnXSA9IFsnJywgdi5sZW5ndGggPyB2IDogW1ZhbGlkYXRvcnMucmVxdWlyZWRdXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRFTMOJRk9OT1xuICAgICAgICBpZiAodGhpcy5waG9uZUlucHV0KSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gVXRpbHMuc2FmZVZhbGlkYXRvcnModGhpcy5waG9uZUlucHV0LnZhbGlkYXRvcnMpO1xuICAgICAgICAgICAgY29udHJvbHNbJ3RlbGVmb25vJ10gPSBbJycsIFsuLi52LCB0aGlzLnBob25lVmFsaWRhdG9yKCldXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgLy8gQ0hFQ0tCT1hFU1xuICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgIGlmICh0aGlzLmNvbmRpdGlvbnNMaW5rKSB7XG4gICAgICAgICAgICBjb250cm9sc1snY29uZGl0aW9ucyddID0gW2ZhbHNlLCBWYWxpZGF0b3JzLnJlcXVpcmVkVHJ1ZV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wcm9tb3Rpb25zKSB7XG4gICAgICAgICAgICBjb250cm9sc1sncHJvbW90aW9ucyddID0gW2ZhbHNlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgLy8gQlVJTEQgRk9STVxuICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoY29udHJvbHMpO1xuICAgICAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbGVhclN1Ym1pdE1lc3NhZ2UoKSk7XG4gICAgICAgIHRoaXMuZm9ybVJlYWR5JC5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHN1Ym1pdEZvcm0oZT86IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGU/LnByZXZlbnREZWZhdWx0Py4oKTtcbiAgICAgICAgdGhpcy5mb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcblxuICAgICAgICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHtcbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXModGhpcy5mb3JtLmNvbnRyb2xzKS5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICAgICAgYy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgICAgICAgYy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHRoaXMuZW1haWxJbnB1dCxcbiAgICAgICAgICAgICAgICB0aGlzLm5hbWVJbnB1dCxcbiAgICAgICAgICAgICAgICB0aGlzLnN1cm5hbWVJbnB1dCxcbiAgICAgICAgICAgICAgICB0aGlzLnBob25lSW5wdXQsXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0YXJlYSxcbiAgICAgICAgICAgIF0uZm9yRWFjaCgoaSkgPT4gaSAmJiB0aGlzLnZhbGlkYXRlSW5wdXQoaSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT2J0ZW5lciBsb3Mgbm9tYnJlcyBkZSBsb3Mgc2VsZWN0cyBkZSBmb3JtYSBlZmljaWVudGVcbiAgICAgICAgY29uc3QgZGF0YVdpdGhOYW1lcyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuZm9ybS52YWx1ZSxcbiAgICAgICAgICAgIGRyb3Bkb3duTmFtZTogdGhpcy5nZXRTZWxlY3RlZERyb3Bkb3duTmFtZShcbiAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duLFxuICAgICAgICAgICAgICAgICdkcm9wZG93bidcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBuZERyb3Bkb3duTmFtZTogdGhpcy5nZXRTZWxlY3RlZERyb3Bkb3duTmFtZShcbiAgICAgICAgICAgICAgICB0aGlzLm5kRHJvcGRvd24sXG4gICAgICAgICAgICAgICAgJ25kRHJvcGRvd24nXG4gICAgICAgICAgICApLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnN1Ym1pdEZvcm1WYWx1ZS5lbWl0KGRhdGFXaXRoTmFtZXMpO1xuICAgICAgICB0aGlzLm5hdmlnYXRlQWZ0ZXJTdWJtaXQoKTtcbiAgICAgICAgdGhpcy5yZXNldEZvcm0oKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZUlucHV0KGlucHV0OiBQdXJvSW5wdXRJKTogdm9pZCB7XG4gICAgICAgIGlmICghaW5wdXQ/Lm5hbWUpIHJldHVybjtcbiAgICAgICAgY29uc3QgY3RybCA9IHRoaXMuZm9ybS5nZXQodGhpcy5nZXRDb250cm9sTmFtZShpbnB1dCkpO1xuICAgICAgICBpZiAoIWN0cmwpIHJldHVybjtcbiAgICAgICAgaW5wdXQudmFsaWQ/LnNldChjdHJsLmVycm9ycyA9PT0gbnVsbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb250cm9sTmFtZShpbnB1dDogUHVyb0lucHV0SSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChpbnB1dCA9PT0gdGhpcy5uYW1lSW5wdXQpIHJldHVybiAnbm9tYnJlJztcbiAgICAgICAgaWYgKGlucHV0ID09PSB0aGlzLnN1cm5hbWVJbnB1dCkgcmV0dXJuICdhcGVsbGlkb3MnO1xuICAgICAgICBpZiAoaW5wdXQgPT09IHRoaXMuZW1haWxJbnB1dCkgcmV0dXJuICdlbWFpbCc7XG4gICAgICAgIGlmIChpbnB1dCA9PT0gdGhpcy5waG9uZUlucHV0KSByZXR1cm4gJ3RlbGVmb25vJztcbiAgICAgICAgaWYgKGlucHV0ID09PSB0aGlzLnRleHRhcmVhKSByZXR1cm4gJ21lbnNhamUnO1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgaW5wdXRDaGFuZ2UoZXZlbnQ6IEV2ZW50LCBpbnB1dDogUHVyb0lucHV0SSk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuXG4gICAgICAgIGlmIChpbnB1dC50eXBlID09PSAndGVsJykge1xuICAgICAgICAgICAgZWwudmFsdWUgPSBlbC52YWx1ZS5yZXBsYWNlKC9bXjAtOStdL2csICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gZWwudmFsdWUudHJpbSgpO1xuICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIGlmIChpbnB1dC5uYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBjdHJsID0gdGhpcy5mb3JtLmdldChpbnB1dC5uYW1lKTtcbiAgICAgICAgICAgIGlmIChjdHJsKSB7XG4gICAgICAgICAgICAgICAgY3RybC5zZXRWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgY3RybC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICAgICAgICAgIGN0cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0Rm9ybSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtPy5yZXNldCh0aGlzLmdldFJlc2V0VmFsdWUoKSk7XG4gICAgICAgIGlmICh0aGlzLnRleHRhcmVhKSB0aGlzLnRleHRhcmVhLnZhbHVlID0gJyc7XG4gICAgICAgIFtcbiAgICAgICAgICAgIHRoaXMuZW1haWxJbnB1dCxcbiAgICAgICAgICAgIHRoaXMubmFtZUlucHV0LFxuICAgICAgICAgICAgdGhpcy5zdXJuYW1lSW5wdXQsXG4gICAgICAgICAgICB0aGlzLnBob25lSW5wdXQsXG4gICAgICAgIF0uZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgICAgICAgaWYgKGkpIGkudmFsdWUgPSAnJztcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC52YWx1ZXModGhpcy5mb3JtLmNvbnRyb2xzKS5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICBjLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgICAgICBjLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSZXNldFZhbHVlKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+IHtcbiAgICAgICAgY29uc3QgcmVzZXRWYWx1ZTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4gPSB7fTtcblxuICAgICAgICBpZiAodGhpcy5kcm9wZG93bikge1xuICAgICAgICAgICAgcmVzZXRWYWx1ZVsnZHJvcGRvd24nXSA9XG4gICAgICAgICAgICAgICAgdGhpcy5pc0hvdGVscyAmJiB0aGlzLmhvdGVsSUQgPyB0aGlzLmhvdGVsSUQgOiAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5uZERyb3Bkb3duKSByZXNldFZhbHVlWyduZERyb3Bkb3duJ10gPSAnJztcbiAgICAgICAgaWYgKHRoaXMucHJlZml4KSByZXNldFZhbHVlWydwcmVmaXgnXSA9ICcnO1xuICAgICAgICBpZiAodGhpcy50ZXh0YXJlYSkgcmVzZXRWYWx1ZVsnbWVuc2FqZSddID0gJyc7XG4gICAgICAgIGlmICh0aGlzLmVtYWlsSW5wdXQpIHJlc2V0VmFsdWVbJ2VtYWlsJ10gPSAnJztcbiAgICAgICAgaWYgKHRoaXMubmFtZUlucHV0KSByZXNldFZhbHVlWydub21icmUnXSA9ICcnO1xuICAgICAgICBpZiAodGhpcy5zdXJuYW1lSW5wdXQpIHJlc2V0VmFsdWVbJ2FwZWxsaWRvcyddID0gJyc7XG4gICAgICAgIGlmICh0aGlzLnBob25lSW5wdXQpIHJlc2V0VmFsdWVbJ3RlbGVmb25vJ10gPSAnJztcbiAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uc0xpbmspIHJlc2V0VmFsdWVbJ2NvbmRpdGlvbnMnXSA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5wcm9tb3Rpb25zKSByZXNldFZhbHVlWydwcm9tb3Rpb25zJ10gPSBmYWxzZTtcblxuICAgICAgICByZXR1cm4gcmVzZXRWYWx1ZTtcbiAgICB9XG5cbiAgICBzZXRTdWJtaXRNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZywgdHlwZTogJ3N1Y2Nlc3MnIHwgJ2Vycm9yJyk6IHZvaWQge1xuICAgICAgICB0aGlzLnN1Ym1pdE1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICB0aGlzLnN1Ym1pdE1lc3NhZ2VUeXBlID0gdHlwZTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgY2xlYXJTdWJtaXRNZXNzYWdlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc3VibWl0TWVzc2FnZSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuc3VibWl0TWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5zdWJtaXRNZXNzYWdlVHlwZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwaG9uZVZhbGlkYXRvcigpOiBWYWxpZGF0b3JGbiB7XG4gICAgICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgICAgICAgaWYgKCFjb250cm9sLnZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IHBob25lUmVnZXggPSAvXig/OlsrIF0/KVtcXGQgLV17NywxNX0kLztcbiAgICAgICAgICAgIHJldHVybiBwaG9uZVJlZ2V4LnRlc3QoY29udHJvbC52YWx1ZSlcbiAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICA6IHsgaW52YWxpZFBob25lOiB0cnVlIH07XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZXhlY3V0ZUNhcHRjaGEoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkge1xuICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLmZvcm0uY29udHJvbHMpLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICAgICAgICBjLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYXB0Y2hhUmVmLmV4ZWN1dGUoKTtcbiAgICB9XG5cbiAgICBvbkNhcHRjaGFSZXNvbHZlZCh0b2tlbjogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRva2VuKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5jYXB0Y2hhVG9rZW4gPSB0b2tlbjtcblxuICAgICAgICBjb25zdCBkYXRhV2l0aE5hbWVzID0ge1xuICAgICAgICAgICAgLi4udGhpcy5mb3JtLnZhbHVlLFxuICAgICAgICAgICAgY2FwdGNoYTogdG9rZW4sXG4gICAgICAgICAgICBkcm9wZG93bk5hbWU6IHRoaXMuZ2V0U2VsZWN0ZWREcm9wZG93bk5hbWUoXG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bixcbiAgICAgICAgICAgICAgICAnZHJvcGRvd24nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgbmREcm9wZG93bk5hbWU6IHRoaXMuZ2V0U2VsZWN0ZWREcm9wZG93bk5hbWUoXG4gICAgICAgICAgICAgICAgdGhpcy5uZERyb3Bkb3duLFxuICAgICAgICAgICAgICAgICduZERyb3Bkb3duJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnN1Ym1pdEZvcm1WYWx1ZS5lbWl0KGRhdGFXaXRoTmFtZXMpO1xuICAgICAgICB0aGlzLnJlc2V0Rm9ybSgpO1xuXG4gICAgICAgIC8vIHJlc2V0IGNhcHRjaGEgcGFyYSBmdXR1cm9zIGVudsOtb3NcbiAgICAgICAgdGhpcy5jYXB0Y2hhUmVmLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBuYXZpZ2F0ZUFmdGVyU3VibWl0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcblxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmJ1dHRvbj8udXJsO1xuICAgICAgICBjb25zdCB0eXBlID0gdGhpcy5idXR0b24/LmxpbmtUeXBlO1xuXG4gICAgICAgIGlmICghdXJsIHx8ICF0eXBlKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICdpbnRlcm5hbCcgfHwgdHlwZSA9PT0gJ2ludGVybmFsX2xpbmsnKSB7XG4gICAgICAgICAgICAvLyBuYXZlZ2FjacOzbiBTUEFcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGV4dGVybmFsXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxzZWN0aW9uIGNsYXNzPVwiY29udGFjdEZvcm0gZ2VuZXJhbE1hcmdpblwiPlxuICAgIDwhLS0gQGlmICh0aXRsZSkge1xuICAgICAgICA8bGliLXB1cm8tZHluYW1pYy1oZWFkaW5nXG4gICAgICAgICAgICBbdGFnXT1cInRhZ3M/LnRpdGxlIHx8ICdzcGFuJ1wiXG4gICAgICAgICAgICBjc3NDbGFzcz1cImNvbnRhY3RGb3JtX190aXRsZVwiXG4gICAgICAgICAgICBbY29sb3JdPVwidGV4dENvbG9ycz8udGl0bGVcIlxuICAgICAgICAgICAgW2NvbnRlbnRdPVwidGl0bGVcIlxuICAgICAgICA+PC9saWItcHVyby1keW5hbWljLWhlYWRpbmc+XG4gICAgfSAtLT5cblxuICAgIDxkaXYgY2xhc3M9XCJjb250YWN0Rm9ybV9faW5uZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3RGb3JtX19ncmFwaGljXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdEZvcm1fX2dyYXBoaWNJbm5lclwiPlxuICAgICAgICAgICAgICAgIEBpZiAoaW1nKSB7XG4gICAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiaW1nLnNyY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWx0XT1cImltZy5hbHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCI0NjdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiNTUxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29udGFjdEZvcm1fX2dyYXBoaWNJbm5lci0taW1nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmc9XCJsYXp5XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3RGb3JtX19jb250ZW50XCI+XG4gICAgICAgICAgICBAaWYgKHRpdGxlKSB7XG4gICAgICAgICAgICAgICAgPGxpYi1wdXJvLWR5bmFtaWMtaGVhZGluZ1xuICAgICAgICAgICAgICAgICAgICBbdGFnXT1cInRhZ3M/LnRpdGxlIHx8ICdzcGFuJ1wiXG4gICAgICAgICAgICAgICAgICAgIGNzc0NsYXNzPVwiY29udGFjdEZvcm1fX3RpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cInRleHRDb2xvcnM/LnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwidGl0bGVcIlxuICAgICAgICAgICAgICAgID48L2xpYi1wdXJvLWR5bmFtaWMtaGVhZGluZz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoc3VidGl0bGUpIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29udGFjdEZvcm1fX3BhcmFncmFwaFwiXG4gICAgICAgICAgICAgICAgICAgIFtpbm5lckh0bWxdPVwic3VidGl0bGVcIlxuICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChmb3JtUmVhZHkkKCkpIHtcbiAgICAgICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cImZvcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBEcm9wZG93biAxIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdEZvcm1fX3Jvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3RGb3JtX19jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGRyb3Bkb3duICYmICFpc0hvdGVscykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybV9fZ3JvdXAgd2l0aEljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm1fX2NvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRyb3Bkb3duLnBsYWNlaG9sZGVyIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiBvZiBkcm9wZG93bi5vcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayAkaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChvcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIm9wdGlvbi5jb2RlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24tcmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVzZSBocmVmPVwiI3NlbGVjdC1hcnJvd1wiPjwvdXNlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBEcm9wZG93biAyICsgRW1haWwgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0Rm9ybV9fcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdEZvcm1fX2NvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobmREcm9wZG93bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybV9fZ3JvdXAgd2l0aEljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm1fX2NvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5kRHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbmREcm9wZG93bi50aXRsZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24gb2YgbmREcm9wZG93bi5vcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayAkaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwib3B0aW9uLmNvZGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbi5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uLXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c2FibGU9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCI4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1c2UgaHJlZj1cIiNzZWxlY3QtYXJyb3dcIj48L3VzZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChlbWFpbElucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtX19ncm91cCB3aXRoSWNvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImVtYWlsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm1fX2NvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJlbWFpbElucHV0LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwidmFsaWRhdGVJbnB1dChlbWFpbElucHV0KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dENoYW5nZSgkZXZlbnQsIGVtYWlsSW5wdXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24tcmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxOVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1c2UgaHJlZj1cIiNlbWFpbFwiPjwvdXNlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGVtYWlsSW5wdXQ/LnZhbGlkICYmICFlbWFpbElucHV0LnZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1lcnJvclwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1haWxJbnB1dC5lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBOb21icmUgeSBBcGVsbGlkb3MgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0Rm9ybV9fcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdEZvcm1fX2NvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobmFtZUlucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtX19ncm91cCB3aXRoSWNvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybV9fY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIm5hbWVJbnB1dC5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibm9tYnJlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJ2YWxpZGF0ZUlucHV0KG5hbWVJbnB1dClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJpbnB1dENoYW5nZSgkZXZlbnQsIG5hbWVJbnB1dClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbi1yaWdodFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNhYmxlPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVzZSBocmVmPVwiI3VzZXJcIj48L3VzZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobmFtZUlucHV0Py52YWxpZCAmJiAhbmFtZUlucHV0LnZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9ybS1lcnJvclwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZUlucHV0LmVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdEZvcm1fX2NvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc3VybmFtZUlucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtX19ncm91cCB3aXRoSWNvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybV9fY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInN1cm5hbWVJbnB1dC5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYXBlbGxpZG9zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJ2YWxpZGF0ZUlucHV0KHN1cm5hbWVJbnB1dClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDaGFuZ2UoJGV2ZW50LCBzdXJuYW1lSW5wdXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24tcmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxOFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1c2UgaHJlZj1cIiN1c2VyXCI+PC91c2U+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VybmFtZUlucHV0Py52YWxpZCAmJiAhc3VybmFtZUlucHV0LnZhbGlkKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tZXJyb3JcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cm5hbWVJbnB1dC5lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBQcmVmaWpvIHkgVGVsw6lmb25vIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdEZvcm1fX3Jvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29udGFjdEZvcm1fX2NvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAocHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtX19ncm91cCB3aXRoSWNvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1wdXJvLXByZWZpeC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwcmVmaXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInByZWZpeC5vcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicHJlZml4LnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLXB1cm8tcHJlZml4LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0Rm9ybV9fY29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChwaG9uZUlucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtX19ncm91cCB3aXRoSWNvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtX19jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGhvbmVJbnB1dC5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGVsZWZvbm9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cInZhbGlkYXRlSW5wdXQocGhvbmVJbnB1dClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDaGFuZ2UoJGV2ZW50LCBwaG9uZUlucHV0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uLXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c2FibGU9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxN1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dXNlIGhyZWY9XCIjcGhvbmVcIj48L3VzZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAocGhvbmVJbnB1dD8udmFsaWQgJiYgIXBob25lSW5wdXQudmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWVycm9yXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaG9uZUlucHV0LmVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIE1lbnNhamUgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0Rm9ybV9fcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdEZvcm1fX2NvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAodGV4dGFyZWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm1fX2dyb3VwIG5vLWRvdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtX19jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwidGV4dGFyZWEucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1lbnNhamVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIENoZWNrYm94ZXMgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0Rm9ybV9fcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdEZvcm1fX2NvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJibG9jay1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHJlcXVpcmVkTGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVxdWlyZWQtbGFiZWxcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkTGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY29uZGl0aW9uc0xpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm1fX2NoZWNrYm94XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb25kaXRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYm94XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c2FibGU9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiN1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1c2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwiI2NoZWNrYm94LXRpY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdXNlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJjb25kaXRpb25zTGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChwcm9tb3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtX19jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHJvbW90aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNhYmxlPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCI5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dXNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj1cIiNjaGVja2JveC10aWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3VzZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IHByb21vdGlvbnMgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBCb3TDs24gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG5fX2dyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGJ1dHRvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYnV0dG9uLnVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwiYnV0dG9uLnVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlua1R5cGVdPVwiYnV0dG9uLmxpbmtUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bl9fcHJpbWFyeS0tb3V0bGluZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJidXR0b24ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzdWJtaXRGb3JtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGJ1dHRvbi5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bl9fcHJpbWFyeS0tb3V0bGluZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYnV0dG9uLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImV4ZWN1dGVDYXB0Y2hhKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBidXR0b24ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPHJlLWNhcHRjaGFcbiAgICAgICAgICAgICAgICAgICAgICAgICNjYXB0Y2hhUmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2l0ZUtleV09XCJzaXRlS2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJpbnZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHJlc29sdmVkKT1cIm9uQ2FwdGNoYVJlc29sdmVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvcmUtY2FwdGNoYT5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIEBpZiAoc3VibWl0TWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmVlZGJhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mb3JtLXN1Y2Nlc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdE1lc3NhZ2VUeXBlID09PSAnc3VjY2VzcydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mb3JtLWVycm9yXT1cInN1Ym1pdE1lc3NhZ2VUeXBlID09PSAnZXJyb3InXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzdWJtaXRNZXNzYWdlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9zZWN0aW9uPlxuIl19
|