ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
430 lines (429 loc) • 29.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Component, Input, Output, EventEmitter, ElementRef, HostBinding } from '@angular/core';
export class Range {
/**
* @param {?} _elf
*/
constructor(_elf) {
this._elf = _elf;
this.prefixCls = 'am-slider';
this.offset = [];
this.length = [];
this._min = 0;
this._max = 100;
this._step = 1;
this._defaultValue = [0, 0, 0];
this._disabled = false;
this._marks = {};
this._dots = false;
this._included = true;
this._count = 1;
this._allowCross = true;
this._handleStyle = [];
this._trackStyle = [];
this.onChange = new EventEmitter();
this.onAfterChange = new EventEmitter();
this.amWrapper = true;
}
/**
* @return {?}
*/
get min() {
return this._min;
}
/**
* @param {?} value
* @return {?}
*/
set min(value) {
this._min = value;
}
/**
* @return {?}
*/
get max() {
return this._max;
}
/**
* @param {?} value
* @return {?}
*/
set max(value) {
this._max = value;
}
/**
* @return {?}
*/
get step() {
return this._step;
}
/**
* @param {?} value
* @return {?}
*/
set step(value) {
this._step = value;
}
/**
* @return {?}
*/
get value() {
return this._value;
}
/**
* @param {?} value
* @return {?}
*/
set value(value) {
this._value = value;
}
/**
* @param {?} value
* @return {?}
*/
set defaultValue(value) {
this._defaultValue = value;
this._value = this._defaultValue;
}
/**
* @return {?}
*/
get disabled() {
return this._disabled;
}
/**
* @param {?} value
* @return {?}
*/
set disabled(value) {
this._disabled = value;
}
/**
* @return {?}
*/
get marks() {
return this._marks;
}
/**
* @param {?} value
* @return {?}
*/
set marks(value) {
this._marks = value;
}
/**
* @return {?}
*/
get dots() {
return this._dots;
}
/**
* @param {?} value
* @return {?}
*/
set dots(value) {
this._dots = value;
}
/**
* @return {?}
*/
get included() {
return this._included;
}
/**
* @param {?} value
* @return {?}
*/
set included(value) {
this._included = value;
}
/**
* @param {?} value
* @return {?}
*/
set count(value) {
this._count = value;
}
/**
* @param {?} value
* @return {?}
*/
set allowCross(value) {
this._allowCross = value;
this.setValueBound();
}
/**
* @param {?} value
* @return {?}
*/
set pushable(value) {
this._pushable = value;
if (this.verifyPushable()) {
this.setValueBound();
}
}
/**
* @return {?}
*/
get handleStyle() {
return this._handleStyle;
}
/**
* @param {?} value
* @return {?}
*/
set handleStyle(value) {
this._handleStyle = value;
}
/**
* @return {?}
*/
get trackStyle() {
return this._trackStyle;
}
/**
* @param {?} value
* @return {?}
*/
set trackStyle(value) {
this._trackStyle = value;
}
/**
* @return {?}
*/
get railStyle() {
return this._railStyle;
}
/**
* @param {?} value
* @return {?}
*/
set railStyle(value) {
this._railStyle = value;
}
/**
* @return {?}
*/
setCls() {
this.sliderCls = {
[`${this.prefixCls}-disabled`]: this._disabled
};
}
/**
* @return {?}
*/
initialValue() {
/** @type {?} */
const minTemp = this._min;
/** @type {?} */
const initialValue = Array.apply(null, Array(this._count + 1)).map(function () {
return minTemp;
});
this._defaultValue = this._defaultValue !== undefined ? this._defaultValue : initialValue;
this._value = this._value !== undefined ? this._value : this._defaultValue;
if (this._count > 0) {
this.upperBound = Math.max(...this._value);
this.lowerBound = Math.min(...this._value);
}
}
/**
* @param {?} e
* @param {?} i
* @return {?}
*/
handleChange(e, i) {
/** @type {?} */
let temp = [...this._value];
if (typeof this._pushable === 'boolean' && this._pushable) {
/** @type {?} */
const diff = e - this._value[i];
temp = temp.map(v => (v = v + diff));
}
else {
temp[i] = e;
}
this.upperBound = Math.max(...temp);
this.lowerBound = Math.min(...temp);
this.setTrackStyle(temp);
this.onChange.emit(temp);
}
/**
* @param {?} e
* @param {?} i
* @return {?}
*/
handleAfterChange(e, i) {
setTimeout(() => {
this._value[i] = e;
this.upperBound = Math.max(...this._value);
this.lowerBound = Math.min(...this._value);
this.setTrackStyle(this._value);
this.onAfterChange.emit(this._value);
this.setValueBound();
}, 0);
}
/**
* @param {?} value
* @return {?}
*/
setTrackStyle(value) {
if (value && value.length === this._count + 1) {
value.sort((a, b) => a - b);
for (let i = 0; i < this._count; i++) {
this.offset[i] = (value[i] * 100) / (this._max - this._min);
this.length[i] = ((value[i + 1] - value[i]) * 100) / (this._max - this._min);
}
}
}
/**
* @return {?}
*/
setValueBound() {
this.maxBound = [];
this.minBound = [];
if (this._allowCross || this._handleCount <= 1) {
for (let i = 0; i < this._handleCount; i++) {
this.maxBound[i] = this._max;
this.minBound[i] = this._min;
}
}
else {
if (typeof this._pushable !== 'number' || (typeof this._pushable === 'boolean' && this._pushable)) {
this._pushable = 0;
}
for (let i = 0; i < this._handleCount; i++) {
this.maxBound[i] = i === this._handleCount - 1 ? this._max : this._value[i + 1] - this._pushable;
this.minBound[i] = i === 0 ? this._min : this._value[i - 1] + this._pushable;
}
}
}
/**
* @return {?}
*/
verifyPushable() {
if (typeof this._pushable === 'number') {
for (let i = 1; i < this._handleCount; i++) {
/** @type {?} */
const diff = this._value[i] - this._value[i - 1];
if (diff < this._pushable) {
return false;
}
}
}
return true;
}
/**
* @return {?}
*/
ngOnInit() {
if (this._max === undefined || this._min === undefined) {
return;
}
if (this.verifyPushable()) {
this.setValueBound();
this._handleCount = this._count + 1;
this.setCls();
/** @type {?} */
const sliderCoords = this._elf.nativeElement.getElementsByClassName('am-slider')[0].getBoundingClientRect();
this.sliderLength = sliderCoords.width;
this.sliderStart = sliderCoords.left;
this.initialValue();
}
}
}
Range.decorators = [
{ type: Component, args: [{
selector: 'Range , nzm-range',
template: "<div class=\"am-slider\" [ngClass]=\"sliderCls\">\n <div class=\"am-slider-rail\" [ngStyle]=\"railStyle\"></div>\n <SliderTrack *ngFor=\"let off of offset ; let i = index\"\n [className]=\"'am-slider-track'\"\n [included]=\"included\"\n [style]=\"trackStyle[i]\"\n [offset]=\"off\"\n [length]=\"length[i]\"\n ></SliderTrack>\n <SliderSteps [max]=\"max\"\n [min]=\"min\"\n [dots]=\"dots\"\n [step]=\"step\"\n [marks]=\"marks\"\n [upperBound]=\"upperBound\"\n [lowerBound]=\"lowerBound\"\n ></SliderSteps>\n <SliderHandle *ngFor=\"let val of value ; let i = index\"\n [max]=\"max\"\n [min]=\"min\"\n [maxBound]=\"maxBound[i]\"\n [minBound]=\"minBound[i]\"\n [value]=\"val\"\n [step]=\"step\"\n [disabled]=\"disabled\"\n [sliderLength]=\"sliderLength\"\n [sliderStart]=\"sliderStart\"\n [handleStyle]=\"handleStyle[i]\"\n (onChange)=\"handleChange($event , i)\"\n (onAfterChange)=\"handleAfterChange($event , i)\"\n ></SliderHandle>\n <SliderMarks [max]=\"max\"\n [min]=\"min\"\n [marks]=\"marks\"\n [upperBound]=\"upperBound\"\n [lowerBound]=\"lowerBound\"\n ></SliderMarks>\n</div>\n"
}] }
];
/** @nocollapse */
Range.ctorParameters = () => [
{ type: ElementRef }
];
Range.propDecorators = {
min: [{ type: Input }],
max: [{ type: Input }],
step: [{ type: Input }],
value: [{ type: Input }],
defaultValue: [{ type: Input }],
disabled: [{ type: Input }],
marks: [{ type: Input }],
dots: [{ type: Input }],
included: [{ type: Input }],
count: [{ type: Input }],
allowCross: [{ type: Input }],
pushable: [{ type: Input }],
handleStyle: [{ type: Input }],
trackStyle: [{ type: Input }],
railStyle: [{ type: Input }],
onChange: [{ type: Output }],
onAfterChange: [{ type: Output }],
amWrapper: [{ type: HostBinding, args: ['class.am-slider-wrapper',] }]
};
if (false) {
/** @type {?} */
Range.prototype.prefixCls;
/** @type {?} */
Range.prototype.offset;
/** @type {?} */
Range.prototype.length;
/** @type {?} */
Range.prototype.upperBound;
/** @type {?} */
Range.prototype.lowerBound;
/** @type {?} */
Range.prototype.maxBound;
/** @type {?} */
Range.prototype.minBound;
/** @type {?} */
Range.prototype.sliderCls;
/** @type {?} */
Range.prototype.sliderLength;
/** @type {?} */
Range.prototype.sliderStart;
/** @type {?} */
Range.prototype._min;
/** @type {?} */
Range.prototype._max;
/** @type {?} */
Range.prototype._step;
/** @type {?} */
Range.prototype._value;
/** @type {?} */
Range.prototype._defaultValue;
/** @type {?} */
Range.prototype._disabled;
/** @type {?} */
Range.prototype._marks;
/** @type {?} */
Range.prototype._dots;
/** @type {?} */
Range.prototype._included;
/** @type {?} */
Range.prototype._count;
/** @type {?} */
Range.prototype._allowCross;
/** @type {?} */
Range.prototype._pushable;
/** @type {?} */
Range.prototype._handleStyle;
/** @type {?} */
Range.prototype._trackStyle;
/** @type {?} */
Range.prototype._railStyle;
/** @type {?} */
Range.prototype._handleCount;
/** @type {?} */
Range.prototype.onChange;
/** @type {?} */
Range.prototype.onAfterChange;
/** @type {?} */
Range.prototype.amWrapper;
/** @type {?} */
Range.prototype._elf;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvIiwic291cmNlcyI6WyJyYW5nZS9yYW5nZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU14RyxNQUFNOzs7O0lBdUlKLFlBQW9CLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7eUJBdEloQixXQUFXO3NCQUNmLEVBQUU7c0JBQ0YsRUFBRTtvQkFTSCxDQUFDO29CQUNELEdBQUc7cUJBQ0YsQ0FBQzs2QkFFTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3lCQUNiLEtBQUs7c0JBQ1IsRUFBRTtxQkFDSCxLQUFLO3lCQUNELElBQUk7c0JBQ1AsQ0FBQzsyQkFDSSxJQUFJOzRCQUVILEVBQUU7MkJBQ0gsRUFBRTt3QkF1R2IsSUFBSSxZQUFZLEVBQU87NkJBRWxCLElBQUksWUFBWSxFQUFPO3lCQUdsQixJQUFJO0tBRWU7Ozs7SUExR3hDLElBQ0ksR0FBRztRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztLQUNsQjs7Ozs7SUFDRCxJQUFJLEdBQUcsQ0FBQyxLQUFhO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0tBQ25COzs7O0lBQ0QsSUFDSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0tBQ2xCOzs7OztJQUNELElBQUksR0FBRyxDQUFDLEtBQWE7UUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7S0FDbkI7Ozs7SUFDRCxJQUNJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDbkI7Ozs7O0lBQ0QsSUFBSSxJQUFJLENBQUMsS0FBYTtRQUNwQixJQUFJ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LENBQUMsTUFBTSxFQUFFLENBQUM7O1lBQ2QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM1RyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7WUFDdkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNyQjtLQUNGOzs7WUEvT0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLHE5Q0FBcUM7YUFDdEM7Ozs7WUFMd0QsVUFBVTs7O2tCQW1DaEUsS0FBSztrQkFPTCxLQUFLO21CQU9MLEtBQUs7b0JBT0wsS0FBSzsyQkFPTCxLQUFLO3VCQUtMLEtBQUs7b0JBT0wsS0FBSzttQkFPTCxLQUFLO3VCQU9MLEtBQUs7b0JBT0wsS0FBSzt5QkFJTCxLQUFLO3VCQUtMLEtBQUs7MEJBT0wsS0FBSzt5QkFPTCxLQUFLO3dCQU9MLEtBQUs7dUJBT0wsTUFBTTs0QkFFTixNQUFNO3dCQUdOLFdBQVcsU0FBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBFbGVtZW50UmVmLCBIb3N0QmluZGluZyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdSYW5nZSAsIG56bS1yYW5nZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9yYW5nZS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgUmFuZ2UgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcmVmaXhDbHM6IHN0cmluZyA9ICdhbS1zbGlkZXInO1xuICBvZmZzZXQ6IGFueVtdID0gW107XG4gIGxlbmd0aDogYW55W10gPSBbXTtcbiAgdXBwZXJCb3VuZDogbnVtYmVyO1xuICBsb3dlckJvdW5kOiBudW1iZXI7XG4gIG1heEJvdW5kOiBudW1iZXJbXTtcbiAgbWluQm91bmQ6IG51bWJlcltdO1xuICBzbGlkZXJDbHM6IG9iamVjdDtcbiAgc2xpZGVyTGVuZ3RoOiBudW1iZXI7XG4gIHNsaWRlclN0YXJ0OiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBfbWluID0gMDtcbiAgcHJpdmF0ZSBfbWF4ID0gMTAwO1xuICBwcml2YXRlIF9zdGVwID0gMTtcbiAgcHJpdmF0ZSBfdmFsdWU7XG4gIHByaXZhdGUgX2RlZmF1bHRWYWx1ZSA9IFswLCAwLCAwXTtcbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfbWFya3MgPSB7fTtcbiAgcHJpdmF0ZSBfZG90cyA9IGZhbHNlO1xuICBwcml2YXRlIF9pbmNsdWRlZCA9IHRydWU7XG4gIHByaXZhdGUgX2NvdW50ID0gMTtcbiAgcHJpdmF0ZSBfYWxsb3dDcm9zcyA9IHRydWU7XG4gIHByaXZhdGUgX3B1c2hhYmxlO1xuICBwcml2YXRlIF9oYW5kbGVTdHlsZSA9IFtdO1xuICBwcml2YXRlIF90cmFja1N0eWxlID0gW107XG4gIHByaXZhdGUgX3JhaWxTdHlsZTtcbiAgcHJpdmF0ZSBfaGFuZGxlQ291bnQ7XG5cbiAgQElucHV0KClcbiAgZ2V0IG1pbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9taW47XG4gIH1cbiAgc2V0IG1pbih2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWluID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IG1heCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXg7XG4gIH1cbiAgc2V0IG1heCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWF4ID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHN0ZXAoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc3RlcDtcbiAgfVxuICBzZXQgc3RlcCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3RlcCA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCB2YWx1ZSgpOiBbbnVtYmVyXSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG4gIHNldCB2YWx1ZSh2YWx1ZTogW251bWJlcl0pIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBkZWZhdWx0VmFsdWUodmFsdWUpIHtcbiAgICB0aGlzLl9kZWZhdWx0VmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IG1hcmtzKCk6IG9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtzO1xuICB9XG4gIHNldCBtYXJrcyh2YWx1ZTogb2JqZWN0KSB7XG4gICAgdGhpcy5fbWFya3MgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgZG90cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZG90cztcbiAgfVxuICBzZXQgZG90cyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2RvdHMgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgaW5jbHVkZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2luY2x1ZGVkO1xuICB9XG4gIHNldCBpbmNsdWRlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2luY2x1ZGVkID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGNvdW50KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9jb3VudCA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBhbGxvd0Nyb3NzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fYWxsb3dDcm9zcyA9IHZhbHVlO1xuICAgIHRoaXMuc2V0VmFsdWVCb3VuZCgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBwdXNoYWJsZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fcHVzaGFibGUgPSB2YWx1ZTtcbiAgICBpZiAodGhpcy52ZXJpZnlQdXNoYWJsZSgpKSB7XG4gICAgICB0aGlzLnNldFZhbHVlQm91bmQoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGhhbmRsZVN0eWxlKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5faGFuZGxlU3R5bGU7XG4gIH1cbiAgc2V0IGhhbmRsZVN0eWxlKHZhbHVlOiBhbnlbXSkge1xuICAgIHRoaXMuX2hhbmRsZVN0eWxlID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHRyYWNrU3R5bGUoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLl90cmFja1N0eWxlO1xuICB9XG4gIHNldCB0cmFja1N0eWxlKHZhbHVlOiBhbnlbXSkge1xuICAgIHRoaXMuX3RyYWNrU3R5bGUgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgcmFpbFN0eWxlKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fcmFpbFN0eWxlO1xuICB9XG4gIHNldCByYWlsU3R5bGUodmFsdWU6IGFueVtdKSB7XG4gICAgdGhpcy5fcmFpbFN0eWxlID0gdmFsdWU7XG4gIH1cbiAgQE91dHB1dCgpXG4gIG9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKVxuICBvbkFmdGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1zbGlkZXItd3JhcHBlcicpXG4gIGFtV3JhcHBlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZWxmOiBFbGVtZW50UmVmKSB7fVxuXG4gIHNldENscygpIHtcbiAgICB0aGlzLnNsaWRlckNscyA9IHtcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30tZGlzYWJsZWRgXTogdGhpcy5fZGlzYWJsZWRcbiAgICB9O1xuICB9XG5cbiAgaW5pdGlhbFZhbHVlKCkge1xuICAgIGNvbnN0IG1pblRlbXAgPSB0aGlzLl9taW47XG4gICAgY29uc3QgaW5pdGlhbFZhbHVlID0gQXJyYXkuYXBwbHkobnVsbCwgQXJyYXkodGhpcy5fY291bnQgKyAxKSkubWFwKGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG1pblRlbXA7XG4gICAgfSk7XG4gICAgdGhpcy5fZGVmYXVsdFZhbHVlID0gdGhpcy5fZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgPyB0aGlzLl9kZWZhdWx0VmFsdWUgOiBpbml0aWFsVmFsdWU7XG4gICAgdGhpcy5fdmFsdWUgPSB0aGlzLl92YWx1ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5fdmFsdWUgOiB0aGlzLl9kZWZhdWx0VmFsdWU7XG4gICAgaWYgKHRoaXMuX2NvdW50ID4gMCkge1xuICAgICAgdGhpcy51cHBlckJvdW5kID0gTWF0aC5tYXgoLi4udGhpcy5fdmFsdWUpO1xuICAgICAgdGhpcy5sb3dlckJvdW5kID0gTWF0aC5taW4oLi4udGhpcy5fdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUNoYW5nZShlLCBpKSB7XG4gICAgbGV0IHRlbXAgPSBbLi4udGhpcy5fdmFsdWVdO1xuICAgIGlmICh0eXBlb2YgdGhpcy5fcHVzaGFibGUgPT09ICdib29sZWFuJyAmJiB0aGlzLl9wdXNoYWJsZSkge1xuICAgICAgY29uc3QgZGlmZiA9IGUgLSB0aGlzLl92YWx1ZVtpXTtcbiAgICAgIHRlbXAgPSB0ZW1wLm1hcCh2ID0+ICh2ID0gdiArIGRpZmYpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGVtcFtpXSA9IGU7XG4gICAgfVxuICAgIHRoaXMudXBwZXJCb3VuZCA9IE1hdGgubWF4KC4uLnRlbXApO1xuICAgIHRoaXMubG93ZXJCb3VuZCA9IE1hdGgubWluKC4uLnRlbXApO1xuICAgIHRoaXMuc2V0VHJhY2tTdHlsZSh0ZW1wKTtcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGVtcCk7XG4gIH1cblxuICBoYW5kbGVBZnRlckNoYW5nZShlLCBpKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl92YWx1ZVtpXSA9IGU7XG4gICAgICB0aGlzLnVwcGVyQm91bmQgPSBNYXRoLm1heCguLi50aGlzLl92YWx1ZSk7XG4gICAgICB0aGlzLmxvd2VyQm91bmQgPSBNYXRoLm1pbiguLi50aGlzLl92YWx1ZSk7XG4gICAgICB0aGlzLnNldFRyYWNrU3R5bGUodGhpcy5fdmFsdWUpO1xuICAgICAgdGhpcy5vbkFmdGVyQ2hhbmdlLmVtaXQodGhpcy5fdmFsdWUpO1xuICAgICAgdGhpcy5zZXRWYWx1ZUJvdW5kKCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBzZXRUcmFja1N0eWxlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCA9PT0gdGhpcy5fY291bnQgKyAxKSB7XG4gICAgICB2YWx1ZS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2NvdW50OyBpKyspIHtcbiAgICAgICAgdGhpcy5vZmZzZXRbaV0gPSAodmFsdWVbaV0gKiAxMDApIC8gKHRoaXMuX21heCAtIHRoaXMuX21pbik7XG4gICAgICAgIHRoaXMubGVuZ3RoW2ldID0gKCh2YWx1ZVtpICsgMV0gLSB2YWx1ZVtpXSkgKiAxMDApIC8gKHRoaXMuX21heCAtIHRoaXMuX21pbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0VmFsdWVCb3VuZCgpIHtcbiAgICB0aGlzLm1heEJvdW5kID0gW107XG4gICAgdGhpcy5taW5Cb3VuZCA9IFtdO1xuICAgIGlmICh0aGlzLl9hbGxvd0Nyb3NzIHx8IHRoaXMuX2hhbmRsZUNvdW50IDw9IDEpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5faGFuZGxlQ291bnQ7IGkrKykge1xuICAgICAgICB0aGlzLm1heEJvdW5kW2ldID0gdGhpcy5fbWF4O1xuICAgICAgICB0aGlzLm1pbkJvdW5kW2ldID0gdGhpcy5fbWluO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuX3B1c2hhYmxlICE9PSAnbnVtYmVyJyB8fCAodHlwZW9mIHRoaXMuX3B1c2hhYmxlID09PSAnYm9vbGVhbicgJiYgdGhpcy5fcHVzaGFibGUpKSB7XG4gICAgICAgIHRoaXMuX3B1c2hhYmxlID0gMDtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5faGFuZGxlQ291bnQ7IGkrKykge1xuICAgICAgICB0aGlzLm1heEJvdW5kW2ldID0gaSA9PT0gdGhpcy5faGFuZGxlQ291bnQgLSAxID8gdGhpcy5fbWF4IDogdGhpcy5fdmFsdWVbaSArIDFdIC0gdGhpcy5fcHVzaGFibGU7XG4gICAgICAgIHRoaXMubWluQm91bmRbaV0gPSBpID09PSAwID8gdGhpcy5fbWluIDogdGhpcy5fdmFsdWVbaSAtIDFdICsgdGhpcy5fcHVzaGFibGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmVyaWZ5UHVzaGFibGUoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9wdXNoYWJsZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5faGFuZGxlQ291bnQ7IGkrKykge1xuICAgICAgICBjb25zdCBkaWZmID0gdGhpcy5fdmFsdWVbaV0gLSB0aGlzLl92YWx1ZVtpIC0gMV07XG4gICAgICAgIGlmIChkaWZmIDwgdGhpcy5fcHVzaGFibGUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5fbWF4ID09PSB1bmRlZmluZWQgfHwgdGhpcy5fbWluID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMudmVyaWZ5UHVzaGFibGUoKSkge1xuICAgICAgdGhpcy5zZXRWYWx1ZUJvdW5kKCk7XG4gICAgICB0aGlzLl9oYW5kbGVDb3VudCA9IHRoaXMuX2NvdW50ICsgMTtcbiAgICAgIHRoaXMuc2V0Q2xzKCk7XG4gICAgICBjb25zdCBzbGlkZXJDb29yZHMgPSB0aGlzLl9lbGYubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhbS1zbGlkZXInKVswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHRoaXMuc2xpZGVyTGVuZ3RoID0gc2xpZGVyQ29vcmRzLndpZHRoO1xuICAgICAgdGhpcy5zbGlkZXJTdGFydCA9IHNsaWRlckNvb3Jkcy5sZWZ0O1xuICAgICAgdGhpcy5pbml0aWFsVmFsdWUoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==