UNPKG

@versatiledatakit/shared

Version:

Versatile Data Kit Shared library enables reusability of shared features like: NgRx Redux, Error Handlers, Utils, Generic Components, etc.

215 lines • 17.8 kB
/* * Copyright 2023-2025 Broadcom * SPDX-License-Identifier: Apache-2.0 */ /* eslint-disable @typescript-eslint/no-explicit-any */ import { extractTaskFromIdentifier, RequestFilterImpl, RequestPageImpl } from '../../../common'; import { ComponentStateImpl, FAILED, IDLE, LOADED, LOADING } from './state'; import { ComponentModelComparable } from './component-model.comparable'; import { AbstractComponentModel } from './component.model.interface'; /** * ** Generic Model for all Components. */ export class ComponentModel extends AbstractComponentModel { /** * ** Constructor. */ constructor(_componentState, _routerState) { super(); this._componentState = _componentState; this._routerState = _routerState; } /** * ** Factory method. */ static of(componentState, routerState) { return new ComponentModel(componentState, routerState); } /** * @inheritDoc */ get routerState() { return this._routerState; } /** * @inheritDoc */ get status() { return this.getComponentState().status; } /** * @inheritDoc */ get routePath() { return this.getComponentState().routePath || this.routerState.state.routeSegments.routePath; } /** * @inheritDoc */ getComponentState() { return this._componentState; } /** * @inheritDoc */ withSearch(search) { this.updateComponentState({ search }); return this; } /** * @inheritDoc */ withPage(page, size) { this.updateComponentState({ page: RequestPageImpl.of(page, size) }); return this; } /** * @inheritDoc */ withFilter(filterPredicates) { this.updateComponentState({ filter: RequestFilterImpl.of(...filterPredicates) }); return this; } /** * @inheritDoc */ withRequestParam(key, value) { this.getComponentState().requestParams.set(key, value); return this; } /** * @inheritDoc */ withData(key, data) { this.getComponentState().data.set(key, data); return this; } /** * @inheritDoc */ withTask(taskIdentifier) { this.updateComponentState({ task: taskIdentifier }); return this; } /** * @inheritDoc */ clearTask() { this.updateComponentState({ task: null }); return this; } /** * @inheritDoc */ getTask() { return extractTaskFromIdentifier(this.getComponentState().task); } /** * @inheritDoc */ getTaskUniqueIdentifier() { return this.getComponentState().task; } /** * @inheritDoc */ withError(errorRecord) { this.getComponentState().errors.record(errorRecord); return this; } /** * @inheritDoc */ clearErrors() { this.getComponentState().errors.clear(); return this; } /** * @inheritDoc */ removeErrorCode(...errorCodes) { this.getComponentState().errors.removeCode(...errorCodes); return this; } /** * @inheritDoc */ removeErrorCodePatterns(...errorCodePatterns) { this.getComponentState().errors.removeCodePattern(...errorCodePatterns); return this; } /** * @inheritDoc */ withUiState(key, value) { this.getComponentState().uiState.set(key, value); return this; } /** * @inheritDoc */ getUiState(key) { return this.getComponentState().uiState.get(key); } /** * @inheritDoc */ withStatusIdle() { this.updateComponentState({ status: IDLE }); return this; } /** * @inheritDoc */ withStatusLoading() { this.updateComponentState({ status: LOADING }); return this; } /** * @inheritDoc */ withStatusLoaded() { this.updateComponentState({ status: LOADED }); return this; } /** * @inheritDoc */ withStatusFailed() { this.updateComponentState({ status: FAILED }); return this; } /** * @inheritDoc */ updateComponentState(patchState) { this._componentState = ComponentStateImpl.of({ ...this.getComponentState(), ...patchState }); return this; } /** * @inheritDoc */ prepareForDestroy() { this.withStatusIdle(); this.updateComponentState({ errors: null }); return this; } /** * @inheritDoc */ isModified(model) { return ComponentModelComparable.of(this).notEqual(ComponentModelComparable.of(model)); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvY29yZS9jb21wb25lbnQvbW9kZWwvY29tcG9uZW50Lm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILHVEQUF1RDtBQUV2RCxPQUFPLEVBQTZCLHlCQUF5QixFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSTNILE9BQU8sRUFBa0Isa0JBQWtCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFjLE1BQU0sU0FBUyxDQUFDO0FBRXhHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRXhFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXJFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGNBQWUsU0FBUSxzQkFBc0I7SUFDdEQ7O09BRUc7SUFDSCxZQUNjLGVBQStCLEVBQy9CLFlBQXlCO1FBRW5DLEtBQUssRUFBRSxDQUFDO1FBSEUsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9CLGlCQUFZLEdBQVosWUFBWSxDQUFhO0lBR3ZDLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsY0FBOEIsRUFBRSxXQUF3QjtRQUM5RCxPQUFPLElBQUksY0FBYyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDM0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFB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O1lBQ3pDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzNCLEdBQUcsVUFBVTtTQUNoQixDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxpQkFBaUI7UUFDYixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1lBQ3RCLE1BQU0sRUFBRSxJQUFJO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVSxDQUFDLEtBQXFCO1FBQzVCLE9BQU8sd0JBQXdCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxRixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjMtMjAyNSBCcm9hZGNvbVxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5cbmltcG9ydCB7IEFwaVByZWRpY2F0ZSwgRXJyb3JSZWNvcmQsIGV4dHJhY3RUYXNrRnJvbUlkZW50aWZpZXIsIFJlcXVlc3RGaWx0ZXJJbXBsLCBSZXF1ZXN0UGFnZUltcGwgfSBmcm9tICcuLi8uLi8uLi9jb21tb24nO1xuXG5pbXBvcnQgeyBSb3V0ZXJTdGF0ZSB9IGZyb20gJy4uLy4uL3JvdXRlcic7XG5cbmltcG9ydCB7IENvbXBvbmVudFN0YXRlLCBDb21wb25lbnRTdGF0ZUltcGwsIEZBSUxFRCwgSURMRSwgTE9BREVELCBMT0FESU5HLCBTdGF0dXNUeXBlIH0gZnJvbSAnLi9zdGF0ZSc7XG5cbmltcG9ydCB7IENvbXBvbmVudE1vZGVsQ29tcGFyYWJsZSB9IGZyb20gJy4vY29tcG9uZW50LW1vZGVsLmNvbXBhcmFibGUnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudE1vZGVsIH0gZnJvbSAnLi9jb21wb25lbnQubW9kZWwuaW50ZXJmYWNlJztcblxuLyoqXG4gKiAqKiBHZW5lcmljIE1vZGVsIGZvciBhbGwgQ29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbXBvbmVudE1vZGVsIGV4dGVuZHMgQWJzdHJhY3RDb21wb25lbnRNb2RlbCB7XG4gICAgLyoqXG4gICAgICogKiogQ29uc3RydWN0b3IuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBfY29tcG9uZW50U3RhdGU6IENvbXBvbmVudFN0YXRlLFxuICAgICAgICBwcm90ZWN0ZWQgX3JvdXRlclN0YXRlOiBSb3V0ZXJTdGF0ZVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICoqIEZhY3RvcnkgbWV0aG9kLlxuICAgICAqL1xuICAgIHN0YXRpYyBvZihjb21wb25lbnRTdGF0ZTogQ29tcG9uZW50U3RhdGUsIHJvdXRlclN0YXRlOiBSb3V0ZXJTdGF0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IENvbXBvbmVudE1vZGVsKGNvbXBvbmVudFN0YXRlLCByb3V0ZXJTdGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cbiAgICBnZXQgcm91dGVyU3RhdGUoKTogUm91dGVyU3RhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVyU3RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cbiAgICBnZXQgc3RhdHVzKCk6IFN0YXR1c1R5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRTdGF0ZSgpLnN0YXR1cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIGdldCByb3V0ZVBhdGgoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50U3RhdGUoKS5yb3V0ZVBhdGggfHwgdGhpcy5yb3V0ZXJTdGF0ZS5zdGF0ZS5yb3V0ZVNlZ21lbnRzLnJvdXRlUGF0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAqKiBSZWZlcmVuY2UgdG8gcHJldmlvdXMgbW9kZWwgZm9yIGNvbXBhcmlzb24gb25seS5cbiAgICAgKi9cbiAgICByZWFkb25seSBwcmV2aW91c01vZGVsOiBSZWFkb25seTxDb21wb25lbnRNb2RlbD47XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIGdldENvbXBvbmVudFN0YXRlKCk6IENvbXBvbmVudFN0YXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXBvbmVudFN0YXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0RG9jXG4gICAgICovXG4gICAgd2l0aFNlYXJjaChzZWFyY2g6IHN0cmluZykge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbXBvbmVudFN0YXRlKHtcbiAgICAgICAgICAgIHNlYXJjaFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIHdpdGhQYWdlKHBhZ2U6IG51bWJlciwgc2l6ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50U3RhdGUoe1xuICAgICAgICAgICAgcGFnZTogUmVxdWVzdFBhZ2VJbXBsLm9mKHBhZ2UsIHNpemUpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0RG9jXG4gICAgICovXG4gICAgd2l0aEZpbHRlcihmaWx0ZXJQcmVkaWNhdGVzOiBBcGlQcmVkaWNhdGVbXSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbXBvbmVudFN0YXRlKHtcbiAgICAgICAgICAgIGZpbHRlcjogUmVxdWVzdEZpbHRlckltcGwub2YoLi4uZmlsdGVyUHJlZGljYXRlcylcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cbiAgICB3aXRoUmVxdWVzdFBhcmFtKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuZ2V0Q29tcG9uZW50U3RhdGUoKS5yZXF1ZXN0UGFyYW1zLnNldChrZXksIHZhbHVlKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIHdpdGhEYXRhKGtleTogc3RyaW5nLCBkYXRhOiBhbnkpIHtcbiAgICAgICAgdGhpcy5nZXRDb21wb25lbnRTdGF0ZSgpLmRhdGEuc2V0KGtleSwgZGF0YSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cbiAgICB3aXRoVGFzayh0YXNrSWRlbnRpZmllcjogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50U3RhdGUoeyB0YXNrOiB0YXNrSWRlbnRpZmllciB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIGNsZWFyVGFzaygpIHtcbiAgICAgICAgdGhpcy51cGRhdGVDb21wb25lbnRTdGF0ZSh7IHRhc2s6IG51bGwgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cbiAgICBnZXRUYXNrKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBleHRyYWN0VGFza0Zyb21JZGVudGlmaWVyKHRoaXMuZ2V0Q29tcG9uZW50U3RhdGUoKS50YXNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIGdldFRhc2tVbmlxdWVJZGVudGlmaWVyKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudFN0YXRlKCkudGFzaztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIHdpdGhFcnJvcihlcnJvclJlY29yZDogRXJyb3JSZWNvcmQpIHtcbiAgICAgICAgdGhpcy5nZXRDb21wb25lbnRTdGF0ZSgpLmVycm9ycy5yZWNvcmQoZXJyb3JSZWNvcmQpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0RG9jXG4gICAgICovXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICAgIHRoaXMuZ2V0Q29tcG9uZW50U3RhdGUoKS5lcnJvcnMuY2xlYXIoKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIHJlbW92ZUVycm9yQ29kZSguLi5lcnJvckNvZGVzOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgICAgICB0aGlzLmdldENvbXBvbmVudFN0YXRlKCkuZXJyb3JzLnJlbW92ZUNvZGUoLi4uZXJyb3JDb2Rlcyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cbiAgICByZW1vdmVFcnJvckNvZGVQYXR0ZXJucyguLi5lcnJvckNvZGVQYXR0ZXJuczogc3RyaW5nW10pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5nZXRDb21wb25lbnRTdGF0ZSgpLmVycm9ycy5yZW1vdmVDb2RlUGF0dGVybiguLi5lcnJvckNvZGVQYXR0ZXJucyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cbiAgICB3aXRoVWlTdGF0ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLmdldENvbXBvbmVudFN0YXRlKCkudWlTdGF0ZS5zZXQoa2V5LCB2YWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cbiAgICBnZXRVaVN0YXRlPFQ+KGtleTogc3RyaW5nKTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudFN0YXRlKCkudWlTdGF0ZS5nZXQoa2V5KSBhcyBUO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0RG9jXG4gICAgICovXG4gICAgd2l0aFN0YXR1c0lkbGUoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50U3RhdGUoeyBzdGF0dXM6IElETEUgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cbiAgICB3aXRoU3RhdHVzTG9hZGluZygpIHtcbiAgICAgICAgdGhpcy51cGRhdGVDb21wb25lbnRTdGF0ZSh7IHN0YXR1czogTE9BRElORyB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIHdpdGhTdGF0dXNMb2FkZWQoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50U3RhdGUoeyBzdGF0dXM6IExPQURFRCB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIHdpdGhTdGF0dXNGYWlsZWQoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50U3RhdGUoeyBzdGF0dXM6IEZBSUxFRCB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdERvY1xuICAgICAqL1xuICAgIHVwZGF0ZUNvbXBvbmVudFN0YXRlKHBhdGNoU3RhdGU6IFBhcnRpYWw8Q29tcG9uZW50U3RhdGU+KSB7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudFN0YXRlID0gQ29tcG9uZW50U3RhdGVJbXBsLm9mKHtcbiAgICAgICAgICAgIC4uLnRoaXMuZ2V0Q29tcG9uZW50U3RhdGUoKSxcbiAgICAgICAgICAgIC4uLnBhdGNoU3RhdGVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGluaGVyaXREb2NcbiAgICAgKi9cbiAgICBwcmVwYXJlRm9yRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy53aXRoU3RhdHVzSWRsZSgpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlQ29tcG9uZW50U3RhdGUoe1xuICAgICAgICAgICAgZXJyb3JzOiBudWxsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpbmhlcml0RG9jXG4gICAgICovXG4gICAgaXNNb2RpZmllZChtb2RlbDogQ29tcG9uZW50TW9kZWwpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIENvbXBvbmVudE1vZGVsQ29tcGFyYWJsZS5vZih0aGlzKS5ub3RFcXVhbChDb21wb25lbnRNb2RlbENvbXBhcmFibGUub2YobW9kZWwpKTtcbiAgICB9XG59XG4iXX0=