UNPKG

@clr/angular

Version:

Angular components for Clarity

86 lines 14.1 kB
/* * Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved. * This software is released under MIT license. * The full license information can be found in LICENSE in the root directory of this project. */ import { Component, EventEmitter, Input, Output } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "./providers/multi-alert.service"; import * as i2 from "../../utils/i18n/common-strings.service"; import * as i3 from "../../icon/icon"; export class ClrAlertsPager { constructor(multiAlertService, commonStrings) { this.multiAlertService = multiAlertService; this.commonStrings = commonStrings; this.currentAlertChange = new EventEmitter(false); this.currentAlertIndexChange = new EventEmitter(); } /** * Input/Output to support two way binding on current alert instance */ get currentAlert() { return this.multiAlertService.currentAlert; } set currentAlert(alert) { if (alert) { this.multiAlertService.currentAlert = alert; } } /** * Input/Output to support two way binding on current alert index */ get currentAlertIndex() { return this.multiAlertService.current; } set currentAlertIndex(index) { this.multiAlertService.current = index; } get previousAlertAriaLabel() { const CURRENT = this.currentAlertIndex + 1; return this.commonStrings.parse(this.commonStrings.keys.alertPreviousAlertAriaLabel, { CURRENT: (CURRENT === 1 ? this.multiAlertService.count : CURRENT - 1).toString(), COUNT: this.multiAlertService.count.toString(), }); } get nextAlertAriaLabel() { const CURRENT = this.currentAlertIndex + 1; return this.commonStrings.parse(this.commonStrings.keys.alertNextAlertAriaLabel, { CURRENT: (CURRENT === this.multiAlertService.count ? 1 : CURRENT + 1).toString(), COUNT: this.multiAlertService.count.toString(), }); } ngOnInit() { this.multiAlertServiceChanges = this.multiAlertService.changes.subscribe(index => { this.currentAlertIndexChange.emit(index); this.currentAlertChange.emit(this.multiAlertService.activeAlerts[index]); }); } ngOnDestroy() { this.multiAlertServiceChanges.unsubscribe(); } pageUp() { this.multiAlertService.next(); } pageDown() { this.multiAlertService.previous(); } } ClrAlertsPager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlertsPager, deps: [{ token: i1.MultiAlertService }, { token: i2.ClrCommonStringsService }], target: i0.ɵɵFactoryTarget.Component }); ClrAlertsPager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrAlertsPager, selector: "clr-alerts-pager", inputs: { currentAlert: ["clrCurrentAlert", "currentAlert"], currentAlertIndex: ["clrCurrentAlertIndex", "currentAlertIndex"] }, outputs: { currentAlertChange: "clrCurrentAlertChange", currentAlertIndexChange: "clrCurrentAlertIndexChange" }, host: { properties: { "class.alerts-pager": "true" } }, ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div class=\"alerts-pager-control\">\n <div class=\"alerts-page-down\">\n <button class=\"alerts-pager-button\" type=\"button\" (click)=\"pageDown()\" [attr.aria-label]=\"previousAlertAriaLabel\">\n <cds-icon shape=\"angle\" direction=\"left\"></cds-icon>\n </button>\n </div>\n <div class=\"alerts-pager-text\">{{this.multiAlertService.current+1}} / {{this.multiAlertService.count}}</div>\n <div class=\"alerts-page-up\">\n <button class=\"alerts-pager-button\" type=\"button\" (click)=\"pageUp()\" [attr.aria-label]=\"nextAlertAriaLabel\">\n <cds-icon shape=\"angle\" direction=\"right\"></cds-icon>\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.CdsIconCustomTag, selector: "cds-icon" }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrAlertsPager, decorators: [{ type: Component, args: [{ selector: 'clr-alerts-pager', host: { '[class.alerts-pager]': 'true' }, template: "<!--\n ~ Copyright (c) 2016-2023 VMware, Inc. All Rights Reserved.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n -->\n\n<div class=\"alerts-pager-control\">\n <div class=\"alerts-page-down\">\n <button class=\"alerts-pager-button\" type=\"button\" (click)=\"pageDown()\" [attr.aria-label]=\"previousAlertAriaLabel\">\n <cds-icon shape=\"angle\" direction=\"left\"></cds-icon>\n </button>\n </div>\n <div class=\"alerts-pager-text\">{{this.multiAlertService.current+1}} / {{this.multiAlertService.count}}</div>\n <div class=\"alerts-page-up\">\n <button class=\"alerts-pager-button\" type=\"button\" (click)=\"pageUp()\" [attr.aria-label]=\"nextAlertAriaLabel\">\n <cds-icon shape=\"angle\" direction=\"right\"></cds-icon>\n </button>\n </div>\n</div>\n" }] }], ctorParameters: function () { return [{ type: i1.MultiAlertService }, { type: i2.ClrCommonStringsService }]; }, propDecorators: { currentAlertChange: [{ type: Output, args: ['clrCurrentAlertChange'] }], currentAlertIndexChange: [{ type: Output, args: ['clrCurrentAlertIndexChange'] }], currentAlert: [{ type: Input, args: ['clrCurrentAlert'] }], currentAlertIndex: [{ type: Input, args: ['clrCurrentAlertIndex'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnRzLXBhZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvZW1waGFzaXMvYWxlcnQvYWxlcnRzLXBhZ2VyLnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvZW1waGFzaXMvYWxlcnQvYWxlcnRzLXBhZ2VyLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQVkxRixNQUFNLE9BQU8sY0FBYztJQU16QixZQUFtQixpQkFBb0MsRUFBUyxhQUFzQztRQUFuRixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQVMsa0JBQWEsR0FBYixhQUFhLENBQXlCO1FBTHJFLHVCQUFrQixHQUFHLElBQUksWUFBWSxDQUFXLEtBQUssQ0FBQyxDQUFDO1FBQ2xELDRCQUF1QixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFJYyxDQUFDO0lBRTFHOztPQUVHO0lBQ0gsSUFDSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDO0lBQzdDLENBQUM7SUFDRCxJQUFJLFlBQVksQ0FBQyxLQUFlO1FBQzlCLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7U0FDN0M7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUNJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUM7SUFDeEMsQ0FBQztJQUNELElBQUksaUJBQWlCLENBQUMsS0FBYTtRQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBYyxzQkFBc0I7UUFDbEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztRQUMzQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFO1lBQ25GLE9BQU8sRUFBRSxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7WUFDaEYsS0FBSyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO1NBQy9DLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFjLGtCQUFrQjtRQUM5QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDL0UsT0FBTyxFQUFFLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtZQUNoRixLQUFLLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7U0FDL0MsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDL0UsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BDLENBQUM7OzJHQWpFVSxjQUFjOytGQUFkLGNBQWMsa1dDbEIzQixzM0JBbUJBOzJGRERhLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0Usa0JBQWtCLFFBRXRCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFFOzhJQUdQLGtCQUFrQjtzQkFBbEQsTUFBTTt1QkFBQyx1QkFBdUI7Z0JBQ08sdUJBQXVCO3NCQUE1RCxNQUFNO3VCQUFDLDRCQUE0QjtnQkFVaEMsWUFBWTtzQkFEZixLQUFLO3VCQUFDLGlCQUFpQjtnQkFjcEIsaUJBQWlCO3NCQURwQixLQUFLO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyMyBWTXdhcmUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UuXG4gKiBUaGUgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiBMSUNFTlNFIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHByb2plY3QuXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQ2xyQ29tbW9uU3RyaW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi91dGlscy9pMThuL2NvbW1vbi1zdHJpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2xyQWxlcnQgfSBmcm9tICcuL2FsZXJ0JztcbmltcG9ydCB7IE11bHRpQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi9wcm92aWRlcnMvbXVsdGktYWxlcnQuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Nsci1hbGVydHMtcGFnZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxlcnRzLXBhZ2VyLmh0bWwnLFxuICBob3N0OiB7ICdbY2xhc3MuYWxlcnRzLXBhZ2VyXSc6ICd0cnVlJyB9LFxufSlcbmV4cG9ydCBjbGFzcyBDbHJBbGVydHNQYWdlciBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQE91dHB1dCgnY2xyQ3VycmVudEFsZXJ0Q2hhbmdlJykgY3VycmVudEFsZXJ0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDbHJBbGVydD4oZmFsc2UpO1xuICBAT3V0cHV0KCdjbHJDdXJyZW50QWxlcnRJbmRleENoYW5nZScpIGN1cnJlbnRBbGVydEluZGV4Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgcHJpdmF0ZSBtdWx0aUFsZXJ0U2VydmljZUNoYW5nZXM6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgbXVsdGlBbGVydFNlcnZpY2U6IE11bHRpQWxlcnRTZXJ2aWNlLCBwdWJsaWMgY29tbW9uU3RyaW5nczogQ2xyQ29tbW9uU3RyaW5nc1NlcnZpY2UpIHt9XG5cbiAgLyoqXG4gICAqIElucHV0L091dHB1dCB0byBzdXBwb3J0IHR3byB3YXkgYmluZGluZyBvbiBjdXJyZW50IGFsZXJ0IGluc3RhbmNlXG4gICAqL1xuICBASW5wdXQoJ2NsckN1cnJlbnRBbGVydCcpXG4gIGdldCBjdXJyZW50QWxlcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0O1xuICB9XG4gIHNldCBjdXJyZW50QWxlcnQoYWxlcnQ6IENsckFsZXJ0KSB7XG4gICAgaWYgKGFsZXJ0KSB7XG4gICAgICB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydCA9IGFsZXJ0O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbnB1dC9PdXRwdXQgdG8gc3VwcG9ydCB0d28gd2F5IGJpbmRpbmcgb24gY3VycmVudCBhbGVydCBpbmRleFxuICAgKi9cbiAgQElucHV0KCdjbHJDdXJyZW50QWxlcnRJbmRleCcpXG4gIGdldCBjdXJyZW50QWxlcnRJbmRleCgpIHtcbiAgICByZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50O1xuICB9XG4gIHNldCBjdXJyZW50QWxlcnRJbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50ID0gaW5kZXg7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHByZXZpb3VzQWxlcnRBcmlhTGFiZWwoKSB7XG4gICAgY29uc3QgQ1VSUkVOVCA9IHRoaXMuY3VycmVudEFsZXJ0SW5kZXggKyAxO1xuICAgIHJldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuYWxlcnRQcmV2aW91c0FsZXJ0QXJpYUxhYmVsLCB7XG4gICAgICBDVVJSRU5UOiAoQ1VSUkVOVCA9PT0gMSA/IHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY291bnQgOiBDVVJSRU5UIC0gMSkudG9TdHJpbmcoKSxcbiAgICAgIENPVU5UOiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50LnRvU3RyaW5nKCksXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IG5leHRBbGVydEFyaWFMYWJlbCgpIHtcbiAgICBjb25zdCBDVVJSRU5UID0gdGhpcy5jdXJyZW50QWxlcnRJbmRleCArIDE7XG4gICAgcmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5hbGVydE5leHRBbGVydEFyaWFMYWJlbCwge1xuICAgICAgQ1VSUkVOVDogKENVUlJFTlQgPT09IHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY291bnQgPyAxIDogQ1VSUkVOVCArIDEpLnRvU3RyaW5nKCksXG4gICAgICBDT1VOVDogdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudC50b1N0cmluZygpLFxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5tdWx0aUFsZXJ0U2VydmljZUNoYW5nZXMgPSB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKGluZGV4ID0+IHtcbiAgICAgIHRoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2UuZW1pdChpbmRleCk7XG4gICAgICB0aGlzLmN1cnJlbnRBbGVydENoYW5nZS5lbWl0KHRoaXMubXVsdGlBbGVydFNlcnZpY2UuYWN0aXZlQWxlcnRzW2luZGV4XSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlQ2hhbmdlcy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcGFnZVVwKCkge1xuICAgIHRoaXMubXVsdGlBbGVydFNlcnZpY2UubmV4dCgpO1xuICB9XG5cbiAgcGFnZURvd24oKSB7XG4gICAgdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5wcmV2aW91cygpO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjMgVk13YXJlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gIH4gVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZS5cbiAgfiBUaGUgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiBMSUNFTlNFIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHByb2plY3QuXG4gIC0tPlxuXG48ZGl2IGNsYXNzPVwiYWxlcnRzLXBhZ2VyLWNvbnRyb2xcIj5cbiAgPGRpdiBjbGFzcz1cImFsZXJ0cy1wYWdlLWRvd25cIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYWxlcnRzLXBhZ2VyLWJ1dHRvblwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwicGFnZURvd24oKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwicHJldmlvdXNBbGVydEFyaWFMYWJlbFwiPlxuICAgICAgPGNkcy1pY29uIHNoYXBlPVwiYW5nbGVcIiBkaXJlY3Rpb249XCJsZWZ0XCI+PC9jZHMtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJhbGVydHMtcGFnZXItdGV4dFwiPnt7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50KzF9fSAvIHt7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudH19PC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJhbGVydHMtcGFnZS11cFwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJhbGVydHMtcGFnZXItYnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJwYWdlVXAoKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwibmV4dEFsZXJ0QXJpYUxhYmVsXCI+XG4gICAgICA8Y2RzLWljb24gc2hhcGU9XCJhbmdsZVwiIGRpcmVjdGlvbj1cInJpZ2h0XCI+PC9jZHMtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==