UNPKG

ftable

Version:
797 lines (788 loc) 269 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('rxjs/operators'), require('@angular/common'), require('@angular/forms'), require('thenby'), require('rxjs'), require('@angular/core'), require('@angular/common/http')) : typeof define === 'function' && define.amd ? define('ftable', ['exports', 'rxjs/operators', '@angular/common', '@angular/forms', 'thenby', 'rxjs', '@angular/core', '@angular/common/http'], factory) : (factory((global.ftable = {}),global.rxjs.operators,global.ng.common,global.ng.forms,global.thenby,global.rxjs,global.ng.core,global.ng.common.http)); }(this, (function (exports,operators,common,forms,thenby,rxjs,core,http) { 'use strict'; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var FFilterBase = /** @class */ (function () { function FFilterBase() { this.filter = new core.EventEmitter(); } /** * @return {?} */ FFilterBase.prototype.reset = /** * @return {?} */ function () { }; FFilterBase.propDecorators = { source: [{ type: core.Input }], otherData: [{ type: core.Input }], columnName: [{ type: core.Input }], filter: [{ type: core.Output }] }; return FFilterBase; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ // import { initDomAdapter } from '@angular/platyform-browser/src/browser'; var CheckBoxFFilterComponent = /** @class */ (function () { function CheckBoxFFilterComponent() { this.filter = new core.EventEmitter(); this.values = []; } /** * @return {?} */ CheckBoxFFilterComponent.prototype.ngOnInit = /** * @return {?} */ function () { this.initData(); }; /** * @private * @return {?} */ CheckBoxFFilterComponent.prototype.initData = /** * @private * @return {?} */ function () { this.values = this.otherData.map(function (x) { /** @type {?} */ var result = {}; result['value'] = x; result['checked'] = true; return result; }); }; /** * @param {?} index * @param {?} value * @param {?} event * @return {?} */ CheckBoxFFilterComponent.prototype.checkBoxClicked = /** * @param {?} index * @param {?} value * @param {?} event * @return {?} */ function (index, value, event) { if (this.source === 'frontend') { /** @type {?} */ var fn = function (name, values) { return function (d) { if (values.length > 0) { return (( /** @type {?} */(d))).filter(function (x) { /** @type {?} */ var i = values.map(function (e) { return e.value; }).indexOf(String(x[name])); return i !== -1 && values[i].checked === true; }); } else { return (( /** @type {?} */(d))); } }; }; this.filter.emit({ columnName: this.columnName, apply: fn(this.columnName, this.values) }); } else { this.values[index].checked = !this.values[index].checked; /** @type {?} */ var filtered = this.values.filter(function (x) { return x.checked === true; }).map(function (a) { return a.value; }); /** @type {?} */ var result = { values: filtered }; this.filter.emit({ columnName: this.columnName, type: 'checkbox', apply: result }); } }; /** * @return {?} */ CheckBoxFFilterComponent.prototype.reset = /** * @return {?} */ function () { this.initData(); this.filter.emit({ columnName: this.columnName, apply: null }); }; CheckBoxFFilterComponent.decorators = [ { type: core.Component, args: [{ template: "\n\n <table class='ft-ffilter-table'>\n \n <tr class='ft-ffilter-column' *ngFor=\"let value of otherData;let index = index\">\n <td class='ft-ffilter-row'>\n <span><input class=\"ft-c\" type=\"checkbox\"[name]=\"columnName\" (click)='checkBoxClicked(index, value ,$event)' value=\"value\" [(ngModel)]='values[index].checked'> {{ value }}</span>\n </td>\n </tr>\n</table>\n <!--\n <div class='ft-ffilter ft-c-filter' *ngFor=\"let value of otherData;let index = index\">\n <input class='ft-c' type=\"checkbox\" [name]=\"columnName\" (click)='checkBoxClicked(index, value ,$event)' value=\"value\" [(ngModel)]='values[index].checked'> {{ value }}<br>\n </div> -->\n " }] } ]; /** @nocollapse */ CheckBoxFFilterComponent.ctorParameters = function () { return []; }; CheckBoxFFilterComponent.propDecorators = { source: [{ type: core.Input }], otherData: [{ type: core.Input }], columnName: [{ type: core.Input }], filter: [{ type: core.Output }] }; return CheckBoxFFilterComponent; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var DateFFilterComponent = /** @class */ (function () { function DateFFilterComponent() { this.filter = new core.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: core.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: core.ViewChild, args: ["minDayRef",] }], _elMinMonthRef: [{ type: core.ViewChild, args: ["minMonthRef",] }], _elMinYearRef: [{ type: core.ViewChild, args: ["minYearRef",] }], _elMaxDayRef: [{ type: core.ViewChild, args: ["maxDayRef",] }], _elMaxMonthRef: [{ type: core.ViewChild, args: ["maxMonthRef",] }], _elMaxYearRef: [{ type: core.ViewChild, args: ["maxYearRef",] }], source: [{ type: core.Input }], otherData: [{ type: core.Input }], columnName: [{ type: core.Input }], filter: [{ type: core.Output }] }; return DateFFilterComponent; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var EmptyFFilterComponent = /** @class */ (function () { function EmptyFFilterComponent() { this.filter = new core.EventEmitter(); } /** * @return {?} */ EmptyFFilterComponent.prototype.reset = /** * @return {?} */ function () { }; EmptyFFilterComponent.decorators = [ { type: core.Component, args: [{ template: "\n\n " }] } ]; EmptyFFilterComponent.propDecorators = { source: [{ type: core.Input }], otherData: [{ type: core.Input }], columnName: [{ type: core.Input }], filter: [{ type: core.Output }] }; return EmptyFFilterComponent; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var NumberFFilterComponent = /** @class */ (function () { function NumberFFilterComponent() { this.filter = new core.EventEmitter(); // Hold Inputted Values this.min = null; this.max = null; } /** * @param {?} mode * @param {?} event * @return {?} */ NumberFFilterComponent.prototype.numberKeyUp = /** * @param {?} mode * @param {?} event * @return {?} */ function (mode, event) { if (event.keyCode !== 8 && event.keyCode !== 46) { this[mode] = event.target.value; // Move focus for UX if (mode === 'min' && event.keyCode === 39) { this._elMaxRef.nativeElement.focus(); } else if (mode === 'max' && event.keyCode === 39) { this._elMinRef.nativeElement.focus(); } } if (this.source === 'frontend') { /** @type {?} */ var fn = function (name, searchMin, searchMax) { return function (d) { return (( /** @type {?} */(d))).filter(function (x) { return (searchMin ? searchMin <= Number(x[name]) : true) && (searchMax ? searchMax >= Number(x[name]) : true); }); }; }; this.filter.emit({ columnName: this.columnName, apply: fn(this.columnName, this.min, this.max) }); } else { /** @type {?} */ var result = { min: this.min, max: this.max }; this.filter.emit({ columnName: this.columnName, type: 'number', apply: result }); } }; /** * @return {?} */ NumberFFilterComponent.prototype.reset = /** * @return {?} */ function () { this.min = null; this.max = null; this.filter.emit({ columnName: this.columnName, apply: null }); }; NumberFFilterComponent.decorators = [ { type: core.Component, args: [{ template: "\n <table class='ft-ffilter-table'>\n <tr class='ft-ffilter-column'>\n <td class='ft-ffilter-row'>\n <input class=\"ft-i ft-i-ffilter ft-i-min\" type=\"number\" placeholder='>=' [(ngModel)]='min' (keyup)='numberKeyUp(\"min\",$event)' #minRef >\n </td>\n </tr>\n <tr class='ft-ffilter-column'>\n <td class='ft-ffilter-row'>\n <input class=\"ft-i ft-i-ffilter ft-i-max\" type=\"number\" placeholder='<=' [(ngModel)]='max' (keyup)='numberKeyUp(\"max\",$event)' #maxRef >\n </td>\n </tr>\n</table>\n\n <!--\n <div class=\"ft-ffilter\">\n <div class=\"ft-div1-ffilter\">\n <div class=\"ft-ffilter-prepend\">\n <span class=\"ft-ffilter-text\">&gt;=</span>\n </div>\n <input class=\"ft-i ft-i-ffilter ft-i-min\" type=\"number\" [(ngModel)]='min' (keyup)='numberKeyUp(\"min\",$event)' #minRef >\n <div class=\"ft-ffilter-append\">\n <span class=\"ft-ffilter-text\">&lt;=</span>\n </div>\n </div>\n\n <div class=\"ft-div2-ffilter\">\n <div class=\"ft-ffilter-prepend\">\n <span class=\"ft-filter-text\">&lt;=</span>\n </div>\n <input class=\"ft-i ft-i-filter ft-i-max\" type=\"number\" [(ngModel)]='max' (keyup)='numberKeyUp(\"max\",$event)' #maxRef >\n <div class=\"ft-ffilter-append\">\n <span class=\"ft-filter-text\">&gt;=</span>\n </div>\n </div>\n </div>\n -->\n ", styles: ["\n :host { flex:1;\n }"] }] } ]; NumberFFilterComponent.propDecorators = { _elMinRef: [{ type: core.ViewChild, args: ["minRef",] }], _elMaxRef: [{ type: core.ViewChild, args: ["maxRef",] }], source: [{ type: core.Input }], otherData: [{ type: core.Input }], columnName: [{ type: core.Input }], filter: [{ type: core.Output }] }; return NumberFFilterComponent; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var TextFFilterComponent = /** @class */ (function () { function TextFFilterComponent() { this.filter = new core.EventEmitter(); this.value = ''; } /** * @param {?} event * @return {?} */ TextFFilterComponent.prototype.onKeyUp = /** * @param {?} event * @return {?} */ function (event) { if (this.source === 'frontend') { /** @type {?} */ var fn = function (name, searchValue) { return function (d) { return (( /** @type {?} */(d))).filter(function (x) { return String(x[name]).toLowerCase().indexOf(String(searchValue).toLowerCase()) !== -1; }); }; }; this.filter.emit({ columnName: this.columnName, apply: fn(this.columnName, event.target.value) }); } else { /** @type {?} */ var result = { value: event.target.value }; this.filter.emit({ columnName: this.columnName, type: 'string', apply: result }); } }; /** * @return {?} */ TextFFilterComponent.prototype.reset = /** * @return {?} */ function () { this.value = ''; this.filter.emit({ columnName: this.columnName, apply: null }); }; TextFFilterComponent.decorators = [ { type: core.Component, args: [{ template: "\n <table class='ft-ffilter-table'>\n <tr class='ft-ffilter-column'>\n <td class='ft-ffilter-row'>\n <input class=\"ft-i ft-i-ffilter ft-i-ffilter-text\" type='text' [(ngModel)]='value' (keyup)='onKeyUp($event)'/>\n </td>\n </tr>\n</table>\n <!--\n <div class=\"ft-ffilter\">\n <div class=\"ft-div1-ffilter\">\n <input class=\"ft-i ft-i-ffilter ft-i-ffilter-text\" type='text' [(ngModel)]='value' (keyup)='onKeyUp($event)'/>\n </div>\n </div>\n -->\n ", styles: ["\n :host { flex:1;\n }"] }] } ]; TextFFilterComponent.propDecorators = { source: [{ type: core.Input }], otherData: [{ type: core.Input }], columnName: [{ type: core.Input }], filter: [{ type: core.Output }] }; return TextFFilterComponent; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var FFilterDirective = /** @class */ (function () { function FFilterDirective(viewContainerRef) { this.viewContainerRef = viewContainerRef; } FFilterDirective.decorators = [ { type: core.Directive, args: [{ selector: '[ffilter-host]', },] } ]; /** @nocollapse */ FFilterDirective.ctorParameters = function () { return [ { type: core.ViewContainerRef } ]; }; return FFilterDirective; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var FFilterComponent = /** @class */ (function () { function FFilterComponent(componentFactoryResolver) { this.componentFactoryResolver = componentFactoryResolver; this.debounce = 500; // Other data needed to be passed to filter this.filter = new core.EventEmitter(); } /** * @return {?} */ FFilterComponent.prototype.ngOnInit = /** * @return {?} */ function () { this.loadComponent(); }; /** * @return {?} */ FFilterComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { // clearInterval(this.interval); }; /** * @return {?} */ FFilterComponent.prototype.loadComponent = /** * @return {?} */ function () { var _this = this; // filter counter // Check if standard filters else load custom /** @type {?} */ var fftilter; if (this.filterType === 'string') { fftilter = TextFFilterComponent; } else if (this.filterType === 'number') { fftilter = NumberFFilterComponent; } else if (this.filterType === 'checkbox') { fftilter = CheckBoxFFilterComponent; } else if (this.filterType === 'date') { fftilter = DateFFilterComponent; } else if (typeof this.filterType !== 'string') { fftilter = this.filterType; } else { // No filter Filter fftilter = EmptyFFilterComponent; } /** @type {?} */ var componentFactory = this.componentFactoryResolver.resolveComponentFactory(fftilter); // get reference of insertion point through /** @type {?} */ var viewContainerRef = this.ffilterHost.viewContainerRef; viewContainerRef.clear(); // Create instance of component /** @type {?} */ var componentRef = viewContainerRef.createComponent(componentFactory); // Pass data to filters (( /** @type {?} */(componentRef.instance))).columnName = this.columnName; (( /** @type {?} */(componentRef.instance))).source = this.source; (( /** @type {?} */(componentRef.instance))).otherData = this.otherData; // Bubble filter event (( /** @type {?} */(componentRef.instance))).filter.pipe(operators.debounceTime(this.debounce)).subscribe(function (event) { _this.filter.emit(event); }); this.filterr = (( /** @type {?} */(componentRef.instance))); }; /** * @return {?} */ FFilterComponent.prototype.reset = /** * @return {?} */ function () { this.filterr.reset(); }; FFilterComponent.totalfilters = 0; FFilterComponent.decorators = [ { type: core.Component, args: [{ selector: 'ft-ffilter', template: "\n\n <ng-template ffilter-host></ng-template>\n " }] } ]; /** @nocollapse */ FFilterComponent.ctorParameters = function () { return [ { type: core.ComponentFactoryResolver } ]; }; FFilterComponent.propDecorators = { ffilterHost: [{ type: core.ViewChild, args: [FFilterDirective,] }], source: [{ type: core.Input }], columnName: [{ type: core.Input }], debounce: [{ type: core.Input }], filterType: [{ type: core.Input }], otherData: [{ type: core.Input }], filter: [{ type: core.Output }] }; return FFilterComponent; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var FExporterComponent = /** @class */ (function () { function FExporterComponent() { } /** * @return {?} */ FExporterComponent.prototype.generateFileName = /** * @return {?} */ function () { /** @type {?} */ var d = new Date(); return d.getFullYear() + d.getMonth() + d.getDate() + '_' + (d.getHours() + 1) + d.getMinutes() + d.getSeconds(); }; /** * @return {?} */ FExporterComponent.prototype.CSV = /** * @return {?} */ function () { /** @type {?} */ var filename = this.generateFileName() + ".csv"; /** @type {?} */ var properties = []; // console.log(this.data); /** @type {?} */ var text = ""; this.data.forEach(function (items) { for (var property in items) { if (items.hasOwnProperty(property)) { if (properties.indexOf(property) <= -1) properties.push(property); //console.log(property + " " + items[property]); text += items[property] + ","; } } text = text.slice(0, -1) + '\r\n'; }); text = properties.map(function (x) { return x.substr(0, 1).toUpperCase() + x.substr(1); }).join() + '\r\n' + text; /** @type {?} */ var blob = new Blob([text], { type: 'text/csv' }); if (window.navigator.msSaveOrOpenBlob) { window.navigator.msSaveBlob(blob, filename); } else { /** @type {?} */ var elem = window.document.createElement('a'); elem.href = window.URL.createObjectURL(blob); elem.download = filename; document.body.appendChild(elem); elem.click(); document.body.removeChild(elem); } }; /** * @return {?} */ FExporterComponent.prototype.COPY = /** * @return {?} */ function () { /** @type {?} */ var input = document.createElement("textarea"); /** @type {?} */ var properties = []; /** @type {?} */ var str = ""; this.data.forEach(function (items) { /** @type {?} */ var row = []; for (var property in items) { if (items.hasOwnProperty(property)) { if (properties.indexOf(property) <= -1) properties.push(property); row.push(items[property]); } } str += properties.map(function (x) { return x.substr(0, 1).toUpperCase() + x.substr(1); }).join() + '\r\n' + row.join(',') + '\r\n'; }); try { input.value = str; input.setAttribute('id', "t1"); document.body.appendChild(input); /** @type {?} */ var input1 = (( /** @type {?} */(document.getElementById("t1")))); input1.focus(); input1.select(); document.execCommand("copy", false, null); } catch (err) { console.log('Oops, unable to copy'); } document.body.removeChild(input); }; /** * @return {?} */ FExporterComponent.prototype.PRINT = /** * @return {?} */ function () { /** @type {?} */ var properties = []; /** @type {?} */ var doc = document.implementation.createDocument('http://www.w3.org/1999/xhtml', 'html', null); /** @type {?} */ var body = document.createElementNS('http://www.w3.org/1999/xhtml', 'body'); doc.documentElement.appendChild(body); /** @type {?} */ var table = document.createElement("table"); body.appendChild(table); /** @type {?} */ var tbody = document.createElement("tbody"); table.appendChild(tbody); this.data.forEach(function (items) { /** @type {?} */ var row = document.createElement("tr"); for (var property in items) { if (items.hasOwnProperty(property)) { // items.forEach(function (item) { /** @type {?} */ var cell = document.createElement("td"); if (properties.indexOf(property) <= -1) { properties.push(property); cell.textContent = property.substr(0, 1).toUpperCase() + property.substr(1); } else { cell.textContent = items[property]; } row.appendChild(cell); } } tbody.appendChild(row); }); /** @type {?} */ var pw = window.open("about:blank", "_new"); pw.document.open(); pw.document.write(new XMLSerializer().serializeToString(doc)); pw.print(); pw.close(); }; /** * @return {?} */ FExporterComponent.prototype.JSON = /** * @return {?} */ function () { /** @type {?} */ var filename = this.generateFileName() + ".json"; /** @type {?} */ var blob = new Blob([JSON.stringify(this.data)], { type: 'text/json' }); if (window.navigator.msSaveOrOpenBlob) { window.navigator.msSaveBlob(blob, filename); } else { /** @type {?} */ var elem = window.document.createElement('a'); elem.href = window.URL.createObjectURL(blob); elem.download = filename; document.body.appendChild(elem); elem.click(); document.body.removeChild(elem); } }; // XLSX /* Make the table for a fast CRC. */ // XLSX /* Make the table for a fast CRC. */ /** * @return {?} */ FExporterComponent.prototype.make_crc_table = // XLSX /* Make the table for a fast CRC. */ /** * @return {?} */ function () { /** @type {?} */ var crc_table = []; /** @type {?} */ var c; /** @type {?} */ var n; /** @type {?} */ var k; for (n = 0; n < 256; n++) { c = n; for (k = 0; k < 8; k++) { if ((c & 1) > 0) { c = (0xEDB88320 ^ (c >>> 1)) >>> 0; } else { c = (c >>> 1) >>> 0; } } crc_table[n] = c; } return crc_table; }; /** * @param {?} buf * @return {?} */ FExporterComponent.prototype.crc32 = /** * @param {?} buf * @return {?} */ function (buf) { /** @type {?} */ var crc_table = this.make_crc_table(); /** @type {?} */ var crc = 0x00; /** @type {?} */ var c = (crc ^ 0xFFFFFFFF); /** @type {?} */ var n; for (n = 0; n < buf.length; n++) { c = (crc_table[((c ^ (buf[n].charCodeAt(0))) & 0xFF)] ^ (c >>> 8)); } return (c ^ 0xFFFFFFFF) >>> 0; }; /** * @param {?} n * @return {?} */ FExporterComponent.prototype.numberToExcelLetters = /** * @param {?} n * @return {?} */ function (n) { /** @type {?} */ var quotient = Math.floor(n / 26); /** @type {?} */ var remainder = n % 26; /** @type {?} */ var result = ''; if (quotient > 0) result += this.numberToExcelLetters(quotient); if (remainder > 0) result += String.fromCharCode(64 + remainder); return result; }; //var content = '\x3C\x3F\x78\x6D\x6C\x20\x76\x65\x72\x73\x69\x6F\x6E\x3D\x22\x31\x2E\x30\x22\x20\x65\x6E\x63\x6F\x64\x69\x6E\x67\x3D\x22\x55\x54\x46\x2D\x38\x22\x20\x73\x74\x61\x6E\x64\x61\x6C\x6F\x6E\x65\x3D\x22\x79\x65\x73\x22\x3F\x3E\x0D\x0A\x3C\x73\x73\x74\x20\x78\x6D\x6C\x6E\x73\x3D\x22\x68\x74\x74\x70\x3A\x2F\x2F\x73\x63\x68\x65\x6D\x61\x73\x2E\x6F\x70\x65\x6E\x78\x6D\x6C\x66\x6F\x72\x6D\x61\x74\x73\x2E\x6F\x72\x67\x2F\x73\x70\x72\x65\x61\x64\x73\x68\x65\x65\x74\x6D\x6C\x2F\x32\x30\x30\x36\x2F\x6D\x61\x69\x6E\x22\x20\x63\x6F\x75\x6E\x74\x3D\x22\x31\x30\x30\x22\x20\x75\x6E\x69\x71\x75\x65\x43\x6F\x75\x6E\x74\x3D\x22\x31\x30\x30\x22\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x31\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x31\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x31\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x31\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x31\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x32\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x32\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x32\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x32\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x32\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x33\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x33\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x33\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x33\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x33\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x34\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x34\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x34\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x34\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x34\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x35\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x35\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x35\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x35\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x35\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x36\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x36\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x36\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x36\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x36\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x37\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x37\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x37\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x37\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x37\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x38\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x38\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x38\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x38\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x38\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x39\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x39\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x39\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x39\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x39\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x31\x30\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x31\x30\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x31\x30\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x31\x30\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x31\x30\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x31\x31\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x31\x31\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x31\x31\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x31\x31\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x31\x31\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x31\x32\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x31\x32\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x31\x32\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x31\x32\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x31\x32\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x31\x33\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x31\x33\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x31\x33\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x31\x33\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x31\x33\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x31\x34\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x31\x34\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x31\x34\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x31\x34\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x31\x34\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x31\x35\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x31\x35\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x31\x35\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x31\x35\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x31\x35\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x31\x36\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x31\x36\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x31\x36\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x31\x36\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x31\x36\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x31\x37\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x31\x37\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x31\x37\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x31\x37\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x31\x37\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x31\x38\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x31\x38\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x31\x38\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x31\x38\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x31\x38\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x31\x39\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x31\x39\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x31\x39\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x31\x39\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x31\x39\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x32\x30\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x32\x30\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x32\x30\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x32\x30\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x32\x30\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x2F\x73\x73\x74\x3E'; //var crc = 0x00; //console.log(crc32(crc, content).toString(16)); //var content = '\x3C\x3F\x78\x6D\x6C\x20\x76\x65\x72\x73\x69\x6F\x6E\x3D\x22\x31\x2E\x30\x22\x20\x65\x6E\x63\x6F\x64\x69\x6E\x67\x3D\x22\x55\x54\x46\x2D\x38\x22\x20\x73\x74\x61\x6E\x64\x61\x6C\x6F\x6E\x65\x3D\x22\x79\x65\x73\x22\x3F\x3E\x0D\x0A\x3C\x73\x73\x74\x20\x78\x6D\x6C\x6E\x73\x3D\x22\x68\x74\x74\x70\x3A\x2F\x2F\x73\x63\x68\x65\x6D\x61\x73\x2E\x6F\x70\x65\x6E\x78\x6D\x6C\x66\x6F\x72\x6D\x61\x74\x73\x2E\x6F\x72\x67\x2F\x73\x70\x72\x65\x61\x64\x73\x68\x65\x65\x74\x6D\x6C\x2F\x32\x30\x30\x36\x2F\x6D\x61\x69\x6E\x22\x20\x63\x6F\x75\x6E\x74\x3D\x22\x31\x30\x30\x22\x20\x75\x6E\x69\x71\x75\x65\x43\x6F\x75\x6E\x74\x3D\x22\x31\x30\x30\x22\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x31\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x31\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x31\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x31\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x31\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x32\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x32\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x32\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x32\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x32\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x33\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x33\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x33\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x33\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x33\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x34\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x34\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x34\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x34\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x34\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x35\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x35\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x35\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x35\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x35\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x36\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x36\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x36\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x36\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x36\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x37\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x37\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x37\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x37\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x37\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x38\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x38\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x38\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x44\x38\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x45\x38\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x41\x39\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x42\x39\x3C\x2F\x74\x3E\x3C\x2F\x73\x69\x3E\x3C\x73\x69\x3E\x3C\x74\x3E\x43\x39\x3C\x2F\x74\x3E