UNPKG

ftable

Version:
186 lines 27.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { firstBy } from 'thenby'; import { FTableResult } from '../ftable.model'; import { empty } from 'rxjs'; import { of } from 'rxjs'; export class FTableLocalService { /** * @param {?} http */ constructor(http) { this.http = http; this.data = []; } /** * @param {?} data * @return {?} */ setLocalTableData(data) { this.mode = ''; this.data = data; } /** * @param {?} id * @return {?} */ get(id) { // console.log('get'); return this.getRowByColumnNameAndValue('id', id); } /** * @param {?} name * @param {?} value * @return {?} */ getRowByColumnNameAndValue(name, value) { // console.log('getRowByColumnNameAndValue'+' '+name+' '+value); // console.log('getRowByColumnNameAndValue'+' '+name+' '+value); /** @type {?} */ const result = this.data.filter(x => x[name] == value); // console.log('getRowByColumnNameAndValue'+' '+name+' '+value); if (result.length > 0) { return of(result[0]); } return empty(); } /* * */ /** * @param {?} id * @param {?} propertyToChange * @param {?} fn * @return {?} */ setData(id, propertyToChange, fn) { /** @type {?} */ var row = this.data.find(d => d['id'] === id); row[propertyToChange] = fn(row[propertyToChange]); return of(row); } /** * @param {?} id * @return {?} */ delete(id) { // cant modify JSON files frontend /** @type {?} */ var row = this.data.find(d => d['id'] === id); return of(row); } /** * @param {?} table * @return {?} */ getData(table) { /** @type {?} */ let data = this.data; for (let i = 0; i < table.columns.length; i++) { if (table.columns[i].type === 'checkbox') { table.columns[i].filterData = Array.from(new Set(data.map(x => x[table.columns[i].name]))); } } /** @type {?} */ var totalRows = data.length; // Generic Search if (table.dataModifier.search.value) { table.dataModifier.currentPage = 1; if (table.columns.length > 0) { /** @type {?} */ let temp = []; for (let i = 0; i < table.columns.length; i++) { if (table.columns[i].name.length > 0) { temp = temp.concat(data.filter(x => String(x[table.columns[i].name]).indexOf(table.dataModifier.search.value) !== -1)); data = data.filter(x => String(x[table.columns[i].name]).indexOf(table.dataModifier.search.value) === -1); } } data = temp; } } if (table.dataModifier.filters.length > 0) { for (let i = 0; i < table.dataModifier.filters.length; i++) { if (table.dataModifier.filters[i].apply) data = table.dataModifier.filters[i].apply(data); } } // Column Priority Sorting if (table.dataModifier.orders.length > 0) { /** @type {?} */ let sortBy; for (let i = 0; i < table.dataModifier.orders.length; i++) { /** @type {?} */ const order = (table.dataModifier.orders[i].direction === 'Desc') ? -1 : 1; if (i === 0) { if (typeof data[0][table.dataModifier.orders[i].columnName] === 'string') { // console.log('String firstBy:' + table.columns[table.orders[i].columnIndex].name); sortBy = firstBy(table.dataModifier.orders[i].columnName, { ignoreCase: true, direction: order }); } else if (typeof data[0][table.dataModifier.orders[i].columnName] === 'number') { sortBy = firstBy(function (v1, v2) { return v1[table.dataModifier.orders[i].columnName] - v2[table.dataModifier.orders[i].columnName]; }, order); } else { // console.log('otherType sort:' + typeof data[0][table.columns[table.dataModifier.orders[i].columnIndex].name]); } } else { if (typeof data[0][table.dataModifier.orders[i].columnName] === 'string') { sortBy = sortBy.thenBy(table.dataModifier.orders[i].columnName, { ignoreCase: true, direction: order }); } else if (typeof data[0][table.dataModifier.orders[i].columnName] === 'number') { sortBy = sortBy.thenBy(function (v1, v2) { return v1[table.dataModifier.orders[i].columnName] - v2[table.dataModifier.orders[i].columnName]; }, order); } else { console.log('otherType sort'); } } } data.sort(sortBy); } // console.log('SIZE:' + table.dataModifier.currentPage + ' ' + table.pageSizes[table.pageSizeIndex]); // this.page = this.data.slice(( this.currentPage - 1) * this.pageSize, this.currentPage * this.pageSize); /** @type {?} */ var totalRowsAfterModifications = data.length; /** @type {?} */ var page = data.slice((table.dataModifier.currentPage - 1) * table.pageSizes[table.pageSizeIndex], (table.dataModifier.currentPage * (table.pageSizes[table.pageSizeIndex]))); /** @type {?} */ var result = new FTableResult(page, totalRows, totalRowsAfterModifications, null); return of(result); } } FTableLocalService.decorators = [ { type: Injectable } ]; /** @nocollapse */ FTableLocalService.ctorParameters = () => [ { type: HttpClient } ]; if (false) { /** @type {?} */ FTableLocalService.prototype.data; /** * @type {?} * @private */ FTableLocalService.prototype.mode; /** * @type {?} * @private */ FTableLocalService.prototype.http; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnRhYmxlbG9jYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2Z0YWJsZS8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlL2Z0YWJsZWxvY2FsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBS2xELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDL0IsT0FBTyxFQUFxQyxZQUFZLEVBQXVCLE1BQU0saUJBQWlCLENBQUM7QUFFdkcsT0FBTyxFQUFjLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBS3pCLE1BQU0sT0FBTyxrQkFBa0I7Ozs7SUFFM0IsWUFBb0IsSUFBZ0I7UUFBaEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUc3QixTQUFJLEdBQUcsRUFBRSxDQUFDO0lBRmpCLENBQUM7Ozs7O0lBS0QsaUJBQWlCLENBQUMsSUFBVztRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLENBQUM7Ozs7O0lBR0QsR0FBRyxDQUFDLEVBQU07UUFDTix1QkFBdUI7UUFDdEIsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxFQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7Ozs7OztJQUVELDBCQUEwQixDQUFDLElBQVksRUFBQyxLQUFTO1FBQzdDLGdFQUFnRTs7O2NBRTFELE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBRyxLQUFLLENBQUM7UUFDckQsZ0VBQWdFO1FBRWhFLElBQUcsTUFB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LENBQUMsTUFBTSxDQUFDLFVBQVMsRUFBRSxFQUFFLEVBQUU7NEJBQ2xDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDckcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO3FCQUNiO3lCQUFNO3dCQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztxQkFDakM7aUJBQ0o7YUFDSjtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDckI7Ozs7WUFLRywyQkFBMkIsR0FBRyxJQUFJLENBQUMsTUFBTTs7WUFDekMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFdBQVcsR0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsV0FBVyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDOztZQUN2SyxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxFQUFDLFNBQVMsRUFBQywyQkFBMkIsRUFBQyxJQUFJLENBQUM7UUFDOUUsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEIsQ0FBQzs7O1lBbklGLFVBQVU7Ozs7WUFiRixVQUFVOzs7O0lBbUJmLGtDQUFpQjs7Ozs7SUFDakIsa0NBQXFCOzs7OztJQUpULGtDQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBIdHRwSGVhZGVyc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG4vLyBpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzL0JlaGF2aW9yU3ViamVjdCc7XG5pbXBvcnQgeyAgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtmaXJzdEJ5fSBmcm9tICd0aGVuYnknO1xuaW1wb3J0IHsgIEZUYWJsZSwgRkNvbHVtbiwgRlNlYXJjaCwgRk9yZGVyLCBGVGFibGVSZXN1bHQsIEZUYWJsZURhdGFNb2RpZmllciAgfSBmcm9tICcuLi9mdGFibGUubW9kZWwnO1xuaW1wb3J0IHsgRlRhYmxlQmFzZVNlcnZpY2UgfSBmcm9tICcuL2Z0YWJsZWJhc2Uuc2VydmljZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBlbXB0eSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgb2YgfSBmcm9tICdyeGpzJ1xuXG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEZUYWJsZUxvY2FsU2VydmljZSBpbXBsZW1lbnRzIEZUYWJsZUJhc2VTZXJ2aWNlIHtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge1xuICAgIH1cblxuICAgIHB1YmxpYyBkYXRhID0gW107XG4gICAgcHJpdmF0ZSBtb2RlOiBzdHJpbmc7XG5cbiAgICBzZXRMb2NhbFRhYmxlRGF0YShkYXRhOiBhbnlbXSl7XG4gICAgICAgIHRoaXMubW9kZSA9ICcnO1xuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIH1cblxuXG4gICAgZ2V0KGlkOmFueSk6IE9ic2VydmFibGU8YW55PntcbiAgICAgICAgLy8gIGNvbnNvbGUubG9nKCdnZXQnKTtcbiAgICAgICAgIHJldHVybiB0aGlzLmdldFJvd0J5Q29sdW1uTmFtZUFuZFZhbHVlKCdpZCcsaWQpO1xuICAgIH1cbiBcbiAgICBnZXRSb3dCeUNvbHVtbk5hbWVBbmRWYWx1ZShuYW1lOiBzdHJpbmcsdmFsdWU6YW55KTogT2JzZXJ2YWJsZTxhbnk+e1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnZ2V0Um93QnlDb2x1bW5OYW1lQW5kVmFsdWUnKycgJytuYW1lKycgJyt2YWx1ZSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5kYXRhLmZpbHRlcih4ID0+IHhbbmFtZV09PSB2YWx1ZSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdnZXRSb3dCeUNvbHVtbk5hbWVBbmRWYWx1ZScrJyAnK25hbWUrJyAnK3ZhbHVlKTtcblxuICAgICAgICBpZihyZXN1bHQubGVuZ3RoID4gMCl7XG4gICAgICAgICAgIHJldHVybiBvZihyZXN1bHRbMF0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbXB0eSgpO1xuICAgIH1cblxuICAgIC8qXG4gICAgKlxuICAgICovXG4gICAgc2V0RGF0YShpZDphbnkscHJvcGVydHlUb0NoYW5nZTpzdHJpbmcsZm46IChuOmFueSk9PmFueSk6T2JzZXJ2YWJsZTxhbnk+e1xuICAgICAgIHZhciByb3cgPSB0aGlzLmRhdGEuZmluZChkPT5kWydpZCddID09PSBpZCk7XG4gICAgICAgcm93W3Byb3BlcnR5VG9DaGFuZ2VdID0gZm4ocm93W3Byb3BlcnR5VG9DaGFuZ2VdKTtcbiAgICAgICByZXR1cm4gb2Yocm93KTtcbiAgICB9XG5cbiAgICBkZWxldGUoaWQ6YW55KTpPYnNlcnZhYmxlPGFueT57XG4gICAgICAgIC8vIGNhbnQgbW9kaWZ5IEpTT04gZmlsZXMgZnJvbnRlbmRcbiAgICAgICAgIHZhciByb3cgPSB0aGlzLmRhdGEuZmluZChkPT5kWydpZCddID09PSBpZCk7XG4gICAgICAgIHJldHVybiBvZihyb3cpO1xuICAgIH1cblxuICAgICBnZXREYXRhKHRhYmxlOiBGVGFibGUpOiBPYnNlcnZhYmxlPEZUYWJsZVJlc3VsdD4gIHtcblxuICAgICAgbGV0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgIFxuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhYmxlLmNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRhYmxlLmNvbHVtbnNbaV0udHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgdGFibGUuY29sdW1uc1tpXS5maWx0ZXJEYXRhID0gQXJyYXkuZnJvbShuZXcgU2V0KGRhdGEubWFwKHggPT4geFt0YWJsZS5jb2x1bW5zW2ldLm5hbWVdKSkpXG4gICAgICAgIH1cbiAgICAgIH1cblxuXG5cbiAgICAgIHZhciB0b3RhbFJvd3MgPSBkYXRhLmxlbmd0aDtcbiAgICAgIC8vIEdlbmVyaWMgU2VhcmNoXG4gICAgICBpZiAodGFibGUuZGF0YU1vZGlmaWVyLnNlYXJjaC52YWx1ZSkge1xuICAgICAgICB0YWJsZS5kYXRhTW9kaWZpZXIuY3VycmVudFBhZ2UgPSAxO1xuICAgICAgaWYgKHRhYmxlLmNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgdGVtcCA9IFtdO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFibGUuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAodGFibGUuY29sdW1uc1tpXS5uYW1lLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIHRlbXAgPSB0ZW1wLmNvbmNhdChkYXRhLmZpbHRlcih4ID0+IFN0cmluZyh4W3RhYmxlLmNvbHVtbnNbaV0ubmFtZV0pLmluZGV4T2YodGFibGUuZGF0YU1vZGlmaWVyLnNlYXJjaC52YWx1ZSkgIT09IC0xKSk7XG4gICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIoeCA9PiBTdHJpbmcoeFt0YWJsZS5jb2x1bW5zW2ldLm5hbWVdKS5pbmRleE9mKHRhYmxlLmRhdGFNb2RpZmllci5zZWFyY2gudmFsdWUpID09PSAtMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkYXRhID0gdGVtcDtcbiAgICAgIH1cbiAgICB9XG5cblxuIGlmICh0YWJsZS5kYXRhTW9kaWZpZXIuZmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWJsZS5kYXRhTW9kaWZpZXIuZmlsdGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZih0YWJsZS5kYXRhTW9kaWZpZXIuZmlsdGVyc1tpXS5hcHBseSlcbiAgICAgICAgICAgZGF0YSA9IHRhYmxlLmRhdGFNb2RpZmllci5maWx0ZXJzW2ldLmFwcGx5KGRhdGEpO1xuICAgIH1cbiB9XG5cbiBcblxuICAgICAgLy8gQ29sdW1uIFByaW9yaXR5IFNvcnRpbmdcbiAgICAgIGlmICh0YWJsZS5kYXRhTW9kaWZpZXIub3JkZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsZXQgc29ydEJ5O1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFibGUuZGF0YU1vZGlmaWVyLm9yZGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBjb25zdCBvcmRlciA9ICh0YWJsZS5kYXRhTW9kaWZpZXIub3JkZXJzW2ldLmRpcmVjdGlvbiA9PT0gJ0Rlc2MnKSA/IC0xIDogMTtcbiAgICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVswXVt0YWJsZS5kYXRhTW9kaWZpZXIub3JkZXJzW2ldLmNvbHVtbk5hbWVdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAvLyAgY29uc29sZS5sb2coJ1N0cmluZyBmaXJzdEJ5OicgKyB0YWJsZS5jb2x1bW5zW3RhYmxlLm9yZGVyc1tpXS5jb2x1bW5JbmRleF0ubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgc29ydEJ5ID0gZmlyc3RCeSh0YWJsZS5kYXRhTW9kaWZpZXIub3JkZXJzW2ldLmNvbHVtbk5hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQ2FzZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uOiBvcmRlclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YVswXVt0YWJsZS5kYXRhTW9kaWZpZXIub3JkZXJzW2ldLmNvbHVtbk5hbWVdID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICAgIHNvcnRCeSA9IGZpcnN0QnkoZnVuY3Rpb24odjEsIHYyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2MVt0YWJsZS5kYXRhTW9kaWZpZXIub3JkZXJzW2ldLmNvbHVtbk5hbWVdIC0gdjJbdGFibGUuZGF0YU1vZGlmaWVyLm9yZGVyc1tpXS5jb2x1bW5OYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgICB9LCBvcmRlcik7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCdvdGhlclR5cGUgc29ydDonICsgdHlwZW9mIGRhdGFbMF1bdGFibGUuY29sdW1uc1t0YWJsZS5kYXRhTW9kaWZpZXIub3JkZXJzW2ldLmNvbHVtbkluZGV4XS5uYW1lXSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGFbMF1bdGFibGUuZGF0YU1vZGlmaWVyLm9yZGVyc1tpXS5jb2x1bW5OYW1lXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzb3J0QnkgPSBzb3J0QnkudGhlbkJ5KHRhYmxlLmRhdGFNb2RpZmllci5vcmRlcnNbaV0uY29sdW1uTmFtZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVDYXNlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb246IG9yZGVyXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhWzBdW3RhYmxlLmRhdGFNb2RpZmllci5vcmRlcnNbaV0uY29sdW1uTmFtZV0gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc29ydEJ5ID0gc29ydEJ5LnRoZW5CeShmdW5jdGlvbih2MSwgdjIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYxW3RhYmxlLmRhdGFNb2RpZmllci5vcmRlcnNbaV0uY29sdW1uTmFtZV0gLSB2Mlt0YWJsZS5kYXRhTW9kaWZpZXIub3JkZXJzW2ldLmNvbHVtbk5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgIH0sIG9yZGVyKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ290aGVyVHlwZSBzb3J0Jyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZGF0YS5zb3J0KHNvcnRCeSk7XG4gICAgICB9XG5cbi8vIGNvbnNvbGUubG9nKCdTSVpFOicgKyB0YWJsZS5kYXRhTW9kaWZpZXIuY3VycmVudFBhZ2UgKyAnICcgKyB0YWJsZS5wYWdlU2l6ZXNbdGFibGUucGFnZVNpemVJbmRleF0pO1xuLy8gdGhpcy5wYWdlID0gdGhpcy5kYXRhLnNsaWNlKCggdGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5wYWdlU2l6ZSwgIHRoaXMuY3VycmVudFBhZ2UgKiB0aGlzLnBhZ2VTaXplKTtcblxuICAgICAgdmFyIHRvdGFsUm93c0FmdGVyTW9kaWZpY2F0aW9ucyA9IGRhdGEubGVuZ3RoO1xuICAgICAgdmFyIHBhZ2UgPSBkYXRhLnNsaWNlKCh0YWJsZS5kYXRhTW9kaWZpZXIuY3VycmVudFBhZ2UtMSkgKiB0YWJsZS5wYWdlU2l6ZXNbdGFibGUucGFnZVNpemVJbmRleF0sICh0YWJsZS5kYXRhTW9kaWZpZXIuY3VycmVudFBhZ2UgKiAodGFibGUucGFnZVNpemVzW3RhYmxlLnBhZ2VTaXplSW5kZXhdKSkpO1xuICAgICAgdmFyIHJlc3VsdCA9IG5ldyBGVGFibGVSZXN1bHQocGFnZSx0b3RhbFJvd3MsdG90YWxSb3dzQWZ0ZXJNb2RpZmljYXRpb25zLG51bGwpO1xuICAgICAgcmV0dXJuIG9mKHJlc3VsdCk7XG4gIH1cblxuXG5cblxuXG5cblxuXG5cbiAgXG4vLyAgICAgZ2V0RGF0YTEodXJsOiBzdHJpbmcsXG4vLyAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzOiBzdHJpbmdbXSxcbi8vICAgICAgICAgICAgIHByb3BlcnR5VHlwZXM6IHN0cmluZ1tdLFxuLy8gICAgICAgICAgICAgc29ydFN0YXRlczogeyAncHJvcGVydHlOYW1lJzogc3RyaW5nICwgJ29yZGVyJzogc3RyaW5nfVtdLFxuLy8gICAgICAgICAgICAgZmlsdGVyczphbnlbXSxcbi8vICAgICAgICAgICAgIHNlYXJjaFN0cmluZzogc3RyaW5nKSB7XG5cbi8vICAgICAgICAgY29uc29sZS5sb2codXJsKTtcbi8vICAgICAgICAgY29uc29sZS5sb2cocHJvcGVydHlOYW1lcyk7XG4vLyAgICAgICAgIGNvbnNvbGUubG9nKHByb3BlcnR5VHlwZXMpO1xuLy8gICAgICAgICBjb25zb2xlLmxvZyhzb3J0U3RhdGVzKTtcbi8vICAgICAgICAgY29uc29sZS5sb2coZmlsdGVycyk7XG4vLyAgICAgICAgIGNvbnNvbGUubG9nKHNlYXJjaFN0cmluZyk7XG4gXG4vLyAgICAgICAgIGxldCBkYXRhID0gdGhpcy5kYXRhO1xuXG4vLyAgICAgLy8gR2VuZXJpYyBTZWFyY2hcbi8vICAgICAvLyBUT0RPOiBDYXRlciBmb3IgRm9ybWF0dGVkIERhdGF0eXBlc1xuLy8gICAgIGxldCB0ZW1wID0gW107XG4vLyAgICAgaWYgKHByb3BlcnR5TmFtZXMubGVuZ3RoID4gMCkgIHtcbi8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlcnR5TmFtZXMubGVuZ3RoOyBpKyspIHtcbi8vICAgICAgICAgaWYgKHByb3BlcnR5TmFtZXNbaV0ubGVuZ3RoID4gMCkge1xuLy8gICAgICAgICAgICAgdGVtcCA9IHRlbXAuY29uY2F0KGRhdGEuZmlsdGVyKHggPT4gU3RyaW5nKHhbcHJvcGVydHlOYW1lc1tpXV0pLmluZGV4T2Yoc2VhcmNoU3RyaW5nKSAhPT0gLTEpKTtcbi8vICAgICAgICAgICAgIGRhdGEgPSBkYXRhLmZpbHRlcih4ID0+IFN0cmluZyh4W3Byb3BlcnR5TmFtZXNbaV1dKS5pbmRleE9mKHNlYXJjaFN0cmluZykgPT09IC0xKTtcbi8vICAgICAgICAgfVxuLy8gICAgIH1cblxuLy8gICAgIGRhdGEgPSB0ZW1wO1xuLy8gICB9XG5cbi8vICAgY29uc29sZS5sb2coZmlsdGVycy5sZW5ndGgpO1xuLy8gICAgIGlmIChmaWx0ZXJzLmxlbmd0aCA+IDApICB7XG4vLyAgICAgICB0ZW1wID0gW107XG5cbi8vICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsdGVycy5sZW5ndGg7IGkrKykge1xuLy8gICAgICAgICAvLyBJZiBzdHJpbmdcbi8vICAgICAgICAgaWYocHJvcGVydHlUeXBlc1tmaWx0ZXJzW2ldLmluZGV4XSA9PSAnc3RyaW5nJykge1xuLy8gICAgICAgICAgICAgdGVtcCA9IGRhdGEuZmlsdGVyKHggPT5cbi8vICAgICAgICAgICAgICAgICAgU3RyaW5nKHhbcHJvcGVydHlOYW1lc1tmaWx0ZXJzW2ldLmluZGV4XV0pLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihmaWx0ZXJzW2ldLmRhdGEudmFsdWUudG9Mb3dlckNhc2UoKSkgIT09IC0xKTtcbi8vICAgICAgICAgLy8gSWYgbnVtYmVyXG4vLyAgICAgICAgIH0gZWxzZSBpZihwcm9wZXJ0eVR5cGVzW2ZpbHRlcnNbaV0uaW5kZXhdID09ICdudW1iZXInKSB7XG4vLyAgICAgICAgICAgLy8gaWYgYm90aCBtaW4gYW5kIG1heCBzcGVjaWZpZWRcbi8vICAgICAgICAgICBpZihmaWx0ZXJzW2ldLmRhdGEubWF4ICYmIGZpbHRlcnNbaV0uZGF0YS5taW4pe1xuLy8gICAgICAgICAgICAgdGVtcCA9IGRhdGEuZmlsdGVyKHggPT5cbi8vICAgICAgICAgICAgICAgICAoKE51bWJlcih4W3Byb3BlcnR5TmFtZXNbZmlsdGVyc1tpXS5pbmRleF1dKSA+PSBmaWx0ZXJzW2ldLmRhdGEubWluKSAmJlxuLy8gICAgICAgICAgICAgICAgICAoTnVtYmVyKHhbcHJvcGVydHlOYW1lc1tmaWx0ZXJzW2ldLmluZGV4XV0pIDw9IGZpbHRlcnNbaV0uZGF0YS5tYXgpKSk7XG4vLyAgICAgICAgICAgLy8gaWYgbWF4IG9ubHkgc3BlY2lmaWVkXG4vLyAgICAgICAgICAgfSBlbHNlIGlmKGZpbHRlcnNbaV0uZGF0YS5tYXgpIHtcbi8vICAgICAgICAgICAgICB0ZW1wID0gZGF0YS5maWx0ZXIoeCA9PlxuLy8gICAgICAgICAgICAgICAgIE51bWJlcih4W3Byb3BlcnR5TmFtZXNbZmlsdGVyc1tpXS5pbmRleF1dKSA8PSBmaWx0ZXJzW2ldLmRhdGEubWF4KTtcbi8vICAgICAgICAgICAvLyBpZiBvbmx5IG1pbiBzcGVjaWZpZWRcbi8vICAgICAgICAgICB9IGVsc2UgaWYoZmlsdGVyc1tpXS5kYXRhLm1pbikge1xuLy8gICAgICAgICAgICAgIHRlbXAgPSBkYXRhLmZpbHRlcih4ID0+XG4vLyAgICAgICAgICAgICAgICAgTnVtYmVyKHhbcHJvcGVydHlOYW1lc1tmaWx0ZXJzW2ldLmluZGV4XV0pID49IGZpbHRlcnNbaV0uZGF0YS5taW4pO1xuLy8gICAgICAgICAgIC8vIGlmIG5vdGhpbmcgaXMgc3BlY2lmaWVkXG4vLyAgICAgICAgICAgfSBlbHNlICB7XG4vLyAgICAgICAgICAgICB0ZW1wID0gZGF0YTtcbi8vICAgICAgICAgICB9XG4vLyAgICAgICAgIH1cbi8vICAgICAgICAgICAgIGRhdGEgPSB0ZW1wO1xuLy8gICAgICAgfVxuLy8gICAgICAgZGF0YSA9IHRlbXA7XG4vLyAgICAgfVxuXG5cbi8vICAgICAvLyBDb2x1bW4gUHJpb3JpdHkgU29ydGluZ1xuLy8gICAgIC8vIFRPRE86IENhdGVyIGZvciBGb3JtYXR0ZWQgRGF0YXR5cGVzXG4vLyAgICAgaWYgKHNvcnRTdGF0ZXMubGVuZ3RoID4gMCkge1xuLy8gICAgICAgICBsZXQgc29ydEJ5O1xuLy8gICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRTdGF0ZXMubGVuZ3RoOyBpKyspIHtcbi8vICAgICAgICAgICAgIGNvbnN0IG9yZGVyID0gKHNvcnRTdGF0ZXNbaV0ub3JkZXIgPT09ICdEZXNjJykgPyAtMSA6IDE7XG4vLyAgICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuLy8gICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVswXVtzb3J0U3RhdGVzW2ldLnByb3BlcnR5TmFtZV0gPT09ICdzdHJpbmcnKSB7XG4vLyAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTdHJpbmcgZmlyc3RCeTonICsgc29ydFN0YXRlc1tpXS5wcm9wZXJ0eU5hbWUpO1xuLy8gICAgICAgICAgICAgICAgICAgICBzb3J0QnkgPSBmaXJzdEJ5KHNvcnRTdGF0ZXNbaV0ucHJvcGVydHlOYW1lLCB7XG4vLyAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVDYXNlOiB0cnVlLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uOiBvcmRlclxuLy8gICAgICAgICAgICAgICAgICAgICB9KTtcbi8vICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhWzBdW3NvcnRTdGF0ZXNbaV0ucHJvcGVydHlOYW1lXSA9PT0gJ251bWJlcicpIHtcbi8vICAgICAgICAgICAgICAgICAgICAgc29ydEJ5ID0gZmlyc3RCeShmdW5jdGlvbih2MSwgdjIpIHtcbi8vICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2MVtzb3J0U3RhdGVzW2ldLnByb3BlcnR5TmFtZV0gLSB2Mltzb3J0U3RhdGVzW2ldLnByb3BlcnR5TmFtZV07XG4vLyAgICAgICAgICAgICAgICAgICAgIH0sIG9yZGVyKTtcbi8vICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuLy8gICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnb3RoZXJUeXBlIHNvcnQ6JyArIHR5cGVvZiBkYXRhWzBdW3NvcnRTdGF0ZXNbaV0ucHJvcGVydHlOYW1lXSk7XG4vLyAgICAgICAgICAgICAgICAgfVxuLy8gICAgICAgICAgICAgfSBlbHNlIHtcbi8vICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygndGhlbkJ5OicgKyBzb3J0U3RhdGVzW2ldLnByb3BlcnR5TmFtZSk7XG4vLyAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhWzBdW3NvcnRTdGF0ZXNbaV0ucHJvcGVydHlOYW1lXSA9PT0gJ3N0cmluZycpIHtcblxuLy8gICAgICAgICAgICAgICAgICAgICBzb3J0QnkgPSBzb3J0QnkudGhlbkJ5KHNvcnRTdGF0ZXNbaV0ucHJvcGVydHlOYW1lLCB7XG4vLyAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVDYXNlOiB0cnVlLFxuLy8gICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uOiBvcmRlclxuLy8gICAgICAgICAgICAgICAgICAgICB9KTtcbi8vICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhWzBdW3NvcnRTdGF0ZXNbaV0ucHJvcGVydHlOYW1lXSA9PT0gJ251bWJlcicpIHtcbi8vICAgICAgICAgICAgICAgICAgICAgc29ydEJ5ID0gc29ydEJ5LnRoZW5CeShmdW5jdGlvbih2MSwgdjIpIHtcbi8vICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2MVtzb3J0U3RhdGVzW2ldLnByb3BlcnR5TmFtZV0gLSB2Mltzb3J0U3RhdGVzW2ldLnByb3BlcnR5TmFtZV07XG4vLyAgICAgICAgICAgICAgICAgICAgIH0sIG9yZGVyKTtcbi8vICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuLy8gICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnb3RoZXJUeXBlIHNvcnQnKTtcbi8vICAgICAgICAgICAgICAgICB9XG4vLyAgICAgICAgICAgICB9XG4vLyAgICAgICAgIH1cbi8vICAgICAgICAgZGF0YS5zb3J0KHNvcnRCeSk7XG4vLyAgICAgfVxuXG5cbi8vICAgcmV0dXJuIGRhdGE7XG4vLyAgIH1cblxufSJdfQ==