UNPKG

ftable

Version:
152 lines 24.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component } from '@angular/core'; import { EventEmitter } from '@angular/core'; import { Output } from '@angular/core'; import { Input } from '@angular/core'; import { ViewChild, ElementRef } from '@angular/core'; var DateFFilterComponent = /** @class */ (function () { function DateFFilterComponent() { this.filter = new EventEmitter(); this.minDay = ''; this.minMonth = ''; this.minYear = ''; this.maxDay = ''; this.maxMonth = ''; this.maxYear = ''; } /** * @param {?} mode * @param {?} max * @param {?} event * @return {?} */ DateFFilterComponent.prototype.onKeyUp = /** * @param {?} mode * @param {?} max * @param {?} event * @return {?} */ function (mode, max, event) { // Ignore if Delete or Backspace if (event.keyCode !== 8 && event.keyCode !== 46) { // filter letters and Trim this[mode] = this[mode].match(/[0-9]*/).join('').substring(0, max); // Move focus for UX if (mode === 'minDay' && (this[mode].length === 2 || event.keyCode === 39)) { this._elMinMonthRef.nativeElement.focus(); } else if (mode === 'minMonth' && (this[mode].length === 2 || event.keyCode === 39)) { this._elMinYearRef.nativeElement.focus(); } else if (mode === 'minYear' && (this[mode].length === 4 || event.keyCode === 39)) { this._elMaxDayRef.nativeElement.focus(); } else if (mode === 'maxDay' && (this[mode].length === 2 || event.keyCode === 39)) { this._elMaxMonthRef.nativeElement.focus(); } else if (mode === 'maxMonth' && (this[mode].length === 2 || event.keyCode === 39)) { this._elMaxYearRef.nativeElement.focus(); } else if (mode === 'maxYear' && (this[mode].length === 4 || event.keyCode === 39)) { this._elMinDayRef.nativeElement.focus(); } } if (this.source === 'frontend') { /** @type {?} */ var fn = function (name, minDay, minMonth, minYear, maxDay, maxMonth, maxYear) { return function (d) { return ((/** @type {?} */ (d))).filter(function (x) { console.log(name, minDay, minMonth, minYear, maxDay, maxMonth, maxYear); /** @type {?} */ var date = new Date(x[name]); return (minDay.length > 0 ? Number(minDay) <= date.getDate() : true) && (minMonth.length > 0 ? Number(minMonth) <= date.getMonth() + 1 : true) && (minYear.length > 0 ? Number(minYear) <= date.getFullYear() : true) && (maxDay.length > 0 ? Number(maxDay) >= date.getDate() : true) && (maxMonth.length > 0 ? Number(maxMonth) >= date.getMonth() + 1 : true) && (maxYear.length > 0 ? Number(maxYear) >= date.getFullYear() : true); }); }; }; this.filter.emit({ columnName: this.columnName, type: 'date', apply: fn(this.columnName, this.minDay, this.minMonth, this.minYear, this.maxDay, this.maxMonth, this.maxYear) }); } else { /** @type {?} */ var result = { minDay: this.minDay, minMonth: this.minMonth, minYear: this.minYear, maxDay: this.maxDay, maxMonth: this.maxMonth, maxYear: this.maxYear }; this.filter.emit({ columnName: this.columnName, type: 'date', apply: result }); } }; /** * @return {?} */ DateFFilterComponent.prototype.reset = /** * @return {?} */ function () { this.minDay = ''; this.minMonth = ''; this.minYear = ''; this.maxDay = ''; this.maxMonth = ''; this.maxYear = ''; this.filter.emit({ columnName: this.columnName, apply: null }); }; DateFFilterComponent.decorators = [ { type: Component, args: [{ template: "\n\n <table class='ft-ffilter-table ft-ffilter-date-table'>\n <tr class='ft-ffilter-column'>\n <td class='ft-ffilter-row ft-ffilter-dd-row'>\n <input class=\"ft-i ft-i-ffilter ft-i-ffilter-day\" type='text' placeholder='dd' [(ngModel)]='minDay' (keyup)='onKeyUp(\"minDay\", 2, $event)' #minDayRef />\n </td>\n <td class='ft-ffilter-row ft-ffilter-mm-row'>\n <input class=\"ft-i ft-i-ffilter ft-i-ffilter-month\" type='text' placeholder='mm' [(ngModel)]='minMonth' (keyup)='onKeyUp(\"minMonth\", 2, $event)' #minMonthRef />\n </td>\n <td class='ft-ffilter-row ft-ffilter-yyyy-row'>\n <input class=\"ft-i ft-i-ffilter ft-i-ffilter-year\" type='text' placeholder='yyyy' [(ngModel)]='minYear' (keyup)='onKeyUp(\"minYear\", 4, $event)' #minYearRef />\n </td>\n </tr>\n <tr class='ft-ffilter-column'>\n <td class='ft-ffilter-row ft-ffilter-dd-row'>\n <input class=\"ft-i ft-i-ffilter ft-i-ffilter-day\" type='text' placeholder='dd' [(ngModel)]='maxDay' (keyup)='onKeyUp(\"maxDay\" , 2, $event)' #maxDayRef />\n </td>\n <td class='ft-ffilter-row ft-ffilter-mm-row'>\n <input class=\"ft-i ft-i-ffilter ft-i-ffilter-month\" type='text' placeholder='mm' [(ngModel)]='maxMonth' (keyup)='onKeyUp(\"maxMonth\", 2, $event)' #maxMonthRef />\n </td>\n <td class='ft-ffilter-row ft-ffilter-yyyy-row'>\n <input class=\"ft-i ft-i-ffilter ft-i-ffilter-year\" type='text' placeholder='yyyy' [(ngModel)]='maxYear' (keyup)='onKeyUp(\"maxYear\", 4, $event)' #maxYearRef />\n </td>\n </tr>\n</table>\n <!--\n <div class='ft-ffilter'>\n <div class=\"ft-filter-date ft-div1-ffilter\">\n <input class=\"ft-i ft-i-filter ft-i-filter-day\" type='text' placeholder='dd' [(ngModel)]='minDay' (keyup)='onKeyUp(\"minDay\", 2, $event)' #minDayRef />\n <input class=\"ft-i ft-i-filter ft-i-filter-month\" type='text' placeholder='mm' [(ngModel)]='minMonth' (keyup)='onKeyUp(\"minMonth\", 2, $event)' #minMonthRef />\n <input class=\"ft-i ft-i-filter ft-i-filter-year\" type='text' placeholder='yyyy' [(ngModel)]='minYear' (keyup)='onKeyUp(\"minYear\", 4, $event)' #minYearRef />\n </div>\n <div class=\"ft-filter-date ft-div2-ffilter\">\n <input class=\"ft-i ft-i-filter ft-i-filter-day\" type='text' placeholder='dd' [(ngModel)]='maxDay' (keyup)='onKeyUp(\"maxDay\" , 2, $event)' #maxDayRef />\n <input class=\"ft-i ft-i-filter ft-i-filter-month\" type='text' placeholder='mm' [(ngModel)]='maxMonth' (keyup)='onKeyUp(\"maxMonth\", 2, $event)' #maxMonthRef />\n <input class=\"ft-i ft-i-filter ft-i-filter-year\" type='text' placeholder='yyyy' [(ngModel)]='maxYear' (keyup)='onKeyUp(\"maxYear\", 4, $event)' #maxYearRef />\n </div>\n </div>\n\n -->\n ", styles: ["\n :host { flex:1;\n }"] }] } ]; DateFFilterComponent.propDecorators = { _elMinDayRef: [{ type: ViewChild, args: ["minDayRef",] }], _elMinMonthRef: [{ type: ViewChild, args: ["minMonthRef",] }], _elMinYearRef: [{ type: ViewChild, args: ["minYearRef",] }], _elMaxDayRef: [{ type: ViewChild, args: ["maxDayRef",] }], _elMaxMonthRef: [{ type: ViewChild, args: ["maxMonthRef",] }], _elMaxYearRef: [{ type: ViewChild, args: ["maxYearRef",] }], source: [{ type: Input }], otherData: [{ type: Input }], columnName: [{ type: Input }], filter: [{ type: Output }] }; return DateFFilterComponent; }()); export { DateFFilterComponent }; if (false) { /** @type {?} */ DateFFilterComponent.prototype._elMinDayRef; /** @type {?} */ DateFFilterComponent.prototype._elMinMonthRef; /** @type {?} */ DateFFilterComponent.prototype._elMinYearRef; /** @type {?} */ DateFFilterComponent.prototype._elMaxDayRef; /** @type {?} */ DateFFilterComponent.prototype._elMaxMonthRef; /** @type {?} */ DateFFilterComponent.prototype._elMaxYearRef; /** @type {?} */ DateFFilterComponent.prototype.source; /** @type {?} */ DateFFilterComponent.prototype.otherData; /** @type {?} */ DateFFilterComponent.prototype.columnName; /** @type {?} */ DateFFilterComponent.prototype.filter; /** @type {?} */ DateFFilterComponent.prototype.minDay; /** @type {?} */ DateFFilterComponent.prototype.minMonth; /** @type {?} */ DateFFilterComponent.prototype.minYear; /** @type {?} */ DateFFilterComponent.prototype.maxDay; /** @type {?} */ DateFFilterComponent.prototype.maxMonth; /** @type {?} */ DateFFilterComponent.prototype.maxYear; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZWZmaWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZnRhYmxlLyIsInNvdXJjZXMiOlsibGliL2ZmaWx0ZXIvZmlsdGVycy9kYXRlZmZpbHRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJdEQ7SUFBQTtRQThEWSxXQUFNLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFHdkQsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxZQUFPLEdBQUcsRUFBRSxDQUFDO0lBOER0QixDQUFDOzs7Ozs7O0lBNURDLHNDQUFPOzs7Ozs7SUFBUCxVQUFRLElBQVksRUFBRSxHQUFXLEVBQUUsS0FBSztRQUN0QyxnQ0FBZ0M7UUFDaEMsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLEVBQUUsRUFBRTtZQUMvQywwQkFBMEI7WUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFbkUsb0JBQW9CO1lBQ3BCLElBQUksSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQzFFLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzNDO2lCQUNJLElBQUksSUFBSSxLQUFLLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQ2pGLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzFDO2lCQUNJLElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQ2hGLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ3pDO2lCQUNJLElBQUksSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQy9FLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzNDO2lCQUNJLElBQUksSUFBSSxLQUFLLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDLEVBQUU7Z0JBQ2pGLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzFDO2lCQUNJLElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxDQUFD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RW5DLHNDQUE4RDs7SUFHOUQsc0NBQW1COztJQUNuQix3Q0FBcUI7O0lBQ3JCLHVDQUFvQjs7SUFDcEIsc0NBQW1COztJQUNuQix3Q0FBcUI7O0lBQ3JCLHVDQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFZpZXdDaGlsZCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgRkZpbHRlckJhc2UgfSBmcm9tICcuL2ZmaWx0ZXIuYmFzZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZTogYFxyXG5cclxuICA8dGFibGUgY2xhc3M9J2Z0LWZmaWx0ZXItdGFibGUgZnQtZmZpbHRlci1kYXRlLXRhYmxlJz5cclxuICA8dHIgY2xhc3M9J2Z0LWZmaWx0ZXItY29sdW1uJz5cclxuICAgICAgPHRkIGNsYXNzPSdmdC1mZmlsdGVyLXJvdyAgZnQtZmZpbHRlci1kZC1yb3cnPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZnQtaSBmdC1pLWZmaWx0ZXIgZnQtaS1mZmlsdGVyLWRheVwiIHR5cGU9J3RleHQnICBwbGFjZWhvbGRlcj0nZGQnICAgIFsobmdNb2RlbCldPSdtaW5EYXknICAgKGtleXVwKT0nb25LZXlVcChcIm1pbkRheVwiLCAgIDIsICRldmVudCknICAjbWluRGF5UmVmIC8+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICAgIDx0ZCBjbGFzcz0nZnQtZmZpbHRlci1yb3cgIGZ0LWZmaWx0ZXItbW0tcm93Jz5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZ0LWkgZnQtaS1mZmlsdGVyIGZ0LWktZmZpbHRlci1tb250aFwiIHR5cGU9J3RleHQnICBwbGFjZWhvbGRlcj0nbW0nICAgIFsobmdNb2RlbCldPSdtaW5Nb250aCcgKGtleXVwKT0nb25LZXlVcChcIm1pbk1vbnRoXCIsIDIsICRldmVudCknICNtaW5Nb250aFJlZiAvPlxyXG4gICAgICA8L3RkPlxyXG4gICAgICA8dGQgY2xhc3M9J2Z0LWZmaWx0ZXItcm93ICBmdC1mZmlsdGVyLXl5eXktcm93Jz5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZ0LWkgZnQtaS1mZmlsdGVyIGZ0LWktZmZpbHRlci15ZWFyXCIgdHlwZT0ndGV4dCcgIHBsYWNlaG9sZGVyPSd5eXl5JyAgWyhuZ01vZGVsKV09J21pblllYXInICAoa2V5dXApPSdvbktleVVwKFwibWluWWVhclwiLCAgNCwgJGV2ZW50KScgICAjbWluWWVhclJlZiAvPlxyXG4gICAgICA8L3RkPlxyXG4gIDwvdHI+XHJcbiAgPHRyIGNsYXNzPSdmdC1mZmlsdGVyLWNvbHVtbic+XHJcbiAgICAgIDx0ZCBjbGFzcz0nZnQtZmZpbHRlci1yb3cgIGZ0LWZmaWx0ZXItZGQtcm93Jz5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZ0LWkgZnQtaS1mZmlsdGVyIGZ0LWktZmZpbHRlci1kYXlcIiB0eXBlPSd0ZXh0JyAgcGxhY2Vob2xkZXI9J2RkJyAgICBbKG5nTW9kZWwpXT0nbWF4RGF5JyAgIChrZXl1cCk9J29uS2V5VXAoXCJtYXhEYXlcIiAsICAyLCAkZXZlbnQpJyAgI21heERheVJlZiAvPlxyXG4gICAgICA8L3RkPlxyXG4gICAgICA8dGQgY2xhc3M9J2Z0LWZmaWx0ZXItcm93ICBmdC1mZmlsdGVyLW1tLXJvdyc+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmdC1pIGZ0LWktZmZpbHRlciBmdC1pLWZmaWx0ZXItbW9udGhcIiB0eXBlPSd0ZXh0JyAgcGxhY2Vob2xkZXI9J21tJyAgICBbKG5nTW9kZWwpXT0nbWF4TW9udGgnIChrZXl1cCk9J29uS2V5VXAoXCJtYXhNb250aFwiLCAyLCAkZXZlbnQpJyAgI21heE1vbnRoUmVmIC8+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICAgIDx0ZCBjbGFzcz0nZnQtZmZpbHRlci1yb3cgIGZ0LWZmaWx0ZXIteXl5eS1yb3cnPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiZnQtaSBmdC1pLWZmaWx0ZXIgZnQtaS1mZmlsdGVyLXllYXJcIiB0eXBlPSd0ZXh0JyAgcGxhY2Vob2xkZXI9J3l5eXknICBbKG5nTW9kZWwpXT0nbWF4WWVhcicgIChrZXl1cCk9J29uS2V5VXAoXCJtYXhZZWFyXCIsICA0LCAkZXZlbnQpJyAgI21heFllYXJSZWYgLz5cclxuICAgICAgPC90ZD5cclxuICA8L3RyPlxyXG48L3RhYmxlPlxyXG4gIDwhLS1cclxuICA8ZGl2IGNsYXNzPSdmdC1mZmlsdGVyJz5cclxuICAgIDxkaXYgY2xhc3M9XCJmdC1maWx0ZXItZGF0ZSBmdC1kaXYxLWZmaWx0ZXJcIj5cclxuICAgIDxpbnB1dCBjbGFzcz1cImZ0LWkgZnQtaS1maWx0ZXIgZnQtaS1maWx0ZXItZGF5XCIgdHlwZT0ndGV4dCcgIHBsYWNlaG9sZGVyPSdkZCcgICAgWyhuZ01vZGVsKV09J21pbkRheScgICAoa2V5dXApPSdvbktleVVwKFwibWluRGF5XCIsICAgMiwgJGV2ZW50KScgICNtaW5EYXlSZWYgLz5cclxuICAgIDxpbnB1dCBjbGFzcz1cImZ0LWkgZnQtaS1maWx0ZXIgZnQtaS1maWx0ZXItbW9udGhcIiB0eXBlPSd0ZXh0JyAgcGxhY2Vob2xkZXI9J21tJyAgICBbKG5nTW9kZWwpXT0nbWluTW9udGgnIChrZXl1cCk9J29uS2V5VXAoXCJtaW5Nb250aFwiLCAyLCAkZXZlbnQpJyAjbWluTW9udGhSZWYgLz5cclxuICAgIDxpbnB1dCBjbGFzcz1cImZ0LWkgZnQtaS1maWx0ZXIgZnQtaS1maWx0ZXIteWVhclwiIHR5cGU9J3RleHQnICBwbGFjZWhvbGRlcj0neXl5eScgIFsobmdNb2RlbCldPSdtaW5ZZWFyJyAgKGtleXVwKT0nb25LZXlVcChcIm1pblllYXJcIiwgIDQsICRldmVudCknICAgI21pblllYXJSZWYgLz5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImZ0LWZpbHRlci1kYXRlIGZ0LWRpdjItZmZpbHRlclwiPlxyXG4gICAgPGlucHV0IGNsYXNzPVwiZnQtaSBmdC1pLWZpbHRlciBmdC1pLWZpbHRlci1kYXlcIiB0eXBlPSd0ZXh0JyAgcGxhY2Vob2xkZXI9J2RkJyAgICBbKG5nTW9kZWwpXT0nbWF4RGF5JyAgIChrZXl1cCk9J29uS2V5VXAoXCJtYXhEYXlcIiAsICAyLCAkZXZlbnQpJyAgI21heERheVJlZiAvPlxyXG4gICAgPGlucHV0IGNsYXNzPVwiZnQtaSBmdC1pLWZpbHRlciBmdC1pLWZpbHRlci1tb250aFwiIHR5cGU9J3RleHQnICBwbGFjZWhvbGRlcj0nbW0nICAgIFsobmdNb2RlbCldPSdtYXhNb250aCcgKGtleXVwKT0nb25LZXlVcChcIm1heE1vbnRoXCIsIDIsICRldmVudCknICAjbWF4TW9udGhSZWYgLz5cclxuICAgIDxpbnB1dCBjbGFzcz1cImZ0LWkgZnQtaS1maWx0ZXIgZnQtaS1maWx0ZXIteWVhclwiIHR5cGU9J3RleHQnICBwbGFjZWhvbGRlcj0neXl5eScgIFsobmdNb2RlbCldPSdtYXhZZWFyJyAgKGtleXVwKT0nb25LZXlVcChcIm1heFllYXJcIiwgIDQsICRldmVudCknICAjbWF4WWVhclJlZiAvPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIC0tPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYFxyXG4gIDpob3N0IHsgZmxleDoxO1xyXG4gIH1gXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIERhdGVGRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgRkZpbHRlckJhc2Uge1xyXG4gIEBWaWV3Q2hpbGQoXCJtaW5EYXlSZWZcIikgX2VsTWluRGF5UmVmOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoXCJtaW5Nb250aFJlZlwiKSBfZWxNaW5Nb250aFJlZjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKFwibWluWWVhclJlZlwiKSBfZWxNaW5ZZWFyUmVmOiBFbGVtZW50UmVmO1xyXG5cclxuICBAVmlld0NoaWxkKFwibWF4RGF5UmVmXCIpIF9lbE1heERheVJlZjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKFwibWF4TW9udGhSZWZcIikgX2VsTWF4TW9udGhSZWY6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZChcIm1heFllYXJSZWZcIikgX2VsTWF4WWVhclJlZjogRWxlbWVudFJlZjtcclxuXHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyBzb3VyY2U6IHN0cmluZztcclxuICBASW5wdXQoKSBwdWJsaWMgb3RoZXJEYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgcHVibGljIGNvbHVtbk5hbWU6IHN0cmluZztcclxuXHJcbiAgQE91dHB1dCgpIGZpbHRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcblxyXG4gIHB1YmxpYyBtaW5EYXkgPSAnJztcclxuICBwdWJsaWMgbWluTW9udGggPSAnJztcclxuICBwdWJsaWMgbWluWWVhciA9ICcnO1xyXG4gIHB1YmxpYyBtYXhEYXkgPSAnJztcclxuICBwdWJsaWMgbWF4TW9udGggPSAnJztcclxuICBwdWJsaWMgbWF4WWVhciA9ICcnO1xyXG5cclxuICBvbktleVVwKG1vZGU6IHN0cmluZywgbWF4OiBudW1iZXIsIGV2ZW50KSB7XHJcbiAgICAvLyBJZ25vcmUgaWYgRGVsZXRlIG9yIEJhY2tzcGFjZVxyXG4gICAgaWYgKGV2ZW50LmtleUNvZGUgIT09IDggJiYgZXZlbnQua2V5Q29kZSAhPT0gNDYpIHtcclxuICAgICAgLy8gZmlsdGVyIGxldHRlcnMgYW5kIFRyaW1cclxuICAgICAgdGhpc1ttb2RlXSA9IHRoaXNbbW9kZV0ubWF0Y2goL1swLTldKi8pLmpvaW4oJycpLnN1YnN0cmluZygwLCBtYXgpO1xyXG5cclxuICAgICAgLy8gTW92ZSBmb2N1cyBmb3IgVVhcclxuICAgICAgaWYgKG1vZGUgPT09ICdtaW5EYXknICYmICh0aGlzW21vZGVdLmxlbmd0aCA9PT0gMiB8fCBldmVudC5rZXlDb2RlID09PSAzOSkpIHtcclxuICAgICAgICB0aGlzLl9lbE1pbk1vbnRoUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChtb2RlID09PSAnbWluTW9udGgnICYmICh0aGlzW21vZGVdLmxlbmd0aCA9PT0gMiB8fCBldmVudC5rZXlDb2RlID09PSAzOSkpIHtcclxuICAgICAgICB0aGlzLl9lbE1pblllYXJSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKG1vZGUgPT09ICdtaW5ZZWFyJyAmJiAodGhpc1ttb2RlXS5sZW5ndGggPT09IDQgfHwgZXZlbnQua2V5Q29kZSA9PT0gMzkpKSB7XHJcbiAgICAgICAgdGhpcy5fZWxNYXhEYXlSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKG1vZGUgPT09ICdtYXhEYXknICYmICh0aGlzW21vZGVdLmxlbmd0aCA9PT0gMiB8fCBldmVudC5rZXlDb2RlID09PSAzOSkpIHtcclxuICAgICAgICB0aGlzLl9lbE1heE1vbnRoUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChtb2RlID09PSAnbWF4TW9udGgnICYmICh0aGlzW21vZGVdLmxlbmd0aCA9PT0gMiB8fCBldmVudC5rZXlDb2RlID09PSAzOSkpIHtcclxuICAgICAgICB0aGlzLl9lbE1heFllYXJSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKG1vZGUgPT09ICdtYXhZZWFyJyAmJiAodGhpc1ttb2RlXS5sZW5ndGggPT09IDQgfHwgZXZlbnQua2V5Q29kZSA9PT0gMzkpKSB7XHJcbiAgICAgICAgdGhpcy5fZWxNaW5EYXlSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc291cmNlID09PSAnZnJvbnRlbmQnKSB7XHJcbiAgICAgIGNvbnN0IGZuID0gZnVuY3Rpb24gKG5hbWUsIG1pbkRheSwgbWluTW9udGgsIG1pblllYXIsIG1heERheSwgbWF4TW9udGgsIG1heFllYXIpIHtcclxuICAgICAgICByZXR1cm4gZCA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKDxhbnlbXT5kKS5maWx0ZXIoeCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG5hbWUsIG1pbkRheSwgbWluTW9udGgsIG1pblllYXIsIG1heERheSwgbWF4TW9udGgsIG1heFllYXIpO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeFtuYW1lXSk7XHJcbiAgICAgICAgICAgIHJldHVybiAobWluRGF5Lmxlbmd0aCA+IDAgPyBOdW1iZXIobWluRGF5KSA8PSBkYXRlLmdldERhdGUoKSA6IHRydWUpICYmXHJcbiAgICAgICAgICAgICAgKG1pbk1vbnRoLmxlbmd0aCA+IDAgPyBOdW1iZXIobWluTW9udGgpIDw9IGRhdGUuZ2V0TW9udGgoKSArIDEgOiB0cnVlKSAmJlxyXG4gICAgICAgICAgICAgIChtaW5ZZWFyLmxlbmd0aCA+IDAgPyBOdW1iZXIobWluWWVhcikgPD0gZGF0ZS5nZXRGdWxsWWVhcigpIDogdHJ1ZSkgJiZcclxuICAgICAgICAgICAgICAobWF4RGF5Lmxlbmd0aCA+IDAgPyBOdW1iZXIobWF4RGF5KSA+PSBkYXRlLmdldERhdGUoKSA6IHRydWUpICYmXHJcbiAgICAgICAgICAgICAgKG1heE1vbnRoLmxlbmd0aCA+IDAgPyBOdW1iZXIobWF4TW9udGgpID49IGRhdGUuZ2V0TW9udGgoKSArIDEgOiB0cnVlKSAmJlxyXG4gICAgICAgICAgICAgIChtYXhZZWFyLmxlbmd0aCA+IDAgPyBOdW1iZXIobWF4WWVhcikgPj0gZGF0ZS5nZXRGdWxsWWVhcigpIDogdHJ1ZSlcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLmZpbHRlci5lbWl0KHsgY29sdW1uTmFtZTogdGhpcy5jb2x1bW5OYW1lLCB0eXBlOiAnZGF0ZScsIGFwcGx5OiBmbih0aGlzLmNvbHVtbk5hbWUsIHRoaXMubWluRGF5LCB0aGlzLm1pbk1vbnRoLCB0aGlzLm1pblllYXIsIHRoaXMubWF4RGF5LCB0aGlzLm1heE1vbnRoLCB0aGlzLm1heFllYXIpIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdmFyIHJlc3VsdCA9IHsgbWluRGF5OiB0aGlzLm1pbkRheSwgbWluTW9udGg6IHRoaXMubWluTW9udGgsIG1pblllYXI6IHRoaXMubWluWWVhciwgbWF4RGF5OiB0aGlzLm1heERheSwgbWF4TW9udGg6IHRoaXMubWF4TW9udGgsIG1heFllYXI6IHRoaXMubWF4WWVhciB9O1xyXG4gICAgICB0aGlzLmZpbHRlci5lbWl0KHsgY29sdW1uTmFtZTogdGhpcy5jb2x1bW5OYW1lLCB0eXBlOiAnZGF0ZScsIGFwcGx5OiByZXN1bHQgfSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICB0aGlzLm1pbkRheSA9ICcnO1xyXG4gICAgdGhpcy5taW5Nb250aCA9ICcnO1xyXG4gICAgdGhpcy5taW5ZZWFyID0gJyc7XHJcbiAgICB0aGlzLm1heERheSA9ICcnO1xyXG4gICAgdGhpcy5tYXhNb250aCA9ICcnO1xyXG4gICAgdGhpcy5tYXhZZWFyID0gJyc7XHJcbiAgICB0aGlzLmZpbHRlci5lbWl0KHsgY29sdW1uTmFtZTogdGhpcy5jb2x1bW5OYW1lLCBhcHBseTogbnVsbCB9KTtcclxuICB9XHJcbn1cclxuIl19