UNPKG

air-lib

Version:

This is Air's angular component library

253 lines 23.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, Input } from '@angular/core'; import { PagingService } from '../../services/paging.service'; import { ActivatedRoute } from '@angular/router'; var DetailsPagingComponent = /** @class */ (function () { function DetailsPagingComponent(route) { this.route = route; } /** * @return {?} */ DetailsPagingComponent.prototype.ngOnInit = /** * @return {?} */ function () { /** @type {?} */ var self = this; self.setOptions(); }; /** * @return {?} */ DetailsPagingComponent.prototype.setOptions = /** * @return {?} */ function () { /** @type {?} */ var self = this; /** @type {?} */ var firstLevelActivatedRoute = self.route.children[0]; if (firstLevelActivatedRoute) { /** @type {?} */ var localStorageValue = PagingService.readFromLocalStorage(firstLevelActivatedRoute.snapshot); if (localStorageValue) { self.options = localStorageValue; } } if (!self.options || self.options == null || self.options.hash === 'empty') { return; } self.init(self.options); }; /** * @param {?} options * @return {?} */ DetailsPagingComponent.prototype.init = /** * @param {?} options * @return {?} */ function (options) { /** @type {?} */ var self = this; self.options = options; if (!self.options || self.options == null) { return; } self.options.backUrl = decodeURIComponent(self.options.backUrl); self.isVisible = self.options && self.options.currentIndex !== undefined && self.options.startIndex !== undefined && self.options.total !== undefined; if (self.isVisible) { self.links = self.getLinks(self.options.currentIndex + 1, self.lastIndex + 1); } }; Object.defineProperty(DetailsPagingComponent.prototype, "lastIndex", { get: /** * @return {?} */ function () { return this.options.startIndex + this.options.total - 1; }, enumerable: true, configurable: true }); /** * @return {?} */ DetailsPagingComponent.prototype.first = /** * @return {?} */ function () { this.options.currentIndex = this.options.startIndex; this.go(this.options.currentIndex); }; /** * @return {?} */ DetailsPagingComponent.prototype.previous = /** * @return {?} */ function () { if (this.options && this.options.currentIndex === this.options.startIndex) { return; } this.options.currentIndex = this.options.currentIndex - 1; this.go(this.options.currentIndex); }; /** * @param {?} index * @return {?} */ DetailsPagingComponent.prototype.goTo = /** * @param {?} index * @return {?} */ function (index) { if (index < this.options.startIndex || index > this.lastIndex) { throw Error('Out of range, should be between ' + this.options.startIndex + ' and ' + this.lastIndex); } this.options.previousIndex = this.options.currentIndex; this.options.currentIndex = index; console.log('Current index is ' + this.options.currentIndex + ', last index is ' + this.lastIndex); this.go(this.options.currentIndex); }; /** * @return {?} */ DetailsPagingComponent.prototype.next = /** * @return {?} */ function () { if (this.options && this.options.currentIndex === this.lastIndex) { return; } this.options.currentIndex++; this.go(this.options.currentIndex); }; /** * @return {?} */ DetailsPagingComponent.prototype.last = /** * @return {?} */ function () { this.options.currentIndex = this.lastIndex; this.go(this.options.currentIndex); }; /** * @param {?} index * @return {?} */ DetailsPagingComponent.prototype.go = /** * @param {?} index * @return {?} */ function (index) { this.links = this.getLinks(this.options.currentIndex + 1, this.lastIndex + 1); console.log('fire paging event, index is ' + index); /** @type {?} */ var masterListHashIndex = Math.floor(this.options.currentIndex / this.options.itemsOnPage); if (PagingService.isExistsHash(this.context, masterListHashIndex)) { this.options.hash = PagingService.getHash(this.context, masterListHashIndex); } PagingService.firePagingEvent(this.options); }; /** * @param {?} current * @param {?} last * @return {?} */ DetailsPagingComponent.prototype.getLinks = /** * @param {?} current * @param {?} last * @return {?} */ function (current, last) { var e_1, _a; /** @type {?} */ var delta = 1; /** @type {?} */ var left = current - delta; /** @type {?} */ var right = current + delta + 1; /** @type {?} */ var range = new Array(); /** @type {?} */ var rangeWithDots = new Array(); /** @type {?} */ var l; for (var i = 1; i <= last; i++) { if (i === 1 || i === last || i >= left && i < right) { range.push(i); } } try { for (var range_1 = tslib_1.__values(range), range_1_1 = range_1.next(); !range_1_1.done; range_1_1 = range_1.next()) { var i = range_1_1.value; if (l) { if (i - l === 2) { rangeWithDots.push(l + 1); } else if (i - l !== 1) { rangeWithDots.push('...'); } } rangeWithDots.push(i.toString()); l = i; } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (range_1_1 && !range_1_1.done && (_a = range_1.return)) _a.call(range_1); } finally { if (e_1) throw e_1.error; } } return rangeWithDots; }; DetailsPagingComponent.decorators = [ { type: Component, args: [{ selector: 'air-details-paging', template: "<div class=\"container-list-pagination\" [hidden]=\"!isVisible\">\r\n <div *ngIf=\"displayReturnBackUrl && options\" [routerLink]=\"[options.backUrl]\" class=\"block-list-access\">\r\n <i class=\"fa fa-list p-r-10\" aria-hidden=\"true\"></i>{{'earnings.Header.BackToList' | translate}} </div>\r\n \r\n <div class=\"dataTables_wrapper container-pagination form-inline no-footer\">\r\n <ul class=\"pagination-list clear_after\" [hidden]=\"!options || options.total === 1 || options.total === 0\">\r\n <li>\r\n <a class=\"paginate_button previous\" [ngClass]=\"{'disabled': options?.currentIndex===options?.startIndex}\" (click)=\"previous()\">\r\n <i class=\"fa fa-angle-left\" aria-hidden=\"true\"></i>\r\n </a>\r\n </li>\r\n \r\n <li class=\"button-list\" *ngFor=\"let pageNo of links;\" \r\n [ngClass]=\"{ 'active': options && options.currentIndex === pageNo-1 }\">\r\n <a *ngIf=\"pageNo!=='...'\" (click)=\"goTo(pageNo-1)\">{{pageNo}}</a>\r\n <span class=\"disabled\" *ngIf=\"pageNo=='...'\">...</span>\r\n </li>\r\n \r\n <li>\r\n <a class=\"paginate_button last\" [ngClass]=\"{'disabled': options && options.currentIndex === lastIndex}\" (click)=\"next()\">\r\n <i class=\"fa fa-angle-right\" aria-hidden=\"true\"></i>\r\n </a>\r\n </li>\r\n \r\n </ul>\r\n </div>\r\n</div>", providers: [PagingService], styles: [".container-list-pagination{display:flex;align-items:center;height:55px;justify-content:flex-end}.container-list-pagination .block-list-access{cursor:pointer}.container-list-pagination .container-pagination{padding:0 0 0 10px;position:relative}.container-list-pagination .pagination-list{margin:0;padding:10px 0;list-style:none;font-size:11px}.container-list-pagination .pagination-list li{float:left;list-style:none}.container-list-pagination .pagination-list li a{font-size:11px;color:#999;padding:6px 9px}.container-list-pagination .pagination-list li .paginate_button{padding:6px 5px}.container-list-pagination .pagination-list li a:hover:not(.disabled){color:#000}.container-list-pagination .pagination-list li .disabled{cursor:default}.container-list-pagination .pagination-list li a.first:hover:not(.disabled),.container-list-pagination .pagination-list li a.last:hover:not(.disabled),.container-list-pagination .pagination-list li a.next:hover:not(.disabled),.container-list-pagination .pagination-list li a.previous:hover:not(.disabled){cursor:pointer}.container-list-pagination .pagination-list li.active a{font-weight:700;color:#000}.container-list-pagination .pagination-list li .fa{font-weight:500;font-size:12px}.container-list-pagination .pagination-list .button-list{padding:0;cursor:pointer}@media (max-width:500px){.container-list-pagination{justify-content:space-between}.container-list-pagination .block-list-access{font-size:0}.container-list-pagination .block-list-access i{font-size:19px}}"] }] } ]; DetailsPagingComponent.ctorParameters = function () { return [ { type: ActivatedRoute } ]; }; DetailsPagingComponent.propDecorators = { displayReturnBackUrl: [{ type: Input }], itemsOnPage: [{ type: Input }], context: [{ type: Input }] }; return DetailsPagingComponent; }()); export { DetailsPagingComponent }; if (false) { /** @type {?} */ DetailsPagingComponent.prototype.displayReturnBackUrl; /** @type {?} */ DetailsPagingComponent.prototype.itemsOnPage; /** @type {?} */ DetailsPagingComponent.prototype.context; /** @type {?} */ DetailsPagingComponent.prototype.isVisible; /** @type {?} */ DetailsPagingComponent.prototype.links; /** @type {?} */ DetailsPagingComponent.prototype.options; /** * @type {?} * @private */ DetailsPagingComponent.prototype.route; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlscy1wYWdpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vYWlyLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2RldGFpbHMtcGFnaW5nL2RldGFpbHMtcGFnaW5nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJakQ7SUFpQkUsZ0NBQW9CLEtBQXFCO1FBQXJCLFVBQUssR0FBTCxLQUFLLENBQWdCO0lBRXpDLENBQUM7Ozs7SUFFRCx5Q0FBUTs7O0lBQVI7O1lBRVEsSUFBSSxHQUFHLElBQUk7UUFDakIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7Ozs7SUFFRCwyQ0FBVTs7O0lBQVY7O1lBQ1EsSUFBSSxHQUFHLElBQUk7O1lBQ1gsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksd0JBQXdCLEVBQUU7O2dCQUN0QixpQkFBaUIsR0FBRyxhQUFhLENBQUMsb0JBQW9CLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDO1lBQy9GLElBQUksaUJBQWlCLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsaUJBQWlCLENBQUM7YUFDbEM7U0FDRjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtZQUMxRSxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQixD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Qjs7O0lBQ2pDLHNEQUF1Qzs7SUFDdkMsNkNBQTZCOztJQUM3Qix5Q0FBeUI7O0lBRXpCLDJDQUFtQjs7SUFDbkIsdUNBQWE7O0lBQ2IseUNBQXFCOzs7OztJQUdULHVDQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFBhZ2luZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wYWdpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgUGFnaW5nRXZlbnQgfSBmcm9tICcuLi8uLi9lbnRpdGllcy9wYWdpbmctZXZlbnQnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYWlyLWRldGFpbHMtcGFnaW5nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGV0YWlscy1wYWdpbmcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RldGFpbHMtcGFnaW5nLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbUGFnaW5nU2VydmljZV1cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBEZXRhaWxzUGFnaW5nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBkaXNwbGF5UmV0dXJuQmFja1VybDogYm9vbGVhbjtcclxuICBASW5wdXQoKSBpdGVtc09uUGFnZTogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGNvbnRleHQ6IHN0cmluZztcclxuXHJcbiAgaXNWaXNpYmxlOiBib29sZWFuO1xyXG4gIGxpbmtzOiBhbnlbXTsgLy8gYXJyYXkgb2YgbGlua3NcclxuICBvcHRpb25zOiBQYWdpbmdFdmVudDtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICBzZWxmLnNldE9wdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIHNldE9wdGlvbnMoKSB7XHJcbiAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgIGNvbnN0IGZpcnN0TGV2ZWxBY3RpdmF0ZWRSb3V0ZSA9IHNlbGYucm91dGUuY2hpbGRyZW5bMF07XHJcbiAgICBpZiAoZmlyc3RMZXZlbEFjdGl2YXRlZFJvdXRlKSB7XHJcbiAgICAgIGNvbnN0IGxvY2FsU3RvcmFnZVZhbHVlID0gUGFnaW5nU2VydmljZS5yZWFkRnJvbUxvY2FsU3RvcmFnZShmaXJzdExldmVsQWN0aXZhdGVkUm91dGUuc25hcHNob3QpO1xyXG4gICAgICBpZiAobG9jYWxTdG9yYWdlVmFsdWUpIHtcclxuICAgICAgICBzZWxmLm9wdGlvbnMgPSBsb2NhbFN0b3JhZ2VWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghc2VsZi5vcHRpb25zIHx8IHNlbGYub3B0aW9ucyA9PSBudWxsIHx8IHNlbGYub3B0aW9ucy5oYXNoID09PSAnZW1wdHknKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHNlbGYuaW5pdChzZWxmLm9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgaW5pdCAob3B0aW9uczogUGFnaW5nRXZlbnQpIHtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgc2VsZi5vcHRpb25zID0gb3B0aW9ucztcclxuICAgIGlmICghc2VsZi5vcHRpb25zIHx8IHNlbGYub3B0aW9ucyA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBzZWxmLm9wdGlvbnMuYmFja1VybCA9IGRlY29kZVVSSUNvbXBvbmVudChzZWxmLm9wdGlvbnMuYmFja1VybCk7XHJcblxyXG4gICAgc2VsZi5pc1Zpc2libGUgPSBzZWxmLm9wdGlvbnNcclxuICAgICAgJiYgc2VsZi5vcHRpb25zLmN1cnJlbnRJbmRleCAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICYmIHNlbGYub3B0aW9ucy5zdGFydEluZGV4ICE9PSB1bmRlZmluZWRcclxuICAgICAgJiYgc2VsZi5vcHRpb25zLnRvdGFsICE9PSB1bmRlZmluZWQ7XHJcblxyXG4gICAgaWYgKHNlbGYuaXNWaXNpYmxlKSB7XHJcbiAgICAgIHNlbGYubGlua3MgPSBzZWxmLmdldExpbmtzKHNlbGYub3B0aW9ucy5jdXJyZW50SW5kZXggKyAxLCBzZWxmLmxhc3RJbmRleCArIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGxhc3RJbmRleCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zdGFydEluZGV4ICsgdGhpcy5vcHRpb25zLnRvdGFsIC0gMTtcclxuICB9XHJcblxyXG4gIGZpcnN0KCkge1xyXG4gICAgdGhpcy5vcHRpb25zLmN1cnJlbnRJbmRleCA9IHRoaXMub3B0aW9ucy5zdGFydEluZGV4O1xyXG4gICAgdGhpcy5nbyh0aGlzLm9wdGlvbnMuY3VycmVudEluZGV4KTtcclxuICB9XHJcblxyXG4gIHByZXZpb3VzKCkge1xyXG4gICAgaWYodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5jdXJyZW50SW5kZXg9PT10aGlzLm9wdGlvbnMuc3RhcnRJbmRleClcclxuICAgIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmN1cnJlbnRJbmRleCA9IHRoaXMub3B0aW9ucy5jdXJyZW50SW5kZXggLSAxO1xyXG4gICAgdGhpcy5nbyh0aGlzLm9wdGlvbnMuY3VycmVudEluZGV4KTtcclxuICB9XHJcblxyXG4gIGdvVG8oaW5kZXg6IG51bWJlcikge1xyXG4gICAgaWYgKGluZGV4IDwgdGhpcy5vcHRpb25zLnN0YXJ0SW5kZXggfHwgaW5kZXggPiB0aGlzLmxhc3RJbmRleCkge1xyXG4gICAgICB0aHJvdyBFcnJvcignT3V0IG9mIHJhbmdlLCBzaG91bGQgYmUgYmV0d2VlbiAnICsgdGhpcy5vcHRpb25zLnN0YXJ0SW5kZXggKyAnIGFuZCAnICsgdGhpcy5sYXN0SW5kZXgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLnByZXZpb3VzSW5kZXggPSB0aGlzLm9wdGlvbnMuY3VycmVudEluZGV4O1xyXG4gICAgdGhpcy5vcHRpb25zLmN1cnJlbnRJbmRleCA9IGluZGV4O1xyXG4gICAgY29uc29sZS5sb2coJ0N1cnJlbnQgaW5kZXggaXMgJyArIHRoaXMub3B0aW9ucy5jdXJyZW50SW5kZXggKyAnLCBsYXN0IGluZGV4IGlzICcgKyB0aGlzLmxhc3RJbmRleCk7XHJcbiAgICB0aGlzLmdvKHRoaXMub3B0aW9ucy5jdXJyZW50SW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgbmV4dCgpIHtcclxuICAgIGlmKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuY3VycmVudEluZGV4ID09PSB0aGlzLmxhc3RJbmRleClcclxuICAgIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmN1cnJlbnRJbmRleCsrO1xyXG4gICAgdGhpcy5nbyh0aGlzLm9wdGlvbnMuY3VycmVudEluZGV4KTtcclxuICB9XHJcblxyXG4gIGxhc3QoKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuY3VycmVudEluZGV4ID0gdGhpcy5sYXN0SW5kZXg7XHJcbiAgICB0aGlzLmdvKHRoaXMub3B0aW9ucy5jdXJyZW50SW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgZ28oaW5kZXg6IG51bWJlcikge1xyXG5cclxuICAgIHRoaXMubGlua3MgPSB0aGlzLmdldExpbmtzKHRoaXMub3B0aW9ucy5jdXJyZW50SW5kZXggKyAxLCB0aGlzLmxhc3RJbmRleCArIDEpO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKCdmaXJlIHBhZ2luZyBldmVudCwgaW5kZXggaXMgJyArIGluZGV4KTtcclxuXHJcbiAgICBjb25zdCBtYXN0ZXJMaXN0SGFzaEluZGV4ID0gTWF0aC5mbG9vcih0aGlzLm9wdGlvbnMuY3VycmVudEluZGV4IC8gdGhpcy5vcHRpb25zLml0ZW1zT25QYWdlKTtcclxuICAgIGlmIChQYWdpbmdTZXJ2aWNlLmlzRXhpc3RzSGFzaCh0aGlzLmNvbnRleHQsIG1hc3Rlckxpc3RIYXNoSW5kZXgpKSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5oYXNoID0gUGFnaW5nU2VydmljZS5nZXRIYXNoKHRoaXMuY29udGV4dCwgbWFzdGVyTGlzdEhhc2hJbmRleCk7XHJcbiAgICB9XHJcblxyXG4gICAgUGFnaW5nU2VydmljZS5maXJlUGFnaW5nRXZlbnQodGhpcy5vcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGdldExpbmtzKGN1cnJlbnQ6IG51bWJlciwgbGFzdDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBkZWx0YSA9IDE7XHJcbiAgICBjb25zdCBsZWZ0ID0gY3VycmVudCAtIGRlbHRhO1xyXG4gICAgY29uc3QgcmlnaHQgPSBjdXJyZW50ICsgZGVsdGEgKyAxO1xyXG4gICAgY29uc3QgcmFuZ2UgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xyXG4gICAgY29uc3QgcmFuZ2VXaXRoRG90cyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcbiAgICBsZXQgbDtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBsYXN0OyBpKyspIHtcclxuICAgICAgaWYgKGkgPT09IDEgfHwgaSA9PT0gbGFzdCB8fCBpID49IGxlZnQgJiYgaSA8IHJpZ2h0KSB7XHJcbiAgICAgICAgcmFuZ2UucHVzaChpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3QgaSBvZiByYW5nZSkge1xyXG4gICAgICBpZiAobCkge1xyXG4gICAgICAgIGlmIChpIC0gbCA9PT0gMikge1xyXG4gICAgICAgICAgcmFuZ2VXaXRoRG90cy5wdXNoKGwgKyAxKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGkgLSBsICE9PSAxKSB7XHJcbiAgICAgICAgICByYW5nZVdpdGhEb3RzLnB1c2goJy4uLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByYW5nZVdpdGhEb3RzLnB1c2goaS50b1N0cmluZygpKTtcclxuICAgICAgbCA9IGk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJhbmdlV2l0aERvdHM7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gIFRlc3QgaXQ6XHJcbiAgaHR0cHM6Ly9yZXh0ZXN0ZXIuY29tL0hVTzI1ODM3XHJcbiAgKi9cclxuXHJcbn1cclxuXHJcblxyXG4iXX0=