UNPKG

@asi-ngtools/lib

Version:

This project is a little components library, simple to use, which will help you to simplify your project.

281 lines (280 loc) 18.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { cloneDeep as cloneDeepExt } from 'lodash'; import { isObservable, of, from } from 'rxjs'; /** * @param {?} array * @param {?} mapper * @return {?} */ export function map(array, mapper) { if (array) { return array.map(mapper); } return array; } /** * @param {?} array * @param {?} iteratee * @return {?} */ export function filter(array, iteratee) { if (array) { return array.filter(iteratee); } return array; } /** * @param {?} array * @return {?} */ export function isArray(array) { return Array.isArray(array); } /** * @param {?} howManyTimes * @param {?} iteratee * @return {?} */ export function times(howManyTimes, iteratee) { /** @type {?} */ var res = []; /** @type {?} */ var index = -1; while (++index < howManyTimes) { res.push(iteratee(index)); } return res; } /** * @param {?} array * @param {?} iteratee * @return {?} */ export function forEach(array, iteratee) { if (array) { array.forEach(iteratee); } } /** * @param {?} array * @param {?} iteratee * @return {?} */ export function remove(array, iteratee) { /** @type {?} */ var deletedItems = []; if (array) { /** @type {?} */ var index = array.length; while (index--) { /** @type {?} */ var item = array[index]; if (iteratee(item, index)) { array.splice(index, 1); deletedItems.push(item); } } } return deletedItems; } /** * @param {?} array * @param {?} index * @return {?} */ export function removeAtIndex(array, index) { if (array) { array.splice(index, 1); } } /** * @param {?} object * @param {?} path * @param {?=} defaultVal * @return {?} */ export function get(object, path, defaultVal) { /** @type {?} */ var _path = Array.isArray(path) ? path : path.split('.').filter(function (index) { return index.length; }); if (!_path.length) { return object === undefined ? defaultVal : object; } return get(object[_path.shift()], _path, defaultVal); } /** * @param {?} array * @param {?} finder * @return {?} */ export function find(array, finder) { if (array) { return array.find(finder); } return undefined; } /** * @param {?} value * @param {?} maxLength * @return {?} */ export function truncate(value, maxLength) { if (value) { return value.substring(0, maxLength); } return value; } /** * @param {?} items * @param {?} what * @return {?} */ export function indexOf(items, what) { if (items) { return items.indexOf(what); } return -1; } /** * @param {...?} arrays * @return {?} */ export function concat() { var arrays = []; for (var _i = 0; _i < arguments.length; _i++) { arrays[_i] = arguments[_i]; } /** @type {?} */ var newArray = []; arrays.forEach(function (array) { newArray = newArray.concat(array); }); return newArray; } /** * @param {?} str * @param {?} reg * @param {?} newVal * @return {?} */ export function replace(str, reg, newVal) { if (str) { return str.replace(reg, newVal); } return str; } /** * @param {?} array * @param {?} key * @param {?} asc * @return {?} */ export function orderBy(array, key, asc) { /** @type {?} */ var order = asc === 'asc' ? -1 : 1; array.sort(function (a, b) { if (!a[key] && !b[key]) { return 0; } else if (a[key] && !b[key]) { return -1; } else if (!a[key] && b[key]) { return 1; } else if (a[key] < b[key]) { return order; } else if (a[key] > b[key]) { return -order; } return 0; }); return array; } /** * @param {?} array * @param {?} key * @param {?} asc * @return {?} */ export function orderByWithoutCase(array, key, asc) { /** @type {?} */ var order = asc === 'asc' ? -1 : 1; array.sort(function (a, b) { if (!a[key] && !b[key]) { return 0; } else if (a[key] && !b[key]) { return -1; } else if (!a[key] && b[key]) { return 1; } /** @type {?} */ var value1 = a[key].toLowerCase(); /** @type {?} */ var value2 = b[key].toLowerCase(); if (value1 < value2) { return order; } else if (value1 > value2) { return -order; } return 0; }); return array; } /** * @param {?} object * @return {?} */ export function cloneDeep(object) { return cloneDeepExt(object); } /** * @param {?} item * @return {?} */ export function isEmpty(item) { return item == null || item.length === 0; } /** * @param {?} val * @return {?} */ export function isObject(val) { return typeof val === 'object'; } /** * @param {?} items * @param {?} separator * @return {?} */ export function join(items, separator) { if (items) { return items.join(separator); } return items; } /** * @template T * @param {?} obs * @return {?} */ export function observe(obs) { if (isObservable(obs)) { return obs; } else if (obs instanceof Promise) { return from(obs); } else { return of(/** @type {?} */ (obs)); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bhc2ktbmd0b29scy9saWIvIiwic291cmNlcyI6WyJsaWIvbmF0aXZlLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsSUFBSSxZQUFZLEVBQUMsTUFBTyxRQUFRLENBQUE7QUFDbEQsT0FBTyxFQUFjLFlBQVksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7QUFFMUQsTUFBTSxjQUFjLEtBQWlCLEVBQUUsTUFBMkM7SUFDaEYsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNWLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzFCO0lBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQztDQUNkOzs7Ozs7QUFFRCxNQUFNLGlCQUFpQixLQUFpQixFQUFFLFFBQTZDO0lBQ3JGLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDVixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUMvQjtJQUNELE1BQU0sQ0FBQyxLQUFLLENBQUM7Q0FDZDs7Ozs7QUFFRCxNQUFNLGtCQUFrQixLQUFVO0lBQ2hDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQzdCOzs7Ozs7QUFFRCxNQUFNLGdCQUFnQixZQUFvQixFQUFFLFFBQThCOztJQUN4RSxJQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7O0lBQ2YsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDZixPQUFPLEVBQUUsS0FBSyxHQUFHLFlBQVksRUFBRSxDQUFDO1FBQzlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDM0I7SUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDO0NB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QUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0IsTUFBTSxDQUFDLEtBQUssQ0FBQztTQUNkO1FBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQztTQUNmO1FBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQztLQUNWLENBQUMsQ0FBQztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUM7Q0FDZDs7Ozs7OztBQUVELE1BQU0sNkJBQTZCLEtBQWlCLEVBQUUsR0FBVyxFQUFFLEdBQW1COztJQUNwRixJQUFNLEtBQUssR0FBRyxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBQyxDQUFDLEVBQUUsQ0FBQztRQUVkLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQ1Y7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDWDtRQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDVjs7UUFFRCxJQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7O1FBQ3BDLElBQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNwQixNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ2Q7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDM0IsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQ2Y7UUFDRCxNQUFNLENBQUMsQ0FBQyxDQUFDO0tBQ1YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQztDQUNkOzs7OztBQUVELE1BQU0sb0JBQW9CLE1BQVc7SUFDbkMsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztDQUM3Qjs7Ozs7QUFFRCxNQUFNLGtCQUFrQixJQUFTO0lBQy9CLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFBO0NBQ3pDOzs7OztBQUVELE1BQU0sbUJBQW1CLEdBQVE7SUFDL0IsTUFBTSxDQUFDLE9BQU8sR0FBRyxLQUFLLFFBQVEsQ0FBQztDQUNoQzs7Ozs7O0FBRUQsTUFBTSxlQUFlLEtBQWlCLEVBQUUsU0FBaUI7SUFDdkQsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNWLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQzlCO0lBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQztDQUNkOzs7Ozs7QUFFRCxNQUFNLGtCQUFxQixHQUErQjtJQUN4RCxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxHQUFHLENBQUM7S0FDWjtJQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2xCO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDTixNQUFNLENBQUMsRUFBRSxtQkFBTSxHQUFHLEVBQUMsQ0FBQztLQUNyQjtDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2xvbmVEZWVwIGFzIGNsb25lRGVlcEV4dH0gIGZyb20gJ2xvZGFzaCdcbmltcG9ydCB7IE9ic2VydmFibGUsIGlzT2JzZXJ2YWJsZSwgb2YsIGZyb20gfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIG1hcChhcnJheTogQXJyYXk8YW55PiwgbWFwcGVyOiAodmFsdWU6IGFueSwgaW5kZXg/OiBudW1iZXIpID0+IGFueSkge1xuICBpZiAoYXJyYXkpIHtcbiAgICByZXR1cm4gYXJyYXkubWFwKG1hcHBlcik7XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyKGFycmF5OiBBcnJheTxhbnk+LCBpdGVyYXRlZTogKHZhbHVlOiBhbnksIGluZGV4PzogbnVtYmVyKSA9PiBhbnkpIHtcbiAgaWYgKGFycmF5KSB7XG4gICAgcmV0dXJuIGFycmF5LmZpbHRlcihpdGVyYXRlZSk7XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBcnJheShhcnJheTogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGFycmF5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVzKGhvd01hbnlUaW1lczogbnVtYmVyLCBpdGVyYXRlZTogKHZhbHVlPzogYW55KSA9PiBhbnkpIHtcbiAgY29uc3QgcmVzID0gW107XG4gIGxldCBpbmRleCA9IC0xO1xuICB3aGlsZSAoKytpbmRleCA8IGhvd01hbnlUaW1lcykge1xuICAgIHJlcy5wdXNoKGl0ZXJhdGVlKGluZGV4KSk7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2goYXJyYXk6IEFycmF5PGFueT4sIGl0ZXJhdGVlOiAodmFsdWU6IGFueSwgaW5kZXg6IG51bWJlcikgPT4gYW55KSB7XG4gIGlmIChhcnJheSkge1xuICAgIGFycmF5LmZvckVhY2goaXRlcmF0ZWUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmUoYXJyYXk6IEFycmF5PGFueT4sIGl0ZXJhdGVlOiAodmFsdWU6IGFueSwgaW5kZXg6IG51bWJlcikgPT4gYW55KSB7XG4gIGxldCBkZWxldGVkSXRlbXMgPSBbXTtcbiAgaWYgKGFycmF5KSB7XG4gICAgbGV0IGluZGV4ID0gYXJyYXkubGVuZ3RoO1xuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICBjb25zdCBpdGVtID0gYXJyYXlbaW5kZXhdO1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZW0sIGluZGV4KSkge1xuICAgICAgICBhcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICBkZWxldGVkSXRlbXMucHVzaChpdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRlbGV0ZWRJdGVtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUF0SW5kZXgoYXJyYXk6IEFycmF5PGFueT4sIGluZGV4OiBudW1iZXIpIHtcbiAgaWYgKGFycmF5KSB7XG4gICAgYXJyYXkuc3BsaWNlKGluZGV4LCAxKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0KG9iamVjdDogYW55LCBwYXRoOiBhbnksIGRlZmF1bHRWYWw/OiBhbnkpOiBhbnkge1xuICBjb25zdCBfcGF0aCA9IEFycmF5LmlzQXJyYXkocGF0aClcbiAgICA/IHBhdGhcbiAgICA6IHBhdGguc3BsaXQoJy4nKS5maWx0ZXIoKGluZGV4OiBhbnkpID0+IGluZGV4Lmxlbmd0aClcblxuICBpZiAoIV9wYXRoLmxlbmd0aCkge1xuICAgIHJldHVybiBvYmplY3QgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWwgOiBvYmplY3RcbiAgfVxuXG4gIHJldHVybiBnZXQob2JqZWN0W19wYXRoLnNoaWZ0KCldLCBfcGF0aCwgZGVmYXVsdFZhbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kKGFycmF5OiBBcnJheTxhbnk+LCBmaW5kZXI6ICh2YWx1ZTogYW55LCBpbmRleDogbnVtYmVyLCBvYmo6IGFueVtdKSA9PiBib29sZWFuKSB7XG4gIGlmIChhcnJheSkge1xuICAgIHJldHVybiBhcnJheS5maW5kKGZpbmRlcik7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRydW5jYXRlKHZhbHVlOiBzdHJpbmcsIG1heExlbmd0aDogbnVtYmVyKSB7XG4gIGlmICh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoMCwgbWF4TGVuZ3RoKVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluZGV4T2YoaXRlbXM6IGFueSwgd2hhdDogYW55KSB7XG4gIGlmIChpdGVtcykge1xuICAgIHJldHVybiBpdGVtcy5pbmRleE9mKHdoYXQpO1xuICB9XG4gIHJldHVybiAtMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdCguLi5hcnJheXM6IGFueVtdKSB7XG4gIGxldCBuZXdBcnJheTogQXJyYXk8YW55PiA9IFtdO1xuICBhcnJheXMuZm9yRWFjaCgoYXJyYXkpID0+IHtcbiAgICBuZXdBcnJheSA9IG5ld0FycmF5LmNvbmNhdChhcnJheSk7XG4gIH0pO1xuICByZXR1cm4gbmV3QXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlKHN0cjogc3RyaW5nLCByZWc6IFJlZ0V4cCwgbmV3VmFsOiBzdHJpbmcpIHtcbiAgaWYgKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZShyZWcsIG5ld1ZhbCk7XG4gIH1cbiAgcmV0dXJuIHN0cjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9yZGVyQnkoYXJyYXk6IEFycmF5PGFueT4sIGtleTogc3RyaW5nLCBhc2M6ICdhc2MnIHwgJ2Rlc2MnKSB7XG4gIGNvbnN0IG9yZGVyID0gYXNjID09PSAnYXNjJyA/IC0xIDogMTtcbiAgYXJyYXkuc29ydCgoYSwgYikgPT4ge1xuICAgIGlmICghYVtrZXldICYmICFiW2tleV0pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSBpZiAoYVtrZXldICYmICFiW2tleV0pIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9IGVsc2UgaWYgKCFhW2tleV0gJiYgYltrZXldKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGFba2V5XSA8IGJba2V5XSkge1xuICAgICAgcmV0dXJuIG9yZGVyO1xuICAgIH0gZWxzZSBpZiAoYVtrZXldID4gYltrZXldKSB7XG4gICAgICByZXR1cm4gLW9yZGVyO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfSk7XG4gIHJldHVybiBhcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9yZGVyQnlXaXRob3V0Q2FzZShhcnJheTogQXJyYXk8YW55Piwga2V5OiBzdHJpbmcsIGFzYzogJ2FzYycgfCAnZGVzYycpIHtcbiAgY29uc3Qgb3JkZXIgPSBhc2MgPT09ICdhc2MnID8gLTEgOiAxO1xuICBhcnJheS5zb3J0KChhLCBiKSA9PiB7XG5cbiAgICBpZiAoIWFba2V5XSAmJiAhYltrZXldKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2UgaWYgKGFba2V5XSAmJiAhYltrZXldKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfSBlbHNlIGlmICghYVtrZXldICYmIGJba2V5XSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUxID0gYVtrZXldLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgdmFsdWUyID0gYltrZXldLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHZhbHVlMSA8IHZhbHVlMikge1xuICAgICAgcmV0dXJuIG9yZGVyO1xuICAgIH0gZWxzZSBpZiAodmFsdWUxID4gdmFsdWUyKSB7XG4gICAgICByZXR1cm4gLW9yZGVyO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfSk7XG4gIHJldHVybiBhcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb25lRGVlcChvYmplY3Q6IGFueSkge1xuICByZXR1cm4gY2xvbmVEZWVwRXh0KG9iamVjdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5KGl0ZW06IGFueSkge1xuICByZXR1cm4gaXRlbSA9PSBudWxsIHx8IGl0ZW0ubGVuZ3RoID09PSAwXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdCh2YWw6IGFueSkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ29iamVjdCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqb2luKGl0ZW1zOiBBcnJheTxhbnk+LCBzZXBhcmF0b3I6IHN0cmluZykge1xuICBpZiAoaXRlbXMpIHtcbiAgICByZXR1cm4gaXRlbXMuam9pbihzZXBhcmF0b3IpO1xuICB9XG4gIHJldHVybiBpdGVtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9ic2VydmU8VD4ob2JzOiBQcm9taXNlPFQ+IHwgT2JzZXJ2YWJsZTxUPik6IE9ic2VydmFibGU8VD4ge1xuICBpZiAoaXNPYnNlcnZhYmxlKG9icykpIHtcbiAgICByZXR1cm4gb2JzO1xuICB9IGVsc2UgaWYgKG9icyBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICByZXR1cm4gZnJvbShvYnMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBvZig8YW55Pm9icyk7XG4gIH1cbn1cbiJdfQ==