valtech-components 2.0.556 → 2.0.558
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/organisms/login/login.component.mjs +3 -3
- package/esm2022/lib/components/organisms/login/types.mjs +2 -1
- package/fesm2022/valtech-components.mjs +3 -2
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +1 -1
- package/lib/components/atoms/text/text.component.d.ts +1 -1
- package/lib/components/organisms/article/article.component.d.ts +3 -3
- package/lib/components/organisms/login/types.d.ts +2 -0
- package/package.json +1 -1
|
@@ -692,7 +692,7 @@ export class LoginComponent {
|
|
|
692
692
|
this.stopResetResendCooldown();
|
|
693
693
|
}
|
|
694
694
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LoginComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
695
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LoginComponent, isStandalone: true, selector: "val-login", inputs: { props: "props" }, outputs: { onSuccess: "onSuccess", onError: "onError", onMFARequired: "onMFARequired" }, ngImport: i0, template: "<div class=\"val-login\">\n <!-- Logo -->\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n\n <!-- Login Form -->\n <val-form [props]=\"loginFormProps\" (onSubmit)=\"loginHandler($event)\" />\n\n <!-- OAuth Section -->\n @if (config.showOAuth && config.oauthProviders.length > 0) {\n <div class=\"oauth-separator\">\n <span>o contin\u00FAa con</span>\n </div>\n\n <div class=\"oauth-buttons\">\n @for (provider of config.oauthProviders; track provider) {\n <ion-button\n expand=\"block\"\n fill=\"outline\"\n color=\"dark\"\n (click)=\"loginWithOAuth(provider)\"\n [disabled]=\"isOAuthLoading\"\n >\n @switch (provider) {\n @case ('google') {\n <ion-icon slot=\"start\" name=\"logo-google\"></ion-icon>\n {{ isOAuthLoading ? 'Conectando...' : 'Continuar con Google' }}\n }\n @case ('apple') {\n <ion-icon slot=\"start\" name=\"logo-apple\"></ion-icon>\n {{ isOAuthLoading ? 'Conectando...' : 'Continuar con Apple' }}\n }\n @case ('microsoft') {\n <ion-icon slot=\"start\" name=\"logo-microsoft\"></ion-icon>\n {{ isOAuthLoading ? 'Conectando...' : 'Continuar con Microsoft' }}\n }\n }\n </ion-button>\n }\n </div>\n }\n\n <!-- Register Link -->\n @if (config.showRegister) {\n <div class=\"auth-link\">\n <ion-text color=\"dark\">\n \u00BFNo tienes cuenta?\n <a (click)=\"openRegisterModal()\">Registrarse</a>\n </ion-text>\n </div>\n }\n\n <!-- Forgot Password Link -->\n @if (config.showForgotPassword) {\n <div class=\"auth-link forgot-password\">\n <ion-text color=\"dark\">\n \u00BFOlvidaste tu contrase\u00F1a?\n <a (click)=\"openForgotPasswordModal()\">Recuperar contrase\u00F1a</a>\n </ion-text>\n </div>\n }\n\n <!-- Legal Notice -->\n @if (props.legal) {\n <div class=\"legal-notice\">\n <ion-text color=\"medium\">\n <p>\n Utilizamos los servicios de\n @if (props.legal.companyLink) {\n <a [href]=\"props.legal.companyLink\"><strong>{{ props.legal.companyName }}</strong></a>\n } @else {\n <strong>{{ props.legal.companyName }}</strong>\n }\n para ofrecerte una experiencia segura. Al iniciar sesi\u00F3n, aceptas\n nuestros\n @if (props.legal.termsLink) {\n <a [href]=\"props.legal.termsLink\">T\u00E9rminos y Condiciones</a>\n } @else {\n <span>T\u00E9rminos y Condiciones</span>\n }\n y\n @if (props.legal.privacyLink) {\n <a [href]=\"props.legal.privacyLink\">Pol\u00EDtica de Privacidad</a>\n } @else {\n <span>Pol\u00EDtica de Privacidad</span>\n }.\n </p>\n </ion-text>\n </div>\n }\n</div>\n\n<!-- Register Modal -->\n<ion-modal [isOpen]=\"isRegisterModalOpen\" (didDismiss)=\"closeRegisterModal()\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeRegisterModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"registerFormProps\" (onSubmit)=\"registerHandler($event)\" />\n <div class=\"auth-link\">\n <ion-text color=\"dark\">\n \u00BFYa tienes cuenta?\n <a (click)=\"closeRegisterModal()\">Iniciar sesi\u00F3n</a>\n </ion-text>\n </div>\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n\n<!-- Verify Email Modal -->\n<ion-modal [isOpen]=\"isVerifyModalOpen\" [backdropDismiss]=\"false\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeVerifyModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"verifyFormProps\" (onSubmit)=\"verifyHandler($event)\" />\n <div class=\"resend-link\">\n <ion-text color=\"dark\">\n \u00BFNo has recibido tu c\u00F3digo?\n @if (resendCooldown > 0) {\n <span class=\"cooldown\">Reenviar en {{ resendCooldown }}s</span>\n } @else {\n <a (click)=\"resendCode()\">Reenviar</a>\n }\n </ion-text>\n </div>\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n\n<!-- Forgot Password Modal -->\n<ion-modal [isOpen]=\"isForgotPasswordModalOpen\" (didDismiss)=\"closeForgotPasswordModal()\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeForgotPasswordModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"forgotPasswordFormProps\" (onSubmit)=\"forgotPasswordHandler($event)\" />\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n\n<!-- Reset Password Modal -->\n<ion-modal [isOpen]=\"isResetPasswordModalOpen\" [backdropDismiss]=\"false\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeResetPasswordModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"resetPasswordFormProps\" (onSubmit)=\"resetPasswordHandler($event)\" />\n <div class=\"resend-link\">\n <ion-text color=\"dark\">\n \u00BFNo has recibido tu c\u00F3digo?\n @if (resetResendCooldown > 0) {\n <span class=\"cooldown\">Reenviar en {{ resetResendCooldown }}s</span>\n } @else {\n <a (click)=\"resendResetCode()\">Reenviar</a>\n }\n </ion-text>\n </div>\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n\n<!-- MFA Verify Modal -->\n<ion-modal [isOpen]=\"isMFAVerifyModalOpen\" [backdropDismiss]=\"false\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeMFAVerifyModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"mfaVerifyFormProps\" (onSubmit)=\"verifyMFAHandler($event)\" />\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n", styles: [".val-login{width:100%}.logo-container{max-width:130px;margin-bottom:1.5rem}.auth-link{text-align:center;margin-top:1rem;font-size:.9rem}.auth-link a{color:var(--ion-color-primary);text-decoration:none;font-weight:500;cursor:pointer}.auth-link a:hover{text-decoration:underline}.oauth-separator{display:flex;align-items:center;margin:1.5rem 0}.oauth-separator:before,.oauth-separator:after{content:\"\";flex:1;height:1px;background:var(--ion-color-medium-tint)}.oauth-separator span{padding:0 1rem;color:var(--ion-color-dark);font-size:.85rem}.oauth-buttons{margin-bottom:1rem}.oauth-buttons ion-button{--border-radius: 8px;--border-width: 1px}.oauth-buttons ion-icon{font-size:1.2rem;margin-right:.5rem}.legal-notice{margin-top:1.5rem;padding-top:1rem;border-top:1px solid var(--ion-color-medium-tint)}.legal-notice p{font-size:.75rem;line-height:1.5;text-align:center;margin:0}.legal-notice a{color:var(--ion-color-primary);text-decoration:none}.legal-notice a:hover{text-decoration:underline}.modal-form-section{padding:1rem}.resend-link{text-align:center;margin-top:1rem;font-size:.9rem}.resend-link a{color:var(--ion-color-primary);cursor:pointer;font-weight:500}.resend-link a:hover{text-decoration:underline}.resend-link .cooldown{color:var(--ion-color-medium)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonModal, selector: "ion-modal" }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: FormComponent, selector: "val-form", inputs: ["props"], outputs: ["onSubmit", "onInvalid", "onSelectChange"] }, { kind: "component", type: ImageComponent, selector: "val-image", inputs: ["props"] }] }); }
|
|
695
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LoginComponent, isStandalone: true, selector: "val-login", inputs: { props: "props" }, outputs: { onSuccess: "onSuccess", onError: "onError", onMFARequired: "onMFARequired" }, ngImport: i0, template: "<div class=\"val-login\" [class.val-login--card]=\"config.showCard\">\n <!-- Logo -->\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n\n <!-- Login Form -->\n <val-form [props]=\"loginFormProps\" (onSubmit)=\"loginHandler($event)\" />\n\n <!-- OAuth Section -->\n @if (config.showOAuth && config.oauthProviders.length > 0) {\n <div class=\"oauth-separator\">\n <span>o contin\u00FAa con</span>\n </div>\n\n <div class=\"oauth-buttons\">\n @for (provider of config.oauthProviders; track provider) {\n <ion-button\n expand=\"block\"\n fill=\"outline\"\n color=\"dark\"\n (click)=\"loginWithOAuth(provider)\"\n [disabled]=\"isOAuthLoading\"\n >\n @switch (provider) {\n @case ('google') {\n <ion-icon slot=\"start\" name=\"logo-google\"></ion-icon>\n {{ isOAuthLoading ? 'Conectando...' : 'Continuar con Google' }}\n }\n @case ('apple') {\n <ion-icon slot=\"start\" name=\"logo-apple\"></ion-icon>\n {{ isOAuthLoading ? 'Conectando...' : 'Continuar con Apple' }}\n }\n @case ('microsoft') {\n <ion-icon slot=\"start\" name=\"logo-microsoft\"></ion-icon>\n {{ isOAuthLoading ? 'Conectando...' : 'Continuar con Microsoft' }}\n }\n }\n </ion-button>\n }\n </div>\n }\n\n <!-- Register Link -->\n @if (config.showRegister) {\n <div class=\"auth-link\">\n <ion-text color=\"dark\">\n \u00BFNo tienes cuenta?\n <a (click)=\"openRegisterModal()\">Registrarse</a>\n </ion-text>\n </div>\n }\n\n <!-- Forgot Password Link -->\n @if (config.showForgotPassword) {\n <div class=\"auth-link forgot-password\">\n <ion-text color=\"dark\">\n \u00BFOlvidaste tu contrase\u00F1a?\n <a (click)=\"openForgotPasswordModal()\">Recuperar contrase\u00F1a</a>\n </ion-text>\n </div>\n }\n\n <!-- Legal Notice -->\n @if (props.legal) {\n <div class=\"legal-notice\">\n <ion-text color=\"medium\">\n <p>\n Utilizamos los servicios de\n @if (props.legal.companyLink) {\n <a [href]=\"props.legal.companyLink\"><strong>{{ props.legal.companyName }}</strong></a>\n } @else {\n <strong>{{ props.legal.companyName }}</strong>\n }\n para ofrecerte una experiencia segura. Al iniciar sesi\u00F3n, aceptas\n nuestros\n @if (props.legal.termsLink) {\n <a [href]=\"props.legal.termsLink\">T\u00E9rminos y Condiciones</a>\n } @else {\n <span>T\u00E9rminos y Condiciones</span>\n }\n y\n @if (props.legal.privacyLink) {\n <a [href]=\"props.legal.privacyLink\">Pol\u00EDtica de Privacidad</a>\n } @else {\n <span>Pol\u00EDtica de Privacidad</span>\n }.\n </p>\n </ion-text>\n </div>\n }\n</div>\n\n<!-- Register Modal -->\n<ion-modal [isOpen]=\"isRegisterModalOpen\" (didDismiss)=\"closeRegisterModal()\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeRegisterModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"registerFormProps\" (onSubmit)=\"registerHandler($event)\" />\n <div class=\"auth-link\">\n <ion-text color=\"dark\">\n \u00BFYa tienes cuenta?\n <a (click)=\"closeRegisterModal()\">Iniciar sesi\u00F3n</a>\n </ion-text>\n </div>\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n\n<!-- Verify Email Modal -->\n<ion-modal [isOpen]=\"isVerifyModalOpen\" [backdropDismiss]=\"false\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeVerifyModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"verifyFormProps\" (onSubmit)=\"verifyHandler($event)\" />\n <div class=\"resend-link\">\n <ion-text color=\"dark\">\n \u00BFNo has recibido tu c\u00F3digo?\n @if (resendCooldown > 0) {\n <span class=\"cooldown\">Reenviar en {{ resendCooldown }}s</span>\n } @else {\n <a (click)=\"resendCode()\">Reenviar</a>\n }\n </ion-text>\n </div>\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n\n<!-- Forgot Password Modal -->\n<ion-modal [isOpen]=\"isForgotPasswordModalOpen\" (didDismiss)=\"closeForgotPasswordModal()\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeForgotPasswordModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"forgotPasswordFormProps\" (onSubmit)=\"forgotPasswordHandler($event)\" />\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n\n<!-- Reset Password Modal -->\n<ion-modal [isOpen]=\"isResetPasswordModalOpen\" [backdropDismiss]=\"false\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeResetPasswordModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"resetPasswordFormProps\" (onSubmit)=\"resetPasswordHandler($event)\" />\n <div class=\"resend-link\">\n <ion-text color=\"dark\">\n \u00BFNo has recibido tu c\u00F3digo?\n @if (resetResendCooldown > 0) {\n <span class=\"cooldown\">Reenviar en {{ resetResendCooldown }}s</span>\n } @else {\n <a (click)=\"resendResetCode()\">Reenviar</a>\n }\n </ion-text>\n </div>\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n\n<!-- MFA Verify Modal -->\n<ion-modal [isOpen]=\"isMFAVerifyModalOpen\" [backdropDismiss]=\"false\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeMFAVerifyModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"mfaVerifyFormProps\" (onSubmit)=\"verifyMFAHandler($event)\" />\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n", styles: [".val-login{width:100%}.val-login--card{padding:1rem;background:var(--ion-color-light);border-radius:16px;box-shadow:0 2px 8px #00000014}.logo-container{max-width:130px;margin-bottom:1.5rem}.auth-link{text-align:center;margin-top:1rem;font-size:.9rem}.auth-link a{color:var(--ion-color-primary);text-decoration:none;font-weight:500;cursor:pointer}.auth-link a:hover{text-decoration:underline}.oauth-separator{display:flex;align-items:center;margin:1.5rem 0}.oauth-separator:before,.oauth-separator:after{content:\"\";flex:1;height:1px;background:var(--ion-color-medium-tint)}.oauth-separator span{padding:0 1rem;color:var(--ion-color-dark);font-size:.85rem}.oauth-buttons{margin-bottom:1rem}.oauth-buttons ion-button{--border-radius: 8px;--border-width: 1px}.oauth-buttons ion-icon{font-size:1.2rem;margin-right:.5rem}.legal-notice{margin-top:1.5rem;padding-top:1rem;border-top:1px solid var(--ion-color-medium-tint)}.legal-notice p{font-size:.75rem;line-height:1.5;text-align:center;margin:0}.legal-notice a{color:var(--ion-color-primary);text-decoration:none}.legal-notice a:hover{text-decoration:underline}.modal-form-section{padding:1rem}.resend-link{text-align:center;margin-top:1rem;font-size:.9rem}.resend-link a{color:var(--ion-color-primary);cursor:pointer;font-weight:500}.resend-link a:hover{text-decoration:underline}.resend-link .cooldown{color:var(--ion-color-medium)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonModal, selector: "ion-modal" }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: FormComponent, selector: "val-form", inputs: ["props"], outputs: ["onSubmit", "onInvalid", "onSelectChange"] }, { kind: "component", type: ImageComponent, selector: "val-image", inputs: ["props"] }] }); }
|
|
696
696
|
}
|
|
697
697
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LoginComponent, decorators: [{
|
|
698
698
|
type: Component,
|
|
@@ -708,7 +708,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
708
708
|
IonToolbar,
|
|
709
709
|
FormComponent,
|
|
710
710
|
ImageComponent,
|
|
711
|
-
], template: "<div class=\"val-login\">\n <!-- Logo -->\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n\n <!-- Login Form -->\n <val-form [props]=\"loginFormProps\" (onSubmit)=\"loginHandler($event)\" />\n\n <!-- OAuth Section -->\n @if (config.showOAuth && config.oauthProviders.length > 0) {\n <div class=\"oauth-separator\">\n <span>o contin\u00FAa con</span>\n </div>\n\n <div class=\"oauth-buttons\">\n @for (provider of config.oauthProviders; track provider) {\n <ion-button\n expand=\"block\"\n fill=\"outline\"\n color=\"dark\"\n (click)=\"loginWithOAuth(provider)\"\n [disabled]=\"isOAuthLoading\"\n >\n @switch (provider) {\n @case ('google') {\n <ion-icon slot=\"start\" name=\"logo-google\"></ion-icon>\n {{ isOAuthLoading ? 'Conectando...' : 'Continuar con Google' }}\n }\n @case ('apple') {\n <ion-icon slot=\"start\" name=\"logo-apple\"></ion-icon>\n {{ isOAuthLoading ? 'Conectando...' : 'Continuar con Apple' }}\n }\n @case ('microsoft') {\n <ion-icon slot=\"start\" name=\"logo-microsoft\"></ion-icon>\n {{ isOAuthLoading ? 'Conectando...' : 'Continuar con Microsoft' }}\n }\n }\n </ion-button>\n }\n </div>\n }\n\n <!-- Register Link -->\n @if (config.showRegister) {\n <div class=\"auth-link\">\n <ion-text color=\"dark\">\n \u00BFNo tienes cuenta?\n <a (click)=\"openRegisterModal()\">Registrarse</a>\n </ion-text>\n </div>\n }\n\n <!-- Forgot Password Link -->\n @if (config.showForgotPassword) {\n <div class=\"auth-link forgot-password\">\n <ion-text color=\"dark\">\n \u00BFOlvidaste tu contrase\u00F1a?\n <a (click)=\"openForgotPasswordModal()\">Recuperar contrase\u00F1a</a>\n </ion-text>\n </div>\n }\n\n <!-- Legal Notice -->\n @if (props.legal) {\n <div class=\"legal-notice\">\n <ion-text color=\"medium\">\n <p>\n Utilizamos los servicios de\n @if (props.legal.companyLink) {\n <a [href]=\"props.legal.companyLink\"><strong>{{ props.legal.companyName }}</strong></a>\n } @else {\n <strong>{{ props.legal.companyName }}</strong>\n }\n para ofrecerte una experiencia segura. Al iniciar sesi\u00F3n, aceptas\n nuestros\n @if (props.legal.termsLink) {\n <a [href]=\"props.legal.termsLink\">T\u00E9rminos y Condiciones</a>\n } @else {\n <span>T\u00E9rminos y Condiciones</span>\n }\n y\n @if (props.legal.privacyLink) {\n <a [href]=\"props.legal.privacyLink\">Pol\u00EDtica de Privacidad</a>\n } @else {\n <span>Pol\u00EDtica de Privacidad</span>\n }.\n </p>\n </ion-text>\n </div>\n }\n</div>\n\n<!-- Register Modal -->\n<ion-modal [isOpen]=\"isRegisterModalOpen\" (didDismiss)=\"closeRegisterModal()\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeRegisterModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"registerFormProps\" (onSubmit)=\"registerHandler($event)\" />\n <div class=\"auth-link\">\n <ion-text color=\"dark\">\n \u00BFYa tienes cuenta?\n <a (click)=\"closeRegisterModal()\">Iniciar sesi\u00F3n</a>\n </ion-text>\n </div>\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n\n<!-- Verify Email Modal -->\n<ion-modal [isOpen]=\"isVerifyModalOpen\" [backdropDismiss]=\"false\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeVerifyModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"verifyFormProps\" (onSubmit)=\"verifyHandler($event)\" />\n <div class=\"resend-link\">\n <ion-text color=\"dark\">\n \u00BFNo has recibido tu c\u00F3digo?\n @if (resendCooldown > 0) {\n <span class=\"cooldown\">Reenviar en {{ resendCooldown }}s</span>\n } @else {\n <a (click)=\"resendCode()\">Reenviar</a>\n }\n </ion-text>\n </div>\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n\n<!-- Forgot Password Modal -->\n<ion-modal [isOpen]=\"isForgotPasswordModalOpen\" (didDismiss)=\"closeForgotPasswordModal()\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeForgotPasswordModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"forgotPasswordFormProps\" (onSubmit)=\"forgotPasswordHandler($event)\" />\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n\n<!-- Reset Password Modal -->\n<ion-modal [isOpen]=\"isResetPasswordModalOpen\" [backdropDismiss]=\"false\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeResetPasswordModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"resetPasswordFormProps\" (onSubmit)=\"resetPasswordHandler($event)\" />\n <div class=\"resend-link\">\n <ion-text color=\"dark\">\n \u00BFNo has recibido tu c\u00F3digo?\n @if (resetResendCooldown > 0) {\n <span class=\"cooldown\">Reenviar en {{ resetResendCooldown }}s</span>\n } @else {\n <a (click)=\"resendResetCode()\">Reenviar</a>\n }\n </ion-text>\n </div>\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n\n<!-- MFA Verify Modal -->\n<ion-modal [isOpen]=\"isMFAVerifyModalOpen\" [backdropDismiss]=\"false\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeMFAVerifyModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"mfaVerifyFormProps\" (onSubmit)=\"verifyMFAHandler($event)\" />\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n", styles: [".val-login{width:100%}.logo-container{max-width:130px;margin-bottom:1.5rem}.auth-link{text-align:center;margin-top:1rem;font-size:.9rem}.auth-link a{color:var(--ion-color-primary);text-decoration:none;font-weight:500;cursor:pointer}.auth-link a:hover{text-decoration:underline}.oauth-separator{display:flex;align-items:center;margin:1.5rem 0}.oauth-separator:before,.oauth-separator:after{content:\"\";flex:1;height:1px;background:var(--ion-color-medium-tint)}.oauth-separator span{padding:0 1rem;color:var(--ion-color-dark);font-size:.85rem}.oauth-buttons{margin-bottom:1rem}.oauth-buttons ion-button{--border-radius: 8px;--border-width: 1px}.oauth-buttons ion-icon{font-size:1.2rem;margin-right:.5rem}.legal-notice{margin-top:1.5rem;padding-top:1rem;border-top:1px solid var(--ion-color-medium-tint)}.legal-notice p{font-size:.75rem;line-height:1.5;text-align:center;margin:0}.legal-notice a{color:var(--ion-color-primary);text-decoration:none}.legal-notice a:hover{text-decoration:underline}.modal-form-section{padding:1rem}.resend-link{text-align:center;margin-top:1rem;font-size:.9rem}.resend-link a{color:var(--ion-color-primary);cursor:pointer;font-weight:500}.resend-link a:hover{text-decoration:underline}.resend-link .cooldown{color:var(--ion-color-medium)}\n"] }]
|
|
711
|
+
], template: "<div class=\"val-login\" [class.val-login--card]=\"config.showCard\">\n <!-- Logo -->\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n\n <!-- Login Form -->\n <val-form [props]=\"loginFormProps\" (onSubmit)=\"loginHandler($event)\" />\n\n <!-- OAuth Section -->\n @if (config.showOAuth && config.oauthProviders.length > 0) {\n <div class=\"oauth-separator\">\n <span>o contin\u00FAa con</span>\n </div>\n\n <div class=\"oauth-buttons\">\n @for (provider of config.oauthProviders; track provider) {\n <ion-button\n expand=\"block\"\n fill=\"outline\"\n color=\"dark\"\n (click)=\"loginWithOAuth(provider)\"\n [disabled]=\"isOAuthLoading\"\n >\n @switch (provider) {\n @case ('google') {\n <ion-icon slot=\"start\" name=\"logo-google\"></ion-icon>\n {{ isOAuthLoading ? 'Conectando...' : 'Continuar con Google' }}\n }\n @case ('apple') {\n <ion-icon slot=\"start\" name=\"logo-apple\"></ion-icon>\n {{ isOAuthLoading ? 'Conectando...' : 'Continuar con Apple' }}\n }\n @case ('microsoft') {\n <ion-icon slot=\"start\" name=\"logo-microsoft\"></ion-icon>\n {{ isOAuthLoading ? 'Conectando...' : 'Continuar con Microsoft' }}\n }\n }\n </ion-button>\n }\n </div>\n }\n\n <!-- Register Link -->\n @if (config.showRegister) {\n <div class=\"auth-link\">\n <ion-text color=\"dark\">\n \u00BFNo tienes cuenta?\n <a (click)=\"openRegisterModal()\">Registrarse</a>\n </ion-text>\n </div>\n }\n\n <!-- Forgot Password Link -->\n @if (config.showForgotPassword) {\n <div class=\"auth-link forgot-password\">\n <ion-text color=\"dark\">\n \u00BFOlvidaste tu contrase\u00F1a?\n <a (click)=\"openForgotPasswordModal()\">Recuperar contrase\u00F1a</a>\n </ion-text>\n </div>\n }\n\n <!-- Legal Notice -->\n @if (props.legal) {\n <div class=\"legal-notice\">\n <ion-text color=\"medium\">\n <p>\n Utilizamos los servicios de\n @if (props.legal.companyLink) {\n <a [href]=\"props.legal.companyLink\"><strong>{{ props.legal.companyName }}</strong></a>\n } @else {\n <strong>{{ props.legal.companyName }}</strong>\n }\n para ofrecerte una experiencia segura. Al iniciar sesi\u00F3n, aceptas\n nuestros\n @if (props.legal.termsLink) {\n <a [href]=\"props.legal.termsLink\">T\u00E9rminos y Condiciones</a>\n } @else {\n <span>T\u00E9rminos y Condiciones</span>\n }\n y\n @if (props.legal.privacyLink) {\n <a [href]=\"props.legal.privacyLink\">Pol\u00EDtica de Privacidad</a>\n } @else {\n <span>Pol\u00EDtica de Privacidad</span>\n }.\n </p>\n </ion-text>\n </div>\n }\n</div>\n\n<!-- Register Modal -->\n<ion-modal [isOpen]=\"isRegisterModalOpen\" (didDismiss)=\"closeRegisterModal()\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeRegisterModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"registerFormProps\" (onSubmit)=\"registerHandler($event)\" />\n <div class=\"auth-link\">\n <ion-text color=\"dark\">\n \u00BFYa tienes cuenta?\n <a (click)=\"closeRegisterModal()\">Iniciar sesi\u00F3n</a>\n </ion-text>\n </div>\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n\n<!-- Verify Email Modal -->\n<ion-modal [isOpen]=\"isVerifyModalOpen\" [backdropDismiss]=\"false\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeVerifyModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"verifyFormProps\" (onSubmit)=\"verifyHandler($event)\" />\n <div class=\"resend-link\">\n <ion-text color=\"dark\">\n \u00BFNo has recibido tu c\u00F3digo?\n @if (resendCooldown > 0) {\n <span class=\"cooldown\">Reenviar en {{ resendCooldown }}s</span>\n } @else {\n <a (click)=\"resendCode()\">Reenviar</a>\n }\n </ion-text>\n </div>\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n\n<!-- Forgot Password Modal -->\n<ion-modal [isOpen]=\"isForgotPasswordModalOpen\" (didDismiss)=\"closeForgotPasswordModal()\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeForgotPasswordModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"forgotPasswordFormProps\" (onSubmit)=\"forgotPasswordHandler($event)\" />\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n\n<!-- Reset Password Modal -->\n<ion-modal [isOpen]=\"isResetPasswordModalOpen\" [backdropDismiss]=\"false\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeResetPasswordModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"resetPasswordFormProps\" (onSubmit)=\"resetPasswordHandler($event)\" />\n <div class=\"resend-link\">\n <ion-text color=\"dark\">\n \u00BFNo has recibido tu c\u00F3digo?\n @if (resetResendCooldown > 0) {\n <span class=\"cooldown\">Reenviar en {{ resetResendCooldown }}s</span>\n } @else {\n <a (click)=\"resendResetCode()\">Reenviar</a>\n }\n </ion-text>\n </div>\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n\n<!-- MFA Verify Modal -->\n<ion-modal [isOpen]=\"isMFAVerifyModalOpen\" [backdropDismiss]=\"false\">\n <ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button fill=\"clear\" (click)=\"closeMFAVerifyModal()\">\n <ion-icon name=\"close-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n <section class=\"modal-form-section\">\n @if (props.logo) {\n <div class=\"logo-container\">\n <val-image [props]=\"props.logo\" />\n </div>\n }\n <val-form [props]=\"mfaVerifyFormProps\" (onSubmit)=\"verifyMFAHandler($event)\" />\n </section>\n </ion-content>\n </ng-template>\n</ion-modal>\n", styles: [".val-login{width:100%}.val-login--card{padding:1rem;background:var(--ion-color-light);border-radius:16px;box-shadow:0 2px 8px #00000014}.logo-container{max-width:130px;margin-bottom:1.5rem}.auth-link{text-align:center;margin-top:1rem;font-size:.9rem}.auth-link a{color:var(--ion-color-primary);text-decoration:none;font-weight:500;cursor:pointer}.auth-link a:hover{text-decoration:underline}.oauth-separator{display:flex;align-items:center;margin:1.5rem 0}.oauth-separator:before,.oauth-separator:after{content:\"\";flex:1;height:1px;background:var(--ion-color-medium-tint)}.oauth-separator span{padding:0 1rem;color:var(--ion-color-dark);font-size:.85rem}.oauth-buttons{margin-bottom:1rem}.oauth-buttons ion-button{--border-radius: 8px;--border-width: 1px}.oauth-buttons ion-icon{font-size:1.2rem;margin-right:.5rem}.legal-notice{margin-top:1.5rem;padding-top:1rem;border-top:1px solid var(--ion-color-medium-tint)}.legal-notice p{font-size:.75rem;line-height:1.5;text-align:center;margin:0}.legal-notice a{color:var(--ion-color-primary);text-decoration:none}.legal-notice a:hover{text-decoration:underline}.modal-form-section{padding:1rem}.resend-link{text-align:center;margin-top:1rem;font-size:.9rem}.resend-link a{color:var(--ion-color-primary);cursor:pointer;font-weight:500}.resend-link a:hover{text-decoration:underline}.resend-link .cooldown{color:var(--ion-color-medium)}\n"] }]
|
|
712
712
|
}], propDecorators: { props: [{
|
|
713
713
|
type: Input
|
|
714
714
|
}], onSuccess: [{
|
|
@@ -718,4 +718,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
718
718
|
}], onMFARequired: [{
|
|
719
719
|
type: Output
|
|
720
720
|
}] } });
|
|
721
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9sb2dpbi9sb2dpbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2xvZ2luL2xvZ2luLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixTQUFTLEVBQ1QsT0FBTyxFQUNQLFFBQVEsRUFDUixPQUFPLEVBQ1AsVUFBVSxHQUNYLE1BQU0sMkJBQTJCLENBQUM7QUFFbkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFJTCxTQUFTLEVBQ1QsZUFBZSxHQUNoQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBS0wsY0FBYyxHQUNmLE1BQU0sU0FBUyxDQUFDOztBQXFCakIsTUFBTSxPQUFPLGNB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LENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDakMsQ0FBQzsrR0FoeEJVLGNBQWM7bUdBQWQsY0FBYywwTEM3RDNCLDI5UEFxUEEsOHlDRHZNSSxZQUFZLCtCQUNaLFNBQVMsb1BBQ1QsVUFBVSw4RUFDVixVQUFVLHdLQUNWLFNBQVMsb0dBQ1QsT0FBTywySkFDUCxRQUFRLHNEQUNSLE9BQU8sZ0ZBQ1AsVUFBVSxtRkFDVixhQUFhLDhIQUNiLGNBQWM7OzRGQUtMLGNBQWM7a0JBbkIxQixTQUFTOytCQUNFLFdBQVcsY0FDVCxJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixTQUFTO3dCQUNULFVBQVU7d0JBQ1YsVUFBVTt3QkFDVixTQUFTO3dCQUNULE9BQU87d0JBQ1AsUUFBUTt3QkFDUixPQUFPO3dCQUNQLFVBQVU7d0JBQ1YsYUFBYTt3QkFDYixjQUFjO3FCQUNmOzhCQUtRLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBJb25CdXR0b24sXG4gIElvbkJ1dHRvbnMsXG4gIElvbkNvbnRlbnQsXG4gIElvbkhlYWRlcixcbiAgSW9uSWNvbixcbiAgSW9uTW9kYWwsXG4gIElvblRleHQsXG4gIElvblRvb2xiYXIsXG59IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGgnO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdG9hc3Quc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS9mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbWFnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2ltYWdlL2ltYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBGb3JtTWV0YWRhdGEsXG4gIEZvcm1TdWJtaXQsXG4gIElucHV0TWV0YWRhdGEsXG4gIElucHV0VHlwZSxcbiAgQ29tcG9uZW50U3RhdGVzLFxufSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBTb2xpZERlZmF1bHRCbG9jayB9IGZyb20gJy4uLy4uL2F0b21zL2J1dHRvbi9mYWN0b3J5JztcbmltcG9ydCB7XG4gIExvZ2luTWV0YWRhdGEsXG4gIExvZ2luU3VjY2Vzc0V2ZW50LFxuICBMb2dpbkVycm9yRXZlbnQsXG4gIE1GQVJlcXVpcmVkRXZlbnQsXG4gIExPR0lOX0RFRkFVTFRTLFxufSBmcm9tICcuL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWxvZ2luJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBJb25CdXR0b24sXG4gICAgSW9uQnV0dG9ucyxcbiAgICBJb25Db250ZW50LFxuICAgIElvbkhlYWRlcixcbiAgICBJb25JY29uLFxuICAgIElvbk1vZGFsLFxuICAgIElvblRleHQsXG4gICAgSW9uVG9vbGJhcixcbiAgICBGb3JtQ29tcG9uZW50LFxuICAgIEltYWdlQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vbG9naW4uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9sb2dpbi5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBMb2dpbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHByb3BzOiBMb2dpbk1ldGFkYXRhID0ge307XG5cbiAgQE91dHB1dCgpIG9uU3VjY2VzcyA9IG5ldyBFdmVudEVtaXR0ZXI8TG9naW5TdWNjZXNzRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBvbkVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxMb2dpbkVycm9yRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBvbk1GQVJlcXVpcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxNRkFSZXF1aXJlZEV2ZW50PigpO1xuXG4gIC8vIFNlcnZpY2VzXG4gIGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0b2FzdFNlcnZpY2UgPSBpbmplY3QoVG9hc3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblxuICAvLyBUaW1lcnNcbiAgcHJpdmF0ZSByZXNlbmRUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVzZXRSZXNlbmRUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gU3RhdGVcbiAgaXNPQXV0aExvYWRpbmcgPSBmYWxzZTtcbiAgaXNSZWdpc3Rlck1vZGFsT3BlbiA9IGZhbHNlO1xuICBpc1ZlcmlmeU1vZGFsT3BlbiA9IGZhbHNlO1xuICBpc0ZvcmdvdFBhc3N3b3JkTW9kYWxPcGVuID0gZmFsc2U7XG4gIGlzUmVzZXRQYXNzd29yZE1vZGFsT3BlbiA9IGZhbHNlO1xuICBpc01GQVZlcmlmeU1vZGFsT3BlbiA9IGZhbHNlO1xuXG4gIHBlbmRpbmdWZXJpZmljYXRpb25FbWFpbCA9ICcnO1xuICBwZW5kaW5nUmVzZXRFbWFpbCA9ICcnO1xuICByZXNlbmRDb29sZG93biA9IDA7XG4gIHJlc2V0UmVzZW5kQ29vbGRvd24gPSAwO1xuXG4gIC8vIFJlc29sdmVkIHByb3BzIHdpdGggZGVmYXVsdHNcbiAgZ2V0IGNvbmZpZygpOiBSZXF1aXJlZDxPbWl0PExvZ2luTWV0YWRhdGEsICdsb2dvJyB8ICdsZWdhbCcgfCAncmVkaXJlY3RPblN1Y2Nlc3MnPj4gJiBMb2dpbk1ldGFkYXRhIHtcbiAgICByZXR1cm4geyAuLi5MT0dJTl9ERUZBVUxUUywgLi4udGhpcy5wcm9wcyB9O1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIExPR0lOIEZPUk1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgZW1haWxJbnB1dDogSW5wdXRNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBJbnB1dFR5cGUuRU1BSUwsXG4gICAgbGFiZWw6ICdDb3JyZW8gZWxlY3Ryw7NuaWNvJyxcbiAgICBuYW1lOiAnZW1haWwnLFxuICAgIHRva2VuOiAnbG9naW4tZW1haWwnLFxuICAgIGhpbnQ6ICcnLFxuICAgIHBsYWNlaG9sZGVyOiAndHVAZW1haWwuY29tJyxcbiAgICBlcnJvcnM6IHtcbiAgICAgIHJlcXVpcmVkOiAnRWwgY29ycmVvIGVzIHJlcXVlcmlkbycsXG4gICAgICBlbWFpbDogJ0luZ3Jlc2EgdW4gY29ycmVvIHbDoWxpZG8nLFxuICAgIH0sXG4gICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdLFxuICAgIG9yZGVyOiAwLFxuICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICBjb250cm9sOiB1bmRlZmluZWQsXG4gIH07XG5cbiAgcGFzc3dvcmRJbnB1dDogSW5wdXRNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBJbnB1dFR5cGUuUEFTU1dPUkQsXG4gICAgbGFiZWw6ICdDb250cmFzZcOxYScsXG4gICAgbmFtZTogJ3Bhc3N3b3JkJyxcbiAgICB0b2tlbjogJ2xvZ2luLXBhc3N3b3JkJyxcbiAgICBoaW50OiAnJyxcbiAgICBwbGFjZWhvbGRlcjogJ+KAouKAouKAouKAouKAouKAouKAouKAoicsXG4gICAgZXJyb3JzOiB7XG4gICAgICByZXF1aXJlZDogJ0xhIGNvbnRyYXNlw7FhIGVzIHJlcXVlcmlkYScsXG4gICAgfSxcbiAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgb3JkZXI6IDEsXG4gICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgIGNvbnRyb2w6IHVuZGVmaW5lZCxcbiAgfTtcblxuICBsb2dpbkZvcm1Qcm9wczogRm9ybU1ldGFkYXRhID0ge1xuICAgIG5hbWU6ICdJbmljaWFyIHNlc2nDs24nLFxuICAgIHNlY3Rpb25zOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgZmllbGRzOiBbdGhpcy5lbWFpbElucHV0LCB0aGlzLnBhc3N3b3JkSW5wdXRdLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGFjdGlvbnM6IHtcbiAgICAgIC4uLlNvbGlkRGVmYXVsdEJsb2NrKCdJbmljaWFyIHNlc2nDs24nLCAnc3VibWl0JyksXG4gICAgICB0b2tlbjogJ2xvZ2luLXN1Ym1pdCcsXG4gICAgfSxcbiAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFR0lTVEVSIEZPUk1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgbmFtZUlucHV0OiBJbnB1dE1ldGFkYXRhID0ge1xuICAgIHR5cGU6IElucHV0VHlwZS5URVhULFxuICAgIGxhYmVsOiAnTm9tYnJlIGNvbXBsZXRvJyxcbiAgICBuYW1lOiAnbmFtZScsXG4gICAgdG9rZW46ICdyZWdpc3Rlci1uYW1lJyxcbiAgICBoaW50OiAnJyxcbiAgICBwbGFjZWhvbGRlcjogJ1R1IG5vbWJyZScsXG4gICAgZXJyb3JzOiB7XG4gICAgICByZXF1aXJlZDogJ0VsIG5vbWJyZSBlcyByZXF1ZXJpZG8nLFxuICAgICAgbWlubGVuZ3RoOiAnTcOtbmltbyAyIGNhcmFjdGVyZXMnLFxuICAgIH0sXG4gICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDIpXSxcbiAgICBvcmRlcjogMCxcbiAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgY29udHJvbDogdW5kZWZpbmVkLFxuICB9O1xuXG4gIHJlZ2lzdGVyRW1haWxJbnB1dDogSW5wdXRNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBJbnB1dFR5cGUuRU1BSUwsXG4gICAgbGFiZWw6ICdDb3JyZW8gZWxlY3Ryw7NuaWNvJyxcbiAgICBuYW1lOiAnZW1haWwnLFxuICAgIHRva2VuOiAncmVnaXN0ZXItZW1haWwnLFxuICAgIGhpbnQ6ICcnLFxuICAgIHBsYWNlaG9sZGVyOiAndHVAZW1haWwuY29tJyxcbiAgICBlcnJvcnM6IHtcbiAgICAgIHJlcXVpcmVkOiAnRWwgY29ycmVvIGVzIHJlcXVlcmlkbycsXG4gICAgICBlbWFpbDogJ0luZ3Jlc2EgdW4gY29ycmVvIHbDoWxpZG8nLFxuICAgIH0sXG4gICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdLFxuICAgIG9yZGVyOiAxLFxuICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICBjb250cm9sOiB1bmRlZmluZWQsXG4gIH07XG5cbiAgcmVnaXN0ZXJQYXNzd29yZElucHV0OiBJbnB1dE1ldGFkYXRhID0ge1xuICAgIHR5cGU6IElucHV0VHlwZS5QQVNTV09SRCxcbiAgICBsYWJlbDogJ0NvbnRyYXNlw7FhJyxcbiAgICBuYW1lOiAncGFzc3dvcmQnLFxuICAgIHRva2VuOiAncmVnaXN0ZXItcGFzc3dvcmQnLFxuICAgIGhpbnQ6ICcnLFxuICAgIHBsYWNlaG9sZGVyOiAn4oCi4oCi4oCi4oCi4oCi4oCi4oCi4oCiJyxcbiAgICBlcnJvcnM6IHtcbiAgICAgIHJlcXVpcmVkOiAnTGEgY29udHJhc2XDsWEgZXMgcmVxdWVyaWRhJyxcbiAgICAgIG1pbmxlbmd0aDogJ03DrW5pbW8gOCBjYXJhY3RlcmVzJyxcbiAgICB9LFxuICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg4KV0sXG4gICAgb3JkZXI6IDIsXG4gICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgIGNvbnRyb2w6IHVuZGVmaW5lZCxcbiAgfTtcblxuICByZWdpc3RlckZvcm1Qcm9wczogRm9ybU1ldGFkYXRhID0ge1xuICAgIG5hbWU6ICdDcmVhciBjdWVudGEnLFxuICAgIHNlY3Rpb25zOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgZmllbGRzOiBbdGhpcy5uYW1lSW5wdXQsIHRoaXMucmVnaXN0ZXJFbWFpbElucHV0LCB0aGlzLnJlZ2lzdGVyUGFzc3dvcmRJbnB1dF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgYWN0aW9uczoge1xuICAgICAgLi4uU29saWREZWZhdWx0QmxvY2soJ1JlZ2lzdHJhcnNlJywgJ3N1Ym1pdCcpLFxuICAgICAgdG9rZW46ICdyZWdpc3Rlci1zdWJtaXQnLFxuICAgIH0sXG4gICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBWRVJJRlkgRU1BSUwgRk9STVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICB2ZXJpZnlQaW5JbnB1dDogSW5wdXRNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBJbnB1dFR5cGUuUElOX0NPREUsXG4gICAgbGFiZWw6ICcnLFxuICAgIG5hbWU6ICdjb2RlJyxcbiAgICB0b2tlbjogJ3ZlcmlmeS1waW4nLFxuICAgIGhpbnQ6ICcnLFxuICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICBlcnJvcnM6IHtcbiAgICAgIHJlcXVpcmVkOiAnRWwgY8OzZGlnbyBlcyByZXF1ZXJpZG8nLFxuICAgICAgbWlubGVuZ3RoOiAnSW5ncmVzYSBsb3MgNiBkw61naXRvcycsXG4gICAgfSxcbiAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNildLFxuICAgIG9yZGVyOiAwLFxuICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICBjb250cm9sOiB1bmRlZmluZWQsXG4gICAgbGVuZ3RoOiA2LFxuICAgIGFsbG93TnVtYmVyc09ubHk6IHRydWUsXG4gICAgYXV0b0ZvY3VzOiB0cnVlLFxuICB9O1xuXG4gIHZlcmlmeUZvcm1Qcm9wczogRm9ybU1ldGFkYXRhID0ge1xuICAgIG5hbWU6ICdWZXJpZmljYXIgY29ycmVvJyxcbiAgICBzZWN0aW9uczogW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnSW5ncmVzYSBlbCBjw7NkaWdvIGRlIHZlcmlmaWNhY2nDs24gZW52aWFkbyBhIHR1IGNvcnJlby4nLFxuICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgZmllbGRzOiBbdGhpcy52ZXJpZnlQaW5JbnB1dF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgYWN0aW9uczoge1xuICAgICAgLi4uU29saWREZWZhdWx0QmxvY2soJ1ZlcmlmaWNhcicsICdzdWJtaXQnKSxcbiAgICAgIHRva2VuOiAndmVyaWZ5LXN1Ym1pdCcsXG4gICAgfSxcbiAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE1GQSBWRVJJRlkgRk9STVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBtZmFQaW5JbnB1dDogSW5wdXRNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBJbnB1dFR5cGUuUElOX0NPREUsXG4gICAgbGFiZWw6ICcnLFxuICAgIG5hbWU6ICdjb2RlJyxcbiAgICB0b2tlbjogJ21mYS1waW4nLFxuICAgIGhpbnQ6ICcnLFxuICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICBlcnJvcnM6IHtcbiAgICAgIHJlcXVpcmVkOiAnRWwgY8OzZGlnbyBlcyByZXF1ZXJpZG8nLFxuICAgICAgbWlubGVuZ3RoOiAnSW5ncmVzYSBsb3MgNiBkw61naXRvcycsXG4gICAgfSxcbiAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNildLFxuICAgIG9yZGVyOiAwLFxuICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICBjb250cm9sOiB1bmRlZmluZWQsXG4gICAgbGVuZ3RoOiA2LFxuICAgIGFsbG93TnVtYmVyc09ubHk6IHRydWUsXG4gICAgYXV0b0ZvY3VzOiB0cnVlLFxuICB9O1xuXG4gIG1mYVZlcmlmeUZvcm1Qcm9wczogRm9ybU1ldGFkYXRhID0ge1xuICAgIG5hbWU6ICdWZXJpZmljYWNpw7NuIE1GQScsXG4gICAgc2VjdGlvbnM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIG9yZGVyOiAwLFxuICAgICAgICBmaWVsZHM6IFt0aGlzLm1mYVBpbklucHV0XSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBhY3Rpb25zOiB7XG4gICAgICAuLi5Tb2xpZERlZmF1bHRCbG9jaygnVmVyaWZpY2FyJywgJ3N1Ym1pdCcpLFxuICAgICAgdG9rZW46ICdtZmEtdmVyaWZ5LXN1Ym1pdCcsXG4gICAgfSxcbiAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEZPUkdPVCBQQVNTV09SRCBGT1JNXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGZvcmdvdEVtYWlsSW5wdXQ6IElucHV0TWV0YWRhdGEgPSB7XG4gICAgdHlwZTogSW5wdXRUeXBlLkVNQUlMLFxuICAgIGxhYmVsOiAnJyxcbiAgICBuYW1lOiAnZW1haWwnLFxuICAgIHRva2VuOiAnZm9yZ290LWVtYWlsJyxcbiAgICBoaW50OiAnJyxcbiAgICBwbGFjZWhvbGRlcjogJ3R1QGVtYWlsLmNvbScsXG4gICAgZXJyb3JzOiB7XG4gICAgICByZXF1aXJlZDogJ0VsIGNvcnJlbyBlcyByZXF1ZXJpZG8nLFxuICAgICAgZW1haWw6ICdJbmdyZXNhIHVuIGNvcnJlbyB2w6FsaWRvJyxcbiAgICB9LFxuICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXSxcbiAgICBvcmRlcjogMCxcbiAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgY29udHJvbDogdW5kZWZpbmVkLFxuICB9O1xuXG4gIGZvcmdvdFBhc3N3b3JkRm9ybVByb3BzOiBGb3JtTWV0YWRhdGEgPSB7XG4gICAgbmFtZTogJ1JlY3VwZXJhciBjb250cmFzZcOxYScsXG4gICAgc2VjdGlvbnM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0luZ3Jlc2EgdHUgY29ycmVvIGVsZWN0csOzbmljbyB5IHRlIGVudmlhcmVtb3MgdW4gY8OzZGlnbyBwYXJhIHJlc3RhYmxlY2VyIHR1IGNvbnRyYXNlw7FhLicsXG4gICAgICAgIG9yZGVyOiAwLFxuICAgICAgICBmaWVsZHM6IFt0aGlzLmZvcmdvdEVtYWlsSW5wdXRdLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGFjdGlvbnM6IHtcbiAgICAgIC4uLlNvbGlkRGVmYXVsdEJsb2NrKCdFbnZpYXIgY8OzZGlnbycsICdzdWJtaXQnKSxcbiAgICAgIHRva2VuOiAnZm9yZ290LXN1Ym1pdCcsXG4gICAgfSxcbiAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFU0VUIFBBU1NXT1JEIEZPUk1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcmVzZXRQaW5JbnB1dDogSW5wdXRNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBJbnB1dFR5cGUuUElOX0NPREUsXG4gICAgbGFiZWw6ICcnLFxuICAgIG5hbWU6ICdjb2RlJyxcbiAgICB0b2tlbjogJ3Jlc2V0LXBpbicsXG4gICAgaGludDogJycsXG4gICAgcGxhY2Vob2xkZXI6ICcnLFxuICAgIGVycm9yczoge1xuICAgICAgcmVxdWlyZWQ6ICdFbCBjw7NkaWdvIGVzIHJlcXVlcmlkbycsXG4gICAgICBtaW5sZW5ndGg6ICdJbmdyZXNhIGxvcyA2IGTDrWdpdG9zJyxcbiAgICB9LFxuICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg2KV0sXG4gICAgb3JkZXI6IDAsXG4gICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgIGNvbnRyb2w6IHVuZGVmaW5lZCxcbiAgICBsZW5ndGg6IDYsXG4gICAgYWxsb3dOdW1iZXJzT25seTogdHJ1ZSxcbiAgICBhdXRvRm9jdXM6IHRydWUsXG4gIH07XG5cbiAgbmV3UGFzc3dvcmRJbnB1dDogSW5wdXRNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBJbnB1dFR5cGUuUEFTU1dPUkQsXG4gICAgbGFiZWw6ICdOdWV2YSBjb250cmFzZcOxYScsXG4gICAgbmFtZTogJ25ld1Bhc3N3b3JkJyxcbiAgICB0b2tlbjogJ3Jlc2V0LW5ldy1wYXNzd29yZCcsXG4gICAgaGludDogJ03DrW5pbW8gOCBjYXJhY3RlcmVzJyxcbiAgICBwbGFjZWhvbGRlcjogJ+KAouKAouKAouKAouKAouKAouKAouKAoicsXG4gICAgZXJyb3JzOiB7XG4gICAgICByZXF1aXJlZDogJ0xhIGNvbnRyYXNlw7FhIGVzIHJlcXVlcmlkYScsXG4gICAgICBtaW5sZW5ndGg6ICdNw61uaW1vIDggY2FyYWN0ZXJlcycsXG4gICAgfSxcbiAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoOCldLFxuICAgIG9yZGVyOiAxLFxuICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICBjb250cm9sOiB1bmRlZmluZWQsXG4gIH07XG5cbiAgcmVzZXRQYXNzd29yZEZvcm1Qcm9wczogRm9ybU1ldGFkYXRhID0ge1xuICAgIG5hbWU6ICdSZXN0YWJsZWNlciBjb250cmFzZcOxYScsXG4gICAgc2VjdGlvbnM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0hlbW9zIGVudmlhZG8gdW4gY8OzZGlnbyBkZSB2ZXJpZmljYWNpw7NuIGEgdHUgY29ycmVvLicsXG4gICAgICAgIG9yZGVyOiAwLFxuICAgICAgICBmaWVsZHM6IFt0aGlzLnJlc2V0UGluSW5wdXQsIHRoaXMubmV3UGFzc3dvcmRJbnB1dF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgYWN0aW9uczoge1xuICAgICAgLi4uU29saWREZWZhdWx0QmxvY2soJ0NhbWJpYXIgY29udHJhc2XDsWEnLCAnc3VibWl0JyksXG4gICAgICB0b2tlbjogJ3Jlc2V0LXN1Ym1pdCcsXG4gICAgfSxcbiAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEhBTkRMRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGxvZ2luSGFuZGxlcihldmVudDogRm9ybVN1Ym1pdCk6IHZvaWQge1xuICAgIGNvbnN0IGVtYWlsID0gZXZlbnQuZmllbGRzWydlbWFpbCddO1xuICAgIGNvbnN0IHBhc3N3b3JkID0gZXZlbnQuZmllbGRzWydwYXNzd29yZCddO1xuXG4gICAgaWYgKCFlbWFpbCB8fCAhcGFzc3dvcmQpIHtcbiAgICAgIHRoaXMuc2hvd1RvYXN0KCdDb21wbGV0YSB0b2RvcyBsb3MgY2FtcG9zLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9naW5Gb3JtUHJvcHMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuV09SS0lORztcblxuICAgIHRoaXMuYXV0aFNlcnZpY2Uuc2lnbmluKHsgZW1haWwsIHBhc3N3b3JkIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9naW5Gb3JtUHJvcHMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcblxuICAgICAgICBpZiAodGhpcy5hdXRoU2VydmljZS5tZmFQZW5kaW5nKCkucmVxdWlyZWQpIHtcbiAgICAgICAgICB0aGlzLm9wZW5NRkFWZXJpZnlNb2RhbCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlTG9naW5TdWNjZXNzKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5sb2dpbkZvcm1Qcm9wcy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEO1xuXG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IChlcnIgYXMgeyBjb2RlPzogc3RyaW5nIH0pPy5jb2RlO1xuICAgICAgICBpZiAoZXJyb3JDb2RlID09PSAnQVVUSFYyX0VNQUlMX05PVF9WRVJJRklFRCcpIHtcbiAgICAgICAgICB0aGlzLm9wZW5WZXJpZnlNb2RhbChlbWFpbCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdzaWduaW4nKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBsb2dpbldpdGhPQXV0aChwcm92aWRlcjogJ2dvb2dsZScgfCAnYXBwbGUnIHwgJ21pY3Jvc29mdCcpOiB2b2lkIHtcbiAgICB0aGlzLmlzT0F1dGhMb2FkaW5nID0gdHJ1ZTtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2Uuc2lnbmluV2l0aE9BdXRoKHByb3ZpZGVyKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLmlzT0F1dGhMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuYXV0aFNlcnZpY2UubWZhUGVuZGluZygpLnJlcXVpcmVkKSB7XG4gICAgICAgICAgdGhpcy5vcGVuTUZBVmVyaWZ5TW9kYWwoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhhbmRsZUxvZ2luU3VjY2Vzcyhwcm92aWRlcik7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5pc09BdXRoTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IChlcnIgYXMgeyBjb2RlPzogc3RyaW5nIH0pPy5jb2RlO1xuICAgICAgICBpZiAoZXJyb3JDb2RlID09PSAnUE9QVVBfQ0xPU0VEJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAnb2F1dGgnKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUkVHSVNURVIgSEFORExFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgb3BlblJlZ2lzdGVyTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc1JlZ2lzdGVyTW9kYWxPcGVuID0gdHJ1ZTtcbiAgfVxuXG4gIGNsb3NlUmVnaXN0ZXJNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzUmVnaXN0ZXJNb2RhbE9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIHJlZ2lzdGVySGFuZGxlcihldmVudDogRm9ybVN1Ym1pdCk6IHZvaWQge1xuICAgIGNvbnN0IG5hbWUgPSBldmVudC5maWVsZHNbJ25hbWUnXTtcbiAgICBjb25zdCBlbWFpbCA9IGV2ZW50LmZpZWxkc1snZW1haWwnXTtcbiAgICBjb25zdCBwYXNzd29yZCA9IGV2ZW50LmZpZWxkc1sncGFzc3dvcmQnXTtcblxuICAgIGlmICghbmFtZSB8fCAhZW1haWwgfHwgIXBhc3N3b3JkKSB7XG4gICAgICB0aGlzLnNob3dUb2FzdCgnQ29tcGxldGEgdG9kb3MgbG9zIGNhbXBvcy4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlZ2lzdGVyRm9ybVByb3BzLnN0YXRlID0gQ29tcG9uZW50U3RhdGVzLldPUktJTkc7XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlLnNpZ251cCh7IG5hbWUsIGVtYWlsLCBwYXNzd29yZCB9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRm9ybVByb3BzLnN0YXRlID0gQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQ7XG4gICAgICAgIHRoaXMuY2xvc2VSZWdpc3Rlck1vZGFsKCk7XG4gICAgICAgIHRoaXMub3BlblZlcmlmeU1vZGFsKGVtYWlsKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRm9ybVByb3BzLnN0YXRlID0gQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQ7XG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAnc2lnbnVwJyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFZFUklGWSBFTUFJTCBIQU5ETEVSU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBvcGVuVmVyaWZ5TW9kYWwoZW1haWw6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucGVuZGluZ1ZlcmlmaWNhdGlvbkVtYWlsID0gZW1haWw7XG4gICAgdGhpcy52ZXJpZnlGb3JtUHJvcHMuc2VjdGlvbnNbMF0ubmFtZSA9IGBJbmdyZXNhIGVsIGPDs2RpZ28gZW52aWFkbyBhICR7ZW1haWx9YDtcbiAgICB0aGlzLnZlcmlmeUZvcm1Qcm9wcy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEO1xuICAgIHRoaXMuaXNWZXJpZnlNb2RhbE9wZW4gPSB0cnVlO1xuICAgIHRoaXMuc3RhcnRSZXNlbmRDb29sZG93bigpO1xuICB9XG5cbiAgY2xvc2VWZXJpZnlNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzVmVyaWZ5TW9kYWxPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5wZW5kaW5nVmVyaWZpY2F0aW9uRW1haWwgPSAnJztcbiAgICB0aGlzLnN0b3BSZXNlbmRDb29sZG93bigpO1xuICB9XG5cbiAgdmVyaWZ5SGFuZGxlcihldmVudDogRm9ybVN1Ym1pdCk6IHZvaWQge1xuICAgIGNvbnN0IGNvZGUgPSBldmVudC5maWVsZHNbJ2NvZGUnXTtcblxuICAgIHRoaXMudmVyaWZ5Rm9ybVByb3BzLnN0YXRlID0gQ29tcG9uZW50U3RhdGVzLldPUktJTkc7XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAudmVyaWZ5RW1haWwoe1xuICAgICAgICBlbWFpbDogdGhpcy5wZW5kaW5nVmVyaWZpY2F0aW9uRW1haWwsXG4gICAgICAgIGNvZGUsXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnZlcmlmeUZvcm1Qcm9wcy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEO1xuICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KCfCoUVtYWlsIHZlcmlmaWNhZG8hIEJpZW52ZW5pZG8uJyk7XG4gICAgICAgICAgdGhpcy5jbG9zZVZlcmlmeU1vZGFsKCk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVMb2dpblN1Y2Nlc3MoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLnZlcmlmeUZvcm1Qcm9wcy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEO1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAndmVyaWZ5Jyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIHJlc2VuZENvZGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVzZW5kQ29vbGRvd24gPiAwKSByZXR1cm47XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAucmVzZW5kQ29kZSh7XG4gICAgICAgIGVtYWlsOiB0aGlzLnBlbmRpbmdWZXJpZmljYXRpb25FbWFpbCxcbiAgICAgICAgdHlwZTogJ0VNQUlMX1ZFUklGWScsXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCgnQ8OzZGlnbyByZWVudmlhZG8uIFJldmlzYSB0dSBlbWFpbC4nKTtcbiAgICAgICAgICB0aGlzLnN0YXJ0UmVzZW5kQ29vbGRvd24oKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ3ZlcmlmeScpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTUZBIEhBTkRMRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIG9wZW5NRkFWZXJpZnlNb2RhbCgpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRob2QgPSB0aGlzLmF1dGhTZXJ2aWNlLm1mYVBlbmRpbmcoKS5tZXRob2Q7XG4gICAgdGhpcy5tZmFWZXJpZnlGb3JtUHJvcHMuc2VjdGlvbnNbMF0ubmFtZSA9XG4gICAgICBtZXRob2QgPT09ICdUT1RQJ1xuICAgICAgICA/ICdJbmdyZXNhIGVsIGPDs2RpZ28gZGUgdHUgYXBwIGRlIGF1dGVudGljYWNpw7NuJ1xuICAgICAgICA6IG1ldGhvZCA9PT0gJ0VNQUlMJ1xuICAgICAgICAgID8gJ0luZ3Jlc2EgZWwgY8OzZGlnbyBlbnZpYWRvIGEgdHUgY29ycmVvJ1xuICAgICAgICAgIDogJ0luZ3Jlc2EgZWwgY8OzZGlnbyBlbnZpYWRvIGEgdHUgdGVsw6lmb25vJztcbiAgICB0aGlzLm1mYVZlcmlmeUZvcm1Qcm9wcy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEO1xuICAgIHRoaXMuaXNNRkFWZXJpZnlNb2RhbE9wZW4gPSB0cnVlO1xuXG4gICAgdGhpcy5vbk1GQVJlcXVpcmVkLmVtaXQoeyBtZXRob2Q6IG1ldGhvZCBhcyAnVE9UUCcgfCAnRU1BSUwnIHwgJ1NNUycgfSk7XG4gIH1cblxuICBjbG9zZU1GQVZlcmlmeU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNNRkFWZXJpZnlNb2RhbE9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIHZlcmlmeU1GQUhhbmRsZXIoZXZlbnQ6IEZvcm1TdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBjb2RlID0gZXZlbnQuZmllbGRzWydjb2RlJ107XG5cbiAgICB0aGlzLm1mYVZlcmlmeUZvcm1Qcm9wcy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5XT1JLSU5HO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZS52ZXJpZnlNRkEoY29kZSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5tZmFWZXJpZnlGb3JtUHJvcHMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcbiAgICAgICAgdGhpcy5jbG9zZU1GQVZlcmlmeU1vZGFsKCk7XG4gICAgICAgIHRoaXMuaGFuZGxlTG9naW5TdWNjZXNzKHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5tZmFWZXJpZnlGb3JtUHJvcHMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdtZmEnKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRk9SR09UIFBBU1NXT1JEIEhBTkRMRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIG9wZW5Gb3Jnb3RQYXNzd29yZE1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb3Jnb3RQYXNzd29yZE1vZGFsT3BlbiA9IHRydWU7XG4gIH1cblxuICBjbG9zZUZvcmdvdFBhc3N3b3JkTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc0ZvcmdvdFBhc3N3b3JkTW9kYWxPcGVuID0gZmFsc2U7XG4gIH1cblxuICBmb3Jnb3RQYXNzd29yZEhhbmRsZXIoZXZlbnQ6IEZvcm1TdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBlbWFpbCA9IGV2ZW50LmZpZWxkc1snZW1haWwnXTtcblxuICAgIGlmICghZW1haWwpIHtcbiAgICAgIHRoaXMuc2hvd1RvYXN0KCdJbmdyZXNhIHR1IGNvcnJlbyBlbGVjdHLDs25pY28uJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5mb3Jnb3RQYXNzd29yZEZvcm1Qcm9wcy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5XT1JLSU5HO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZS5mb3Jnb3RQYXNzd29yZCh7IGVtYWlsIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuZm9yZ290UGFzc3dvcmRGb3JtUHJvcHMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcbiAgICAgICAgdGhpcy5jbG9zZUZvcmdvdFBhc3N3b3JkTW9kYWwoKTtcbiAgICAgICAgdGhpcy5vcGVuUmVzZXRQYXNzd29yZE1vZGFsKGVtYWlsKTtcbiAgICAgICAgdGhpcy5zaG93VG9hc3QoJ0PDs2RpZ28gZW52aWFkby4gUmV2aXNhIHR1IGVtYWlsLicpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuZm9yZ290UGFzc3dvcmRGb3JtUHJvcHMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdmb3Jnb3QnKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUkVTRVQgUEFTU1dPUkQgSEFORExFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgb3BlblJlc2V0UGFzc3dvcmRNb2RhbChlbWFpbDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wZW5kaW5nUmVzZXRFbWFpbCA9IGVtYWlsO1xuICAgIHRoaXMucmVzZXRQYXNzd29yZEZvcm1Qcm9wcy5zZWN0aW9uc1swXS5uYW1lID0gYEluZ3Jlc2EgZWwgY8OzZGlnbyBlbnZpYWRvIGEgJHtlbWFpbH1gO1xuICAgIHRoaXMucmVzZXRQYXNzd29yZEZvcm1Qcm9wcy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEO1xuICAgIHRoaXMuaXNSZXNldFBhc3N3b3JkTW9kYWxPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLnN0YXJ0UmVzZXRSZXNlbmRDb29sZG93bigpO1xuICB9XG5cbiAgY2xvc2VSZXNldFBhc3N3b3JkTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc1Jlc2V0UGFzc3dvcmRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnBlbmRpbmdSZXNldEVtYWlsID0gJyc7XG4gICAgdGhpcy5zdG9wUmVzZXRSZXNlbmRDb29sZG93bigpO1xuICB9XG5cbiAgcmVzZXRQYXNzd29yZEhhbmRsZXIoZXZlbnQ6IEZvcm1TdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBjb2RlID0gZXZlbnQuZmllbGRzWydjb2RlJ107XG4gICAgY29uc3QgbmV3UGFzc3dvcmQgPSBldmVudC5maWVsZHNbJ25ld1Bhc3N3b3JkJ107XG5cbiAgICB0aGlzLnJlc2V0UGFzc3dvcmRGb3JtUHJvcHMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuV09SS0lORztcblxuICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgIC5yZXNldFBhc3N3b3JkKHtcbiAgICAgICAgZW1haWw6IHRoaXMucGVuZGluZ1Jlc2V0RW1haWwsXG4gICAgICAgIGNvZGUsXG4gICAgICAgIG5ld1Bhc3N3b3JkLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZXNldFBhc3N3b3JkRm9ybVByb3BzLnN0YXRlID0gQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQ7XG4gICAgICAgICAgdGhpcy5zaG93VG9hc3QoJ8KhQ29udHJhc2XDsWEgYWN0dWFsaXphZGEhIFlhIHB1ZWRlcyBpbmljaWFyIHNlc2nDs24uJyk7XG4gICAgICAgICAgdGhpcy5jbG9zZVJlc2V0UGFzc3dvcmRNb2RhbCgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMucmVzZXRQYXNzd29yZEZvcm1Qcm9wcy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEO1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAncmVzZXQnKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgcmVzZW5kUmVzZXRDb2RlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlc2V0UmVzZW5kQ29vbGRvd24gPiAwKSByZXR1cm47XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAucmVzZW5kQ29kZSh7XG4gICAgICAgIGVtYWlsOiB0aGlzLnBlbmRpbmdSZXNldEVtYWlsLFxuICAgICAgICB0eXBlOiAnUEFTU1dPUkRfUkVTRVQnLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zaG93VG9hc3QoJ0PDs2RpZ28gcmVlbnZpYWRvLiBSZXZpc2EgdHUgZW1haWwuJyk7XG4gICAgICAgICAgdGhpcy5zdGFydFJlc2V0UmVzZW5kQ29vbGRvd24oKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ3Jlc2V0Jyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBIRUxQRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgaGFuZGxlTG9naW5TdWNjZXNzKG9hdXRoUHJvdmlkZXI/OiAnZ29vZ2xlJyB8ICdhcHBsZScgfCAnbWljcm9zb2Z0JywgbWZhQ29tcGxldGVkPzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2hvd1RvYXN0KCfCoUJpZW52ZW5pZG8hJyk7XG5cbiAgICB0aGlzLm9uU3VjY2Vzcy5lbWl0KHtcbiAgICAgIHVzZXI6IHRoaXMuYXV0aFNlcnZpY2UudXNlcigpLFxuICAgICAgbWZhQ29tcGxldGVkLFxuICAgICAgb2F1dGhQcm92aWRlcixcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnByb3BzLnJlZGlyZWN0T25TdWNjZXNzKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5wcm9wcy5yZWRpcmVjdE9uU3VjY2Vzc10pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXJyb3IoZXJyOiB1bmtub3duLCBvcGVyYXRpb246IExvZ2luRXJyb3JFdmVudFsnb3BlcmF0aW9uJ10pOiB2b2lkIHtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyKTtcbiAgICB0aGlzLnNob3dUb2FzdChtZXNzYWdlKTtcblxuICAgIHRoaXMub25FcnJvci5lbWl0KHtcbiAgICAgIGNvZGU6IChlcnIgYXMgeyBjb2RlPzogc3RyaW5nIH0pPy5jb2RlLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIG9wZXJhdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd1RvYXN0KG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coe1xuICAgICAgbWVzc2FnZSxcbiAgICAgIGR1cmF0aW9uOiAzNTAwLFxuICAgICAgcG9zaXRpb246ICd0b3AnLFxuICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXJyb3JNZXNzYWdlKGVycjogdW5rbm93bik6IHN0cmluZyB7XG4gICAgY29uc3QgZXJyb3IgPSBlcnIgYXMge1xuICAgICAgZXJyb3I/OiB7IG1lc3NhZ2U/OiBzdHJpbmc7IGNvZGU/OiBzdHJpbmcgfTtcbiAgICAgIGNvZGU/OiBzdHJpbmc7XG4gICAgfTtcblxuICAgIGNvbnN0IGVycm9yTWVzc2FnZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAvLyBWYWxpZGF0aW9uXG4gICAgICBWQUxJREFUSU9OX01JU1NJTkdfUkVRVUlSRURfRklFTERTOiAnRmFsdGFuIGNhbXBvcyByZXF1ZXJpZG9zJyxcbiAgICAgIFZBTElEQVRJT05fSU5WQUxJRF9SRVFVRVNUOiAnU29saWNpdHVkIGludsOhbGlkYScsXG5cbiAgICAgIC8vIFNpZ25pblxuICAgICAgQVVUSFYyX0lOVkFMSURfQ1JFREVOVElBTFM6ICdDb3JyZW8gbyBjb250cmFzZcOxYSBpbmNvcnJlY3RvcycsXG4gICAgICBBVVRIVjJfRU1BSUxfTk9UX1ZFUklGSUVEOiAnRGViZXMgdmVyaWZpY2FyIHR1IGNvcnJlbyBlbGVjdHLDs25pY28nLFxuICAgICAgQVVUSFYyX0FDQ09VTlRfU1VTUEVOREVEOiAnVHUgY3VlbnRhIGhhIHNpZG8gc3VzcGVuZGlkYScsXG4gICAgICBBVVRIVjJfU0lHTklOX0ZBSUxFRDogJ0Vycm9yIGFsIGluaWNpYXIgc2VzacOzbicsXG5cbiAgICAgIC8vIFNpZ251cFxuICAgICAgQVVUSFYyX0VNQUlMX0VYSVNUUzogJ0VzdGUgY29ycmVvIHlhIGVzdMOhIHJlZ2lzdHJhZG8nLFxuICAgICAgQVVUSFYyX1BIT05FX0VYSVNUUzogJ0VzdGUgdGVsw6lmb25vIHlhIGVzdMOhIHJlZ2lzdHJhZG8nLFxuICAgICAgQVVUSFYyX1dFQUtfUEFTU1dPUkQ6ICdMYSBjb250cmFzZcOxYSBlcyBtdXkgZMOpYmlsJyxcbiAgICAgIEFVVEhWMl9TSUdOVVBfRkFJTEVEOiAnRXJyb3IgYWwgY3JlYXIgbGEgY3VlbnRhJyxcblxuICAgICAgLy8gVmVyaWZpY2F0aW9uIGNvZGVzXG4gICAgICBBVVRIVjJfSU5WQUxJRF9DT0RFOiAnQ8OzZGlnbyBpbmNvcnJlY3RvJyxcbiAgICAgIEFVVEhWMl9FWFBJUkVEX0NPREU6ICdFbCBjw7NkaWdvIGhhIGV4cGlyYWRvLiBTb2xpY2l0YSB1bm8gbnVldm8uJyxcbiAgICAgIEFVVEhWMl9DT0RFX0VYUElSRUQ6ICdFbCBjw7NkaWdvIGhhIGV4cGlyYWRvLiBTb2xpY2l0YSB1bm8gbnVldm8uJyxcbiAgICAgIEFVVEhWMl9DT0RFX0FMUkVBRFlfVVNFRDogJ0VzdGUgY8OzZGlnbyB5YSBmdWUgdXRpbGl6YWRvJyxcbiAgICAgIEFVVEhWMl9UT09fTUFOWV9BVFRFTVBUUzogJ0RlbWFzaWFkb3MgaW50ZW50b3MsIGludGVudGEgbcOhcyB0YXJkZScsXG4gICAgICBBVVRIVjJfU0VORF9DT0RFX0ZBSUxFRDogJ0Vycm9yIGFsIGVudmlhciBlbCBjw7NkaWdvJyxcbiAgICAgIEFVVEhWMl9BTFJFQURZX1ZFUklGSUVEOiAnRXN0ZSBlbWFpbCB5YSBlc3TDoSB2ZXJpZmljYWRvJyxcblxuICAgICAgLy8gTUZBXG4gICAgICBBVVRIVjJfTUZBX0lOVkFMSURfQ09ERTogJ0PDs2RpZ28gZGUgdmVyaWZpY2FjacOzbiBpbmNvcnJlY3RvJyxcblxuICAgICAgLy8gUGFzc3dvcmQgcmVzZXRcbiAgICAgIEFVVEhWMl9QQVNTV09SRF9SRVNFVF9GQUlMRUQ6ICdFcnJvciBhbCByZXN0YWJsZWNlciBsYSBjb250cmFzZcOxYScsXG4gICAgICBBVVRIVjJfSU5WQUxJRF9DVVJSRU5UX1BBU1NXT1JEOiAnQ29udHJhc2XDsWEgYWN0dWFsIGluY29ycmVjdGEnLFxuICAgICAgQVVUSFYyX1NBTUVfUEFTU1dPUkQ6ICdMYSBudWV2YSBjb250cmFzZcOxYSBkZWJlIHNlciBkaWZlcmVudGUnLFxuXG4gICAgICAvLyBTZXNzaW9uL1Rva2Vuc1xuICAgICAgQVVUSFYyX0lOVkFMSURfVE9LRU46ICdTZXNpw7NuIGludsOhbGlkYScsXG4gICAgICBBVVRIVjJfRVhQSVJFRF9UT0tFTjogJ1R1IHNlc2nDs24gaGEgZXhwaXJhZG8nLFxuICAgICAgQVVUSFYyX1NFU1NJT05fRVhQSVJFRDogJ1R1IHNlc2nDs24gaGEgZXhwaXJhZG8nLFxuXG4gICAgICAvLyBVc2VyXG4gICAgICBBVVRIVjJfVVNFUl9OT1RfRk9VTkQ6ICdVc3VhcmlvIG5vIGVuY29udHJhZG8nLFxuXG4gICAgICAvLyBPQXV0aFxuICAgICAgUE9QVVBfQkxPQ0tFRDogJ1BvciBmYXZvciwgcGVybWl0ZSB2ZW50YW5hcyBlbWVyZ2VudGVzIHBhcmEgZXN0ZSBzaXRpbycsXG4gICAgICBQT1BVUF9DTE9TRUQ6ICdTZSBjYW5jZWzDsyBsYSBhdXRlbnRpY2FjacOzbicsXG4gICAgICBJTlZBTElEX1JFU1BPTlNFOiAnRXJyb3IgZW4gbGEgcmVzcHVlc3RhIGRlbCBzZXJ2aWRvcicsXG4gICAgICBPQVVUSF9GQUlMRUQ6ICdFcnJvciBkZSBhdXRlbnRpY2FjacOzbicsXG4gICAgICBPQVVUSF9FTUFJTF9FWElTVFM6ICdFc3RlIGNvcnJlbyB5YSBlc3TDoSByZWdpc3RyYWRvIGNvbiBvdHJvIG3DqXRvZG8nLFxuICAgIH07XG5cbiAgICBjb25zdCBlcnJvckNvZGUgPSBlcnJvcj8uZXJyb3I/LmNvZGUgfHwgZXJyb3I/LmNvZGU7XG4gICAgaWYgKGVycm9yQ29kZSAmJiBlcnJvck1lc3NhZ2VzW2Vycm9yQ29kZV0pIHtcbiAgICAgIHJldHVybiBlcnJvck1lc3NhZ2VzW2Vycm9yQ29kZV07XG4gICAgfVxuXG4gICAgaWYgKGVycm9yPy5lcnJvcj8ubWVzc2FnZSkge1xuICAgICAgcmV0dXJuIGVycm9yLmVycm9yLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICdIYSBvY3VycmlkbyB1biBlcnJvci4gSW50ZW50YSBkZSBudWV2by4nO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIENPT0xET1dOIFRJTUVSU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBwcml2YXRlIHN0YXJ0UmVzZW5kQ29vbGRvd24oKTogdm9pZCB7XG4gICAgdGhpcy5yZXNlbmRDb29sZG93biA9IDMwO1xuICAgIHRoaXMucmVzZW5kVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLnJlc2VuZENvb2xkb3duLS07XG4gICAgICBpZiAodGhpcy5yZXNlbmRDb29sZG93biA8PSAwKSB7XG4gICAgICAgIHRoaXMuc3RvcFJlc2VuZENvb2xkb3duKCk7XG4gICAgICB9XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BSZXNlbmRDb29sZG93bigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXNlbmRUaW1lcikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnJlc2VuZFRpbWVyKTtcbiAgICAgIHRoaXMucmVzZW5kVGltZXIgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnJlc2VuZENvb2xkb3duID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRSZXNldFJlc2VuZENvb2xkb3duKCk6IHZvaWQge1xuICAgIHRoaXMucmVzZXRSZXNlbmRDb29sZG93biA9IDMwO1xuICAgIHRoaXMucmVzZXRSZXNlbmRUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMucmVzZXRSZXNlbmRDb29sZG93bi0tO1xuICAgICAgaWYgKHRoaXMucmVzZXRSZXNlbmRDb29sZG93biA8PSAwKSB7XG4gICAgICAgIHRoaXMuc3RvcFJlc2V0UmVzZW5kQ29vbGRvd24oKTtcbiAgICAgIH1cbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcFJlc2V0UmVzZW5kQ29vbGRvd24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVzZXRSZXNlbmRUaW1lcikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnJlc2V0UmVzZW5kVGltZXIpO1xuICAgICAgdGhpcy5yZXNldFJlc2VuZFRpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5yZXNldFJlc2VuZENvb2xkb3duID0gMDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcFJlc2VuZENvb2xkb3duKCk7XG4gICAgdGhpcy5zdG9wUmVzZXRSZXNlbmRDb29sZG93bigpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidmFsLWxvZ2luXCI+XG4gIDwhLS0gTG9nbyAtLT5cbiAgQGlmIChwcm9wcy5sb2dvKSB7XG4gICAgPGRpdiBjbGFzcz1cImxvZ28tY29udGFpbmVyXCI+XG4gICAgICA8dmFsLWltYWdlIFtwcm9wc109XCJwcm9wcy5sb2dvXCIgLz5cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIDwhLS0gTG9naW4gRm9ybSAtLT5cbiAgPHZhbC1mb3JtIFtwcm9wc109XCJsb2dpbkZvcm1Qcm9wc1wiIChvblN1Ym1pdCk9XCJsb2dpbkhhbmRsZXIoJGV2ZW50KVwiIC8+XG5cbiAgPCEtLSBPQXV0aCBTZWN0aW9uIC0tPlxuICBAaWYgKGNvbmZpZy5zaG93T0F1dGggJiYgY29uZmlnLm9hdXRoUHJvdmlkZXJzLmxlbmd0aCA+IDApIHtcbiAgICA8ZGl2IGNsYXNzPVwib2F1dGgtc2VwYXJhdG9yXCI+XG4gICAgICA8c3Bhbj5vIGNvbnRpbsO6YSBjb248L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwib2F1dGgtYnV0dG9uc1wiPlxuICAgICAgQGZvciAocHJvdmlkZXIgb2YgY29uZmlnLm9hdXRoUHJvdmlkZXJzOyB0cmFjayBwcm92aWRlcikge1xuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIGV4cGFuZD1cImJsb2NrXCJcbiAgICAgICAgICBmaWxsPVwib3V0bGluZVwiXG4gICAgICAgICAgY29sb3I9XCJkYXJrXCJcbiAgICAgICAgICAoY2xpY2spPVwibG9naW5XaXRoT0F1dGgocHJvdmlkZXIpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNPQXV0aExvYWRpbmdcIlxuICAgICAgICA+XG4gICAgICAgICAgQHN3aXRjaCAocHJvdmlkZXIpIHtcbiAgICAgICAgICAgIEBjYXNlICgnZ29vZ2xlJykge1xuICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgbmFtZT1cImxvZ28tZ29vZ2xlXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAge3sgaXNPQXV0aExvYWRpbmcgPyAnQ29uZWN0YW5kby4uLicgOiAnQ29udGludWFyIGNvbiBHb29nbGUnIH19XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoJ2FwcGxlJykge1xuICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgbmFtZT1cImxvZ28tYXBwbGVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICB7eyBpc09BdXRoTG9hZGluZyA/ICdDb25lY3RhbmRvLi4uJyA6ICdDb250aW51YXIgY29uIEFwcGxlJyB9fVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKCdtaWNyb3NvZnQnKSB7XG4gICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBuYW1lPVwibG9nby1taWNyb3NvZnRcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICB7eyBpc09BdXRoTG9hZGluZyA/ICdDb25lY3RhbmRvLi4uJyA6ICdDb250aW51YXIgY29uIE1pY3Jvc29mdCcgfX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIDwhLS0gUmVnaXN0ZXIgTGluayAtLT5cbiAgQGlmIChjb25maWcuc2hvd1JlZ2lzdGVyKSB7XG4gICAgPGRpdiBjbGFzcz1cImF1dGgtbGlua1wiPlxuICAgICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFya1wiPlxuICAgICAgICDCv05vIHRpZW5lcyBjdWVudGE/XG4gICAgICAgIDxhIChjbGljayk9XCJvcGVuUmVnaXN0ZXJNb2RhbCgpXCI+UmVnaXN0cmFyc2U8L2E+XG4gICAgICA8L2lvbi10ZXh0PlxuICAgIDwvZGl2PlxuICB9XG5cbiAgPCEtLSBGb3Jnb3QgUGFzc3dvcmQgTGluayAtLT5cbiAgQGlmIChjb25maWcuc2hvd0ZvcmdvdFBhc3N3b3JkKSB7XG4gICAgPGRpdiBjbGFzcz1cImF1dGgtbGluayBmb3Jnb3QtcGFzc3dvcmRcIj5cbiAgICAgIDxpb24tdGV4dCBjb2xvcj1cImRhcmtcIj5cbiAgICAgICAgwr9PbHZpZGFzdGUgdHUgY29udHJhc2XDsWE/XG4gICAgICAgIDxhIChjbGljayk9XCJvcGVuRm9yZ290UGFzc3dvcmRNb2RhbCgpXCI+UmVjdXBlcmFyIGNvbnRyYXNlw7FhPC9hPlxuICAgICAgPC9pb24tdGV4dD5cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIDwhLS0gTGVnYWwgTm90aWNlIC0tPlxuICBAaWYgKHByb3BzLmxlZ2FsKSB7XG4gICAgPGRpdiBjbGFzcz1cImxlZ2FsLW5vdGljZVwiPlxuICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgIDxwPlxuICAgICAgICAgIFV0aWxpemFtb3MgbG9zIHNlcnZpY2lvcyBkZVxuICAgICAgICAgIEBpZiAocHJvcHMubGVnYWwuY29tcGFueUxpbmspIHtcbiAgICAgICAgICAgIDxhIFtocmVmXT1cInByb3BzLmxlZ2FsLmNvbXBhbnlMaW5rXCI+PHN0cm9uZz57eyBwcm9wcy5sZWdhbC5jb21wYW55TmFtZSB9fTwvc3Ryb25nPjwvYT5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxzdHJvbmc+e3sgcHJvcHMubGVnYWwuY29tcGFueU5hbWUgfX08L3N0cm9uZz5cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFyYSBvZnJlY2VydGUgdW5hIGV4cGVyaWVuY2lhIHNlZ3VyYS4gQWwgaW5pY2lhciBzZXNpw7NuLCBhY2VwdGFzXG4gICAgICAgICAgbnVlc3Ryb3NcbiAgICAgICAgICBAaWYgKHByb3BzLmxlZ2FsLnRlcm1zTGluaykge1xuICAgICAgICAgICAgPGEgW2hyZWZdPVwicHJvcHMubGVnYWwudGVybXNMaW5rXCI+VMOpcm1pbm9zIHkgQ29uZGljaW9uZXM8L2E+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8c3Bhbj5Uw6lybWlub3MgeSBDb25kaWNpb25lczwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgeVxuICAgICAgICAgIEBpZiAocHJvcHMubGVnYWwucHJpdmFjeUxpbmspIHtcbiAgICAgICAgICAgIDxhIFtocmVmXT1cInByb3BzLmxlZ2FsLnByaXZhY3lMaW5rXCI+UG9sw610aWNhIGRlIFByaXZhY2lkYWQ8L2E+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8c3Bhbj5Qb2zDrXRpY2EgZGUgUHJpdmFjaWRhZDwvc3Bhbj5cbiAgICAgICAgICB9LlxuICAgICAgICA8L3A+XG4gICAgICA8L2lvbi10ZXh0PlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuPCEtLSBSZWdpc3RlciBNb2RhbCAtLT5cbjxpb24tbW9kYWwgW2lzT3Blbl09XCJpc1JlZ2lzdGVyTW9kYWxPcGVuXCIgKGRpZERpc21pc3MpPVwiY2xvc2VSZWdpc3Rlck1vZGFsKClcIj5cbiAgPG5nLXRlbXBsYXRlPlxuICAgIDxpb24taGVhZGVyPlxuICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIChjbGljayk9XCJjbG9zZVJlZ2lzdGVyTW9kYWwoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8L2lvbi10b29sYmFyPlxuICAgIDwvaW9uLWhlYWRlcj5cbiAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1mb3JtLXNlY3Rpb25cIj5cbiAgICAgICAgQGlmIChwcm9wcy5sb2dvKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ28tY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8dmFsLWltYWdlIFtwcm9wc109XCJwcm9wcy5sb2dvXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8dmFsLWZvcm0gW3Byb3BzXT1cInJlZ2lzdGVyRm9ybVByb3BzXCIgKG9uU3VibWl0KT1cInJlZ2lzdGVySGFuZGxlcigkZXZlbnQpXCIgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF1dGgtbGlua1wiPlxuICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cImRhcmtcIj5cbiAgICAgICAgICAgIMK/WWEgdGllbmVzIGN1ZW50YT9cbiAgICAgICAgICAgIDxhIChjbGljayk9XCJjbG9zZVJlZ2lzdGVyTW9kYWwoKVwiPkluaWNpYXIgc2VzacOzbjwvYT5cbiAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc2VjdGlvbj5cbiAgICA8L2lvbi1jb250ZW50PlxuICA8L25nLXRlbXBsYXRlPlxuPC9pb24tbW9kYWw+XG5cbjwhLS0gVmVyaWZ5IEVtYWlsIE1vZGFsIC0tPlxuPGlvbi1tb2RhbCBbaXNPcGVuXT1cImlzVmVyaWZ5TW9kYWxPcGVuXCIgW2JhY2tkcm9wRGlzbWlzc109XCJmYWxzZVwiPlxuICA8bmctdGVtcGxhdGU+XG4gICAgPGlvbi1oZWFkZXI+XG4gICAgICA8aW9uLXRvb2xiYXI+XG4gICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgKGNsaWNrKT1cImNsb3NlVmVyaWZ5TW9kYWwoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8L2lvbi10b29sYmFyPlxuICAgIDwvaW9uLWhlYWRlcj5cbiAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1mb3JtLXNlY3Rpb25cIj5cbiAgICAgICAgQGlmIChwcm9wcy5sb2dvKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ28tY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8dmFsLWltYWdlIFtwcm9wc109XCJwcm9wcy5sb2dvXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8dmFsLWZvcm0gW3Byb3BzXT1cInZlcmlmeUZvcm1Qcm9wc1wiIChvblN1Ym1pdCk9XCJ2ZXJpZnlIYW5kbGVyKCRldmVudClcIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVzZW5kLWxpbmtcIj5cbiAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJkYXJrXCI+XG4gICAgICAgICAgICDCv05vIGhhcyByZWNpYmlkbyB0dSBjw7NkaWdvP1xuICAgICAgICAgICAgQGlmIChyZXNlbmRDb29sZG93biA+IDApIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb29sZG93blwiPlJlZW52aWFyIGVuIHt7IHJlc2VuZENvb2xkb3duIH19czwvc3Bhbj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8YSAoY2xpY2spPVwicmVzZW5kQ29kZSgpXCI+UmVlbnZpYXI8L2E+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9pb24tY29udGVudD5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvaW9uLW1vZGFsPlxuXG48IS0tIEZvcmdvdCBQYXNzd29yZCBNb2RhbCAtLT5cbjxpb24tbW9kYWwgW2lzT3Blbl09XCJpc0ZvcmdvdFBhc3N3b3JkTW9kYWxPcGVuXCIgKGRpZERpc21pc3MpPVwiY2xvc2VGb3Jnb3RQYXNzd29yZE1vZGFsKClcIj5cbiAgPG5nLXRlbXBsYXRlPlxuICAgIDxpb24taGVhZGVyPlxuICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIChjbGljayk9XCJjbG9zZUZvcmdvdFBhc3N3b3JkTW9kYWwoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8L2lvbi10b29sYmFyPlxuICAgIDwvaW9uLWhlYWRlcj5cbiAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1mb3JtLXNlY3Rpb25cIj5cbiAgICAgICAgQGlmIChwcm9wcy5sb2dvKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ28tY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8dmFsLWltYWdlIFtwcm9wc109XCJwcm9wcy5sb2dvXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8dmFsLWZvcm0gW3Byb3BzXT1cImZvcmdvdFBhc3N3b3JkRm9ybVByb3BzXCIgKG9uU3VibWl0KT1cImZvcmdvdFBhc3N3b3JkSGFuZGxlcigkZXZlbnQpXCIgLz5cbiAgICAgIDwvc2VjdGlvbj5cbiAgICA8L2lvbi1jb250ZW50PlxuICA8L25nLXRlbXBsYXRlPlxuPC9pb24tbW9kYWw+XG5cbjwhLS0gUmVzZXQgUGFzc3dvcmQgTW9kYWwgLS0+XG48aW9uLW1vZGFsIFtpc09wZW5dPVwiaXNSZXNldFBhc3N3b3JkTW9kYWxPcGVuXCIgW2JhY2tkcm9wRGlzbWlzc109XCJmYWxzZVwiPlxuICA8bmctdGVtcGxhdGU+XG4gICAgPGlvbi1oZWFkZXI+XG4gICAgICA8aW9uLXRvb2xiYXI+XG4gICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgKGNsaWNrKT1cImNsb3NlUmVzZXRQYXNzd29yZE1vZGFsKClcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2Utb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgPC9pb24tdG9vbGJhcj5cbiAgICA8L2lvbi1oZWFkZXI+XG4gICAgPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwibW9kYWwtZm9ybS1zZWN0aW9uXCI+XG4gICAgICAgIEBpZiAocHJvcHMubG9nbykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHZhbC1pbWFnZSBbcHJvcHNdPVwicHJvcHMubG9nb1wiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPHZhbC1mb3JtIFtwcm9wc109XCJyZXNldFBhc3N3b3JkRm9ybVByb3BzXCIgKG9uU3VibWl0KT1cInJlc2V0UGFzc3dvcmRIYW5kbGVyKCRldmVudClcIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVzZW5kLWxpbmtcIj5cbiAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJkYXJrXCI+XG4gICAgICAgICAgICDCv05vIGhhcyByZWNpYmlkbyB0dSBjw7NkaWdvP1xuICAgICAgICAgICAgQGlmIChyZXNldFJlc2VuZENvb2xkb3duID4gMCkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvb2xkb3duXCI+UmVlbnZpYXIgZW4ge3sgcmVzZXRSZXNlbmRDb29sZG93biB9fXM8L3NwYW4+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cInJlc2VuZFJlc2V0Q29kZSgpXCI+UmVlbnZpYXI8L2E+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9pb24tY29udGVudD5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvaW9uLW1vZGFsPlxuXG48IS0tIE1GQSBWZXJpZnkgTW9kYWwgLS0+XG48aW9uLW1vZGFsIFtpc09wZW5dPVwiaXNNRkFWZXJpZnlNb2RhbE9wZW5cIiBbYmFja2Ryb3BEaXNtaXNzXT1cImZhbHNlXCI+XG4gIDxuZy10ZW1wbGF0ZT5cbiAgICA8aW9uLWhlYWRlcj5cbiAgICAgIDxpb24tdG9vbGJhcj5cbiAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiAoY2xpY2spPVwiY2xvc2VNRkFWZXJpZnlNb2RhbCgpXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG4gICAgPC9pb24taGVhZGVyPlxuICAgIDxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cIm1vZGFsLWZvcm0tc2VjdGlvblwiPlxuICAgICAgICBAaWYgKHByb3BzLmxvZ28pIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDx2YWwtaW1hZ2UgW3Byb3BzXT1cInByb3BzLmxvZ29cIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDx2YWwtZm9ybSBbcHJvcHNdPVwibWZhVmVyaWZ5Rm9ybVByb3BzXCIgKG9uU3VibWl0KT1cInZlcmlmeU1GQUhhbmRsZXIoJGV2ZW50KVwiIC8+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9pb24tY29udGVudD5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvaW9uLW1vZGFsPlxuIl19
|
|
721
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9sb2dpbi9sb2dpbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2xvZ2luL2xvZ2luLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixTQUFTLEVBQ1QsT0FBTyxFQUNQLFFBQVEsRUFDUixPQUFPLEVBQ1AsVUFBVSxHQUNYLE1BQU0sMkJBQTJCLENBQUM7QUFFbkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFJTCxTQUFTLEVBQ1QsZUFBZSxHQUNoQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBS0wsY0FBYyxHQUNmLE1BQU0sU0FBUyxDQUFDOztBQXFCakIsTUFBTSxPQUFPLGNB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LENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDakMsQ0FBQzsrR0FoeEJVLGNBQWM7bUdBQWQsY0FBYywwTEM3RDNCLHVnUUFxUEEsZzZDRHZNSSxZQUFZLCtCQUNaLFNBQVMsb1BBQ1QsVUFBVSw4RUFDVixVQUFVLHdLQUNWLFNBQVMsb0dBQ1QsT0FBTywySkFDUCxRQUFRLHNEQUNSLE9BQU8sZ0ZBQ1AsVUFBVSxtRkFDVixhQUFhLDhIQUNiLGNBQWM7OzRGQUtMLGNBQWM7a0JBbkIxQixTQUFTOytCQUNFLFdBQVcsY0FDVCxJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixTQUFTO3dCQUNULFVBQVU7d0JBQ1YsVUFBVTt3QkFDVixTQUFTO3dCQUNULE9BQU87d0JBQ1AsUUFBUTt3QkFDUixPQUFPO3dCQUNQLFVBQVU7d0JBQ1YsYUFBYTt3QkFDYixjQUFjO3FCQUNmOzhCQUtRLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBJb25CdXR0b24sXG4gIElvbkJ1dHRvbnMsXG4gIElvbkNvbnRlbnQsXG4gIElvbkhlYWRlcixcbiAgSW9uSWNvbixcbiAgSW9uTW9kYWwsXG4gIElvblRleHQsXG4gIElvblRvb2xiYXIsXG59IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGgnO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdG9hc3Quc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS9mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbWFnZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2ltYWdlL2ltYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBGb3JtTWV0YWRhdGEsXG4gIEZvcm1TdWJtaXQsXG4gIElucHV0TWV0YWRhdGEsXG4gIElucHV0VHlwZSxcbiAgQ29tcG9uZW50U3RhdGVzLFxufSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBTb2xpZERlZmF1bHRCbG9jayB9IGZyb20gJy4uLy4uL2F0b21zL2J1dHRvbi9mYWN0b3J5JztcbmltcG9ydCB7XG4gIExvZ2luTWV0YWRhdGEsXG4gIExvZ2luU3VjY2Vzc0V2ZW50LFxuICBMb2dpbkVycm9yRXZlbnQsXG4gIE1GQVJlcXVpcmVkRXZlbnQsXG4gIExPR0lOX0RFRkFVTFRTLFxufSBmcm9tICcuL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWxvZ2luJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBJb25CdXR0b24sXG4gICAgSW9uQnV0dG9ucyxcbiAgICBJb25Db250ZW50LFxuICAgIElvbkhlYWRlcixcbiAgICBJb25JY29uLFxuICAgIElvbk1vZGFsLFxuICAgIElvblRleHQsXG4gICAgSW9uVG9vbGJhcixcbiAgICBGb3JtQ29tcG9uZW50LFxuICAgIEltYWdlQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vbG9naW4uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9sb2dpbi5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBMb2dpbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHByb3BzOiBMb2dpbk1ldGFkYXRhID0ge307XG5cbiAgQE91dHB1dCgpIG9uU3VjY2VzcyA9IG5ldyBFdmVudEVtaXR0ZXI8TG9naW5TdWNjZXNzRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBvbkVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxMb2dpbkVycm9yRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBvbk1GQVJlcXVpcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxNRkFSZXF1aXJlZEV2ZW50PigpO1xuXG4gIC8vIFNlcnZpY2VzXG4gIGF1dGhTZXJ2aWNlID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0b2FzdFNlcnZpY2UgPSBpbmplY3QoVG9hc3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblxuICAvLyBUaW1lcnNcbiAgcHJpdmF0ZSByZXNlbmRUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVzZXRSZXNlbmRUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gU3RhdGVcbiAgaXNPQXV0aExvYWRpbmcgPSBmYWxzZTtcbiAgaXNSZWdpc3Rlck1vZGFsT3BlbiA9IGZhbHNlO1xuICBpc1ZlcmlmeU1vZGFsT3BlbiA9IGZhbHNlO1xuICBpc0ZvcmdvdFBhc3N3b3JkTW9kYWxPcGVuID0gZmFsc2U7XG4gIGlzUmVzZXRQYXNzd29yZE1vZGFsT3BlbiA9IGZhbHNlO1xuICBpc01GQVZlcmlmeU1vZGFsT3BlbiA9IGZhbHNlO1xuXG4gIHBlbmRpbmdWZXJpZmljYXRpb25FbWFpbCA9ICcnO1xuICBwZW5kaW5nUmVzZXRFbWFpbCA9ICcnO1xuICByZXNlbmRDb29sZG93biA9IDA7XG4gIHJlc2V0UmVzZW5kQ29vbGRvd24gPSAwO1xuXG4gIC8vIFJlc29sdmVkIHByb3BzIHdpdGggZGVmYXVsdHNcbiAgZ2V0IGNvbmZpZygpOiBSZXF1aXJlZDxPbWl0PExvZ2luTWV0YWRhdGEsICdsb2dvJyB8ICdsZWdhbCcgfCAncmVkaXJlY3RPblN1Y2Nlc3MnPj4gJiBMb2dpbk1ldGFkYXRhIHtcbiAgICByZXR1cm4geyAuLi5MT0dJTl9ERUZBVUxUUywgLi4udGhpcy5wcm9wcyB9O1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIExPR0lOIEZPUk1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgZW1haWxJbnB1dDogSW5wdXRNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBJbnB1dFR5cGUuRU1BSUwsXG4gICAgbGFiZWw6ICdDb3JyZW8gZWxlY3Ryw7NuaWNvJyxcbiAgICBuYW1lOiAnZW1haWwnLFxuICAgIHRva2VuOiAnbG9naW4tZW1haWwnLFxuICAgIGhpbnQ6ICcnLFxuICAgIHBsYWNlaG9sZGVyOiAndHVAZW1haWwuY29tJyxcbiAgICBlcnJvcnM6IHtcbiAgICAgIHJlcXVpcmVkOiAnRWwgY29ycmVvIGVzIHJlcXVlcmlkbycsXG4gICAgICBlbWFpbDogJ0luZ3Jlc2EgdW4gY29ycmVvIHbDoWxpZG8nLFxuICAgIH0sXG4gICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdLFxuICAgIG9yZGVyOiAwLFxuICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICBjb250cm9sOiB1bmRlZmluZWQsXG4gIH07XG5cbiAgcGFzc3dvcmRJbnB1dDogSW5wdXRNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBJbnB1dFR5cGUuUEFTU1dPUkQsXG4gICAgbGFiZWw6ICdDb250cmFzZcOxYScsXG4gICAgbmFtZTogJ3Bhc3N3b3JkJyxcbiAgICB0b2tlbjogJ2xvZ2luLXBhc3N3b3JkJyxcbiAgICBoaW50OiAnJyxcbiAgICBwbGFjZWhvbGRlcjogJ+KAouKAouKAouKAouKAouKAouKAouKAoicsXG4gICAgZXJyb3JzOiB7XG4gICAgICByZXF1aXJlZDogJ0xhIGNvbnRyYXNlw7FhIGVzIHJlcXVlcmlkYScsXG4gICAgfSxcbiAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgb3JkZXI6IDEsXG4gICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgIGNvbnRyb2w6IHVuZGVmaW5lZCxcbiAgfTtcblxuICBsb2dpbkZvcm1Qcm9wczogRm9ybU1ldGFkYXRhID0ge1xuICAgIG5hbWU6ICdJbmljaWFyIHNlc2nDs24nLFxuICAgIHNlY3Rpb25zOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgZmllbGRzOiBbdGhpcy5lbWFpbElucHV0LCB0aGlzLnBhc3N3b3JkSW5wdXRdLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGFjdGlvbnM6IHtcbiAgICAgIC4uLlNvbGlkRGVmYXVsdEJsb2NrKCdJbmljaWFyIHNlc2nDs24nLCAnc3VibWl0JyksXG4gICAgICB0b2tlbjogJ2xvZ2luLXN1Ym1pdCcsXG4gICAgfSxcbiAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFR0lTVEVSIEZPUk1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgbmFtZUlucHV0OiBJbnB1dE1ldGFkYXRhID0ge1xuICAgIHR5cGU6IElucHV0VHlwZS5URVhULFxuICAgIGxhYmVsOiAnTm9tYnJlIGNvbXBsZXRvJyxcbiAgICBuYW1lOiAnbmFtZScsXG4gICAgdG9rZW46ICdyZWdpc3Rlci1uYW1lJyxcbiAgICBoaW50OiAnJyxcbiAgICBwbGFjZWhvbGRlcjogJ1R1IG5vbWJyZScsXG4gICAgZXJyb3JzOiB7XG4gICAgICByZXF1aXJlZDogJ0VsIG5vbWJyZSBlcyByZXF1ZXJpZG8nLFxuICAgICAgbWlubGVuZ3RoOiAnTcOtbmltbyAyIGNhcmFjdGVyZXMnLFxuICAgIH0sXG4gICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDIpXSxcbiAgICBvcmRlcjogMCxcbiAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgY29udHJvbDogdW5kZWZpbmVkLFxuICB9O1xuXG4gIHJlZ2lzdGVyRW1haWxJbnB1dDogSW5wdXRNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBJbnB1dFR5cGUuRU1BSUwsXG4gICAgbGFiZWw6ICdDb3JyZW8gZWxlY3Ryw7NuaWNvJyxcbiAgICBuYW1lOiAnZW1haWwnLFxuICAgIHRva2VuOiAncmVnaXN0ZXItZW1haWwnLFxuICAgIGhpbnQ6ICcnLFxuICAgIHBsYWNlaG9sZGVyOiAndHVAZW1haWwuY29tJyxcbiAgICBlcnJvcnM6IHtcbiAgICAgIHJlcXVpcmVkOiAnRWwgY29ycmVvIGVzIHJlcXVlcmlkbycsXG4gICAgICBlbWFpbDogJ0luZ3Jlc2EgdW4gY29ycmVvIHbDoWxpZG8nLFxuICAgIH0sXG4gICAgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdLFxuICAgIG9yZGVyOiAxLFxuICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICBjb250cm9sOiB1bmRlZmluZWQsXG4gIH07XG5cbiAgcmVnaXN0ZXJQYXNzd29yZElucHV0OiBJbnB1dE1ldGFkYXRhID0ge1xuICAgIHR5cGU6IElucHV0VHlwZS5QQVNTV09SRCxcbiAgICBsYWJlbDogJ0NvbnRyYXNlw7FhJyxcbiAgICBuYW1lOiAncGFzc3dvcmQnLFxuICAgIHRva2VuOiAncmVnaXN0ZXItcGFzc3dvcmQnLFxuICAgIGhpbnQ6ICcnLFxuICAgIHBsYWNlaG9sZGVyOiAn4oCi4oCi4oCi4oCi4oCi4oCi4oCi4oCiJyxcbiAgICBlcnJvcnM6IHtcbiAgICAgIHJlcXVpcmVkOiAnTGEgY29udHJhc2XDsWEgZXMgcmVxdWVyaWRhJyxcbiAgICAgIG1pbmxlbmd0aDogJ03DrW5pbW8gOCBjYXJhY3RlcmVzJyxcbiAgICB9LFxuICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg4KV0sXG4gICAgb3JkZXI6IDIsXG4gICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgIGNvbnRyb2w6IHVuZGVmaW5lZCxcbiAgfTtcblxuICByZWdpc3RlckZvcm1Qcm9wczogRm9ybU1ldGFkYXRhID0ge1xuICAgIG5hbWU6ICdDcmVhciBjdWVudGEnLFxuICAgIHNlY3Rpb25zOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgZmllbGRzOiBbdGhpcy5uYW1lSW5wdXQsIHRoaXMucmVnaXN0ZXJFbWFpbElucHV0LCB0aGlzLnJlZ2lzdGVyUGFzc3dvcmRJbnB1dF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgYWN0aW9uczoge1xuICAgICAgLi4uU29saWREZWZhdWx0QmxvY2soJ1JlZ2lzdHJhcnNlJywgJ3N1Ym1pdCcpLFxuICAgICAgdG9rZW46ICdyZWdpc3Rlci1zdWJtaXQnLFxuICAgIH0sXG4gICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICB9O1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBWRVJJRlkgRU1BSUwgRk9STVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICB2ZXJpZnlQaW5JbnB1dDogSW5wdXRNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBJbnB1dFR5cGUuUElOX0NPREUsXG4gICAgbGFiZWw6ICcnLFxuICAgIG5hbWU6ICdjb2RlJyxcbiAgICB0b2tlbjogJ3ZlcmlmeS1waW4nLFxuICAgIGhpbnQ6ICcnLFxuICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICBlcnJvcnM6IHtcbiAgICAgIHJlcXVpcmVkOiAnRWwgY8OzZGlnbyBlcyByZXF1ZXJpZG8nLFxuICAgICAgbWlubGVuZ3RoOiAnSW5ncmVzYSBsb3MgNiBkw61naXRvcycsXG4gICAgfSxcbiAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNildLFxuICAgIG9yZGVyOiAwLFxuICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICBjb250cm9sOiB1bmRlZmluZWQsXG4gICAgbGVuZ3RoOiA2LFxuICAgIGFsbG93TnVtYmVyc09ubHk6IHRydWUsXG4gICAgYXV0b0ZvY3VzOiB0cnVlLFxuICB9O1xuXG4gIHZlcmlmeUZvcm1Qcm9wczogRm9ybU1ldGFkYXRhID0ge1xuICAgIG5hbWU6ICdWZXJpZmljYXIgY29ycmVvJyxcbiAgICBzZWN0aW9uczogW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnSW5ncmVzYSBlbCBjw7NkaWdvIGRlIHZlcmlmaWNhY2nDs24gZW52aWFkbyBhIHR1IGNvcnJlby4nLFxuICAgICAgICBvcmRlcjogMCxcbiAgICAgICAgZmllbGRzOiBbdGhpcy52ZXJpZnlQaW5JbnB1dF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgYWN0aW9uczoge1xuICAgICAgLi4uU29saWREZWZhdWx0QmxvY2soJ1ZlcmlmaWNhcicsICdzdWJtaXQnKSxcbiAgICAgIHRva2VuOiAndmVyaWZ5LXN1Ym1pdCcsXG4gICAgfSxcbiAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE1GQSBWRVJJRlkgRk9STVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBtZmFQaW5JbnB1dDogSW5wdXRNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBJbnB1dFR5cGUuUElOX0NPREUsXG4gICAgbGFiZWw6ICcnLFxuICAgIG5hbWU6ICdjb2RlJyxcbiAgICB0b2tlbjogJ21mYS1waW4nLFxuICAgIGhpbnQ6ICcnLFxuICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICBlcnJvcnM6IHtcbiAgICAgIHJlcXVpcmVkOiAnRWwgY8OzZGlnbyBlcyByZXF1ZXJpZG8nLFxuICAgICAgbWlubGVuZ3RoOiAnSW5ncmVzYSBsb3MgNiBkw61naXRvcycsXG4gICAgfSxcbiAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNildLFxuICAgIG9yZGVyOiAwLFxuICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICBjb250cm9sOiB1bmRlZmluZWQsXG4gICAgbGVuZ3RoOiA2LFxuICAgIGFsbG93TnVtYmVyc09ubHk6IHRydWUsXG4gICAgYXV0b0ZvY3VzOiB0cnVlLFxuICB9O1xuXG4gIG1mYVZlcmlmeUZvcm1Qcm9wczogRm9ybU1ldGFkYXRhID0ge1xuICAgIG5hbWU6ICdWZXJpZmljYWNpw7NuIE1GQScsXG4gICAgc2VjdGlvbnM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIG9yZGVyOiAwLFxuICAgICAgICBmaWVsZHM6IFt0aGlzLm1mYVBpbklucHV0XSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBhY3Rpb25zOiB7XG4gICAgICAuLi5Tb2xpZERlZmF1bHRCbG9jaygnVmVyaWZpY2FyJywgJ3N1Ym1pdCcpLFxuICAgICAgdG9rZW46ICdtZmEtdmVyaWZ5LXN1Ym1pdCcsXG4gICAgfSxcbiAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEZPUkdPVCBQQVNTV09SRCBGT1JNXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGZvcmdvdEVtYWlsSW5wdXQ6IElucHV0TWV0YWRhdGEgPSB7XG4gICAgdHlwZTogSW5wdXRUeXBlLkVNQUlMLFxuICAgIGxhYmVsOiAnJyxcbiAgICBuYW1lOiAnZW1haWwnLFxuICAgIHRva2VuOiAnZm9yZ290LWVtYWlsJyxcbiAgICBoaW50OiAnJyxcbiAgICBwbGFjZWhvbGRlcjogJ3R1QGVtYWlsLmNvbScsXG4gICAgZXJyb3JzOiB7XG4gICAgICByZXF1aXJlZDogJ0VsIGNvcnJlbyBlcyByZXF1ZXJpZG8nLFxuICAgICAgZW1haWw6ICdJbmdyZXNhIHVuIGNvcnJlbyB2w6FsaWRvJyxcbiAgICB9LFxuICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsXSxcbiAgICBvcmRlcjogMCxcbiAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgY29udHJvbDogdW5kZWZpbmVkLFxuICB9O1xuXG4gIGZvcmdvdFBhc3N3b3JkRm9ybVByb3BzOiBGb3JtTWV0YWRhdGEgPSB7XG4gICAgbmFtZTogJ1JlY3VwZXJhciBjb250cmFzZcOxYScsXG4gICAgc2VjdGlvbnM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0luZ3Jlc2EgdHUgY29ycmVvIGVsZWN0csOzbmljbyB5IHRlIGVudmlhcmVtb3MgdW4gY8OzZGlnbyBwYXJhIHJlc3RhYmxlY2VyIHR1IGNvbnRyYXNlw7FhLicsXG4gICAgICAgIG9yZGVyOiAwLFxuICAgICAgICBmaWVsZHM6IFt0aGlzLmZvcmdvdEVtYWlsSW5wdXRdLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGFjdGlvbnM6IHtcbiAgICAgIC4uLlNvbGlkRGVmYXVsdEJsb2NrKCdFbnZpYXIgY8OzZGlnbycsICdzdWJtaXQnKSxcbiAgICAgIHRva2VuOiAnZm9yZ290LXN1Ym1pdCcsXG4gICAgfSxcbiAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJFU0VUIFBBU1NXT1JEIEZPUk1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcmVzZXRQaW5JbnB1dDogSW5wdXRNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBJbnB1dFR5cGUuUElOX0NPREUsXG4gICAgbGFiZWw6ICcnLFxuICAgIG5hbWU6ICdjb2RlJyxcbiAgICB0b2tlbjogJ3Jlc2V0LXBpbicsXG4gICAgaGludDogJycsXG4gICAgcGxhY2Vob2xkZXI6ICcnLFxuICAgIGVycm9yczoge1xuICAgICAgcmVxdWlyZWQ6ICdFbCBjw7NkaWdvIGVzIHJlcXVlcmlkbycsXG4gICAgICBtaW5sZW5ndGg6ICdJbmdyZXNhIGxvcyA2IGTDrWdpdG9zJyxcbiAgICB9LFxuICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg2KV0sXG4gICAgb3JkZXI6IDAsXG4gICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgIGNvbnRyb2w6IHVuZGVmaW5lZCxcbiAgICBsZW5ndGg6IDYsXG4gICAgYWxsb3dOdW1iZXJzT25seTogdHJ1ZSxcbiAgICBhdXRvRm9jdXM6IHRydWUsXG4gIH07XG5cbiAgbmV3UGFzc3dvcmRJbnB1dDogSW5wdXRNZXRhZGF0YSA9IHtcbiAgICB0eXBlOiBJbnB1dFR5cGUuUEFTU1dPUkQsXG4gICAgbGFiZWw6ICdOdWV2YSBjb250cmFzZcOxYScsXG4gICAgbmFtZTogJ25ld1Bhc3N3b3JkJyxcbiAgICB0b2tlbjogJ3Jlc2V0LW5ldy1wYXNzd29yZCcsXG4gICAgaGludDogJ03DrW5pbW8gOCBjYXJhY3RlcmVzJyxcbiAgICBwbGFjZWhvbGRlcjogJ+KAouKAouKAouKAouKAouKAouKAouKAoicsXG4gICAgZXJyb3JzOiB7XG4gICAgICByZXF1aXJlZDogJ0xhIGNvbnRyYXNlw7FhIGVzIHJlcXVlcmlkYScsXG4gICAgICBtaW5sZW5ndGg6ICdNw61uaW1vIDggY2FyYWN0ZXJlcycsXG4gICAgfSxcbiAgICB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoOCldLFxuICAgIG9yZGVyOiAxLFxuICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICBjb250cm9sOiB1bmRlZmluZWQsXG4gIH07XG5cbiAgcmVzZXRQYXNzd29yZEZvcm1Qcm9wczogRm9ybU1ldGFkYXRhID0ge1xuICAgIG5hbWU6ICdSZXN0YWJsZWNlciBjb250cmFzZcOxYScsXG4gICAgc2VjdGlvbnM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0hlbW9zIGVudmlhZG8gdW4gY8OzZGlnbyBkZSB2ZXJpZmljYWNpw7NuIGEgdHUgY29ycmVvLicsXG4gICAgICAgIG9yZGVyOiAwLFxuICAgICAgICBmaWVsZHM6IFt0aGlzLnJlc2V0UGluSW5wdXQsIHRoaXMubmV3UGFzc3dvcmRJbnB1dF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgYWN0aW9uczoge1xuICAgICAgLi4uU29saWREZWZhdWx0QmxvY2soJ0NhbWJpYXIgY29udHJhc2XDsWEnLCAnc3VibWl0JyksXG4gICAgICB0b2tlbjogJ3Jlc2V0LXN1Ym1pdCcsXG4gICAgfSxcbiAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH07XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEhBTkRMRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGxvZ2luSGFuZGxlcihldmVudDogRm9ybVN1Ym1pdCk6IHZvaWQge1xuICAgIGNvbnN0IGVtYWlsID0gZXZlbnQuZmllbGRzWydlbWFpbCddO1xuICAgIGNvbnN0IHBhc3N3b3JkID0gZXZlbnQuZmllbGRzWydwYXNzd29yZCddO1xuXG4gICAgaWYgKCFlbWFpbCB8fCAhcGFzc3dvcmQpIHtcbiAgICAgIHRoaXMuc2hvd1RvYXN0KCdDb21wbGV0YSB0b2RvcyBsb3MgY2FtcG9zLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9naW5Gb3JtUHJvcHMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuV09SS0lORztcblxuICAgIHRoaXMuYXV0aFNlcnZpY2Uuc2lnbmluKHsgZW1haWwsIHBhc3N3b3JkIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9naW5Gb3JtUHJvcHMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcblxuICAgICAgICBpZiAodGhpcy5hdXRoU2VydmljZS5tZmFQZW5kaW5nKCkucmVxdWlyZWQpIHtcbiAgICAgICAgICB0aGlzLm9wZW5NRkFWZXJpZnlNb2RhbCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlTG9naW5TdWNjZXNzKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5sb2dpbkZvcm1Qcm9wcy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEO1xuXG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IChlcnIgYXMgeyBjb2RlPzogc3RyaW5nIH0pPy5jb2RlO1xuICAgICAgICBpZiAoZXJyb3JDb2RlID09PSAnQVVUSFYyX0VNQUlMX05PVF9WRVJJRklFRCcpIHtcbiAgICAgICAgICB0aGlzLm9wZW5WZXJpZnlNb2RhbChlbWFpbCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdzaWduaW4nKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBsb2dpbldpdGhPQXV0aChwcm92aWRlcjogJ2dvb2dsZScgfCAnYXBwbGUnIHwgJ21pY3Jvc29mdCcpOiB2b2lkIHtcbiAgICB0aGlzLmlzT0F1dGhMb2FkaW5nID0gdHJ1ZTtcblxuICAgIHRoaXMuYXV0aFNlcnZpY2Uuc2lnbmluV2l0aE9BdXRoKHByb3ZpZGVyKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLmlzT0F1dGhMb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuYXV0aFNlcnZpY2UubWZhUGVuZGluZygpLnJlcXVpcmVkKSB7XG4gICAgICAgICAgdGhpcy5vcGVuTUZBVmVyaWZ5TW9kYWwoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmhhbmRsZUxvZ2luU3VjY2Vzcyhwcm92aWRlcik7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5pc09BdXRoTG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IChlcnIgYXMgeyBjb2RlPzogc3RyaW5nIH0pPy5jb2RlO1xuICAgICAgICBpZiAoZXJyb3JDb2RlID09PSAnUE9QVVBfQ0xPU0VEJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAnb2F1dGgnKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUkVHSVNURVIgSEFORExFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgb3BlblJlZ2lzdGVyTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc1JlZ2lzdGVyTW9kYWxPcGVuID0gdHJ1ZTtcbiAgfVxuXG4gIGNsb3NlUmVnaXN0ZXJNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzUmVnaXN0ZXJNb2RhbE9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIHJlZ2lzdGVySGFuZGxlcihldmVudDogRm9ybVN1Ym1pdCk6IHZvaWQge1xuICAgIGNvbnN0IG5hbWUgPSBldmVudC5maWVsZHNbJ25hbWUnXTtcbiAgICBjb25zdCBlbWFpbCA9IGV2ZW50LmZpZWxkc1snZW1haWwnXTtcbiAgICBjb25zdCBwYXNzd29yZCA9IGV2ZW50LmZpZWxkc1sncGFzc3dvcmQnXTtcblxuICAgIGlmICghbmFtZSB8fCAhZW1haWwgfHwgIXBhc3N3b3JkKSB7XG4gICAgICB0aGlzLnNob3dUb2FzdCgnQ29tcGxldGEgdG9kb3MgbG9zIGNhbXBvcy4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlZ2lzdGVyRm9ybVByb3BzLnN0YXRlID0gQ29tcG9uZW50U3RhdGVzLldPUktJTkc7XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlLnNpZ251cCh7IG5hbWUsIGVtYWlsLCBwYXNzd29yZCB9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRm9ybVByb3BzLnN0YXRlID0gQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQ7XG4gICAgICAgIHRoaXMuY2xvc2VSZWdpc3Rlck1vZGFsKCk7XG4gICAgICAgIHRoaXMub3BlblZlcmlmeU1vZGFsKGVtYWlsKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRm9ybVByb3BzLnN0YXRlID0gQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQ7XG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAnc2lnbnVwJyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFZFUklGWSBFTUFJTCBIQU5ETEVSU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBvcGVuVmVyaWZ5TW9kYWwoZW1haWw6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucGVuZGluZ1ZlcmlmaWNhdGlvbkVtYWlsID0gZW1haWw7XG4gICAgdGhpcy52ZXJpZnlGb3JtUHJvcHMuc2VjdGlvbnNbMF0ubmFtZSA9IGBJbmdyZXNhIGVsIGPDs2RpZ28gZW52aWFkbyBhICR7ZW1haWx9YDtcbiAgICB0aGlzLnZlcmlmeUZvcm1Qcm9wcy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEO1xuICAgIHRoaXMuaXNWZXJpZnlNb2RhbE9wZW4gPSB0cnVlO1xuICAgIHRoaXMuc3RhcnRSZXNlbmRDb29sZG93bigpO1xuICB9XG5cbiAgY2xvc2VWZXJpZnlNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzVmVyaWZ5TW9kYWxPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5wZW5kaW5nVmVyaWZpY2F0aW9uRW1haWwgPSAnJztcbiAgICB0aGlzLnN0b3BSZXNlbmRDb29sZG93bigpO1xuICB9XG5cbiAgdmVyaWZ5SGFuZGxlcihldmVudDogRm9ybVN1Ym1pdCk6IHZvaWQge1xuICAgIGNvbnN0IGNvZGUgPSBldmVudC5maWVsZHNbJ2NvZGUnXTtcblxuICAgIHRoaXMudmVyaWZ5Rm9ybVByb3BzLnN0YXRlID0gQ29tcG9uZW50U3RhdGVzLldPUktJTkc7XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAudmVyaWZ5RW1haWwoe1xuICAgICAgICBlbWFpbDogdGhpcy5wZW5kaW5nVmVyaWZpY2F0aW9uRW1haWwsXG4gICAgICAgIGNvZGUsXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnZlcmlmeUZvcm1Qcm9wcy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEO1xuICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KCfCoUVtYWlsIHZlcmlmaWNhZG8hIEJpZW52ZW5pZG8uJyk7XG4gICAgICAgICAgdGhpcy5jbG9zZVZlcmlmeU1vZGFsKCk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVMb2dpblN1Y2Nlc3MoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLnZlcmlmeUZvcm1Qcm9wcy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEO1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAndmVyaWZ5Jyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIHJlc2VuZENvZGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVzZW5kQ29vbGRvd24gPiAwKSByZXR1cm47XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAucmVzZW5kQ29kZSh7XG4gICAgICAgIGVtYWlsOiB0aGlzLnBlbmRpbmdWZXJpZmljYXRpb25FbWFpbCxcbiAgICAgICAgdHlwZTogJ0VNQUlMX1ZFUklGWScsXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCgnQ8OzZGlnbyByZWVudmlhZG8uIFJldmlzYSB0dSBlbWFpbC4nKTtcbiAgICAgICAgICB0aGlzLnN0YXJ0UmVzZW5kQ29vbGRvd24oKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ3ZlcmlmeScpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTUZBIEhBTkRMRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIG9wZW5NRkFWZXJpZnlNb2RhbCgpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRob2QgPSB0aGlzLmF1dGhTZXJ2aWNlLm1mYVBlbmRpbmcoKS5tZXRob2Q7XG4gICAgdGhpcy5tZmFWZXJpZnlGb3JtUHJvcHMuc2VjdGlvbnNbMF0ubmFtZSA9XG4gICAgICBtZXRob2QgPT09ICdUT1RQJ1xuICAgICAgICA/ICdJbmdyZXNhIGVsIGPDs2RpZ28gZGUgdHUgYXBwIGRlIGF1dGVudGljYWNpw7NuJ1xuICAgICAgICA6IG1ldGhvZCA9PT0gJ0VNQUlMJ1xuICAgICAgICAgID8gJ0luZ3Jlc2EgZWwgY8OzZGlnbyBlbnZpYWRvIGEgdHUgY29ycmVvJ1xuICAgICAgICAgIDogJ0luZ3Jlc2EgZWwgY8OzZGlnbyBlbnZpYWRvIGEgdHUgdGVsw6lmb25vJztcbiAgICB0aGlzLm1mYVZlcmlmeUZvcm1Qcm9wcy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEO1xuICAgIHRoaXMuaXNNRkFWZXJpZnlNb2RhbE9wZW4gPSB0cnVlO1xuXG4gICAgdGhpcy5vbk1GQVJlcXVpcmVkLmVtaXQoeyBtZXRob2Q6IG1ldGhvZCBhcyAnVE9UUCcgfCAnRU1BSUwnIHwgJ1NNUycgfSk7XG4gIH1cblxuICBjbG9zZU1GQVZlcmlmeU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNNRkFWZXJpZnlNb2RhbE9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIHZlcmlmeU1GQUhhbmRsZXIoZXZlbnQ6IEZvcm1TdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBjb2RlID0gZXZlbnQuZmllbGRzWydjb2RlJ107XG5cbiAgICB0aGlzLm1mYVZlcmlmeUZvcm1Qcm9wcy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5XT1JLSU5HO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZS52ZXJpZnlNRkEoY29kZSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5tZmFWZXJpZnlGb3JtUHJvcHMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcbiAgICAgICAgdGhpcy5jbG9zZU1GQVZlcmlmeU1vZGFsKCk7XG4gICAgICAgIHRoaXMuaGFuZGxlTG9naW5TdWNjZXNzKHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5tZmFWZXJpZnlGb3JtUHJvcHMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdtZmEnKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRk9SR09UIFBBU1NXT1JEIEhBTkRMRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIG9wZW5Gb3Jnb3RQYXNzd29yZE1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb3Jnb3RQYXNzd29yZE1vZGFsT3BlbiA9IHRydWU7XG4gIH1cblxuICBjbG9zZUZvcmdvdFBhc3N3b3JkTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc0ZvcmdvdFBhc3N3b3JkTW9kYWxPcGVuID0gZmFsc2U7XG4gIH1cblxuICBmb3Jnb3RQYXNzd29yZEhhbmRsZXIoZXZlbnQ6IEZvcm1TdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBlbWFpbCA9IGV2ZW50LmZpZWxkc1snZW1haWwnXTtcblxuICAgIGlmICghZW1haWwpIHtcbiAgICAgIHRoaXMuc2hvd1RvYXN0KCdJbmdyZXNhIHR1IGNvcnJlbyBlbGVjdHLDs25pY28uJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5mb3Jnb3RQYXNzd29yZEZvcm1Qcm9wcy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5XT1JLSU5HO1xuXG4gICAgdGhpcy5hdXRoU2VydmljZS5mb3Jnb3RQYXNzd29yZCh7IGVtYWlsIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuZm9yZ290UGFzc3dvcmRGb3JtUHJvcHMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcbiAgICAgICAgdGhpcy5jbG9zZUZvcmdvdFBhc3N3b3JkTW9kYWwoKTtcbiAgICAgICAgdGhpcy5vcGVuUmVzZXRQYXNzd29yZE1vZGFsKGVtYWlsKTtcbiAgICAgICAgdGhpcy5zaG93VG9hc3QoJ0PDs2RpZ28gZW52aWFkby4gUmV2aXNhIHR1IGVtYWlsLicpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuZm9yZ290UGFzc3dvcmRGb3JtUHJvcHMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIsICdmb3Jnb3QnKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUkVTRVQgUEFTU1dPUkQgSEFORExFUlNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgb3BlblJlc2V0UGFzc3dvcmRNb2RhbChlbWFpbDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wZW5kaW5nUmVzZXRFbWFpbCA9IGVtYWlsO1xuICAgIHRoaXMucmVzZXRQYXNzd29yZEZvcm1Qcm9wcy5zZWN0aW9uc1swXS5uYW1lID0gYEluZ3Jlc2EgZWwgY8OzZGlnbyBlbnZpYWRvIGEgJHtlbWFpbH1gO1xuICAgIHRoaXMucmVzZXRQYXNzd29yZEZvcm1Qcm9wcy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEO1xuICAgIHRoaXMuaXNSZXNldFBhc3N3b3JkTW9kYWxPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLnN0YXJ0UmVzZXRSZXNlbmRDb29sZG93bigpO1xuICB9XG5cbiAgY2xvc2VSZXNldFBhc3N3b3JkTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc1Jlc2V0UGFzc3dvcmRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnBlbmRpbmdSZXNldEVtYWlsID0gJyc7XG4gICAgdGhpcy5zdG9wUmVzZXRSZXNlbmRDb29sZG93bigpO1xuICB9XG5cbiAgcmVzZXRQYXNzd29yZEhhbmRsZXIoZXZlbnQ6IEZvcm1TdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBjb2RlID0gZXZlbnQuZmllbGRzWydjb2RlJ107XG4gICAgY29uc3QgbmV3UGFzc3dvcmQgPSBldmVudC5maWVsZHNbJ25ld1Bhc3N3b3JkJ107XG5cbiAgICB0aGlzLnJlc2V0UGFzc3dvcmRGb3JtUHJvcHMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuV09SS0lORztcblxuICAgIHRoaXMuYXV0aFNlcnZpY2VcbiAgICAgIC5yZXNldFBhc3N3b3JkKHtcbiAgICAgICAgZW1haWw6IHRoaXMucGVuZGluZ1Jlc2V0RW1haWwsXG4gICAgICAgIGNvZGUsXG4gICAgICAgIG5ld1Bhc3N3b3JkLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZXNldFBhc3N3b3JkRm9ybVByb3BzLnN0YXRlID0gQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQ7XG4gICAgICAgICAgdGhpcy5zaG93VG9hc3QoJ8KhQ29udHJhc2XDsWEgYWN0dWFsaXphZGEhIFlhIHB1ZWRlcyBpbmljaWFyIHNlc2nDs24uJyk7XG4gICAgICAgICAgdGhpcy5jbG9zZVJlc2V0UGFzc3dvcmRNb2RhbCgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMucmVzZXRQYXNzd29yZEZvcm1Qcm9wcy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEO1xuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyLCAncmVzZXQnKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgcmVzZW5kUmVzZXRDb2RlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlc2V0UmVzZW5kQ29vbGRvd24gPiAwKSByZXR1cm47XG5cbiAgICB0aGlzLmF1dGhTZXJ2aWNlXG4gICAgICAucmVzZW5kQ29kZSh7XG4gICAgICAgIGVtYWlsOiB0aGlzLnBlbmRpbmdSZXNldEVtYWlsLFxuICAgICAgICB0eXBlOiAnUEFTU1dPUkRfUkVTRVQnLFxuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zaG93VG9hc3QoJ0PDs2RpZ28gcmVlbnZpYWRvLiBSZXZpc2EgdHUgZW1haWwuJyk7XG4gICAgICAgICAgdGhpcy5zdGFydFJlc2V0UmVzZW5kQ29vbGRvd24oKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVyciwgJ3Jlc2V0Jyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBIRUxQRVJTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgaGFuZGxlTG9naW5TdWNjZXNzKG9hdXRoUHJvdmlkZXI/OiAnZ29vZ2xlJyB8ICdhcHBsZScgfCAnbWljcm9zb2Z0JywgbWZhQ29tcGxldGVkPzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2hvd1RvYXN0KCfCoUJpZW52ZW5pZG8hJyk7XG5cbiAgICB0aGlzLm9uU3VjY2Vzcy5lbWl0KHtcbiAgICAgIHVzZXI6IHRoaXMuYXV0aFNlcnZpY2UudXNlcigpLFxuICAgICAgbWZhQ29tcGxldGVkLFxuICAgICAgb2F1dGhQcm92aWRlcixcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnByb3BzLnJlZGlyZWN0T25TdWNjZXNzKSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5wcm9wcy5yZWRpcmVjdE9uU3VjY2Vzc10pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXJyb3IoZXJyOiB1bmtub3duLCBvcGVyYXRpb246IExvZ2luRXJyb3JFdmVudFsnb3BlcmF0aW9uJ10pOiB2b2lkIHtcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyKTtcbiAgICB0aGlzLnNob3dUb2FzdChtZXNzYWdlKTtcblxuICAgIHRoaXMub25FcnJvci5lbWl0KHtcbiAgICAgIGNvZGU6IChlcnIgYXMgeyBjb2RlPzogc3RyaW5nIH0pPy5jb2RlLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIG9wZXJhdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd1RvYXN0KG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coe1xuICAgICAgbWVzc2FnZSxcbiAgICAgIGR1cmF0aW9uOiAzNTAwLFxuICAgICAgcG9zaXRpb246ICd0b3AnLFxuICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXJyb3JNZXNzYWdlKGVycjogdW5rbm93bik6IHN0cmluZyB7XG4gICAgY29uc3QgZXJyb3IgPSBlcnIgYXMge1xuICAgICAgZXJyb3I/OiB7IG1lc3NhZ2U/OiBzdHJpbmc7IGNvZGU/OiBzdHJpbmcgfTtcbiAgICAgIGNvZGU/OiBzdHJpbmc7XG4gICAgfTtcblxuICAgIGNvbnN0IGVycm9yTWVzc2FnZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAvLyBWYWxpZGF0aW9uXG4gICAgICBWQUxJREFUSU9OX01JU1NJTkdfUkVRVUlSRURfRklFTERTOiAnRmFsdGFuIGNhbXBvcyByZXF1ZXJpZG9zJyxcbiAgICAgIFZBTElEQVRJT05fSU5WQUxJRF9SRVFVRVNUOiAnU29saWNpdHVkIGludsOhbGlkYScsXG5cbiAgICAgIC8vIFNpZ25pblxuICAgICAgQVVUSFYyX0lOVkFMSURfQ1JFREVOVElBTFM6ICdDb3JyZW8gbyBjb250cmFzZcOxYSBpbmNvcnJlY3RvcycsXG4gICAgICBBVVRIVjJfRU1BSUxfTk9UX1ZFUklGSUVEOiAnRGViZXMgdmVyaWZpY2FyIHR1IGNvcnJlbyBlbGVjdHLDs25pY28nLFxuICAgICAgQVVUSFYyX0FDQ09VTlRfU1VTUEVOREVEOiAnVHUgY3VlbnRhIGhhIHNpZG8gc3VzcGVuZGlkYScsXG4gICAgICBBVVRIVjJfU0lHTklOX0ZBSUxFRDogJ0Vycm9yIGFsIGluaWNpYXIgc2VzacOzbicsXG5cbiAgICAgIC8vIFNpZ251cFxuICAgICAgQVVUSFYyX0VNQUlMX0VYSVNUUzogJ0VzdGUgY29ycmVvIHlhIGVzdMOhIHJlZ2lzdHJhZG8nLFxuICAgICAgQVVUSFYyX1BIT05FX0VYSVNUUzogJ0VzdGUgdGVsw6lmb25vIHlhIGVzdMOhIHJlZ2lzdHJhZG8nLFxuICAgICAgQVVUSFYyX1dFQUtfUEFTU1dPUkQ6ICdMYSBjb250cmFzZcOxYSBlcyBtdXkgZMOpYmlsJyxcbiAgICAgIEFVVEhWMl9TSUdOVVBfRkFJTEVEOiAnRXJyb3IgYWwgY3JlYXIgbGEgY3VlbnRhJyxcblxuICAgICAgLy8gVmVyaWZpY2F0aW9uIGNvZGVzXG4gICAgICBBVVRIVjJfSU5WQUxJRF9DT0RFOiAnQ8OzZGlnbyBpbmNvcnJlY3RvJyxcbiAgICAgIEFVVEhWMl9FWFBJUkVEX0NPREU6ICdFbCBjw7NkaWdvIGhhIGV4cGlyYWRvLiBTb2xpY2l0YSB1bm8gbnVldm8uJyxcbiAgICAgIEFVVEhWMl9DT0RFX0VYUElSRUQ6ICdFbCBjw7NkaWdvIGhhIGV4cGlyYWRvLiBTb2xpY2l0YSB1bm8gbnVldm8uJyxcbiAgICAgIEFVVEhWMl9DT0RFX0FMUkVBRFlfVVNFRDogJ0VzdGUgY8OzZGlnbyB5YSBmdWUgdXRpbGl6YWRvJyxcbiAgICAgIEFVVEhWMl9UT09fTUFOWV9BVFRFTVBUUzogJ0RlbWFzaWFkb3MgaW50ZW50b3MsIGludGVudGEgbcOhcyB0YXJkZScsXG4gICAgICBBVVRIVjJfU0VORF9DT0RFX0ZBSUxFRDogJ0Vycm9yIGFsIGVudmlhciBlbCBjw7NkaWdvJyxcbiAgICAgIEFVVEhWMl9BTFJFQURZX1ZFUklGSUVEOiAnRXN0ZSBlbWFpbCB5YSBlc3TDoSB2ZXJpZmljYWRvJyxcblxuICAgICAgLy8gTUZBXG4gICAgICBBVVRIVjJfTUZBX0lOVkFMSURfQ09ERTogJ0PDs2RpZ28gZGUgdmVyaWZpY2FjacOzbiBpbmNvcnJlY3RvJyxcblxuICAgICAgLy8gUGFzc3dvcmQgcmVzZXRcbiAgICAgIEFVVEhWMl9QQVNTV09SRF9SRVNFVF9GQUlMRUQ6ICdFcnJvciBhbCByZXN0YWJsZWNlciBsYSBjb250cmFzZcOxYScsXG4gICAgICBBVVRIVjJfSU5WQUxJRF9DVVJSRU5UX1BBU1NXT1JEOiAnQ29udHJhc2XDsWEgYWN0dWFsIGluY29ycmVjdGEnLFxuICAgICAgQVVUSFYyX1NBTUVfUEFTU1dPUkQ6ICdMYSBudWV2YSBjb250cmFzZcOxYSBkZWJlIHNlciBkaWZlcmVudGUnLFxuXG4gICAgICAvLyBTZXNzaW9uL1Rva2Vuc1xuICAgICAgQVVUSFYyX0lOVkFMSURfVE9LRU46ICdTZXNpw7NuIGludsOhbGlkYScsXG4gICAgICBBVVRIVjJfRVhQSVJFRF9UT0tFTjogJ1R1IHNlc2nDs24gaGEgZXhwaXJhZG8nLFxuICAgICAgQVVUSFYyX1NFU1NJT05fRVhQSVJFRDogJ1R1IHNlc2nDs24gaGEgZXhwaXJhZG8nLFxuXG4gICAgICAvLyBVc2VyXG4gICAgICBBVVRIVjJfVVNFUl9OT1RfRk9VTkQ6ICdVc3VhcmlvIG5vIGVuY29udHJhZG8nLFxuXG4gICAgICAvLyBPQXV0aFxuICAgICAgUE9QVVBfQkxPQ0tFRDogJ1BvciBmYXZvciwgcGVybWl0ZSB2ZW50YW5hcyBlbWVyZ2VudGVzIHBhcmEgZXN0ZSBzaXRpbycsXG4gICAgICBQT1BVUF9DTE9TRUQ6ICdTZSBjYW5jZWzDsyBsYSBhdXRlbnRpY2FjacOzbicsXG4gICAgICBJTlZBTElEX1JFU1BPTlNFOiAnRXJyb3IgZW4gbGEgcmVzcHVlc3RhIGRlbCBzZXJ2aWRvcicsXG4gICAgICBPQVVUSF9GQUlMRUQ6ICdFcnJvciBkZSBhdXRlbnRpY2FjacOzbicsXG4gICAgICBPQVVUSF9FTUFJTF9FWElTVFM6ICdFc3RlIGNvcnJlbyB5YSBlc3TDoSByZWdpc3RyYWRvIGNvbiBvdHJvIG3DqXRvZG8nLFxuICAgIH07XG5cbiAgICBjb25zdCBlcnJvckNvZGUgPSBlcnJvcj8uZXJyb3I/LmNvZGUgfHwgZXJyb3I/LmNvZGU7XG4gICAgaWYgKGVycm9yQ29kZSAmJiBlcnJvck1lc3NhZ2VzW2Vycm9yQ29kZV0pIHtcbiAgICAgIHJldHVybiBlcnJvck1lc3NhZ2VzW2Vycm9yQ29kZV07XG4gICAgfVxuXG4gICAgaWYgKGVycm9yPy5lcnJvcj8ubWVzc2FnZSkge1xuICAgICAgcmV0dXJuIGVycm9yLmVycm9yLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgcmV0dXJuICdIYSBvY3VycmlkbyB1biBlcnJvci4gSW50ZW50YSBkZSBudWV2by4nO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIENPT0xET1dOIFRJTUVSU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBwcml2YXRlIHN0YXJ0UmVzZW5kQ29vbGRvd24oKTogdm9pZCB7XG4gICAgdGhpcy5yZXNlbmRDb29sZG93biA9IDMwO1xuICAgIHRoaXMucmVzZW5kVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLnJlc2VuZENvb2xkb3duLS07XG4gICAgICBpZiAodGhpcy5yZXNlbmRDb29sZG93biA8PSAwKSB7XG4gICAgICAgIHRoaXMuc3RvcFJlc2VuZENvb2xkb3duKCk7XG4gICAgICB9XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BSZXNlbmRDb29sZG93bigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXNlbmRUaW1lcikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnJlc2VuZFRpbWVyKTtcbiAgICAgIHRoaXMucmVzZW5kVGltZXIgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnJlc2VuZENvb2xkb3duID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRSZXNldFJlc2VuZENvb2xkb3duKCk6IHZvaWQge1xuICAgIHRoaXMucmVzZXRSZXNlbmRDb29sZG93biA9IDMwO1xuICAgIHRoaXMucmVzZXRSZXNlbmRUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMucmVzZXRSZXNlbmRDb29sZG93bi0tO1xuICAgICAgaWYgKHRoaXMucmVzZXRSZXNlbmRDb29sZG93biA8PSAwKSB7XG4gICAgICAgIHRoaXMuc3RvcFJlc2V0UmVzZW5kQ29vbGRvd24oKTtcbiAgICAgIH1cbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcFJlc2V0UmVzZW5kQ29vbGRvd24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVzZXRSZXNlbmRUaW1lcikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnJlc2V0UmVzZW5kVGltZXIpO1xuICAgICAgdGhpcy5yZXNldFJlc2VuZFRpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5yZXNldFJlc2VuZENvb2xkb3duID0gMDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcFJlc2VuZENvb2xkb3duKCk7XG4gICAgdGhpcy5zdG9wUmVzZXRSZXNlbmRDb29sZG93bigpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidmFsLWxvZ2luXCIgW2NsYXNzLnZhbC1sb2dpbi0tY2FyZF09XCJjb25maWcuc2hvd0NhcmRcIj5cbiAgPCEtLSBMb2dvIC0tPlxuICBAaWYgKHByb3BzLmxvZ28pIHtcbiAgICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICAgIDx2YWwtaW1hZ2UgW3Byb3BzXT1cInByb3BzLmxvZ29cIiAvPlxuICAgIDwvZGl2PlxuICB9XG5cbiAgPCEtLSBMb2dpbiBGb3JtIC0tPlxuICA8dmFsLWZvcm0gW3Byb3BzXT1cImxvZ2luRm9ybVByb3BzXCIgKG9uU3VibWl0KT1cImxvZ2luSGFuZGxlcigkZXZlbnQpXCIgLz5cblxuICA8IS0tIE9BdXRoIFNlY3Rpb24gLS0+XG4gIEBpZiAoY29uZmlnLnNob3dPQXV0aCAmJiBjb25maWcub2F1dGhQcm92aWRlcnMubGVuZ3RoID4gMCkge1xuICAgIDxkaXYgY2xhc3M9XCJvYXV0aC1zZXBhcmF0b3JcIj5cbiAgICAgIDxzcGFuPm8gY29udGluw7phIGNvbjwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJvYXV0aC1idXR0b25zXCI+XG4gICAgICBAZm9yIChwcm92aWRlciBvZiBjb25maWcub2F1dGhQcm92aWRlcnM7IHRyYWNrIHByb3ZpZGVyKSB7XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgZXhwYW5kPVwiYmxvY2tcIlxuICAgICAgICAgIGZpbGw9XCJvdXRsaW5lXCJcbiAgICAgICAgICBjb2xvcj1cImRhcmtcIlxuICAgICAgICAgIChjbGljayk9XCJsb2dpbldpdGhPQXV0aChwcm92aWRlcilcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJpc09BdXRoTG9hZGluZ1wiXG4gICAgICAgID5cbiAgICAgICAgICBAc3dpdGNoIChwcm92aWRlcikge1xuICAgICAgICAgICAgQGNhc2UgKCdnb29nbGUnKSB7XG4gICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBuYW1lPVwibG9nby1nb29nbGVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICB7eyBpc09BdXRoTG9hZGluZyA/ICdDb25lY3RhbmRvLi4uJyA6ICdDb250aW51YXIgY29uIEdvb2dsZScgfX1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgnYXBwbGUnKSB7XG4gICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBuYW1lPVwibG9nby1hcHBsZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIHt7IGlzT0F1dGhMb2FkaW5nID8gJ0NvbmVjdGFuZG8uLi4nIDogJ0NvbnRpbnVhciBjb24gQXBwbGUnIH19XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoJ21pY3Jvc29mdCcpIHtcbiAgICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIG5hbWU9XCJsb2dvLW1pY3Jvc29mdFwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIHt7IGlzT0F1dGhMb2FkaW5nID8gJ0NvbmVjdGFuZG8uLi4nIDogJ0NvbnRpbnVhciBjb24gTWljcm9zb2Z0JyB9fVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG5cbiAgPCEtLSBSZWdpc3RlciBMaW5rIC0tPlxuICBAaWYgKGNvbmZpZy5zaG93UmVnaXN0ZXIpIHtcbiAgICA8ZGl2IGNsYXNzPVwiYXV0aC1saW5rXCI+XG4gICAgICA8aW9uLXRleHQgY29sb3I9XCJkYXJrXCI+XG4gICAgICAgIMK/Tm8gdGllbmVzIGN1ZW50YT9cbiAgICAgICAgPGEgKGNsaWNrKT1cIm9wZW5SZWdpc3Rlck1vZGFsKClcIj5SZWdpc3RyYXJzZTwvYT5cbiAgICAgIDwvaW9uLXRleHQ+XG4gICAgPC9kaXY+XG4gIH1cblxuICA8IS0tIEZvcmdvdCBQYXNzd29yZCBMaW5rIC0tPlxuICBAaWYgKGNvbmZpZy5zaG93Rm9yZ290UGFzc3dvcmQpIHtcbiAgICA8ZGl2IGNsYXNzPVwiYXV0aC1saW5rIGZvcmdvdC1wYXNzd29yZFwiPlxuICAgICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFya1wiPlxuICAgICAgICDCv09sdmlkYXN0ZSB0dSBjb250cmFzZcOxYT9cbiAgICAgICAgPGEgKGNsaWNrKT1cIm9wZW5Gb3Jnb3RQYXNzd29yZE1vZGFsKClcIj5SZWN1cGVyYXIgY29udHJhc2XDsWE8L2E+XG4gICAgICA8L2lvbi10ZXh0PlxuICAgIDwvZGl2PlxuICB9XG5cbiAgPCEtLSBMZWdhbCBOb3RpY2UgLS0+XG4gIEBpZiAocHJvcHMubGVnYWwpIHtcbiAgICA8ZGl2IGNsYXNzPVwibGVnYWwtbm90aWNlXCI+XG4gICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgPHA+XG4gICAgICAgICAgVXRpbGl6YW1vcyBsb3Mgc2VydmljaW9zIGRlXG4gICAgICAgICAgQGlmIChwcm9wcy5sZWdhbC5jb21wYW55TGluaykge1xuICAgICAgICAgICAgPGEgW2hyZWZdPVwicHJvcHMubGVnYWwuY29tcGFueUxpbmtcIj48c3Ryb25nPnt7IHByb3BzLmxlZ2FsLmNvbXBhbnlOYW1lIH19PC9zdHJvbmc+PC9hPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPHN0cm9uZz57eyBwcm9wcy5sZWdhbC5jb21wYW55TmFtZSB9fTwvc3Ryb25nPlxuICAgICAgICAgIH1cbiAgICAgICAgICBwYXJhIG9mcmVjZXJ0ZSB1bmEgZXhwZXJpZW5jaWEgc2VndXJhLiBBbCBpbmljaWFyIHNlc2nDs24sIGFjZXB0YXNcbiAgICAgICAgICBudWVzdHJvc1xuICAgICAgICAgIEBpZiAocHJvcHMubGVnYWwudGVybXNMaW5rKSB7XG4gICAgICAgICAgICA8YSBbaHJlZl09XCJwcm9wcy5sZWdhbC50ZXJtc0xpbmtcIj5Uw6lybWlub3MgeSBDb25kaWNpb25lczwvYT5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxzcGFuPlTDqXJtaW5vcyB5IENvbmRpY2lvbmVzPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgICB5XG4gICAgICAgICAgQGlmIChwcm9wcy5sZWdhbC5wcml2YWN5TGluaykge1xuICAgICAgICAgICAgPGEgW2hyZWZdPVwicHJvcHMubGVnYWwucHJpdmFjeUxpbmtcIj5Qb2zDrXRpY2EgZGUgUHJpdmFjaWRhZDwvYT5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxzcGFuPlBvbMOtdGljYSBkZSBQcml2YWNpZGFkPC9zcGFuPlxuICAgICAgICAgIH0uXG4gICAgICAgIDwvcD5cbiAgICAgIDwvaW9uLXRleHQ+XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuXG48IS0tIFJlZ2lzdGVyIE1vZGFsIC0tPlxuPGlvbi1tb2RhbCBbaXNPcGVuXT1cImlzUmVnaXN0ZXJNb2RhbE9wZW5cIiAoZGlkRGlzbWlzcyk9XCJjbG9zZVJlZ2lzdGVyTW9kYWwoKVwiPlxuICA8bmctdGVtcGxhdGU+XG4gICAgPGlvbi1oZWFkZXI+XG4gICAgICA8aW9uLXRvb2xiYXI+XG4gICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgKGNsaWNrKT1cImNsb3NlUmVnaXN0ZXJNb2RhbCgpXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG4gICAgPC9pb24taGVhZGVyPlxuICAgIDxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cIm1vZGFsLWZvcm0tc2VjdGlvblwiPlxuICAgICAgICBAaWYgKHByb3BzLmxvZ28pIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDx2YWwtaW1hZ2UgW3Byb3BzXT1cInByb3BzLmxvZ29cIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDx2YWwtZm9ybSBbcHJvcHNdPVwicmVnaXN0ZXJGb3JtUHJvcHNcIiAob25TdWJtaXQpPVwicmVnaXN0ZXJIYW5kbGVyKCRldmVudClcIiAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXV0aC1saW5rXCI+XG4gICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFya1wiPlxuICAgICAgICAgICAgwr9ZYSB0aWVuZXMgY3VlbnRhP1xuICAgICAgICAgICAgPGEgKGNsaWNrKT1cImNsb3NlUmVnaXN0ZXJNb2RhbCgpXCI+SW5pY2lhciBzZXNpw7NuPC9hPlxuICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvaW9uLWNvbnRlbnQ+XG4gIDwvbmctdGVtcGxhdGU+XG48L2lvbi1tb2RhbD5cblxuPCEtLSBWZXJpZnkgRW1haWwgTW9kYWwgLS0+XG48aW9uLW1vZGFsIFtpc09wZW5dPVwiaXNWZXJpZnlNb2RhbE9wZW5cIiBbYmFja2Ryb3BEaXNtaXNzXT1cImZhbHNlXCI+XG4gIDxuZy10ZW1wbGF0ZT5cbiAgICA8aW9uLWhlYWRlcj5cbiAgICAgIDxpb24tdG9vbGJhcj5cbiAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiAoY2xpY2spPVwiY2xvc2VWZXJpZnlNb2RhbCgpXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG4gICAgPC9pb24taGVhZGVyPlxuICAgIDxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cIm1vZGFsLWZvcm0tc2VjdGlvblwiPlxuICAgICAgICBAaWYgKHByb3BzLmxvZ28pIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDx2YWwtaW1hZ2UgW3Byb3BzXT1cInByb3BzLmxvZ29cIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDx2YWwtZm9ybSBbcHJvcHNdPVwidmVyaWZ5Rm9ybVByb3BzXCIgKG9uU3VibWl0KT1cInZlcmlmeUhhbmRsZXIoJGV2ZW50KVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXNlbmQtbGlua1wiPlxuICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cImRhcmtcIj5cbiAgICAgICAgICAgIMK/Tm8gaGFzIHJlY2liaWRvIHR1IGPDs2RpZ28/XG4gICAgICAgICAgICBAaWYgKHJlc2VuZENvb2xkb3duID4gMCkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvb2xkb3duXCI+UmVlbnZpYXIgZW4ge3sgcmVzZW5kQ29vbGRvd24gfX1zPC9zcGFuPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxhIChjbGljayk9XCJyZXNlbmRDb2RlKClcIj5SZWVudmlhcjwvYT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc2VjdGlvbj5cbiAgICA8L2lvbi1jb250ZW50PlxuICA8L25nLXRlbXBsYXRlPlxuPC9pb24tbW9kYWw+XG5cbjwhLS0gRm9yZ290IFBhc3N3b3JkIE1vZGFsIC0tPlxuPGlvbi1tb2RhbCBbaXNPcGVuXT1cImlzRm9yZ290UGFzc3dvcmRNb2RhbE9wZW5cIiAoZGlkRGlzbWlzcyk9XCJjbG9zZUZvcmdvdFBhc3N3b3JkTW9kYWwoKVwiPlxuICA8bmctdGVtcGxhdGU+XG4gICAgPGlvbi1oZWFkZXI+XG4gICAgICA8aW9uLXRvb2xiYXI+XG4gICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgKGNsaWNrKT1cImNsb3NlRm9yZ290UGFzc3dvcmRNb2RhbCgpXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG4gICAgPC9pb24taGVhZGVyPlxuICAgIDxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cIm1vZGFsLWZvcm0tc2VjdGlvblwiPlxuICAgICAgICBAaWYgKHByb3BzLmxvZ28pIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDx2YWwtaW1hZ2UgW3Byb3BzXT1cInByb3BzLmxvZ29cIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDx2YWwtZm9ybSBbcHJvcHNdPVwiZm9yZ290UGFzc3dvcmRGb3JtUHJvcHNcIiAob25TdWJtaXQpPVwiZm9yZ290UGFzc3dvcmRIYW5kbGVyKCRldmVudClcIiAvPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvaW9uLWNvbnRlbnQ+XG4gIDwvbmctdGVtcGxhdGU+XG48L2lvbi1tb2RhbD5cblxuPCEtLSBSZXNldCBQYXNzd29yZCBNb2RhbCAtLT5cbjxpb24tbW9kYWwgW2lzT3Blbl09XCJpc1Jlc2V0UGFzc3dvcmRNb2RhbE9wZW5cIiBbYmFja2Ryb3BEaXNtaXNzXT1cImZhbHNlXCI+XG4gIDxuZy10ZW1wbGF0ZT5cbiAgICA8aW9uLWhlYWRlcj5cbiAgICAgIDxpb24tdG9vbGJhcj5cbiAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwiY2xlYXJcIiAoY2xpY2spPVwiY2xvc2VSZXNldFBhc3N3b3JkTW9kYWwoKVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8L2lvbi10b29sYmFyPlxuICAgIDwvaW9uLWhlYWRlcj5cbiAgICA8aW9uLWNvbnRlbnQgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJtb2RhbC1mb3JtLXNlY3Rpb25cIj5cbiAgICAgICAgQGlmIChwcm9wcy5sb2dvKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ28tY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8dmFsLWltYWdlIFtwcm9wc109XCJwcm9wcy5sb2dvXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8dmFsLWZvcm0gW3Byb3BzXT1cInJlc2V0UGFzc3dvcmRGb3JtUHJvcHNcIiAob25TdWJtaXQpPVwicmVzZXRQYXNzd29yZEhhbmRsZXIoJGV2ZW50KVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXNlbmQtbGlua1wiPlxuICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cImRhcmtcIj5cbiAgICAgICAgICAgIMK/Tm8gaGFzIHJlY2liaWRvIHR1IGPDs2RpZ28/XG4gICAgICAgICAgICBAaWYgKHJlc2V0UmVzZW5kQ29vbGRvd24gPiAwKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29vbGRvd25cIj5SZWVudmlhciBlbiB7eyByZXNldFJlc2VuZENvb2xkb3duIH19czwvc3Bhbj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8YSAoY2xpY2spPVwicmVzZW5kUmVzZXRDb2RlKClcIj5SZWVudmlhcjwvYT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc2VjdGlvbj5cbiAgICA8L2lvbi1jb250ZW50PlxuICA8L25nLXRlbXBsYXRlPlxuPC9pb24tbW9kYWw+XG5cbjwhLS0gTUZBIFZlcmlmeSBNb2RhbCAtLT5cbjxpb24tbW9kYWwgW2lzT3Blbl09XCJpc01GQVZlcmlmeU1vZGFsT3BlblwiIFtiYWNrZHJvcERpc21pc3NdPVwiZmFsc2VcIj5cbiAgPG5nLXRlbXBsYXRlPlxuICAgIDxpb24taGVhZGVyPlxuICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIChjbGljayk9XCJjbG9zZU1GQVZlcmlmeU1vZGFsKClcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvc2Utb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgPC9pb24tdG9vbGJhcj5cbiAgICA8L2lvbi1oZWFkZXI+XG4gICAgPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwibW9kYWwtZm9ybS1zZWN0aW9uXCI+XG4gICAgICAgIEBpZiAocHJvcHMubG9nbykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHZhbC1pbWFnZSBbcHJvcHNdPVwicHJvcHMubG9nb1wiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPHZhbC1mb3JtIFtwcm9wc109XCJtZmFWZXJpZnlGb3JtUHJvcHNcIiAob25TdWJtaXQpPVwidmVyaWZ5TUZBSGFuZGxlcigkZXZlbnQpXCIgLz5cbiAgICAgIDwvc2VjdGlvbj5cbiAgICA8L2lvbi1jb250ZW50PlxuICA8L25nLXRlbXBsYXRlPlxuPC9pb24tbW9kYWw+XG4iXX0=
|
|
@@ -6,5 +6,6 @@ export const LOGIN_DEFAULTS = {
|
|
|
6
6
|
oauthProviders: ['google'],
|
|
7
7
|
showRegister: true,
|
|
8
8
|
showForgotPassword: true,
|
|
9
|
+
showCard: false,
|
|
9
10
|
};
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2xvZ2luL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStFQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBMEU7SUFDbkcsU0FBUyxFQUFFLElBQUk7SUFDZixjQUFjLEVBQUUsQ0FBQyxRQUFRLENBQUM7SUFDMUIsWUFBWSxFQUFFLElBQUk7SUFDbEIsa0JBQWtCLEVBQUUsSUFBSTtJQUN4QixRQUFRLEVBQUUsS0FBSztDQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW1hZ2VNZXRhZGF0YSB9IGZyb20gJy4uLy4uL2F0b21zL2ltYWdlL3R5cGVzJztcbmltcG9ydCB7IE9BdXRoUHJvdmlkZXIgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoL3R5cGVzJztcbmltcG9ydCB7IEF1dGhVc2VyIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aC90eXBlcyc7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgbGVnYWwgbm90aWNlIGRpc3BsYXllZCBpbiB0aGUgbG9naW4gY29tcG9uZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5MZWdhbENvbmZpZyB7XG4gIC8qKiBDb21wYW55IG5hbWUgdG8gZGlzcGxheSAqL1xuICBjb21wYW55TmFtZTogc3RyaW5nO1xuICAvKiogTGluayBmb3IgY29tcGFueSBuYW1lIChvcHRpb25hbCkgKi9cbiAgY29tcGFueUxpbms/OiBzdHJpbmc7XG4gIC8qKiBMaW5rIHRvIHRlcm1zIGFuZCBjb25kaXRpb25zIHBhZ2UgKi9cbiAgdGVybXNMaW5rPzogc3RyaW5nO1xuICAvKiogTGluayB0byBwcml2YWN5IHBvbGljeSBwYWdlICovXG4gIHByaXZhY3lMaW5rPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1haW4gY29uZmlndXJhdGlvbiBmb3IgdGhlIExvZ2luIGNvbXBvbmVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luTWV0YWRhdGEge1xuICAvKiogTG9nbyB0byBkaXNwbGF5IGF0IHRoZSB0b3Agb2YgdGhlIGZvcm0gKi9cbiAgbG9nbz86IEltYWdlTWV0YWRhdGE7XG5cbiAgLyoqIFNob3cgT0F1dGggbG9naW4gYnV0dG9ucyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgc2hvd09BdXRoPzogYm9vbGVhbjtcblxuICAvKiogT0F1dGggcHJvdmlkZXJzIHRvIHNob3cgKGRlZmF1bHQ6IFsnZ29vZ2xlJ10pICovXG4gIG9hdXRoUHJvdmlkZXJzPzogT0F1dGhQcm92aWRlcltdO1xuXG4gIC8qKiBTaG93IHJlZ2lzdGVyIGxpbmsgYW5kIG1vZGFsIChkZWZhdWx0OiB0cnVlKSAqL1xuICBzaG93UmVnaXN0ZXI/OiBib29sZWFuO1xuXG4gIC8qKiBTaG93IGZvcmdvdCBwYXNzd29yZCBsaW5rIGFuZCBtb2RhbCAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgc2hvd0ZvcmdvdFBhc3N3b3JkPzogYm9vbGVhbjtcblxuICAvKiogV3JhcCBjb21wb25lbnQgaW4gY2FyZC1zdHlsZSBjb250YWluZXIgd2l0aCBiYWNrZ3JvdW5kLCBzaGFkb3csIHJvdW5kZWQgY29ybmVycyAoZGVmYXVsdDogZmFsc2UpICovXG4gIHNob3dDYXJkPzogYm9vbGVhbjtcblxuICAvKiogTGVnYWwgbm90aWNlIGNvbmZpZ3VyYXRpb24gKi9cbiAgbGVnYWw/OiBMb2dpbkxlZ2FsQ29uZmlnO1xuXG4gIC8qKiBSb3V0ZSB0byByZWRpcmVjdCBhZnRlciBzdWNjZXNzZnVsIGxvZ2luIChvcHRpb25hbCAtIGlmIG5vdCBzZXQsIGVtaXRzIGV2ZW50KSAqL1xuICByZWRpcmVjdE9uU3VjY2Vzcz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFdmVudCBlbWl0dGVkIHdoZW4gbG9naW4gaXMgc3VjY2Vzc2Z1bFxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luU3VjY2Vzc0V2ZW50IHtcbiAgLyoqIFRoZSBhdXRoZW50aWNhdGVkIHVzZXIgKi9cbiAgdXNlcjogQXV0aFVzZXIgfCBudWxsO1xuICAvKiogV2hldGhlciBNRkEgd2FzIHJlcXVpcmVkIGFuZCBjb21wbGV0ZWQgKi9cbiAgbWZhQ29tcGxldGVkPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhpcyB3YXMgYW4gT0F1dGggbG9naW4gKi9cbiAgb2F1dGhQcm92aWRlcj86IE9BdXRoUHJvdmlkZXI7XG59XG5cbi8qKlxuICogRXZlbnQgZW1pdHRlZCB3aGVuIGxvZ2luIGZhaWxzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5FcnJvckV2ZW50IHtcbiAgLyoqIEVycm9yIGNvZGUgZnJvbSB0aGUgYmFja2VuZCAqL1xuICBjb2RlPzogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgZXJyb3IgbWVzc2FnZSAqL1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIC8qKiBUaGUgb3BlcmF0aW9uIHRoYXQgZmFpbGVkICovXG4gIG9wZXJhdGlvbjogJ3NpZ25pbicgfCAnc2lnbnVwJyB8ICd2ZXJpZnknIHwgJ2ZvcmdvdCcgfCAncmVzZXQnIHwgJ21mYScgfCAnb2F1dGgnO1xufVxuXG4vKipcbiAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBNRkEgdmVyaWZpY2F0aW9uIGlzIHJlcXVpcmVkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTUZBUmVxdWlyZWRFdmVudCB7XG4gIC8qKiBNRkEgbWV0aG9kIHJlcXVpcmVkICovXG4gIG1ldGhvZDogJ1RPVFAnIHwgJ0VNQUlMJyB8ICdTTVMnO1xufVxuXG4vKipcbiAqIERlZmF1bHQgdmFsdWVzIGZvciBMb2dpbk1ldGFkYXRhXG4gKi9cbmV4cG9ydCBjb25zdCBMT0dJTl9ERUZBVUxUUzogUmVxdWlyZWQ8T21pdDxMb2dpbk1ldGFkYXRhLCAnbG9nbycgfCAnbGVnYWwnIHwgJ3JlZGlyZWN0T25TdWNjZXNzJz4+ID0ge1xuICBzaG93T0F1dGg6IHRydWUsXG4gIG9hdXRoUHJvdmlkZXJzOiBbJ2dvb2dsZSddLFxuICBzaG93UmVnaXN0ZXI6IHRydWUsXG4gIHNob3dGb3Jnb3RQYXNzd29yZDogdHJ1ZSxcbiAgc2hvd0NhcmQ6IGZhbHNlLFxufTtcbiJdfQ==
|