ng-easycommerce-v18 0.6.18 → 0.6.19

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/README.md CHANGED
@@ -1,3 +1,12 @@
1
+ # Version 0.6.19
2
+ - Forgot password: el submit pasa de `input` a `button`, muestra `app-loading-inline-ec` durante la petición y queda deshabilitado mientras `loading` está activo o el formulario es inválido.
3
+ - Forgot password: `recoverPassword(...)` agrega guard clause para cortar submits duplicados o inválidos y marca el formulario como tocado antes de salir.
4
+ - Register form: se incorpora `FormService` para exponer `countries$`, `provinces$` y `documentTypes$` y preparar formularios de registro con datos extendidos.
5
+ - Register form: se amplía `registerForm` con campos opcionales compatibles con `/register` (`birthday`, `gender`, `phoneNumber`, documento, domicilio, empresa y contacto) manteniendo compatibilidad con el registro simple existente.
6
+ - Register form: el alta envía un payload normalizado desde `buildRegisterPayload()`, mapeando `phone -> phoneNumber`, `newsletter -> subscribedToNewsletter`, eliminando campos internos (`terms`, `plainPassword2`) y omitiendo valores vacíos antes de llamar a `singUp(...)`.
7
+ - Register form: se agregan handlers `onCountrySelected(...)` y `onProvincesSelected(...)` para sincronizar país/provincia y persistir `provinceName`/`provinceCode` en el payload.
8
+ - Cart item: la marca de descuento sólo se renderiza cuando `saleprice` existe y además es menor al `price` original, evitando badges falsos cuando ambos importes son iguales o inválidos.
9
+ - Cart item: `createDiscountMessage(...)` endurece la validación de precios y sólo devuelve `"% OFF"` cuando el porcentaje calculado es finito y positivo.
1
10
  # Version 0.6.18
2
11
  - Checkout: se agrega `channelReady` en `CheckoutEcComponent` para evitar que el checkout se renderice durante SSR. El flag solo pasa a `true` en el browser, una vez que `channel$` emite la configuración del canal, garantizando que `checkoutView` ya tenga el valor correcto antes de renderizar. Esto elimina el hydration mismatch que causaba que el checkout legacy apareciera aleatoriamente cuando el canal tenía configurado el single.
3
12
  - Checkout single: al completarse los 3 pasos y habilitarse el botón de finalizar pedido, se ejecuta un scroll suave al inicio de la página (`window.scrollTo({ top: 0, behavior: 'smooth' })`). El scroll solo ocurre una vez por transición "no listos → todos listos" y se reinicia si el usuario edita algún paso.
@@ -46,6 +46,10 @@ export class ForgotPasswordEcComponent {
46
46
  */
47
47
  recoverPassword = (event) => {
48
48
  event.preventDefault();
49
+ if (this.loading || this.form.invalid) {
50
+ this.form.markAllAsTouched();
51
+ return;
52
+ }
49
53
  this.loading = true;
50
54
  firstValueFrom(this._authService.recoverPassword(this.form.value.email))
51
55
  .then((res) => {
@@ -57,10 +61,10 @@ export class ForgotPasswordEcComponent {
57
61
  }).finally(() => this.loading = false);
58
62
  };
59
63
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ForgotPasswordEcComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
60
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ForgotPasswordEcComponent, isStandalone: true, selector: "app-forgot-password-ec", ngImport: i0, template: "\n<!-- CONTENIDO -->\n @if(!ready){\n<section class=\"container-fluid mb-3 py-3 py-md-4 bloqueContact\">\n <div class=\"container-xl\">\n <div class=\"row\">\n\n <div class=\"col-12 col-md-8 col-lg-5 m-auto recuperar mt-5\">\n <h2 class=\"fw-600 mt-0 mb-4\">{{ 'recover-password' | translate\n }}</h2>\n <form [formGroup]=\"form\" (submit)=\"recoverPassword($event)\" class=\"mt-0\">\n\n <label for=\"nombre\">{{ 'set-forgot-email' | translate }}</label>\n <input class=\"form-control\" formControlName=\"email\" type='email' name='nombre' id=\"nombre\" value='' placeholder=''>\n\n <div class=\"contSend mt-4\">\n <input class=\"comprar\" type=\"submit\" [disabled]=\"form.invalid\" name='' value='ENVIAR' placeholder=''>\n </div>\n\n </form>\n </div>\n\n </div>\n </div>\n</section>\n} @else {\n <div class=\"row d-flex justify-content-center py-5 \">\n <div class=\"col-12 col-md-8 my-5\">\n <div class=\"element-container text-center\">\n <h3>{{ 'mail-sent' | translate }}</h3>\n </div>\n <div class=\"element-container text-center\">\n <h5 class=\"center-text\">{{ 'check-your-email' | translate }}</h5>\n </div>\n </div>\n </div>\n }\n", styles: [""], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
64
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ForgotPasswordEcComponent, isStandalone: true, selector: "app-forgot-password-ec", ngImport: i0, template: "\n<!-- CONTENIDO -->\n @if(!ready){\n<section class=\"container-fluid mb-3 py-3 py-md-4 bloqueContact\">\n <div class=\"container-xl\">\n <div class=\"row\">\n\n <div class=\"col-12 col-md-8 col-lg-5 m-auto recuperar mt-5\">\n <h2 class=\"fw-600 mt-0 mb-4\">{{ 'recover-password' | translate\n }}</h2>\n <form [formGroup]=\"form\" (submit)=\"recoverPassword($event)\" class=\"mt-0\">\n\n <label for=\"nombre\">{{ 'set-forgot-email' | translate }}</label>\n <input class=\"form-control\" formControlName=\"email\" type='email' name='nombre' id=\"nombre\" value='' placeholder=''>\n\n <div class=\"contSend mt-4\">\n <button class=\"comprar d-inline-flex align-items-center justify-content-center gap-2\" type=\"submit\" [disabled]=\"form.invalid || loading\">\n @if (!loading) {\n <span>ENVIAR</span>\n } @else {\n <app-loading-inline-ec />\n }\n </button>\n </div>\n\n </form>\n </div>\n\n </div>\n </div>\n</section>\n} @else {\n <div class=\"row d-flex justify-content-center py-5 \">\n <div class=\"col-12 col-md-8 my-5\">\n <div class=\"element-container text-center\">\n <h3>{{ 'mail-sent' | translate }}</h3>\n </div>\n <div class=\"element-container text-center\">\n <h5 class=\"center-text\">{{ 'check-your-email' | translate }}</h5>\n </div>\n </div>\n </div>\n }\n", styles: [""], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: LoadingInlineEcComponent, selector: "app-loading-inline-ec", inputs: ["type"] }] });
61
65
  }
62
66
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ForgotPasswordEcComponent, decorators: [{
63
67
  type: Component,
64
- args: [{ selector: 'app-forgot-password-ec', standalone: true, imports: [TranslateModule, ReactiveFormsModule, LoadingInlineEcComponent], template: "\n<!-- CONTENIDO -->\n @if(!ready){\n<section class=\"container-fluid mb-3 py-3 py-md-4 bloqueContact\">\n <div class=\"container-xl\">\n <div class=\"row\">\n\n <div class=\"col-12 col-md-8 col-lg-5 m-auto recuperar mt-5\">\n <h2 class=\"fw-600 mt-0 mb-4\">{{ 'recover-password' | translate\n }}</h2>\n <form [formGroup]=\"form\" (submit)=\"recoverPassword($event)\" class=\"mt-0\">\n\n <label for=\"nombre\">{{ 'set-forgot-email' | translate }}</label>\n <input class=\"form-control\" formControlName=\"email\" type='email' name='nombre' id=\"nombre\" value='' placeholder=''>\n\n <div class=\"contSend mt-4\">\n <input class=\"comprar\" type=\"submit\" [disabled]=\"form.invalid\" name='' value='ENVIAR' placeholder=''>\n </div>\n\n </form>\n </div>\n\n </div>\n </div>\n</section>\n} @else {\n <div class=\"row d-flex justify-content-center py-5 \">\n <div class=\"col-12 col-md-8 my-5\">\n <div class=\"element-container text-center\">\n <h3>{{ 'mail-sent' | translate }}</h3>\n </div>\n <div class=\"element-container text-center\">\n <h5 class=\"center-text\">{{ 'check-your-email' | translate }}</h5>\n </div>\n </div>\n </div>\n }\n" }]
68
+ args: [{ selector: 'app-forgot-password-ec', standalone: true, imports: [TranslateModule, ReactiveFormsModule, LoadingInlineEcComponent], template: "\n<!-- CONTENIDO -->\n @if(!ready){\n<section class=\"container-fluid mb-3 py-3 py-md-4 bloqueContact\">\n <div class=\"container-xl\">\n <div class=\"row\">\n\n <div class=\"col-12 col-md-8 col-lg-5 m-auto recuperar mt-5\">\n <h2 class=\"fw-600 mt-0 mb-4\">{{ 'recover-password' | translate\n }}</h2>\n <form [formGroup]=\"form\" (submit)=\"recoverPassword($event)\" class=\"mt-0\">\n\n <label for=\"nombre\">{{ 'set-forgot-email' | translate }}</label>\n <input class=\"form-control\" formControlName=\"email\" type='email' name='nombre' id=\"nombre\" value='' placeholder=''>\n\n <div class=\"contSend mt-4\">\n <button class=\"comprar d-inline-flex align-items-center justify-content-center gap-2\" type=\"submit\" [disabled]=\"form.invalid || loading\">\n @if (!loading) {\n <span>ENVIAR</span>\n } @else {\n <app-loading-inline-ec />\n }\n </button>\n </div>\n\n </form>\n </div>\n\n </div>\n </div>\n</section>\n} @else {\n <div class=\"row d-flex justify-content-center py-5 \">\n <div class=\"col-12 col-md-8 my-5\">\n <div class=\"element-container text-center\">\n <h3>{{ 'mail-sent' | translate }}</h3>\n </div>\n <div class=\"element-container text-center\">\n <h5 class=\"center-text\">{{ 'check-your-email' | translate }}</h5>\n </div>\n </div>\n </div>\n }\n" }]
65
69
  }], ctorParameters: () => [] });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZ290LXBhc3N3b3JkLWVjLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1jb21wb25lbnRzL2F1dGgtZWMvZm9yZ290LXBhc3N3b3JkLWVjL2ZvcmdvdC1wYXNzd29yZC1lYy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9hdXRoLWVjL2ZvcmdvdC1wYXNzd29yZC1lYy9mb3Jnb3QtcGFzc3dvcmQtZWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBYSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFTekMsTUFBTSxPQUFPLHlCQUF5QjtJQUM3QixZQUFZLEdBQWdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoRCxZQUFZLEdBQWdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoRCxhQUFhLEdBQWlCLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNuRCxXQUFXLEdBQWUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdDLE9BQU8sR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsT0FBTyxHQUF5QixNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNyRTs7T0FFRztJQUNJLEtBQUssR0FBWSxLQUFLLENBQUM7SUFDOUI7O09BRUc7SUFDSSxPQUFPLEdBQVksS0FBSyxDQUFDO0lBRWhDOztPQUVHO0lBQ0ksSUFBSSxDQUFXO0lBRXRCO1FBQ0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztZQUNuQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNwRCxDQUFDLENBQUE7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNQLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsMEJBQTBCLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMscUNBQXFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRDs7O09BR0c7SUFDSCxlQUFlLEdBQUcsQ0FBQyxLQUFXLEVBQUUsRUFBRTtRQUNqQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3RFLElBQUksQ0FBQyxDQUFDLEdBQU8sRUFBRSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO1FBQ2xCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQU8sRUFBRSxFQUFFO1lBQ3BCLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDbkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDO2dCQUMvQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFBO0lBQ3hDLENBQUMsQ0FBQTt3R0FsRFcseUJBQXlCOzRGQUF6Qix5QkFBeUIsa0ZDaEJ0QyxxNkNBcUNBLHlERHpCVyxlQUFlLDJGQUFFLG1CQUFtQjs7NEZBSWxDLHlCQUF5QjtrQkFQckMsU0FBUzsrQkFDQyx3QkFBd0IsY0FDdEIsSUFBSSxXQUNQLENBQUMsZUFBZSxFQUFFLG1CQUFtQixFQUFFLHdCQUF3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBMb2FkaW5nSW5saW5lRWNDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vd2lkZ2V0cy1lYy9sb2FkaW5nXCI7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIFNlb1NlcnZpY2UsIFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2VjLXNlcnZpY2VzJztcbmltcG9ydCB7IENvcmVDb25zdGFudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2FwcC1mb3Jnb3QtcGFzc3dvcmQtZWMnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbVHJhbnNsYXRlTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBMb2FkaW5nSW5saW5lRWNDb21wb25lbnRdLFxuXHR0ZW1wbGF0ZVVybDogJy4vZm9yZ290LXBhc3N3b3JkLWVjLmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmw6ICcuL2ZvcmdvdC1wYXNzd29yZC1lYy5jb21wb25lbnQuc2Nzcydcbn0pXG5leHBvcnQgY2xhc3MgRm9yZ290UGFzc3dvcmRFY0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cdHByaXZhdGUgX2Zvcm1CdWlsZGVyOiBGb3JtQnVpbGRlciA9IGluamVjdChGb3JtQnVpbGRlcik7XG5cdHByaXZhdGUgX2F1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XG5cdHByaXZhdGUgX3RvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG5cdHByaXZhdGUgX3Nlb1NlcnZpY2U6IFNlb1NlcnZpY2UgPSBpbmplY3QoU2VvU2VydmljZSk7XG5cdHByaXZhdGUgX3JvdXRlcjogUm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cdHByaXZhdGUgX2NvbnN0czogQ29yZUNvbnN0YW50c1NlcnZpY2UgPSBpbmplY3QoQ29yZUNvbnN0YW50c1NlcnZpY2UpO1xuXHQvKipcblx0ICogUGFyYSBpbmRpY2FybGUgYSBsYSB2aXN0YSBxdWUgc2UgcmVhbGl6byBjb24gZXhpdG8gbGEgcGV0aWNpw7NuXG5cdCAqL1xuXHRwdWJsaWMgcmVhZHk6IGJvb2xlYW4gPSBmYWxzZTtcblx0LyoqXG5cdCAqIFBhcmEgbW9zdHJhciBlbCBzcGlubmVyLlxuXHQgKi9cblx0cHVibGljIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHQvKipcblx0ICogQ29udGllbmUgZWwgZm9ybXVsYXJpby5cblx0ICovXG5cdHB1YmxpYyBmb3JtOkZvcm1Hcm91cDtcblxuXHRjb25zdHJ1Y3Rvcigpe1xuXHRcdHRoaXMuZm9ybSA9IHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwKHtcblx0XHRcdGVtYWlsOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXV0sXG5cdFx0fSlcblx0fVxuXG5cdG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdGNvbnN0IHNpdGVOYW1lID0gdGhpcy5fc2VvU2VydmljZS5nZXRTaXRlTmFtZSgpO1xuXHRcdHRoaXMuX3Nlb1NlcnZpY2Uuc2V0VGl0bGUoYFJlY3VwZXJhciBjb250cmFzZcOxYSB8ICR7c2l0ZU5hbWV9YCk7XG5cdFx0dGhpcy5fc2VvU2VydmljZS5zZXREZXNjcmlwdGlvbihgUmVjdXBlcsOhIGVsIGFjY2VzbyBhIHR1IGN1ZW50YSBlbiAke3NpdGVOYW1lfS5gKTtcblx0XHR0aGlzLl9zZW9TZXJ2aWNlLnNldE9nVHlwZSgnd2Vic2l0ZScpO1xuXHRcdHRoaXMuX3Nlb1NlcnZpY2Uuc2V0Q2Fub25pY2FsKHRoaXMuX2NvbnN0cy5nZXRGcm9udGVuZFVybCgpICsgdGhpcy5fcm91dGVyLnVybCk7XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhIHVuYSBwZXRpY2nDs24gYWwgYmFja2VuZCBwYXJhIHJlY3VwZXJhciBsYSBjb250cmFzZcOxYS5cblx0ICogQHBhcmFtIGV2ZW50IFxuXHQgKi9cblx0cmVjb3ZlclBhc3N3b3JkID0gKGV2ZW50OkV2ZW50KSA9PiB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHR0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXHRcdGZpcnN0VmFsdWVGcm9tKHRoaXMuX2F1dGhTZXJ2aWNlLnJlY292ZXJQYXNzd29yZCh0aGlzLmZvcm0udmFsdWUuZW1haWwpKVxuXHRcdFx0LnRoZW4oKHJlczphbnkpID0+IHtcblx0XHRcdFx0dGhpcy5yZWFkeSA9IHRydWVcblx0XHRcdH0pLmNhdGNoKChyZXM6YW55KSA9PiB7XG5cdFx0XHRcdCghcmVzIHx8IHJlcy5lcnJvcilcblx0XHRcdFx0PyB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnbm9uLWV4aXN0ZW50LWVtYWlsJylcblx0XHRcdFx0OiB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdyhyZXMuZXJyb3IpO1xuXHRcdFx0fSkuZmluYWxseSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSlcblx0fVxufVxuIiwiXG48IS0tIENPTlRFTklETyAtLT5cbiBAaWYoIXJlYWR5KXtcbjxzZWN0aW9uIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIG1iLTMgcHktMyBweS1tZC00IGJsb3F1ZUNvbnRhY3RcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLXhsXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtOCBjb2wtbGctNSBtLWF1dG8gcmVjdXBlcmFyIG10LTVcIj5cbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJmdy02MDAgbXQtMCBtYi00XCI+e3sgJ3JlY292ZXItcGFzc3dvcmQnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgIH19PC9oMj5cbiAgICAgICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAoc3VibWl0KT1cInJlY292ZXJQYXNzd29yZCgkZXZlbnQpXCIgY2xhc3M9XCJtdC0wXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIm5vbWJyZVwiPnt7ICdzZXQtZm9yZ290LWVtYWlsJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCIgdHlwZT0nZW1haWwnIG5hbWU9J25vbWJyZScgaWQ9XCJub21icmVcIiB2YWx1ZT0nJyBwbGFjZWhvbGRlcj0nJz5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udFNlbmQgbXQtNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY29tcHJhclwiIHR5cGU9XCJzdWJtaXRcIiBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCIgbmFtZT0nJyB2YWx1ZT0nRU5WSUFSJyBwbGFjZWhvbGRlcj0nJz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvc2VjdGlvbj5cbn0gQGVsc2Uge1xuICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgcHktNSBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtOCBteS01XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWxlbWVudC1jb250YWluZXIgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8aDM+e3sgJ21haWwtc2VudCcgfCB0cmFuc2xhdGUgfX08L2gzPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWxlbWVudC1jb250YWluZXIgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJjZW50ZXItdGV4dFwiPnt7ICdjaGVjay15b3VyLWVtYWlsJyB8IHRyYW5zbGF0ZSB9fTwvaDU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgfVxuIl19
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZ290LXBhc3N3b3JkLWVjLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWVhc3ljb21tZXJjZS12MTgvc3JjL2xpYi9lYy1jb21wb25lbnRzL2F1dGgtZWMvZm9yZ290LXBhc3N3b3JkLWVjL2ZvcmdvdC1wYXNzd29yZC1lYy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9hdXRoLWVjL2ZvcmdvdC1wYXNzd29yZC1lYy9mb3Jnb3QtcGFzc3dvcmQtZWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBYSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFTekMsTUFBTSxPQUFPLHlCQUF5QjtJQUM3QixZQUFZLEdBQWdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoRCxZQUFZLEdBQWdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoRCxhQUFhLEdBQWlCLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNuRCxXQUFXLEdBQWUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdDLE9BQU8sR0FBVyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsT0FBTyxHQUF5QixNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNyRTs7T0FFRztJQUNJLEtBQUssR0FBWSxLQUFLLENBQUM7SUFDOUI7O09BRUc7SUFDSSxPQUFPLEdBQVksS0FBSyxDQUFDO0lBRWhDOztPQUVHO0lBQ0ksSUFBSSxDQUFXO0lBRXRCO1FBQ0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztZQUNuQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNwRCxDQUFDLENBQUE7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNQLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsMEJBQTBCLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMscUNBQXFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRDs7O09BR0c7SUFDSCxlQUFlLEdBQUcsQ0FBQyxLQUFXLEVBQUUsRUFBRTtRQUNqQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzdCLE9BQU87UUFDUixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3RFLElBQUksQ0FBQyxDQUFDLEdBQU8sRUFBRSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO1FBQ2xCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQU8sRUFBRSxFQUFFO1lBQ3BCLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDbkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDO2dCQUMvQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFBO0lBQ3hDLENBQUMsQ0FBQTt3R0F0RFcseUJBQXlCOzRGQUF6Qix5QkFBeUIsa0ZDaEJ0Qyx3c0RBMkNBLHlERC9CVyxlQUFlLDJGQUFFLG1CQUFtQiw2OEJBQUUsd0JBQXdCOzs0RkFJNUQseUJBQXlCO2tCQVByQyxTQUFTOytCQUNDLHdCQUF3QixjQUN0QixJQUFJLFdBQ1AsQ0FBQyxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IExvYWRpbmdJbmxpbmVFY0NvbXBvbmVudCB9IGZyb20gXCIuLi8uLi93aWRnZXRzLWVjL2xvYWRpbmdcIjtcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSwgU2VvU2VydmljZSwgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZWMtc2VydmljZXMnO1xuaW1wb3J0IHsgQ29yZUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnYXBwLWZvcmdvdC1wYXNzd29yZC1lYycsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGltcG9ydHM6IFtUcmFuc2xhdGVNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIExvYWRpbmdJbmxpbmVFY0NvbXBvbmVudF0sXG5cdHRlbXBsYXRlVXJsOiAnLi9mb3Jnb3QtcGFzc3dvcmQtZWMuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybDogJy4vZm9yZ290LXBhc3N3b3JkLWVjLmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBGb3Jnb3RQYXNzd29yZEVjQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblx0cHJpdmF0ZSBfZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcblx0cHJpdmF0ZSBfYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UgPSBpbmplY3QoVG9hc3RTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfc2VvU2VydmljZTogU2VvU2VydmljZSA9IGluamVjdChTZW9TZXJ2aWNlKTtcblx0cHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblx0cHJpdmF0ZSBfY29uc3RzOiBDb3JlQ29uc3RhbnRzU2VydmljZSA9IGluamVjdChDb3JlQ29uc3RhbnRzU2VydmljZSk7XG5cdC8qKlxuXHQgKiBQYXJhIGluZGljYXJsZSBhIGxhIHZpc3RhIHF1ZSBzZSByZWFsaXpvIGNvbiBleGl0byBsYSBwZXRpY2nDs25cblx0ICovXG5cdHB1YmxpYyByZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xuXHQvKipcblx0ICogUGFyYSBtb3N0cmFyIGVsIHNwaW5uZXIuXG5cdCAqL1xuXHRwdWJsaWMgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBDb250aWVuZSBlbCBmb3JtdWxhcmlvLlxuXHQgKi9cblx0cHVibGljIGZvcm06Rm9ybUdyb3VwO1xuXG5cdGNvbnN0cnVjdG9yKCl7XG5cdFx0dGhpcy5mb3JtID0gdGhpcy5fZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuXHRcdFx0ZW1haWw6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdXSxcblx0XHR9KVxuXHR9XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0Y29uc3Qgc2l0ZU5hbWUgPSB0aGlzLl9zZW9TZXJ2aWNlLmdldFNpdGVOYW1lKCk7XG5cdFx0dGhpcy5fc2VvU2VydmljZS5zZXRUaXRsZShgUmVjdXBlcmFyIGNvbnRyYXNlw7FhIHwgJHtzaXRlTmFtZX1gKTtcblx0XHR0aGlzLl9zZW9TZXJ2aWNlLnNldERlc2NyaXB0aW9uKGBSZWN1cGVyw6EgZWwgYWNjZXNvIGEgdHUgY3VlbnRhIGVuICR7c2l0ZU5hbWV9LmApO1xuXHRcdHRoaXMuX3Nlb1NlcnZpY2Uuc2V0T2dUeXBlKCd3ZWJzaXRlJyk7XG5cdFx0dGhpcy5fc2VvU2VydmljZS5zZXRDYW5vbmljYWwodGhpcy5fY29uc3RzLmdldEZyb250ZW5kVXJsKCkgKyB0aGlzLl9yb3V0ZXIudXJsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmEgdW5hIHBldGljacOzbiBhbCBiYWNrZW5kIHBhcmEgcmVjdXBlcmFyIGxhIGNvbnRyYXNlw7FhLlxuXHQgKiBAcGFyYW0gZXZlbnQgXG5cdCAqL1xuXHRyZWNvdmVyUGFzc3dvcmQgPSAoZXZlbnQ6RXZlbnQpID0+IHtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdGlmICh0aGlzLmxvYWRpbmcgfHwgdGhpcy5mb3JtLmludmFsaWQpIHtcblx0XHRcdHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMubG9hZGluZyA9IHRydWU7XG5cdFx0Zmlyc3RWYWx1ZUZyb20odGhpcy5fYXV0aFNlcnZpY2UucmVjb3ZlclBhc3N3b3JkKHRoaXMuZm9ybS52YWx1ZS5lbWFpbCkpXG5cdFx0XHQudGhlbigocmVzOmFueSkgPT4ge1xuXHRcdFx0XHR0aGlzLnJlYWR5ID0gdHJ1ZVxuXHRcdFx0fSkuY2F0Y2goKHJlczphbnkpID0+IHtcblx0XHRcdFx0KCFyZXMgfHwgcmVzLmVycm9yKVxuXHRcdFx0XHQ/IHRoaXMuX3RvYXN0U2VydmljZS5zaG93KCdub24tZXhpc3RlbnQtZW1haWwnKVxuXHRcdFx0XHQ6IHRoaXMuX3RvYXN0U2VydmljZS5zaG93KHJlcy5lcnJvcik7XG5cdFx0XHR9KS5maW5hbGx5KCgpID0+IHRoaXMubG9hZGluZyA9IGZhbHNlKVxuXHR9XG59XG4iLCJcbjwhLS0gQ09OVEVOSURPIC0tPlxuIEBpZighcmVhZHkpe1xuPHNlY3Rpb24gY2xhc3M9XCJjb250YWluZXItZmx1aWQgbWItMyBweS0zIHB5LW1kLTQgYmxvcXVlQ29udGFjdFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXIteGxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC04IGNvbC1sZy01IG0tYXV0byByZWN1cGVyYXIgbXQtNVwiPlxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cImZ3LTYwMCBtdC0wIG1iLTRcIj57eyAncmVjb3Zlci1wYXNzd29yZCcgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgfX08L2gyPlxuICAgICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChzdWJtaXQpPVwicmVjb3ZlclBhc3N3b3JkKCRldmVudClcIiBjbGFzcz1cIm10LTBcIj5cblxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibm9tYnJlXCI+e3sgJ3NldC1mb3Jnb3QtZW1haWwnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIiB0eXBlPSdlbWFpbCcgbmFtZT0nbm9tYnJlJyBpZD1cIm5vbWJyZVwiIHZhbHVlPScnIHBsYWNlaG9sZGVyPScnPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250U2VuZCBtdC00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29tcHJhciBkLWlubGluZS1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0yXCIgdHlwZT1cInN1Ym1pdFwiIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWQgfHwgbG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5FTlZJQVI8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1sb2FkaW5nLWlubGluZS1lYyAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9zZWN0aW9uPlxufSBAZWxzZSB7XG4gICAgPGRpdiBjbGFzcz1cInJvdyBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBweS01IFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC04IG15LTVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbGVtZW50LWNvbnRhaW5lciB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxoMz57eyAnbWFpbC1zZW50JyB8IHRyYW5zbGF0ZSB9fTwvaDM+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbGVtZW50LWNvbnRhaW5lciB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cImNlbnRlci10ZXh0XCI+e3sgJ2NoZWNrLXlvdXItZW1haWwnIHwgdHJhbnNsYXRlIH19PC9oNT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICB9XG4iXX0=
@@ -1,8 +1,8 @@
1
1
  import { Component, EventEmitter, inject, Input, Output } from '@angular/core';
2
- import { AnalyticsService, AuthService, SeoService, ToastService } from '../../../ec-services';
2
+ import { AnalyticsService, AuthService, SeoService, FormService, ToastService } from '../../../ec-services';
3
3
  import { Router } from '@angular/router';
4
4
  import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';
5
- import { LoadingSectionEcComponent } from "../../widgets-ec/loading";
5
+ import { LoadingSectionEcComponent } from '../../widgets-ec/loading';
6
6
  import { firstValueFrom } from 'rxjs';
7
7
  import { ChannelService } from '../../../ec-services';
8
8
  import { CoreConstantsService } from '../../../constants';
@@ -14,6 +14,7 @@ export class RegisterFormEcComponent {
14
14
  _router = inject(Router);
15
15
  _analyticsService = inject(AnalyticsService);
16
16
  _formBuilder = inject(FormBuilder);
17
+ _formService = inject(FormService);
17
18
  channelConfigService = inject(ChannelService);
18
19
  _seoService = inject(SeoService);
19
20
  _consts = inject(CoreConstantsService);
@@ -26,6 +27,18 @@ export class RegisterFormEcComponent {
26
27
  * Para que se puede capturar el estado de la petición de registro.
27
28
  */
28
29
  ready = new EventEmitter();
30
+ /**
31
+ * Contiene los paises y sus datos
32
+ */
33
+ countries$ = this._formService.getCountriesData();
34
+ /**
35
+ * Contiene las provincias
36
+ */
37
+ provinces$ = this._formService.provinces$;
38
+ /**
39
+ * Contiene los tipos de documentos.
40
+ */
41
+ documentTypes$ = this._formService.documentTypes$;
29
42
  /**
30
43
  * Contiene el formulario de registro.
31
44
  */
@@ -35,9 +48,32 @@ export class RegisterFormEcComponent {
35
48
  email: ['', [Validators.required, Validators.email]],
36
49
  plainPassword: ['', Validators.required],
37
50
  plainPassword2: ['', Validators.required],
38
- phone: ['',],
51
+ // Legacy/simple fields
52
+ phone: [''],
39
53
  newsletter: [''],
40
54
  terms: ['', Validators.requiredTrue],
55
+ // Optional extended fields for /register endpoint
56
+ birthday: [''],
57
+ gender: [''],
58
+ phoneNumber: ['', [Validators.pattern('^\\+?[0-9()\\-\\s]+$')]],
59
+ subscribedToNewsletter: [false],
60
+ documentType: [''],
61
+ documentNumber: [''],
62
+ countryCode: [null],
63
+ street: [''],
64
+ city: [''],
65
+ postcode: [''],
66
+ provinceName: [''],
67
+ provinceCode: [null],
68
+ legalDenomination: [''],
69
+ companyName: [''],
70
+ comments: [''],
71
+ contactFirstName: [''],
72
+ contactLastName: [''],
73
+ contactCompanyPosition: [''],
74
+ contactEmail: [''],
75
+ contactDocumentType: [''],
76
+ contactDocumentNumber: ['']
41
77
  }, { validators: this.passwordMatchValidator });
42
78
  register_loading;
43
79
  passwordMatchValidator(group) {
@@ -70,69 +106,104 @@ export class RegisterFormEcComponent {
70
106
  return;
71
107
  }
72
108
  this.loading = true;
73
- // console.log('registerForm', this.registerForm);
74
109
  if (!this.registerForm.valid) {
75
110
  this._toastService.show('fields-incomplete');
76
111
  this.loading = false;
77
112
  return;
78
113
  }
79
- ;
80
114
  if (this.registerForm.value.plainPassword != this.registerForm.value.plainPassword2) {
81
115
  this._toastService.show('mismatched-password');
82
116
  this.loading = false;
83
117
  return;
84
118
  }
85
- if (this.registerForm.valid) {
86
- const channel = await firstValueFrom(this.channelConfigService.channel$);
87
- const isAccountVerificationRequired = !!channel?.isAccountVerificationRequired;
88
- const isSendWelcomeEmail = !!channel?.isSendWelcomeEmail;
89
- firstValueFrom(this._authService.singUp(this.registerForm.value))
90
- .then(res => {
91
- this.register_loading = false;
92
- let messageKey;
93
- switch (true) {
94
- case isAccountVerificationRequired:
95
- messageKey = 'register-ok';
96
- break;
97
- case isSendWelcomeEmail:
98
- messageKey = 'register-welcome';
99
- break;
100
- default:
101
- messageKey = 'register-success';
102
- }
103
- this._toastService.show(messageKey);
104
- this._analyticsService.callEvent('sign_up', {
105
- firstName: this.registerForm.value.firstName,
106
- lastName: this.registerForm.value.lastName,
107
- email: this.registerForm.value.email
108
- });
109
- this.success = true;
110
- this.ready.emit(true);
111
- if (messageKey !== 'register-ok' && this.redirect) {
112
- this.registerForm.reset();
113
- }
114
- if (this.redirect) {
115
- this._router.navigateByUrl('home');
116
- }
117
- })
118
- .catch(error => {
119
- this.register_loading = false;
120
- if (error.status == 400) {
121
- this._toastService.show('El email ingresado ya se encuentra registrado.');
122
- }
123
- else {
124
- this._toastService.show('Error en el registro. Vuelva a intentarlo más tarde.');
125
- }
126
- })
127
- .finally(() => {
128
- this.loading = false;
119
+ const payload = this.buildRegisterPayload();
120
+ const channel = await firstValueFrom(this.channelConfigService.channel$);
121
+ const isAccountVerificationRequired = !!channel?.isAccountVerificationRequired;
122
+ const isSendWelcomeEmail = !!channel?.isSendWelcomeEmail;
123
+ firstValueFrom(this._authService.singUp(payload))
124
+ .then(() => {
125
+ this.register_loading = false;
126
+ let messageKey;
127
+ switch (true) {
128
+ case isAccountVerificationRequired:
129
+ messageKey = 'register-ok';
130
+ break;
131
+ case isSendWelcomeEmail:
132
+ messageKey = 'register-welcome';
133
+ break;
134
+ default:
135
+ messageKey = 'register-success';
136
+ }
137
+ this._toastService.show(messageKey);
138
+ this._analyticsService.callEvent('sign_up', {
139
+ firstName: payload.firstName,
140
+ lastName: payload.lastName,
141
+ email: payload.email
129
142
  });
130
- }
131
- else {
132
- this._toastService.show('invalid-form');
143
+ this.success = true;
144
+ this.ready.emit(true);
145
+ if (messageKey !== 'register-ok' && this.redirect) {
146
+ this.registerForm.reset();
147
+ }
148
+ if (this.redirect) {
149
+ this._router.navigateByUrl('home');
150
+ }
151
+ })
152
+ .catch(error => {
133
153
  this.register_loading = false;
154
+ if (error.status == 400) {
155
+ this._toastService.show('El email ingresado ya se encuentra registrado.');
156
+ }
157
+ else {
158
+ this._toastService.show('Error en el registro. Vuelva a intentarlo más tarde.');
159
+ }
160
+ })
161
+ .finally(() => {
134
162
  this.loading = false;
163
+ });
164
+ }
165
+ /**
166
+ * Captura el evento de cuando cambia un pais en un <select>
167
+ */
168
+ onCountrySelected = (event) => {
169
+ const value = event?.target?.value ?? event;
170
+ this.registerForm.controls['countryCode'].setValue(value);
171
+ this.registerForm.controls['provinceCode'].setValue(null);
172
+ if (value && value !== 'null') {
173
+ this._formService.onCountrySelected(value);
174
+ }
175
+ };
176
+ /**
177
+ * Captura el evento de cuando cambia una provincia/estado en un <select>
178
+ */
179
+ onProvincesSelected = (event, provinces) => {
180
+ const value = event?.target?.value ?? event;
181
+ this.registerForm.controls['provinceCode'].setValue(value);
182
+ const selected = provinces?.find((province) => province.code == value);
183
+ this.registerForm.controls['provinceName'].setValue(selected?.name || '');
184
+ };
185
+ buildRegisterPayload() {
186
+ const raw = { ...this.registerForm.value };
187
+ // Compat: varios frontends usan `phone` en registro básico.
188
+ if (!raw.phoneNumber && raw.phone) {
189
+ raw.phoneNumber = raw.phone;
190
+ }
191
+ // Compat: varios frontends usan `newsletter` en registro básico.
192
+ if (raw.subscribedToNewsletter === false && (raw.newsletter === true || raw.newsletter === 'true')) {
193
+ raw.subscribedToNewsletter = true;
135
194
  }
195
+ // Campos internos/no enviados
196
+ delete raw.phone;
197
+ delete raw.newsletter;
198
+ delete raw.terms;
199
+ delete raw.plainPassword2;
200
+ // Limpieza simple para no enviar basura vacía
201
+ Object.keys(raw).forEach((key) => {
202
+ if (raw[key] === '' || raw[key] === null || raw[key] === undefined) {
203
+ delete raw[key];
204
+ }
205
+ });
206
+ return raw;
136
207
  }
137
208
  togglePassword() {
138
209
  this.showPassword = !this.showPassword;
@@ -148,4 +219,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
148
219
  }], ready: [{
149
220
  type: Output
150
221
  }] } });
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXItZm9ybS1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9hdXRoLWVjL3JlZ2lzdGVyLWZvcm0tZWMvcmVnaXN0ZXItZm9ybS1lYy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9hdXRoLWVjL3JlZ2lzdGVyLWZvcm0tZWMvcmVnaXN0ZXItZm9ybS1lYy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBVSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBYSxtQkFBbUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7O0FBUzFELE1BQU0sT0FBTyx1QkFBdUI7SUFDM0IsWUFBWSxHQUFnQixNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDaEQsYUFBYSxHQUFpQixNQUFNLENBQUMsWUFBWSxD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S0FBSyxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDUCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1lBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLENBQUM7SUFDRixDQUFDO0lBRUQsY0FBYztRQUNiLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQ3hDLENBQUM7d0dBdElXLHVCQUF1Qjs0RkFBdkIsdUJBQXVCLCtJQ2hCcEMsZ3VGQXVEQSx5REQzQ1csbUJBQW1CLHNyREFBRSx5QkFBeUI7OzRGQUk1Qyx1QkFBdUI7a0JBUG5DLFNBQVM7K0JBQ0Msc0JBQXNCLGNBQ3BCLElBQUksV0FDUCxDQUFDLG1CQUFtQixFQUFFLHlCQUF5QixDQUFDOzhCQWtCaEQsUUFBUTtzQkFBaEIsS0FBSztnQkFJSSxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBpbmplY3QsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFuYWx5dGljc1NlcnZpY2UsIEF1dGhTZXJ2aWNlLCBTZW9TZXJ2aWNlLCBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9lYy1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IExvYWRpbmdTZWN0aW9uRWNDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vd2lkZ2V0cy1lYy9sb2FkaW5nXCI7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9lYy1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBDb3JlQ29uc3RhbnRzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cyc7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2FwcC1yZWdpc3Rlci1mb3JtLWVjJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0aW1wb3J0czogW1JlYWN0aXZlRm9ybXNNb2R1bGUsIExvYWRpbmdTZWN0aW9uRWNDb21wb25lbnRdLFxuXHR0ZW1wbGF0ZVVybDogJy4vcmVnaXN0ZXItZm9ybS1lYy5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsczogWycuL3JlZ2lzdGVyLWZvcm0tZWMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBSZWdpc3RlckZvcm1FY0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cdHByaXZhdGUgX2F1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSA9IGluamVjdChBdXRoU2VydmljZSk7XG5cdHByaXZhdGUgX3RvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG5cdHByaXZhdGUgX3JvdXRlcjogUm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cdHByaXZhdGUgX2FuYWx5dGljc1NlcnZpY2U6IEFuYWx5dGljc1NlcnZpY2UgPSBpbmplY3QoQW5hbHl0aWNzU2VydmljZSk7XG5cdHByaXZhdGUgX2Zvcm1CdWlsZGVyOiBGb3JtQnVpbGRlciA9IGluamVjdChGb3JtQnVpbGRlcik7XG5cdHByaXZhdGUgY2hhbm5lbENvbmZpZ1NlcnZpY2U6IENoYW5uZWxTZXJ2aWNlID0gaW5qZWN0KENoYW5uZWxTZXJ2aWNlKTtcblx0cHJpdmF0ZSBfc2VvU2VydmljZTogU2VvU2VydmljZSA9IGluamVjdChTZW9TZXJ2aWNlKTtcblx0cHJpdmF0ZSBfY29uc3RzOiBDb3JlQ29uc3RhbnRzU2VydmljZSA9IGluamVjdChDb3JlQ29uc3RhbnRzU2VydmljZSk7XG5cdHNob3dQYXNzd29yZCA9IGZhbHNlO1xuXG5cdC8qKlxuXHQqIEluZGljYSBzaSBkZWJlIHJlZGlyZWNjaW9uYXIgbyBzZSBxdWVkYSBlbiBsYSBtaXNtYSBwYW50YWxsYVxuXHQqL1xuXHRASW5wdXQoKSByZWRpcmVjdDogYm9vbGVhbiA9IHRydWU7XG5cdC8qKlxuXHQgKiBQYXJhIHF1ZSBzZSBwdWVkZSBjYXB0dXJhciBlbCBlc3RhZG8gZGUgbGEgcGV0aWNpw7NuIGRlIHJlZ2lzdHJvLlxuXHQgKi9cblx0QE91dHB1dCgpIHJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXHQvKipcblx0ICogQ29udGllbmUgZWwgZm9ybXVsYXJpbyBkZSByZWdpc3Ryby5cblx0ICovXG5cdHB1YmxpYyByZWdpc3RlckZvcm06IEZvcm1Hcm91cCA9IHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwKHtcblx0XHRmaXJzdE5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG5cdFx0bGFzdE5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG5cdFx0ZW1haWw6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdXSxcblx0XHRwbGFpblBhc3N3b3JkOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuXHRcdHBsYWluUGFzc3dvcmQyOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuXHRcdHBob25lOiBbJycsXSxcblx0XHRuZXdzbGV0dGVyOiBbJyddLFxuXHRcdHRlcm1zOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRUcnVlXSxcblx0fSwgeyB2YWxpZGF0b3JzOiB0aGlzLnBhc3N3b3JkTWF0Y2hWYWxpZGF0b3IgfSk7XG5cdHJlZ2lzdGVyX2xvYWRpbmc6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cblx0cGFzc3dvcmRNYXRjaFZhbGlkYXRvcihncm91cDogRm9ybUdyb3VwKSB7XG5cdFx0cmV0dXJuIGdyb3VwLmdldCgncGxhaW5QYXNzd29yZCcpPy52YWx1ZSA9PT0gZ3JvdXAuZ2V0KCdwbGFpblBhc3N3b3JkMicpPy52YWx1ZVxuXHRcdFx0PyBudWxsIDogeyBtaXNtYXRjaDogdHJ1ZSB9O1xuXHR9XG5cdC8qKlxuXHQgKiBQYXJhIGluZGljYXIgcXVlIHNlIGVzdGEgcHJvY2VzYW5kbyBsYSBzb2xpY2l0dWQgZGUgcmVnaXN0cm8uXG5cdCAqL1xuXHRwdWJsaWMgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXHQvKipcblx0ICogUGFyYSBpbmRpY2FyIGVsIGV4aXRvIGRlIGxhIHNvbGljaXR1ZCBkZSByZWdpc3Ryby5cblx0ICovXG5cdHB1YmxpYyBzdWNjZXNzOiBib29sZWFuID0gZmFsc2U7XG5cblx0bmdPbkluaXQoKTogdm9pZCB7XG5cdFx0Y29uc3Qgc2l0ZU5hbWUgPSB0aGlzLl9zZW9TZXJ2aWNlLmdldFNpdGVOYW1lKCk7XG5cdFx0dGhpcy5fc2VvU2VydmljZS5zZXRUaXRsZShgQ3JlYXIgY3VlbnRhIHwgJHtzaXRlTmFtZX1gKTtcblx0XHR0aGlzLl9zZW9TZXJ2aWNlLnNldERlc2NyaXB0aW9uKGBDcmXDoSB0dSBjdWVudGEgZW4gJHtzaXRlTmFtZX0gcGFyYSBhY2NlZGVyIGFsIGNhdMOhbG9nbyB5IGNvbXByYXIuYCk7XG5cdFx0dGhpcy5fc2VvU2VydmljZS5zZXRPZ1R5cGUoJ3dlYnNpdGUnKTtcblx0XHR0aGlzLl9zZW9TZXJ2aWNlLnNldENhbm9uaWNhbCh0aGlzLl9jb25zdHMuZ2V0RnJvbnRlbmRVcmwoKSArIHRoaXMuX3JvdXRlci51cmwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdHJhIHVuIHVzdWFyaW8uXG5cdCAqIEBwYXJhbSBldmVudCBcblx0ICogQHJldHVybnMgXG5cdCAqL1xuXHRhc3luYyByZWdpc3RlcihldmVudDogRXZlbnQpIHtcblx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0aWYgKHRoaXMubG9hZGluZykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMubG9hZGluZyA9IHRydWU7XG5cdFx0Ly8gY29uc29sZS5sb2coJ3JlZ2lzdGVyRm9ybScsIHRoaXMucmVnaXN0ZXJGb3JtKTtcblx0XHRpZiAoIXRoaXMucmVnaXN0ZXJGb3JtLnZhbGlkKSB7XG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnZmllbGRzLWluY29tcGxldGUnKTtcblx0XHRcdHRoaXMubG9hZGluZyA9IGZhbHNlXG5cdFx0XHRyZXR1cm47XG5cdFx0fTtcblx0XHRpZiAodGhpcy5yZWdpc3RlckZvcm0udmFsdWUucGxhaW5QYXNzd29yZCAhPSB0aGlzLnJlZ2lzdGVyRm9ybS52YWx1ZS5wbGFpblBhc3N3b3JkMikge1xuXHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ21pc21hdGNoZWQtcGFzc3dvcmQnKTtcblx0XHRcdHRoaXMubG9hZGluZyA9IGZhbHNlXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0aGlzLnJlZ2lzdGVyRm9ybS52YWxpZCkge1xuXHRcdFx0Y29uc3QgY2hhbm5lbCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuY2hhbm5lbENvbmZpZ1NlcnZpY2UuY2hhbm5lbCQpO1xuXHRcdFx0Y29uc3QgaXNBY2NvdW50VmVyaWZpY2F0aW9uUmVxdWlyZWQgPSAhIWNoYW5uZWw/LmlzQWNjb3VudFZlcmlmaWNhdGlvblJlcXVpcmVkO1xuXHRcdFx0Y29uc3QgaXNTZW5kV2VsY29tZUVtYWlsID0gISFjaGFubmVsPy5pc1NlbmRXZWxjb21lRW1haWw7XG5cblx0XHRcdGZpcnN0VmFsdWVGcm9tKHRoaXMuX2F1dGhTZXJ2aWNlLnNpbmdVcCh0aGlzLnJlZ2lzdGVyRm9ybS52YWx1ZSkpXG5cdFx0XHRcdC50aGVuKHJlcyA9PiB7XG5cdFx0XHRcdFx0dGhpcy5yZWdpc3Rlcl9sb2FkaW5nID0gZmFsc2U7XG5cdFx0XHRcdFx0bGV0IG1lc3NhZ2VLZXk6IHN0cmluZztcblx0XHRcdFx0XHRzd2l0Y2ggKHRydWUpIHtcblx0XHRcdFx0XHRcdGNhc2UgaXNBY2NvdW50VmVyaWZpY2F0aW9uUmVxdWlyZWQ6XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VLZXkgPSAncmVnaXN0ZXItb2snO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgaXNTZW5kV2VsY29tZUVtYWlsOlxuXHRcdFx0XHRcdFx0XHRtZXNzYWdlS2V5ID0gJ3JlZ2lzdGVyLXdlbGNvbWUnO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VLZXkgPSAncmVnaXN0ZXItc3VjY2Vzcyc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KG1lc3NhZ2VLZXkpO1xuXHRcdFx0XHRcdHRoaXMuX2FuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCdzaWduX3VwJywge1xuXHRcdFx0XHRcdFx0Zmlyc3ROYW1lOiB0aGlzLnJlZ2lzdGVyRm9ybS52YWx1ZS5maXJzdE5hbWUsXG5cdFx0XHRcdFx0XHRsYXN0TmFtZTogdGhpcy5yZWdpc3RlckZvcm0udmFsdWUubGFzdE5hbWUsXG5cdFx0XHRcdFx0XHRlbWFpbDogdGhpcy5yZWdpc3RlckZvcm0udmFsdWUuZW1haWxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR0aGlzLnN1Y2Nlc3MgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXMucmVhZHkuZW1pdCh0cnVlKTtcblxuXHRcdFx0XHRcdGlmIChtZXNzYWdlS2V5ICE9PSAncmVnaXN0ZXItb2snICYmIHRoaXMucmVkaXJlY3QpIHtcblx0XHRcdFx0XHRcdHRoaXMucmVnaXN0ZXJGb3JtLnJlc2V0KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICh0aGlzLnJlZGlyZWN0KSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgnaG9tZScpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGVycm9yID0+IHtcblx0XHRcdFx0XHR0aGlzLnJlZ2lzdGVyX2xvYWRpbmcgPSBmYWxzZTtcblx0XHRcdFx0XHRpZiAoZXJyb3Iuc3RhdHVzID09IDQwMCkge1xuXHRcdFx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ0VsIGVtYWlsIGluZ3Jlc2FkbyB5YSBzZSBlbmN1ZW50cmEgcmVnaXN0cmFkby4nKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ0Vycm9yIGVuIGVsIHJlZ2lzdHJvLiBWdWVsdmEgYSBpbnRlbnRhcmxvIG3DoXMgdGFyZGUuJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnaW52YWxpZC1mb3JtJyk7XG5cdFx0XHR0aGlzLnJlZ2lzdGVyX2xvYWRpbmcgPSBmYWxzZTtcblx0XHRcdHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdHRvZ2dsZVBhc3N3b3JkKCkge1xuXHRcdHRoaXMuc2hvd1Bhc3N3b3JkID0gIXRoaXMuc2hvd1Bhc3N3b3JkO1xuXHR9XG59XG4iLCI8ZGl2IGNsYXNzPVwidy0xMDAgcGwtbWQtNSBwb3NpdGlvbi1yZWxhdGl2ZVwiIGlkPVwicmVnaXN0ZXJcIj5cbiAgPGRpdiBjbGFzcz1cInB5LTJcIj5cbiAgICAgIDxoNT5DUkVBUiBDVUVOVEE8L2g1PlxuICA8L2Rpdj5cbiAgPGZvcm0gaWQ9XCJyZWdpc3Ryb1wiIFtmb3JtR3JvdXBdPVwicmVnaXN0ZXJGb3JtXCIgKHN1Ym1pdCk9XCJyZWdpc3RlcigkZXZlbnQpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5OT01CUkU8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJmaXJzdE5hbWVcIiBjbGFzcz1cImZvcm0tY29udHJvbCByb3VuZGVkLTBcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiTm9tYnJlXCI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cIlwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkFQRUxMSURPPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibGFzdE5hbWVcIiBjbGFzcz1cImZvcm0tY29udHJvbCByb3VuZGVkLTBcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiQXBlbGxpZG9cIj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwiXCIgY2xhc3M9XCJcIj5DT1JSRU8gRUxFQ1RST05JQ088L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiIGVtYWlsIHJlcXVpcmVkIGNsYXNzPVwiZm9ybS1jb250cm9sIHJvdW5kZWQtMFwiIHR5cGU9XCJlbWFpbFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ29ycmVvIGVsZWN0csOzbmljb1wiPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5DT05UUkFTRcORQTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cInBsYWluUGFzc3dvcmRcIiByZXF1aXJlZCBjbGFzcz1cImZvcm0tY29udHJvbCByb3VuZGVkLTBcIiB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkNvbnRyYXNlw7FhXCI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cIlwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlJFUEVUSVIgQ09OVFJBU0XDkUE8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJwbGFpblBhc3N3b3JkMlwiIHJlcXVpcmVkIGNsYXNzPVwiZm9ybS1jb250cm9sIHJvdW5kZWQtMFwiIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUmVwZXRpciBjb250cmFzZcOxYVwiPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBkLWZsZXggZmxleC1yb3cgZm9ybS1jaGVjayBjdXN0b20tY2hlY2tib3ggbXItc20tMiBtdC00IG1iLTJcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZm9ybUNvbnRyb2xOYW1lPVwidGVybXNcIiByZXF1aXJlZCBjbGFzcz1cImN1c3RvbS1jb250cm9sLWlucHV0IGZvcm0tY2hlY2staW5wdXRcIiBuYW1lPVwiQ29sb3IyXCJcbiAgICAgICAgICAgICAgaWQ9XCJDb2xvcjJcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjdXN0b20tY29udHJvbC1sYWJlbCBmZi11YnVudHUtbGlnaHQgZm9udC1zbSBmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiQ29sb3IyXCI+IEhlXG4gICAgICAgICAgICAgIGxlw61kbyB5IGFjZXB0byBsYXMgcG9sw610aWNhcyBkZSBwcml2YWNpZGFkIHkgbG9zIHTDqXJtaW5vcyB5XG4gICAgICAgICAgICAgIGNvbmRpY2lvbmVzPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wgZC1mbGV4IGZsZXgtcm93IGZvcm0tY2hlY2sgY3VzdG9tLWNoZWNrYm94IG1yLXNtLTIgbWItNFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBmb3JtQ29udHJvbE5hbWU9XCJuZXdzbGV0dGVyXCIgY2xhc3M9XCJjdXN0b20tY29udHJvbC1pbnB1dCBmb3JtLWNoZWNrLWlucHV0XCIgbmFtZT1cIkNvbG9yM1wiIGlkPVwiQ29sb3IzXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtbGFiZWwgZm9ybS1jaGVjay1sYWJlbCBmZi11YnVudHUtbGlnaHQgZm9udC1zbVwiIGZvcj1cIkNvbG9yM1wiPlxuICAgICAgICAgICAgICBTdXNjcmlwY2nDs24gYWwgTmV3c2xldHRlcjwvbGFiZWw+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwicmVnaXN0ZXJGb3JtLmludmFsaWRcIiB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHB4LTUgcHktMiBoLWZpdFwiPkNSRUFSPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuICBAaWYobG9hZGluZyl7XG4gICAgPGFwcC1sb2FkaW5nLXNlY3Rpb24tZWMgLz5cbiAgfVxuICBcbjwvZGl2PlxuIl19
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXItZm9ybS1lYy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9hdXRoLWVjL3JlZ2lzdGVyLWZvcm0tZWMvcmVnaXN0ZXItZm9ybS1lYy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1lYXN5Y29tbWVyY2UtdjE4L3NyYy9saWIvZWMtY29tcG9uZW50cy9hdXRoLWVjL3JlZ2lzdGVyLWZvcm0tZWMvcmVnaXN0ZXItZm9ybS1lYy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBVSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUcsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQWEsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQVMxRCxNQUFNLE9BQU8sdUJBQXVCO0lBQzNCLFlBQVksR0FBZ0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hELGFBQWEsR0FBaUIsTUFBTSxD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bUJBQW1CLEVBQUUseUJBQXlCLENBQUM7OEJBbUJoRCxRQUFRO3NCQUFoQixLQUFLO2dCQUlJLEtBQUs7c0JBQWQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIGluamVjdCwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSwgQXV0aFNlcnZpY2UsIFNlb1NlcnZpY2UsIEZvcm1TZXJ2aWNlLCBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9lYy1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IExvYWRpbmdTZWN0aW9uRWNDb21wb25lbnQgfSBmcm9tICcuLi8uLi93aWRnZXRzLWVjL2xvYWRpbmcnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENoYW5uZWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZWMtc2VydmljZXMnO1xuaW1wb3J0IHsgQ29yZUNvbnN0YW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMnO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdhcHAtcmVnaXN0ZXItZm9ybS1lYycsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGltcG9ydHM6IFtSZWFjdGl2ZUZvcm1zTW9kdWxlLCBMb2FkaW5nU2VjdGlvbkVjQ29tcG9uZW50XSxcblx0dGVtcGxhdGVVcmw6ICcuL3JlZ2lzdGVyLWZvcm0tZWMuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsnLi9yZWdpc3Rlci1mb3JtLWVjLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUmVnaXN0ZXJGb3JtRWNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXHRwcml2YXRlIF9hdXRoU2VydmljZTogQXV0aFNlcnZpY2UgPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuXHRwcml2YXRlIF90b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSA9IGluamVjdChUb2FzdFNlcnZpY2UpO1xuXHRwcml2YXRlIF9yb3V0ZXI6IFJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXHRwcml2YXRlIF9hbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlID0gaW5qZWN0KEFuYWx5dGljc1NlcnZpY2UpO1xuXHRwcml2YXRlIF9mb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpO1xuXHRwcml2YXRlIF9mb3JtU2VydmljZTogRm9ybVNlcnZpY2UgPSBpbmplY3QoRm9ybVNlcnZpY2UpO1xuXHRwcml2YXRlIGNoYW5uZWxDb25maWdTZXJ2aWNlOiBDaGFubmVsU2VydmljZSA9IGluamVjdChDaGFubmVsU2VydmljZSk7XG5cdHByaXZhdGUgX3Nlb1NlcnZpY2U6IFNlb1NlcnZpY2UgPSBpbmplY3QoU2VvU2VydmljZSk7XG5cdHByaXZhdGUgX2NvbnN0czogQ29yZUNvbnN0YW50c1NlcnZpY2UgPSBpbmplY3QoQ29yZUNvbnN0YW50c1NlcnZpY2UpO1xuXHRzaG93UGFzc3dvcmQgPSBmYWxzZTtcblxuXHQvKipcblx0KiBJbmRpY2Egc2kgZGViZSByZWRpcmVjY2lvbmFyIG8gc2UgcXVlZGEgZW4gbGEgbWlzbWEgcGFudGFsbGFcblx0Ki9cblx0QElucHV0KCkgcmVkaXJlY3Q6IGJvb2xlYW4gPSB0cnVlO1xuXHQvKipcblx0ICogUGFyYSBxdWUgc2UgcHVlZGUgY2FwdHVyYXIgZWwgZXN0YWRvIGRlIGxhIHBldGljacOzbiBkZSByZWdpc3Ryby5cblx0ICovXG5cdEBPdXRwdXQoKSByZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblx0LyoqXG5cdCAqIENvbnRpZW5lIGxvcyBwYWlzZXMgeSBzdXMgZGF0b3Ncblx0ICovXG5cdHB1YmxpYyBjb3VudHJpZXMkID0gdGhpcy5fZm9ybVNlcnZpY2UuZ2V0Q291bnRyaWVzRGF0YSgpO1xuXHQvKipcblx0ICogQ29udGllbmUgbGFzIHByb3ZpbmNpYXNcblx0ICovXG5cdHB1YmxpYyBwcm92aW5jZXMkID0gdGhpcy5fZm9ybVNlcnZpY2UucHJvdmluY2VzJDtcblx0LyoqXG5cdCAqIENvbnRpZW5lIGxvcyB0aXBvcyBkZSBkb2N1bWVudG9zLlxuXHQgKi9cblx0cHVibGljIGRvY3VtZW50VHlwZXMkID0gdGhpcy5fZm9ybVNlcnZpY2UuZG9jdW1lbnRUeXBlcyQ7XG5cdC8qKlxuXHQgKiBDb250aWVuZSBlbCBmb3JtdWxhcmlvIGRlIHJlZ2lzdHJvLlxuXHQgKi9cblx0cHVibGljIHJlZ2lzdGVyRm9ybTogRm9ybUdyb3VwID0gdGhpcy5fZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuXHRcdGZpcnN0TmFtZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcblx0XHRsYXN0TmFtZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcblx0XHRlbWFpbDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbF1dLFxuXHRcdHBsYWluUGFzc3dvcmQ6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG5cdFx0cGxhaW5QYXNzd29yZDI6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG5cblx0XHQvLyBMZWdhY3kvc2ltcGxlIGZpZWxkc1xuXHRcdHBob25lOiBbJyddLFxuXHRcdG5ld3NsZXR0ZXI6IFsnJ10sXG5cdFx0dGVybXM6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZFRydWVdLFxuXG5cdFx0Ly8gT3B0aW9uYWwgZXh0ZW5kZWQgZmllbGRzIGZvciAvcmVnaXN0ZXIgZW5kcG9pbnRcblx0XHRiaXJ0aGRheTogWycnXSxcblx0XHRnZW5kZXI6IFsnJ10sXG5cdFx0cGhvbmVOdW1iZXI6IFsnJywgW1ZhbGlkYXRvcnMucGF0dGVybignXlxcXFwrP1swLTkoKVxcXFwtXFxcXHNdKyQnKV1dLFxuXHRcdHN1YnNjcmliZWRUb05ld3NsZXR0ZXI6IFtmYWxzZV0sXG5cdFx0ZG9jdW1lbnRUeXBlOiBbJyddLFxuXHRcdGRvY3VtZW50TnVtYmVyOiBbJyddLFxuXHRcdGNvdW50cnlDb2RlOiBbbnVsbF0sXG5cdFx0c3RyZWV0OiBbJyddLFxuXHRcdGNpdHk6IFsnJ10sXG5cdFx0cG9zdGNvZGU6IFsnJ10sXG5cdFx0cHJvdmluY2VOYW1lOiBbJyddLFxuXHRcdHByb3ZpbmNlQ29kZTogW251bGxdLFxuXHRcdGxlZ2FsRGVub21pbmF0aW9uOiBbJyddLFxuXHRcdGNvbXBhbnlOYW1lOiBbJyddLFxuXHRcdGNvbW1lbnRzOiBbJyddLFxuXHRcdGNvbnRhY3RGaXJzdE5hbWU6IFsnJ10sXG5cdFx0Y29udGFjdExhc3ROYW1lOiBbJyddLFxuXHRcdGNvbnRhY3RDb21wYW55UG9zaXRpb246IFsnJ10sXG5cdFx0Y29udGFjdEVtYWlsOiBbJyddLFxuXHRcdGNvbnRhY3REb2N1bWVudFR5cGU6IFsnJ10sXG5cdFx0Y29udGFjdERvY3VtZW50TnVtYmVyOiBbJyddXG5cdH0sIHsgdmFsaWRhdG9yczogdGhpcy5wYXNzd29yZE1hdGNoVmFsaWRhdG9yIH0pO1xuXHRyZWdpc3Rlcl9sb2FkaW5nOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG5cdHBhc3N3b3JkTWF0Y2hWYWxpZGF0b3IoZ3JvdXA6IEZvcm1Hcm91cCkge1xuXHRcdHJldHVybiBncm91cC5nZXQoJ3BsYWluUGFzc3dvcmQnKT8udmFsdWUgPT09IGdyb3VwLmdldCgncGxhaW5QYXNzd29yZDInKT8udmFsdWVcblx0XHRcdD8gbnVsbCA6IHsgbWlzbWF0Y2g6IHRydWUgfTtcblx0fVxuXHQvKipcblx0ICogUGFyYSBpbmRpY2FyIHF1ZSBzZSBlc3RhIHByb2Nlc2FuZG8gbGEgc29saWNpdHVkIGRlIHJlZ2lzdHJvLlxuXHQgKi9cblx0cHVibGljIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblx0LyoqXG5cdCAqIFBhcmEgaW5kaWNhciBlbCBleGl0byBkZSBsYSBzb2xpY2l0dWQgZGUgcmVnaXN0cm8uXG5cdCAqL1xuXHRwdWJsaWMgc3VjY2VzczogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdGNvbnN0IHNpdGVOYW1lID0gdGhpcy5fc2VvU2VydmljZS5nZXRTaXRlTmFtZSgpO1xuXHRcdHRoaXMuX3Nlb1NlcnZpY2Uuc2V0VGl0bGUoYENyZWFyIGN1ZW50YSB8ICR7c2l0ZU5hbWV9YCk7XG5cdFx0dGhpcy5fc2VvU2VydmljZS5zZXREZXNjcmlwdGlvbihgQ3Jlw6EgdHUgY3VlbnRhIGVuICR7c2l0ZU5hbWV9IHBhcmEgYWNjZWRlciBhbCBjYXTDoWxvZ28geSBjb21wcmFyLmApO1xuXHRcdHRoaXMuX3Nlb1NlcnZpY2Uuc2V0T2dUeXBlKCd3ZWJzaXRlJyk7XG5cdFx0dGhpcy5fc2VvU2VydmljZS5zZXRDYW5vbmljYWwodGhpcy5fY29uc3RzLmdldEZyb250ZW5kVXJsKCkgKyB0aGlzLl9yb3V0ZXIudXJsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RyYSB1biB1c3VhcmlvLlxuXHQgKiBAcGFyYW0gZXZlbnRcblx0ICogQHJldHVybnNcblx0ICovXG5cdGFzeW5jIHJlZ2lzdGVyKGV2ZW50OiBFdmVudCkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRpZiAodGhpcy5sb2FkaW5nKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5sb2FkaW5nID0gdHJ1ZTtcblx0XHRpZiAoIXRoaXMucmVnaXN0ZXJGb3JtLnZhbGlkKSB7XG5cdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnZmllbGRzLWluY29tcGxldGUnKTtcblx0XHRcdHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAodGhpcy5yZWdpc3RlckZvcm0udmFsdWUucGxhaW5QYXNzd29yZCAhPSB0aGlzLnJlZ2lzdGVyRm9ybS52YWx1ZS5wbGFpblBhc3N3b3JkMikge1xuXHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ21pc21hdGNoZWQtcGFzc3dvcmQnKTtcblx0XHRcdHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHBheWxvYWQgPSB0aGlzLmJ1aWxkUmVnaXN0ZXJQYXlsb2FkKCk7XG5cdFx0Y29uc3QgY2hhbm5lbCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuY2hhbm5lbENvbmZpZ1NlcnZpY2UuY2hhbm5lbCQpO1xuXHRcdGNvbnN0IGlzQWNjb3VudFZlcmlmaWNhdGlvblJlcXVpcmVkID0gISFjaGFubmVsPy5pc0FjY291bnRWZXJpZmljYXRpb25SZXF1aXJlZDtcblx0XHRjb25zdCBpc1NlbmRXZWxjb21lRW1haWwgPSAhIWNoYW5uZWw/LmlzU2VuZFdlbGNvbWVFbWFpbDtcblxuXHRcdGZpcnN0VmFsdWVGcm9tKHRoaXMuX2F1dGhTZXJ2aWNlLnNpbmdVcChwYXlsb2FkKSlcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0dGhpcy5yZWdpc3Rlcl9sb2FkaW5nID0gZmFsc2U7XG5cdFx0XHRcdGxldCBtZXNzYWdlS2V5OiBzdHJpbmc7XG5cdFx0XHRcdHN3aXRjaCAodHJ1ZSkge1xuXHRcdFx0XHRcdGNhc2UgaXNBY2NvdW50VmVyaWZpY2F0aW9uUmVxdWlyZWQ6XG5cdFx0XHRcdFx0XHRtZXNzYWdlS2V5ID0gJ3JlZ2lzdGVyLW9rJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgaXNTZW5kV2VsY29tZUVtYWlsOlxuXHRcdFx0XHRcdFx0bWVzc2FnZUtleSA9ICdyZWdpc3Rlci13ZWxjb21lJztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRtZXNzYWdlS2V5ID0gJ3JlZ2lzdGVyLXN1Y2Nlc3MnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX3RvYXN0U2VydmljZS5zaG93KG1lc3NhZ2VLZXkpO1xuXHRcdFx0XHR0aGlzLl9hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgnc2lnbl91cCcsIHtcblx0XHRcdFx0XHRmaXJzdE5hbWU6IHBheWxvYWQuZmlyc3ROYW1lLFxuXHRcdFx0XHRcdGxhc3ROYW1lOiBwYXlsb2FkLmxhc3ROYW1lLFxuXHRcdFx0XHRcdGVtYWlsOiBwYXlsb2FkLmVtYWlsXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLnN1Y2Nlc3MgPSB0cnVlO1xuXHRcdFx0XHR0aGlzLnJlYWR5LmVtaXQodHJ1ZSk7XG5cblx0XHRcdFx0aWYgKG1lc3NhZ2VLZXkgIT09ICdyZWdpc3Rlci1vaycgJiYgdGhpcy5yZWRpcmVjdCkge1xuXHRcdFx0XHRcdHRoaXMucmVnaXN0ZXJGb3JtLnJlc2V0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMucmVkaXJlY3QpIHtcblx0XHRcdFx0XHR0aGlzLl9yb3V0ZXIubmF2aWdhdGVCeVVybCgnaG9tZScpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGVycm9yID0+IHtcblx0XHRcdFx0dGhpcy5yZWdpc3Rlcl9sb2FkaW5nID0gZmFsc2U7XG5cdFx0XHRcdGlmIChlcnJvci5zdGF0dXMgPT0gNDAwKSB7XG5cdFx0XHRcdFx0dGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coJ0VsIGVtYWlsIGluZ3Jlc2FkbyB5YSBzZSBlbmN1ZW50cmEgcmVnaXN0cmFkby4nKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdygnRXJyb3IgZW4gZWwgcmVnaXN0cm8uIFZ1ZWx2YSBhIGludGVudGFybG8gbcOhcyB0YXJkZS4nKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5maW5hbGx5KCgpID0+IHtcblx0XHRcdFx0dGhpcy5sb2FkaW5nID0gZmFsc2U7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYXB0dXJhIGVsIGV2ZW50byBkZSBjdWFuZG8gY2FtYmlhIHVuIHBhaXMgZW4gdW4gPHNlbGVjdD5cblx0ICovXG5cdG9uQ291bnRyeVNlbGVjdGVkID0gKGV2ZW50OiBhbnkpID0+IHtcblx0XHRjb25zdCB2YWx1ZSA9IGV2ZW50Py50YXJnZXQ/LnZhbHVlID8/IGV2ZW50O1xuXHRcdHRoaXMucmVnaXN0ZXJGb3JtLmNvbnRyb2xzWydjb3VudHJ5Q29kZSddLnNldFZhbHVlKHZhbHVlKTtcblx0XHR0aGlzLnJlZ2lzdGVyRm9ybS5jb250cm9sc1sncHJvdmluY2VDb2RlJ10uc2V0VmFsdWUobnVsbCk7XG5cdFx0aWYgKHZhbHVlICYmIHZhbHVlICE9PSAnbnVsbCcpIHtcblx0XHRcdHRoaXMuX2Zvcm1TZXJ2aWNlLm9uQ291bnRyeVNlbGVjdGVkKHZhbHVlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2FwdHVyYSBlbCBldmVudG8gZGUgY3VhbmRvIGNhbWJpYSB1bmEgcHJvdmluY2lhL2VzdGFkbyBlbiB1biA8c2VsZWN0PlxuXHQgKi9cblx0b25Qcm92aW5jZXNTZWxlY3RlZCA9IChldmVudDogYW55LCBwcm92aW5jZXM6IGFueVtdKSA9PiB7XG5cdFx0Y29uc3QgdmFsdWUgPSBldmVudD8udGFyZ2V0Py52YWx1ZSA/PyBldmVudDtcblx0XHR0aGlzLnJlZ2lzdGVyRm9ybS5jb250cm9sc1sncHJvdmluY2VDb2RlJ10uc2V0VmFsdWUodmFsdWUpO1xuXHRcdGNvbnN0IHNlbGVjdGVkID0gcHJvdmluY2VzPy5maW5kKChwcm92aW5jZTogYW55KSA9PiBwcm92aW5jZS5jb2RlID09IHZhbHVlKTtcblx0XHR0aGlzLnJlZ2lzdGVyRm9ybS5jb250cm9sc1sncHJvdmluY2VOYW1lJ10uc2V0VmFsdWUoc2VsZWN0ZWQ/Lm5hbWUgfHwgJycpO1xuXHR9XG5cblx0cHJpdmF0ZSBidWlsZFJlZ2lzdGVyUGF5bG9hZCgpIHtcblx0XHRjb25zdCByYXcgPSB7IC4uLnRoaXMucmVnaXN0ZXJGb3JtLnZhbHVlIH07XG5cblx0XHQvLyBDb21wYXQ6IHZhcmlvcyBmcm9udGVuZHMgdXNhbiBgcGhvbmVgIGVuIHJlZ2lzdHJvIGLDoXNpY28uXG5cdFx0aWYgKCFyYXcucGhvbmVOdW1iZXIgJiYgcmF3LnBob25lKSB7XG5cdFx0XHRyYXcucGhvbmVOdW1iZXIgPSByYXcucGhvbmU7XG5cdFx0fVxuXG5cdFx0Ly8gQ29tcGF0OiB2YXJpb3MgZnJvbnRlbmRzIHVzYW4gYG5ld3NsZXR0ZXJgIGVuIHJlZ2lzdHJvIGLDoXNpY28uXG5cdFx0aWYgKHJhdy5zdWJzY3JpYmVkVG9OZXdzbGV0dGVyID09PSBmYWxzZSAmJiAocmF3Lm5ld3NsZXR0ZXIgPT09IHRydWUgfHwgcmF3Lm5ld3NsZXR0ZXIgPT09ICd0cnVlJykpIHtcblx0XHRcdHJhdy5zdWJzY3JpYmVkVG9OZXdzbGV0dGVyID0gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBDYW1wb3MgaW50ZXJub3Mvbm8gZW52aWFkb3Ncblx0XHRkZWxldGUgcmF3LnBob25lO1xuXHRcdGRlbGV0ZSByYXcubmV3c2xldHRlcjtcblx0XHRkZWxldGUgcmF3LnRlcm1zO1xuXHRcdGRlbGV0ZSByYXcucGxhaW5QYXNzd29yZDI7XG5cblx0XHQvLyBMaW1waWV6YSBzaW1wbGUgcGFyYSBubyBlbnZpYXIgYmFzdXJhIHZhY8OtYVxuXHRcdE9iamVjdC5rZXlzKHJhdykuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcblx0XHRcdGlmIChyYXdba2V5XSA9PT0gJycgfHwgcmF3W2tleV0gPT09IG51bGwgfHwgcmF3W2tleV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRkZWxldGUgcmF3W2tleV07XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gcmF3O1xuXHR9XG5cblx0dG9nZ2xlUGFzc3dvcmQoKSB7XG5cdFx0dGhpcy5zaG93UGFzc3dvcmQgPSAhdGhpcy5zaG93UGFzc3dvcmQ7XG5cdH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ3LTEwMCBwbC1tZC01IHBvc2l0aW9uLXJlbGF0aXZlXCIgaWQ9XCJyZWdpc3RlclwiPlxuICA8ZGl2IGNsYXNzPVwicHktMlwiPlxuICAgICAgPGg1PkNSRUFSIENVRU5UQTwvaDU+XG4gIDwvZGl2PlxuICA8Zm9ybSBpZD1cInJlZ2lzdHJvXCIgW2Zvcm1Hcm91cF09XCJyZWdpc3RlckZvcm1cIiAoc3VibWl0KT1cInJlZ2lzdGVyKCRldmVudClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cIlwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPk5PTUJSRTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImZpcnN0TmFtZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHJvdW5kZWQtMFwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJOb21icmVcIj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwiXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+QVBFTExJRE88L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJsYXN0TmFtZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHJvdW5kZWQtMFwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJBcGVsbGlkb1wiPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJcIiBjbGFzcz1cIlwiPkNPUlJFTyBFTEVDVFJPTklDTzwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCIgZW1haWwgcmVxdWlyZWQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcm91bmRlZC0wXCIgdHlwZT1cImVtYWlsXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJDb3JyZW8gZWxlY3Ryw7NuaWNvXCI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cIlwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkNPTlRSQVNFw5FBPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwicGxhaW5QYXNzd29yZFwiIHJlcXVpcmVkIGNsYXNzPVwiZm9ybS1jb250cm9sIHJvdW5kZWQtMFwiIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQ29udHJhc2XDsWFcIj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwiXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+UkVQRVRJUiBDT05UUkFTRcORQTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cInBsYWluUGFzc3dvcmQyXCIgcmVxdWlyZWQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcm91bmRlZC0wXCIgdHlwZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJSZXBldGlyIGNvbnRyYXNlw7FhXCI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1jb250cm9sIGQtZmxleCBmbGV4LXJvdyBmb3JtLWNoZWNrIGN1c3RvbS1jaGVja2JveCBtci1zbS0yIG10LTQgbWItMlwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBmb3JtQ29udHJvbE5hbWU9XCJ0ZXJtc1wiIHJlcXVpcmVkIGNsYXNzPVwiY3VzdG9tLWNvbnRyb2wtaW5wdXQgZm9ybS1jaGVjay1pbnB1dFwiIG5hbWU9XCJDb2xvcjJcIlxuICAgICAgICAgICAgICBpZD1cIkNvbG9yMlwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1c3RvbS1jb250cm9sLWxhYmVsIGZmLXVidW50dS1saWdodCBmb250LXNtIGZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJDb2xvcjJcIj4gSGVcbiAgICAgICAgICAgICAgbGXDrWRvIHkgYWNlcHRvIGxhcyBwb2zDrXRpY2FzIGRlIHByaXZhY2lkYWQgeSBsb3MgdMOpcm1pbm9zIHlcbiAgICAgICAgICAgICAgY29uZGljaW9uZXM8L2xhYmVsPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tY29udHJvbCBkLWZsZXggZmxleC1yb3cgZm9ybS1jaGVjayBjdXN0b20tY2hlY2tib3ggbXItc20tMiBtYi00XCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGZvcm1Db250cm9sTmFtZT1cIm5ld3NsZXR0ZXJcIiBjbGFzcz1cImN1c3RvbS1jb250cm9sLWlucHV0IGZvcm0tY2hlY2staW5wdXRcIiBuYW1lPVwiQ29sb3IzXCIgaWQ9XCJDb2xvcjNcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjdXN0b20tY29udHJvbC1sYWJlbCBmb3JtLWNoZWNrLWxhYmVsIGZmLXVidW50dS1saWdodCBmb250LXNtXCIgZm9yPVwiQ29sb3IzXCI+XG4gICAgICAgICAgICAgIFN1c2NyaXBjacOzbiBhbCBOZXdzbGV0dGVyPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJyZWdpc3RlckZvcm0uaW52YWxpZFwiIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgcHgtNSBweS0yIGgtZml0XCI+Q1JFQVI8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICA8L2Zvcm0+XG4gIEBpZihsb2FkaW5nKXtcbiAgICA8YXBwLWxvYWRpbmctc2VjdGlvbi1lYyAvPlxuICB9XG4gIFxuPC9kaXY+XG4iXX0=