@asi-ngtools/lib
Version:
This project is a little components library, simple to use, which will help you to simplify your project.
123 lines (122 loc) • 14 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { AsiNotification } from './notification/asi-notification.component';
import { AsiNotificationContainer } from './container/asi-notification-container.component';
import { Injectable, ComponentFactoryResolver, ApplicationRef } from '@angular/core';
var AsiNotificationService = /** @class */ (function () {
function AsiNotificationService(resolver, appRef) {
this.resolver = resolver;
this.appRef = appRef;
this.containerByPosition = new Map();
}
/**
* @template T
* @param {?} content
* @param {?} config
* @return {?}
*/
AsiNotificationService.prototype.fromComponent = /**
* @template T
* @param {?} content
* @param {?} config
* @return {?}
*/
function (content, config) {
/** @type {?} */
var containerRef = this.getContainerForPosition(config.position);
/** @type {?} */
var notificationRef = this.createNotificiation(content, containerRef, config);
containerRef.instance.addNotification(notificationRef, config);
return notificationRef.instance;
};
/**
* @param {?} position
* @return {?}
*/
AsiNotificationService.prototype.getContainerForPosition = /**
* @param {?} position
* @return {?}
*/
function (position) {
var _this = this;
if (this.containerByPosition.get(position) == null) {
/** @type {?} */
var rootComponent = this.appRef.components[0].instance;
if (!rootComponent.viewContainerRef) {
/** @type {?} */
var appName = this.appRef.componentTypes[0].name;
// tslint:disable-next-line:max-line-length
throw new Error('AsiNotification : Please add "viewContainerRef : ViewContainerRef" declaration in your root component constructor : ' + appName);
}
/** @type {?} */
var asiNotificationContainerFactory = this.resolver.resolveComponentFactory(AsiNotificationContainer);
/** @type {?} */
var containerRef = rootComponent.viewContainerRef.createComponent(asiNotificationContainerFactory, 0);
containerRef.instance.setPosition(position);
this.containerByPosition.set(position, containerRef);
// Ecoute de la mise a vide du container pour le supprimer
containerRef.instance.onContainerEmpty().subscribe(function (asiNotificationContainer) {
/** @type {?} */
var containerToDestroy = _this.containerByPosition.get(asiNotificationContainer.getPosition());
_this.containerByPosition.delete(asiNotificationContainer.getPosition());
containerToDestroy.destroy();
});
}
return this.containerByPosition.get(position);
};
/**
* @template T
* @param {?} content
* @param {?} containerRef
* @param {?} config
* @return {?}
*/
AsiNotificationService.prototype.createNotificiation = /**
* @template T
* @param {?} content
* @param {?} containerRef
* @param {?} config
* @return {?}
*/
function (content, containerRef, config) {
/** @type {?} */
var asiNotificationFactory = this.resolver.resolveComponentFactory(AsiNotification);
/** @type {?} */
var asiNotificationRef = containerRef.instance.viewContainerRef.createComponent(asiNotificationFactory, 0);
asiNotificationRef.instance.setConfig(config);
// Deplacement de la notification dans la div notifications-container
containerRef.location.nativeElement.children[0].appendChild(asiNotificationRef.location.nativeElement);
/** @type {?} */
var contentFactory = this.resolver.resolveComponentFactory(content);
/** @type {?} */
var contentRef = asiNotificationRef.instance.viewContainerRef.createComponent(contentFactory);
/** @type {?} */
var contentComponent = contentRef.instance;
// Ajout de la reference du composant dans le AsiNotification
asiNotificationRef.instance['_component'] = contentComponent;
// Deplacement du contenu dans la div notification-panel
asiNotificationRef.location.nativeElement.appendChild(contentRef.location.nativeElement);
return asiNotificationRef;
};
AsiNotificationService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
AsiNotificationService.ctorParameters = function () { return [
{ type: ComponentFactoryResolver },
{ type: ApplicationRef }
]; };
return AsiNotificationService;
}());
export { AsiNotificationService };
if (false) {
/** @type {?} */
AsiNotificationService.prototype.containerByPosition;
/** @type {?} */
AsiNotificationService.prototype.resolver;
/** @type {?} */
AsiNotificationService.prototype.appRef;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpLW5vdGlmaWNhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFzaS1uZ3Rvb2xzL2xpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2FzaS1ub3RpZmljYXRpb24vYXNpLW5vdGlmaWNhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFFNUYsT0FBTyxFQUFFLFVBQVUsRUFBb0Isd0JBQXdCLEVBQWdCLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7SUFPbkgsZ0NBQW9CLFFBQWtDLEVBQVUsTUFBc0I7UUFBbEUsYUFBUSxHQUFSLFFBQVEsQ0FBMEI7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFnQjttQ0FGeEQsSUFBSSxHQUFHLEVBQW1FO0tBR3ZHOzs7Ozs7O0lBRUQsOENBQWE7Ozs7OztJQUFiLFVBQWlCLE9BQXlCLEVBQUUsTUFBNkI7O1FBQ3ZFLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7O1FBRWpFLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzlFLFlBQVksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUvRCxNQUFNLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQztLQUNqQzs7Ozs7SUFFTyx3REFBdUI7Ozs7Y0FBQyxRQUFpQzs7UUFDL0QsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDOztZQUVuRCxJQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDekQsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDOztnQkFDcEMsSUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDOztnQkFFbkQsTUFBTSxJQUFJLEtBQUssQ0FBQyxzSEFBc0gsR0FBRyxPQUFPLENBQUMsQ0FBQzthQUNuSjs7WUFFRCxJQUFNLCtCQUErQixHQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFDLHdCQUF3QixDQUFDLENBQUM7O1lBQ2xFLElBQUksWUFBWSxHQUFHLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsK0JBQStCLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdEcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7O1lBR3JELFlBQVksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxTQUFTLENBQUMsVUFBQyx3QkFBa0Q7O2dCQUNwRyxJQUFNLGtCQUFrQixHQUFHLEtBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztnQkFDaEcsS0FBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO2dCQUN4RSxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUM5QixDQUFDLENBQUM7U0FDSjtRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDOzs7Ozs7Ozs7SUFHeEMsb0RBQW1COzs7Ozs7O2NBQUksT0FBeUIsRUFBRSxZQUFvRCxFQUM1RyxNQUE2Qjs7UUFHN0IsSUFBTSxzQkFBc0IsR0FDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBcUIsZUFBZSxDQUFDLENBQUM7O1FBQzdFLElBQUksa0JBQWtCLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFM0csa0JBQWtCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7UUFHOUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7O1FBR3ZHLElBQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7O1FBQ3RFLElBQUksVUFBVSxHQUFHLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUM7O1FBRTlGLElBQUksZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQzs7UUFHM0Msa0JBQWtCLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLGdCQUFnQixDQUFDOztRQUc3RCxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXpGLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQzs7O2dCQXBFN0IsVUFBVTs7OztnQkFGNEIsd0JBQXdCO2dCQUFnQixjQUFjOztpQ0FKN0Y7O1NBT2Esc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gJy4vLi4vY29tbW9uL2NvbXBvbmVudC10eXBlJztcclxuaW1wb3J0IHsgQXNpTm90aWZpY2F0aW9uIH0gZnJvbSAnLi9ub3RpZmljYXRpb24vYXNpLW5vdGlmaWNhdGlvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBc2lOb3RpZmljYXRpb25Db250YWluZXIgfSBmcm9tICcuL2NvbnRhaW5lci9hc2ktbm90aWZpY2F0aW9uLWNvbnRhaW5lci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBc2lOb3RpZmljYXRpb25Db25maWcsIEFzaU5vdGlmaWNhdGlvblBvc2l0aW9uIH0gZnJvbSAnLi9hc2ktbm90aWZpY2F0aW9uLWNvbmZpZyc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIENvbXBvbmVudEZhY3RvcnksIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgQ29tcG9uZW50UmVmLCBBcHBsaWNhdGlvblJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQXNpTm90aWZpY2F0aW9uU2VydmljZSB7XHJcblxyXG4gIHByaXZhdGUgY29udGFpbmVyQnlQb3NpdGlvbiA9IG5ldyBNYXA8QXNpTm90aWZpY2F0aW9uUG9zaXRpb24sIENvbXBvbmVudFJlZjxBc2lOb3RpZmljYXRpb25Db250YWluZXI+PigpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIHByaXZhdGUgYXBwUmVmOiBBcHBsaWNhdGlvblJlZikge1xyXG4gIH1cclxuXHJcbiAgZnJvbUNvbXBvbmVudDxUPihjb250ZW50OiBDb21wb25lbnRUeXBlPFQ+LCBjb25maWc6IEFzaU5vdGlmaWNhdGlvbkNvbmZpZyk6IEFzaU5vdGlmaWNhdGlvbjxUPiB7XHJcbiAgICBsZXQgY29udGFpbmVyUmVmID0gdGhpcy5nZXRDb250YWluZXJGb3JQb3NpdGlvbihjb25maWcucG9zaXRpb24pO1xyXG5cclxuICAgIGxldCBub3RpZmljYXRpb25SZWYgPSB0aGlzLmNyZWF0ZU5vdGlmaWNpYXRpb24oY29udGVudCwgY29udGFpbmVyUmVmLCBjb25maWcpO1xyXG4gICAgY29udGFpbmVyUmVmLmluc3RhbmNlLmFkZE5vdGlmaWNhdGlvbihub3RpZmljYXRpb25SZWYsIGNvbmZpZyk7XHJcblxyXG4gICAgcmV0dXJuIG5vdGlmaWNhdGlvblJlZi5pbnN0YW5jZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q29udGFpbmVyRm9yUG9zaXRpb24ocG9zaXRpb246IEFzaU5vdGlmaWNhdGlvblBvc2l0aW9uKTogQ29tcG9uZW50UmVmPEFzaU5vdGlmaWNhdGlvbkNvbnRhaW5lcj4ge1xyXG4gICAgaWYgKHRoaXMuY29udGFpbmVyQnlQb3NpdGlvbi5nZXQocG9zaXRpb24pID09IG51bGwpIHtcclxuICAgICAgLy8gUsOpY3VwZXJhdGlvbiBkdSByb290Q29tcG9uZW50XHJcbiAgICAgIGNvbnN0IHJvb3RDb21wb25lbnQgPSB0aGlzLmFwcFJlZi5jb21wb25lbnRzWzBdLmluc3RhbmNlO1xyXG4gICAgICBpZiAoIXJvb3RDb21wb25lbnQudmlld0NvbnRhaW5lclJlZikge1xyXG4gICAgICAgIGNvbnN0IGFwcE5hbWUgPSB0aGlzLmFwcFJlZi5jb21wb25lbnRUeXBlc1swXS5uYW1lO1xyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FzaU5vdGlmaWNhdGlvbiA6IFBsZWFzZSBhZGQgXCJ2aWV3Q29udGFpbmVyUmVmIDogVmlld0NvbnRhaW5lclJlZlwiIGRlY2xhcmF0aW9uIGluIHlvdXIgcm9vdCBjb21wb25lbnQgY29uc3RydWN0b3IgOiAnICsgYXBwTmFtZSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gQ3LDqWF0aW9uIGQndW4gQXNpTm90aWZpY2F0aW9uQ29udGFpbmVyXHJcbiAgICAgIGNvbnN0IGFzaU5vdGlmaWNhdGlvbkNvbnRhaW5lckZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8QXNpTm90aWZpY2F0aW9uQ29udGFpbmVyPiA9XHJcbiAgICAgICAgdGhpcy5yZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShBc2lOb3RpZmljYXRpb25Db250YWluZXIpO1xyXG4gICAgICBsZXQgY29udGFpbmVyUmVmID0gcm9vdENvbXBvbmVudC52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChhc2lOb3RpZmljYXRpb25Db250YWluZXJGYWN0b3J5LCAwKTtcclxuICAgICAgY29udGFpbmVyUmVmLmluc3RhbmNlLnNldFBvc2l0aW9uKHBvc2l0aW9uKTtcclxuICAgICAgdGhpcy5jb250YWluZXJCeVBvc2l0aW9uLnNldChwb3NpdGlvbiwgY29udGFpbmVyUmVmKTtcclxuXHJcbiAgICAgIC8vIEVjb3V0ZSBkZSBsYSBtaXNlIGEgdmlkZSBkdSBjb250YWluZXIgcG91ciBsZSBzdXBwcmltZXJcclxuICAgICAgY29udGFpbmVyUmVmLmluc3RhbmNlLm9uQ29udGFpbmVyRW1wdHkoKS5zdWJzY3JpYmUoKGFzaU5vdGlmaWNhdGlvbkNvbnRhaW5lcjogQXNpTm90aWZpY2F0aW9uQ29udGFpbmVyKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyVG9EZXN0cm95ID0gdGhpcy5jb250YWluZXJCeVBvc2l0aW9uLmdldChhc2lOb3RpZmljYXRpb25Db250YWluZXIuZ2V0UG9zaXRpb24oKSk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJCeVBvc2l0aW9uLmRlbGV0ZShhc2lOb3RpZmljYXRpb25Db250YWluZXIuZ2V0UG9zaXRpb24oKSk7XHJcbiAgICAgICAgY29udGFpbmVyVG9EZXN0cm95LmRlc3Ryb3koKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXJCeVBvc2l0aW9uLmdldChwb3NpdGlvbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZU5vdGlmaWNpYXRpb248VD4oY29udGVudDogQ29tcG9uZW50VHlwZTxUPiwgY29udGFpbmVyUmVmOiBDb21wb25lbnRSZWY8QXNpTm90aWZpY2F0aW9uQ29udGFpbmVyPixcclxuICAgIGNvbmZpZzogQXNpTm90aWZpY2F0aW9uQ29uZmlnKTogQ29tcG9uZW50UmVmPEFzaU5vdGlmaWNhdGlvbjxUPj4ge1xyXG5cclxuICAgIC8vIENyZWF0aW9uIGRlIGxhIG50b2ZpY2lhdGlvblxyXG4gICAgY29uc3QgYXNpTm90aWZpY2F0aW9uRmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxBc2lOb3RpZmljYXRpb248VD4+ID1cclxuICAgICAgdGhpcy5yZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeTxBc2lOb3RpZmljYXRpb248VD4+KEFzaU5vdGlmaWNhdGlvbik7XHJcbiAgICBsZXQgYXNpTm90aWZpY2F0aW9uUmVmID0gY29udGFpbmVyUmVmLmluc3RhbmNlLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGFzaU5vdGlmaWNhdGlvbkZhY3RvcnksIDApO1xyXG5cclxuICAgIGFzaU5vdGlmaWNhdGlvblJlZi5pbnN0YW5jZS5zZXRDb25maWcoY29uZmlnKTtcclxuXHJcbiAgICAvLyBEZXBsYWNlbWVudCBkZSBsYSBub3RpZmljYXRpb24gZGFucyBsYSBkaXYgbm90aWZpY2F0aW9ucy1jb250YWluZXJcclxuICAgIGNvbnRhaW5lclJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdLmFwcGVuZENoaWxkKGFzaU5vdGlmaWNhdGlvblJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcclxuXHJcbiAgICAvLyBDcsOpYXRpb24gZHUgY29tcG9zYW50IGTDqXNpcsOpXHJcbiAgICBjb25zdCBjb250ZW50RmFjdG9yeSA9IHRoaXMucmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29udGVudCk7XHJcbiAgICBsZXQgY29udGVudFJlZiA9IGFzaU5vdGlmaWNhdGlvblJlZi5pbnN0YW5jZS52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb250ZW50RmFjdG9yeSk7XHJcblxyXG4gICAgbGV0IGNvbnRlbnRDb21wb25lbnQgPSBjb250ZW50UmVmLmluc3RhbmNlO1xyXG5cclxuICAgIC8vIEFqb3V0IGRlIGxhIHJlZmVyZW5jZSBkdSBjb21wb3NhbnQgZGFucyBsZSBBc2lOb3RpZmljYXRpb25cclxuICAgIGFzaU5vdGlmaWNhdGlvblJlZi5pbnN0YW5jZVsnX2NvbXBvbmVudCddID0gY29udGVudENvbXBvbmVudDtcclxuXHJcbiAgICAvLyBEZXBsYWNlbWVudCBkdSBjb250ZW51IGRhbnMgbGEgZGl2IG5vdGlmaWNhdGlvbi1wYW5lbFxyXG4gICAgYXNpTm90aWZpY2F0aW9uUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcclxuXHJcbiAgICByZXR1cm4gYXNpTm90aWZpY2F0aW9uUmVmO1xyXG4gIH1cclxufVxyXG4iXX0=