UNPKG

@coreui/angular

Version:

CoreUI Components Library for Angular

173 lines 21.1 kB
import { booleanAttribute, Component, ContentChildren, EventEmitter, HostBinding, HostListener, Input, Output } from '@angular/core'; import { NgTemplateOutlet } from '@angular/common'; import { animate, state, style, transition, trigger } from '@angular/animations'; import { TemplateIdDirective } from '../shared'; import { ButtonCloseDirective } from '../button'; import * as i0 from "@angular/core"; export class AlertComponent { constructor() { /** * Sets the color context of the component to one of CoreUI’s themed colors. * * @type Colors * @default 'primary' */ this.color = 'primary'; /** * Default role for alert. [docs] * @type string * @default 'alert' */ this.role = 'alert'; /** * Event triggered on the alert dismiss. */ this.visibleChange = new EventEmitter(); this.templates = {}; /** * Optionally adds a close button to alert and allow it to self dismiss. * @type boolean * @default false */ this.dismissible = false; /** * Adds animation for dismissible alert. * @type boolean */ this.fade = false; this.#visible = true; } /** * Toggle the visibility of alert component. * @type boolean */ set visible(value) { if (this.#visible !== value) { this.#visible = value; this.visibleChange.emit(value); } } ; get visible() { return this.#visible; } #visible; get animationDisabled() { return !this.fade; } get animateType() { return this.visible ? 'show' : 'hide'; } get hostClasses() { return { alert: true, 'alert-dismissible': this.dismissible, fade: this.fade, show: !this.hide, [`alert-${this.color}`]: !!this.color && this.variant !== 'solid', [`bg-${this.color}`]: !!this.color && this.variant === 'solid', 'text-white': !!this.color && this.variant === 'solid' }; } onAnimationStart($event) { this.onAnimationEvent($event); } onAnimationDone($event) { this.onAnimationEvent($event); } ngAfterContentInit() { this.contentTemplates.forEach((child) => { this.templates[child.id] = child.templateRef; }); } onAnimationEvent(event) { this.hide = event.phaseName === 'start' && event.toState === 'show'; if (event.phaseName === 'done') { this.hide = (event.toState === 'hide' || event.toState === 'void'); if (event.toState === 'show') { this.hide = false; } } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AlertComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: AlertComponent, isStandalone: true, selector: "c-alert", inputs: { color: "color", role: "role", variant: "variant", dismissible: ["dismissible", "dismissible", booleanAttribute], fade: ["fade", "fade", booleanAttribute], visible: ["visible", "visible", booleanAttribute] }, outputs: { visibleChange: "visibleChange" }, host: { listeners: { "@fadeInOut.start": "onAnimationStart($event)", "@fadeInOut.done": "onAnimationDone($event)" }, properties: { "attr.role": "this.role", "@.disabled": "this.animationDisabled", "@fadeInOut": "this.animateType", "class": "this.hostClasses" } }, queries: [{ propertyName: "contentTemplates", predicate: TemplateIdDirective, descendants: true }], exportAs: ["cAlert"], ngImport: i0, template: "@if (visible || !hide) {\n @if (dismissible) {\n <ng-container *ngTemplateOutlet=\"templates?.alertButtonCloseTemplate || defaultAlertButtonCloseTemplate\" />\n }\n <ng-content />\n}\n<ng-template #defaultAlertButtonCloseTemplate>\n <button (click)=\"visible=false\" aria-label=\"Close\" cButtonClose></button>\n</ng-template>\n", styles: [":host{display:block;overflow:hidden}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: ButtonCloseDirective, selector: "[cButtonClose]", inputs: ["white"] }], animations: [ trigger('fadeInOut', [ state('show', style({ opacity: 1, height: '*', padding: '*', border: '*', margin: '*' })), state('hide', style({ opacity: 0, height: 0, padding: 0, border: 0, margin: 0 })), state('void', style({ opacity: 0, height: 0, padding: 0, border: 0, margin: 0 })), transition('show => hide', [ animate('.3s ease-out') ]), transition('hide => show', [ animate('.3s ease-in') ]), transition('show => void', [ animate('.3s ease-out') ]), transition('void => show', [ animate('.3s ease-in') ]) ]) ] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AlertComponent, decorators: [{ type: Component, args: [{ selector: 'c-alert', exportAs: 'cAlert', standalone: true, imports: [NgTemplateOutlet, ButtonCloseDirective], animations: [ trigger('fadeInOut', [ state('show', style({ opacity: 1, height: '*', padding: '*', border: '*', margin: '*' })), state('hide', style({ opacity: 0, height: 0, padding: 0, border: 0, margin: 0 })), state('void', style({ opacity: 0, height: 0, padding: 0, border: 0, margin: 0 })), transition('show => hide', [ animate('.3s ease-out') ]), transition('hide => show', [ animate('.3s ease-in') ]), transition('show => void', [ animate('.3s ease-out') ]), transition('void => show', [ animate('.3s ease-in') ]) ]) ], template: "@if (visible || !hide) {\n @if (dismissible) {\n <ng-container *ngTemplateOutlet=\"templates?.alertButtonCloseTemplate || defaultAlertButtonCloseTemplate\" />\n }\n <ng-content />\n}\n<ng-template #defaultAlertButtonCloseTemplate>\n <button (click)=\"visible=false\" aria-label=\"Close\" cButtonClose></button>\n</ng-template>\n", styles: [":host{display:block;overflow:hidden}\n"] }] }], propDecorators: { color: [{ type: Input }], role: [{ type: HostBinding, args: ['attr.role'] }, { type: Input }], variant: [{ type: Input }], visibleChange: [{ type: Output }], contentTemplates: [{ type: ContentChildren, args: [TemplateIdDirective, { descendants: true }] }], dismissible: [{ type: Input, args: [{ transform: booleanAttribute }] }], fade: [{ type: Input, args: [{ transform: booleanAttribute }] }], visible: [{ type: Input, args: [{ transform: booleanAttribute }] }], animationDisabled: [{ type: HostBinding, args: ['@.disabled'] }], animateType: [{ type: HostBinding, args: ['@fadeInOut'] }], hostClasses: [{ type: HostBinding, args: ['class'] }], onAnimationStart: [{ type: HostListener, args: ['@fadeInOut.start', ['$event']] }], onAnimationDone: [{ type: HostListener, args: ['@fadeInOut.done', ['$event']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9hbGVydC9hbGVydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL2FsZXJ0L2FsZXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULGVBQWUsRUFDZixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQWtCLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR2pHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBK0JqRCxNQUFNLE9BQU8sY0FBYztJQTNCM0I7UUE4QkU7Ozs7O1dBS0c7UUFDTSxVQUFLLEdBQVcsU0FBUyxDQUFDO1FBQ25DOzs7O1dBSUc7UUFFTSxTQUFJLEdBQUcsT0FBTyxDQUFDO1FBTXhCOztXQUVHO1FBQ08sa0JBQWEsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNwRSxjQUFTLEdBQVEsRUFBRSxDQUFDO1FBR3BCOzs7O1dBSUc7UUFDcUMsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFFckU7OztXQUdHO1FBQ3FDLFNBQUksR0FBWSxLQUFLLENBQUM7UUFrQjlELGFBQVEsR0FBWSxJQUFJLENBQUM7S0FrRDFCO0lBbEVDOzs7T0FHRztJQUNILElBQ0ksT0FBTyxDQUFD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U0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQWVsQyxpQkFBaUI7c0JBRHBCLFdBQVc7dUJBQUMsWUFBWTtnQkFNckIsV0FBVztzQkFEZCxXQUFXO3VCQUFDLFlBQVk7Z0JBTXJCLFdBQVc7c0JBRGQsV0FBVzt1QkFBQyxPQUFPO2dCQWNwQixnQkFBZ0I7c0JBRGYsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNNUMsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBhbmltYXRlLCBBbmltYXRpb25FdmVudCwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5cbmltcG9ydCB7IENvbG9ycyB9IGZyb20gJy4uL2NvcmV1aS50eXBlcyc7XG5pbXBvcnQgeyBUZW1wbGF0ZUlkRGlyZWN0aXZlIH0gZnJvbSAnLi4vc2hhcmVkJztcbmltcG9ydCB7IEJ1dHRvbkNsb3NlRGlyZWN0aXZlIH0gZnJvbSAnLi4vYnV0dG9uJztcblxudHlwZSBBbmltYXRlVHlwZSA9ICgnaGlkZScgfCAnc2hvdycpO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjLWFsZXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FsZXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWxlcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgZXhwb3J0QXM6ICdjQWxlcnQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTmdUZW1wbGF0ZU91dGxldCwgQnV0dG9uQ2xvc2VEaXJlY3RpdmVdLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignZmFkZUluT3V0JywgW1xuICAgICAgc3RhdGUoJ3Nob3cnLCBzdHlsZSh7IG9wYWNpdHk6IDEsIGhlaWdodDogJyonLCBwYWRkaW5nOiAnKicsIGJvcmRlcjogJyonLCBtYXJnaW46ICcqJyB9KSksXG4gICAgICBzdGF0ZSgnaGlkZScsIHN0eWxlKHsgb3BhY2l0eTogMCwgaGVpZ2h0OiAwLCBwYWRkaW5nOiAwLCBib3JkZXI6IDAsIG1hcmdpbjogMCB9KSksXG4gICAgICBzdGF0ZSgndm9pZCcsIHN0eWxlKHsgb3BhY2l0eTogMCwgaGVpZ2h0OiAwLCBwYWRkaW5nOiAwLCBib3JkZXI6IDAsIG1hcmdpbjogMCB9KSksXG4gICAgICB0cmFuc2l0aW9uKCdzaG93ID0+IGhpZGUnLCBbXG4gICAgICAgIGFuaW1hdGUoJy4zcyBlYXNlLW91dCcpXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJ2hpZGUgPT4gc2hvdycsIFtcbiAgICAgICAgYW5pbWF0ZSgnLjNzIGVhc2UtaW4nKVxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCdzaG93ID0+IHZvaWQnLCBbXG4gICAgICAgIGFuaW1hdGUoJy4zcyBlYXNlLW91dCcpXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gc2hvdycsIFtcbiAgICAgICAgYW5pbWF0ZSgnLjNzIGVhc2UtaW4nKVxuICAgICAgXSlcbiAgICBdKVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEFsZXJ0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG5cbiAgaGlkZSE6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjb2xvciBjb250ZXh0IG9mIHRoZSBjb21wb25lbnQgdG8gb25lIG9mIENvcmVVSeKAmXMgdGhlbWVkIGNvbG9ycy5cbiAgICpcbiAgICogQHR5cGUgQ29sb3JzXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgQElucHV0KCkgY29sb3I6IENvbG9ycyA9ICdwcmltYXJ5JztcbiAgLyoqXG4gICAqIERlZmF1bHQgcm9sZSBmb3IgYWxlcnQuIFtkb2NzXVxuICAgKiBAdHlwZSBzdHJpbmdcbiAgICogQGRlZmF1bHQgJ2FsZXJ0J1xuICAgKi9cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICBASW5wdXQoKSByb2xlID0gJ2FsZXJ0JztcbiAgLyoqXG4gICAqIFNldCB0aGUgYWxlcnQgdmFyaWFudCB0byBhIHNvbGlkLlxuICAgKiBAdHlwZSBzdHJpbmdcbiAgICovXG4gIEBJbnB1dCgpIHZhcmlhbnQ/OiAnc29saWQnIHwgc3RyaW5nO1xuICAvKipcbiAgICogRXZlbnQgdHJpZ2dlcmVkIG9uIHRoZSBhbGVydCBkaXNtaXNzLlxuICAgKi9cbiAgQE91dHB1dCgpIHZpc2libGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgdGVtcGxhdGVzOiBhbnkgPSB7fTtcbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZUlkRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIGNvbnRlbnRUZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8VGVtcGxhdGVJZERpcmVjdGl2ZT47XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgYWRkcyBhIGNsb3NlIGJ1dHRvbiB0byBhbGVydCBhbmQgYWxsb3cgaXQgdG8gc2VsZiBkaXNtaXNzLlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZGlzbWlzc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQWRkcyBhbmltYXRpb24gZm9yIGRpc21pc3NpYmxlIGFsZXJ0LlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZmFkZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgYWxlcnQgY29tcG9uZW50LlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgc2V0IHZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy4jdmlzaWJsZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuI3Zpc2libGUgPSB2YWx1ZTtcbiAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICB9XG4gIH07XG5cbiAgZ2V0IHZpc2libGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuI3Zpc2libGU7XG4gIH1cblxuICAjdmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgQEhvc3RCaW5kaW5nKCdALmRpc2FibGVkJylcbiAgZ2V0IGFuaW1hdGlvbkRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5mYWRlO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdAZmFkZUluT3V0JylcbiAgZ2V0IGFuaW1hdGVUeXBlKCk6IEFuaW1hdGVUeXBlIHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlID8gJ3Nob3cnIDogJ2hpZGUnO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCBob3N0Q2xhc3NlcygpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBhbGVydDogdHJ1ZSxcbiAgICAgICdhbGVydC1kaXNtaXNzaWJsZSc6IHRoaXMuZGlzbWlzc2libGUsXG4gICAgICBmYWRlOiB0aGlzLmZhZGUsXG4gICAgICBzaG93OiAhdGhpcy5oaWRlLFxuICAgICAgW2BhbGVydC0ke3RoaXMuY29sb3J9YF06ICEhdGhpcy5jb2xvciAmJiB0aGlzLnZhcmlhbnQgIT09ICdzb2xpZCcsXG4gICAgICBbYGJnLSR7dGhpcy5jb2xvcn1gXTogISF0aGlzLmNvbG9yICYmIHRoaXMudmFyaWFudCA9PT0gJ3NvbGlkJyxcbiAgICAgICd0ZXh0LXdoaXRlJzogISF0aGlzLmNvbG9yICYmIHRoaXMudmFyaWFudCA9PT0gJ3NvbGlkJ1xuICAgIH07XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdAZmFkZUluT3V0LnN0YXJ0JywgWyckZXZlbnQnXSlcbiAgb25BbmltYXRpb25TdGFydCgkZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5vbkFuaW1hdGlvbkV2ZW50KCRldmVudCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdAZmFkZUluT3V0LmRvbmUnLCBbJyRldmVudCddKVxuICBvbkFuaW1hdGlvbkRvbmUoJGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIHRoaXMub25BbmltYXRpb25FdmVudCgkZXZlbnQpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY29udGVudFRlbXBsYXRlcy5mb3JFYWNoKChjaGlsZDogVGVtcGxhdGVJZERpcmVjdGl2ZSkgPT4ge1xuICAgICAgdGhpcy50ZW1wbGF0ZXNbY2hpbGQuaWRdID0gY2hpbGQudGVtcGxhdGVSZWY7XG4gICAgfSk7XG4gIH1cblxuICBvbkFuaW1hdGlvbkV2ZW50KGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIHRoaXMuaGlkZSA9IGV2ZW50LnBoYXNlTmFtZSA9PT0gJ3N0YXJ0JyAmJiBldmVudC50b1N0YXRlID09PSAnc2hvdyc7XG4gICAgaWYgKGV2ZW50LnBoYXNlTmFtZSA9PT0gJ2RvbmUnKSB7XG4gICAgICB0aGlzLmhpZGUgPSAoZXZlbnQudG9TdGF0ZSA9PT0gJ2hpZGUnIHx8IGV2ZW50LnRvU3RhdGUgPT09ICd2b2lkJyk7XG4gICAgICBpZiAoZXZlbnQudG9TdGF0ZSA9PT0gJ3Nob3cnKSB7XG4gICAgICAgIHRoaXMuaGlkZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiQGlmICh2aXNpYmxlIHx8ICFoaWRlKSB7XG4gIEBpZiAoZGlzbWlzc2libGUpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVzPy5hbGVydEJ1dHRvbkNsb3NlVGVtcGxhdGUgfHwgZGVmYXVsdEFsZXJ0QnV0dG9uQ2xvc2VUZW1wbGF0ZVwiIC8+XG4gIH1cbiAgPG5nLWNvbnRlbnQgLz5cbn1cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEFsZXJ0QnV0dG9uQ2xvc2VUZW1wbGF0ZT5cbiAgPGJ1dHRvbiAoY2xpY2spPVwidmlzaWJsZT1mYWxzZVwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNCdXR0b25DbG9zZT48L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=