@sumaris-net/ngx-components 18.2.29 → 18.2.31-alpha-1
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/doc/changelog.md +1028 -1025
- package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +1 -1
- package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +1 -1
- package/esm2022/src/app/core/peer/select-peer.modal.mjs +3 -3
- package/esm2022/src/app/core/peer/select-peer.module.mjs +1 -1
- package/esm2022/src/app/core/services/config/core.config.mjs +1 -1
- package/esm2022/src/app/core/services/model/node-feature.model.mjs +1 -1
- package/esm2022/src/app/core/services/model/peer.model.mjs +1 -1
- package/esm2022/src/app/core/services/network.service.mjs +1 -1
- package/esm2022/src/app/core/services/network.utils.mjs +1 -1
- package/esm2022/src/app/core/services/storage/entity-store.class.mjs +1 -1
- package/esm2022/src/app/core/table/testing/table.testing.mjs +3 -3
- package/esm2022/src/app/shared/forms.mjs +3 -3
- package/esm2022/src/app/shared/inputs.mjs +1 -1
- package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +3 -3
- package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +3 -3
- package/esm2022/src/app/shared/material/latlong/latlong.utils.mjs +1 -1
- package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +5 -5
- package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +1 -1
- package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +3 -3
- package/esm2022/src/app/shared/material/material.animations.mjs +1 -1
- package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +1 -1
- package/esm2022/src/app/shared/rx-state/rx-state.decorators.mjs +1 -1
- package/esm2022/src/app/shared/validator/validators.mjs +1 -1
- package/esm2022/src/environments/environment.class.mjs +1 -1
- package/esm2022/src/environments/environment.mjs +1 -1
- package/fesm2022/sumaris-net.ngx-components.mjs +15 -15
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/assets/i18n/en-US.json +735 -735
- package/src/assets/i18n/en.json +734 -734
- package/src/assets/i18n/fr.json +734 -734
- package/src/assets/manifest.json +17 -17
- package/src/theme/_material.scss +213 -213
- package/src/theme/_ngx-components.scss +955 -955
- package/src/theme/_ngx-components.table.scss +597 -597
|
@@ -120,10 +120,10 @@ export class LatLongTestPage {
|
|
|
120
120
|
}
|
|
121
121
|
stringify = JSON.stringify;
|
|
122
122
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: LatLongTestPage, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.PlatformService }], target: i0.ɵɵFactoryTarget.Component });
|
|
123
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: LatLongTestPage, selector: "app-latlong-test", ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Lat/Long field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <!-- Tab nav - desktop mode -->\n <nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\n <a mat-tab-link [active]=\"mode === 'mobile'\" (click)=\"toggleMode('mobile')\">\n <mat-label>Mobile</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode === 'desktop'\" (click)=\"toggleMode('desktop')\">\n <mat-label>Desktop</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode === 'dev'\" (click)=\"toggleMode('dev')\">\n <mat-label>Dev</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode === 'temp'\" (click)=\"toggleMode('temp')\">\n <mat-label>Temporary</mat-label>\n </a>\n </nav>\n\n <form #tabPanel class=\"form-container ion-padding\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n @if (mode === 'mobile') {\n <ng-container *ngTemplateOutlet=\"mainTest; context: { mobile: true }\"></ng-container>\n } @else if (mode === 'desktop') {\n <ng-container *ngTemplateOutlet=\"mainTest; context: { mobile: false }\"></ng-container>\n } @else if (mode === 'dev') {\n <ion-grid>\n <ion-row>\n <ion-col>\n <mat-checkbox (change)=\"toggleAppearance($event)\">Change apparence</mat-checkbox>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n <mat-form-field [appearance]=\"appearance\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>LatLongFormat</mat-label>\n <mat-select #selectLatLongFormat [(value)]=\"selectedFormat\">\n <mat-option value=\"DDMM\" selected>DDMM</mat-option>\n <mat-option value=\"DDMMSS\">DDMMSS</mat-option>\n <mat-option value=\"DD\">DD</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n </ion-row>\n @switch (selectedFormat) {\n @case ('DDMM') {\n <ion-row>\n <ion-col>\n <ng-container\n *ngTemplateOutlet=\"\n newComponent;\n context: { formGroup: 'empty', latLongPattern: 'DDMM', required: false }\n \"\n ></ng-container>\n </ion-col>\n <ion-col>\n <ng-container\n *ngTemplateOutlet=\"\n newComponent;\n context: { formGroup: 'enable', latLongPattern: 'DDMM', required: true }\n \"\n ></ng-container>\n </ion-col>\n <!-- <ion-col> -->\n <!-- <ng-container -->\n <!-- *ngTemplateOutlet=\"testV2; context: { formGroup: 'disable', latLongPattern: 'DDMM', required: true }\" -->\n <!-- ></ng-container> -->\n <!-- </ion-col> -->\n </ion-row>\n }\n @case ('DDMMSS') {\n <ion-row>\n <!-- DDMMSS -->\n <ion-col>\n <ng-container\n *ngTemplateOutlet=\"\n newComponent;\n context: { formGroup: 'empty', latLongPattern: 'DDMMSS', required: false }\n \"\n ></ng-container>\n </ion-col>\n <ion-col>\n <ng-container\n *ngTemplateOutlet=\"\n newComponent;\n context: { formGroup: 'enable', latLongPattern: 'DDMMSS', required: true }\n \"\n ></ng-container>\n </ion-col>\n <ion-col>\n <ng-container\n *ngTemplateOutlet=\"\n newComponent;\n context: { formGroup: 'disable', latLongPattern: 'DDMMSS', required: true }\n \"\n ></ng-container>\n </ion-col>\n </ion-row>\n }\n @case ('DD') {\n <ion-row>\n <!-- DDMMSS -->\n <ion-col>\n <ng-container\n *ngTemplateOutlet=\"\n newComponent;\n context: { formGroup: 'empty', latLongPattern: 'DD', required: false }\n \"\n ></ng-container>\n </ion-col>\n <ion-col>\n <ng-container\n *ngTemplateOutlet=\"\n newComponent;\n context: { formGroup: 'enable', latLongPattern: 'DD', required: true }\n \"\n ></ng-container>\n </ion-col>\n <ion-col>\n <ng-container\n *ngTemplateOutlet=\"\n newComponent;\n context: { formGroup: 'disable', latLongPattern: 'DD', required: true }\n \"\n ></ng-container>\n </ion-col>\n </ion-row>\n }\n }\n </ion-grid>\n } @else {\n <!-- Temporay TAB (for DEV) -->\n <form *ngIf=\"form | formGetGroup: 'enable' as formGroup\" [formGroup]=\"formGroup\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Format DD, defaultSign '-'</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{ formGroup.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field\n formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DDMMSS\"\n defaultSign=\"-\"\n [required]=\"true\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button matSuffix mat-icon-button (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field\n formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DDMMSS\"\n defaultSign=\"-\"\n placeholder=\"Longitude\"\n [appearance]=\"appearance\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n </ion-row>\n <ion-row *ngIf=\"geoPositionMessage\">\n <ion-col>{{ geoPositionMessage }}</ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </form>\n }\n </form>\n</ion-content>\n\n<ng-template #mainTest let-mobile=\"mobile\">\n <!-- Empty value -->\n <form *ngIf=\"form | formGetGroup: 'empty' as formGroup\" [formGroup]=\"formGroup\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <mat-checkbox (change)=\"toggleAppearance($event)\">Change apparence</mat-checkbox>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>\n <ion-text><h4>Empty, with defaults</h4></ion-text>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <!-- DD Default sign -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Format DD, defaultSign '-'</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{ stringify(formGroup.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field\n formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DD\"\n defaultSign=\"-\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button matSuffix mat-icon-button (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field\n formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DD\"\n defaultSign=\"-\"\n placeholder=\"Longitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n </ion-row>\n <ion-row *ngIf=\"geoPositionMessage\">\n <ion-col>{{ geoPositionMessage }}</ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- DDMM Default sign -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Format DDMM, defaultSign '+'</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{ stringify(formGroup.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field\n formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DDMM\"\n defaultSign=\"+\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field\n formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DDMM\"\n defaultSign=\"+\"\n placeholder=\"Longitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- DDMMSS Default sign -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Format DDMMSS, defaultSign '+'</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{ stringify(formGroup.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field\n formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DDMMSS\"\n defaultSign=\"+\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field\n formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DDMMSS\"\n defaultSign=\"+\"\n placeholder=\"Longitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n\n <!-- Empty value -->\n <form *ngIf=\"form | formGetGroup: 'emptyRequired' as formGroup\" [formGroup]=\"formGroup\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <ion-text><h4>Empty, required (no defaults)</h4></ion-text>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <!-- DD -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Format DD, required</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{ stringify(formGroup.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field\n formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DD\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button matSuffix mat-icon-button (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field\n formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DD\"\n placeholder=\"Longitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n </ion-row>\n <ion-row *ngIf=\"geoPositionMessage\">\n <ion-col>{{ geoPositionMessage }}</ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- DDMM -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Format DDMM, required</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{ stringify(formGroup.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field\n formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DDMM\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field\n formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DDMM\"\n placeholder=\"Longitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n\n <form *ngIf=\"form | formGetGroup: 'enable' as formGroup\" [formGroup]=\"formGroup\">\n <ion-grid>\n <!-- With value -->\n <ion-row>\n <ion-col>\n <ion-text><h4>With value</h4></ion-text>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <!-- DD -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Format DD</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{ stringify(formGroup.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field\n formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DD\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n ></mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field\n formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DD\"\n placeholder=\"Longitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n ></mat-latlong-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- DDMMSS -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Format DDMM</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{ stringify(formGroup.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field\n formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DDMM\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n ></mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field\n formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DDMM\"\n placeholder=\"Longitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n ></mat-latlong-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- DDMMSS -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Format DDMMSS</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{ stringify(formGroup.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field\n formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DDMMSS\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n ></mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field\n formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DDMMSS\"\n placeholder=\"Longitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n ></mat-latlong-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n\n <!-- Disable -->\n <form *ngIf=\"form | formGetGroup: 'disable' as formGroup\" [formGroup]=\"formGroup\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <ion-text><h4>Disabled control</h4></ion-text>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled control</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{ stringify(formGroup.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field\n formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DDMM\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <mat-icon matSuffix>gps_fixed</mat-icon>\n </mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field\n formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DDMM\"\n placeholder=\"Longitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Readonly (control is enable)</ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-checkbox\n (change)=\"readonlyField.readonly = $event.checked\"\n [checked]=\"readonlyField.readonly\"\n ></mat-checkbox>\n\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field\n #readonlyField\n [formControl]=\"form | formGetControl: 'enable.latitude'\"\n type=\"latitude\"\n latLongPattern=\"DDMM\"\n placeholder=\"Latitude\"\n [readonly]=\"true\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <mat-icon matSuffix>gps_fixed</mat-icon>\n </mat-latlong-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">With hint</ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-latlong-field\n #readonlyField\n [formControl]=\"form | formGetControl: 'enable.latitude'\"\n type=\"latitude\"\n latLongPattern=\"DDMM\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-hint align=\"end\">This is a long long hint</mat-hint>\n </mat-latlong-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n</ng-template>\n\n<ng-template #newComponent let-formGroupName=\"formGroup\" let-pattern=\"latLongPattern\" let-required=\"required\">\n <form *ngIf=\"form | formGetGroup: formGroupName as formGroup\" [formGroup]=\"formGroup\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">{{ formGroupName }}</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-grid class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding\">\n <ion-col class=\"ion-no-padding\">\n <ion-text color=\"medium\">\n <small>\n <pre>{{ formGroup.value | json }}</pre>\n <pre>invalid ? : {{ (formGroup | formGetControl: 'latitude').invalid }}</pre>\n <pre>touched ? : {{ (formGroup | formGetControl: 'latitude').touched }}</pre>\n <pre>errors : {{ formGroup | formGetGroup: 'latitude' | formError }}</pre>\n </small>\n </ion-text>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n <ion-col class=\"ion-no-padding\" sizeLg=\"6\">\n <mat-latlong-field\n formControlName=\"latitude\"\n type=\"latitude\"\n [readonly]=\"true\"\n [latLongPattern]=\"pattern\"\n defaultSign=\"-\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n ></mat-latlong-field>\n </ion-col>\n <ion-col sizeLg=\"6\">\n <mat-latlong-field\n formControlName=\"longitude\"\n type=\"longitude\"\n [readonly]=\"true\"\n [latLongPattern]=\"pattern\"\n defaultSign=\"-\"\n placeholder=\"Longitude\"\n [appearance]=\"appearance\"\n ></mat-latlong-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col class=\"ion-no-padding\" sizeLg=\"6\">\n <mat-latlong-field\n formControlName=\"latitude\"\n type=\"latitude\"\n [latLongPattern]=\"pattern\"\n defaultSign=\"-\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n [required]=\"required\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button matSuffix mat-icon-button (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n <ion-col class=\"ion-no-padding\" sizeLg=\"6\">\n <mat-latlong-field\n formControlName=\"longitude\"\n type=\"longitude\"\n [latLongPattern]=\"pattern\"\n defaultSign=\"-\"\n placeholder=\"Longitude\"\n [appearance]=\"appearance\"\n [required]=\"required\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button matSuffix mat-icon-button (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n </ion-row>\n <ion-row *ngIf=\"geoPositionMessage\">\n <ion-col>{{ geoPositionMessage }}</ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </form>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i4.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i4.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i4.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i4.IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: i4.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i4.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: i4.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i4.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i4.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i4.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i4.IonRow, selector: "ion-row" }, { kind: "component", type: i4.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i4.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i4.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i4.IonBackButton, selector: "ion-back-button" }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i9.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i10.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i11.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["fitInkBarToContent", "mat-stretch-tabs", "animationDuration", "backgroundColor", "disableRipple", "color", "tabPanel"], exportAs: ["matTabNavBar", "matTabNav"] }, { kind: "component", type: i11.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["active", "disabled", "disableRipple", "tabIndex", "id"], exportAs: ["matTabLink"] }, { kind: "component", type: i12.MatLatLongField, selector: "mat-latlong-field", inputs: ["formControl", "formControlName", "type", "latLongPattern", "maxDecimals", "required", "floatLabel", "placeholder", "defaultSign", "autofocus", "mobile", "degreesSymbolUnit", "minutesSymbolUnit", "secondsSymbolUnit", "clearable", "class", "tabindex", "appearance", "readonly", "subscriptSizing"], outputs: ["keyup.enter", "blur", "focus"] }, { kind: "pipe", type: i3.JsonPipe, name: "json" }, { kind: "pipe", type: i13.FormErrorPipe, name: "formError" }, { kind: "pipe", type: i13.FormGetControlPipe, name: "formGetControl" }, { kind: "pipe", type: i13.FormGetGroupPipe, name: "formGetGroup" }] });
|
|
123
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: LatLongTestPage, selector: "app-latlong-test", ngImport: i0, template: "<ion-header>\r\n <ion-toolbar color=\"primary\">\r\n <ion-buttons slot=\"start\">\r\n <ion-back-button></ion-back-button>\r\n </ion-buttons>\r\n\r\n <ion-title>Lat/Long field test page</ion-title>\r\n </ion-toolbar>\r\n</ion-header>\r\n\r\n<ion-content>\r\n <!-- Tab nav - desktop mode -->\r\n <nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\r\n <a mat-tab-link [active]=\"mode === 'mobile'\" (click)=\"toggleMode('mobile')\">\r\n <mat-label>Mobile</mat-label>\r\n </a>\r\n <a mat-tab-link [active]=\"mode === 'desktop'\" (click)=\"toggleMode('desktop')\">\r\n <mat-label>Desktop</mat-label>\r\n </a>\r\n <a mat-tab-link [active]=\"mode === 'dev'\" (click)=\"toggleMode('dev')\">\r\n <mat-label>Dev</mat-label>\r\n </a>\r\n <a mat-tab-link [active]=\"mode === 'temp'\" (click)=\"toggleMode('temp')\">\r\n <mat-label>Temporary</mat-label>\r\n </a>\r\n </nav>\r\n\r\n <form #tabPanel class=\"form-container ion-padding\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\r\n @if (mode === 'mobile') {\r\n <ng-container *ngTemplateOutlet=\"mainTest; context: { mobile: true }\"></ng-container>\r\n } @else if (mode === 'desktop') {\r\n <ng-container *ngTemplateOutlet=\"mainTest; context: { mobile: false }\"></ng-container>\r\n } @else if (mode === 'dev') {\r\n <ion-grid>\r\n <ion-row>\r\n <ion-col>\r\n <mat-checkbox (change)=\"toggleAppearance($event)\">Change apparence</mat-checkbox>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row>\r\n <ion-col>\r\n <mat-form-field [appearance]=\"appearance\" [subscriptSizing]=\"'dynamic'\">\r\n <mat-label>LatLongFormat</mat-label>\r\n <mat-select #selectLatLongFormat [(value)]=\"selectedFormat\">\r\n <mat-option value=\"DDMM\" selected>DDMM</mat-option>\r\n <mat-option value=\"DDMMSS\">DDMMSS</mat-option>\r\n <mat-option value=\"DD\">DD</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ion-col>\r\n </ion-row>\r\n @switch (selectedFormat) {\r\n @case ('DDMM') {\r\n <ion-row>\r\n <ion-col>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n newComponent;\r\n context: { formGroup: 'empty', latLongPattern: 'DDMM', required: false }\r\n \"\r\n ></ng-container>\r\n </ion-col>\r\n <ion-col>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n newComponent;\r\n context: { formGroup: 'enable', latLongPattern: 'DDMM', required: true }\r\n \"\r\n ></ng-container>\r\n </ion-col>\r\n <!-- <ion-col> -->\r\n <!-- <ng-container -->\r\n <!-- *ngTemplateOutlet=\"testV2; context: { formGroup: 'disable', latLongPattern: 'DDMM', required: true }\" -->\r\n <!-- ></ng-container> -->\r\n <!-- </ion-col> -->\r\n </ion-row>\r\n }\r\n @case ('DDMMSS') {\r\n <ion-row>\r\n <!-- DDMMSS -->\r\n <ion-col>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n newComponent;\r\n context: { formGroup: 'empty', latLongPattern: 'DDMMSS', required: false }\r\n \"\r\n ></ng-container>\r\n </ion-col>\r\n <ion-col>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n newComponent;\r\n context: { formGroup: 'enable', latLongPattern: 'DDMMSS', required: true }\r\n \"\r\n ></ng-container>\r\n </ion-col>\r\n <ion-col>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n newComponent;\r\n context: { formGroup: 'disable', latLongPattern: 'DDMMSS', required: true }\r\n \"\r\n ></ng-container>\r\n </ion-col>\r\n </ion-row>\r\n }\r\n @case ('DD') {\r\n <ion-row>\r\n <!-- DDMMSS -->\r\n <ion-col>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n newComponent;\r\n context: { formGroup: 'empty', latLongPattern: 'DD', required: false }\r\n \"\r\n ></ng-container>\r\n </ion-col>\r\n <ion-col>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n newComponent;\r\n context: { formGroup: 'enable', latLongPattern: 'DD', required: true }\r\n \"\r\n ></ng-container>\r\n </ion-col>\r\n <ion-col>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n newComponent;\r\n context: { formGroup: 'disable', latLongPattern: 'DD', required: true }\r\n \"\r\n ></ng-container>\r\n </ion-col>\r\n </ion-row>\r\n }\r\n }\r\n </ion-grid>\r\n } @else {\r\n <!-- Temporay TAB (for DEV) -->\r\n <form *ngIf=\"form | formGetGroup: 'enable' as formGroup\" [formGroup]=\"formGroup\">\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">Format DD, defaultSign '-'</ion-label>\r\n </ion-card-title>\r\n <ion-card-subtitle>\r\n <ion-text color=\"medium\">\r\n <small>\r\n <pre>{{ formGroup.value | json }}</pre>\r\n </small>\r\n </ion-text>\r\n </ion-card-subtitle>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"latitude\"\r\n type=\"latitude\"\r\n latLongPattern=\"DDMMSS\"\r\n defaultSign=\"-\"\r\n [required]=\"true\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button matSuffix mat-icon-button (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"longitude\"\r\n type=\"longitude\"\r\n latLongPattern=\"DDMMSS\"\r\n defaultSign=\"-\"\r\n placeholder=\"Longitude\"\r\n [appearance]=\"appearance\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"geoPositionMessage\">\r\n <ion-col>{{ geoPositionMessage }}</ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-content>\r\n </ion-card>\r\n </form>\r\n }\r\n </form>\r\n</ion-content>\r\n\r\n<ng-template #mainTest let-mobile=\"mobile\">\r\n <!-- Empty value -->\r\n <form *ngIf=\"form | formGetGroup: 'empty' as formGroup\" [formGroup]=\"formGroup\">\r\n <ion-grid>\r\n <ion-row>\r\n <ion-col>\r\n <mat-checkbox (change)=\"toggleAppearance($event)\">Change apparence</mat-checkbox>\r\n </ion-col>\r\n </ion-row>\r\n\r\n <ion-row>\r\n <ion-col>\r\n <ion-text><h4>Empty, with defaults</h4></ion-text>\r\n </ion-col>\r\n </ion-row>\r\n\r\n <ion-row>\r\n <!-- DD Default sign -->\r\n <ion-col>\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">Format DD, defaultSign '-'</ion-label>\r\n </ion-card-title>\r\n <ion-card-subtitle>\r\n <ion-text color=\"medium\">\r\n <small>\r\n <pre>{{ stringify(formGroup.value) }}</pre>\r\n </small>\r\n </ion-text>\r\n </ion-card-subtitle>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"latitude\"\r\n type=\"latitude\"\r\n latLongPattern=\"DD\"\r\n defaultSign=\"-\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button matSuffix mat-icon-button (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"longitude\"\r\n type=\"longitude\"\r\n latLongPattern=\"DD\"\r\n defaultSign=\"-\"\r\n placeholder=\"Longitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"geoPositionMessage\">\r\n <ion-col>{{ geoPositionMessage }}</ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-content>\r\n </ion-card>\r\n </ion-col>\r\n\r\n <!-- DDMM Default sign -->\r\n <ion-col>\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">Format DDMM, defaultSign '+'</ion-label>\r\n </ion-card-title>\r\n <ion-card-subtitle>\r\n <ion-text color=\"medium\">\r\n <small>\r\n <pre>{{ stringify(formGroup.value) }}</pre>\r\n </small>\r\n </ion-text>\r\n </ion-card-subtitle>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"latitude\"\r\n type=\"latitude\"\r\n latLongPattern=\"DDMM\"\r\n defaultSign=\"+\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"longitude\"\r\n type=\"longitude\"\r\n latLongPattern=\"DDMM\"\r\n defaultSign=\"+\"\r\n placeholder=\"Longitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-content>\r\n </ion-card>\r\n </ion-col>\r\n\r\n <!-- DDMMSS Default sign -->\r\n <ion-col>\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">Format DDMMSS, defaultSign '+'</ion-label>\r\n </ion-card-title>\r\n <ion-card-subtitle>\r\n <ion-text color=\"medium\">\r\n <small>\r\n <pre>{{ stringify(formGroup.value) }}</pre>\r\n </small>\r\n </ion-text>\r\n </ion-card-subtitle>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"latitude\"\r\n type=\"latitude\"\r\n latLongPattern=\"DDMMSS\"\r\n defaultSign=\"+\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"longitude\"\r\n type=\"longitude\"\r\n latLongPattern=\"DDMMSS\"\r\n defaultSign=\"+\"\r\n placeholder=\"Longitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-content>\r\n </ion-card>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </form>\r\n\r\n <!-- Empty value -->\r\n <form *ngIf=\"form | formGetGroup: 'emptyRequired' as formGroup\" [formGroup]=\"formGroup\">\r\n <ion-grid>\r\n <ion-row>\r\n <ion-col>\r\n <ion-text><h4>Empty, required (no defaults)</h4></ion-text>\r\n </ion-col>\r\n </ion-row>\r\n\r\n <ion-row>\r\n <!-- DD -->\r\n <ion-col>\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">Format DD, required</ion-label>\r\n </ion-card-title>\r\n <ion-card-subtitle>\r\n <ion-text color=\"medium\">\r\n <small>\r\n <pre>{{ stringify(formGroup.value) }}</pre>\r\n </small>\r\n </ion-text>\r\n </ion-card-subtitle>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"latitude\"\r\n type=\"latitude\"\r\n latLongPattern=\"DD\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button matSuffix mat-icon-button (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"longitude\"\r\n type=\"longitude\"\r\n latLongPattern=\"DD\"\r\n placeholder=\"Longitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"geoPositionMessage\">\r\n <ion-col>{{ geoPositionMessage }}</ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-content>\r\n </ion-card>\r\n </ion-col>\r\n\r\n <!-- DDMM -->\r\n <ion-col>\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">Format DDMM, required</ion-label>\r\n </ion-card-title>\r\n <ion-card-subtitle>\r\n <ion-text color=\"medium\">\r\n <small>\r\n <pre>{{ stringify(formGroup.value) }}</pre>\r\n </small>\r\n </ion-text>\r\n </ion-card-subtitle>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"latitude\"\r\n type=\"latitude\"\r\n latLongPattern=\"DDMM\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"longitude\"\r\n type=\"longitude\"\r\n latLongPattern=\"DDMM\"\r\n placeholder=\"Longitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-content>\r\n </ion-card>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </form>\r\n\r\n <form *ngIf=\"form | formGetGroup: 'enable' as formGroup\" [formGroup]=\"formGroup\">\r\n <ion-grid>\r\n <!-- With value -->\r\n <ion-row>\r\n <ion-col>\r\n <ion-text><h4>With value</h4></ion-text>\r\n </ion-col>\r\n </ion-row>\r\n\r\n <ion-row>\r\n <!-- DD -->\r\n <ion-col>\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">Format DD</ion-label>\r\n </ion-card-title>\r\n <ion-card-subtitle>\r\n <ion-text color=\"medium\">\r\n <small>\r\n <pre>{{ stringify(formGroup.value) }}</pre>\r\n </small>\r\n </ion-text>\r\n </ion-card-subtitle>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"latitude\"\r\n type=\"latitude\"\r\n latLongPattern=\"DD\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n ></mat-latlong-field>\r\n </ion-col>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"longitude\"\r\n type=\"longitude\"\r\n latLongPattern=\"DD\"\r\n placeholder=\"Longitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n ></mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-content>\r\n </ion-card>\r\n </ion-col>\r\n\r\n <!-- DDMMSS -->\r\n <ion-col>\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">Format DDMM</ion-label>\r\n </ion-card-title>\r\n <ion-card-subtitle>\r\n <ion-text color=\"medium\">\r\n <small>\r\n <pre>{{ stringify(formGroup.value) }}</pre>\r\n </small>\r\n </ion-text>\r\n </ion-card-subtitle>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"latitude\"\r\n type=\"latitude\"\r\n latLongPattern=\"DDMM\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n ></mat-latlong-field>\r\n </ion-col>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"longitude\"\r\n type=\"longitude\"\r\n latLongPattern=\"DDMM\"\r\n placeholder=\"Longitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n ></mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-content>\r\n </ion-card>\r\n </ion-col>\r\n\r\n <!-- DDMMSS -->\r\n <ion-col>\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">Format DDMMSS</ion-label>\r\n </ion-card-title>\r\n <ion-card-subtitle>\r\n <ion-text color=\"medium\">\r\n <small>\r\n <pre>{{ stringify(formGroup.value) }}</pre>\r\n </small>\r\n </ion-text>\r\n </ion-card-subtitle>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"latitude\"\r\n type=\"latitude\"\r\n latLongPattern=\"DDMMSS\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n ></mat-latlong-field>\r\n </ion-col>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"longitude\"\r\n type=\"longitude\"\r\n latLongPattern=\"DDMMSS\"\r\n placeholder=\"Longitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n ></mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-content>\r\n </ion-card>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </form>\r\n\r\n <!-- Disable -->\r\n <form *ngIf=\"form | formGetGroup: 'disable' as formGroup\" [formGroup]=\"formGroup\">\r\n <ion-grid>\r\n <ion-row>\r\n <ion-col>\r\n <ion-text><h4>Disabled control</h4></ion-text>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row>\r\n <ion-col>\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">Disabled control</ion-label>\r\n </ion-card-title>\r\n <ion-card-subtitle>\r\n <ion-text color=\"medium\">\r\n <small>\r\n <pre>{{ stringify(formGroup.value) }}</pre>\r\n </small>\r\n </ion-text>\r\n </ion-card-subtitle>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"latitude\"\r\n type=\"latitude\"\r\n latLongPattern=\"DDMM\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <mat-icon matSuffix>gps_fixed</mat-icon>\r\n </mat-latlong-field>\r\n </ion-col>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"longitude\"\r\n type=\"longitude\"\r\n latLongPattern=\"DDMM\"\r\n placeholder=\"Longitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-content>\r\n </ion-card>\r\n </ion-col>\r\n\r\n <ion-col>\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">Readonly (control is enable)</ion-label>\r\n </ion-card-title>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <mat-checkbox\r\n (change)=\"readonlyField.readonly = $event.checked\"\r\n [checked]=\"readonlyField.readonly\"\r\n ></mat-checkbox>\r\n\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row>\r\n <ion-col>\r\n <mat-latlong-field\r\n #readonlyField\r\n [formControl]=\"form | formGetControl: 'enable.latitude'\"\r\n type=\"latitude\"\r\n latLongPattern=\"DDMM\"\r\n placeholder=\"Latitude\"\r\n [readonly]=\"true\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <mat-icon matSuffix>gps_fixed</mat-icon>\r\n </mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-content>\r\n </ion-card>\r\n </ion-col>\r\n\r\n <ion-col>\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">With hint</ion-label>\r\n </ion-card-title>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <mat-latlong-field\r\n #readonlyField\r\n [formControl]=\"form | formGetControl: 'enable.latitude'\"\r\n type=\"latitude\"\r\n latLongPattern=\"DDMM\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-hint align=\"end\">This is a long long hint</mat-hint>\r\n </mat-latlong-field>\r\n </ion-card-content>\r\n </ion-card>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </form>\r\n</ng-template>\r\n\r\n<ng-template #newComponent let-formGroupName=\"formGroup\" let-pattern=\"latLongPattern\" let-required=\"required\">\r\n <form *ngIf=\"form | formGetGroup: formGroupName as formGroup\" [formGroup]=\"formGroup\">\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">{{ formGroupName }}</ion-label>\r\n </ion-card-title>\r\n <ion-card-subtitle>\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row class=\"ion-no-padding\">\r\n <ion-col class=\"ion-no-padding\">\r\n <ion-text color=\"medium\">\r\n <small>\r\n <pre>{{ formGroup.value | json }}</pre>\r\n <pre>invalid ? : {{ (formGroup | formGetControl: 'latitude').invalid }}</pre>\r\n <pre>touched ? : {{ (formGroup | formGetControl: 'latitude').touched }}</pre>\r\n <pre>errors : {{ formGroup | formGetGroup: 'latitude' | formError }}</pre>\r\n </small>\r\n </ion-text>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row class=\"ion-no-padding\">\r\n <ion-col class=\"ion-no-padding\" sizeLg=\"6\">\r\n <mat-latlong-field\r\n formControlName=\"latitude\"\r\n type=\"latitude\"\r\n [readonly]=\"true\"\r\n [latLongPattern]=\"pattern\"\r\n defaultSign=\"-\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n ></mat-latlong-field>\r\n </ion-col>\r\n <ion-col sizeLg=\"6\">\r\n <mat-latlong-field\r\n formControlName=\"longitude\"\r\n type=\"longitude\"\r\n [readonly]=\"true\"\r\n [latLongPattern]=\"pattern\"\r\n defaultSign=\"-\"\r\n placeholder=\"Longitude\"\r\n [appearance]=\"appearance\"\r\n ></mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-subtitle>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row>\r\n <ion-col class=\"ion-no-padding\" sizeLg=\"6\">\r\n <mat-latlong-field\r\n formControlName=\"latitude\"\r\n type=\"latitude\"\r\n [latLongPattern]=\"pattern\"\r\n defaultSign=\"-\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n [required]=\"required\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button matSuffix mat-icon-button (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n <ion-col class=\"ion-no-padding\" sizeLg=\"6\">\r\n <mat-latlong-field\r\n formControlName=\"longitude\"\r\n type=\"longitude\"\r\n [latLongPattern]=\"pattern\"\r\n defaultSign=\"-\"\r\n placeholder=\"Longitude\"\r\n [appearance]=\"appearance\"\r\n [required]=\"required\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button matSuffix mat-icon-button (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"geoPositionMessage\">\r\n <ion-col>{{ geoPositionMessage }}</ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-content>\r\n </ion-card>\r\n </form>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i4.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i4.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i4.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i4.IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: i4.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i4.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: i4.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i4.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i4.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i4.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i4.IonRow, selector: "ion-row" }, { kind: "component", type: i4.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i4.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i4.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i4.IonBackButton, selector: "ion-back-button" }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i9.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i10.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i11.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["fitInkBarToContent", "mat-stretch-tabs", "animationDuration", "backgroundColor", "disableRipple", "color", "tabPanel"], exportAs: ["matTabNavBar", "matTabNav"] }, { kind: "component", type: i11.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["active", "disabled", "disableRipple", "tabIndex", "id"], exportAs: ["matTabLink"] }, { kind: "component", type: i12.MatLatLongField, selector: "mat-latlong-field", inputs: ["formControl", "formControlName", "type", "latLongPattern", "maxDecimals", "required", "floatLabel", "placeholder", "defaultSign", "autofocus", "mobile", "degreesSymbolUnit", "minutesSymbolUnit", "secondsSymbolUnit", "clearable", "class", "tabindex", "appearance", "readonly", "subscriptSizing"], outputs: ["keyup.enter", "blur", "focus"] }, { kind: "pipe", type: i3.JsonPipe, name: "json" }, { kind: "pipe", type: i13.FormErrorPipe, name: "formError" }, { kind: "pipe", type: i13.FormGetControlPipe, name: "formGetControl" }, { kind: "pipe", type: i13.FormGetGroupPipe, name: "formGetGroup" }] });
|
|
124
124
|
}
|
|
125
125
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: LatLongTestPage, decorators: [{
|
|
126
126
|
type: Component,
|
|
127
|
-
args: [{ selector: 'app-latlong-test', template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Lat/Long field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <!-- Tab nav - desktop mode -->\n <nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\n <a mat-tab-link [active]=\"mode === 'mobile'\" (click)=\"toggleMode('mobile')\">\n <mat-label>Mobile</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode === 'desktop'\" (click)=\"toggleMode('desktop')\">\n <mat-label>Desktop</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode === 'dev'\" (click)=\"toggleMode('dev')\">\n <mat-label>Dev</mat-label>\n </a>\n <a mat-tab-link [active]=\"mode === 'temp'\" (click)=\"toggleMode('temp')\">\n <mat-label>Temporary</mat-label>\n </a>\n </nav>\n\n <form #tabPanel class=\"form-container ion-padding\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n @if (mode === 'mobile') {\n <ng-container *ngTemplateOutlet=\"mainTest; context: { mobile: true }\"></ng-container>\n } @else if (mode === 'desktop') {\n <ng-container *ngTemplateOutlet=\"mainTest; context: { mobile: false }\"></ng-container>\n } @else if (mode === 'dev') {\n <ion-grid>\n <ion-row>\n <ion-col>\n <mat-checkbox (change)=\"toggleAppearance($event)\">Change apparence</mat-checkbox>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n <mat-form-field [appearance]=\"appearance\" [subscriptSizing]=\"'dynamic'\">\n <mat-label>LatLongFormat</mat-label>\n <mat-select #selectLatLongFormat [(value)]=\"selectedFormat\">\n <mat-option value=\"DDMM\" selected>DDMM</mat-option>\n <mat-option value=\"DDMMSS\">DDMMSS</mat-option>\n <mat-option value=\"DD\">DD</mat-option>\n </mat-select>\n </mat-form-field>\n </ion-col>\n </ion-row>\n @switch (selectedFormat) {\n @case ('DDMM') {\n <ion-row>\n <ion-col>\n <ng-container\n *ngTemplateOutlet=\"\n newComponent;\n context: { formGroup: 'empty', latLongPattern: 'DDMM', required: false }\n \"\n ></ng-container>\n </ion-col>\n <ion-col>\n <ng-container\n *ngTemplateOutlet=\"\n newComponent;\n context: { formGroup: 'enable', latLongPattern: 'DDMM', required: true }\n \"\n ></ng-container>\n </ion-col>\n <!-- <ion-col> -->\n <!-- <ng-container -->\n <!-- *ngTemplateOutlet=\"testV2; context: { formGroup: 'disable', latLongPattern: 'DDMM', required: true }\" -->\n <!-- ></ng-container> -->\n <!-- </ion-col> -->\n </ion-row>\n }\n @case ('DDMMSS') {\n <ion-row>\n <!-- DDMMSS -->\n <ion-col>\n <ng-container\n *ngTemplateOutlet=\"\n newComponent;\n context: { formGroup: 'empty', latLongPattern: 'DDMMSS', required: false }\n \"\n ></ng-container>\n </ion-col>\n <ion-col>\n <ng-container\n *ngTemplateOutlet=\"\n newComponent;\n context: { formGroup: 'enable', latLongPattern: 'DDMMSS', required: true }\n \"\n ></ng-container>\n </ion-col>\n <ion-col>\n <ng-container\n *ngTemplateOutlet=\"\n newComponent;\n context: { formGroup: 'disable', latLongPattern: 'DDMMSS', required: true }\n \"\n ></ng-container>\n </ion-col>\n </ion-row>\n }\n @case ('DD') {\n <ion-row>\n <!-- DDMMSS -->\n <ion-col>\n <ng-container\n *ngTemplateOutlet=\"\n newComponent;\n context: { formGroup: 'empty', latLongPattern: 'DD', required: false }\n \"\n ></ng-container>\n </ion-col>\n <ion-col>\n <ng-container\n *ngTemplateOutlet=\"\n newComponent;\n context: { formGroup: 'enable', latLongPattern: 'DD', required: true }\n \"\n ></ng-container>\n </ion-col>\n <ion-col>\n <ng-container\n *ngTemplateOutlet=\"\n newComponent;\n context: { formGroup: 'disable', latLongPattern: 'DD', required: true }\n \"\n ></ng-container>\n </ion-col>\n </ion-row>\n }\n }\n </ion-grid>\n } @else {\n <!-- Temporay TAB (for DEV) -->\n <form *ngIf=\"form | formGetGroup: 'enable' as formGroup\" [formGroup]=\"formGroup\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Format DD, defaultSign '-'</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{ formGroup.value | json }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field\n formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DDMMSS\"\n defaultSign=\"-\"\n [required]=\"true\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button matSuffix mat-icon-button (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field\n formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DDMMSS\"\n defaultSign=\"-\"\n placeholder=\"Longitude\"\n [appearance]=\"appearance\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n </ion-row>\n <ion-row *ngIf=\"geoPositionMessage\">\n <ion-col>{{ geoPositionMessage }}</ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </form>\n }\n </form>\n</ion-content>\n\n<ng-template #mainTest let-mobile=\"mobile\">\n <!-- Empty value -->\n <form *ngIf=\"form | formGetGroup: 'empty' as formGroup\" [formGroup]=\"formGroup\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <mat-checkbox (change)=\"toggleAppearance($event)\">Change apparence</mat-checkbox>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>\n <ion-text><h4>Empty, with defaults</h4></ion-text>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <!-- DD Default sign -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Format DD, defaultSign '-'</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{ stringify(formGroup.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field\n formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DD\"\n defaultSign=\"-\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button matSuffix mat-icon-button (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field\n formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DD\"\n defaultSign=\"-\"\n placeholder=\"Longitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n </ion-row>\n <ion-row *ngIf=\"geoPositionMessage\">\n <ion-col>{{ geoPositionMessage }}</ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- DDMM Default sign -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Format DDMM, defaultSign '+'</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{ stringify(formGroup.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field\n formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DDMM\"\n defaultSign=\"+\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field\n formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DDMM\"\n defaultSign=\"+\"\n placeholder=\"Longitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- DDMMSS Default sign -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Format DDMMSS, defaultSign '+'</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{ stringify(formGroup.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field\n formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DDMMSS\"\n defaultSign=\"+\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field\n formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DDMMSS\"\n defaultSign=\"+\"\n placeholder=\"Longitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n\n <!-- Empty value -->\n <form *ngIf=\"form | formGetGroup: 'emptyRequired' as formGroup\" [formGroup]=\"formGroup\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <ion-text><h4>Empty, required (no defaults)</h4></ion-text>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <!-- DD -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Format DD, required</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{ stringify(formGroup.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field\n formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DD\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button matSuffix mat-icon-button (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field\n formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DD\"\n placeholder=\"Longitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n </ion-row>\n <ion-row *ngIf=\"geoPositionMessage\">\n <ion-col>{{ geoPositionMessage }}</ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- DDMM -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Format DDMM, required</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{ stringify(formGroup.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field\n formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DDMM\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field\n formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DDMM\"\n placeholder=\"Longitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n\n <form *ngIf=\"form | formGetGroup: 'enable' as formGroup\" [formGroup]=\"formGroup\">\n <ion-grid>\n <!-- With value -->\n <ion-row>\n <ion-col>\n <ion-text><h4>With value</h4></ion-text>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <!-- DD -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Format DD</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{ stringify(formGroup.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field\n formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DD\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n ></mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field\n formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DD\"\n placeholder=\"Longitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n ></mat-latlong-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- DDMMSS -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Format DDMM</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{ stringify(formGroup.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field\n formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DDMM\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n ></mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field\n formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DDMM\"\n placeholder=\"Longitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n ></mat-latlong-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!-- DDMMSS -->\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Format DDMMSS</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{ stringify(formGroup.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field\n formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DDMMSS\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n ></mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field\n formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DDMMSS\"\n placeholder=\"Longitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n ></mat-latlong-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n\n <!-- Disable -->\n <form *ngIf=\"form | formGetGroup: 'disable' as formGroup\" [formGroup]=\"formGroup\">\n <ion-grid>\n <ion-row>\n <ion-col>\n <ion-text><h4>Disabled control</h4></ion-text>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled control</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>{{ stringify(formGroup.value) }}</pre>\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field\n formControlName=\"latitude\"\n type=\"latitude\"\n latLongPattern=\"DDMM\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <mat-icon matSuffix>gps_fixed</mat-icon>\n </mat-latlong-field>\n </ion-col>\n <ion-col>\n <mat-latlong-field\n formControlName=\"longitude\"\n type=\"longitude\"\n latLongPattern=\"DDMM\"\n placeholder=\"Longitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Readonly (control is enable)</ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-checkbox\n (change)=\"readonlyField.readonly = $event.checked\"\n [checked]=\"readonlyField.readonly\"\n ></mat-checkbox>\n\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-latlong-field\n #readonlyField\n [formControl]=\"form | formGetControl: 'enable.latitude'\"\n type=\"latitude\"\n latLongPattern=\"DDMM\"\n placeholder=\"Latitude\"\n [readonly]=\"true\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <mat-icon matSuffix>gps_fixed</mat-icon>\n </mat-latlong-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">With hint</ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-latlong-field\n #readonlyField\n [formControl]=\"form | formGetControl: 'enable.latitude'\"\n type=\"latitude\"\n latLongPattern=\"DDMM\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n [mobile]=\"mobile\"\n >\n <mat-hint align=\"end\">This is a long long hint</mat-hint>\n </mat-latlong-field>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n</ng-template>\n\n<ng-template #newComponent let-formGroupName=\"formGroup\" let-pattern=\"latLongPattern\" let-required=\"required\">\n <form *ngIf=\"form | formGetGroup: formGroupName as formGroup\" [formGroup]=\"formGroup\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">{{ formGroupName }}</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-grid class=\"ion-no-padding\">\n <ion-row class=\"ion-no-padding\">\n <ion-col class=\"ion-no-padding\">\n <ion-text color=\"medium\">\n <small>\n <pre>{{ formGroup.value | json }}</pre>\n <pre>invalid ? : {{ (formGroup | formGetControl: 'latitude').invalid }}</pre>\n <pre>touched ? : {{ (formGroup | formGetControl: 'latitude').touched }}</pre>\n <pre>errors : {{ formGroup | formGetGroup: 'latitude' | formError }}</pre>\n </small>\n </ion-text>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n <ion-col class=\"ion-no-padding\" sizeLg=\"6\">\n <mat-latlong-field\n formControlName=\"latitude\"\n type=\"latitude\"\n [readonly]=\"true\"\n [latLongPattern]=\"pattern\"\n defaultSign=\"-\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n ></mat-latlong-field>\n </ion-col>\n <ion-col sizeLg=\"6\">\n <mat-latlong-field\n formControlName=\"longitude\"\n type=\"longitude\"\n [readonly]=\"true\"\n [latLongPattern]=\"pattern\"\n defaultSign=\"-\"\n placeholder=\"Longitude\"\n [appearance]=\"appearance\"\n ></mat-latlong-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col class=\"ion-no-padding\" sizeLg=\"6\">\n <mat-latlong-field\n formControlName=\"latitude\"\n type=\"latitude\"\n [latLongPattern]=\"pattern\"\n defaultSign=\"-\"\n placeholder=\"Latitude\"\n [appearance]=\"appearance\"\n [required]=\"required\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button matSuffix mat-icon-button (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n <ion-col class=\"ion-no-padding\" sizeLg=\"6\">\n <mat-latlong-field\n formControlName=\"longitude\"\n type=\"longitude\"\n [latLongPattern]=\"pattern\"\n defaultSign=\"-\"\n placeholder=\"Longitude\"\n [appearance]=\"appearance\"\n [required]=\"required\"\n >\n <mat-icon matPrefix>room</mat-icon>\n <button matSuffix mat-icon-button (click)=\"geoPosition($event)\">\n <mat-icon>gps_fixed</mat-icon>\n </button>\n </mat-latlong-field>\n </ion-col>\n </ion-row>\n <ion-row *ngIf=\"geoPositionMessage\">\n <ion-col>{{ geoPositionMessage }}</ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </form>\n</ng-template>\n" }]
|
|
127
|
+
args: [{ selector: 'app-latlong-test', template: "<ion-header>\r\n <ion-toolbar color=\"primary\">\r\n <ion-buttons slot=\"start\">\r\n <ion-back-button></ion-back-button>\r\n </ion-buttons>\r\n\r\n <ion-title>Lat/Long field test page</ion-title>\r\n </ion-toolbar>\r\n</ion-header>\r\n\r\n<ion-content>\r\n <!-- Tab nav - desktop mode -->\r\n <nav mat-tab-nav-bar [tabPanel]=\"tabPanel\">\r\n <a mat-tab-link [active]=\"mode === 'mobile'\" (click)=\"toggleMode('mobile')\">\r\n <mat-label>Mobile</mat-label>\r\n </a>\r\n <a mat-tab-link [active]=\"mode === 'desktop'\" (click)=\"toggleMode('desktop')\">\r\n <mat-label>Desktop</mat-label>\r\n </a>\r\n <a mat-tab-link [active]=\"mode === 'dev'\" (click)=\"toggleMode('dev')\">\r\n <mat-label>Dev</mat-label>\r\n </a>\r\n <a mat-tab-link [active]=\"mode === 'temp'\" (click)=\"toggleMode('temp')\">\r\n <mat-label>Temporary</mat-label>\r\n </a>\r\n </nav>\r\n\r\n <form #tabPanel class=\"form-container ion-padding\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\r\n @if (mode === 'mobile') {\r\n <ng-container *ngTemplateOutlet=\"mainTest; context: { mobile: true }\"></ng-container>\r\n } @else if (mode === 'desktop') {\r\n <ng-container *ngTemplateOutlet=\"mainTest; context: { mobile: false }\"></ng-container>\r\n } @else if (mode === 'dev') {\r\n <ion-grid>\r\n <ion-row>\r\n <ion-col>\r\n <mat-checkbox (change)=\"toggleAppearance($event)\">Change apparence</mat-checkbox>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row>\r\n <ion-col>\r\n <mat-form-field [appearance]=\"appearance\" [subscriptSizing]=\"'dynamic'\">\r\n <mat-label>LatLongFormat</mat-label>\r\n <mat-select #selectLatLongFormat [(value)]=\"selectedFormat\">\r\n <mat-option value=\"DDMM\" selected>DDMM</mat-option>\r\n <mat-option value=\"DDMMSS\">DDMMSS</mat-option>\r\n <mat-option value=\"DD\">DD</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ion-col>\r\n </ion-row>\r\n @switch (selectedFormat) {\r\n @case ('DDMM') {\r\n <ion-row>\r\n <ion-col>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n newComponent;\r\n context: { formGroup: 'empty', latLongPattern: 'DDMM', required: false }\r\n \"\r\n ></ng-container>\r\n </ion-col>\r\n <ion-col>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n newComponent;\r\n context: { formGroup: 'enable', latLongPattern: 'DDMM', required: true }\r\n \"\r\n ></ng-container>\r\n </ion-col>\r\n <!-- <ion-col> -->\r\n <!-- <ng-container -->\r\n <!-- *ngTemplateOutlet=\"testV2; context: { formGroup: 'disable', latLongPattern: 'DDMM', required: true }\" -->\r\n <!-- ></ng-container> -->\r\n <!-- </ion-col> -->\r\n </ion-row>\r\n }\r\n @case ('DDMMSS') {\r\n <ion-row>\r\n <!-- DDMMSS -->\r\n <ion-col>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n newComponent;\r\n context: { formGroup: 'empty', latLongPattern: 'DDMMSS', required: false }\r\n \"\r\n ></ng-container>\r\n </ion-col>\r\n <ion-col>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n newComponent;\r\n context: { formGroup: 'enable', latLongPattern: 'DDMMSS', required: true }\r\n \"\r\n ></ng-container>\r\n </ion-col>\r\n <ion-col>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n newComponent;\r\n context: { formGroup: 'disable', latLongPattern: 'DDMMSS', required: true }\r\n \"\r\n ></ng-container>\r\n </ion-col>\r\n </ion-row>\r\n }\r\n @case ('DD') {\r\n <ion-row>\r\n <!-- DDMMSS -->\r\n <ion-col>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n newComponent;\r\n context: { formGroup: 'empty', latLongPattern: 'DD', required: false }\r\n \"\r\n ></ng-container>\r\n </ion-col>\r\n <ion-col>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n newComponent;\r\n context: { formGroup: 'enable', latLongPattern: 'DD', required: true }\r\n \"\r\n ></ng-container>\r\n </ion-col>\r\n <ion-col>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n newComponent;\r\n context: { formGroup: 'disable', latLongPattern: 'DD', required: true }\r\n \"\r\n ></ng-container>\r\n </ion-col>\r\n </ion-row>\r\n }\r\n }\r\n </ion-grid>\r\n } @else {\r\n <!-- Temporay TAB (for DEV) -->\r\n <form *ngIf=\"form | formGetGroup: 'enable' as formGroup\" [formGroup]=\"formGroup\">\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">Format DD, defaultSign '-'</ion-label>\r\n </ion-card-title>\r\n <ion-card-subtitle>\r\n <ion-text color=\"medium\">\r\n <small>\r\n <pre>{{ formGroup.value | json }}</pre>\r\n </small>\r\n </ion-text>\r\n </ion-card-subtitle>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"latitude\"\r\n type=\"latitude\"\r\n latLongPattern=\"DDMMSS\"\r\n defaultSign=\"-\"\r\n [required]=\"true\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button matSuffix mat-icon-button (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"longitude\"\r\n type=\"longitude\"\r\n latLongPattern=\"DDMMSS\"\r\n defaultSign=\"-\"\r\n placeholder=\"Longitude\"\r\n [appearance]=\"appearance\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"geoPositionMessage\">\r\n <ion-col>{{ geoPositionMessage }}</ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-content>\r\n </ion-card>\r\n </form>\r\n }\r\n </form>\r\n</ion-content>\r\n\r\n<ng-template #mainTest let-mobile=\"mobile\">\r\n <!-- Empty value -->\r\n <form *ngIf=\"form | formGetGroup: 'empty' as formGroup\" [formGroup]=\"formGroup\">\r\n <ion-grid>\r\n <ion-row>\r\n <ion-col>\r\n <mat-checkbox (change)=\"toggleAppearance($event)\">Change apparence</mat-checkbox>\r\n </ion-col>\r\n </ion-row>\r\n\r\n <ion-row>\r\n <ion-col>\r\n <ion-text><h4>Empty, with defaults</h4></ion-text>\r\n </ion-col>\r\n </ion-row>\r\n\r\n <ion-row>\r\n <!-- DD Default sign -->\r\n <ion-col>\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">Format DD, defaultSign '-'</ion-label>\r\n </ion-card-title>\r\n <ion-card-subtitle>\r\n <ion-text color=\"medium\">\r\n <small>\r\n <pre>{{ stringify(formGroup.value) }}</pre>\r\n </small>\r\n </ion-text>\r\n </ion-card-subtitle>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"latitude\"\r\n type=\"latitude\"\r\n latLongPattern=\"DD\"\r\n defaultSign=\"-\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button matSuffix mat-icon-button (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"longitude\"\r\n type=\"longitude\"\r\n latLongPattern=\"DD\"\r\n defaultSign=\"-\"\r\n placeholder=\"Longitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"geoPositionMessage\">\r\n <ion-col>{{ geoPositionMessage }}</ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-content>\r\n </ion-card>\r\n </ion-col>\r\n\r\n <!-- DDMM Default sign -->\r\n <ion-col>\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">Format DDMM, defaultSign '+'</ion-label>\r\n </ion-card-title>\r\n <ion-card-subtitle>\r\n <ion-text color=\"medium\">\r\n <small>\r\n <pre>{{ stringify(formGroup.value) }}</pre>\r\n </small>\r\n </ion-text>\r\n </ion-card-subtitle>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"latitude\"\r\n type=\"latitude\"\r\n latLongPattern=\"DDMM\"\r\n defaultSign=\"+\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"longitude\"\r\n type=\"longitude\"\r\n latLongPattern=\"DDMM\"\r\n defaultSign=\"+\"\r\n placeholder=\"Longitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-content>\r\n </ion-card>\r\n </ion-col>\r\n\r\n <!-- DDMMSS Default sign -->\r\n <ion-col>\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">Format DDMMSS, defaultSign '+'</ion-label>\r\n </ion-card-title>\r\n <ion-card-subtitle>\r\n <ion-text color=\"medium\">\r\n <small>\r\n <pre>{{ stringify(formGroup.value) }}</pre>\r\n </small>\r\n </ion-text>\r\n </ion-card-subtitle>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"latitude\"\r\n type=\"latitude\"\r\n latLongPattern=\"DDMMSS\"\r\n defaultSign=\"+\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"longitude\"\r\n type=\"longitude\"\r\n latLongPattern=\"DDMMSS\"\r\n defaultSign=\"+\"\r\n placeholder=\"Longitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-content>\r\n </ion-card>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </form>\r\n\r\n <!-- Empty value -->\r\n <form *ngIf=\"form | formGetGroup: 'emptyRequired' as formGroup\" [formGroup]=\"formGroup\">\r\n <ion-grid>\r\n <ion-row>\r\n <ion-col>\r\n <ion-text><h4>Empty, required (no defaults)</h4></ion-text>\r\n </ion-col>\r\n </ion-row>\r\n\r\n <ion-row>\r\n <!-- DD -->\r\n <ion-col>\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">Format DD, required</ion-label>\r\n </ion-card-title>\r\n <ion-card-subtitle>\r\n <ion-text color=\"medium\">\r\n <small>\r\n <pre>{{ stringify(formGroup.value) }}</pre>\r\n </small>\r\n </ion-text>\r\n </ion-card-subtitle>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"latitude\"\r\n type=\"latitude\"\r\n latLongPattern=\"DD\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button matSuffix mat-icon-button (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"longitude\"\r\n type=\"longitude\"\r\n latLongPattern=\"DD\"\r\n placeholder=\"Longitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"geoPositionMessage\">\r\n <ion-col>{{ geoPositionMessage }}</ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-content>\r\n </ion-card>\r\n </ion-col>\r\n\r\n <!-- DDMM -->\r\n <ion-col>\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">Format DDMM, required</ion-label>\r\n </ion-card-title>\r\n <ion-card-subtitle>\r\n <ion-text color=\"medium\">\r\n <small>\r\n <pre>{{ stringify(formGroup.value) }}</pre>\r\n </small>\r\n </ion-text>\r\n </ion-card-subtitle>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"latitude\"\r\n type=\"latitude\"\r\n latLongPattern=\"DDMM\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"longitude\"\r\n type=\"longitude\"\r\n latLongPattern=\"DDMM\"\r\n placeholder=\"Longitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-content>\r\n </ion-card>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </form>\r\n\r\n <form *ngIf=\"form | formGetGroup: 'enable' as formGroup\" [formGroup]=\"formGroup\">\r\n <ion-grid>\r\n <!-- With value -->\r\n <ion-row>\r\n <ion-col>\r\n <ion-text><h4>With value</h4></ion-text>\r\n </ion-col>\r\n </ion-row>\r\n\r\n <ion-row>\r\n <!-- DD -->\r\n <ion-col>\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">Format DD</ion-label>\r\n </ion-card-title>\r\n <ion-card-subtitle>\r\n <ion-text color=\"medium\">\r\n <small>\r\n <pre>{{ stringify(formGroup.value) }}</pre>\r\n </small>\r\n </ion-text>\r\n </ion-card-subtitle>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"latitude\"\r\n type=\"latitude\"\r\n latLongPattern=\"DD\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n ></mat-latlong-field>\r\n </ion-col>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"longitude\"\r\n type=\"longitude\"\r\n latLongPattern=\"DD\"\r\n placeholder=\"Longitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n ></mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-content>\r\n </ion-card>\r\n </ion-col>\r\n\r\n <!-- DDMMSS -->\r\n <ion-col>\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">Format DDMM</ion-label>\r\n </ion-card-title>\r\n <ion-card-subtitle>\r\n <ion-text color=\"medium\">\r\n <small>\r\n <pre>{{ stringify(formGroup.value) }}</pre>\r\n </small>\r\n </ion-text>\r\n </ion-card-subtitle>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"latitude\"\r\n type=\"latitude\"\r\n latLongPattern=\"DDMM\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n ></mat-latlong-field>\r\n </ion-col>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"longitude\"\r\n type=\"longitude\"\r\n latLongPattern=\"DDMM\"\r\n placeholder=\"Longitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n ></mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-content>\r\n </ion-card>\r\n </ion-col>\r\n\r\n <!-- DDMMSS -->\r\n <ion-col>\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">Format DDMMSS</ion-label>\r\n </ion-card-title>\r\n <ion-card-subtitle>\r\n <ion-text color=\"medium\">\r\n <small>\r\n <pre>{{ stringify(formGroup.value) }}</pre>\r\n </small>\r\n </ion-text>\r\n </ion-card-subtitle>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"latitude\"\r\n type=\"latitude\"\r\n latLongPattern=\"DDMMSS\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n ></mat-latlong-field>\r\n </ion-col>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"longitude\"\r\n type=\"longitude\"\r\n latLongPattern=\"DDMMSS\"\r\n placeholder=\"Longitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n ></mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-content>\r\n </ion-card>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </form>\r\n\r\n <!-- Disable -->\r\n <form *ngIf=\"form | formGetGroup: 'disable' as formGroup\" [formGroup]=\"formGroup\">\r\n <ion-grid>\r\n <ion-row>\r\n <ion-col>\r\n <ion-text><h4>Disabled control</h4></ion-text>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row>\r\n <ion-col>\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">Disabled control</ion-label>\r\n </ion-card-title>\r\n <ion-card-subtitle>\r\n <ion-text color=\"medium\">\r\n <small>\r\n <pre>{{ stringify(formGroup.value) }}</pre>\r\n </small>\r\n </ion-text>\r\n </ion-card-subtitle>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"latitude\"\r\n type=\"latitude\"\r\n latLongPattern=\"DDMM\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <mat-icon matSuffix>gps_fixed</mat-icon>\r\n </mat-latlong-field>\r\n </ion-col>\r\n <ion-col>\r\n <mat-latlong-field\r\n formControlName=\"longitude\"\r\n type=\"longitude\"\r\n latLongPattern=\"DDMM\"\r\n placeholder=\"Longitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-content>\r\n </ion-card>\r\n </ion-col>\r\n\r\n <ion-col>\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">Readonly (control is enable)</ion-label>\r\n </ion-card-title>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <mat-checkbox\r\n (change)=\"readonlyField.readonly = $event.checked\"\r\n [checked]=\"readonlyField.readonly\"\r\n ></mat-checkbox>\r\n\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row>\r\n <ion-col>\r\n <mat-latlong-field\r\n #readonlyField\r\n [formControl]=\"form | formGetControl: 'enable.latitude'\"\r\n type=\"latitude\"\r\n latLongPattern=\"DDMM\"\r\n placeholder=\"Latitude\"\r\n [readonly]=\"true\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <mat-icon matSuffix>gps_fixed</mat-icon>\r\n </mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-content>\r\n </ion-card>\r\n </ion-col>\r\n\r\n <ion-col>\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">With hint</ion-label>\r\n </ion-card-title>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <mat-latlong-field\r\n #readonlyField\r\n [formControl]=\"form | formGetControl: 'enable.latitude'\"\r\n type=\"latitude\"\r\n latLongPattern=\"DDMM\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n [mobile]=\"mobile\"\r\n >\r\n <mat-hint align=\"end\">This is a long long hint</mat-hint>\r\n </mat-latlong-field>\r\n </ion-card-content>\r\n </ion-card>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </form>\r\n</ng-template>\r\n\r\n<ng-template #newComponent let-formGroupName=\"formGroup\" let-pattern=\"latLongPattern\" let-required=\"required\">\r\n <form *ngIf=\"form | formGetGroup: formGroupName as formGroup\" [formGroup]=\"formGroup\">\r\n <ion-card>\r\n <ion-card-header>\r\n <ion-card-title>\r\n <ion-label color=\"primary\">{{ formGroupName }}</ion-label>\r\n </ion-card-title>\r\n <ion-card-subtitle>\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row class=\"ion-no-padding\">\r\n <ion-col class=\"ion-no-padding\">\r\n <ion-text color=\"medium\">\r\n <small>\r\n <pre>{{ formGroup.value | json }}</pre>\r\n <pre>invalid ? : {{ (formGroup | formGetControl: 'latitude').invalid }}</pre>\r\n <pre>touched ? : {{ (formGroup | formGetControl: 'latitude').touched }}</pre>\r\n <pre>errors : {{ formGroup | formGetGroup: 'latitude' | formError }}</pre>\r\n </small>\r\n </ion-text>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row class=\"ion-no-padding\">\r\n <ion-col class=\"ion-no-padding\" sizeLg=\"6\">\r\n <mat-latlong-field\r\n formControlName=\"latitude\"\r\n type=\"latitude\"\r\n [readonly]=\"true\"\r\n [latLongPattern]=\"pattern\"\r\n defaultSign=\"-\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n ></mat-latlong-field>\r\n </ion-col>\r\n <ion-col sizeLg=\"6\">\r\n <mat-latlong-field\r\n formControlName=\"longitude\"\r\n type=\"longitude\"\r\n [readonly]=\"true\"\r\n [latLongPattern]=\"pattern\"\r\n defaultSign=\"-\"\r\n placeholder=\"Longitude\"\r\n [appearance]=\"appearance\"\r\n ></mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-subtitle>\r\n </ion-card-header>\r\n <ion-card-content>\r\n <ion-grid class=\"ion-no-padding\">\r\n <ion-row>\r\n <ion-col class=\"ion-no-padding\" sizeLg=\"6\">\r\n <mat-latlong-field\r\n formControlName=\"latitude\"\r\n type=\"latitude\"\r\n [latLongPattern]=\"pattern\"\r\n defaultSign=\"-\"\r\n placeholder=\"Latitude\"\r\n [appearance]=\"appearance\"\r\n [required]=\"required\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button matSuffix mat-icon-button (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n <ion-col class=\"ion-no-padding\" sizeLg=\"6\">\r\n <mat-latlong-field\r\n formControlName=\"longitude\"\r\n type=\"longitude\"\r\n [latLongPattern]=\"pattern\"\r\n defaultSign=\"-\"\r\n placeholder=\"Longitude\"\r\n [appearance]=\"appearance\"\r\n [required]=\"required\"\r\n >\r\n <mat-icon matPrefix>room</mat-icon>\r\n <button matSuffix mat-icon-button (click)=\"geoPosition($event)\">\r\n <mat-icon>gps_fixed</mat-icon>\r\n </button>\r\n </mat-latlong-field>\r\n </ion-col>\r\n </ion-row>\r\n <ion-row *ngIf=\"geoPositionMessage\">\r\n <ion-col>{{ geoPositionMessage }}</ion-col>\r\n </ion-row>\r\n </ion-grid>\r\n </ion-card-content>\r\n </ion-card>\r\n </form>\r\n</ng-template>\r\n" }]
|
|
128
128
|
}], ctorParameters: () => [{ type: i1.UntypedFormBuilder }, { type: i2.PlatformService }] });
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF0bG9uZy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvbGF0bG9uZy90ZXN0aW5nL2xhdGxvbmcudGVzdC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvdGVzdGluZy9sYXRsb25nLnRlc3QuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBd0MsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQVMxRSxNQUFNLE9BQU8sZUFBZTtJQVVkO0lBQ0E7SUFWWixJQUFJLENBQW1CO0lBRXZCLGtCQUFrQixDQUFTO0lBRTNCLElBQUksR0FBMEMsUUFBUSxDQUFDO0lBQ3ZELGNBQWMsR0FBRyxNQUFNLENBQUM7SUFDeEIsVUFBVSxHQUEyQixNQUFNLENBQUM7SUFFNUMsWUFDWSxXQUErQixFQUMvQixRQUF5QjtRQUR6QixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDL0IsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFFbkMsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzVCLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDO2dCQUN2QixRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO2dCQUMzQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsU0FBUyxDQUFDO2FBQzlDLENBQUM7WUFDRixhQUFhLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQztnQkFDL0IsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RGLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2FBQ3pGLENBQUM7WUFDRixNQUFNLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQztnQkFDeEIsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztnQkFDM0MsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQzthQUM5QyxDQUFDO1lBQ0YsT0FBTyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUM7Z0JBQ3pCLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7Z0JBQzNDLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7YUFDOUMsQ0FBQztTQUNILENBQUMsQ0FBQztRQUVILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEQsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFM0Isb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFRCxRQUFRO1FBQ04sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQUs7UUFDZCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDcEIsQ0FBQztRQUNELFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELDBCQUEwQjtJQUMxQixLQUFLLENBQUMsUUFBUTtRQUNaLE1BQU0sSUFBSSxHQUFHO1lBQ1gsS0FBSyxFQUFFO2dCQUNMLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFNBQVMsRUFBRSxJQUFJO2FBQ2hCO1lBQ0QsYUFBYSxFQUFFO2dCQUNiLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFNBQVMsRUFBRSxJQUFJO2FBQ2hCO1lBQ0QsTUFBTSxFQUFFO2dCQUNOLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFNBQVMsRUFBRSxDQUFDLENBQUM7YUFDZDtZQUNELE9BQU8sRUFBRTtnQkFDUCxRQUFRLEVBQUUsSUFBSTtnQkFDZCxTQUFTLEVBQUUsQ0FBQyxDQUFDO2FBQ2Q7U0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFZO1FBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFZLEVBQUUsV0FBb0I7UUFDbEQsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVwRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLElBQUksVUFBa0IsQ0FBQztRQUN2QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUN4RSxVQUFVLEVBQUUsS0FBSyxDQUFDLE9BQU87Z0JBQ3pCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztnQkFDdEIsa0JBQWtCLEVBQUUsS0FBSzthQUMxQixDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRTNELFVBQVUsR0FBRyw2QkFBNkIsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ2pFLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsVUFBVSxHQUFHLEdBQUcsRUFBRSxPQUFPLElBQUksR0FBRyxDQUFDO1lBQ2pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7WUFDbEMsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDbkMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUMsQ0FBQztZQUNELFVBQVUsR0FBRyx3QkFBd0IsVUFBVSxZQUFZLFFBQVEsSUFBSSxDQUFDO1FBQzFFLENBQUM7UUFFRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDO1FBRXJDLGlDQUFpQztRQUNqQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUF3QjtRQUN2QyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3ZELENBQUM7SUFFRCxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQzt3R0F4SGhCLGVBQWU7NEZBQWYsZUFBZSx3RENaNUIsaXRoQ0EwMkJBOzs0RkQ5MUJhLGVBQWU7a0JBSjNCLFNBQVM7K0JBQ0Usa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNoYXJlZFZhbGlkYXRvcnMgfSBmcm9tICcuLi8uLi8uLi92YWxpZGF0b3IvdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBHZW9sb2NhdGlvblV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vZ2VvbG9jYXRpb24vZ2VvbG9jYXRpb24udXRpbHMnO1xuaW1wb3J0IHsgUGxhdGZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdENoZWNrYm94Q2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbGF0bG9uZy10ZXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xhdGxvbmcudGVzdC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgTGF0TG9uZ1Rlc3RQYWdlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgZm9ybTogVW50eXBlZEZvcm1Hcm91cDtcblxuICBnZW9Qb3NpdGlvbk1lc3NhZ2U6IHN0cmluZztcblxuICBtb2RlOiAnbW9iaWxlJyB8ICdkZXNrdG9wJyB8ICdkZXYnIHwgJ3RlbXAnID0gJ21vYmlsZSc7XG4gIHNlbGVjdGVkRm9ybWF0ID0gJ0RETU0nO1xuICBhcHBlYXJhbmNlOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlID0gJ2ZpbGwnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm1TZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuZm9ybSA9IGZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGVtcHR5OiBmb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgIGxhdGl0dWRlOiBbbnVsbCwgU2hhcmVkVmFsaWRhdG9ycy5sYXRpdHVkZV0sXG4gICAgICAgIGxvbmdpdHVkZTogW251bGwsIFNoYXJlZFZhbGlkYXRvcnMubG9uZ2l0dWRlXSxcbiAgICAgIH0pLFxuICAgICAgZW1wdHlSZXF1aXJlZDogZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICBsYXRpdHVkZTogW251bGwsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZCwgU2hhcmVkVmFsaWRhdG9ycy5sYXRpdHVkZV0pXSxcbiAgICAgICAgbG9uZ2l0dWRlOiBbbnVsbCwgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBTaGFyZWRWYWxpZGF0b3JzLmxvbmdpdHVkZV0pXSxcbiAgICAgIH0pLFxuICAgICAgZW5hYmxlOiBmb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAgIGxhdGl0dWRlOiBbbnVsbCwgU2hhcmVkVmFsaWRhdG9ycy5sYXRpdHVkZV0sXG4gICAgICAgIGxvbmdpdHVkZTogW251bGwsIFNoYXJlZFZhbGlkYXRvcnMubG9uZ2l0dWRlXSxcbiAgICAgIH0pLFxuICAgICAgZGlzYWJsZTogZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICBsYXRpdHVkZTogW251bGwsIFNoYXJlZFZhbGlkYXRvcnMubGF0aXR1ZGVdLFxuICAgICAgICBsb25naXR1ZGU6IFtudWxsLCBTaGFyZWRWYWxpZGF0b3JzLmxvbmdpdHVkZV0sXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRpc2FibGVGb3JtR3JvdXAgPSB0aGlzLmZvcm0uZ2V0KCdkaXNhYmxlJyk7XG4gICAgZGlzYWJsZUZvcm1Hcm91cC5kaXNhYmxlKCk7XG5cbiAgICAvLyBDb3B5IGVuYWJsZSB2YWx1ZSB0byBkaXNhYmxlIGZvcm1cbiAgICB0aGlzLmZvcm0uZ2V0KCdlbmFibGUnKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gZGlzYWJsZUZvcm1Hcm91cC5zZXRWYWx1ZSh2YWx1ZSkpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmxvYWREYXRhKCksIDI1MCk7XG4gIH1cblxuICB0b2dnbGVNb2RlKHZhbHVlKSB7XG4gICAgaWYgKHRoaXMubW9kZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMubW9kZSA9IHZhbHVlO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubG9hZERhdGEoKSwgMjUwKTtcbiAgfVxuXG4gIC8vIExvYWQgdGhlIGZvcm0gd2l0aCBkYXRhXG4gIGFzeW5jIGxvYWREYXRhKCkge1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBlbXB0eToge1xuICAgICAgICBsYXRpdHVkZTogbnVsbCxcbiAgICAgICAgbG9uZ2l0dWRlOiBudWxsLFxuICAgICAgfSxcbiAgICAgIGVtcHR5UmVxdWlyZWQ6IHtcbiAgICAgICAgbGF0aXR1ZGU6IG51bGwsXG4gICAgICAgIGxvbmdpdHVkZTogbnVsbCxcbiAgICAgIH0sXG4gICAgICBlbmFibGU6IHtcbiAgICAgICAgbGF0aXR1ZGU6IDUwLjEsXG4gICAgICAgIGxvbmdpdHVkZTogLTIsXG4gICAgICB9LFxuICAgICAgZGlzYWJsZToge1xuICAgICAgICBsYXRpdHVkZTogNTAuMSxcbiAgICAgICAgbG9uZ2l0dWRlOiAtMixcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIHRoaXMuZm9ybS5zZXRWYWx1ZShkYXRhKTtcbiAgfVxuXG4gIGRvU3VibWl0KGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnNvbGUuZGVidWcoJ1ZhbGlkYXRlIGZvcm06ICcsIHRoaXMuZm9ybS52YWx1ZSk7XG4gIH1cblxuICBhc3luYyBnZW9Qb3NpdGlvbihldmVudDogRXZlbnQsIGNvbnRyb2xOYW1lPzogc3RyaW5nKSB7XG4gICAgY29uc29sZS5kZWJ1ZygnQ2xpY2sgb24gZ2VvTG9jYXRpb24gYnV0dG9uJywgZXZlbnQpO1xuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGxldCBsb2dNZXNzYWdlOiBzdHJpbmc7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IGF3YWl0IEdlb2xvY2F0aW9uVXRpbHMuZ2V0Q3VycmVudFBvc2l0aW9uKHRoaXMucGxhdGZvcm0sIHtcbiAgICAgICAgbWF4aW11bUFnZTogODAwMDAgLyo4MHMqLyxcbiAgICAgICAgdGltZW91dDogNDAwMDAgLyo0MHMqLyxcbiAgICAgICAgZW5hYmxlSGlnaEFjY3VyYWN5OiBmYWxzZSxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmZvcm0uZ2V0KGNvbnRyb2xOYW1lIHx8ICdlbXB0eScpLnBhdGNoVmFsdWUocG9zaXRpb24pO1xuXG4gICAgICBsb2dNZXNzYWdlID0gYElORk8gKGdlb2xvY2F0aW9uKTogT0sgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYDtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ01lc3NhZ2UgPSBlcnI/Lm1lc3NhZ2UgfHwgZXJyO1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gbm93O1xuICAgICAgaWYgKHR5cGVvZiBsb2dNZXNzYWdlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBsb2dNZXNzYWdlID0gSlNPTi5zdHJpbmdpZnkobG9nTWVzc2FnZSk7XG4gICAgICB9XG4gICAgICBsb2dNZXNzYWdlID0gYEVSUk9SIChnZW9sb2NhdGlvbik6ICR7bG9nTWVzc2FnZX0gLSBhZnRlciAke2R1cmF0aW9ufW1zYDtcbiAgICB9XG5cbiAgICB0aGlzLmdlb1Bvc2l0aW9uTWVzc2FnZSA9IGxvZ01lc3NhZ2U7XG5cbiAgICAvLyBDbGVhbiB0aGUgbG9nIG1lc3NhZ2UsIGlmIHNhbWVcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmdlb1Bvc2l0aW9uTWVzc2FnZSA9PT0gbG9nTWVzc2FnZSkge1xuICAgICAgICB0aGlzLmdlb1Bvc2l0aW9uTWVzc2FnZSA9IG51bGw7XG4gICAgICB9XG4gICAgfSwgNTAwMCk7XG4gIH1cblxuICB0b2dnbGVBcHBlYXJhbmNlKGV2ZW50OiBNYXRDaGVja2JveENoYW5nZSkge1xuICAgIHRoaXMuYXBwZWFyYW5jZSA9IGV2ZW50LmNoZWNrZWQgPyAnb3V0bGluZScgOiAnZmlsbCc7XG4gIH1cblxuICBzdHJpbmdpZnkgPSBKU09OLnN0cmluZ2lmeTtcblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xufVxuIiwiPGlvbi1oZWFkZXI+XG4gIDxpb24tdG9vbGJhciBjb2xvcj1cInByaW1hcnlcIj5cbiAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cInN0YXJ0XCI+XG4gICAgICA8aW9uLWJhY2stYnV0dG9uPjwvaW9uLWJhY2stYnV0dG9uPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG5cbiAgICA8aW9uLXRpdGxlPkxhdC9Mb25nIGZpZWxkIHRlc3QgcGFnZTwvaW9uLXRpdGxlPlxuICA8L2lvbi10b29sYmFyPlxuPC9pb24taGVhZGVyPlxuXG48aW9uLWNvbnRlbnQ+XG4gIDwhLS0gVGFiIG5hdiAtIGRlc2t0b3AgbW9kZSAtLT5cbiAgPG5hdiBtYXQtdGFiLW5hdi1iYXIgW3RhYlBhbmVsXT1cInRhYlBhbmVsXCI+XG4gICAgPGEgbWF0LXRhYi1saW5rIFthY3RpdmVdPVwibW9kZSA9PT0gJ21vYmlsZSdcIiAoY2xpY2spPVwidG9nZ2xlTW9kZSgnbW9iaWxlJylcIj5cbiAgICAgIDxtYXQtbGFiZWw+TW9iaWxlPC9tYXQtbGFiZWw+XG4gICAgPC9hPlxuICAgIDxhIG1hdC10YWItbGluayBbYWN0aXZlXT1cIm1vZGUgPT09ICdkZXNrdG9wJ1wiIChjbGljayk9XCJ0b2dnbGVNb2RlKCdkZXNrdG9wJylcIj5cbiAgICAgIDxtYXQtbGFiZWw+RGVza3RvcDwvbWF0LWxhYmVsPlxuICAgIDwvYT5cbiAgICA8YSBtYXQtdGFiLWxpbmsgW2FjdGl2ZV09XCJtb2RlID09PSAnZGV2J1wiIChjbGljayk9XCJ0b2dnbGVNb2RlKCdkZXYnKVwiPlxuICAgICAgPG1hdC1sYWJlbD5EZXY8L21hdC1sYWJlbD5cbiAgICA8L2E+XG4gICAgPGEgbWF0LXRhYi1saW5rIFthY3RpdmVdPVwibW9kZSA9PT0gJ3RlbXAnXCIgKGNsaWNrKT1cInRvZ2dsZU1vZGUoJ3RlbXAnKVwiPlxuICAgICAgPG1hdC1sYWJlbD5UZW1wb3Jhcnk8L21hdC1sYWJlbD5cbiAgICA8L2E+XG4gIDwvbmF2PlxuXG4gIDxmb3JtICN0YWJQYW5lbCBjbGFzcz1cImZvcm0tY29udGFpbmVyIGlvbi1wYWRkaW5nXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCIgKG5nU3VibWl0KT1cImRvU3VibWl0KCRldmVudClcIj5cbiAgICBAaWYgKG1vZGUgPT09ICdtb2JpbGUnKSB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWFpblRlc3Q7IGNvbnRleHQ6IHsgbW9iaWxlOiB0cnVlIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9IEBlbHNlIGlmIChtb2RlID09PSAnZGVza3RvcCcpIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYWluVGVzdDsgY29udGV4dDogeyBtb2JpbGU6IGZhbHNlIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9IEBlbHNlIGlmIChtb2RlID09PSAnZGV2Jykge1xuICAgICAgPGlvbi1ncmlkPlxuICAgICAgICA8aW9uLXJvdz5cbiAgICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCJ0b2dnbGVBcHBlYXJhbmNlKCRldmVudClcIj5DaGFuZ2UgYXBwYXJlbmNlPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgIDxpb24tcm93PlxuICAgICAgICAgIDxpb24tY29sPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIiBbc3Vic2NyaXB0U2l6aW5nXT1cIidkeW5hbWljJ1wiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPkxhdExvbmdGb3JtYXQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgI3NlbGVjdExhdExvbmdGb3JtYXQgWyh2YWx1ZSldPVwic2VsZWN0ZWRGb3JtYXRcIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkRETU1cIiBzZWxlY3RlZD5ERE1NPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiRERNTVNTXCI+RERNTVNTPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIHZhbHVlPVwiRERcIj5ERDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgQHN3aXRjaCAoc2VsZWN0ZWRGb3JtYXQpIHtcbiAgICAgICAgICBAY2FzZSAoJ0RETU0nKSB7XG4gICAgICAgICAgICA8aW9uLXJvdz5cbiAgICAgICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgbmV3Q29tcG9uZW50O1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7IGZvcm1Hcm91cDogJ2VtcHR5JywgbGF0TG9uZ1BhdHRlcm46ICdERE1NJywgcmVxdWlyZWQ6IGZhbHNlIH1cbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICAgIDxpb24tY29sPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIG5ld0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyBmb3JtR3JvdXA6ICdlbmFibGUnLCBsYXRMb25nUGF0dGVybjogJ0RETU0nLCByZXF1aXJlZDogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICA8IS0tIDxpb24tY29sPiAtLT5cbiAgICAgICAgICAgICAgPCEtLSAgIDxuZy1jb250YWluZXIgLS0+XG4gICAgICAgICAgICAgIDwhLS0gICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVzdFYyOyBjb250ZXh0OiB7IGZvcm1Hcm91cDogJ2Rpc2FibGUnLCBsYXRMb25nUGF0dGVybjogJ0RETU0nLCByZXF1aXJlZDogdHJ1ZSB9XCIgLS0+XG4gICAgICAgICAgICAgIDwhLS0gICA+PC9uZy1jb250YWluZXI+IC0tPlxuICAgICAgICAgICAgICA8IS0tIDwvaW9uLWNvbD4gLS0+XG4gICAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBjYXNlICgnRERNTVNTJykge1xuICAgICAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgICAgIDwhLS0gRERNTVNTIC0tPlxuICAgICAgICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBuZXdDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgZm9ybUdyb3VwOiAnZW1wdHknLCBsYXRMb25nUGF0dGVybjogJ0RETU1TUycsIHJlcXVpcmVkOiBmYWxzZSB9XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBuZXdDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgZm9ybUdyb3VwOiAnZW5hYmxlJywgbGF0TG9uZ1BhdHRlcm46ICdERE1NU1MnLCByZXF1aXJlZDogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBuZXdDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgZm9ybUdyb3VwOiAnZGlzYWJsZScsIGxhdExvbmdQYXR0ZXJuOiAnRERNTVNTJywgcmVxdWlyZWQ6IHRydWUgfVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGNhc2UgKCdERCcpIHtcbiAgICAgICAgICAgIDxpb24tcm93PlxuICAgICAgICAgICAgICA8IS0tIERETU1TUyAtLT5cbiAgICAgICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgbmV3Q29tcG9uZW50O1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7IGZvcm1Hcm91cDogJ2VtcHR5JywgbGF0TG9uZ1BhdHRlcm46ICdERCcsIHJlcXVpcmVkOiBmYWxzZSB9XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICBuZXdDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgZm9ybUdyb3VwOiAnZW5hYmxlJywgbGF0TG9uZ1BhdHRlcm46ICdERCcsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICAgIDxpb24tY29sPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIG5ld0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyBmb3JtR3JvdXA6ICdkaXNhYmxlJywgbGF0TG9uZ1BhdHRlcm46ICdERCcsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2lvbi1ncmlkPlxuICAgIH0gQGVsc2Uge1xuICAgICAgPCEtLSBUZW1wb3JheSBUQUIgKGZvciBERVYpIC0tPlxuICAgICAgPGZvcm0gKm5nSWY9XCJmb3JtIHwgZm9ybUdldEdyb3VwOiAnZW5hYmxlJyBhcyBmb3JtR3JvdXBcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5Gb3JtYXQgREQsIGRlZmF1bHRTaWduICctJzwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgPHByZT57eyBmb3JtR3JvdXAudmFsdWUgfCBqc29uIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICA8aW9uLWdyaWQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICA8aW9uLXJvdz5cbiAgICAgICAgICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGF0bG9uZy1maWVsZFxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsYXRpdHVkZVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJsYXRpdHVkZVwiXG4gICAgICAgICAgICAgICAgICAgIGxhdExvbmdQYXR0ZXJuPVwiRERNTVNTXCJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFNpZ249XCItXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkxhdGl0dWRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRQcmVmaXg+cm9vbTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZ2VvUG9zaXRpb24oJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5ncHNfZml4ZWQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhdGxvbmctZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgIDxpb24tY29sPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYXRsb25nLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxvbmdpdHVkZVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJsb25naXR1ZGVcIlxuICAgICAgICAgICAgICAgICAgICBsYXRMb25nUGF0dGVybj1cIkRETU1TU1wiXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRTaWduPVwiLVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTG9uZ2l0dWRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRQcmVmaXg+cm9vbTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRTdWZmaXggKGNsaWNrKT1cImdlb1Bvc2l0aW9uKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Z3BzX2ZpeGVkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYXRsb25nLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgPC9pb24tcm93PlxuICAgICAgICAgICAgICA8aW9uLXJvdyAqbmdJZj1cImdlb1Bvc2l0aW9uTWVzc2FnZVwiPlxuICAgICAgICAgICAgICAgIDxpb24tY29sPnt7IGdlb1Bvc2l0aW9uTWVzc2FnZSB9fTwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgPC9pb24tcm93PlxuICAgICAgICAgICAgPC9pb24tZ3JpZD5cbiAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICA8L2Zvcm0+XG4gICAgfVxuICA8L2Zvcm0+XG48L2lvbi1jb250ZW50PlxuXG48bmctdGVtcGxhdGUgI21haW5UZXN0IGxldC1tb2JpbGU9XCJtb2JpbGVcIj5cbiAgPCEtLSBFbXB0eSB2YWx1ZSAtLT5cbiAgPGZvcm0gKm5nSWY9XCJmb3JtIHwgZm9ybUdldEdyb3VwOiAnZW1wdHknIGFzIGZvcm1Hcm91cFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gICAgPGlvbi1ncmlkPlxuICAgICAgPGlvbi1yb3c+XG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCJ0b2dnbGVBcHBlYXJhbmNlKCRldmVudClcIj5DaGFuZ2UgYXBwYXJlbmNlPC9tYXQtY2hlY2tib3g+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDwvaW9uLXJvdz5cblxuICAgICAgPGlvbi1yb3c+XG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIDxpb24tdGV4dD48aDQ+RW1wdHksIHdpdGggZGVmYXVsdHM8L2g0PjwvaW9uLXRleHQ+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDwvaW9uLXJvdz5cblxuICAgICAgPGlvbi1yb3c+XG4gICAgICAgIDwhLS0gREQgRGVmYXVsdCBzaWduIC0tPlxuICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5Gb3JtYXQgREQsIGRlZmF1bHRTaWduICctJzwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDxwcmU+e3sgc3RyaW5naWZ5KGZvcm1Hcm91cC52YWx1ZSkgfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxpb24tZ3JpZCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYXRsb25nLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibGF0aXR1ZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJsYXRpdHVkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgbGF0TG9uZ1BhdHRlcm49XCJERFwiXG4gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFNpZ249XCItXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkxhdGl0dWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbW9iaWxlXT1cIm1vYmlsZVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0UHJlZml4PnJvb208L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZ2VvUG9zaXRpb24oJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmdwc19maXhlZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhdGxvbmctZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYXRsb25nLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibG9uZ2l0dWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibG9uZ2l0dWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBsYXRMb25nUGF0dGVybj1cIkREXCJcbiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0U2lnbj1cIi1cIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTG9uZ2l0dWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbW9iaWxlXT1cIm1vYmlsZVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0UHJlZml4PnJvb208L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRTdWZmaXggKGNsaWNrKT1cImdlb1Bvc2l0aW9uKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5ncHNfZml4ZWQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYXRsb25nLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICAgICAgICA8aW9uLXJvdyAqbmdJZj1cImdlb1Bvc2l0aW9uTWVzc2FnZVwiPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+e3sgZ2VvUG9zaXRpb25NZXNzYWdlIH19PC9pb24tY29sPlxuICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICAgICAgPC9pb24tZ3JpZD5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICA8L2lvbi1jb2w+XG5cbiAgICAgICAgPCEtLSBERE1NIERlZmF1bHQgc2lnbiAtLT5cbiAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+Rm9ybWF0IERETU0sIGRlZmF1bHRTaWduICcrJzwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDxwcmU+e3sgc3RyaW5naWZ5KGZvcm1Hcm91cC52YWx1ZSkgfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxpb24tZ3JpZCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYXRsb25nLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibGF0aXR1ZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJsYXRpdHVkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgbGF0TG9uZ1BhdHRlcm49XCJERE1NXCJcbiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0U2lnbj1cIitcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTGF0aXR1ZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgIFttb2JpbGVdPVwibW9iaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRQcmVmaXg+cm9vbTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeCAoY2xpY2spPVwiZ2VvUG9zaXRpb24oJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmdwc19maXhlZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhdGxvbmctZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYXRsb25nLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibG9uZ2l0dWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibG9uZ2l0dWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBsYXRMb25nUGF0dGVybj1cIkRETU1cIlxuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRTaWduPVwiK1wiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJMb25naXR1ZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgIFttb2JpbGVdPVwibW9iaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRQcmVmaXg+cm9vbTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeCAoY2xpY2spPVwiZ2VvUG9zaXRpb24oJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmdwc19maXhlZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhdGxvbmctZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICAgICAgPC9pb24tcm93PlxuICAgICAgICAgICAgICA8L2lvbi1ncmlkPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgICA8IS0tIERETU1TUyBEZWZhdWx0IHNpZ24gLS0+XG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPkZvcm1hdCBERE1NU1MsIGRlZmF1bHRTaWduICcrJzwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDxwcmU+e3sgc3RyaW5naWZ5KGZvcm1Hcm91cC52YWx1ZSkgfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxpb24tZ3JpZCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYXRsb25nLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibGF0aXR1ZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJsYXRpdHVkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgbGF0TG9uZ1BhdHRlcm49XCJERE1NU1NcIlxuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRTaWduPVwiK1wiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJMYXRpdHVkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJtb2JpbGVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFByZWZpeD5yb29tPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IChjbGljayk9XCJnZW9Qb3NpdGlvbigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Z3BzX2ZpeGVkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGF0bG9uZy1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgIDxpb24tY29sPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhdGxvbmctZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsb25naXR1ZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJsb25naXR1ZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIGxhdExvbmdQYXR0ZXJuPVwiRERNTVNTXCJcbiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0U2lnbj1cIitcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTG9uZ2l0dWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbW9iaWxlXT1cIm1vYmlsZVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0UHJlZml4PnJvb208L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRTdWZmaXggKGNsaWNrKT1cImdlb1Bvc2l0aW9uKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5ncHNfZml4ZWQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYXRsb25nLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICAgICAgPC9pb24tZ3JpZD5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICA8L2lvbi1yb3c+XG4gICAgPC9pb24tZ3JpZD5cbiAgPC9mb3JtPlxuXG4gIDwhLS0gRW1wdHkgdmFsdWUgLS0+XG4gIDxmb3JtICpuZ0lmPVwiZm9ybSB8IGZvcm1HZXRHcm91cDogJ2VtcHR5UmVxdWlyZWQnIGFzIGZvcm1Hcm91cFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XG4gICAgPGlvbi1ncmlkPlxuICAgICAgPGlvbi1yb3c+XG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIDxpb24tdGV4dD48aDQ+RW1wdHksIHJlcXVpcmVkIChubyBkZWZhdWx0cyk8L2g0PjwvaW9uLXRleHQ+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDwvaW9uLXJvdz5cblxuICAgICAgPGlvbi1yb3c+XG4gICAgICAgIDwhLS0gREQgLS0+XG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPkZvcm1hdCBERCwgcmVxdWlyZWQ8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8cHJlPnt7IHN0cmluZ2lmeShmb3JtR3JvdXAudmFsdWUpIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8aW9uLWdyaWQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICAgIDxpb24tcm93PlxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGF0bG9uZy1maWVsZFxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxhdGl0dWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibGF0aXR1ZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIGxhdExvbmdQYXR0ZXJuPVwiRERcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTGF0aXR1ZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgIFttb2JpbGVdPVwibW9iaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRQcmVmaXg+cm9vbTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJnZW9Qb3NpdGlvbigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Z3BzX2ZpeGVkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGF0bG9uZy1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgIDxpb24tY29sPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhdGxvbmctZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsb25naXR1ZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJsb25naXR1ZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIGxhdExvbmdQYXR0ZXJuPVwiRERcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTG9uZ2l0dWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbW9iaWxlXT1cIm1vYmlsZVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0UHJlZml4PnJvb208L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRTdWZmaXggKGNsaWNrKT1cImdlb1Bvc2l0aW9uKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5ncHNfZml4ZWQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYXRsb25nLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICAgICAgICA8aW9uLXJvdyAqbmdJZj1cImdlb1Bvc2l0aW9uTWVzc2FnZVwiPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+e3sgZ2VvUG9zaXRpb25NZXNzYWdlIH19PC9pb24tY29sPlxuICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICAgICAgPC9pb24tZ3JpZD5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICA8L2lvbi1jb2w+XG5cbiAgICAgICAgPCEtLSBERE1NICAtLT5cbiAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+Rm9ybWF0IERETU0sIHJlcXVpcmVkPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPHByZT57eyBzdHJpbmdpZnkoZm9ybUdyb3VwLnZhbHVlKSB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICA8aW9uLXJvdz5cbiAgICAgICAgICAgICAgICAgIDxpb24tY29sPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhdGxvbmctZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsYXRpdHVkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImxhdGl0dWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBsYXRMb25nUGF0dGVybj1cIkRETU1cIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTGF0aXR1ZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgIFttb2JpbGVdPVwibW9iaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRQcmVmaXg+cm9vbTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeCAoY2xpY2spPVwiZ2VvUG9zaXRpb24oJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmdwc19maXhlZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhdGxvbmctZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYXRsb25nLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibG9uZ2l0dWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibG9uZ2l0dWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBsYXRMb25nUGF0dGVybj1cIkRETU1cIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTG9uZ2l0dWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbW9iaWxlXT1cIm1vYmlsZVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0UHJlZml4PnJvb208L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRTdWZmaXggKGNsaWNrKT1cImdlb1Bvc2l0aW9uKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5ncHNfZml4ZWQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYXRsb25nLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICAgICAgPC9pb24tZ3JpZD5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICA8L2lvbi1yb3c+XG4gICAgPC9pb24tZ3JpZD5cbiAgPC9mb3JtPlxuXG4gIDxmb3JtICpuZ0lmPVwiZm9ybSB8IGZvcm1HZXRHcm91cDogJ2VuYWJsZScgYXMgZm9ybUdyb3VwXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cbiAgICA8aW9uLWdyaWQ+XG4gICAgICA8IS0tIFdpdGggdmFsdWUgLS0+XG4gICAgICA8aW9uLXJvdz5cbiAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgPGlvbi10ZXh0PjxoND5XaXRoIHZhbHVlPC9oND48L2lvbi10ZXh0PlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICA8L2lvbi1yb3c+XG5cbiAgICAgIDxpb24tcm93PlxuICAgICAgICA8IS0tIEREIC0tPlxuICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5Gb3JtYXQgREQ8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8cHJlPnt7IHN0cmluZ2lmeShmb3JtR3JvdXAudmFsdWUpIH19PC9wcmU+XG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8aW9uLWdyaWQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICAgIDxpb24tcm93PlxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGF0bG9uZy1maWVsZFxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxhdGl0dWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibGF0aXR1ZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIGxhdExvbmdQYXR0ZXJuPVwiRERcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTGF0aXR1ZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgIFttb2JpbGVdPVwibW9iaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbWF0LWxhdGxvbmctZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYXRsb25nLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibG9uZ2l0dWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibG9uZ2l0dWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBsYXRMb25nUGF0dGVybj1cIkREXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkxvbmdpdHVkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJtb2JpbGVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9tYXQtbGF0bG9uZy1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgICAgIDwvaW9uLWdyaWQ+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgIDwhLS0gRERNTVNTIC0tPlxuICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5Gb3JtYXQgRERNTTwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDxwcmU+e3sgc3RyaW5naWZ5KGZvcm1Hcm91cC52YWx1ZSkgfX08L3ByZT5cbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxpb24tZ3JpZCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYXRsb25nLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibGF0aXR1ZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJsYXRpdHVkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgbGF0TG9uZ1BhdHRlcm49XCJERE1NXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkxhdGl0dWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbW9iaWxlXT1cIm1vYmlsZVwiXG4gICAgICAgICAgICAgICAgICAgID48L21hdC1sYXRsb25nLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGF0bG9uZy1maWVsZFxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxvbmdpdHVkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImxvbmdpdHVkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgbGF0TG9uZ1BhdHRlcm49XCJERE1NXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkxvbmdpdHVkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJtb2JpbGVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9tYXQtbGF0bG9uZy1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgICAgIDwvaW9uLWdyaWQ+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgIDwhLS0gRERNTVNTIC0tPlxuICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5Gb3JtYXQgRERNTVNTPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPHByZT57eyBzdHJpbmdpZnkoZm9ybUdyb3VwLnZhbHVlKSB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICA8aW9uLXJvdz5cbiAgICAgICAgICAgICAgICAgIDxpb24tY29sPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhdGxvbmctZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsYXRpdHVkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImxhdGl0dWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBsYXRMb25nUGF0dGVybj1cIkRETU1TU1wiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJMYXRpdHVkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJtb2JpbGVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9tYXQtbGF0bG9uZy1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgIDxpb24tY29sPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhdGxvbmctZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsb25naXR1ZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJsb25naXR1ZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIGxhdExvbmdQYXR0ZXJuPVwiRERNTVNTXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkxvbmdpdHVkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJtb2JpbGVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9tYXQtbGF0bG9uZy1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgICAgIDwvaW9uLWdyaWQ+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgPC9pb24tcm93PlxuICAgIDwvaW9uLWdyaWQ+XG4gIDwvZm9ybT5cblxuICA8IS0tIERpc2FibGUgIC0tPlxuICA8Zm9ybSAqbmdJZj1cImZvcm0gfCBmb3JtR2V0R3JvdXA6ICdkaXNhYmxlJyBhcyBmb3JtR3JvdXBcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICAgIDxpb24tZ3JpZD5cbiAgICAgIDxpb24tcm93PlxuICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICA8aW9uLXRleHQ+PGg0PkRpc2FibGVkIGNvbnRyb2w8L2g0PjwvaW9uLXRleHQ+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDwvaW9uLXJvdz5cbiAgICAgIDxpb24tcm93PlxuICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5EaXNhYmxlZCBjb250cm9sPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPHByZT57eyBzdHJpbmdpZnkoZm9ybUdyb3VwLnZhbHVlKSB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICA8aW9uLXJvdz5cbiAgICAgICAgICAgICAgICAgIDxpb24tY29sPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhdGxvbmctZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsYXRpdHVkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImxhdGl0dWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBsYXRMb25nUGF0dGVybj1cIkRETU1cIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTGF0aXR1ZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgIFttb2JpbGVdPVwibW9iaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRQcmVmaXg+cm9vbTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeD5ncHNfZml4ZWQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYXRsb25nLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGF0bG9uZy1maWVsZFxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxvbmdpdHVkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImxvbmdpdHVkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgbGF0TG9uZ1BhdHRlcm49XCJERE1NXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkxvbmdpdHVkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJtb2JpbGVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFByZWZpeD5yb29tPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IChjbGljayk9XCJnZW9Qb3NpdGlvbigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Z3BzX2ZpeGVkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGF0bG9uZy1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgICAgIDwvaW9uLWdyaWQ+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPlJlYWRvbmx5IChjb250cm9sIGlzIGVuYWJsZSk8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInJlYWRvbmx5RmllbGQucmVhZG9ubHkgPSAkZXZlbnQuY2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwicmVhZG9ubHlGaWVsZC5yZWFkb25seVwiXG4gICAgICAgICAgICAgID48L21hdC1jaGVja2JveD5cblxuICAgICAgICAgICAgICA8aW9uLWdyaWQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICAgIDxpb24tcm93PlxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGF0bG9uZy1maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICNyZWFkb25seUZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm0gfCBmb3JtR2V0Q29udHJvbDogJ2VuYWJsZS5sYXRpdHVkZSdcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJsYXRpdHVkZVwiXG4gICAgICAgICAgICAgICAgICAgICAgbGF0TG9uZ1BhdHRlcm49XCJERE1NXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkxhdGl0dWRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJtb2JpbGVcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFByZWZpeD5yb29tPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4Pmdwc19maXhlZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhdGxvbmctZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICAgICAgPC9pb24tcm93PlxuICAgICAgICAgICAgICA8L2lvbi1ncmlkPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5XaXRoIGhpbnQ8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxtYXQtbGF0bG9uZy1maWVsZFxuICAgICAgICAgICAgICAgICNyZWFkb25seUZpZWxkXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm0gfCBmb3JtR2V0Q29udHJvbDogJ2VuYWJsZS5sYXRpdHVkZSdcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJsYXRpdHVkZVwiXG4gICAgICAgICAgICAgICAgbGF0TG9uZ1BhdHRlcm49XCJERE1NXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkxhdGl0dWRlXCJcbiAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICAgICAgICBbbW9iaWxlXT1cIm1vYmlsZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LWhpbnQgYWxpZ249XCJlbmRcIj5UaGlzIGlzIGEgbG9uZyBsb25nIGhpbnQ8L21hdC1oaW50PlxuICAgICAgICAgICAgICA8L21hdC1sYXRsb25nLWZpZWxkPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDwvaW9uLXJvdz5cbiAgICA8L2lvbi1ncmlkPlxuICA8L2Zvcm0+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI25ld0NvbXBvbmVudCBsZXQtZm9ybUdyb3VwTmFtZT1cImZvcm1Hcm91cFwiIGxldC1wYXR0ZXJuPVwibGF0TG9uZ1BhdHRlcm5cIiBsZXQtcmVxdWlyZWQ9XCJyZXF1aXJlZFwiPlxuICA8Zm9ybSAqbmdJZj1cImZvcm0gfCBmb3JtR2V0R3JvdXA6IGZvcm1Hcm91cE5hbWUgYXMgZm9ybUdyb3VwXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cbiAgICA8aW9uLWNhcmQ+XG4gICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj57eyBmb3JtR3JvdXBOYW1lIH19PC9pb24tbGFiZWw+XG4gICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICA8aW9uLWdyaWQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgPGlvbi1yb3cgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDxwcmU+e3sgZm9ybUdyb3VwLnZhbHVlIHwganNvbiB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgICA8cHJlPmludmFsaWQgPyA6IHt7IChmb3JtR3JvdXAgfCBmb3JtR2V0Q29udHJvbDogJ2xhdGl0dWRlJykuaW52YWxpZCB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgICA8cHJlPnRvdWNoZWQgPyA6IHt7IChmb3JtR3JvdXAgfCBmb3JtR2V0Q29udHJvbDogJ2xhdGl0dWRlJykudG91Y2hlZCB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgICA8cHJlPmVycm9ycyA6IHt7IGZvcm1Hcm91cCB8IGZvcm1HZXRHcm91cDogJ2xhdGl0dWRlJyB8IGZvcm1FcnJvciB9fTwvcHJlPlxuICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIiBzaXplTGc9XCI2XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYXRsb25nLWZpZWxkXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsYXRpdHVkZVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwibGF0aXR1ZGVcIlxuICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW2xhdExvbmdQYXR0ZXJuXT1cInBhdHRlcm5cIlxuICAgICAgICAgICAgICAgICAgZGVmYXVsdFNpZ249XCItXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTGF0aXR1ZGVcIlxuICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgICAgICAgPjwvbWF0LWxhdGxvbmctZmllbGQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZUxnPVwiNlwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGF0bG9uZy1maWVsZFxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibG9uZ2l0dWRlXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJsb25naXR1ZGVcIlxuICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW2xhdExvbmdQYXR0ZXJuXT1cInBhdHRlcm5cIlxuICAgICAgICAgICAgICAgICAgZGVmYXVsdFNpZ249XCItXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTG9uZ2l0dWRlXCJcbiAgICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICAgICAgICAgID48L21hdC1sYXRsb25nLWZpZWxkPlxuICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgPC9pb24tZ3JpZD5cbiAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgIDxpb24tZ3JpZCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCIgc2l6ZUxnPVwiNlwiPlxuICAgICAgICAgICAgICA8bWF0LWxhdGxvbmctZmllbGRcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsYXRpdHVkZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImxhdGl0dWRlXCJcbiAgICAgICAgICAgICAgICBbbGF0TG9uZ1BhdHRlcm5dPVwicGF0dGVyblwiXG4gICAgICAgICAgICAgICAgZGVmYXVsdFNpZ249XCItXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkxhdGl0dWRlXCJcbiAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFByZWZpeD5yb29tPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImdlb1Bvc2l0aW9uKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5ncHNfZml4ZWQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L21hdC1sYXRsb25nLWZpZWxkPlxuICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiIHNpemVMZz1cIjZcIj5cbiAgICAgICAgICAgICAgPG1hdC1sYXRsb25nLWZpZWxkXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibG9uZ2l0dWRlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwibG9uZ2l0dWRlXCJcbiAgICAgICAgICAgICAgICBbbGF0TG9uZ1BhdHRlcm5dPVwicGF0dGVyblwiXG4gICAgICAgICAgICAgICAgZGVmYXVsdFNpZ249XCItXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkxvbmdpdHVkZVwiXG4gICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRQcmVmaXg+cm9vbTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJnZW9Qb3NpdGlvbigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+Z3BzX2ZpeGVkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9tYXQtbGF0bG9uZy1maWVsZD5cbiAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgPGlvbi1yb3cgKm5nSWY9XCJnZW9Qb3NpdGlvbk1lc3NhZ2VcIj5cbiAgICAgICAgICAgIDxpb24tY29sPnt7IGdlb1Bvc2l0aW9uTWVzc2FnZSB9fTwvaW9uLWNvbD5cbiAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgIDwvaW9uLWdyaWQ+XG4gICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgPC9pb24tY2FyZD5cbiAgPC9mb3JtPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF0bG9uZy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvbGF0bG9uZy90ZXN0aW5nL2xhdGxvbmcudGVzdC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvdGVzdGluZy9sYXRsb25nLnRlc3QuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBd0MsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQVMxRSxNQUFNLE9BQU8sZUFBZTtJQVVkO0lBQ0E7SUFWWixJQUFJLENBQW1CO0lBRXZCLGtCQUFrQixDQUFTO0lBRTNCLElBQUksR0FBMEMsUUFBUSxDQUFDO0lBQ3ZELGNBQWMsR0FBRyxNQUFNLENBQUM7SUFDeEIsVUFBVSxHQUEyQixNQUFNLENBQUM7SUFFNUMsWUFDWSxXQUErQixFQUMvQixRQUF5QjtRQUR6QixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDL0IsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFFbkMsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzVCLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDO2dCQUN2QixRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO2dCQUMzQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsU0FBUyxDQUFDO2FBQzlDLENBQUM7WUFDRixhQUFhLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQztnQkFDL0IsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RGLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2FBQ3pGLENBQUM7WUFDRixNQUFNLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQztnQkFDeEIsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztnQkFDM0MsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQzthQUM5QyxDQUFDO1lBQ0YsT0FBTyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUM7Z0JBQ3pCLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7Z0JBQzNDLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7YUFDOUMsQ0FBQztTQUNILENBQUMsQ0FBQztRQUVILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEQsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFM0Isb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFRCxRQUFRO1FBQ04sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQUs7UUFDZCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDcEIsQ0FBQztRQUNELFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELDBCQUEwQjtJQUMxQixLQUFLLENBQUMsUUFBUTtRQUNaLE1BQU0sSUFBSSxHQUFHO1lBQ1gsS0FBSyxFQUFFO2dCQUNMLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFNBQVMsRUFBRSxJQUFJO2FBQ2hCO1lBQ0QsYUFBYSxFQUFFO2dCQUNiLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFNBQVMsRUFBRSxJQUFJO2FBQ2hCO1lBQ0QsTUFBTSxFQUFFO2dCQUNOLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFNBQVMsRUFBRSxDQUFDLENBQUM7YUFDZDtZQUNELE9BQU8sRUFBRTtnQkFDUCxRQUFRLEVBQUUsSUFBSTtnQkFDZCxTQUFTLEVBQUUsQ0FBQyxDQUFDO2FBQ2Q7U0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFZO1FBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFZLEVBQUUsV0FBb0I7UUFDbEQsT0FBTyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVwRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLElBQUksVUFBa0IsQ0FBQztRQUN2QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFdkIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUN4RSxVQUFVLEVBQUUsS0FBSyxDQUFDLE9BQU87Z0JBQ3pCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztnQkFDdEIsa0JBQWtCLEVBQUUsS0FBSzthQUMxQixDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRTNELFVBQVUsR0FBRyw2QkFBNkIsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQ2pFLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsVUFBVSxHQUFHLEdBQUcsRUFBRSxPQUFPLElBQUksR0FBRyxDQUFDO1lBQ2pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7WUFDbEMsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDbkMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUMsQ0FBQztZQUNELFVBQVUsR0FBRyx3QkFBd0IsVUFBVSxZQUFZLFFBQVEsSUFBSSxDQUFDO1FBQzFFLENBQUM7UUFFRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDO1FBRXJDLGlDQUFpQztRQUNqQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUF3QjtRQUN2QyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3ZELENBQUM7SUFFRCxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQzt3R0F4SGhCLGVBQWU7NEZBQWYsZUFBZSx3RENaNUIscTZrQ0EwMkJBOzs0RkQ5MUJhLGVBQWU7a0JBSjNCLFNBQVM7K0JBQ0Usa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTaGFyZWRWYWxpZGF0b3JzIH0gZnJvbSAnLi4vLi4vLi4vdmFsaWRhdG9yL3ZhbGlkYXRvcnMnO1xyXG5pbXBvcnQgeyBHZW9sb2NhdGlvblV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vZ2VvbG9jYXRpb24vZ2VvbG9jYXRpb24udXRpbHMnO1xyXG5pbXBvcnQgeyBQbGF0Zm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2VzL3BsYXRmb3JtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRBcHBlYXJhbmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdENoZWNrYm94Q2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtbGF0bG9uZy10ZXN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbGF0bG9uZy50ZXN0Lmh0bWwnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTGF0TG9uZ1Rlc3RQYWdlIGltcGxlbWVudHMgT25Jbml0IHtcclxuICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG5cclxuICBnZW9Qb3NpdGlvbk1lc3NhZ2U6IHN0cmluZztcclxuXHJcbiAgbW9kZTogJ21vYmlsZScgfCAnZGVza3RvcCcgfCAnZGV2JyB8ICd0ZW1wJyA9ICdtb2JpbGUnO1xyXG4gIHNlbGVjdGVkRm9ybWF0ID0gJ0RETU0nO1xyXG4gIGFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgPSAnZmlsbCc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJvdGVjdGVkIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgICBwcm90ZWN0ZWQgcGxhdGZvcm06IFBsYXRmb3JtU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5mb3JtID0gZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBlbXB0eTogZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgIGxhdGl0dWRlOiBbbnVsbCwgU2hhcmVkVmFsaWRhdG9ycy5sYXRpdHVkZV0sXHJcbiAgICAgICAgbG9uZ2l0dWRlOiBbbnVsbCwgU2hhcmVkVmFsaWRhdG9ycy5sb25naXR1ZGVdLFxyXG4gICAgICB9KSxcclxuICAgICAgZW1wdHlSZXF1aXJlZDogZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgIGxhdGl0dWRlOiBbbnVsbCwgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBTaGFyZWRWYWxpZGF0b3JzLmxhdGl0dWRlXSldLFxyXG4gICAgICAgIGxvbmdpdHVkZTogW251bGwsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZCwgU2hhcmVkVmFsaWRhdG9ycy5sb25naXR1ZGVdKV0sXHJcbiAgICAgIH0pLFxyXG4gICAgICBlbmFibGU6IGZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICBsYXRpdHVkZTogW251bGwsIFNoYXJlZFZhbGlkYXRvcnMubGF0aXR1ZGVdLFxyXG4gICAgICAgIGxvbmdpdHVkZTogW251bGwsIFNoYXJlZFZhbGlkYXRvcnMubG9uZ2l0dWRlXSxcclxuICAgICAgfSksXHJcbiAgICAgIGRpc2FibGU6IGZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICBsYXRpdHVkZTogW251bGwsIFNoYXJlZFZhbGlkYXRvcnMubGF0aXR1ZGVdLFxyXG4gICAgICAgIGxvbmdpdHVkZTogW251bGwsIFNoYXJlZFZhbGlkYXRvcnMubG9uZ2l0dWRlXSxcclxuICAgICAgfSksXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBkaXNhYmxlRm9ybUdyb3VwID0gdGhpcy5mb3JtLmdldCgnZGlzYWJsZScpO1xyXG4gICAgZGlzYWJsZUZvcm1Hcm91cC5kaXNhYmxlKCk7XHJcblxyXG4gICAgLy8gQ29weSBlbmFibGUgdmFsdWUgdG8gZGlzYWJsZSBmb3JtXHJcbiAgICB0aGlzLmZvcm0uZ2V0KCdlbmFibGUnKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gZGlzYWJsZUZvcm1Hcm91cC5zZXRWYWx1ZSh2YWx1ZSkpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubG9hZERhdGEoKSwgMjUwKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZU1vZGUodmFsdWUpIHtcclxuICAgIGlmICh0aGlzLm1vZGUgIT09IHZhbHVlKSB7XHJcbiAgICAgIHRoaXMubW9kZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmxvYWREYXRhKCksIDI1MCk7XHJcbiAgfVxyXG5cclxuICAvLyBMb2FkIHRoZSBmb3JtIHdpdGggZGF0YVxyXG4gIGFzeW5jIGxvYWREYXRhKCkge1xyXG4gICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgZW1wdHk6IHtcclxuICAgICAgICBsYXRpdHVkZTogbnVsbCxcclxuICAgICAgICBsb25naXR1ZGU6IG51bGwsXHJcbiAgICAgIH0sXHJcbiAgICAgIGVtcHR5UmVxdWlyZWQ6IHtcclxuICAgICAgICBsYXRpdHVkZTogbnVsbCxcclxuICAgICAgICBsb25naXR1ZGU6IG51bGwsXHJcbiAgICAgIH0sXHJcbiAgICAgIGVuYWJsZToge1xyXG4gICAgICAgIGxhdGl0dWRlOiA1MC4xLFxyXG4gICAgICAgIGxvbmdpdHVkZTogLTIsXHJcbiAgICAgIH0sXHJcbiAgICAgIGRpc2FibGU6IHtcclxuICAgICAgICBsYXRpdHVkZTogNTAuMSxcclxuICAgICAgICBsb25naXR1ZGU6IC0yLFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmZvcm0uc2V0VmFsdWUoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBkb1N1Ym1pdChldmVudDogRXZlbnQpIHtcclxuICAgIGNvbnNvbGUuZGVidWcoJ1ZhbGlkYXRlIGZvcm06ICcsIHRoaXMuZm9ybS52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZW9Qb3NpdGlvbihldmVudDogRXZlbnQsIGNvbnRyb2xOYW1lPzogc3RyaW5nKSB7XHJcbiAgICBjb25zb2xlLmRlYnVnKCdDbGljayBvbiBnZW9Mb2NhdGlvbiBidXR0b24nLCBldmVudCk7XHJcblxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGxldCBsb2dNZXNzYWdlOiBzdHJpbmc7XHJcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gYXdhaXQgR2VvbG9jYXRpb25VdGlscy5nZXRDdXJyZW50UG9zaXRpb24odGhpcy5wbGF0Zm9ybSwge1xyXG4gICAgICAgIG1heGltdW1BZ2U6IDgwMDAwIC8qODBzKi8sXHJcbiAgICAgICAgdGltZW91dDogNDAwMDAgLyo0MHMqLyxcclxuICAgICAgICBlbmFibGVIaWdoQWNjdXJhY3k6IGZhbHNlLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuZm9ybS5nZXQoY29udHJvbE5hbWUgfHwgJ2VtcHR5JykucGF0Y2hWYWx1ZShwb3NpdGlvbik7XHJcblxyXG4gICAgICBsb2dNZXNzYWdlID0gYElORk8gKGdlb2xvY2F0aW9uKTogT0sgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYDtcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICBsb2dNZXNzYWdlID0gZXJyPy5tZXNzYWdlIHx8IGVycjtcclxuICAgICAgY29uc3QgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gbm93O1xyXG4gICAgICBpZiAodHlwZW9mIGxvZ01lc3NhZ2UgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgbG9nTWVzc2FnZSA9IEpTT04uc3RyaW5naWZ5KGxvZ01lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICAgIGxvZ01lc3NhZ2UgPSBgRVJST1IgKGdlb2xvY2F0aW9uKTogJHtsb2dNZXNzYWdlfSAtIGFmdGVyICR7ZHVyYXRpb259bXNgO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2VvUG9zaXRpb25NZXNzYWdlID0gbG9nTWVzc2FnZTtcclxuXHJcbiAgICAvLyBDbGVhbiB0aGUgbG9nIG1lc3NhZ2UsIGlmIHNhbWVcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5nZW9Qb3NpdGlvbk1lc3NhZ2UgPT09IGxvZ01lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLmdlb1Bvc2l0aW9uTWVzc2FnZSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0sIDUwMDApO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQXBwZWFyYW5jZShldmVudDogTWF0Q2hlY2tib3hDaGFuZ2UpIHtcclxuICAgIHRoaXMuYXBwZWFyYW5jZSA9IGV2ZW50LmNoZWNrZWQgPyAnb3V0bGluZScgOiAnZmlsbCc7XHJcbiAgfVxyXG5cclxuICBzdHJpbmdpZnkgPSBKU09OLnN0cmluZ2lmeTtcclxuXHJcbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cclxufVxyXG4iLCI8aW9uLWhlYWRlcj5cclxuICA8aW9uLXRvb2xiYXIgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cInN0YXJ0XCI+XHJcbiAgICAgIDxpb24tYmFjay1idXR0b24+PC9pb24tYmFjay1idXR0b24+XHJcbiAgICA8L2lvbi1idXR0b25zPlxyXG5cclxuICAgIDxpb24tdGl0bGU+TGF0L0xvbmcgZmllbGQgdGVzdCBwYWdlPC9pb24tdGl0bGU+XHJcbiAgPC9pb24tdG9vbGJhcj5cclxuPC9pb24taGVhZGVyPlxyXG5cclxuPGlvbi1jb250ZW50PlxyXG4gIDwhLS0gVGFiIG5hdiAtIGRlc2t0b3AgbW9kZSAtLT5cclxuICA8bmF2IG1hdC10YWItbmF2LWJhciBbdGFiUGFuZWxdPVwidGFiUGFuZWxcIj5cclxuICAgIDxhIG1hdC10YWItbGluayBbYWN0aXZlXT1cIm1vZGUgPT09ICdtb2JpbGUnXCIgKGNsaWNrKT1cInRvZ2dsZU1vZGUoJ21vYmlsZScpXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+TW9iaWxlPC9tYXQtbGFiZWw+XHJcbiAgICA8L2E+XHJcbiAgICA8YSBtYXQtdGFiLWxpbmsgW2FjdGl2ZV09XCJtb2RlID09PSAnZGVza3RvcCdcIiAoY2xpY2spPVwidG9nZ2xlTW9kZSgnZGVza3RvcCcpXCI+XHJcbiAgICAgIDxtYXQtbGFiZWw+RGVza3RvcDwvbWF0LWxhYmVsPlxyXG4gICAgPC9hPlxyXG4gICAgPGEgbWF0LXRhYi1saW5rIFthY3RpdmVdPVwibW9kZSA9PT0gJ2RldidcIiAoY2xpY2spPVwidG9nZ2xlTW9kZSgnZGV2JylcIj5cclxuICAgICAgPG1hdC1sYWJlbD5EZXY8L21hdC1sYWJlbD5cclxuICAgIDwvYT5cclxuICAgIDxhIG1hdC10YWItbGluayBbYWN0aXZlXT1cIm1vZGUgPT09ICd0ZW1wJ1wiIChjbGljayk9XCJ0b2dnbGVNb2RlKCd0ZW1wJylcIj5cclxuICAgICAgPG1hdC1sYWJlbD5UZW1wb3Jhcnk8L21hdC1sYWJlbD5cclxuICAgIDwvYT5cclxuICA8L25hdj5cclxuXHJcbiAgPGZvcm0gI3RhYlBhbmVsIGNsYXNzPVwiZm9ybS1jb250YWluZXIgaW9uLXBhZGRpbmdcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiAobmdTdWJtaXQpPVwiZG9TdWJtaXQoJGV2ZW50KVwiPlxyXG4gICAgQGlmIChtb2RlID09PSAnbW9iaWxlJykge1xyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWFpblRlc3Q7IGNvbnRleHQ6IHsgbW9iaWxlOiB0cnVlIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIH0gQGVsc2UgaWYgKG1vZGUgPT09ICdkZXNrdG9wJykge1xyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWFpblRlc3Q7IGNvbnRleHQ6IHsgbW9iaWxlOiBmYWxzZSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICB9IEBlbHNlIGlmIChtb2RlID09PSAnZGV2Jykge1xyXG4gICAgICA8aW9uLWdyaWQ+XHJcbiAgICAgICAgPGlvbi1yb3c+XHJcbiAgICAgICAgICA8aW9uLWNvbD5cclxuICAgICAgICAgICAgPG1hdC1jaGVja2JveCAoY2hhbmdlKT1cInRvZ2dsZUFwcGVhcmFuY2UoJGV2ZW50KVwiPkNoYW5nZSBhcHBhcmVuY2U8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgIDwvaW9uLWNvbD5cclxuICAgICAgICA8L2lvbi1yb3c+XHJcbiAgICAgICAgPGlvbi1yb3c+XHJcbiAgICAgICAgICA8aW9uLWNvbD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIiBbc3Vic2NyaXB0U2l6aW5nXT1cIidkeW5hbWljJ1wiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+TGF0TG9uZ0Zvcm1hdDwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICNzZWxlY3RMYXRMb25nRm9ybWF0IFsodmFsdWUpXT1cInNlbGVjdGVkRm9ybWF0XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkRETU1cIiBzZWxlY3RlZD5ERE1NPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gdmFsdWU9XCJERE1NU1NcIj5ERE1NU1M8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cIkREXCI+REQ8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPC9pb24tY29sPlxyXG4gICAgICAgIDwvaW9uLXJvdz5cclxuICAgICAgICBAc3dpdGNoIChzZWxlY3RlZEZvcm1hdCkge1xyXG4gICAgICAgICAgQGNhc2UgKCdERE1NJykge1xyXG4gICAgICAgICAgICA8aW9uLXJvdz5cclxuICAgICAgICAgICAgICA8aW9uLWNvbD5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICAgICAgICBuZXdDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyBmb3JtR3JvdXA6ICdlbXB0eScsIGxhdExvbmdQYXR0ZXJuOiAnRERNTScsIHJlcXVpcmVkOiBmYWxzZSB9XHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9pb24tY29sPlxyXG4gICAgICAgICAgICAgIDxpb24tY29sPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0NvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7IGZvcm1Hcm91cDogJ2VuYWJsZScsIGxhdExvbmdQYXR0ZXJuOiAnRERNTScsIHJlcXVpcmVkOiB0cnVlIH1cclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L2lvbi1jb2w+XHJcbiAgICAgICAgICAgICAgPCEtLSA8aW9uLWNvbD4gLS0+XHJcbiAgICAgICAgICAgICAgPCEtLSAgIDxuZy1jb250YWluZXIgLS0+XHJcbiAgICAgICAgICAgICAgPCEtLSAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZXN0VjI7IGNvbnRleHQ6IHsgZm9ybUdyb3VwOiAnZGlzYWJsZScsIGxhdExvbmdQYXR0ZXJuOiAnRERNTScsIHJlcXVpcmVkOiB0cnVlIH1cIiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICAgPjwvbmctY29udGFpbmVyPiAtLT5cclxuICAgICAgICAgICAgICA8IS0tIDwvaW9uLWNvbD4gLS0+XHJcbiAgICAgICAgICAgIDwvaW9uLXJvdz5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIEBjYXNlICgnRERNTVNTJykge1xyXG4gICAgICAgICAgICA8aW9uLXJvdz5cclxuICAgICAgICAgICAgICA8IS0tIERETU1TUyAtLT5cclxuICAgICAgICAgICAgICA8aW9uLWNvbD5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICAgICAgICBuZXdDb21wb25lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyBmb3JtR3JvdXA6ICdlbXB0eScsIGxhdExvbmdQYXR0ZXJuOiAnRERNTVNTJywgcmVxdWlyZWQ6IGZhbHNlIH1cclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L2lvbi1jb2w+XHJcbiAgICAgICAgICAgICAgPGlvbi1jb2w+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3Q29tcG9uZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgZm9ybUdyb3VwOiAnZW5hYmxlJywgbGF0TG9uZ1BhdHRlcm46ICdERE1NU1MnLCByZXF1aXJlZDogdHJ1ZSB9XHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9pb24tY29sPlxyXG4gICAgICAgICAgICAgIDxpb24tY29sPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0NvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7IGZvcm1Hcm91cDogJ2Rpc2FibGUnLCBsYXRMb25nUGF0dGVybjogJ0RETU1TUycsIHJlcXVpcmVkOiB0cnVlIH1cclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L2lvbi1jb2w+XHJcbiAgICAgICAgICAgIDwvaW9uLXJvdz5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIEBjYXNlICgnREQnKSB7XHJcbiAgICAgICAgICAgIDxpb24tcm93PlxyXG4gICAgICAgICAgICAgIDwhLS0gRERNTVNTIC0tPlxyXG4gICAgICAgICAgICAgIDxpb24tY29sPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0NvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7IGZvcm1Hcm91cDogJ2VtcHR5JywgbGF0TG9uZ1BhdHRlcm46ICdERCcsIHJlcXVpcmVkOiBmYWxzZSB9XHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9pb24tY29sPlxyXG4gICAgICAgICAgICAgIDxpb24tY29sPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0NvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7IGZvcm1Hcm91cDogJ2VuYWJsZScsIGxhdExvbmdQYXR0ZXJuOiAnREQnLCByZXF1aXJlZDogdHJ1ZSB9XHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9pb24tY29sPlxyXG4gICAgICAgICAgICAgIDxpb24tY29sPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0NvbXBvbmVudDtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7IGZvcm1Hcm91cDogJ2Rpc2FibGUnLCBsYXRMb25nUGF0dGVybjogJ0REJywgcmVxdWlyZWQ6IHRydWUgfVxyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvaW9uLWNvbD5cclxuICAgICAgICAgICAgPC9pb24tcm93PlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgPC9pb24tZ3JpZD5cclxuICAgIH0gQGVsc2Uge1xyXG4gICAgICA8IS0tIFRlbXBvcmF5IFRBQiAoZm9yIERFVikgLS0+XHJcbiAgICAgIDxmb3JtICpuZ0lmPVwiZm9ybSB8IGZvcm1HZXRHcm91cDogJ2VuYWJsZScgYXMgZm9ybUdyb3VwXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cclxuICAgICAgICA8aW9uLWNhcmQ+XHJcbiAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxyXG4gICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XHJcbiAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5Gb3JtYXQgREQsIGRlZmF1bHRTaWduICctJzwvaW9uLWxhYmVsPlxyXG4gICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxyXG4gICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XHJcbiAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XHJcbiAgICAgICAgICAgICAgICA8c21hbGw+XHJcbiAgICAgICAgICAgICAgICAgIDxwcmU+e3sgZm9ybUdyb3VwLnZhbHVlIHwganNvbiB9fTwvcHJlPlxyXG4gICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxyXG4gICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxyXG4gICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XHJcbiAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cclxuICAgICAgICAgICAgPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cclxuICAgICAgICAgICAgICA8aW9uLXJvdz5cclxuICAgICAgICAgICAgICAgIDxpb24tY29sPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWxhdGxvbmctZmllbGRcclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsYXRpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImxhdGl0dWRlXCJcclxuICAgICAgICAgICAgICAgICAgICBsYXRMb25nUGF0dGVybj1cIkRETU1TU1wiXHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFNpZ249XCItXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJMYXRpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0UHJlZml4PnJvb208L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZ2VvUG9zaXRpb24oJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmdwc19maXhlZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhdGxvbmctZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XHJcbiAgICAgICAgICAgICAgICA8aW9uLWNvbD5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1sYXRsb25nLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibG9uZ2l0dWRlXCJcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwibG9uZ2l0dWRlXCJcclxuICAgICAgICAgICAgICAgICAgICBsYXRMb25nUGF0dGVybj1cIkRETU1TU1wiXHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFNpZ249XCItXCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkxvbmdpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0UHJlZml4PnJvb208L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRTdWZmaXggKGNsaWNrKT1cImdlb1Bvc2l0aW9uKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5ncHNfZml4ZWQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1sYXRsb25nLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tY29sPlxyXG4gICAgICAgICAgICAgIDwvaW9uLXJvdz5cclxuICAgICAgICAgICAgICA8aW9uLXJvdyAqbmdJZj1cImdlb1Bvc2l0aW9uTWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1jb2w+e3sgZ2VvUG9zaXRpb25NZXNzYWdlIH19PC9pb24tY29sPlxyXG4gICAgICAgICAgICAgIDwvaW9uLXJvdz5cclxuICAgICAgICAgICAgPC9pb24tZ3JpZD5cclxuICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cclxuICAgICAgICA8L2lvbi1jYXJkPlxyXG4gICAgICA8L2Zvcm0+XHJcbiAgICB9XHJcbiAgPC9mb3JtPlxyXG48L2lvbi1jb250ZW50PlxyXG5cclxuPG5nLXRlbXBsYXRlICNtYWluVGVzdCBsZXQtbW9iaWxlPVwibW9iaWxlXCI+XHJcbiAgPCEtLSBFbXB0eSB2YWx1ZSAtLT5cclxuICA8Zm9ybSAqbmdJZj1cImZvcm0gfCBmb3JtR2V0R3JvdXA6ICdlbXB0eScgYXMgZm9ybUdyb3VwXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cclxuICAgIDxpb24tZ3JpZD5cclxuICAgICAgPGlvbi1yb3c+XHJcbiAgICAgICAgPGlvbi1jb2w+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94IChjaGFuZ2UpPVwidG9nZ2xlQXBwZWFyYW5jZSgkZXZlbnQpXCI+Q2hhbmdlIGFwcGFyZW5jZTwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgIDwvaW9uLWNvbD5cclxuICAgICAgPC9pb24tcm93PlxyXG5cclxuICAgICAgPGlvbi1yb3c+XHJcbiAgICAgICAgPGlvbi1jb2w+XHJcbiAgICAgICAgICA8aW9uLXRleHQ+PGg0PkVtcHR5LCB3aXRoIGRlZmF1bHRzPC9oND48L2lvbi10ZXh0PlxyXG4gICAgICAgIDwvaW9uLWNvbD5cclxuICAgICAgPC9pb24tcm93PlxyXG5cclxuICAgICAgPGlvbi1yb3c+XHJcbiAgICAgICAgPCEtLSBERCBEZWZhdWx0IHNpZ24gLS0+XHJcbiAgICAgICAgPGlvbi1jb2w+XHJcbiAgICAgICAgICA8aW9uLWNhcmQ+XHJcbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XHJcbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5Gb3JtYXQgREQsIGRlZmF1bHRTaWduICctJzwvaW9uLWxhYmVsPlxyXG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XHJcbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxyXG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICA8cHJlPnt7IHN0cmluZ2lmeShmb3JtR3JvdXAudmFsdWUpIH19PC9wcmU+XHJcbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxyXG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XHJcbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxyXG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cclxuICAgICAgICAgICAgICA8aW9uLWdyaWQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1yb3c+XHJcbiAgICAgICAgICAgICAgICAgIDxpb24tY29sPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGF0bG9uZy1maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibGF0aXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImxhdGl0dWRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGxhdExvbmdQYXR0ZXJuPVwiRERcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFNpZ249XCItXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTGF0aXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbW9iaWxlXT1cIm1vYmlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFByZWZpeD5yb29tPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZ2VvUG9zaXRpb24oJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Z3BzX2ZpeGVkPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhdGxvbmctZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYXRsb25nLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsb25naXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImxvbmdpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBsYXRMb25nUGF0dGVybj1cIkREXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRTaWduPVwiLVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkxvbmdpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttb2JpbGVdPVwibW9iaWxlXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0UHJlZml4PnJvb208L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeCAoY2xpY2spPVwiZ2VvUG9zaXRpb24oJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Z3BzX2ZpeGVkPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhdGxvbmctZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cclxuICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cclxuICAgICAgICAgICAgICAgIDxpb24tcm93ICpuZ0lmPVwiZ2VvUG9zaXRpb25NZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpb24tY29sPnt7IGdlb1Bvc2l0aW9uTWVzc2FnZSB9fTwvaW9uLWNvbD5cclxuICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cclxuICAgICAgICAgICAgICA8L2lvbi1ncmlkPlxyXG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgICA8L2lvbi1jYXJkPlxyXG4gICAgICAgIDwvaW9uLWNvbD5cclxuXHJcbiAgICAgICAgPCEtLSBERE1NIERlZmF1bHQgc2lnbiAtLT5cclxuICAgICAgICA8aW9uLWNvbD5cclxuICAgICAgICAgIDxpb24tY2FyZD5cclxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cclxuICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPkZvcm1hdCBERE1NLCBkZWZhdWx0U2lnbiAnKyc8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxyXG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cclxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHByZT57eyBzdHJpbmdpZnkoZm9ybUdyb3VwLnZhbHVlKSB9fTwvcHJlPlxyXG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cclxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxyXG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cclxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxpb24tcm93PlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhdGxvbmctZmllbGRcclxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxhdGl0dWRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJsYXRpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBsYXRMb25nUGF0dGVybj1cIkRETU1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFNpZ249XCIrXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTGF0aXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbW9iaWxlXT1cIm1vYmlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFByZWZpeD5yb29tPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRTdWZmaXggKGNsaWNrKT1cImdlb1Bvc2l0aW9uKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmdwc19maXhlZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYXRsb25nLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XHJcbiAgICAgICAgICAgICAgICAgIDxpb24tY29sPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGF0bG9uZy1maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibG9uZ2l0dWRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJsb25naXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbGF0TG9uZ1BhdHRlcm49XCJERE1NXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRTaWduPVwiK1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkxvbmdpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttb2JpbGVdPVwibW9iaWxlXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0UHJlZml4PnJvb208L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeCAoY2xpY2spPVwiZ2VvUG9zaXRpb24oJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Z3BzX2ZpeGVkPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhdGxvbmctZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cclxuICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cclxuICAgICAgICAgICAgICA8L2lvbi1ncmlkPlxyXG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgICA8L2lvbi1jYXJkPlxyXG4gICAgICAgIDwvaW9uLWNvbD5cclxuXHJcbiAgICAgICAgPCEtLSBERE1NU1MgRGVmYXVsdCBzaWduIC0tPlxyXG4gICAgICAgIDxpb24tY29sPlxyXG4gICAgICAgICAgPGlvbi1jYXJkPlxyXG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxyXG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cclxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+Rm9ybWF0IERETU1TUywgZGVmYXVsdFNpZ24gJysnPC9pb24tbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cclxuICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XHJcbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cclxuICAgICAgICAgICAgICAgICAgPHNtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwcmU+e3sgc3RyaW5naWZ5KGZvcm1Hcm91cC52YWx1ZSkgfX08L3ByZT5cclxuICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XHJcbiAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cclxuICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XHJcbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxyXG4gICAgICAgICAgICAgIDxpb24tZ3JpZCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8aW9uLXJvdz5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYXRsb25nLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsYXRpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibGF0aXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbGF0TG9uZ1BhdHRlcm49XCJERE1NU1NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFNpZ249XCIrXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTGF0aXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbW9iaWxlXT1cIm1vYmlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFByZWZpeD5yb29tPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRTdWZmaXggKGNsaWNrKT1cImdlb1Bvc2l0aW9uKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmdwc19maXhlZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYXRsb25nLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XHJcbiAgICAgICAgICAgICAgICAgIDxpb24tY29sPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGF0bG9uZy1maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibG9uZ2l0dWRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJsb25naXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbGF0TG9uZ1BhdHRlcm49XCJERE1NU1NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFNpZ249XCIrXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTG9uZ2l0dWRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJtb2JpbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRQcmVmaXg+cm9vbTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IChjbGljayk9XCJnZW9Qb3NpdGlvbigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5ncHNfZml4ZWQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGF0bG9uZy1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tcm93PlxyXG4gICAgICAgICAgICAgIDwvaW9uLWdyaWQ+XHJcbiAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cclxuICAgICAgICAgIDwvaW9uLWNhcmQ+XHJcbiAgICAgICAgPC9pb24tY29sPlxyXG4gICAgICA8L2lvbi1yb3c+XHJcbiAgICA8L2lvbi1ncmlkPlxyXG4gIDwvZm9ybT5cclxuXHJcbiAgPCEtLSBFbXB0eSB2YWx1ZSAtLT5cclxuICA8Zm9ybSAqbmdJZj1cImZvcm0gfCBmb3JtR2V0R3JvdXA6ICdlbXB0eVJlcXVpcmVkJyBhcyBmb3JtR3JvdXBcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxyXG4gICAgPGlvbi1ncmlkPlxyXG4gICAgICA8aW9uLXJvdz5cclxuICAgICAgICA8aW9uLWNvbD5cclxuICAgICAgICAgIDxpb24tdGV4dD48aDQ+RW1wdHksIHJlcXVpcmVkIChubyBkZWZhdWx0cyk8L2g0PjwvaW9uLXRleHQ+XHJcbiAgICAgICAgPC9pb24tY29sPlxyXG4gICAgICA8L2lvbi1yb3c+XHJcblxyXG4gICAgICA8aW9uLXJvdz5cclxuICAgICAgICA8IS0tIEREIC0tPlxyXG4gICAgICAgIDxpb24tY29sPlxyXG4gICAgICAgICAgPGlvbi1jYXJkPlxyXG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxyXG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cclxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+Rm9ybWF0IERELCByZXF1aXJlZDwvaW9uLWxhYmVsPlxyXG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XHJcbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxyXG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICA8cHJlPnt7IHN0cmluZ2lmeShmb3JtR3JvdXAudmFsdWUpIH19PC9wcmU+XHJcbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxyXG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XHJcbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxyXG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cclxuICAgICAgICAgICAgICA8aW9uLWdyaWQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1yb3c+XHJcbiAgICAgICAgICAgICAgICAgIDxpb24tY29sPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGF0bG9uZy1maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibGF0aXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImxhdGl0dWRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGxhdExvbmdQYXR0ZXJuPVwiRERcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJMYXRpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttb2JpbGVdPVwibW9iaWxlXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0UHJlZml4PnJvb208L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJnZW9Qb3NpdGlvbigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5ncHNfZml4ZWQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGF0bG9uZy1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhdGxvbmctZmllbGRcclxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxvbmdpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibG9uZ2l0dWRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGxhdExvbmdQYXR0ZXJuPVwiRERcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJMb25naXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbW9iaWxlXT1cIm1vYmlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFByZWZpeD5yb29tPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRTdWZmaXggKGNsaWNrKT1cImdlb1Bvc2l0aW9uKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmdwc19maXhlZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYXRsb25nLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1yb3c+XHJcbiAgICAgICAgICAgICAgICA8aW9uLXJvdyAqbmdJZj1cImdlb1Bvc2l0aW9uTWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbD57eyBnZW9Qb3NpdGlvbk1lc3NhZ2UgfX08L2lvbi1jb2w+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1yb3c+XHJcbiAgICAgICAgICAgICAgPC9pb24tZ3JpZD5cclxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxyXG4gICAgICAgICAgPC9pb24tY2FyZD5cclxuICAgICAgICA8L2lvbi1jb2w+XHJcblxyXG4gICAgICAgIDwhLS0gRERNTSAgLS0+XHJcbiAgICAgICAgPGlvbi1jb2w+XHJcbiAgICAgICAgICA8aW9uLWNhcmQ+XHJcbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XHJcbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5Gb3JtYXQgRERNTSwgcmVxdWlyZWQ8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxyXG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cclxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHByZT57eyBzdHJpbmdpZnkoZm9ybUdyb3VwLnZhbHVlKSB9fTwvcHJlPlxyXG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cclxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxyXG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cclxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxpb24tcm93PlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhdGxvbmctZmllbGRcclxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxhdGl0dWRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJsYXRpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBsYXRMb25nUGF0dGVybj1cIkRETU1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJMYXRpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttb2JpbGVdPVwibW9iaWxlXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0UHJlZml4PnJvb208L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeCAoY2xpY2spPVwiZ2VvUG9zaXRpb24oJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Z3BzX2ZpeGVkPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhdGxvbmctZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYXRsb25nLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsb25naXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImxvbmdpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBsYXRMb25nUGF0dGVybj1cIkRETU1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJMb25naXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbW9iaWxlXT1cIm1vYmlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFByZWZpeD5yb29tPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRTdWZmaXggKGNsaWNrKT1cImdlb1Bvc2l0aW9uKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmdwc19maXhlZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYXRsb25nLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1yb3c+XHJcbiAgICAgICAgICAgICAgPC9pb24tZ3JpZD5cclxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxyXG4gICAgICAgICAgPC9pb24tY2FyZD5cclxuICAgICAgICA8L2lvbi1jb2w+XHJcbiAgICAgIDwvaW9uLXJvdz5cclxuICAgIDwvaW9uLWdyaWQ+XHJcbiAgPC9mb3JtPlxyXG5cclxuICA8Zm9ybSAqbmdJZj1cImZvcm0gfCBmb3JtR2V0R3JvdXA6ICdlbmFibGUnIGFzIGZvcm1Hcm91cFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XHJcbiAgICA8aW9uLWdyaWQ+XHJcbiAgICAgIDwhLS0gV2l0aCB2YWx1ZSAtLT5cclxuICAgICAgPGlvbi1yb3c+XHJcbiAgICAgICAgPGlvbi1jb2w+XHJcbiAgICAgICAgICA8aW9uLXRleHQ+PGg0PldpdGggdmFsdWU8L2g0PjwvaW9uLXRleHQ+XHJcbiAgICAgICAgPC9pb24tY29sPlxyXG4gICAgICA8L2lvbi1yb3c+XHJcblxyXG4gICAgICA8aW9uLXJvdz5cclxuICAgICAgICA8IS0tIEREIC0tPlxyXG4gICAgICAgIDxpb24tY29sPlxyXG4gICAgICAgICAgPGlvbi1jYXJkPlxyXG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxyXG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cclxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+Rm9ybWF0IEREPC9pb24tbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cclxuICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XHJcbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cclxuICAgICAgICAgICAgICAgICAgPHNtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwcmU+e3sgc3RyaW5naWZ5KGZvcm1Hcm91cC52YWx1ZSkgfX08L3ByZT5cclxuICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XHJcbiAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cclxuICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XHJcbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxyXG4gICAgICAgICAgICAgIDxpb24tZ3JpZCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8aW9uLXJvdz5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYXRsb25nLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsYXRpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibGF0aXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbGF0TG9uZ1BhdHRlcm49XCJERFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkxhdGl0dWRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJtb2JpbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L21hdC1sYXRsb25nLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XHJcbiAgICAgICAgICAgICAgICAgIDxpb24tY29sPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGF0bG9uZy1maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibG9uZ2l0dWRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJsb25naXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbGF0TG9uZ1BhdHRlcm49XCJERFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkxvbmdpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttb2JpbGVdPVwibW9iaWxlXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9tYXQtbGF0bG9uZy1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tcm93PlxyXG4gICAgICAgICAgICAgIDwvaW9uLWdyaWQ+XHJcbiAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cclxuICAgICAgICAgIDwvaW9uLWNhcmQ+XHJcbiAgICAgICAgPC9pb24tY29sPlxyXG5cclxuICAgICAgICA8IS0tIERETU1TUyAtLT5cclxuICAgICAgICA8aW9uLWNvbD5cclxuICAgICAgICAgIDxpb24tY2FyZD5cclxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cclxuICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPkZvcm1hdCBERE1NPC9pb24tbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cclxuICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XHJcbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cclxuICAgICAgICAgICAgICAgICAgPHNtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwcmU+e3sgc3RyaW5naWZ5KGZvcm1Hcm91cC52YWx1ZSkgfX08L3ByZT5cclxuICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XHJcbiAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cclxuICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XHJcbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxyXG4gICAgICAgICAgICAgIDxpb24tZ3JpZCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8aW9uLXJvdz5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYXRsb25nLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsYXRpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibGF0aXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbGF0TG9uZ1BhdHRlcm49XCJERE1NXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTGF0aXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbW9iaWxlXT1cIm1vYmlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvbWF0LWxhdGxvbmctZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYXRsb25nLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsb25naXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImxvbmdpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBsYXRMb25nUGF0dGVybj1cIkRETU1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJMb25naXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbW9iaWxlXT1cIm1vYmlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvbWF0LWxhdGxvbmctZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cclxuICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cclxuICAgICAgICAgICAgICA8L2lvbi1ncmlkPlxyXG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgICA8L2lvbi1jYXJkPlxyXG4gICAgICAgIDwvaW9uLWNvbD5cclxuXHJcbiAgICAgICAgPCEtLSBERE1NU1MgLS0+XHJcbiAgICAgICAgPGlvbi1jb2w+XHJcbiAgICAgICAgICA8aW9uLWNhcmQ+XHJcbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XHJcbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5Gb3JtYXQgRERNTVNTPC9pb24tbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cclxuICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XHJcbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cclxuICAgICAgICAgICAgICAgICAgPHNtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwcmU+e3sgc3RyaW5naWZ5KGZvcm1Hcm91cC52YWx1ZSkgfX08L3ByZT5cclxuICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XHJcbiAgICAgICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cclxuICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XHJcbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxyXG4gICAgICAgICAgICAgIDxpb24tZ3JpZCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8aW9uLXJvdz5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYXRsb25nLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsYXRpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibGF0aXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbGF0TG9uZ1BhdHRlcm49XCJERE1NU1NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJMYXRpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttb2JpbGVdPVwibW9iaWxlXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9tYXQtbGF0bG9uZy1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhdGxvbmctZmllbGRcclxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxvbmdpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwibG9uZ2l0dWRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGxhdExvbmdQYXR0ZXJuPVwiRERNTVNTXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTG9uZ2l0dWRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJtb2JpbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L21hdC1sYXRsb25nLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1yb3c+XHJcbiAgICAgICAgICAgICAgPC9pb24tZ3JpZD5cclxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxyXG4gICAgICAgICAgPC9pb24tY2FyZD5cclxuICAgICAgICA8L2lvbi1jb2w+XHJcbiAgICAgIDwvaW9uLXJvdz5cclxuICAgIDwvaW9uLWdyaWQ+XHJcbiAgPC9mb3JtPlxyXG5cclxuICA8IS0tIERpc2FibGUgIC0tPlxyXG4gIDxmb3JtICpuZ0lmPVwiZm9ybSB8IGZvcm1HZXRHcm91cDogJ2Rpc2FibGUnIGFzIGZvcm1Hcm91cFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCI+XHJcbiAgICA8aW9uLWdyaWQ+XHJcbiAgICAgIDxpb24tcm93PlxyXG4gICAgICAgIDxpb24tY29sPlxyXG4gICAgICAgICAgPGlvbi10ZXh0PjxoND5EaXNhYmxlZCBjb250cm9sPC9oND48L2lvbi10ZXh0PlxyXG4gICAgICAgIDwvaW9uLWNvbD5cclxuICAgICAgPC9pb24tcm93PlxyXG4gICAgICA8aW9uLXJvdz5cclxuICAgICAgICA8aW9uLWNvbD5cclxuICAgICAgICAgIDxpb24tY2FyZD5cclxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cclxuICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPkRpc2FibGVkIGNvbnRyb2w8L2lvbi1sYWJlbD5cclxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxyXG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cclxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHByZT57eyBzdHJpbmdpZnkoZm9ybUdyb3VwLnZhbHVlKSB9fTwvcHJlPlxyXG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cclxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxyXG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cclxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxpb24tcm93PlxyXG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhdGxvbmctZmllbGRcclxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxhdGl0dWRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJsYXRpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBsYXRMb25nUGF0dGVybj1cIkRETU1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJMYXRpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttb2JpbGVdPVwibW9iaWxlXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0UHJlZml4PnJvb208L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeD5ncHNfZml4ZWQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhdGxvbmctZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYXRsb25nLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsb25naXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImxvbmdpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBsYXRMb25nUGF0dGVybj1cIkRETU1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJMb25naXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbW9iaWxlXT1cIm1vYmlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFByZWZpeD5yb29tPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRTdWZmaXggKGNsaWNrKT1cImdlb1Bvc2l0aW9uKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmdwc19maXhlZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYXRsb25nLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1yb3c+XHJcbiAgICAgICAgICAgICAgPC9pb24tZ3JpZD5cclxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxyXG4gICAgICAgICAgPC9pb24tY2FyZD5cclxuICAgICAgICA8L2lvbi1jb2w+XHJcblxyXG4gICAgICAgIDxpb24tY29sPlxyXG4gICAgICAgICAgPGlvbi1jYXJkPlxyXG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxyXG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cclxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+UmVhZG9ubHkgKGNvbnRyb2wgaXMgZW5hYmxlKTwvaW9uLWxhYmVsPlxyXG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XHJcbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxyXG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cclxuICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInJlYWRvbmx5RmllbGQucmVhZG9ubHkgPSAkZXZlbnQuY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJyZWFkb25seUZpZWxkLnJlYWRvbmx5XCJcclxuICAgICAgICAgICAgICA+PC9tYXQtY2hlY2tib3g+XHJcblxyXG4gICAgICAgICAgICAgIDxpb24tZ3JpZCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8aW9uLXJvdz5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYXRsb25nLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAjcmVhZG9ubHlGaWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm0gfCBmb3JtR2V0Q29udHJvbDogJ2VuYWJsZS5sYXRpdHVkZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImxhdGl0dWRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGxhdExvbmdQYXR0ZXJuPVwiRERNTVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkxhdGl0dWRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJtb2JpbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRQcmVmaXg+cm9vbTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4Pmdwc19maXhlZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGF0bG9uZy1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tcm93PlxyXG4gICAgICAgICAgICAgIDwvaW9uLWdyaWQ+XHJcbiAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cclxuICAgICAgICAgIDwvaW9uLWNhcmQ+XHJcbiAgICAgICAgPC9pb24tY29sPlxyXG5cclxuICAgICAgICA8aW9uLWNvbD5cclxuICAgICAgICAgIDxpb24tY2FyZD5cclxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cclxuICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XHJcbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPldpdGggaGludDwvaW9uLWxhYmVsPlxyXG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XHJcbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxyXG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cclxuICAgICAgICAgICAgICA8bWF0LWxhdGxvbmctZmllbGRcclxuICAgICAgICAgICAgICAgICNyZWFkb25seUZpZWxkXHJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybSB8IGZvcm1HZXRDb250cm9sOiAnZW5hYmxlLmxhdGl0dWRlJ1wiXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwibGF0aXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgbGF0TG9uZ1BhdHRlcm49XCJERE1NXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTGF0aXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXHJcbiAgICAgICAgICAgICAgICBbbW9iaWxlXT1cIm1vYmlsZVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1oaW50IGFsaWduPVwiZW5kXCI+VGhpcyBpcyBhIGxvbmcgbG9uZyBoaW50PC9tYXQtaGludD5cclxuICAgICAgICAgICAgICA8L21hdC1sYXRsb25nLWZpZWxkPlxyXG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgICA8L2lvbi1jYXJkPlxyXG4gICAgICAgIDwvaW9uLWNvbD5cclxuICAgICAgPC9pb24tcm93PlxyXG4gICAgPC9pb24tZ3JpZD5cclxuICA8L2Zvcm0+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI25ld0NvbXBvbmVudCBsZXQtZm9ybUdyb3VwTmFtZT1cImZvcm1Hcm91cFwiIGxldC1wYXR0ZXJuPVwibGF0TG9uZ1BhdHRlcm5cIiBsZXQtcmVxdWlyZWQ9XCJyZXF1aXJlZFwiPlxyXG4gIDxmb3JtICpuZ0lmPVwiZm9ybSB8IGZvcm1HZXRHcm91cDogZm9ybUdyb3VwTmFtZSBhcyBmb3JtR3JvdXBcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxyXG4gICAgPGlvbi1jYXJkPlxyXG4gICAgICA8aW9uLWNhcmQtaGVhZGVyPlxyXG4gICAgICAgIDxpb24tY2FyZC10aXRsZT5cclxuICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+e3sgZm9ybUdyb3VwTmFtZSB9fTwvaW9uLWxhYmVsPlxyXG4gICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XHJcbiAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxyXG4gICAgICAgICAgPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cclxuICAgICAgICAgICAgPGlvbi1yb3cgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxyXG4gICAgICAgICAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHByZT57eyBmb3JtR3JvdXAudmFsdWUgfCBqc29uIH19PC9wcmU+XHJcbiAgICAgICAgICAgICAgICAgICAgPHByZT5pbnZhbGlkID8gOiB7eyAoZm9ybUdyb3VwIHwgZm9ybUdldENvbnRyb2w6ICdsYXRpdHVkZScpLmludmFsaWQgfX08L3ByZT5cclxuICAgICAgICAgICAgICAgICAgICA8cHJlPnRvdWNoZWQgPyA6IHt7IChmb3JtR3JvdXAgfCBmb3JtR2V0Q29udHJvbDogJ2xhdGl0dWRlJykudG91Y2hlZCB9fTwvcHJlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwcmU+ZXJyb3JzIDoge3sgZm9ybUdyb3VwIHwgZm9ybUdldEdyb3VwOiAnbGF0aXR1ZGUnIHwgZm9ybUVycm9yIH19PC9wcmU+XHJcbiAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxyXG4gICAgICAgICAgICAgIDwvaW9uLWNvbD5cclxuICAgICAgICAgICAgPC9pb24tcm93PlxyXG4gICAgICAgICAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XHJcbiAgICAgICAgICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiIHNpemVMZz1cIjZcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtbGF0bG9uZy1maWVsZFxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsYXRpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJsYXRpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW2xhdExvbmdQYXR0ZXJuXT1cInBhdHRlcm5cIlxyXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0U2lnbj1cIi1cIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkxhdGl0dWRlXCJcclxuICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXHJcbiAgICAgICAgICAgICAgICA+PC9tYXQtbGF0bG9uZy1maWVsZD5cclxuICAgICAgICAgICAgICA8L2lvbi1jb2w+XHJcbiAgICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZUxnPVwiNlwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1sYXRsb25nLWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxvbmdpdHVkZVwiXHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJsb25naXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtsYXRMb25nUGF0dGVybl09XCJwYXR0ZXJuXCJcclxuICAgICAgICAgICAgICAgICAgZGVmYXVsdFNpZ249XCItXCJcclxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJMb25naXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcclxuICAgICAgICAgICAgICAgID48L21hdC1sYXRsb25nLWZpZWxkPlxyXG4gICAgICAgICAgICAgIDwvaW9uLWNvbD5cclxuICAgICAgICAgICAgPC9pb24tcm93PlxyXG4gICAgICAgICAgPC9pb24tZ3JpZD5cclxuICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxyXG4gICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cclxuICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cclxuICAgICAgICAgIDxpb24tcm93PlxyXG4gICAgICAgICAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCIgc2l6ZUxnPVwiNlwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGF0bG9uZy1maWVsZFxyXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibGF0aXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImxhdGl0dWRlXCJcclxuICAgICAgICAgICAgICAgIFtsYXRMb25nUGF0dGVybl09XCJwYXR0ZXJuXCJcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRTaWduPVwiLVwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkxhdGl0dWRlXCJcclxuICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxyXG4gICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0UHJlZml4PnJvb208L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJnZW9Qb3NpdGlvbigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5ncHNfZml4ZWQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9tYXQtbGF0bG9uZy1maWVsZD5cclxuICAgICAgICAgICAgPC9pb24tY29sPlxyXG4gICAgICAgICAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCIgc2l6ZUxnPVwiNlwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGF0bG9uZy1maWVsZFxyXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibG9uZ2l0dWRlXCJcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJsb25naXR1ZGVcIlxyXG4gICAgICAgICAgICAgICAgW2xhdExvbmdQYXR0ZXJuXT1cInBhdHRlcm5cIlxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdFNpZ249XCItXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTG9uZ2l0dWRlXCJcclxuICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxyXG4gICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0UHJlZml4PnJvb208L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJnZW9Qb3NpdGlvbigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5ncHNfZml4ZWQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9tYXQtbGF0bG9uZy1maWVsZD5cclxuICAgICAgICAgICAgPC9pb24tY29sPlxyXG4gICAgICAgICAgPC9pb24tcm93PlxyXG4gICAgICAgICAgPGlvbi1yb3cgKm5nSWY9XCJnZW9Qb3NpdGlvbk1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgPGlvbi1jb2w+e3sgZ2VvUG9zaXRpb25NZXNzYWdlIH19PC9pb24tY29sPlxyXG4gICAgICAgICAgPC9pb24tcm93PlxyXG4gICAgICAgIDwvaW9uLWdyaWQ+XHJcbiAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cclxuICAgIDwvaW9uLWNhcmQ+XHJcbiAgPC9mb3JtPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
|