@nova-ui/dashboards
Version:
Nova Dashboards is a framework designed to provide feature developers with a common solution for presenting data coming from various sources within a single view, as well as a set of predefined widget visualizations that are 100% configuration-driven and
84 lines • 13.2 kB
JavaScript
// © 2022 SolarWinds Worldwide, LLC. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to
// deal in the Software without restriction, including without limitation the
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
// sell copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
import { Injectable } from "@angular/core";
import get from "lodash/get";
import { distinctUntilChanged, map } from "rxjs/operators";
import { getParentComponentId } from "../../functions/get-parent-component-id";
import { parseStringWithData } from "../../functions/parse-string-with-data";
import { PizzagnaService } from "../../pizzagna/services/pizzagna.service";
import * as i0 from "@angular/core";
import * as i1 from "../../pizzagna/services/pizzagna.service";
export class PizzagnaBroadcasterService {
constructor(pizzagnaService) {
this.pizzagnaService = pizzagnaService;
this.defaultTrackOn = "pizzagna";
this.subscriptions = [];
}
setComponent(component, componentId) {
this.component = component;
this.componentId = componentId;
this.parentComponentId = getParentComponentId(componentId);
this.initChangeSubscriptions();
}
updateConfiguration(properties) {
this.configs = properties?.configs;
}
initChangeSubscriptions() {
for (const config of this.configs) {
const observable = this.getObservableFor(config);
if (!observable) {
console.warn("no observable found on 'PizzagnaBroadcasterService', for part: ", config);
return;
}
const subscription = observable.subscribe((v) => {
for (const path of config.paths) {
const validatedPath = parseStringWithData(path, this);
this.pizzagnaService.setProperty(validatedPath, v);
}
});
this.subscriptions.push(subscription);
}
}
getObservableFor(config) {
const trackOn = config.trackOn || this.defaultTrackOn;
const observable = trackOn === "component"
? this.getComponentObservableFor(config)
: this.getPizzagnaObservableFor(config);
return observable;
}
getPizzagnaObservableFor(part) {
return this.pizzagnaService.pizzaChanged.pipe(map((v) => get(v, part.key)), distinctUntilChanged());
}
getComponentObservableFor(part) {
const obs = get(this.component, part.key);
return obs?.pipe(distinctUntilChanged());
}
ngOnDestroy() {
for (const subscription of this.subscriptions) {
subscription.unsubscribe();
}
}
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PizzagnaBroadcasterService, deps: [{ token: i1.PizzagnaService }], target: i0.ɵɵFactoryTarget.Injectable }); }
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PizzagnaBroadcasterService }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PizzagnaBroadcasterService, decorators: [{
type: Injectable
}], ctorParameters: () => [{ type: i1.PizzagnaService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl6emFnbmEtYnJvYWRjYXN0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9wcm92aWRlcnMvcGl6emFnbmEtYnJvYWRjYXN0ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5REFBeUQ7QUFDekQsRUFBRTtBQUNGLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsOEVBQThFO0FBQzlFLCtFQUErRTtBQUMvRSw4RUFBOEU7QUFDOUUsNERBQTREO0FBQzVELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsdURBQXVEO0FBQ3ZELEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsNEVBQTRFO0FBQzVFLCtFQUErRTtBQUMvRSwwRUFBMEU7QUFDMUUsaUZBQWlGO0FBQ2pGLDZFQUE2RTtBQUM3RSxpQkFBaUI7QUFFakIsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUM7QUFFN0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7O0FBSTNFLE1BQU0sT0FBTywwQkFBMEI7SUFTbkMsWUFBb0IsZUFBZ0M7UUFBaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBTm5DLG1CQUFjLEdBQTJCLFVBQVUsQ0FBQztRQUU3RCxrQkFBYSxHQUFtQixFQUFFLENBQUM7SUFJWSxDQUFDO0lBRWpELFlBQVksQ0FBQyxTQUFjLEVBQUUsV0FBbUI7UUFDbkQsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTNELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxVQUF1QjtRQUM5QyxJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsRUFBRSxPQUFPLENBQUM7SUFDdkMsQ0FBQztJQUVPLHVCQUF1QjtRQUMzQixLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDL0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRWpELElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2IsT0FBTyxDQUFDLElBQUksQ0FDUixpRUFBaUUsRUFDakUsTUFBTSxDQUNULENBQUM7Z0JBQ0YsT0FBTzthQUNWO1lBRUQsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUM1QyxLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUU7b0JBQzdCLE1BQU0sYUFBYSxHQUFHLG1CQUFtQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDdEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUN0RDtZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDekM7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsTUFBMEI7UUFDL0MsTUFBTSxPQUFPLEdBQ1QsTUFBTSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzFDLE1BQU0sVUFBVSxHQUNaLE9BQU8sS0FBSyxXQUFXO1lBQ25CLENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDO1lBQ3hDLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEQsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVPLHdCQUF3QixDQUFDLElBQXdCO1FBQ3JELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUN6QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQzVCLG9CQUFvQixFQUFFLENBQ3pCLENBQUM7SUFDTixDQUFDO0lBRU8seUJBQXlCLENBQUMsSUFBd0I7UUFDdEQsTUFBTSxHQUFHLEdBQW9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzRCxPQUFPLEdBQUcsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTSxXQUFXO1FBQ2QsS0FBSyxNQUFNLFlBQVksSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQzNDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUM5QjtJQUNMLENBQUM7a0lBdkVRLDBCQUEwQjtzSUFBMUIsMEJBQTBCOzs0RkFBMUIsMEJBQTBCO2tCQUR0QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLy8gwqkgMjAyMiBTb2xhcldpbmRzIFdvcmxkd2lkZSwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuLy8gIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyAgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vICBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgZ2V0IGZyb20gXCJsb2Rhc2gvZ2V0XCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuXG5pbXBvcnQgeyBCcm9hZGNhc3RlclRyYWNrT25UeXBlLCBJQnJvYWRjYXN0ZXJDb25maWcgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgZ2V0UGFyZW50Q29tcG9uZW50SWQgfSBmcm9tIFwiLi4vLi4vZnVuY3Rpb25zL2dldC1wYXJlbnQtY29tcG9uZW50LWlkXCI7XG5pbXBvcnQgeyBwYXJzZVN0cmluZ1dpdGhEYXRhIH0gZnJvbSBcIi4uLy4uL2Z1bmN0aW9ucy9wYXJzZS1zdHJpbmctd2l0aC1kYXRhXCI7XG5pbXBvcnQgeyBQaXp6YWduYVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vcGl6emFnbmEvc2VydmljZXMvcGl6emFnbmEuc2VydmljZVwiO1xuaW1wb3J0IHsgSUNvbmZpZ3VyYWJsZSwgSVByb3BlcnRpZXMgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFBpenphZ25hQnJvYWRjYXN0ZXJTZXJ2aWNlIGltcGxlbWVudHMgSUNvbmZpZ3VyYWJsZSwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIGNvbXBvbmVudDogYW55O1xuICAgIHByaXZhdGUgY29uZmlnczogSUJyb2FkY2FzdGVyQ29uZmlnW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0VHJhY2tPbjogQnJvYWRjYXN0ZXJUcmFja09uVHlwZSA9IFwicGl6emFnbmFcIjtcblxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgICBwcml2YXRlIGNvbXBvbmVudElkOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBwYXJlbnRDb21wb25lbnRJZDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBwaXp6YWduYVNlcnZpY2U6IFBpenphZ25hU2VydmljZSkge31cblxuICAgIHB1YmxpYyBzZXRDb21wb25lbnQoY29tcG9uZW50OiBhbnksIGNvbXBvbmVudElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgICAgIHRoaXMuY29tcG9uZW50SWQgPSBjb21wb25lbnRJZDtcbiAgICAgICAgdGhpcy5wYXJlbnRDb21wb25lbnRJZCA9IGdldFBhcmVudENvbXBvbmVudElkKGNvbXBvbmVudElkKTtcblxuICAgICAgICB0aGlzLmluaXRDaGFuZ2VTdWJzY3JpcHRpb25zKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUNvbmZpZ3VyYXRpb24ocHJvcGVydGllczogSVByb3BlcnRpZXMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb25maWdzID0gcHJvcGVydGllcz8uY29uZmlncztcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRDaGFuZ2VTdWJzY3JpcHRpb25zKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbmZpZyBvZiB0aGlzLmNvbmZpZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmFibGUgPSB0aGlzLmdldE9ic2VydmFibGVGb3IoY29uZmlnKTtcblxuICAgICAgICAgICAgaWYgKCFvYnNlcnZhYmxlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICBcIm5vIG9ic2VydmFibGUgZm91bmQgb24gJ1BpenphZ25hQnJvYWRjYXN0ZXJTZXJ2aWNlJywgZm9yIHBhcnQ6IFwiLFxuICAgICAgICAgICAgICAgICAgICBjb25maWdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gb2JzZXJ2YWJsZS5zdWJzY3JpYmUoKHYpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHBhdGggb2YgY29uZmlnLnBhdGhzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZFBhdGggPSBwYXJzZVN0cmluZ1dpdGhEYXRhKHBhdGgsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBpenphZ25hU2VydmljZS5zZXRQcm9wZXJ0eSh2YWxpZGF0ZWRQYXRoLCB2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9ic2VydmFibGVGb3IoY29uZmlnOiBJQnJvYWRjYXN0ZXJDb25maWcpIHtcbiAgICAgICAgY29uc3QgdHJhY2tPbjogQnJvYWRjYXN0ZXJUcmFja09uVHlwZSA9XG4gICAgICAgICAgICBjb25maWcudHJhY2tPbiB8fCB0aGlzLmRlZmF1bHRUcmFja09uO1xuICAgICAgICBjb25zdCBvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPGFueT4gPVxuICAgICAgICAgICAgdHJhY2tPbiA9PT0gXCJjb21wb25lbnRcIlxuICAgICAgICAgICAgICAgID8gdGhpcy5nZXRDb21wb25lbnRPYnNlcnZhYmxlRm9yKGNvbmZpZylcbiAgICAgICAgICAgICAgICA6IHRoaXMuZ2V0UGl6emFnbmFPYnNlcnZhYmxlRm9yKGNvbmZpZyk7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGl6emFnbmFPYnNlcnZhYmxlRm9yKHBhcnQ6IElCcm9hZGNhc3RlckNvbmZpZykge1xuICAgICAgICByZXR1cm4gdGhpcy5waXp6YWduYVNlcnZpY2UucGl6emFDaGFuZ2VkLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHYpID0+IGdldCh2LCBwYXJ0LmtleSkpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29tcG9uZW50T2JzZXJ2YWJsZUZvcihwYXJ0OiBJQnJvYWRjYXN0ZXJDb25maWcpIHtcbiAgICAgICAgY29uc3Qgb2JzOiBPYnNlcnZhYmxlPGFueT4gPSBnZXQodGhpcy5jb21wb25lbnQsIHBhcnQua2V5KTtcbiAgICAgICAgcmV0dXJuIG9icz8ucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3Qgc3Vic2NyaXB0aW9uIG9mIHRoaXMuc3Vic2NyaXB0aW9ucykge1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=