UNPKG

@ema/js-base-library

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.2.0.

226 lines 24.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { i18n } from '../i18n/index'; import { Util } from '../utils/util'; export class Translate { constructor() { this.i18n = i18n; this.defaultLanguage = 'en-US'; this.supportedLanguages = [ 'en-US', 'nl-NL' ]; this.translations = {}; this.translationsLocation = 'assets/translations'; this.options = { debug: false, //[Boolean]: Logs missing translations to console and adds @@-markers around output. namespaceSplitter: '::' //[String|RegExp]: You can customize the part which splits namespace and translationKeys. }; this.initTranslateJs(); this.libTranslate = Util.getGlobal()['libTranslate']; // fixme: does not work in node.js Object.keys(i18n).forEach((/** * @param {?} k * @return {?} */ (k) => { this.supportedLanguages.push(k); })); this.translations = Util.copy(i18n); this.translations['nl-NL'] = Util.copy(this.translations['nl']); this.translations['en-US'] = Util.copy(this.translations['en']); this.translations['en-BE'] = Util.copy(this.translations['en']); this.use(this.defaultLanguage); } /** * Translates a string to the current language of the TranslateService. * @param {?} translationKey - The string to translate. * @param {...?} params - The parameters to send to the translate function. * @return {?} */ get(translationKey, ...params) { return this.t(translationKey, ...params); } /** * Adds a translated string to the current language object. * @param {?} translationKey - The identifier of the translation. * @param {?} value - The value of the translation in the current selected language. * @return {?} */ set(translationKey, value) { this.translations[this.language][translationKey] = value; } /** * @param {?} translationsObject * @return {?} */ add(translationsObject) { Object.keys(translationsObject).forEach((/** * @param {?} k * @return {?} */ (k) => { this.set(k, translationsObject[k]); })); } /** * Switch the current language of the translateService. * If the supplied language parameter is not yet present in the translations object, * the service will try to load a json file in the location specified in translationsLocation property. * example: use('fr'), will load 'assets/translations/fr.json' by default * @param {?} language - The language identifier. * @param {?=} reloadRemote - Set this to true to reload the json translation file. * @return {?} */ use(language, reloadRemote = false) { return tslib_1.__awaiter(this, void 0, void 0, function* () { this.language = language; if (!this.translations[language] || reloadRemote) { yield this.loadTranslation(language); } this.t = this.libTranslate.getTranslationFunction(this.translations[language], [this.options]); return; }); } /** * @param {?} language * @return {?} */ loadTranslation(language) { return tslib_1.__awaiter(this, void 0, void 0, function* () { if (!this.translations[language]) this.translations[language] = {}; /** @type {?} */ let loadedTranslation = yield Util.fetchJson(this.translationsLocation + '/' + language + '.json'); Object.keys(loadedTranslation).forEach((/** * @param {?} k * @return {?} */ (k) => { this.translations[language][k] = loadedTranslation[k]; })); return; }); } /** * @return {?} */ updateTranslateComponents() { /** @type {?} */ let components = Array.from(document.getElementsByTagName('ema-translate')); components.forEach((/** * @param {?} el * @return {?} */ (el) => { el['update'](); })); } /** * @return {?} */ initTranslateJs() { /*! translate.js - v1.1.0 - 2015-06-16 * https://github.com/musterknabe/translate.js * Copyright (c) 2015 Jonas Girnatis * Licensed under MIT license */ // @ts-ignore !(/** * @return {?} */ function () { "use strict"; /** @type {?} */ var a = (/** * @param {?} a * @return {?} */ function (a) { return !isNaN(parseFloat(a)) && isFinite(a); }); /** @type {?} */ var b = (/** * @param {?} a * @return {?} */ function (a) { return "object" == typeof a && null !== a; }); /** @type {?} */ var c = (/** * @param {?} a * @return {?} */ function (a) { return "[object String]" === Object.prototype.toString.call(a); }); Util.getGlobal()['libTranslate'] = { getTranslationFunction: (/** * @param {?} d * @param {?} e * @return {?} */ function (d, e) { /** * @param {?} a * @return {?} */ function f(a) { if (d[a]) return d[a]; /** @type {?} */ var b = a.split(j); /** @type {?} */ var c = b[0]; /** @type {?} */ var e = b[1]; return d[c] && d[c][e] ? d[c][e] : null; } /** * @param {?} a * @param {?} c * @return {?} */ function g(a, c) { if (b(a)) { /** @type {?} */ var d; /** @type {?} */ var e = Object.keys(a); if (0 === e.length) return i && console.log("[Translation] No plural forms found."), null; for (var f = 0; f < e.length; f++) 0 === e[f].indexOf("gt") && (d = parseInt(e[f].replace("gt", ""), 10)); a[c] ? a = a[c] : c > d ? a = a["gt" + d] : a.n ? a = a.n : (i && console.log('[Translation] No plural forms found for count:"' + c + '" in', a), a = a[Object.keys(a).reverse()[0]]); } return a; } /** * @param {?} a * @param {?} b * @return {?} */ function h(a, b) { return c(a) ? a.replace(/\{(\w*)\}/g, (/** * @param {?} a * @param {?} c * @return {?} */ function (a, c) { return b.hasOwnProperty(c) ? b.hasOwnProperty(c) ? b[c] : c : (i && console.log('Could not find replacement "' + c + '" in provided replacements object:', b), "{" + c + "}"); })) : a; } e = b(e) ? e : {}; /** @type {?} */ var i = e.debug; /** @type {?} */ var j = e.namespaceSplitter || "::"; return (/** * @param {?} c * @return {?} */ function (c) { /** @type {?} */ var d = b(arguments[1]) ? arguments[1] : b(arguments[2]) ? arguments[2] : {}; /** @type {?} */ var e = a(arguments[1]) ? arguments[1] : a(arguments[2]) ? arguments[2] : null; /** @type {?} */ var j = f(c); return null !== e && (d.n = d.n ? d.n : e, j = g(j, e)), j = h(j, d), null === j && (j = i ? "@@" + c + "@@" : c, i && console.log('Translation for "' + c + '" not found.')), j; }); }) }; })(); } } if (false) { /** @type {?} */ Translate.prototype.t; /** @type {?} */ Translate.prototype.i18n; /** @type {?} */ Translate.prototype.libTranslate; /** @type {?} */ Translate.prototype.defaultLanguage; /** @type {?} */ Translate.prototype.supportedLanguages; /** @type {?} */ Translate.prototype.translations; /** @type {?} */ Translate.prototype.language; /** @type {?} */ Translate.prototype.translationsLocation; /** @type {?} */ Translate.prototype.options; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGVtYS9qcy1iYXNlLWxpYnJhcnkvIiwic291cmNlcyI6WyJsaWIvdHJhbnNsYXRlL3RyYW5zbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDcEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyQyxNQUFNLE9BQU8sU0FBUztJQWtCbEI7UUFmQSxTQUFJLEdBQUcsSUFBSSxDQUFDO1FBRVosb0JBQWUsR0FBRyxPQUFPLENBQUM7UUFDMUIsdUJBQWtCLEdBQUc7WUFDakIsT0FBTztZQUNQLE9BQU87U0FDVixDQUFDO1FBQ0YsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFFWCx5QkFBb0IsR0FBRyxxQkFBcUIsQ0FBQztRQUM3QyxZQUFPLEdBQUc7WUFDYixLQUFLLEVBQUUsS0FBSzs7WUFDWixpQkFBaUIsRUFBRSxJQUFJLENBQUMseUZBQXlGO1NBQ3BILENBQUM7UUFHRSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxrQ0FBa0M7UUFFeEYsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPOzs7O1FBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUM1QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLENBQUMsRUFBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7Ozs7Ozs7SUFPRCxHQUFHLENBQUMsY0FBYyxFQUFFLEdBQUcsTUFBYTtRQUNoQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDN0MsQ0FBQzs7Ozs7OztJQU9ELEdBQUcsQ0FBQyxjQUFzQixFQUFFLEtBQUs7UUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzdELENBQUM7Ozs7O0lBRUQsR0FBRyxDQUFDLGtCQUF1QjtRQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsT0FBTzs7OztRQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDM0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNwQyxDQUFDLEVBQUMsQ0FBQztJQUNQLENBQUM7Ozs7Ozs7Ozs7SUFVSyxHQUFHLENBQUMsUUFBZ0IsRUFBRSxZQUFZLEdBQUcsS0FBSzs7WUFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFDekIsSUFBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksWUFBWSxFQUFFO2dCQUM3QyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDeEM7WUFDRCxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQy9GLE9BQU87UUFDWCxDQUFDO0tBQUE7Ozs7O0lBRUssZUFBZSxDQUFDLFFBQWdCOztZQUNsQyxJQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7Z0JBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7O2dCQUM5RCxpQkFBaUIsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEdBQUcsR0FBRyxRQUFRLEdBQUcsT0FBTyxDQUFDO1lBQ2xHLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxPQUFPOzs7O1lBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRCxDQUFDLEVBQUMsQ0FBQztZQUNILE9BQU87UUFDWCxDQUFDO0tBQUE7Ozs7SUFFRCx5QkFBeUI7O1lBQ2pCLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMzRSxVQUFVLENBQUMsT0FBTzs7OztRQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7WUFDdEIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxFQUFDLENBQUE7SUFDTixDQUFDOzs7O0lBR0QsZUFBZTtRQUNYOzs7O1dBSUc7UUFDSCxhQUFhO1FBQ2IsQ0FBQzs7O1FBQUE7WUFBVyxZQUFZLENBQUM7O2dCQUFJLENBQUM7Ozs7WUFBQyxVQUFTLENBQUMsSUFBRSxPQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFBLENBQUMsQ0FBQTs7Z0JBQUMsQ0FBQzs7OztZQUFDLFVBQVMsQ0FBQyxJQUFFLE9BQU0sUUFBUSxJQUFFLE9BQU8sQ0FBQyxJQUFFLElBQUksS0FBRyxDQUFDLENBQUEsQ0FBQSxDQUFDLENBQUE7O2dCQUFDLENBQUM7Ozs7WUFBQyxVQUFTLENBQUMsSUFBRSxPQUFNLGlCQUFpQixLQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFBLENBQUMsQ0FBQTtZQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUMsR0FBQyxFQUFDLHNCQUFzQjs7Ozs7Z0JBQUMsVUFBUyxDQUFDLEVBQUMsQ0FBQzs7OztnQkFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUUsSUFBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUFJLENBQUMsR0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUEsQ0FBQSxDQUFDOzs7OztnQkFBQSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLElBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDOzt3QkFBSyxDQUFDOzt3QkFBQyxDQUFDLEdBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQUMsSUFBRyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE1BQU07d0JBQUMsT0FBTyxDQUFDLElBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsQ0FBQyxFQUFDLElBQUksQ0FBQztvQkFBQSxLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLEVBQUU7d0JBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUUsQ0FBQyxDQUFDLEdBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDLEdBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLENBQUMsQ0FBQyxJQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsaURBQWlELEdBQUMsQ0FBQyxHQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO2lCQUFDLENBQUEsT0FBTyxDQUFDLENBQUEsQ0FBQSxDQUFDOzs7OztnQkFBQSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVk7Ozs7O2dCQUFDLFVBQVMsQ0FBQyxFQUFDLENBQUMsSUFBRSxPQUFPLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDLENBQUMsSUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLDhCQUE4QixHQUFDLENBQUMsR0FBQyxvQ0FBb0MsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLEdBQUMsQ0FBQyxHQUFDLEdBQUcsQ0FBQyxDQUFBLENBQUEsQ0FBQyxFQUFDLENBQUEsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFBLENBQUMsQ0FBQSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDLENBQUEsQ0FBQyxDQUFBLEVBQUUsQ0FBQztvQkFBSSxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUs7b0JBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxpQkFBaUIsSUFBRSxJQUFJLEVBQUM7Ozs7Z0JBQU8sVUFBUyxDQUFDO29CQUFNLENBQUMsR0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEVBQUU7b0JBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsSUFBSTtvQkFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLE9BQU8sSUFBSSxLQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsQ0FBQyxFQUFDLENBQUMsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxLQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsR0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLElBQUksR0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFBLENBQUMsQ0FBQSxDQUFDLEVBQUMsQ0FBQyxJQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEdBQUMsQ0FBQyxHQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFBLENBQUEsQ0FBQyxFQUFBLENBQUEsQ0FBQyxDQUFBLEVBQUMsQ0FBQTtRQUFBLENBQUMsR0FBRSxDQUFDO0lBQzd6QyxDQUFDO0NBU0o7OztJQXpHRyxzQkFBRTs7SUFDRix5QkFBWTs7SUFDWixpQ0FBYTs7SUFDYixvQ0FBMEI7O0lBQzFCLHVDQUdFOztJQUNGLGlDQUFrQjs7SUFDbEIsNkJBQXdCOztJQUN4Qix5Q0FBb0Q7O0lBQ3BELDRCQUdFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaTE4bn0gZnJvbSAnLi4vaTE4bi9pbmRleCc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vdXRpbHMvdXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGUge1xuXG4gICAgdDtcbiAgICBpMThuID0gaTE4bjtcbiAgICBsaWJUcmFuc2xhdGU7XG4gICAgZGVmYXVsdExhbmd1YWdlID0gJ2VuLVVTJztcbiAgICBzdXBwb3J0ZWRMYW5ndWFnZXMgPSBbXG4gICAgICAgICdlbi1VUycsXG4gICAgICAgICdubC1OTCdcbiAgICBdO1xuICAgIHRyYW5zbGF0aW9ucyA9IHt9O1xuICAgIHB1YmxpYyBsYW5ndWFnZTogc3RyaW5nO1xuICAgIHB1YmxpYyB0cmFuc2xhdGlvbnNMb2NhdGlvbiA9ICdhc3NldHMvdHJhbnNsYXRpb25zJztcbiAgICBwdWJsaWMgb3B0aW9ucyA9IHtcbiAgICAgICAgZGVidWc6IGZhbHNlLCAvL1tCb29sZWFuXTogTG9ncyBtaXNzaW5nIHRyYW5zbGF0aW9ucyB0byBjb25zb2xlIGFuZCBhZGRzIEBALW1hcmtlcnMgYXJvdW5kIG91dHB1dC5cbiAgICAgICAgbmFtZXNwYWNlU3BsaXR0ZXI6ICc6OicgLy9bU3RyaW5nfFJlZ0V4cF06IFlvdSBjYW4gY3VzdG9taXplIHRoZSBwYXJ0IHdoaWNoIHNwbGl0cyBuYW1lc3BhY2UgYW5kIHRyYW5zbGF0aW9uS2V5cy5cbiAgICB9O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaW5pdFRyYW5zbGF0ZUpzKCk7XG4gICAgICAgIHRoaXMubGliVHJhbnNsYXRlID0gVXRpbC5nZXRHbG9iYWwoKVsnbGliVHJhbnNsYXRlJ107IC8vIGZpeG1lOiBkb2VzIG5vdCB3b3JrIGluIG5vZGUuanNcblxuICAgICAgICBPYmplY3Qua2V5cyhpMThuKS5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN1cHBvcnRlZExhbmd1YWdlcy5wdXNoKGspO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50cmFuc2xhdGlvbnMgPSBVdGlsLmNvcHkoaTE4bik7XG4gICAgICAgIHRoaXMudHJhbnNsYXRpb25zWydubC1OTCddID0gVXRpbC5jb3B5KHRoaXMudHJhbnNsYXRpb25zWydubCddKTtcbiAgICAgICAgdGhpcy50cmFuc2xhdGlvbnNbJ2VuLVVTJ10gPSBVdGlsLmNvcHkodGhpcy50cmFuc2xhdGlvbnNbJ2VuJ10pO1xuICAgICAgICB0aGlzLnRyYW5zbGF0aW9uc1snZW4tQkUnXSA9IFV0aWwuY29weSh0aGlzLnRyYW5zbGF0aW9uc1snZW4nXSk7XG4gICAgICAgIHRoaXMudXNlKHRoaXMuZGVmYXVsdExhbmd1YWdlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmFuc2xhdGVzIGEgc3RyaW5nIHRvIHRoZSBjdXJyZW50IGxhbmd1YWdlIG9mIHRoZSBUcmFuc2xhdGVTZXJ2aWNlLlxuICAgICAqIEBwYXJhbSB0cmFuc2xhdGlvbktleSAtIFRoZSBzdHJpbmcgdG8gdHJhbnNsYXRlLlxuICAgICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byBzZW5kIHRvIHRoZSB0cmFuc2xhdGUgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZ2V0KHRyYW5zbGF0aW9uS2V5LCAuLi5wYXJhbXM6IGFueVtdKSA6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnQodHJhbnNsYXRpb25LZXksIC4uLnBhcmFtcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHRyYW5zbGF0ZWQgc3RyaW5nIHRvIHRoZSBjdXJyZW50IGxhbmd1YWdlIG9iamVjdC5cbiAgICAgKiBAcGFyYW0gdHJhbnNsYXRpb25LZXkgLSBUaGUgaWRlbnRpZmllciBvZiB0aGUgdHJhbnNsYXRpb24uXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIG9mIHRoZSB0cmFuc2xhdGlvbiBpbiB0aGUgY3VycmVudCBzZWxlY3RlZCBsYW5ndWFnZS5cbiAgICAgKi9cbiAgICBzZXQodHJhbnNsYXRpb25LZXk6IHN0cmluZywgdmFsdWUgKSB7XG4gICAgICAgIHRoaXMudHJhbnNsYXRpb25zW3RoaXMubGFuZ3VhZ2VdW3RyYW5zbGF0aW9uS2V5XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGFkZCh0cmFuc2xhdGlvbnNPYmplY3Q6IGFueSkge1xuICAgICAgICBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnNPYmplY3QpLmZvckVhY2goKGspID0+IHtcbiAgICAgICAgICAgdGhpcy5zZXQoayx0cmFuc2xhdGlvbnNPYmplY3Rba10pXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN3aXRjaCB0aGUgY3VycmVudCBsYW5ndWFnZSBvZiB0aGUgdHJhbnNsYXRlU2VydmljZS5cbiAgICAgKiBJZiB0aGUgc3VwcGxpZWQgbGFuZ3VhZ2UgcGFyYW1ldGVyIGlzIG5vdCB5ZXQgcHJlc2VudCBpbiB0aGUgdHJhbnNsYXRpb25zIG9iamVjdCxcbiAgICAgKiB0aGUgc2VydmljZSB3aWxsIHRyeSB0byBsb2FkIGEganNvbiBmaWxlIGluIHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgaW4gdHJhbnNsYXRpb25zTG9jYXRpb24gcHJvcGVydHkuXG4gICAgICogZXhhbXBsZTogdXNlKCdmcicpLCB3aWxsIGxvYWQgJ2Fzc2V0cy90cmFuc2xhdGlvbnMvZnIuanNvbicgYnkgZGVmYXVsdFxuICAgICAqIEBwYXJhbSBsYW5ndWFnZSAtIFRoZSBsYW5ndWFnZSBpZGVudGlmaWVyLlxuICAgICAqIEBwYXJhbSByZWxvYWRSZW1vdGUgLSBTZXQgdGhpcyB0byB0cnVlIHRvIHJlbG9hZCB0aGUganNvbiB0cmFuc2xhdGlvbiBmaWxlLlxuICAgICAqL1xuICAgIGFzeW5jIHVzZShsYW5ndWFnZTogc3RyaW5nLCByZWxvYWRSZW1vdGUgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLmxhbmd1YWdlID0gbGFuZ3VhZ2U7XG4gICAgICAgIGlmKCF0aGlzLnRyYW5zbGF0aW9uc1tsYW5ndWFnZV0gfHwgcmVsb2FkUmVtb3RlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRUcmFuc2xhdGlvbihsYW5ndWFnZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50ID0gdGhpcy5saWJUcmFuc2xhdGUuZ2V0VHJhbnNsYXRpb25GdW5jdGlvbih0aGlzLnRyYW5zbGF0aW9uc1tsYW5ndWFnZV0sIFt0aGlzLm9wdGlvbnNdKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFzeW5jIGxvYWRUcmFuc2xhdGlvbihsYW5ndWFnZTogc3RyaW5nKSB7XG4gICAgICAgIGlmKCF0aGlzLnRyYW5zbGF0aW9uc1tsYW5ndWFnZV0pIHRoaXMudHJhbnNsYXRpb25zW2xhbmd1YWdlXSA9IHt9O1xuICAgICAgICBsZXQgbG9hZGVkVHJhbnNsYXRpb24gPSBhd2FpdCBVdGlsLmZldGNoSnNvbih0aGlzLnRyYW5zbGF0aW9uc0xvY2F0aW9uICsgJy8nICsgbGFuZ3VhZ2UgKyAnLmpzb24nKTtcbiAgICAgICAgT2JqZWN0LmtleXMobG9hZGVkVHJhbnNsYXRpb24pLmZvckVhY2goKGspID0+IHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb25zW2xhbmd1YWdlXVtrXSA9IGxvYWRlZFRyYW5zbGF0aW9uW2tdO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVwZGF0ZVRyYW5zbGF0ZUNvbXBvbmVudHMoKSB7XG4gICAgICAgIGxldCBjb21wb25lbnRzID0gQXJyYXkuZnJvbShkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZW1hLXRyYW5zbGF0ZScpKTtcbiAgICAgICAgY29tcG9uZW50cy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgZWxbJ3VwZGF0ZSddKCk7XG4gICAgICAgIH0pXG4gICAgfVxuXG5cbiAgICBpbml0VHJhbnNsYXRlSnMoKSB7XG4gICAgICAgIC8qISB0cmFuc2xhdGUuanMgLSB2MS4xLjAgLSAyMDE1LTA2LTE2XG4gICAgICAgICAqICBodHRwczovL2dpdGh1Yi5jb20vbXVzdGVya25hYmUvdHJhbnNsYXRlLmpzXG4gICAgICAgICAqICBDb3B5cmlnaHQgKGMpIDIwMTUgSm9uYXMgR2lybmF0aXNcbiAgICAgICAgICogIExpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlXG4gICAgICAgICAqL1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICFmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBhPWZ1bmN0aW9uKGEpe3JldHVybiFpc05hTihwYXJzZUZsb2F0KGEpKSYmaXNGaW5pdGUoYSl9LGI9ZnVuY3Rpb24oYSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGEmJm51bGwhPT1hfSxjPWZ1bmN0aW9uKGEpe3JldHVyblwiW29iamVjdCBTdHJpbmddXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSl9O1V0aWwuZ2V0R2xvYmFsKClbJ2xpYlRyYW5zbGF0ZSddPXtnZXRUcmFuc2xhdGlvbkZ1bmN0aW9uOmZ1bmN0aW9uKGQsZSl7ZnVuY3Rpb24gZihhKXtpZihkW2FdKXJldHVybiBkW2FdO3ZhciBiPWEuc3BsaXQoaiksYz1iWzBdLGU9YlsxXTtyZXR1cm4gZFtjXSYmZFtjXVtlXT9kW2NdW2VdOm51bGx9ZnVuY3Rpb24gZyhhLGMpe2lmKGIoYSkpe3ZhciBkLGU9T2JqZWN0LmtleXMoYSk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBpJiZjb25zb2xlLmxvZyhcIltUcmFuc2xhdGlvbl0gTm8gcGx1cmFsIGZvcm1zIGZvdW5kLlwiKSxudWxsO2Zvcih2YXIgZj0wO2Y8ZS5sZW5ndGg7ZisrKTA9PT1lW2ZdLmluZGV4T2YoXCJndFwiKSYmKGQ9cGFyc2VJbnQoZVtmXS5yZXBsYWNlKFwiZ3RcIixcIlwiKSwxMCkpO2FbY10/YT1hW2NdOmM+ZD9hPWFbXCJndFwiK2RdOmEubj9hPWEubjooaSYmY29uc29sZS5sb2coJ1tUcmFuc2xhdGlvbl0gTm8gcGx1cmFsIGZvcm1zIGZvdW5kIGZvciBjb3VudDpcIicrYysnXCIgaW4nLGEpLGE9YVtPYmplY3Qua2V5cyhhKS5yZXZlcnNlKClbMF1dKX1yZXR1cm4gYX1mdW5jdGlvbiBoKGEsYil7cmV0dXJuIGMoYSk/YS5yZXBsYWNlKC9cXHsoXFx3KilcXH0vZyxmdW5jdGlvbihhLGMpe3JldHVybiBiLmhhc093blByb3BlcnR5KGMpP2IuaGFzT3duUHJvcGVydHkoYyk/YltjXTpjOihpJiZjb25zb2xlLmxvZygnQ291bGQgbm90IGZpbmQgcmVwbGFjZW1lbnQgXCInK2MrJ1wiIGluIHByb3ZpZGVkIHJlcGxhY2VtZW50cyBvYmplY3Q6JyxiKSxcIntcIitjK1wifVwiKX0pOmF9ZT1iKGUpP2U6e307dmFyIGk9ZS5kZWJ1ZyxqPWUubmFtZXNwYWNlU3BsaXR0ZXJ8fFwiOjpcIjtyZXR1cm4gZnVuY3Rpb24oYyl7dmFyIGQ9Yihhcmd1bWVudHNbMV0pP2FyZ3VtZW50c1sxXTpiKGFyZ3VtZW50c1syXSk/YXJndW1lbnRzWzJdOnt9LGU9YShhcmd1bWVudHNbMV0pP2FyZ3VtZW50c1sxXTphKGFyZ3VtZW50c1syXSk/YXJndW1lbnRzWzJdOm51bGwsaj1mKGMpO3JldHVybiBudWxsIT09ZSYmKGQubj1kLm4/ZC5uOmUsaj1nKGosZSkpLGo9aChqLGQpLG51bGw9PT1qJiYoaj1pP1wiQEBcIitjK1wiQEBcIjpjLGkmJmNvbnNvbGUubG9nKCdUcmFuc2xhdGlvbiBmb3IgXCInK2MrJ1wiIG5vdCBmb3VuZC4nKSksan19fX0oKTtcbiAgICB9XG5cbiAgICAvLyB0KCd0cmFuc2xhdGlvbktleScpXG4gICAgLy8gdCgndHJhbnNsYXRpb25LZXknLCBjb3VudClcbiAgICAvLyB0KCd0cmFuc2xhdGlvbktleScsIHtyZXBsYWNlS2V5OiAncmVwbGFjZXZhbHVlJ30pXG4gICAgLy8gdCgndHJhbnNsYXRpb25LZXknLCBjb3VudCwge3JlcGxhY2VLZXk6ICdyZXBsYWNldmFsdWUnfSlcbiAgICAvLyB0KCd0cmFuc2xhdGlvbktleScsIHtyZXBsYWNlS2V5OiAncmVwbGFjZXZhbHVlJ30sIGNvdW50KVxuICAgIC8vIHQoJ21vZHVsZUE6OnRyYW5zbGF0aW9uS2V5JylcblxufVxuIl19