systelab-translate
Version:
The internationalization (i18n) library for Systelab
130 lines • 17.2 kB
JavaScript
import { of as observableOf } from 'rxjs';
import { Injectable } from '@angular/core';
import { DecimalFormat } from './decimal-format/decimal-format';
import { DateUtil } from './date-util/date-util';
import * as i0 from "@angular/core";
import * as i1 from "@ngx-translate/core";
export class I18nService {
constructor(translateService) {
this.translateService = translateService;
this.staticBundles = {};
this.translateService.setDefaultLang('en-US');
this.dateUtil = new DateUtil('en-US');
}
use(locale) {
this.locale = locale;
this.dateUtil.setLocale(locale);
return this.translateService.use(locale);
}
getLocale() {
return this.locale;
}
getCurrentLanguage() {
return this.translateService.currentLang;
}
getBrowserLang() {
return this.translateService.getBrowserLang();
}
reloadLanguage(lang) {
return this.translateService.reloadLang(lang);
}
setTranslation(locale, translations) {
this.translateService.setTranslation(locale, translations, false);
}
appendTranslation(locale, translations) {
this.translateService.setTranslation(locale, translations, true);
}
get(bundle) {
if (typeof bundle === 'string' && this.staticBundles[bundle]) {
return observableOf(this.staticBundles[bundle]);
}
return this.translateService.get(bundle);
}
instant(key, interpolateParams) {
if (typeof key === 'string' && this.staticBundles[key]) {
let bundleValue = '';
if (typeof interpolateParams === 'object') {
Object.keys(interpolateParams)
.forEach((paramKey) => {
bundleValue = this.staticBundles[key].replace('{{' + paramKey + '}}', interpolateParams[paramKey]);
});
return bundleValue;
}
else if (this.staticBundles[key].indexOf('{') > -1 && !interpolateParams) {
const regEx = /{{([^]*)}}/g;
return this.staticBundles[key].replace(regEx, '');
}
return this.staticBundles[key];
}
return this.translateService.instant(key, interpolateParams);
}
setStaticBundles(staticBundles) {
if (staticBundles) {
this.staticBundles = staticBundles;
}
}
getDateFormat(isFullYear = false) {
return this.dateUtil.getDateFormat(isFullYear);
}
getDateFormatForDatePicker(isFullYear = false) {
return this.dateUtil.getDateFormatForDatePicker(isFullYear);
}
getTimeFormat(withSeconds = false) {
return this.dateUtil.getTimeFormat(withSeconds);
}
formatDate(date) {
return this.dateUtil.formatDate(date);
}
formatDateFullYear(date) {
return this.dateUtil.formatDateFullYear(date);
}
formatTime(date, withSeconds) {
return this.dateUtil.formatTime(date, withSeconds);
}
formatDateTime(date, fullYear, withSeconds) {
return this.dateUtil.formatDateTime(date, fullYear, withSeconds);
}
formatMonthAndYear(date) {
return this.dateUtil.formatMonthAndYear(date);
}
formatDateAndShortMonth(date) {
return this.dateUtil.formatDateAndShortMonth(date);
}
getDateFrom(date) {
return this.dateUtil.getDateFrom(date);
}
getDateTo(date) {
return this.dateUtil.getDateTo(date);
}
getDateMidDay(date) {
return this.dateUtil.getDateMidDay(date);
}
getFirstDayOfWeek() {
return this.dateUtil.getFirstDayOfWeek();
}
parseDate(currentDateValue, locale) {
return this.dateUtil.parseDate(currentDateValue, locale);
}
formatNumber(numberToFormat, decimalFormat, applyLocale) {
const df = new DecimalFormat(decimalFormat);
const sNumber = df.format(numberToFormat, decimalFormat);
if (applyLocale) {
let minimumFractionDigits = 0;
if (sNumber.split('.')[1]) {
minimumFractionDigits = sNumber.split('.')[1].length;
}
return Number(sNumber)
.toLocaleString(this.locale, { minimumFractionDigits });
}
return sNumber;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: I18nService, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: I18nService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: I18nService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i1.TranslateService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3lzdGVsYWItdHJhbnNsYXRlL3NyYy9saWIvaTE4bi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxFQUFFLElBQUksWUFBWSxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQy9ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7O0FBS2pELE1BQU0sT0FBTyxXQUFXO0lBTXZCLFlBQXNCLGdCQUFrQztRQUFsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBSDlDLGtCQUFhLEdBQVEsRUFBRSxDQUFDO1FBSWpDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU0sR0FBRyxDQUFDLE1BQWM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTSxTQUFTO1FBQ2YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3BCLENBQUM7SUFFTSxrQkFBa0I7UUFDeEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDO0lBQzFDLENBQUM7SUFFTSxjQUFjO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxD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QUMxQyxDQUFDO0lBRU0sU0FBUyxDQUFDLGdCQUF3QixFQUFFLE1BQWU7UUFDekQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU0sWUFBWSxDQUFDLGNBQXNCLEVBQUUsYUFBcUIsRUFBRSxXQUFxQjtRQUN2RixNQUFNLEVBQUUsR0FBUSxJQUFJLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqRCxNQUFNLE9BQU8sR0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNqRSxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLElBQUkscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMzQixxQkFBcUIsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUN0RCxDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDO2lCQUNwQixjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLHFCQUFxQixFQUFFLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDaEIsQ0FBQzs4R0E1SVcsV0FBVztrSEFBWCxXQUFXLGNBRlgsTUFBTTs7MkZBRU4sV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7b2YgYXMgb2JzZXJ2YWJsZU9mLCAgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5pbXBvcnQgeyBEZWNpbWFsRm9ybWF0IH0gZnJvbSAnLi9kZWNpbWFsLWZvcm1hdC9kZWNpbWFsLWZvcm1hdCdcbmltcG9ydCB7IERhdGVVdGlsIH0gZnJvbSAnLi9kYXRlLXV0aWwvZGF0ZS11dGlsJztcblxuQEluamVjdGFibGUoe1xuXHRwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgSTE4blNlcnZpY2Uge1xuXG5cdHByb3RlY3RlZCBsb2NhbGU6IHN0cmluZztcblx0cHJvdGVjdGVkIHN0YXRpY0J1bmRsZXM6IGFueSA9IHt9O1xuXHRwcm90ZWN0ZWQgZGF0ZVV0aWw6IERhdGVVdGlsO1xuXG5cdGNvbnN0cnVjdG9yKHByb3RlY3RlZCB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7XG5cdFx0dGhpcy50cmFuc2xhdGVTZXJ2aWNlLnNldERlZmF1bHRMYW5nKCdlbi1VUycpO1xuXHRcdHRoaXMuZGF0ZVV0aWwgPSBuZXcgRGF0ZVV0aWwoJ2VuLVVTJyk7XG5cdH1cblxuXHRwdWJsaWMgdXNlKGxvY2FsZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcblx0XHR0aGlzLmxvY2FsZSA9IGxvY2FsZTtcblx0XHR0aGlzLmRhdGVVdGlsLnNldExvY2FsZShsb2NhbGUpO1xuXHRcdHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudXNlKGxvY2FsZSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TG9jYWxlKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubG9jYWxlO1xuXHR9XG5cblx0cHVibGljIGdldEN1cnJlbnRMYW5ndWFnZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmc7XG5cdH1cblxuXHRwdWJsaWMgZ2V0QnJvd3NlckxhbmcoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldEJyb3dzZXJMYW5nKCk7XG5cdH1cblxuXHRwdWJsaWMgcmVsb2FkTGFuZ3VhZ2UobGFuZzogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcblx0XHRyZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnJlbG9hZExhbmcobGFuZyk7XG5cdH1cblxuXHRwdWJsaWMgc2V0VHJhbnNsYXRpb24obG9jYWxlOiBzdHJpbmcsIHRyYW5zbGF0aW9uczogT2JqZWN0KTogdm9pZCB7XG5cdFx0dGhpcy50cmFuc2xhdGVTZXJ2aWNlLnNldFRyYW5zbGF0aW9uKGxvY2FsZSwgdHJhbnNsYXRpb25zLCBmYWxzZSk7XG5cdH1cblxuXHRwdWJsaWMgYXBwZW5kVHJhbnNsYXRpb24obG9jYWxlOiBzdHJpbmcsIHRyYW5zbGF0aW9uczogT2JqZWN0KTogdm9pZCB7XG5cdFx0dGhpcy50cmFuc2xhdGVTZXJ2aWNlLnNldFRyYW5zbGF0aW9uKGxvY2FsZSwgdHJhbnNsYXRpb25zLCB0cnVlKTtcblx0fVxuXG5cdHB1YmxpYyBnZXQoYnVuZGxlOiBzdHJpbmcgfCBzdHJpbmdbXSk6IE9ic2VydmFibGU8YW55PiB7XG5cdFx0aWYgKHR5cGVvZiBidW5kbGUgPT09ICdzdHJpbmcnICYmIHRoaXMuc3RhdGljQnVuZGxlc1tidW5kbGVdKSB7XG5cdFx0XHRyZXR1cm4gb2JzZXJ2YWJsZU9mKHRoaXMuc3RhdGljQnVuZGxlc1tidW5kbGVdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQoYnVuZGxlKTtcblx0fVxuXG5cdHB1YmxpYyBpbnN0YW50KGtleTogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPiwgaW50ZXJwb2xhdGVQYXJhbXM/OiBhbnkpOiBzdHJpbmcgfCBhbnkge1xuXHRcdGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJyAmJiB0aGlzLnN0YXRpY0J1bmRsZXNba2V5XSkge1xuXHRcdFx0bGV0IGJ1bmRsZVZhbHVlID0gJyc7XG5cdFx0XHRpZiAodHlwZW9mIGludGVycG9sYXRlUGFyYW1zID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRPYmplY3Qua2V5cyhpbnRlcnBvbGF0ZVBhcmFtcylcblx0XHRcdFx0XHQuZm9yRWFjaCgocGFyYW1LZXk6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdFx0YnVuZGxlVmFsdWUgPSB0aGlzLnN0YXRpY0J1bmRsZXNba2V5XS5yZXBsYWNlKCd7eycgKyBwYXJhbUtleSArICd9fScsIGludGVycG9sYXRlUGFyYW1zW3BhcmFtS2V5XSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBidW5kbGVWYWx1ZTtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5zdGF0aWNCdW5kbGVzW2tleV0uaW5kZXhPZigneycpID4gLTEgJiYgIWludGVycG9sYXRlUGFyYW1zKSB7XG5cdFx0XHRcdGNvbnN0IHJlZ0V4ID0gL3t7KFteXSopfX0vZztcblx0XHRcdFx0cmV0dXJuIHRoaXMuc3RhdGljQnVuZGxlc1trZXldLnJlcGxhY2UocmVnRXgsICcnKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLnN0YXRpY0J1bmRsZXNba2V5XTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGtleSwgaW50ZXJwb2xhdGVQYXJhbXMpO1xuXHR9XG5cblx0cHVibGljIHNldFN0YXRpY0J1bmRsZXMoc3RhdGljQnVuZGxlczogYW55KTogdm9pZCB7XG5cdFx0aWYgKHN0YXRpY0J1bmRsZXMpIHtcblx0XHRcdHRoaXMuc3RhdGljQnVuZGxlcyA9IHN0YXRpY0J1bmRsZXM7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGdldERhdGVGb3JtYXQoaXNGdWxsWWVhciA9IGZhbHNlKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5kYXRlVXRpbC5nZXREYXRlRm9ybWF0KGlzRnVsbFllYXIpO1xuXHR9XG5cblx0cHVibGljIGdldERhdGVGb3JtYXRGb3JEYXRlUGlja2VyKGlzRnVsbFllYXIgPSBmYWxzZSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuZGF0ZVV0aWwuZ2V0RGF0ZUZvcm1hdEZvckRhdGVQaWNrZXIoaXNGdWxsWWVhcik7XG5cdH1cblxuXHRwdWJsaWMgZ2V0VGltZUZvcm1hdCh3aXRoU2Vjb25kcyA9IGZhbHNlKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5kYXRlVXRpbC5nZXRUaW1lRm9ybWF0KHdpdGhTZWNvbmRzKTtcblx0fVxuXG5cdHB1YmxpYyBmb3JtYXREYXRlKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmRhdGVVdGlsLmZvcm1hdERhdGUoZGF0ZSk7XG5cdH1cblxuXHRwdWJsaWMgZm9ybWF0RGF0ZUZ1bGxZZWFyKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmRhdGVVdGlsLmZvcm1hdERhdGVGdWxsWWVhcihkYXRlKTtcblx0fVxuXG5cdHB1YmxpYyBmb3JtYXRUaW1lKGRhdGU6IERhdGUsIHdpdGhTZWNvbmRzPzogYm9vbGVhbik6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuZGF0ZVV0aWwuZm9ybWF0VGltZShkYXRlLCB3aXRoU2Vjb25kcyk7XG5cdH1cblxuXHRwdWJsaWMgZm9ybWF0RGF0ZVRpbWUoZGF0ZTogRGF0ZSwgZnVsbFllYXI/OiBib29sZWFuLCB3aXRoU2Vjb25kcz86IGJvb2xlYW4pOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmRhdGVVdGlsLmZvcm1hdERhdGVUaW1lKGRhdGUsIGZ1bGxZZWFyLCB3aXRoU2Vjb25kcyk7XG5cdH1cblxuXHRwdWJsaWMgZm9ybWF0TW9udGhBbmRZZWFyKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmRhdGVVdGlsLmZvcm1hdE1vbnRoQW5kWWVhcihkYXRlKTtcblx0fVxuXG5cdHB1YmxpYyBmb3JtYXREYXRlQW5kU2hvcnRNb250aChkYXRlOiBEYXRlKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5kYXRlVXRpbC5mb3JtYXREYXRlQW5kU2hvcnRNb250aChkYXRlKTtcblx0fVxuXG5cdHB1YmxpYyBnZXREYXRlRnJvbShkYXRlOiBEYXRlKTogRGF0ZSB7XG5cdFx0cmV0dXJuIHRoaXMuZGF0ZVV0aWwuZ2V0RGF0ZUZyb20oZGF0ZSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RGF0ZVRvKGRhdGU6IERhdGUpOiBEYXRlIHtcblx0XHRyZXR1cm4gdGhpcy5kYXRlVXRpbC5nZXREYXRlVG8oZGF0ZSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RGF0ZU1pZERheShkYXRlOiBEYXRlKTogRGF0ZSB7XG5cdFx0cmV0dXJuIHRoaXMuZGF0ZVV0aWwuZ2V0RGF0ZU1pZERheShkYXRlKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRGaXJzdERheU9mV2VlaygpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLmRhdGVVdGlsLmdldEZpcnN0RGF5T2ZXZWVrKCk7XG5cdH1cblxuXHRwdWJsaWMgcGFyc2VEYXRlKGN1cnJlbnREYXRlVmFsdWU6IHN0cmluZywgbG9jYWxlPzogc3RyaW5nKTogRGF0ZSB7XG5cdFx0cmV0dXJuIHRoaXMuZGF0ZVV0aWwucGFyc2VEYXRlKGN1cnJlbnREYXRlVmFsdWUsIGxvY2FsZSk7XG5cdH1cblxuXHRwdWJsaWMgZm9ybWF0TnVtYmVyKG51bWJlclRvRm9ybWF0OiBudW1iZXIsIGRlY2ltYWxGb3JtYXQ6IHN0cmluZywgYXBwbHlMb2NhbGU/OiBib29sZWFuKTogc3RyaW5nIHtcblx0XHRjb25zdCBkZjogYW55ID0gbmV3IERlY2ltYWxGb3JtYXQoZGVjaW1hbEZvcm1hdCk7XG5cdFx0Y29uc3Qgc051bWJlcjogc3RyaW5nID0gZGYuZm9ybWF0KG51bWJlclRvRm9ybWF0LCBkZWNpbWFsRm9ybWF0KTtcblx0XHRpZiAoYXBwbHlMb2NhbGUpIHtcblx0XHRcdGxldCBtaW5pbXVtRnJhY3Rpb25EaWdpdHMgPSAwO1xuXHRcdFx0aWYgKHNOdW1iZXIuc3BsaXQoJy4nKVsxXSkge1xuXHRcdFx0XHRtaW5pbXVtRnJhY3Rpb25EaWdpdHMgPSBzTnVtYmVyLnNwbGl0KCcuJylbMV0ubGVuZ3RoO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIE51bWJlcihzTnVtYmVyKVxuXHRcdFx0XHQudG9Mb2NhbGVTdHJpbmcodGhpcy5sb2NhbGUsIHsgbWluaW11bUZyYWN0aW9uRGlnaXRzIH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gc051bWJlcjtcblx0fVxufVxuIl19