@foxone/finance-ui
Version:
The Financial UI Component Library Based on @foxone/uikit and vuetify
366 lines (341 loc) • 40.6 kB
JavaScript
import _mergeJSXProps5 from "@vue/babel-helper-vue-jsx-merge-props";
import _mergeJSXProps4 from "@vue/babel-helper-vue-jsx-merge-props";
import _mergeJSXProps3 from "@vue/babel-helper-vue-jsx-merge-props";
import _mergeJSXProps2 from "@vue/babel-helper-vue-jsx-merge-props";
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
import _mergeJSXProps from "@vue/babel-helper-vue-jsx-merge-props";
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) { _defineProperty(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; }
import { defineComponent, onMounted, h } from '@vue/composition-api';
import classnames from '../utils/classnames';
import { format } from '../utils/number';
import { VLayout } from 'vuetify/lib';
import { FAssetAmountInput } from '@foxone/uikit/src/components/FAssetAmountInput';
import { FButton } from '@foxone/uikit/src/components/FButton';
import 'vue-slider-component/theme/default.css'; // avoid typescript error
var VueSlider = require('vue-slider-component');
export default 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 = classnames(props.prefixCls);
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 = 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(VLayout, _mergeJSXProps5([{
"class": this.classes()
}, {
"attrs": {
column: true,
'align-center': true
}
}]), [h("div", {
"class": this.classes('top')
}, [h(FAssetAmountInput, _mergeJSXProps([{
"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(VLayout, _mergeJSXProps2([{
"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(VLayout, _mergeJSXProps3([{
"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 = 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, _mergeJSXProps4([{
"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]);
}
});
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9Bc3NldFJhbmdlSW5wdXQvQXNzZXRSYW5nZUlucHV0LnRzeCIsIkFzc2V0UmFuZ2VJbnB1dC9Bc3NldFJhbmdlSW5wdXQuanN4Il0sIm5hbWVzIjpbImRlZmluZUNvbXBvbmVudCIsIm9uTW91bnRlZCIsImNsYXNzbmFtZXMiLCJmb3JtYXQiLCJWTGF5b3V0IiwiRkFzc2V0QW1vdW50SW5wdXQiLCJGQnV0dG9uIiwiVnVlU2xpZGVyIiwicmVxdWlyZSIsIm5hbWUiLCJtb2RlbCIsInByb3AiLCJldmVudCIsInByb3BzIiwidmFsdWUiLCJ0eXBlIiwiU3RyaW5nIiwiTnVtYmVyIiwicHJlZml4Q2xzIiwibWluIiwibWF4IiwiY29sb3IiLCJkaXNhYmxlZElucHV0IiwiQm9vbGVhbiIsImRpc2FibGVkU2xpZGVyIiwiZGlzYWJsZWRCdG4iLCJzZWxlY3RhYmxlIiwiYm9yZGVyIiwibG9hZGluZyIsImFzc2V0cyIsIkFycmF5IiwiYXNzZXQiLCJPYmplY3QiLCJpbnB1dFRpcHMiLCJlcnJvciIsIkZ1bmN0aW9uIiwicmF0aW9UZXh0Iiwic2hvd1NsaWRlciIsInNob3dTbGlkZXJUaXBzIiwiYnRuVGV4dCIsInNob3dCdG4iLCJzZXR1cCIsImNsYXNzZXMiLCJjb25zb2xlIiwiaW5mbyIsImRhdGEiLCJfdmFsdWVfaW5wdXQiLCJfdmFsdWVfc2xpZGVyIiwiY29tcHV0ZWQiLCJiaW5kQXNzZXQiLCJnZXQiLCJzZXQiLCJ2YWwiLCIkZW1pdCIsImhhc0lucHV0TGVmdFRpcHMiLCJfYSIsIl9iIiwiX2MiLCJhbW91bnQiLCJhbW91bnRTeW1ib2wiLCJ0aXBMZWZ0IiwiaGFzVXBwZXJMaW1pdCIsIndhdGNoIiwiaXNJblJhbmdlIiwic2V0U2xpZGVyVmFsdWVXaXRoTGltaXQiLCJjcmVhdGVkIiwibWV0aG9kcyIsIl92YWwiLCJuIiwicCIsInJlbmRlciIsImgiLCJfZCIsIl9lIiwiX2YiLCJfZyIsIl9oIiwiX2oiLCJidG4iLCIkc2xvdHMiLCJidXR0b24iLCJzbGlkZXIiLCJzbGlkZXJUaXBzIiwic2NvcGVkU2xvdHMiLCJhY3RpdmF0b3IiLCIkc2NvcGVkU2xvdHMiLCJjb2x1bW4iLCJhc3NpZ24iLCIkbGlzdGVuZXJzIiwiJGF0dHJzIiwiZGlzYWJsZWQiLCJlIiwiJG5leHRUaWNrIiwiJGZvcmNlVXBkYXRlIiwidGlwUmlnaHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsU0FDRUEsZUFERixFQUdFQyxTQUhGLFdBSU8sc0JBSlA7QUFLQSxPQUFPQyxVQUFQLE1BQXVCLHFCQUF2QjtBQUNBLFNBQVNDLE1BQVQsUUFBdUIsaUJBQXZCO0FBQ0EsU0FBU0MsT0FBVCxRQUF3QixhQUF4QjtBQUNBLFNBQVNDLGlCQUFULFFBQWtDLGdEQUFsQztBQUNBLFNBQVNDLE9BQVQsUUFBd0Isc0NBQXhCO0FBQ0EsT0FBTyx3Q0FBUCxDLENBS0E7O0FBQ0EsSUFBTUMsU0FBUyxHQUFHQyxPQUFPLENBQUMsc0JBQUQsQ0FBekI7O0FBV0EsZUFBZVIsZUFBZSxDQUFDO0FBQzdCUyxFQUFBQSxJQUFJLEVBQUUsaUJBRHVCO0FBRzdCQyxFQUFBQSxLQUFLLEVBQUU7QUFDTEMsSUFBQUEsSUFBSSxFQUFFLE9BREQ7QUFFTEMsSUFBQUEsS0FBSyxFQUFFO0FBRkYsR0FIc0I7QUFRN0JDLEVBQUFBLEtBQUssRUFBRTtBQUNMQyxJQUFBQSxLQUFLLEVBQUU7QUFDTEMsTUFBQUEsSUFBSSxFQUFFLENBQUNDLE1BQUQsRUFBU0MsTUFBVCxDQUREO0FBRUwsaUJBQVM7QUFGSixLQURGO0FBS0xDLElBQUFBLFNBQVMsRUFBRTtBQUNUSCxNQUFBQSxJQUFJLEVBQUVDLE1BREc7QUFFVCxpQkFBUztBQUZBLEtBTE47QUFTTEcsSUFBQUEsR0FBRyxFQUFFO0FBQ0hKLE1BQUFBLElBQUksRUFBRUUsTUFESDtBQUVILGlCQUFTO0FBRk4sS0FUQTtBQWFMRyxJQUFBQSxHQUFHLEVBQUU7QUFDSEwsTUFBQUEsSUFBSSxFQUFFRSxNQURIO0FBRUgsaUJBQVM7QUFGTixLQWJBO0FBaUJM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S0FBSSxDQUFDOEMsU0FBTCxDQUFlO0FBQUEscUJBQU0sS0FBSSxDQUFDQyxZQUFMLEVBQU47QUFBQSxhQUFmO0FBQ0QsV0FyQkw7QUFBQTtBQUFBO0FBQUEsTUFmUixLQXlDSSxJQTVJVixFQWdKTSxLQUFLckQsT0FBTCxHQUNJc0MsR0FBRyxLQUFBLElBQUgsSUFBQUEsR0FBRyxLQUFBLEtBQUEsQ0FBSCxHQUFBQSxHQUFBO0FBQUEsZUFDTSwwQ0FETjtBQUFBO0FBQUEsaUJBRU8sS0FBS3pEO0FBRlo7QUFBQTtBQUFBLGVBR087QUFDTHFFLFFBQUFBLFFBQVEsRUFBRSxLQUFLakUsV0FBTCxLQUFxQixLQUFLLENBQTFCLEdBQThCLEtBQUtBLFdBQW5DLEdBQWlELENBQUMsS0FBS3NDLFNBQUwsQ0FBZSxDQUFDLEtBQUtqQixZQUFyQjtBQUR2RDtBQUhQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQSxXQU1XO0FBQUEsbUJBQU0sS0FBSSxDQUFDTyxLQUFMLENBQVcsY0FBWCxDQUFOO0FBQUEsV0FOWDtBQUFBO0FBQUE7QUFBQSxVQVFFLEtBQUtkLE9BUlAsRUFESixHQVdJLElBM0pWO0FBK0pEO0FBeFU0QixDQUFELENBQTlCIiwiZmlsZSI6IkFzc2V0UmFuZ2VJbnB1dC9Bc3NldFJhbmdlSW5wdXQuanMiLCJzb3VyY2VzQ29udGVudCI6W251bGwsImltcG9ydCB7IGRlZmluZUNvbXBvbmVudCwgb25Nb3VudGVkIH0gZnJvbSAnQHZ1ZS9jb21wb3NpdGlvbi1hcGknO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnLi4vdXRpbHMvY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBmb3JtYXQgfSBmcm9tICcuLi91dGlscy9udW1iZXInO1xuaW1wb3J0IHsgVkxheW91dCB9IGZyb20gJ3Z1ZXRpZnkvbGliJztcbmltcG9ydCB7IEZBc3NldEFtb3VudElucHV0IH0gZnJvbSAnQGZveG9uZS91aWtpdC9zcmMvY29tcG9uZW50cy9GQXNzZXRBbW91bnRJbnB1dCc7XG5pbXBvcnQgeyBGQnV0dG9uIH0gZnJvbSAnQGZveG9uZS91aWtpdC9zcmMvY29tcG9uZW50cy9GQnV0dG9uJztcbmltcG9ydCAndnVlLXNsaWRlci1jb21wb25lbnQvdGhlbWUvZGVmYXVsdC5jc3MnO1xuLy8gYXZvaWQgdHlwZXNjcmlwdCBlcnJvclxuY29uc3QgVnVlU2xpZGVyID0gcmVxdWlyZSgndnVlLXNsaWRlci1jb21wb25lbnQnKTtcbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbXBvbmVudCh7XG4gICAgbmFtZTogJ0Fzc2V0UmFuZ2VJbnB1dCcsXG4gICAgbW9kZWw6IHtcbiAgICAgICAgcHJvcDogJ3ZhbHVlJyxcbiAgICAgICAgZXZlbnQ6ICdpbnB1dCdcbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgICAgICAgZGVmYXVsdDogJydcbiAgICAgICAgfSxcbiAgICAgICAgcHJlZml4Q2xzOiB7XG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICBkZWZhdWx0OiAnYXNzZXQtcmFuZ2UtaW5wdXQnXG4gICAgICAgIH0sXG4gICAgICAgIG1pbjoge1xuICAgICAgICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgICAgICAgZGVmYXVsdDogMFxuICAgICAgICB9LFxuICAgICAgICBtYXg6IHtcbiAgICAgICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgICAgIGRlZmF1bHQ6IDBcbiAgICAgICAgfSxcbiAgICAgICAgY29sb3I6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICdwcmltYXJ5J1xuICAgICAgICB9LFxuICAgICAgICBkaXNhYmxlZElucHV0OiB7XG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgZGVmYXVsdDogdm9pZCAwXG4gICAgICAgIH0sXG4gICAgICAgIGRpc2FibGVkU2xpZGVyOiB7XG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgZGVmYXVsdDogdm9pZCAwXG4gICAgICAgIH0sXG4gICAgICAgIGRpc2FibGVkQnRuOiB7XG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgZGVmYXVsdDogdm9pZCAwXG4gICAgICAgIH0sXG4gICAgICAgIHNlbGVjdGFibGU6IHtcbiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGJvcmRlcjoge1xuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIGxvYWRpbmc6IHtcbiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBhc3NldHM6IHtcbiAgICAgICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICAgICAgZGVmYXVsdDogKCkgPT4gW11cbiAgICAgICAgfSxcbiAgICAgICAgYXNzZXQ6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICgpID0+ICh7fSlcbiAgICAgICAgfSxcbiAgICAgICAgaW5wdXRUaXBzOiB7XG4gICAgICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICB0eXBlOiBbU3RyaW5nLCBGdW5jdGlvbl0sXG4gICAgICAgICAgICBkZWZhdWx0OiAnJ1xuICAgICAgICB9LFxuICAgICAgICByYXRpb1RleHQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICdSYXRpbydcbiAgICAgICAgfSxcbiAgICAgICAgc2hvd1NsaWRlcjoge1xuICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgc2hvd1NsaWRlclRpcHM6IHtcbiAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGJ0blRleHQ6IHtcbiAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICdDb25maXJtJ1xuICAgICAgICB9LFxuICAgICAgICBzaG93QnRuOiB7XG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgICB9LFxuICAgIH0sXG4gICAgc2V0dXAocHJvcHMpIHtcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGNsYXNzbmFtZXMocHJvcHMucHJlZml4Q2xzKTtcbiAgICAgICAgb25Nb3VudGVkKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbygnQXNzZXRSYW5nZUlucHV0IG1vdW50ZWQhJyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2xhc3Nlc1xuICAgICAgICB9O1xuICAgIH0sXG4gICAgZGF0YTogKCkgPT4ge1xuICAgICAgICBjb25zdCBfdmFsdWVfaW5wdXQgPSAnJztcbiAgICAgICAgY29uc3QgX3ZhbHVlX3NsaWRlciA9IDA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBfdmFsdWVfaW5wdXQsXG4gICAgICAgICAgICBfdmFsdWVfc2xpZGVyXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBjb21wdXRlZDoge1xuICAgICAgICBiaW5kQXNzZXQ6IHtcbiAgICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hc3NldDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQodmFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOmFzc2V0JywgdmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaGFzSW5wdXRMZWZ0VGlwcygpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgcmV0dXJuICEhKCgoX2EgPSB0aGlzLmlucHV0VGlwcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFtb3VudCkgfHwgKChfYiA9IHRoaXMuaW5wdXRUaXBzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuYW1vdW50U3ltYm9sKSB8fCAoKF9jID0gdGhpcy5pbnB1dFRpcHMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy50aXBMZWZ0KSk7XG4gICAgICAgIH0sXG4gICAgICAgIGhhc1VwcGVyTGltaXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXggJiYgKDEgLyB0aGlzLm1heCk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHdhdGNoOiB7XG4gICAgICAgIHZhbHVlOiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNJblJhbmdlKCt2YWwpKVxuICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2Vycm9yOmxpbWl0Jyk7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZV9pbnB1dCA9IHZhbDtcbiAgICAgICAgICAgIHRoaXMuc2V0U2xpZGVyVmFsdWVXaXRoTGltaXQoK3ZhbCk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGNyZWF0ZWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0luUmFuZ2UoK3RoaXMudmFsdWUpKVxuICAgICAgICAgICAgdGhpcy4kZW1pdCgnZXJyb3I6bGltaXQnKTtcbiAgICAgICAgdGhpcy5fdmFsdWVfaW5wdXQgPSB0aGlzLnZhbHVlO1xuICAgICAgICB0aGlzLnNldFNsaWRlclZhbHVlV2l0aExpbWl0KCt0aGlzLnZhbHVlKTtcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgaXNJblJhbmdlKHZhbCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbCA+PSB0aGlzLm1pbiAmJiAoIXRoaXMuaGFzVXBwZXJMaW1pdCB8fCB2YWwgPD0gdGhpcy5tYXgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXRTbGlkZXJWYWx1ZVdpdGhMaW1pdCh2YWwpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1VwcGVyTGltaXQgJiYgdHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBsZXQgX3ZhbCA9IHZhbCAvIHRoaXMubWF4ICogMTAwO1xuICAgICAgICAgICAgICAgIGlmIChfdmFsID4gMTAwKVxuICAgICAgICAgICAgICAgICAgICBfdmFsID0gMTAwO1xuICAgICAgICAgICAgICAgIGlmIChfdmFsIDwgMClcbiAgICAgICAgICAgICAgICAgICAgX3ZhbCA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVfc2xpZGVyID0gZm9ybWF0KHtcbiAgICAgICAgICAgICAgICAgICAgbjogX3ZhbCxcbiAgICAgICAgICAgICAgICAgICAgcDogMlxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICByZW5kZXIoaCkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2csIF9oLCBfajtcbiAgICAgICAgY29uc3QgYnRuID0gdGhpcy4kc2xvdHMuYnV0dG9uO1xuICAgICAgICBjb25zdCBzbGlkZXIgPSB0aGlzLiRzbG90cy5zbGlkZXI7XG4gICAgICAgIGNvbnN0IGlucHV0VGlwcyA9IHRoaXMuJHNsb3RzLmlucHV0VGlwcztcbiAgICAgICAgY29uc3Qgc2xpZGVyVGlwcyA9IHRoaXMuJHNsb3RzLnNsaWRlclRpcHM7XG4gICAgICAgIGNvbnN0IHNjb3BlZFNsb3RzID0ge1xuICAgICAgICAgICAgYWN0aXZhdG9yOiB0aGlzLiRzY29wZWRTbG90cy5hY3RpdmF0b3JcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuICg8VkxheW91dCBjbGFzcz17dGhpcy5jbGFzc2VzKCl9IGF0dHJzPXt7XG4gICAgICAgICAgICAgICAgY29sdW1uOiB0cnVlLFxuICAgICAgICAgICAgICAgICdhbGlnbi1jZW50ZXInOiB0cnVlXG4gICAgICAgICAgICB9fT5cbiAgICAgICAgPGRpdiBjbGFzcz17dGhpcy5jbGFzc2VzKCd0b3AnKX0+XG4gICAgICAgICAgPEZBc3NldEFtb3VudElucHV0IHZNb2RlbD17dGhpcy5fdmFsdWVfaW5wdXR9IGFzc2V0cz17dGhpcy5hc3NldHN9IGFzc2V0PXt0aGlzLmJpbmRBc3NldH0gc2VsZWN0YWJsZT17dGhpcy5zZWxlY3RhYmxlfSBib3JkZXI9e3RoaXMuYm9yZGVyfSBsb2FkaW5nPXt0aGlzLmxvYWRpbmd9IHZPbjppbnB1dD17KHZhbCwgZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0luUmFuZ2UoK3ZhbCkpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2Vycm9yOmxpbWl0Jyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVfaW5wdXQgPSB2YWw7XG4gICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWwpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy4kZm9yY2VVcGRhdGUoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTbGlkZXJWYWx1ZVdpdGhMaW1pdCgrdmFsKTtcbiAgICAgICAgICAgIH19IGxpc3RlbmVycz17T2JqZWN0LmFzc2lnbih7fSwgdGhpcy4kbGlzdGVuZXJzKX0gYXR0cnM9e09iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdGhpcy4kYXR0cnMpLCB7IGRpc2FibGVkOiB0aGlzLmRpc2FibGVkSW5wdXQgfSl9IHNjb3BlZFNsb3RzPXtzY29wZWRTbG90c30vPlxuICAgICAgICAgIHtpbnB1dFRpcHMgIT09IG51bGwgJiYgaW5wdXRUaXBzICE9PSB2b2lkIDAgPyBpbnB1dFRpcHMgOiA8VkxheW91dCBjbGFzcz17dGhpcy5jbGFzc2VzKCd0b3AtdGlwcycsICdtdC0yIGYtZ3JleXNjYWxlLTMgZi1jYXB0aW9uJyl9IGF0dHJzPXt7XG4gICAgICAgICAgICAgICAgICAgICdqdXN0aWZ5LXNwYWNlLWJldHdlZW4nOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAnYWxpZ24tY2VudGVyJzogdHJ1ZVxuICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICB7dGhpcy5oYXNJbnB1dExlZnRUaXBzXG4gICAgICAgICAgICAgICAgICAgID8gPGRpdiBjbGFzcz17dGhpcy5jbGFzc2VzKCd0b3AtdGlwcy1sZWZ0Jyl9PlxuICAgICAgICAgICAgICAgICAgICB7KChfYSA9IHRoaXMuaW5wdXRUaXBzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudGlwTGVmdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDxzcGFuIGNsYXNzPXt0aGlzLmNsYXNzZXMoJ3RvcC10aXBzLWxlZnQtdHh0JywgJ21yLTEnKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsoX2IgPSB0aGlzLmlucHV0VGlwcykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnRpcExlZnR9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICB7KCgoX2MgPSB0aGlzLmlucHV0VGlwcykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmFtb3VudCkgfHwgKChfZCA9IHRoaXMuaW5wdXRUaXBzKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuYW1vdW50KSA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDxzcGFuIGNsYXNzPXt0aGlzLmNsYXNzZXMoJ3RvcC10aXBzLWxlZnQtYW1vdW50Jyl9IHZPbjpjbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0luUmFuZ2UoKygoX2EgPSB0aGlzLmlucHV0VGlwcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFtb3VudCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2Vycm9yOmxpbWl0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZV9pbnB1dCA9IGAkeyhfYiA9IHRoaXMuaW5wdXRUaXBzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuYW1vdW50fWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFNsaWRlclZhbHVlV2l0aExpbWl0KCt0aGlzLl92YWx1ZV9pbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHRoaXMuX3ZhbHVlX2lucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2NsaWNrOmFtb3VudCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy4kZm9yY2VVcGRhdGUoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz17dGhpcy5jbGFzc2VzKCd0b3AtdGlwcy1sZWZ0LWFtb3VudC1udW0nLCAnZi1ncmV5c2NhbGUtMSBmb250LXdlaWdodC1ib2xkJyl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtgJHsoX2UgPSB0aGlzLmlucHV0VGlwcykgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLmFtb3VudH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPXt0aGlzLmNsYXNzZXMoJ3RvcC10aXBzLWxlZnQtYW1vdW50LXN5bWJvbCcsICdmLWdyZXlzY2FsZS0zJyl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtgJHsoX2cgPSAoX2YgPSB0aGlzLmlucHV0VGlwcykgPT09IG51bGwgfHwgX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mLmFtb3VudFN5bWJvbCkgIT09IG51bGwgJiYgX2cgIT09IHZvaWQgMCA/IF9nIDogJyd9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA6IG51bGx9XG4gICAgICAgICAgICAgIHsoKF9oID0gdGhpcy5pbnB1dFRpcHMpID09PSBudWxsIHx8IF9oID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaC50aXBSaWdodClcbiAgICAgICAgICAgICAgICAgICAgPyA8ZGl2IGNsYXNzPXt0aGlzLmNsYXNzZXMoJ3RvcC10aXBzLXJpZ2h0Jyl9PlxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5pbnB1dFRpcHMudGlwUmlnaHR9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgOiBudWxsfVxuICAgICAgICAgICAgPC9WTGF5b3V0Pn1cbiAgICAgICAgICB7dGhpcy5lcnJvclxuICAgICAgICAgICAgICAgID8gPGRpdiBjbGFzcz17dGhpcy5jbGFzc2VzKCd0b3AtZXJyb3InLCAnZi1jYXB0aW9uIHB0LTInKX0+XG4gICAgICAgICAgICAgICAge3R5cGVvZiB0aGlzLmVycm9yID09PSAnZnVuY3Rpb24nID8gdGhpcy5lcnJvcih0aGlzLl92YWx1ZV9pbnB1dCkgOiB0aGlzLmVycm9yfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA6ICh0aGlzLnNob3dTbGlkZXIgfHwgdGhpcy5zaG93QnRuKSA/IDxkaXYgY2xhc3M9e3RoaXMuY2xhc3NlcygndG9wLWVycm9yLXBsYWNlaG9sZGVyJyl9Lz4gOiBudWxsfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICB7dGhpcy5zaG93U2xpZGVyXG4gICAgICAgICAgICAgICAgPyA8ZGl2IGNsYXNzPXt0aGlzLmNsYXNzZXMoJ21pZCcsICdtYi04Jyl9PlxuICAgICAgICAgICAgICAgIHt0aGlzLnNob3dTbGlkZXJUaXBzID8gKHNsaWRlclRpcHMgIT09IG51bGwgJiYgc2xpZGVyVGlwcyAhPT0gdm9pZCAwID8gc2xpZGVyVGlwcyA6IDxWTGF5b3V0IGNsYXNzPXt0aGlzLmNsYXNzZXMoJ21pZC10aXBzJywgJ21iLTUgZi1ncmV5c2NhbGUtMyBmLWJvZHktMicpfSBhdHRycz17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdqdXN0aWZ5LXNwYWNlLWJldHdlZW4nOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGlnbi1jZW50ZXInOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3RoaXMucmF0aW9UZXh0fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9J2YtZ3JleXNjYWxlLTEgZm9udC13ZWlnaHQtYm9sZCc+e2AkeyhfaiA9IHRoaXMuX3ZhbHVlX3NsaWRlcikgIT09IG51bGwgJiYgX2ogIT09IHZvaWQgMCA/IF9qIDogMH0lYH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L1ZMYXlvdXQ+KSA6IG51bGx9XG4gICAgICAgICAgICAgICAge3NsaWRlciAhPT0gbnVsbCAmJiBzbGlkZXIgIT09IHZvaWQgMCA/IHNsaWRlciA6IDxWdWVTbGlkZXIgdk1vZGVsPXt0aGlzLl92YWx1ZV9zbGlkZXJ9IGhlaWdodD17OH0gbWluPXswfSBtYXg9ezEwMH0gaW50ZXJ2YWw9ezAuMDF9IGxhenk9e3RydWV9IHRvb2x0aXA9J25vbmUnIGNvbnRhaW5lZD17dHJ1ZX0gZGlzYWJsZWQ9e3RoaXMuZGlzYWJsZWRTbGlkZXJ9IHZPbjpjaGFuZ2U9e3ZhbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVfc2xpZGVyID0gK3ZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNVcHBlckxpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlX2lucHV0ID0gZm9ybWF0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG46ICt2YWwgLyAxMDAgKiB0aGlzLm1heCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHA6IDhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdGhpcy5fdmFsdWVfaW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB0aGlzLiRmb3JjZVVwZGF0ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH19Lz59XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDogbnVsbH1cblxuICAgICAgICB7dGhpcy5zaG93QnRuXG4gICAgICAgICAgICAgICAgPyBidG4gIT09IG51bGwgJiYgYnRuICE9PSB2b2lkIDAgPyBidG4gOiA8RkJ1dHRvbiBjbGFzcz0ncHgtOCBweS00IGYtYmctZ3JleXNjYWxlLTEgZi1ncmV5c2NhbGUtNicgY29sb3I9e3RoaXMuY29sb3J9IGF0dHJzPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZEJ0biAhPT0gdm9pZCAwID8gdGhpcy5kaXNhYmxlZEJ0biA6ICF0aGlzLmlzSW5SYW5nZSgrdGhpcy5fdmFsdWVfaW5wdXQpXG4gICAgICAgICAgICAgICAgICAgIH19IHZPbjpjbGljaz17KCkgPT4gdGhpcy4kZW1pdCgnY2xpY2s6YnV0dG9uJyl9PlxuICAgICAgICAgICAgICB7dGhpcy5idG5UZXh0fVxuICAgICAgICAgICAgPC9GQnV0dG9uPlxuICAgICAgICAgICAgICAgIDogbnVsbH1cbiAgICAgIDwvVkxheW91dD4pO1xuICAgIH1cbn0pOyJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=