@foxone/finance-ui
Version:
The Financial UI Component Library Based on @foxone/uikit and vuetify
341 lines (288 loc) • 47.2 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = exports.RiskInfo = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _vuePropertyDecorator = require("vue-property-decorator");
var _classnames = _interopRequireDefault(require("../utils/classnames"));
var _lib = require("vuetify/lib");
var _FButton = require("@foxone/uikit/src/components/FButton");
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var __decorate = void 0 && (void 0).__decorate || function (decorators, target, key, desc) {
var c = arguments.length,
r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
d;
if ((typeof Reflect === "undefined" ? "undefined" : (0, _typeof2["default"])(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
}
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var RiskInfo = /*#__PURE__*/function (_Vue) {
(0, _inherits2["default"])(RiskInfo, _Vue);
var _super = _createSuper(RiskInfo);
function RiskInfo() {
var _this;
(0, _classCallCheck2["default"])(this, RiskInfo);
_this = _super.apply(this, arguments);
_this.isContinue = false;
_this.isShow = false;
_this.timer = null;
return _this;
}
(0, _createClass2["default"])(RiskInfo, [{
key: "hasAssets",
get: function get() {
var res = false;
try {
res = this.assetLeft && JSON.stringify(this.assetLeft) !== '{}' && this.assetRight && JSON.stringify(this.assetRight) !== '{}';
} catch (error) {
res = false;
}
return res;
}
}, {
key: "onCountDown",
value: function onCountDown() {
var _this2 = this;
if (this.count === void 0) this.count = this.countdown;
if (this.count <= 0) {
this.timer = null;
return;
}
this.timer = setTimeout(function () {
_this2.count--;
_this2.$nextTick(function () {
return _this2.$forceUpdate();
});
_this2.onCountDown();
}, 1000);
}
}, {
key: "resetTimer",
value: function resetTimer() {
var _this3 = this;
setTimeout(function () {
if (_this3.timer) {
clearTimeout(_this3.timer);
_this3.timer = null;
}
_this3.count = void 0;
}, 300);
}
}, {
key: "handleValueChange",
value: function handleValueChange(val) {
this.isShow = val;
if (val && this.timer === null) this.onCountDown();
}
}, {
key: "created",
value: function created() {
this.isShow = this.value;
}
}, {
key: "beforeDestroy",
value: function beforeDestroy() {
if (this.timer) {
clearTimeout(this.timer);
this.timer = null;
}
}
}, {
key: "render",
value: function render(h) {
var _this4 = this;
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
var _activator = this.$scopedSlots.activator;
var customContinueText = (_a = this.customText["continue"]) !== null && _a !== void 0 ? _a : {};
var customConfirmText = (_b = this.customText.confirm) !== null && _b !== void 0 ? _b : {};
var customContinueColor = (_c = this.customColor["continue"]) !== null && _c !== void 0 ? _c : {};
var customConfirmColor = (_d = this.customColor.confirm) !== null && _d !== void 0 ? _d : {};
var classes = (0, _classnames["default"])('risk-info');
return h(_lib.VDialog, {
scopedSlots: {
activator: function activator(_ref) {
var on = _ref.on,
attrs = _ref.attrs;
return _activator && _activator({
on: on,
attrs: attrs
}) || null;
}
},
props: {
value: this.isShow,
'content-class': classes(void 0, this.className)
},
on: {
input: function input(val) {
if (val && _this4.timer === null) _this4.onCountDown();
_this4.isShow = val;
_this4.$emit('change', val);
}
}
}, [h(_lib.VCard, {
staticClass: classes('card')
}, [h(_lib.VCardTitle, {
staticClass: classes('card-title', 'justify-center')
}, [h('div', {
staticClass: classes('title', 'f-greyscale-1 f-title-1')
}, [this.isContinue ? customConfirmText.title || 'Warning' : customContinueText.title || 'Confirm transaction'])]), h(_lib.VCardText, {
staticClass: 'pa-0 px-8'
}, [this.isContinue ? h('div', {
staticClass: 'd-flex justify-center'
}, [h('div', {
staticClass: 'text-center f-body-1'
}, [customConfirmText.content || 'Once the transaction is executed, it is irrevocable, please pay after confirmation carefully.'])]) : h('div', {
staticClass: 'd-flex flex-column align-center'
}, [h('div', {
staticClass: classes('highlight', 'pa-4')
}, [h('h3', {
staticClass: classes('highlight-text', 'f-title-3')
}, (_f = (_e = customContinueText.highlights) === null || _e === void 0 ? void 0 : _e[0]) !== null && _f !== void 0 ? _f : 'Price impact reached'), h('h3', {
staticClass: classes('highlight-impact')
}, this.impact || '%'), h('h4', {
staticClass: classes('highlight-text', 'f-title-3')
}, (_h = (_g = customContinueText.highlights) === null || _g === void 0 ? void 0 : _g[1]) !== null && _h !== void 0 ? _h : 'It may cause a serious result.')]), this.hasAssets ? h('div', {
staticClass: classes('assets', 'd-flex justify-space-between mt-6')
}, [h('div', {
staticClass: classes('assets-left', 'd-inline-flex flex-column justify-left')
}, [h('span', {
staticClass: classes('assets-left-symbol', 'f-greyscale-1 f-body-2')
}, [(_j = this.assetLeft) === null || _j === void 0 ? void 0 : _j.symbol]), h('span', {
staticClass: classes('assets-left-amount', 'f-greyscale-3 f-caption text-truncate')
}, [(_k = this.assetLeft) === null || _k === void 0 ? void 0 : _k.amount])]), h('div', {
staticClass: classes('assets-right', 'd-inline-flex flex-column justify-center')
}, [h('span', {
staticClass: classes('assets-right-symbol', 'f-greyscale-1 f-body-2')
}, [(_l = this.assetRight) === null || _l === void 0 ? void 0 : _l.symbol]), h('span', {
staticClass: classes('assets-right-amount', 'f-greyscale-3 f-caption text-truncate')
}, [(_m = this.assetRight) === null || _m === void 0 ? void 0 : _m.amount])])]) : null])]), h(_lib.VCardActions, {
staticClass: 'mt-6 pa-0 align-center justify-center'
}, [this.isContinue ? h('div', {
staticClass: 'd-flex align-center'
}, [h(_FButton.FButton, {
staticClass: classes('action-confirm-btn-cancel', 'pt-6 pb-8'),
props: {
type: 'text',
color: (customConfirmColor === null || customConfirmColor === void 0 ? void 0 : customConfirmColor.btn_cancel) || 'f-greyscale-6'
},
on: {
click: function click() {
_this4.isShow = false;
_this4.$emit('change', false);
_this4.$emit('cancel:confirm');
setTimeout(function () {
return _this4.isContinue = false;
}, 300);
}
}
}, (customConfirmText === null || customConfirmText === void 0 ? void 0 : customConfirmText.btn_cancel) || 'Cancel'), h(_FButton.FButton, {
staticClass: classes('action-confirm-btn-confirm', 'pt-6 pb-8'),
props: {
type: 'text',
color: (customConfirmColor === null || customConfirmColor === void 0 ? void 0 : customConfirmColor.btn_confirm) || 'error'
},
on: {
click: function click() {
_this4.isShow = false;
_this4.$emit('change', false);
_this4.$emit('confirm');
setTimeout(function () {
return _this4.isContinue = false;
}, 300);
}
}
}, (customConfirmText === null || customConfirmText === void 0 ? void 0 : customConfirmText.btn_confirm) || 'Confirm')]) : h('div', {
staticClass: 'd-flex flex-column align-center justify-center'
}, [h(_FButton.FButton, {
staticClass: classes('action-continue-btn-cancel', 'f-greyscale-6'),
props: {
color: (customContinueColor === null || customContinueColor === void 0 ? void 0 : customContinueColor.btn_cancel) || 'pink'
},
on: {
click: function click() {
_this4.isShow = false;
_this4.$emit('change', false);
_this4.$emit('cancel:continue');
}
}
}, (customContinueText === null || customContinueText === void 0 ? void 0 : customContinueText.btn_cancel) || 'Cancel'), h(_FButton.FButton, {
staticClass: classes('action-continue-btn-continue', 'py-8'),
attrs: {
disabled: this.count > 0
},
props: {
type: 'text',
color: (customContinueColor === null || customContinueColor === void 0 ? void 0 : customContinueColor.btn_continue) || 'f-greyscale-1'
},
on: {
click: function click() {
_this4.isContinue = true;
_this4.$emit('continue');
}
}
}, "".concat((customContinueText === null || customContinueText === void 0 ? void 0 : customContinueText.btn_continue) || 'Continue').concat(this.count > 0 ? "(".concat(this.count, "s)") : '').trim())])])])]);
}
}]);
return RiskInfo;
}(_vuePropertyDecorator.Vue);
exports.RiskInfo = RiskInfo;
__decorate([(0, _vuePropertyDecorator.Model)('change', {
"default": false
})], RiskInfo.prototype, "value", void 0);
__decorate([(0, _vuePropertyDecorator.Prop)({
type: String,
"default": ''
})], RiskInfo.prototype, "className", void 0);
__decorate([(0, _vuePropertyDecorator.Prop)({
type: String,
"default": '?%'
})], RiskInfo.prototype, "impact", void 0);
__decorate([(0, _vuePropertyDecorator.Prop)({
type: Object,
"default": function _default() {
return {};
}
})], RiskInfo.prototype, "assetLeft", void 0);
__decorate([(0, _vuePropertyDecorator.Prop)({
type: Object,
"default": function _default() {
return {};
}
})], RiskInfo.prototype, "assetRight", void 0);
__decorate([(0, _vuePropertyDecorator.Prop)({
type: Number,
"default": 0
})], RiskInfo.prototype, "countdown", void 0);
__decorate([(0, _vuePropertyDecorator.Prop)({
type: Object,
"default": function _default() {
return {
"continue": {},
confirm: {}
};
}
})], RiskInfo.prototype, "customText", void 0);
__decorate([(0, _vuePropertyDecorator.Prop)({
type: Object,
"default": function _default() {
return {
"continue": {},
confirm: {}
};
}
})], RiskInfo.prototype, "customColor", void 0);
__decorate([(0, _vuePropertyDecorator.Watch)('value')], RiskInfo.prototype, "handleValueChange", null);
exports.RiskInfo = RiskInfo = __decorate([_vuePropertyDecorator.Component], RiskInfo);
var _default2 = RiskInfo;
exports["default"] = _default2;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9SaXNrSW5mby9fZGVwcmVjYXRlLnRzIiwiUmlza0luZm8vX2RlcHJlY2F0ZS5qcyJdLCJuYW1lcyI6WyJfX2RlY29yYXRlIiwiZGVjb3JhdG9ycyIsInRhcmdldCIsImtleSIsImRlc2MiLCJjIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiciIsIk9iamVjdCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImQiLCJSZWZsZWN0IiwiZGVjb3JhdGUiLCJpIiwiZGVmaW5lUHJvcGVydHkiLCJSaXNrSW5mbyIsImlzQ29udGludWUiLCJpc1Nob3ciLCJ0aW1lciIsInJlcyIsImFzc2V0TGVmdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJhc3NldFJpZ2h0IiwiZXJyb3IiLCJjb3VudCIsImNvdW50ZG93biIsInNldFRpbWVvdXQiLCIkbmV4dFRpY2siLCIkZm9yY2VVcGRhdGUiLCJvbkNvdW50RG93biIsImNsZWFyVGltZW91dCIsInZhbCIsInZhbHVlIiwiaCIsIl9hIiwiX2IiLCJfYyIsIl9kIiwiX2UiLCJfZiIsIl9nIiwiX2giLCJfaiIsIl9rIiwiX2wiLCJfbSIsImFjdGl2YXRvciIsIiRzY29wZWRTbG90cyIsImN1c3RvbUNvbnRpbnVlVGV4dCIsImN1c3RvbVRleHQiLCJjdXN0b21Db25maXJtVGV4dCIsImNvbmZpcm0iLCJjdXN0b21Db250aW51ZUNvbG9yIiwiY3VzdG9tQ29sb3IiLCJjdXN0b21Db25maXJtQ29sb3IiLCJjbGFzc2VzIiwiVkRpYWxvZyIsInNjb3BlZFNsb3RzIiwib24iLCJhdHRycyIsInByb3BzIiwiY2xhc3NOYW1lIiwiaW5wdXQiLCIkZW1pdCIsIlZDYXJkIiwic3RhdGljQ2xhc3MiLCJWQ2FyZFRpdGxlIiwidGl0bGUiLCJWQ2FyZFRleHQiLCJjb250ZW50IiwiaGlnaGxpZ2h0cyIsImltcGFjdCIsImhhc0Fzc2V0cyIsInN5bWJvbCIsImFtb3VudCIsIlZDYXJkQWN0aW9ucyIsIkZCdXR0b24iLCJ0eXBlIiwiY29sb3IiLCJidG5fY2FuY2VsIiwiY2xpY2siLCJidG5fY29uZmlybSIsImRpc2FibGVkIiwiYnRuX2NvbnRpbnVlIiwidHJpbSIsIlZ1ZSIsInByb3RvdHlwZSIsIlN0cmluZyIsIk51bWJlciIsIkNvbXBvbmVudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBT0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQ1RBLElBQUlBLFVBQVUsR0FBSSxVQUFRLFNBQUtBLFVBQWQsSUFBNkIsVUFBVUMsVUFBVixFQUFzQkMsTUFBdEIsRUFBOEJDLEdBQTlCLEVBQW1DQyxJQUFuQyxFQUF5QztBQUNuRixNQUFJQyxDQUFDLEdBQUdDLFNBQVMsQ0FBQ0MsTUFBbEI7QUFBQSxNQUEwQkMsQ0FBQyxHQUFHSCxDQUFDLEdBQUcsQ0FBSixHQUFRSCxNQUFSLEdBQWlCRSxJQUFJLEtBQUssSUFBVCxHQUFnQkEsSUFBSSxHQUFHSyxNQUFNLENBQUNDLHdCQUFQLENBQWdDUixNQUFoQyxFQUF3Q0MsR0FBeEMsQ0FBdkIsR0FBc0VDLElBQXJIO0FBQUEsTUFBMkhPLENBQTNIO0FBQ0EsTUFBSSxRQUFPQyxPQUFQLDBEQUFPQSxPQUFQLE9BQW1CLFFBQW5CLElBQStCLE9BQU9BLE9BQU8sQ0FBQ0MsUUFBZixLQUE0QixVQUEvRCxFQUEyRUwsQ0FBQyxHQUFHSSxPQUFPLENBQUNDLFFBQVIsQ0FBaUJaLFVBQWpCLEVBQTZCQyxNQUE3QixFQUFxQ0MsR0FBckMsRUFBMENDLElBQTFDLENBQUosQ0FBM0UsS0FDSyxLQUFLLElBQUlVLENBQUMsR0FBR2IsVUFBVSxDQUFDTSxNQUFYLEdBQW9CLENBQWpDLEVBQW9DTyxDQUFDLElBQUksQ0FBekMsRUFBNENBLENBQUMsRUFBN0M7QUFBaUQsUUFBSUgsQ0FBQyxHQUFHVixVQUFVLENBQUNhLENBQUQsQ0FBbEIsRUFBdUJOLENBQUMsR0FBRyxDQUFDSCxDQUFDLEdBQUcsQ0FBSixHQUFRTSxDQUFDLENBQUNILENBQUQsQ0FBVCxHQUFlSCxDQUFDLEdBQUcsQ0FBSixHQUFRTSxDQUFDLENBQUNULE1BQUQsRUFBU0MsR0FBVCxFQUFjSyxDQUFkLENBQVQsR0FBNEJHLENBQUMsQ0FBQ1QsTUFBRCxFQUFTQyxHQUFULENBQTdDLEtBQStESyxDQUFuRTtBQUF4RTtBQUNMLFNBQU9ILENBQUMsR0FBRyxDQUFKLElBQVNHLENBQVQsSUFBY0MsTUFBTSxDQUFDTSxjQUFQLENBQXNCYixNQUF0QixFQUE4QkMsR0FBOUIsRUFBbUNLLENBQW5DLENBQWQsRUFBcURBLENBQTVEO0FBQ0gsQ0FMRDs7QUQrQ0EsSUFBYVEsUUFBUTtBQUFBOztBQUFBOztBQUFyQixzQkFBQTtBQUFBOztBQUFBO0FDbkNRLCtCQUFTVixTQUFUO0FENkNFLFVBQUFXLFVBQUEsR0FBYSxLQUFiO0FBQ0EsVUFBQUMsTUFBQSxHQUFTLEtBQVQ7QUFDQSxVQUFBQyxLQUFBLEdBQThDLElBQTlDO0FBWlY7QUFpVkM7O0FBalZvQjtBQUFBO0FBQUEsU0FlbkIsZUFBcUI7QUFDbkIsVUFBSUMsR0FBRyxHQUFHLEtBQVY7O0FBQ0EsVUFBSTtBQUNGQSxRQUFBQSxHQUFHLEdBQUcsS0FBS0MsU0FBTCxJQUFrQkMsSUFBSSxDQUFDQyxTQUFMLENBQWUsS0FBS0YsU0FBcEIsTUFBbUMsSUFBckQsSUFBNkQsS0FBS0csVUFBbEUsSUFBZ0ZGLElBQUksQ0FBQ0MsU0FBTCxDQUFlLEtBQUtDLFVBQXBCLE1BQW9DLElBQTFIO0FBQ0QsT0FGRCxDQUVFLE9BQU9DLEtBQVAsRUFBYztBQUNkTCxRQUFBQSxHQUFHLEdBQUcsS0FBTjtBQUNEOztBQUNELGFBQU9BLEdBQVA7QUFDRDtBQXZCa0I7QUFBQTtBQUFBLFdBeUJYLHVCQUFXO0FBQUE7O0FBQ2pCLFVBQUksS0FBS00sS0FBTCxLQUFlLEtBQUssQ0FBeEIsRUFBMkIsS0FBS0EsS0FBTCxHQUFhLEtBQUtDLFNBQWxCOztBQUMzQixVQUFJLEtBQUtELEtBQUwsSUFBYyxDQUFsQixFQUFxQjtBQUNuQixhQUFLUCxLQUFMLEdBQWEsSUFBYjtBQUNBO0FBQ0Q7O0FBQ0QsV0FBS0EsS0FBTCxHQUFhUyxVQUFVLENBQUMsWUFBSztBQUMzQixRQUFBLE1BQUksQ0FBQ0YsS0FBTDs7QUFDQSxRQUFBLE1BQUksQ0FBQ0csU0FBTCxDQUFlO0FBQUEsaUJBQU0sTUFBSSxDQUFDQyxZQUFMLEVBQU47QUFBQSxTQUFmOztBQUNBLFFBQUEsTUFBSSxDQUFDQyxXQUFMO0FBQ0QsT0FKc0IsRUFJcEIsSUFKb0IsQ0FBdkI7QUFLRDtBQXBDa0I7QUFBQTtBQUFBLFdBc0NaLHNCQUFVO0FBQUE7O0FBQ2ZILE1BQUFBLFVBQVUsQ0FBQyxZQUFLO0FBQ2QsWUFBSSxNQUFJLENBQUNULEtBQVQsRUFBZ0I7QUFDZGEsVUFBQUEsWUFBWSxDQUFDLE1BQUksQ0FBQ2IsS0FBTixDQUFaO0FBQ0EsVUFBQSxNQUFJLENBQUNBLEtBQUwsR0FBYSxJQUFiO0FBQ0Q7O0FBQ0QsUUFBQSxNQUFJLENBQUNPLEtBQUwsR0FBYSxLQUFLLENBQWxCO0FBQ0QsT0FOUyxFQU1QLEdBTk8sQ0FBVjtBQU9EO0FBOUNrQjtBQUFBO0FBQUEsV0FpRFosMkJBQWtCTyxHQUFsQixFQUE4QjtBQUNuQyxXQUFLZixNQUFMLEdBQWNlLEdBQWQ7QUFDQSxVQUFJQSxHQUFHLElBQUksS0FBS2QsS0FBTCxLQUFlLElBQTFCLEVBQWdDLEtBQUtZLFdBQUw7QUFDakM7QUFwRGtCO0FBQUE7QUFBQSxXQXNEWixtQkFBTztBQUNaLFdBQUtiLE1BQUwsR0FBYyxLQUFLZ0IsS0FBbkI7QUFDRDtBQXhEa0I7QUFBQTtBQUFBLFdBMERaLHlCQUFhO0FBQ2xCLFVBQUksS0FBS2YsS0FBVCxFQUFnQjtBQUNkYSxRQUFBQSxZQUFZLENBQUMsS0FBS2IsS0FBTixDQUFaO0FBQ0EsYUFBS0EsS0FBTCxHQUFhLElBQWI7QUFDRDtBQUNGO0FBL0RrQjtBQUFBO0FBQUEsV0FpRVosZ0JBQU9nQixDQUFQLEVBQXVCO0FBQUE7O0FDaER4QixVQUFJQyxFQUFKLEVBQVFDLEVBQVIsRUFBWUMsRUFBWixFQUFnQkMsRUFBaEIsRUFBb0JDLEVBQXBCLEVBQXdCQyxFQUF4QixFQUE0QkMsRUFBNUIsRUFBZ0NDLEVBQWhDLEVBQW9DQyxFQUFwQyxFQUF3Q0MsRUFBeEMsRUFBNENDLEVBQTVDLEVBQWdEQyxFQUFoRDs7QURpREosVUFBTUMsVUFBUyxHQUFHLEtBQUtDLFlBQUwsQ0FBa0JELFNBQXBDO0FBQ0EsVUFBTUUsa0JBQWtCLEdBQUcsQ0FBQWQsRUFBQSxHQUFBLEtBQUtlLFVBQUwsWUFBQSxNQUF3QixJQUF4QixJQUF3QmYsRUFBQSxLQUFBLEtBQUEsQ0FBeEIsR0FBd0JBLEVBQXhCLEdBQTRCLEVBQXZEO0FBQ0EsVUFBTWdCLGlCQUFpQixHQUFHLENBQUFmLEVBQUEsR0FBQSxLQUFLYyxVQUFMLENBQWdCRSxPQUFoQixNQUF1QixJQUF2QixJQUF1QmhCLEVBQUEsS0FBQSxLQUFBLENBQXZCLEdBQXVCQSxFQUF2QixHQUEyQixFQUFyRDtBQUNBLFVBQU1pQixtQkFBbUIsR0FBRyxDQUFBaEIsRUFBQSxHQUFBLEtBQUtpQixXQUFMLFlBQUEsTUFBeUIsSUFBekIsSUFBeUJqQixFQUFBLEtBQUEsS0FBQSxDQUF6QixHQUF5QkEsRUFBekIsR0FBNkIsRUFBekQ7QUFDQSxVQUFNa0Isa0JBQWtCLEdBQUcsQ0FBQWpCLEVBQUEsR0FBQSxLQUFLZ0IsV0FBTCxDQUFpQkYsT0FBakIsTUFBd0IsSUFBeEIsSUFBd0JkLEVBQUEsS0FBQSxLQUFBLENBQXhCLEdBQXdCQSxFQUF4QixHQUE0QixFQUF2RDtBQUVBLFVBQU1rQixPQUFPLEdBQUcsNEJBQVcsV0FBWCxDQUFoQjtBQUNBLGFBQU90QixDQUFDLENBQ051QixZQURNLEVBRU47QUFDRUMsUUFBQUEsV0FBVyxFQUFFO0FBQ1hYLFVBQUFBLFNBQVMsRUFBRSx5QkFBa0I7QUFBQSxnQkFBZlksRUFBZSxRQUFmQSxFQUFlO0FBQUEsZ0JBQVhDLEtBQVcsUUFBWEEsS0FBVztBQUMzQixtQkFBUWIsVUFBUyxJQUFJQSxVQUFTLENBQUM7QUFBRVksY0FBQUEsRUFBRSxFQUFGQSxFQUFGO0FBQU1DLGNBQUFBLEtBQUssRUFBTEE7QUFBTixhQUFELENBQXZCLElBQTJDLElBQWxEO0FBQ0Q7QUFIVSxTQURmO0FBTUVDLFFBQUFBLEtBQUssRUFBRTtBQUNMNUIsVUFBQUEsS0FBSyxFQUFFLEtBQUtoQixNQURQO0FBRUwsMkJBQWlCdUMsT0FBTyxDQUFDLEtBQUssQ0FBTixFQUFTLEtBQUtNLFNBQWQ7QUFGbkIsU0FOVDtBQVVFSCxRQUFBQSxFQUFFLEVBQUU7QUFDRkksVUFBQUEsS0FBSyxFQUFFLGVBQUMvQixHQUFELEVBQWE7QUFDbEIsZ0JBQUlBLEdBQUcsSUFBSSxNQUFJLENBQUNkLEtBQUwsS0FBZSxJQUExQixFQUFnQyxNQUFJLENBQUNZLFdBQUw7QUFDaEMsWUFBQSxNQUFJLENBQUNiLE1BQUwsR0FBY2UsR0FBZDs7QUFDQSxZQUFBLE1BQUksQ0FBQ2dDLEtBQUwsQ0FBVyxRQUFYLEVBQXFCaEMsR0FBckI7QUFDRDtBQUxDO0FBVk4sT0FGTSxFQW9CTixDQUNFRSxDQUFDLENBQ0MrQixVQURELEVBRUM7QUFDRUMsUUFBQUEsV0FBVyxFQUFFVixPQUFPLENBQUMsTUFBRDtBQUR0QixPQUZELEVBS0MsQ0FDRXRCLENBQUMsQ0FDQ2lDLGVBREQsRUFFQztBQUNFRCxRQUFBQSxXQUFXLEVBQUVWLE9BQU8sQ0FBQyxZQUFELEVBQWUsZ0JBQWY7QUFEdEIsT0FGRCxFQUtDLENBQ0V0QixDQUFDLENBQ0MsS0FERCxFQUVDO0FBQ0VnQyxRQUFBQSxXQUFXLEVBQUVWLE9BQU8sQ0FBQyxPQUFELEVBQVUseUJBQVY7QUFEdEIsT0FGRCxFQUtDLENBQ0UsS0FBS3hDLFVBQUwsR0FDSW1DLGlCQUFpQixDQUFDaUIsS0FBbEIsSUFBMkIsU0FEL0IsR0FFSW5CLGtCQUFrQixDQUFDbUIsS0FBbkIsSUFBNEIscUJBSGxDLENBTEQsQ0FESCxDQUxELENBREgsRUFvQkVsQyxDQUFDLENBQ0NtQyxjQURELEVBRUM7QUFDRUgsUUFBQUEsV0FBVyxFQUFFO0FBRGYsT0FGRCxFQUtDLENBQ0UsS0FBS2xELFVBQUwsR0FDSWtCLENBQUMsQ0FDRCxLQURDLEVBRUQ7QUFDRWdDLFFBQUFBLFdBQVcsRUFBRTtBQURmLE9BRkMsRUFLRCxDQUNFaEMsQ0FBQyxDQUNDLEtBREQsRUFFQztBQUNFZ0MsUUFBQUEsV0FBVyxFQUFFO0FBRGYsT0FGRCxFQUtDLENBQUNmLGlCQUFpQixDQUFDbUIsT0FBbEIsSUFBNkIsK0ZBQTlCLENBTEQsQ0FESCxDQUxDLENBREwsR0FnQklwQyxDQUFDLENBQ0QsS0FEQyxFQUVEO0FBQ0VnQyxRQUFBQSxXQUFXLEVBQUU7QUFEZixPQUZDLEVBS0QsQ0FDRWhDLENBQUMsQ0FDQyxLQURELEVBRUM7QUFDRWdDLFFBQUFBLFdBQVcsRUFBRVYsT0FBTyxDQUFDLFdBQUQsRUFBYyxNQUFkO0FBRHRCLE9BRkQsRUFLQyxDQUNFdEIsQ0FBQyxDQUNDLElBREQsRUFFQztBQUNFZ0MsUUFBQUEsV0FBVyxFQUFFVixPQUFPLENBQUMsZ0JBQUQsRUFBbUIsV0FBbkI7QUFEdEIsT0FGRCxFQUtDLENBQUFoQixFQUFBLEdBQUEsQ0FBQUQsRUFBQSxHQUFBVSxrQkFBa0IsQ0FBQ3NCLFVBQW5CLE1BQTZCLElBQTdCLElBQTZCaEMsRUFBQSxLQUFBLEtBQUEsQ0FBN0IsR0FBNkIsS0FBQSxDQUE3QixHQUE2QkEsRUFBQSxDQUFHLENBQUgsQ0FBN0IsTUFBa0MsSUFBbEMsSUFBa0NDLEVBQUEsS0FBQSxLQUFBLENBQWxDLEdBQWtDQSxFQUFsQyxHQUFzQyxzQkFMdkMsQ0FESCxFQVFFTixDQUFDLENBQ0MsSUFERCxFQUVDO0FBQ0VnQyxRQUFBQSxXQUFXLEVBQUVWLE9BQU8sQ0FBQyxrQkFBRDtBQUR0QixPQUZELEVBS0MsS0FBS2dCLE1BQUwsSUFBZSxHQUxoQixDQVJILEVBZUV0QyxDQUFDLENBQ0MsSUFERCxFQUVDO0FBQ0VnQyxRQUFBQSxXQUFXLEVBQUVWLE9BQU8sQ0FBQyxnQkFBRCxFQUFtQixXQUFuQjtBQUR0QixPQUZELEVBS0MsQ0FBQWQsRUFBQSxHQUFBLENBQUFELEVBQUEsR0FBQVEsa0JBQWtCLENBQUNzQixVQUFuQixNQUE2QixJQUE3QixJQUE2QjlCLEVBQUEsS0FBQSxLQUFBLENBQTdCLEdBQTZCLEtBQUEsQ0FBN0IsR0FBNkJBLEVBQUEsQ0FBRyxDQUFILENBQTdCLE1BQWtDLElBQWxDLElBQWtDQyxFQUFBLEtBQUEsS0FBQSxDQUFsQyxHQUFrQ0EsRUFBbEMsR0FBc0MsZ0NBTHZDLENBZkgsQ0FMRCxDQURILEVBOEJFLEtBQUsrQixTQUFMLEdBQWlCdkMsQ0FBQyxDQUNoQixLQURnQixFQUVoQjtBQUNFZ0MsUUFBQUEsV0FBVyxFQUFFVixPQUFPLENBQUMsUUFBRCxFQUFXLG1DQUFYO0FBRHRCLE9BRmdCLEVBS2hCLENBQ0V0QixDQUFDLENBQ0MsS0FERCxFQUVDO0FBQ0VnQyxRQUFBQSxXQUFXLEVBQUVWLE9BQU8sQ0FBQyxhQUFELEVBQWdCLHdDQUFoQjtBQUR0QixPQUZELEVBS0MsQ0FDRXRCLENBQUMsQ0FDQyxNQURELEVBRUM7QUFDRWdDLFFBQUFBLFdBQVcsRUFBRVYsT0FBTyxDQUFDLG9CQUFELEVBQXVCLHdCQUF2QjtBQUR0QixPQUZELEVBS0MsQ0FBQyxDQUFBYixFQUFBLEdBQUEsS0FBS3ZCLFNBQUwsTUFBYyxJQUFkLElBQWN1QixFQUFBLEtBQUEsS0FBQSxDQUFkLEdBQWMsS0FBQSxDQUFkLEdBQWNBLEVBQUEsQ0FBRStCLE1BQWpCLENBTEQsQ0FESCxFQVFFeEMsQ0FBQyxDQUNDLE1BREQsRUFFQztBQUNFZ0MsUUFBQUEsV0FBVyxFQUFFVixPQUFPLENBQUMsb0JBQUQsRUFBdUIsdUNBQXZCO0FBRHRCLE9BRkQsRUFLQyxDQUFDLENBQUFaLEVBQUEsR0FBQSxLQUFLeEIsU0FBTCxNQUFjLElBQWQsSUFBY3dCLEVBQUEsS0FBQSxLQUFBLENBQWQsR0FBYyxLQUFBLENBQWQsR0FBY0EsRUFBQSxDQUFFK0IsTUFBakIsQ0FMRCxDQVJILENBTEQsQ0FESCxFQXVCRXpDLENBQUMsQ0FDQyxLQURELEVBRUM7QUFDRWdDLFFBQUFBLFdBQVcsRUFBRVYsT0FBTyxDQUFDLGNBQUQsRUFBaUIsMENBQWpCO0FBRHRCLE9BRkQsRUFLQyxDQUNFdEIsQ0FBQyxDQUNDLE1BREQsRUFFQztBQUNFZ0MsUUFBQUEsV0FBVyxFQUFFVixPQUFPLENBQUMscUJBQUQsRUFBd0Isd0JBQXhCO0FBRHRCLE9BRkQsRUFLQyxDQUFDLENBQUFYLEVBQUEsR0FBQSxLQUFLdEIsVUFBTCxNQUFlLElBQWYsSUFBZXNCLEVBQUEsS0FBQSxLQUFBLENBQWYsR0FBZSxLQUFBLENBQWYsR0FBZUEsRUFBQSxDQUFFNkIsTUFBbEIsQ0FMRCxDQURILEVBUUV4QyxDQUFDLENBQ0MsTUFERCxFQUVDO0FBQ0VnQyxRQUFBQSxXQUFXLEVBQUVWLE9BQU8sQ0FBQyxxQkFBRCxFQUF3Qix1Q0FBeEI7QUFEdEIsT0FGRCxFQUtDLENBQUMsQ0FBQVYsRUFBQSxHQUFBLEtBQUt2QixVQUFMLE1BQWUsSUFBZixJQUFldUIsRUFBQSxLQUFBLEtBQUEsQ0FBZixHQUFlLEtBQUEsQ0FBZixHQUFlQSxFQUFBLENBQUU2QixNQUFsQixDQUxELENBUkgsQ0FMRCxDQXZCSCxDQUxnQixDQUFsQixHQW1ESSxJQWpGTixDQUxDLENBakJQLENBTEQsQ0FwQkgsRUFxSUV6QyxDQUFDLENBQ0MwQyxpQkFERCxFQUVDO0FBQ0VWLFFBQUFBLFdBQVcsRUFBRTtBQURmLE9BRkQsRUFLQyxDQUNFLEtBQUtsRCxVQUFMLEdBQ0lrQixDQUFDLENBQ0QsS0FEQyxFQUVEO0FBQ0VnQyxRQUFBQSxXQUFXLEVBQUU7QUFEZixPQUZDLEVBS0QsQ0FDRWhDLENBQUMsQ0FDQzJDLGdCQURELEVBRUM7QUFDRVgsUUFBQUEsV0FBVyxFQUFFVixPQUFPLENBQUMsMkJBQUQsRUFBOEIsV0FBOUIsQ0FEdEI7QUFFRUssUUFBQUEsS0FBSyxFQUFFO0FBQ0xpQixVQUFBQSxJQUFJLEVBQUUsTUFERDtBQUVMQyxVQUFBQSxLQUFLLEVBQUUsQ0FBQXhCLGtCQUFrQixLQUFBLElBQWxCLElBQUFBLGtCQUFrQixLQUFBLEtBQUEsQ0FBbEIsR0FBa0IsS0FBQSxDQUFsQixHQUFBQSxrQkFBa0IsQ0FBRXlCLFVBQXBCLEtBQWtDO0FBRnBDLFNBRlQ7QUFNRXJCLFFBQUFBLEVBQUUsRUFBRTtBQUNGc0IsVUFBQUEsS0FBSyxFQUFFLGlCQUFLO0FBQ1YsWUFBQSxNQUFJLENBQUNoRSxNQUFMLEdBQWMsS0FBZDs7QUFDQSxZQUFBLE1BQUksQ0FBQytDLEtBQUwsQ0FBVyxRQUFYLEVBQXFCLEtBQXJCOztBQUNBLFlBQUEsTUFBSSxDQUFDQSxLQUFMLENBQVcsZ0JBQVg7O0FBQ0FyQyxZQUFBQSxVQUFVLENBQUM7QUFBQSxxQkFBTyxNQUFJLENBQUNYLFVBQUwsR0FBa0IsS0FBekI7QUFBQSxhQUFELEVBQWtDLEdBQWxDLENBQVY7QUFDRDtBQU5DO0FBTk4sT0FGRCxFQWlCQyxDQUFBbUMsaUJBQWlCLEtBQUEsSUFBakIsSUFBQUEsaUJBQWlCLEtBQUEsS0FBQSxDQUFqQixHQUFpQixLQUFBLENBQWpCLEdBQUFBLGlCQUFpQixDQUFFNkIsVUFBbkIsS0FBaUMsUUFqQmxDLENBREgsRUFvQkU5QyxDQUFDLENBQ0MyQyxnQkFERCxFQUVDO0FBQ0VYLFFBQUFBLFdBQVcsRUFBRVYsT0FBTyxDQUFDLDRCQUFELEVBQStCLFdBQS9CLENBRHRCO0FBRUVLLFFBQUFBLEtBQUssRUFBRTtBQUNMaUIsVUFBQUEsSUFBSSxFQUFFLE1BREQ7QUFFTEMsVUFBQUEsS0FBSyxFQUFFLENBQUF4QixrQkFBa0IsS0FBQSxJQUFsQixJQUFBQSxrQkFBa0IsS0FBQSxLQUFBLENBQWxCLEdBQWtCLEtBQUEsQ0FBbEIsR0FBQUEsa0JBQWtCLENBQUUyQixXQUFwQixLQUFtQztBQUZyQyxTQUZUO0FBTUV2QixRQUFBQSxFQUFFLEVBQUU7QUFDRnNCLFVBQUFBLEtBQUssRUFBRSxpQkFBSztBQUNWLFlBQUEsTUFBSSxDQUFDaEUsTUFBTCxHQUFjLEtBQWQ7O0FBQ0EsWUFBQSxNQUFJLENBQUMrQyxLQUFMLENBQVcsUUFBWCxFQUFxQixLQUFyQjs7QUFDQSxZQUFBLE1BQUksQ0FBQ0EsS0FBTCxDQUFXLFNBQVg7O0FBQ0FyQyxZQUFBQSxVQUFVLENBQUM7QUFBQSxxQkFBTyxNQUFJLENBQUNYLFVBQUwsR0FBa0IsS0FBekI7QUFBQSxhQUFELEVBQWtDLEdBQWxDLENBQVY7QUFDRDtBQU5DO0FBTk4sT0FGRCxFQWlCQyxDQUFBbUMsaUJBQWlCLEtBQUEsSUFBakIsSUFBQUEsaUJBQWlCLEtBQUEsS0FBQSxDQUFqQixHQUFpQixLQUFBLENBQWpCLEdBQUFBLGlCQUFpQixDQUFFK0IsV0FBbkIsS0FBa0MsU0FqQm5DLENBcEJILENBTEMsQ0FETCxHQStDSWhELENBQUMsQ0FDRCxLQURDLEVBRUQ7QUFDRWdDLFFBQUFBLFdBQVcsRUFBRTtBQURmLE9BRkMsRUFLRCxDQUNFaEMsQ0FBQyxDQUNDMkMsZ0JBREQsRUFFQztBQUNFWCxRQUFBQSxXQUFXLEVBQUVWLE9BQU8sQ0FBQyw0QkFBRCxFQUErQixlQUEvQixDQUR0QjtBQUVFSyxRQUFBQSxLQUFLLEVBQUU7QUFDTGtCLFVBQUFBLEtBQUssRUFBRSxDQUFBMUIsbUJBQW1CLEtBQUEsSUFBbkIsSUFBQUEsbUJBQW1CLEtBQUEsS0FBQSxDQUFuQixHQUFtQixLQUFBLENBQW5CLEdBQUFBLG1CQUFtQixDQUFFMkIsVUFBckIsS0FBbUM7QUFEckMsU0FGVDtBQUtFckIsUUFBQUEsRUFBRSxFQUFFO0FBQ0ZzQixVQUFBQSxLQUFLLEVBQUUsaUJBQUs7QUFDVixZQUFBLE1BQUksQ0FBQ2hFLE1BQUwsR0FBYyxLQUFkOztBQUNBLFlBQUEsTUFBSSxDQUFDK0MsS0FBTCxDQUFXLFFBQVgsRUFBcUIsS0FBckI7O0FBQ0EsWUFBQSxNQUFJLENBQUNBLEtBQUwsQ0FBVyxpQkFBWDtBQUNEO0FBTEM7QUFMTixPQUZELEVBZUMsQ0FBQWYsa0JBQWtCLEtBQUEsSUFBbEIsSUFBQUEsa0JBQWtCLEtBQUEsS0FBQSxDQUFsQixHQUFrQixLQUFBLENBQWxCLEdBQUFBLGtCQUFrQixDQUFFK0IsVUFBcEIsS0FBa0MsUUFmbkMsQ0FESCxFQWtCRTlDLENBQUMsQ0FDQzJDLGdCQURELEVBRUM7QUFDRVgsUUFBQUEsV0FBVyxFQUFFVixPQUFPLENBQUMsOEJBQUQsRUFBaUMsTUFBakMsQ0FEdEI7QUFFRUksUUFBQUEsS0FBSyxFQUFFO0FBQ0x1QixVQUFBQSxRQUFRLEVBQUUsS0FBSzFELEtBQUwsR0FBYTtBQURsQixTQUZUO0FBS0VvQyxRQUFBQSxLQUFLLEVBQUU7QUFDTGlCLFVBQUFBLElBQUksRUFBRSxNQUREO0FBRUxDLFVBQUFBLEtBQUssRUFBRSxDQUFBMUIsbUJBQW1CLEtBQUEsSUFBbkIsSUFBQUEsbUJBQW1CLEtBQUEsS0FBQSxDQUFuQixHQUFtQixLQUFBLENBQW5CLEdBQUFBLG1CQUFtQixDQUFFK0IsWUFBckIsS0FBcUM7QUFGdkMsU0FMVDtBQVNFekIsUUFBQUEsRUFBRSxFQUFFO0FBQ0ZzQixVQUFBQSxLQUFLLEVBQUUsaUJBQUs7QUFDVixZQUFBLE1BQUksQ0FBQ2pFLFVBQUwsR0FBa0IsSUFBbEI7O0FBQ0EsWUFBQSxNQUFJLENBQUNnRCxLQUFMLENBQVcsVUFBWDtBQUNEO0FBSkM7QUFUTixPQUZELEVBa0JDLFVBQUcsQ0FBQWYsa0JBQWtCLEtBQUEsSUFBbEIsSUFBQUEsa0JBQWtCLEtBQUEsS0FBQSxDQUFsQixHQUFrQixLQUFBLENBQWxCLEdBQUFBLGtCQUFrQixDQUFFbUMsWUFBcEIsS0FBb0MsVUFBdkMsU0FBb0QsS0FBSzNELEtBQUwsR0FBYSxDQUFiLGNBQXFCLEtBQUtBLEtBQTFCLFVBQXNDLEVBQTFGLEVBQStGNEQsSUFBL0YsRUFsQkQsQ0FsQkgsQ0FMQyxDQWhEUCxDQUxELENBcklILENBTEQsQ0FESCxDQXBCTSxDQUFSO0FBdVFEO0FBaFZrQjtBQUFBO0FBQUEsRUFBU0MseUJBQVQsQ0FBckI7Ozs7QUFDdUN2RixVQUFBLENBQUEsQ0FBcEMsaUNBQU0sUUFBTixFQUFnQjtBQUFFLGFBQVM7QUFBWCxDQUFoQixDQUFvQyxDQUFBLEVDMkxwQ2dCLFFBQVEsQ0FBQ3dFLFNEM0wyQixFQzJMaEIsT0QzTGdCLEVDMkxQLEtBQUssQ0QzTEUsQ0FBQTs7QUFDQXhGLFVBQUEsQ0FBQSxDQUFwQyxnQ0FBSztBQUFFK0UsRUFBQUEsSUFBSSxFQUFFVSxNQUFSO0FBQWdCLGFBQVM7QUFBekIsQ0FBTCxDQUFvQyxDQUFBLEVDNkxwQ3pFLFFBQVEsQ0FBQ3dFLFNEN0wyQixFQzZMaEIsV0Q3TGdCLEVDNkxILEtBQUssQ0Q3TEYsQ0FBQTs7QUFDRXhGLFVBQUEsQ0FBQSxDQUF0QyxnQ0FBSztBQUFFK0UsRUFBQUEsSUFBSSxFQUFFVSxNQUFSO0FBQWdCLGFBQVM7QUFBekIsQ0FBTCxDQUFzQyxDQUFBLEVDK0x0Q3pFLFFBQVEsQ0FBQ3dFLFNEL0w2QixFQytMbEIsUUQvTGtCLEVDK0xSLEtBQUssQ0QvTEcsQ0FBQTs7QUFDTXhGLFVBQUEsQ0FBQSxDQUE1QyxnQ0FBSztBQUFFK0UsRUFBQUEsSUFBSSxFQUFFdEUsTUFBUjtBQUFnQixhQUFTO0FBQUEsV0FBTyxFQUFQO0FBQUE7QUFBekIsQ0FBTCxDQUE0QyxDQUFBLEVDaU01Q08sUUFBUSxDQUFDd0UsU0RqTW1DLEVDaU14QixXRGpNd0IsRUNpTVgsS0FBSyxDRGpNTSxDQUFBOztBQUNBeEYsVUFBQSxDQUFBLENBQTVDLGdDQUFLO0FBQUUrRSxFQUFBQSxJQUFJLEVBQUV0RSxNQUFSO0FBQWdCLGFBQVM7QUFBQSxXQUFPLEVBQVA7QUFBQTtBQUF6QixDQUFMLENBQTRDLENBQUEsRUNtTTVDTyxRQUFRLENBQUN3RSxTRG5NbUMsRUNtTXhCLFlEbk13QixFQ21NVixLQUFLLENEbk1LLENBQUE7O0FBQ1R4RixVQUFBLENBQUEsQ0FBbkMsZ0NBQUs7QUFBRStFLEVBQUFBLElBQUksRUFBRVcsTUFBUjtBQUFnQixhQUFTO0FBQXpCLENBQUwsQ0FBbUMsQ0FBQSxFQ3FNbkMxRSxRQUFRLENBQUN3RSxTRHJNMEIsRUNxTWYsV0RyTWUsRUNxTUYsS0FBSyxDRHJNSCxDQUFBOztBQUNvQ3hGLFVBQUEsQ0FBQSxDQUF2RSxnQ0FBSztBQUFFK0UsRUFBQUEsSUFBSSxFQUFFdEUsTUFBUjtBQUFnQixhQUFTO0FBQUEsV0FBTztBQUFFLGtCQUFVLEVBQVo7QUFBZ0I0QyxNQUFBQSxPQUFPLEVBQUU7QUFBekIsS0FBUDtBQUFBO0FBQXpCLENBQUwsQ0FBdUUsQ0FBQSxFQ3VNdkVyQyxRQUFRLENBQUN3RSxTRHZNOEQsRUN1TW5ELFlEdk1tRCxFQ3VNckMsS0FBSyxDRHZNZ0MsQ0FBQTs7QUFDQXhGLFVBQUEsQ0FBQSxDQUF2RSxnQ0FBSztBQUFFK0UsRUFBQUEsSUFBSSxFQUFFdEUsTUFBUjtBQUFnQixhQUFTO0FBQUEsV0FBTztBQUFFLGtCQUFVLEVBQVo7QUFBZ0I0QyxNQUFBQSxPQUFPLEVBQUU7QUFBekIsS0FBUDtBQUFBO0FBQXpCLENBQUwsQ0FBdUUsQ0FBQSxFQ3lNdkVyQyxRQUFRLENBQUN3RSxTRHpNOEQsRUN5TW5ELGFEek1tRCxFQ3lNcEMsS0FBSyxDRHpNK0IsQ0FBQTs7QUF5Q3hFeEYsVUFBQSxDQUFBLENBREMsaUNBQU0sT0FBTixDQUNELENBQUEsRUNtS0NnQixRQUFRLENBQUN3RSxTRG5LVixFQ21LcUIsbUJEbktyQixFQ21LMEMsSURuSzFDLENBQUE7O0FBakRXLG1CQUFBeEUsUUFBUSxHQUFBaEIsVUFBQSxDQUFBLENBRHBCMkYsK0JBQ29CLENBQUEsRUFBUjNFLFFBQVEsQ0FBUjtnQkFtVkVBLFEiLCJmaWxlIjoiUmlza0luZm8vX2RlcHJlY2F0ZS5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwidmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xuaW1wb3J0IHsgQ29tcG9uZW50LCBWdWUsIFByb3AsIFdhdGNoLCBNb2RlbCB9IGZyb20gJ3Z1ZS1wcm9wZXJ0eS1kZWNvcmF0b3InO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnLi4vdXRpbHMvY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBWRGlhbG9nLCBWQ2FyZCwgVkNhcmRUZXh0LCBWQ2FyZEFjdGlvbnMsIFZDYXJkVGl0bGUgfSBmcm9tICd2dWV0aWZ5L2xpYic7XG5pbXBvcnQgeyBGQnV0dG9uIH0gZnJvbSAnQGZveG9uZS91aWtpdC9zcmMvY29tcG9uZW50cy9GQnV0dG9uJztcbmxldCBSaXNrSW5mbyA9IGNsYXNzIFJpc2tJbmZvIGV4dGVuZHMgVnVlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5pc0NvbnRpbnVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNTaG93ID0gZmFsc2U7XG4gICAgICAgIHRoaXMudGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBnZXQgaGFzQXNzZXRzKCkge1xuICAgICAgICBsZXQgcmVzID0gZmFsc2U7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXMgPSB0aGlzLmFzc2V0TGVmdCAmJiBKU09OLnN0cmluZ2lmeSh0aGlzLmFzc2V0TGVmdCkgIT09ICd7fScgJiYgdGhpcy5hc3NldFJpZ2h0ICYmIEpTT04uc3RyaW5naWZ5KHRoaXMuYXNzZXRSaWdodCkgIT09ICd7fSc7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBvbkNvdW50RG93bigpIHtcbiAgICAgICAgaWYgKHRoaXMuY291bnQgPT09IHZvaWQgMClcbiAgICAgICAgICAgIHRoaXMuY291bnQgPSB0aGlzLmNvdW50ZG93bjtcbiAgICAgICAgaWYgKHRoaXMuY291bnQgPD0gMCkge1xuICAgICAgICAgICAgdGhpcy50aW1lciA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb3VudC0tO1xuICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy4kZm9yY2VVcGRhdGUoKSk7XG4gICAgICAgICAgICB0aGlzLm9uQ291bnREb3duKCk7XG4gICAgICAgIH0sIDEwMDApO1xuICAgIH1cbiAgICByZXNldFRpbWVyKCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMudGltZXIgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb3VudCA9IHZvaWQgMDtcbiAgICAgICAgfSwgMzAwKTtcbiAgICB9XG4gICAgaGFuZGxlVmFsdWVDaGFuZ2UodmFsKSB7XG4gICAgICAgIHRoaXMuaXNTaG93ID0gdmFsO1xuICAgICAgICBpZiAodmFsICYmIHRoaXMudGltZXIgPT09IG51bGwpXG4gICAgICAgICAgICB0aGlzLm9uQ291bnREb3duKCk7XG4gICAgfVxuICAgIGNyZWF0ZWQoKSB7XG4gICAgICAgIHRoaXMuaXNTaG93ID0gdGhpcy52YWx1ZTtcbiAgICB9XG4gICAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMudGltZXIpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcbiAgICAgICAgICAgIHRoaXMudGltZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbmRlcihoKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZywgX2gsIF9qLCBfaywgX2wsIF9tO1xuICAgICAgICBjb25zdCBhY3RpdmF0b3IgPSB0aGlzLiRzY29wZWRTbG90cy5hY3RpdmF0b3I7XG4gICAgICAgIGNvbnN0IGN1c3RvbUNvbnRpbnVlVGV4dCA9IChfYSA9IHRoaXMuY3VzdG9tVGV4dC5jb250aW51ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge307XG4gICAgICAgIGNvbnN0IGN1c3RvbUNvbmZpcm1UZXh0ID0gKF9iID0gdGhpcy5jdXN0b21UZXh0LmNvbmZpcm0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHt9O1xuICAgICAgICBjb25zdCBjdXN0b21Db250aW51ZUNvbG9yID0gKF9jID0gdGhpcy5jdXN0b21Db2xvci5jb250aW51ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDoge307XG4gICAgICAgIGNvbnN0IGN1c3RvbUNvbmZpcm1Db2xvciA9IChfZCA9IHRoaXMuY3VzdG9tQ29sb3IuY29uZmlybSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDoge307XG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBjbGFzc25hbWVzKCdyaXNrLWluZm8nKTtcbiAgICAgICAgcmV0dXJuIGgoVkRpYWxvZywge1xuICAgICAgICAgICAgc2NvcGVkU2xvdHM6IHtcbiAgICAgICAgICAgICAgICBhY3RpdmF0b3I6ICh7IG9uLCBhdHRycyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoYWN0aXZhdG9yICYmIGFjdGl2YXRvcih7IG9uLCBhdHRycyB9KSkgfHwgbnVsbDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuaXNTaG93LFxuICAgICAgICAgICAgICAgICdjb250ZW50LWNsYXNzJzogY2xhc3Nlcyh2b2lkIDAsIHRoaXMuY2xhc3NOYW1lKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgaW5wdXQ6ICh2YWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbCAmJiB0aGlzLnRpbWVyID09PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNvdW50RG93bigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2hvdyA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSwgW1xuICAgICAgICAgICAgaChWQ2FyZCwge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBjbGFzc2VzKCdjYXJkJyksXG4gICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgaChWQ2FyZFRpdGxlLCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBjbGFzc2VzKCdjYXJkLXRpdGxlJywgJ2p1c3RpZnktY2VudGVyJyksXG4gICAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgICAgICBoKCdkaXYnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogY2xhc3NlcygndGl0bGUnLCAnZi1ncmV5c2NhbGUtMSBmLXRpdGxlLTEnKVxuICAgICAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQ29udGludWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGN1c3RvbUNvbmZpcm1UZXh0LnRpdGxlIHx8ICdXYXJuaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY3VzdG9tQ29udGludWVUZXh0LnRpdGxlIHx8ICdDb25maXJtIHRyYW5zYWN0aW9uJ1xuICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgIGgoVkNhcmRUZXh0LCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAncGEtMCBweC04J1xuICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NvbnRpbnVlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGgoJ2RpdicsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogJ2QtZmxleCBqdXN0aWZ5LWNlbnRlcidcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoKCdkaXYnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAndGV4dC1jZW50ZXIgZi1ib2R5LTEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgW2N1c3RvbUNvbmZpcm1UZXh0LmNvbnRlbnQgfHwgJ09uY2UgdGhlIHRyYW5zYWN0aW9uIGlzIGV4ZWN1dGVkLCBpdCBpcyBpcnJldm9jYWJsZSwgcGxlYXNlIHBheSBhZnRlciBjb25maXJtYXRpb24gY2FyZWZ1bGx5LiddKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaCgnZGl2Jywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAnZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWNlbnRlcidcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoKCdkaXYnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBjbGFzc2VzKCdoaWdobGlnaHQnLCAncGEtNCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoKCdoMycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBjbGFzc2VzKCdoaWdobGlnaHQtdGV4dCcsICdmLXRpdGxlLTMnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAoX2YgPSAoX2UgPSBjdXN0b21Db250aW51ZVRleHQuaGlnaGxpZ2h0cykgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lWzBdKSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiAnUHJpY2UgaW1wYWN0IHJlYWNoZWQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCgnaDMnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogY2xhc3NlcygnaGlnaGxpZ2h0LWltcGFjdCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMuaW1wYWN0IHx8ICclJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgoJ2g0Jywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IGNsYXNzZXMoJ2hpZ2hsaWdodC10ZXh0JywgJ2YtdGl0bGUtMycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIChfaCA9IChfZyA9IGN1c3RvbUNvbnRpbnVlVGV4dC5oaWdobGlnaHRzKSA9PT0gbnVsbCB8fCBfZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2dbMV0pICE9PSBudWxsICYmIF9oICE9PSB2b2lkIDAgPyBfaCA6ICdJdCBtYXkgY2F1c2UgYSBzZXJpb3VzIHJlc3VsdC4nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzQXNzZXRzID8gaCgnZGl2Jywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogY2xhc3NlcygnYXNzZXRzJywgJ2QtZmxleCBqdXN0aWZ5LXNwYWNlLWJldHdlZW4gbXQtNicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoKCdkaXYnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogY2xhc3NlcygnYXNzZXRzLWxlZnQnLCAnZC1pbmxpbmUtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWxlZnQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoKCdzcGFuJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBjbGFzc2VzKCdhc3NldHMtbGVmdC1zeW1ib2wnLCAnZi1ncmV5c2NhbGUtMSBmLWJvZHktMicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBbKF9qID0gdGhpcy5hc3NldExlZnQpID09PSBudWxsIHx8IF9qID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfai5zeW1ib2xdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgoJ3NwYW4nLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IGNsYXNzZXMoJ2Fzc2V0cy1sZWZ0LWFtb3VudCcsICdmLWdyZXlzY2FsZS0zIGYtY2FwdGlvbiB0ZXh0LXRydW5jYXRlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIFsoX2sgPSB0aGlzLmFzc2V0TGVmdCkgPT09IG51bGwgfHwgX2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9rLmFtb3VudF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoKCdkaXYnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogY2xhc3NlcygnYXNzZXRzLXJpZ2h0JywgJ2QtaW5saW5lLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jZW50ZXInKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoKCdzcGFuJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBjbGFzc2VzKCdhc3NldHMtcmlnaHQtc3ltYm9sJywgJ2YtZ3JleXNjYWxlLTEgZi1ib2R5LTInKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgWyhfbCA9IHRoaXMuYXNzZXRSaWdodCkgPT09IG51bGwgfHwgX2wgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9sLnN5bWJvbF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCgnc3BhbicsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogY2xhc3NlcygnYXNzZXRzLXJpZ2h0LWFtb3VudCcsICdmLWdyZXlzY2FsZS0zIGYtY2FwdGlvbiB0ZXh0LXRydW5jYXRlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIFsoX20gPSB0aGlzLmFzc2V0UmlnaHQpID09PSBudWxsIHx8IF9tID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbS5hbW91bnRdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICBoKFZDYXJkQWN0aW9ucywge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogJ210LTYgcGEtMCBhbGlnbi1jZW50ZXIganVzdGlmeS1jZW50ZXInXG4gICAgICAgICAgICAgICAgfSwgW1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQ29udGludWVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaCgnZGl2Jywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiAnZC1mbGV4IGFsaWduLWNlbnRlcidcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoKEZCdXR0b24sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IGNsYXNzZXMoJ2FjdGlvbi1jb25maXJtLWJ0bi1jYW5jZWwnLCAncHQtNiBwYi04JyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogKGN1c3RvbUNvbmZpcm1Db2xvciA9PT0gbnVsbCB8fCBjdXN0b21Db25maXJtQ29sb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN1c3RvbUNvbmZpcm1Db2xvci5idG5fY2FuY2VsKSB8fCAnZi1ncmV5c2NhbGUtNidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1Nob3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnY2FuY2VsOmNvbmZpcm0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLmlzQ29udGludWUgPSBmYWxzZSksIDMwMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAoY3VzdG9tQ29uZmlybVRleHQgPT09IG51bGwgfHwgY3VzdG9tQ29uZmlybVRleHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN1c3RvbUNvbmZpcm1UZXh0LmJ0bl9jYW5jZWwpIHx8ICdDYW5jZWwnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoKEZCdXR0b24sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IGNsYXNzZXMoJ2FjdGlvbi1jb25maXJtLWJ0bi1jb25maXJtJywgJ3B0LTYgcGItOCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IChjdXN0b21Db25maXJtQ29sb3IgPT09IG51bGwgfHwgY3VzdG9tQ29uZmlybUNvbG9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdXN0b21Db25maXJtQ29sb3IuYnRuX2NvbmZpcm0pIHx8ICdlcnJvcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1Nob3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnY29uZmlybScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gKHRoaXMuaXNDb250aW51ZSA9IGZhbHNlKSwgMzAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIChjdXN0b21Db25maXJtVGV4dCA9PT0gbnVsbCB8fCBjdXN0b21Db25maXJtVGV4dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3VzdG9tQ29uZmlybVRleHQuYnRuX2NvbmZpcm0pIHx8ICdDb25maXJtJylcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGgoJ2RpdicsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogJ2QtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1jZW50ZXIganVzdGlmeS1jZW50ZXInXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaChGQnV0dG9uLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBjbGFzc2VzKCdhY3Rpb24tY29udGludWUtYnRuLWNhbmNlbCcsICdmLWdyZXlzY2FsZS02JyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogKGN1c3RvbUNvbnRpbnVlQ29sb3IgPT09IG51bGwgfHwgY3VzdG9tQ29udGludWVDb2xvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3VzdG9tQ29udGludWVDb2xvci5idG5fY2FuY2VsKSB8fCAncGluaydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1Nob3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnY2FuY2VsOmNvbnRpbnVlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAoY3VzdG9tQ29udGludWVUZXh0ID09PSBudWxsIHx8IGN1c3RvbUNvbnRpbnVlVGV4dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3VzdG9tQ29udGludWVUZXh0LmJ0bl9jYW5jZWwpIHx8ICdDYW5jZWwnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoKEZCdXR0b24sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IGNsYXNzZXMoJ2FjdGlvbi1jb250aW51ZS1idG4tY29udGludWUnLCAncHktOCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuY291bnQgPiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogKGN1c3RvbUNvbnRpbnVlQ29sb3IgPT09IG51bGwgfHwgY3VzdG9tQ29udGludWVDb2xvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3VzdG9tQ29udGludWVDb2xvci5idG5fY29udGludWUpIHx8ICdmLWdyZXlzY2FsZS0xJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQ29udGludWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2NvbnRpbnVlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBgJHsoY3VzdG9tQ29udGludWVUZXh0ID09PSBudWxsIHx8IGN1c3RvbUNvbnRpbnVlVGV4dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3VzdG9tQ29udGludWVUZXh0LmJ0bl9jb250aW51ZSkgfHwgJ0NvbnRpbnVlJ30ke3RoaXMuY291bnQgPiAwID8gYCgke3RoaXMuY291bnR9cylgIDogJyd9YC50cmltKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdKVxuICAgICAgICBdKTtcbiAgICB9XG59O1xuX19kZWNvcmF0ZShbXG4gICAgTW9kZWwoJ2NoYW5nZScsIHsgZGVmYXVsdDogZmFsc2UgfSlcbl0sIFJpc2tJbmZvLnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgUHJvcCh7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSlcbl0sIFJpc2tJbmZvLnByb3RvdHlwZSwgXCJjbGFzc05hbWVcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIFByb3AoeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICc/JScgfSlcbl0sIFJpc2tJbmZvLnByb3RvdHlwZSwgXCJpbXBhY3RcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIFByb3AoeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSlcbl0sIFJpc2tJbmZvLnByb3RvdHlwZSwgXCJhc3NldExlZnRcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIFByb3AoeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSlcbl0sIFJpc2tJbmZvLnByb3RvdHlwZSwgXCJhc3NldFJpZ2h0XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBQcm9wKHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH0pXG5dLCBSaXNrSW5mby5wcm90b3R5cGUsIFwiY291bnRkb3duXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBQcm9wKHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoeyBjb250aW51ZToge30sIGNvbmZpcm06IHt9IH0pIH0pXG5dLCBSaXNrSW5mby5wcm90b3R5cGUsIFwiY3VzdG9tVGV4dFwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgUHJvcCh7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHsgY29udGludWU6IHt9LCBjb25maXJtOiB7fSB9KSB9KVxuXSwgUmlza0luZm8ucHJvdG90eXBlLCBcImN1c3RvbUNvbG9yXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBXYXRjaCgndmFsdWUnKVxuXSwgUmlza0luZm8ucHJvdG90eXBlLCBcImhhbmRsZVZhbHVlQ2hhbmdlXCIsIG51bGwpO1xuUmlza0luZm8gPSBfX2RlY29yYXRlKFtcbiAgICBDb21wb25lbnRcbl0sIFJpc2tJbmZvKTtcbmV4cG9ydCB7IFJpc2tJbmZvIH07XG5leHBvcnQgZGVmYXVsdCBSaXNrSW5mbzsiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9