ftable
Version:
Angular 6/7 Tables
852 lines (835 loc) • 225 kB
JavaScript
import { debounceTime } from 'rxjs/operators';
import { CommonModule } from '@angular/common';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { firstBy } from 'thenby';
import { Subject, empty, of } from 'rxjs';
import { EventEmitter, Output, Input, Component, ViewChild, Directive, ViewContainerRef, ComponentFactoryResolver, ViewChildren, Injectable, NgModule } from '@angular/core';
import { HttpClient } from '@angular/common/http';
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
class FFilterBase {
constructor() {
this.filter = new EventEmitter();
}
/**
* @return {?}
*/
reset() { }
}
FFilterBase.propDecorators = {
source: [{ type: Input }],
otherData: [{ type: Input }],
columnName: [{ type: Input }],
filter: [{ type: Output }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
// import { initDomAdapter } from '@angular/platyform-browser/src/browser';
class CheckBoxFFilterComponent {
constructor() {
this.filter = new EventEmitter();
this.values = [];
}
/**
* @return {?}
*/
ngOnInit() {
this.initData();
}
/**
* @private
* @return {?}
*/
initData() {
this.values = this.otherData.map(x => {
/** @type {?} */
const result = {};
result['value'] = x;
result['checked'] = true;
return result;
});
}
/**
* @param {?} index
* @param {?} value
* @param {?} event
* @return {?}
*/
checkBoxClicked(index, value, event) {
if (this.source === 'frontend') {
/** @type {?} */
const fn = function (name, values) {
return d => {
if (values.length > 0) {
return ((/** @type {?} */ (d))).filter(x => {
/** @type {?} */
const i = values.map(e => 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(x => x.checked === true).map(a => a.value);
/** @type {?} */
var result = { values: filtered };
this.filter.emit({ columnName: this.columnName, type: 'checkbox', apply: result });
}
}
/**
* @return {?}
*/
reset() {
this.initData();
this.filter.emit({ columnName: this.columnName, apply: null });
}
}
CheckBoxFFilterComponent.decorators = [
{ type: Component, args: [{
template: `
<table class='ft-ffilter-table'>
<tr class='ft-ffilter-column' *ngFor="let value of otherData;let index = index">
<td class='ft-ffilter-row'>
<span><input class="ft-c" type="checkbox"[name]="columnName" (click)='checkBoxClicked(index, value ,$event)' value="value" [(ngModel)]='values[index].checked'> {{ value }}</span>
</td>
</tr>
</table>
<!--
<div class='ft-ffilter ft-c-filter' *ngFor="let value of otherData;let index = index">
<input class='ft-c' type="checkbox" [name]="columnName" (click)='checkBoxClicked(index, value ,$event)' value="value" [(ngModel)]='values[index].checked'> {{ value }}<br>
</div> -->
`
}] }
];
/** @nocollapse */
CheckBoxFFilterComponent.ctorParameters = () => [];
CheckBoxFFilterComponent.propDecorators = {
source: [{ type: Input }],
otherData: [{ type: Input }],
columnName: [{ type: Input }],
filter: [{ type: Output }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
class DateFFilterComponent {
constructor() {
this.filter = new EventEmitter();
this.minDay = '';
this.minMonth = '';
this.minYear = '';
this.maxDay = '';
this.maxMonth = '';
this.maxYear = '';
}
/**
* @param {?} mode
* @param {?} max
* @param {?} event
* @return {?}
*/
onKeyUp(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 {?} */
const fn = function (name, minDay, minMonth, minYear, maxDay, maxMonth, maxYear) {
return d => {
return ((/** @type {?} */ (d))).filter(x => {
console.log(name, minDay, minMonth, minYear, maxDay, maxMonth, maxYear);
/** @type {?} */
const 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 {?}
*/
reset() {
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: `
<table class='ft-ffilter-table ft-ffilter-date-table'>
<tr class='ft-ffilter-column'>
<td class='ft-ffilter-row ft-ffilter-dd-row'>
<input class="ft-i ft-i-ffilter ft-i-ffilter-day" type='text' placeholder='dd' [(ngModel)]='minDay' (keyup)='onKeyUp("minDay", 2, $event)' #minDayRef />
</td>
<td class='ft-ffilter-row ft-ffilter-mm-row'>
<input class="ft-i ft-i-ffilter ft-i-ffilter-month" type='text' placeholder='mm' [(ngModel)]='minMonth' (keyup)='onKeyUp("minMonth", 2, $event)' #minMonthRef />
</td>
<td class='ft-ffilter-row ft-ffilter-yyyy-row'>
<input class="ft-i ft-i-ffilter ft-i-ffilter-year" type='text' placeholder='yyyy' [(ngModel)]='minYear' (keyup)='onKeyUp("minYear", 4, $event)' #minYearRef />
</td>
</tr>
<tr class='ft-ffilter-column'>
<td class='ft-ffilter-row ft-ffilter-dd-row'>
<input class="ft-i ft-i-ffilter ft-i-ffilter-day" type='text' placeholder='dd' [(ngModel)]='maxDay' (keyup)='onKeyUp("maxDay" , 2, $event)' #maxDayRef />
</td>
<td class='ft-ffilter-row ft-ffilter-mm-row'>
<input class="ft-i ft-i-ffilter ft-i-ffilter-month" type='text' placeholder='mm' [(ngModel)]='maxMonth' (keyup)='onKeyUp("maxMonth", 2, $event)' #maxMonthRef />
</td>
<td class='ft-ffilter-row ft-ffilter-yyyy-row'>
<input class="ft-i ft-i-ffilter ft-i-ffilter-year" type='text' placeholder='yyyy' [(ngModel)]='maxYear' (keyup)='onKeyUp("maxYear", 4, $event)' #maxYearRef />
</td>
</tr>
</table>
<!--
<div class='ft-ffilter'>
<div class="ft-filter-date ft-div1-ffilter">
<input class="ft-i ft-i-filter ft-i-filter-day" type='text' placeholder='dd' [(ngModel)]='minDay' (keyup)='onKeyUp("minDay", 2, $event)' #minDayRef />
<input class="ft-i ft-i-filter ft-i-filter-month" type='text' placeholder='mm' [(ngModel)]='minMonth' (keyup)='onKeyUp("minMonth", 2, $event)' #minMonthRef />
<input class="ft-i ft-i-filter ft-i-filter-year" type='text' placeholder='yyyy' [(ngModel)]='minYear' (keyup)='onKeyUp("minYear", 4, $event)' #minYearRef />
</div>
<div class="ft-filter-date ft-div2-ffilter">
<input class="ft-i ft-i-filter ft-i-filter-day" type='text' placeholder='dd' [(ngModel)]='maxDay' (keyup)='onKeyUp("maxDay" , 2, $event)' #maxDayRef />
<input class="ft-i ft-i-filter ft-i-filter-month" type='text' placeholder='mm' [(ngModel)]='maxMonth' (keyup)='onKeyUp("maxMonth", 2, $event)' #maxMonthRef />
<input class="ft-i ft-i-filter ft-i-filter-year" type='text' placeholder='yyyy' [(ngModel)]='maxYear' (keyup)='onKeyUp("maxYear", 4, $event)' #maxYearRef />
</div>
</div>
-->
`,
styles: [`
:host { flex:1;
}`]
}] }
];
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 }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
class EmptyFFilterComponent {
constructor() {
this.filter = new EventEmitter();
}
/**
* @return {?}
*/
reset() { }
}
EmptyFFilterComponent.decorators = [
{ type: Component, args: [{
template: `
`
}] }
];
EmptyFFilterComponent.propDecorators = {
source: [{ type: Input }],
otherData: [{ type: Input }],
columnName: [{ type: Input }],
filter: [{ type: Output }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
class NumberFFilterComponent {
constructor() {
this.filter = new EventEmitter();
// Hold Inputted Values
this.min = null;
this.max = null;
}
/**
* @param {?} mode
* @param {?} event
* @return {?}
*/
numberKeyUp(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 {?} */
const fn = function (name, searchMin, searchMax) {
return d => {
return ((/** @type {?} */ (d))).filter(x => (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 {?}
*/
reset() {
this.min = null;
this.max = null;
this.filter.emit({ columnName: this.columnName, apply: null });
}
}
NumberFFilterComponent.decorators = [
{ type: Component, args: [{
template: `
<table class='ft-ffilter-table'>
<tr class='ft-ffilter-column'>
<td class='ft-ffilter-row'>
<input class="ft-i ft-i-ffilter ft-i-min" type="number" placeholder='>=' [(ngModel)]='min' (keyup)='numberKeyUp("min",$event)' #minRef >
</td>
</tr>
<tr class='ft-ffilter-column'>
<td class='ft-ffilter-row'>
<input class="ft-i ft-i-ffilter ft-i-max" type="number" placeholder='<=' [(ngModel)]='max' (keyup)='numberKeyUp("max",$event)' #maxRef >
</td>
</tr>
</table>
<!--
<div class="ft-ffilter">
<div class="ft-div1-ffilter">
<div class="ft-ffilter-prepend">
<span class="ft-ffilter-text">>=</span>
</div>
<input class="ft-i ft-i-ffilter ft-i-min" type="number" [(ngModel)]='min' (keyup)='numberKeyUp("min",$event)' #minRef >
<div class="ft-ffilter-append">
<span class="ft-ffilter-text"><=</span>
</div>
</div>
<div class="ft-div2-ffilter">
<div class="ft-ffilter-prepend">
<span class="ft-filter-text"><=</span>
</div>
<input class="ft-i ft-i-filter ft-i-max" type="number" [(ngModel)]='max' (keyup)='numberKeyUp("max",$event)' #maxRef >
<div class="ft-ffilter-append">
<span class="ft-filter-text">>=</span>
</div>
</div>
</div>
-->
`,
styles: [`
:host { flex:1;
}`]
}] }
];
NumberFFilterComponent.propDecorators = {
_elMinRef: [{ type: ViewChild, args: ["minRef",] }],
_elMaxRef: [{ type: ViewChild, args: ["maxRef",] }],
source: [{ type: Input }],
otherData: [{ type: Input }],
columnName: [{ type: Input }],
filter: [{ type: Output }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
class TextFFilterComponent {
constructor() {
this.filter = new EventEmitter();
this.value = '';
}
/**
* @param {?} event
* @return {?}
*/
onKeyUp(event) {
if (this.source === 'frontend') {
/** @type {?} */
const fn = function (name, searchValue) {
return d => {
return ((/** @type {?} */ (d))).filter(x => 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 {?}
*/
reset() {
this.value = '';
this.filter.emit({ columnName: this.columnName, apply: null });
}
}
TextFFilterComponent.decorators = [
{ type: Component, args: [{
template: `
<table class='ft-ffilter-table'>
<tr class='ft-ffilter-column'>
<td class='ft-ffilter-row'>
<input class="ft-i ft-i-ffilter ft-i-ffilter-text" type='text' [(ngModel)]='value' (keyup)='onKeyUp($event)'/>
</td>
</tr>
</table>
<!--
<div class="ft-ffilter">
<div class="ft-div1-ffilter">
<input class="ft-i ft-i-ffilter ft-i-ffilter-text" type='text' [(ngModel)]='value' (keyup)='onKeyUp($event)'/>
</div>
</div>
-->
`,
styles: [`
:host { flex:1;
}`]
}] }
];
TextFFilterComponent.propDecorators = {
source: [{ type: Input }],
otherData: [{ type: Input }],
columnName: [{ type: Input }],
filter: [{ type: Output }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
class FFilterDirective {
/**
* @param {?} viewContainerRef
*/
constructor(viewContainerRef) {
this.viewContainerRef = viewContainerRef;
}
}
FFilterDirective.decorators = [
{ type: Directive, args: [{
selector: '[ffilter-host]',
},] }
];
/** @nocollapse */
FFilterDirective.ctorParameters = () => [
{ type: ViewContainerRef }
];
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
class FFilterComponent {
/**
* @param {?} componentFactoryResolver
*/
constructor(componentFactoryResolver) {
this.componentFactoryResolver = componentFactoryResolver;
this.debounce = 500;
// Other data needed to be passed to filter
this.filter = new EventEmitter();
}
/**
* @return {?}
*/
ngOnInit() {
this.loadComponent();
}
/**
* @return {?}
*/
ngOnDestroy() {
// clearInterval(this.interval);
}
/**
* @return {?}
*/
loadComponent() {
// filter counter
// Check if standard filters else load custom
/** @type {?} */
let 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 {?} */
const componentFactory = this.componentFactoryResolver.resolveComponentFactory(fftilter);
// get reference of insertion point through
/** @type {?} */
const viewContainerRef = this.ffilterHost.viewContainerRef;
viewContainerRef.clear();
// Create instance of component
/** @type {?} */
const 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(debounceTime(this.debounce)).subscribe((event) => {
this.filter.emit(event);
});
this.filterr = ((/** @type {?} */ (componentRef.instance)));
}
/**
* @return {?}
*/
reset() {
this.filterr.reset();
}
}
FFilterComponent.totalfilters = 0;
FFilterComponent.decorators = [
{ type: Component, args: [{
selector: 'ft-ffilter',
template: `
<ng-template ffilter-host></ng-template>
`
}] }
];
/** @nocollapse */
FFilterComponent.ctorParameters = () => [
{ type: ComponentFactoryResolver }
];
FFilterComponent.propDecorators = {
ffilterHost: [{ type: ViewChild, args: [FFilterDirective,] }],
source: [{ type: Input }],
columnName: [{ type: Input }],
debounce: [{ type: Input }],
filterType: [{ type: Input }],
otherData: [{ type: Input }],
filter: [{ type: Output }]
};
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
class FExporterComponent {
/**
* @return {?}
*/
generateFileName() {
/** @type {?} */
let d = new Date();
return d.getFullYear() + d.getMonth() + d.getDate() + '_' + (d.getHours() + 1) + d.getMinutes() + d.getSeconds();
}
/**
* @return {?}
*/
CSV() {
/** @type {?} */
let filename = this.generateFileName() + ".csv";
/** @type {?} */
let properties = [];
// console.log(this.data);
/** @type {?} */
let 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 {?}
*/
COPY() {
/** @type {?} */
var input = document.createElement("textarea");
/** @type {?} */
let 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 {?}
*/
PRINT() {
/** @type {?} */
let 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 {?}
*/
JSON() {
/** @type {?} */
let 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. */
/**
* @return {?}
*/
make_crc_table() {
/** @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 {?}
*/
crc32(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 {?}
*/
numberToExcelLetters(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));
/**
* @param {?} uniques
* @return {?}
*/
generateSharedStringsLFH(uniques) {
//return '\x50\x4B\x03\x04\x14\x00\x00\x00\x08\x00\x00\x00\x21\x00\x74\xC7\x86\x57\x5D\x01\x00\x00\xE3\x07\x00\x00\x14\x00\x00\x00\x78\x6C\x2F\x73\x68\x61\x72\x65\x64\x53\x74\x72\x69\x6E\x67\x73\x2E\x78\x6D\x6C\x6D\xD3\x41\x4E\xE3\x40\x10\x46\xE1\xFD\x48\x73\x07\xCB\xFB\xC1\x4E\x66\x86\x61\x90\x63\xD4\x54\x15\x27\x80\x03\x58\x49\x43\x2C\xC5\xED\x90\xEE\x20\xB8\x3D\x46\x42\xAA\xC5\xCB\xC6\x52\x7F\x56\xBF\x5E\xFD\xDD\xDD\xFB\x74\xA8\xDE\xE2\x29\x8F\x73\xDA\xD4\xAB\xAB\xB6\xAE\x62\xDA\xCE\xBB\x31\xBD\x6C\xEA\xA7\xC7\x87\x5F\x37\x75\x95\xCB\x90\x76\xC3\x61\x4E\x71\x53\x7F\xC4\x5C\xDF\xF5\x3F\x7F\x74\x39\x97\x6A\xB9\x9B\xF2\xA6\xDE\x97\x72\xBC\x6D\x9A\xBC\xDD\xC7\x69\xC8\x57\xF3\x31\xA6\xE5\xCF\xF3\x7C\x9A\x86\xB2\x1C\x4F\x2F\x4D\x3E\x9E\xE2\xB0\xCB\xFB\x18\xCB\x74\x68\xD6\x6D\x7B\xDD\x4C\xC3\x98\xEA\x6A\x3B\x9F\x53\x59\xDE\x6D\x97\x77\xCF\x69\x7C\x3D\x47\x71\xE9\xBB\x3C\xF6\x5D\xE9\xC3\xAA\x6B\x4A\xDF\x35\xCB\xE9\x5B\xEE\x21\x02\x51\x88\x41\xC2\x1A\x65\x88\x40\x14\x62\x90\xF0\x1B\x65\x88\x40\x14\x62\x90\xF0\x07\x65\x88\x40\x14\x62\x90\xF0\x17\x65\x88\x40\x14\x62\x90\x70\x8D\x32\x44\x20\x0A\x31\x48\xF8\x87\x32\x44\x20\x0A\x31\x48\xB8\x41\x19\x22\x10\x85\x18\x24\xFC\x47\x19\x22\x10\x85\x18\x24\xAC\x5A\xA4\x49\x42\x52\x92\x39\x79\xFE\xC2\x12\x2F\x4C\xF1\xC2\x16\x2F\x8C\x71\xC5\x3C\xE7\x48\x12\x92\x92\xCC\xC9\xF3\xDC\x24\x49\x48\x4A\x32\x27\xCF\x73\x98\x24\x21\x29\xC9\x9C\x3C\xCF\x75\x92\x84\xA4\x24\x73\xF2\x3C\x27\x4A\x12\x92\x92\xCC\xC9\xF3\xDC\x29\x49\x48\x4A\x32\x27\xCF\x73\xAC\x24\x21\x29\xC9\x9C\x3C\xCF\xC5\x92\x84\xA4\x24\x23\x85\x35\x57\x4B\x12\x92\x92\xCC\xE9\xEB\x93\x4B\xFF\x09';
//return '\x50\x4B\x03\x04\x14\x00\x00\x00\x08\x00\x00\x00\x21\x00\x74\xC7\x86\x57\x5D\x01\x00\x00\xE3\x07\x00\x00\x14\x00\x00\x00\x78\x6C\x2F\x73\x68\x61\x72\x65\x64\x53\x74\x72\x69\x6E\x67\x73\x2E\x78\x6D\x6C\x6D\xD3\x41\x4E\xE3\x40\x10\x46\xE1\xFD\x48\x73\x07\xCB\xFB\xC1\x4E\x66\x86\x61\x90\x63\xD4\x54\x15\x27\x80\x03\x58\x49\x43\x2C\xC5\xED\x90\xEE\x20\xB8\x3D\x46\x42\xAA\xC5\xCB\xC6\x52\x7F\x56\xBF\x5E\xFD\xDD\xDD\xFB\x74\xA8\xDE\xE2\x29\x8F\x73\xDA\xD4\xAB\xAB\xB6\xAE\x62\xDA\xCE\xBB\x31\xBD\x6C\xEA\xA7\xC7\x87\x5F\x37\x75\x95\xCB\x90\x76\xC3\x61\x4E\x71\x53\x7F\xC4\x5C\xDF\xF5\x3F\x7F\x74\x39\x97\x6A\xB9\x9B\xF2\xA6\xDE\x97\x72\xBC\x6D\x9A\xBC\xDD\xC7\x69\xC8\x57\xF3\x31\xA6\xE5\xCF\xF3\x7C\x9A\x86\xB2\x1C\x4F\x2F\x4D\x3E\x9E\xE2\xB0\xCB\xFB\x18\xCB\x74\x68\xD6\x6D\x7B\xDD\x4C\xC3\x98\xEA\x6A\x3B\x9F\x53\x59\xDE\x6D\x97\x77\xCF\x69\x7C\x3D\x47\x71\xE9\xBB\x3C\xF6\x5D\xE9\xC3\xAA\x6B\x4A\xDF\x35\xCB\xE9\x5B\xEE\x21\x02\x51\x88\x41\xC2\x1A\x65\x88\x40\x14\x62\x90\xF0\x1B\x65\x88\x40\x14\x62\x90\xF0\x07\x65\x88\x40\x14\x62\x90\xF0\x17\x65\x88\x40\x14\x62\x90\x70\x8D\x32\x44\x20\x0A\x31\x48\xF8\x87\x32\x44\x20\x0A\x31\x48\xB8\x41\x19\x22\x10\x85\x18\x24\xFC\x47\x19\x22\x10\x85\x18\x24\xAC\x5A\xA4\x49\x42\x52\x92\x39\x79\xFE\xC2\x12\x2F\x4C\xF1\xC2\x16\x2F\x8C\x71\xC5\x3C\xE7\x48\x12\x92\x92\xCC\xC9\xF3\xDC\x24\x49\x48\x4A\x32\x27\xCF\x73\x98\x24\x21\x29\xC9\x9C\x3C\xCF\x75\x92\x84\xA4\x24\x73\xF2\x3C\x27\x4A\x12\x92\x92\xCC\xC9\xF3\xDC\x29\x49\x48\x4A\x32\x27\xCF\x73\xAC\x24\x21\x29\xC9\x9C\x3C\xCF\xC5\x92\x84\xA4\x24\x23\x85\x35\x57\x4B\x12\x92\x92\xCC\xE9\xEB\x93\x4B\xFF\x09';
/** @type {?} */
var fileHeader = '\x50\x4B\x03\x04';
/** @type {?} */
var version = '\x14\x00';
/** @type {?} */
var flags = '\x00\x00';
/** @type {?} */
var modTime = '\x00\x00';
/** @type {?} */
var modDate = '\x21\x00';
/** @type {?} */
var fileNameLen = '\x14\x00';
/** @type {?} */
var extraFieldLen = '\x00\x00';
/** @type {?} */
var fileName = '\x78\x6C\x2F\x73\x68\x61\x72\x65\x64\x53\x74\x72\x69\x6E\x67\x73\x2E\x78\x6D\x6C';
/** @type {?} */
var extraField = '';
// Dynamically generated
// var uncompressedContent = '\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';
/** @type {?} */
var generatedString = '';
/** @type {?} */
var i = 0;
for (i = 0; i < uniques.length; i++) {
generatedString += '\x3c\x73\x69\x3e\x3c\x74\x3e' + uniques[i] + '\x3c\x2f\x74\x3e\x3c\x2f\x73\x69\x3e';
}
/** @type {?} */
var uncompressedContent = '\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\x3f\x3e\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\x