@sumaris-net/ngx-components 2.12.16-rc2 → 2.12.16-rc4
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/public_api.mjs +5 -1
- package/esm2022/src/app/admin/users/users.mjs +3 -3
- package/esm2022/src/app/core/account/account.module.mjs +17 -4
- package/esm2022/src/app/core/account/account.page.mjs +14 -5
- package/esm2022/src/app/core/account/password/change-password.form.mjs +60 -0
- package/esm2022/src/app/core/account/password/change-password.module.mjs +22 -0
- package/esm2022/src/app/core/account/password/change-password.page.mjs +144 -0
- package/esm2022/src/app/core/auth/auth.form.mjs +41 -22
- package/esm2022/src/app/core/auth/auth.module.mjs +14 -5
- package/esm2022/src/app/core/auth/reset-password.modal.mjs +77 -0
- package/esm2022/src/app/core/core.module.mjs +5 -1
- package/esm2022/src/app/core/form/form.module.mjs +7 -3
- package/esm2022/src/app/core/form/username/username.form.mjs +52 -0
- package/esm2022/src/app/core/form/username/username.module.mjs +20 -0
- package/esm2022/src/app/core/home/home.mjs +23 -9
- package/esm2022/src/app/core/register/register-confirm.page.mjs +10 -8
- package/esm2022/src/app/core/register/register.form.mjs +3 -3
- package/esm2022/src/app/core/services/account.service.mjs +96 -12
- package/esm2022/src/app/core/services/config/core.config.mjs +7 -1
- package/esm2022/src/app/core/services/errors.mjs +2 -1
- package/esm2022/src/app/core/settings/settings.page.mjs +3 -3
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +1 -1
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +55 -72
- package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +3 -3
- package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +5 -4
- package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +2 -2
- package/esm2022/src/app/shared/toolbar/toolbar.mjs +13 -8
- package/esm2022/src/app/shared/validator/validators.mjs +13 -1
- package/esm2022/src/environments/environment.mjs +12 -6
- package/fesm2022/sumaris-net.ngx-components.mjs +714 -237
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +5 -4
- package/public_api.d.ts +4 -0
- package/src/app/core/account/account.module.d.ts +2 -1
- package/src/app/core/account/account.page.d.ts +23 -14
- package/src/app/core/account/password/change-password.form.d.ts +19 -0
- package/src/app/core/account/password/change-password.module.d.ts +11 -0
- package/src/app/core/account/password/change-password.page.d.ts +36 -0
- package/src/app/core/auth/auth.form.d.ts +11 -9
- package/src/app/core/auth/auth.module.d.ts +6 -4
- package/src/app/core/auth/reset-password.modal.d.ts +26 -0
- package/src/app/core/core.module.d.ts +2 -1
- package/src/app/core/form/form.module.d.ts +2 -1
- package/src/app/core/form/username/username.form.d.ts +19 -0
- package/src/app/core/form/username/username.module.d.ts +9 -0
- package/src/app/core/home/home.d.ts +9 -1
- package/src/app/core/services/account.service.d.ts +8 -0
- package/src/app/core/services/config/core.config.d.ts +1 -0
- package/src/app/core/services/errors.d.ts +1 -0
- package/src/app/shared/inputs.d.ts +1 -1
- package/src/app/shared/material/autocomplete/material.autocomplete.config.d.ts +1 -0
- package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +2 -0
- package/src/app/shared/toolbar/toolbar.d.ts +5 -0
- package/src/app/shared/validator/validators.d.ts +2 -0
- package/src/assets/i18n/en-US.json +26 -12
- package/src/assets/i18n/en.json +26 -13
- package/src/assets/i18n/fr.json +20 -9
- package/src/assets/manifest.json +1 -1
- package/src/theme/_ionic.globals.scss +1 -0
- package/src/theme/_mixins.scss +1 -0
|
@@ -33,10 +33,24 @@ import * as i17 from "../../shared/pipes/date-format.pipe";
|
|
|
33
33
|
import * as i18 from "../../shared/pipes/date-from-now.pipe";
|
|
34
34
|
import * as i19 from "../../shared/pipes/arrays.pipe";
|
|
35
35
|
import * as i20 from "../../../environments/environment.class";
|
|
36
|
-
|
|
36
|
+
/**
|
|
37
|
+
* @param files
|
|
38
|
+
* @deprecated use `getRandomImageWithCredit()` instead
|
|
39
|
+
**/
|
|
40
|
+
export function getRandomImage(files) {
|
|
37
41
|
const imgIndex = Math.floor(Math.random() * files.length);
|
|
38
42
|
return files[imgIndex];
|
|
39
|
-
}
|
|
43
|
+
}
|
|
44
|
+
export function getRandomImageWithCredit(files) {
|
|
45
|
+
const imgIndex = Math.floor(Math.random() * files.length);
|
|
46
|
+
const parts = files[imgIndex]?.split('|');
|
|
47
|
+
return parts
|
|
48
|
+
? {
|
|
49
|
+
image: parts[0],
|
|
50
|
+
credits: parts[1],
|
|
51
|
+
}
|
|
52
|
+
: null;
|
|
53
|
+
}
|
|
40
54
|
export const APP_HOME_BUTTONS = new InjectionToken('homeButton');
|
|
41
55
|
export class HomePage extends RxState {
|
|
42
56
|
accountService;
|
|
@@ -220,13 +234,13 @@ export class HomePage extends RxState {
|
|
|
220
234
|
(!this.offline || !img.startsWith('http')));
|
|
221
235
|
// Background image found: select one randomly
|
|
222
236
|
if (backgroundImages.length) {
|
|
223
|
-
const
|
|
224
|
-
this.contentStyle =
|
|
225
|
-
this.contentCredits =
|
|
237
|
+
const { image, credits } = getRandomImageWithCredit(backgroundImages);
|
|
238
|
+
this.contentStyle = image ? { 'background-image': `url(${image})` } : {};
|
|
239
|
+
this.contentCredits = credits || '';
|
|
226
240
|
}
|
|
227
241
|
// Use background color
|
|
228
242
|
else {
|
|
229
|
-
const primaryColor =
|
|
243
|
+
const primaryColor = config.getProperty(CORE_CONFIG_OPTIONS.COLOR_PRIMARY) || 'var(--ion-color-primary)';
|
|
230
244
|
this.contentStyle = (primaryColor && { 'background-color': primaryColor }) || {};
|
|
231
245
|
}
|
|
232
246
|
}
|
|
@@ -287,11 +301,11 @@ export class HomePage extends RxState {
|
|
|
287
301
|
this.cd.markForCheck();
|
|
288
302
|
}
|
|
289
303
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HomePage, deps: [{ token: i1.AccountService }, { token: i2.ModalController }, { token: i3.TranslateService }, { token: i2.ToastController }, { token: i4.ConfigService }, { token: i5.PlatformService }, { token: i0.ChangeDetectorRef }, { token: i6.NetworkService }, { token: i7.LocalSettingsService }, { token: ENVIRONMENT }, { token: APP_LOCALES }, { token: APP_HOME_BUTTONS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
290
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: HomePage, selector: "app-page-home", usesInheritance: true, ngImport: i0, template: "<app-toolbar [canGoBack]=\"false\" visible-xs visible-sm visible-mobile>\n <!-- change locale button -->\n <ion-button slot=\"end\" *ngIf=\"currentLocaleCode; let code\" [matMenuTriggerFor]=\"localeMenu\">\n <ion-label class=\"ion-text-uppercase\"> {{ code }}</ion-label>\n <mat-icon slot=\"end\">arrow_drop_down</mat-icon>\n </ion-button>\n</app-toolbar>\n\n<!-- change locale menu -->\n<mat-menu #localeMenu=\"matMenu\">\n <button *ngFor=\"let item of locales\" mat-menu-item (click)=\"changeLanguage(item.key)\">\n <ion-label>{{ item.value }}</ion-label>\n </button>\n</mat-menu>\n\n<ion-content [ngStyle]=\"contentStyle\" no-padding-xs>\n <span class=\"content-credits\">\n <ion-text>{{ contentCredits }}</ion-text>\n </span>\n\n <!-- loading spinner -->\n <div class=\"loading-page\" [class.cdk-visually-hidden]=\"!(loading$ | push)\">\n @if (showSpinner) {\n <div class=\"spinner\">\n <p [innerHTML]=\"'COMMON.LOADING_DOTS' | translate\"></p>\n <div class=\"sk-cube1 sk-cube\"></div>\n <div class=\"sk-cube2 sk-cube\"></div>\n <div class=\"sk-cube4 sk-cube\"></div>\n <div class=\"sk-cube3 sk-cube\"></div>\n </div>\n }\n </div>\n\n <!-- Desktop: translucent top toolbar -->\n <div hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar translucent>\n <ion-buttons slot=\"start\">\n <ion-menu-toggle>\n <ion-button color=\"light\" fill=\"clear\">\n <ion-icon slot=\"icon-only\" name=\"menu\"></ion-icon>\n </ion-button>\n </ion-menu-toggle>\n </ion-buttons>\n\n <ion-buttons slot=\"end\">\n <!-- change locale button -->\n @if (currentLocaleCode; as code) {\n <ion-button color=\"secondary\" fill=\"solid\" [matMenuTriggerFor]=\"localeMenu\">\n <ion-label class=\"ion-text-uppercase\"> {{ code }}</ion-label>\n <mat-icon slot=\"end\">arrow_drop_down</mat-icon>\n </ion-button>\n }\n </ion-buttons>\n </ion-toolbar>\n </div>\n\n <!-- Install (and upgrade) card -->\n <app-install-upgrade-card [isLogin]=\"isLogin\" [showInstallButton]=\"true\"></app-install-upgrade-card>\n\n @if (!(loading$ | push)) {\n <!-- Welcome card -->\n <ion-card class=\"main welcome ion-padding ion-text-center ion-align-self-center\" @fadeInAnimation>\n <ion-card-header>\n <ion-card-title class=\"ion-text-center\">\n <span *ngIf=\"isWeb\" [innerHTML]=\"'HOME.WELCOME_WEB' | translate: { appName: appName }\"></span>\n <span *ngIf=\"!isWeb\" [innerHTML]=\"'HOME.WELCOME_APP' | translate: { appName: appName }\"></span>\n </ion-card-title>\n <ion-card-subtitle [innerHTML]=\"description\"></ion-card-subtitle>\n </ion-card-header>\n <ion-card-content class=\"ion-no-padding\">\n <ion-text color=\"primary\">\n <img *ngIf=\"logo\" [attr.src]=\"logo\" alt=\"Logo\" />\n </ion-text>\n <!-- register help text -->\n <ion-text *ngIf=\"!isLogin && canRegister\">\n <br />\n <span translate>HOME.REGISTER_HELP</span>\n </ion-text>\n <div class=\"ion-padding-top\">\n <!-- If NOT login -->\n <ng-container *ngIf=\"!isLogin; else loginButtons\">\n <ion-button *ngIf=\"canRegister\" expand=\"block\" color=\"tertiary\" (click)=\"register()\">\n <span translate>HOME.BTN_REGISTER</span>\n </ion-button>\n <ion-button expand=\"block\" color=\"light\" [routerLink]=\"['/']\" (click)=\"login()\">\n <span translate>AUTH.BTN_LOGIN</span>\n </ion-button>\n </ng-container>\n\n <!-- If user login -->\n <ng-template #loginButtons>\n <!-- Feature buttons -->\n <ng-container *rxIf=\"$filteredButtons; let buttons\">\n <ng-container *ngFor=\"let item of buttons\">\n <ion-button\n *ngIf=\"item.path\"\n expand=\"block\"\n color=\"tertiary\"\n [class]=\"item.cssClass\"\n [routerLink]=\"item.path\"\n routerDirection=\"root\"\n >\n <ion-icon slot=\"start\" class=\"ion-float-start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" class=\"ion-float-start\" *ngIf=\"item.matIcon\">{{ item.matIcon }}</mat-icon>\n <ion-text>{{ 'HOME.BTN_DATA_ENTRY' | translate: { name: (item.title | translate) } }}</ion-text>\n </ion-button>\n\n <!-- divider -->\n <div *ngIf=\"!item.path && !item.action\" [class]=\"item.cssClass\">\n <ion-label translate>{{ item.title }} </ion-label>\n </div>\n </ng-container>\n\n <!--<p *ngIf=\"buttons.length\" class=\"visible-mobile\"> </p>-->\n </ng-container>\n\n <ion-button *ngIf=\"showAccountButton\" expand=\"block\" color=\"secondary\" [routerLink]=\"['/account']\">\n <ion-icon slot=\"start\" class=\"ion-float-start\" name=\"person-circle\"></ion-icon>\n <ion-text translate>HOME.BTN_MY_ACCOUNT</ion-text>\n </ion-button>\n\n <p hidden-xs hidden-sm hidden-mobile>\n <ion-text\n [innerHTML]=\"'HOME.NOT_THIS_ACCOUNT_QUESTION' | translate: { displayName: accountName }\"\n ></ion-text>\n <br />\n <ion-text>\n <a href=\"#\" (click)=\"logout($event)\">\n <span translate>HOME.BTN_DISCONNECT</span>\n </a>\n </ion-text>\n </p>\n </ng-template>\n </div>\n </ion-card-content>\n </ion-card>\n\n <!-- Page history -->\n @if (isLogin && (pageHistory$ | push); as pageHistory) {\n <ion-grid class=\"history-container ion-align-self-center\">\n <ion-row>\n @for (page of pageHistory; track page.path) {\n <ion-col size=\"12\" size-xl=\"\" class=\"ion-text-center\">\n <ion-card class=\"ion-align-self-start ion-text-start\" @fadeInAnimation>\n <ion-card-header class=\"ion-no-padding\">\n <!-- top bar -->\n <ion-card-subtitle>\n <button\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"removePageHistory(page.path)\"\n mat-icon-button\n class=\"ion-float-start ion-no-margin close-button\"\n >\n <mat-icon>close</mat-icon>\n </button>\n <ion-label [innerHTML]=\"page.subtitle | translate\"></ion-label>\n <ion-text class=\"ion-float-end\" [title]=\"page.time | dateFormat: { time: true }\">\n <small>\n <ion-icon name=\"time-outline\"></ion-icon>\n {{ page.time | dateFromNow }}\n </small>\n \n </ion-text>\n </ion-card-subtitle>\n\n <!-- main page -->\n <ion-card-title class=\"ion-no-margin ion-no-padding\">\n <ion-item\n detail=\"true\"\n tappable\n class=\"text-1x\"\n [routerLink]=\"page.path\"\n routerDirection=\"root\"\n lines=\"none\"\n >\n <!-- page icon-->\n <ion-icon *ngIf=\"page.icon\" slot=\"start\" [name]=\"page.icon\"></ion-icon>\n <mat-icon *ngIf=\"page.matIcon\" slot=\"start\">{{ page.matIcon }}</mat-icon>\n\n <ion-label color=\"primary\" [innerHTML]=\"page.title\"></ion-label>\n </ion-item>\n </ion-card-title>\n </ion-card-header>\n\n <!-- children pages -->\n @if (page.children | isNotEmptyArray) {\n <ion-card-content class=\"ion-no-padding ion-padding-start\">\n <ion-list class=\"ion-no-padding\">\n @for (childPage of page.children; track childPage.path) {\n <ion-item\n detail=\"true\"\n tappable\n class=\"text-1x\"\n [routerLink]=\"childPage.path\"\n routerDirection=\"root\"\n >\n <!-- page icon-->\n <ion-icon *ngIf=\"childPage.icon\" slot=\"start\" color=\"dark\" [name]=\"childPage.icon\"></ion-icon>\n <mat-icon *ngIf=\"childPage.matIcon\" slot=\"start\" color=\"dark\">\n {{ childPage.matIcon }}\n </mat-icon>\n\n <ion-label color=\"dark\" [innerHTML]=\"childPage.title\"></ion-label>\n </ion-item>\n }\n </ion-list>\n </ion-card-content>\n }\n </ion-card>\n </ion-col>\n }\n </ion-row>\n </ion-grid>\n } @else if (showPartnerBanner) {\n <!-- Display partners logos -->\n <div class=\"bottom-banner ion-text-center ion-padding\" @fadeInAnimation>\n @for (item of $partners | async; track $index) {\n <a href=\"{{ item.siteUrl }}\">\n <img class=\"logo\" src=\"{{ item.logo }}\" alt=\"{{ item.label }}\" [title]=\"item.label\" />\n </a>\n }\n </div>\n }\n }\n</ion-content>\n", styles: ["h1,h2,h3,h4,h5{white-space:normal}.center,ion-content ion-card.welcome img{text-align:center;display:inline-block}ion-content{--background: transparent;background-size:cover;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-color:var(--ion-background-color);display:inline-block;padding:15px}ion-content .loading-page{display:block;height:100%;width:100%;position:absolute;background-color:var(--ion-background-color);z-index:5;transition:background .5s linear;-webkit-transition:background 1.5s linear}ion-content .loading-page.hidden{background-color:rgba(var(--ion-color-primary),0)}ion-content ion-card{z-index:9}ion-content ion-card ion-card-header{display:block}ion-content ion-card ion-card-header ion-card-subtitle,ion-content ion-card ion-card-header ion-card-title{display:block;width:100%}ion-content ion-card.main{min-width:240px;max-width:400px;margin-left:auto;margin-right:auto}ion-content ion-card.welcome{background-color:#ffffffb3}ion-content ion-card.welcome button{margin-top:16px}ion-content ion-card.welcome img{max-width:250px}ion-content .history-container{margin-left:auto;margin-right:auto}ion-content .history-container ion-card{display:inline-block;box-sizing:border-box;z-index:8;min-width:240px;max-width:400px;width:100%;margin-left:auto;margin-right:auto;background-color:#ffffffb3}ion-content .history-container ion-card ion-card-header ion-card-subtitle{height:40px}ion-content .history-container ion-card ion-card-header ion-card-subtitle button[float-start]{--mdc-icon-button-state-layer-size: 40px;padding:8px;z-index:99;margin:0}ion-content .history-container ion-card ion-card-header ion-card-subtitle ion-label{line-height:40px}ion-content .history-container ion-card ion-card-header ion-card-subtitle ion-label[float-end]{padding-right:16px;font-weight:400}ion-content .history-container ion-card ion-card-header ion-card-title ion-item{width:100%;--ion-item-background: $transparent;--ion-item-icon-color: var(--ion-color-primary);--ion-item-text-color: var(--ion-color-primary)}ion-content .history-container ion-card ion-card-header ion-card-title ion-item ion-icon[slot=start],ion-content .history-container ion-card ion-card-header ion-card-title ion-item mat-icon[slot=start]{margin-right:unset;margin-inline-end:16px!important;color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor}ion-content .history-container ion-card ion-card-header ion-card-title ion-item ion-text,ion-content .history-container ion-card ion-card-header ion-card-title ion-item ion-label{color:var(--ion-item-text-color)!important;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%}ion-content .history-container ion-card ion-card-content ion-list{--ion-item-background: var(--ion-color-transparent)}ion-content .history-container ion-card ion-card-content ion-list ion-item{--ion-item-icon-color: var(--ion-color-dark);--ion-item-text-color: var(--ion-color-dark)}ion-content .history-container ion-card ion-card-content ion-list ion-item ion-icon[slot=start],ion-content .history-container ion-card ion-card-content ion-list ion-item mat-icon[slot=start]{color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor;margin-right:unset;margin-inline-end:16px!important}ion-content .history-container ion-card ion-card-content ion-list ion-item ion-text,ion-content .history-container ion-card ion-card-content ion-list ion-item ion-label{color:var(--ion-item-text-color)!important}ion-content .bottom-banner{background-color:#ffffffb3;min-width:240px;z-index:0;position:absolute;left:16px;right:16px;bottom:16px}ion-content .bottom-banner img.logo{max-height:50px;margin-left:8px}ion-content ion-text{text-align:center}@media screen and (max-width: 575px){ion-content ion-card{min-width:160px;width:calc(100% - 20px);max-width:100%;margin-left:10px;margin-right:10px}ion-content ion-card h1{margin-top:0;font-size:20px}ion-content ion-card ion-card-content ion-button{margin-top:8px}ion-content .bottom-banner{display:block;position:unset}ion-content .bottom-banner img.logo{max-height:30px}}@media screen and (max-width: 767px) and (min-width: 576px){ion-content{min-height:555px}ion-content .bottom-banner img.logo{max-height:40px}}@media screen and (min-width: 768px){ion-content{min-height:calc(100% - 100px)}}.content-credits{position:absolute;right:5px;bottom:5px}\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.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: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i2.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i2.IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i2.IonMenuToggle, selector: "ion-menu-toggle", inputs: ["autoHide", "menu"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i2.RouterLinkDelegate, selector: ":not(a):not(area)[routerLink]" }, { kind: "directive", type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i9.RxIf, selector: "[rxIf]", inputs: ["rxIf", "rxIfStrategy", "rxIfElse", "rxIfThen", "rxIfSuspense", "rxIfComplete", "rxIfError", "rxIfContextTrigger", "rxIfNextTrigger", "rxIfSuspenseTrigger", "rxIfErrorTrigger", "rxIfCompleteTrigger", "rxIfParent", "rxIfPatchZone", "rxIfRenderCallback"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i11.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i12.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i12.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i12.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i13.ToolbarComponent, selector: "app-toolbar", inputs: ["progressBarMode", "title", "color", "class", "backHref", "defaultBackHref", "hasValidate", "hasClose", "hasSearch", "canGoBack", "canShowMenu"], outputs: ["onValidate", "onClose", "onValidateAndClose", "onBackClick", "onSearch"] }, { kind: "directive", type: i14.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i15.AppInstallUpgradeCard, selector: "app-install-upgrade-card", inputs: ["isLogin", "showUpgradeWarning", "showOfflineWarning", "showInstallButton"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: i16.RxPush, name: "push" }, { kind: "pipe", type: i17.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i18.DateFromNowPipe, name: "dateFromNow" }, { kind: "pipe", type: i19.NotEmptyArrayPipe, name: "isNotEmptyArray" }], animations: [fadeInAnimation, slideUpDownAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
304
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: HomePage, selector: "app-page-home", usesInheritance: true, ngImport: i0, template: "<app-toolbar [canGoBack]=\"false\" visible-xs visible-sm visible-mobile>\n <!-- change locale button -->\n <ion-button slot=\"end\" *ngIf=\"currentLocaleCode; let code\" [matMenuTriggerFor]=\"localeMenu\">\n <ion-label class=\"ion-text-uppercase\"> {{ code }}</ion-label>\n <mat-icon slot=\"end\">arrow_drop_down</mat-icon>\n </ion-button>\n</app-toolbar>\n\n<!-- change locale menu -->\n<mat-menu #localeMenu=\"matMenu\">\n <button *ngFor=\"let item of locales\" mat-menu-item (click)=\"changeLanguage(item.key)\">\n <ion-label>{{ item.value }}</ion-label>\n </button>\n</mat-menu>\n\n<ion-content [ngStyle]=\"contentStyle\" no-padding-xs>\n <span class=\"content-credits\">\n <ion-text>{{ contentCredits }}</ion-text>\n </span>\n\n <!-- loading spinner -->\n <div class=\"loading-page\" [class.cdk-visually-hidden]=\"!(loading$ | push)\">\n @if (showSpinner) {\n <div class=\"spinner\">\n <p [innerHTML]=\"'COMMON.LOADING_DOTS' | translate\"></p>\n <div class=\"sk-cube1 sk-cube\"></div>\n <div class=\"sk-cube2 sk-cube\"></div>\n <div class=\"sk-cube4 sk-cube\"></div>\n <div class=\"sk-cube3 sk-cube\"></div>\n </div>\n }\n </div>\n\n <!-- Desktop: translucent top toolbar -->\n <div hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar translucent>\n <ion-buttons slot=\"start\">\n <ion-menu-toggle>\n <ion-button color=\"light\" fill=\"clear\">\n <ion-icon slot=\"icon-only\" name=\"menu\"></ion-icon>\n </ion-button>\n </ion-menu-toggle>\n </ion-buttons>\n\n <ion-buttons slot=\"end\">\n <!-- change locale button -->\n @if (currentLocaleCode; as code) {\n <ion-button color=\"secondary\" fill=\"solid\" [matMenuTriggerFor]=\"localeMenu\">\n <ion-label class=\"ion-text-uppercase\"> {{ code }}</ion-label>\n <mat-icon slot=\"end\">arrow_drop_down</mat-icon>\n </ion-button>\n }\n </ion-buttons>\n </ion-toolbar>\n </div>\n\n <!-- Install (and upgrade) card -->\n <app-install-upgrade-card [isLogin]=\"isLogin\" [showInstallButton]=\"true\"></app-install-upgrade-card>\n\n @if (!(loading$ | push)) {\n <!-- Welcome card -->\n <ion-card class=\"main welcome ion-padding ion-text-center ion-align-self-center\" @fadeInAnimation>\n <ion-card-header>\n <ion-card-title class=\"ion-text-center\">\n <span *ngIf=\"isWeb\" [innerHTML]=\"'HOME.WELCOME_WEB' | translate: { appName: appName }\"></span>\n <span *ngIf=\"!isWeb\" [innerHTML]=\"'HOME.WELCOME_APP' | translate: { appName: appName }\"></span>\n </ion-card-title>\n <ion-card-subtitle [innerHTML]=\"description\"></ion-card-subtitle>\n </ion-card-header>\n <ion-card-content class=\"ion-no-padding\">\n <ion-text color=\"primary\">\n <img *ngIf=\"logo\" [attr.src]=\"logo\" alt=\"Logo\" />\n </ion-text>\n <!-- register help text -->\n <ion-text *ngIf=\"!isLogin && canRegister\">\n <br />\n <span translate>HOME.REGISTER_HELP</span>\n </ion-text>\n <div class=\"ion-padding-top\">\n <!-- If NOT login -->\n <ng-container *ngIf=\"!isLogin; else loginButtons\">\n <ion-button *ngIf=\"canRegister\" expand=\"block\" color=\"tertiary\" (click)=\"register()\">\n <span translate>HOME.BTN_REGISTER</span>\n </ion-button>\n <ion-button expand=\"block\" color=\"light\" [routerLink]=\"['/']\" (click)=\"login()\">\n <span translate>AUTH.BTN_LOGIN</span>\n </ion-button>\n </ng-container>\n\n <!-- If user login -->\n <ng-template #loginButtons>\n <!-- Feature buttons -->\n <ng-container *rxIf=\"$filteredButtons; let buttons\">\n <ng-container *ngFor=\"let item of buttons\">\n <ion-button\n *ngIf=\"item.path\"\n expand=\"block\"\n color=\"tertiary\"\n [class]=\"item.cssClass\"\n [routerLink]=\"item.path\"\n routerDirection=\"root\"\n >\n <ion-icon slot=\"start\" class=\"ion-float-start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" class=\"ion-float-start\" *ngIf=\"item.matIcon\">{{ item.matIcon }}</mat-icon>\n <ion-text>{{ 'HOME.BTN_DATA_ENTRY' | translate: { name: (item.title | translate) } }}</ion-text>\n </ion-button>\n\n <!-- divider -->\n <div *ngIf=\"!item.path && !item.action\" [class]=\"item.cssClass\">\n <ion-label translate>{{ item.title }} </ion-label>\n </div>\n </ng-container>\n\n <!--<p *ngIf=\"buttons.length\" class=\"visible-mobile\"> </p>-->\n </ng-container>\n\n <ion-button *ngIf=\"showAccountButton\" expand=\"block\" color=\"secondary\" [routerLink]=\"['/account']\">\n <ion-icon slot=\"start\" class=\"ion-float-start\" name=\"person-circle\"></ion-icon>\n <ion-text translate>HOME.BTN_MY_ACCOUNT</ion-text>\n </ion-button>\n\n <p hidden-xs hidden-sm hidden-mobile>\n <ion-text\n [innerHTML]=\"'HOME.NOT_THIS_ACCOUNT_QUESTION' | translate: { displayName: accountName }\"\n ></ion-text>\n <br />\n <ion-text>\n <a href=\"#\" (click)=\"logout($event)\">\n <span translate>HOME.BTN_DISCONNECT</span>\n </a>\n </ion-text>\n </p>\n </ng-template>\n </div>\n </ion-card-content>\n </ion-card>\n\n <!-- Page history -->\n @if (isLogin && (pageHistory$ | push); as pageHistory) {\n <ion-grid class=\"history-container ion-align-self-center\">\n <ion-row>\n @for (page of pageHistory; track page.path) {\n <ion-col size=\"12\" size-xl=\"\" class=\"ion-text-center\">\n <ion-card class=\"ion-align-self-start ion-text-start\" @fadeInAnimation>\n <ion-card-header class=\"ion-no-padding\">\n <!-- top bar -->\n <ion-card-subtitle>\n <button\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"removePageHistory(page.path)\"\n mat-icon-button\n class=\"ion-float-start ion-no-margin close-button\"\n >\n <mat-icon>close</mat-icon>\n </button>\n <ion-label [innerHTML]=\"page.subtitle | translate\"></ion-label>\n <ion-text class=\"ion-float-end\" [title]=\"page.time | dateFormat: { time: true }\">\n <small>\n <ion-icon name=\"time-outline\"></ion-icon>\n {{ page.time | dateFromNow }}\n </small>\n \n </ion-text>\n </ion-card-subtitle>\n\n <!-- main page -->\n <ion-card-title class=\"ion-no-margin ion-no-padding\">\n <ion-item\n detail=\"true\"\n tappable\n class=\"text-1x\"\n [routerLink]=\"page.path\"\n routerDirection=\"root\"\n lines=\"none\"\n >\n <!-- page icon-->\n <ion-icon *ngIf=\"page.icon\" slot=\"start\" [name]=\"page.icon\"></ion-icon>\n <mat-icon *ngIf=\"page.matIcon\" slot=\"start\">{{ page.matIcon }}</mat-icon>\n\n <ion-label color=\"primary\" [innerHTML]=\"page.title\"></ion-label>\n </ion-item>\n </ion-card-title>\n </ion-card-header>\n\n <!-- children pages -->\n @if (page.children | isNotEmptyArray) {\n <ion-card-content class=\"ion-no-padding ion-padding-start\">\n <ion-list class=\"ion-no-padding\">\n @for (childPage of page.children; track childPage.path) {\n <ion-item\n detail=\"true\"\n tappable\n class=\"text-1x\"\n [routerLink]=\"childPage.path\"\n routerDirection=\"root\"\n >\n <!-- page icon-->\n <ion-icon *ngIf=\"childPage.icon\" slot=\"start\" color=\"dark\" [name]=\"childPage.icon\"></ion-icon>\n <mat-icon *ngIf=\"childPage.matIcon\" slot=\"start\" color=\"dark\">\n {{ childPage.matIcon }}\n </mat-icon>\n\n <ion-label color=\"dark\" [innerHTML]=\"childPage.title\"></ion-label>\n </ion-item>\n }\n </ion-list>\n </ion-card-content>\n }\n </ion-card>\n </ion-col>\n }\n </ion-row>\n </ion-grid>\n } @else if (showPartnerBanner) {\n <!-- Display partners logos -->\n <div class=\"bottom-banner ion-text-center ion-padding\" @fadeInAnimation>\n @for (item of $partners | async; track $index) {\n <a href=\"{{ item.siteUrl }}\">\n <img class=\"logo\" src=\"{{ item.logo }}\" alt=\"{{ item.label }}\" [title]=\"item.label\" />\n </a>\n }\n </div>\n }\n }\n</ion-content>\n", styles: ["h1,h2,h3,h4,h5{white-space:normal}.center,ion-content ion-card.welcome img{text-align:center;display:inline-block}ion-content{--background: transparent;background-size:cover;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-color:var(--ion-background-color);display:inline-block;padding:15px}ion-content .loading-page{display:block;height:100%;width:100%;position:absolute;background-color:var(--ion-background-color);z-index:5;transition:background .5s linear;-webkit-transition:background 1.5s linear}ion-content .loading-page.hidden{background-color:rgba(var(--ion-color-primary),0)}ion-content ion-card{z-index:9}ion-content ion-card ion-card-header{display:block}ion-content ion-card ion-card-header ion-card-subtitle,ion-content ion-card ion-card-header ion-card-title{display:block;width:100%}ion-content ion-card.main{min-width:240px;max-width:400px;margin-left:auto;margin-right:auto}ion-content ion-card.welcome{background-color:var(--ion-card-background-color)}ion-content ion-card.welcome button{margin-top:16px}ion-content ion-card.welcome img{max-width:250px}ion-content .history-container{margin-left:auto;margin-right:auto}ion-content .history-container ion-card{display:inline-block;box-sizing:border-box;z-index:8;min-width:240px;max-width:400px;width:100%;margin-left:auto;margin-right:auto;background-color:var(--ion-card-background-color)}ion-content .history-container ion-card ion-card-header ion-card-subtitle{height:40px}ion-content .history-container ion-card ion-card-header ion-card-subtitle button[float-start]{--mdc-icon-button-state-layer-size: 40px;padding:8px;z-index:99;margin:0}ion-content .history-container ion-card ion-card-header ion-card-subtitle ion-label{line-height:40px}ion-content .history-container ion-card ion-card-header ion-card-subtitle ion-label[float-end]{padding-right:16px;font-weight:400}ion-content .history-container ion-card ion-card-header ion-card-title ion-item{width:100%;--ion-item-background: $transparent;--ion-item-icon-color: var(--ion-color-primary);--ion-item-text-color: var(--ion-color-primary)}ion-content .history-container ion-card ion-card-header ion-card-title ion-item ion-icon[slot=start],ion-content .history-container ion-card ion-card-header ion-card-title ion-item mat-icon[slot=start]{margin-right:unset;margin-inline-end:16px!important;color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor}ion-content .history-container ion-card ion-card-header ion-card-title ion-item ion-text,ion-content .history-container ion-card ion-card-header ion-card-title ion-item ion-label{color:var(--ion-item-text-color)!important;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%}ion-content .history-container ion-card ion-card-content ion-list{--ion-item-background: var(--ion-color-transparent)}ion-content .history-container ion-card ion-card-content ion-list ion-item{--ion-item-icon-color: var(--ion-color-dark);--ion-item-text-color: var(--ion-color-dark)}ion-content .history-container ion-card ion-card-content ion-list ion-item ion-icon[slot=start],ion-content .history-container ion-card ion-card-content ion-list ion-item mat-icon[slot=start]{color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor;margin-right:unset;margin-inline-end:16px!important}ion-content .history-container ion-card ion-card-content ion-list ion-item ion-text,ion-content .history-container ion-card ion-card-content ion-list ion-item ion-label{color:var(--ion-item-text-color)!important}ion-content .bottom-banner{background-color:var(--ion-card-background-color);min-width:240px;z-index:0;position:absolute;left:16px;right:16px;bottom:16px}ion-content .bottom-banner img.logo{max-height:50px;margin-left:8px}ion-content ion-text{text-align:center}@media screen and (max-width: 575px){ion-content ion-card{min-width:160px;width:calc(100% - 20px);max-width:100%;margin-left:10px;margin-right:10px}ion-content ion-card h1{margin-top:0;font-size:20px}ion-content ion-card ion-card-content ion-button{margin-top:8px}ion-content .bottom-banner{display:block;position:unset}ion-content .bottom-banner img.logo{max-height:30px}}@media screen and (max-width: 767px) and (min-width: 576px){ion-content{min-height:555px}ion-content .bottom-banner img.logo{max-height:40px}}@media screen and (min-width: 768px){ion-content{min-height:calc(100% - 100px)}}.content-credits{position:absolute;right:5px;bottom:5px}.content-credits ion-text{padding-inline-start:4px;padding-inline-end:4px;font-size:.8rem;background-color:var(--ion-background-color, white);color:var(--ion-text-color);opacity:.65}\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.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: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i2.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i2.IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i2.IonMenuToggle, selector: "ion-menu-toggle", inputs: ["autoHide", "menu"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i2.RouterLinkDelegate, selector: ":not(a):not(area)[routerLink]" }, { kind: "directive", type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i9.RxIf, selector: "[rxIf]", inputs: ["rxIf", "rxIfStrategy", "rxIfElse", "rxIfThen", "rxIfSuspense", "rxIfComplete", "rxIfError", "rxIfContextTrigger", "rxIfNextTrigger", "rxIfSuspenseTrigger", "rxIfErrorTrigger", "rxIfCompleteTrigger", "rxIfParent", "rxIfPatchZone", "rxIfRenderCallback"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i11.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i12.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i12.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i12.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i13.ToolbarComponent, selector: "app-toolbar", inputs: ["progressBarMode", "title", "color", "class", "backHref", "defaultBackHref", "hasValidate", "hasClose", "hasSearch", "canGoBack", "canShowMenu"], outputs: ["onValidate", "onClose", "onValidateAndClose", "onBackClick", "onSearch"] }, { kind: "directive", type: i14.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i15.AppInstallUpgradeCard, selector: "app-install-upgrade-card", inputs: ["isLogin", "showUpgradeWarning", "showOfflineWarning", "showInstallButton"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "pipe", type: i16.RxPush, name: "push" }, { kind: "pipe", type: i17.DateFormatPipe, name: "dateFormat" }, { kind: "pipe", type: i18.DateFromNowPipe, name: "dateFromNow" }, { kind: "pipe", type: i19.NotEmptyArrayPipe, name: "isNotEmptyArray" }], animations: [fadeInAnimation, slideUpDownAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
291
305
|
}
|
|
292
306
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HomePage, decorators: [{
|
|
293
307
|
type: Component,
|
|
294
|
-
args: [{ selector: 'app-page-home', changeDetection: ChangeDetectionStrategy.OnPush, animations: [fadeInAnimation, slideUpDownAnimation], template: "<app-toolbar [canGoBack]=\"false\" visible-xs visible-sm visible-mobile>\n <!-- change locale button -->\n <ion-button slot=\"end\" *ngIf=\"currentLocaleCode; let code\" [matMenuTriggerFor]=\"localeMenu\">\n <ion-label class=\"ion-text-uppercase\"> {{ code }}</ion-label>\n <mat-icon slot=\"end\">arrow_drop_down</mat-icon>\n </ion-button>\n</app-toolbar>\n\n<!-- change locale menu -->\n<mat-menu #localeMenu=\"matMenu\">\n <button *ngFor=\"let item of locales\" mat-menu-item (click)=\"changeLanguage(item.key)\">\n <ion-label>{{ item.value }}</ion-label>\n </button>\n</mat-menu>\n\n<ion-content [ngStyle]=\"contentStyle\" no-padding-xs>\n <span class=\"content-credits\">\n <ion-text>{{ contentCredits }}</ion-text>\n </span>\n\n <!-- loading spinner -->\n <div class=\"loading-page\" [class.cdk-visually-hidden]=\"!(loading$ | push)\">\n @if (showSpinner) {\n <div class=\"spinner\">\n <p [innerHTML]=\"'COMMON.LOADING_DOTS' | translate\"></p>\n <div class=\"sk-cube1 sk-cube\"></div>\n <div class=\"sk-cube2 sk-cube\"></div>\n <div class=\"sk-cube4 sk-cube\"></div>\n <div class=\"sk-cube3 sk-cube\"></div>\n </div>\n }\n </div>\n\n <!-- Desktop: translucent top toolbar -->\n <div hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar translucent>\n <ion-buttons slot=\"start\">\n <ion-menu-toggle>\n <ion-button color=\"light\" fill=\"clear\">\n <ion-icon slot=\"icon-only\" name=\"menu\"></ion-icon>\n </ion-button>\n </ion-menu-toggle>\n </ion-buttons>\n\n <ion-buttons slot=\"end\">\n <!-- change locale button -->\n @if (currentLocaleCode; as code) {\n <ion-button color=\"secondary\" fill=\"solid\" [matMenuTriggerFor]=\"localeMenu\">\n <ion-label class=\"ion-text-uppercase\"> {{ code }}</ion-label>\n <mat-icon slot=\"end\">arrow_drop_down</mat-icon>\n </ion-button>\n }\n </ion-buttons>\n </ion-toolbar>\n </div>\n\n <!-- Install (and upgrade) card -->\n <app-install-upgrade-card [isLogin]=\"isLogin\" [showInstallButton]=\"true\"></app-install-upgrade-card>\n\n @if (!(loading$ | push)) {\n <!-- Welcome card -->\n <ion-card class=\"main welcome ion-padding ion-text-center ion-align-self-center\" @fadeInAnimation>\n <ion-card-header>\n <ion-card-title class=\"ion-text-center\">\n <span *ngIf=\"isWeb\" [innerHTML]=\"'HOME.WELCOME_WEB' | translate: { appName: appName }\"></span>\n <span *ngIf=\"!isWeb\" [innerHTML]=\"'HOME.WELCOME_APP' | translate: { appName: appName }\"></span>\n </ion-card-title>\n <ion-card-subtitle [innerHTML]=\"description\"></ion-card-subtitle>\n </ion-card-header>\n <ion-card-content class=\"ion-no-padding\">\n <ion-text color=\"primary\">\n <img *ngIf=\"logo\" [attr.src]=\"logo\" alt=\"Logo\" />\n </ion-text>\n <!-- register help text -->\n <ion-text *ngIf=\"!isLogin && canRegister\">\n <br />\n <span translate>HOME.REGISTER_HELP</span>\n </ion-text>\n <div class=\"ion-padding-top\">\n <!-- If NOT login -->\n <ng-container *ngIf=\"!isLogin; else loginButtons\">\n <ion-button *ngIf=\"canRegister\" expand=\"block\" color=\"tertiary\" (click)=\"register()\">\n <span translate>HOME.BTN_REGISTER</span>\n </ion-button>\n <ion-button expand=\"block\" color=\"light\" [routerLink]=\"['/']\" (click)=\"login()\">\n <span translate>AUTH.BTN_LOGIN</span>\n </ion-button>\n </ng-container>\n\n <!-- If user login -->\n <ng-template #loginButtons>\n <!-- Feature buttons -->\n <ng-container *rxIf=\"$filteredButtons; let buttons\">\n <ng-container *ngFor=\"let item of buttons\">\n <ion-button\n *ngIf=\"item.path\"\n expand=\"block\"\n color=\"tertiary\"\n [class]=\"item.cssClass\"\n [routerLink]=\"item.path\"\n routerDirection=\"root\"\n >\n <ion-icon slot=\"start\" class=\"ion-float-start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" class=\"ion-float-start\" *ngIf=\"item.matIcon\">{{ item.matIcon }}</mat-icon>\n <ion-text>{{ 'HOME.BTN_DATA_ENTRY' | translate: { name: (item.title | translate) } }}</ion-text>\n </ion-button>\n\n <!-- divider -->\n <div *ngIf=\"!item.path && !item.action\" [class]=\"item.cssClass\">\n <ion-label translate>{{ item.title }} </ion-label>\n </div>\n </ng-container>\n\n <!--<p *ngIf=\"buttons.length\" class=\"visible-mobile\"> </p>-->\n </ng-container>\n\n <ion-button *ngIf=\"showAccountButton\" expand=\"block\" color=\"secondary\" [routerLink]=\"['/account']\">\n <ion-icon slot=\"start\" class=\"ion-float-start\" name=\"person-circle\"></ion-icon>\n <ion-text translate>HOME.BTN_MY_ACCOUNT</ion-text>\n </ion-button>\n\n <p hidden-xs hidden-sm hidden-mobile>\n <ion-text\n [innerHTML]=\"'HOME.NOT_THIS_ACCOUNT_QUESTION' | translate: { displayName: accountName }\"\n ></ion-text>\n <br />\n <ion-text>\n <a href=\"#\" (click)=\"logout($event)\">\n <span translate>HOME.BTN_DISCONNECT</span>\n </a>\n </ion-text>\n </p>\n </ng-template>\n </div>\n </ion-card-content>\n </ion-card>\n\n <!-- Page history -->\n @if (isLogin && (pageHistory$ | push); as pageHistory) {\n <ion-grid class=\"history-container ion-align-self-center\">\n <ion-row>\n @for (page of pageHistory; track page.path) {\n <ion-col size=\"12\" size-xl=\"\" class=\"ion-text-center\">\n <ion-card class=\"ion-align-self-start ion-text-start\" @fadeInAnimation>\n <ion-card-header class=\"ion-no-padding\">\n <!-- top bar -->\n <ion-card-subtitle>\n <button\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"removePageHistory(page.path)\"\n mat-icon-button\n class=\"ion-float-start ion-no-margin close-button\"\n >\n <mat-icon>close</mat-icon>\n </button>\n <ion-label [innerHTML]=\"page.subtitle | translate\"></ion-label>\n <ion-text class=\"ion-float-end\" [title]=\"page.time | dateFormat: { time: true }\">\n <small>\n <ion-icon name=\"time-outline\"></ion-icon>\n {{ page.time | dateFromNow }}\n </small>\n \n </ion-text>\n </ion-card-subtitle>\n\n <!-- main page -->\n <ion-card-title class=\"ion-no-margin ion-no-padding\">\n <ion-item\n detail=\"true\"\n tappable\n class=\"text-1x\"\n [routerLink]=\"page.path\"\n routerDirection=\"root\"\n lines=\"none\"\n >\n <!-- page icon-->\n <ion-icon *ngIf=\"page.icon\" slot=\"start\" [name]=\"page.icon\"></ion-icon>\n <mat-icon *ngIf=\"page.matIcon\" slot=\"start\">{{ page.matIcon }}</mat-icon>\n\n <ion-label color=\"primary\" [innerHTML]=\"page.title\"></ion-label>\n </ion-item>\n </ion-card-title>\n </ion-card-header>\n\n <!-- children pages -->\n @if (page.children | isNotEmptyArray) {\n <ion-card-content class=\"ion-no-padding ion-padding-start\">\n <ion-list class=\"ion-no-padding\">\n @for (childPage of page.children; track childPage.path) {\n <ion-item\n detail=\"true\"\n tappable\n class=\"text-1x\"\n [routerLink]=\"childPage.path\"\n routerDirection=\"root\"\n >\n <!-- page icon-->\n <ion-icon *ngIf=\"childPage.icon\" slot=\"start\" color=\"dark\" [name]=\"childPage.icon\"></ion-icon>\n <mat-icon *ngIf=\"childPage.matIcon\" slot=\"start\" color=\"dark\">\n {{ childPage.matIcon }}\n </mat-icon>\n\n <ion-label color=\"dark\" [innerHTML]=\"childPage.title\"></ion-label>\n </ion-item>\n }\n </ion-list>\n </ion-card-content>\n }\n </ion-card>\n </ion-col>\n }\n </ion-row>\n </ion-grid>\n } @else if (showPartnerBanner) {\n <!-- Display partners logos -->\n <div class=\"bottom-banner ion-text-center ion-padding\" @fadeInAnimation>\n @for (item of $partners | async; track $index) {\n <a href=\"{{ item.siteUrl }}\">\n <img class=\"logo\" src=\"{{ item.logo }}\" alt=\"{{ item.label }}\" [title]=\"item.label\" />\n </a>\n }\n </div>\n }\n }\n</ion-content>\n", styles: ["h1,h2,h3,h4,h5{white-space:normal}.center,ion-content ion-card.welcome img{text-align:center;display:inline-block}ion-content{--background: transparent;background-size:cover;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-color:var(--ion-background-color);display:inline-block;padding:15px}ion-content .loading-page{display:block;height:100%;width:100%;position:absolute;background-color:var(--ion-background-color);z-index:5;transition:background .5s linear;-webkit-transition:background 1.5s linear}ion-content .loading-page.hidden{background-color:rgba(var(--ion-color-primary),0)}ion-content ion-card{z-index:9}ion-content ion-card ion-card-header{display:block}ion-content ion-card ion-card-header ion-card-subtitle,ion-content ion-card ion-card-header ion-card-title{display:block;width:100%}ion-content ion-card.main{min-width:240px;max-width:400px;margin-left:auto;margin-right:auto}ion-content ion-card.welcome{background-color:#ffffffb3}ion-content ion-card.welcome button{margin-top:16px}ion-content ion-card.welcome img{max-width:250px}ion-content .history-container{margin-left:auto;margin-right:auto}ion-content .history-container ion-card{display:inline-block;box-sizing:border-box;z-index:8;min-width:240px;max-width:400px;width:100%;margin-left:auto;margin-right:auto;background-color:#ffffffb3}ion-content .history-container ion-card ion-card-header ion-card-subtitle{height:40px}ion-content .history-container ion-card ion-card-header ion-card-subtitle button[float-start]{--mdc-icon-button-state-layer-size: 40px;padding:8px;z-index:99;margin:0}ion-content .history-container ion-card ion-card-header ion-card-subtitle ion-label{line-height:40px}ion-content .history-container ion-card ion-card-header ion-card-subtitle ion-label[float-end]{padding-right:16px;font-weight:400}ion-content .history-container ion-card ion-card-header ion-card-title ion-item{width:100%;--ion-item-background: $transparent;--ion-item-icon-color: var(--ion-color-primary);--ion-item-text-color: var(--ion-color-primary)}ion-content .history-container ion-card ion-card-header ion-card-title ion-item ion-icon[slot=start],ion-content .history-container ion-card ion-card-header ion-card-title ion-item mat-icon[slot=start]{margin-right:unset;margin-inline-end:16px!important;color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor}ion-content .history-container ion-card ion-card-header ion-card-title ion-item ion-text,ion-content .history-container ion-card ion-card-header ion-card-title ion-item ion-label{color:var(--ion-item-text-color)!important;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%}ion-content .history-container ion-card ion-card-content ion-list{--ion-item-background: var(--ion-color-transparent)}ion-content .history-container ion-card ion-card-content ion-list ion-item{--ion-item-icon-color: var(--ion-color-dark);--ion-item-text-color: var(--ion-color-dark)}ion-content .history-container ion-card ion-card-content ion-list ion-item ion-icon[slot=start],ion-content .history-container ion-card ion-card-content ion-list ion-item mat-icon[slot=start]{color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor;margin-right:unset;margin-inline-end:16px!important}ion-content .history-container ion-card ion-card-content ion-list ion-item ion-text,ion-content .history-container ion-card ion-card-content ion-list ion-item ion-label{color:var(--ion-item-text-color)!important}ion-content .bottom-banner{background-color:#ffffffb3;min-width:240px;z-index:0;position:absolute;left:16px;right:16px;bottom:16px}ion-content .bottom-banner img.logo{max-height:50px;margin-left:8px}ion-content ion-text{text-align:center}@media screen and (max-width: 575px){ion-content ion-card{min-width:160px;width:calc(100% - 20px);max-width:100%;margin-left:10px;margin-right:10px}ion-content ion-card h1{margin-top:0;font-size:20px}ion-content ion-card ion-card-content ion-button{margin-top:8px}ion-content .bottom-banner{display:block;position:unset}ion-content .bottom-banner img.logo{max-height:30px}}@media screen and (max-width: 767px) and (min-width: 576px){ion-content{min-height:555px}ion-content .bottom-banner img.logo{max-height:40px}}@media screen and (min-width: 768px){ion-content{min-height:calc(100% - 100px)}}.content-credits{position:absolute;right:5px;bottom:5px}\n"] }]
|
|
308
|
+
args: [{ selector: 'app-page-home', changeDetection: ChangeDetectionStrategy.OnPush, animations: [fadeInAnimation, slideUpDownAnimation], template: "<app-toolbar [canGoBack]=\"false\" visible-xs visible-sm visible-mobile>\n <!-- change locale button -->\n <ion-button slot=\"end\" *ngIf=\"currentLocaleCode; let code\" [matMenuTriggerFor]=\"localeMenu\">\n <ion-label class=\"ion-text-uppercase\"> {{ code }}</ion-label>\n <mat-icon slot=\"end\">arrow_drop_down</mat-icon>\n </ion-button>\n</app-toolbar>\n\n<!-- change locale menu -->\n<mat-menu #localeMenu=\"matMenu\">\n <button *ngFor=\"let item of locales\" mat-menu-item (click)=\"changeLanguage(item.key)\">\n <ion-label>{{ item.value }}</ion-label>\n </button>\n</mat-menu>\n\n<ion-content [ngStyle]=\"contentStyle\" no-padding-xs>\n <span class=\"content-credits\">\n <ion-text>{{ contentCredits }}</ion-text>\n </span>\n\n <!-- loading spinner -->\n <div class=\"loading-page\" [class.cdk-visually-hidden]=\"!(loading$ | push)\">\n @if (showSpinner) {\n <div class=\"spinner\">\n <p [innerHTML]=\"'COMMON.LOADING_DOTS' | translate\"></p>\n <div class=\"sk-cube1 sk-cube\"></div>\n <div class=\"sk-cube2 sk-cube\"></div>\n <div class=\"sk-cube4 sk-cube\"></div>\n <div class=\"sk-cube3 sk-cube\"></div>\n </div>\n }\n </div>\n\n <!-- Desktop: translucent top toolbar -->\n <div hidden-xs hidden-sm hidden-mobile>\n <ion-toolbar translucent>\n <ion-buttons slot=\"start\">\n <ion-menu-toggle>\n <ion-button color=\"light\" fill=\"clear\">\n <ion-icon slot=\"icon-only\" name=\"menu\"></ion-icon>\n </ion-button>\n </ion-menu-toggle>\n </ion-buttons>\n\n <ion-buttons slot=\"end\">\n <!-- change locale button -->\n @if (currentLocaleCode; as code) {\n <ion-button color=\"secondary\" fill=\"solid\" [matMenuTriggerFor]=\"localeMenu\">\n <ion-label class=\"ion-text-uppercase\"> {{ code }}</ion-label>\n <mat-icon slot=\"end\">arrow_drop_down</mat-icon>\n </ion-button>\n }\n </ion-buttons>\n </ion-toolbar>\n </div>\n\n <!-- Install (and upgrade) card -->\n <app-install-upgrade-card [isLogin]=\"isLogin\" [showInstallButton]=\"true\"></app-install-upgrade-card>\n\n @if (!(loading$ | push)) {\n <!-- Welcome card -->\n <ion-card class=\"main welcome ion-padding ion-text-center ion-align-self-center\" @fadeInAnimation>\n <ion-card-header>\n <ion-card-title class=\"ion-text-center\">\n <span *ngIf=\"isWeb\" [innerHTML]=\"'HOME.WELCOME_WEB' | translate: { appName: appName }\"></span>\n <span *ngIf=\"!isWeb\" [innerHTML]=\"'HOME.WELCOME_APP' | translate: { appName: appName }\"></span>\n </ion-card-title>\n <ion-card-subtitle [innerHTML]=\"description\"></ion-card-subtitle>\n </ion-card-header>\n <ion-card-content class=\"ion-no-padding\">\n <ion-text color=\"primary\">\n <img *ngIf=\"logo\" [attr.src]=\"logo\" alt=\"Logo\" />\n </ion-text>\n <!-- register help text -->\n <ion-text *ngIf=\"!isLogin && canRegister\">\n <br />\n <span translate>HOME.REGISTER_HELP</span>\n </ion-text>\n <div class=\"ion-padding-top\">\n <!-- If NOT login -->\n <ng-container *ngIf=\"!isLogin; else loginButtons\">\n <ion-button *ngIf=\"canRegister\" expand=\"block\" color=\"tertiary\" (click)=\"register()\">\n <span translate>HOME.BTN_REGISTER</span>\n </ion-button>\n <ion-button expand=\"block\" color=\"light\" [routerLink]=\"['/']\" (click)=\"login()\">\n <span translate>AUTH.BTN_LOGIN</span>\n </ion-button>\n </ng-container>\n\n <!-- If user login -->\n <ng-template #loginButtons>\n <!-- Feature buttons -->\n <ng-container *rxIf=\"$filteredButtons; let buttons\">\n <ng-container *ngFor=\"let item of buttons\">\n <ion-button\n *ngIf=\"item.path\"\n expand=\"block\"\n color=\"tertiary\"\n [class]=\"item.cssClass\"\n [routerLink]=\"item.path\"\n routerDirection=\"root\"\n >\n <ion-icon slot=\"start\" class=\"ion-float-start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" class=\"ion-float-start\" *ngIf=\"item.matIcon\">{{ item.matIcon }}</mat-icon>\n <ion-text>{{ 'HOME.BTN_DATA_ENTRY' | translate: { name: (item.title | translate) } }}</ion-text>\n </ion-button>\n\n <!-- divider -->\n <div *ngIf=\"!item.path && !item.action\" [class]=\"item.cssClass\">\n <ion-label translate>{{ item.title }} </ion-label>\n </div>\n </ng-container>\n\n <!--<p *ngIf=\"buttons.length\" class=\"visible-mobile\"> </p>-->\n </ng-container>\n\n <ion-button *ngIf=\"showAccountButton\" expand=\"block\" color=\"secondary\" [routerLink]=\"['/account']\">\n <ion-icon slot=\"start\" class=\"ion-float-start\" name=\"person-circle\"></ion-icon>\n <ion-text translate>HOME.BTN_MY_ACCOUNT</ion-text>\n </ion-button>\n\n <p hidden-xs hidden-sm hidden-mobile>\n <ion-text\n [innerHTML]=\"'HOME.NOT_THIS_ACCOUNT_QUESTION' | translate: { displayName: accountName }\"\n ></ion-text>\n <br />\n <ion-text>\n <a href=\"#\" (click)=\"logout($event)\">\n <span translate>HOME.BTN_DISCONNECT</span>\n </a>\n </ion-text>\n </p>\n </ng-template>\n </div>\n </ion-card-content>\n </ion-card>\n\n <!-- Page history -->\n @if (isLogin && (pageHistory$ | push); as pageHistory) {\n <ion-grid class=\"history-container ion-align-self-center\">\n <ion-row>\n @for (page of pageHistory; track page.path) {\n <ion-col size=\"12\" size-xl=\"\" class=\"ion-text-center\">\n <ion-card class=\"ion-align-self-start ion-text-start\" @fadeInAnimation>\n <ion-card-header class=\"ion-no-padding\">\n <!-- top bar -->\n <ion-card-subtitle>\n <button\n type=\"button\"\n tabindex=\"-1\"\n (click)=\"removePageHistory(page.path)\"\n mat-icon-button\n class=\"ion-float-start ion-no-margin close-button\"\n >\n <mat-icon>close</mat-icon>\n </button>\n <ion-label [innerHTML]=\"page.subtitle | translate\"></ion-label>\n <ion-text class=\"ion-float-end\" [title]=\"page.time | dateFormat: { time: true }\">\n <small>\n <ion-icon name=\"time-outline\"></ion-icon>\n {{ page.time | dateFromNow }}\n </small>\n \n </ion-text>\n </ion-card-subtitle>\n\n <!-- main page -->\n <ion-card-title class=\"ion-no-margin ion-no-padding\">\n <ion-item\n detail=\"true\"\n tappable\n class=\"text-1x\"\n [routerLink]=\"page.path\"\n routerDirection=\"root\"\n lines=\"none\"\n >\n <!-- page icon-->\n <ion-icon *ngIf=\"page.icon\" slot=\"start\" [name]=\"page.icon\"></ion-icon>\n <mat-icon *ngIf=\"page.matIcon\" slot=\"start\">{{ page.matIcon }}</mat-icon>\n\n <ion-label color=\"primary\" [innerHTML]=\"page.title\"></ion-label>\n </ion-item>\n </ion-card-title>\n </ion-card-header>\n\n <!-- children pages -->\n @if (page.children | isNotEmptyArray) {\n <ion-card-content class=\"ion-no-padding ion-padding-start\">\n <ion-list class=\"ion-no-padding\">\n @for (childPage of page.children; track childPage.path) {\n <ion-item\n detail=\"true\"\n tappable\n class=\"text-1x\"\n [routerLink]=\"childPage.path\"\n routerDirection=\"root\"\n >\n <!-- page icon-->\n <ion-icon *ngIf=\"childPage.icon\" slot=\"start\" color=\"dark\" [name]=\"childPage.icon\"></ion-icon>\n <mat-icon *ngIf=\"childPage.matIcon\" slot=\"start\" color=\"dark\">\n {{ childPage.matIcon }}\n </mat-icon>\n\n <ion-label color=\"dark\" [innerHTML]=\"childPage.title\"></ion-label>\n </ion-item>\n }\n </ion-list>\n </ion-card-content>\n }\n </ion-card>\n </ion-col>\n }\n </ion-row>\n </ion-grid>\n } @else if (showPartnerBanner) {\n <!-- Display partners logos -->\n <div class=\"bottom-banner ion-text-center ion-padding\" @fadeInAnimation>\n @for (item of $partners | async; track $index) {\n <a href=\"{{ item.siteUrl }}\">\n <img class=\"logo\" src=\"{{ item.logo }}\" alt=\"{{ item.label }}\" [title]=\"item.label\" />\n </a>\n }\n </div>\n }\n }\n</ion-content>\n", styles: ["h1,h2,h3,h4,h5{white-space:normal}.center,ion-content ion-card.welcome img{text-align:center;display:inline-block}ion-content{--background: transparent;background-size:cover;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-color:var(--ion-background-color);display:inline-block;padding:15px}ion-content .loading-page{display:block;height:100%;width:100%;position:absolute;background-color:var(--ion-background-color);z-index:5;transition:background .5s linear;-webkit-transition:background 1.5s linear}ion-content .loading-page.hidden{background-color:rgba(var(--ion-color-primary),0)}ion-content ion-card{z-index:9}ion-content ion-card ion-card-header{display:block}ion-content ion-card ion-card-header ion-card-subtitle,ion-content ion-card ion-card-header ion-card-title{display:block;width:100%}ion-content ion-card.main{min-width:240px;max-width:400px;margin-left:auto;margin-right:auto}ion-content ion-card.welcome{background-color:var(--ion-card-background-color)}ion-content ion-card.welcome button{margin-top:16px}ion-content ion-card.welcome img{max-width:250px}ion-content .history-container{margin-left:auto;margin-right:auto}ion-content .history-container ion-card{display:inline-block;box-sizing:border-box;z-index:8;min-width:240px;max-width:400px;width:100%;margin-left:auto;margin-right:auto;background-color:var(--ion-card-background-color)}ion-content .history-container ion-card ion-card-header ion-card-subtitle{height:40px}ion-content .history-container ion-card ion-card-header ion-card-subtitle button[float-start]{--mdc-icon-button-state-layer-size: 40px;padding:8px;z-index:99;margin:0}ion-content .history-container ion-card ion-card-header ion-card-subtitle ion-label{line-height:40px}ion-content .history-container ion-card ion-card-header ion-card-subtitle ion-label[float-end]{padding-right:16px;font-weight:400}ion-content .history-container ion-card ion-card-header ion-card-title ion-item{width:100%;--ion-item-background: $transparent;--ion-item-icon-color: var(--ion-color-primary);--ion-item-text-color: var(--ion-color-primary)}ion-content .history-container ion-card ion-card-header ion-card-title ion-item ion-icon[slot=start],ion-content .history-container ion-card ion-card-header ion-card-title ion-item mat-icon[slot=start]{margin-right:unset;margin-inline-end:16px!important;color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor}ion-content .history-container ion-card ion-card-header ion-card-title ion-item ion-text,ion-content .history-container ion-card ion-card-header ion-card-title ion-item ion-label{color:var(--ion-item-text-color)!important;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%}ion-content .history-container ion-card ion-card-content ion-list{--ion-item-background: var(--ion-color-transparent)}ion-content .history-container ion-card ion-card-content ion-list ion-item{--ion-item-icon-color: var(--ion-color-dark);--ion-item-text-color: var(--ion-color-dark)}ion-content .history-container ion-card ion-card-content ion-list ion-item ion-icon[slot=start],ion-content .history-container ion-card ion-card-content ion-list ion-item mat-icon[slot=start]{color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor;margin-right:unset;margin-inline-end:16px!important}ion-content .history-container ion-card ion-card-content ion-list ion-item ion-text,ion-content .history-container ion-card ion-card-content ion-list ion-item ion-label{color:var(--ion-item-text-color)!important}ion-content .bottom-banner{background-color:var(--ion-card-background-color);min-width:240px;z-index:0;position:absolute;left:16px;right:16px;bottom:16px}ion-content .bottom-banner img.logo{max-height:50px;margin-left:8px}ion-content ion-text{text-align:center}@media screen and (max-width: 575px){ion-content ion-card{min-width:160px;width:calc(100% - 20px);max-width:100%;margin-left:10px;margin-right:10px}ion-content ion-card h1{margin-top:0;font-size:20px}ion-content ion-card ion-card-content ion-button{margin-top:8px}ion-content .bottom-banner{display:block;position:unset}ion-content .bottom-banner img.logo{max-height:30px}}@media screen and (max-width: 767px) and (min-width: 576px){ion-content{min-height:555px}ion-content .bottom-banner img.logo{max-height:40px}}@media screen and (min-width: 768px){ion-content{min-height:calc(100% - 100px)}}.content-credits{position:absolute;right:5px;bottom:5px}.content-credits ion-text{padding-inline-start:4px;padding-inline-end:4px;font-size:.8rem;background-color:var(--ion-background-color, white);color:var(--ion-text-color);opacity:.65}\n"] }]
|
|
295
309
|
}], ctorParameters: () => [{ type: i1.AccountService }, { type: i2.ModalController }, { type: i3.TranslateService }, { type: i2.ToastController }, { type: i4.ConfigService }, { type: i5.PlatformService }, { type: i0.ChangeDetectorRef }, { type: i6.NetworkService }, { type: i7.LocalSettingsService }, { type: i20.Environment, decorators: [{
|
|
296
310
|
type: Inject,
|
|
297
311
|
args: [ENVIRONMENT]
|
|
@@ -304,4 +318,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
304
318
|
type: Inject,
|
|
305
319
|
args: [APP_HOME_BUTTONS]
|
|
306
320
|
}] }] });
|
|
307
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9ob21lL2hvbWUudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvaG9tZS9ob21lLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBYSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkksT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXJELE9BQU8sRUFBVyxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUczRSxPQUFPLEVBQUUsV0FBVyxFQUErQixNQUFNLGtDQUFrQyxDQUFDO0FBSzVGLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEVBQWEsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUQsT0FBTyxFQUFvQixNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUUsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUU1QyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFlLEVBQUUsRUFBRTtJQUNoRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUQsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDekIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLENBQWMsWUFBWSxDQUFDLENBQUM7QUFlOUUsTUFBTSxPQUFPLFFBQVMsU0FBUSxPQUFzQjtJQTJEeEM7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDRDtJQUNBO0lBQ3dCO0lBQ0g7SUFDaUI7SUFyRTlCLE1BQU0sQ0FBVTtJQUN6QixhQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUNuQyxPQUFPLENBQWdCO0lBRXJCLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTVDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDdkIsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUNqQixPQUFPLENBQVU7SUFDakIsU0FBUyxHQUFHLElBQUksZUFBZSxDQUFlLElBQUksQ0FBQyxDQUFDO0lBQ3BELElBQUksQ0FBUztJQUNiLFdBQVcsQ0FBUztJQUNwQixPQUFPLENBQVM7SUFDaEIsS0FBSyxDQUFVO0lBQ2YsV0FBVyxDQUFVO0lBQ3JCLFlBQVksQ0FBTTtJQUNsQixjQUFjLENBQVM7SUFFdkIsT0FBTyxDQUFVO0lBQ2pCLGdCQUFnQixHQUFHLElBQUksZUFBZSxDQUFjLFNBQVMsQ0FBQyxDQUFDO0lBQ3RELGlCQUFpQixDQUFVO0lBRXBDLElBQUksV0FBVyxDQUFDLEtBQTZCO1FBQzNDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLEtBQWM7UUFDeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsS0FBYztRQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLGlCQUFpQixDQUFDLEtBQWM7UUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzSSxDQUFDO0lBRUQsWUFDVSxjQUE4QixFQUM5QixTQUEwQixFQUMxQixTQUEyQixFQUMzQixlQUFnQyxFQUNoQyxhQUE0QixFQUM1QixRQUF5QixFQUN6QixFQUFxQixFQUN0QixPQUF1QixFQUN2QixRQUE4QixFQUNOLFdBQXdCLEVBQzNCLE9BQXVCLEVBQ04sT0FBb0I7UUFFakUsS0FBSyxFQUFFLENBQUM7UUFiQSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFDMUIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0Isb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQ3RCLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3ZCLGFBQVEsR0FBUixRQUFRLENBQXNCO1FBQ04sZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDM0IsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDTixZQUFPLEdBQVAsT0FBTyxDQUFhO1FBR2pFLElBQUksQ0FBQyxHQUFHLENBQXlCO1lBQy9CLE9BQU8sRUFBRSxJQUFJO1lBQ2IsaUJBQWlCLEVBQUUsS0FBSztZQUN4QixXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU87U0FDcEMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7UUFDdEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUs7UUFDVCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQ3hDLFNBQVMsRUFBRSxZQUFZO1NBQ3hCLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUTtRQUNaLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDeEMsU0FBUyxFQUFFLGFBQWE7WUFDeEIsZUFBZSxFQUFFLEtBQUs7U0FDdkIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBVTtRQUNyQixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFbkMsMEVBQTBFO1FBQzFFLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQWM7UUFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDeEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFhLEVBQUUsSUFBMEI7UUFDbkQsT0FBTyxJQUFJLEVBQUUsSUFBSSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXBCLElBQUksQ0FBQyxPQUFPO2FBQ1QsU0FBUyxDQUFDO1lBQ1QsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixlQUFlLEVBQUUsSUFBSTtZQUNyQixnQkFBZ0IsRUFBRSxLQUFLO1NBQ3hCLENBQUM7YUFDRCxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1QsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7WUFDNUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELDZCQUE2QjtJQUVuQixLQUFLLENBQUMsS0FBSztRQUNuQixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzdDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUVwQyw2QkFBNkI7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV0RixvQkFBb0I7UUFDcEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVyRywwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUTthQUNuQixJQUFJO1FBQ0gsa0RBQWtEO1FBQ2xELFlBQVksQ0FBQyxHQUFHLENBQUM7UUFDakIsOEJBQThCO1FBQzlCLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FDdkM7YUFDQSxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUNuRCxDQUFDO1FBRUYseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQjthQUNoQyxJQUFJO1FBQ0gsb0JBQW9CO1FBQ3BCLHlDQUF5QztRQUN6QyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLGNBQWMsS0FBSyxNQUFNLENBQUMsRUFDbEQsb0JBQW9CLEVBQUUsQ0FDdkI7YUFDQSxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUN2QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFUyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQXNCO1FBQzlDLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVTLGNBQWMsQ0FBQyxNQUFxQjtRQUM1QyxPQUFPLENBQUMsS0FBSyxDQUFDLCtCQUErQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBRXRCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsSUFBSSxTQUFTLENBQUM7UUFDNUUsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDO1FBQzlELElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUV4RixNQUFNLFFBQVEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUU3QyxtREFBbUQ7UUFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN2QixNQUFNLGdCQUFnQixHQUFHLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztnQkFDdEQsMEZBQTBGO2lCQUN6RixNQUFNLENBQ0wsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNOLFFBQVEsQ0FBQyxHQUFHLENBQUM7Z0JBQ2IsNENBQTRDO2dCQUM1QyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDN0MsQ0FBQztZQUVKLDhDQUE4QztZQUM5QyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUM1QixNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzdELElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLE9BQU8sT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMzRixJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLENBQUM7WUFFRCx1QkFBdUI7aUJBQ2xCLENBQUM7Z0JBQ0osTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxJQUFJLDBCQUEwQixDQUFDO2dCQUNySCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsWUFBWSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkYsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXBCLDRDQUE0QztRQUM1QyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRVMsaUJBQWlCLENBQUMsUUFBdUI7UUFDakQsSUFBSSxRQUFRLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM5QyxPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztRQUNoRCxDQUFDO0lBQ0gsQ0FBQztJQUVTLE9BQU8sQ0FBQyxPQUFnQjtRQUNoQyxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU8sQ0FBQyxPQUFPO1FBQzdCLG9EQUFvRDtRQUNwRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRVMsUUFBUTtRQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFUyxjQUFjLENBQUMsT0FBaUI7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxDQUFDLHFDQUFxQztRQUNoRSxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBRS9ELE9BQU8sR0FBRyxPQUFPLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7UUFDakQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQzthQUN6QyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNmLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3BELE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbEIsU0FBUyxFQUFFLFFBQVE7U0FDcEIsQ0FBQyxDQUNIO2FBQ0EsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDWixpQ0FBaUM7WUFDakMsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDeEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMxRCxJQUFJLEtBQUs7b0JBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsaURBQWlEO1lBQ3pGLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRVMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQVk7UUFDNUMsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFUyxZQUFZO1FBQ3BCLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekIsQ0FBQzt3R0FsU1UsUUFBUSw2U0FvRVQsV0FBVyxhQUNYLFdBQVcsYUFDQyxnQkFBZ0I7NEZBdEUzQixRQUFRLDRFQzdDckIseXBUQWtPQSx5dVREdkxjLENBQUMsZUFBZSxFQUFFLG9CQUFvQixDQUFDOzs0RkFFeEMsUUFBUTtrQkFQcEIsU0FBUzsrQkFDRSxlQUFlLG1CQUdSLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsQ0FBQyxlQUFlLEVBQUUsb0JBQW9CLENBQUM7OzBCQXNFaEQsTUFBTTsyQkFBQyxXQUFXOzswQkFDbEIsTUFBTTsyQkFBQyxXQUFXOzswQkFDbEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5qZWN0LCBJbmplY3Rpb25Ub2tlbiwgT25EZXN0cm95LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9kYWxDb250cm9sbGVyLCBUb2FzdENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBSZWdpc3Rlck1vZGFsIH0gZnJvbSAnLi4vcmVnaXN0ZXIvcmVnaXN0ZXIubW9kYWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFjY291bnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7IEFjY291bnQsIGFjY291bnRUb1N0cmluZyB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2FjY291bnQubW9kZWwnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2NvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBEZXBhcnRtZW50IH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvZGVwYXJ0bWVudC5tb2RlbCc7XG5pbXBvcnQgeyBBUFBfTE9DQUxFUywgTG9jYWxlQ29uZmlnLCBMb2NhbFNldHRpbmdzIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvc2V0dGluZ3MubW9kZWwnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFBsYXRmb3JtU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3BsYXRmb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9jYWxTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXBwQXV0aE1vZGFsIH0gZnJvbSAnLi4vYXV0aC9hdXRoLm1vZGFsJztcbmltcG9ydCB7IE5ldHdvcmtTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbmV0d29yay5zZXJ2aWNlJztcbmltcG9ydCB7IElNZW51SXRlbSwgTWVudUl0ZW1zIH0gZnJvbSAnLi4vbWVudS9tZW51Lm1vZGVsJztcbmltcG9ydCB7IFNob3dUb2FzdE9wdGlvbnMsIFRvYXN0cyB9IGZyb20gJy4uLy4uL3NoYXJlZC90b2FzdC90b2FzdHMnO1xuaW1wb3J0IHsgZmFkZUluQW5pbWF0aW9uLCBzbGlkZVVwRG93bkFuaW1hdGlvbiB9IGZyb20gJy4uLy4uL3NoYXJlZC9tYXRlcmlhbC9tYXRlcmlhbC5hbmltYXRpb25zJztcbmltcG9ydCB7IGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmssIHRvQm9vbGVhbiB9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQsIEVOVklST05NRU5UIH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IEhpc3RvcnlQYWdlUmVmZXJlbmNlIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvaGlzdG9yeS5tb2RlbCc7XG5pbXBvcnQgeyBDT1JFX0NPTkZJR19PUFRJT05TIH0gZnJvbSAnLi4vc2VydmljZXMvY29uZmlnL2NvcmUuY29uZmlnJztcbmltcG9ydCB7IFJ4U3RhdGUgfSBmcm9tICdAcngtYW5ndWxhci9zdGF0ZSc7XG5cbmV4cG9ydCBjb25zdCBnZXRSYW5kb21JbWFnZSA9IChmaWxlczogc3RyaW5nW10pID0+IHtcbiAgY29uc3QgaW1nSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBmaWxlcy5sZW5ndGgpO1xuICByZXR1cm4gZmlsZXNbaW1nSW5kZXhdO1xufTtcblxuZXhwb3J0IGNvbnN0IEFQUF9IT01FX0JVVFRPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48SU1lbnVJdGVtW10+KCdob21lQnV0dG9uJyk7XG5leHBvcnQgaW50ZXJmYWNlIEhvbWVQYWdlU3RhdGUge1xuICBsb2FkaW5nOiBib29sZWFuO1xuICBzaG93U3Bpbm5lcjogYm9vbGVhbjtcbiAgc2hvd1BhcnRuZXJCYW5uZXI6IGJvb2xlYW47XG4gIHBhZ2VIaXN0b3J5OiBIaXN0b3J5UGFnZVJlZmVyZW5jZVtdO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcGFnZS1ob21lJyxcbiAgdGVtcGxhdGVVcmw6ICdob21lLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ob21lLnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGFuaW1hdGlvbnM6IFtmYWRlSW5BbmltYXRpb24sIHNsaWRlVXBEb3duQW5pbWF0aW9uXSxcbn0pXG5leHBvcnQgY2xhc3MgSG9tZVBhZ2UgZXh0ZW5kcyBSeFN0YXRlPEhvbWVQYWdlU3RhdGU+IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVidWc6IGJvb2xlYW47XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBfY29uZmlnOiBDb25maWd1cmF0aW9uO1xuXG4gIHByb3RlY3RlZCBwYWdlSGlzdG9yeSQgPSB0aGlzLnNlbGVjdCgncGFnZUhpc3RvcnknKTtcbiAgcHJvdGVjdGVkIGxvYWRpbmckID0gdGhpcy5zZWxlY3QoJ2xvYWRpbmcnKTtcblxuICB3YWl0aW5nTmV0d29yayA9IGZhbHNlO1xuICBhY2NvdW50TmFtZSA9ICcnO1xuICBpc0xvZ2luOiBib29sZWFuO1xuICAkcGFydG5lcnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERlcGFydG1lbnRbXT4obnVsbCk7XG4gIGxvZ286IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgYXBwTmFtZTogc3RyaW5nO1xuICBpc1dlYjogYm9vbGVhbjtcbiAgY2FuUmVnaXN0ZXI6IGJvb2xlYW47XG4gIGNvbnRlbnRTdHlsZTogYW55O1xuICBjb250ZW50Q3JlZGl0czogc3RyaW5nO1xuXG4gIG9mZmxpbmU6IGJvb2xlYW47XG4gICRmaWx0ZXJlZEJ1dHRvbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElNZW51SXRlbVtdPih1bmRlZmluZWQpO1xuICByZWFkb25seSBzaG93QWNjb3VudEJ1dHRvbjogYm9vbGVhbjtcblxuICBzZXQgcGFnZUhpc3RvcnkodmFsdWU6IEhpc3RvcnlQYWdlUmVmZXJlbmNlW10pIHtcbiAgICB0aGlzLnNldCgncGFnZUhpc3RvcnknLCAoKSA9PiB2YWx1ZSk7XG4gIH1cblxuICBnZXQgcGFnZUhpc3RvcnkoKTogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCdwYWdlSGlzdG9yeScpO1xuICB9XG5cbiAgc2V0IGxvYWRpbmcodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldCgnbG9hZGluZycsICgpID0+IHZhbHVlKTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldCgnbG9hZGluZycpO1xuICB9XG5cbiAgc2V0IHNob3dTcGlubmVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXQoJ3Nob3dTcGlubmVyJywgKCkgPT4gdmFsdWUpO1xuICB9XG4gIGdldCBzaG93U3Bpbm5lcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoJ3Nob3dTcGlubmVyJyk7XG4gIH1cblxuICBzZXQgc2hvd1BhcnRuZXJCYW5uZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldCgnc2hvd1BhcnRuZXJCYW5uZXInLCAoKSA9PiB2YWx1ZSk7XG4gIH1cbiAgZ2V0IHNob3dQYXJ0bmVyQmFubmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldCgnc2hvd1BhcnRuZXJCYW5uZXInKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50TG9jYWxlQ29kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvYWRpbmcgPyAnJyA6ICh0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyB8fCB0aGlzLnRyYW5zbGF0ZS5kZWZhdWx0TGFuZyB8fCB0aGlzLmVudmlyb25tZW50LmRlZmF1bHRMb2NhbGUpPy5zdWJzdHJpbmcoMCwgMik7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFjY291bnRTZXJ2aWNlOiBBY2NvdW50U2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtU2VydmljZSxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwdWJsaWMgbmV0d29yazogTmV0d29ya1NlcnZpY2UsXG4gICAgcHVibGljIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZSxcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuICAgIEBJbmplY3QoQVBQX0xPQ0FMRVMpIHB1YmxpYyBsb2NhbGVzOiBMb2NhbGVDb25maWdbXSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9IT01FX0JVVFRPTlMpIHB1YmxpYyBidXR0b25zOiBJTWVudUl0ZW1bXVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc2V0KDxQYXJ0aWFsPEhvbWVQYWdlU3RhdGU+PntcbiAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICBzaG93UGFydG5lckJhbm5lcjogZmFsc2UsXG4gICAgICBzaG93U3Bpbm5lcjogIXRoaXMucGxhdGZvcm0uc3RhcnRlZCxcbiAgICB9KTtcblxuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gICAgdGhpcy5wbGF0Zm9ybS5yZWFkeSgpLnRoZW4oKCkgPT4gdGhpcy5zdGFydCgpKTtcbiAgICB0aGlzLnNob3dBY2NvdW50QnV0dG9uID0gdG9Cb29sZWFuKGVudmlyb25tZW50LmFjY291bnQ/LnNob3dBY2NvdW50QnV0dG9uLCB0cnVlKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgYXN5bmMgbG9naW4oKSB7XG4gICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBBcHBBdXRoTW9kYWwsXG4gICAgfSk7XG4gICAgcmV0dXJuIG1vZGFsLnByZXNlbnQoKTtcbiAgfVxuXG4gIGFzeW5jIHJlZ2lzdGVyKCkge1xuICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgdGhpcy5tb2RhbEN0cmwuY3JlYXRlKHtcbiAgICAgIGNvbXBvbmVudDogUmVnaXN0ZXJNb2RhbCxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogZmFsc2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIG1vZGFsLnByZXNlbnQoKTtcbiAgfVxuXG4gIGFzeW5jIGxvZ291dChldmVudDogYW55KSB7XG4gICAgYXdhaXQgdGhpcy5hY2NvdW50U2VydmljZS5sb2dvdXQoKTtcblxuICAgIC8vIElmIHdhcyBvZmZsaW5lLCB0cnkgdG8gcmVjb25uZWN0IChiZWNhdXNlIGNhbiBiZSBhIGZvcmNlZCBvZmZsaW5lIG1vZGUpXG4gICAgaWYgKHRoaXMub2ZmbGluZSkge1xuICAgICAgYXdhaXQgdGhpcy50cnlPbmxpbmUoKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VMYW5ndWFnZShsb2NhbGU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0dGluZ3MuYXBwbHkoeyBsb2NhbGUgfSkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0UGFnZVBhdGgoaW5kZXg6IG51bWJlciwgcGFnZTogSGlzdG9yeVBhZ2VSZWZlcmVuY2UpOiBzdHJpbmcge1xuICAgIHJldHVybiBwYWdlPy5wYXRoO1xuICB9XG5cbiAgdHJ5T25saW5lKCkge1xuICAgIHRoaXMud2FpdGluZ05ldHdvcmsgPSB0cnVlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG5cbiAgICB0aGlzLm5ldHdvcmtcbiAgICAgIC50cnlPbmxpbmUoe1xuICAgICAgICBzaG93TG9hZGluZ1RvYXN0OiBmYWxzZSxcbiAgICAgICAgc2hvd09ubGluZVRvYXN0OiB0cnVlLFxuICAgICAgICBzaG93T2ZmbGluZVRvYXN0OiBmYWxzZSxcbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMud2FpdGluZ05ldHdvcmsgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZCAgLS0gKi9cblxuICBwcm90ZWN0ZWQgYXN5bmMgc3RhcnQoKSB7XG4gICAgYXdhaXQgdGhpcy5hY2NvdW50U2VydmljZS5yZWFkeSgpO1xuXG4gICAgdGhpcy5pc0xvZ2luID0gdGhpcy5hY2NvdW50U2VydmljZS5pc0xvZ2luKCk7XG4gICAgaWYgKHRoaXMuaXNMb2dpbikge1xuICAgICAgdGhpcy5vbkxvZ2luKHRoaXMuYWNjb3VudFNlcnZpY2UuYWNjb3VudCk7XG4gICAgfVxuXG4gICAgdGhpcy5vZmZsaW5lID0gdGhpcy5uZXR3b3JrLm9mZmxpbmU7XG5cbiAgICAvLyBMaXN0ZW4gbG9naW4vbG9nb3V0IGV2ZW50c1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQodGhpcy5hY2NvdW50U2VydmljZS5vbkxvZ2luLnN1YnNjcmliZSgoYWNjb3VudCkgPT4gdGhpcy5vbkxvZ2luKGFjY291bnQpKSk7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZCh0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9nb3V0LnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uTG9nb3V0KCkpKTtcblxuICAgIC8vIExpc3RlbiBwb2QgY29uZmlnXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZCh0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnLnN1YnNjcmliZSgoY29uZmlnKSA9PiB0aGlzLm9uQ29uZmlnTG9hZGVkKGNvbmZpZykpKTtcblxuICAgIC8vIExpc3RlbiBzZXR0aW5ncyBjaGFuZ2VzXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuc2V0dGluZ3Mub25DaGFuZ2VcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gQWRkIGEgZGVsYXksIHRvIGF2b2lkIHRvIGFwcGx5IGNoYW5nZXMgdG8gb2Z0ZW5cbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMjUwKSxcbiAgICAgICAgICAvLyBTdGFydCB3aXRoIGN1cnJlbnQgc2V0dGluZ3NcbiAgICAgICAgICBzdGFydFdpdGgoYXdhaXQgdGhpcy5zZXR0aW5ncy5yZWFkeSgpKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4gdGhpcy5vblNldHRpbmdzQ2hhbmdlZChyZXMpKVxuICAgICk7XG5cbiAgICAvLyBMaXN0ZW4gbmV0d29yayBjaGFuZ2VzXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMubmV0d29yay5vbk5ldHdvcmtTdGF0dXNDaGFuZ2VzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIC8vZGVib3VuY2VUaW1lKDQ1MCksXG4gICAgICAgICAgLy90YXAoKCkgPT4gdGhpcy53YWl0aW5nTmV0d29yayA9IGZhbHNlKSxcbiAgICAgICAgICBtYXAoKGNvbm5lY3Rpb25UeXBlKSA9PiBjb25uZWN0aW9uVHlwZSA9PT0gJ25vbmUnKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgob2ZmbGluZSkgPT4ge1xuICAgICAgICAgIHRoaXMub2ZmbGluZSA9IG9mZmxpbmU7XG4gICAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHNob3dUb2FzdChvcHRzOiBTaG93VG9hc3RPcHRpb25zKSB7XG4gICAgYXdhaXQgVG9hc3RzLnNob3codGhpcy50b2FzdENvbnRyb2xsZXIsIHRoaXMudHJhbnNsYXRlLCBvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNvbmZpZ0xvYWRlZChjb25maWc6IENvbmZpZ3VyYXRpb24pIHtcbiAgICBjb25zb2xlLmRlYnVnKCdbaG9tZV0gQXBwbHlpbmcgY29uZmlndXJhdGlvbicsIGNvbmZpZyk7XG4gICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xuXG4gICAgdGhpcy5hcHBOYW1lID0gY29uZmlnLmxhYmVsIHx8IHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdEFwcE5hbWUgfHwgJ1NVTUFSaVMnO1xuICAgIHRoaXMubG9nbyA9IGNvbmZpZy5sYXJnZUxvZ28gfHwgY29uZmlnLnNtYWxsTG9nbyB8fCB1bmRlZmluZWQ7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGNvbmZpZy5uYW1lO1xuICAgIHRoaXMuaXNXZWIgPSB0aGlzLnBsYXRmb3JtLmlzV2ViKCk7XG4gICAgdGhpcy5jYW5SZWdpc3RlciA9IGNvbmZpZy5nZXRQcm9wZXJ0eUFzQm9vbGVhbihDT1JFX0NPTkZJR19PUFRJT05TLlJFR0lTVFJBVElPTl9FTkFCTEUpO1xuXG4gICAgY29uc3QgcGFydG5lcnMgPSAoY29uZmlnLnBhcnRuZXJzIHx8IFtdKS5maWx0ZXIoKHApID0+IHAgJiYgcC5sb2dvKTtcbiAgICB0aGlzLiRwYXJ0bmVycy5uZXh0KHBhcnRuZXJzKTtcbiAgICB0aGlzLnNob3dQYXJ0bmVyQmFubmVyID0gcGFydG5lcnMubGVuZ3RoID4gMDtcblxuICAgIC8vIElmIG5vdCBhbHJlYWR5IHNldCwgY29tcHV0ZSB0aGUgYmFja2dyb3VuZCBpbWFnZVxuICAgIGlmICghdGhpcy5jb250ZW50U3R5bGUpIHtcbiAgICAgIGNvbnN0IGJhY2tncm91bmRJbWFnZXMgPSAoY29uZmlnLmJhY2tncm91bmRJbWFnZXMgfHwgW10pXG4gICAgICAgIC8vIEZpbHRlciBvbiBub3QgbmlsLCBiZWNhdXNlIGNhbiBvY2N1ciBpZiBkZXRlY3RlZCBoYXMgbm90IGV4aXN0cyAoc2VlIGNvbmZpZy1zZXJ2aWNlLmpzKVxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChpbWcpID0+XG4gICAgICAgICAgICBpc05vdE5pbChpbWcpICYmXG4gICAgICAgICAgICAvLyBJZiBvZmZsaW5lLCBmaWx0ZXIgb24gbG9jYWwgZGF0YVVSTCBpbWFnZVxuICAgICAgICAgICAgKCF0aGlzLm9mZmxpbmUgfHwgIWltZy5zdGFydHNXaXRoKCdodHRwJykpXG4gICAgICAgICk7XG5cbiAgICAgIC8vIEJhY2tncm91bmQgaW1hZ2UgZm91bmQ6IHNlbGVjdCBvbmUgcmFuZG9tbHlcbiAgICAgIGlmIChiYWNrZ3JvdW5kSW1hZ2VzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBiZ0ltYWdlID0gZ2V0UmFuZG9tSW1hZ2UoYmFja2dyb3VuZEltYWdlcyk/LnNwbGl0KCd8Jyk7XG4gICAgICAgIHRoaXMuY29udGVudFN0eWxlID0gKGJnSW1hZ2U/LlswXSAmJiB7ICdiYWNrZ3JvdW5kLWltYWdlJzogYHVybCgke2JnSW1hZ2U/LlswXX0pYCB9KSB8fCB7fTtcbiAgICAgICAgdGhpcy5jb250ZW50Q3JlZGl0cyA9IGJnSW1hZ2U/LlsxXTtcbiAgICAgIH1cblxuICAgICAgLy8gVXNlIGJhY2tncm91bmQgY29sb3JcbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBwcmltYXJ5Q29sb3IgPSAoY29uZmlnLnByb3BlcnRpZXMgJiYgY29uZmlnLnByb3BlcnRpZXNbJ3N1bWFyaXMuY29sb3IucHJpbWFyeSddKSB8fCAndmFyKC0taW9uLWNvbG9yLXByaW1hcnkpJztcbiAgICAgICAgdGhpcy5jb250ZW50U3R5bGUgPSAocHJpbWFyeUNvbG9yICYmIHsgJ2JhY2tncm91bmQtY29sb3InOiBwcmltYXJ5Q29sb3IgfSkgfHwge307XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5yZWZyZXNoQnV0dG9ucygpO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG5cbiAgICAvLyBJZiBmaXJzdCBsb2FkLCBoaWRlIHRoZSBsb2FkaW5nIGluZGljYXRvclxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uU2V0dGluZ3NDaGFuZ2VkKHNldHRpbmdzOiBMb2NhbFNldHRpbmdzKSB7XG4gICAgaWYgKHNldHRpbmdzLnBhZ2VIaXN0b3J5ICE9PSB0aGlzLnBhZ2VIaXN0b3J5KSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbaG9tZV0gUGFnZSBoaXN0b3J5IGxvYWRlZCcpO1xuICAgICAgdGhpcy5wYWdlSGlzdG9yeSA9IHNldHRpbmdzLnBhZ2VIaXN0b3J5IHx8IFtdO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvbkxvZ2luKGFjY291bnQ6IEFjY291bnQpIHtcbiAgICBpZiAoIWFjY291bnQpIHJldHVybjsgLy8gU2tpcFxuICAgIC8vY29uc29sZS5kZWJ1ZygnW2hvbWVdIExvZ2dlZCBhY2NvdW50OiAnLCBhY2NvdW50KTtcbiAgICB0aGlzLmlzTG9naW4gPSB0cnVlO1xuICAgIHRoaXMuYWNjb3VudE5hbWUgPSBhY2NvdW50VG9TdHJpbmcoYWNjb3VudCk7XG4gICAgdGhpcy5yZWZyZXNoQnV0dG9ucyhhY2NvdW50KTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uTG9nb3V0KCkge1xuICAgIHRoaXMuaXNMb2dpbiA9IGZhbHNlO1xuICAgIHRoaXMuYWNjb3VudE5hbWUgPSAnJztcbiAgICB0aGlzLnBhZ2VIaXN0b3J5ID0gW107XG4gICAgdGhpcy5yZWZyZXNoQnV0dG9ucygpO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVmcmVzaEJ1dHRvbnMoYWNjb3VudD86IEFjY291bnQpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZykgcmV0dXJuOyAvLyBTa2lwICh3YWl0aW5nIGNvbmZpZyB0byBiZSBsb2FkZWQpXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbaG9tZV0gUmVmcmVzaGluZyBidXR0b25zLi4uJyk7XG5cbiAgICBhY2NvdW50ID0gYWNjb3VudCB8fCB0aGlzLmFjY291bnRTZXJ2aWNlLmFjY291bnQ7XG4gICAgY29uc3QgZmlsdGVyZWRCdXR0b25zID0gKHRoaXMuYnV0dG9ucyB8fCBbXSlcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICAgIE1lbnVJdGVtcy5jaGVja0lmVmlzaWJsZShpdGVtLCBhY2NvdW50LCB0aGlzLl9jb25maWcsIHtcbiAgICAgICAgICBpc0xvZ2luOiB0aGlzLmlzTG9naW4sXG4gICAgICAgICAgZGVidWc6IHRoaXMuX2RlYnVnLFxuICAgICAgICAgIGxvZ1ByZWZpeDogJ1tob21lXScsXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAubWFwKChpdGVtKSA9PiB7XG4gICAgICAgIC8vIFJlcGxhY2UgdGl0bGUgdXNpbmcgcHJvcGVydGllc1xuICAgICAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGl0ZW0udGl0bGVQcm9wZXJ0eSkgJiYgdGhpcy5fY29uZmlnKSB7XG4gICAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLl9jb25maWcucHJvcGVydGllc1tpdGVtLnRpdGxlUHJvcGVydHldO1xuICAgICAgICAgIGlmICh0aXRsZSkgcmV0dXJuIHsgLi4uaXRlbSwgdGl0bGUgfTsgLy8gQ3JlYXRlIGEgY29weSwgdG8ga2VlcCB0aGUgb3JpZ2luYWwgaXRlbS50aXRsZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLiRmaWx0ZXJlZEJ1dHRvbnMubmV4dChmaWx0ZXJlZEJ1dHRvbnMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlbW92ZVBhZ2VIaXN0b3J5KHBhdGg6IHN0cmluZykge1xuICAgIGF3YWl0IHRoaXMuc2V0dGluZ3MucmVtb3ZlUGFnZUhpc3RvcnkocGF0aCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjxhcHAtdG9vbGJhciBbY2FuR29CYWNrXT1cImZhbHNlXCIgdmlzaWJsZS14cyB2aXNpYmxlLXNtIHZpc2libGUtbW9iaWxlPlxuICA8IS0tIGNoYW5nZSBsb2NhbGUgYnV0dG9uIC0tPlxuICA8aW9uLWJ1dHRvbiBzbG90PVwiZW5kXCIgKm5nSWY9XCJjdXJyZW50TG9jYWxlQ29kZTsgbGV0IGNvZGVcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibG9jYWxlTWVudVwiPlxuICAgIDxpb24tbGFiZWwgY2xhc3M9XCJpb24tdGV4dC11cHBlcmNhc2VcIj4mbmJzcDt7eyBjb2RlIH19PC9pb24tbGFiZWw+XG4gICAgPG1hdC1pY29uIHNsb3Q9XCJlbmRcIj5hcnJvd19kcm9wX2Rvd248L21hdC1pY29uPlxuICA8L2lvbi1idXR0b24+XG48L2FwcC10b29sYmFyPlxuXG48IS0tIGNoYW5nZSBsb2NhbGUgbWVudSAtLT5cbjxtYXQtbWVudSAjbG9jYWxlTWVudT1cIm1hdE1lbnVcIj5cbiAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBsb2NhbGVzXCIgbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY2hhbmdlTGFuZ3VhZ2UoaXRlbS5rZXkpXCI+XG4gICAgPGlvbi1sYWJlbD57eyBpdGVtLnZhbHVlIH19PC9pb24tbGFiZWw+XG4gIDwvYnV0dG9uPlxuPC9tYXQtbWVudT5cblxuPGlvbi1jb250ZW50IFtuZ1N0eWxlXT1cImNvbnRlbnRTdHlsZVwiIG5vLXBhZGRpbmcteHM+XG4gIDxzcGFuIGNsYXNzPVwiY29udGVudC1jcmVkaXRzXCI+XG4gICAgPGlvbi10ZXh0Pnt7IGNvbnRlbnRDcmVkaXRzIH19PC9pb24tdGV4dD5cbiAgPC9zcGFuPlxuXG4gIDwhLS0gbG9hZGluZyBzcGlubmVyIC0tPlxuICA8ZGl2IGNsYXNzPVwibG9hZGluZy1wYWdlXCIgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwiIShsb2FkaW5nJCB8IHB1c2gpXCI+XG4gICAgQGlmIChzaG93U3Bpbm5lcikge1xuICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXJcIj5cbiAgICAgICAgPHAgW2lubmVySFRNTF09XCInQ09NTU9OLkxPQURJTkdfRE9UUycgfCB0cmFuc2xhdGVcIj48L3A+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzay1jdWJlMSBzay1jdWJlXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzay1jdWJlMiBzay1jdWJlXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzay1jdWJlNCBzay1jdWJlXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzay1jdWJlMyBzay1jdWJlXCI+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuXG4gIDwhLS0gRGVza3RvcDogdHJhbnNsdWNlbnQgdG9wIHRvb2xiYXIgLS0+XG4gIDxkaXYgaGlkZGVuLXhzIGhpZGRlbi1zbSBoaWRkZW4tbW9iaWxlPlxuICAgIDxpb24tdG9vbGJhciB0cmFuc2x1Y2VudD5cbiAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwic3RhcnRcIj5cbiAgICAgICAgPGlvbi1tZW51LXRvZ2dsZT5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBjb2xvcj1cImxpZ2h0XCIgZmlsbD1cImNsZWFyXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cImljb24tb25seVwiIG5hbWU9XCJtZW51XCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLW1lbnUtdG9nZ2xlPlxuICAgICAgPC9pb24tYnV0dG9ucz5cblxuICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJlbmRcIj5cbiAgICAgICAgPCEtLSBjaGFuZ2UgbG9jYWxlIGJ1dHRvbiAtLT5cbiAgICAgICAgQGlmIChjdXJyZW50TG9jYWxlQ29kZTsgYXMgY29kZSkge1xuICAgICAgICAgIDxpb24tYnV0dG9uIGNvbG9yPVwic2Vjb25kYXJ5XCIgZmlsbD1cInNvbGlkXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImxvY2FsZU1lbnVcIj5cbiAgICAgICAgICAgIDxpb24tbGFiZWwgY2xhc3M9XCJpb24tdGV4dC11cHBlcmNhc2VcIj4mbmJzcDt7eyBjb2RlIH19PC9pb24tbGFiZWw+XG4gICAgICAgICAgICA8bWF0LWljb24gc2xvdD1cImVuZFwiPmFycm93X2Ryb3BfZG93bjwvbWF0LWljb24+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICB9XG4gICAgICA8L2lvbi1idXR0b25zPlxuICAgIDwvaW9uLXRvb2xiYXI+XG4gIDwvZGl2PlxuXG4gIDwhLS0gSW5zdGFsbCAoYW5kIHVwZ3JhZGUpIGNhcmQgLS0+XG4gIDxhcHAtaW5zdGFsbC11cGdyYWRlLWNhcmQgW2lzTG9naW5dPVwiaXNMb2dpblwiIFtzaG93SW5zdGFsbEJ1dHRvbl09XCJ0cnVlXCI+PC9hcHAtaW5zdGFsbC11cGdyYWRlLWNhcmQ+XG5cbiAgQGlmICghKGxvYWRpbmckIHwgcHVzaCkpIHtcbiAgICA8IS0tIFdlbGNvbWUgY2FyZCAtLT5cbiAgICA8aW9uLWNhcmQgY2xhc3M9XCJtYWluIHdlbGNvbWUgaW9uLXBhZGRpbmcgaW9uLXRleHQtY2VudGVyIGlvbi1hbGlnbi1zZWxmLWNlbnRlclwiIEBmYWRlSW5BbmltYXRpb24+XG4gICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICA8aW9uLWNhcmQtdGl0bGUgY2xhc3M9XCJpb24tdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzV2ViXCIgW2lubmVySFRNTF09XCInSE9NRS5XRUxDT01FX1dFQicgfCB0cmFuc2xhdGU6IHsgYXBwTmFtZTogYXBwTmFtZSB9XCI+PC9zcGFuPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWlzV2ViXCIgW2lubmVySFRNTF09XCInSE9NRS5XRUxDT01FX0FQUCcgfCB0cmFuc2xhdGU6IHsgYXBwTmFtZTogYXBwTmFtZSB9XCI+PC9zcGFuPlxuICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGUgW2lubmVySFRNTF09XCJkZXNjcmlwdGlvblwiPjwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgIDxpb24tY2FyZC1jb250ZW50IGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgIDxpbWcgKm5nSWY9XCJsb2dvXCIgW2F0dHIuc3JjXT1cImxvZ29cIiBhbHQ9XCJMb2dvXCIgLz5cbiAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgPCEtLSByZWdpc3RlciBoZWxwIHRleHQgLS0+XG4gICAgICAgIDxpb24tdGV4dCAqbmdJZj1cIiFpc0xvZ2luICYmIGNhblJlZ2lzdGVyXCI+XG4gICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPkhPTUUuUkVHSVNURVJfSEVMUDwvc3Bhbj5cbiAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlvbi1wYWRkaW5nLXRvcFwiPlxuICAgICAgICAgIDwhLS0gSWYgTk9UIGxvZ2luIC0tPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2dpbjsgZWxzZSBsb2dpbkJ1dHRvbnNcIj5cbiAgICAgICAgICAgIDxpb24tYnV0dG9uICpuZ0lmPVwiY2FuUmVnaXN0ZXJcIiBleHBhbmQ9XCJibG9ja1wiIGNvbG9yPVwidGVydGlhcnlcIiAoY2xpY2spPVwicmVnaXN0ZXIoKVwiPlxuICAgICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+SE9NRS5CVE5fUkVHSVNURVI8L3NwYW4+XG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiBleHBhbmQ9XCJibG9ja1wiIGNvbG9yPVwibGlnaHRcIiBbcm91dGVyTGlua109XCJbJy8nXVwiIChjbGljayk9XCJsb2dpbigpXCI+XG4gICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5BVVRILkJUTl9MT0dJTjwvc3Bhbj5cbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwhLS0gSWYgdXNlciBsb2dpbiAtLT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2xvZ2luQnV0dG9ucz5cbiAgICAgICAgICAgIDwhLS0gRmVhdHVyZSBidXR0b25zIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqcnhJZj1cIiRmaWx0ZXJlZEJ1dHRvbnM7IGxldCBidXR0b25zXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0ucGF0aFwiXG4gICAgICAgICAgICAgICAgICBleHBhbmQ9XCJibG9ja1wiXG4gICAgICAgICAgICAgICAgICBjb2xvcj1cInRlcnRpYXJ5XCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJpdGVtLmNzc0NsYXNzXCJcbiAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIml0ZW0ucGF0aFwiXG4gICAgICAgICAgICAgICAgICByb3V0ZXJEaXJlY3Rpb249XCJyb290XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgY2xhc3M9XCJpb24tZmxvYXQtc3RhcnRcIiAqbmdJZj1cIml0ZW0uaWNvblwiIFtuYW1lXT1cIml0ZW0uaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gc2xvdD1cInN0YXJ0XCIgY2xhc3M9XCJpb24tZmxvYXQtc3RhcnRcIiAqbmdJZj1cIml0ZW0ubWF0SWNvblwiPnt7IGl0ZW0ubWF0SWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8aW9uLXRleHQ+e3sgJ0hPTUUuQlROX0RBVEFfRU5UUlknIHwgdHJhbnNsYXRlOiB7IG5hbWU6IChpdGVtLnRpdGxlIHwgdHJhbnNsYXRlKSB9IH19PC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8IS0tIGRpdmlkZXIgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFpdGVtLnBhdGggJiYgIWl0ZW0uYWN0aW9uXCIgW2NsYXNzXT1cIml0ZW0uY3NzQ2xhc3NcIj5cbiAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPnt7IGl0ZW0udGl0bGUgfX0mbmJzcDs8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPCEtLTxwICpuZ0lmPVwiYnV0dG9ucy5sZW5ndGhcIiBjbGFzcz1cInZpc2libGUtbW9iaWxlXCI+Jm5ic3A7PC9wPi0tPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxpb24tYnV0dG9uICpuZ0lmPVwic2hvd0FjY291bnRCdXR0b25cIiBleHBhbmQ9XCJibG9ja1wiIGNvbG9yPVwic2Vjb25kYXJ5XCIgW3JvdXRlckxpbmtdPVwiWycvYWNjb3VudCddXCI+XG4gICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBjbGFzcz1cImlvbi1mbG9hdC1zdGFydFwiIG5hbWU9XCJwZXJzb24tY2lyY2xlXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgPGlvbi10ZXh0IHRyYW5zbGF0ZT5IT01FLkJUTl9NWV9BQ0NPVU5UPC9pb24tdGV4dD5cbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgICAgICAgICAgPHAgaGlkZGVuLXhzIGhpZGRlbi1zbSBoaWRkZW4tbW9iaWxlPlxuICAgICAgICAgICAgICA8aW9uLXRleHRcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIidIT01FLk5PVF9USElTX0FDQ09VTlRfUVVFU1RJT04nIHwgdHJhbnNsYXRlOiB7IGRpc3BsYXlOYW1lOiBhY2NvdW50TmFtZSB9XCJcbiAgICAgICAgICAgICAgPjwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgICA8aW9uLXRleHQ+XG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiAoY2xpY2spPVwibG9nb3V0KCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5IT01FLkJUTl9ESVNDT05ORUNUPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICA8L2lvbi1jYXJkPlxuXG4gICAgPCEtLSBQYWdlIGhpc3RvcnkgLS0+XG4gICAgQGlmIChpc0xvZ2luICYmIChwYWdlSGlzdG9yeSQgfCBwdXNoKTsgYXMgcGFnZUhpc3RvcnkpIHtcbiAgICAgIDxpb24tZ3JpZCBjbGFzcz1cImhpc3RvcnktY29udGFpbmVyIGlvbi1hbGlnbi1zZWxmLWNlbnRlclwiPlxuICAgICAgICA8aW9uLXJvdz5cbiAgICAgICAgICBAZm9yIChwYWdlIG9mIHBhZ2VIaXN0b3J5OyB0cmFjayBwYWdlLnBhdGgpIHtcbiAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCIxMlwiIHNpemUteGw9XCJcIiBjbGFzcz1cImlvbi10ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQgY2xhc3M9XCJpb24tYWxpZ24tc2VsZi1zdGFydCBpb24tdGV4dC1zdGFydFwiIEBmYWRlSW5BbmltYXRpb24+XG4gICAgICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlciBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgICAgICAgICA8IS0tIHRvcCBiYXIgLS0+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlUGFnZUhpc3RvcnkocGFnZS5wYXRoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpb24tZmxvYXQtc3RhcnQgaW9uLW5vLW1hcmdpbiBjbG9zZS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgW2lubmVySFRNTF09XCJwYWdlLnN1YnRpdGxlIHwgdHJhbnNsYXRlXCI+PC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjbGFzcz1cImlvbi1mbG9hdC1lbmRcIiBbdGl0bGVdPVwicGFnZS50aW1lIHwgZGF0ZUZvcm1hdDogeyB0aW1lOiB0cnVlIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInRpbWUtb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDt7eyBwYWdlLnRpbWUgfCBkYXRlRnJvbU5vdyB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuXG4gICAgICAgICAgICAgICAgICA8IS0tIG1haW4gcGFnZSAtLT5cbiAgICAgICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZSBjbGFzcz1cImlvbi1uby1tYXJnaW4gaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgZGV0YWlsPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgdGFwcGFibGVcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtMXhcIlxuICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cInBhZ2UucGF0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgcm91dGVyRGlyZWN0aW9uPVwicm9vdFwiXG4gICAgICAgICAgICAgICAgICAgICAgbGluZXM9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gcGFnZSBpY29uLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uICpuZ0lmPVwicGFnZS5pY29uXCIgc2xvdD1cInN0YXJ0XCIgW25hbWVdPVwicGFnZS5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJwYWdlLm1hdEljb25cIiBzbG90PVwic3RhcnRcIj57eyBwYWdlLm1hdEljb24gfX08L21hdC1pY29uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIiBbaW5uZXJIVE1MXT1cInBhZ2UudGl0bGVcIj48L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG5cbiAgICAgICAgICAgICAgICA8IS0tIGNoaWxkcmVuIHBhZ2VzIC0tPlxuICAgICAgICAgICAgICAgIEBpZiAocGFnZS5jaGlsZHJlbiB8IGlzTm90RW1wdHlBcnJheSkge1xuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQgY2xhc3M9XCJpb24tbm8tcGFkZGluZyBpb24tcGFkZGluZy1zdGFydFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWxpc3QgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGNoaWxkUGFnZSBvZiBwYWdlLmNoaWxkcmVuOyB0cmFjayBjaGlsZFBhZ2UucGF0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBwYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtMXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJjaGlsZFBhZ2UucGF0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlckRpcmVjdGlvbj1cInJvb3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHBhZ2UgaWNvbi0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gKm5nSWY9XCJjaGlsZFBhZ2UuaWNvblwiIHNsb3Q9XCJzdGFydFwiIGNvbG9yPVwiZGFya1wiIFtuYW1lXT1cImNoaWxkUGFnZS5pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiY2hpbGRQYWdlLm1hdEljb25cIiBzbG90PVwic3RhcnRcIiBjb2xvcj1cImRhcmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjaGlsZFBhZ2UubWF0SWNvbiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJkYXJrXCIgW2lubmVySFRNTF09XCJjaGlsZFBhZ2UudGl0bGVcIj48L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2lvbi1saXN0PlxuICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvaW9uLXJvdz5cbiAgICAgIDwvaW9uLWdyaWQ+XG4gICAgfSBAZWxzZSBpZiAoc2hvd1BhcnRuZXJCYW5uZXIpIHtcbiAgICAgIDwhLS0gRGlzcGxheSBwYXJ0bmVycyBsb2dvcyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJib3R0b20tYmFubmVyIGlvbi10ZXh0LWNlbnRlciBpb24tcGFkZGluZ1wiIEBmYWRlSW5BbmltYXRpb24+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgJHBhcnRuZXJzIHwgYXN5bmM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgIDxhIGhyZWY9XCJ7eyBpdGVtLnNpdGVVcmwgfX1cIj5cbiAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJsb2dvXCIgc3JjPVwie3sgaXRlbS5sb2dvIH19XCIgYWx0PVwie3sgaXRlbS5sYWJlbCB9fVwiIFt0aXRsZV09XCJpdGVtLmxhYmVsXCIgLz5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgfVxuPC9pb24tY29udGVudD5cbiJdfQ==
|
|
321
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9ob21lL2hvbWUudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvaG9tZS9ob21lLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBYSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkksT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXJELE9BQU8sRUFBVyxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUczRSxPQUFPLEVBQUUsV0FBVyxFQUErQixNQUFNLGtDQUFrQyxDQUFDO0FBSzVGLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEVBQWEsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUQsT0FBTyxFQUFvQixNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUUsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7Ozs7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QyxDQUFDLGVBQWUsRUFBRSxvQkFBb0IsQ0FBQzs7MEJBc0VoRCxNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3QsIEluamVjdGlvblRva2VuLCBPbkRlc3Ryb3ksIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIsIFRvYXN0Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IFJlZ2lzdGVyTW9kYWwgfSBmcm9tICcuLi9yZWdpc3Rlci9yZWdpc3Rlci5tb2RhbCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWNjb3VudFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hY2NvdW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWNjb3VudCwgYWNjb3VudFRvU3RyaW5nIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvYWNjb3VudC5tb2RlbCc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvY29uZmlnLm1vZGVsJztcbmltcG9ydCB7IERlcGFydG1lbnQgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9kZXBhcnRtZW50Lm1vZGVsJztcbmltcG9ydCB7IEFQUF9MT0NBTEVTLCBMb2NhbGVDb25maWcsIExvY2FsU2V0dGluZ3MgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9zZXR0aW5ncy5tb2RlbCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGxhdGZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcGxhdGZvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBMb2NhbFNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvY2FsLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzdGFydFdpdGggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBcHBBdXRoTW9kYWwgfSBmcm9tICcuLi9hdXRoL2F1dGgubW9kYWwnO1xuaW1wb3J0IHsgTmV0d29ya1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHsgSU1lbnVJdGVtLCBNZW51SXRlbXMgfSBmcm9tICcuLi9tZW51L21lbnUubW9kZWwnO1xuaW1wb3J0IHsgU2hvd1RvYXN0T3B0aW9ucywgVG9hc3RzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3RvYXN0L3RvYXN0cyc7XG5pbXBvcnQgeyBmYWRlSW5BbmltYXRpb24sIHNsaWRlVXBEb3duQW5pbWF0aW9uIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21hdGVyaWFsL21hdGVyaWFsLmFuaW1hdGlvbnMnO1xuaW1wb3J0IHsgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuaywgdG9Cb29sZWFuIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgRU5WSVJPTk1FTlQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHsgSGlzdG9yeVBhZ2VSZWZlcmVuY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9oaXN0b3J5Lm1vZGVsJztcbmltcG9ydCB7IENPUkVfQ09ORklHX09QVElPTlMgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb25maWcvY29yZS5jb25maWcnO1xuaW1wb3J0IHsgUnhTdGF0ZSB9IGZyb20gJ0ByeC1hbmd1bGFyL3N0YXRlJztcblxuLyoqXG4gKiBAcGFyYW0gZmlsZXNcbiAqIEBkZXByZWNhdGVkIHVzZSBgZ2V0UmFuZG9tSW1hZ2VXaXRoQ3JlZGl0KClgIGluc3RlYWRcbiAqKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21JbWFnZShmaWxlczogc3RyaW5nW10pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBpbWdJbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGZpbGVzLmxlbmd0aCk7XG4gIHJldHVybiBmaWxlc1tpbWdJbmRleF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5kb21JbWFnZVdpdGhDcmVkaXQoZmlsZXM6IHN0cmluZ1tdKTogeyBpbWFnZTogc3RyaW5nOyBjcmVkaXRzOiBzdHJpbmcgfSB7XG4gIGNvbnN0IGltZ0luZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogZmlsZXMubGVuZ3RoKTtcbiAgY29uc3QgcGFydHMgPSBmaWxlc1tpbWdJbmRleF0/LnNwbGl0KCd8Jyk7XG4gIHJldHVybiBwYXJ0c1xuICAgID8ge1xuICAgICAgICBpbWFnZTogcGFydHNbMF0sXG4gICAgICAgIGNyZWRpdHM6IHBhcnRzWzFdLFxuICAgICAgfVxuICAgIDogbnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IEFQUF9IT01FX0JVVFRPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48SU1lbnVJdGVtW10+KCdob21lQnV0dG9uJyk7XG5leHBvcnQgaW50ZXJmYWNlIEhvbWVQYWdlU3RhdGUge1xuICBsb2FkaW5nOiBib29sZWFuO1xuICBzaG93U3Bpbm5lcjogYm9vbGVhbjtcbiAgc2hvd1BhcnRuZXJCYW5uZXI6IGJvb2xlYW47XG4gIHBhZ2VIaXN0b3J5OiBIaXN0b3J5UGFnZVJlZmVyZW5jZVtdO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcGFnZS1ob21lJyxcbiAgdGVtcGxhdGVVcmw6ICdob21lLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ob21lLnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGFuaW1hdGlvbnM6IFtmYWRlSW5BbmltYXRpb24sIHNsaWRlVXBEb3duQW5pbWF0aW9uXSxcbn0pXG5leHBvcnQgY2xhc3MgSG9tZVBhZ2UgZXh0ZW5kcyBSeFN0YXRlPEhvbWVQYWdlU3RhdGU+IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVidWc6IGJvb2xlYW47XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBfY29uZmlnOiBDb25maWd1cmF0aW9uO1xuXG4gIHByb3RlY3RlZCBwYWdlSGlzdG9yeSQgPSB0aGlzLnNlbGVjdCgncGFnZUhpc3RvcnknKTtcbiAgcHJvdGVjdGVkIGxvYWRpbmckID0gdGhpcy5zZWxlY3QoJ2xvYWRpbmcnKTtcblxuICB3YWl0aW5nTmV0d29yayA9IGZhbHNlO1xuICBhY2NvdW50TmFtZSA9ICcnO1xuICBpc0xvZ2luOiBib29sZWFuO1xuICAkcGFydG5lcnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERlcGFydG1lbnRbXT4obnVsbCk7XG4gIGxvZ286IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgYXBwTmFtZTogc3RyaW5nO1xuICBpc1dlYjogYm9vbGVhbjtcbiAgY2FuUmVnaXN0ZXI6IGJvb2xlYW47XG4gIGNvbnRlbnRTdHlsZTogYW55O1xuICBjb250ZW50Q3JlZGl0czogc3RyaW5nO1xuXG4gIG9mZmxpbmU6IGJvb2xlYW47XG4gICRmaWx0ZXJlZEJ1dHRvbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElNZW51SXRlbVtdPih1bmRlZmluZWQpO1xuICByZWFkb25seSBzaG93QWNjb3VudEJ1dHRvbjogYm9vbGVhbjtcblxuICBzZXQgcGFnZUhpc3RvcnkodmFsdWU6IEhpc3RvcnlQYWdlUmVmZXJlbmNlW10pIHtcbiAgICB0aGlzLnNldCgncGFnZUhpc3RvcnknLCAoKSA9PiB2YWx1ZSk7XG4gIH1cblxuICBnZXQgcGFnZUhpc3RvcnkoKTogSGlzdG9yeVBhZ2VSZWZlcmVuY2VbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KCdwYWdlSGlzdG9yeScpO1xuICB9XG5cbiAgc2V0IGxvYWRpbmcodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldCgnbG9hZGluZycsICgpID0+IHZhbHVlKTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldCgnbG9hZGluZycpO1xuICB9XG5cbiAgc2V0IHNob3dTcGlubmVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXQoJ3Nob3dTcGlubmVyJywgKCkgPT4gdmFsdWUpO1xuICB9XG4gIGdldCBzaG93U3Bpbm5lcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoJ3Nob3dTcGlubmVyJyk7XG4gIH1cblxuICBzZXQgc2hvd1BhcnRuZXJCYW5uZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldCgnc2hvd1BhcnRuZXJCYW5uZXInLCAoKSA9PiB2YWx1ZSk7XG4gIH1cbiAgZ2V0IHNob3dQYXJ0bmVyQmFubmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldCgnc2hvd1BhcnRuZXJCYW5uZXInKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50TG9jYWxlQ29kZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvYWRpbmcgPyAnJyA6ICh0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyB8fCB0aGlzLnRyYW5zbGF0ZS5kZWZhdWx0TGFuZyB8fCB0aGlzLmVudmlyb25tZW50LmRlZmF1bHRMb2NhbGUpPy5zdWJzdHJpbmcoMCwgMik7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFjY291bnRTZXJ2aWNlOiBBY2NvdW50U2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtU2VydmljZSxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwdWJsaWMgbmV0d29yazogTmV0d29ya1NlcnZpY2UsXG4gICAgcHVibGljIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZSxcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuICAgIEBJbmplY3QoQVBQX0xPQ0FMRVMpIHB1YmxpYyBsb2NhbGVzOiBMb2NhbGVDb25maWdbXSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9IT01FX0JVVFRPTlMpIHB1YmxpYyBidXR0b25zOiBJTWVudUl0ZW1bXVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc2V0KDxQYXJ0aWFsPEhvbWVQYWdlU3RhdGU+PntcbiAgICAgIGxvYWRpbmc6IHRydWUsXG4gICAgICBzaG93UGFydG5lckJhbm5lcjogZmFsc2UsXG4gICAgICBzaG93U3Bpbm5lcjogIXRoaXMucGxhdGZvcm0uc3RhcnRlZCxcbiAgICB9KTtcblxuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gICAgdGhpcy5wbGF0Zm9ybS5yZWFkeSgpLnRoZW4oKCkgPT4gdGhpcy5zdGFydCgpKTtcbiAgICB0aGlzLnNob3dBY2NvdW50QnV0dG9uID0gdG9Cb29sZWFuKGVudmlyb25tZW50LmFjY291bnQ/LnNob3dBY2NvdW50QnV0dG9uLCB0cnVlKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgYXN5bmMgbG9naW4oKSB7XG4gICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBBcHBBdXRoTW9kYWwsXG4gICAgfSk7XG4gICAgcmV0dXJuIG1vZGFsLnByZXNlbnQoKTtcbiAgfVxuXG4gIGFzeW5jIHJlZ2lzdGVyKCkge1xuICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgdGhpcy5tb2RhbEN0cmwuY3JlYXRlKHtcbiAgICAgIGNvbXBvbmVudDogUmVnaXN0ZXJNb2RhbCxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogZmFsc2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIG1vZGFsLnByZXNlbnQoKTtcbiAgfVxuXG4gIGFzeW5jIGxvZ291dChldmVudDogYW55KSB7XG4gICAgYXdhaXQgdGhpcy5hY2NvdW50U2VydmljZS5sb2dvdXQoKTtcblxuICAgIC8vIElmIHdhcyBvZmZsaW5lLCB0cnkgdG8gcmVjb25uZWN0IChiZWNhdXNlIGNhbiBiZSBhIGZvcmNlZCBvZmZsaW5lIG1vZGUpXG4gICAgaWYgKHRoaXMub2ZmbGluZSkge1xuICAgICAgYXdhaXQgdGhpcy50cnlPbmxpbmUoKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VMYW5ndWFnZShsb2NhbGU6IHN0cmluZykge1xuICAgIHRoaXMuc2V0dGluZ3MuYXBwbHkoeyBsb2NhbGUgfSkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0UGFnZVBhdGgoaW5kZXg6IG51bWJlciwgcGFnZTogSGlzdG9yeVBhZ2VSZWZlcmVuY2UpOiBzdHJpbmcge1xuICAgIHJldHVybiBwYWdlPy5wYXRoO1xuICB9XG5cbiAgdHJ5T25saW5lKCkge1xuICAgIHRoaXMud2FpdGluZ05ldHdvcmsgPSB0cnVlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG5cbiAgICB0aGlzLm5ldHdvcmtcbiAgICAgIC50cnlPbmxpbmUoe1xuICAgICAgICBzaG93TG9hZGluZ1RvYXN0OiBmYWxzZSxcbiAgICAgICAgc2hvd09ubGluZVRvYXN0OiB0cnVlLFxuICAgICAgICBzaG93T2ZmbGluZVRvYXN0OiBmYWxzZSxcbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMud2FpdGluZ05ldHdvcmsgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZCAgLS0gKi9cblxuICBwcm90ZWN0ZWQgYXN5bmMgc3RhcnQoKSB7XG4gICAgYXdhaXQgdGhpcy5hY2NvdW50U2VydmljZS5yZWFkeSgpO1xuXG4gICAgdGhpcy5pc0xvZ2luID0gdGhpcy5hY2NvdW50U2VydmljZS5pc0xvZ2luKCk7XG4gICAgaWYgKHRoaXMuaXNMb2dpbikge1xuICAgICAgdGhpcy5vbkxvZ2luKHRoaXMuYWNjb3VudFNlcnZpY2UuYWNjb3VudCk7XG4gICAgfVxuXG4gICAgdGhpcy5vZmZsaW5lID0gdGhpcy5uZXR3b3JrLm9mZmxpbmU7XG5cbiAgICAvLyBMaXN0ZW4gbG9naW4vbG9nb3V0IGV2ZW50c1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQodGhpcy5hY2NvdW50U2VydmljZS5vbkxvZ2luLnN1YnNjcmliZSgoYWNjb3VudCkgPT4gdGhpcy5vbkxvZ2luKGFjY291bnQpKSk7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZCh0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9nb3V0LnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uTG9nb3V0KCkpKTtcblxuICAgIC8vIExpc3RlbiBwb2QgY29uZmlnXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZCh0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnLnN1YnNjcmliZSgoY29uZmlnKSA9PiB0aGlzLm9uQ29uZmlnTG9hZGVkKGNvbmZpZykpKTtcblxuICAgIC8vIExpc3RlbiBzZXR0aW5ncyBjaGFuZ2VzXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuc2V0dGluZ3Mub25DaGFuZ2VcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gQWRkIGEgZGVsYXksIHRvIGF2b2lkIHRvIGFwcGx5IGNoYW5nZXMgdG8gb2Z0ZW5cbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMjUwKSxcbiAgICAgICAgICAvLyBTdGFydCB3aXRoIGN1cnJlbnQgc2V0dGluZ3NcbiAgICAgICAgICBzdGFydFdpdGgoYXdhaXQgdGhpcy5zZXR0aW5ncy5yZWFkeSgpKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4gdGhpcy5vblNldHRpbmdzQ2hhbmdlZChyZXMpKVxuICAgICk7XG5cbiAgICAvLyBMaXN0ZW4gbmV0d29yayBjaGFuZ2VzXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMubmV0d29yay5vbk5ldHdvcmtTdGF0dXNDaGFuZ2VzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIC8vZGVib3VuY2VUaW1lKDQ1MCksXG4gICAgICAgICAgLy90YXAoKCkgPT4gdGhpcy53YWl0aW5nTmV0d29yayA9IGZhbHNlKSxcbiAgICAgICAgICBtYXAoKGNvbm5lY3Rpb25UeXBlKSA9PiBjb25uZWN0aW9uVHlwZSA9PT0gJ25vbmUnKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgob2ZmbGluZSkgPT4ge1xuICAgICAgICAgIHRoaXMub2ZmbGluZSA9IG9mZmxpbmU7XG4gICAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHNob3dUb2FzdChvcHRzOiBTaG93VG9hc3RPcHRpb25zKSB7XG4gICAgYXdhaXQgVG9hc3RzLnNob3codGhpcy50b2FzdENvbnRyb2xsZXIsIHRoaXMudHJhbnNsYXRlLCBvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNvbmZpZ0xvYWRlZChjb25maWc6IENvbmZpZ3VyYXRpb24pIHtcbiAgICBjb25zb2xlLmRlYnVnKCdbaG9tZV0gQXBwbHlpbmcgY29uZmlndXJhdGlvbicsIGNvbmZpZyk7XG4gICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xuXG4gICAgdGhpcy5hcHBOYW1lID0gY29uZmlnLmxhYmVsIHx8IHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdEFwcE5hbWUgfHwgJ1NVTUFSaVMnO1xuICAgIHRoaXMubG9nbyA9IGNvbmZpZy5sYXJnZUxvZ28gfHwgY29uZmlnLnNtYWxsTG9nbyB8fCB1bmRlZmluZWQ7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGNvbmZpZy5uYW1lO1xuICAgIHRoaXMuaXNXZWIgPSB0aGlzLnBsYXRmb3JtLmlzV2ViKCk7XG4gICAgdGhpcy5jYW5SZWdpc3RlciA9IGNvbmZpZy5nZXRQcm9wZXJ0eUFzQm9vbGVhbihDT1JFX0NPTkZJR19PUFRJT05TLlJFR0lTVFJBVElPTl9FTkFCTEUpO1xuXG4gICAgY29uc3QgcGFydG5lcnMgPSAoY29uZmlnLnBhcnRuZXJzIHx8IFtdKS5maWx0ZXIoKHApID0+IHAgJiYgcC5sb2dvKTtcbiAgICB0aGlzLiRwYXJ0bmVycy5uZXh0KHBhcnRuZXJzKTtcbiAgICB0aGlzLnNob3dQYXJ0bmVyQmFubmVyID0gcGFydG5lcnMubGVuZ3RoID4gMDtcblxuICAgIC8vIElmIG5vdCBhbHJlYWR5IHNldCwgY29tcHV0ZSB0aGUgYmFja2dyb3VuZCBpbWFnZVxuICAgIGlmICghdGhpcy5jb250ZW50U3R5bGUpIHtcbiAgICAgIGNvbnN0IGJhY2tncm91bmRJbWFnZXMgPSAoY29uZmlnLmJhY2tncm91bmRJbWFnZXMgfHwgW10pXG4gICAgICAgIC8vIEZpbHRlciBvbiBub3QgbmlsLCBiZWNhdXNlIGNhbiBvY2N1ciBpZiBkZXRlY3RlZCBoYXMgbm90IGV4aXN0cyAoc2VlIGNvbmZpZy1zZXJ2aWNlLmpzKVxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChpbWcpID0+XG4gICAgICAgICAgICBpc05vdE5pbChpbWcpICYmXG4gICAgICAgICAgICAvLyBJZiBvZmZsaW5lLCBmaWx0ZXIgb24gbG9jYWwgZGF0YVVSTCBpbWFnZVxuICAgICAgICAgICAgKCF0aGlzLm9mZmxpbmUgfHwgIWltZy5zdGFydHNXaXRoKCdodHRwJykpXG4gICAgICAgICk7XG5cbiAgICAgIC8vIEJhY2tncm91bmQgaW1hZ2UgZm91bmQ6IHNlbGVjdCBvbmUgcmFuZG9tbHlcbiAgICAgIGlmIChiYWNrZ3JvdW5kSW1hZ2VzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCB7IGltYWdlLCBjcmVkaXRzIH0gPSBnZXRSYW5kb21JbWFnZVdpdGhDcmVkaXQoYmFja2dyb3VuZEltYWdlcyk7XG4gICAgICAgIHRoaXMuY29udGVudFN0eWxlID0gaW1hZ2UgPyB7ICdiYWNrZ3JvdW5kLWltYWdlJzogYHVybCgke2ltYWdlfSlgIH0gOiB7fTtcbiAgICAgICAgdGhpcy5jb250ZW50Q3JlZGl0cyA9IGNyZWRpdHMgfHwgJyc7XG4gICAgICB9XG5cbiAgICAgIC8vIFVzZSBiYWNrZ3JvdW5kIGNvbG9yXG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgcHJpbWFyeUNvbG9yID0gY29uZmlnLmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuQ09MT1JfUFJJTUFSWSkgfHwgJ3ZhcigtLWlvbi1jb2xvci1wcmltYXJ5KSc7XG4gICAgICAgIHRoaXMuY29udGVudFN0eWxlID0gKHByaW1hcnlDb2xvciAmJiB7ICdiYWNrZ3JvdW5kLWNvbG9yJzogcHJpbWFyeUNvbG9yIH0pIHx8IHt9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVmcmVzaEJ1dHRvbnMoKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgLy8gSWYgZmlyc3QgbG9hZCwgaGlkZSB0aGUgbG9hZGluZyBpbmRpY2F0b3JcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblNldHRpbmdzQ2hhbmdlZChzZXR0aW5nczogTG9jYWxTZXR0aW5ncykge1xuICAgIGlmIChzZXR0aW5ncy5wYWdlSGlzdG9yeSAhPT0gdGhpcy5wYWdlSGlzdG9yeSkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2hvbWVdIFBhZ2UgaGlzdG9yeSBsb2FkZWQnKTtcbiAgICAgIHRoaXMucGFnZUhpc3RvcnkgPSBzZXR0aW5ncy5wYWdlSGlzdG9yeSB8fCBbXTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb25Mb2dpbihhY2NvdW50OiBBY2NvdW50KSB7XG4gICAgaWYgKCFhY2NvdW50KSByZXR1cm47IC8vIFNraXBcbiAgICAvL2NvbnNvbGUuZGVidWcoJ1tob21lXSBMb2dnZWQgYWNjb3VudDogJywgYWNjb3VudCk7XG4gICAgdGhpcy5pc0xvZ2luID0gdHJ1ZTtcbiAgICB0aGlzLmFjY291bnROYW1lID0gYWNjb3VudFRvU3RyaW5nKGFjY291bnQpO1xuICAgIHRoaXMucmVmcmVzaEJ1dHRvbnMoYWNjb3VudCk7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkxvZ291dCgpIHtcbiAgICB0aGlzLmlzTG9naW4gPSBmYWxzZTtcbiAgICB0aGlzLmFjY291bnROYW1lID0gJyc7XG4gICAgdGhpcy5wYWdlSGlzdG9yeSA9IFtdO1xuICAgIHRoaXMucmVmcmVzaEJ1dHRvbnMoKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlZnJlc2hCdXR0b25zKGFjY291bnQ/OiBBY2NvdW50KSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcpIHJldHVybjsgLy8gU2tpcCAod2FpdGluZyBjb25maWcgdG8gYmUgbG9hZGVkKVxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2hvbWVdIFJlZnJlc2hpbmcgYnV0dG9ucy4uLicpO1xuXG4gICAgYWNjb3VudCA9IGFjY291bnQgfHwgdGhpcy5hY2NvdW50U2VydmljZS5hY2NvdW50O1xuICAgIGNvbnN0IGZpbHRlcmVkQnV0dG9ucyA9ICh0aGlzLmJ1dHRvbnMgfHwgW10pXG4gICAgICAuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgICBNZW51SXRlbXMuY2hlY2tJZlZpc2libGUoaXRlbSwgYWNjb3VudCwgdGhpcy5fY29uZmlnLCB7XG4gICAgICAgICAgaXNMb2dpbjogdGhpcy5pc0xvZ2luLFxuICAgICAgICAgIGRlYnVnOiB0aGlzLl9kZWJ1ZyxcbiAgICAgICAgICBsb2dQcmVmaXg6ICdbaG9tZV0nLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAvLyBSZXBsYWNlIHRpdGxlIHVzaW5nIHByb3BlcnRpZXNcbiAgICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayhpdGVtLnRpdGxlUHJvcGVydHkpICYmIHRoaXMuX2NvbmZpZykge1xuICAgICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy5fY29uZmlnLnByb3BlcnRpZXNbaXRlbS50aXRsZVByb3BlcnR5XTtcbiAgICAgICAgICBpZiAodGl0bGUpIHJldHVybiB7IC4uLml0ZW0sIHRpdGxlIH07IC8vIENyZWF0ZSBhIGNvcHksIHRvIGtlZXAgdGhlIG9yaWdpbmFsIGl0ZW0udGl0bGVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy4kZmlsdGVyZWRCdXR0b25zLm5leHQoZmlsdGVyZWRCdXR0b25zKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyByZW1vdmVQYWdlSGlzdG9yeShwYXRoOiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLnNldHRpbmdzLnJlbW92ZVBhZ2VIaXN0b3J5KHBhdGgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iLCI8YXBwLXRvb2xiYXIgW2NhbkdvQmFja109XCJmYWxzZVwiIHZpc2libGUteHMgdmlzaWJsZS1zbSB2aXNpYmxlLW1vYmlsZT5cbiAgPCEtLSBjaGFuZ2UgbG9jYWxlIGJ1dHRvbiAtLT5cbiAgPGlvbi1idXR0b24gc2xvdD1cImVuZFwiICpuZ0lmPVwiY3VycmVudExvY2FsZUNvZGU7IGxldCBjb2RlXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImxvY2FsZU1lbnVcIj5cbiAgICA8aW9uLWxhYmVsIGNsYXNzPVwiaW9uLXRleHQtdXBwZXJjYXNlXCI+Jm5ic3A7e3sgY29kZSB9fTwvaW9uLWxhYmVsPlxuICAgIDxtYXQtaWNvbiBzbG90PVwiZW5kXCI+YXJyb3dfZHJvcF9kb3duPC9tYXQtaWNvbj5cbiAgPC9pb24tYnV0dG9uPlxuPC9hcHAtdG9vbGJhcj5cblxuPCEtLSBjaGFuZ2UgbG9jYWxlIG1lbnUgLS0+XG48bWF0LW1lbnUgI2xvY2FsZU1lbnU9XCJtYXRNZW51XCI+XG4gIDxidXR0b24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgbG9jYWxlc1wiIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNoYW5nZUxhbmd1YWdlKGl0ZW0ua2V5KVwiPlxuICAgIDxpb24tbGFiZWw+e3sgaXRlbS52YWx1ZSB9fTwvaW9uLWxhYmVsPlxuICA8L2J1dHRvbj5cbjwvbWF0LW1lbnU+XG5cbjxpb24tY29udGVudCBbbmdTdHlsZV09XCJjb250ZW50U3R5bGVcIiBuby1wYWRkaW5nLXhzPlxuICA8c3BhbiBjbGFzcz1cImNvbnRlbnQtY3JlZGl0c1wiPlxuICAgIDxpb24tdGV4dD57eyBjb250ZW50Q3JlZGl0cyB9fTwvaW9uLXRleHQ+XG4gIDwvc3Bhbj5cblxuICA8IS0tIGxvYWRpbmcgc3Bpbm5lciAtLT5cbiAgPGRpdiBjbGFzcz1cImxvYWRpbmctcGFnZVwiIFtjbGFzcy5jZGstdmlzdWFsbHktaGlkZGVuXT1cIiEobG9hZGluZyQgfCBwdXNoKVwiPlxuICAgIEBpZiAoc2hvd1NwaW5uZXIpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyXCI+XG4gICAgICAgIDxwIFtpbm5lckhUTUxdPVwiJ0NPTU1PTi5MT0FESU5HX0RPVFMnIHwgdHJhbnNsYXRlXCI+PC9wPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2stY3ViZTEgc2stY3ViZVwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2stY3ViZTIgc2stY3ViZVwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2stY3ViZTQgc2stY3ViZVwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2stY3ViZTMgc2stY3ViZVwiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cblxuICA8IS0tIERlc2t0b3A6IHRyYW5zbHVjZW50IHRvcCB0b29sYmFyIC0tPlxuICA8ZGl2IGhpZGRlbi14cyBoaWRkZW4tc20gaGlkZGVuLW1vYmlsZT5cbiAgICA8aW9uLXRvb2xiYXIgdHJhbnNsdWNlbnQ+XG4gICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cInN0YXJ0XCI+XG4gICAgICAgIDxpb24tbWVudS10b2dnbGU+XG4gICAgICAgICAgPGlvbi1idXR0b24gY29sb3I9XCJsaWdodFwiIGZpbGw9XCJjbGVhclwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJpY29uLW9ubHlcIiBuYW1lPVwibWVudVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1tZW51LXRvZ2dsZT5cbiAgICAgIDwvaW9uLWJ1dHRvbnM+XG5cbiAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgIDwhLS0gY2hhbmdlIGxvY2FsZSBidXR0b24gLS0+XG4gICAgICAgIEBpZiAoY3VycmVudExvY2FsZUNvZGU7IGFzIGNvZGUpIHtcbiAgICAgICAgICA8aW9uLWJ1dHRvbiBjb2xvcj1cInNlY29uZGFyeVwiIGZpbGw9XCJzb2xpZFwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJsb2NhbGVNZW51XCI+XG4gICAgICAgICAgICA8aW9uLWxhYmVsIGNsYXNzPVwiaW9uLXRleHQtdXBwZXJjYXNlXCI+Jm5ic3A7e3sgY29kZSB9fTwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1pY29uIHNsb3Q9XCJlbmRcIj5hcnJvd19kcm9wX2Rvd248L21hdC1pY29uPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICA8L2lvbi10b29sYmFyPlxuICA8L2Rpdj5cblxuICA8IS0tIEluc3RhbGwgKGFuZCB1cGdyYWRlKSBjYXJkIC0tPlxuICA8YXBwLWluc3RhbGwtdXBncmFkZS1jYXJkIFtpc0xvZ2luXT1cImlzTG9naW5cIiBbc2hvd0luc3RhbGxCdXR0b25dPVwidHJ1ZVwiPjwvYXBwLWluc3RhbGwtdXBncmFkZS1jYXJkPlxuXG4gIEBpZiAoIShsb2FkaW5nJCB8IHB1c2gpKSB7XG4gICAgPCEtLSBXZWxjb21lIGNhcmQgLS0+XG4gICAgPGlvbi1jYXJkIGNsYXNzPVwibWFpbiB3ZWxjb21lIGlvbi1wYWRkaW5nIGlvbi10ZXh0LWNlbnRlciBpb24tYWxpZ24tc2VsZi1jZW50ZXJcIiBAZmFkZUluQW5pbWF0aW9uPlxuICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgPGlvbi1jYXJkLXRpdGxlIGNsYXNzPVwiaW9uLXRleHQtY2VudGVyXCI+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc1dlYlwiIFtpbm5lckhUTUxdPVwiJ0hPTUUuV0VMQ09NRV9XRUInIHwgdHJhbnNsYXRlOiB7IGFwcE5hbWU6IGFwcE5hbWUgfVwiPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc1dlYlwiIFtpbm5lckhUTUxdPVwiJ0hPTUUuV0VMQ09NRV9BUFAnIHwgdHJhbnNsYXRlOiB7IGFwcE5hbWU6IGFwcE5hbWUgfVwiPjwvc3Bhbj5cbiAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlIFtpbm5lckhUTUxdPVwiZGVzY3JpcHRpb25cIj48L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICA8aW9uLWNhcmQtY29udGVudCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgIDxpb24tdGV4dCBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICA8aW1nICpuZ0lmPVwibG9nb1wiIFthdHRyLnNyY109XCJsb2dvXCIgYWx0PVwiTG9nb1wiIC8+XG4gICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgIDwhLS0gcmVnaXN0ZXIgaGVscCB0ZXh0IC0tPlxuICAgICAgICA8aW9uLXRleHQgKm5nSWY9XCIhaXNMb2dpbiAmJiBjYW5SZWdpc3RlclwiPlxuICAgICAgICAgIDxiciAvPlxuICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5IT01FLlJFR0lTVEVSX0hFTFA8L3NwYW4+XG4gICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpb24tcGFkZGluZy10b3BcIj5cbiAgICAgICAgICA8IS0tIElmIE5PVCBsb2dpbiAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9naW47IGVsc2UgbG9naW5CdXR0b25zXCI+XG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiAqbmdJZj1cImNhblJlZ2lzdGVyXCIgZXhwYW5kPVwiYmxvY2tcIiBjb2xvcj1cInRlcnRpYXJ5XCIgKGNsaWNrKT1cInJlZ2lzdGVyKClcIj5cbiAgICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPkhPTUUuQlROX1JFR0lTVEVSPC9zcGFuPlxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgICAgPGlvbi1idXR0b24gZXhwYW5kPVwiYmxvY2tcIiBjb2xvcj1cImxpZ2h0XCIgW3JvdXRlckxpbmtdPVwiWycvJ11cIiAoY2xpY2spPVwibG9naW4oKVwiPlxuICAgICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+QVVUSC5CVE5fTE9HSU48L3NwYW4+XG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8IS0tIElmIHVzZXIgbG9naW4gLS0+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNsb2dpbkJ1dHRvbnM+XG4gICAgICAgICAgICA8IS0tIEZlYXR1cmUgYnV0dG9ucyAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKnJ4SWY9XCIkZmlsdGVyZWRCdXR0b25zOyBsZXQgYnV0dG9uc1wiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGJ1dHRvbnNcIj5cbiAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnBhdGhcIlxuICAgICAgICAgICAgICAgICAgZXhwYW5kPVwiYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgY29sb3I9XCJ0ZXJ0aWFyeVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiaXRlbS5jc3NDbGFzc1wiXG4gICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJpdGVtLnBhdGhcIlxuICAgICAgICAgICAgICAgICAgcm91dGVyRGlyZWN0aW9uPVwicm9vdFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiIGNsYXNzPVwiaW9uLWZsb2F0LXN0YXJ0XCIgKm5nSWY9XCJpdGVtLmljb25cIiBbbmFtZV09XCJpdGVtLmljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIHNsb3Q9XCJzdGFydFwiIGNsYXNzPVwiaW9uLWZsb2F0LXN0YXJ0XCIgKm5nSWY9XCJpdGVtLm1hdEljb25cIj57eyBpdGVtLm1hdEljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0Pnt7ICdIT01FLkJUTl9EQVRBX0VOVFJZJyB8IHRyYW5zbGF0ZTogeyBuYW1lOiAoaXRlbS50aXRsZSB8IHRyYW5zbGF0ZSkgfSB9fTwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBkaXZpZGVyIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXRlbS5wYXRoICYmICFpdGVtLmFjdGlvblwiIFtjbGFzc109XCJpdGVtLmNzc0NsYXNzXCI+XG4gICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT57eyBpdGVtLnRpdGxlIH19Jm5ic3A7PC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDwhLS08cCAqbmdJZj1cImJ1dHRvbnMubGVuZ3RoXCIgY2xhc3M9XCJ2aXNpYmxlLW1vYmlsZVwiPiZuYnNwOzwvcD4tLT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiAqbmdJZj1cInNob3dBY2NvdW50QnV0dG9uXCIgZXhwYW5kPVwiYmxvY2tcIiBjb2xvcj1cInNlY29uZGFyeVwiIFtyb3V0ZXJMaW5rXT1cIlsnL2FjY291bnQnXVwiPlxuICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgY2xhc3M9XCJpb24tZmxvYXQtc3RhcnRcIiBuYW1lPVwicGVyc29uLWNpcmNsZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIDxpb24tdGV4dCB0cmFuc2xhdGU+SE9NRS5CVE5fTVlfQUNDT1VOVDwvaW9uLXRleHQ+XG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XG5cbiAgICAgICAgICAgIDxwIGhpZGRlbi14cyBoaWRkZW4tc20gaGlkZGVuLW1vYmlsZT5cbiAgICAgICAgICAgICAgPGlvbi10ZXh0XG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCInSE9NRS5OT1RfVEhJU19BQ0NPVU5UX1FVRVNUSU9OJyB8IHRyYW5zbGF0ZTogeyBkaXNwbGF5TmFtZTogYWNjb3VudE5hbWUgfVwiXG4gICAgICAgICAgICAgID48L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgPGlvbi10ZXh0PlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgKGNsaWNrKT1cImxvZ291dCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+SE9NRS5CVE5fRElTQ09OTkVDVDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgPC9pb24tY2FyZD5cblxuICAgIDwhLS0gUGFnZSBoaXN0b3J5IC0tPlxuICAgIEBpZiAoaXNMb2dpbiAmJiAocGFnZUhpc3RvcnkkIHwgcHVzaCk7IGFzIHBhZ2VIaXN0b3J5KSB7XG4gICAgICA8aW9uLWdyaWQgY2xhc3M9XCJoaXN0b3J5LWNvbnRhaW5lciBpb24tYWxpZ24tc2VsZi1jZW50ZXJcIj5cbiAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgQGZvciAocGFnZSBvZiBwYWdlSGlzdG9yeTsgdHJhY2sgcGFnZS5wYXRoKSB7XG4gICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiMTJcIiBzaXplLXhsPVwiXCIgY2xhc3M9XCJpb24tdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkIGNsYXNzPVwiaW9uLWFsaWduLXNlbGYtc3RhcnQgaW9uLXRleHQtc3RhcnRcIiBAZmFkZUluQW5pbWF0aW9uPlxuICAgICAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXIgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgPCEtLSB0b3AgYmFyIC0tPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVBhZ2VIaXN0b3J5KHBhZ2UucGF0aClcIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW9uLWZsb2F0LXN0YXJ0IGlvbi1uby1tYXJnaW4gY2xvc2UtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIFtpbm5lckhUTUxdPVwicGFnZS5zdWJ0aXRsZSB8IHRyYW5zbGF0ZVwiPjwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLXRleHQgY2xhc3M9XCJpb24tZmxvYXQtZW5kXCIgW3RpdGxlXT1cInBhZ2UudGltZSB8IGRhdGVGb3JtYXQ6IHsgdGltZTogdHJ1ZSB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJ0aW1lLW91dGxpbmVcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7e3sgcGFnZS50aW1lIHwgZGF0ZUZyb21Ob3cgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cblxuICAgICAgICAgICAgICAgICAgPCEtLSBtYWluIHBhZ2UgLS0+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGUgY2xhc3M9XCJpb24tbm8tbWFyZ2luIGlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpb24taXRlbVxuICAgICAgICAgICAgICAgICAgICAgIGRldGFpbD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIHRhcHBhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LTF4XCJcbiAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJwYWdlLnBhdGhcIlxuICAgICAgICAgICAgICAgICAgICAgIHJvdXRlckRpcmVjdGlvbj1cInJvb3RcIlxuICAgICAgICAgICAgICAgICAgICAgIGxpbmVzPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIHBhZ2UgaWNvbi0tPlxuICAgICAgICAgICAgICAgICAgICAgIDxpb24taWNvbiAqbmdJZj1cInBhZ2UuaWNvblwiIHNsb3Q9XCJzdGFydFwiIFtuYW1lXT1cInBhZ2UuaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwicGFnZS5tYXRJY29uXCIgc2xvdD1cInN0YXJ0XCI+e3sgcGFnZS5tYXRJY29uIH19PC9tYXQtaWNvbj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCIgW2lubmVySFRNTF09XCJwYWdlLnRpdGxlXCI+PC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBjaGlsZHJlbiBwYWdlcyAtLT5cbiAgICAgICAgICAgICAgICBAaWYgKHBhZ2UuY2hpbGRyZW4gfCBpc05vdEVtcHR5QXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50IGNsYXNzPVwiaW9uLW5vLXBhZGRpbmcgaW9uLXBhZGRpbmctc3RhcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1saXN0IGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICBAZm9yIChjaGlsZFBhZ2Ugb2YgcGFnZS5jaGlsZHJlbjsgdHJhY2sgY2hpbGRQYWdlLnBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpb24taXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwcGFibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LTF4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiY2hpbGRQYWdlLnBhdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJEaXJlY3Rpb249XCJyb290XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBwYWdlIGljb24tLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1pY29uICpuZ0lmPVwiY2hpbGRQYWdlLmljb25cIiBzbG90PVwic3RhcnRcIiBjb2xvcj1cImRhcmtcIiBbbmFtZV09XCJjaGlsZFBhZ2UuaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImNoaWxkUGFnZS5tYXRJY29uXCIgc2xvdD1cInN0YXJ0XCIgY29sb3I9XCJkYXJrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY2hpbGRQYWdlLm1hdEljb24gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwiZGFya1wiIFtpbm5lckhUTUxdPVwiY2hpbGRQYWdlLnRpdGxlXCI+PC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tbGlzdD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgfVxuICAgICAgICA8L2lvbi1yb3c+XG4gICAgICA8L2lvbi1ncmlkPlxuICAgIH0gQGVsc2UgaWYgKHNob3dQYXJ0bmVyQmFubmVyKSB7XG4gICAgICA8IS0tIERpc3BsYXkgcGFydG5lcnMgbG9nb3MgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiYm90dG9tLWJhbm5lciBpb24tdGV4dC1jZW50ZXIgaW9uLXBhZGRpbmdcIiBAZmFkZUluQW5pbWF0aW9uPlxuICAgICAgICBAZm9yIChpdGVtIG9mICRwYXJ0bmVycyB8IGFzeW5jOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICA8YSBocmVmPVwie3sgaXRlbS5zaXRlVXJsIH19XCI+XG4gICAgICAgICAgICA8aW1nIGNsYXNzPVwibG9nb1wiIHNyYz1cInt7IGl0ZW0ubG9nbyB9fVwiIGFsdD1cInt7IGl0ZW0ubGFiZWwgfX1cIiBbdGl0bGVdPVwiaXRlbS5sYWJlbFwiIC8+XG4gICAgICAgICAgPC9hPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIH1cbjwvaW9uLWNvbnRlbnQ+XG4iXX0=
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { Component } from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { getRandomImageWithCredit } from '../home/home';
|
|
3
|
+
import { CORE_CONFIG_OPTIONS } from '../services/config/core.config';
|
|
4
|
+
import { isNotEmptyArray } from '../../shared/functions';
|
|
3
5
|
import * as i0 from "@angular/core";
|
|
4
6
|
import * as i1 from "../services/platform.service";
|
|
5
7
|
import * as i2 from "../services/account.service";
|
|
@@ -32,12 +34,12 @@ export class RegisterConfirmPage {
|
|
|
32
34
|
this.subscriptions.push(this.accountService.onLogout.subscribe(() => (this.isLogin = false)));
|
|
33
35
|
this.subscriptions.push(this.activatedRoute.paramMap.subscribe((params) => this.doConfirm(params.get('email'), params.get('code'))));
|
|
34
36
|
this.configService.config.subscribe((config) => {
|
|
35
|
-
if (config
|
|
36
|
-
const
|
|
37
|
-
this.contentStyle = { 'background-image': `url(${
|
|
37
|
+
if (isNotEmptyArray(config?.backgroundImages)) {
|
|
38
|
+
const { image } = getRandomImageWithCredit(config.backgroundImages);
|
|
39
|
+
this.contentStyle = { 'background-image': `url(${image})` };
|
|
38
40
|
}
|
|
39
41
|
else {
|
|
40
|
-
const primaryColor =
|
|
42
|
+
const primaryColor = config.getProperty(CORE_CONFIG_OPTIONS.COLOR_PRIMARY) || 'var(--ion-color-primary)';
|
|
41
43
|
this.contentStyle = { 'background-color': primaryColor };
|
|
42
44
|
}
|
|
43
45
|
this.loading = false;
|
|
@@ -79,10 +81,10 @@ export class RegisterConfirmPage {
|
|
|
79
81
|
}
|
|
80
82
|
}
|
|
81
83
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RegisterConfirmPage, deps: [{ token: i1.PlatformService }, { token: i2.AccountService }, { token: i3.ActivatedRoute }, { token: i4.ConfigService }], target: i0.ɵɵFactoryTarget.Component });
|
|
82
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: RegisterConfirmPage, selector: "app-register-confirm-page", ngImport: i0, template: "<app-toolbar [title]=\"'REGISTER.CONFIRMED.TITLE' | translate\" color=\"primary\"></app-toolbar>\n\n<ion-content class=\"bg-image-cover center ion-padding\" [ngStyle]=\"contentStyle\">\n <p class=\"hidden-xs ion-padding\">\n \n <br />\n <br />\n </p>\n <p class=\"hidden-xs\"> </p>\n\n <ion-card>\n <ion-card-content>\n <div>\n <ng-container *ngIf=\"loading\">\n <h4 translate>REGISTER.CONFIRMED.LOADING</h4>\n <p><ion-spinner></ion-spinner></p>\n </ng-container>\n\n <!-- error -->\n <ion-item *ngIf=\"!loading && error\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error ion-text-wrap\" [innerHTML]=\"error | translate\"></ion-label>\n </ion-item>\n </div>\n\n <div *ngIf=\"!loading && !error\">\n <h3>\n <ion-icon name=\"checkmark\"></ion-icon>\n <b translate>REGISTER.CONFIRMED.SUB_TITLE</b>\n </h3>\n\n <ion-text>\n <p [innerHTML]=\"'REGISTER.CONFIRMED.SUCCESS' | translate: { email: email }\"></p>\n <p *ngIf=\"!isLogin\" [innerHTML]=\"'REGISTER.CONFIRMED.LOGIN_HELP' | translate\"></p>\n </ion-text>\n </div>\n </ion-card-content>\n\n <ion-footer *ngIf=\"!loading\">\n <ion-button expand=\"full\" color=\"primary\" [routerLink]=\"['/account']\" *ngIf=\"!isLogin\">\n <ion-icon name=\"log-in\" slot=\"start\"></ion-icon>\n <span translate>AUTH.BTN_LOGIN</span>\n </ion-button>\n\n <ion-button expand=\"full\" color=\"secondary\" [routerLink]=\"['/account']\" *ngIf=\"isLogin\">\n <ion-icon name=\"contact\" slot=\"start\"></ion-icon>\n <span translate>HOME.BTN_MY_ACCOUNT</span>\n </ion-button>\n </ion-footer>\n </ion-card>\n</ion-content>\n", styles: ["
|
|
84
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: RegisterConfirmPage, selector: "app-register-confirm-page", ngImport: i0, template: "<app-toolbar [title]=\"'REGISTER.CONFIRMED.TITLE' | translate\" color=\"primary\"></app-toolbar>\n\n<ion-content class=\"bg-image-cover center ion-padding\" [ngStyle]=\"contentStyle\">\n <p class=\"hidden-xs ion-padding\">\n \n <br />\n <br />\n </p>\n <p class=\"hidden-xs\"> </p>\n\n <ion-card>\n <ion-card-content>\n <div>\n <ng-container *ngIf=\"loading\">\n <h4 translate>REGISTER.CONFIRMED.LOADING</h4>\n <p><ion-spinner></ion-spinner></p>\n </ng-container>\n\n <!-- error -->\n <ion-item *ngIf=\"!loading && error\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error ion-text-wrap\" [innerHTML]=\"error | translate\"></ion-label>\n </ion-item>\n </div>\n\n <div *ngIf=\"!loading && !error\">\n <h3>\n <ion-icon name=\"checkmark\"></ion-icon>\n <b translate>REGISTER.CONFIRMED.SUB_TITLE</b>\n </h3>\n\n <ion-text>\n <p [innerHTML]=\"'REGISTER.CONFIRMED.SUCCESS' | translate: { email: email }\"></p>\n <p *ngIf=\"!isLogin\" [innerHTML]=\"'REGISTER.CONFIRMED.LOGIN_HELP' | translate\"></p>\n </ion-text>\n </div>\n </ion-card-content>\n\n <ion-footer *ngIf=\"!loading\">\n <ion-button expand=\"full\" color=\"primary\" [routerLink]=\"['/account']\" *ngIf=\"!isLogin\">\n <ion-icon name=\"log-in\" slot=\"start\"></ion-icon>\n <span translate>AUTH.BTN_LOGIN</span>\n </ion-button>\n\n <ion-button expand=\"full\" color=\"secondary\" [routerLink]=\"['/account']\" *ngIf=\"isLogin\">\n <ion-icon name=\"contact\" slot=\"start\"></ion-icon>\n <span translate>HOME.BTN_MY_ACCOUNT</span>\n </ion-button>\n </ion-footer>\n </ion-card>\n</ion-content>\n", styles: [".center,ion-text,ion-card img,ion-card,ion-content{text-align:center;display:inline-block}ion-content{--ion-background-color: transparent;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;display:inline-block;padding:15px}ion-card{padding:var(--ion-padding);background-color:var(--ion-card-background-color);min-width:240px;max-width:400px;z-index:9}ion-card button{margin-top:16px}ion-card img{max-width:250px}@media screen and (max-width: 575px){ion-content ion-card{min-width:160px;width:auto;max-width:260px}ion-content ion-card ion-footer ion-button{margin-top:8px}}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i6.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: i6.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i6.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i6.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i6.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i6.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i6.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i6.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i6.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i6.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i6.RouterLinkDelegate, selector: ":not(a):not(area)[routerLink]" }, { kind: "directive", type: i7.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i8.ToolbarComponent, selector: "app-toolbar", inputs: ["progressBarMode", "title", "color", "class", "backHref", "defaultBackHref", "hasValidate", "hasClose", "hasSearch", "canGoBack", "canShowMenu"], outputs: ["onValidate", "onClose", "onValidateAndClose", "onBackClick", "onSearch"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
|
|
83
85
|
}
|
|
84
86
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RegisterConfirmPage, decorators: [{
|
|
85
87
|
type: Component,
|
|
86
|
-
args: [{ selector: 'app-register-confirm-page', template: "<app-toolbar [title]=\"'REGISTER.CONFIRMED.TITLE' | translate\" color=\"primary\"></app-toolbar>\n\n<ion-content class=\"bg-image-cover center ion-padding\" [ngStyle]=\"contentStyle\">\n <p class=\"hidden-xs ion-padding\">\n \n <br />\n <br />\n </p>\n <p class=\"hidden-xs\"> </p>\n\n <ion-card>\n <ion-card-content>\n <div>\n <ng-container *ngIf=\"loading\">\n <h4 translate>REGISTER.CONFIRMED.LOADING</h4>\n <p><ion-spinner></ion-spinner></p>\n </ng-container>\n\n <!-- error -->\n <ion-item *ngIf=\"!loading && error\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error ion-text-wrap\" [innerHTML]=\"error | translate\"></ion-label>\n </ion-item>\n </div>\n\n <div *ngIf=\"!loading && !error\">\n <h3>\n <ion-icon name=\"checkmark\"></ion-icon>\n <b translate>REGISTER.CONFIRMED.SUB_TITLE</b>\n </h3>\n\n <ion-text>\n <p [innerHTML]=\"'REGISTER.CONFIRMED.SUCCESS' | translate: { email: email }\"></p>\n <p *ngIf=\"!isLogin\" [innerHTML]=\"'REGISTER.CONFIRMED.LOGIN_HELP' | translate\"></p>\n </ion-text>\n </div>\n </ion-card-content>\n\n <ion-footer *ngIf=\"!loading\">\n <ion-button expand=\"full\" color=\"primary\" [routerLink]=\"['/account']\" *ngIf=\"!isLogin\">\n <ion-icon name=\"log-in\" slot=\"start\"></ion-icon>\n <span translate>AUTH.BTN_LOGIN</span>\n </ion-button>\n\n <ion-button expand=\"full\" color=\"secondary\" [routerLink]=\"['/account']\" *ngIf=\"isLogin\">\n <ion-icon name=\"contact\" slot=\"start\"></ion-icon>\n <span translate>HOME.BTN_MY_ACCOUNT</span>\n </ion-button>\n </ion-footer>\n </ion-card>\n</ion-content>\n", styles: ["
|
|
88
|
+
args: [{ selector: 'app-register-confirm-page', template: "<app-toolbar [title]=\"'REGISTER.CONFIRMED.TITLE' | translate\" color=\"primary\"></app-toolbar>\n\n<ion-content class=\"bg-image-cover center ion-padding\" [ngStyle]=\"contentStyle\">\n <p class=\"hidden-xs ion-padding\">\n \n <br />\n <br />\n </p>\n <p class=\"hidden-xs\"> </p>\n\n <ion-card>\n <ion-card-content>\n <div>\n <ng-container *ngIf=\"loading\">\n <h4 translate>REGISTER.CONFIRMED.LOADING</h4>\n <p><ion-spinner></ion-spinner></p>\n </ng-container>\n\n <!-- error -->\n <ion-item *ngIf=\"!loading && error\">\n <ion-icon color=\"danger\" slot=\"start\" name=\"alert-circle\"></ion-icon>\n <ion-label color=\"danger\" class=\"error ion-text-wrap\" [innerHTML]=\"error | translate\"></ion-label>\n </ion-item>\n </div>\n\n <div *ngIf=\"!loading && !error\">\n <h3>\n <ion-icon name=\"checkmark\"></ion-icon>\n <b translate>REGISTER.CONFIRMED.SUB_TITLE</b>\n </h3>\n\n <ion-text>\n <p [innerHTML]=\"'REGISTER.CONFIRMED.SUCCESS' | translate: { email: email }\"></p>\n <p *ngIf=\"!isLogin\" [innerHTML]=\"'REGISTER.CONFIRMED.LOGIN_HELP' | translate\"></p>\n </ion-text>\n </div>\n </ion-card-content>\n\n <ion-footer *ngIf=\"!loading\">\n <ion-button expand=\"full\" color=\"primary\" [routerLink]=\"['/account']\" *ngIf=\"!isLogin\">\n <ion-icon name=\"log-in\" slot=\"start\"></ion-icon>\n <span translate>AUTH.BTN_LOGIN</span>\n </ion-button>\n\n <ion-button expand=\"full\" color=\"secondary\" [routerLink]=\"['/account']\" *ngIf=\"isLogin\">\n <ion-icon name=\"contact\" slot=\"start\"></ion-icon>\n <span translate>HOME.BTN_MY_ACCOUNT</span>\n </ion-button>\n </ion-footer>\n </ion-card>\n</ion-content>\n", styles: [".center,ion-text,ion-card img,ion-card,ion-content{text-align:center;display:inline-block}ion-content{--ion-background-color: transparent;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;display:inline-block;padding:15px}ion-card{padding:var(--ion-padding);background-color:var(--ion-card-background-color);min-width:240px;max-width:400px;z-index:9}ion-card button{margin-top:16px}ion-card img{max-width:250px}@media screen and (max-width: 575px){ion-content ion-card{min-width:160px;width:auto;max-width:260px}ion-content ion-card ion-footer ion-button{margin-top:8px}}\n"] }]
|
|
87
89
|
}], ctorParameters: () => [{ type: i1.PlatformService }, { type: i2.AccountService }, { type: i3.ActivatedRoute }, { type: i4.ConfigService }] });
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXItY29uZmlybS5wYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3JlZ2lzdGVyL3JlZ2lzdGVyLWNvbmZpcm0ucGFnZS50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9yZWdpc3Rlci9yZWdpc3Rlci1jb25maXJtLnBhZ2UuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBSXJELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7Ozs7QUFTOUMsTUFBTSxPQUFPLG1CQUFtQjtJQVVwQjtJQUNBO0lBQ0E7SUFDQTtJQVpWLGFBQWEsR0FBbUIsRUFBRSxDQUFDO0lBRW5DLE9BQU8sQ0FBVTtJQUNqQixPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ2YsS0FBSyxDQUFTO0lBQ2QsS0FBSyxDQUFTO0lBQ2QsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUVsQixZQUNVLFFBQXlCLEVBQ3pCLGNBQThCLEVBQzlCLGNBQThCLEVBQzlCLGFBQTRCO1FBSDVCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFFcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRXhDLGdCQUFnQjtZQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVySSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDN0MsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLGdCQUFnQixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDeEUsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO29CQUN4RCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNoRSxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztvQkFDcEcsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxDQUFDO2dCQUMzRCxDQUFDO2dCQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFhLEVBQUUsSUFBWTtRQUN6QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztZQUN2QixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQztZQUNILElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztnQkFDNUMsTUFBTSxZQUFZLEdBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQzlDLElBQUksS0FBSyxLQUFLLFlBQVksRUFBRSxDQUFDO29CQUMzQix1Q0FBdUM7b0JBQ3ZDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDbkMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDckMsQ0FBQztZQUNILENBQUM7WUFFRCw2QkFBNkI7WUFDN0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdEUsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM5QixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDckMsQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLHdEQUF3RDtRQUMxRCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQztZQUN6QyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQzt3R0F6RVUsbUJBQW1COzRGQUFuQixtQkFBbUIsaUVDYmhDLHUwREFtREE7OzRGRHRDYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQWNjb3VudFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hY2NvdW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0UmFuZG9tSW1hZ2UgfSBmcm9tICcuLi9ob21lL2hvbWUnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFBsYXRmb3JtU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3BsYXRmb3JtLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcmVnaXN0ZXItY29uZmlybS1wYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICdyZWdpc3Rlci1jb25maXJtLnBhZ2UuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JlZ2lzdGVyLWNvbmZpcm0ucGFnZS5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFJlZ2lzdGVyQ29uZmlybVBhZ2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIGlzTG9naW46IGJvb2xlYW47XG4gIGxvYWRpbmcgPSB0cnVlO1xuICBlcnJvcjogc3RyaW5nO1xuICBlbWFpbDogc3RyaW5nO1xuICBjb250ZW50U3R5bGUgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHBsYXRmb3JtOiBQbGF0Zm9ybVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY2NvdW50U2VydmljZTogQWNjb3VudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMucGxhdGZvcm0ucmVhZHkoKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuaXNMb2dpbiA9IGFjY291bnRTZXJ2aWNlLmlzTG9naW4oKTtcblxuICAgICAgLy8gU3Vic2NyaXB0aW9uc1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5hY2NvdW50U2VydmljZS5vbkxvZ2luLnN1YnNjcmliZSgoXykgPT4gKHRoaXMuaXNMb2dpbiA9IHRydWUpKSk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9nb3V0LnN1YnNjcmliZSgoKSA9PiAodGhpcy5pc0xvZ2luID0gZmFsc2UpKSk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmFjdGl2YXRlZFJvdXRlLnBhcmFtTWFwLnN1YnNjcmliZSgocGFyYW1zKSA9PiB0aGlzLmRvQ29uZmlybShwYXJhbXMuZ2V0KCdlbWFpbCcpLCBwYXJhbXMuZ2V0KCdjb2RlJykpKSk7XG5cbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5jb25maWcuc3Vic2NyaWJlKChjb25maWcpID0+IHtcbiAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcuYmFja2dyb3VuZEltYWdlcyAmJiBjb25maWcuYmFja2dyb3VuZEltYWdlcy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBiZ0ltYWdlID0gZ2V0UmFuZG9tSW1hZ2UoY29uZmlnLmJhY2tncm91bmRJbWFnZXMpO1xuICAgICAgICAgIHRoaXMuY29udGVudFN0eWxlID0geyAnYmFja2dyb3VuZC1pbWFnZSc6IGB1cmwoJHtiZ0ltYWdlfSlgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgcHJpbWFyeUNvbG9yID0gKGNvbmZpZy5wcm9wZXJ0aWVzICYmIGNvbmZpZy5wcm9wZXJ0aWVzWydzdW1hcmlzLmNvbG9yLnByaW1hcnknXSkgfHwgJyMxNDQzOTEnO1xuICAgICAgICAgIHRoaXMuY29udGVudFN0eWxlID0geyAnYmFja2dyb3VuZC1jb2xvcic6IHByaW1hcnlDb2xvciB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xuICB9XG5cbiAgYXN5bmMgZG9Db25maXJtKGVtYWlsOiBzdHJpbmcsIGNvZGU6IHN0cmluZykge1xuICAgIHRoaXMuZW1haWwgPSBlbWFpbDtcblxuICAgIGlmICghY29kZSkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmVycm9yID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5hY2NvdW50U2VydmljZS5pc0xvZ2luKCkpIHtcbiAgICAgICAgY29uc3QgYWNjb3VudCA9IHRoaXMuYWNjb3VudFNlcnZpY2UuYWNjb3VudDtcbiAgICAgICAgY29uc3QgZW1haWxBY2NvdW50ID0gYWNjb3VudCAmJiBhY2NvdW50LmVtYWlsO1xuICAgICAgICBpZiAoZW1haWwgIT09IGVtYWlsQWNjb3VudCkge1xuICAgICAgICAgIC8vIE5vdCBzYW1lIGVtYWlsID0+IGxvZ291dCwgdGhlbiByZXRyeVxuICAgICAgICAgIGF3YWl0IHRoaXMuYWNjb3VudFNlcnZpY2UubG9nb3V0KCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZG9Db25maXJtKGVtYWlsLCBjb2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTZW5kIHRoZSBjb25maXJtYXRpb24gY29kZVxuICAgICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgdGhpcy5hY2NvdW50U2VydmljZS5jb25maXJtRW1haWwoZW1haWwsIGNvZGUpO1xuICAgICAgaWYgKGNvbmZpcm1lZCAmJiB0aGlzLmlzTG9naW4pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hY2NvdW50U2VydmljZS5yZWxvYWQoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgLy90aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShcIi9jb25maXJtL1wiICsgZW1haWwgKyBcIi9cIik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmVycm9yID0gKGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyO1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iLCI8YXBwLXRvb2xiYXIgW3RpdGxlXT1cIidSRUdJU1RFUi5DT05GSVJNRUQuVElUTEUnIHwgdHJhbnNsYXRlXCIgY29sb3I9XCJwcmltYXJ5XCI+PC9hcHAtdG9vbGJhcj5cblxuPGlvbi1jb250ZW50IGNsYXNzPVwiYmctaW1hZ2UtY292ZXIgY2VudGVyIGlvbi1wYWRkaW5nXCIgW25nU3R5bGVdPVwiY29udGVudFN0eWxlXCI+XG4gIDxwIGNsYXNzPVwiaGlkZGVuLXhzIGlvbi1wYWRkaW5nXCI+XG4gICAgJm5ic3A7XG4gICAgPGJyIC8+XG4gICAgPGJyIC8+XG4gIDwvcD5cbiAgPHAgY2xhc3M9XCJoaWRkZW4teHNcIj4mbmJzcDs8L3A+XG5cbiAgPGlvbi1jYXJkPlxuICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgPGRpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmdcIj5cbiAgICAgICAgICA8aDQgdHJhbnNsYXRlPlJFR0lTVEVSLkNPTkZJUk1FRC5MT0FESU5HPC9oND5cbiAgICAgICAgICA8cD48aW9uLXNwaW5uZXI+PC9pb24tc3Bpbm5lcj48L3A+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gZXJyb3IgLS0+XG4gICAgICAgIDxpb24taXRlbSAqbmdJZj1cIiFsb2FkaW5nICYmIGVycm9yXCI+XG4gICAgICAgICAgPGlvbi1pY29uIGNvbG9yPVwiZGFuZ2VyXCIgc2xvdD1cInN0YXJ0XCIgbmFtZT1cImFsZXJ0LWNpcmNsZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cImRhbmdlclwiIGNsYXNzPVwiZXJyb3IgaW9uLXRleHQtd3JhcFwiIFtpbm5lckhUTUxdPVwiZXJyb3IgfCB0cmFuc2xhdGVcIj48L2lvbi1sYWJlbD5cbiAgICAgICAgPC9pb24taXRlbT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwiIWxvYWRpbmcgJiYgIWVycm9yXCI+XG4gICAgICAgIDxoMz5cbiAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNoZWNrbWFya1wiPjwvaW9uLWljb24+XG4gICAgICAgICAgPGIgdHJhbnNsYXRlPlJFR0lTVEVSLkNPTkZJUk1FRC5TVUJfVElUTEU8L2I+XG4gICAgICAgIDwvaDM+XG5cbiAgICAgICAgPGlvbi10ZXh0PlxuICAgICAgICAgIDxwIFtpbm5lckhUTUxdPVwiJ1JFR0lTVEVSLkNPTkZJUk1FRC5TVUNDRVNTJyB8IHRyYW5zbGF0ZTogeyBlbWFpbDogZW1haWwgfVwiPjwvcD5cbiAgICAgICAgICA8cCAqbmdJZj1cIiFpc0xvZ2luXCIgW2lubmVySFRNTF09XCInUkVHSVNURVIuQ09ORklSTUVELkxPR0lOX0hFTFAnIHwgdHJhbnNsYXRlXCI+PC9wPlxuICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgPC9kaXY+XG4gICAgPC9pb24tY2FyZC1jb250ZW50PlxuXG4gICAgPGlvbi1mb290ZXIgKm5nSWY9XCIhbG9hZGluZ1wiPlxuICAgICAgPGlvbi1idXR0b24gZXhwYW5kPVwiZnVsbFwiIGNvbG9yPVwicHJpbWFyeVwiIFtyb3V0ZXJMaW5rXT1cIlsnL2FjY291bnQnXVwiICpuZ0lmPVwiIWlzTG9naW5cIj5cbiAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJsb2ctaW5cIiBzbG90PVwic3RhcnRcIj48L2lvbi1pY29uPlxuICAgICAgICA8c3BhbiB0cmFuc2xhdGU+QVVUSC5CVE5fTE9HSU48L3NwYW4+XG4gICAgICA8L2lvbi1idXR0b24+XG5cbiAgICAgIDxpb24tYnV0dG9uIGV4cGFuZD1cImZ1bGxcIiBjb2xvcj1cInNlY29uZGFyeVwiIFtyb3V0ZXJMaW5rXT1cIlsnL2FjY291bnQnXVwiICpuZ0lmPVwiaXNMb2dpblwiPlxuICAgICAgICA8aW9uLWljb24gbmFtZT1cImNvbnRhY3RcIiBzbG90PVwic3RhcnRcIj48L2lvbi1pY29uPlxuICAgICAgICA8c3BhbiB0cmFuc2xhdGU+SE9NRS5CVE5fTVlfQUNDT1VOVDwvc3Bhbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICA8L2lvbi1mb290ZXI+XG4gIDwvaW9uLWNhcmQ+XG48L2lvbi1jb250ZW50PlxuIl19
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXItY29uZmlybS5wYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3JlZ2lzdGVyL3JlZ2lzdGVyLWNvbmZpcm0ucGFnZS50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9yZWdpc3Rlci9yZWdpc3Rlci1jb25maXJtLnBhZ2UuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBSXJELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUd4RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7QUFPekQsTUFBTSxPQUFPLG1CQUFtQjtJQVVwQjtJQUNBO0lBQ0E7SUFDQTtJQVpWLGFBQWEsR0FBbUIsRUFBRSxDQUFDO0lBRW5DLE9BQU8sQ0FBVTtJQUNqQixPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ2YsS0FBSyxDQUFTO0lBQ2QsS0FBSyxDQUFTO0lBQ2QsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUVsQixZQUNVLFFBQXlCLEVBQ3pCLGNBQThCLEVBQzlCLGNBQThCLEVBQzlCLGFBQTRCO1FBSDVCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFFcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRXhDLGdCQUFnQjtZQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUks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QUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM5QixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDckMsQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLHdEQUF3RDtRQUMxRCxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQztZQUN6QyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQzt3R0F6RVUsbUJBQW1COzRGQUFuQixtQkFBbUIsaUVDZmhDLHUwREFtREE7OzRGRHBDYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQWNjb3VudFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hY2NvdW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0UmFuZG9tSW1hZ2VXaXRoQ3JlZGl0IH0gZnJvbSAnLi4vaG9tZS9ob21lJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBQbGF0Zm9ybVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IENPUkVfQ09ORklHX09QVElPTlMgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb25maWcvY29yZS5jb25maWcnO1xuaW1wb3J0IHsgaXNOb3RFbXB0eUFycmF5IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1yZWdpc3Rlci1jb25maXJtLXBhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJ3JlZ2lzdGVyLWNvbmZpcm0ucGFnZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmVnaXN0ZXItY29uZmlybS5wYWdlLnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUmVnaXN0ZXJDb25maXJtUGFnZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgaXNMb2dpbjogYm9vbGVhbjtcbiAgbG9hZGluZyA9IHRydWU7XG4gIGVycm9yOiBzdHJpbmc7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIGNvbnRlbnRTdHlsZSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtU2VydmljZSxcbiAgICBwcml2YXRlIGFjY291bnRTZXJ2aWNlOiBBY2NvdW50U2VydmljZSxcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5wbGF0Zm9ybS5yZWFkeSgpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5pc0xvZ2luID0gYWNjb3VudFNlcnZpY2UuaXNMb2dpbigpO1xuXG4gICAgICAvLyBTdWJzY3JpcHRpb25zXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9naW4uc3Vic2NyaWJlKChfKSA9PiAodGhpcy5pc0xvZ2luID0gdHJ1ZSkpKTtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuYWNjb3VudFNlcnZpY2Uub25Mb2dvdXQuc3Vic2NyaWJlKCgpID0+ICh0aGlzLmlzTG9naW4gPSBmYWxzZSkpKTtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuYWN0aXZhdGVkUm91dGUucGFyYW1NYXAuc3Vic2NyaWJlKChwYXJhbXMpID0+IHRoaXMuZG9Db25maXJtKHBhcmFtcy5nZXQoJ2VtYWlsJyksIHBhcmFtcy5nZXQoJ2NvZGUnKSkpKTtcblxuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZy5zdWJzY3JpYmUoKGNvbmZpZykgPT4ge1xuICAgICAgICBpZiAoaXNOb3RFbXB0eUFycmF5KGNvbmZpZz8uYmFja2dyb3VuZEltYWdlcykpIHtcbiAgICAgICAgICBjb25zdCB7IGltYWdlIH0gPSBnZXRSYW5kb21JbWFnZVdpdGhDcmVkaXQoY29uZmlnLmJhY2tncm91bmRJbWFnZXMpO1xuICAgICAgICAgIHRoaXMuY29udGVudFN0eWxlID0geyAnYmFja2dyb3VuZC1pbWFnZSc6IGB1cmwoJHtpbWFnZX0pYCB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHByaW1hcnlDb2xvciA9IGNvbmZpZy5nZXRQcm9wZXJ0eShDT1JFX0NPTkZJR19PUFRJT05TLkNPTE9SX1BSSU1BUlkpIHx8ICd2YXIoLS1pb24tY29sb3ItcHJpbWFyeSknO1xuICAgICAgICAgIHRoaXMuY29udGVudFN0eWxlID0geyAnYmFja2dyb3VuZC1jb2xvcic6IHByaW1hcnlDb2xvciB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xuICB9XG5cbiAgYXN5bmMgZG9Db25maXJtKGVtYWlsOiBzdHJpbmcsIGNvZGU6IHN0cmluZykge1xuICAgIHRoaXMuZW1haWwgPSBlbWFpbDtcblxuICAgIGlmICghY29kZSkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmVycm9yID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5hY2NvdW50U2VydmljZS5pc0xvZ2luKCkpIHtcbiAgICAgICAgY29uc3QgYWNjb3VudCA9IHRoaXMuYWNjb3VudFNlcnZpY2UuYWNjb3VudDtcbiAgICAgICAgY29uc3QgZW1haWxBY2NvdW50ID0gYWNjb3VudCAmJiBhY2NvdW50LmVtYWlsO1xuICAgICAgICBpZiAoZW1haWwgIT09IGVtYWlsQWNjb3VudCkge1xuICAgICAgICAgIC8vIE5vdCBzYW1lIGVtYWlsID0+IGxvZ291dCwgdGhlbiByZXRyeVxuICAgICAgICAgIGF3YWl0IHRoaXMuYWNjb3VudFNlcnZpY2UubG9nb3V0KCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZG9Db25maXJtKGVtYWlsLCBjb2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTZW5kIHRoZSBjb25maXJtYXRpb24gY29kZVxuICAgICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgdGhpcy5hY2NvdW50U2VydmljZS5jb25maXJtRW1haWwoZW1haWwsIGNvZGUpO1xuICAgICAgaWYgKGNvbmZpcm1lZCAmJiB0aGlzLmlzTG9naW4pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hY2NvdW50U2VydmljZS5yZWxvYWQoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgLy90aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShcIi9jb25maXJtL1wiICsgZW1haWwgKyBcIi9cIik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmVycm9yID0gKGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyO1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iLCI8YXBwLXRvb2xiYXIgW3RpdGxlXT1cIidSRUdJU1RFUi5DT05GSVJNRUQuVElUTEUnIHwgdHJhbnNsYXRlXCIgY29sb3I9XCJwcmltYXJ5XCI+PC9hcHAtdG9vbGJhcj5cblxuPGlvbi1jb250ZW50IGNsYXNzPVwiYmctaW1hZ2UtY292ZXIgY2VudGVyIGlvbi1wYWRkaW5nXCIgW25nU3R5bGVdPVwiY29udGVudFN0eWxlXCI+XG4gIDxwIGNsYXNzPVwiaGlkZGVuLXhzIGlvbi1wYWRkaW5nXCI+XG4gICAgJm5ic3A7XG4gICAgPGJyIC8+XG4gICAgPGJyIC8+XG4gIDwvcD5cbiAgPHAgY2xhc3M9XCJoaWRkZW4teHNcIj4mbmJzcDs8L3A+XG5cbiAgPGlvbi1jYXJkPlxuICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgPGRpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmdcIj5cbiAgICAgICAgICA8aDQgdHJhbnNsYXRlPlJFR0lTVEVSLkNPTkZJUk1FRC5MT0FESU5HPC9oND5cbiAgICAgICAgICA8cD48aW9uLXNwaW5uZXI+PC9pb24tc3Bpbm5lcj48L3A+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gZXJyb3IgLS0+XG4gICAgICAgIDxpb24taXRlbSAqbmdJZj1cIiFsb2FkaW5nICYmIGVycm9yXCI+XG4gICAgICAgICAgPGlvbi1pY29uIGNvbG9yPVwiZGFuZ2VyXCIgc2xvdD1cInN0YXJ0XCIgbmFtZT1cImFsZXJ0LWNpcmNsZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cImRhbmdlclwiIGNsYXNzPVwiZXJyb3IgaW9uLXRleHQtd3JhcFwiIFtpbm5lckhUTUxdPVwiZXJyb3IgfCB0cmFuc2xhdGVcIj48L2lvbi1sYWJlbD5cbiAgICAgICAgPC9pb24taXRlbT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwiIWxvYWRpbmcgJiYgIWVycm9yXCI+XG4gICAgICAgIDxoMz5cbiAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNoZWNrbWFya1wiPjwvaW9uLWljb24+XG4gICAgICAgICAgPGIgdHJhbnNsYXRlPlJFR0lTVEVSLkNPTkZJUk1FRC5TVUJfVElUTEU8L2I+XG4gICAgICAgIDwvaDM+XG5cbiAgICAgICAgPGlvbi10ZXh0PlxuICAgICAgICAgIDxwIFtpbm5lckhUTUxdPVwiJ1JFR0lTVEVSLkNPTkZJUk1FRC5TVUNDRVNTJyB8IHRyYW5zbGF0ZTogeyBlbWFpbDogZW1haWwgfVwiPjwvcD5cbiAgICAgICAgICA8cCAqbmdJZj1cIiFpc0xvZ2luXCIgW2lubmVySFRNTF09XCInUkVHSVNURVIuQ09ORklSTUVELkxPR0lOX0hFTFAnIHwgdHJhbnNsYXRlXCI+PC9wPlxuICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgPC9kaXY+XG4gICAgPC9pb24tY2FyZC1jb250ZW50PlxuXG4gICAgPGlvbi1mb290ZXIgKm5nSWY9XCIhbG9hZGluZ1wiPlxuICAgICAgPGlvbi1idXR0b24gZXhwYW5kPVwiZnVsbFwiIGNvbG9yPVwicHJpbWFyeVwiIFtyb3V0ZXJMaW5rXT1cIlsnL2FjY291bnQnXVwiICpuZ0lmPVwiIWlzTG9naW5cIj5cbiAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJsb2ctaW5cIiBzbG90PVwic3RhcnRcIj48L2lvbi1pY29uPlxuICAgICAgICA8c3BhbiB0cmFuc2xhdGU+QVVUSC5CVE5fTE9HSU48L3NwYW4+XG4gICAgICA8L2lvbi1idXR0b24+XG5cbiAgICAgIDxpb24tYnV0dG9uIGV4cGFuZD1cImZ1bGxcIiBjb2xvcj1cInNlY29uZGFyeVwiIFtyb3V0ZXJMaW5rXT1cIlsnL2FjY291bnQnXVwiICpuZ0lmPVwiaXNMb2dpblwiPlxuICAgICAgICA8aW9uLWljb24gbmFtZT1cImNvbnRhY3RcIiBzbG90PVwic3RhcnRcIj48L2lvbi1pY29uPlxuICAgICAgICA8c3BhbiB0cmFuc2xhdGU+SE9NRS5CVE5fTVlfQUNDT1VOVDwvc3Bhbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICA8L2lvbi1mb290ZXI+XG4gIDwvaW9uLWNhcmQ+XG48L2lvbi1jb250ZW50PlxuIl19
|