UNPKG

@ema/js-base-library

Version:

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

304 lines 27.9 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'; var Translate = /** @class */ (function () { function Translate() { var _this = this; 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 {?} */ function (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. */ /** * 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 {?} */ Translate.prototype.get = /** * 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 {?} */ function (translationKey) { var params = []; for (var _i = 1; _i < arguments.length; _i++) { params[_i - 1] = arguments[_i]; } return this.t.apply(this, tslib_1.__spread([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. */ /** * 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 {?} */ Translate.prototype.set = /** * 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 {?} */ function (translationKey, value) { this.translations[this.language][translationKey] = value; }; /** * @param {?} translationsObject * @return {?} */ Translate.prototype.add = /** * @param {?} translationsObject * @return {?} */ function (translationsObject) { var _this = this; Object.keys(translationsObject).forEach((/** * @param {?} k * @return {?} */ function (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. */ /** * 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 {?} */ Translate.prototype.use = /** * 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 {?} */ function (language, reloadRemote) { if (reloadRemote === void 0) { reloadRemote = false; } return tslib_1.__awaiter(this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: this.language = language; if (!(!this.translations[language] || reloadRemote)) return [3 /*break*/, 2]; return [4 /*yield*/, this.loadTranslation(language)]; case 1: _a.sent(); _a.label = 2; case 2: this.t = this.libTranslate.getTranslationFunction(this.translations[language], [this.options]); return [2 /*return*/]; } }); }); }; /** * @param {?} language * @return {?} */ Translate.prototype.loadTranslation = /** * @param {?} language * @return {?} */ function (language) { return tslib_1.__awaiter(this, void 0, void 0, function () { var loadedTranslation; var _this = this; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: if (!this.translations[language]) this.translations[language] = {}; return [4 /*yield*/, Util.fetchJson(this.translationsLocation + '/' + language + '.json')]; case 1: loadedTranslation = _a.sent(); Object.keys(loadedTranslation).forEach((/** * @param {?} k * @return {?} */ function (k) { _this.translations[language][k] = loadedTranslation[k]; })); return [2 /*return*/]; } }); }); }; /** * @return {?} */ Translate.prototype.updateTranslateComponents = /** * @return {?} */ function () { /** @type {?} */ var components = Array.from(document.getElementsByTagName('ema-translate')); components.forEach((/** * @param {?} el * @return {?} */ function (el) { el['update'](); })); }; /** * @return {?} */ Translate.prototype.initTranslateJs = /** * @return {?} */ function () { /*! 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; }); }) }; })(); }; return Translate; }()); export { Translate }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGVtYS9qcy1iYXNlLWxpYnJhcnkvIiwic291cmNlcyI6WyJsaWIvdHJhbnNsYXRlL3RyYW5zbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDcEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyQztJQWtCSTtRQUFBLGlCQVlDO1FBM0JELFNBQUksR0FBRyxJQUFJLENBQUM7UUFFWixvQkFBZSxHQUFHLE9BQU8sQ0FBQztRQUMxQix1QkFBa0IsR0FBRztZQUNqQixPQUFPO1lBQ1AsT0FBTztTQUNWLENBQUM7UUFDRixpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUVYLHlCQUFvQixHQUFHLHFCQUFxQixDQUFDO1FBQzdDLFlBQU8sR0FBRztZQUNiLEtBQUssRUFBRSxLQUFLOztZQUNaLGlCQUFpQixFQUFFLElBQUksQ0FBQyx5RkFBeUY7U0FDcEgsQ0FBQztRQUdFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLGtDQUFrQztRQUV4RixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU87Ozs7UUFBQyxVQUFDLENBQUM7WUFDeEIsS0FBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQyxDQUFDLEVBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hF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QUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUEsQ0FBQSxDQUFDOzs7OztnQkFBQSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxJQUFFLElBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDOzt3QkFBSyxDQUFDOzt3QkFBQyxDQUFDLEdBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQUMsSUFBRyxDQUFDLEtBQUcsQ0FBQyxDQUFDLE1BQU07d0JBQUMsT0FBTyxDQUFDLElBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsQ0FBQyxFQUFDLElBQUksQ0FBQztvQkFBQSxLQUFJLElBQUksQ0FBQyxHQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDLEVBQUU7d0JBQUMsQ0FBQyxLQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUUsQ0FBQyxDQUFDLEdBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDLEdBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQSxDQUFDLEdBQUMsQ0FBQyxDQUFDLElBQUksR0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUEsQ0FBQyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLENBQUMsQ0FBQyxJQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsaURBQWlELEdBQUMsQ0FBQyxHQUFDLE1BQU0sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEdBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FB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Y2VzQ29udGVudCI6WyJpbXBvcnQgeyBpMThufSBmcm9tICcuLi9pMThuL2luZGV4JztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi91dGlscy91dGlsJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0ZSB7XG5cbiAgICB0O1xuICAgIGkxOG4gPSBpMThuO1xuICAgIGxpYlRyYW5zbGF0ZTtcbiAgICBkZWZhdWx0TGFuZ3VhZ2UgPSAnZW4tVVMnO1xuICAgIHN1cHBvcnRlZExhbmd1YWdlcyA9IFtcbiAgICAgICAgJ2VuLVVTJyxcbiAgICAgICAgJ25sLU5MJ1xuICAgIF07XG4gICAgdHJhbnNsYXRpb25zID0ge307XG4gICAgcHVibGljIGxhbmd1YWdlOiBzdHJpbmc7XG4gICAgcHVibGljIHRyYW5zbGF0aW9uc0xvY2F0aW9uID0gJ2Fzc2V0cy90cmFuc2xhdGlvbnMnO1xuICAgIHB1YmxpYyBvcHRpb25zID0ge1xuICAgICAgICBkZWJ1ZzogZmFsc2UsIC8vW0Jvb2xlYW5dOiBMb2dzIG1pc3NpbmcgdHJhbnNsYXRpb25zIHRvIGNvbnNvbGUgYW5kIGFkZHMgQEAtbWFya2VycyBhcm91bmQgb3V0cHV0LlxuICAgICAgICBuYW1lc3BhY2VTcGxpdHRlcjogJzo6JyAvL1tTdHJpbmd8UmVnRXhwXTogWW91IGNhbiBjdXN0b21pemUgdGhlIHBhcnQgd2hpY2ggc3BsaXRzIG5hbWVzcGFjZSBhbmQgdHJhbnNsYXRpb25LZXlzLlxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pbml0VHJhbnNsYXRlSnMoKTtcbiAgICAgICAgdGhpcy5saWJUcmFuc2xhdGUgPSBVdGlsLmdldEdsb2JhbCgpWydsaWJUcmFuc2xhdGUnXTsgLy8gZml4bWU6IGRvZXMgbm90IHdvcmsgaW4gbm9kZS5qc1xuXG4gICAgICAgIE9iamVjdC5rZXlzKGkxOG4pLmZvckVhY2goKGspID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3VwcG9ydGVkTGFuZ3VhZ2VzLnB1c2goayk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRyYW5zbGF0aW9ucyA9IFV0aWwuY29weShpMThuKTtcbiAgICAgICAgdGhpcy50cmFuc2xhdGlvbnNbJ25sLU5MJ10gPSBVdGlsLmNvcHkodGhpcy50cmFuc2xhdGlvbnNbJ25sJ10pO1xuICAgICAgICB0aGlzLnRyYW5zbGF0aW9uc1snZW4tVVMnXSA9IFV0aWwuY29weSh0aGlzLnRyYW5zbGF0aW9uc1snZW4nXSk7XG4gICAgICAgIHRoaXMudHJhbnNsYXRpb25zWydlbi1CRSddID0gVXRpbC5jb3B5KHRoaXMudHJhbnNsYXRpb25zWydlbiddKTtcbiAgICAgICAgdGhpcy51c2UodGhpcy5kZWZhdWx0TGFuZ3VhZ2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zbGF0ZXMgYSBzdHJpbmcgdG8gdGhlIGN1cnJlbnQgbGFuZ3VhZ2Ugb2YgdGhlIFRyYW5zbGF0ZVNlcnZpY2UuXG4gICAgICogQHBhcmFtIHRyYW5zbGF0aW9uS2V5IC0gVGhlIHN0cmluZyB0byB0cmFuc2xhdGUuXG4gICAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIHNlbmQgdG8gdGhlIHRyYW5zbGF0ZSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBnZXQodHJhbnNsYXRpb25LZXksIC4uLnBhcmFtczogYW55W10pIDogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudCh0cmFuc2xhdGlvbktleSwgLi4ucGFyYW1zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgdHJhbnNsYXRlZCBzdHJpbmcgdG8gdGhlIGN1cnJlbnQgbGFuZ3VhZ2Ugb2JqZWN0LlxuICAgICAqIEBwYXJhbSB0cmFuc2xhdGlvbktleSAtIFRoZSBpZGVudGlmaWVyIG9mIHRoZSB0cmFuc2xhdGlvbi5cbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgb2YgdGhlIHRyYW5zbGF0aW9uIGluIHRoZSBjdXJyZW50IHNlbGVjdGVkIGxhbmd1YWdlLlxuICAgICAqL1xuICAgIHNldCh0cmFuc2xhdGlvbktleTogc3RyaW5nLCB2YWx1ZSApIHtcbiAgICAgICAgdGhpcy50cmFuc2xhdGlvbnNbdGhpcy5sYW5ndWFnZV1bdHJhbnNsYXRpb25LZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgYWRkKHRyYW5zbGF0aW9uc09iamVjdDogYW55KSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHRyYW5zbGF0aW9uc09iamVjdCkuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICB0aGlzLnNldChrLHRyYW5zbGF0aW9uc09iamVjdFtrXSlcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3dpdGNoIHRoZSBjdXJyZW50IGxhbmd1YWdlIG9mIHRoZSB0cmFuc2xhdGVTZXJ2aWNlLlxuICAgICAqIElmIHRoZSBzdXBwbGllZCBsYW5ndWFnZSBwYXJhbWV0ZXIgaXMgbm90IHlldCBwcmVzZW50IGluIHRoZSB0cmFuc2xhdGlvbnMgb2JqZWN0LFxuICAgICAqIHRoZSBzZXJ2aWNlIHdpbGwgdHJ5IHRvIGxvYWQgYSBqc29uIGZpbGUgaW4gdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBpbiB0cmFuc2xhdGlvbnNMb2NhdGlvbiBwcm9wZXJ0eS5cbiAgICAgKiBleGFtcGxlOiB1c2UoJ2ZyJyksIHdpbGwgbG9hZCAnYXNzZXRzL3RyYW5zbGF0aW9ucy9mci5qc29uJyBieSBkZWZhdWx0XG4gICAgICogQHBhcmFtIGxhbmd1YWdlIC0gVGhlIGxhbmd1YWdlIGlkZW50aWZpZXIuXG4gICAgICogQHBhcmFtIHJlbG9hZFJlbW90ZSAtIFNldCB0aGlzIHRvIHRydWUgdG8gcmVsb2FkIHRoZSBqc29uIHRyYW5zbGF0aW9uIGZpbGUuXG4gICAgICovXG4gICAgYXN5bmMgdXNlKGxhbmd1YWdlOiBzdHJpbmcsIHJlbG9hZFJlbW90ZSA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZTtcbiAgICAgICAgaWYoIXRoaXMudHJhbnNsYXRpb25zW2xhbmd1YWdlXSB8fCByZWxvYWRSZW1vdGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFRyYW5zbGF0aW9uKGxhbmd1YWdlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnQgPSB0aGlzLmxpYlRyYW5zbGF0ZS5nZXRUcmFuc2xhdGlvbkZ1bmN0aW9uKHRoaXMudHJhbnNsYXRpb25zW2xhbmd1YWdlXSwgW3RoaXMub3B0aW9uc10pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXN5bmMgbG9hZFRyYW5zbGF0aW9uKGxhbmd1YWdlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYoIXRoaXMudHJhbnNsYXRpb25zW2xhbmd1YWdlXSkgdGhpcy50cmFuc2xhdGlvbnNbbGFuZ3VhZ2VdID0ge307XG4gICAgICAgIGxldCBsb2FkZWRUcmFuc2xhdGlvbiA9IGF3YWl0IFV0aWwuZmV0Y2hKc29uKHRoaXMudHJhbnNsYXRpb25zTG9jYXRpb24gKyAnLycgKyBsYW5ndWFnZSArICcuanNvbicpO1xuICAgICAgICBPYmplY3Qua2V5cyhsb2FkZWRUcmFuc2xhdGlvbikuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGlvbnNbbGFuZ3VhZ2VdW2tdID0gbG9hZGVkVHJhbnNsYXRpb25ba107XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdXBkYXRlVHJhbnNsYXRlQ29tcG9uZW50cygpIHtcbiAgICAgICAgbGV0IGNvbXBvbmVudHMgPSBBcnJheS5mcm9tKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdlbWEtdHJhbnNsYXRlJykpO1xuICAgICAgICBjb21wb25lbnRzLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICBlbFsndXBkYXRlJ10oKTtcbiAgICAgICAgfSlcbiAgICB9XG5cblxuICAgIGluaXRUcmFuc2xhdGVKcygpIHtcbiAgICAgICAgLyohIHRyYW5zbGF0ZS5qcyAtIHYxLjEuMCAtIDIwMTUtMDYtMTZcbiAgICAgICAgICogIGh0dHBzOi8vZ2l0aHViLmNvbS9tdXN0ZXJrbmFiZS90cmFuc2xhdGUuanNcbiAgICAgICAgICogIENvcHlyaWdodCAoYykgMjAxNSBKb25hcyBHaXJuYXRpc1xuICAgICAgICAgKiAgTGljZW5zZWQgdW5kZXIgTUlUIGxpY2Vuc2VcbiAgICAgICAgICovXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgIWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGE9ZnVuY3Rpb24oYSl7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQoYSkpJiZpc0Zpbml0ZShhKX0sYj1mdW5jdGlvbihhKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgYSYmbnVsbCE9PWF9LGM9ZnVuY3Rpb24oYSl7cmV0dXJuXCJbb2JqZWN0IFN0cmluZ11cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKX07VXRpbC5nZXRHbG9iYWwoKVsnbGliVHJhbnNsYXRlJ109e2dldFRyYW5zbGF0aW9uRnVuY3Rpb246ZnVuY3Rpb24oZCxlKXtmdW5jdGlvbiBmKGEpe2lmKGRbYV0pcmV0dXJuIGRbYV07dmFyIGI9YS5zcGxpdChqKSxjPWJbMF0sZT1iWzFdO3JldHVybiBkW2NdJiZkW2NdW2VdP2RbY11bZV06bnVsbH1mdW5jdGlvbiBnKGEsYyl7aWYoYihhKSl7dmFyIGQsZT1PYmplY3Qua2V5cyhhKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIGkmJmNvbnNvbGUubG9nKFwiW1RyYW5zbGF0aW9uXSBObyBwbHVyYWwgZm9ybXMgZm91bmQuXCIpLG51bGw7Zm9yKHZhciBmPTA7ZjxlLmxlbmd0aDtmKyspMD09PWVbZl0uaW5kZXhPZihcImd0XCIpJiYoZD1wYXJzZUludChlW2ZdLnJlcGxhY2UoXCJndFwiLFwiXCIpLDEwKSk7YVtjXT9hPWFbY106Yz5kP2E9YVtcImd0XCIrZF06YS5uP2E9YS5uOihpJiZjb25zb2xlLmxvZygnW1RyYW5zbGF0aW9uXSBObyBwbHVyYWwgZm9ybXMgZm91bmQgZm9yIGNvdW50OlwiJytjKydcIiBpbicsYSksYT1hW09iamVjdC5rZXlzKGEpLnJldmVyc2UoKVswXV0pfXJldHVybiBhfWZ1bmN0aW9uIGgoYSxiKXtyZXR1cm4gYyhhKT9hLnJlcGxhY2UoL1xceyhcXHcqKVxcfS9nLGZ1bmN0aW9uKGEsYyl7cmV0dXJuIGIuaGFzT3duUHJvcGVydHkoYyk/Yi5oYXNPd25Qcm9wZXJ0eShjKT9iW2NdOmM6KGkmJmNvbnNvbGUubG9nKCdDb3VsZCBub3QgZmluZCByZXBsYWNlbWVudCBcIicrYysnXCIgaW4gcHJvdmlkZWQgcmVwbGFjZW1lbnRzIG9iamVjdDonLGIpLFwie1wiK2MrXCJ9XCIpfSk6YX1lPWIoZSk/ZTp7fTt2YXIgaT1lLmRlYnVnLGo9ZS5uYW1lc3BhY2VTcGxpdHRlcnx8XCI6OlwiO3JldHVybiBmdW5jdGlvbihjKXt2YXIgZD1iKGFyZ3VtZW50c1sxXSk/YXJndW1lbnRzWzFdOmIoYXJndW1lbnRzWzJdKT9hcmd1bWVudHNbMl06e30sZT1hKGFyZ3VtZW50c1sxXSk/YXJndW1lbnRzWzFdOmEoYXJndW1lbnRzWzJdKT9hcmd1bWVudHNbMl06bnVsbCxqPWYoYyk7cmV0dXJuIG51bGwhPT1lJiYoZC5uPWQubj9kLm46ZSxqPWcoaixlKSksaj1oKGosZCksbnVsbD09PWomJihqPWk/XCJAQFwiK2MrXCJAQFwiOmMsaSYmY29uc29sZS5sb2coJ1RyYW5zbGF0aW9uIGZvciBcIicrYysnXCIgbm90IGZvdW5kLicpKSxqfX19fSgpO1xuICAgIH1cblxuICAgIC8vIHQoJ3RyYW5zbGF0aW9uS2V5JylcbiAgICAvLyB0KCd0cmFuc2xhdGlvbktleScsIGNvdW50KVxuICAgIC8vIHQoJ3RyYW5zbGF0aW9uS2V5Jywge3JlcGxhY2VLZXk6ICdyZXBsYWNldmFsdWUnfSlcbiAgICAvLyB0KCd0cmFuc2xhdGlvbktleScsIGNvdW50LCB7cmVwbGFjZUtleTogJ3JlcGxhY2V2YWx1ZSd9KVxuICAgIC8vIHQoJ3RyYW5zbGF0aW9uS2V5Jywge3JlcGxhY2VLZXk6ICdyZXBsYWNldmFsdWUnfSwgY291bnQpXG4gICAgLy8gdCgnbW9kdWxlQTo6dHJhbnNsYXRpb25LZXknKVxuXG59XG4iXX0=