@foxone/finance-ui
Version:
The Financial UI Component Library Based on @foxone/uikit and vuetify
381 lines (345 loc) • 40.6 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _babelHelperVueJsxMergeProps = _interopRequireDefault(require("@vue/babel-helper-vue-jsx-merge-props"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _compositionApi = require("@vue/composition-api");
var _classnames = _interopRequireDefault(require("../utils/classnames"));
var _number = require("../utils/number");
var _lib = require("vuetify/lib");
var _FAssetAmountInput = require("@foxone/uikit/src/components/FAssetAmountInput");
var _FButton = require("@foxone/uikit/src/components/FButton");
require("vue-slider-component/theme/default.css");
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
// avoid typescript error
var VueSlider = require('vue-slider-component');
var _default2 = (0, _compositionApi.defineComponent)({
name: 'AssetRangeInput',
model: {
prop: 'value',
event: 'input'
},
props: {
value: {
type: [String, Number],
"default": ''
},
prefixCls: {
type: String,
"default": 'asset-range-input'
},
min: {
type: Number,
"default": 0
},
max: {
type: Number,
"default": 0
},
color: {
type: String,
"default": 'primary'
},
disabledInput: {
type: Boolean,
"default": void 0
},
disabledSlider: {
type: Boolean,
"default": void 0
},
disabledBtn: {
type: Boolean,
"default": void 0
},
selectable: {
type: Boolean,
"default": true
},
border: {
type: Boolean,
"default": false
},
loading: {
type: Boolean,
"default": false
},
assets: {
type: Array,
"default": function _default() {
return [];
}
},
asset: {
type: Object,
"default": function _default() {
return {};
}
},
inputTips: {
type: Object,
"default": function _default() {
return {};
}
},
error: {
type: [String, Function],
"default": ''
},
ratioText: {
type: String,
"default": 'Ratio'
},
showSlider: {
type: Boolean,
"default": true
},
showSliderTips: {
type: Boolean,
"default": true
},
btnText: {
type: String,
"default": 'Confirm'
},
showBtn: {
type: Boolean,
"default": true
}
},
setup: function setup(props) {
var classes = (0, _classnames["default"])(props.prefixCls);
(0, _compositionApi.onMounted)(function () {
console.info('AssetRangeInput mounted!');
});
return {
classes: classes
};
},
data: function data() {
var _value_input = '';
var _value_slider = 0;
return {
_value_input: _value_input,
_value_slider: _value_slider
};
},
computed: {
bindAsset: {
get: function get() {
return this.asset;
},
set: function set(val) {
this.$emit('update:asset', val);
}
},
hasInputLeftTips: function hasInputLeftTips() {
var _a, _b, _c;
return !!(((_a = this.inputTips) === null || _a === void 0 ? void 0 : _a.amount) || ((_b = this.inputTips) === null || _b === void 0 ? void 0 : _b.amountSymbol) || ((_c = this.inputTips) === null || _c === void 0 ? void 0 : _c.tipLeft));
},
hasUpperLimit: function hasUpperLimit() {
return this.max && 1 / this.max;
}
},
watch: {
value: function value(val) {
if (!this.isInRange(+val)) this.$emit('error:limit');
this._value_input = val;
this.setSliderValueWithLimit(+val);
}
},
created: function created() {
if (!this.isInRange(+this.value)) this.$emit('error:limit');
this._value_input = this.value;
this.setSliderValueWithLimit(+this.value);
},
methods: {
isInRange: function isInRange(val) {
return val >= this.min && (!this.hasUpperLimit || val <= this.max);
},
setSliderValueWithLimit: function setSliderValueWithLimit(val) {
if (this.hasUpperLimit && typeof val === 'number') {
var _val = val / this.max * 100;
if (_val > 100) _val = 100;
if (_val < 0) _val = 0;
this._value_slider = (0, _number.format)({
n: _val,
p: 2
});
}
}
},
render: function render(h) {
var _this = this;
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
var btn = this.$slots.button;
var slider = this.$slots.slider;
var inputTips = this.$slots.inputTips;
var sliderTips = this.$slots.sliderTips;
var scopedSlots = {
activator: this.$scopedSlots.activator
};
return h(_lib.VLayout, (0, _babelHelperVueJsxMergeProps["default"])([{
"class": this.classes()
}, {
"attrs": {
column: true,
'align-center': true
}
}]), [h("div", {
"class": this.classes('top')
}, [h(_FAssetAmountInput.FAssetAmountInput, (0, _babelHelperVueJsxMergeProps["default"])([{
"attrs": {
"assets": this.assets,
"asset": this.bindAsset,
"selectable": this.selectable,
"border": this.border,
"loading": this.loading,
"listeners": Object.assign({}, this.$listeners)
}
}, {
"attrs": Object.assign(Object.assign({}, this.$attrs), {
disabled: this.disabledInput
})
}, {
"scopedSlots": scopedSlots,
"model": {
value: _this._value_input,
callback: function callback($$v) {
_this._value_input = $$v;
}
},
"on": _objectSpread({}, {
"input": function input($event) {
for (var _len = arguments.length, attrs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
attrs[_key - 1] = arguments[_key];
}
(function (val, e) {
if (!_this.isInRange(+val)) _this.$emit('error:limit');
_this._value_input = val;
_this.$emit('input', val);
if (!_this.value) _this.$nextTick(function () {
return _this.$forceUpdate();
});
_this.setSliderValueWithLimit(+val);
}).apply(void 0, [$event].concat(attrs));
}
})
}])), inputTips !== null && inputTips !== void 0 ? inputTips : h(_lib.VLayout, (0, _babelHelperVueJsxMergeProps["default"])([{
"class": this.classes('top-tips', 'mt-2 f-greyscale-3 f-caption')
}, {
"attrs": {
'justify-space-between': true,
'align-center': true
}
}]), [this.hasInputLeftTips ? h("div", {
"class": this.classes('top-tips-left')
}, [((_a = this.inputTips) === null || _a === void 0 ? void 0 : _a.tipLeft) ? h("span", {
"class": this.classes('top-tips-left-txt', 'mr-1')
}, [(_b = this.inputTips) === null || _b === void 0 ? void 0 : _b.tipLeft]) : null, ((_c = this.inputTips) === null || _c === void 0 ? void 0 : _c.amount) || ((_d = this.inputTips) === null || _d === void 0 ? void 0 : _d.amount) === 0 ? h("span", {
"class": this.classes('top-tips-left-amount'),
"on": _objectSpread({}, {
"click": function click($event) {
for (var _len2 = arguments.length, attrs = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
attrs[_key2 - 1] = arguments[_key2];
}
(function () {
var _a, _b;
if (!_this.isInRange(+((_a = _this.inputTips) === null || _a === void 0 ? void 0 : _a.amount))) _this.$emit('error:limit');
_this._value_input = "".concat((_b = _this.inputTips) === null || _b === void 0 ? void 0 : _b.amount);
_this.setSliderValueWithLimit(+_this._value_input);
_this.$emit('input', _this._value_input);
_this.$emit('click:amount');
_this.$nextTick(function () {
return _this.$forceUpdate();
});
}).apply(void 0, [$event].concat(attrs));
}
})
}, [h("span", {
"class": this.classes('top-tips-left-amount-num', 'f-greyscale-1 font-weight-bold')
}, ["".concat((_e = this.inputTips) === null || _e === void 0 ? void 0 : _e.amount)]), h("span", {
"class": this.classes('top-tips-left-amount-symbol', 'f-greyscale-3')
}, ["".concat((_g = (_f = this.inputTips) === null || _f === void 0 ? void 0 : _f.amountSymbol) !== null && _g !== void 0 ? _g : '')])]) : null]) : null, ((_h = this.inputTips) === null || _h === void 0 ? void 0 : _h.tipRight) ? h("div", {
"class": this.classes('top-tips-right')
}, [this.inputTips.tipRight]) : null]), this.error ? h("div", {
"class": this.classes('top-error', 'f-caption pt-2')
}, [typeof this.error === 'function' ? this.error(this._value_input) : this.error]) : this.showSlider || this.showBtn ? h("div", {
"class": this.classes('top-error-placeholder')
}) : null]), this.showSlider ? h("div", {
"class": this.classes('mid', 'mb-8')
}, [this.showSliderTips ? sliderTips !== null && sliderTips !== void 0 ? sliderTips : h(_lib.VLayout, (0, _babelHelperVueJsxMergeProps["default"])([{
"class": this.classes('mid-tips', 'mb-5 f-greyscale-3 f-body-2')
}, {
"attrs": {
'justify-space-between': true,
'align-center': true
}
}]), [h("span", [this.ratioText]), h("span", {
"class": 'f-greyscale-1 font-weight-bold'
}, ["".concat((_j = this._value_slider) !== null && _j !== void 0 ? _j : 0, "%")])]) : null, slider !== null && slider !== void 0 ? slider : h(VueSlider, {
"attrs": {
"height": 8,
"min": 0,
"max": 100,
"interval": 0.01,
"lazy": true,
"tooltip": 'none',
"contained": true,
"disabled": this.disabledSlider
},
"model": {
value: _this._value_slider,
callback: function callback($$v) {
_this._value_slider = $$v;
}
},
"on": _objectSpread({}, {
"change": function change($event) {
for (var _len3 = arguments.length, attrs = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
attrs[_key3 - 1] = arguments[_key3];
}
(function (val) {
_this._value_slider = +val;
if (_this.hasUpperLimit) {
_this._value_input = (0, _number.format)({
n: +val / 100 * _this.max,
p: 8
});
_this.$emit('input', _this._value_input);
}
_this.$nextTick(function () {
return _this.$forceUpdate();
});
}).apply(void 0, [$event].concat(attrs));
}
})
})]) : null, this.showBtn ? btn !== null && btn !== void 0 ? btn : h(_FButton.FButton, (0, _babelHelperVueJsxMergeProps["default"])([{
"class": 'px-8 py-4 f-bg-greyscale-1 f-greyscale-6',
"attrs": {
"color": this.color
}
}, {
"attrs": {
disabled: this.disabledBtn !== void 0 ? this.disabledBtn : !this.isInRange(+this._value_input)
}
}, {
"on": _objectSpread({}, {
"click": function click($event) {
for (var _len4 = arguments.length, attrs = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
attrs[_key4 - 1] = arguments[_key4];
}
(function () {
return _this.$emit('click:button');
}).apply(void 0, [$event].concat(attrs));
}
})
}]), [this.btnText]) : null]);
}
});
exports["default"] = _default2;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9Bc3NldFJhbmdlSW5wdXQvQXNzZXRSYW5nZUlucHV0LnRzeCIsIkFzc2V0UmFuZ2VJbnB1dC9Bc3NldFJhbmdlSW5wdXQuanN4Il0sIm5hbWVzIjpbIlZ1ZVNsaWRlciIsInJlcXVpcmUiLCJuYW1lIiwibW9kZWwiLCJwcm9wIiwiZXZlbnQiLCJwcm9wcyIsInZhbHVlIiwidHlwZSIsIlN0cmluZyIsIk51bWJlciIsInByZWZpeENscyIsIm1pbiIsIm1heCIsImNvbG9yIiwiZGlzYWJsZWRJbnB1dCIsIkJvb2xlYW4iLCJkaXNhYmxlZFNsaWRlciIsImRpc2FibGVkQnRuIiwic2VsZWN0YWJsZSIsImJvcmRlciIsImxvYWRpbmciLCJhc3NldHMiLCJBcnJheSIsImFzc2V0IiwiT2JqZWN0IiwiaW5wdXRUaXBzIiwiZXJyb3IiLCJGdW5jdGlvbiIsInJhdGlvVGV4dCIsInNob3dTbGlkZXIiLCJzaG93U2xpZGVyVGlwcyIsImJ0blRleHQiLCJzaG93QnRuIiwic2V0dXAiLCJjbGFzc2VzIiwiY29uc29sZSIsImluZm8iLCJkYXRhIiwiX3ZhbHVlX2lucHV0IiwiX3ZhbHVlX3NsaWRlciIsImNvbXB1dGVkIiwiYmluZEFzc2V0IiwiZ2V0Iiwic2V0IiwidmFsIiwiJGVtaXQiLCJoYXNJbnB1dExlZnRUaXBzIiwiX2EiLCJfYiIsIl9jIiwiYW1vdW50IiwiYW1vdW50U3ltYm9sIiwidGlwTGVmdCIsImhhc1VwcGVyTGltaXQiLCJ3YXRjaCIsImlzSW5SYW5nZSIsInNldFNsaWRlclZhbHVlV2l0aExpbWl0IiwiY3JlYXRlZCIsIm1ldGhvZHMiLCJfdmFsIiwibiIsInAiLCJyZW5kZXIiLCJoIiwiX2QiLCJfZSIsIl9mIiwiX2ciLCJfaCIsIl9qIiwiYnRuIiwiJHNsb3RzIiwiYnV0dG9uIiwic2xpZGVyIiwic2xpZGVyVGlwcyIsInNjb3BlZFNsb3RzIiwiYWN0aXZhdG9yIiwiJHNjb3BlZFNsb3RzIiwiY29sdW1uIiwiYXNzaWduIiwiJGxpc3RlbmVy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SyxDQUExQixHQUE4QixLQUFLQSxXQUFuQyxHQUFpRCxDQUFDLEtBQUtzQyxTQUFMLENBQWUsQ0FBQyxLQUFLakIsWUFBckI7QUFEdkQ7QUFIUDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUEsV0FNVztBQUFBLG1CQUFNLEtBQUksQ0FBQ08sS0FBTCxDQUFXLGNBQVgsQ0FBTjtBQUFBLFdBTlg7QUFBQTtBQUFBO0FBQUEsVUFRRSxLQUFLZCxPQVJQLEVBREosR0FXSSxJQTNKVjtBQStKRDtBQXhVNEIsQ0FBaEIsQyIsImZpbGUiOiJBc3NldFJhbmdlSW5wdXQvQXNzZXRSYW5nZUlucHV0LmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJpbXBvcnQgeyBkZWZpbmVDb21wb25lbnQsIG9uTW91bnRlZCB9IGZyb20gJ0B2dWUvY29tcG9zaXRpb24tYXBpJztcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJy4uL3V0aWxzL2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnLi4vdXRpbHMvbnVtYmVyJztcbmltcG9ydCB7IFZMYXlvdXQgfSBmcm9tICd2dWV0aWZ5L2xpYic7XG5pbXBvcnQgeyBGQXNzZXRBbW91bnRJbnB1dCB9IGZyb20gJ0Bmb3hvbmUvdWlraXQvc3JjL2NvbXBvbmVudHMvRkFzc2V0QW1vdW50SW5wdXQnO1xuaW1wb3J0IHsgRkJ1dHRvbiB9IGZyb20gJ0Bmb3hvbmUvdWlraXQvc3JjL2NvbXBvbmVudHMvRkJ1dHRvbic7XG5pbXBvcnQgJ3Z1ZS1zbGlkZXItY29tcG9uZW50L3RoZW1lL2RlZmF1bHQuY3NzJztcbi8vIGF2b2lkIHR5cGVzY3JpcHQgZXJyb3JcbmNvbnN0IFZ1ZVNsaWRlciA9IHJlcXVpcmUoJ3Z1ZS1zbGlkZXItY29tcG9uZW50Jyk7XG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb21wb25lbnQoe1xuICAgIG5hbWU6ICdBc3NldFJhbmdlSW5wdXQnLFxuICAgIG1vZGVsOiB7XG4gICAgICAgIHByb3A6ICd2YWx1ZScsXG4gICAgICAgIGV2ZW50OiAnaW5wdXQnXG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnXG4gICAgICAgIH0sXG4gICAgICAgIHByZWZpeENsczoge1xuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgZGVmYXVsdDogJ2Fzc2V0LXJhbmdlLWlucHV0J1xuICAgICAgICB9LFxuICAgICAgICBtaW46IHtcbiAgICAgICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgICAgIGRlZmF1bHQ6IDBcbiAgICAgICAgfSxcbiAgICAgICAgbWF4OiB7XG4gICAgICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgICAgICBkZWZhdWx0OiAwXG4gICAgICAgIH0sXG4gICAgICAgIGNvbG9yOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICBkZWZhdWx0OiAncHJpbWFyeSdcbiAgICAgICAgfSxcbiAgICAgICAgZGlzYWJsZWRJbnB1dDoge1xuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgIGRlZmF1bHQ6IHZvaWQgMFxuICAgICAgICB9LFxuICAgICAgICBkaXNhYmxlZFNsaWRlcjoge1xuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgIGRlZmF1bHQ6IHZvaWQgMFxuICAgICAgICB9LFxuICAgICAgICBkaXNhYmxlZEJ0bjoge1xuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgIGRlZmF1bHQ6IHZvaWQgMFxuICAgICAgICB9LFxuICAgICAgICBzZWxlY3RhYmxlOiB7XG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBib3JkZXI6IHtcbiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBsb2FkaW5nOiB7XG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgYXNzZXRzOiB7XG4gICAgICAgICAgICB0eXBlOiBBcnJheSxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICgpID0+IFtdXG4gICAgICAgIH0sXG4gICAgICAgIGFzc2V0OiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pXG4gICAgICAgIH0sXG4gICAgICAgIGlucHV0VGlwczoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgZGVmYXVsdDogKCkgPT4gKHt9KVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgICAgICAgZGVmYXVsdDogJydcbiAgICAgICAgfSxcbiAgICAgICAgcmF0aW9UZXh0OiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICBkZWZhdWx0OiAnUmF0aW8nXG4gICAgICAgIH0sXG4gICAgICAgIHNob3dTbGlkZXI6IHtcbiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHNob3dTbGlkZXJUaXBzOiB7XG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBidG5UZXh0OiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICBkZWZhdWx0OiAnQ29uZmlybSdcbiAgICAgICAgfSxcbiAgICAgICAgc2hvd0J0bjoge1xuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIHNldHVwKHByb3BzKSB7XG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBjbGFzc25hbWVzKHByb3BzLnByZWZpeENscyk7XG4gICAgICAgIG9uTW91bnRlZCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oJ0Fzc2V0UmFuZ2VJbnB1dCBtb3VudGVkIScpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNsYXNzZXNcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGRhdGE6ICgpID0+IHtcbiAgICAgICAgY29uc3QgX3ZhbHVlX2lucHV0ID0gJyc7XG4gICAgICAgIGNvbnN0IF92YWx1ZV9zbGlkZXIgPSAwO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgX3ZhbHVlX2lucHV0LFxuICAgICAgICAgICAgX3ZhbHVlX3NsaWRlclxuICAgICAgICB9O1xuICAgIH0sXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgICAgYmluZEFzc2V0OiB7XG4gICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXNzZXQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0KHZhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTphc3NldCcsIHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGhhc0lucHV0TGVmdFRpcHMoKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgICAgIHJldHVybiAhISgoKF9hID0gdGhpcy5pbnB1dFRpcHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hbW91bnQpIHx8ICgoX2IgPSB0aGlzLmlucHV0VGlwcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmFtb3VudFN5bWJvbCkgfHwgKChfYyA9IHRoaXMuaW5wdXRUaXBzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MudGlwTGVmdCkpO1xuICAgICAgICB9LFxuICAgICAgICBoYXNVcHBlckxpbWl0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF4ICYmICgxIC8gdGhpcy5tYXgpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB3YXRjaDoge1xuICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzSW5SYW5nZSgrdmFsKSlcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdlcnJvcjpsaW1pdCcpO1xuICAgICAgICAgICAgdGhpcy5fdmFsdWVfaW5wdXQgPSB2YWw7XG4gICAgICAgICAgICB0aGlzLnNldFNsaWRlclZhbHVlV2l0aExpbWl0KCt2YWwpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGVkKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNJblJhbmdlKCt0aGlzLnZhbHVlKSlcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2Vycm9yOmxpbWl0Jyk7XG4gICAgICAgIHRoaXMuX3ZhbHVlX2lucHV0ID0gdGhpcy52YWx1ZTtcbiAgICAgICAgdGhpcy5zZXRTbGlkZXJWYWx1ZVdpdGhMaW1pdCgrdGhpcy52YWx1ZSk7XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGlzSW5SYW5nZSh2YWwpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWwgPj0gdGhpcy5taW4gJiYgKCF0aGlzLmhhc1VwcGVyTGltaXQgfHwgdmFsIDw9IHRoaXMubWF4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0U2xpZGVyVmFsdWVXaXRoTGltaXQodmFsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNVcHBlckxpbWl0ICYmIHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgbGV0IF92YWwgPSB2YWwgLyB0aGlzLm1heCAqIDEwMDtcbiAgICAgICAgICAgICAgICBpZiAoX3ZhbCA+IDEwMClcbiAgICAgICAgICAgICAgICAgICAgX3ZhbCA9IDEwMDtcbiAgICAgICAgICAgICAgICBpZiAoX3ZhbCA8IDApXG4gICAgICAgICAgICAgICAgICAgIF92YWwgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlX3NsaWRlciA9IGZvcm1hdCh7XG4gICAgICAgICAgICAgICAgICAgIG46IF92YWwsXG4gICAgICAgICAgICAgICAgICAgIHA6IDJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgcmVuZGVyKGgpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nLCBfaCwgX2o7XG4gICAgICAgIGNvbnN0IGJ0biA9IHRoaXMuJHNsb3RzLmJ1dHRvbjtcbiAgICAgICAgY29uc3Qgc2xpZGVyID0gdGhpcy4kc2xvdHMuc2xpZGVyO1xuICAgICAgICBjb25zdCBpbnB1dFRpcHMgPSB0aGlzLiRzbG90cy5pbnB1dFRpcHM7XG4gICAgICAgIGNvbnN0IHNsaWRlclRpcHMgPSB0aGlzLiRzbG90cy5zbGlkZXJUaXBzO1xuICAgICAgICBjb25zdCBzY29wZWRTbG90cyA9IHtcbiAgICAgICAgICAgIGFjdGl2YXRvcjogdGhpcy4kc2NvcGVkU2xvdHMuYWN0aXZhdG9yXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiAoPFZMYXlvdXQgY2xhc3M9e3RoaXMuY2xhc3NlcygpfSBhdHRycz17e1xuICAgICAgICAgICAgICAgIGNvbHVtbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnYWxpZ24tY2VudGVyJzogdHJ1ZVxuICAgICAgICAgICAgfX0+XG4gICAgICAgIDxkaXYgY2xhc3M9e3RoaXMuY2xhc3NlcygndG9wJyl9PlxuICAgICAgICAgIDxGQXNzZXRBbW91bnRJbnB1dCB2TW9kZWw9e3RoaXMuX3ZhbHVlX2lucHV0fSBhc3NldHM9e3RoaXMuYXNzZXRzfSBhc3NldD17dGhpcy5iaW5kQXNzZXR9IHNlbGVjdGFibGU9e3RoaXMuc2VsZWN0YWJsZX0gYm9yZGVyPXt0aGlzLmJvcmRlcn0gbG9hZGluZz17dGhpcy5sb2FkaW5nfSB2T246aW5wdXQ9eyh2YWwsIGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNJblJhbmdlKCt2YWwpKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdlcnJvcjpsaW1pdCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlX2lucHV0ID0gdmFsO1xuICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMuJGZvcmNlVXBkYXRlKCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U2xpZGVyVmFsdWVXaXRoTGltaXQoK3ZhbCk7XG4gICAgICAgICAgICB9fSBsaXN0ZW5lcnM9e09iamVjdC5hc3NpZ24oe30sIHRoaXMuJGxpc3RlbmVycyl9IGF0dHJzPXtPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHRoaXMuJGF0dHJzKSwgeyBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZElucHV0IH0pfSBzY29wZWRTbG90cz17c2NvcGVkU2xvdHN9Lz5cbiAgICAgICAgICB7aW5wdXRUaXBzICE9PSBudWxsICYmIGlucHV0VGlwcyAhPT0gdm9pZCAwID8gaW5wdXRUaXBzIDogPFZMYXlvdXQgY2xhc3M9e3RoaXMuY2xhc3NlcygndG9wLXRpcHMnLCAnbXQtMiBmLWdyZXlzY2FsZS0zIGYtY2FwdGlvbicpfSBhdHRycz17e1xuICAgICAgICAgICAgICAgICAgICAnanVzdGlmeS1zcGFjZS1iZXR3ZWVuJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgJ2FsaWduLWNlbnRlcic6IHRydWVcbiAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAge3RoaXMuaGFzSW5wdXRMZWZ0VGlwc1xuICAgICAgICAgICAgICAgICAgICA/IDxkaXYgY2xhc3M9e3RoaXMuY2xhc3NlcygndG9wLXRpcHMtbGVmdCcpfT5cbiAgICAgICAgICAgICAgICAgICAgeygoX2EgPSB0aGlzLmlucHV0VGlwcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRpcExlZnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyA8c3BhbiBjbGFzcz17dGhpcy5jbGFzc2VzKCd0b3AtdGlwcy1sZWZ0LXR4dCcsICdtci0xJyl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7KF9iID0gdGhpcy5pbnB1dFRpcHMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi50aXBMZWZ0fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgeygoKF9jID0gdGhpcy5pbnB1dFRpcHMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5hbW91bnQpIHx8ICgoX2QgPSB0aGlzLmlucHV0VGlwcykgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmFtb3VudCkgPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyA8c3BhbiBjbGFzcz17dGhpcy5jbGFzc2VzKCd0b3AtdGlwcy1sZWZ0LWFtb3VudCcpfSB2T246Y2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNJblJhbmdlKCsoKF9hID0gdGhpcy5pbnB1dFRpcHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hbW91bnQpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdlcnJvcjpsaW1pdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVfaW5wdXQgPSBgJHsoX2IgPSB0aGlzLmlucHV0VGlwcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmFtb3VudH1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTbGlkZXJWYWx1ZVdpdGhMaW1pdCgrdGhpcy5fdmFsdWVfaW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB0aGlzLl92YWx1ZV9pbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdjbGljazphbW91bnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMuJGZvcmNlVXBkYXRlKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9e3RoaXMuY2xhc3NlcygndG9wLXRpcHMtbGVmdC1hbW91bnQtbnVtJywgJ2YtZ3JleXNjYWxlLTEgZm9udC13ZWlnaHQtYm9sZCcpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YCR7KF9lID0gdGhpcy5pbnB1dFRpcHMpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5hbW91bnR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17dGhpcy5jbGFzc2VzKCd0b3AtdGlwcy1sZWZ0LWFtb3VudC1zeW1ib2wnLCAnZi1ncmV5c2NhbGUtMycpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YCR7KF9nID0gKF9mID0gdGhpcy5pbnB1dFRpcHMpID09PSBudWxsIHx8IF9mID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZi5hbW91bnRTeW1ib2wpICE9PSBudWxsICYmIF9nICE9PSB2b2lkIDAgPyBfZyA6ICcnfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGx9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgOiBudWxsfVxuICAgICAgICAgICAgICB7KChfaCA9IHRoaXMuaW5wdXRUaXBzKSA9PT0gbnVsbCB8fCBfaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2gudGlwUmlnaHQpXG4gICAgICAgICAgICAgICAgICAgID8gPGRpdiBjbGFzcz17dGhpcy5jbGFzc2VzKCd0b3AtdGlwcy1yaWdodCcpfT5cbiAgICAgICAgICAgICAgICAgICAge3RoaXMuaW5wdXRUaXBzLnRpcFJpZ2h0fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDogbnVsbH1cbiAgICAgICAgICAgIDwvVkxheW91dD59XG4gICAgICAgICAge3RoaXMuZXJyb3JcbiAgICAgICAgICAgICAgICA/IDxkaXYgY2xhc3M9e3RoaXMuY2xhc3NlcygndG9wLWVycm9yJywgJ2YtY2FwdGlvbiBwdC0yJyl9PlxuICAgICAgICAgICAgICAgIHt0eXBlb2YgdGhpcy5lcnJvciA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMuZXJyb3IodGhpcy5fdmFsdWVfaW5wdXQpIDogdGhpcy5lcnJvcn1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgOiAodGhpcy5zaG93U2xpZGVyIHx8IHRoaXMuc2hvd0J0bikgPyA8ZGl2IGNsYXNzPXt0aGlzLmNsYXNzZXMoJ3RvcC1lcnJvci1wbGFjZWhvbGRlcicpfS8+IDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAge3RoaXMuc2hvd1NsaWRlclxuICAgICAgICAgICAgICAgID8gPGRpdiBjbGFzcz17dGhpcy5jbGFzc2VzKCdtaWQnLCAnbWItOCcpfT5cbiAgICAgICAgICAgICAgICB7dGhpcy5zaG93U2xpZGVyVGlwcyA/IChzbGlkZXJUaXBzICE9PSBudWxsICYmIHNsaWRlclRpcHMgIT09IHZvaWQgMCA/IHNsaWRlclRpcHMgOiA8VkxheW91dCBjbGFzcz17dGhpcy5jbGFzc2VzKCdtaWQtdGlwcycsICdtYi01IGYtZ3JleXNjYWxlLTMgZi1ib2R5LTInKX0gYXR0cnM9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnanVzdGlmeS1zcGFjZS1iZXR3ZWVuJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxpZ24tY2VudGVyJzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfX0+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt0aGlzLnJhdGlvVGV4dH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSdmLWdyZXlzY2FsZS0xIGZvbnQtd2VpZ2h0LWJvbGQnPntgJHsoX2ogPSB0aGlzLl92YWx1ZV9zbGlkZXIpICE9PSBudWxsICYmIF9qICE9PSB2b2lkIDAgPyBfaiA6IDB9JWB9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9WTGF5b3V0PikgOiBudWxsfVxuICAgICAgICAgICAgICAgIHtzbGlkZXIgIT09IG51bGwgJiYgc2xpZGVyICE9PSB2b2lkIDAgPyBzbGlkZXIgOiA8VnVlU2xpZGVyIHZNb2RlbD17dGhpcy5fdmFsdWVfc2xpZGVyfSBoZWlnaHQ9ezh9IG1pbj17MH0gbWF4PXsxMDB9IGludGVydmFsPXswLjAxfSBsYXp5PXt0cnVlfSB0b29sdGlwPSdub25lJyBjb250YWluZWQ9e3RydWV9IGRpc2FibGVkPXt0aGlzLmRpc2FibGVkU2xpZGVyfSB2T246Y2hhbmdlPXt2YWwgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlX3NsaWRlciA9ICt2YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzVXBwZXJMaW1pdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZV9pbnB1dCA9IGZvcm1hdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOiArdmFsIC8gMTAwICogdGhpcy5tYXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwOiA4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHRoaXMuX3ZhbHVlX2lucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy4kZm9yY2VVcGRhdGUoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9fS8+fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA6IG51bGx9XG5cbiAgICAgICAge3RoaXMuc2hvd0J0blxuICAgICAgICAgICAgICAgID8gYnRuICE9PSBudWxsICYmIGJ0biAhPT0gdm9pZCAwID8gYnRuIDogPEZCdXR0b24gY2xhc3M9J3B4LTggcHktNCBmLWJnLWdyZXlzY2FsZS0xIGYtZ3JleXNjYWxlLTYnIGNvbG9yPXt0aGlzLmNvbG9yfSBhdHRycz17e1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRCdG4gIT09IHZvaWQgMCA/IHRoaXMuZGlzYWJsZWRCdG4gOiAhdGhpcy5pc0luUmFuZ2UoK3RoaXMuX3ZhbHVlX2lucHV0KVxuICAgICAgICAgICAgICAgICAgICB9fSB2T246Y2xpY2s9eygpID0+IHRoaXMuJGVtaXQoJ2NsaWNrOmJ1dHRvbicpfT5cbiAgICAgICAgICAgICAge3RoaXMuYnRuVGV4dH1cbiAgICAgICAgICAgIDwvRkJ1dHRvbj5cbiAgICAgICAgICAgICAgICA6IG51bGx9XG4gICAgICA8L1ZMYXlvdXQ+KTtcbiAgICB9XG59KTsiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9