UNPKG

systelab-translate

Version:

The internationalization (i18n) library for Systelab

205 lines 26 kB
import { format, setHours, setMilliseconds, setMinutes, setSeconds } from 'date-fns'; import { ca, de, enGB, enUS, es, fr, gl, it, ja, ko, lt, nl, pl, pt, ru, sk, th, zhCN } from 'date-fns/locale'; export class DateUtil { constructor(locale) { this.locale = locale; } setLocale(lang) { this.locale = lang; } formatDate(date) { if (!date) { return undefined; } return format(date, this.getDateFormat()); } formatDateFullYear(date) { if (!date) { return undefined; } return format(date, this.getDateFormat(true)); } formatTime(date, withSeconds) { if (!date) { return undefined; } return format(date, this.getTimeFormat(withSeconds)); } formatDateTime(date, fullYear, withSeconds) { if (!date) { return undefined; } const formattedDate = (fullYear) ? this.formatDateFullYear(date) : this.formatDate(date); const formattedHour = this.formatTime(date, withSeconds); return formattedDate + ' ' + formattedHour; } formatMonthAndYear(date) { if (!date) { return undefined; } return format(date, 'MMMM, yyyy', { locale: this.convertSystelabLocaleToDateFnsLocale(this.locale) }); } formatDateAndShortMonth(date) { if (!date) { return undefined; } return format(date, 'd MMM', { locale: this.convertSystelabLocaleToDateFnsLocale(this.locale) }); } getDateFrom(date) { let d = setHours(date, 0); d = setMinutes(d, 0); d = setSeconds(d, 0); d = setMilliseconds(d, 0); return d; } getDateTo(date) { let d = setHours(date, 23); d = setMinutes(d, 59); d = setSeconds(d, 59); d = setMilliseconds(d, 999); return d; } getDateMidDay(date) { let d = setHours(date, 12); d = setMinutes(d, 0); d = setSeconds(d, 0); d = setMilliseconds(d, 0); return d; } getTimeFormat(withSeconds = false) { if (withSeconds) { return this.locale === 'en-US' ? 'hh:mm:ss a' : 'HH:mm:ss'; } else { return this.locale === 'en-US' ? 'hh:mm a' : 'HH:mm'; } } getDateFormat(fullDateFormat = false) { return this.getLocalizedStringDateFormat(this.locale, fullDateFormat); } getDateFormatForDatePicker(fullDateFormat = false) { return this.getLocalizedDateFormatForDatePicker(this.locale, fullDateFormat); } getFirstDayOfWeek() { switch (this.locale) { case 'en-US': case 'zh-CN': case 'th-TH': case 'ja-JA': return 0; // Sunday default: return 1; // Monday } } getSeparator(locale) { switch (locale) { case 'pl-PL': case 'lt-LT': case 'pt-PT': case 'pt-BR': case 'nl-NL': return '-'; case 'sk-SK': case 'ru-RU': case 'de-DE': return '.'; default: return '/'; } } parseDate(currentDateValue, locale) { if (!locale) { locale = this.locale; } if (!currentDateValue) { return undefined; } const auxArray = currentDateValue.split(this.getSeparator(locale)); if (auxArray.indexOf('') > -1) { return undefined; } switch (locale) { case 'pl-PL': case 'lt-LT': return new Date(auxArray.join('/')); case 'zh-CN': case 'ja-JA': case 'en-US': return new Date(currentDateValue); default: return new Date(auxArray[1] + '/' + auxArray[0] + '/' + auxArray[2]); } } convertSystelabLocaleToDateFnsLocale(localeString) { const localeForSystelabLocale = new Map([ ['es', es], ['es-ES', es], ['es-CL', es], ['es-MX', es], ['es-UY', es], ['es-AR', es], ['es-BO', es], ['es-CO', es], ['es-CR', es], ['es-DO', es], ['es-EC', es], ['es-SV', es], ['es-GT', es], ['es-HN', es], ['es-NI', es], ['es-PA', es], ['es-PY', es], ['es-PE', es], ['es-PR', es], ['es-VE', es], ['fr', fr], ['fr-FR', fr], ['it', it], ['it-IT', it], ['en', enUS], ['en-US', enUS], ['en-GB', enGB], ['pt', pt], ['pt-BR', pt], ['ca', ca], ['gl', gl], ['lt', lt], ['lt-LT', lt], ['pl', pl], ['pl-PL', pl], ['sk', sk], ['sk-SK', sk], ['ru', ru], ['ru-RU', ru], ['zh', zhCN], ['zh-CN', zhCN], ['de', de], ['de-DE', de], ['th', th], ['th-TH', th], ['ja', ja], ['ja-JA', ja], ['ko', ko], ['ko-KR', ko], ['nl', nl], ['nl-NL', nl], ]); const locale = localeForSystelabLocale.get(localeString); return locale ? locale : enUS; } getLocalizedStringDateFormat(locale, fullDateFormat = false) { const year = fullDateFormat ? 'yyyy' : 'yy'; switch (locale) { case 'en-US': return fullDateFormat ? `MM/dd/${year}` : `M/d/${year}`; case 'ko-KO': return `${year}. M. d`; case 'pl-PL': case 'lt-LT': return `${year}-MM-dd`; case 'pt-PT': case 'pt-BR': case 'nl-NL': return `dd-MM-${year}`; case 'sk-SK': case 'ru-RU': return `d.M.${year}`; case 'zh-ZH': return `${year}-M-d`; case 'de-DE': return `dd.MM.${year}`; case 'th-TH': return `d/M/${year}`; case 'ja-JA': return `${year}/MM/dd`; default: return `dd/MM/${year}`; } } getLocalizedDateFormatForDatePicker(locale, fullDateFormat = false) { const year = fullDateFormat ? 'yy' : 'y'; switch (locale) { case 'en-US': return fullDateFormat ? `mm/dd/${year}` : `m/d/${year}`; case 'ko-KO': return `${year}. m. d`; case 'pl-PL': case 'lt-LT': return `${year}-mm-dd`; case 'pt-PT': case 'pt-BR': case 'nl-NL': return `dd-mm-${year}`; case 'sk-SK': case 'ru-RU': return `d.m.${year}`; case 'zh-CN': return `${year}-m-d`; case 'de-DE': return `dd.mm.${year}`; case 'th-TH': return `d/m/${year}`; case 'ja-JA': return `${year}/mm/dd`; default: return `dd/mm/${year}`; } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS11dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3lzdGVsYWItdHJhbnNsYXRlL3NyYy9saWIvZGF0ZS11dGlsL2RhdGUtdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNyRixPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvRyxNQUFNLE9BQU8sUUFBUTtJQUVwQixZQUFzQixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUNwQyxDQUFDO0lBRU0sU0FBUyxDQUFDLElBQVk7UUFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDcEIsQ0FBQztJQUVNLFVBQVUsQ0FBQyxJQUFVO1FBQzNCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNYLE9BQU8sU0FBUyxDQUFDO1FBQ2xCLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVNLGtCQUFrQixDQUFDLElBQVU7UUFDbkMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1gsT0FBTyxTQUFTLENBQUM7UUFDbEIsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENB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QUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ3BHLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUN2RyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7WUFDcEcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3BHLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FB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T0FBTyxDQUFDO1lBQ2IsS0FBSyxPQUFPLENBQUM7WUFDYixLQUFLLE9BQU87Z0JBQ1gsT0FBTyxTQUFTLElBQUksRUFBRSxDQUFDO1lBQ3hCLEtBQUssT0FBTyxDQUFDO1lBQ2IsS0FBSyxPQUFPO2dCQUNYLE9BQU8sT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUN0QixLQUFLLE9BQU87Z0JBQ1gsT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDO1lBQ3RCLEtBQUssT0FBTztnQkFDWCxPQUFPLFNBQVMsSUFBSSxFQUFFLENBQUM7WUFDeEIsS0FBSyxPQUFPO2dCQUNYLE9BQU8sT0FBTyxJQUFJLEVBQUUsQ0FBQztZQUN0QixLQUFLLE9BQU87Z0JBQ1gsT0FBTyxHQUFHLElBQUksUUFBUSxDQUFDO1lBQ3hCO2dCQUNDLE9BQU8sU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUN6QixDQUFDO0lBQ0YsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0LCBzZXRIb3Vycywgc2V0TWlsbGlzZWNvbmRzLCBzZXRNaW51dGVzLCBzZXRTZWNvbmRzIH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHsgY2EsIGRlLCBlbkdCLCBlblVTLCBlcywgZnIsIGdsLCBpdCwgamEsIGtvLCBsdCwgbmwsIHBsLCBwdCwgcnUsIHNrLCB0aCwgemhDTiB9IGZyb20gJ2RhdGUtZm5zL2xvY2FsZSc7XG5cbmV4cG9ydCBjbGFzcyBEYXRlVXRpbCB7XG5cblx0Y29uc3RydWN0b3IocHJvdGVjdGVkIGxvY2FsZTogc3RyaW5nKSB7XG5cdH1cblxuXHRwdWJsaWMgc2V0TG9jYWxlKGxhbmc6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMubG9jYWxlID0gbGFuZztcblx0fVxuXG5cdHB1YmxpYyBmb3JtYXREYXRlKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuXHRcdGlmICghZGF0ZSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIGZvcm1hdChkYXRlLCB0aGlzLmdldERhdGVGb3JtYXQoKSk7XG5cdH1cblxuXHRwdWJsaWMgZm9ybWF0RGF0ZUZ1bGxZZWFyKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuXHRcdGlmICghZGF0ZSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIGZvcm1hdChkYXRlLCB0aGlzLmdldERhdGVGb3JtYXQodHJ1ZSkpO1xuXHR9XG5cblx0cHVibGljIGZvcm1hdFRpbWUoZGF0ZTogRGF0ZSwgd2l0aFNlY29uZHM/OiBib29sZWFuKTogc3RyaW5nIHtcblx0XHRpZiAoIWRhdGUpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiBmb3JtYXQoZGF0ZSwgdGhpcy5nZXRUaW1lRm9ybWF0KHdpdGhTZWNvbmRzKSk7XG5cdH1cblxuXHRwdWJsaWMgZm9ybWF0RGF0ZVRpbWUoZGF0ZTogRGF0ZSwgZnVsbFllYXI/OiBib29sZWFuLCB3aXRoU2Vjb25kcz86IGJvb2xlYW4pOiBzdHJpbmcge1xuXHRcdGlmICghZGF0ZSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Y29uc3QgZm9ybWF0dGVkRGF0ZSA9IChmdWxsWWVhcikgPyB0aGlzLmZvcm1hdERhdGVGdWxsWWVhcihkYXRlKSA6IHRoaXMuZm9ybWF0RGF0ZShkYXRlKTtcblx0XHRjb25zdCBmb3JtYXR0ZWRIb3VyID0gdGhpcy5mb3JtYXRUaW1lKGRhdGUsIHdpdGhTZWNvbmRzKTtcblx0XHRyZXR1cm4gZm9ybWF0dGVkRGF0ZSArICcgJyArIGZvcm1hdHRlZEhvdXI7XG5cdH1cblxuXHRwdWJsaWMgZm9ybWF0TW9udGhBbmRZZWFyKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuXHRcdGlmICghZGF0ZSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIGZvcm1hdChkYXRlLCAnTU1NTSwgeXl5eScsIHtsb2NhbGU6IHRoaXMuY29udmVydFN5c3RlbGFiTG9jYWxlVG9EYXRlRm5zTG9jYWxlKHRoaXMubG9jYWxlKX0pO1xuXHR9XG5cblx0cHVibGljIGZvcm1hdERhdGVBbmRTaG9ydE1vbnRoKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuXHRcdGlmICghZGF0ZSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIGZvcm1hdChkYXRlLCAnZCBNTU0nLCB7bG9jYWxlOiB0aGlzLmNvbnZlcnRTeXN0ZWxhYkxvY2FsZVRvRGF0ZUZuc0xvY2FsZSh0aGlzLmxvY2FsZSl9KTtcblx0fVxuXG5cdHB1YmxpYyBnZXREYXRlRnJvbShkYXRlOiBEYXRlKTogRGF0ZSB7XG5cdFx0bGV0IGQ6IERhdGUgPSBzZXRIb3VycyhkYXRlLCAwKTtcblx0XHRkID0gc2V0TWludXRlcyhkLCAwKTtcblx0XHRkID0gc2V0U2Vjb25kcyhkLCAwKTtcblx0XHRkID0gc2V0TWlsbGlzZWNvbmRzKGQsIDApO1xuXHRcdHJldHVybiBkO1xuXHR9XG5cblx0cHVibGljIGdldERhdGVUbyhkYXRlOiBEYXRlKTogRGF0ZSB7XG5cdFx0bGV0IGQ6IERhdGUgPSBzZXRIb3VycyhkYXRlLCAyMyk7XG5cdFx0ZCA9IHNldE1pbnV0ZXMoZCwgNTkpO1xuXHRcdGQgPSBzZXRTZWNvbmRzKGQsIDU5KTtcblx0XHRkID0gc2V0TWlsbGlzZWNvbmRzKGQsIDk5OSk7XG5cdFx0cmV0dXJuIGQ7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RGF0ZU1pZERheShkYXRlOiBEYXRlKTogRGF0ZSB7XG5cdFx0bGV0IGQ6IERhdGUgPSBzZXRIb3VycyhkYXRlLCAxMik7XG5cdFx0ZCA9IHNldE1pbnV0ZXMoZCwgMCk7XG5cdFx0ZCA9IHNldFNlY29uZHMoZCwgMCk7XG5cdFx0ZCA9IHNldE1pbGxpc2Vjb25kcyhkLCAwKTtcblx0XHRyZXR1cm4gZDtcblx0fVxuXG5cdHB1YmxpYyBnZXRUaW1lRm9ybWF0KHdpdGhTZWNvbmRzID0gZmFsc2UpOiBzdHJpbmcge1xuXHRcdGlmICh3aXRoU2Vjb25kcykge1xuXHRcdFx0cmV0dXJuIHRoaXMubG9jYWxlID09PSAnZW4tVVMnID8gJ2hoOm1tOnNzIGEnIDogJ0hIOm1tOnNzJztcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMubG9jYWxlID09PSAnZW4tVVMnID8gJ2hoOm1tIGEnIDogJ0hIOm1tJztcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZ2V0RGF0ZUZvcm1hdChmdWxsRGF0ZUZvcm1hdCA9IGZhbHNlKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRMb2NhbGl6ZWRTdHJpbmdEYXRlRm9ybWF0KHRoaXMubG9jYWxlLCBmdWxsRGF0ZUZvcm1hdCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RGF0ZUZvcm1hdEZvckRhdGVQaWNrZXIoZnVsbERhdGVGb3JtYXQgPSBmYWxzZSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TG9jYWxpemVkRGF0ZUZvcm1hdEZvckRhdGVQaWNrZXIodGhpcy5sb2NhbGUsIGZ1bGxEYXRlRm9ybWF0KTtcblx0fVxuXG5cdHB1YmxpYyBnZXRGaXJzdERheU9mV2VlaygpOiBudW1iZXIge1xuXHRcdHN3aXRjaCAodGhpcy5sb2NhbGUpIHtcblx0XHRcdGNhc2UgJ2VuLVVTJzpcblx0XHRcdGNhc2UgJ3poLUNOJzpcblx0XHRcdGNhc2UgJ3RoLVRIJzpcblx0XHRcdGNhc2UgJ2phLUpBJzpcblx0XHRcdFx0cmV0dXJuIDA7IC8vIFN1bmRheVxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIDE7IC8vIE1vbmRheVxuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBnZXRTZXBhcmF0b3IobG9jYWxlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHN3aXRjaCAobG9jYWxlKSB7XG5cdFx0XHRjYXNlICdwbC1QTCc6XG5cdFx0XHRjYXNlICdsdC1MVCc6XG5cdFx0XHRjYXNlICdwdC1QVCc6XG5cdFx0XHRjYXNlICdwdC1CUic6XG5cdFx0XHRjYXNlICdubC1OTCc6XG5cdFx0XHRcdHJldHVybiAnLSc7XG5cdFx0XHRjYXNlICdzay1TSyc6XG5cdFx0XHRjYXNlICdydS1SVSc6XG5cdFx0XHRjYXNlICdkZS1ERSc6XG5cdFx0XHRcdHJldHVybiAnLic7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gJy8nO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBwYXJzZURhdGUoY3VycmVudERhdGVWYWx1ZTogc3RyaW5nLCBsb2NhbGU/OiBzdHJpbmcpOiBEYXRlIHtcblx0XHRpZiAoIWxvY2FsZSkge1xuXHRcdFx0bG9jYWxlID0gdGhpcy5sb2NhbGU7XG5cdFx0fVxuXG5cdFx0aWYgKCFjdXJyZW50RGF0ZVZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGNvbnN0IGF1eEFycmF5ID0gY3VycmVudERhdGVWYWx1ZS5zcGxpdCh0aGlzLmdldFNlcGFyYXRvcihsb2NhbGUpKTtcblx0XHRpZiAoYXV4QXJyYXkuaW5kZXhPZignJykgPiAtMSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRzd2l0Y2ggKGxvY2FsZSkge1xuXHRcdFx0Y2FzZSAncGwtUEwnOlxuXHRcdFx0Y2FzZSAnbHQtTFQnOlxuXHRcdFx0XHRyZXR1cm4gbmV3IERhdGUoYXV4QXJyYXkuam9pbignLycpKTtcblx0XHRcdGNhc2UgJ3poLUNOJzpcblx0XHRcdGNhc2UgJ2phLUpBJzpcblx0XHRcdGNhc2UgJ2VuLVVTJzpcblx0XHRcdFx0cmV0dXJuIG5ldyBEYXRlKGN1cnJlbnREYXRlVmFsdWUpO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIG5ldyBEYXRlKGF1eEFycmF5WzFdICsgJy8nICsgYXV4QXJyYXlbMF0gKyAnLycgKyBhdXhBcnJheVsyXSk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBjb252ZXJ0U3lzdGVsYWJMb2NhbGVUb0RhdGVGbnNMb2NhbGUobG9jYWxlU3RyaW5nOiBzdHJpbmcpOiBMb2NhbGUge1xuXHRcdGNvbnN0IGxvY2FsZUZvclN5c3RlbGFiTG9jYWxlID0gbmV3IE1hcDxzdHJpbmcsIExvY2FsZT4oW1xuXHRcdFx0WydlcycsIGVzXSwgWydlcy1FUycsIGVzXSwgWydlcy1DTCcsIGVzXSwgWydlcy1NWCcsIGVzXSwgWydlcy1VWScsIGVzXSwgWydlcy1BUicsIGVzXSwgWydlcy1CTycsIGVzXSxcblx0XHRcdFsnZXMtQ08nLCBlc10sIFsnZXMtQ1InLCBlc10sIFsnZXMtRE8nLCBlc10sIFsnZXMtRUMnLCBlc10sIFsnZXMtU1YnLCBlc10sIFsnZXMtR1QnLCBlc10sIFsnZXMtSE4nLCBlc10sXG5cdFx0XHRbJ2VzLU5JJywgZXNdLCBbJ2VzLVBBJywgZXNdLCBbJ2VzLVBZJywgZXNdLCBbJ2VzLVBFJywgZXNdLCBbJ2VzLVBSJywgZXNdLCBbJ2VzLVZFJywgZXNdLCBbJ2ZyJywgZnJdLFxuXHRcdFx0Wydmci1GUicsIGZyXSwgWydpdCcsIGl0XSwgWydpdC1JVCcsIGl0XSwgWydlbicsIGVuVVNdLCBbJ2VuLVVTJywgZW5VU10sIFsnZW4tR0InLCBlbkdCXSwgWydwdCcsIHB0XSxcblx0XHRcdFsncHQtQlInLCBwdF0sIFsnY2EnLCBjYV0sIFsnZ2wnLCBnbF0sIFsnbHQnLCBsdF0sIFsnbHQtTFQnLCBsdF0sIFsncGwnLCBwbF0sIFsncGwtUEwnLCBwbF0sIFsnc2snLCBza10sXG5cdFx0XHRbJ3NrLVNLJywgc2tdLCBbJ3J1JywgcnVdLCBbJ3J1LVJVJywgcnVdLCBbJ3poJywgemhDTl0sIFsnemgtQ04nLCB6aENOXSwgWydkZScsIGRlXSwgWydkZS1ERScsIGRlXSxcblx0XHRcdFsndGgnLCB0aF0sIFsndGgtVEgnLCB0aF0sIFsnamEnLCBqYV0sIFsnamEtSkEnLCBqYV0sIFsna28nLCBrb10sIFsna28tS1InLCBrb10sIFsnbmwnLCBubF0sIFsnbmwtTkwnLCBubF0sXG5cdFx0XSk7XG5cdFx0Y29uc3QgbG9jYWxlOiBMb2NhbGUgPSBsb2NhbGVGb3JTeXN0ZWxhYkxvY2FsZS5nZXQobG9jYWxlU3RyaW5nKTtcblx0XHRyZXR1cm4gbG9jYWxlID8gbG9jYWxlIDogZW5VUztcblx0fVxuXG5cdHByaXZhdGUgZ2V0TG9jYWxpemVkU3RyaW5nRGF0ZUZvcm1hdChsb2NhbGU6IHN0cmluZywgZnVsbERhdGVGb3JtYXQgPSBmYWxzZSk6IHN0cmluZyB7XG5cdFx0Y29uc3QgeWVhciA9IGZ1bGxEYXRlRm9ybWF0ID8gJ3l5eXknIDogJ3l5Jztcblx0XHRzd2l0Y2ggKGxvY2FsZSkge1xuXHRcdFx0Y2FzZSAnZW4tVVMnOlxuXHRcdFx0XHRyZXR1cm4gZnVsbERhdGVGb3JtYXQgPyBgTU0vZGQvJHt5ZWFyfWAgOiBgTS9kLyR7eWVhcn1gO1xuXHRcdFx0Y2FzZSAna28tS08nOlxuXHRcdFx0XHRyZXR1cm4gYCR7eWVhcn0uIE0uIGRgO1xuXHRcdFx0Y2FzZSAncGwtUEwnOlxuXHRcdFx0Y2FzZSAnbHQtTFQnOlxuXHRcdFx0XHRyZXR1cm4gYCR7eWVhcn0tTU0tZGRgO1xuXHRcdFx0Y2FzZSAncHQtUFQnOlxuXHRcdFx0Y2FzZSAncHQtQlInOlxuXHRcdFx0Y2FzZSAnbmwtTkwnOlxuXHRcdFx0XHRyZXR1cm4gYGRkLU1NLSR7eWVhcn1gO1xuXHRcdFx0Y2FzZSAnc2stU0snOlxuXHRcdFx0Y2FzZSAncnUtUlUnOlxuXHRcdFx0XHRyZXR1cm4gYGQuTS4ke3llYXJ9YDtcblx0XHRcdGNhc2UgJ3poLVpIJzpcblx0XHRcdFx0cmV0dXJuIGAke3llYXJ9LU0tZGA7XG5cdFx0XHRjYXNlICdkZS1ERSc6XG5cdFx0XHRcdHJldHVybiBgZGQuTU0uJHt5ZWFyfWA7XG5cdFx0XHRjYXNlICd0aC1USCc6XG5cdFx0XHRcdHJldHVybiBgZC9NLyR7eWVhcn1gO1xuXHRcdFx0Y2FzZSAnamEtSkEnOlxuXHRcdFx0XHRyZXR1cm4gYCR7eWVhcn0vTU0vZGRgO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIGBkZC9NTS8ke3llYXJ9YDtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldExvY2FsaXplZERhdGVGb3JtYXRGb3JEYXRlUGlja2VyKGxvY2FsZTogc3RyaW5nLCBmdWxsRGF0ZUZvcm1hdCA9IGZhbHNlKTogc3RyaW5nIHtcblx0XHRjb25zdCB5ZWFyID0gZnVsbERhdGVGb3JtYXQgPyAneXknIDogJ3knO1xuXHRcdHN3aXRjaCAobG9jYWxlKSB7XG5cdFx0XHRjYXNlICdlbi1VUyc6XG5cdFx0XHRcdHJldHVybiBmdWxsRGF0ZUZvcm1hdCA/IGBtbS9kZC8ke3llYXJ9YCA6IGBtL2QvJHt5ZWFyfWA7XG5cdFx0XHRjYXNlICdrby1LTyc6XG5cdFx0XHRcdHJldHVybiBgJHt5ZWFyfS4gbS4gZGA7XG5cdFx0XHRjYXNlICdwbC1QTCc6XG5cdFx0XHRjYXNlICdsdC1MVCc6XG5cdFx0XHRcdHJldHVybiBgJHt5ZWFyfS1tbS1kZGA7XG5cdFx0XHRjYXNlICdwdC1QVCc6XG5cdFx0XHRjYXNlICdwdC1CUic6XG5cdFx0XHRjYXNlICdubC1OTCc6XG5cdFx0XHRcdHJldHVybiBgZGQtbW0tJHt5ZWFyfWA7XG5cdFx0XHRjYXNlICdzay1TSyc6XG5cdFx0XHRjYXNlICdydS1SVSc6XG5cdFx0XHRcdHJldHVybiBgZC5tLiR7eWVhcn1gO1xuXHRcdFx0Y2FzZSAnemgtQ04nOlxuXHRcdFx0XHRyZXR1cm4gYCR7eWVhcn0tbS1kYDtcblx0XHRcdGNhc2UgJ2RlLURFJzpcblx0XHRcdFx0cmV0dXJuIGBkZC5tbS4ke3llYXJ9YDtcblx0XHRcdGNhc2UgJ3RoLVRIJzpcblx0XHRcdFx0cmV0dXJuIGBkL20vJHt5ZWFyfWA7XG5cdFx0XHRjYXNlICdqYS1KQSc6XG5cdFx0XHRcdHJldHVybiBgJHt5ZWFyfS9tbS9kZGA7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gYGRkL21tLyR7eWVhcn1gO1xuXHRcdH1cblx0fVxufVxuIl19