UNPKG

@iotize/ionic

Version:

Iotize specific building blocks on top of @ionic/angular.

137 lines 19.6 kB
import { __decorate, __metadata } from "tslib"; import { ChangeDetectorRef, Component, ElementRef, Inject, Input, NgZone, PLATFORM_ID, ViewEncapsulation, } from '@angular/core'; import { ModalController } from '@ionic/angular'; import { PieChartComponent } from '@swimlane/ngx-charts'; import { BehaviorSubject, Subject, combineLatest } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { MonitoringAppGenComponent } from '../../metadata/decorators'; import { ChartDataModel, } from '../ChartDataModel'; import { TapVariableDataPopupComponent } from '../tap-variable-data-popup/tap-variable-data-popup.component'; import * as i0 from "@angular/core"; import * as i1 from "@ionic/angular"; import * as i2 from "@angular/common"; import * as i3 from "@swimlane/ngx-charts"; import * as i4 from "../../ui-directive/export-data.directive"; let TapVariablePieChartAdvancedComponent = class TapVariablePieChartAdvancedComponent extends PieChartComponent { modalController; showDetails = false; showExportButton = false; exportedFileName; set variable(variableOrArray) { this.input = this.chartModel.initVariable(variableOrArray); } set history(enable) { this._history.next(enable); } set valueCountLimit(limit) { if (limit === undefined) { limit = 30; } this._valueCountLimit.next(limit); } set label(indexOrArray) { this.chartModel.initLabel(indexOrArray); } colorScheme = { domain: [ '#5DADE2', '#9B59B6', '#F39C12', '#5AA454', '#A10A28', '#C7B42C', '#AAAAAA', ], }; _history = new BehaviorSubject(true); _valueCountLimit = new BehaviorSubject(30); _input = new BehaviorSubject([]); set input(inputs) { this._input.next(inputs); } destroyed = new Subject(); ngOnInit() { combineLatest([this._valueCountLimit, this._input, this._history]) .pipe(takeUntil(this.destroyed)) .subscribe(([valueCountLimit, input, history]) => { this.chartModel.destroyCurrentSub(); this.subscription = this.chartModel .defineInputStreamSingle(input, history, valueCountLimit) .subscribe((result) => { this.results = result; }); this.cd.detectChanges(); }); } results = [ { name: '---', value: 0, extra: 0, }, ]; chartModel = new ChartDataModel(); subscription; constructor(myChartElement, zone, cd, platformId, modalController) { super(myChartElement, zone, cd, platformId); this.modalController = modalController; } ngAfterViewChecked() { this.cd.detectChanges(); } onSelect(event) { if (typeof event === 'object') { if (this.showDetails) { this.chartModel .showDetail(event, this.modalController, TapVariableDataPopupComponent) .catch((err) => { console.log(err); }); } } } ngOnDestroy() { this.subscription?.unsubscribe(); this.chartModel.destroyCurrentSub(); } /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TapVariablePieChartAdvancedComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: PLATFORM_ID }, { token: i1.ModalController }], target: i0.ɵɵFactoryTarget.Component }); /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: TapVariablePieChartAdvancedComponent, selector: "tap-variable-pie-chart-advanced", inputs: { showDetails: "showDetails", showExportButton: "showExportButton", exportedFileName: "exportedFileName", variable: "variable", history: "history", valueCountLimit: "valueCountLimit", label: "label", colorScheme: "colorScheme", input: "input" }, usesInheritance: true, ngImport: i0, template: "<div #containerRef style=\"width: 100%; position: relative\">\n <ngx-charts-advanced-pie-chart\n #charts\n [view]=\"[containerRef.offsetWidth, containerRef.offsetHeight]\"\n [scheme]=\"colorScheme\"\n [results]=\"results\"\n (select)=\"onSelect($event)\"\n >\n </ngx-charts-advanced-pie-chart>\n <ion-fab-button\n id=\"exportFabButton\"\n size=\"small\"\n tapExportData\n [dataToExport]=\"results\"\n [exportedFileName]=\"exportedFileName\"\n *ngIf=\"showExportButton\"\n >\n <ion-icon name=\"download\"></ion-icon>\n </ion-fab-button>\n</div>\n", styles: [".legend-items{padding-top:10px!important;padding-bottom:10px!important}#exportFabButton{position:absolute;top:50px;right:10px}@media (prefers-color-scheme: dark){.legend-item{color:#ccc!important}.legend-item:hover{color:#fff!important}}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.AdvancedPieChartComponent, selector: "ngx-charts-advanced-pie-chart", inputs: ["gradient", "activeEntries", "tooltipDisabled", "tooltipText", "label", "valueFormatting", "nameFormatting", "percentageFormatting"], outputs: ["activate", "deactivate"] }, { kind: "component", type: i1.IonFabButton, selector: "ion-fab-button", inputs: ["activated", "closeIcon", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "show", "size", "target", "translucent", "type"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "directive", type: i4.ExportDataDirective, selector: "[tapExportData]", inputs: ["exportedFileName", "dataToExport", "format"], outputs: ["exportDataError"] }], encapsulation: i0.ViewEncapsulation.None }); }; TapVariablePieChartAdvancedComponent = __decorate([ MonitoringAppGenComponent({ constraints: { isNumber: 'YES', isArray: 'YES', }, }), __metadata("design:paramtypes", [ElementRef, NgZone, ChangeDetectorRef, String, ModalController]) ], TapVariablePieChartAdvancedComponent); export { TapVariablePieChartAdvancedComponent }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TapVariablePieChartAdvancedComponent, decorators: [{ type: Component, args: [{ selector: 'tap-variable-pie-chart-advanced', encapsulation: ViewEncapsulation.None, template: "<div #containerRef style=\"width: 100%; position: relative\">\n <ngx-charts-advanced-pie-chart\n #charts\n [view]=\"[containerRef.offsetWidth, containerRef.offsetHeight]\"\n [scheme]=\"colorScheme\"\n [results]=\"results\"\n (select)=\"onSelect($event)\"\n >\n </ngx-charts-advanced-pie-chart>\n <ion-fab-button\n id=\"exportFabButton\"\n size=\"small\"\n tapExportData\n [dataToExport]=\"results\"\n [exportedFileName]=\"exportedFileName\"\n *ngIf=\"showExportButton\"\n >\n <ion-icon name=\"download\"></ion-icon>\n </ion-fab-button>\n</div>\n", styles: [".legend-items{padding-top:10px!important;padding-bottom:10px!important}#exportFabButton{position:absolute;top:50px;right:10px}@media (prefers-color-scheme: dark){.legend-item{color:#ccc!important}.legend-item:hover{color:#fff!important}}\n"] }] }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID] }] }, { type: i1.ModalController }], propDecorators: { showDetails: [{ type: Input }], showExportButton: [{ type: Input }], exportedFileName: [{ type: Input }], variable: [{ type: Input }], history: [{ type: Input }], valueCountLimit: [{ type: Input }], label: [{ type: Input }], colorScheme: [{ type: Input }], input: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwLXZhcmlhYmxlLXBpZS1jaGFydC1hZHZhbmNlZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pb3RpemUtaW9uaWMvbW9uaXRvcmluZy9zcmMvbGliL3VpLWNvbXBvbmVudHMvdGFwLXZhcmlhYmxlLXBpZS1jaGFydC1hZHZhbmNlZC90YXAtdmFyaWFibGUtcGllLWNoYXJ0LWFkdmFuY2VkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lvdGl6ZS1pb25pYy9tb25pdG9yaW5nL3NyYy9saWIvdWktY29tcG9uZW50cy90YXAtdmFyaWFibGUtcGllLWNoYXJ0LWFkdmFuY2VkL3RhcC12YXJpYWJsZS1waWUtY2hhcnQtYWR2YW5jZWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFHTixXQUFXLEVBQ1gsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBZ0IsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsY0FBYyxHQUdmLE1BQU0sbUJBQW1CLENBQUM7QUFFM0IsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sOERBQThELENBQUM7Ozs7OztBQWN0RyxJQUFNLG9DQUFv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QUFLO3NCQURSLEtBQUs7Z0JBTU4sV0FBVztzQkFEVixLQUFLO2dCQW9CRixLQUFLO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBQTEFURk9STV9JRCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9kYWxDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgQWJzdHJhY3RWYXJpYWJsZSB9IGZyb20gJ0Bpb3RpemUvdGFwL2RhdGEnO1xuaW1wb3J0IHsgUGllQ2hhcnRDb21wb25lbnQgfSBmcm9tICdAc3dpbWxhbmUvbmd4LWNoYXJ0cyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTW9uaXRvcmluZ0FwcEdlbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21ldGFkYXRhL2RlY29yYXRvcnMnO1xuaW1wb3J0IHtcbiAgQ2hhcnREYXRhTW9kZWwsXG4gIENoYXJ0SW5wdXRTaW5nbGUsXG4gIENoYXJ0SW5wdXRTdHJlYW1WYXIsXG59IGZyb20gJy4uL0NoYXJ0RGF0YU1vZGVsJztcbmltcG9ydCB7IE9uQ2hhcnRTZWxlY3RFdmVudCB9IGZyb20gJy4uL3NoYXJlZC10eXBlcyc7XG5pbXBvcnQgeyBUYXBWYXJpYWJsZURhdGFQb3B1cENvbXBvbmVudCB9IGZyb20gJy4uL3RhcC12YXJpYWJsZS1kYXRhLXBvcHVwL3RhcC12YXJpYWJsZS1kYXRhLXBvcHVwLmNvbXBvbmVudCc7XG5cbkBNb25pdG9yaW5nQXBwR2VuQ29tcG9uZW50KHtcbiAgY29uc3RyYWludHM6IHtcbiAgICBpc051bWJlcjogJ1lFUycsXG4gICAgaXNBcnJheTogJ1lFUycsXG4gIH0sXG59KVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGFwLXZhcmlhYmxlLXBpZS1jaGFydC1hZHZhbmNlZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90YXAtdmFyaWFibGUtcGllLWNoYXJ0LWFkdmFuY2VkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFwLXZhcmlhYmxlLXBpZS1jaGFydC1hZHZhbmNlZC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBUYXBWYXJpYWJsZVBpZUNoYXJ0QWR2YW5jZWRDb21wb25lbnRcbiAgZXh0ZW5kcyBQaWVDaGFydENvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0NoZWNrZWQsIE9uRGVzdHJveSwgT25Jbml0XG57XG4gIEBJbnB1dCgpXG4gIHNob3dEZXRhaWxzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgc2hvd0V4cG9ydEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGV4cG9ydGVkRmlsZU5hbWU/OiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgc2V0IHZhcmlhYmxlKFxuICAgIHZhcmlhYmxlT3JBcnJheTogQWJzdHJhY3RWYXJpYWJsZTxudW1iZXIgfCBudW1iZXJbXT4gfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgdGhpcy5pbnB1dCA9IHRoaXMuY2hhcnRNb2RlbC5pbml0VmFyaWFibGUodmFyaWFibGVPckFycmF5KTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBoaXN0b3J5KGVuYWJsZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2hpc3RvcnkubmV4dChlbmFibGUpO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHZhbHVlQ291bnRMaW1pdChsaW1pdDogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKGxpbWl0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxpbWl0ID0gMzA7XG4gICAgfVxuICAgIHRoaXMuX3ZhbHVlQ291bnRMaW1pdC5uZXh0KGxpbWl0KTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBsYWJlbChpbmRleE9yQXJyYXk6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHwgRnVuY3Rpb24pIHtcbiAgICB0aGlzLmNoYXJ0TW9kZWwuaW5pdExhYmVsKGluZGV4T3JBcnJheSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBjb2xvclNjaGVtZSA9IHtcbiAgICBkb21haW46IFtcbiAgICAgICcjNURBREUyJyxcbiAgICAgICcjOUI1OUI2JyxcbiAgICAgICcjRjM5QzEyJyxcbiAgICAgICcjNUFBNDU0JyxcbiAgICAgICcjQTEwQTI4JyxcbiAgICAgICcjQzdCNDJDJyxcbiAgICAgICcjQUFBQUFBJyxcbiAgICBdLFxuICB9O1xuXG4gIHByaXZhdGUgX2hpc3RvcnkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuXG4gIHByaXZhdGUgX3ZhbHVlQ291bnRMaW1pdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigzMCk7XG5cbiAgcHJpdmF0ZSBfaW5wdXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENoYXJ0SW5wdXRTdHJlYW1WYXJbXT4oW10pO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBpbnB1dChpbnB1dHM6IENoYXJ0SW5wdXRTdHJlYW1WYXJbXSkge1xuICAgIHRoaXMuX2lucHV0Lm5leHQoaW5wdXRzKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVzdHJveWVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl92YWx1ZUNvdW50TGltaXQsIHRoaXMuX2lucHV0LCB0aGlzLl9oaXN0b3J5XSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCkpXG4gICAgICAuc3Vic2NyaWJlKChbdmFsdWVDb3VudExpbWl0LCBpbnB1dCwgaGlzdG9yeV0pID0+IHtcbiAgICAgICAgdGhpcy5jaGFydE1vZGVsLmRlc3Ryb3lDdXJyZW50U3ViKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5jaGFydE1vZGVsXG4gICAgICAgICAgLmRlZmluZUlucHV0U3RyZWFtU2luZ2xlKGlucHV0LCBoaXN0b3J5LCB2YWx1ZUNvdW50TGltaXQpXG4gICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBDaGFydElucHV0U2luZ2xlW10pID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IHJlc3VsdCBhcyBDaGFydElucHV0U2luZ2xlW107XG4gICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gIH1cblxuICByZXN1bHRzOiBDaGFydElucHV0U2luZ2xlW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJy0tLScsXG4gICAgICB2YWx1ZTogMCxcbiAgICAgIGV4dHJhOiAwLFxuICAgIH0sXG4gIF07XG5cbiAgcHJpdmF0ZSBjaGFydE1vZGVsOiBDaGFydERhdGFNb2RlbCA9IG5ldyBDaGFydERhdGFNb2RlbCgpO1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG15Q2hhcnRFbGVtZW50OiBFbGVtZW50UmVmPGFueT4sXG4gICAgem9uZTogTmdab25lLFxuICAgIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwbGF0Zm9ybUlkOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBtb2RhbENvbnRyb2xsZXI6IE1vZGFsQ29udHJvbGxlclxuICApIHtcbiAgICBzdXBlcihteUNoYXJ0RWxlbWVudCwgem9uZSwgY2QsIHBsYXRmb3JtSWQpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgb25TZWxlY3QoZXZlbnQ6IE9uQ2hhcnRTZWxlY3RFdmVudCkge1xuICAgIGlmICh0eXBlb2YgZXZlbnQgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAodGhpcy5zaG93RGV0YWlscykge1xuICAgICAgICB0aGlzLmNoYXJ0TW9kZWxcbiAgICAgICAgICAuc2hvd0RldGFpbChcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgdGhpcy5tb2RhbENvbnRyb2xsZXIsXG4gICAgICAgICAgICBUYXBWYXJpYWJsZURhdGFQb3B1cENvbXBvbmVudFxuICAgICAgICAgIClcbiAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNoYXJ0TW9kZWwuZGVzdHJveUN1cnJlbnRTdWIoKTtcbiAgfVxufVxuIiwiPGRpdiAjY29udGFpbmVyUmVmIHN0eWxlPVwid2lkdGg6IDEwMCU7IHBvc2l0aW9uOiByZWxhdGl2ZVwiPlxuICA8bmd4LWNoYXJ0cy1hZHZhbmNlZC1waWUtY2hhcnRcbiAgICAjY2hhcnRzXG4gICAgW3ZpZXddPVwiW2NvbnRhaW5lclJlZi5vZmZzZXRXaWR0aCwgY29udGFpbmVyUmVmLm9mZnNldEhlaWdodF1cIlxuICAgIFtzY2hlbWVdPVwiY29sb3JTY2hlbWVcIlxuICAgIFtyZXN1bHRzXT1cInJlc3VsdHNcIlxuICAgIChzZWxlY3QpPVwib25TZWxlY3QoJGV2ZW50KVwiXG4gID5cbiAgPC9uZ3gtY2hhcnRzLWFkdmFuY2VkLXBpZS1jaGFydD5cbiAgPGlvbi1mYWItYnV0dG9uXG4gICAgaWQ9XCJleHBvcnRGYWJCdXR0b25cIlxuICAgIHNpemU9XCJzbWFsbFwiXG4gICAgdGFwRXhwb3J0RGF0YVxuICAgIFtkYXRhVG9FeHBvcnRdPVwicmVzdWx0c1wiXG4gICAgW2V4cG9ydGVkRmlsZU5hbWVdPVwiZXhwb3J0ZWRGaWxlTmFtZVwiXG4gICAgKm5nSWY9XCJzaG93RXhwb3J0QnV0dG9uXCJcbiAgPlxuICAgIDxpb24taWNvbiBuYW1lPVwiZG93bmxvYWRcIj48L2lvbi1pY29uPlxuICA8L2lvbi1mYWItYnV0dG9uPlxuPC9kaXY+XG4iXX0=