raain-app 1.5.28 → 1.5.30

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/CHANGELOG.md CHANGED
@@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Changed
11
+
12
+ - RAD-121: some reorg + details (W)
13
+
14
+ ## [1.5.29] - 2025-07-04
15
+
16
+ ### Fixed
17
+
18
+ - RAD-121: with raain-ui 2.3.16, no editable charts, local dates everywhere
19
+
10
20
  ## [1.5.27] - 2025-06-30
11
21
 
12
22
  ### Changed
@@ -13,10 +13,10 @@ export class RaainCompareStackComponent {
13
13
  }
14
14
  }
15
15
  RaainCompareStackComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainCompareStackComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
16
- RaainCompareStackComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainCompareStackComponent, selector: "raain-compare-stack", inputs: { compareManager: "compareManager", currentHeight: "currentHeight", cumulative: "cumulative" }, outputs: { selectedPoint: "selectedPoint" }, ngImport: i0, template: "<div *ngIf=\"cumulative\">\n <ion-col size-md=\"6\" size-xs=\"12\">\n <ion-card class=\"card-compare\">\n <ion-card-header>Cumulative</ion-card-header>\n <ion-card-content *ngIf=\"compareManager.globalComparePoints?.length\">\n <raain-compare\n (selectedPoint)=\"onClick($event)\"\n [compareIndex]=\"0\"\n [currentHeight]=\"500\"\n [pointMax]=\"compareManager.globalComparePointsMax\"\n [points]=\"compareManager.globalComparePoints\"></raain-compare>\n </ion-card-content>\n </ion-card>\n </ion-col>\n</div>\n\n<div *ngIf=\"!cumulative\">\n\n <!--\n <ion-col>\n <ion-card id=\"card-matrix\">\n <div *ngIf=\"compareManager?.compareNames?.length\">\n <raain-speed [compareSpeedMatrix]=\"compareManager.compareSpeedMatrix\"\n [compareTrustedIndicator]=\"compareManager.compareTrustedIndicator\"\n [currentHeight]=\"300\"\n ></raain-speed>\n </div>\n <ion-card-content>\n {{ compareManager?.compareVersion }}\n </ion-card-content>\n </ion-card>\n </ion-col> -->\n\n <ion-col *ngFor=\"let compare of compareManager?.uiCompares; index as compareIndex\" size-md=\"6\" size-xs=\"12\">\n <ion-card class=\"card-compare\">\n <ion-card-header>{{ compare.name }} {{ compare.remarks }}\n </ion-card-header>\n <ion-card-content *ngIf=\"compare.comparePoints?.length\">\n <raain-compare\n (selectedPoint)=\"onClick($event)\"\n [compareIndex]=\"compareIndex\"\n [currentHeight]=\"500\"\n [pointMax]=\"compare.comparePointsMax\"\n [points]=\"compare.comparePoints\"></raain-compare>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!--\n <ion-card id=\"card-selected-gauge\" slot=\"end\">\n <ion-card-content>\n <ion-accordion-group>\n\n <ion-accordion value=\"selected\">\n <ion-item color=\"light\" slot=\"header\">\n <ion-label>debug</ion-label>\n </ion-item>\n\n <div class=\"ion-padding\" slot=\"content\">\n date: {{ currentTimeframeTarget.date | date:'yyyy-MM-dd HH:mm:ss' }}<br>\n radarMeasureId: {{ currentTimeframeTarget.radarMeasureId }}<br>\n rainComputationId: {{ currentTimeframeTarget.rainComputationId }}<br>\n rainComputationVersion: {{ currentTimeframeTarget.rainComputationVersion }}<br>\n rainComputationQualitiesPerDate :\n <ul>\n <li *ngFor=\"let rcq of currentTimeframeTarget.rainComputationQualitiesPerDate\">\n {{ rcq.version }} - {{ rcq.id }}\n </li>\n </ul>\n </div>\n\n </ion-accordion>\n <ion-accordion *ngIf=\"selectedGauge\" value=\"context\">\n <ion-item color=\"light\" slot=\"header\">\n <ion-label>{{ selectedGaugeInPointsDetail }}</ion-label>\n </ion-item>\n <div [innerHTML]=\"formatLabelOfSelectedGauge(selectedGaugeInPoints)\" class=\"ion-padding\"\n slot=\"content\"></div>\n </ion-accordion>\n </ion-accordion-group>\n </ion-card-content>\n </ion-card>\n -->\n</div>\n", styles: ["#card-matrix{width:170px}.card-compare{min-width:300px}ion-card-header{padding:0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i2.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i2.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: i3.RaainCompareComponent, selector: "raain-compare", inputs: ["points", "pointMax", "remarks", "compareIndex", "currentHeight", "currentWidth"], outputs: ["selectedPoint"] }] });
16
+ RaainCompareStackComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainCompareStackComponent, selector: "raain-compare-stack", inputs: { compareManager: "compareManager", currentHeight: "currentHeight", cumulative: "cumulative" }, outputs: { selectedPoint: "selectedPoint" }, ngImport: i0, template: "<div *ngIf=\"cumulative\">\n <ion-col size-md=\"6\" size-xs=\"12\">\n <ion-card class=\"card-compare\">\n <ion-card-header>Cumulative</ion-card-header>\n <ion-card-content *ngIf=\"compareManager.globalComparePoints?.length\">\n <raain-compare\n (selectedPoint)=\"onClick($event)\"\n [compareIndex]=\"0\"\n [currentHeight]=\"500\"\n [pointMax]=\"compareManager.globalComparePointsMax\"\n [points]=\"compareManager.globalComparePoints\"></raain-compare>\n </ion-card-content>\n </ion-card>\n </ion-col>\n</div>\n\n<div *ngIf=\"!cumulative\">\n\n <!--\n <ion-col>\n <ion-card id=\"card-matrix\">\n <div *ngIf=\"compareManager?.compareNames?.length\">\n <raain-speed [compareSpeedMatrix]=\"compareManager.compareSpeedMatrix\"\n [compareTrustedIndicator]=\"compareManager.compareTrustedIndicator\"\n [currentHeight]=\"300\"\n ></raain-speed>\n </div>\n <ion-card-content>\n {{ compareManager?.compareVersion }}\n </ion-card-content>\n </ion-card>\n </ion-col> -->\n\n <ion-col *ngFor=\"let compare of compareManager?.uiCompares; index as compareIndex\" size-md=\"6\" size-xs=\"12\">\n <ion-card class=\"card-compare\">\n <ion-card-header>{{ compare.name }} {{ compare.remarks }}\n </ion-card-header>\n <ion-card-content *ngIf=\"compare.comparePoints?.length\">\n <raain-compare\n (selectedPoint)=\"onClick($event)\"\n [compareIndex]=\"compareIndex\"\n [currentHeight]=\"500\"\n [pointMax]=\"compare.comparePointsMax\"\n [points]=\"compare.comparePoints\"></raain-compare>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!--\n <ion-card id=\"card-selected-gauge\" slot=\"end\">\n <ion-card-content>\n <ion-accordion-group>\n\n <ion-accordion value=\"selected\">\n <ion-item color=\"light\" slot=\"header\">\n <ion-label>debug</ion-label>\n </ion-item>\n\n <div class=\"ion-padding\" slot=\"content\">\n date: {{ currentTimeframeTarget.date | date:'yyyy-MM-dd HH:mm:ss' }}<br>\n radarMeasureId: {{ currentTimeframeTarget.radarMeasureId }}<br>\n rainComputationId: {{ currentTimeframeTarget.rainComputationId }}<br>\n rainComputationVersion: {{ currentTimeframeTarget.rainComputationVersion }}<br>\n rainComputationQualitiesPerDate :\n <ul>\n <li *ngFor=\"let rcq of currentTimeframeTarget.rainComputationQualitiesPerDate\">\n {{ rcq.version }} - {{ rcq.id }}\n </li>\n </ul>\n </div>\n\n </ion-accordion>\n <ion-accordion *ngIf=\"selectedGauge\" value=\"context\">\n <ion-item color=\"light\" slot=\"header\">\n <ion-label>{{ selectedGaugeInPointsDetail }}</ion-label>\n </ion-item>\n <div [innerHTML]=\"formatLabelOfSelectedGauge(selectedGaugeInPoints)\" class=\"ion-padding\"\n slot=\"content\"></div>\n </ion-accordion>\n </ion-accordion-group>\n </ion-card-content>\n </ion-card>\n -->\n</div>\n", styles: ["#card-matrix{width:170px}.card-compare{min-width:300px}ion-card-header{padding:0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i2.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i2.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: i3.RaainCompareComponent, selector: "raain-compare", inputs: ["points", "pointMax", "remarks", "compareIndex", "currentHeight", "currentWidth"], outputs: ["selectedPoint"] }] });
17
17
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainCompareStackComponent, decorators: [{
18
18
  type: Component,
19
- args: [{ selector: 'raain-compare-stack', template: "<div *ngIf=\"cumulative\">\n <ion-col size-md=\"6\" size-xs=\"12\">\n <ion-card class=\"card-compare\">\n <ion-card-header>Cumulative</ion-card-header>\n <ion-card-content *ngIf=\"compareManager.globalComparePoints?.length\">\n <raain-compare\n (selectedPoint)=\"onClick($event)\"\n [compareIndex]=\"0\"\n [currentHeight]=\"500\"\n [pointMax]=\"compareManager.globalComparePointsMax\"\n [points]=\"compareManager.globalComparePoints\"></raain-compare>\n </ion-card-content>\n </ion-card>\n </ion-col>\n</div>\n\n<div *ngIf=\"!cumulative\">\n\n <!--\n <ion-col>\n <ion-card id=\"card-matrix\">\n <div *ngIf=\"compareManager?.compareNames?.length\">\n <raain-speed [compareSpeedMatrix]=\"compareManager.compareSpeedMatrix\"\n [compareTrustedIndicator]=\"compareManager.compareTrustedIndicator\"\n [currentHeight]=\"300\"\n ></raain-speed>\n </div>\n <ion-card-content>\n {{ compareManager?.compareVersion }}\n </ion-card-content>\n </ion-card>\n </ion-col> -->\n\n <ion-col *ngFor=\"let compare of compareManager?.uiCompares; index as compareIndex\" size-md=\"6\" size-xs=\"12\">\n <ion-card class=\"card-compare\">\n <ion-card-header>{{ compare.name }} {{ compare.remarks }}\n </ion-card-header>\n <ion-card-content *ngIf=\"compare.comparePoints?.length\">\n <raain-compare\n (selectedPoint)=\"onClick($event)\"\n [compareIndex]=\"compareIndex\"\n [currentHeight]=\"500\"\n [pointMax]=\"compare.comparePointsMax\"\n [points]=\"compare.comparePoints\"></raain-compare>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!--\n <ion-card id=\"card-selected-gauge\" slot=\"end\">\n <ion-card-content>\n <ion-accordion-group>\n\n <ion-accordion value=\"selected\">\n <ion-item color=\"light\" slot=\"header\">\n <ion-label>debug</ion-label>\n </ion-item>\n\n <div class=\"ion-padding\" slot=\"content\">\n date: {{ currentTimeframeTarget.date | date:'yyyy-MM-dd HH:mm:ss' }}<br>\n radarMeasureId: {{ currentTimeframeTarget.radarMeasureId }}<br>\n rainComputationId: {{ currentTimeframeTarget.rainComputationId }}<br>\n rainComputationVersion: {{ currentTimeframeTarget.rainComputationVersion }}<br>\n rainComputationQualitiesPerDate :\n <ul>\n <li *ngFor=\"let rcq of currentTimeframeTarget.rainComputationQualitiesPerDate\">\n {{ rcq.version }} - {{ rcq.id }}\n </li>\n </ul>\n </div>\n\n </ion-accordion>\n <ion-accordion *ngIf=\"selectedGauge\" value=\"context\">\n <ion-item color=\"light\" slot=\"header\">\n <ion-label>{{ selectedGaugeInPointsDetail }}</ion-label>\n </ion-item>\n <div [innerHTML]=\"formatLabelOfSelectedGauge(selectedGaugeInPoints)\" class=\"ion-padding\"\n slot=\"content\"></div>\n </ion-accordion>\n </ion-accordion-group>\n </ion-card-content>\n </ion-card>\n -->\n</div>\n", styles: ["#card-matrix{width:170px}.card-compare{min-width:300px}ion-card-header{padding:0}\n"] }]
19
+ args: [{ selector: 'raain-compare-stack', template: "<div *ngIf=\"cumulative\">\n <ion-col size-md=\"6\" size-xs=\"12\">\n <ion-card class=\"card-compare\">\n <ion-card-header>Cumulative</ion-card-header>\n <ion-card-content *ngIf=\"compareManager.globalComparePoints?.length\">\n <raain-compare\n (selectedPoint)=\"onClick($event)\"\n [compareIndex]=\"0\"\n [currentHeight]=\"500\"\n [pointMax]=\"compareManager.globalComparePointsMax\"\n [points]=\"compareManager.globalComparePoints\"></raain-compare>\n </ion-card-content>\n </ion-card>\n </ion-col>\n</div>\n\n<div *ngIf=\"!cumulative\">\n\n <!--\n <ion-col>\n <ion-card id=\"card-matrix\">\n <div *ngIf=\"compareManager?.compareNames?.length\">\n <raain-speed [compareSpeedMatrix]=\"compareManager.compareSpeedMatrix\"\n [compareTrustedIndicator]=\"compareManager.compareTrustedIndicator\"\n [currentHeight]=\"300\"\n ></raain-speed>\n </div>\n <ion-card-content>\n {{ compareManager?.compareVersion }}\n </ion-card-content>\n </ion-card>\n </ion-col> -->\n\n <ion-col *ngFor=\"let compare of compareManager?.uiCompares; index as compareIndex\" size-md=\"6\" size-xs=\"12\">\n <ion-card class=\"card-compare\">\n <ion-card-header>{{ compare.name }} {{ compare.remarks }}\n </ion-card-header>\n <ion-card-content *ngIf=\"compare.comparePoints?.length\">\n <raain-compare\n (selectedPoint)=\"onClick($event)\"\n [compareIndex]=\"compareIndex\"\n [currentHeight]=\"500\"\n [pointMax]=\"compare.comparePointsMax\"\n [points]=\"compare.comparePoints\"></raain-compare>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!--\n <ion-card id=\"card-selected-gauge\" slot=\"end\">\n <ion-card-content>\n <ion-accordion-group>\n\n <ion-accordion value=\"selected\">\n <ion-item color=\"light\" slot=\"header\">\n <ion-label>debug</ion-label>\n </ion-item>\n\n <div class=\"ion-padding\" slot=\"content\">\n date: {{ currentTimeframeTarget.date | date:'yyyy-MM-dd HH:mm:ss' }}<br>\n radarMeasureId: {{ currentTimeframeTarget.radarMeasureId }}<br>\n rainComputationId: {{ currentTimeframeTarget.rainComputationId }}<br>\n rainComputationVersion: {{ currentTimeframeTarget.rainComputationVersion }}<br>\n rainComputationQualitiesPerDate :\n <ul>\n <li *ngFor=\"let rcq of currentTimeframeTarget.rainComputationQualitiesPerDate\">\n {{ rcq.version }} - {{ rcq.id }}\n </li>\n </ul>\n </div>\n\n </ion-accordion>\n <ion-accordion *ngIf=\"selectedGauge\" value=\"context\">\n <ion-item color=\"light\" slot=\"header\">\n <ion-label>{{ selectedGaugeInPointsDetail }}</ion-label>\n </ion-item>\n <div [innerHTML]=\"formatLabelOfSelectedGauge(selectedGaugeInPoints)\" class=\"ion-padding\"\n slot=\"content\"></div>\n </ion-accordion>\n </ion-accordion-group>\n </ion-card-content>\n </ion-card>\n -->\n</div>\n", styles: ["#card-matrix{width:170px}.card-compare{min-width:300px}ion-card-header{padding:0}\n"] }]
20
20
  }], ctorParameters: function () { return [{ type: i0.NgZone }]; }, propDecorators: { compareManager: [{
21
21
  type: Input
22
22
  }], currentHeight: [{
@@ -26,4 +26,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
26
26
  }], cumulative: [{
27
27
  type: Input
28
28
  }] } });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFhaW4tY29tcGFyZS1zdGFjay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9zaGFyZWQvcmFhaW4tY29tcGFyZS1zdGFjay9yYWFpbi1jb21wYXJlLXN0YWNrLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3NyYy9jb3JlL3NoYXJlZC9yYWFpbi1jb21wYXJlLXN0YWNrL3JhYWluLWNvbXBhcmUtc3RhY2suY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFTN0UsTUFBTSxPQUFPLDBCQUEwQjtJQWFuQyxZQUFvQixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUwzQixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUF5QyxDQUFDO0lBSzVDLENBQUM7SUFFNUIsT0FBTyxDQUFDLENBQXdDO1FBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxZQUFZLEVBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7O3dIQWpCUSwwQkFBMEI7NEdBQTFCLDBCQUEwQixnTkNUdkMsNm9HQW9GQTs0RkQzRWEsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNJLHFCQUFxQjs2RkFNeEIsY0FBYztzQkFEcEIsS0FBSztnQkFJQyxhQUFhO3NCQURuQixLQUFLO2dCQUlDLGFBQWE7c0JBRG5CLE1BQU07Z0JBSUEsVUFBVTtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBOZ1pvbmUsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1hZVHlwZX0gZnJvbSAnLi4veHl0eXBlJztcbmltcG9ydCB7Q29tcGFyZU1hbmFnZXJ9IGZyb20gJy4uL3Rvb2xzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdyYWFpbi1jb21wYXJlLXN0YWNrJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcmFhaW4tY29tcGFyZS1zdGFjay5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vcmFhaW4tY29tcGFyZS1zdGFjay5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBSYWFpbkNvbXBhcmVTdGFja0NvbXBvbmVudCB7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY29tcGFyZU1hbmFnZXI6IENvbXBhcmVNYW5hZ2VyO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY3VycmVudEhlaWdodDogbnVtYmVyO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkUG9pbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHtwb2ludDogWFlUeXBlOyBjb21wYXJlSW5kZXg6IG51bWJlcn0+KCk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjdW11bGF0aXZlOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSkge31cblxuICAgIHByb3RlY3RlZCBvbkNsaWNrKGU6IHtwb2ludDogWFlUeXBlOyBjb21wYXJlSW5kZXg6IG51bWJlcn0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFBvaW50LmVtaXQoe3BvaW50OiBlLnBvaW50LCBjb21wYXJlSW5kZXg6IGUuY29tcGFyZUluZGV4fSk7XG4gICAgfVxufVxuIiwiPGRpdiAqbmdJZj1cImN1bXVsYXRpdmVcIj5cbiAgPGlvbi1jb2wgc2l6ZS1tZD1cIjZcIiBzaXplLXhzPVwiMTJcIj5cbiAgICA8aW9uLWNhcmQgY2xhc3M9XCJjYXJkLWNvbXBhcmVcIj5cbiAgICAgIDxpb24tY2FyZC1oZWFkZXI+Q3VtdWxhdGl2ZTwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgPGlvbi1jYXJkLWNvbnRlbnQgKm5nSWY9XCJjb21wYXJlTWFuYWdlci5nbG9iYWxDb21wYXJlUG9pbnRzPy5sZW5ndGhcIj5cbiAgICAgICAgPHJhYWluLWNvbXBhcmVcbiAgICAgICAgICAoc2VsZWN0ZWRQb2ludCk9XCJvbkNsaWNrKCRldmVudClcIlxuICAgICAgICAgIFtjb21wYXJlSW5kZXhdPVwiMFwiXG4gICAgICAgICAgW2N1cnJlbnRIZWlnaHRdPVwiNTAwXCJcbiAgICAgICAgICBbcG9pbnRNYXhdPVwiY29tcGFyZU1hbmFnZXIuZ2xvYmFsQ29tcGFyZVBvaW50c01heFwiXG4gICAgICAgICAgW3BvaW50c109XCJjb21wYXJlTWFuYWdlci5nbG9iYWxDb21wYXJlUG9pbnRzXCI+PC9yYWFpbi1jb21wYXJlPlxuICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgIDwvaW9uLWNhcmQ+XG4gIDwvaW9uLWNvbD5cbjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwiIWN1bXVsYXRpdmVcIj5cblxuICA8IS0tXG4gIDxpb24tY29sPlxuICAgIDxpb24tY2FyZCBpZD1cImNhcmQtbWF0cml4XCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiY29tcGFyZU1hbmFnZXI/LmNvbXBhcmVOYW1lcz8ubGVuZ3RoXCI+XG4gICAgICAgIDxyYWFpbi1zcGVlZCBbY29tcGFyZVNwZWVkTWF0cml4XT1cImNvbXBhcmVNYW5hZ2VyLmNvbXBhcmVTcGVlZE1hdHJpeFwiXG4gICAgICAgICAgICAgICAgICAgICBbY29tcGFyZVRydXN0ZWRJbmRpY2F0b3JdPVwiY29tcGFyZU1hbmFnZXIuY29tcGFyZVRydXN0ZWRJbmRpY2F0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgW2N1cnJlbnRIZWlnaHRdPVwiMzAwXCJcbiAgICAgICAgPjwvcmFhaW4tc3BlZWQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICB7eyBjb21wYXJlTWFuYWdlcj8uY29tcGFyZVZlcnNpb24gfX1cbiAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICA8L2lvbi1jYXJkPlxuICA8L2lvbi1jb2w+IC0tPlxuXG4gIDxpb24tY29sICpuZ0Zvcj1cImxldCBjb21wYXJlIG9mICBjb21wYXJlTWFuYWdlcj8udWlDb21wYXJlczsgaW5kZXggYXMgY29tcGFyZUluZGV4XCIgc2l6ZS1tZD1cIjZcIiBzaXplLXhzPVwiMTJcIj5cbiAgICA8aW9uLWNhcmQgY2xhc3M9XCJjYXJkLWNvbXBhcmVcIj5cbiAgICAgIDxpb24tY2FyZC1oZWFkZXI+e3sgY29tcGFyZS5uYW1lIH19IHt7IGNvbXBhcmUucmVtYXJrcyB9fVxuICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICA8aW9uLWNhcmQtY29udGVudCAqbmdJZj1cImNvbXBhcmUuY29tcGFyZVBvaW50cz8ubGVuZ3RoXCI+XG4gICAgICAgIDxyYWFpbi1jb21wYXJlXG4gICAgICAgICAgKHNlbGVjdGVkUG9pbnQpPVwib25DbGljaygkZXZlbnQpXCJcbiAgICAgICAgICBbY29tcGFyZUluZGV4XT1cImNvbXBhcmVJbmRleFwiXG4gICAgICAgICAgW2N1cnJlbnRIZWlnaHRdPVwiNTAwXCJcbiAgICAgICAgICBbcG9pbnRNYXhdPVwiY29tcGFyZS5jb21wYXJlUG9pbnRzTWF4XCJcbiAgICAgICAgICBbcG9pbnRzXT1cImNvbXBhcmUuY29tcGFyZVBvaW50c1wiPjwvcmFhaW4tY29tcGFyZT5cbiAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICA8L2lvbi1jYXJkPlxuICA8L2lvbi1jb2w+XG5cbiAgPCEtLVxuICA8aW9uLWNhcmQgIGlkPVwiY2FyZC1zZWxlY3RlZC1nYXVnZVwiIHNsb3Q9XCJlbmRcIj5cbiAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgIDxpb24tYWNjb3JkaW9uLWdyb3VwPlxuXG4gICAgICAgIDxpb24tYWNjb3JkaW9uIHZhbHVlPVwic2VsZWN0ZWRcIj5cbiAgICAgICAgICA8aW9uLWl0ZW0gY29sb3I9XCJsaWdodFwiIHNsb3Q9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgIDxpb24tbGFiZWw+ZGVidWc8L2lvbi1sYWJlbD5cbiAgICAgICAgICA8L2lvbi1pdGVtPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlvbi1wYWRkaW5nXCIgc2xvdD1cImNvbnRlbnRcIj5cbiAgICAgICAgICAgIGRhdGU6IHt7IGN1cnJlbnRUaW1lZnJhbWVUYXJnZXQuZGF0ZSB8ICBkYXRlOid5eXl5LU1NLWRkIEhIOm1tOnNzJyB9fTxicj5cbiAgICAgICAgICAgIHJhZGFyTWVhc3VyZUlkOiB7eyBjdXJyZW50VGltZWZyYW1lVGFyZ2V0LnJhZGFyTWVhc3VyZUlkIH19PGJyPlxuICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uSWQ6IHt7IGN1cnJlbnRUaW1lZnJhbWVUYXJnZXQucmFpbkNvbXB1dGF0aW9uSWQgfX08YnI+XG4gICAgICAgICAgICByYWluQ29tcHV0YXRpb25WZXJzaW9uOiB7eyBjdXJyZW50VGltZWZyYW1lVGFyZ2V0LnJhaW5Db21wdXRhdGlvblZlcnNpb24gfX08YnI+XG4gICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlIDpcbiAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCByY3Egb2YgY3VycmVudFRpbWVmcmFtZVRhcmdldC5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlXCI+XG4gICAgICAgICAgICAgICAge3sgcmNxLnZlcnNpb24gfX0gLSB7eyByY3EuaWQgfX1cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9pb24tYWNjb3JkaW9uPlxuICAgICAgICA8aW9uLWFjY29yZGlvbiAqbmdJZj1cInNlbGVjdGVkR2F1Z2VcIiB2YWx1ZT1cImNvbnRleHRcIj5cbiAgICAgICAgICA8aW9uLWl0ZW0gY29sb3I9XCJsaWdodFwiIHNsb3Q9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgIDxpb24tbGFiZWw+e3sgc2VsZWN0ZWRHYXVnZUluUG9pbnRzRGV0YWlsIH19PC9pb24tbGFiZWw+XG4gICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiZm9ybWF0TGFiZWxPZlNlbGVjdGVkR2F1Z2Uoc2VsZWN0ZWRHYXVnZUluUG9pbnRzKVwiIGNsYXNzPVwiaW9uLXBhZGRpbmdcIlxuICAgICAgICAgICAgICAgc2xvdD1cImNvbnRlbnRcIj48L2Rpdj5cbiAgICAgICAgPC9pb24tYWNjb3JkaW9uPlxuICAgICAgPC9pb24tYWNjb3JkaW9uLWdyb3VwPlxuICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgPC9pb24tY2FyZD5cbiAgLS0+XG48L2Rpdj5cbiJdfQ==
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFhaW4tY29tcGFyZS1zdGFjay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZS9zaGFyZWQvcmFhaW4tY29tcGFyZS1zdGFjay9yYWFpbi1jb21wYXJlLXN0YWNrLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3NyYy9jb3JlL3NoYXJlZC9yYWFpbi1jb21wYXJlLXN0YWNrL3JhYWluLWNvbXBhcmUtc3RhY2suY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFTN0UsTUFBTSxPQUFPLDBCQUEwQjtJQWFuQyxZQUFvQixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUwzQixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUF5QyxDQUFDO0lBSzVDLENBQUM7SUFFNUIsT0FBTyxDQUFDLENBQXdDO1FBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQyxZQUFZLEVBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7O3dIQWpCUSwwQkFBMEI7NEdBQTFCLDBCQUEwQixnTkNUdkMsdThHQW9GQTs0RkQzRWEsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNJLHFCQUFxQjs2RkFNeEIsY0FBYztzQkFEcEIsS0FBSztnQkFJQyxhQUFhO3NCQURuQixLQUFLO2dCQUlDLGFBQWE7c0JBRG5CLE1BQU07Z0JBSUEsVUFBVTtzQkFEaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBOZ1pvbmUsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1hZVHlwZX0gZnJvbSAnLi4veHl0eXBlJztcbmltcG9ydCB7Q29tcGFyZU1hbmFnZXJ9IGZyb20gJy4uL3Rvb2xzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdyYWFpbi1jb21wYXJlLXN0YWNrJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcmFhaW4tY29tcGFyZS1zdGFjay5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vcmFhaW4tY29tcGFyZS1zdGFjay5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBSYWFpbkNvbXBhcmVTdGFja0NvbXBvbmVudCB7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY29tcGFyZU1hbmFnZXI6IENvbXBhcmVNYW5hZ2VyO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY3VycmVudEhlaWdodDogbnVtYmVyO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkUG9pbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHtwb2ludDogWFlUeXBlOyBjb21wYXJlSW5kZXg6IG51bWJlcn0+KCk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjdW11bGF0aXZlOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSkge31cblxuICAgIHByb3RlY3RlZCBvbkNsaWNrKGU6IHtwb2ludDogWFlUeXBlOyBjb21wYXJlSW5kZXg6IG51bWJlcn0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFBvaW50LmVtaXQoe3BvaW50OiBlLnBvaW50LCBjb21wYXJlSW5kZXg6IGUuY29tcGFyZUluZGV4fSk7XG4gICAgfVxufVxuIiwiPGRpdiAqbmdJZj1cImN1bXVsYXRpdmVcIj5cbiAgICA8aW9uLWNvbCBzaXplLW1kPVwiNlwiIHNpemUteHM9XCIxMlwiPlxuICAgICAgICA8aW9uLWNhcmQgY2xhc3M9XCJjYXJkLWNvbXBhcmVcIj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+Q3VtdWxhdGl2ZTwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQgKm5nSWY9XCJjb21wYXJlTWFuYWdlci5nbG9iYWxDb21wYXJlUG9pbnRzPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8cmFhaW4tY29tcGFyZVxuICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkUG9pbnQpPVwib25DbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wYXJlSW5kZXhdPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY3VycmVudEhlaWdodF09XCI1MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BvaW50TWF4XT1cImNvbXBhcmVNYW5hZ2VyLmdsb2JhbENvbXBhcmVQb2ludHNNYXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BvaW50c109XCJjb21wYXJlTWFuYWdlci5nbG9iYWxDb21wYXJlUG9pbnRzXCI+PC9yYWFpbi1jb21wYXJlPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICA8L2lvbi1jYXJkPlxuICAgIDwvaW9uLWNvbD5cbjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwiIWN1bXVsYXRpdmVcIj5cblxuICAgIDwhLS1cbiAgICA8aW9uLWNvbD5cbiAgICAgIDxpb24tY2FyZCBpZD1cImNhcmQtbWF0cml4XCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJjb21wYXJlTWFuYWdlcj8uY29tcGFyZU5hbWVzPy5sZW5ndGhcIj5cbiAgICAgICAgICA8cmFhaW4tc3BlZWQgW2NvbXBhcmVTcGVlZE1hdHJpeF09XCJjb21wYXJlTWFuYWdlci5jb21wYXJlU3BlZWRNYXRyaXhcIlxuICAgICAgICAgICAgICAgICAgICAgICBbY29tcGFyZVRydXN0ZWRJbmRpY2F0b3JdPVwiY29tcGFyZU1hbmFnZXIuY29tcGFyZVRydXN0ZWRJbmRpY2F0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICBbY3VycmVudEhlaWdodF09XCIzMDBcIlxuICAgICAgICAgID48L3JhYWluLXNwZWVkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAge3sgY29tcGFyZU1hbmFnZXI/LmNvbXBhcmVWZXJzaW9uIH19XG4gICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgIDwvaW9uLWNhcmQ+XG4gICAgPC9pb24tY29sPiAtLT5cblxuICAgIDxpb24tY29sICpuZ0Zvcj1cImxldCBjb21wYXJlIG9mICBjb21wYXJlTWFuYWdlcj8udWlDb21wYXJlczsgaW5kZXggYXMgY29tcGFyZUluZGV4XCIgc2l6ZS1tZD1cIjZcIiBzaXplLXhzPVwiMTJcIj5cbiAgICAgICAgPGlvbi1jYXJkIGNsYXNzPVwiY2FyZC1jb21wYXJlXCI+XG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPnt7IGNvbXBhcmUubmFtZSB9fSB7eyBjb21wYXJlLnJlbWFya3MgfX1cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQgKm5nSWY9XCJjb21wYXJlLmNvbXBhcmVQb2ludHM/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgIDxyYWFpbi1jb21wYXJlXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRQb2ludCk9XCJvbkNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBhcmVJbmRleF09XCJjb21wYXJlSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2N1cnJlbnRIZWlnaHRdPVwiNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwb2ludE1heF09XCJjb21wYXJlLmNvbXBhcmVQb2ludHNNYXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BvaW50c109XCJjb21wYXJlLmNvbXBhcmVQb2ludHNcIj48L3JhYWluLWNvbXBhcmU+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgPC9pb24tY29sPlxuXG4gICAgPCEtLVxuICAgIDxpb24tY2FyZCAgaWQ9XCJjYXJkLXNlbGVjdGVkLWdhdWdlXCIgc2xvdD1cImVuZFwiPlxuICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgIDxpb24tYWNjb3JkaW9uLWdyb3VwPlxuXG4gICAgICAgICAgPGlvbi1hY2NvcmRpb24gdmFsdWU9XCJzZWxlY3RlZFwiPlxuICAgICAgICAgICAgPGlvbi1pdGVtIGNvbG9yPVwibGlnaHRcIiBzbG90PVwiaGVhZGVyXCI+XG4gICAgICAgICAgICAgIDxpb24tbGFiZWw+ZGVidWc8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgIDwvaW9uLWl0ZW0+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpb24tcGFkZGluZ1wiIHNsb3Q9XCJjb250ZW50XCI+XG4gICAgICAgICAgICAgIGRhdGU6IHt7IGN1cnJlbnRUaW1lZnJhbWVUYXJnZXQuZGF0ZSB8ICBkYXRlOid5eXl5LU1NLWRkIEhIOm1tOnNzJyB9fTxicj5cbiAgICAgICAgICAgICAgcmFkYXJNZWFzdXJlSWQ6IHt7IGN1cnJlbnRUaW1lZnJhbWVUYXJnZXQucmFkYXJNZWFzdXJlSWQgfX08YnI+XG4gICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvbklkOiB7eyBjdXJyZW50VGltZWZyYW1lVGFyZ2V0LnJhaW5Db21wdXRhdGlvbklkIH19PGJyPlxuICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25WZXJzaW9uOiB7eyBjdXJyZW50VGltZWZyYW1lVGFyZ2V0LnJhaW5Db21wdXRhdGlvblZlcnNpb24gfX08YnI+XG4gICAgICAgICAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdGllc1BlckRhdGUgOlxuICAgICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCByY3Egb2YgY3VycmVudFRpbWVmcmFtZVRhcmdldC5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNQZXJEYXRlXCI+XG4gICAgICAgICAgICAgICAgICB7eyByY3EudmVyc2lvbiB9fSAtIHt7IHJjcS5pZCB9fVxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwvaW9uLWFjY29yZGlvbj5cbiAgICAgICAgICA8aW9uLWFjY29yZGlvbiAqbmdJZj1cInNlbGVjdGVkR2F1Z2VcIiB2YWx1ZT1cImNvbnRleHRcIj5cbiAgICAgICAgICAgIDxpb24taXRlbSBjb2xvcj1cImxpZ2h0XCIgc2xvdD1cImhlYWRlclwiPlxuICAgICAgICAgICAgICA8aW9uLWxhYmVsPnt7IHNlbGVjdGVkR2F1Z2VJblBvaW50c0RldGFpbCB9fTwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJmb3JtYXRMYWJlbE9mU2VsZWN0ZWRHYXVnZShzZWxlY3RlZEdhdWdlSW5Qb2ludHMpXCIgY2xhc3M9XCJpb24tcGFkZGluZ1wiXG4gICAgICAgICAgICAgICAgIHNsb3Q9XCJjb250ZW50XCI+PC9kaXY+XG4gICAgICAgICAgPC9pb24tYWNjb3JkaW9uPlxuICAgICAgICA8L2lvbi1hY2NvcmRpb24tZ3JvdXA+XG4gICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgPC9pb24tY2FyZD5cbiAgICAtLT5cbjwvZGl2PlxuIl19