UNPKG

@foxone/finance-ui

Version:

The Financial UI Component Library Based on @foxone/uikit and vuetify

381 lines (345 loc) 40.6 kB
"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