UNPKG

igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

188 lines • 19.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Pipe } from '@angular/core'; import { GridBaseAPIService } from '../api.service'; import { GridSummaryPosition, GridSummaryCalculationMode } from '../grid-base.component'; /** * @hidden */ var IgxGridSummaryPipe = /** @class */ (function () { function IgxGridSummaryPipe(gridAPI) { this.gridAPI = (/** @type {?} */ (gridAPI)); } /** * @param {?} flatData * @param {?} hasSummary * @param {?} summaryCalculationMode * @param {?} summaryPosition * @param {?} id * @param {?} pipeTrigger * @param {?} summaryPipeTrigger * @return {?} */ IgxGridSummaryPipe.prototype.transform = /** * @param {?} flatData * @param {?} hasSummary * @param {?} summaryCalculationMode * @param {?} summaryPosition * @param {?} id * @param {?} pipeTrigger * @param {?} summaryPipeTrigger * @return {?} */ function (flatData, hasSummary, summaryCalculationMode, summaryPosition, id, pipeTrigger, summaryPipeTrigger) { if (!flatData || !hasSummary || summaryCalculationMode === GridSummaryCalculationMode.rootLevelOnly) { return flatData; } return this.addSummaryRows(id, flatData, summaryPosition); }; /** * @private * @param {?} gridId * @param {?} collection * @param {?} summaryPosition * @return {?} */ IgxGridSummaryPipe.prototype.addSummaryRows = /** * @private * @param {?} gridId * @param {?} collection * @param {?} summaryPosition * @return {?} */ function (gridId, collection, summaryPosition) { /** @type {?} */ var recordsWithSummary = []; /** @type {?} */ var lastChildMap = new Map(); /** @type {?} */ var grid = this.gridAPI.grid; /** @type {?} */ var maxSummaryHeight = grid.summaryService.calcMaxSummaryHeight(); for (var i = 0; i < collection.length; i++) { /** @type {?} */ var record = collection[i]; recordsWithSummary.push(record); /** @type {?} */ var recordId = void 0; /** @type {?} */ var groupByRecord = null; if (grid.isGroupByRecord(record)) { groupByRecord = (/** @type {?} */ (record)); recordId = this.gridAPI.get_groupBy_record_id(groupByRecord); } else { recordId = this.gridAPI.get_row_id(record); } if (summaryPosition === GridSummaryPosition.bottom && lastChildMap.has(recordId)) { /** @type {?} */ var groupRecords = lastChildMap.get(recordId); for (var j = 0; j < groupRecords.length; j++) { /** @type {?} */ var groupRecord = groupRecords[j]; /** @type {?} */ var groupRecordId = this.gridAPI.get_groupBy_record_id(groupRecord); /** @type {?} */ var records = this.removeDeletedRecord(grid, groupRecord.records.slice()); /** @type {?} */ var summaries = grid.summaryService.calculateSummaries(groupRecordId, records); /** @type {?} */ var summaryRecord = { summaries: summaries, max: maxSummaryHeight }; recordsWithSummary.push(summaryRecord); } } if (groupByRecord === null || !grid.isExpandedGroup(groupByRecord)) { continue; } if (summaryPosition === GridSummaryPosition.top) { /** @type {?} */ var records = this.removeDeletedRecord(grid, groupByRecord.records.slice()); /** @type {?} */ var summaries = grid.summaryService.calculateSummaries(recordId, records); /** @type {?} */ var summaryRecord = { summaries: summaries, max: maxSummaryHeight }; recordsWithSummary.push(summaryRecord); } else if (summaryPosition === GridSummaryPosition.bottom) { /** @type {?} */ var lastChild = groupByRecord; while (lastChild.groups && lastChild.groups.length > 0 && grid.isExpandedGroup(lastChild)) { lastChild = lastChild.groups[lastChild.groups.length - 1]; } /** @type {?} */ var lastChildId = void 0; if (grid.isExpandedGroup(lastChild)) { lastChildId = this.gridAPI.get_row_id(lastChild.records[lastChild.records.length - 1]); } else { lastChildId = this.gridAPI.get_groupBy_record_id(lastChild); } /** @type {?} */ var groupRecords = lastChildMap.get(lastChildId); if (!groupRecords) { groupRecords = []; lastChildMap.set(lastChildId, groupRecords); } groupRecords.unshift(groupByRecord); } } return recordsWithSummary; }; /** * @private * @param {?} grid * @param {?} data * @return {?} */ IgxGridSummaryPipe.prototype.removeDeletedRecord = /** * @private * @param {?} grid * @param {?} data * @return {?} */ function (grid, data) { if (!grid.transactions.enabled) { return data; } /** @type {?} */ var deletedRows = grid.transactions.getTransactionLog().filter(function (t) { return t.type === 'delete'; }).map(function (t) { return t.id; }); deletedRows.forEach(function (rowID) { /** @type {?} */ var tempData = grid.primaryKey ? data.map(function (rec) { return rec[grid.primaryKey]; }) : data; /** @type {?} */ var index = tempData.indexOf(rowID); if (index !== -1) { data.splice(index, 1); } }); return data; }; IgxGridSummaryPipe.decorators = [ { type: Pipe, args: [{ name: 'gridSummary', pure: true },] } ]; /** @nocollapse */ IgxGridSummaryPipe.ctorParameters = function () { return [ { type: GridBaseAPIService } ]; }; return IgxGridSummaryPipe; }()); export { IgxGridSummaryPipe }; if (false) { /** * @type {?} * @private */ IgxGridSummaryPipe.prototype.gridAPI; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zdW1tYXJ5LnBpcGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2dyaWRzL2dyaWQvZ3JpZC5zdW1tYXJ5LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBd0IsbUJBQW1CLEVBQUUsMEJBQTBCLEVBQXFCLE1BQU0sd0JBQXdCLENBQUM7Ozs7QUFNbEk7SUFPSSw0QkFBWSxPQUFxRTtRQUM3RSxJQUFJLENBQUMsT0FBTyxHQUFHLG1CQUFtQixPQUFPLEVBQUEsQ0FBQztJQUM5QyxDQUFDOzs7Ozs7Ozs7OztJQUVNLHNDQUFTOzs7Ozs7Ozs7O0lBQWhCLFVBQWlCLFFBQWUsRUFDNUIsVUFBbUIsRUFDbkIsc0JBQWtELEVBQ2xELGVBQW9DLEVBQ3BDLEVBQVUsRUFBRSxXQUFtQixFQUFFLGtCQUEwQjtRQUUzRCxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsVUFBVSxJQUFJLHNCQUFzQixLQUFLLDBCQUEwQixDQUFDLGFBQWEsRUFBRTtZQUNqRyxPQUFPLFFBQVEsQ0FBQztTQUNuQjtRQUVELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzlELENBQUM7Ozs7Ozs7O0lBRU8sMkNBQWM7Ozs7Ozs7SUFBdEIsVUFBdUIsTUFBYyxFQUFFLFVBQWlCLEVBQUUsZUFBb0M7O1lBQ3BGLGtCQUFrQixHQUFHLEVBQUU7O1lBQ3ZCLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBeUI7O1lBQy9DLElBQUksR0FBcUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJOztZQUMxQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixFQUFFO1FB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S0FBSyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3JDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3pCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOztnQkEvR0osSUFBSSxTQUFDO29CQUNGLElBQUksRUFBRSxhQUFhO29CQUNuQixJQUFJLEVBQUUsSUFBSTtpQkFDYjs7OztnQkFWUSxrQkFBa0I7O0lBdUgzQix5QkFBQztDQUFBLEFBaEhELElBZ0hDO1NBNUdZLGtCQUFrQjs7Ozs7O0lBQzNCLHFDQUFtQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneEdyaWRBUElTZXJ2aWNlIH0gZnJvbSAnLi9ncmlkLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IEdyaWRCYXNlQVBJU2VydmljZSB9IGZyb20gJy4uL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRCYXNlQ29tcG9uZW50LCBHcmlkU3VtbWFyeVBvc2l0aW9uLCBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZSwgSUdyaWREYXRhQmluZGFibGUgfSBmcm9tICcuLi9ncmlkLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IElneEdyaWRDb21wb25lbnQgfSBmcm9tICcuL2dyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IElTdW1tYXJ5UmVjb3JkIH0gZnJvbSAnLi4vc3VtbWFyaWVzL2dyaWQtc3VtbWFyeSc7XG5pbXBvcnQgeyBJR3JvdXBCeVJlY29yZCB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGJ5LXJlY29yZC5pbnRlcmZhY2UnO1xuXG4vKiogQGhpZGRlbiAqL1xuQFBpcGUoe1xuICAgIG5hbWU6ICdncmlkU3VtbWFyeScsXG4gICAgcHVyZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkU3VtbWFyeVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBwcml2YXRlIGdyaWRBUEk6IElneEdyaWRBUElTZXJ2aWNlO1xuXG4gICAgY29uc3RydWN0b3IoZ3JpZEFQSTogR3JpZEJhc2VBUElTZXJ2aWNlPElneEdyaWRCYXNlQ29tcG9uZW50ICYgSUdyaWREYXRhQmluZGFibGU+KSB7XG4gICAgICAgIHRoaXMuZ3JpZEFQSSA9IDxJZ3hHcmlkQVBJU2VydmljZT5ncmlkQVBJO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmFuc2Zvcm0oZmxhdERhdGE6IGFueVtdLFxuICAgICAgICBoYXNTdW1tYXJ5OiBib29sZWFuLFxuICAgICAgICBzdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlOiBHcmlkU3VtbWFyeUNhbGN1bGF0aW9uTW9kZSxcbiAgICAgICAgc3VtbWFyeVBvc2l0aW9uOiBHcmlkU3VtbWFyeVBvc2l0aW9uLFxuICAgICAgICBpZDogc3RyaW5nLCBwaXBlVHJpZ2dlcjogbnVtYmVyLCBzdW1tYXJ5UGlwZVRyaWdnZXI6IG51bWJlcik6IGFueVtdIHtcblxuICAgICAgICBpZiAoIWZsYXREYXRhIHx8ICFoYXNTdW1tYXJ5IHx8IHN1bW1hcnlDYWxjdWxhdGlvbk1vZGUgPT09IEdyaWRTdW1tYXJ5Q2FsY3VsYXRpb25Nb2RlLnJvb3RMZXZlbE9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybiBmbGF0RGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmFkZFN1bW1hcnlSb3dzKGlkLCBmbGF0RGF0YSwgc3VtbWFyeVBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFN1bW1hcnlSb3dzKGdyaWRJZDogc3RyaW5nLCBjb2xsZWN0aW9uOiBhbnlbXSwgc3VtbWFyeVBvc2l0aW9uOiBHcmlkU3VtbWFyeVBvc2l0aW9uKTogYW55W10ge1xuICAgICAgICBjb25zdCByZWNvcmRzV2l0aFN1bW1hcnkgPSBbXTtcbiAgICAgICAgY29uc3QgbGFzdENoaWxkTWFwID0gbmV3IE1hcDxhbnksIElHcm91cEJ5UmVjb3JkW10+KCk7XG4gICAgICAgIGNvbnN0IGdyaWQ6IElneEdyaWRDb21wb25lbnQgPSB0aGlzLmdyaWRBUEkuZ3JpZDtcbiAgICAgICAgY29uc3QgbWF4U3VtbWFyeUhlaWdodCA9IGdyaWQuc3VtbWFyeVNlcnZpY2UuY2FsY01heFN1bW1hcnlIZWlnaHQoKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbGxlY3Rpb24ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IGNvbGxlY3Rpb25baV07XG4gICAgICAgICAgICByZWNvcmRzV2l0aFN1bW1hcnkucHVzaChyZWNvcmQpO1xuXG4gICAgICAgICAgICBsZXQgcmVjb3JkSWQ7XG4gICAgICAgICAgICBsZXQgZ3JvdXBCeVJlY29yZDogSUdyb3VwQnlSZWNvcmQgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAoZ3JpZC5pc0dyb3VwQnlSZWNvcmQocmVjb3JkKSkge1xuICAgICAgICAgICAgICAgIGdyb3VwQnlSZWNvcmQgPSByZWNvcmQgYXMgSUdyb3VwQnlSZWNvcmQ7XG4gICAgICAgICAgICAgICAgcmVjb3JkSWQgPSB0aGlzLmdyaWRBUEkuZ2V0X2dyb3VwQnlfcmVjb3JkX2lkKGdyb3VwQnlSZWNvcmQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWNvcmRJZCA9IHRoaXMuZ3JpZEFQSS5nZXRfcm93X2lkKHJlY29yZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdW1tYXJ5UG9zaXRpb24gPT09IEdyaWRTdW1tYXJ5UG9zaXRpb24uYm90dG9tICYmIGxhc3RDaGlsZE1hcC5oYXMocmVjb3JkSWQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBSZWNvcmRzID0gbGFzdENoaWxkTWFwLmdldChyZWNvcmRJZCk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGdyb3VwUmVjb3Jkcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cFJlY29yZCA9IGdyb3VwUmVjb3Jkc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBSZWNvcmRJZCA9IHRoaXMuZ3JpZEFQSS5nZXRfZ3JvdXBCeV9yZWNvcmRfaWQoZ3JvdXBSZWNvcmQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWNvcmRzID0gdGhpcy5yZW1vdmVEZWxldGVkUmVjb3JkKGdyaWQsIGdyb3VwUmVjb3JkLnJlY29yZHMuc2xpY2UoKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1bW1hcmllcyA9IGdyaWQuc3VtbWFyeVNlcnZpY2UuY2FsY3VsYXRlU3VtbWFyaWVzKGdyb3VwUmVjb3JkSWQsIHJlY29yZHMpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdW1tYXJ5UmVjb3JkOiBJU3VtbWFyeVJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1bW1hcmllczogc3VtbWFyaWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4OiBtYXhTdW1tYXJ5SGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJlY29yZHNXaXRoU3VtbWFyeS5wdXNoKHN1bW1hcnlSZWNvcmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGdyb3VwQnlSZWNvcmQgPT09IG51bGwgfHwgIWdyaWQuaXNFeHBhbmRlZEdyb3VwKGdyb3VwQnlSZWNvcmQpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdW1tYXJ5UG9zaXRpb24gPT09IEdyaWRTdW1tYXJ5UG9zaXRpb24udG9wKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjb3JkcyA9IHRoaXMucmVtb3ZlRGVsZXRlZFJlY29yZChncmlkLCBncm91cEJ5UmVjb3JkLnJlY29yZHMuc2xpY2UoKSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3VtbWFyaWVzID0gZ3JpZC5zdW1tYXJ5U2VydmljZS5jYWxjdWxhdGVTdW1tYXJpZXMocmVjb3JkSWQsIHJlY29yZHMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1bW1hcnlSZWNvcmQ6IElTdW1tYXJ5UmVjb3JkID0ge1xuICAgICAgICAgICAgICAgICAgICBzdW1tYXJpZXM6IHN1bW1hcmllcyxcbiAgICAgICAgICAgICAgICAgICAgbWF4OiAgbWF4U3VtbWFyeUhlaWdodFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmVjb3Jkc1dpdGhTdW1tYXJ5LnB1c2goc3VtbWFyeVJlY29yZCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN1bW1hcnlQb3NpdGlvbiA9PT0gR3JpZFN1bW1hcnlQb3NpdGlvbi5ib3R0b20pIHtcbiAgICAgICAgICAgICAgICBsZXQgbGFzdENoaWxkID0gZ3JvdXBCeVJlY29yZDtcblxuICAgICAgICAgICAgICAgIHdoaWxlIChsYXN0Q2hpbGQuZ3JvdXBzICYmIGxhc3RDaGlsZC5ncm91cHMubGVuZ3RoID4gMCAmJiBncmlkLmlzRXhwYW5kZWRHcm91cChsYXN0Q2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RDaGlsZCA9IGxhc3RDaGlsZC5ncm91cHNbbGFzdENoaWxkLmdyb3Vwcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgbGFzdENoaWxkSWQ7XG4gICAgICAgICAgICAgICAgaWYgKGdyaWQuaXNFeHBhbmRlZEdyb3VwKGxhc3RDaGlsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdENoaWxkSWQgPSB0aGlzLmdyaWRBUEkuZ2V0X3Jvd19pZChsYXN0Q2hpbGQucmVjb3Jkc1tsYXN0Q2hpbGQucmVjb3Jkcy5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdENoaWxkSWQgPSB0aGlzLmdyaWRBUEkuZ2V0X2dyb3VwQnlfcmVjb3JkX2lkKGxhc3RDaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGdyb3VwUmVjb3JkcyA9IGxhc3RDaGlsZE1hcC5nZXQobGFzdENoaWxkSWQpO1xuICAgICAgICAgICAgICAgIGlmICghZ3JvdXBSZWNvcmRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwUmVjb3JkcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBsYXN0Q2hpbGRNYXAuc2V0KGxhc3RDaGlsZElkLCBncm91cFJlY29yZHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBncm91cFJlY29yZHMudW5zaGlmdChncm91cEJ5UmVjb3JkKTtcbiAgICAgICAgICAgIH1cbiAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlY29yZHNXaXRoU3VtbWFyeTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZURlbGV0ZWRSZWNvcmQoZ3JpZCwgZGF0YSkge1xuICAgICAgICBpZiAoIWdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlbGV0ZWRSb3dzID0gZ3JpZC50cmFuc2FjdGlvbnMuZ2V0VHJhbnNhY3Rpb25Mb2coKS5maWx0ZXIodCA9PiB0LnR5cGUgPT09ICdkZWxldGUnKS5tYXAodCA9PiB0LmlkKTtcbiAgICAgICAgZGVsZXRlZFJvd3MuZm9yRWFjaChyb3dJRCA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZW1wRGF0YSA9IGdyaWQucHJpbWFyeUtleSA/IGRhdGEubWFwKHJlYyA9PiByZWNbZ3JpZC5wcmltYXJ5S2V5XSkgOiBkYXRhO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0ZW1wRGF0YS5pbmRleE9mKHJvd0lEKTtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBkYXRhLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG59XG4iXX0=