UNPKG

ng-zorro-antd-mobile

Version:

An enterprise-class mobile UI components based on Ant Design and Angular

532 lines 34.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Input, Output, EventEmitter, HostBinding, forwardRef } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; var StepperComponent = /** @class */ (function () { function StepperComponent() { this.prefixCls = 'am-stepper'; this._max = Infinity; this._min = -Infinity; this._step = 1; this._disabled = false; this._readOnly = false; this._showNumber = false; this._upDisabled = false; this._downDisabled = false; this._isUpClick = false; this._isDownClick = false; this.onChange = new EventEmitter(); this.clsStepper = true; this.clsStpDisabled = this._disabled; this.clsShowNum = this._showNumber; this.onChangeFn = (/** * @return {?} */ function () { }); this.onTouchFn = (/** * @return {?} */ function () { }); } Object.defineProperty(StepperComponent.prototype, "max", { get: /** * @return {?} */ function () { return this._max; }, set: /** * @param {?} value * @return {?} */ function (value) { this._max = value; }, enumerable: true, configurable: true }); Object.defineProperty(StepperComponent.prototype, "min", { get: /** * @return {?} */ function () { return this._min; }, set: /** * @param {?} value * @return {?} */ function (value) { this._min = value; }, enumerable: true, configurable: true }); Object.defineProperty(StepperComponent.prototype, "value", { get: /** * @return {?} */ function () { return this._value; }, set: /** * @param {?} v * @return {?} */ function (v) { this._value = v; }, enumerable: true, configurable: true }); Object.defineProperty(StepperComponent.prototype, "step", { set: /** * @param {?} value * @return {?} */ function (value) { this._step = value; }, enumerable: true, configurable: true }); Object.defineProperty(StepperComponent.prototype, "defaultValue", { set: /** * @param {?} value * @return {?} */ function (value) { if (value) { this._defaultValue = value; this._value = value; } }, enumerable: true, configurable: true }); Object.defineProperty(StepperComponent.prototype, "disabled", { get: /** * @return {?} */ function () { return this._disabled; }, set: /** * @param {?} value * @return {?} */ function (value) { if (value) { this._downDisabled = value; this._upDisabled = value; } this._disabled = value; this.clsStpDisabled = value; }, enumerable: true, configurable: true }); Object.defineProperty(StepperComponent.prototype, "readOnly", { get: /** * @return {?} */ function () { return this._readOnly; }, set: /** * @param {?} value * @return {?} */ function (value) { this._readOnly = value; }, enumerable: true, configurable: true }); Object.defineProperty(StepperComponent.prototype, "showNumber", { set: /** * @param {?} value * @return {?} */ function (value) { this._showNumber = value; this.clsShowNum = value; }, enumerable: true, configurable: true }); /** * @return {?} */ StepperComponent.prototype.onIncrease = /** * @return {?} */ function () { var _this = this; if (!this._upDisabled) { this._value = this.plus(this._value, this._step); this.onChange.emit(this._value); this.onChangeFn(this._value); if (this.plus(this._value, this._step) > this._max) { this._upDisabled = true; } if (this.minus(this._value, this._step) >= this._min) { this._downDisabled = false; } this._isUpClick = true; this.setCls(); setTimeout((/** * @return {?} */ function () { _this._isUpClick = false; _this.setCls(); }), 100); } }; /** * @return {?} */ StepperComponent.prototype.onDecrease = /** * @return {?} */ function () { var _this = this; if (!this._downDisabled) { this._value = this.minus(this._value, this._step); this.onChange.emit(this._value); this.onChangeFn(this._value); if (this.minus(this._value, this._step) < this._min) { this._downDisabled = true; } if (this.plus(this._value, this._step) <= this._max) { this._upDisabled = false; } this._isDownClick = true; this.setCls(); setTimeout((/** * @return {?} */ function () { _this._isDownClick = false; _this.setCls(); }), 100); } }; /** * @param {?} event * @return {?} */ StepperComponent.prototype.inputChange = /** * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var value = event.target.value; this._value = value ? parseInt(value, null) : 0; if (value < this._min) { this._value = this._min; } if (value > this._max) { this._value = this._max; } this.onChange.emit(this._value); this.onChangeFn(this._value); }; /** * @return {?} */ StepperComponent.prototype.setCls = /** * @return {?} */ function () { var _a, _b; this.upDisableCls = (_a = {}, _a[this.prefixCls + "-handler-up-disabled"] = this._upDisabled, _a[this.prefixCls + "-handler-active"] = this._isUpClick, _a); this.downDisableCls = (_b = {}, _b[this.prefixCls + "-handler-down-disabled"] = this._downDisabled, _b[this.prefixCls + "-handler-active"] = this._isDownClick, _b); }; /** * @return {?} */ StepperComponent.prototype.ngOnChanges = /** * @return {?} */ function () { if (this._disabled) { this._downDisabled = true; this._upDisabled = true; } else { this._upDisabled = this.plus(this._value, this._step) > this._max ? true : false; this._downDisabled = this.minus(this._value, this._step) < this._min ? true : false; } this.setCls(); }; /** * @param {?} value * @return {?} */ StepperComponent.prototype.writeValue = /** * @param {?} value * @return {?} */ function (value) { this._value = value; this.ngOnChanges(); }; /** * @param {?} fn * @return {?} */ StepperComponent.prototype.registerOnChange = /** * @param {?} fn * @return {?} */ function (fn) { this.onChangeFn = fn; }; /** * @param {?} fn * @return {?} */ StepperComponent.prototype.registerOnTouched = /** * @param {?} fn * @return {?} */ function (fn) { this.onTouchFn = fn; }; /** * @param {?} num1 * @param {?} num2 * @return {?} */ StepperComponent.prototype.plus = /** * @param {?} num1 * @param {?} num2 * @return {?} */ function (num1, num2) { if (num1 === undefined || num1 === null || num2 === undefined || num2 === null) { return; } /** @type {?} */ var baseNum = Math.pow(10, Math.max(this.digitLength(num1), this.digitLength(num2))); return (this.times(num1, baseNum) + this.times(num2, baseNum)) / baseNum; }; /** * @param {?} num1 * @param {?} num2 * @return {?} */ StepperComponent.prototype.minus = /** * @param {?} num1 * @param {?} num2 * @return {?} */ function (num1, num2) { if (num1 === undefined || num1 === null || num2 === undefined || num2 === null) { return; } /** @type {?} */ var baseNum = Math.pow(10, Math.max(this.digitLength(num1), this.digitLength(num2))); return (this.times(num1, baseNum) - this.times(num2, baseNum)) / baseNum; }; /** * @param {?} num * @return {?} */ StepperComponent.prototype.digitLength = /** * @param {?} num * @return {?} */ function (num) { /** @type {?} */ var eSplit = num.toString().split(/[eE]/); /** @type {?} */ var len = (eSplit[0].split('.')[1] || '').length - +(eSplit[1] || 0); return len > 0 ? len : 0; }; /** * @param {?} num1 * @param {?} num2 * @return {?} */ StepperComponent.prototype.times = /** * @param {?} num1 * @param {?} num2 * @return {?} */ function (num1, num2) { /** @type {?} */ var num1Changed = this.floatToFixed(num1); /** @type {?} */ var num2Changed = this.floatToFixed(num2); /** @type {?} */ var baseNum = this.digitLength(num1) + this.digitLength(num2); /** @type {?} */ var leftValue = num1Changed * num2Changed; return leftValue / Math.pow(10, baseNum); }; /** * @param {?} num * @return {?} */ StepperComponent.prototype.floatToFixed = /** * @param {?} num * @return {?} */ function (num) { if (num.toString().indexOf('e') === -1) { return Number(num.toString().replace('.', '')); } /** @type {?} */ var dLen = this.digitLength(num); return dLen > 0 ? this.strip(num * Math.pow(10, dLen)) : num; }; /** * @param {?} num * @param {?=} precision * @return {?} */ StepperComponent.prototype.strip = /** * @param {?} num * @param {?=} precision * @return {?} */ function (num, precision) { if (precision === void 0) { precision = 12; } return +parseFloat(num.toPrecision(precision)); }; StepperComponent.decorators = [ { type: Component, args: [{ selector: 'Stepper, nzm-stepper', template: "<div class=\"{{ prefixCls }}-handler-wrap\">\n <span\n role=\"button\"\n class=\"{{ prefixCls }}-handler {{ prefixCls }}-handler-up\"\n style=\"line-height:28px;\"\n [ngClass]=\"upDisableCls\"\n (click)=\"onIncrease()\"\n >\n <Icon [type]=\"'plus'\" [size]=\"'xxs'\"> </Icon>\n </span>\n <span\n role=\"button\"\n class=\"{{ prefixCls }}-handler {{ prefixCls }}-handler-down\"\n style=\"line-height:28px;\"\n [ngClass]=\"downDisableCls\"\n (click)=\"onDecrease()\"\n >\n <Icon [type]=\"'minus'\" [size]=\"'xxs'\"> </Icon>\n </span>\n</div>\n<div class=\"{{ prefixCls }}-input-wrap\">\n <input\n class=\"{{ prefixCls }}-input\"\n style=\"outline:none\"\n [disabled]=\"disabled\"\n [readonly]=\"readOnly\"\n [autocomplete]=\"'off'\"\n [max]=\"max\"\n [min]=\"min\"\n [(ngModel)]=\"value\"\n (change)=\"inputChange($event)\"\n />\n</div>\n", providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ function () { return StepperComponent; })), multi: true } ] }] } ]; /** @nocollapse */ StepperComponent.ctorParameters = function () { return []; }; StepperComponent.propDecorators = { max: [{ type: Input }], min: [{ type: Input }], value: [{ type: Input }], step: [{ type: Input }], defaultValue: [{ type: Input }], disabled: [{ type: Input }], readOnly: [{ type: Input }], showNumber: [{ type: Input }], onChange: [{ type: Output }], clsStepper: [{ type: HostBinding, args: ['class.am-stepper',] }], clsStpDisabled: [{ type: HostBinding, args: ['class.am-stepper-disabled',] }], clsShowNum: [{ type: HostBinding, args: ['class.showNumber',] }] }; return StepperComponent; }()); export { StepperComponent }; if (false) { /** @type {?} */ StepperComponent.prototype.prefixCls; /** @type {?} */ StepperComponent.prototype.upDisableCls; /** @type {?} */ StepperComponent.prototype.downDisableCls; /** @type {?} */ StepperComponent.prototype.stepperCls; /** * @type {?} * @private */ StepperComponent.prototype._max; /** * @type {?} * @private */ StepperComponent.prototype._min; /** * @type {?} * @private */ StepperComponent.prototype._value; /** * @type {?} * @private */ StepperComponent.prototype._step; /** * @type {?} * @private */ StepperComponent.prototype._defaultValue; /** * @type {?} * @private */ StepperComponent.prototype._disabled; /** * @type {?} * @private */ StepperComponent.prototype._readOnly; /** * @type {?} * @private */ StepperComponent.prototype._showNumber; /** * @type {?} * @private */ StepperComponent.prototype._upDisabled; /** * @type {?} * @private */ StepperComponent.prototype._downDisabled; /** * @type {?} * @private */ StepperComponent.prototype._isUpClick; /** * @type {?} * @private */ StepperComponent.prototype._isDownClick; /** @type {?} */ StepperComponent.prototype.onChange; /** @type {?} */ StepperComponent.prototype.clsStepper; /** @type {?} */ StepperComponent.prototype.clsStpDisabled; /** @type {?} */ StepperComponent.prototype.clsShowNum; /** * @type {?} * @private */ StepperComponent.prototype.onChangeFn; /** * @type {?} * @private */ StepperComponent.prototype.onTouchFn; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS8iLCJzb3VyY2VzIjpbInN0ZXBwZXIvc3RlcHBlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQWEsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekU7SUFrR0U7UUF0RkEsY0FBUyxHQUFXLFlBQVksQ0FBQztRQUt6QixTQUFJLEdBQVcsUUFBUSxDQUFDO1FBQ3hCLFNBQUksR0FBVyxDQUFDLFFBQVEsQ0FBQztRQUV6QixVQUFLLEdBQVcsQ0FBQyxDQUFDO1FBRWxCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBMkR0QyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUduQyxlQUFVLEdBQVksSUFBSSxDQUFDO1FBRTNCLG1CQUFjLEdBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUV6QyxlQUFVLEdBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMvQixlQUFVOzs7UUFBNEIsY0FBTyxDQUFDLEVBQUM7UUFDL0MsY0FBUzs7O1FBQTRCLGNBQU8sQ0FBQyxFQUFDO0lBRXZDLENBQUM7SUFwRWhCLHNCQUNJLGlDQUFHOzs7O1FBRFA7WUFFRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDbkIsQ0FBQzs7Ozs7UUFDRCxVQUFRLEtBQWE7WUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDcEIsQ0FBQzs7O09BSEE7SUFJRCxzQkFDSSxpQ0FBRzs7OztRQURQO1lBRUUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ25CLENBQUM7Ozs7O1FBQ0QsVUFBUSxLQUFhO1lBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLENBQUM7OztPQUhBO0lBSUQsc0JBQ0ksbUNBQUs7Ozs7UUFEVDtZQUVFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNyQixDQUFDOzs7OztRQUNELFVBQVUsQ0FBUztZQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNsQixDQUFDOzs7T0FIQTtJQUlELHNCQUNJLGtDQUFJOzs7OztRQURSLFVBQ1MsS0FBSztZQUNaLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLENBQUM7OztPQUFBO0lBQ0Qsc0JBQ0ksMENBQVk7Ozs7O1FBRGhCLFVBQ2lCLEtBQUs7WUFDcEIsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2FBQ3JCO1FBQ0gsQ0FBQzs7O09BQUE7SUFDRCxzQkFDSSxzQ0FBUTs7OztRQURaO1lBRUUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3hCLENBQUM7Ozs7O1FBQ0QsVUFBYSxLQUFjO1lBQ3pCLElBQUksS0FBSyxFQUFFO2dCQUNULElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQzthQUMxQjtZQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzlCLENBQUM7OztPQVJBO0lBU0Qsc0JBQ0ksc0NBQVE7Ozs7UUFEWjtZQUVFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUN4QixDQUFDOzs7OztRQUNELFVBQWEsS0FBYztZQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN6QixDQUFDOzs7T0FIQTtJQUlELHNCQUNJLHdDQUFVOzs7OztRQURkLFVBQ2UsS0FBYztZQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUMxQixDQUFDOzs7T0FBQTs7OztJQWVELHFDQUFVOzs7SUFBVjtRQUFBLGlCQWtCQztRQWpCQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNsRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQzthQUN6QjtZQUNELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNwRCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQzthQUM1QjtZQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNkLFVBQVU7OztZQUFDO2dCQUNULEtBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUN4QixLQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsQ0FBQyxHQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ1Q7SUFDSCxDQUFDOzs7O0lBRUQscUNBQVU7OztJQUFWO1FBQUEsaUJBa0JDO1FBakJDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ25ELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO2FBQzNCO1lBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ25ELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2FBQzFCO1lBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2QsVUFBVTs7O1lBQUM7Z0JBQ1QsS0FBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQzFCLEtBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixDQUFDLEdBQUUsR0FBRyxDQUFDLENBQUM7U0FDVDtJQUNILENBQUM7Ozs7O0lBRUQsc0NBQVc7Ozs7SUFBWCxVQUFZLEtBQUs7O1lBQ1QsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSztRQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDekI7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsQ0FBQzs7OztJQUVELGlDQUFNOzs7SUFBTjs7UUFDRSxJQUFJLENBQUMsWUFBWTtZQUNmLEdBQUksSUFBSSxDQUFDLFNBQVMseUJBQXNCLElBQUcsSUFBSSxDQUFDLFdBQVc7WUFDM0QsR0FBSSxJQUFJLENBQUMsU0FBUyxvQkFBaUIsSUFBRyxJQUFJLENBQUMsVUFBVTtlQUN0RCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGNBQWM7WUFDakIsR0FBSSxJQUFJLENBQUMsU0FBUywyQkFBd0IsSUFBRyxJQUFJLENBQUMsYUFBYTtZQUMvRCxHQUFJLElBQUksQ0FBQyxTQUFTLG9CQUFpQixJQUFHLElBQUksQ0FBQyxZQUFZO2VBQ3hELENBQUM7SUFDSixDQUFDOzs7O0lBRUQsc0NBQVc7OztJQUFYO1FBQ0UsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ3pCO2FBQU07WUFDTCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDakYsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQ3JGO1FBQ0QsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7Ozs7O0lBRUQscUNBQVU7Ozs7SUFBVixVQUFXLEtBQWE7UUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7Ozs7O0lBRUQsMkNBQWdCOzs7O0lBQWhCLFVBQWlCLEVBQTJCO1FBQzFDLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7Ozs7O0lBRUQsNENBQWlCOzs7O0lBQWpCLFVBQWtCLEVBQTJCO1FBQzNDLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7Ozs7OztJQUVELCtCQUFJOzs7OztJQUFKLFVBQUssSUFBWSxFQUFFLElBQVk7UUFDN0IsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQzlFLE9BQU87U0FDUjs7WUFDSyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN0RixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7SUFDM0UsQ0FBQzs7Ozs7O0lBRUQsZ0NBQUs7Ozs7O0lBQUwsVUFBTSxJQUFZLEVBQUUsSUFBWTtRQUM5QixJQUFJLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7WUFDOUUsT0FBTztTQUNSOztZQUNLLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztJQUMzRSxDQUFDOzs7OztJQUVELHNDQUFXOzs7O0lBQVgsVUFBWSxHQUFXOztZQUNmLE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQzs7WUFDckMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEUsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQixDQUFDOzs7Ozs7SUFFRCxnQ0FBSzs7Ozs7SUFBTCxVQUFNLElBQVksRUFBRSxJQUFZOztZQUN4QixXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7O1lBQ3JDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQzs7WUFDckMsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7O1lBQ3pELFNBQVMsR0FBRyxXQUFXLEdBQUcsV0FBVztRQUMzQyxPQUFPLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMzQyxDQUFDOzs7OztJQUVELHVDQUFZOzs7O0lBQVosVUFBYSxHQUFXO1FBQ3RCLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUN0QyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2hEOztZQUNLLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQztRQUNsQyxPQUFPLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUMvRCxDQUFDOzs7Ozs7SUFFRCxnQ0FBSzs7Ozs7SUFBTCxVQUFNLEdBQVcsRUFBRSxTQUFjO1FBQWQsMEJBQUEsRUFBQSxjQUFjO1FBQy9CLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7O2dCQXBPRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsdTVCQUF1QztvQkFDdkMsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVOzs7NEJBQUMsY0FBTSxPQUFBLGdCQUFnQixFQUFoQixDQUFnQixFQUFDOzRCQUMvQyxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjtpQkFDRjs7Ozs7c0JBb0JFLEtBQUs7c0JBT0wsS0FBSzt3QkFPTCxLQUFLO3VCQU9MLEtBQUs7K0JBSUwsS0FBSzsyQkFPTCxLQUFLOzJCQVlMLEtBQUs7NkJBT0wsS0FBSzsyQkFLTCxNQUFNOzZCQUdOLFdBQVcsU0FBQyxrQkFBa0I7aUNBRTlCLFdBQVcsU0FBQywyQkFBMkI7NkJBRXZDLFdBQVcsU0FBQyxrQkFBa0I7O0lBd0lqQyx1QkFBQztDQUFBLEFBck9ELElBcU9DO1NBMU5ZLGdCQUFnQjs7O0lBQzNCLHFDQUFpQzs7SUFDakMsd0NBQXFCOztJQUNyQiwwQ0FBdUI7O0lBQ3ZCLHNDQUFtQjs7Ozs7SUFFbkIsZ0NBQWdDOzs7OztJQUNoQyxnQ0FBaUM7Ozs7O0lBQ2pDLGtDQUF1Qjs7Ozs7SUFDdkIsaUNBQTBCOzs7OztJQUMxQix5Q0FBOEI7Ozs7O0lBQzlCLHFDQUFtQzs7Ozs7SUFDbkMscUNBQW1DOzs7OztJQUNuQyx1Q0FBcUM7Ozs7O0lBQ3JDLHVDQUFxQzs7Ozs7SUFDckMseUNBQXVDOzs7OztJQUN2QyxzQ0FBb0M7Ozs7O0lBQ3BDLHdDQUFzQzs7SUEwRHRDLG9DQUNtQzs7SUFFbkMsc0NBQzJCOztJQUMzQiwwQ0FDeUM7O0lBQ3pDLHNDQUN1Qzs7Ozs7SUFDdkMsc0NBQXVEOzs7OztJQUN2RCxxQ0FBc0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25DaGFuZ2VzLCBIb3N0QmluZGluZywgZm9yd2FyZFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdTdGVwcGVyLCBuem0tc3RlcHBlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGVwcGVyLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTdGVwcGVyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFN0ZXBwZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcHJlZml4Q2xzOiBzdHJpbmcgPSAnYW0tc3RlcHBlcic7XG4gIHVwRGlzYWJsZUNsczogb2JqZWN0O1xuICBkb3duRGlzYWJsZUNsczogb2JqZWN0O1xuICBzdGVwcGVyQ2xzOiBvYmplY3Q7XG5cbiAgcHJpdmF0ZSBfbWF4OiBudW1iZXIgPSBJbmZpbml0eTtcbiAgcHJpdmF0ZSBfbWluOiBudW1iZXIgPSAtSW5maW5pdHk7XG4gIHByaXZhdGUgX3ZhbHVlOiBudW1iZXI7XG4gIHByaXZhdGUgX3N0ZXA6IG51bWJlciA9IDE7XG4gIHByaXZhdGUgX2RlZmF1bHRWYWx1ZTogbnVtYmVyO1xuICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9yZWFkT25seTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9zaG93TnVtYmVyOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3VwRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZG93bkRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2lzVXBDbGljazogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9pc0Rvd25DbGljazogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBtYXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4O1xuICB9XG4gIHNldCBtYXgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX21heCA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBtaW4oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWluO1xuICB9XG4gIHNldCBtaW4odmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX21pbiA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCB2YWx1ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuICBzZXQgdmFsdWUodjogbnVtYmVyKSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2O1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBzdGVwKHZhbHVlKSB7XG4gICAgdGhpcy5fc3RlcCA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBkZWZhdWx0VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuX2RlZmF1bHRWYWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuX2Rvd25EaXNhYmxlZCA9IHZhbHVlO1xuICAgICAgdGhpcy5fdXBEaXNhYmxlZCA9IHZhbHVlO1xuICAgIH1cbiAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMuY2xzU3RwRGlzYWJsZWQgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgcmVhZE9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5O1xuICB9XG4gIHNldCByZWFkT25seSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3JlYWRPbmx5ID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHNob3dOdW1iZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zaG93TnVtYmVyID0gdmFsdWU7XG4gICAgdGhpcy5jbHNTaG93TnVtID0gdmFsdWU7XG4gIH1cbiAgQE91dHB1dCgpXG4gIG9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1zdGVwcGVyJylcbiAgY2xzU3RlcHBlcjogYm9vbGVhbiA9IHRydWU7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tc3RlcHBlci1kaXNhYmxlZCcpXG4gIGNsc1N0cERpc2FibGVkOiBib29sZWFuID0gdGhpcy5fZGlzYWJsZWQ7XG4gIEBIb3N0QmluZGluZygnY2xhc3Muc2hvd051bWJlcicpXG4gIGNsc1Nob3dOdW06IGJvb2xlYW4gPSB0aGlzLl9zaG93TnVtYmVyO1xuICBwcml2YXRlIG9uQ2hhbmdlRm46ICh2YWx1ZTogbnVtYmVyKSA9PiB2b2lkID0gKCkgPT4ge307XG4gIHByaXZhdGUgb25Ub3VjaEZuOiAodmFsdWU6IG51bWJlcikgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBvbkluY3JlYXNlKCkge1xuICAgIGlmICghdGhpcy5fdXBEaXNhYmxlZCkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLnBsdXModGhpcy5fdmFsdWUsIHRoaXMuX3N0ZXApO1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgICAgIHRoaXMub25DaGFuZ2VGbih0aGlzLl92YWx1ZSk7XG4gICAgICBpZiAodGhpcy5wbHVzKHRoaXMuX3ZhbHVlLCB0aGlzLl9zdGVwKSA+IHRoaXMuX21heCkge1xuICAgICAgICB0aGlzLl91cERpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm1pbnVzKHRoaXMuX3ZhbHVlLCB0aGlzLl9zdGVwKSA+PSB0aGlzLl9taW4pIHtcbiAgICAgICAgdGhpcy5fZG93bkRpc2FibGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLl9pc1VwQ2xpY2sgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRDbHMoKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9pc1VwQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZXRDbHMoKTtcbiAgICAgIH0sIDEwMCk7XG4gICAgfVxuICB9XG5cbiAgb25EZWNyZWFzZSgpIHtcbiAgICBpZiAoIXRoaXMuX2Rvd25EaXNhYmxlZCkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLm1pbnVzKHRoaXMuX3ZhbHVlLCB0aGlzLl9zdGVwKTtcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0aGlzLl92YWx1ZSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlRm4odGhpcy5fdmFsdWUpO1xuICAgICAgaWYgKHRoaXMubWludXModGhpcy5fdmFsdWUsIHRoaXMuX3N0ZXApIDwgdGhpcy5fbWluKSB7XG4gICAgICAgIHRoaXMuX2Rvd25EaXNhYmxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5wbHVzKHRoaXMuX3ZhbHVlLCB0aGlzLl9zdGVwKSA8PSB0aGlzLl9tYXgpIHtcbiAgICAgICAgdGhpcy5fdXBEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5faXNEb3duQ2xpY2sgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRDbHMoKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9pc0Rvd25DbGljayA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNldENscygpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9XG4gIH1cblxuICBpbnB1dENoYW5nZShldmVudCkge1xuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWUgPyBwYXJzZUludCh2YWx1ZSwgbnVsbCkgOiAwO1xuICAgIGlmICh2YWx1ZSA8IHRoaXMuX21pbikge1xuICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLl9taW47XG4gICAgfVxuICAgIGlmICh2YWx1ZSA+IHRoaXMuX21heCkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLl9tYXg7XG4gICAgfVxuICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0aGlzLl92YWx1ZSk7XG4gICAgdGhpcy5vbkNoYW5nZUZuKHRoaXMuX3ZhbHVlKTtcbiAgfVxuXG4gIHNldENscygpIHtcbiAgICB0aGlzLnVwRGlzYWJsZUNscyA9IHtcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30taGFuZGxlci11cC1kaXNhYmxlZGBdOiB0aGlzLl91cERpc2FibGVkLFxuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1oYW5kbGVyLWFjdGl2ZWBdOiB0aGlzLl9pc1VwQ2xpY2tcbiAgICB9O1xuICAgIHRoaXMuZG93bkRpc2FibGVDbHMgPSB7XG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWhhbmRsZXItZG93bi1kaXNhYmxlZGBdOiB0aGlzLl9kb3duRGlzYWJsZWQsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWhhbmRsZXItYWN0aXZlYF06IHRoaXMuX2lzRG93bkNsaWNrXG4gICAgfTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIGlmICh0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgdGhpcy5fZG93bkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3VwRGlzYWJsZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl91cERpc2FibGVkID0gdGhpcy5wbHVzKHRoaXMuX3ZhbHVlLCB0aGlzLl9zdGVwKSA+IHRoaXMuX21heCA/IHRydWUgOiBmYWxzZTtcbiAgICAgIHRoaXMuX2Rvd25EaXNhYmxlZCA9IHRoaXMubWludXModGhpcy5fdmFsdWUsIHRoaXMuX3N0ZXApIDwgdGhpcy5fbWluID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLnNldENscygpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLm5nT25DaGFuZ2VzKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IG51bWJlcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2VGbiA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICh2YWx1ZTogbnVtYmVyKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoRm4gPSBmbjtcbiAgfVxuXG4gIHBsdXMobnVtMTogbnVtYmVyLCBudW0yOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChudW0xID09PSB1bmRlZmluZWQgfHwgbnVtMSA9PT0gbnVsbCB8fCBudW0yID09PSB1bmRlZmluZWQgfHwgbnVtMiA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBiYXNlTnVtID0gTWF0aC5wb3coMTAsIE1hdGgubWF4KHRoaXMuZGlnaXRMZW5ndGgobnVtMSksIHRoaXMuZGlnaXRMZW5ndGgobnVtMikpKTtcbiAgICByZXR1cm4gKHRoaXMudGltZXMobnVtMSwgYmFzZU51bSkgKyB0aGlzLnRpbWVzKG51bTIsIGJhc2VOdW0pKSAvIGJhc2VOdW07XG4gIH1cblxuICBtaW51cyhudW0xOiBudW1iZXIsIG51bTI6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKG51bTEgPT09IHVuZGVmaW5lZCB8fCBudW0xID09PSBudWxsIHx8IG51bTIgPT09IHVuZGVmaW5lZCB8fCBudW0yID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJhc2VOdW0gPSBNYXRoLnBvdygxMCwgTWF0aC5tYXgodGhpcy5kaWdpdExlbmd0aChudW0xKSwgdGhpcy5kaWdpdExlbmd0aChudW0yKSkpO1xuICAgIHJldHVybiAodGhpcy50aW1lcyhudW0xLCBiYXNlTnVtKSAtIHRoaXMudGltZXMobnVtMiwgYmFzZU51bSkpIC8gYmFzZU51bTtcbiAgfVxuXG4gIGRpZ2l0TGVuZ3RoKG51bTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBlU3BsaXQgPSBudW0udG9TdHJpbmcoKS5zcGxpdCgvW2VFXS8pO1xuICAgIGNvbnN0IGxlbiA9IChlU3BsaXRbMF0uc3BsaXQoJy4nKVsxXSB8fCAnJykubGVuZ3RoIC0gKyhlU3BsaXRbMV0gfHwgMCk7XG4gICAgcmV0dXJuIGxlbiA+IDAgPyBsZW4gOiAwO1xuICB9XG5cbiAgdGltZXMobnVtMTogbnVtYmVyLCBudW0yOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IG51bTFDaGFuZ2VkID0gdGhpcy5mbG9hdFRvRml4ZWQobnVtMSk7XG4gICAgY29uc3QgbnVtMkNoYW5nZWQgPSB0aGlzLmZsb2F0VG9GaXhlZChudW0yKTtcbiAgICBjb25zdCBiYXNlTnVtID0gdGhpcy5kaWdpdExlbmd0aChudW0xKSArIHRoaXMuZGlnaXRMZW5ndGgobnVtMik7XG4gICAgY29uc3QgbGVmdFZhbHVlID0gbnVtMUNoYW5nZWQgKiBudW0yQ2hhbmdlZDtcbiAgICByZXR1cm4gbGVmdFZhbHVlIC8gTWF0aC5wb3coMTAsIGJhc2VOdW0pO1xuICB9XG5cbiAgZmxvYXRUb0ZpeGVkKG51bTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAobnVtLnRvU3RyaW5nKCkuaW5kZXhPZignZScpID09PSAtMSkge1xuICAgICAgcmV0dXJuIE51bWJlcihudW0udG9TdHJpbmcoKS5yZXBsYWNlKCcuJywgJycpKTtcbiAgICB9XG4gICAgY29uc3QgZExlbiA9IHRoaXMuZGlnaXRMZW5ndGgobnVtKTtcbiAgICByZXR1cm4gZExlbiA+IDAgPyB0aGlzLnN0cmlwKG51bSAqIE1hdGgucG93KDEwLCBkTGVuKSkgOiBudW07XG4gIH1cblxuICBzdHJpcChudW06IG51bWJlciwgcHJlY2lzaW9uID0gMTIpOiBudW1iZXIge1xuICAgIHJldHVybiArcGFyc2VGbG9hdChudW0udG9QcmVjaXNpb24ocHJlY2lzaW9uKSk7XG4gIH1cbn1cbiJdfQ==