ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
742 lines • 44.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, Input, Output, EventEmitter, ViewChild, forwardRef, HostBinding, ElementRef, Renderer2 } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
var TextareaItemComponent = /** @class */ (function () {
function TextareaItemComponent(element, render) {
this.element = element;
this.render = render;
this.prefixCls = 'am-textarea';
this.isTitleString = true;
this.maxLength = Infinity;
this._prefixListCls = 'am-list';
this._defaultValue = '';
this._placeholder = '';
this._editable = true;
this._disabled = false;
this._clear = false;
this._rows = 1;
this._error = false;
this._labelNumber = 5;
this._name = '';
this._focus = false;
this._autoFocus = false;
this._isClear = false;
this._isClickingClear = false;
this.onChange = new EventEmitter();
this.onBlur = new EventEmitter();
this.onFocus = new EventEmitter();
this.onErrorClick = new EventEmitter();
this.clsItem = true;
this._onChange = (/**
* @param {?} _
* @return {?}
*/
function (_) { });
this._el = element.nativeElement;
}
Object.defineProperty(TextareaItemComponent.prototype, "value", {
get: /**
* @return {?}
*/
function () {
return this._value;
},
set: /**
* @param {?} v
* @return {?}
*/
function (v) {
if (typeof v === 'undefined' || v === null) {
this._value = '';
}
else {
this._value = v;
}
this.textRef.nativeElement.value = this._value;
this._onChange(this._value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "defaultValue", {
get: /**
* @return {?}
*/
function () {
return this._defaultValue;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._defaultValue = value;
this._value = this._defaultValue;
this.textRef.nativeElement.value = this._value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "placeholder", {
get: /**
* @return {?}
*/
function () {
return this._placeholder;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._placeholder = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "editable", {
get: /**
* @return {?}
*/
function () {
return this._editable;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._editable = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "disabled", {
get: /**
* @return {?}
*/
function () {
return this._disabled;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._disabled = value;
this.setCls();
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "clear", {
get: /**
* @return {?}
*/
function () {
return this._clear;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._clear = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "rows", {
get: /**
* @return {?}
*/
function () {
return this._rows;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._rows = value;
this.setCls();
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "error", {
get: /**
* @return {?}
*/
function () {
return this._error;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._error = value;
this.setCls();
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "labelNumber", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._labelNumber = value;
this.setCls();
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "count", {
get: /**
* @return {?}
*/
function () {
return this._count;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._count = value;
this.setCls();
this.setCharacterLength();
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "prefixListCls", {
get: /**
* @return {?}
*/
function () {
return this._prefixListCls;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._prefixListCls = value;
this.setCls();
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "name", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._name = value;
this.textRef.nativeElement.name = this._name;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "autoHeight", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._autoHeight = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "title", {
get: /**
* @return {?}
*/
function () {
return this._title;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._title = value;
this.isTitleString = true;
if (typeof value !== 'string') {
this.isTitleString = false;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "focus", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
if (value && value.focus) {
this.textRef.nativeElement.focus();
this.inputFocus('');
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(TextareaItemComponent.prototype, "autoFocus", {
get: /**
* @return {?}
*/
function () {
return this._autoFocus;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._autoFocus = value;
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
TextareaItemComponent.prototype.setCls = /**
* @return {?}
*/
function () {
var _a, _b, _c;
this.hasCount = this._count > 0 && this._rows > 1;
this.render.addClass(this._el, this._prefixListCls + '-item');
this.clsSingleLine = this._rows === 1 && !this._autoHeight;
this.clsDisabled = this._disabled;
this.clsError = this._error;
this.clsFocus = this._focus;
this.clsHasCount = this.hasCount;
this.labelCls = (_a = {},
_a[this.prefixCls + "-label"] = true,
_a[this.prefixCls + "-label-2"] = this._labelNumber === 2,
_a[this.prefixCls + "-label-3"] = this._labelNumber === 3,
_a[this.prefixCls + "-label-4"] = this._labelNumber === 4,
_a[this.prefixCls + "-label-5"] = this._labelNumber === 5,
_a[this.prefixCls + "-label-6"] = this._labelNumber === 6,
_a[this.prefixCls + "-label-7"] = this._labelNumber === 7,
_a);
this.controlCls = (_b = {}, _b[this.prefixCls + "-control"] = true, _b);
this.clearCls = (_c = {},
_c[this.prefixCls + "-clear-active"] = this._isClickingClear,
_c);
};
/**
* @return {?}
*/
TextareaItemComponent.prototype.setCharacterLength = /**
* @return {?}
*/
function () {
this.characterLength = this.countSymbols(this._value);
if (this._count > 0) {
this.maxLength = this._count - this.characterLength + (this._value ? this._value.length : 0);
}
};
/**
* @param {?} e
* @return {?}
*/
TextareaItemComponent.prototype.inputChange = /**
* @param {?} e
* @return {?}
*/
function (e) {
this._value = e;
this.textRef.nativeElement.value = this._value;
this.setCharacterLength();
this._onChange(this._value);
this.onChange.emit(this._value);
};
/**
* @param {?} value
* @return {?}
*/
TextareaItemComponent.prototype.inputFocus = /**
* @param {?} value
* @return {?}
*/
function (value) {
this._focus = true;
this.setCls();
if (value !== undefined) {
this.onFocus.emit(value);
}
};
/**
* @param {?} value
* @param {?} event
* @return {?}
*/
TextareaItemComponent.prototype.inputBlur = /**
* @param {?} value
* @param {?} event
* @return {?}
*/
function (value, event) {
var _this = this;
setTimeout((/**
* @return {?}
*/
function () {
_this._focus = false;
_this.setCls();
_this.onBlur.emit(value);
_this._isClear = false;
}), 100);
};
/**
* @return {?}
*/
TextareaItemComponent.prototype.clearInput = /**
* @return {?}
*/
function () {
var _this = this;
this._isClickingClear = true;
this.setCls();
setTimeout((/**
* @return {?}
*/
function () {
_this._value = '';
_this.inputChange('');
_this.inputFocus(_this._value);
_this._isClickingClear = false;
_this.setCls();
}), 100);
};
/**
* @param {?} e
* @return {?}
*/
TextareaItemComponent.prototype.errorClick = /**
* @param {?} e
* @return {?}
*/
function (e) {
if (this.onErrorClick) {
this.onErrorClick.emit(e);
}
};
/**
* @return {?}
*/
TextareaItemComponent.prototype.reAlignHeight = /**
* @return {?}
*/
function () {
/** @type {?} */
var textareaDom = this.textRef.nativeElement;
textareaDom.style.height = '';
textareaDom.style.height = textareaDom.scrollHeight + "px";
};
/**
* @param {?=} text
* @return {?}
*/
TextareaItemComponent.prototype.countSymbols = /**
* @param {?=} text
* @return {?}
*/
function (text) {
if (text === void 0) { text = ''; }
/** @type {?} */
var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]|\n/g;
return text.replace(regexAstralSymbols, '_').length;
};
/**
* @param {?} value
* @return {?}
*/
TextareaItemComponent.prototype.writeValue = /**
* @param {?} value
* @return {?}
*/
function (value) {
if (typeof value === 'undefined' || value === null) {
this._value = '';
}
else {
this._value = value;
}
};
/**
* @param {?} fn
* @return {?}
*/
TextareaItemComponent.prototype.registerOnChange = /**
* @param {?} fn
* @return {?}
*/
function (fn) {
this._onChange = fn;
};
/**
* @param {?} fn
* @return {?}
*/
TextareaItemComponent.prototype.registerOnTouched = /**
* @param {?} fn
* @return {?}
*/
function (fn) { };
/**
* @return {?}
*/
TextareaItemComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.setCls();
this.setCharacterLength();
this.textRef.nativeElement.value = this._value;
};
/**
* @return {?}
*/
TextareaItemComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
var _this = this;
setTimeout((/**
* @return {?}
*/
function () {
if (_this._autoHeight) {
_this.reAlignHeight();
}
}), 100);
};
/**
* @return {?}
*/
TextareaItemComponent.prototype.ngAfterContentChecked = /**
* @return {?}
*/
function () {
if (this._autoHeight && this._focus) {
this.reAlignHeight();
}
};
TextareaItemComponent.decorators = [
{ type: Component, args: [{
selector: 'TextareaItem , nzm-textarea-item',
template: "<div *ngIf=\"title && isTitleString\" [ngClass]=\"labelCls\">{{ title }}</div>\n<div *ngIf=\"title && !isTitleString\" [ngClass]=\"labelCls\">\n <ng-template [ngTemplateOutlet]=\"title\"></ng-template>\n</div>\n<div [ngClass]=\"controlCls\">\n <textarea\n #text\n [rows]=\"rows\"\n [maxlength]=\"maxLength\"\n [(ngModel)]=\"value\"\n [defaultValue]=\"defaultValue\"\n [placeholder]=\"placeholder\"\n [disabled]=\"disabled\"\n [readOnly]=\"!editable\"\n [autofocus]=\"autoFocus\"\n (ngModelChange)=\"inputChange($event)\"\n (blur)=\"inputBlur(value, $event)\"\n (focus)=\"inputFocus(value)\"\n ></textarea>\n</div>\n<div\n *ngIf=\"clear && editable && !disabled && (value && value.length > 0)\"\n class=\"{{ prefixCls }}-clear\"\n [ngClass]=\"clearCls\"\n (click)=\"clearInput()\"\n></div>\n<div *ngIf=\"error\" class=\"{{ prefixCls }}-error-extra\" (click)=\"errorClick($event)\"></div>\n<span *ngIf=\"hasCount\" class=\"{{ prefixCls }}-count\">\n <span>{{ characterLength }}</span\n >/{{ count }}\n</span>\n",
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef((/**
* @return {?}
*/
function () { return TextareaItemComponent; })),
multi: true
}
]
}] }
];
/** @nocollapse */
TextareaItemComponent.ctorParameters = function () { return [
{ type: ElementRef },
{ type: Renderer2 }
]; };
TextareaItemComponent.propDecorators = {
textRef: [{ type: ViewChild, args: ['text',] }],
value: [{ type: Input }],
defaultValue: [{ type: Input }],
placeholder: [{ type: Input }],
editable: [{ type: Input }],
disabled: [{ type: Input }],
clear: [{ type: Input }],
rows: [{ type: Input }],
error: [{ type: Input }],
labelNumber: [{ type: Input }],
count: [{ type: Input }],
prefixListCls: [{ type: Input }],
name: [{ type: Input }],
autoHeight: [{ type: Input }],
title: [{ type: Input }],
focus: [{ type: Input }],
autoFocus: [{ type: Input }],
onChange: [{ type: Output }],
onBlur: [{ type: Output }],
onFocus: [{ type: Output }],
onErrorClick: [{ type: Output }],
clsItem: [{ type: HostBinding, args: ['class.am-textarea-item',] }],
clsDisabled: [{ type: HostBinding, args: ['class.am-textarea-disabled',] }],
clsError: [{ type: HostBinding, args: ['class.am-textarea-error',] }],
clsFocus: [{ type: HostBinding, args: ['class.am-textarea-focus',] }],
clsSingleLine: [{ type: HostBinding, args: ['class.am-textarea-item-single-line',] }],
clsHasCount: [{ type: HostBinding, args: ['class.am-textarea-has-count',] }]
};
return TextareaItemComponent;
}());
export { TextareaItemComponent };
if (false) {
/** @type {?} */
TextareaItemComponent.prototype.prefixCls;
/** @type {?} */
TextareaItemComponent.prototype.wrapCls;
/** @type {?} */
TextareaItemComponent.prototype.labelCls;
/** @type {?} */
TextareaItemComponent.prototype.controlCls;
/** @type {?} */
TextareaItemComponent.prototype.clearCls;
/** @type {?} */
TextareaItemComponent.prototype.hasCount;
/** @type {?} */
TextareaItemComponent.prototype.characterLength;
/** @type {?} */
TextareaItemComponent.prototype.isTitleString;
/** @type {?} */
TextareaItemComponent.prototype.maxLength;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._el;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._prefixListCls;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._value;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._defaultValue;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._placeholder;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._editable;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._disabled;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._clear;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._rows;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._count;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._autoHeight;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._error;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._labelNumber;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._name;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._title;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._focus;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._autoFocus;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._isClear;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype._isClickingClear;
/** @type {?} */
TextareaItemComponent.prototype.textRef;
/** @type {?} */
TextareaItemComponent.prototype.onChange;
/** @type {?} */
TextareaItemComponent.prototype.onBlur;
/** @type {?} */
TextareaItemComponent.prototype.onFocus;
/** @type {?} */
TextareaItemComponent.prototype.onErrorClick;
/** @type {?} */
TextareaItemComponent.prototype.clsItem;
/** @type {?} */
TextareaItemComponent.prototype.clsDisabled;
/** @type {?} */
TextareaItemComponent.prototype.clsError;
/** @type {?} */
TextareaItemComponent.prototype.clsFocus;
/** @type {?} */
TextareaItemComponent.prototype.clsSingleLine;
/** @type {?} */
TextareaItemComponent.prototype.clsHasCount;
/** @type {?} */
TextareaItemComponent.prototype._onChange;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype.element;
/**
* @type {?}
* @private
*/
TextareaItemComponent.prototype.render;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dGFyZWEtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS8iLCJzb3VyY2VzIjpbInRleHRhcmVhLWl0ZW0vdGV4dGFyZWEtaXRlbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBR1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUdULFVBQVUsRUFDVixXQUFXLEVBQ1gsVUFBVSxFQUNWLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekU7SUE4TEUsK0JBQW9CLE9BQW1CLEVBQVUsTUFBaUI7UUFBOUMsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVc7UUFsTGxFLGNBQVMsR0FBVyxhQUFhLENBQUM7UUFPbEMsa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFDOUIsY0FBUyxHQUFXLFFBQVEsQ0FBQztRQUdyQixtQkFBYyxHQUFHLFNBQVMsQ0FBQztRQUUzQixrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQUMzQixpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQixjQUFTLEdBQVksSUFBSSxDQUFDO1FBQzFCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUN4QixVQUFLLEdBQVcsQ0FBQyxDQUFDO1FBR2xCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFDeEIsaUJBQVksR0FBVyxDQUFDLENBQUM7UUFDekIsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUVuQixXQUFNLEdBQVksS0FBSyxDQUFDO1FBQ3hCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFpSTFDLGFBQVEsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUV0RCxXQUFNLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFFcEQsWUFBTyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXJELGlCQUFZLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFHMUQsWUFBTyxHQUFZLElBQUksQ0FBQztRQWdCeEIsY0FBUzs7OztRQUFHLFVBQUMsQ0FBTSxJQUFNLENBQUMsRUFBQztRQUh6QixJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7SUFDbkMsQ0FBQztJQW5KRCxzQkFDSSx3Q0FBSzs7OztRQURUO1lBRUUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3JCLENBQUM7Ozs7O1FBQ0QsVUFBVSxDQUFTO1lBQ2pCLElBQUksT0FBTyxDQUFDLEtBQUssV0FBVyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO2FBQ2xCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2FBQ2pCO1lBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDL0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUIsQ0FBQzs7O09BVEE7SUFVRCxzQkFDSSwrQ0FBWTs7OztRQURoQjtZQUVFLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUM1QixDQUFDOzs7OztRQUNELFVBQWlCLEtBQWE7WUFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2pELENBQUM7OztPQUxBO0lBTUQsc0JBQ0ksOENBQVc7Ozs7UUFEZjtZQUVFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztRQUMzQixDQUFDOzs7OztRQUNELFVBQWdCLEtBQWE7WUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDNUIsQ0FBQzs7O09BSEE7SUFJRCxzQkFDSSwyQ0FBUTs7OztRQURaO1lBRUUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3hCLENBQUM7Ozs7O1FBQ0QsVUFBYSxLQUFjO1lBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUM7OztPQUhBO0lBSUQsc0JBQ0ksMkNBQVE7Ozs7UUFEWjtZQUVFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUN4QixDQUFDOzs7OztRQUNELFVBQWEsS0FBYztZQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEIsQ0FBQzs7O09BSkE7SUFLRCxzQkFDSSx3Q0FBSzs7OztRQURUO1lBRUUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3JCLENBQUM7Ozs7O1FBQ0QsVUFBVSxLQUFjO1lBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLENBQUM7OztPQUhBO0lBSUQsc0JBQ0ksdUNBQUk7Ozs7UUFEUjtZQUVFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNwQixDQUFDOzs7OztRQUNELFVBQVMsS0FBYTtZQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNuQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEIsQ0FBQzs7O09BSkE7SUFLRCxzQkFDSSx3Q0FBSzs7OztRQURUO1lBRUUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3JCLENBQUM7Ozs7O1FBQ0QsVUFBVSxLQUFjO1lBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQixDQUFDOzs7T0FKQTtJQUtELHNCQUNJLDhDQUFXOzs7OztRQURmLFVBQ2dCLEtBQWE7WUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hCLENBQUM7OztPQUFBO0lBQ0Qsc0JBQ0ksd0NBQUs7Ozs7UUFEVDtZQUVFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNyQixDQUFDOzs7OztRQUNELFVBQVUsS0FBSztZQUNiLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzVCLENBQUM7OztPQUxBO0lBTUQsc0JBQ0ksZ0RBQWE7Ozs7UUFEakI7WUFFRSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDN0IsQ0FBQzs7Ozs7UUFDRCxVQUFrQixLQUFhO1lBQzdCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1lBQzVCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQixDQUFDOzs7T0FKQTtJQUtELHNCQUNJLHVDQUFJOzs7OztRQURSLFVBQ1MsS0FBYTtZQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUMvQyxDQUFDOzs7T0FBQTtJQUNELHNCQUNJLDZDQUFVOzs7OztRQURkLFVBQ2UsS0FBYztZQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUMzQixDQUFDOzs7T0FBQTtJQUNELHNCQUNJLHdDQUFLOzs7O1FBRFQ7WUFFRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDckIsQ0FBQzs7Ozs7UUFDRCxVQUFVLEtBQWdDO1lBQ3hDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQzFCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO2dCQUM3QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQzthQUM1QjtRQUNILENBQUM7OztPQVBBO0lBUUQsc0JBQ0ksd0NBQUs7Ozs7O1FBRFQsVUFDVSxLQUFLO1lBQ2IsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtnQkFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDckI7UUFDSCxDQUFDOzs7T0FBQTtJQUNELHNCQUNJLDRDQUFTOzs7O1FBRGI7WUFFRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDekIsQ0FBQzs7Ozs7UUFDRCxVQUFjLEtBQWM7WUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDMUIsQ0FBQzs7O09BSEE7Ozs7SUFnQ0Qsc0NBQU07OztJQUFOOztRQUNFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzNELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUTtZQUNYLEdBQUksSUFBSSxDQUFDLFNBQVMsV0FBUSxJQUFHLElBQUk7WUFDakMsR0FBSSxJQUFJLENBQUMsU0FBUyxhQUFVLElBQUcsSUFBSSxDQUFDLFlBQVksS0FBSyxDQUFDO1lBQ3RELEdBQUksSUFBSSxDQUFDLFNBQVMsYUFBVSxJQUFHLElBQUksQ0FBQyxZQUFZLEtBQUssQ0FBQztZQUN0RCxHQUFJLElBQUksQ0FBQyxTQUFTLGFBQVUsSUFBRyxJQUFJLENBQUMsWUFBWSxLQUFLLENBQUM7WUFDdEQsR0FBSSxJQUFJLENBQUMsU0FBUyxhQUFVLElBQUcsSUFBSSxDQUFDLFlBQVksS0FBSyxDQUFDO1lBQ3RELEdBQUksSUFBSSxDQUFDLFNBQVMsYUFBVSxJQUFHLElBQUksQ0FBQyxZQUFZLEtBQUssQ0FBQztZQUN0RCxHQUFJLElBQUksQ0FBQyxTQUFTLGFBQVUsSUFBRyxJQUFJLENBQUMsWUFBWSxLQUFLLENBQUM7ZUFDdkQsQ0FBQztRQUNGLElBQUksQ0FBQyxVQUFVLGFBQUssR0FBSSxJQUFJLENBQUMsU0FBUyxhQUFVLElBQUcsSUFBSSxLQUFFLENBQUM7UUFDMUQsSUFBSSxDQUFDLFFBQVE7WUFDWCxHQUFJLElBQUksQ0FBQyxTQUFTLGtCQUFlLElBQUcsSUFBSSxDQUFDLGdCQUFnQjtlQUMxRCxDQUFDO0lBQ0osQ0FBQzs7OztJQUNELGtEQUFrQjs7O0lBQWxCO1FBQ0UsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RCxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzlGO0lBQ0gsQ0FBQzs7Ozs7SUFFRCwyQ0FBVzs7OztJQUFYLFVBQVksQ0FBQztRQUNYLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQy9DLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDOzs7OztJQUVELDBDQUFVOzs7O0lBQVYsVUFBVyxLQUFLO1FBQ2QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2QsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzFCO0lBQ0gsQ0FBQzs7Ozs7O0lBRUQseUNBQVM7Ozs7O0lBQVQsVUFBVSxLQUFLLEVBQUUsS0FBSztRQUF0QixpQkFPQztRQU5DLFVBQVU7OztRQUFDO1lBQ1QsS0FBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDcEIsS0FBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2QsS0FBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsS0FBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDeEIsQ0FBQyxHQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQzs7OztJQUVELDBDQUFVOzs7SUFBVjtRQUFBLGlCQVVDO1FBVEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDZCxVQUFVOzs7UUFBQztZQUNULEtBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLEtBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckIsS0FBSSxDQUFDLFVBQVUsQ0FBQyxLQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0IsS0FBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztZQUM5QixLQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEIsQ0FBQyxHQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQzs7Ozs7SUFDRCwwQ0FBVTs7OztJQUFWLFVBQVcsQ0FBQztRQUNWLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQjtJQUNILENBQUM7Ozs7SUFDRCw2Q0FBYTs7O0lBQWI7O1lBQ1EsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYTtRQUM5QyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDOUIsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQU0sV0FBVyxDQUFDLFlBQVksT0FBSSxDQUFDO0lBQzdELENBQUM7Ozs7O0lBRUQsNENBQVk7Ozs7SUFBWixVQUFhLElBQVM7UUFBVCxxQkFBQSxFQUFBLFNBQVM7O1lBQ2Qsa0JBQWtCLEdBQUcsb0NBQW9DO1FBQy9ELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDdEQsQ0FBQzs7Ozs7SUFFRCwwQ0FBVTs7OztJQUFWLFVBQVcsS0FBVTtRQUNuQixJQUFJLE9BQU8sS0FBSyxLQUFLLFdBQVcsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ2xELElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1NBQ2xCO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztTQUNyQjtJQUNILENBQUM7Ozs7O0lBQ0QsZ0RBQWdCOzs7O0lBQWhCLFVBQWlCLEVBQW9CO1FBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7Ozs7O0lBRUQsaURBQWlCOzs7O0lBQWpCLFVBQWtCLEVBQU8sSUFBUyxDQUFDOzs7O0lBRW5DLHdDQUFROzs7SUFBUjtRQUNFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ2pELENBQUM7Ozs7SUFFRCwrQ0FBZTs7O0lBQWY7UUFBQSxpQkFNQztRQUxDLFVBQVU7OztRQUFDO1lBQ1QsSUFBSSxLQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNwQixLQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDdEI7UUFDSCxDQUFDLEdBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDOzs7O0lBRUQscURBQXFCOzs7SUFBckI7UUFDRSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNuQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDdEI7SUFDSCxDQUFDOztnQkFwVEYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxrQ0FBa0M7b0JBQzVDLHlpQ0FBNkM7b0JBQzdDLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVTs7OzRCQUFDLGNBQU0sT0FBQSxxQkFBcUIsRUFBckIsQ0FBcUIsRUFBQzs0QkFDcEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0Y7Ozs7Z0JBZkMsVUFBVTtnQkFDVixTQUFTOzs7MEJBOENSLFNBQVMsU0FBQyxNQUFNO3dCQUdoQixLQUFLOytCQWFMLEtBQUs7OEJBU0wsS0FBSzsyQkFPTCxLQUFLOzJCQU9MLEtBQUs7d0JBUUwsS0FBSzt1QkFPTCxLQUFLO3dCQVFMLEtBQUs7OEJBUUwsS0FBSzt3QkFLTCxLQUFLO2dDQVNMLEtBQUs7dUJBUUwsS0FBSzs2QkFLTCxLQUFLO3dCQUlMLEtBQUs7d0JBV0wsS0FBSzs0QkFPTCxLQUFLOzJCQU9MLE1BQU07eUJBRU4sTUFBTTswQkFFTixNQUFNOytCQUVOLE1BQU07MEJBR04sV0FBVyxTQUFDLHdCQUF3Qjs4QkFFcEMsV0FBVyxTQUFDLDRCQUE0QjsyQkFFeEMsV0FBVyxTQUFDLHlCQUF5QjsyQkFFckMsV0FBVyxTQUFDLHlCQUF5QjtnQ0FFckMsV0FBVyxTQUFDLG9DQUFvQzs4QkFFaEQsV0FBVyxTQUFDLDZCQUE2Qjs7SUEwSDVDLDRCQUFDO0NBQUEsQUFyVEQsSUFxVEM7U0ExU1kscUJBQXFCOzs7SUFDaEMsMENBQWtDOztJQUNsQyx3Q0FBZ0I7O0lBQ2hCLHlDQUFpQjs7SUFDakIsMkNBQW1COztJQUNuQix5Q0FBaUI7O0lBQ2pCLHlDQUFrQjs7SUFDbEIsZ0RBQXdCOztJQUN4Qiw4Q0FBOEI7O0lBQzlCLDBDQUE2Qjs7Ozs7SUFFN0Isb0NBQXdCOzs7OztJQUN4QiwrQ0FBbUM7Ozs7O0lBQ25DLHVDQUF1Qjs7Ozs7SUFDdkIsOENBQW1DOzs7OztJQUNuQyw2Q0FBa0M7Ozs7O0lBQ2xDLDBDQUFrQzs7Ozs7SUFDbEMsMENBQW1DOzs7OztJQUNuQyx1Q0FBZ0M7Ozs7O0lBQ2hDLHNDQUEwQjs7Ozs7SUFDMUIsdUNBQXVCOzs7OztJQUN2Qiw0Q0FBNkI7Ozs7O0lBQzdCLHVDQUFnQzs7Ozs7SUFDaEMsNkNBQWlDOzs7OztJQUNqQyxzQ0FBMkI7Ozs7O0lBQzNCLHVDQUEwQzs7Ozs7SUFDMUMsdUNBQWdDOzs7OztJQUNoQywyQ0FBb0M7Ozs7O0lBQ3BDLHlDQUFrQzs7Ozs7SUFDbEMsaURBQTBDOztJQUUxQyx3Q0FDUTs7SUE2SFIseUNBQ3NEOztJQUN0RCx1Q0FDb0Q7O0lBQ3BELHdDQUNxRDs7SUFDckQsNkNBQzBEOztJQUUxRCx3Q0FDd0I7O0lBQ3hCLDRDQUNxQjs7SUFDckIseUNBQ2tCOztJQUNsQix5Q0FDa0I7O0lBQ2xCLDhDQUN1Qjs7SUFDdkIsNENBQ3FCOztJQU1yQiwwQ0FBMkI7Ozs7O0lBSmYsd0NBQTJCOzs7OztJQUFFLHVDQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdDaGlsZCxcbiAgVGVtcGxhdGVSZWYsXG4gIEFmdGVyQ29udGVudENoZWNrZWQsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBFbGVtZW50UmVmLFxuICBSZW5kZXJlcjJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1RleHRhcmVhSXRlbSAsIG56bS10ZXh0YXJlYS1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RleHRhcmVhLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRleHRhcmVhSXRlbUNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBUZXh0YXJlYUl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudENoZWNrZWQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0IHtcbiAgcHJlZml4Q2xzOiBzdHJpbmcgPSAnYW0tdGV4dGFyZWEnO1xuICB3cmFwQ2xzOiBvYmplY3Q7XG4gIGxhYmVsQ2xzOiBvYmplY3Q7XG4gIGNvbnRyb2xDbHM6IG9iamVjdDtcbiAgY2xlYXJDbHM6IG9iamVjdDtcbiAgaGFzQ291bnQ6IGJvb2xlYW47XG4gIGNoYXJhY3Rlckxlbmd0aDogbnVtYmVyO1xuICBpc1RpdGxlU3RyaW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgbWF4TGVuZ3RoOiBudW1iZXIgPSBJbmZpbml0eTtcblxuICBwcml2YXRlIF9lbDogRWxlbWVudFJlZjtcbiAgcHJpdmF0ZSBfcHJlZml4TGlzdENscyA9ICdhbS1saXN0JztcbiAgcHJpdmF0ZSBfdmFsdWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfZGVmYXVsdFZhbHVlOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9lZGl0YWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2NsZWFyOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3Jvd3M6IG51bWJlciA9IDE7XG4gIHByaXZhdGUgX2NvdW50OiBudW1iZXI7XG4gIHByaXZhdGUgX2F1dG9IZWlnaHQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2xhYmVsTnVtYmVyOiBudW1iZXIgPSA1O1xuICBwcml2YXRlIF9uYW1lOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfdGl0bGU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG4gIHByaXZhdGUgX2ZvY3VzOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2F1dG9Gb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9pc0NsZWFyOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2lzQ2xpY2tpbmdDbGVhcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ3RleHQnKVxuICB0ZXh0UmVmO1xuXG4gIEBJbnB1dCgpXG4gIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuICBzZXQgdmFsdWUodjogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiB2ID09PSAndW5kZWZpbmVkJyB8fCB2ID09PSBudWxsKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHY7XG4gICAgfVxuICAgIHRoaXMudGV4dFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5fdmFsdWU7XG4gICAgdGhpcy5fb25DaGFuZ2UodGhpcy5fdmFsdWUpO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBkZWZhdWx0VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZhbHVlO1xuICB9XG4gIHNldCBkZWZhdWx0VmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2RlZmF1bHRWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fZGVmYXVsdFZhbHVlO1xuICAgIHRoaXMudGV4dFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5fdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyO1xuICB9XG4gIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcGxhY2Vob2xkZXIgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgZWRpdGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2VkaXRhYmxlO1xuICB9XG4gIHNldCBlZGl0YWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2VkaXRhYmxlID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xzKCk7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGNsZWFyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jbGVhcjtcbiAgfVxuICBzZXQgY2xlYXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9jbGVhciA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCByb3dzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd3M7XG4gIH1cbiAgc2V0IHJvd3ModmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3Jvd3MgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENscygpO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBlcnJvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZXJyb3I7XG4gIH1cbiAgc2V0IGVycm9yKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZXJyb3IgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENscygpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBsYWJlbE51bWJlcih2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGFiZWxOdW1iZXIgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENscygpO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBjb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jb3VudDtcbiAgfVxuICBzZXQgY291bnQodmFsdWUpIHtcbiAgICB0aGlzLl9jb3VudCA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xzKCk7XG4gICAgdGhpcy5zZXRDaGFyYWN0ZXJMZW5ndGgoKTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgcHJlZml4TGlzdENscygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wcmVmaXhMaXN0Q2xzO1xuICB9XG4gIHNldCBwcmVmaXhMaXN0Q2xzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wcmVmaXhMaXN0Q2xzID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbHMoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgbmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbmFtZSA9IHZhbHVlO1xuICAgIHRoaXMudGV4dFJlZi5uYXRpdmVFbGVtZW50Lm5hbWUgPSB0aGlzLl9uYW1lO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBhdXRvSGVpZ2h0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fYXV0b0hlaWdodCA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCB0aXRsZSgpOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gIH1cbiAgc2V0IHRpdGxlKHZhbHVlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgdGhpcy5fdGl0bGUgPSB2YWx1ZTtcbiAgICB0aGlzLmlzVGl0bGVTdHJpbmcgPSB0cnVlO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLmlzVGl0bGVTdHJpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGZvY3VzKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLmZvY3VzKSB7XG4gICAgICB0aGlzLnRleHRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgdGhpcy5pbnB1dEZvY3VzKCcnKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGF1dG9Gb2N1cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYXV0b0ZvY3VzO1xuICB9XG4gIHNldCBhdXRvRm9jdXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9hdXRvRm9jdXMgPSB2YWx1ZTtcbiAgfVxuICBAT3V0cHV0KClcbiAgb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKVxuICBvbkJsdXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKVxuICBvbkZvY3VzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KClcbiAgb25FcnJvckNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tdGV4dGFyZWEtaXRlbScpXG4gIGNsc0l0ZW06IGJvb2xlYW4gPSB0cnVlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXRleHRhcmVhLWRpc2FibGVkJylcbiAgY2xzRGlzYWJsZWQ6IGJvb2xlYW47XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tdGV4dGFyZWEtZXJyb3InKVxuICBjbHNFcnJvcjogYm9vbGVhbjtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS10ZXh0YXJlYS1mb2N1cycpXG4gIGNsc0ZvY3VzOiBib29sZWFuO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXRleHRhcmVhLWl0ZW0tc2luZ2xlLWxpbmUnKVxuICBjbHNTaW5nbGVMaW5lOiBib29sZWFuO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXRleHRhcmVhLWhhcy1jb3VudCcpXG4gIGNsc0hhc0NvdW50OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZiwgcHJpdmF0ZSByZW5kZXI6IFJlbmRlcmVyMikge1xuICAgIHRoaXMuX2VsID0gZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgX29uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG5cbiAgc2V0Q2xzKCkge1xuICAgIHRoaXMuaGFzQ291bnQgPSB0aGlzLl9jb3VudCA+IDAgJiYgdGhpcy5fcm93cyA+IDE7XG4gICAgdGhpcy5yZW5kZXIuYWRkQ2xhc3ModGhpcy5fZWwsIHRoaXMuX3ByZWZpeExpc3RDbHMgKyAnLWl0ZW0nKTtcbiAgICB0aGlzLmNsc1NpbmdsZUxpbmUgPSB0aGlzLl9yb3dzID09PSAxICYmICF0aGlzLl9hdXRvSGVpZ2h0O1xuICAgIHRoaXMuY2xzRGlzYWJsZWQgPSB0aGlzLl9kaXNhYmxlZDtcbiAgICB0aGlzLmNsc0Vycm9yID0gdGhpcy5fZXJyb3I7XG4gICAgdGhpcy5jbHNGb2N1cyA9IHRoaXMuX2ZvY3VzO1xuICAgIHRoaXMuY2xzSGFzQ291bnQgPSB0aGlzLmhhc0NvdW50O1xuICAgIHRoaXMubGFiZWxDbHMgPSB7XG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsYF06IHRydWUsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsLTJgXTogdGhpcy5fbGFiZWxOdW1iZXIgPT09IDIsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsLTNgXTogdGhpcy5fbGFiZWxOdW1iZXIgPT09IDMsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsLTRgXTogdGhpcy5fbGFiZWxOdW1iZXIgPT09IDQsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsLTVgXTogdGhpcy5fbGFiZWxOdW1iZXIgPT09IDUsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsLTZgXTogdGhpcy5fbGFiZWxOdW1iZXIgPT09IDYsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWxhYmVsLTdgXTogdGhpcy5fbGFiZWxOdW1iZXIgPT09IDdcbiAgICB9O1xuICAgIHRoaXMuY29udHJvbENscyA9IHsgW2Ake3RoaXMucHJlZml4Q2xzfS1jb250cm9sYF06IHRydWUgfTtcbiAgICB0aGlzLmNsZWFyQ2xzID0ge1xuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1jbGVhci1hY3RpdmVgXTogdGhpcy5faXNDbGlja2luZ0NsZWFyXG4gICAgfTtcbiAgfVxuICBzZXRDaGFyYWN0ZXJMZW5ndGgoKSB7XG4gICAgdGhpcy5jaGFyYWN0ZXJMZW5ndGggPSB0aGlzLmNvdW50U3ltYm9scyh0aGlzLl92YWx1ZSk7XG4gICAgaWYgKHRoaXMuX2NvdW50ID4gMCkge1xuICAgICAgdGhpcy5tYXhMZW5ndGggPSB0aGlzLl9jb3VudCAtIHRoaXMuY2hhcmFjdGVyTGVuZ3RoICsgKHRoaXMuX3ZhbHVlID8gdGhpcy5fdmFsdWUubGVuZ3RoIDogMCk7XG4gICAgfVxuICB9XG5cbiAgaW5wdXRDaGFuZ2UoZSkge1xuICAgIHRoaXMuX3ZhbHVlID0gZTtcbiAgICB0aGlzLnRleHRSZWYubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICAgIHRoaXMuc2V0Q2hhcmFjdGVyTGVuZ3RoKCk7XG4gICAgdGhpcy5fb25DaGFuZ2UodGhpcy5fdmFsdWUpO1xuICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0aGlzLl92YWx1ZSk7XG4gIH1cblxuICBpbnB1dEZvY3VzKHZhbHVlKSB7XG4gICAgdGhpcy5fZm9jdXMgPSB0cnVlO1xuICAgIHRoaXMuc2V0Q2xzKCk7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub25Gb2N1cy5lbWl0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBpbnB1dEJsdXIodmFsdWUsIGV2ZW50KSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9mb2N1cyA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXRDbHMoKTtcbiAgICAgIHRoaXMub25CbHVyLmVtaXQodmFsdWUpO1xuICAgICAgdGhpcy5faXNDbGVhciA9IGZhbHNlO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBjbGVhcklucHV0KCkge1xuICAgIHRoaXMuX2lzQ2xpY2tpbmdDbGVhciA9IHRydWU7XG4gICAgdGhpcy5zZXRDbHMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gJyc7XG4gICAgICB0aGlzLmlucHV0Q2hhbmdlKCcnKTtcbiAgICAgIHRoaXMuaW5wdXRGb2N1cyh0aGlzLl92YWx1ZSk7XG4gICAgICB0aGlzLl9pc0NsaWNraW5nQ2xlYXIgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0Q2xzKCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuICBlcnJvckNsaWNrKGUpIHtcbiAgICBpZiAodGhpcy5vbkVycm9yQ2xpY2spIHtcbiAgICAgIHRoaXMub25FcnJvckNsaWNrLmVtaXQoZSk7XG4gICAgfVxuICB9XG4gIHJlQWxpZ25IZWlnaHQoKSB7XG4gICAgY29uc3QgdGV4dGFyZWFEb20gPSB0aGlzLnRleHRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB0ZXh0YXJlYURvbS5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICB0ZXh0YXJlYURvbS5zdHlsZS5oZWlnaHQgPSBgJHt0ZXh0YXJlYURvbS5zY3JvbGxIZWlnaHR9cHhgO1xuICB9XG5cbiAgY291bnRTeW1ib2xzKHRleHQgPSAnJykge1xuICAgIGNvbnN0IHJlZ2V4QXN0cmFsU3ltYm9scyA9IC9bXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdfFxcbi9nO1xuICAgIHJldHVybiB0ZXh0LnJlcGxhY2UocmVnZXhBc3RyYWxTeW1ib2xzLCAnXycpLmxlbmd0aDtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoXzogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZXRDbHMoKTtcbiAgICB0aGlzLnNldENoYXJhY3Rlckxlbmd0aCgpO1xuICAgIHRoaXMudGV4dFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fYXV0b0hlaWdodCkge1xuICAgICAgICB0aGlzLnJlQWxpZ25IZWlnaHQoKTtcbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xuICAgIGlmICh0aGlzLl9hdXRvSGVpZ2h0ICYmIHRoaXMuX2ZvY3VzKSB7XG4gICAgICB0aGlzLnJlQWxpZ25IZWlnaHQoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==